@teambit/typescript 0.0.728 → 0.0.731

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/exceptions/transformer-not-found.js +14 -1
  2. package/dist/exceptions/transformer-not-found.js.map +1 -1
  3. package/dist/schema-extractor-context.d.ts +38 -7
  4. package/dist/schema-extractor-context.js +228 -31
  5. package/dist/schema-extractor-context.js.map +1 -1
  6. package/dist/transformers/class-deceleration.d.ts +11 -0
  7. package/dist/transformers/class-deceleration.js +141 -0
  8. package/dist/transformers/class-deceleration.js.map +1 -0
  9. package/dist/transformers/constructor.d.ts +10 -0
  10. package/dist/transformers/constructor.js +70 -0
  11. package/dist/transformers/constructor.js.map +1 -0
  12. package/dist/transformers/export-declaration.d.ts +2 -1
  13. package/dist/transformers/export-declaration.js +64 -13
  14. package/dist/transformers/export-declaration.js.map +1 -1
  15. package/dist/transformers/function-declaration.d.ts +1 -3
  16. package/dist/transformers/function-declaration.js +27 -32
  17. package/dist/transformers/function-declaration.js.map +1 -1
  18. package/dist/transformers/index-signature.d.ts +9 -0
  19. package/dist/transformers/index-signature.js +71 -0
  20. package/dist/transformers/index-signature.js.map +1 -0
  21. package/dist/transformers/index.d.ts +10 -0
  22. package/dist/transformers/index.js +160 -0
  23. package/dist/transformers/index.js.map +1 -1
  24. package/dist/transformers/interface-declaration.d.ts +10 -0
  25. package/dist/transformers/interface-declaration.js +73 -0
  26. package/dist/transformers/interface-declaration.js.map +1 -0
  27. package/dist/transformers/literal-type.d.ts +8 -0
  28. package/dist/transformers/literal-type.js +50 -0
  29. package/dist/transformers/literal-type.js.map +1 -0
  30. package/dist/transformers/method-declaration.d.ts +11 -0
  31. package/dist/transformers/method-declaration.js +94 -0
  32. package/dist/transformers/method-declaration.js.map +1 -0
  33. package/dist/transformers/method-signature.d.ts +10 -0
  34. package/dist/transformers/method-signature.js +81 -0
  35. package/dist/transformers/method-signature.js.map +1 -0
  36. package/dist/transformers/property-declaration.d.ts +11 -0
  37. package/dist/transformers/property-declaration.js +80 -0
  38. package/dist/transformers/property-declaration.js.map +1 -0
  39. package/dist/transformers/property-signature.d.ts +10 -0
  40. package/dist/transformers/property-signature.js +90 -0
  41. package/dist/transformers/property-signature.js.map +1 -0
  42. package/dist/transformers/source-file-transformer.d.ts +2 -1
  43. package/dist/transformers/source-file-transformer.js +23 -3
  44. package/dist/transformers/source-file-transformer.js.map +1 -1
  45. package/dist/transformers/type-alias.d.ts +4 -1
  46. package/dist/transformers/type-alias.js +31 -2
  47. package/dist/transformers/type-alias.js.map +1 -1
  48. package/dist/transformers/utils/get-params.d.ts +4 -0
  49. package/dist/transformers/utils/get-params.js +69 -0
  50. package/dist/transformers/utils/get-params.js.map +1 -0
  51. package/dist/transformers/utils/parse-type-from-quick-info.d.ts +35 -0
  52. package/dist/transformers/utils/parse-type-from-quick-info.js +112 -0
  53. package/dist/transformers/utils/parse-type-from-quick-info.js.map +1 -0
  54. package/dist/transformers/utils/type-node-to-schema.d.ts +4 -0
  55. package/dist/transformers/utils/type-node-to-schema.js +251 -0
  56. package/dist/transformers/utils/type-node-to-schema.js.map +1 -0
  57. package/dist/transformers/variable-declaration.d.ts +11 -0
  58. package/dist/transformers/variable-declaration.js +98 -0
  59. package/dist/transformers/variable-declaration.js.map +1 -0
  60. package/dist/transformers/variable-statement.d.ts +7 -1
  61. package/dist/transformers/variable-statement.js +42 -2
  62. package/dist/transformers/variable-statement.js.map +1 -1
  63. package/dist/typescript.extractor.d.ts +3 -3
  64. package/dist/typescript.extractor.js +7 -4
  65. package/dist/typescript.extractor.js.map +1 -1
  66. package/dist/typescript.main.runtime.js +1 -1
  67. package/dist/typescript.main.runtime.js.map +1 -1
  68. package/exceptions/transformer-not-found.ts +5 -4
  69. package/package-tar/teambit-typescript-0.0.731.tgz +0 -0
  70. package/package.json +15 -15
  71. package/{preview-1652153159767.js → preview-1652498684867.js} +2 -2
  72. package/transformers/class-deceleration.ts +53 -0
  73. package/transformers/constructor.ts +22 -0
  74. package/transformers/export-declaration.ts +42 -13
  75. package/transformers/function-declaration.ts +9 -28
  76. package/transformers/index-signature.ts +22 -0
  77. package/transformers/index.ts +10 -0
  78. package/transformers/interface-declaration.ts +24 -0
  79. package/transformers/literal-type.ts +18 -0
  80. package/transformers/method-declaration.ts +32 -0
  81. package/transformers/method-signature.ts +30 -0
  82. package/transformers/property-declaration.ts +30 -0
  83. package/transformers/property-signature.ts +37 -0
  84. package/transformers/source-file-transformer.ts +6 -6
  85. package/transformers/type-alias.ts +12 -2
  86. package/transformers/utils/get-params.ts +29 -0
  87. package/transformers/utils/parse-type-from-quick-info.ts +84 -0
  88. package/transformers/utils/type-node-to-schema.ts +205 -0
  89. package/transformers/variable-declaration.ts +36 -0
  90. package/transformers/variable-statement.ts +16 -2
  91. package/package-tar/teambit-typescript-0.0.728.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["typescript.main.runtime.ts"],"names":["TypescriptMain","constructor","logger","schemaTransformerSlot","workspace","createCompiler","options","transformers","tsModule","ts","configMutator","TypescriptConfigMutator","transformerContext","afterMutation","runTransformersWithContext","clone","TypescriptCompiler","TypescriptAspect","id","raw","getTsserverClient","tsServer","initTsserverClient","projectPath","files","TsserverClient","init","initTsserverClientFromWorkspace","Error","path","createCjsCompiler","getCjsTransformer","createEsmCompiler","getEsmTransformer","cjsTransformer","config","setModule","esmTransformer","createSchemaExtractor","tsconfig","TypeScriptExtractor","getCjsPackageJsonProps","main","types","getEsmPackageJsonProps","type","getSupportedFilesForTsserver","components","map","c","filesystem","flat","f","filter","endsWith","onPreWatch","watchOpts","spawnTSServer","verbose","checkTypes","printTypeErrors","Boolean","onComponentChange","component","results","file","onFileChange","provider","schema","loggerExt","aspectLoader","cli","registerParser","TypeScriptParser","createLogger","registerPlugins","SchemaTransformerPlugin","tsMain","register","ExportDeclaration","FunctionDeclaration","VariableStatementTransformer","SourceFileTransformer","TypeAliasTransformer","registerOnPreWatch","bind","registerOnComponentChange","registerOnComponentAdd","checkTypesCmd","CheckTypesCmd","MainRuntime","SchemaAspect","LoggerAspect","AspectLoaderAspect","WorkspaceAspect","CLIAspect","Slot","withType","addRuntime","context","Array","isArray","newConfig","reduce","acc","transformer"],"mappings":"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","sourcesContent":["import ts from 'typescript';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Compiler } from '@teambit/compiler';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { SchemaAspect, SchemaExtractor, SchemaMain } from '@teambit/schema';\nimport { PackageJsonProps } from '@teambit/pkg';\nimport { TypescriptConfigMutator } from '@teambit/typescript.modules.ts-config-mutator';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { WatchOptions, Workspace } from '@teambit/workspace';\nimport pMapSeries from 'p-map-series';\nimport { TsserverClient, TsserverClientOpts } from '@teambit/ts-server';\nimport AspectLoaderAspect, { AspectLoaderMain } from '@teambit/aspect-loader';\nimport type { Component } from '@teambit/component';\nimport { TypeScriptExtractor } from './typescript.extractor';\nimport { TypeScriptCompilerOptions } from './compiler-options';\nimport { TypescriptAspect } from './typescript.aspect';\nimport { TypescriptCompiler } from './typescript.compiler';\nimport { TypeScriptParser } from './typescript.parser';\nimport { SchemaTransformer } from './schema-transformer';\nimport { SchemaTransformerPlugin } from './schema-transformer.plugin';\nimport {\n ExportDeclaration,\n TypeAliasTransformer,\n FunctionDeclaration,\n VariableStatementTransformer,\n SourceFileTransformer,\n} from './transformers';\nimport { CheckTypesCmd } from './cmds/check-types.cmd';\n\nexport type TsMode = 'build' | 'dev';\n\nexport type SchemaTransformerSlot = SlotRegistry<SchemaTransformer[]>;\n\nexport type TsConfigTransformContext = {\n // mode: TsMode;\n};\n\nexport type TsConfigTransformer = (\n config: TypescriptConfigMutator,\n context: TsConfigTransformContext\n) => TypescriptConfigMutator;\n\nexport class TypescriptMain {\n constructor(\n private logger: Logger,\n private schemaTransformerSlot: SchemaTransformerSlot,\n private workspace: Workspace\n ) {}\n\n private tsServer: TsserverClient;\n /**\n * create a new compiler.\n */\n createCompiler(\n options: TypeScriptCompilerOptions,\n transformers: TsConfigTransformer[] = [],\n tsModule = ts\n ): Compiler {\n const configMutator = new TypescriptConfigMutator(options);\n const transformerContext: TsConfigTransformContext = {};\n const afterMutation = runTransformersWithContext(configMutator.clone(), transformers, transformerContext);\n return new TypescriptCompiler(TypescriptAspect.id, this.logger, afterMutation.raw, tsModule);\n }\n\n /**\n * get TsserverClient instance if initiated already, otherwise, return undefined.\n */\n getTsserverClient(): TsserverClient | undefined {\n return this.tsServer;\n }\n\n /**\n * starts a tsserver process to communicate with its API.\n * @param projectPath absolute path of the project root directory\n * @param options TsserverClientOpts\n * @param files optionally, if check-types is enabled, provide files to open and type check.\n * @returns TsserverClient\n */\n async initTsserverClient(\n projectPath: string,\n options: TsserverClientOpts = {},\n files: string[] = []\n ): Promise<TsserverClient> {\n this.tsServer = new TsserverClient(projectPath, this.logger, options, files);\n this.tsServer.init();\n return this.tsServer;\n }\n\n /**\n * starts a tsserver process to communicate with its API. use only when running on the workspace.\n * @param options TsserverClientOpts\n * @param files optionally, if check-types is enabled, provide files to open and type check.\n * @returns TsserverClient\n */\n async initTsserverClientFromWorkspace(\n options: TsserverClientOpts = {},\n files: string[] = []\n ): Promise<TsserverClient> {\n if (!this.workspace) {\n throw new Error(`initTsserverClientFromWorkspace: workspace was not found`);\n }\n return this.initTsserverClient(this.workspace.path, options, files);\n }\n\n /**\n * Create a compiler instance and run the cjs transformer for it\n * @param options\n * @param transformers\n * @param tsModule\n * @returns\n */\n createCjsCompiler(options: TypeScriptCompilerOptions, transformers: TsConfigTransformer[] = [], tsModule = ts) {\n return this.createCompiler(options, [this.getCjsTransformer(), ...transformers], tsModule);\n }\n\n /**\n * Create a compiler instance and run the esm transformer for it\n * @param options\n * @param transformers\n * @param tsModule\n * @returns\n */\n createEsmCompiler(options: TypeScriptCompilerOptions, transformers: TsConfigTransformer[] = [], tsModule = ts) {\n return this.createCompiler(options, [this.getEsmTransformer(), ...transformers], tsModule);\n }\n\n /**\n * Create a transformer that change the ts module to CommonJS\n * @returns\n */\n getCjsTransformer(): TsConfigTransformer {\n const cjsTransformer = (config: TypescriptConfigMutator) => {\n config.setModule('CommonJS');\n return config;\n };\n return cjsTransformer;\n }\n\n /**\n * Create a transformer that change the ts module to ES2020\n * @returns\n */\n getEsmTransformer(): TsConfigTransformer {\n const esmTransformer = (config: TypescriptConfigMutator) => {\n config.setModule('ES2020');\n return config;\n };\n return esmTransformer;\n }\n\n /**\n * create an instance of a typescript semantic schema extractor.\n */\n createSchemaExtractor(tsconfig: any, path?: string): SchemaExtractor {\n return new TypeScriptExtractor(tsconfig, this.schemaTransformerSlot, this, path || this.workspace.path);\n }\n\n /**\n * add the default package json properties to the component\n * :TODO @gilad why do we need this DSL? can't I just get the args here.\n */\n getCjsPackageJsonProps(): PackageJsonProps {\n return {\n main: 'dist/{main}.js',\n types: '{main}.ts',\n };\n }\n\n /**\n * add type: module to the package.json props and the default props\n * :TODO @gilad why do we need this DSL? can't I just get the args here.\n */\n getEsmPackageJsonProps(): PackageJsonProps {\n return {\n // main: 'dist-esm/{main}.js',\n main: 'dist/{main}.js',\n type: 'module',\n types: '{main}.ts',\n };\n }\n\n public getSupportedFilesForTsserver(components: Component[]): string[] {\n const files = components\n .map((c) => c.filesystem.files)\n .flat()\n .map((f) => f.path);\n return files.filter((f) => f.endsWith('.ts') || f.endsWith('.tsx'));\n }\n\n private async onPreWatch(components: Component[], watchOpts: WatchOptions) {\n const workspace = this.workspace;\n if (!workspace || !watchOpts.spawnTSServer) {\n return;\n }\n const { verbose, checkTypes } = watchOpts;\n const files = checkTypes ? this.getSupportedFilesForTsserver(components) : [];\n const printTypeErrors = Boolean(checkTypes);\n await this.initTsserverClientFromWorkspace({ verbose, checkTypes, printTypeErrors }, files);\n }\n\n private async onComponentChange(component: Component, files: string[]) {\n if (!this.tsServer) {\n return {\n results: 'N/A',\n };\n }\n await pMapSeries(files, (file) => this.tsServer.onFileChange(file));\n return {\n results: 'succeed',\n };\n }\n\n static runtime = MainRuntime;\n static dependencies = [SchemaAspect, LoggerAspect, AspectLoaderAspect, WorkspaceAspect, CLIAspect];\n static slots = [Slot.withType<SchemaTransformer[]>()];\n\n static async provider(\n [schema, loggerExt, aspectLoader, workspace, cli]: [SchemaMain, LoggerMain, AspectLoaderMain, Workspace, CLIMain],\n config,\n [schemaTransformerSlot]: [SchemaTransformerSlot]\n ) {\n schema.registerParser(new TypeScriptParser());\n const logger = loggerExt.createLogger(TypescriptAspect.id);\n aspectLoader.registerPlugins([new SchemaTransformerPlugin(schemaTransformerSlot)]);\n const tsMain = new TypescriptMain(logger, schemaTransformerSlot, workspace);\n schemaTransformerSlot.register([\n new ExportDeclaration(),\n new FunctionDeclaration(),\n new VariableStatementTransformer(),\n new SourceFileTransformer(),\n new TypeAliasTransformer(),\n ]);\n\n if (workspace) {\n workspace.registerOnPreWatch(tsMain.onPreWatch.bind(this));\n workspace.registerOnComponentChange(tsMain.onComponentChange.bind(this));\n workspace.registerOnComponentAdd(tsMain.onComponentChange.bind(this));\n }\n\n const checkTypesCmd = new CheckTypesCmd(tsMain, workspace, logger);\n cli.register(checkTypesCmd);\n\n return tsMain;\n }\n}\n\nTypescriptAspect.addRuntime(TypescriptMain);\n\nexport function runTransformersWithContext(\n config: TypescriptConfigMutator,\n transformers: TsConfigTransformer[] = [],\n context: TsConfigTransformContext\n): TypescriptConfigMutator {\n if (!Array.isArray(transformers)) return config;\n const newConfig = transformers.reduce((acc, transformer) => {\n return transformer(acc, context);\n }, config);\n return newConfig;\n}\n"]}
