From 333f268397e89b89845036856f576a3f1f3f02f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Fri, 5 Aug 2022 04:02:19 +0800 Subject: [PATCH 1/2] feat(vue-component-meta): expose more infos --- packages/vue-component-meta/src/index.ts | 17 ++++++++++++----- packages/vue-component-meta/src/types.ts | 7 ++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/vue-component-meta/src/index.ts b/packages/vue-component-meta/src/index.ts index 6063a2cae..5b075acd6 100644 --- a/packages/vue-component-meta/src/index.ts +++ b/packages/vue-component-meta/src/index.ts @@ -100,6 +100,9 @@ export function createComponentMetaChecker(tsconfigPath: string, checkerOptions: globalPropNames = getComponentMeta(globalComponentName).props.map(prop => prop.name); return { + program, + tsLs, + typeChecker, getExportNames, getComponentMeta, }; @@ -152,7 +155,7 @@ export function createComponentMetaChecker(tsconfigPath: string, checkerOptions: .map((prop) => { const { resolveNestedProperties, - } = createSchemaResolvers(typeChecker, symbolNode!, checkerOptions.schema); + } = createSchemaResolvers(typeChecker, symbolNode!, checkerOptions); return resolveNestedProperties(prop); }) @@ -210,7 +213,7 @@ export function createComponentMetaChecker(tsconfigPath: string, checkerOptions: const { resolveEventSignature, - } = createSchemaResolvers(typeChecker, symbolNode!, checkerOptions.schema); + } = createSchemaResolvers(typeChecker, symbolNode!, checkerOptions); return resolveEventSignature(call); }).filter(event => event.name); @@ -231,7 +234,7 @@ export function createComponentMetaChecker(tsconfigPath: string, checkerOptions: return properties.map((prop) => { const { resolveSlotProperties, - } = createSchemaResolvers(typeChecker, symbolNode!, checkerOptions.schema); + } = createSchemaResolvers(typeChecker, symbolNode!, checkerOptions); return resolveSlotProperties(prop); }); @@ -251,7 +254,7 @@ export function createComponentMetaChecker(tsconfigPath: string, checkerOptions: return exposed.map((prop) => { const { resolveExposedProperties, - } = createSchemaResolvers(typeChecker, symbolNode!, checkerOptions.schema); + } = createSchemaResolvers(typeChecker, symbolNode!, checkerOptions); return resolveExposedProperties(prop); }); @@ -300,7 +303,7 @@ export function createComponentMetaChecker(tsconfigPath: string, checkerOptions: } } -function createSchemaResolvers(typeChecker: ts.TypeChecker, symbolNode: ts.Expression, options: MetaCheckerSchemaOptions = false) { +function createSchemaResolvers(typeChecker: ts.TypeChecker, symbolNode: ts.Expression, { rawType, schema: options }: MetaCheckerOptions) { const enabled = !!options; const ignore = typeof options === 'object' ? [...options?.ignore ?? []] : []; @@ -341,6 +344,7 @@ function createSchemaResolvers(typeChecker: ts.TypeChecker, symbolNode: ts.Expre })), required: !Boolean((prop.declarations?.[0] as ts.ParameterDeclaration)?.questionToken ?? false), type: typeChecker.typeToString(subtype), + rawType: rawType ? subtype : undefined, schema, }; } @@ -351,6 +355,7 @@ function createSchemaResolvers(typeChecker: ts.TypeChecker, symbolNode: ts.Expre return { name: prop.getName(), type: typeChecker.typeToString(subtype), + rawType: rawType ? subtype : undefined, description: ts.displayPartsToString(prop.getDocumentationComment(typeChecker)), schema, }; @@ -362,6 +367,7 @@ function createSchemaResolvers(typeChecker: ts.TypeChecker, symbolNode: ts.Expre return { name: expose.getName(), type: typeChecker.typeToString(subtype), + rawType: rawType ? subtype : undefined, description: ts.displayPartsToString(expose.getDocumentationComment(typeChecker)), schema, }; @@ -375,6 +381,7 @@ function createSchemaResolvers(typeChecker: ts.TypeChecker, symbolNode: ts.Expre return { name: (typeChecker.getTypeOfSymbolAtLocation(call.parameters[0], symbolNode!) as ts.StringLiteralType).value, type: typeChecker.typeToString(subtype), + rawType: rawType ? subtype : undefined, signature: typeChecker.signatureToString(call), schema, }; diff --git a/packages/vue-component-meta/src/types.ts b/packages/vue-component-meta/src/types.ts index c1fd4644f..2d47af918 100644 --- a/packages/vue-component-meta/src/types.ts +++ b/packages/vue-component-meta/src/types.ts @@ -13,18 +13,21 @@ export interface PropertyMeta { global: boolean; required: boolean; type: string; + rawType?: ts.Type; tags: { name: string, text?: string; }[]; schema?: PropertyMetaSchema; }; export interface EventMeta { name: string; type: string; + rawType?: ts.Type; signature: string; schema?: PropertyMetaSchema[]; } export interface SlotMeta { name: string; type: string; + rawType?: ts.Type; description: string; schema?: PropertyMetaSchema; } @@ -32,6 +35,7 @@ export interface ExposeMeta { name: string; description: string; type: string; + rawType?: ts.Type; schema?: PropertyMetaSchema; } @@ -43,9 +47,10 @@ export type PropertyMetaSchema = string export type MetaCheckerSchemaOptions = boolean | { ignore?: string[]; -} +}; export interface MetaCheckerOptions { schema?: MetaCheckerSchemaOptions; forceUseTs?: boolean; printer?: import('typescript').PrinterOptions; + rawType?: boolean; } From cb62e770b3d53e3767d958b8fffa447351e7a127 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Sat, 6 Aug 2022 18:31:34 +0800 Subject: [PATCH 2/2] refactor: move program, tsLs, typeChecker to `__internal__` --- packages/vue-component-meta/src/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/vue-component-meta/src/index.ts b/packages/vue-component-meta/src/index.ts index 5b075acd6..f284261f9 100644 --- a/packages/vue-component-meta/src/index.ts +++ b/packages/vue-component-meta/src/index.ts @@ -100,11 +100,13 @@ export function createComponentMetaChecker(tsconfigPath: string, checkerOptions: globalPropNames = getComponentMeta(globalComponentName).props.map(prop => prop.name); return { - program, - tsLs, - typeChecker, getExportNames, getComponentMeta, + __internal__: { + program, + tsLs, + typeChecker, + }, }; function getMetaFileName(fileName: string) {