@teambit/typescript 0.0.965 → 0.0.967

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 (204) hide show
  1. package/dist/export-identifier.d.ts +5 -4
  2. package/dist/export-identifier.js +23 -4
  3. package/dist/export-identifier.js.map +1 -1
  4. package/dist/identifier-list.d.ts +7 -0
  5. package/dist/identifier-list.js +21 -0
  6. package/dist/identifier-list.js.map +1 -0
  7. package/dist/identifier.d.ts +9 -0
  8. package/dist/identifier.js +30 -0
  9. package/dist/identifier.js.map +1 -0
  10. package/dist/{preview-1674271762484.js → preview-1674617375675.js} +2 -2
  11. package/dist/schema-extractor-context.d.ts +40 -8
  12. package/dist/schema-extractor-context.js +243 -101
  13. package/dist/schema-extractor-context.js.map +1 -1
  14. package/dist/schema-transformer.d.ts +2 -2
  15. package/dist/schema-transformer.js.map +1 -1
  16. package/dist/transformers/array-type.d.ts +10 -0
  17. package/dist/transformers/array-type.js +38 -0
  18. package/dist/transformers/array-type.js.map +1 -0
  19. package/dist/transformers/binding-element.d.ts +2 -2
  20. package/dist/transformers/binding-element.js +7 -7
  21. package/dist/transformers/binding-element.js.map +1 -1
  22. package/dist/transformers/class-declaration.d.ts +2 -2
  23. package/dist/transformers/class-declaration.js +6 -20
  24. package/dist/transformers/class-declaration.js.map +1 -1
  25. package/dist/transformers/conditional-type.d.ts +10 -0
  26. package/dist/transformers/conditional-type.js +39 -0
  27. package/dist/transformers/conditional-type.js.map +1 -0
  28. package/dist/transformers/constructor.d.ts +10 -0
  29. package/dist/transformers/constructor.js +50 -0
  30. package/dist/transformers/constructor.js.map +1 -0
  31. package/dist/transformers/enum-declaration.d.ts +2 -2
  32. package/dist/transformers/enum-declaration.js +4 -4
  33. package/dist/transformers/enum-declaration.js.map +1 -1
  34. package/dist/transformers/{export-assignment-declaration.d.ts → export-assignment.d.ts} +7 -2
  35. package/dist/transformers/export-assignment.js +41 -0
  36. package/dist/transformers/export-assignment.js.map +1 -0
  37. package/dist/transformers/export-declaration.d.ts +2 -3
  38. package/dist/transformers/export-declaration.js +21 -10
  39. package/dist/transformers/export-declaration.js.map +1 -1
  40. package/dist/transformers/function-like.d.ts +11 -0
  41. package/dist/transformers/function-like.js +82 -0
  42. package/dist/transformers/function-like.js.map +1 -0
  43. package/dist/transformers/get-accessor.d.ts +10 -0
  44. package/dist/transformers/get-accessor.js +48 -0
  45. package/dist/transformers/get-accessor.js.map +1 -0
  46. package/dist/transformers/import-declaration.d.ts +10 -0
  47. package/dist/transformers/import-declaration.js +74 -0
  48. package/dist/transformers/import-declaration.js.map +1 -0
  49. package/dist/transformers/index-signature.d.ts +10 -0
  50. package/dist/transformers/index-signature.js +45 -0
  51. package/dist/transformers/index-signature.js.map +1 -0
  52. package/dist/transformers/index.d.ts +28 -3
  53. package/dist/transformers/index.js +337 -12
  54. package/dist/transformers/index.js.map +1 -1
  55. package/dist/transformers/indexed-access-type.d.ts +10 -0
  56. package/dist/transformers/indexed-access-type.js +37 -0
  57. package/dist/transformers/indexed-access-type.js.map +1 -0
  58. package/dist/transformers/interface-declaration.d.ts +2 -2
  59. package/dist/transformers/interface-declaration.js +6 -20
  60. package/dist/transformers/interface-declaration.js.map +1 -1
  61. package/dist/transformers/intersection-type.d.ts +10 -0
  62. package/dist/transformers/intersection-type.js +48 -0
  63. package/dist/transformers/intersection-type.js.map +1 -0
  64. package/dist/transformers/keyword-type.d.ts +13 -0
  65. package/dist/transformers/keyword-type.js +55 -0
  66. package/dist/transformers/keyword-type.js.map +1 -0
  67. package/dist/transformers/literal-type.d.ts +13 -0
  68. package/dist/transformers/literal-type.js +40 -0
  69. package/dist/transformers/literal-type.js.map +1 -0
  70. package/dist/transformers/named-tuple.d.ts +10 -0
  71. package/dist/transformers/named-tuple.js +38 -0
  72. package/dist/transformers/named-tuple.js.map +1 -0
  73. package/dist/transformers/parameter.d.ts +13 -0
  74. package/dist/transformers/parameter.js +112 -0
  75. package/dist/transformers/parameter.js.map +1 -0
  76. package/dist/transformers/parenthesized-type.d.ts +10 -0
  77. package/dist/transformers/parenthesized-type.js +36 -0
  78. package/dist/transformers/parenthesized-type.js.map +1 -0
  79. package/dist/transformers/property-declaration.d.ts +11 -0
  80. package/dist/transformers/property-declaration.js +57 -0
  81. package/dist/transformers/property-declaration.js.map +1 -0
  82. package/dist/transformers/set-accessor.d.ts +10 -0
  83. package/dist/transformers/set-accessor.js +45 -0
  84. package/dist/transformers/set-accessor.js.map +1 -0
  85. package/dist/transformers/source-file-transformer.d.ts +3 -2
  86. package/dist/transformers/source-file-transformer.js +44 -15
  87. package/dist/transformers/source-file-transformer.js.map +1 -1
  88. package/dist/transformers/template-literal-type-span.d.ts +10 -0
  89. package/dist/transformers/template-literal-type-span.js +37 -0
  90. package/dist/transformers/template-literal-type-span.js.map +1 -0
  91. package/dist/transformers/template-literal-type.d.ts +10 -0
  92. package/dist/transformers/template-literal-type.js +45 -0
  93. package/dist/transformers/template-literal-type.js.map +1 -0
  94. package/dist/transformers/this-type.d.ts +10 -0
  95. package/dist/transformers/this-type.js +35 -0
  96. package/dist/transformers/this-type.js.map +1 -0
  97. package/dist/transformers/tuple-type.d.ts +10 -0
  98. package/dist/transformers/tuple-type.js +47 -0
  99. package/dist/transformers/tuple-type.js.map +1 -0
  100. package/dist/transformers/type-alias.d.ts +2 -2
  101. package/dist/transformers/type-alias.js +5 -12
  102. package/dist/transformers/type-alias.js.map +1 -1
  103. package/dist/transformers/type-literal.d.ts +14 -0
  104. package/dist/transformers/type-literal.js +49 -0
  105. package/dist/transformers/type-literal.js.map +1 -0
  106. package/dist/transformers/type-operator.d.ts +14 -0
  107. package/dist/transformers/type-operator.js +52 -0
  108. package/dist/transformers/type-operator.js.map +1 -0
  109. package/dist/transformers/type-predicate.d.ts +10 -0
  110. package/dist/transformers/type-predicate.js +38 -0
  111. package/dist/transformers/type-predicate.js.map +1 -0
  112. package/dist/transformers/type-query.d.ts +13 -0
  113. package/dist/transformers/type-query.js +42 -0
  114. package/dist/transformers/type-query.js.map +1 -0
  115. package/dist/transformers/type-reference.d.ts +16 -0
  116. package/dist/transformers/type-reference.js +56 -0
  117. package/dist/transformers/type-reference.js.map +1 -0
  118. package/dist/transformers/union-type.d.ts +10 -0
  119. package/dist/transformers/union-type.js +48 -0
  120. package/dist/transformers/union-type.js.map +1 -0
  121. package/dist/transformers/utils/jsdoc-to-doc-schema.js +2 -10
  122. package/dist/transformers/utils/jsdoc-to-doc-schema.js.map +1 -1
  123. package/dist/transformers/variable-declaration.d.ts +2 -2
  124. package/dist/transformers/variable-declaration.js +11 -11
  125. package/dist/transformers/variable-declaration.js.map +1 -1
  126. package/dist/transformers/variable-statement.d.ts +2 -2
  127. package/dist/transformers/variable-statement.js +5 -5
  128. package/dist/transformers/variable-statement.js.map +1 -1
  129. package/dist/typescript.extractor.d.ts +10 -4
  130. package/dist/typescript.extractor.js +70 -17
  131. package/dist/typescript.extractor.js.map +1 -1
  132. package/dist/typescript.main.runtime.d.ts +4 -2
  133. package/dist/typescript.main.runtime.js +5 -11
  134. package/dist/typescript.main.runtime.js.map +1 -1
  135. package/package-tar/teambit-typescript-0.0.967.tgz +0 -0
  136. package/package.json +17 -17
  137. package/transformers/array-type.ts +21 -0
  138. package/transformers/binding-element.ts +2 -2
  139. package/transformers/class-declaration.ts +4 -6
  140. package/transformers/conditional-type.ts +23 -0
  141. package/transformers/constructor.ts +40 -0
  142. package/transformers/enum-declaration.ts +3 -3
  143. package/transformers/{export-assignment-declaration.ts → export-assignment.ts} +9 -3
  144. package/transformers/export-declaration.ts +35 -8
  145. package/transformers/function-like.ts +65 -0
  146. package/transformers/get-accessor.ts +24 -0
  147. package/transformers/import-declaration.ts +56 -0
  148. package/transformers/index-signature.ts +24 -0
  149. package/transformers/index.ts +28 -3
  150. package/transformers/indexed-access-type.ts +21 -0
  151. package/transformers/interface-declaration.ts +5 -7
  152. package/transformers/intersection-type.ts +25 -0
  153. package/transformers/keyword-type.ts +39 -0
  154. package/transformers/literal-type.ts +23 -0
  155. package/transformers/named-tuple.ts +22 -0
  156. package/transformers/parameter.ts +110 -0
  157. package/transformers/parenthesized-type.ts +20 -0
  158. package/transformers/property-declaration.ts +33 -0
  159. package/transformers/set-accessor.ts +25 -0
  160. package/transformers/source-file-transformer.ts +56 -24
  161. package/transformers/template-literal-type-span.ts +21 -0
  162. package/transformers/template-literal-type.ts +24 -0
  163. package/transformers/this-type.ts +19 -0
  164. package/transformers/tuple-type.ts +24 -0
  165. package/transformers/type-alias.ts +3 -4
  166. package/transformers/type-literal.ts +26 -0
  167. package/transformers/type-operator.ts +37 -0
  168. package/transformers/type-predicate.ts +22 -0
  169. package/transformers/type-query.ts +25 -0
  170. package/transformers/type-reference.ts +33 -0
  171. package/transformers/union-type.ts +25 -0
  172. package/transformers/utils/jsdoc-to-doc-schema.ts +2 -4
  173. package/transformers/variable-declaration.ts +7 -4
  174. package/transformers/variable-statement.ts +3 -3
  175. package/dist/export-list.d.ts +0 -6
  176. package/dist/export-list.js +0 -17
  177. package/dist/export-list.js.map +0 -1
  178. package/dist/transformers/export-assignment-declaration.js +0 -29
  179. package/dist/transformers/export-assignment-declaration.js.map +0 -1
  180. package/dist/transformers/function-declaration.d.ts +0 -11
  181. package/dist/transformers/function-declaration.js +0 -49
  182. package/dist/transformers/function-declaration.js.map +0 -1
  183. package/dist/transformers/utils/class-element-to-schema.d.ts +0 -4
  184. package/dist/transformers/utils/class-element-to-schema.js +0 -95
  185. package/dist/transformers/utils/class-element-to-schema.js.map +0 -1
  186. package/dist/transformers/utils/get-params.d.ts +0 -4
  187. package/dist/transformers/utils/get-params.js +0 -100
  188. package/dist/transformers/utils/get-params.js.map +0 -1
  189. package/dist/transformers/utils/to-function-like-schema.d.ts +0 -4
  190. package/dist/transformers/utils/to-function-like-schema.js +0 -58
  191. package/dist/transformers/utils/to-function-like-schema.js.map +0 -1
  192. package/dist/transformers/utils/type-element-to-schema.d.ts +0 -7
  193. package/dist/transformers/utils/type-element-to-schema.js +0 -106
  194. package/dist/transformers/utils/type-element-to-schema.js.map +0 -1
  195. package/dist/transformers/utils/type-node-to-schema.d.ts +0 -4
  196. package/dist/transformers/utils/type-node-to-schema.js +0 -274
  197. package/dist/transformers/utils/type-node-to-schema.js.map +0 -1
  198. package/package-tar/teambit-typescript-0.0.965.tgz +0 -0
  199. package/transformers/function-declaration.ts +0 -25
  200. package/transformers/utils/class-element-to-schema.ts +0 -64
  201. package/transformers/utils/get-params.ts +0 -92
  202. package/transformers/utils/to-function-like-schema.ts +0 -39
  203. package/transformers/utils/type-element-to-schema.ts +0 -79
  204. package/transformers/utils/type-node-to-schema.ts +0 -294
