From b4220d471c9ebb87679437e979345086df9724ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Sat, 6 Aug 2022 18:32:07 +0800 Subject: [PATCH] feat(vue-component-meta): expose more infos (#1674) Co-authored-by: johnsoncodehk --- packages/vue-component-meta/src/index.ts | 19 ++++++++++++++----- packages/vue-component-meta/src/types.ts | 7 ++++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/vue-component-meta/src/index.ts b/packages/vue-component-meta/src/index.ts index 6063a2cae..f284261f9 100644 --- a/packages/vue-component-meta/src/index.ts +++ b/packages/vue-component-meta/src/index.ts @@ -102,6 +102,11 @@ export function createComponentMetaChecker(tsconfigPath: string, checkerOptions: return { getExportNames, getComponentMeta, + __internal__: { + program, + tsLs, + typeChecker, + }, }; function getMetaFileName(fileName: string) { @@ -152,7 +157,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 +215,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 +236,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 +256,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 +305,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 +346,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 +357,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 +369,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 +383,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; }