@teambit/typescript 1.0.173 → 1.0.174

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.
@@ -1,3 +1,4 @@
1
+ import { SchemaNodeTransformer, SchemaTransformer } from './schema-transformer';
1
2
  export type ExtractorOptions = {
2
3
  /**
3
4
  * name of the string.
@@ -14,4 +15,12 @@ export type ExtractorOptions = {
14
15
  * typescript compiler options. always overrides all.
15
16
  */
16
17
  compilerOptions?: string;
18
+ /**
19
+ * schema transformers.
20
+ */
21
+ schemaTransformers?: SchemaTransformer[];
22
+ /**
23
+ * api transformers.
24
+ */
25
+ apiTransformers?: SchemaNodeTransformer[];
17
26
  };
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["extractor-options.ts"],"sourcesContent":["export type ExtractorOptions = {\n /**\n * name of the string.\n */\n name?: string;\n\n /**\n * tsconfig string path.\n */\n tsconfig?: string;\n\n /**\n * TODO: support typescript module path.\n */\n // typescript?: string;\n\n /**\n * typescript compiler options. always overrides all.\n */\n compilerOptions?: string;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["extractor-options.ts"],"sourcesContent":["import { SchemaNodeTransformer, SchemaTransformer } from './schema-transformer';\n\nexport type ExtractorOptions = {\n /**\n * name of the string.\n */\n name?: string;\n\n /**\n * tsconfig string path.\n */\n tsconfig?: string;\n\n /**\n * TODO: support typescript module path.\n */\n // typescript?: string;\n\n /**\n * typescript compiler options. always overrides all.\n */\n compilerOptions?: string;\n\n /**\n * schema transformers.\n */\n schemaTransformers?: SchemaTransformer[];\n\n /**\n * api transformers.\n */\n apiTransformers?: SchemaNodeTransformer[];\n};\n"],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import * as compositions_0 from '/Users/giladshoham/Library/Caches/Bit/capsules/root/95c2f3515392701f327019ce43202e7563a02128/teambit.typescript_typescript@1.0.174/dist/typescript.composition.js';
2
+ import * as overview_0 from '/Users/giladshoham/Library/Caches/Bit/capsules/root/95c2f3515392701f327019ce43202e7563a02128/teambit.typescript_typescript@1.0.174/dist/typescript.docs.mdx';
3
+
4
+ export const compositions = [compositions_0];
5
+ export const overview = [overview_0];
6
+
7
+ export const compositions_metadata = {"compositions":[{"displayName":"Logo","identifier":"Logo"}]};
@@ -488,7 +488,11 @@ class SchemaExtractorContext {
488
488
  return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);
489
489
  }
490
490
  const apiTransformer = this.extractor.getAPITransformer(schemaNode);
491
- return apiTransformer ? apiTransformer.transform(schemaNode, this) : schemaNode;
491
+ let transformedApi = apiTransformer ? await apiTransformer.transform(schemaNode, this) : schemaNode;
492
+ if (!transformedApi) {
493
+ transformedApi = new (_semanticsEntities().IgnoredSchema)(schemaNode);
494
+ }
495
+ return transformedApi;
492
496
  }