@@ -0,0 +1,65 @@
1
+ import { FunctionLikeSchema, ParameterSchema, SchemaNode, Modifier } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { Node, SignatureDeclaration } from 'typescript';
3
+ import pMapSeries from 'p-map-series';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { SchemaTransformer } from '../schema-transformer';
6
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
7
+ import { Identifier } from '../identifier';
8
+
9
+ export class FunctionLikeTransformer implements SchemaTransformer {
10
+ predicate(node: Node) {
11
+ return (
12
+ node.kind === ts.SyntaxKind.FunctionDeclaration ||
13
+ node.kind === ts.SyntaxKind.ArrowFunction ||
14
+ node.kind === ts.SyntaxKind.MethodDeclaration ||
15
+ node.kind === ts.SyntaxKind.CallSignature ||
16
+ node.kind === ts.SyntaxKind.ConstructSignature ||
17
+ node.kind === ts.SyntaxKind.IndexSignature ||
18
+ node.kind === ts.SyntaxKind.FunctionType ||
19
+ node.kind === ts.SyntaxKind.MethodSignature
20
+ );
21
+ }
22
+
23
+ // need to check for anonymous functions assigned for vars, const and let.
24
+ async getIdentifiers(funcDec: SignatureDeclaration) {
25
+ return [new Identifier(this.getName(funcDec), funcDec.getSourceFile().fileName)];
26
+ }
27
+
28
+ private getName(funcDec: SignatureDeclaration) {
29
+ if (funcDec.kind === ts.SyntaxKind.ConstructSignature) return 'new';
30
+ return funcDec.name?.getText() || '';
31
+ }
32
+
33
+ async transform(node: SignatureDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
34
+ const name = this.getName(node);
35
+ const getQuickInfoFromDefaultModifier = async () => {
36
+ const defaultModifier = node.modifiers?.find((modifier) => modifier.kind === ts.SyntaxKind.DefaultKeyword);
37
+ if (defaultModifier) return context.getQuickInfo(defaultModifier);
38
+ if (node.kind === ts.SyntaxKind.ArrowFunction) return context.getQuickInfo(node.equalsGreaterThanToken);
39
+ return null;
40
+ };
41
+ const info = node.name ? await context.getQuickInfo(node.name) : await getQuickInfoFromDefaultModifier();
42
+ const returnTypeStr = info ? parseTypeFromQuickInfo(info) : 'any';
43
+ const displaySig = info?.body?.displayString || '';
44
+ const args = (await pMapSeries(node.parameters, async (param) =>
45
+ context.computeSchema(param)
46
+ )) as ParameterSchema[];
47
+
48
+ const returnType = await context.resolveType(node, returnTypeStr, Boolean(info));
49
+ const modifiers = node.modifiers?.map((modifier) => modifier.getText()) || [];
50
+ const typeParameters = node.typeParameters?.map((typeParam) => typeParam.name.getText());
51
+ const location = context.getLocation(node);
52
+ const doc = await context.jsDocToDocSchema(node);
53
+
54
+ return new FunctionLikeSchema(
55
+ location,
56
+ name,
57
+ args,
58
+ returnType,
59
+ displaySig,
60
+ modifiers as Modifier[],
61
+ doc,
62
+ typeParameters
63
+ );
64
+ }
65
+ }
@@ -0,0 +1,24 @@
1
+ import ts, { Node, GetAccessorDeclaration } from 'typescript';
2
+ import { GetAccessorSchema } from '@teambit/semantics.entities.semantic-schema';
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 { Identifier } from '../identifier';
7
+
8
+ export class GetAccessorTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.GetAccessor;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: GetAccessorDeclaration, context: SchemaExtractorContext) {
18
+ const info = await context.getQuickInfo(node.name);
19
+ const displaySig = info?.body?.displayString || '';
20
+ const typeStr = parseTypeFromQuickInfo(info);
21
+ const type = await context.resolveType(node, typeStr);
22
+ return new GetAccessorSchema(context.getLocation(node), node.name.getText(), type, displaySig);
23
+ }
24
+ }
@@ -0,0 +1,56 @@
1
+ import { ImportDeclaration, Node, SyntaxKind } from 'typescript';
2
+ import { UnImplementedSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { Identifier } from '../identifier';
6
+
7
+ export class ImportDeclarationTransformer implements SchemaTransformer {
8
+ predicate(node: Node) {
9
+ return node.kind === SyntaxKind.ImportDeclaration;
10
+ }
11
+
12
+ async getIdentifiers(importDec: ImportDeclaration): Promise<Identifier[]> {
13
+ if (!importDec.importClause) return [];
14
+
15
+ const sourceFile = importDec.getSourceFile().fileName;
16
+ const rawSourceFilePath = importDec.moduleSpecifier.getText();
17
+ const sourceFilePath = rawSourceFilePath.substring(1, rawSourceFilePath.length - 1);
18
+
19
+ // import A from 'a'
20
+ if (!importDec.importClause.namedBindings) {
21
+ return [new Identifier(importDec.importClause.getText(), sourceFile, undefined, sourceFilePath)];
22
+ }
23
+
24
+ // import { A } from 'a'
25
+ if (importDec.importClause.namedBindings?.kind === SyntaxKind.NamedImports) {
26
+ const { elements } = importDec.importClause.namedBindings;
27
+
28
+ return elements.map(({ name, propertyName }) => {
29
+ const id = propertyName?.getText() || name.getText();
30
+ const alias = (propertyName && name.getText()) || undefined;
31
+ const identifier = new Identifier(id, sourceFile, alias, sourceFilePath);
32
+ return identifier;
33
+ });
34
+ }
35
+
36
+ // import * as A from 'a';
37
+ if (importDec.importClause.namedBindings.kind === SyntaxKind.NamespaceImport) {
38
+ return [
39
+ new Identifier(
40
+ importDec.importClause.namedBindings.name.getText(),
41
+ sourceFile,
42
+ undefined,
43
+ importDec.moduleSpecifier.getText()
44
+ ),
45
+ ];
46
+ }
47
+
48
+ return [];
49
+ }
50
+
51
+ async transform(node: ImportDeclaration, context: SchemaExtractorContext) {
52
+ const location = context.getLocation(node);
53
+
54
+ return new UnImplementedSchema(location, node.getText(), node.kind.toString());
55
+ }
56
+ }
@@ -0,0 +1,24 @@
1
+ import ts, { Node, IndexSignatureDeclaration } from 'typescript';
2
+ import { IndexSignatureSchema, ParameterSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import pMapSeries from 'p-map-series';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import { Identifier } from '../identifier';
7
+
8
+ export class IndexSignatureTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.IndexSignature;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: IndexSignatureDeclaration, context: SchemaExtractorContext) {
18
+ const params = (await pMapSeries(node.parameters, async (param) =>
19
+ context.computeSchema(param)
20
+ )) as ParameterSchema[];
21
+ const type = await context.computeSchema(node.type);
22
+ return new IndexSignatureSchema(context.getLocation(node), params, type);
23
+ }
24
+ }
@@ -1,11 +1,36 @@
1
- export { ExportDeclaration } from './export-declaration';
2
- export { FunctionDeclaration } from './function-declaration';
1
+ export { ExportDeclarationTransformer } from './export-declaration';
2
+ export { FunctionLikeTransformer } from './function-like';
3
+ export { ParameterTransformer } from './parameter';
3
4
  export { VariableStatementTransformer } from './variable-statement';
