From b20f89a0ca1d31cb3c95f377b98196d3b87517cd Mon Sep 17 00:00:00 2001 From: Daniel Schaffer Date: Sun, 17 Mar 2019 16:02:51 -0700 Subject: [PATCH] 46 --- .../dandi-contrib/data-pg/src/pg-db-client.ts | 4 +-- .../data-pg/src/pg-db-transaction-client.ts | 4 +-- .../dandi/model-builder/src/model-builder.ts | 24 +++++++++++++++ .../src/plugin.ts | 29 +++++++++++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/packages/dandi-contrib/data-pg/src/pg-db-client.ts b/packages/dandi-contrib/data-pg/src/pg-db-client.ts index ddf04ef3..96c9061f 100644 --- a/packages/dandi-contrib/data-pg/src/pg-db-client.ts +++ b/packages/dandi-contrib/data-pg/src/pg-db-client.ts @@ -13,14 +13,14 @@ export class PgDbClient extends PgDbQueryableBase implements DbClient, constructor( @Inject(PgDbPool) private pool: PgDbPool, - @Inject(ModelBuilder) modelValidator: ModelBuilder, + @Inject(ModelBuilder) modelBuilder: ModelBuilder, @Inject(Injector) private injector: Injector, @Inject(Logger) private logger: Logger, @Inject(PgDbModelBuilderOptions) @Optional() modelBuilderOptions?: ModelBuilderOptions, ) { - super(modelValidator, modelBuilderOptions) + super(modelBuilder, modelBuilderOptions) } public query(cmd: string, ...args: any[]): Promise { diff --git a/packages/dandi-contrib/data-pg/src/pg-db-transaction-client.ts b/packages/dandi-contrib/data-pg/src/pg-db-transaction-client.ts index 9d5ab13e..73bd7413 100644 --- a/packages/dandi-contrib/data-pg/src/pg-db-transaction-client.ts +++ b/packages/dandi-contrib/data-pg/src/pg-db-transaction-client.ts @@ -61,13 +61,13 @@ export class PgDbTransactionClient extends PgDbQueryableBase imp constructor( @Inject(PgDbPoolClient) client: PgDbPoolClient, - @Inject(ModelBuilder) modelValidator: ModelBuilder, + @Inject(ModelBuilder) modelBuilder: ModelBuilder, @Inject(Logger) private logger: Logger, @Inject(PgDbModelBuilderOptions) @Optional() modelBuilderOptions?: ModelBuilderOptions, ) { - super(modelValidator, modelBuilderOptions) + super(modelBuilder, modelBuilderOptions) this.mutex = AsyncMutex.for(client) } diff --git a/packages/dandi/model-builder/src/model-builder.ts b/packages/dandi/model-builder/src/model-builder.ts index 13fb8741..a3e9bbb4 100644 --- a/packages/dandi/model-builder/src/model-builder.ts +++ b/packages/dandi/model-builder/src/model-builder.ts @@ -6,16 +6,40 @@ import { DataTransformer, KeyTransformFn } from './data-transformer' import { localOpinionatedToken } from './local-token' import { ModelValidator } from './model-validator' +/** + * Options for customizing behavior of [[ModelBuilder.constructMember]] + */ export interface MemberBuilderOptions { + /** + * An array of [[ModelValidator]]s the check constructed objects against + */ validators?: ModelValidator[] + + /** + * A [[KeyTransformFn]] that will be used to transform keys of the source object before constructing the model + */ keyTransform?: KeyTransformFn } +/** + * Options for customizing behavior of [[ModelBuilder]] services. + */ export interface ModelBuilderOptions extends MemberBuilderOptions { + /** + * An array of [[DataTransformer]]s that will be run against source objects before constructing a model + */ dataTransformers?: DataTransformer[] } +/** + * A utility that allows creating [[Provider]] objects for [[ModelBuilderOptions]] + */ export const ModelBuilderOptions = { + /** + * Creates a [[Provider]] object using the specified `token` and `options` object. + * @param token + * @param options + */ provider(token: InjectionToken, options: ModelBuilderOptions): Provider { return { provide: token, diff --git a/util/typedoc/typedoc-plugin-module-name-by-package/src/plugin.ts b/util/typedoc/typedoc-plugin-module-name-by-package/src/plugin.ts index 71d1d988..c3f9f90f 100644 --- a/util/typedoc/typedoc-plugin-module-name-by-package/src/plugin.ts +++ b/util/typedoc/typedoc-plugin-module-name-by-package/src/plugin.ts @@ -160,6 +160,34 @@ export class ModuleNameByPackagePlugin extends ConverterComponent { }) } + execOnCommentText(module: Reflection, fn: (module: Reflection, text: string) => string): void { + if (!module.comment || !module.comment.hasVisibleComponent()) { + return + } + if (module.comment.text) { + module.comment.text = fn(module, module.comment.text) + } + if (module.comment.shortText) { + module.comment.shortText = fn(module, module.comment.shortText) + } + if (module.comment.returns) { + module.comment.returns = fn(module, module.comment.returns) + } + if (module.comment.tags) { + // auto-import README.md content for each package + module.comment.tags.forEach(tag => { + tag.text = fn(module, tag.text) + }) + } + } + + fixGenericCommentReferences(module: Reflection, text: string): string { + return text.replace(/\[\[\w+<\w+>]]/g, typeRef => + typeRef.replace(/\[\[(\w+)<(\w+)>]]/, (match, type, gType) => + `[[${type}]]<[[${gType}]]>` + )) + } + onResolveBegin(context: Context) { this.fixProjectMarkdownPaths(context.project) const packageModules = [...this.packageModules.values()] @@ -169,6 +197,7 @@ export class ModuleNameByPackagePlugin extends ConverterComponent { for(const ref of Object.values(context.project.reflections)) { this.importIncludedMarkdown(ref) + this.execOnCommentText(ref, this.fixGenericCommentReferences) // rename decorators if (this.isDecorator(ref)) {