1
+ {"version":3,"sources":["typescript.main.runtime.ts"],"names":["TypescriptMain","constructor","logger","schemaTransformerSlot","workspace","createCompiler","options","transformers","tsModule","ts","configMutator","TypescriptConfigMutator","transformerContext","afterMutation","runTransformersWithContext","clone","TypescriptCompiler","TypescriptAspect","id","raw","getTsserverClient","tsServer","initTsserverClient","projectPath","files","TsserverClient","init","initTsserverClientFromWorkspace","Error","path","createCjsCompiler","getCjsTransformer","createEsmCompiler","getEsmTransformer","cjsTransformer","config","setModule","esmTransformer","createSchemaExtractor","tsconfig","TypeScriptExtractor","getCjsPackageJsonProps","main","types","getEsmPackageJsonProps","type","getSupportedFilesForTsserver","components","map","c","filesystem","flat","f","filter","endsWith","onPreWatch","watchOpts","spawnTSServer","verbose","checkTypes","printTypeErrors","Boolean","onComponentChange","component","results","file","onFileChange","provider","schema","loggerExt","aspectLoader","cli","registerParser","TypeScriptParser","createLogger","registerPlugins","SchemaTransformerPlugin","tsMain","register","ExportDeclaration","FunctionDeclaration","MethodDeclaration","PropertyDeclaration","VariableStatementTransformer","VariableDeclaration","Constructor","SourceFileTransformer","TypeAliasTransformer","ClassDecelerationTransformer","PropertySignature","LiteralTypeTransformer","IndexSignature","InterfaceDeclarationTransformer","MethodSignatureTransformer","registerOnPreWatch","bind","registerOnComponentChange","registerOnComponentAdd","checkTypesCmd","CheckTypesCmd","MainRuntime","SchemaAspect","LoggerAspect","AspectLoaderAspect","WorkspaceAspect","CLIAspect","Slot","withType","addRuntime","context","Array","isArray","newConfig","reduce","acc","transformer"],"mappings":"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","sourcesContent":["import ts from 'typescript';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Compiler } from '@teambit/compiler';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { SchemaAspect, SchemaExtractor, SchemaMain } from '@teambit/schema';\nimport { PackageJsonProps } from '@teambit/pkg';\nimport { TypescriptConfigMutator } from '@teambit/typescript.modules.ts-config-mutator';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { WatchOptions, Workspace } from '@teambit/workspace';\nimport pMapSeries from 'p-map-series';\nimport { TsserverClient, TsserverClientOpts } from '@teambit/ts-server';\nimport AspectLoaderAspect, { AspectLoaderMain } from '@teambit/aspect-loader';\nimport type { Component } from '@teambit/component';\nimport { TypeScriptExtractor } from './typescript.extractor';\nimport { TypeScriptCompilerOptions } from './compiler-options';\nimport { TypescriptAspect } from './typescript.aspect';\nimport { TypescriptCompiler } from './typescript.compiler';\nimport { TypeScriptParser } from './typescript.parser';\nimport { SchemaTransformer } from './schema-transformer';\nimport { SchemaTransformerPlugin } from './schema-transformer.plugin';\nimport {\n ExportDeclaration,\n TypeAliasTransformer,\n FunctionDeclaration,\n MethodDeclaration,\n PropertyDeclaration,\n VariableStatementTransformer,\n VariableDeclaration,\n SourceFileTransformer,\n ClassDecelerationTransformer,\n Constructor,\n PropertySignature,\n LiteralTypeTransformer,\n IndexSignature,\n InterfaceDeclarationTransformer,\n MethodSignatureTransformer,\n} from './transformers';\nimport { CheckTypesCmd } from './cmds/check-types.cmd';\n\nexport type TsMode = 'build' | 'dev';\n\nexport type SchemaTransformerSlot = SlotRegistry<SchemaTransformer[]>;\n\nexport type TsConfigTransformContext = {\n // mode: TsMode;\n};\n\nexport type TsConfigTransformer = (\n config: TypescriptConfigMutator,\n context: TsConfigTransformContext\n) => TypescriptConfigMutator;\n\nexport class TypescriptMain {\n constructor(\n private logger: Logger,\n private schemaTransformerSlot: SchemaTransformerSlot,\n private workspace: Workspace\n ) {}\n\n private tsServer: TsserverClient;\n /**\n * create a new compiler.\n */\n createCompiler(\n options: TypeScriptCompilerOptions,\n transformers: TsConfigTransformer[] = [],\n tsModule = ts\n ): Compiler {\n const configMutator = new TypescriptConfigMutator(options);\n const transformerContext: TsConfigTransformContext = {};\n const afterMutation = runTransformersWithContext(configMutator.clone(), transformers, transformerContext);\n return new TypescriptCompiler(TypescriptAspect.id, this.logger, afterMutation.raw, tsModule);\n }\n\n /**\n * get TsserverClient instance if initiated already, otherwise, return undefined.\n */\n getTsserverClient(): TsserverClient | undefined {\n return this.tsServer;\n }\n\n /**\n * starts a tsserver process to communicate with its API.\n * @param projectPath absolute path of the project root directory\n * @param options TsserverClientOpts\n * @param files optionally, if check-types is enabled, provide files to open and type check.\n * @returns TsserverClient\n */\n async initTsserverClient(\n projectPath: string,\n options: TsserverClientOpts = {},\n files: string[] = []\n ): Promise<TsserverClient> {\n this.tsServer = new TsserverClient(projectPath, this.logger, options, files);\n this.tsServer.init();\n return this.tsServer;\n }\n\n /**\n * starts a tsserver process to communicate with its API. use only when running on the workspace.\n * @param options TsserverClientOpts\n * @param files optionally, if check-types is enabled, provide files to open and type check.\n * @returns TsserverClient\n */\n async initTsserverClientFromWorkspace(\n options: TsserverClientOpts = {},\n files: string[] = []\n ): Promise<TsserverClient> {\n if (!this.workspace) {\n throw new Error(`initTsserverClientFromWorkspace: workspace was not found`);\n }\n return this.initTsserverClient(this.workspace.path, options, files);\n }\n\n /**\n * Create a compiler instance and run the cjs transformer for it\n * @param options\n * @param transformers\n * @param tsModule\n * @returns\n */\n createCjsCompiler(options: TypeScriptCompilerOptions, transformers: TsConfigTransformer[] = [], tsModule = ts) {\n return this.createCompiler(options, [this.getCjsTransformer(), ...transformers], tsModule);\n }\n\n /**\n * Create a compiler instance and run the esm transformer for it\n * @param options\n * @param transformers\n * @param tsModule\n * @returns\n */\n createEsmCompiler(options: TypeScriptCompilerOptions, transformers: TsConfigTransformer[] = [], tsModule = ts) {\n return this.createCompiler(options, [this.getEsmTransformer(), ...transformers], tsModule);\n }\n\n /**\n * Create a transformer that change the ts module to CommonJS\n * @returns\n */\n getCjsTransformer(): TsConfigTransformer {\n const cjsTransformer = (config: TypescriptConfigMutator) => {\n config.setModule('CommonJS');\n return config;\n };\n return cjsTransformer;\n }\n\n /**\n * Create a transformer that change the ts module to ES2020\n * @returns\n */\n getEsmTransformer(): TsConfigTransformer {\n const esmTransformer = (config: TypescriptConfigMutator) => {\n config.setModule('ES2020');\n return config;\n };\n return esmTransformer;\n }\n\n /**\n * create an instance of a typescript semantic schema extractor.\n */\n createSchemaExtractor(tsconfig: any, path?: string): SchemaExtractor {\n return new TypeScriptExtractor(tsconfig, this.schemaTransformerSlot, this, path || this.workspace.path);\n }\n\n /**\n * add the default package json properties to the component\n * :TODO @gilad why do we need this DSL? can't I just get the args here.\n */\n getCjsPackageJsonProps(): PackageJsonProps {\n return {\n main: 'dist/{main}.js',\n types: '{main}.ts',\n };\n }\n\n /**\n * add type: module to the package.json props and the default props\n * :TODO @gilad why do we need this DSL? can't I just get the args here.\n */\n getEsmPackageJsonProps(): PackageJsonProps {\n return {\n // main: 'dist-esm/{main}.js',\n main: 'dist/{main}.js',\n type: 'module',\n types: '{main}.ts',\n };\n }\n\n public getSupportedFilesForTsserver(components: Component[]): string[] {\n const files = components\n .map((c) => c.filesystem.files)\n .flat()\n .map((f) => f.path);\n return files.filter((f) => f.endsWith('.ts') || f.endsWith('.tsx'));\n }\n\n private async onPreWatch(components: Component[], watchOpts: WatchOptions) {\n const workspace = this.workspace;\n if (!workspace || !watchOpts.spawnTSServer) {\n return;\n }\n const { verbose, checkTypes } = watchOpts;\n const files = checkTypes ? this.getSupportedFilesForTsserver(components) : [];\n const printTypeErrors = Boolean(checkTypes);\n await this.initTsserverClientFromWorkspace({ verbose, checkTypes, printTypeErrors }, files);\n }\n\n private async onComponentChange(component: Component, files: string[]) {\n if (!this.tsServer) {\n return {\n results: 'N/A',\n };\n }\n await pMapSeries(files, (file) => this.tsServer.onFileChange(file));\n return {\n results: 'succeed',\n };\n }\n\n static runtime = MainRuntime;\n static dependencies = [SchemaAspect, LoggerAspect, AspectLoaderAspect, WorkspaceAspect, CLIAspect];\n static slots = [Slot.withType<SchemaTransformer[]>()];\n\n static async provider(\n [schema, loggerExt, aspectLoader, workspace, cli]: [SchemaMain, LoggerMain, AspectLoaderMain, Workspace, CLIMain],\n config,\n [schemaTransformerSlot]: [SchemaTransformerSlot]\n ) {\n schema.registerParser(new TypeScriptParser());\n const logger = loggerExt.createLogger(TypescriptAspect.id);\n aspectLoader.registerPlugins([new SchemaTransformerPlugin(schemaTransformerSlot)]);\n const tsMain = new TypescriptMain(logger, schemaTransformerSlot, workspace);\n schemaTransformerSlot.register([\n new ExportDeclaration(),\n new FunctionDeclaration(),\n new MethodDeclaration(),\n new PropertyDeclaration(),\n new VariableStatementTransformer(),\n new VariableDeclaration(),\n new Constructor(),\n new SourceFileTransformer(),\n new TypeAliasTransformer(),\n new ClassDecelerationTransformer(),\n new PropertySignature(),\n new LiteralTypeTransformer(),\n new IndexSignature(),\n new InterfaceDeclarationTransformer(),\n new MethodSignatureTransformer(),\n ]);\n\n if (workspace) {\n workspace.registerOnPreWatch(tsMain.onPreWatch.bind(this));\n workspace.registerOnComponentChange(tsMain.onComponentChange.bind(this));\n workspace.registerOnComponentAdd(tsMain.onComponentChange.bind(this));\n }\n\n const checkTypesCmd = new CheckTypesCmd(tsMain, workspace, logger);\n cli.register(checkTypesCmd);\n\n return tsMain;\n }\n}\n\nTypescriptAspect.addRuntime(TypescriptMain);\n\nexport function runTransformersWithContext(\n config: TypescriptConfigMutator,\n transformers: TsConfigTransformer[] = [],\n context: TsConfigTransformContext\n): TypescriptConfigMutator {\n if (!Array.isArray(transformers)) return config;\n const newConfig = transformers.reduce((acc, transformer) => {\n return transformer(acc, context);\n }, config);\n return newConfig;\n}\n"]}
@@ -1,12 +1,13 @@
1
- import { Node } from 'typescript';
1
+ import ts, { Node } from 'typescript';
2
2
  import { Component } from '@teambit/component';