4
5
  export { VariableDeclaration } from './variable-declaration';
5
6
  export { SourceFileTransformer } from './source-file-transformer';
6
7
  export { TypeAliasTransformer } from './type-alias';
8
+ export { IntersectionTypeTransformer } from './intersection-type';
9
+ export { UnionTypeTransformer } from './union-type';
10
+ export { TypeReferenceTransformer } from './type-reference';
11
+ export { TypeLiteralTransformer } from './type-literal';
12
+ export { LiteralTypeTransformer } from './literal-type';
13
+ export { TypeQueryTransformer } from './type-query';
14
+ export { TypeOperatorTransformer } from './type-operator';
15
+ export { KeywordTypeTransformer } from './keyword-type';
16
+ export { TupleTypeTransformer } from './tuple-type';
17
+ export { ParenthesizedTypeTransformer } from './parenthesized-type';
18
+ export { TypePredicateTransformer } from './type-predicate';
19
+ export { IndexedAccessTypeTransformer } from './indexed-access-type';
20
+ export { TemplateLiteralTypeSpanTransformer } from './template-literal-type-span';
21
+ export { TemplateLiteralTypeTransformer } from './template-literal-type';
22
+ export { ThisTypeTransformer } from './this-type';
23
+ export { ConditionalTypeTransformer } from './conditional-type';
24
+ export { NamedTupleTransformer } from './named-tuple';
25
+ export { ArrayTypeTransformer } from './array-type';
7
26
  export { ClassDeclarationTransformer } from './class-declaration';
