From 7cf73daafb139c05387df5d212fd021677d9936a Mon Sep 17 00:00:00 2001 From: Gerrit Birkeland Date: Sun, 12 Jan 2020 12:22:22 -0700 Subject: [PATCH] fix!: Programatic usage should be able to use option readers Closes #1162 --- bin/typedoc | 5 +++-- scripts/rebuild_specs.js | 3 ++- src/index.ts | 6 +++++- src/lib/application.ts | 8 ++++---- src/lib/cli.ts | 2 +- src/lib/utils/options/index.ts | 1 + src/lib/utils/options/options.ts | 8 ++++++++ src/test/converter.test.ts | 3 ++- src/test/plugin-host.test.ts | 3 ++- src/test/renderer.test.ts | 3 ++- 10 files changed, 30 insertions(+), 12 deletions(-) diff --git a/bin/typedoc b/bin/typedoc index a16b2a94d..7009c9e27 100755 --- a/bin/typedoc +++ b/bin/typedoc @@ -1,4 +1,5 @@ #!/usr/bin/env node -var td = require('../dist/lib/cli.js'); -new td.CliApplication(); +const td = require('../dist/lib/cli.js'); +const app = new td.CliApplication(); +app.bootstrap(); diff --git a/scripts/rebuild_specs.js b/scripts/rebuild_specs.js index bb9d50990..46e599d66 100644 --- a/scripts/rebuild_specs.js +++ b/scripts/rebuild_specs.js @@ -6,7 +6,8 @@ const path = require('path'); const TypeDoc = require('..'); const ts = require('typescript'); -const app = new TypeDoc.Application({ +const app = new TypeDoc.Application(); +app.bootstrap({ mode: 'Modules', target: ts.ScriptTarget.ES5, module: ts.ModuleKind.CommonJS, diff --git a/src/index.ts b/src/index.ts index 150fcbf29..1a04aaf8a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,7 +18,11 @@ export { ParameterHint, ParameterScope, ParameterType, - TypeDocOptions + TypeDocOptions, + + TSConfigReader, + TypeDocReader, + ArgumentsReader } from './lib/utils/options'; export { JSONOutput } from './lib/serialization'; diff --git a/src/lib/application.ts b/src/lib/application.ts index 53109636c..daab48cf7 100644 --- a/src/lib/application.ts +++ b/src/lib/application.ts @@ -127,7 +127,7 @@ export class Application extends ChildableComponent< * * @param options An object containing the options that should be used. */ - constructor(options?: Partial) { + constructor() { super(DUMMY_APPLICATION_OWNER); this.logger = new ConsoleLogger(); @@ -137,8 +137,6 @@ export class Application extends ChildableComponent< this.converter = this.addComponent('converter', Converter); this.renderer = this.addComponent('renderer', Renderer); this.plugins = this.addComponent('plugins', PluginHost); - - this.bootstrap(options); } /** @@ -146,15 +144,17 @@ export class Application extends ChildableComponent< * * @param options The desired options to set. */ - protected bootstrap(options: Partial = {}): { hasErrors: boolean, inputFiles: string[] } { + bootstrap(options: Partial = {}): { hasErrors: boolean, inputFiles: string[] } { this.options.setValues(options); // Ignore result, plugins might declare an option this.options.read(new Logger()); const logger = this.loggerType; if (typeof logger === 'function') { this.logger = new CallbackLogger( logger); + this.options.setLogger(this.logger); } else if (logger === 'none') { this.logger = new Logger(); + this.options.setLogger(this.logger); } this.plugins.load(); diff --git a/src/lib/cli.ts b/src/lib/cli.ts index 890916197..2dfc8b5c5 100644 --- a/src/lib/cli.ts +++ b/src/lib/cli.ts @@ -49,7 +49,7 @@ export class CliApplication extends Application { /** * Run TypeDoc from the command line. */ - protected bootstrap(options?: Partial) { + bootstrap(options?: Partial) { this.options.addReader(new ArgumentsReader(0)); this.options.addReader(new TypeDocReader()); this.options.addReader(new TSConfigReader()); diff --git a/src/lib/utils/options/index.ts b/src/lib/utils/options/index.ts index 695969d59..31dbeb43b 100644 --- a/src/lib/utils/options/index.ts +++ b/src/lib/utils/options/index.ts @@ -1,3 +1,4 @@ export { Options, OptionsReader } from './options'; export { Option } from './sources'; +export { ArgumentsReader, TypeDocReader, TSConfigReader } from './readers'; export { TypeDocOptions, ParameterType, ParameterHint, ParameterScope } from './declaration'; diff --git a/src/lib/utils/options/options.ts b/src/lib/utils/options/options.ts index 8f9f3696e..92d09edae 100644 --- a/src/lib/utils/options/options.ts +++ b/src/lib/utils/options/options.ts @@ -87,6 +87,14 @@ export class Options { this._logger = logger; } + /** + * Sets the logger used when an option declaration fails to be added. + * @param logger + */ + setLogger(logger: Logger) { + this._logger = logger; + } + /** * Adds the option declarations declared by TypeDoc's `@Option` decorator * and all supported TypeScript declarations. diff --git a/src/test/converter.test.ts b/src/test/converter.test.ts index 6df2a0fe6..d8c930137 100644 --- a/src/test/converter.test.ts +++ b/src/test/converter.test.ts @@ -7,7 +7,8 @@ import { ScriptTarget, ModuleKind, JsxEmit } from 'typescript'; describe('Converter', function() { const base = Path.join(__dirname, 'converter'); - const app = new Application({ + const app = new Application(); + app.bootstrap({ mode: SourceFileMode.Modules, logger: 'none', target: ScriptTarget.ES5, diff --git a/src/test/plugin-host.test.ts b/src/test/plugin-host.test.ts index b7e5db706..140af2792 100644 --- a/src/test/plugin-host.test.ts +++ b/src/test/plugin-host.test.ts @@ -17,7 +17,8 @@ describe('PluginHost', function () { }); it('parses plugins correctly', function () { - let app = new Application({ + const app = new Application(); + app.bootstrap({ plugin: ['typedoc-plugin-1', 'typedoc-plugin-2'] }); diff --git a/src/test/renderer.test.ts b/src/test/renderer.test.ts index f38e84a1c..236d7c8c1 100644 --- a/src/test/renderer.test.ts +++ b/src/test/renderer.test.ts @@ -56,7 +56,8 @@ describe('Renderer', function() { }); it('constructs', function() { - app = new Application({ + app = new Application(); + app.bootstrap({ mode: 'Modules', logger: 'console', target: ScriptTarget.ES5,