3
3
 
4
4
  export class TransformerNotFound extends Error {
5
5
  constructor(readonly node: Node, readonly component: Component) {
6
6
  super(
7
- `typescript: could not find schema transformer for node of kind ${
8
- node.kind
9
- } in component ${component.id.toString()}`
7
+ `typescript: could not find schema transformer for node of kind ${node.kind} (${
8
+ ts.SyntaxKind[node.kind]
9
+ }) in component ${component.id.toString()}.
10
+ node text: ${node.getText()}`
10
11
  );
11
12
  }
12
13
  }
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/typescript",
3
- "version": "0.0.728",
3
+ "version": "0.0.731",
4
4
  "homepage": "https://bit.dev/teambit/typescript/typescript",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.typescript",
8
8
  "name": "typescript",
9
- "version": "0.0.728"
9
+ "version": "0.0.731"
10
10
  },
11
11
  "dependencies": {
12
12
  "lodash": "4.17.21",
@@ -18,20 +18,20 @@
18
18
  "@babel/runtime": "7.12.18",
19
19
  "core-js": "^3.0.0",
20
20
  "@teambit/harmony": "0.3.3",
21
- "@teambit/compiler": "0.0.728",
21
+ "@teambit/compiler": "0.0.731",
22
22
  "@teambit/typescript.modules.ts-config-mutator": "0.0.68",
23
- "@teambit/component": "0.0.728",
24
- "@teambit/semantics.entities.semantic-schema": "0.0.7",
23
+ "@teambit/component": "0.0.731",
24
+ "@teambit/semantics.entities.semantic-schema": "0.0.9",
25
25
  "@teambit/ts-server": "0.0.32",
26
- "@teambit/aspect-loader": "0.0.728",
26
+ "@teambit/aspect-loader": "0.0.731",
27
27
  "@teambit/bit-error": "0.0.394",
28
- "@teambit/builder": "0.0.728",
29
- "@teambit/isolator": "0.0.728",
30
- "@teambit/logger": "0.0.578",
31
- "@teambit/schema": "0.0.728",
32
- "@teambit/cli": "0.0.486",
33
- "@teambit/pkg": "0.0.728",
34
- "@teambit/workspace": "0.0.728"
28
+ "@teambit/builder": "0.0.731",
29
+ "@teambit/isolator": "0.0.731",
30
+ "@teambit/logger": "0.0.580",
31
+ "@teambit/schema": "0.0.731",
32
+ "@teambit/cli": "0.0.488",
33
+ "@teambit/pkg": "0.0.731",
34
+ "@teambit/workspace": "0.0.731"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/lodash": "4.14.165",
@@ -47,7 +47,7 @@
47
47
  "@teambit/typescript.aspect-docs.typescript": "0.0.137"
48
48
  },
