{"_id":"@dumijs/vue-meta","_rev":"5-dfc2cdf786e527c1796d36286368dee5","name":"@dumijs/vue-meta","dist-tags":{"next":"1.0.0-rc.0","latest":"2.4.14"},"versions":{"1.0.0-rc.0":{"name":"@dumijs/vue-meta","version":"1.0.0-rc.0","keywords":["vue","metadata","component"],"license":"MIT","_id":"@dumijs/vue-meta@1.0.0-rc.0","maintainers":[{"name":"peachscript","email":"scdzwyxst@gmail.com"}],"dist":{"shasum":"f1b9eed1bc208a195d9068f543e4e7f644167b8e","tarball":"https://registry.npmjs.org/@dumijs/vue-meta/-/vue-meta-1.0.0-rc.0.tgz","fileCount":33,"integrity":"sha512-oBnWLHKQ4Qfat8qhFMJNRpsWpRS2hy/5KTEj80wOQ3DETBUSd6O7rOa4lvr/vYxpIRb+FCgjD4xatDiyouBgSQ==","signatures":[{"sig":"MEYCIQC4Bd8zxBEItwPP/mX1D1/gId4Voz+C4QEQNJyXJqD4ZAIhAKLXxbnIiMx56as4HMNfM+1hsfbZlWTN7nzheH1bW+Vm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":128891},"main":"dist/cjs/index.js","_from":"file:dumijs-vue-meta-1.0.0-rc.0.tgz","types":"dist/cjs/index.d.ts","authors":["jeffwcx@icloud.com"],"scripts":{"dev":"father dev","test":"vitest","build":"father build","build:deps":"father prebundle"},"_npmUser":{"name":"peachscript","email":"scdzwyxst@gmail.com"},"_resolved":"/private/var/folders/l0/lc5qpfjn4fxgfpdsyw55zw500000gp/T/e326c1082037622887ac8a4e45a02913/dumijs-vue-meta-1.0.0-rc.0.tgz","_integrity":"sha512-oBnWLHKQ4Qfat8qhFMJNRpsWpRS2hy/5KTEj80wOQ3DETBUSd6O7rOa4lvr/vYxpIRb+FCgjD4xatDiyouBgSQ==","_npmVersion":"10.2.3","description":"Extracting the metadata of Vue components more effectively","directories":{},"_nodeVersion":"18.19.0","dependencies":{"typesafe-path":"^0.2.2","@volar/typescript":"^1.10.4","dumi-assets-types":"2.3.0-rc.0","@vue/language-core":"^1.8.19","vue-component-type-helpers":"^1.8.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","father":"^4.1.9","vue-types":"^5.1.1","typescript":"^5.2.2","eslint-plugin-vue":"^9.17.0"},"peerDependencies":{"typescript":"*"},"peerDependenciesMeta":{"typescript":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/vue-meta_1.0.0-rc.0_1712070609257_0.4404696315890255","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@dumijs/vue-meta","version":"1.0.0","keywords":["vue","metadata","component"],"license":"MIT","_id":"@dumijs/vue-meta@1.0.0","maintainers":[{"name":"peachscript","email":"scdzwyxst@gmail.com"}],"dist":{"shasum":"de42540e7af47e37e63a63d246796668e8e0b0c7","tarball":"https://registry.npmjs.org/@dumijs/vue-meta/-/vue-meta-1.0.0.tgz","fileCount":18,"integrity":"sha512-3a24O/U0+6IENRJwXDOTd02tdXLO4AdoYJhqfycnVxoHp4HmYgK5y1Q4ATIF0E87bkyaqWQjr0V8vfAIwV46vw==","signatures":[{"sig":"MEQCIGgYgvBWBaJydyQk20mKRYIbOPaEMCIpoC4ntJGTErehAiAd0uXljCy91kD3Yy+9OiGkimZw5EbPWd3PL3rmROm2BA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102990},"main":"dist/cjs/index.js","_from":"file:dumijs-vue-meta-1.0.0.tgz","types":"dist/cjs/index.d.ts","authors":["jeffwcx@icloud.com"],"scripts":{"dev":"father dev","test":"vitest","build":"father build","build:deps":"father prebundle"},"_npmUser":{"name":"peachscript","email":"scdzwyxst@gmail.com"},"_resolved":"/private/var/folders/l0/lc5qpfjn4fxgfpdsyw55zw500000gp/T/19c4dceb3d72cc863cd29aa8d9ea0a02/dumijs-vue-meta-1.0.0.tgz","_integrity":"sha512-3a24O/U0+6IENRJwXDOTd02tdXLO4AdoYJhqfycnVxoHp4HmYgK5y1Q4ATIF0E87bkyaqWQjr0V8vfAIwV46vw==","_npmVersion":"10.2.3","description":"Extracting the metadata of Vue components more effectively","directories":{},"_nodeVersion":"18.19.0","dependencies":{"typesafe-path":"^0.2.2","@volar/typescript":"^1.10.4","dumi-assets-types":"2.3.0","@vue/language-core":"^1.8.19","vue-component-type-helpers":"^1.8.27"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","father":"^4.1.9","vue-types":"^5.1.1","typescript":"^5.2.2","eslint-plugin-vue":"^9.17.0"},"peerDependencies":{"typescript":"*"},"peerDependenciesMeta":{"typescript":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/vue-meta_1.0.0_1714119819394_0.12524232445857297","host":"s3://npm-registry-packages"}},"2.4.14":{"name":"@dumijs/vue-meta","version":"2.4.14","keywords":["vue","metadata","component"],"license":"MIT","_id":"@dumijs/vue-meta@2.4.14","maintainers":[{"name":"yifankakaxi","email":"411140932@qq.com"},{"name":"peachscript","email":"scdzwyxst@gmail.com"}],"dist":{"shasum":"a61bc633a5303244171175dff79b3d9f25a1a716","tarball":"https://registry.npmjs.org/@dumijs/vue-meta/-/vue-meta-2.4.14.tgz","fileCount":33,"integrity":"sha512-W96TYC7B9OLTNeaL1H3ybi8yqr8UkzjSVGOMWNSCyvQa9nKoSguvE66sALN6BJR17xojMEQOhHKnSl4Gdi1AKg==","signatures":[{"sig":"MEQCIDy/xgr613k6kaOq3dkEixyI48zEix6zhmMNZ58xNS0MAiAbOTxdtgXxgYK7LseJ4kKZAEj/lCFfGK1qsos+drYCuA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":128883},"main":"dist/cjs/index.js","_from":"file:dumijs-vue-meta-2.4.14.tgz","types":"dist/cjs/index.d.ts","authors":["jeffwcx@icloud.com"],"scripts":{"dev":"father dev","test":"vitest","build":"father build","build:deps":"father prebundle"},"_npmUser":{"name":"yifankakaxi","email":"411140932@qq.com"},"_resolved":"/private/var/folders/bg/45txbn9s23z15bx3vhqt9y900000gn/T/bdf9002f185f946e7542c4257efea1f5/dumijs-vue-meta-2.4.14.tgz","_integrity":"sha512-W96TYC7B9OLTNeaL1H3ybi8yqr8UkzjSVGOMWNSCyvQa9nKoSguvE66sALN6BJR17xojMEQOhHKnSl4Gdi1AKg==","_npmVersion":"10.2.3","description":"Extracting the metadata of Vue components more effectively","directories":{},"_nodeVersion":"20.10.0","dependencies":{"typesafe-path":"^0.2.2","@volar/typescript":"^1.10.4","dumi-assets-types":"2.4.14","@vue/language-core":"^1.8.19","vue-component-type-helpers":"^2.0.21"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.3.4","father":"^4.1.9","vue-types":"^5.1.1","typescript":"^5.2.2","eslint-plugin-vue":"^9.17.0"},"peerDependencies":{"typescript":"*"},"peerDependenciesMeta":{"typescript":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/vue-meta_2.4.14_1732183466767_0.42459688449039046","host":"s3://npm-registry-packages"}}},"time":{"created":"2024-04-02T15:10:09.145Z","modified":"2026-07-03T10:47:01.736Z","1.0.0-rc.0":"2024-04-02T15:10:09.472Z","1.0.0":"2024-04-26T08:23:39.647Z","2.4.14":"2024-11-21T10:04:27.136Z"},"license":"MIT","keywords":["vue","metadata","component"],"description":"Extracting the metadata of Vue components more effectively","maintainers":[{"email":"scdzwyxst@gmail.com","name":"peachscript"},{"email":"411140932@qq.com","name":"yifankakaxi"},{"email":"zoomdong07@gmail.com","name":"zoomdong07"}],"readme":"# @dumijs/vue-meta\n\nExtracting the metadata of Vue components more effectively.\n\nThis project is heavily inspired by [vue-component-meta](https://github.com/vuejs/language-tools/tree/master/packages/component-meta), and reuses a significant amount of its code.\n\n## Install\n\n```bash\npnpm i @dumijs/vue-meta\n```\n\n## Usage\n\n`@dumijs/vue-meta` uses TypeScript's TypeChecker for metadata extraction.\n\n> \\[!NOTE]\n> When configuring tsconfig.json, set strictNullCheck to false\n>\n> ```json\n> {\n>   \"compilerOptions\": {\n>     \"strictNullChecks\": false\n>   }\n> }\n> ```\n\n```ts\nimport { createProject } from '@dumijs/vue-meta';\nimport * as path from 'path';\n\nconst projectRoot = '<project-root>';\nconst project = createProject({\n  rootPath: projectRoot,\n  // If tsconfigPath is not set, tsconfig will be <rootPath>/tsconfig.json\n  tsconfigPath: path.resolve(projectRoot, './tsconfig.json');\n});\n\nconst entry = path.resolve(projectRoot, './src/index.ts');\n\nconst meta = project.service.getComponentLibraryMeta(entry);\n\nmeta.components['Button'];\n\n// Reusable types, queried and referenced through `ref`\n// (`ref` is the md5 value calculated from the name of the file where the type is located and its type name.)\nmeta.types;\n```\n\nAfter updating the file locally, use `patchFiles` to update the file in memory, and TypeChecker will recheck.\n\n```ts\nproject.patchFiles([\n  {\n    action: 'add',\n    fileName: '...',\n    text: '...',\n  },\n  {\n    update: 'add',\n    fileName: '....',\n    text: '....',\n  },\n]);\n\n// Then you can get the new type metadata\nconst meta = project.service.getComponentLibraryMeta(entry);\n```\n\n## API\n\n<!-- start {API} -->\n\n### project\n\n#### createProject()\n\n<img style=\"display: inline-block; vertical-align: top;\" alt=\"Function\" src=\"https://img.shields.io/badge/Function-666eff?style=flat\"> Create a meta checker for Vue project with rootPath\n\nIf no parameters are passed in, tsconfig.json in the current workspace will be read.\n\n##### Type\n\n```typescript\nexport declare function createProject(rootPath?: string): Project;\n```\n\n##### Examples\n\n```ts\nimport { createProject } from '@dumijs/vue-meta';\ncreateProject();\n```\n\n##### Parameters\n\n- `rootPath` **_string_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-8e96aa?style=flat\">\n\n##### Returns [`Project`](#)\n\n#### createProject()\n\n<img style=\"display: inline-block; vertical-align: top;\" alt=\"Function\" src=\"https://img.shields.io/badge/Function-666eff?style=flat\"> Create a meta checker for Vue project by options\n\n##### Type\n\n```typescript\nexport declare function createProject(options: CheckerProjectOptions): Project;\n```\n\n##### Examples\n\n```ts\nimport { createProject } from '@dumijs/vue-meta';\n// Manually pass in the tsconfig.json path\ncreateProject({\n  // If neither rootPath nor tsconfigPath is set, rootPath will be process.cwd()\n  rootPath: '<project-root>',\n  // If tsconfigPath is not set, tsconfig will be <rootPath>/tsconfig.json\n  tsconfigPath: '<project-root>/tsconfig.json',\n  checkerOptions: {},\n});\n```\n\n##### Parameters\n\n- `options` [**_CheckerProjectOptions_**](#)\n\n##### Returns [`Project`](#)\n\n#### createProjectByJson()\n\n<img style=\"display: inline-block; vertical-align: top;\" alt=\"Function\" src=\"https://img.shields.io/badge/Function-666eff?style=flat\"> Create component metadata checker through json configuration\n\n##### Type\n\n```typescript\nexport declare function createProjectByJson(\n  options: CheckerProjectJsonOptions,\n): Project;\n```\n\n##### Parameters\n\n- `options` [**_CheckerProjectJsonOptions_**](#)\n\n##### Returns [`Project`](#)\n\n### options\n\n#### MetaCheckerOptions\n\n<img style=\"display: inline-block; vertical-align: top;\" alt=\"Interface\" src=\"https://img.shields.io/badge/Interface-666eff?style=flat\"> Checker Options\n\n##### Type\n\n```typescript\nexport interface MetaCheckerOptions extends MetaCheckerSchemaOptions\n```\n\n**Extends:** [**_MetaCheckerSchemaOptions_**](#metacheckerschemaoptions)\n\n##### Properties\n\n- [`disableGit`](#) **_boolean_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  Prohibit obtaining git repo URL, git revision, and other information through git commands, the default is false\n\n- [`disableSources`](#) **_boolean_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  Disable production of source links, the default is false\n\n- [`filterExposed`](#) **_boolean_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  Whether to enable filtering for exposed attributes, the default is true.\n\n  If true, only methods or properties identified by release tags like `@public` will be exposed in jsx\n\n- [`filterGlobalProps`](#) **_boolean_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  Whether to filter global props, the default is true\n\n  If it is true, global props in vue, such as key and ref, will be filtered out\n\n- [`forceUseTs`](#) **_boolean_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n- [`gitRemote`](#) **_string_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  Default is \"origin\"\n\n- [`gitRevision`](#) **_string_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  <https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection>\n\n- [`printer`](#) **_ts.PrinterOptions_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n- [`sourceLinkTemplate`](#) **_string_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  source link template, must be set when you set `disableGit`<!-- -->.\n\n  A typical template looks like this: `https://github.com/umijs/dumi/{gitRevision}/{path}#L{line}`<!-- -->.\n\n  The parser will replace the parts `{gitRevision|path|line}`\n\n#### MetaCheckerSchemaOptions\n\n<img style=\"display: inline-block; vertical-align: top;\" alt=\"Interface\" src=\"https://img.shields.io/badge/Interface-666eff?style=flat\"> Schema resolver options\n\n##### Type\n\n```typescript\nexport interface MetaCheckerSchemaOptions\n```\n\n##### Properties\n\n- [`disableExternalLinkAutoDectect`](#) **_boolean_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  By default, this option is false, the resolver will automatically capture the MDN links contained in the comments of all declaration files under node_modules/typescript/lib. Users do not need to configure externalSymbolLinkMappings themselves.\n\n  Of course, you can also overwrite the captured links through externalSymbolLinkMappings\n\n- [`exclude`](#) **_string |_** **_RegExp_** **_| (string |_** **_RegExp_**<!-- -->**_)\\[] | ((name: string) => boolean)_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  By default, type resolution in node_module will be abandoned.\n\n- [`externalSymbolLinkMappings`](#) **_Record_**<!-- -->**_\\<string,_** **_Record_**<!-- -->**_\\<string, string>>_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  The types/interfaces mapping method is provided as follows:\n\n  ```js\n  {\n    typescript: {\n      Promise:\n        'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise',\n    },\n  },\n  ```\n\n  For more complex mapping methods, please use `unknownSymbolResolvers`\n\n- [`ignore`](#) **_(string | ((name: string, type:_** **_ts.Type_**<!-- -->**_, typeChecker:_** **_ts.TypeChecker_**<!-- -->**_) => boolean | void | undefined | null))\\[]_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  A list of type names to be ignored in expending in schema. Can be functions to ignore types dynamically.\n\n- [`ignoreTypeArgs`](#) **_boolean_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  In addition to ignoring the type itself, whether to ignore the type parameters it carries. By default, the type parameters it carries will be parsed. For example, `Promise<{ a: string }>`<!-- -->, if you use option`exclude` or `ignore` to ignore `Promise`<!-- -->, `{ a: string }` will still be parsed by default.\n\n- [`propertyResovlers`](#) [**_PropertySchemaResolver_**](#propertyschemaresolver)<!-- -->**_<_**[**_PropertyMeta_**](#)<!-- -->**_>\\[]_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  Property schema resolvers for some special props definition methods, such as `vue-types`\n\n- [`unknownSymbolResolvers`](#) [**_UnknownSymbolResolver_**](#unknownsymbolresolver)<!-- -->**_\\[]_** <img style=\"display: inline-block; vertical-align: top;\" alt=\"optional\" src=\"https://img.shields.io/badge/optional-666eff?style=flat\">\n\n  unknownSymbol resolver\n\n#### PropertySchemaResolver\n\n<img style=\"display: inline-block; vertical-align: top;\" alt=\"TypeAlias\" src=\"https://img.shields.io/badge/TypeAlias-666eff?style=flat\"> property schema resolver\n\n##### Type\n\n```typescript\nexport type PropertySchemaResolver<T extends ComponentItemMeta> = (\n  originMeta: Partial<T>,\n  options: {\n    ts: typeof import('typescript/lib/tsserverlibrary');\n    typeChecker: ts.TypeChecker;\n    schemaOptions: MetaCheckerSchemaOptions;\n    symbolNode: ts.Expression;\n    prop: ts.Symbol;\n    targetNode?: ts.Declaration;\n    targetType?: ts.Type;\n  },\n) => Partial<T>;\n```\n\n**References:** [**_ComponentItemMeta_**](#)<!-- -->, [**_MetaCheckerSchemaOptions_**](#metacheckerschemaoptions)\n\n#### UnknownSymbolResolver\n\n <img style=\"display: inline-block; vertical-align: top;\" alt=\"TypeAlias\" src=\"https://img.shields.io/badge/TypeAlias-666eff?style=flat\">\n\n##### Type\n\n```typescript\nexport type UnknownSymbolResolver<\n  T extends PropertyMetaSchema = PropertyMetaSchema,\n> = (options: {\n  ts: typeof import('typescript/lib/tsserverlibrary');\n  typeChecker: ts.TypeChecker;\n  targetSymbol: ts.Symbol;\n  schemaOptions: MetaCheckerSchemaOptions;\n  targetNode: ts.Declaration;\n}) => Partial<T>;\n```\n\n**References:** [**_PropertyMetaSchema_**](#)<!-- -->, [**_MetaCheckerSchemaOptions_**](#metacheckerschemaoptions)\n\n### project.service\n\n#### TypeCheckService\n\n<img style=\"display: inline-block; vertical-align: top;\" alt=\"Class\" src=\"https://img.shields.io/badge/Class-666eff?style=flat\"> Provide component metadata checker services\n\n##### Type\n\n```typescript\nexport declare class TypeCheckService\n```\n\n##### Constructors\n\n- [`(constructor)`](#)\n\n  Constructs a new instance of the `TypeCheckService` class\n\n##### Methods\n\n- [`(constructor)`](#)\n\n  Constructs a new instance of the `TypeCheckService` class\n\n- [`close`](#)\n\n  Close the Type checker service\n\n- [`getComponentLibraryMeta`](#)\n\n  Get component metadata through the entry file, this method will automatically filter vue components\n\n- [`getComponentMeta`](#)\n\n  Get metadata of single component If the component to be obtained is not a vue component, an error will be thrown\n\n- [`getExported`](#)\n\n  Get the export\n\n- [`getExportNames`](#)\n\n  only get value export\n\n<!-- end -->\n\n## Supported JSDoc tags\n\n> \\[!NOTE]\n> It is recommended to define events in props so that you can get complete JSDoc support\n\n### @description\n\nDescription of the property.\n\n### @default\n\nWhen the prop option `default` uses as function, `default` will be ignored. In this case, you can use `@default` to override it.\n\n```ts\ndefineComponent({\n  props: {\n    /**\n     * @default {}\n     */\n    foo: {\n      default() {\n        return {};\n      },\n    },\n  },\n});\n```\n\n### @component\n\nThis is used to distinguish between ordinary functions and function components.\n\nCurrently, there are two situations that cannot be automatically recognized as components:\n\n```ts\n/**\n * @component\n */\nfunction InternalComponent(props: { a: string }) {\n  return h('div', props.a);\n}\n```\n\n```tsx\n/**\n * @component\n */\nexport const GenericComponent = defineComponent(\n  <T>(props: { item: T }) => {\n    return () => (<div>{item}</div>);\n  },\n);\n```\n\nIt needs to be annotated with @component, otherwise it will be recognized as a function\n\n---\n\n### Release related\n\n#### @public\n\n#### @deprecated\n\n#### @experimental/@beta\n\n#### @alpha\n\n> \\[!NOTE]\n> These release tags cannot take effect in defineEmits\n\nFor methods on the component instance itself, use release tags like `@public` to expose\n\n```ts\ndefineExpose({\n  /**\n   * @public\n   */\n  focus() {},\n});\n```\n\nIf you set `filterExposed` in MetaCheckerOptions to false, those release tags will become invalid.\n\n> The component instance of vue will not only expose the properties and methods exposed through `expose`, but also expose the props passed in from the outside.\n\n---\n\n### @ignore/@internal\n\nProperties marked with `@ignore` or `@internal` will not be checked.\n\n---\n\n### Version control related\n\n#### @version\n\n#### @since\n\n---\n\n## TODO\n\n- [x] externalSymbolLinkMap support\n- [x] resolve Functional component\n- [ ] ~~resolve Vue class component~~\n","readmeFilename":"README.md"}