493
497
  getCompIdByPkgName(pkgName) {
494
498
  return this.componentDeps.find(dep => dep.packageName === pkgName)?.componentId;
@@ -1 +1 @@
1
- {"version":3,"names":["_tsutils","data","require","_typescript","_interopRequireWildcard","_lodash","_utils","_path","_semanticsEntities","_isRelativeImport","_interopRequireDefault","_pMapSeries","_identifierList","_parseTypeFromQuickInfo","_jsdocToDocSchema","_identifier","_exportIdentifier","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_defineProperty","key","value","_toPropertyKey","enumerable","configurable","writable","_toPrimitive","String","Symbol","toPrimitive","TypeError","Number","SchemaExtractorContext","mainFile","pathNormalizeToLinux","getPathRelativeToComponent","component","path","identifiers","_identifiers","internalIdentifiers","_internalIdentifiers","computed","_computed","mainFileIdentifierKey","getIdentifierKey","mainModuleIdentifiers","constructor","tsserver","extractor","componentDeps","componentRootPath","hostRootPath","formatter","Map","getComputedNodeKey","filePath","line","character","schema","getIdentifierKeyForNode","node","getSourceFile","fileName","setComputed","location","__schema","setIdentifiers","setInternalIdentifiers","existing","uniqueIdentifiers","uniqBy","concat","k","aliasId","id","IdentifierList","findComputedSchemaByName","name","Array","from","values","filter","computeSchema","getLocation","SyntaxKind","kind","existingComputedSchema","computedSchema","transformSchemaNode","transformAPI","targetSourceFile","absolutePath","sourceFile","position","getLineAndCharacterOfPosition","getStart","getLocationAsString","basePath","filesystem","files","base","relative","getSignature","getSignatureHelp","getPath","getPosition","offset","getPositionOfLineAndCharacter","startsWith","join","getQuickInfo","err","message","Error","getQuickInfoDisplayString","quickInfo","body","displayString","typeDefinition","getTypeDefinition","visitTypeDefinition","getPathWithoutExtension","knownExtensions","fileExtension","extname","substring","filePathWithoutExtension","includes","replace","RegExp","isAbsolute","isIndexFile","currentFilePath","indexFilePath","findFileInComponent","normalizedFilePath","pathToCompareWithoutExtension","matchingFile","find","file","currentFilePathWithoutExtension","isSameFilePath","matches","parsePackageNameFromPath","parts","split","length","lastPart","sep","pkgParts","pkgName","getSourceFileInsideComponent","parseSourceFile","getSourceFileFromNode","getFilePathByNode","undefined","def","getDefinition","firstDef","head","definitionInfo","definition","startPosition","start","pos","nodeAtPos","getTokenAtPosition","visitDefinition","getTypeRefForExternalNode","visit","parent","Identifier","SourceFile","references","isExported","isFromComponent","getFileIdentifiers","exportDec","specifierPathStr","ExportDeclaration","moduleSpecifier","getText","specifierPath","absPath","resolve","getIdentifiers","getFileExports","identifier","ExportIdentifier","isExportIdentifier","getFileInternals","computeIdentifiers","headTypeDefinition","headDefinition","unknownExactType","typeStr","isTypeStrFromQuickInfo","InferenceTypeSchema","info","type","parseTypeFromQuickInfo","isDefInSameLocation","loc","resolveType","internalRef","getTypeRef","ts","isTypeNode","definitionNode","definitionNodeName","definitionInternalRef","transformer","getTransformer","getTypeRefForExternalPath","schemaNode","apiTransformer","getAPITransformer","transform","getCompIdByPkgName","dep","packageName","componentId","nodeIdentifierKey","nodeIdentifierList","mainIdentifierList","nodeIdentifier","mainIdentifier","parsedNodeIdentifier","parsedMainIdentifier","isExportedFromMain","resolveTypeRef","sourceFilePath","isRelativeImport","TypeRefSchema","compIdByPkg","compIdByPath","getComponentIDByPath","relativeDir","lastIndexOf","absFilePath","compFilePath","idKey","exportedIdentifier","jsDocToDocSchema","canHaveJsDoc","jsDocs","getJsDoc","jsDoc","comment","getTextOfJSDocComment","tags","pMapSeries","tag","tagParser","DocSchema","exports"],"sources":["schema-extractor-context.ts"],"sourcesContent":["import { TsserverClient } from '@teambit/ts-server';\nimport { getTokenAtPosition, canHaveJsDoc, getJsDoc } from 'tsutils';\nimport ts, { ExportAssignment, getTextOfJSDocComment, ExportDeclaration, Node, SyntaxKind, TypeNode } from 'typescript';\nimport { head, uniqBy } from 'lodash';\n// @ts-ignore david we should figure fix this.\n// eslint-disable-next-line import/no-unresolved\nimport protocol from 'typescript/lib/protocol';\nimport { pathNormalizeToLinux } from '@teambit/legacy/dist/utils';\nimport { resolve, sep, relative, join, isAbsolute, extname } from 'path';\nimport { Component, ComponentID } from '@teambit/component';\nimport {\n TypeRefSchema,\n SchemaNode,\n InferenceTypeSchema,\n Location,\n DocSchema,\n} from '@teambit/semantics.entities.semantic-schema';\nimport isRelativeImport from '@teambit/legacy/dist/utils/is-relative-import';\nimport { ComponentDependency } from '@teambit/dependency-resolver';\nimport { Formatter } from '@teambit/formatter';\nimport pMapSeries from 'p-map-series';\nimport { TypeScriptExtractor } from './typescript.extractor';\nimport { IdentifierList } from './identifier-list';\nimport { parseTypeFromQuickInfo } from './transformers/utils/parse-type-from-quick-info';\nimport { tagParser } from './transformers/utils/jsdoc-to-doc-schema';\nimport { Identifier } from './identifier';\nimport { ExportIdentifier } from './export-identifier';\n\nexport class SchemaExtractorContext {\n /**\n * list of all declared identifiers (exported and internal) by filename\n */\n private _identifiers = new Map<string, IdentifierList>();\n private _internalIdentifiers = new Map<string, IdentifierList>();\n\n /**\n * computed nodes by filename and (position (line:character))\n */\n private _computed = new Map<string, SchemaNode>();\n\n get mainFile() {\n return pathNormalizeToLinux(this.getPathRelativeToComponent(this.component.mainFile.path));\n }\n\n get identifiers() {\n return this._identifiers;\n }\n\n get internalIdentifiers() {\n return this._internalIdentifiers;\n }\n\n get computed() {\n return this._computed;\n }\n\n get mainFileIdentifierKey() {\n const mainFile = this.component.mainFile;\n return this.getIdentifierKey(mainFile.path);\n }\n\n get mainModuleIdentifiers() {\n return this.identifiers.get(this.mainFileIdentifierKey);\n }\n\n constructor(\n readonly tsserver: TsserverClient,\n readonly component: Component,\n readonly extractor: TypeScriptExtractor,\n readonly componentDeps: ComponentDependency[],\n readonly componentRootPath: string,\n readonly hostRootPath: string,\n readonly formatter?: Formatter\n ) {\n this.componentRootPath = pathNormalizeToLinux(componentRootPath);\n this.hostRootPath = pathNormalizeToLinux(hostRootPath);\n }\n\n getComputedNodeKey({ filePath, line, character }: Location, schema: string) {\n return `${filePath}:${line}:${character}__${schema}`;\n }\n\n getIdentifierKeyForNode(node: Node) {\n const filePath = node.getSourceFile().fileName;\n return this.getIdentifierKey(filePath);\n }\n\n getIdentifierKey(filePath: string) {\n return pathNormalizeToLinux(filePath);\n }\n\n setComputed(node: SchemaNode) {\n const { location, __schema } = node;\n const key = this.getComputedNodeKey(location, __schema);\n this.computed.set(key, node);\n }\n\n setIdentifiers(filePath: string, identifiers: IdentifierList) {\n this._identifiers.set(this.getIdentifierKey(filePath), identifiers);\n }\n\n setInternalIdentifiers(filePath: string, identifiers: IdentifierList) {\n const existing = this._internalIdentifiers.get(filePath);\n if (!existing) {\n this._internalIdentifiers.set(filePath, identifiers);\n } else {\n const uniqueIdentifiers = uniqBy(existing.identifiers.concat(identifiers.identifiers), (k) => k.aliasId || k.id);\n this._internalIdentifiers.set(filePath, new IdentifierList(uniqueIdentifiers));\n }\n }\n\n findComputedSchemaByName(name: string) {\n const computed = Array.from(this.computed.values());\n return computed.filter((schema) => schema.name === name);\n }\n\n async computeSchema(node: Node): Promise<SchemaNode> {\n const location = this.getLocation(node);\n const key = this.getComputedNodeKey(location, SyntaxKind[node.kind]);\n const existingComputedSchema = this.computed.get(key);\n if (existingComputedSchema) {\n return existingComputedSchema;\n }\n const computedSchema = await this.extractor.computeSchema(node, this);\n this.setComputed(computedSchema);\n return computedSchema;\n }\n\n async transformSchemaNode(schema: SchemaNode) {\n return this.extractor.transformAPI(schema, this);\n }\n\n /**\n * returns the location of a node in a source file.\n */\n getLocation(node: Node, targetSourceFile?: ts.SourceFile, absolutePath = false): Location {\n const sourceFile = targetSourceFile || node.getSourceFile();\n const filePath = absolutePath ? sourceFile.fileName : this.getPathRelativeToComponent(sourceFile.fileName);\n const position = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n const line = position.line + 1;\n const character = position.character + 1;\n\n return {\n filePath: pathNormalizeToLinux(filePath),\n line,\n character,\n };\n }\n\n getLocationAsString(node: Node): string {\n const location = this.getLocation(node);\n return `${node.getSourceFile().fileName}, line: ${location.line}, character: ${location.character}`;\n }\n\n getPathRelativeToComponent(filePath: string): string {\n const basePath = this.component.filesystem.files[0].base;\n return relative(basePath, filePath);\n }\n\n /**\n * returns a signature for a node.\n */\n async getSignature(node: Node) {\n return this.tsserver.getSignatureHelp(this.getPath(node), this.getLocation(node));\n }\n\n /**\n * get the position for the tsserver.\n */\n getPosition(sourceFile: ts.SourceFile, line: number, offset: number): number {\n return sourceFile.getPositionOfLineAndCharacter(line - 1, offset - 1);\n }\n\n /**\n * get the path for a source file.\n */\n getPath(node: Node) {\n const sourceFile = node.getSourceFile();\n\n const fileName = sourceFile.fileName;\n\n if (!fileName.startsWith(this.componentRootPath) && !fileName.startsWith(this.hostRootPath)) {\n return join(this.componentRootPath, fileName);\n }\n\n return sourceFile.fileName;\n }\n\n async getQuickInfo(node: Node) {\n const location = this.getLocation(node);\n try {\n return await this.tsserver.getQuickInfo(this.getPath(node), location);\n } catch (err: any) {\n if (err.message === 'No content available.') {\n throw new Error(\n `unable to get quickinfo data from tsserver at ${this.getPath(node)}, Ln ${location.line}, Col ${\n location.character\n }`\n );\n }\n throw err;\n }\n }\n\n async getQuickInfoDisplayString(node: Node): Promise<string> {\n const quickInfo = await this.getQuickInfo(node);\n return quickInfo?.body?.displayString || '';\n }\n\n /**\n * returns the type definition for a type.\n */\n typeDefinition(node: Node) {\n return this.tsserver.getTypeDefinition(this.getPath(node), this.getLocation(node));\n }\n\n visitTypeDefinition() {}\n\n private getPathWithoutExtension(filePath: string) {\n const knownExtensions = ['ts', 'js', 'jsx', 'tsx'];\n const fileExtension = extname(filePath).substring(1);\n\n const filePathWithoutExtension = () => {\n if (knownExtensions.includes(fileExtension)) {\n return filePath.replace(new RegExp(`\\\\.${fileExtension}$`), '');\n }\n return filePath;\n };\n\n if (!isAbsolute(filePath)) {\n return filePathWithoutExtension();\n }\n\n if (filePath.startsWith(this.componentRootPath)) {\n return relative(this.componentRootPath, filePathWithoutExtension());\n }\n if (filePath.startsWith(this.hostRootPath)) {\n return relative(this.hostRootPath, filePathWithoutExtension());\n }\n return filePathWithoutExtension();\n }\n\n private isIndexFile(filePath: string, currentFilePath: string) {\n const indexFilePath = join(filePath, 'index');\n return pathNormalizeToLinux(indexFilePath) === currentFilePath;\n }\n\n findFileInComponent(filePath: string) {\n const normalizedFilePath = pathNormalizeToLinux(filePath);\n const pathToCompareWithoutExtension = this.getPathWithoutExtension(normalizedFilePath);\n\n const matchingFile = this.component.filesystem.files.find((file) => {\n const currentFilePath = pathNormalizeToLinux(file.path);\n const currentFilePathWithoutExtension = this.getPathWithoutExtension(currentFilePath);\n\n const isSameFilePath = pathToCompareWithoutExtension === currentFilePathWithoutExtension;\n\n const matches =\n isSameFilePath || this.isIndexFile(pathToCompareWithoutExtension, currentFilePathWithoutExtension);\n\n return matches;\n });\n return matchingFile;\n }\n\n private parsePackageNameFromPath(path: string) {\n const parts = path.split('node_modules');\n\n if (parts.length === 1) {\n return path;\n }\n\n const lastPart = parts[parts.length - 1].replace(sep, '');\n const pkgParts = lastPart.split('/');\n if (lastPart.startsWith('@')) {\n // scoped package\n return `${pkgParts[0]}/${pkgParts[1]}`;\n }\n const pkgName = pkgParts[0];\n if (pkgName === 'typescript') {\n // it's a built-in type, such as \"string\".\n return '';\n }\n return pkgName;\n }\n\n /**\n * return the file if part of the component.\n * otherwise, a reference to the target package and the type name.\n */\n getSourceFileInsideComponent(filePath: string) {\n const file = this.findFileInComponent(filePath);\n return file && this.extractor.parseSourceFile(file);\n }\n\n async getSourceFileFromNode(node: Node) {\n const filePath = await this.getFilePathByNode(node);\n if (!filePath) {\n return undefined;\n }\n return this.getSourceFileInsideComponent(filePath);\n }\n\n async getFilePathByNode(node: Node) {\n const def = await this.tsserver.getDefinition(this.getPath(node), this.getLocation(node));\n\n const firstDef = head(def?.body);\n return firstDef?.file;\n }\n\n async definitionInfo(node: Node): Promise<protocol.DefinitionInfo | undefined> {\n const location = this.getLocation(node);\n const filePath = this.getPath(node);\n\n const def = await this.tsserver.getDefinition(filePath, location);\n\n const firstDef = head(def?.body);\n\n return firstDef;\n }\n\n /**\n * get a definition for a given node.\n */\n async definition(definition: protocol.DefinitionInfo): Promise<Node | undefined> {\n const startPosition = definition.start;\n const sourceFile = this.getSourceFileInsideComponent(definition.file);\n if (!sourceFile) {\n // it might be an external reference, cant get the node\n return undefined;\n }\n const pos = this.getPosition(sourceFile, startPosition.line, startPosition.offset);\n const nodeAtPos = getTokenAtPosition(sourceFile, pos);\n return nodeAtPos;\n }\n\n /**\n * visit a definition for node - e.g. return it's schema.\n */\n async visitDefinition(node: Node): Promise<SchemaNode | undefined> {\n const definitionInfo = await this.definitionInfo(node);\n if (!definitionInfo) {\n return undefined;\n }\n\n const definition = await this.definition(definitionInfo);\n if (!definition) {\n return this.getTypeRefForExternalNode(node);\n }\n\n return this.visit(definition.parent);\n }\n\n async visit(node: Node): Promise<SchemaNode> {\n if (node.kind === SyntaxKind.Identifier && node.parent.parent.kind !== SyntaxKind.SourceFile) {\n return this.visit(node.parent);\n }\n return this.extractor.computeSchema(node, this);\n }\n\n references() {}\n\n isExported() {}\n\n isFromComponent() {}\n\n async getFileIdentifiers(exportDec: ExportDeclaration | ExportAssignment) {\n const file = exportDec.getSourceFile().fileName;\n const specifierPathStr =\n (exportDec.kind === SyntaxKind.ExportDeclaration && exportDec.moduleSpecifier?.getText()) || '';\n const specifierPath = specifierPathStr.substring(1, specifierPathStr.length - 1);\n const absPath = resolve(file, '..', specifierPath);\n const sourceFile = this.getSourceFileInsideComponent(absPath);\n if (!sourceFile) return [];\n return this.getIdentifiers(sourceFile);\n }\n\n async getFileExports(exportDec: ExportDeclaration | ExportAssignment) {\n const identifiers = await this.getFileIdentifiers(exportDec);\n return identifiers.filter((identifier) => ExportIdentifier.isExportIdentifier(identifier));\n }\n\n async getFileInternals(exportDec: ExportDeclaration | ExportAssignment) {\n const identifiers = await this.getFileIdentifiers(exportDec);\n return identifiers.filter((identifier) => !ExportIdentifier.isExportIdentifier(identifier));\n }\n\n getIdentifiers(node: Node) {\n return this.extractor.computeIdentifiers(node, this);\n }\n\n /**\n * tsserver has two different calls: \"definition\" and \"typeDefinition\".\n * normally, we need the \"typeDefinition\" to get the type data of a node.\n * sometimes, it has no data, for example when the node is of type TypeReference, and then using \"definition\" is\n * helpful. (couldn't find a rule when to use each one. e.g. \"VariableDeclaration\" sometimes has data only in\n * \"definition\" but it's not clear when/why).\n */\n async getDefinition(node: Node) {\n const typeDefinition = await this.typeDefinition(node);\n const headTypeDefinition = head(typeDefinition?.body);\n if (headTypeDefinition) {\n return headTypeDefinition;\n }\n\n const definition = await this.tsserver.getDefinition(node.getSourceFile().fileName, this.getLocation(node));\n const headDefinition = head(definition?.body);\n\n return headDefinition;\n }\n\n // when we can't figure out the component/package/type of this node, we'll use the typeStr as the type.\n private async unknownExactType(node: Node, location: Location, typeStr = 'any', isTypeStrFromQuickInfo = true) {\n if (isTypeStrFromQuickInfo) {\n return new InferenceTypeSchema(location, typeStr || 'any');\n }\n const info = await this.getQuickInfo(node);\n const type = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(location, type, typeStr);\n }\n\n // the reason for this check is to avoid infinite loop when calling `this.jump` with the same file+location\n private isDefInSameLocation(node: Node, definition: protocol.FileSpanWithContext) {\n if (definition.file !== node.getSourceFile().fileName) {\n return false;\n }\n const loc = this.getLocation(node);\n\n return loc.line === definition.start.line && loc.character === definition.start.offset;\n }\n\n /**\n * resolve a type by a node and its identifier.\n */\n async resolveType(\n node: Node & { type?: TypeNode },\n typeStr: string,\n isTypeStrFromQuickInfo = true\n ): Promise<SchemaNode> {\n const location = this.getLocation(node);\n\n // check if internal ref with typeInfo\n const internalRef = await this.getTypeRef(typeStr, this.getIdentifierKeyForNode(node), location);\n\n if (internalRef) return internalRef;\n\n // if a node has \"type\" prop, it has the type data of the node. this normally happens when the code has the type\n // explicitly, e.g. `const str: string` vs implicitly `const str = 'some-string'`, which the node won't have \"type\"\n if (node.type && ts.isTypeNode(node.type)) {\n return this.computeSchema(node.type);\n }\n\n const definition = await this.getDefinition(node);\n\n if (!definition) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n if (this.isDefInSameLocation(node, definition)) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const definitionNode = await this.definition(definition);\n\n if (!definitionNode) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const definitionNodeName = definitionNode?.getText();\n\n // check if internal ref with definition info\n const definitionInternalRef = await this.getTypeRef(\n definitionNodeName,\n this.getIdentifierKeyForNode(definitionNode),\n location\n );\n\n if (definitionInternalRef) return definitionInternalRef;\n\n const transformer = this.extractor.getTransformer(definitionNode, this);\n\n if (transformer === undefined) {\n const file = this.findFileInComponent(definition.file);\n if (!file) return this.getTypeRefForExternalPath(typeStr, definition.file, location);\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const schemaNode = await this.visit(definitionNode);\n\n if (!schemaNode) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const apiTransformer = this.extractor.getAPITransformer(schemaNode);\n return apiTransformer ? apiTransformer.transform(schemaNode, this) : schemaNode;\n }\n\n private getCompIdByPkgName(pkgName: string): ComponentID | undefined {\n return this.componentDeps.find((dep) => dep.packageName === pkgName)?.componentId;\n }\n\n async getTypeRef(typeStr: string, filePath: string, location: Location): Promise<TypeRefSchema | undefined> {\n const nodeIdentifierKey = this.getIdentifierKey(filePath);\n const mainFileIdentifierKey = this.mainFileIdentifierKey;\n\n const nodeIdentifierList = this.identifiers.get(nodeIdentifierKey);\n const mainIdentifierList = this.identifiers.get(mainFileIdentifierKey);\n\n const nodeIdentifier = new Identifier(typeStr, nodeIdentifierKey);\n const mainIdentifier = new Identifier(typeStr, mainFileIdentifierKey);\n\n const parsedNodeIdentifier = nodeIdentifierList?.find(nodeIdentifier);\n const parsedMainIdentifier = mainIdentifierList?.find(mainIdentifier);\n const isExportedFromMain = parsedMainIdentifier && ExportIdentifier.isExportIdentifier(parsedMainIdentifier);\n\n if (!parsedNodeIdentifier) return undefined;\n\n const internalRef = !isExportedFromMain;\n\n if (internalRef) {\n this.setInternalIdentifiers(filePath, new IdentifierList([parsedNodeIdentifier]));\n }\n\n return this.resolveTypeRef(parsedNodeIdentifier, location, isExportedFromMain);\n }\n\n async resolveTypeRef(\n identifier: Identifier,\n location: Location,\n isExportedFromMain?: boolean\n ): Promise<TypeRefSchema> {\n const sourceFilePath = identifier.sourceFilePath;\n\n if (!sourceFilePath || (isExportedFromMain && isRelativeImport(sourceFilePath))) {\n return new TypeRefSchema(\n location,\n identifier.id,\n undefined,\n undefined,\n !isExportedFromMain ? this.getPathRelativeToComponent(identifier.filePath) : undefined\n );\n }\n\n if (!isRelativeImport(sourceFilePath)) {\n const pkgName = this.parsePackageNameFromPath(sourceFilePath);\n const compIdByPkg = this.getCompIdByPkgName(pkgName);\n\n const compIdByPath = await this.extractor.getComponentIDByPath(sourceFilePath);\n\n if (compIdByPath) {\n return new TypeRefSchema(location, identifier.id, compIdByPath);\n }\n\n if (compIdByPkg) {\n return new TypeRefSchema(location, identifier.id, compIdByPkg);\n }\n\n // package without comp id\n return new TypeRefSchema(location, identifier.id, undefined, pkgName);\n }\n\n const relativeDir = identifier.filePath.substring(0, identifier.filePath.lastIndexOf('/'));\n const absFilePath = resolve(this.componentRootPath, relativeDir, sourceFilePath);\n\n const compFilePath = this.findFileInComponent(absFilePath);\n if (!compFilePath) {\n // @todo handle this better\n throw new Error(\n `cannot find file in component \\n source file path ${sourceFilePath}\\n \n identifier file path ${identifier.filePath}\\nrelative dir ${relativeDir}\\n\n absFilePath ${absFilePath}`\n );\n return new TypeRefSchema(location, identifier.id);\n }\n\n const idKey = this.getIdentifierKey(compFilePath?.path);\n\n // if re exported from a file, recurse until definition\n const exportedIdentifier = (this.identifiers.get(idKey)?.identifiers || []).find((i) => i.id === identifier.id);\n\n if (exportedIdentifier) {\n return this.resolveTypeRef(exportedIdentifier, location, isExportedFromMain);\n }\n\n return new TypeRefSchema(location, identifier.id);\n }\n\n async getTypeRefForExternalNode(node: Node): Promise<TypeRefSchema> {\n const info = await this.getQuickInfo(node);\n const typeStr = parseTypeFromQuickInfo(info);\n const location = this.getLocation(node);\n const filePath = this.getPath(node);\n return this.getTypeRefForExternalPath(typeStr, filePath, location);\n }\n\n async getTypeRefForExternalPath(typeStr: string, filePath: string, location: Location): Promise<TypeRefSchema> {\n const compIdByPath = await this.extractor.getComponentIDByPath(filePath);\n if (compIdByPath) {\n return new TypeRefSchema(location, typeStr, compIdByPath);\n }\n const pkgName = this.parsePackageNameFromPath(filePath);\n const compIdByPkg = this.getCompIdByPkgName(pkgName);\n if (compIdByPkg) {\n return new TypeRefSchema(location, typeStr, compIdByPkg);\n }\n return new TypeRefSchema(location, typeStr, undefined, pkgName);\n }\n\n async jsDocToDocSchema(node: Node): Promise<DocSchema | undefined> {\n if (!canHaveJsDoc(node)) {\n return undefined;\n }\n const jsDocs = getJsDoc(node);\n if (!jsDocs.length) {\n return undefined;\n }\n // not sure how common it is to have multiple JSDocs. never seen it before.\n // regardless, in typescript implementation of methods like `getJSDocDeprecatedTag()`, they use the first one. (`getFirstJSDocTag()`)\n const jsDoc = jsDocs[0];\n const location = this.getLocation(jsDoc);\n const comment = getTextOfJSDocComment(jsDoc.comment);\n const tags = jsDoc.tags ? await pMapSeries(jsDoc.tags, (tag) => tagParser(tag, this, this.formatter)) : undefined;\n return new DocSchema(location, jsDoc.getText(), comment, tags);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_tsutils","data","require","_typescript","_interopRequireWildcard","_lodash","_utils","_path","_semanticsEntities","_isRelativeImport","_interopRequireDefault","_pMapSeries","_identifierList","_parseTypeFromQuickInfo","_jsdocToDocSchema","_identifier","_exportIdentifier","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_defineProperty","key","value","_toPropertyKey","enumerable","configurable","writable","_toPrimitive","String","Symbol","toPrimitive","TypeError","Number","SchemaExtractorContext","mainFile","pathNormalizeToLinux","getPathRelativeToComponent","component","path","identifiers","_identifiers","internalIdentifiers","_internalIdentifiers","computed","_computed","mainFileIdentifierKey","getIdentifierKey","mainModuleIdentifiers","constructor","tsserver","extractor","componentDeps","componentRootPath","hostRootPath","formatter","Map","getComputedNodeKey","filePath","line","character","schema","getIdentifierKeyForNode","node","getSourceFile","fileName","setComputed","location","__schema","setIdentifiers","setInternalIdentifiers","existing","uniqueIdentifiers","uniqBy","concat","k","aliasId","id","IdentifierList","findComputedSchemaByName","name","Array","from","values","filter","computeSchema","getLocation","SyntaxKind","kind","existingComputedSchema","computedSchema","transformSchemaNode","transformAPI","targetSourceFile","absolutePath","sourceFile","position","getLineAndCharacterOfPosition","getStart","getLocationAsString","basePath","filesystem","files","base","relative","getSignature","getSignatureHelp","getPath","getPosition","offset","getPositionOfLineAndCharacter","startsWith","join","getQuickInfo","err","message","Error","getQuickInfoDisplayString","quickInfo","body","displayString","typeDefinition","getTypeDefinition","visitTypeDefinition","getPathWithoutExtension","knownExtensions","fileExtension","extname","substring","filePathWithoutExtension","includes","replace","RegExp","isAbsolute","isIndexFile","currentFilePath","indexFilePath","findFileInComponent","normalizedFilePath","pathToCompareWithoutExtension","matchingFile","find","file","currentFilePathWithoutExtension","isSameFilePath","matches","parsePackageNameFromPath","parts","split","length","lastPart","sep","pkgParts","pkgName","getSourceFileInsideComponent","parseSourceFile","getSourceFileFromNode","getFilePathByNode","undefined","def","getDefinition","firstDef","head","definitionInfo","definition","startPosition","start","pos","nodeAtPos","getTokenAtPosition","visitDefinition","getTypeRefForExternalNode","visit","parent","Identifier","SourceFile","references","isExported","isFromComponent","getFileIdentifiers","exportDec","specifierPathStr","ExportDeclaration","moduleSpecifier","getText","specifierPath","absPath","resolve","getIdentifiers","getFileExports","identifier","ExportIdentifier","isExportIdentifier","getFileInternals","computeIdentifiers","headTypeDefinition","headDefinition","unknownExactType","typeStr","isTypeStrFromQuickInfo","InferenceTypeSchema","info","type","parseTypeFromQuickInfo","isDefInSameLocation","loc","resolveType","internalRef","getTypeRef","ts","isTypeNode","definitionNode","definitionNodeName","definitionInternalRef","transformer","getTransformer","getTypeRefForExternalPath","schemaNode","apiTransformer","getAPITransformer","transformedApi","transform","IgnoredSchema","getCompIdByPkgName","dep","packageName","componentId","nodeIdentifierKey","nodeIdentifierList","mainIdentifierList","nodeIdentifier","mainIdentifier","parsedNodeIdentifier","parsedMainIdentifier","isExportedFromMain","resolveTypeRef","sourceFilePath","isRelativeImport","TypeRefSchema","compIdByPkg","compIdByPath","getComponentIDByPath","relativeDir","lastIndexOf","absFilePath","compFilePath","idKey","exportedIdentifier","jsDocToDocSchema","canHaveJsDoc","jsDocs","getJsDoc","jsDoc","comment","getTextOfJSDocComment","tags","pMapSeries","tag","tagParser","DocSchema","exports"],"sources":["schema-extractor-context.ts"],"sourcesContent":["import { TsserverClient } from '@teambit/ts-server';\nimport { getTokenAtPosition, canHaveJsDoc, getJsDoc } from 'tsutils';\nimport ts, { ExportAssignment, getTextOfJSDocComment, ExportDeclaration, Node, SyntaxKind, TypeNode } from 'typescript';\nimport { head, uniqBy } from 'lodash';\n// @ts-ignore david we should figure fix this.\n// eslint-disable-next-line import/no-unresolved\nimport protocol from 'typescript/lib/protocol';\nimport { pathNormalizeToLinux } from '@teambit/legacy/dist/utils';\nimport { resolve, sep, relative, join, isAbsolute, extname } from 'path';\nimport { Component, ComponentID } from '@teambit/component';\nimport {\n TypeRefSchema,\n SchemaNode,\n InferenceTypeSchema,\n Location,\n DocSchema,\n IgnoredSchema,\n} from '@teambit/semantics.entities.semantic-schema';\nimport isRelativeImport from '@teambit/legacy/dist/utils/is-relative-import';\nimport { ComponentDependency } from '@teambit/dependency-resolver';\nimport { Formatter } from '@teambit/formatter';\nimport pMapSeries from 'p-map-series';\nimport { TypeScriptExtractor } from './typescript.extractor';\nimport { IdentifierList } from './identifier-list';\nimport { parseTypeFromQuickInfo } from './transformers/utils/parse-type-from-quick-info';\nimport { tagParser } from './transformers/utils/jsdoc-to-doc-schema';\nimport { Identifier } from './identifier';\nimport { ExportIdentifier } from './export-identifier';\n\nexport class SchemaExtractorContext {\n /**\n * list of all declared identifiers (exported and internal) by filename\n */\n private _identifiers = new Map<string, IdentifierList>();\n private _internalIdentifiers = new Map<string, IdentifierList>();\n\n /**\n * computed nodes by filename and (position (line:character))\n */\n private _computed = new Map<string, SchemaNode>();\n\n get mainFile() {\n return pathNormalizeToLinux(this.getPathRelativeToComponent(this.component.mainFile.path));\n }\n\n get identifiers() {\n return this._identifiers;\n }\n\n get internalIdentifiers() {\n return this._internalIdentifiers;\n }\n\n get computed() {\n return this._computed;\n }\n\n get mainFileIdentifierKey() {\n const mainFile = this.component.mainFile;\n return this.getIdentifierKey(mainFile.path);\n }\n\n get mainModuleIdentifiers() {\n return this.identifiers.get(this.mainFileIdentifierKey);\n }\n\n constructor(\n readonly tsserver: TsserverClient,\n readonly component: Component,\n readonly extractor: TypeScriptExtractor,\n readonly componentDeps: ComponentDependency[],\n readonly componentRootPath: string,\n readonly hostRootPath: string,\n readonly formatter?: Formatter\n ) {\n this.componentRootPath = pathNormalizeToLinux(componentRootPath);\n this.hostRootPath = pathNormalizeToLinux(hostRootPath);\n }\n\n getComputedNodeKey({ filePath, line, character }: Location, schema: string) {\n return `${filePath}:${line}:${character}__${schema}`;\n }\n\n getIdentifierKeyForNode(node: Node) {\n const filePath = node.getSourceFile().fileName;\n return this.getIdentifierKey(filePath);\n }\n\n getIdentifierKey(filePath: string) {\n return pathNormalizeToLinux(filePath);\n }\n\n setComputed(node: SchemaNode) {\n const { location, __schema } = node;\n const key = this.getComputedNodeKey(location, __schema);\n this.computed.set(key, node);\n }\n\n setIdentifiers(filePath: string, identifiers: IdentifierList) {\n this._identifiers.set(this.getIdentifierKey(filePath), identifiers);\n }\n\n setInternalIdentifiers(filePath: string, identifiers: IdentifierList) {\n const existing = this._internalIdentifiers.get(filePath);\n if (!existing) {\n this._internalIdentifiers.set(filePath, identifiers);\n } else {\n const uniqueIdentifiers = uniqBy(existing.identifiers.concat(identifiers.identifiers), (k) => k.aliasId || k.id);\n this._internalIdentifiers.set(filePath, new IdentifierList(uniqueIdentifiers));\n }\n }\n\n findComputedSchemaByName(name: string) {\n const computed = Array.from(this.computed.values());\n return computed.filter((schema) => schema.name === name);\n }\n\n async computeSchema(node: Node): Promise<SchemaNode> {\n const location = this.getLocation(node);\n const key = this.getComputedNodeKey(location, SyntaxKind[node.kind]);\n const existingComputedSchema = this.computed.get(key);\n if (existingComputedSchema) {\n return existingComputedSchema;\n }\n const computedSchema = await this.extractor.computeSchema(node, this);\n this.setComputed(computedSchema);\n return computedSchema;\n }\n\n async transformSchemaNode(schema: SchemaNode) {\n return this.extractor.transformAPI(schema, this);\n }\n\n /**\n * returns the location of a node in a source file.\n */\n getLocation(node: Node, targetSourceFile?: ts.SourceFile, absolutePath = false): Location {\n const sourceFile = targetSourceFile || node.getSourceFile();\n const filePath = absolutePath ? sourceFile.fileName : this.getPathRelativeToComponent(sourceFile.fileName);\n const position = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n const line = position.line + 1;\n const character = position.character + 1;\n\n return {\n filePath: pathNormalizeToLinux(filePath),\n line,\n character,\n };\n }\n\n getLocationAsString(node: Node): string {\n const location = this.getLocation(node);\n return `${node.getSourceFile().fileName}, line: ${location.line}, character: ${location.character}`;\n }\n\n getPathRelativeToComponent(filePath: string): string {\n const basePath = this.component.filesystem.files[0].base;\n return relative(basePath, filePath);\n }\n\n /**\n * returns a signature for a node.\n */\n async getSignature(node: Node) {\n return this.tsserver.getSignatureHelp(this.getPath(node), this.getLocation(node));\n }\n\n /**\n * get the position for the tsserver.\n */\n getPosition(sourceFile: ts.SourceFile, line: number, offset: number): number {\n return sourceFile.getPositionOfLineAndCharacter(line - 1, offset - 1);\n }\n\n /**\n * get the path for a source file.\n */\n getPath(node: Node) {\n const sourceFile = node.getSourceFile();\n\n const fileName = sourceFile.fileName;\n\n if (!fileName.startsWith(this.componentRootPath) && !fileName.startsWith(this.hostRootPath)) {\n return join(this.componentRootPath, fileName);\n }\n\n return sourceFile.fileName;\n }\n\n async getQuickInfo(node: Node) {\n const location = this.getLocation(node);\n try {\n return await this.tsserver.getQuickInfo(this.getPath(node), location);\n } catch (err: any) {\n if (err.message === 'No content available.') {\n throw new Error(\n `unable to get quickinfo data from tsserver at ${this.getPath(node)}, Ln ${location.line}, Col ${\n location.character\n }`\n );\n }\n throw err;\n }\n }\n\n async getQuickInfoDisplayString(node: Node): Promise<string> {\n const quickInfo = await this.getQuickInfo(node);\n return quickInfo?.body?.displayString || '';\n }\n\n /**\n * returns the type definition for a type.\n */\n typeDefinition(node: Node) {\n return this.tsserver.getTypeDefinition(this.getPath(node), this.getLocation(node));\n }\n\n visitTypeDefinition() {}\n\n private getPathWithoutExtension(filePath: string) {\n const knownExtensions = ['ts', 'js', 'jsx', 'tsx'];\n const fileExtension = extname(filePath).substring(1);\n\n const filePathWithoutExtension = () => {\n if (knownExtensions.includes(fileExtension)) {\n return filePath.replace(new RegExp(`\\\\.${fileExtension}$`), '');\n }\n return filePath;\n };\n\n if (!isAbsolute(filePath)) {\n return filePathWithoutExtension();\n }\n\n if (filePath.startsWith(this.componentRootPath)) {\n return relative(this.componentRootPath, filePathWithoutExtension());\n }\n if (filePath.startsWith(this.hostRootPath)) {\n return relative(this.hostRootPath, filePathWithoutExtension());\n }\n return filePathWithoutExtension();\n }\n\n private isIndexFile(filePath: string, currentFilePath: string) {\n const indexFilePath = join(filePath, 'index');\n return pathNormalizeToLinux(indexFilePath) === currentFilePath;\n }\n\n findFileInComponent(filePath: string) {\n const normalizedFilePath = pathNormalizeToLinux(filePath);\n const pathToCompareWithoutExtension = this.getPathWithoutExtension(normalizedFilePath);\n\n const matchingFile = this.component.filesystem.files.find((file) => {\n const currentFilePath = pathNormalizeToLinux(file.path);\n const currentFilePathWithoutExtension = this.getPathWithoutExtension(currentFilePath);\n\n const isSameFilePath = pathToCompareWithoutExtension === currentFilePathWithoutExtension;\n\n const matches =\n isSameFilePath || this.isIndexFile(pathToCompareWithoutExtension, currentFilePathWithoutExtension);\n\n return matches;\n });\n return matchingFile;\n }\n\n private parsePackageNameFromPath(path: string) {\n const parts = path.split('node_modules');\n\n if (parts.length === 1) {\n return path;\n }\n\n const lastPart = parts[parts.length - 1].replace(sep, '');\n const pkgParts = lastPart.split('/');\n if (lastPart.startsWith('@')) {\n // scoped package\n return `${pkgParts[0]}/${pkgParts[1]}`;\n }\n const pkgName = pkgParts[0];\n if (pkgName === 'typescript') {\n // it's a built-in type, such as \"string\".\n return '';\n }\n return pkgName;\n }\n\n /**\n * return the file if part of the component.\n * otherwise, a reference to the target package and the type name.\n */\n getSourceFileInsideComponent(filePath: string) {\n const file = this.findFileInComponent(filePath);\n return file && this.extractor.parseSourceFile(file);\n }\n\n async getSourceFileFromNode(node: Node) {\n const filePath = await this.getFilePathByNode(node);\n if (!filePath) {\n return undefined;\n }\n return this.getSourceFileInsideComponent(filePath);\n }\n\n async getFilePathByNode(node: Node) {\n const def = await this.tsserver.getDefinition(this.getPath(node), this.getLocation(node));\n\n const firstDef = head(def?.body);\n return firstDef?.file;\n }\n\n async definitionInfo(node: Node): Promise<protocol.DefinitionInfo | undefined> {\n const location = this.getLocation(node);\n const filePath = this.getPath(node);\n\n const def = await this.tsserver.getDefinition(filePath, location);\n\n const firstDef = head(def?.body);\n\n return firstDef;\n }\n\n /**\n * get a definition for a given node.\n */\n async definition(definition: protocol.DefinitionInfo): Promise<Node | undefined> {\n const startPosition = definition.start;\n const sourceFile = this.getSourceFileInsideComponent(definition.file);\n if (!sourceFile) {\n // it might be an external reference, cant get the node\n return undefined;\n }\n const pos = this.getPosition(sourceFile, startPosition.line, startPosition.offset);\n const nodeAtPos = getTokenAtPosition(sourceFile, pos);\n return nodeAtPos;\n }\n\n /**\n * visit a definition for node - e.g. return it's schema.\n */\n async visitDefinition(node: Node): Promise<SchemaNode | undefined> {\n const definitionInfo = await this.definitionInfo(node);\n if (!definitionInfo) {\n return undefined;\n }\n\n const definition = await this.definition(definitionInfo);\n if (!definition) {\n return this.getTypeRefForExternalNode(node);\n }\n\n return this.visit(definition.parent);\n }\n\n async visit(node: Node): Promise<SchemaNode> {\n if (node.kind === SyntaxKind.Identifier && node.parent.parent.kind !== SyntaxKind.SourceFile) {\n return this.visit(node.parent);\n }\n return this.extractor.computeSchema(node, this);\n }\n\n references() {}\n\n isExported() {}\n\n isFromComponent() {}\n\n async getFileIdentifiers(exportDec: ExportDeclaration | ExportAssignment) {\n const file = exportDec.getSourceFile().fileName;\n const specifierPathStr =\n (exportDec.kind === SyntaxKind.ExportDeclaration && exportDec.moduleSpecifier?.getText()) || '';\n const specifierPath = specifierPathStr.substring(1, specifierPathStr.length - 1);\n const absPath = resolve(file, '..', specifierPath);\n const sourceFile = this.getSourceFileInsideComponent(absPath);\n if (!sourceFile) return [];\n return this.getIdentifiers(sourceFile);\n }\n\n async getFileExports(exportDec: ExportDeclaration | ExportAssignment) {\n const identifiers = await this.getFileIdentifiers(exportDec);\n return identifiers.filter((identifier) => ExportIdentifier.isExportIdentifier(identifier));\n }\n\n async getFileInternals(exportDec: ExportDeclaration | ExportAssignment) {\n const identifiers = await this.getFileIdentifiers(exportDec);\n return identifiers.filter((identifier) => !ExportIdentifier.isExportIdentifier(identifier));\n }\n\n getIdentifiers(node: Node) {\n return this.extractor.computeIdentifiers(node, this);\n }\n\n /**\n * tsserver has two different calls: \"definition\" and \"typeDefinition\".\n * normally, we need the \"typeDefinition\" to get the type data of a node.\n * sometimes, it has no data, for example when the node is of type TypeReference, and then using \"definition\" is\n * helpful. (couldn't find a rule when to use each one. e.g. \"VariableDeclaration\" sometimes has data only in\n * \"definition\" but it's not clear when/why).\n */\n async getDefinition(node: Node) {\n const typeDefinition = await this.typeDefinition(node);\n const headTypeDefinition = head(typeDefinition?.body);\n if (headTypeDefinition) {\n return headTypeDefinition;\n }\n\n const definition = await this.tsserver.getDefinition(node.getSourceFile().fileName, this.getLocation(node));\n const headDefinition = head(definition?.body);\n\n return headDefinition;\n }\n\n // when we can't figure out the component/package/type of this node, we'll use the typeStr as the type.\n private async unknownExactType(node: Node, location: Location, typeStr = 'any', isTypeStrFromQuickInfo = true) {\n if (isTypeStrFromQuickInfo) {\n return new InferenceTypeSchema(location, typeStr || 'any');\n }\n const info = await this.getQuickInfo(node);\n const type = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(location, type, typeStr);\n }\n\n // the reason for this check is to avoid infinite loop when calling `this.jump` with the same file+location\n private isDefInSameLocation(node: Node, definition: protocol.FileSpanWithContext) {\n if (definition.file !== node.getSourceFile().fileName) {\n return false;\n }\n const loc = this.getLocation(node);\n\n return loc.line === definition.start.line && loc.character === definition.start.offset;\n }\n\n /**\n * resolve a type by a node and its identifier.\n */\n async resolveType(\n node: Node & { type?: TypeNode },\n typeStr: string,\n isTypeStrFromQuickInfo = true\n ): Promise<SchemaNode> {\n const location = this.getLocation(node);\n\n // check if internal ref with typeInfo\n const internalRef = await this.getTypeRef(typeStr, this.getIdentifierKeyForNode(node), location);\n\n if (internalRef) return internalRef;\n\n // if a node has \"type\" prop, it has the type data of the node. this normally happens when the code has the type\n // explicitly, e.g. `const str: string` vs implicitly `const str = 'some-string'`, which the node won't have \"type\"\n if (node.type && ts.isTypeNode(node.type)) {\n return this.computeSchema(node.type);\n }\n\n const definition = await this.getDefinition(node);\n\n if (!definition) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n if (this.isDefInSameLocation(node, definition)) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const definitionNode = await this.definition(definition);\n\n if (!definitionNode) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const definitionNodeName = definitionNode?.getText();\n\n // check if internal ref with definition info\n const definitionInternalRef = await this.getTypeRef(\n definitionNodeName,\n this.getIdentifierKeyForNode(definitionNode),\n location\n );\n\n if (definitionInternalRef) return definitionInternalRef;\n\n const transformer = this.extractor.getTransformer(definitionNode, this);\n\n if (transformer === undefined) {\n const file = this.findFileInComponent(definition.file);\n if (!file) return this.getTypeRefForExternalPath(typeStr, definition.file, location);\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const schemaNode = await this.visit(definitionNode);\n\n if (!schemaNode) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const apiTransformer = this.extractor.getAPITransformer(schemaNode);\n let transformedApi = apiTransformer ? await apiTransformer.transform(schemaNode, this) : schemaNode;\n if (!transformedApi) {\n transformedApi = new IgnoredSchema(schemaNode);\n }\n return transformedApi;\n }\n\n private getCompIdByPkgName(pkgName: string): ComponentID | undefined {\n return this.componentDeps.find((dep) => dep.packageName === pkgName)?.componentId;\n }\n\n async getTypeRef(typeStr: string, filePath: string, location: Location): Promise<TypeRefSchema | undefined> {\n const nodeIdentifierKey = this.getIdentifierKey(filePath);\n const mainFileIdentifierKey = this.mainFileIdentifierKey;\n\n const nodeIdentifierList = this.identifiers.get(nodeIdentifierKey);\n const mainIdentifierList = this.identifiers.get(mainFileIdentifierKey);\n\n const nodeIdentifier = new Identifier(typeStr, nodeIdentifierKey);\n const mainIdentifier = new Identifier(typeStr, mainFileIdentifierKey);\n\n const parsedNodeIdentifier = nodeIdentifierList?.find(nodeIdentifier);\n const parsedMainIdentifier = mainIdentifierList?.find(mainIdentifier);\n const isExportedFromMain = parsedMainIdentifier && ExportIdentifier.isExportIdentifier(parsedMainIdentifier);\n\n if (!parsedNodeIdentifier) return undefined;\n\n const internalRef = !isExportedFromMain;\n\n if (internalRef) {\n this.setInternalIdentifiers(filePath, new IdentifierList([parsedNodeIdentifier]));\n }\n\n return this.resolveTypeRef(parsedNodeIdentifier, location, isExportedFromMain);\n }\n\n async resolveTypeRef(\n identifier: Identifier,\n location: Location,\n isExportedFromMain?: boolean\n ): Promise<TypeRefSchema> {\n const sourceFilePath = identifier.sourceFilePath;\n\n if (!sourceFilePath || (isExportedFromMain && isRelativeImport(sourceFilePath))) {\n return new TypeRefSchema(\n location,\n identifier.id,\n undefined,\n undefined,\n !isExportedFromMain ? this.getPathRelativeToComponent(identifier.filePath) : undefined\n );\n }\n\n if (!isRelativeImport(sourceFilePath)) {\n const pkgName = this.parsePackageNameFromPath(sourceFilePath);\n const compIdByPkg = this.getCompIdByPkgName(pkgName);\n\n const compIdByPath = await this.extractor.getComponentIDByPath(sourceFilePath);\n\n if (compIdByPath) {\n return new TypeRefSchema(location, identifier.id, compIdByPath);\n }\n\n if (compIdByPkg) {\n return new TypeRefSchema(location, identifier.id, compIdByPkg);\n }\n\n // package without comp id\n return new TypeRefSchema(location, identifier.id, undefined, pkgName);\n }\n\n const relativeDir = identifier.filePath.substring(0, identifier.filePath.lastIndexOf('/'));\n const absFilePath = resolve(this.componentRootPath, relativeDir, sourceFilePath);\n\n const compFilePath = this.findFileInComponent(absFilePath);\n if (!compFilePath) {\n // @todo handle this better\n throw new Error(\n `cannot find file in component \\n source file path ${sourceFilePath}\\n \n identifier file path ${identifier.filePath}\\nrelative dir ${relativeDir}\\n\n absFilePath ${absFilePath}`\n );\n return new TypeRefSchema(location, identifier.id);\n }\n\n const idKey = this.getIdentifierKey(compFilePath?.path);\n\n // if re exported from a file, recurse until definition\n const exportedIdentifier = (this.identifiers.get(idKey)?.identifiers || []).find((i) => i.id === identifier.id);\n\n if (exportedIdentifier) {\n return this.resolveTypeRef(exportedIdentifier, location, isExportedFromMain);\n }\n\n return new TypeRefSchema(location, identifier.id);\n }\n\n async getTypeRefForExternalNode(node: Node): Promise<TypeRefSchema> {\n const info = await this.getQuickInfo(node);\n const typeStr = parseTypeFromQuickInfo(info);\n const location = this.getLocation(node);\n const filePath = this.getPath(node);\n return this.getTypeRefForExternalPath(typeStr, filePath, location);\n }\n\n async getTypeRefForExternalPath(typeStr: string, filePath: string, location: Location): Promise<TypeRefSchema> {\n const compIdByPath = await this.extractor.getComponentIDByPath(filePath);\n if (compIdByPath) {\n return new TypeRefSchema(location, typeStr, compIdByPath);\n }\n const pkgName = this.parsePackageNameFromPath(filePath);\n const compIdByPkg = this.getCompIdByPkgName(pkgName);\n if (compIdByPkg) {\n return new TypeRefSchema(location, typeStr, compIdByPkg);\n }\n return new TypeRefSchema(location, typeStr, undefined, pkgName);\n }\n\n async jsDocToDocSchema(node: Node): Promise<DocSchema | undefined> {\n if (!canHaveJsDoc(node)) {\n return undefined;\n }\n const jsDocs = getJsDoc(node);\n if (!jsDocs.length) {\n return undefined;\n }\n // not sure how common it is to have multiple JSDocs. never seen it before.\n // regardless, in typescript implementation of methods like `getJSDocDeprecatedTag()`, they use the first one. (`getFirstJSDocTag()`)\n const jsDoc = jsDocs[0];\n const location = this.getLocation(jsDoc);\n const comment = getTextOfJSDocComment(jsDoc.comment);\n const tags = jsDoc.tags ? await pMapSeries(jsDoc.tags, (tag) => tagParser(tag, this, this.formatter)) : undefined;\n return new DocSchema(location, jsDoc.getText(), comment, tags);\n }\n}\n"],"mappings":"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"}
@@ -15,5 +15,5 @@ export type SchemaTransformer = {
15
15
  };
16
16
  export type SchemaNodeTransformer = {
17
17
  predicate(node: SchemaNode): boolean;
18
- transform(node: SchemaNode, context: SchemaExtractorContext): Promise<SchemaNode>;
18
+ transform(node: SchemaNode, context: SchemaExtractorContext): Promise<SchemaNode | null>;
19
19
  };
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["schema-transformer.ts"],"sourcesContent":["import { Node } from 'typescript';\nimport { SchemaNode } from '@teambit/semantics.entities.semantic-schema';\nimport { SchemaExtractorContext } from './schema-extractor-context';\nimport { Identifier } from './identifier';\n\nexport type SchemaTransformer = {\n /**\n * determine whether to apply schema on given node.\n */\n predicate(node: Node): boolean;\n\n getIdentifiers(node: Node, context: SchemaExtractorContext): Promise<Identifier[]>;\n\n /**\n * transform the node into JSONSchema.\n */\n transform(node: Node, context: SchemaExtractorContext): Promise<SchemaNode>;\n};\n\nexport type SchemaNodeTransformer = {\n predicate(node: SchemaNode): boolean;\n transform(node: SchemaNode, context: SchemaExtractorContext): Promise<SchemaNode>;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["schema-transformer.ts"],"sourcesContent":["import { Node } from 'typescript';\nimport { SchemaNode } from '@teambit/semantics.entities.semantic-schema';\nimport { SchemaExtractorContext } from './schema-extractor-context';\nimport { Identifier } from './identifier';\n\nexport type SchemaTransformer = {\n /**\n * determine whether to apply schema on given node.\n */\n predicate(node: Node): boolean;\n\n getIdentifiers(node: Node, context: SchemaExtractorContext): Promise<Identifier[]>;\n /**\n * transform the node into JSONSchema.\n */\n transform(node: Node, context: SchemaExtractorContext): Promise<SchemaNode>;\n};\n\nexport type SchemaNodeTransformer = {\n predicate(node: SchemaNode): boolean;\n transform(node: SchemaNode, context: SchemaExtractorContext): Promise<SchemaNode | null>;\n};\n"],"mappings":""}
@@ -9,14 +9,15 @@ import { EnvContext } from '@teambit/envs';
9
9
  import { Logger } from '@teambit/logger';
10
10
  import { AspectLoaderMain } from '@teambit/aspect-loader';
11
11
  import { ScopeMain } from '@teambit/scope';
12
- import { TypescriptMain, SchemaTransformerSlot, APITransformerSlot } from './typescript.main.runtime';
12
+ import { TypescriptMain } from './typescript.main.runtime';
13
13
  import { SchemaExtractorContext } from './schema-extractor-context';
14
14
  import { Identifier } from './identifier';
15
15
  import { ExtractorOptions } from './extractor-options';
16
+ import { SchemaNodeTransformer, SchemaTransformer } from './schema-transformer';
16
17
  export declare class TypeScriptExtractor implements SchemaExtractor {
17
18
  private tsconfig;
18
- private schemaTransformerSlot;
19
- private apiTransformerSlot;
19
+ private schemaTransformers;
20
+ private apiTransformers;
20
21
  private tsMain;
21
22
  private rootTsserverPath;
22
23
  private rootContextPath;
@@ -25,7 +26,7 @@ export declare class TypeScriptExtractor implements SchemaExtractor {
25
26
  private scope;
26
27
  private aspectLoader;
27
28
  private logger;
28
- constructor(tsconfig: any, schemaTransformerSlot: SchemaTransformerSlot, apiTransformerSlot: APITransformerSlot, tsMain: TypescriptMain, rootTsserverPath: string, rootContextPath: string, depResolver: DependencyResolverMain, workspace: Workspace | undefined, scope: ScopeMain, aspectLoader: AspectLoaderMain, logger: Logger);
29
+ constructor(tsconfig: any, schemaTransformers: SchemaTransformer[], apiTransformers: SchemaNodeTransformer[], tsMain: TypescriptMain, rootTsserverPath: string, rootContextPath: string, depResolver: DependencyResolverMain, workspace: Workspace | undefined, scope: ScopeMain, aspectLoader: AspectLoaderMain, logger: Logger);
29
30
  parseSourceFile(file: AbstractVinyl): SourceFile;
30
31
  /**
31
32
  * extract a component schema.
@@ -44,7 +45,7 @@ export declare class TypeScriptExtractor implements SchemaExtractor {
44
45
  /**
45
46
  * select the correct transformer for a node.
46
47
  */
47
- getTransformer(node: Node, context: SchemaExtractorContext): import("./schema-transformer").SchemaTransformer | undefined;
48
- getAPITransformer(node: SchemaNode): import("./schema-transformer").SchemaNodeTransformer | undefined;
48
+ getTransformer(node: Node, context: SchemaExtractorContext): SchemaTransformer | undefined;
49
+ getAPITransformer(node: SchemaNode): SchemaNodeTransformer | undefined;
49
50
  static from(options: ExtractorOptions): (context: EnvContext) => TypeScriptExtractor;
50
51
  }
@@ -81,10 +81,10 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
81
81
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
82
82
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
83
83
  class TypeScriptExtractor {
84
- constructor(tsconfig, schemaTransformerSlot, apiTransformerSlot, tsMain, rootTsserverPath, rootContextPath, depResolver, workspace, scope, aspectLoader, logger) {
84
+ constructor(tsconfig, schemaTransformers, apiTransformers, tsMain, rootTsserverPath, rootContextPath, depResolver, workspace, scope, aspectLoader, logger) {
85
85
  this.tsconfig = tsconfig;
86
- this.schemaTransformerSlot = schemaTransformerSlot;
87
- this.apiTransformerSlot = apiTransformerSlot;
86
+ this.schemaTransformers = schemaTransformers;
87
+ this.apiTransformers = apiTransformers;
88
88
  this.tsMain = tsMain;
89
89
  this.rootTsserverPath = rootTsserverPath;
90
90
  this.rootContextPath = rootContextPath;
@@ -191,7 +191,11 @@ class TypeScriptExtractor {
191
191
  }
192
192
  async transformAPI(schema, context) {
193
193
  const apiTransformer = this.getAPITransformer(schema);
194
- return apiTransformer ? apiTransformer.transform(schema, context) : schema;
194
+ const transformedApi = apiTransformer ? await apiTransformer.transform(schema, context) : schema;
195
+ if (!transformedApi) {
196
+ return new (_semanticsEntities().IgnoredSchema)(schema);
197
+ }
198
+ return transformedApi;
195
199
  }
196
200
  async getComponentIDByPath(file) {
197
201
  const coreAspectIds = this.aspectLoader.getCoreAspectIds();
@@ -209,8 +213,7 @@ class TypeScriptExtractor {
209
213
  * select the correct transformer for a node.
210
214
  */
211
215
  getTransformer(node, context) {
212
- const transformers = (0, _lodash().flatten)(this.schemaTransformerSlot.values());
213
- const transformer = transformers.find(singleTransformer => {
216
+ const transformer = this.schemaTransformers.find(singleTransformer => {
214
217
  return singleTransformer.predicate(node);
215
218
  });
216
219
  if (!transformer) {
@@ -220,8 +223,7 @@ class TypeScriptExtractor {
220
223
  return transformer;
221
224
  }
222
225
  getAPITransformer(node) {
223
- const transformers = (0, _lodash().flatten)(this.apiTransformerSlot.values());
224
- const transformer = transformers.find(singleTransformer => {
226
+ const transformer = this.apiTransformers.find(singleTransformer => {
225
227
  return singleTransformer.predicate(node);
226
228
  });
227
229
  if (!transformer) {
@@ -236,10 +238,15 @@ class TypeScriptExtractor {
236
238
  };
237
239
  const tsMain = context.getAspect(_typescript2().TypescriptAspect.id);
238
240
  const aspectLoaderMain = context.getAspect(_aspectLoader().AspectLoaderAspect.id);
239
-
240
241
  // When loading the env from a scope you don't have a workspace
241
242
  const rootPath = tsMain.workspace?.path || tsMain.scope.path || '';
242
- return new TypeScriptExtractor(tsconfig, tsMain.schemaTransformerSlot, tsMain.apiTransformerSlot, tsMain, rootPath, rootPath, tsMain.depResolver, tsMain.workspace, tsMain.scope, aspectLoaderMain, context.createLogger(options.name));
243
+ const schemaTransformersFromOptions = options.schemaTransformers || [];
244
+ const schemaTransformersFromAspect = (0, _lodash().flatten)(Array.from(tsMain.schemaTransformerSlot.values()));
245
+ const apiTransformersFromOptions = options.apiTransformers || [];
246
+ const apiTransformersFromAspect = (0, _lodash().flatten)(Array.from(tsMain.apiTransformerSlot.values()));
247
+ const schemaTransformers = [...schemaTransformersFromOptions, ...schemaTransformersFromAspect];
248
+ const apiTransformers = [...apiTransformersFromOptions, ...apiTransformersFromAspect];
249
+ return new TypeScriptExtractor(tsconfig, schemaTransformers, apiTransformers, tsMain, rootPath, rootPath, tsMain.depResolver, tsMain.workspace, tsMain.scope, aspectLoaderMain, context.createLogger(options.name));
243
250
  };
244
251
  }
245
252
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_typescript","data","_interopRequireWildcard","require","_getTsconfig","_semanticsEntities","_aspectLoader","_pMapSeries","_interopRequireDefault","_lodash","_exceptions","_schemaExtractorContext","_identifierList","_typescript2","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_defineProperty","key","value","_toPropertyKey","enumerable","configurable","writable","_toPrimitive","String","Symbol","toPrimitive","TypeError","Number","TypeScriptExtractor","constructor","tsconfig","schemaTransformerSlot","apiTransformerSlot","tsMain","rootTsserverPath","rootContextPath","depResolver","workspace","scope","aspectLoader","logger","undefined","parseSourceFile","file","sourceFile","ts","createSourceFile","path","contents","toString","ScriptTarget","Latest","extract","component","options","tsserverPath","contextPath","tsserver","getTsServer","mainFile","compatibleExts","internalFiles","skipInternals","filesystem","files","filter","includes","extname","allFiles","context","createContext","formatter","pMapSeries","ast","identifiers","computeIdentifiers","cacheKey","getIdentifierKeyForNode","setIdentifiers","IdentifierList","mainAst","moduleSchema","computeSchema","flatExportsRecursively","apiScheme","internals","computeInternalModules","location","getLocation","APISchema","id","length","compact","Promise","all","internalIdentifiers","entries","map","filePath","find","internalFile","fileAst","dispose","killTsServer","node","transformer","getTransformer","getIdentifiers","debug","TransformerNotFound","componentDeps","getComponentDeps","SchemaExtractorContext","deps","getDependencies","getComponentDependencies","getTsserverClient","initTsserverClient","UnImplementedSchema","getText","SyntaxKind","kind","schemaNode","transform","transformAPI","schema","apiTransformer","getAPITransformer","getComponentIDByPath","coreAspectIds","getCoreAspectIds","matchingCoreAspect","c","getCoreAspectPackageName","resolveComponentId","getComponentIdByPath","transformers","flatten","values","singleTransformer","predicate","from","getTsconfig","config","compilerOptions","getAspect","TypescriptAspect","aspectLoaderMain","AspectLoaderAspect","rootPath","createLogger","name","exports"],"sources":["typescript.extractor.ts"],"sourcesContent":["import ts, { Node, SourceFile, SyntaxKind } from 'typescript';\nimport { getTsconfig } from 'get-tsconfig';\nimport { SchemaExtractor, SchemaExtractorOptions } from '@teambit/schema';\nimport { TsserverClient } from '@teambit/ts-server';\nimport type { Workspace } from '@teambit/workspace';\nimport { ComponentDependency, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { SchemaNode, APISchema, ModuleSchema, UnImplementedSchema } from '@teambit/semantics.entities.semantic-schema';\nimport { Component } from '@teambit/component';\nimport { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\nimport { EnvContext } from '@teambit/envs';\nimport { Formatter } from '@teambit/formatter';\nimport { Logger } from '@teambit/logger';\nimport { AspectLoaderAspect, AspectLoaderMain, getCoreAspectPackageName } from '@teambit/aspect-loader';\nimport { ScopeMain } from '@teambit/scope';\nimport pMapSeries from 'p-map-series';\nimport { compact, flatten } from 'lodash';\nimport { TypescriptMain, SchemaTransformerSlot, APITransformerSlot } from './typescript.main.runtime';\nimport { TransformerNotFound } from './exceptions';\nimport { SchemaExtractorContext } from './schema-extractor-context';\nimport { Identifier } from './identifier';\nimport { IdentifierList } from './identifier-list';\nimport { ExtractorOptions } from './extractor-options';\nimport { TypescriptAspect } from './typescript.aspect';\n\nexport class TypeScriptExtractor implements SchemaExtractor {\n constructor(\n private tsconfig: any,\n private schemaTransformerSlot: SchemaTransformerSlot,\n private apiTransformerSlot: APITransformerSlot,\n private tsMain: TypescriptMain,\n private rootTsserverPath: string,\n private rootContextPath: string,\n private depResolver: DependencyResolverMain,\n private workspace: Workspace | undefined,\n private scope: ScopeMain,\n private aspectLoader: AspectLoaderMain,\n private logger: Logger\n ) {}\n\n parseSourceFile(file: AbstractVinyl): SourceFile {\n const sourceFile = ts.createSourceFile(\n file.path,\n file.contents.toString('utf8'),\n ts.ScriptTarget.Latest,\n true\n /** don't pass the scriptKind, it'll be determined automatically by typescript by the filepath */\n );\n // leave this commented out, it's helpful when there are issues with ASTs. consider throwing in this case.\n // console.log(\"sourceFile Errors\", file.path, sourceFile.parseDiagnostics);\n return sourceFile;\n }\n\n /**\n * extract a component schema.\n */\n async extract(component: Component, options: SchemaExtractorOptions = {}): Promise<APISchema> {\n // override the rootTsserverPath and rootContextPath if passed via options\n if (options.tsserverPath) {\n this.rootTsserverPath = options.tsserverPath;\n }\n if (options.contextPath) {\n this.rootContextPath = options.contextPath;\n }\n const tsserver = await this.getTsServer();\n const mainFile = component.mainFile;\n const compatibleExts = ['.tsx', '.ts'];\n const internalFiles = options.skipInternals\n ? []\n : component.filesystem.files.filter(\n (file) => compatibleExts.includes(file.extname) && file.path !== mainFile.path\n );\n const allFiles = [mainFile, ...internalFiles];\n\n const context = await this.createContext(tsserver, component, options.formatter);\n\n await pMapSeries(allFiles, async (file) => {\n const ast = this.parseSourceFile(file);\n const identifiers = await this.computeIdentifiers(ast, context);\n const cacheKey = context.getIdentifierKeyForNode(ast);\n context.setIdentifiers(cacheKey, new IdentifierList(identifiers));\n });\n\n const mainAst = this.parseSourceFile(mainFile);\n const moduleSchema = (await this.computeSchema(mainAst, context)) as ModuleSchema;\n moduleSchema.flatExportsRecursively();\n const apiScheme = moduleSchema;\n const internals = await this.computeInternalModules(context, internalFiles);\n\n const location = context.getLocation(mainAst);\n\n return new APISchema(location, apiScheme, internals, component.id as any);\n }\n\n async computeInternalModules(context: SchemaExtractorContext, internalFiles: AbstractVinyl[]) {\n if (internalFiles.length === 0) return [];\n\n const internals = compact(\n await Promise.all(\n [...context.internalIdentifiers.entries()].map(async ([filePath]) => {\n const file = internalFiles.find((internalFile) => internalFile.path === filePath);\n if (!file) return undefined;\n const fileAst = this.parseSourceFile(file);\n const moduleSchema = (await this.computeSchema(fileAst, context)) as ModuleSchema;\n moduleSchema.flatExportsRecursively();\n return moduleSchema;\n })\n )\n );\n return internals;\n }\n\n dispose() {\n if (!this.tsserver) return;\n this.tsserver.killTsServer();\n }\n\n async computeIdentifiers(node: Node, context: SchemaExtractorContext) {\n const transformer = this.getTransformer(node, context);\n let identifiers: Identifier[] = [];\n if (!transformer || !transformer.getIdentifiers) {\n this.logger.debug(new TransformerNotFound(node, context.component, context.getLocation(node)).toString());\n } else {\n identifiers = await transformer.getIdentifiers(node, context);\n }\n return identifiers;\n }\n\n private async createContext(\n tsserver: TsserverClient,\n component: Component,\n formatter?: Formatter\n ): Promise<SchemaExtractorContext> {\n const componentDeps = await this.getComponentDeps(component);\n return new SchemaExtractorContext(\n tsserver,\n component,\n this,\n componentDeps,\n this.rootContextPath,\n this.workspace?.path || this.scope.path,\n formatter\n );\n }\n\n private async getComponentDeps(component: Component): Promise<ComponentDependency[]> {\n const deps = this.depResolver.getDependencies(component);\n const componentDeps = deps.getComponentDependencies();\n return componentDeps;\n }\n\n private tsserver: TsserverClient | undefined = undefined;\n\n private async getTsServer() {\n if (!this.tsserver) {\n const tsserver = this.tsMain.getTsserverClient();\n if (tsserver) {\n this.tsserver = tsserver;\n return tsserver;\n }\n\n this.tsserver = await this.tsMain.initTsserverClient(this.rootTsserverPath);\n return this.tsserver;\n }\n\n return this.tsserver;\n }\n\n async computeSchema(node: Node, context: SchemaExtractorContext): Promise<SchemaNode> {\n const transformer = this.getTransformer(node, context);\n\n if (!transformer) {\n return new UnImplementedSchema(context.getLocation(node), node.getText(), SyntaxKind[node.kind]);\n }\n\n const schemaNode = await transformer.transform(node, context);\n\n return this.transformAPI(schemaNode, context);\n }\n\n async transformAPI(schema: SchemaNode, context: SchemaExtractorContext): Promise<SchemaNode> {\n const apiTransformer = this.getAPITransformer(schema);\n return apiTransformer ? apiTransformer.transform(schema, context) : schema;\n }\n\n async getComponentIDByPath(file: string) {\n const coreAspectIds = this.aspectLoader.getCoreAspectIds();\n const matchingCoreAspect = coreAspectIds.find((c) => file === getCoreAspectPackageName(c));\n\n if (matchingCoreAspect) {\n return (this.workspace || this.scope).resolveComponentId(matchingCoreAspect);\n }\n\n if (this.workspace) {\n return this.workspace.getComponentIdByPath(file);\n }\n return null;\n }\n\n /**\n * select the correct transformer for a node.\n */\n getTransformer(node: Node, context: SchemaExtractorContext) {\n const transformers = flatten(this.schemaTransformerSlot.values());\n const transformer = transformers.find((singleTransformer) => {\n return singleTransformer.predicate(node);\n });\n if (!transformer) {\n this.logger.debug(new TransformerNotFound(node, context.component, context.getLocation(node)).toString());\n return undefined;\n }\n\n return transformer;\n }\n\n getAPITransformer(node: SchemaNode) {\n const transformers = flatten(this.apiTransformerSlot.values());\n const transformer = transformers.find((singleTransformer) => {\n return singleTransformer.predicate(node);\n });\n if (!transformer) {\n return undefined;\n }\n\n return transformer;\n }\n\n static from(options: ExtractorOptions) {\n return (context: EnvContext) => {\n const tsconfig = getTsconfig(options.tsconfig)?.config || { compilerOptions: options.compilerOptions };\n const tsMain = context.getAspect<TypescriptMain>(TypescriptAspect.id);\n const aspectLoaderMain = context.getAspect<AspectLoaderMain>(AspectLoaderAspect.id);\n\n // When loading the env from a scope you don't have a workspace\n const rootPath = tsMain.workspace?.path || tsMain.scope.path || '';\n\n return new TypeScriptExtractor(\n tsconfig,\n tsMain.schemaTransformerSlot,\n tsMain.apiTransformerSlot,\n tsMain,\n rootPath,\n rootPath,\n tsMain.depResolver,\n tsMain.workspace,\n tsMain.scope,\n aspectLoaderMain,\n context.createLogger(options.name)\n );\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_typescript","data","_interopRequireWildcard","require","_getTsconfig","_semanticsEntities","_aspectLoader","_pMapSeries","_interopRequireDefault","_lodash","_exceptions","_schemaExtractorContext","_identifierList","_typescript2","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_defineProperty","key","value","_toPropertyKey","enumerable","configurable","writable","_toPrimitive","String","Symbol","toPrimitive","TypeError","Number","TypeScriptExtractor","constructor","tsconfig","schemaTransformers","apiTransformers","tsMain","rootTsserverPath","rootContextPath","depResolver","workspace","scope","aspectLoader","logger","undefined","parseSourceFile","file","sourceFile","ts","createSourceFile","path","contents","toString","ScriptTarget","Latest","extract","component","options","tsserverPath","contextPath","tsserver","getTsServer","mainFile","compatibleExts","internalFiles","skipInternals","filesystem","files","filter","includes","extname","allFiles","context","createContext","formatter","pMapSeries","ast","identifiers","computeIdentifiers","cacheKey","getIdentifierKeyForNode","setIdentifiers","IdentifierList","mainAst","moduleSchema","computeSchema","flatExportsRecursively","apiScheme","internals","computeInternalModules","location","getLocation","APISchema","id","length","compact","Promise","all","internalIdentifiers","entries","map","filePath","find","internalFile","fileAst","dispose","killTsServer","node","transformer","getTransformer","getIdentifiers","debug","TransformerNotFound","componentDeps","getComponentDeps","SchemaExtractorContext","deps","getDependencies","getComponentDependencies","getTsserverClient","initTsserverClient","UnImplementedSchema","getText","SyntaxKind","kind","schemaNode","transform","transformAPI","schema","apiTransformer","getAPITransformer","transformedApi","IgnoredSchema","getComponentIDByPath","coreAspectIds","getCoreAspectIds","matchingCoreAspect","c","getCoreAspectPackageName","resolveComponentId","getComponentIdByPath","singleTransformer","predicate","from","getTsconfig","config","compilerOptions","getAspect","TypescriptAspect","aspectLoaderMain","AspectLoaderAspect","rootPath","schemaTransformersFromOptions","schemaTransformersFromAspect","flatten","Array","schemaTransformerSlot","values","apiTransformersFromOptions","apiTransformersFromAspect","apiTransformerSlot","createLogger","name","exports"],"sources":["typescript.extractor.ts"],"sourcesContent":["import ts, { Node, SourceFile, SyntaxKind } from 'typescript';\nimport { getTsconfig } from 'get-tsconfig';\nimport { SchemaExtractor, SchemaExtractorOptions } from '@teambit/schema';\nimport { TsserverClient } from '@teambit/ts-server';\nimport type { Workspace } from '@teambit/workspace';\nimport { ComponentDependency, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport {\n SchemaNode,\n APISchema,\n ModuleSchema,\n UnImplementedSchema,\n IgnoredSchema,\n} from '@teambit/semantics.entities.semantic-schema';\nimport { Component } from '@teambit/component';\nimport { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\nimport { EnvContext } from '@teambit/envs';\nimport { Formatter } from '@teambit/formatter';\nimport { Logger } from '@teambit/logger';\nimport { AspectLoaderAspect, AspectLoaderMain, getCoreAspectPackageName } from '@teambit/aspect-loader';\nimport { ScopeMain } from '@teambit/scope';\nimport pMapSeries from 'p-map-series';\nimport { compact, flatten } from 'lodash';\nimport { TypescriptMain } from './typescript.main.runtime';\nimport { TransformerNotFound } from './exceptions';\nimport { SchemaExtractorContext } from './schema-extractor-context';\nimport { Identifier } from './identifier';\nimport { IdentifierList } from './identifier-list';\nimport { ExtractorOptions } from './extractor-options';\nimport { TypescriptAspect } from './typescript.aspect';\nimport { SchemaNodeTransformer, SchemaTransformer } from './schema-transformer';\n\nexport class TypeScriptExtractor implements SchemaExtractor {\n constructor(\n private tsconfig: any,\n private schemaTransformers: SchemaTransformer[],\n private apiTransformers: SchemaNodeTransformer[],\n private tsMain: TypescriptMain,\n private rootTsserverPath: string,\n private rootContextPath: string,\n private depResolver: DependencyResolverMain,\n private workspace: Workspace | undefined,\n private scope: ScopeMain,\n private aspectLoader: AspectLoaderMain,\n private logger: Logger\n ) {}\n\n parseSourceFile(file: AbstractVinyl): SourceFile {\n const sourceFile = ts.createSourceFile(\n file.path,\n file.contents.toString('utf8'),\n ts.ScriptTarget.Latest,\n true\n /** don't pass the scriptKind, it'll be determined automatically by typescript by the filepath */\n );\n // leave this commented out, it's helpful when there are issues with ASTs. consider throwing in this case.\n // console.log(\"sourceFile Errors\", file.path, sourceFile.parseDiagnostics);\n return sourceFile;\n }\n\n /**\n * extract a component schema.\n */\n async extract(component: Component, options: SchemaExtractorOptions = {}): Promise<APISchema> {\n // override the rootTsserverPath and rootContextPath if passed via options\n if (options.tsserverPath) {\n this.rootTsserverPath = options.tsserverPath;\n }\n if (options.contextPath) {\n this.rootContextPath = options.contextPath;\n }\n const tsserver = await this.getTsServer();\n const mainFile = component.mainFile;\n const compatibleExts = ['.tsx', '.ts'];\n const internalFiles = options.skipInternals\n ? []\n : component.filesystem.files.filter(\n (file) => compatibleExts.includes(file.extname) && file.path !== mainFile.path\n );\n const allFiles = [mainFile, ...internalFiles];\n\n const context = await this.createContext(tsserver, component, options.formatter);\n\n await pMapSeries(allFiles, async (file) => {\n const ast = this.parseSourceFile(file);\n const identifiers = await this.computeIdentifiers(ast, context);\n const cacheKey = context.getIdentifierKeyForNode(ast);\n context.setIdentifiers(cacheKey, new IdentifierList(identifiers));\n });\n\n const mainAst = this.parseSourceFile(mainFile);\n const moduleSchema = (await this.computeSchema(mainAst, context)) as ModuleSchema;\n moduleSchema.flatExportsRecursively();\n const apiScheme = moduleSchema;\n const internals = await this.computeInternalModules(context, internalFiles);\n\n const location = context.getLocation(mainAst);\n\n return new APISchema(location, apiScheme, internals, component.id as any);\n }\n\n async computeInternalModules(context: SchemaExtractorContext, internalFiles: AbstractVinyl[]) {\n if (internalFiles.length === 0) return [];\n\n const internals = compact(\n await Promise.all(\n [...context.internalIdentifiers.entries()].map(async ([filePath]) => {\n const file = internalFiles.find((internalFile) => internalFile.path === filePath);\n if (!file) return undefined;\n const fileAst = this.parseSourceFile(file);\n const moduleSchema = (await this.computeSchema(fileAst, context)) as ModuleSchema;\n moduleSchema.flatExportsRecursively();\n return moduleSchema;\n })\n )\n );\n return internals;\n }\n\n dispose() {\n if (!this.tsserver) return;\n this.tsserver.killTsServer();\n }\n\n async computeIdentifiers(node: Node, context: SchemaExtractorContext) {\n const transformer = this.getTransformer(node, context);\n let identifiers: Identifier[] = [];\n if (!transformer || !transformer.getIdentifiers) {\n this.logger.debug(new TransformerNotFound(node, context.component, context.getLocation(node)).toString());\n } else {\n identifiers = await transformer.getIdentifiers(node, context);\n }\n return identifiers;\n }\n\n private async createContext(\n tsserver: TsserverClient,\n component: Component,\n formatter?: Formatter\n ): Promise<SchemaExtractorContext> {\n const componentDeps = await this.getComponentDeps(component);\n return new SchemaExtractorContext(\n tsserver,\n component,\n this,\n componentDeps,\n this.rootContextPath,\n this.workspace?.path || this.scope.path,\n formatter\n );\n }\n\n private async getComponentDeps(component: Component): Promise<ComponentDependency[]> {\n const deps = this.depResolver.getDependencies(component);\n const componentDeps = deps.getComponentDependencies();\n return componentDeps;\n }\n\n private tsserver: TsserverClient | undefined = undefined;\n\n private async getTsServer() {\n if (!this.tsserver) {\n const tsserver = this.tsMain.getTsserverClient();\n if (tsserver) {\n this.tsserver = tsserver;\n return tsserver;\n }\n\n this.tsserver = await this.tsMain.initTsserverClient(this.rootTsserverPath);\n return this.tsserver;\n }\n\n return this.tsserver;\n }\n\n async computeSchema(node: Node, context: SchemaExtractorContext): Promise<SchemaNode> {\n const transformer = this.getTransformer(node, context);\n\n if (!transformer) {\n return new UnImplementedSchema(context.getLocation(node), node.getText(), SyntaxKind[node.kind]);\n }\n\n const schemaNode = await transformer.transform(node, context);\n\n return this.transformAPI(schemaNode, context);\n }\n\n async transformAPI(schema: SchemaNode, context: SchemaExtractorContext): Promise<SchemaNode> {\n const apiTransformer = this.getAPITransformer(schema);\n const transformedApi = apiTransformer ? await apiTransformer.transform(schema, context) : schema;\n if (!transformedApi) {\n return new IgnoredSchema(schema);\n }\n return transformedApi;\n }\n\n async getComponentIDByPath(file: string) {\n const coreAspectIds = this.aspectLoader.getCoreAspectIds();\n const matchingCoreAspect = coreAspectIds.find((c) => file === getCoreAspectPackageName(c));\n\n if (matchingCoreAspect) {\n return (this.workspace || this.scope).resolveComponentId(matchingCoreAspect);\n }\n\n if (this.workspace) {\n return this.workspace.getComponentIdByPath(file);\n }\n return null;\n }\n\n /**\n * select the correct transformer for a node.\n */\n getTransformer(node: Node, context: SchemaExtractorContext) {\n const transformer = this.schemaTransformers.find((singleTransformer) => {\n return singleTransformer.predicate(node);\n });\n if (!transformer) {\n this.logger.debug(new TransformerNotFound(node, context.component, context.getLocation(node)).toString());\n return undefined;\n }\n\n return transformer;\n }\n\n getAPITransformer(node: SchemaNode) {\n const transformer = this.apiTransformers.find((singleTransformer) => {\n return singleTransformer.predicate(node);\n });\n if (!transformer) {\n return undefined;\n }\n\n return transformer;\n }\n\n static from(options: ExtractorOptions) {\n return (context: EnvContext) => {\n const tsconfig = getTsconfig(options.tsconfig)?.config || { compilerOptions: options.compilerOptions };\n const tsMain = context.getAspect<TypescriptMain>(TypescriptAspect.id);\n const aspectLoaderMain = context.getAspect<AspectLoaderMain>(AspectLoaderAspect.id);\n // When loading the env from a scope you don't have a workspace\n const rootPath = tsMain.workspace?.path || tsMain.scope.path || '';\n\n const schemaTransformersFromOptions = options.schemaTransformers || [];\n const schemaTransformersFromAspect = flatten(Array.from(tsMain.schemaTransformerSlot.values()));\n\n const apiTransformersFromOptions = options.apiTransformers || [];\n const apiTransformersFromAspect = flatten(Array.from(tsMain.apiTransformerSlot.values()));\n\n const schemaTransformers = [...schemaTransformersFromOptions, ...schemaTransformersFromAspect];\n const apiTransformers = [...apiTransformersFromOptions, ...apiTransformersFromAspect];\n\n return new TypeScriptExtractor(\n tsconfig,\n schemaTransformers,\n apiTransformers,\n tsMain,\n rootPath,\n rootPath,\n tsMain.depResolver,\n tsMain.workspace,\n tsMain.scope,\n aspectLoaderMain,\n context.createLogger(options.name)\n );\n };\n }\n}\n"],"mappings":"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"}
@@ -96,7 +96,7 @@ export declare class TypescriptMain {
96
96
  /**
97
97
  * create an instance of a typescript semantic schema extractor.
98
98
  */
99
- createSchemaExtractor(tsconfig: any, tsserverPath?: string, contextPath?: string): SchemaExtractor;
99
+ createSchemaExtractor(tsconfig: any, tsserverPath?: string, contextPath?: string, schemaTransformers?: SchemaTransformer[], apiTransformers?: SchemaNodeTransformer[]): SchemaExtractor;
100
100
  /**
101
101
  * add the default package json properties to the component
102
102
  * :TODO @gilad why do we need this DSL? can't I just get the args here.
@@ -110,6 +110,13 @@ function _scope() {
110
110
  };
111
111
  return data;
112
112
  }
113
+ function _lodash() {
114
+ const data = require("lodash");
115
+ _lodash = function () {
116
+ return data;
117
+ };
118
+ return data;
119
+ }
113
120
  function _typescript2() {
114
121
  const data = require("./typescript.extractor");
115
122
  _typescript2 = function () {
@@ -299,8 +306,12 @@ class TypescriptMain {
299
306
  /**
300
307
  * create an instance of a typescript semantic schema extractor.
301
308
  */
302
- createSchemaExtractor(tsconfig, tsserverPath, contextPath) {
303
- return new (_typescript2().TypeScriptExtractor)(tsconfig, this.schemaTransformerSlot, this.apiTransformerSlot, this, tsserverPath || this.workspace?.path || '', contextPath || this.workspace?.path || '', this.depResolver, this.workspace, this.scope, this.aspectLoader, this.logger);
309
+ createSchemaExtractor(tsconfig, tsserverPath, contextPath, schemaTransformers = [], apiTransformers = []) {
310
+ const schemaTransformersFromSlot = (0, _lodash().flatten)(Array.from(this.schemaTransformerSlot.values()));
311
+ const apiTransformersFromSlot = (0, _lodash().flatten)(Array.from(this.apiTransformerSlot.values()));
312
+ const allSchemaTransformers = schemaTransformers.concat(schemaTransformersFromSlot);
313
+ const allApiTransformers = apiTransformers.concat(apiTransformersFromSlot);
314
+ return new (_typescript2().TypeScriptExtractor)(tsconfig, allSchemaTransformers, allApiTransformers, this, tsserverPath || this.workspace?.path || '', contextPath || this.workspace?.path || '', this.depResolver, this.workspace, this.scope, this.aspectLoader, this.logger);
304
315
  }
305
316
 
306
317
  /**