49
49
  "peerDependencies": {
50
- "@teambit/legacy": "1.0.265",
50
+ "@teambit/legacy": "1.0.268",
51
51
  "react-dom": "^16.8.0 || ^17.0.0",
52
52
  "react": "^16.8.0 || ^17.0.0"
53
53
  },
@@ -75,7 +75,7 @@
75
75
  "react": "-"
76
76
  },
77
77
  "peerDependencies": {
78
- "@teambit/legacy": "1.0.265",
78
+ "@teambit/legacy": "1.0.268",
79
79
  "react-dom": "^16.8.0 || ^17.0.0",
80
80
  "react": "^16.8.0 || ^17.0.0"
81
81
  }
@@ -1,2 +1,2 @@
1
- export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.728/dist/typescript.composition.js')]
2
- export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.728/dist/typescript.docs.mdx')]
1
+ export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.731/dist/typescript.composition.js')]
2
+ export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.731/dist/typescript.docs.mdx')]
@@ -0,0 +1,53 @@
1
+ import pMapSeries from 'p-map-series';
2
+ import { compact } from 'lodash';
3
+ import { ClassSchema, GetAccessorSchema, SetAccessorSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import ts, { Node, ClassDeclaration } from 'typescript';
5
+ import { SchemaTransformer } from '../schema-transformer';
6
+ import { SchemaExtractorContext } from '../schema-extractor-context';
7
+ import { ExportIdentifier } from '../export-identifier';
8
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
9
+ import { getParams } from './utils/get-params';
10
+
11
+ export class ClassDecelerationTransformer implements SchemaTransformer {
12
+ predicate(node: Node) {
13
+ return node.kind === ts.SyntaxKind.ClassDeclaration;
14
+ }
15
+
16
+ // @todo: in case of `export default class` the class has no name.
17
+ private getName(node: ClassDeclaration) {
18
+ return node.name?.getText() || 'default';
19
+ }
20
+
21
+ async getIdentifiers(node: ClassDeclaration) {
22
+ return [new ExportIdentifier(this.getName(node), node.getSourceFile().fileName)];
23
+ }
24
+
25
+ async transform(node: ClassDeclaration, context: SchemaExtractorContext) {
26
+ const className = this.getName(node);
27
+ const members = await pMapSeries(node.members, async (member) => {
28
+ const isPrivate = member.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.PrivateKeyword);
29
+ if (isPrivate) {
30
+ return null;
31
+ }
32
+ switch (member.kind) {
33
+ case ts.SyntaxKind.GetAccessor: {
34
+ const getter = member as ts.GetAccessorDeclaration;
35
+ const info = await context.getQuickInfo(getter.name);
36
+ const displaySig = info?.body?.displayString || '';
37
+ const typeStr = parseTypeFromQuickInfo(info);
38
+ const type = await context.resolveType(getter, typeStr);
39
+ return new GetAccessorSchema(getter.name.getText(), type, displaySig);
40
+ }
41
+ case ts.SyntaxKind.SetAccessor: {
42
+ const setter = member as ts.SetAccessorDeclaration;
43
+ const params = await getParams(setter.parameters, context);
44
+ const displaySig = await context.getQuickInfoDisplayString(setter.name);
45
+ return new SetAccessorSchema(setter.name.getText(), params[0], displaySig);
46
+ }
47
+ default:
48
+ return context.computeSchema(member);
49
+ }
50
+ });
51
+ return new ClassSchema(className, compact(members));
52
+ }
53
+ }
@@ -0,0 +1,22 @@
1
+ import { SchemaNode, ConstructorSchema } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { Node, ConstructorDeclaration } from 'typescript';
3
+ import { SchemaExtractorContext } from '../schema-extractor-context';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { ExportIdentifier } from '../export-identifier';
6
+ import { getParams } from './utils/get-params';
7
+
8
+ export class Constructor implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.Constructor;
11
+ }
12
+
13
+ async getIdentifiers(node: ConstructorDeclaration) {
14
+ return [new ExportIdentifier('constructor', node.getSourceFile().fileName)];
15
+ }
16
+
17
+ async transform(constructorDec: ConstructorDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
18
+ const args = await getParams(constructorDec.parameters, context);
19
+
20
+ return new ConstructorSchema(args);
21
+ }
22
+ }
@@ -1,4 +1,12 @@
1
- import ts, { Node, SyntaxKind, ExportDeclaration as ExportDeclarationNode, NamedExports } from 'typescript';
1
+ import { SchemaNode, Module } from '@teambit/semantics.entities.semantic-schema';
2
+ import { compact } from 'lodash';
3
+ import ts, {
4
+ Node,
5
+ SyntaxKind,
6
+ ExportDeclaration as ExportDeclarationNode,
7
+ NamedExports,
8
+ NamespaceExport,
9
+ } from 'typescript';
2
10
  import { SchemaExtractorContext } from '../schema-extractor-context';