27
+ export { ConstructorTransformer } from './constructor';
28
+ export { PropertyDeclarationTransformer } from './property-declaration';
29
+ export { SetAccessorTransformer } from './set-accessor';
30
+ export { GetAccessorTransformer } from './get-accessor';
31
+ export { IndexSignatureTransformer } from './index-signature';
8
32
  export { InterfaceDeclarationTransformer } from './interface-declaration';
9
33
  export { EnumDeclarationTransformer } from './enum-declaration';
10
34
  export { BindingElementTransformer } from './binding-element';
11
- export { ExportAssignmentDeclaration } from './export-assignment-declaration';
35
+ export { ExportAssignmentTransformer } from './export-assignment';
36
+ export { ImportDeclarationTransformer } from './import-declaration';
@@ -0,0 +1,21 @@
1
+ import { IndexedAccessTypeNode, Node, SyntaxKind } from 'typescript';
2
+ import { IndexedAccessSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { Identifier } from '../identifier';
6
+
7
+ export class IndexedAccessTypeTransformer implements SchemaTransformer {
8
+ predicate(node: Node) {
9
+ return node.kind === SyntaxKind.IndexedAccessType;
10
+ }
11
+
12
+ async getIdentifiers(): Promise<Identifier[]> {
13
+ return [];
14
+ }
15
+
16
+ async transform(node: IndexedAccessTypeNode, context: SchemaExtractorContext) {
17
+ const objectType = await context.computeSchema(node.objectType);
18
+ const indexType = await context.computeSchema(node.indexType);
19
+ return new IndexedAccessSchema(context.getLocation(node), objectType, indexType);
20
+ }
21
+ }
@@ -7,17 +7,15 @@ import {
7
7
  } from '@teambit/semantics.entities.semantic-schema';
8
8
  import { SchemaTransformer } from '../schema-transformer';
9
9
  import { SchemaExtractorContext } from '../schema-extractor-context';
10
- import { ExportIdentifier } from '../export-identifier';
11
- import { typeElementToSchema } from './utils/type-element-to-schema';
12
- import { typeNodeToSchema } from './utils/type-node-to-schema';
10
+ import { Identifier } from '../identifier';
13
11
 
14
12
  export class InterfaceDeclarationTransformer implements SchemaTransformer {
15
13
  predicate(node: Node) {
16
14
  return node.kind === SyntaxKind.InterfaceDeclaration;
17
15
  }
18
16
 
19
- async getIdentifiers(node: InterfaceDeclaration): Promise<ExportIdentifier[]> {
20
- return [new ExportIdentifier(node.name.getText(), node.getSourceFile().fileName)];
17
+ async getIdentifiers(node: InterfaceDeclaration): Promise<Identifier[]> {
18
+ return [new Identifier(node.name.getText(), node.getSourceFile().fileName)];
21
19
  }
22
20
 
23
21
  private async getExpressionWithTypeArgs(node: InterfaceDeclaration, context: SchemaExtractorContext) {
@@ -33,7 +31,7 @@ export class InterfaceDeclarationTransformer implements SchemaTransformer {
33
31
  }),
34
32
  async (expressionWithTypeArgs: ts.ExpressionWithTypeArguments & { name: string }) => {
35
33
  const { typeArguments, expression, name } = expressionWithTypeArgs;
36
- const typeArgsNodes = typeArguments ? await pMapSeries(typeArguments, (t) => typeNodeToSchema(t, context)) : [];
34
+ const typeArgsNodes = typeArguments ? await pMapSeries(typeArguments, (t) => context.computeSchema(t)) : [];
37
35
  const location = context.getLocation(expression);
38
36
  const expressionNode =
39
37
  (await context.visitDefinition(expression)) || new UnresolvedSchema(location, expression.getText());
@@ -43,7 +41,7 @@ export class InterfaceDeclarationTransformer implements SchemaTransformer {
43
41
  }
44
42
 
45
43
  async transform(interfaceDec: InterfaceDeclaration, context: SchemaExtractorContext) {
46
- const members = await pMapSeries(interfaceDec.members, (member) => typeElementToSchema(member, context));
44
+ const members = await pMapSeries(interfaceDec.members, (member) => context.computeSchema(member));
47
45
  const doc = await context.jsDocToDocSchema(interfaceDec);
48
46
  const signature = interfaceDec.name ? await context.getQuickInfoDisplayString(interfaceDec.name) : undefined;
49
47
  const extendsNodes = await this.getExpressionWithTypeArgs(interfaceDec, context);
@@ -0,0 +1,25 @@
1
+ import ts, { Node, IntersectionTypeNode } from 'typescript';
2
+ import { TypeIntersectionSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import pMapSeries from 'p-map-series';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import { Identifier } from '../identifier';
7
+
8
+ export class IntersectionTypeTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.IntersectionType;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: IntersectionTypeNode, context: SchemaExtractorContext) {
18
+ const types = await pMapSeries(node.types, async (type) => {
19
+ const typeSchema = context.computeSchema(type);
20
+ return typeSchema;
21
+ });
22
+ const location = context.getLocation(node);
23
+ return new TypeIntersectionSchema(location, types);
24
+ }
25
+ }
@@ -0,0 +1,39 @@
1
+ import { Node, SyntaxKind } from 'typescript';
2
+ import { KeywordTypeSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { Identifier } from '../identifier';
6
+
7
+ /**
8
+ * whether it's kind of `ts.KeywordTypeSyntaxKind`
9
+ */
10
+ export class KeywordTypeTransformer implements SchemaTransformer {
11
+ predicate(node: Node) {
12
+ switch (node.kind) {
13
+ case SyntaxKind.AnyKeyword:
14
+ case SyntaxKind.BigIntKeyword:
15
+ case SyntaxKind.BooleanKeyword:
16
+ case SyntaxKind.IntrinsicKeyword:
17
+ case SyntaxKind.NeverKeyword:
18
+ case SyntaxKind.NumberKeyword:
19
+ case SyntaxKind.ObjectKeyword:
20
+ case SyntaxKind.StringKeyword:
21
+ case SyntaxKind.SymbolKeyword:
22
+ case SyntaxKind.UndefinedKeyword:
23
+ case SyntaxKind.UnknownKeyword:
24
+ case SyntaxKind.VoidKeyword:
25
+ return true;
26
+ default:
27
+ return false;
28
+ }
29
+ }
30
+
31
+ async getIdentifiers(): Promise<Identifier[]> {
32
+ return [];
33
+ }
34
+
35
+ async transform(node: Node, context: SchemaExtractorContext) {
36
+ const location = context.getLocation(node);
37
+ return new KeywordTypeSchema(location, node.getText());
38
+ }
39
+ }
@@ -0,0 +1,23 @@
1
+ import ts, { LiteralTypeNode, Node } from 'typescript';
2
+ import { LiteralTypeSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { Identifier } from '../identifier';
6
+
7
+ /**
8
+ * e.g. string/boolean
9
+ */
10
+ export class LiteralTypeTransformer implements SchemaTransformer {
11
+ predicate(node: Node) {
12
+ return node.kind === ts.SyntaxKind.LiteralType;
13
+ }
14
+
15
+ async getIdentifiers(): Promise<Identifier[]> {
16
+ return [];
17
+ }
18
+
19
+ async transform(node: LiteralTypeNode, context: SchemaExtractorContext) {
20
+ const location = context.getLocation(node);
21
+ return new LiteralTypeSchema(location, node.getText());
22
+ }
23
+ }
@@ -0,0 +1,22 @@
1
+ import { Node, SyntaxKind, NamedTupleMember } from 'typescript';
2
+ import { NamedTupleSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { Identifier } from '../identifier';
6
+
7
+ export class NamedTupleTransformer implements SchemaTransformer {
8
+ predicate(node: Node) {
9
+ return node.kind === SyntaxKind.NamedTupleMember;
10
+ }
11
+
12
+ async getIdentifiers(): Promise<Identifier[]> {
13
+ return [];
14
+ }
15
+
16
+ async transform(node: NamedTupleMember, context: SchemaExtractorContext) {
17
+ const name = node.name.getText();
18
+ const location = context.getLocation(node);
19
+ const type = await context.computeSchema(node.type);
20
+ return new NamedTupleSchema(location, type, name);
21
+ }
22
+ }
@@ -0,0 +1,110 @@
1
+ import ts, {
2
+ BindingElement,
3
+ isIdentifier,
4
+ Node,
5
+ ParameterDeclaration,
6
+ SyntaxKind,
7
+ ArrayBindingElement,
8
+ } from 'typescript';
9
+ import {
10
+ InferenceTypeSchema,
11
+ ParameterSchema,
12
+ SchemaNode,
13
+ TupleTypeSchema,
14
+ TypeLiteralSchema,
15
+ } from '@teambit/semantics.entities.semantic-schema';
16
+ import pMapSeries from 'p-map-series';
17
+ import { SchemaTransformer } from '../schema-transformer';
18
+ import { SchemaExtractorContext } from '../schema-extractor-context';
19
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
20
+ import { Identifier } from '../identifier';
21
+
22
+ export class ParameterTransformer implements SchemaTransformer {
23
+ predicate(node: Node) {
24
+ return node.kind === ts.SyntaxKind.Parameter;
25
+ }
26
+
27
+ async getIdentifiers(): Promise<Identifier[]> {
28
+ return [];
29
+ }
30
+
31
+ async transform(node: ParameterDeclaration, context: SchemaExtractorContext) {
32
+ return new ParameterSchema(
33
+ context.getLocation(node),
34
+ this.getName(node),
35
+ await this.getType(node, context),
36
+ Boolean(node.questionToken),
37
+ node.initializer ? node.initializer.getText() : undefined,
38
+ undefined,
39
+ await this.getObjectBindingNodes(node, context)
40
+ );
41
+ }
42
+
43
+ getName(param: ParameterDeclaration): string {
44
+ if (isIdentifier(param.name)) {
45
+ return param.name.getText();
46
+ }
47
+ // it's binding pattern, either an array or an object
48
+ const elements = param.name.elements.map((elem) => elem.getText());
49
+ const elementsStr = elements.join(', ');
50
+ if (param.name.kind === SyntaxKind.ArrayBindingPattern) {
51
+ return `[ ${elementsStr} ]`;
52
+ }
53
+ // it's an object binding
54
+ return `{ ${elementsStr} }`;
55
+ }
56
+
57
+ async getType(param: ParameterDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
58
+ if (param.type) {
59
+ return context.computeSchema(param.type);
60
+ }
61
+
62
+ if (isIdentifier(param.name)) {
63
+ const info = await context.getQuickInfo(param.name);
64
+ const parsed = parseTypeFromQuickInfo(info);
65
+ return new InferenceTypeSchema(context.getLocation(param), parsed);
66
+ }
67
+ // it's binding pattern, either an array or an object
68
+ if (param.name.kind === SyntaxKind.ArrayBindingPattern) {
69
+ const elements = await pMapSeries(param.name.elements, async (elem: ArrayBindingElement) => {
70
+ const info = await context.getQuickInfo(elem);
71
+ const parsed = parseTypeFromQuickInfo(info);
72
+ return new InferenceTypeSchema(context.getLocation(param), parsed);
73
+ });
74
+ return new TupleTypeSchema(context.getLocation(param), elements);
75
+ }
76
+ if (param.name.kind === SyntaxKind.ObjectBindingPattern) {
77
+ const elements = await pMapSeries(param.name.elements, async (elem: BindingElement) => {
78
+ const info = await context.getQuickInfo(elem.name);
79
+ const parsed = parseTypeFromQuickInfo(info);
80
+ return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());
81
+ });
82
+ return new TypeLiteralSchema(context.getLocation(param), elements);
83
+ }
84
+ throw new Error(`unknown param type`);
85
+ }
86
+
87
+ async getObjectBindingNodes(
88
+ param: ParameterDeclaration,
89
+ context: SchemaExtractorContext
90
+ ): Promise<SchemaNode[] | undefined> {
91
+ if (param.name.kind !== SyntaxKind.ObjectBindingPattern) return undefined;
92
+ return pMapSeries(param.name.elements, async (elem: BindingElement) => {
93
+ const info =
94
+ elem.name.kind === SyntaxKind.ObjectBindingPattern ? undefined : await context.getQuickInfo(elem.name);
95
+ // @todo look into extracting nested objected binding patters
96
+ /**
97
+ * apiNode: {
98
+ api: {
99
+ name,
100
+ signature: defaultSignature,
101
+ doc,
102
+ location: { filePath },
103
+ },
104
+ },
105
+ */
106
+ const parsed = info ? parseTypeFromQuickInfo(info) : elem.getText();
107
+ return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());
108
+ });
109
+ }
110
+ }
@@ -0,0 +1,20 @@
1
+ import { Node, ParenthesizedTypeNode, SyntaxKind } from 'typescript';
2
+ import { ParenthesizedTypeSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import { SchemaTransformer } from '../schema-transformer';
4
+ import { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { Identifier } from '../identifier';
6
+
7
+ export class ParenthesizedTypeTransformer implements SchemaTransformer {
8
+ predicate(node: Node) {
9
+ return node.kind === SyntaxKind.ParenthesizedType;
10
+ }
11
+
12
+ async getIdentifiers(): Promise<Identifier[]> {
13
+ return [];
14
+ }
15
+
16
+ async transform(node: ParenthesizedTypeNode, context: SchemaExtractorContext) {
17
+ const type = await context.computeSchema(node.type);
18
+ return new ParenthesizedTypeSchema(context.getLocation(node), type);
19
+ }
20
+ }
@@ -0,0 +1,33 @@
1
+ import { Node, PropertyDeclaration, PropertySignature, SyntaxKind } from 'typescript';
2
+ import { VariableLikeSchema } from '@teambit/semantics.entities.semantic-schema';
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 { Identifier } from '../identifier';
7
+
8
+ export class PropertyDeclarationTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ // [computedName]: string
18
+ private isComputedProperty(node: PropertyDeclaration | PropertySignature) {
19
+ return node.name.kind === SyntaxKind.ComputedPropertyName;
20
+ }
21
+
22
+ // @todo - handle arrow function objects
23
+ async transform(node: PropertyDeclaration | PropertySignature, context: SchemaExtractorContext) {
24
+ const name = node.name.getText();
25
+ const info = this.isComputedProperty(node) ? undefined : await context.getQuickInfo(node.name);
26
+ const displaySig = info?.body?.displayString || node.getText();
27
+ const typeStr = parseTypeFromQuickInfo(info);
28
+ const type = await context.resolveType(node, typeStr);
29
+ const isOptional = Boolean(node.questionToken);
30
+ const doc = await context.jsDocToDocSchema(node);
31
+ return new VariableLikeSchema(context.getLocation(node), name, displaySig, type, isOptional, doc);
32
+ }
33
+ }
@@ -0,0 +1,25 @@
1
+ import ts, { Node, SetAccessorDeclaration } from 'typescript';
2
+ import { ParameterSchema, SetAccessorSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import pMapSeries from 'p-map-series';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import { Identifier } from '../identifier';
7
+
8
+ export class SetAccessorTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.SetAccessor;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: SetAccessorDeclaration, context: SchemaExtractorContext) {
18
+ const params = (await pMapSeries(node.parameters, async (param) =>
19
+ context.computeSchema(param)
20
+ )) as ParameterSchema[];
21
+
22
+ const displaySig = await context.getQuickInfoDisplayString(node.name);
23
+ return new SetAccessorSchema(context.getLocation(node), node.name.getText(), params[0], displaySig);
24
+ }
25
+ }