3
11
  import { SchemaTransformer } from '../schema-transformer';
4
12
  import { ExportIdentifier } from '../export-identifier';
@@ -27,27 +35,48 @@ export class ExportDeclaration implements SchemaTransformer {
27
35
  return [];
28
36
  }
29
37
 
30
- async transform(node: Node, context: SchemaExtractorContext) {
38
+ async transform(node: Node, context: SchemaExtractorContext): Promise<SchemaNode> {
31
39
  const exportDec = node as ExportDeclarationNode;
32
- // sourceFile.sear
33
40
  const exportClause = exportDec.exportClause;
41
+ // e.g. `export { button1, button2 } as Composition from './button';
34
42
  if (exportClause?.kind === SyntaxKind.NamedExports) {
35
43
  exportClause as NamedExports;
36
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
37
- const exports = await Promise.all(
44
+ const schemas = await Promise.all(
38
45
  exportClause.elements.map(async (element) => {
39
- // const sig = await context.visitDefinition(element.name);
40
- await context.visitDefinition(element.name);
41
- return element.name;
46
+ return context.visitDefinition(element.name);
42
47
  })
43
48
  );
44
49
 
45
- return [];
46
- // return exports.map((identifier) => {
47
- // // const type = context.resolveType(identifier);
48
- // });
50
+ return new Module(compact(schemas));
51
+ }
52
+ // e.g. `export * as Composition from './button';
53
+ if (exportClause?.kind === SyntaxKind.NamespaceExport) {
54
+ exportClause as NamespaceExport;
55
+ const namespace = exportClause.name.getText();
56
+ const sourceFile = await context.getSourceFileFromNode(exportClause.name);
57
+ if (!sourceFile) {
58
+ throw new Error(`unable to find the source-file for "${namespace}"`);
59
+ }
60
+ const result = await context.computeSchema(sourceFile);
61
+ if (!(result instanceof Module)) {
62
+ throw new Error(`expect result to be instance of Module`);
63
+ }
64
+ result.namespace = namespace;
65
+ return result;
66
+ }
67
+ // it's export-all, e.g. `export * from './button'`;
68
+ if (!exportClause) {
69
+ const specifier = exportDec.moduleSpecifier;
70
+ if (!specifier) {
71
+ throw new Error(`fatal: no specifier`);
72
+ }
73
+ const sourceFile = await context.getSourceFileFromNode(specifier);
74
+ if (!sourceFile) {
75
+ throw new Error(`unable to find the source-file`);
76
+ }
77
+ return context.computeSchema(sourceFile);
49
78
  }
50
79
 
51
- return {};
80
+ throw new Error('unrecognized export type');
52
81
  }
53
82
  }
@@ -1,8 +1,10 @@
1
- import { SchemaNode, FunctionSchema } from '@teambit/semantics.entities.semantic-schema';
1
+ import { SchemaNode, FunctionSchema, Modifier } from '@teambit/semantics.entities.semantic-schema';
2
2
  import ts, { Node, FunctionDeclaration as FunctionDeclarationNode } from 'typescript';
3
3
  import { SchemaExtractorContext } from '../schema-extractor-context';
4
4
  import { SchemaTransformer } from '../schema-transformer';
5
5
  import { ExportIdentifier } from '../export-identifier';
6
+ import { getParams } from './utils/get-params';
7
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
6
8
 
7
9
  export class FunctionDeclaration implements SchemaTransformer {
8
10
  predicate(node: Node) {
@@ -18,37 +20,16 @@ export class FunctionDeclaration implements SchemaTransformer {
18
20
  return funcDec.name?.getText() || '';
19
21
  }
20
22
 
21
- private async getArgs(funcDec: FunctionDeclarationNode, context: SchemaExtractorContext) {
22
- return Promise.all(
23
- funcDec.parameters.map(async (param) => {
24
- const type = param.type;
25
- return {
26
- name: param.name.getText(),
27
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
28
- type: await context.resolveType(type!, type?.getText() || 'any'),
29
- };
30
- })
31
- );
32
- }
33
-
34
- private parseReturnValue(displayString?: string) {
35
- if (!displayString) return '';
36
- const array = displayString.split(':');
37
- return array[array.length - 1].trim();
38
- }
39
-
40
- async transform(node: Node, context: SchemaExtractorContext): Promise<SchemaNode> {
41
- const funcDec = node as FunctionDeclarationNode;
23
+ async transform(funcDec: FunctionDeclarationNode, context: SchemaExtractorContext): Promise<SchemaNode> {
42
24
  const name = this.getName(funcDec);
43
25
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
44
26
  const info = await context.getQuickInfo(funcDec.name!);
27
+ const returnTypeStr = parseTypeFromQuickInfo(info);
45
28
  const displaySig = info?.body?.displayString;
46
- const returnTypeStr = this.parseReturnValue(displaySig);
47
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
48
- const args = await this.getArgs(funcDec, context);
49
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
50
- const returnType = await context.resolveType(funcDec.name!, returnTypeStr);
29
+ const args = await getParams(funcDec.parameters, context);
30
+ const returnType = await context.resolveType(funcDec, returnTypeStr);
31
+ const modifiers = funcDec.modifiers?.map((modifier) => modifier.getText()) || [];
51
32
 
52
- return new FunctionSchema(name || '', [], returnType);
33
+ return new FunctionSchema(name, args, returnType, displaySig || '', modifiers as Modifier[]);
53
34
  }
54
35
  }
@@ -0,0 +1,22 @@
1
+ import { SchemaNode, IndexSignatureSchema } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { Node, IndexSignatureDeclaration } from 'typescript';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { getParams } from './utils/get-params';
6
+ import { typeNodeToSchema } from './utils/type-node-to-schema';
7
+
8
+ export class IndexSignature implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.IndexSignature;
11
+ }
12
+
13
+ async getIdentifiers() {
14
+ return [];
15
+ }
16
+
17
+ async transform(indexSig: IndexSignatureDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
18
+ const params = await getParams(indexSig.parameters, context);
19
+ const type = await typeNodeToSchema(indexSig.type, context);
20
+ return new IndexSignatureSchema(params, type);
21
+ }
22
+ }
@@ -1,5 +1,15 @@
1
1
  export { ExportDeclaration } from './export-declaration';
2
2
  export { FunctionDeclaration } from './function-declaration';
3
+ export { MethodDeclaration } from './method-declaration';
4
+ export { PropertyDeclaration } from './property-declaration';
3
5
  export { VariableStatementTransformer } from './variable-statement';
6
+ export { VariableDeclaration } from './variable-declaration';
4
7
  export { SourceFileTransformer } from './source-file-transformer';
5
8
  export { TypeAliasTransformer } from './type-alias';
9
+ export { ClassDecelerationTransformer } from './class-deceleration';
10
+ export { Constructor } from './constructor';
11
+ export { PropertySignature } from './property-signature';
12
+ export { LiteralTypeTransformer } from './literal-type';
13
+ export { IndexSignature } from './index-signature';
14
+ export { InterfaceDeclarationTransformer } from './interface-declaration';
15
+ export { MethodSignatureTransformer } from './method-signature';
@@ -0,0 +1,24 @@
1
+ import ts, { Node, InterfaceDeclaration } from 'typescript';
2
+ import pMapSeries from 'p-map-series';
3
+ import { InterfaceSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import { ExportIdentifier } from '../export-identifier';
7
+
8
+ export class InterfaceDeclarationTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.InterfaceDeclaration;
11
+ }
12
+
13
+ async getIdentifiers(node: InterfaceDeclaration): Promise<ExportIdentifier[]> {
14
+ return [new ExportIdentifier(node.name.getText(), node.getSourceFile().fileName)];
15
+ }
16
+
17
+ async transform(interfaceDec: InterfaceDeclaration, context: SchemaExtractorContext) {
18
+ const members = await pMapSeries(interfaceDec.members, async (member) => {
19
+ const typeSchema = await context.computeSchema(member);
20
+ return typeSchema;
21
+ });
22
+ return new InterfaceSchema(interfaceDec.name.getText(), members);
23
+ }
24
+ }
@@ -0,0 +1,18 @@
1
+ import ts, { LiteralTypeNode, Node } from 'typescript';
2
+ import { TypeRefSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+
5
+ export class LiteralTypeTransformer implements SchemaTransformer {
6
+ predicate(node: Node) {
7
+ return node.kind === ts.SyntaxKind.LiteralType;
8
+ }
9
+
10
+ async getIdentifiers() {
11
+ return [];
12
+ }
13
+
14
+ async transform(literalType: LiteralTypeNode) {
15
+ const type = literalType.literal.getText();
16
+ return new TypeRefSchema(type);
17
+ }
18
+ }
@@ -0,0 +1,32 @@
1
+ import { SchemaNode, FunctionSchema, Modifier } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { Node, MethodDeclaration as MethodDeclarationNode } from 'typescript';
3
+ import { SchemaExtractorContext } from '../schema-extractor-context';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { ExportIdentifier } from '../export-identifier';
6
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
7
+ import { getParams } from './utils/get-params';
8
+
9
+ export class MethodDeclaration implements SchemaTransformer {
10
+ predicate(node: Node) {
11
+ return node.kind === ts.SyntaxKind.MethodDeclaration;
12
+ }
13
+
14
+ async getIdentifiers(funcDec: MethodDeclarationNode) {
15
+ return [new ExportIdentifier(this.getName(funcDec), funcDec.getSourceFile().fileName)];
16
+ }
17
+
18
+ private getName(funcDec: MethodDeclarationNode) {
19
+ return funcDec.name?.getText() || '';
20
+ }
21
+
22
+ async transform(methodDec: MethodDeclarationNode, context: SchemaExtractorContext): Promise<SchemaNode> {
23
+ const name = this.getName(methodDec);
24
+ const info = await context.getQuickInfo(methodDec.name);
25
+ const displaySig = info?.body?.displayString;
26
+ const returnTypeStr = parseTypeFromQuickInfo(info);
27
+ const params = await getParams(methodDec.parameters, context);
28
+ const modifiers = methodDec.modifiers?.map((modifier) => modifier.getText()) || [];
29
+ const returnType = await context.resolveType(methodDec, returnTypeStr);
30
+ return new FunctionSchema(name, params, returnType, displaySig || '', modifiers as Modifier[]);
31
+ }
32
+ }
@@ -0,0 +1,30 @@
1
+ import { SchemaNode, FunctionSchema } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { Node, MethodSignature as MethodSignatureNode } from 'typescript';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
6
+ import { getParams } from './utils/get-params';
7
+
8
+ export class MethodSignatureTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.MethodSignature;
11
+ }
12
+
13
+ getName(node: MethodSignatureNode) {
14
+ return node.name.getText();
15
+ }
16
+
17
+ async getIdentifiers() {
18
+ return [];
19
+ }
20
+
21
+ async transform(methodSig: MethodSignatureNode, context: SchemaExtractorContext): Promise<SchemaNode> {
22
+ const name = this.getName(methodSig);
23
+ const info = await context.getQuickInfo(methodSig.name);
24
+ const displaySig = info?.body?.displayString;
25
+ const returnTypeStr = parseTypeFromQuickInfo(info);
26
+ const args = await getParams(methodSig.parameters, context);
27
+ const returnType = await context.resolveType(methodSig, returnTypeStr);
28
+ return new FunctionSchema(name, args, returnType, displaySig || '');
29
+ }
30
+ }
@@ -0,0 +1,30 @@
1
+ import { SchemaNode, VariableSchema } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { Node, PropertyDeclaration as PropertyDeclarationNode } from 'typescript';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { ExportIdentifier } from '../export-identifier';
6
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
7
+
8
+ export class PropertyDeclaration implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.PropertyDeclaration;
11
+ }
12
+
13
+ getName(node: PropertyDeclarationNode) {
14
+ return node.name.getText();
15
+ }
16
+
17
+ async getIdentifiers(node: PropertyDeclarationNode) {
18
+ return [new ExportIdentifier(node.name.getText(), node.getSourceFile().fileName)];
19
+ }
20
+
21
+ async transform(propertyDec: PropertyDeclarationNode, context: SchemaExtractorContext): Promise<SchemaNode> {
22
+ const name = this.getName(propertyDec);
23
+ const info = await context.getQuickInfo(propertyDec.name);
24
+ const displaySig = info?.body?.displayString;
25
+ const typeStr = parseTypeFromQuickInfo(info);
26
+ const type = await context.resolveType(propertyDec, typeStr);
27
+
28
+ return new VariableSchema(name || '', displaySig || '', type);
29
+ }
30
+ }
@@ -0,0 +1,37 @@
1
+ import { FunctionSchema, SchemaNode, VariableSchema } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { FunctionTypeNode, Node, PropertySignature as PropertySignatureNode } from 'typescript';
3
+ import { getParams } from './utils/get-params';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import { parseReturnTypeFromQuickInfo, parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
7
+
8
+ export class PropertySignature implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.PropertySignature;
11
+ }
12
+
13
+ getName(node: PropertySignatureNode) {
14
+ return node.name.getText();
15
+ }
16
+
17
+ async getIdentifiers() {
18
+ return [];
19
+ }
20
+
21
+ async transform(prop: PropertySignatureNode, context: SchemaExtractorContext): Promise<SchemaNode> {
22
+ const name = this.getName(prop);
23
+ const info = await context.getQuickInfo(prop.name);
24
+ const displaySig = info?.body?.displayString || '';
25
+ if (prop.type?.kind === ts.SyntaxKind.FunctionType) {
26
+ // e.g. `propertySig: () => void;` inside interface
27
+ const propType = prop.type as FunctionTypeNode;
28
+ const args = await getParams(propType.parameters, context);
29
+ const typeStr = parseReturnTypeFromQuickInfo(info);
30
+ const returnType = await context.resolveType(propType, typeStr);
31
+ return new FunctionSchema(name, args, returnType, displaySig);
32
+ }
33
+ const typeStr = parseTypeFromQuickInfo(info);
34
+ const type = await context.resolveType(prop, typeStr);
35
+ return new VariableSchema(name, displaySig, type);
36
+ }
37
+ }
@@ -1,5 +1,7 @@
1
1
  import ts, { Node, SourceFile } from 'typescript';
2
2
  import { compact, flatten } from 'lodash';
3
+ import pMapSeries from 'p-map-series';
4
+ import { Module } from '@teambit/semantics.entities.semantic-schema';
3
5
  import { SchemaTransformer } from '../schema-transformer';
4
6
  import { ExportIdentifier } from '../export-identifier';
5
7
  import { SchemaExtractorContext } from '../schema-extractor-context';
@@ -29,13 +31,11 @@ export class SourceFileTransformer implements SchemaTransformer {
29
31
 
30
32
  async transform(node: SourceFile, context: SchemaExtractorContext) {
31
33
  const exports = this.listExports(node);
32
- const schemas = await Promise.all(
33
- exports.map((exportNode) => {
34
- return context.computeSchema(exportNode);
35
- })
36
- );
34
+ const schemas = await pMapSeries(exports, (exportNode) => {
35
+ return context.computeSchema(exportNode);
36
+ });
37
37
 
38
- return schemas;
38
+ return new Module(schemas);
39
39
  }
40
40
 
41
41
  /**