@teambit/typescript 0.0.0-004aea01bc027e428dfd0f6583f49a1b8286bdd0

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 (309) hide show
  1. package/cmds/check-types.cmd.ts +81 -0
  2. package/dist/cmds/check-types.cmd.d.ts +35 -0
  3. package/dist/cmds/check-types.cmd.js +105 -0
  4. package/dist/cmds/check-types.cmd.js.map +1 -0
  5. package/dist/compiler-options.d.ts +22 -0
  6. package/dist/compiler-options.js +3 -0
  7. package/dist/compiler-options.js.map +1 -0
  8. package/dist/esm.mjs +21 -0
  9. package/dist/exceptions/index.d.ts +1 -0
  10. package/dist/exceptions/index.js +20 -0
  11. package/dist/exceptions/index.js.map +1 -0
  12. package/dist/exceptions/transformer-not-found.d.ts +8 -0
  13. package/dist/exceptions/transformer-not-found.js +26 -0
  14. package/dist/exceptions/transformer-not-found.js.map +1 -0
  15. package/dist/export-identifier.d.ts +6 -0
  16. package/dist/export-identifier.js +29 -0
  17. package/dist/export-identifier.js.map +1 -0
  18. package/dist/extractor-options.d.ts +26 -0
  19. package/dist/extractor-options.js +3 -0
  20. package/dist/extractor-options.js.map +1 -0
  21. package/dist/identifier-list.d.ts +7 -0
  22. package/dist/identifier-list.js +21 -0
  23. package/dist/identifier-list.js.map +1 -0
  24. package/dist/identifier.d.ts +11 -0
  25. package/dist/identifier.js +45 -0
  26. package/dist/identifier.js.map +1 -0
  27. package/dist/index.d.ts +9 -0
  28. package/dist/index.js +91 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/preview-1760469561956.js +7 -0
  31. package/dist/remove-types-task.d.ts +12 -0
  32. package/dist/remove-types-task.js +64 -0
  33. package/dist/remove-types-task.js.map +1 -0
  34. package/dist/schema-extractor-context.d.ts +164 -0
  35. package/dist/schema-extractor-context.js +745 -0
  36. package/dist/schema-extractor-context.js.map +1 -0
  37. package/dist/schema-transformer.d.ts +19 -0
  38. package/dist/schema-transformer.js +3 -0
  39. package/dist/schema-transformer.js.map +1 -0
  40. package/dist/schema-transformer.plugin.d.ts +9 -0
  41. package/dist/schema-transformer.plugin.js +22 -0
  42. package/dist/schema-transformer.plugin.js.map +1 -0
  43. package/dist/sourceFileTransformers/class.d.ts +2 -0
  44. package/dist/sourceFileTransformers/class.js +57 -0
  45. package/dist/sourceFileTransformers/class.js.map +1 -0
  46. package/dist/sourceFileTransformers/empty-line-encoder.d.ts +14 -0
  47. package/dist/sourceFileTransformers/empty-line-encoder.js +62 -0
  48. package/dist/sourceFileTransformers/empty-line-encoder.js.map +1 -0
  49. package/dist/sourceFileTransformers/export.d.ts +2 -0
  50. package/dist/sourceFileTransformers/export.js +58 -0
  51. package/dist/sourceFileTransformers/export.js.map +1 -0
  52. package/dist/sourceFileTransformers/expression-statement.d.ts +2 -0
  53. package/dist/sourceFileTransformers/expression-statement.js +58 -0
  54. package/dist/sourceFileTransformers/expression-statement.js.map +1 -0
  55. package/dist/sourceFileTransformers/function.d.ts +2 -0
  56. package/dist/sourceFileTransformers/function.js +119 -0
  57. package/dist/sourceFileTransformers/function.js.map +1 -0
  58. package/dist/sourceFileTransformers/import.d.ts +2 -0
  59. package/dist/sourceFileTransformers/import.js +71 -0
  60. package/dist/sourceFileTransformers/import.js.map +1 -0
  61. package/dist/sourceFileTransformers/index.d.ts +12 -0
  62. package/dist/sourceFileTransformers/index.js +137 -0
  63. package/dist/sourceFileTransformers/index.js.map +1 -0
  64. package/dist/sourceFileTransformers/interface.d.ts +2 -0
  65. package/dist/sourceFileTransformers/interface.js +50 -0
  66. package/dist/sourceFileTransformers/interface.js.map +1 -0
  67. package/dist/sourceFileTransformers/replaceName.d.ts +1 -0
  68. package/dist/sourceFileTransformers/replaceName.js +19 -0
  69. package/dist/sourceFileTransformers/replaceName.js.map +1 -0
  70. package/dist/sourceFileTransformers/transform.d.ts +12 -0
  71. package/dist/sourceFileTransformers/transform.js +76 -0
  72. package/dist/sourceFileTransformers/transform.js.map +1 -0
  73. package/dist/sourceFileTransformers/type-reference.d.ts +2 -0
  74. package/dist/sourceFileTransformers/type-reference.js +38 -0
  75. package/dist/sourceFileTransformers/type-reference.js.map +1 -0
  76. package/dist/sourceFileTransformers/typeAlias.d.ts +2 -0
  77. package/dist/sourceFileTransformers/typeAlias.js +41 -0
  78. package/dist/sourceFileTransformers/typeAlias.js.map +1 -0
  79. package/dist/sourceFileTransformers/variable.d.ts +2 -0
  80. package/dist/sourceFileTransformers/variable.js +41 -0
  81. package/dist/sourceFileTransformers/variable.js.map +1 -0
  82. package/dist/transform-source-file.spec.d.ts +1 -0
  83. package/dist/transform-source-file.spec.js +182 -0
  84. package/dist/transform-source-file.spec.js.map +1 -0
  85. package/dist/transformers/array-literal-expression.d.ts +10 -0
  86. package/dist/transformers/array-literal-expression.js +51 -0
  87. package/dist/transformers/array-literal-expression.js.map +1 -0
  88. package/dist/transformers/array-type.d.ts +10 -0
  89. package/dist/transformers/array-type.js +37 -0
  90. package/dist/transformers/array-type.js.map +1 -0
  91. package/dist/transformers/binding-element.d.ts +17 -0
  92. package/dist/transformers/binding-element.js +63 -0
  93. package/dist/transformers/binding-element.js.map +1 -0
  94. package/dist/transformers/class-declaration.d.ts +12 -0
  95. package/dist/transformers/class-declaration.js +116 -0
  96. package/dist/transformers/class-declaration.js.map +1 -0
  97. package/dist/transformers/conditional-type.d.ts +10 -0
  98. package/dist/transformers/conditional-type.js +38 -0
  99. package/dist/transformers/conditional-type.js.map +1 -0
  100. package/dist/transformers/constructor.d.ts +10 -0
  101. package/dist/transformers/constructor.js +49 -0
  102. package/dist/transformers/constructor.js.map +1 -0
  103. package/dist/transformers/decorator.d.ts +10 -0
  104. package/dist/transformers/decorator.js +54 -0
  105. package/dist/transformers/decorator.js.map +1 -0
  106. package/dist/transformers/enum-declaration.d.ts +10 -0
  107. package/dist/transformers/enum-declaration.js +60 -0
  108. package/dist/transformers/enum-declaration.js.map +1 -0
  109. package/dist/transformers/export-assignment.d.ts +14 -0
  110. package/dist/transformers/export-assignment.js +54 -0
  111. package/dist/transformers/export-assignment.js.map +1 -0
  112. package/dist/transformers/export-declaration.d.ts +10 -0
  113. package/dist/transformers/export-declaration.js +154 -0
  114. package/dist/transformers/export-declaration.js.map +1 -0
  115. package/dist/transformers/expression-statement.d.ts +10 -0
  116. package/dist/transformers/expression-statement.js +36 -0
  117. package/dist/transformers/expression-statement.js.map +1 -0
  118. package/dist/transformers/function-like.d.ts +11 -0
  119. package/dist/transformers/function-like.js +81 -0
  120. package/dist/transformers/function-like.js.map +1 -0
  121. package/dist/transformers/get-accessor.d.ts +10 -0
  122. package/dist/transformers/get-accessor.js +46 -0
  123. package/dist/transformers/get-accessor.js.map +1 -0
  124. package/dist/transformers/import-declaration.d.ts +10 -0
  125. package/dist/transformers/import-declaration.js +72 -0
  126. package/dist/transformers/import-declaration.js.map +1 -0
  127. package/dist/transformers/index-signature.d.ts +10 -0
  128. package/dist/transformers/index-signature.js +41 -0
  129. package/dist/transformers/index-signature.js.map +1 -0
  130. package/dist/transformers/index.d.ts +43 -0
  131. package/dist/transformers/index.js +566 -0
  132. package/dist/transformers/index.js.map +1 -0
  133. package/dist/transformers/indexed-access-type.d.ts +10 -0
  134. package/dist/transformers/indexed-access-type.js +36 -0
  135. package/dist/transformers/indexed-access-type.js.map +1 -0
  136. package/dist/transformers/interface-declaration.d.ts +11 -0
  137. package/dist/transformers/interface-declaration.js +86 -0
  138. package/dist/transformers/interface-declaration.js.map +1 -0
  139. package/dist/transformers/intersection-type.d.ts +10 -0
  140. package/dist/transformers/intersection-type.js +47 -0
  141. package/dist/transformers/intersection-type.js.map +1 -0
  142. package/dist/transformers/keyword-type.d.ts +13 -0
  143. package/dist/transformers/keyword-type.js +54 -0
  144. package/dist/transformers/keyword-type.js.map +1 -0
  145. package/dist/transformers/literal-type.d.ts +13 -0
  146. package/dist/transformers/literal-type.js +39 -0
  147. package/dist/transformers/literal-type.js.map +1 -0
  148. package/dist/transformers/literal-value.d.ts +12 -0
  149. package/dist/transformers/literal-value.js +35 -0
  150. package/dist/transformers/literal-value.js.map +1 -0
  151. package/dist/transformers/module-declaration.d.ts +10 -0
  152. package/dist/transformers/module-declaration.js +36 -0
  153. package/dist/transformers/module-declaration.js.map +1 -0
  154. package/dist/transformers/named-tuple.d.ts +10 -0
  155. package/dist/transformers/named-tuple.js +37 -0
  156. package/dist/transformers/named-tuple.js.map +1 -0
  157. package/dist/transformers/object-literal-expression.d.ts +9 -0
  158. package/dist/transformers/object-literal-expression.js +51 -0
  159. package/dist/transformers/object-literal-expression.js.map +1 -0
  160. package/dist/transformers/parameter.d.ts +14 -0
  161. package/dist/transformers/parameter.js +109 -0
  162. package/dist/transformers/parameter.js.map +1 -0
  163. package/dist/transformers/parenthesized-type.d.ts +10 -0
  164. package/dist/transformers/parenthesized-type.js +35 -0
  165. package/dist/transformers/parenthesized-type.js.map +1 -0
  166. package/dist/transformers/property-assignment.d.ts +9 -0
  167. package/dist/transformers/property-assignment.js +39 -0
  168. package/dist/transformers/property-assignment.js.map +1 -0
  169. package/dist/transformers/property-declaration.d.ts +11 -0
  170. package/dist/transformers/property-declaration.js +56 -0
  171. package/dist/transformers/property-declaration.js.map +1 -0
  172. package/dist/transformers/set-accessor.d.ts +10 -0
  173. package/dist/transformers/set-accessor.js +44 -0
  174. package/dist/transformers/set-accessor.js.map +1 -0
  175. package/dist/transformers/source-file-transformer.d.ts +15 -0
  176. package/dist/transformers/source-file-transformer.js +108 -0
  177. package/dist/transformers/source-file-transformer.js.map +1 -0
  178. package/dist/transformers/template-literal-type-span.d.ts +10 -0
  179. package/dist/transformers/template-literal-type-span.js +36 -0
  180. package/dist/transformers/template-literal-type-span.js.map +1 -0
  181. package/dist/transformers/template-literal-type.d.ts +10 -0
  182. package/dist/transformers/template-literal-type.js +44 -0
  183. package/dist/transformers/template-literal-type.js.map +1 -0
  184. package/dist/transformers/this-type.d.ts +10 -0
  185. package/dist/transformers/this-type.js +34 -0
  186. package/dist/transformers/this-type.js.map +1 -0
  187. package/dist/transformers/tuple-type.d.ts +10 -0
  188. package/dist/transformers/tuple-type.js +46 -0
  189. package/dist/transformers/tuple-type.js.map +1 -0
  190. package/dist/transformers/type-alias.d.ts +11 -0
  191. package/dist/transformers/type-alias.js +48 -0
  192. package/dist/transformers/type-alias.js.map +1 -0
  193. package/dist/transformers/type-literal.d.ts +14 -0
  194. package/dist/transformers/type-literal.js +48 -0
  195. package/dist/transformers/type-literal.js.map +1 -0
  196. package/dist/transformers/type-operator.d.ts +15 -0
  197. package/dist/transformers/type-operator.js +51 -0
  198. package/dist/transformers/type-operator.js.map +1 -0
  199. package/dist/transformers/type-predicate.d.ts +10 -0
  200. package/dist/transformers/type-predicate.js +37 -0
  201. package/dist/transformers/type-predicate.js.map +1 -0
  202. package/dist/transformers/type-query.d.ts +13 -0
  203. package/dist/transformers/type-query.js +41 -0
  204. package/dist/transformers/type-query.js.map +1 -0
  205. package/dist/transformers/type-reference.d.ts +17 -0
  206. package/dist/transformers/type-reference.js +58 -0
  207. package/dist/transformers/type-reference.js.map +1 -0
  208. package/dist/transformers/union-type.d.ts +10 -0
  209. package/dist/transformers/union-type.js +47 -0
  210. package/dist/transformers/union-type.js.map +1 -0
  211. package/dist/transformers/utils/jsdoc-to-doc-schema.d.ts +5 -0
  212. package/dist/transformers/utils/jsdoc-to-doc-schema.js +114 -0
  213. package/dist/transformers/utils/jsdoc-to-doc-schema.js.map +1 -0
  214. package/dist/transformers/utils/parse-type-from-quick-info.d.ts +36 -0
  215. package/dist/transformers/utils/parse-type-from-quick-info.js +111 -0
  216. package/dist/transformers/utils/parse-type-from-quick-info.js.map +1 -0
  217. package/dist/transformers/variable-declaration.d.ts +11 -0
  218. package/dist/transformers/variable-declaration.js +102 -0
  219. package/dist/transformers/variable-declaration.js.map +1 -0
  220. package/dist/transformers/variable-statement.d.ts +14 -0
  221. package/dist/transformers/variable-statement.js +67 -0
  222. package/dist/transformers/variable-statement.js.map +1 -0
  223. package/dist/tsconfig.default.json +25 -0
  224. package/dist/typescript.aspect.d.ts +2 -0
  225. package/dist/typescript.aspect.js +18 -0
  226. package/dist/typescript.aspect.js.map +1 -0
  227. package/dist/typescript.composition.d.ts +1 -0
  228. package/dist/typescript.composition.js +29 -0
  229. package/dist/typescript.composition.js.map +1 -0
  230. package/dist/typescript.docs.mdx +8 -0
  231. package/dist/typescript.extractor.d.ts +52 -0
  232. package/dist/typescript.extractor.js +254 -0
  233. package/dist/typescript.extractor.js.map +1 -0
  234. package/dist/typescript.main.runtime.d.ts +130 -0
  235. package/dist/typescript.main.runtime.js +400 -0
  236. package/dist/typescript.main.runtime.js.map +1 -0
  237. package/dist/typescript.parser.d.ts +13 -0
  238. package/dist/typescript.parser.js +142 -0
  239. package/dist/typescript.parser.js.map +1 -0
  240. package/dist/typescript.parser.spec.d.ts +1 -0
  241. package/dist/typescript.parser.spec.js +189 -0
  242. package/dist/typescript.parser.spec.js.map +1 -0
  243. package/esm.mjs +21 -0
  244. package/exceptions/index.ts +1 -0
  245. package/exceptions/transformer-not-found.ts +20 -0
  246. package/package.json +86 -0
  247. package/sourceFileTransformers/class.ts +73 -0
  248. package/sourceFileTransformers/empty-line-encoder.ts +56 -0
  249. package/sourceFileTransformers/export.ts +65 -0
  250. package/sourceFileTransformers/expression-statement.ts +48 -0
  251. package/sourceFileTransformers/function.ts +170 -0
  252. package/sourceFileTransformers/import.ts +101 -0
  253. package/sourceFileTransformers/index.ts +14 -0
  254. package/sourceFileTransformers/interface.ts +41 -0
  255. package/sourceFileTransformers/replaceName.ts +11 -0
  256. package/sourceFileTransformers/transform.ts +70 -0
  257. package/sourceFileTransformers/type-reference.ts +19 -0
  258. package/sourceFileTransformers/typeAlias.ts +25 -0
  259. package/sourceFileTransformers/variable.ts +25 -0
  260. package/transformers/array-literal-expression.ts +31 -0
  261. package/transformers/array-type.ts +22 -0
  262. package/transformers/binding-element.ts +35 -0
  263. package/transformers/class-declaration.ts +109 -0
  264. package/transformers/conditional-type.ts +24 -0
  265. package/transformers/constructor.ts +37 -0
  266. package/transformers/decorator.ts +30 -0
  267. package/transformers/enum-declaration.ts +32 -0
  268. package/transformers/export-assignment.ts +48 -0
  269. package/transformers/export-declaration.ts +182 -0
  270. package/transformers/expression-statement.ts +21 -0
  271. package/transformers/function-like.ts +72 -0
  272. package/transformers/get-accessor.ts +25 -0
  273. package/transformers/import-declaration.ts +57 -0
  274. package/transformers/index-signature.ts +27 -0
  275. package/transformers/index.ts +43 -0
  276. package/transformers/indexed-access-type.ts +22 -0
  277. package/transformers/interface-declaration.ts +68 -0
  278. package/transformers/intersection-type.ts +26 -0
  279. package/transformers/keyword-type.ts +40 -0
  280. package/transformers/literal-type.ts +24 -0
  281. package/transformers/literal-value.ts +40 -0
  282. package/transformers/module-declaration.ts +21 -0
  283. package/transformers/named-tuple.ts +23 -0
  284. package/transformers/object-literal-expression.ts +29 -0
  285. package/transformers/parameter.ts +115 -0
  286. package/transformers/parenthesized-type.ts +21 -0
  287. package/transformers/property-assignment.ts +24 -0
  288. package/transformers/property-declaration.ts +35 -0
  289. package/transformers/set-accessor.ts +27 -0
  290. package/transformers/source-file-transformer.ts +95 -0
  291. package/transformers/template-literal-type-span.ts +22 -0
  292. package/transformers/template-literal-type.ts +26 -0
  293. package/transformers/this-type.ts +20 -0
  294. package/transformers/tuple-type.ts +25 -0
  295. package/transformers/type-alias.ts +27 -0
  296. package/transformers/type-literal.ts +27 -0
  297. package/transformers/type-operator.ts +38 -0
  298. package/transformers/type-predicate.ts +23 -0
  299. package/transformers/type-query.ts +26 -0
  300. package/transformers/type-reference.ts +37 -0
  301. package/transformers/union-type.ts +26 -0
  302. package/transformers/utils/jsdoc-to-doc-schema.ts +114 -0
  303. package/transformers/utils/parse-type-from-quick-info.ts +99 -0
  304. package/transformers/variable-declaration.ts +111 -0
  305. package/transformers/variable-statement.ts +34 -0
  306. package/types/asset.d.ts +41 -0
  307. package/types/style.d.ts +42 -0
  308. package/typescript.composition.tsx +7 -0
  309. package/typescript.docs.mdx +8 -0
@@ -0,0 +1,68 @@
1
+ import type { Node, InterfaceDeclaration } from 'typescript';
2
+ import type ts from 'typescript';
3
+ import { SyntaxKind } from 'typescript';
4
+ import pMapSeries from 'p-map-series';
5
+ import {
6
+ ExpressionWithTypeArgumentsSchema,
7
+ InterfaceSchema,
8
+ UnresolvedSchema,
9
+ } from '@teambit/semantics.entities.semantic-schema';
10
+ import type { SchemaTransformer } from '../schema-transformer';
11
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
12
+ import { Identifier } from '../identifier';
13
+
14
+ export class InterfaceDeclarationTransformer implements SchemaTransformer {
15
+ predicate(node: Node) {
16
+ return node.kind === SyntaxKind.InterfaceDeclaration;
17
+ }
18
+
19
+ async getIdentifiers(node: InterfaceDeclaration): Promise<Identifier[]> {
20
+ return [new Identifier(node.name.getText(), node.getSourceFile().fileName)];
21
+ }
22
+
23
+ private async getExpressionWithTypeArgs(node: InterfaceDeclaration, context: SchemaExtractorContext) {
24
+ if (!node.heritageClauses) return [];
25
+
26
+ return pMapSeries(
27
+ node.heritageClauses
28
+ .filter((heritageClause: ts.HeritageClause) => heritageClause.token === SyntaxKind.ExtendsKeyword)
29
+ .flatMap((h: ts.HeritageClause) => {
30
+ const { types } = h;
31
+ const name = h.getText();
32
+ return types.map((type) => ({ ...type, name }));
33
+ }),
34
+ async (expressionWithTypeArgs: ts.ExpressionWithTypeArguments & { name: string }) => {
35
+ const { typeArguments, expression, name } = expressionWithTypeArgs;
36
+ const typeArgsNodes = typeArguments ? await pMapSeries(typeArguments, (t) => context.computeSchema(t)) : [];
37
+ const location = context.getLocation(expression);
38
+ const expressionNode =
39
+ (await context.visitDefinition(expression)) || new UnresolvedSchema(location, expression.getText());
40
+ return new ExpressionWithTypeArgumentsSchema(typeArgsNodes, expressionNode, name, location);
41
+ }
42
+ );
43
+ }
44
+
45
+ async transform(interfaceDec: InterfaceDeclaration, context: SchemaExtractorContext) {
46
+ const members = await pMapSeries(interfaceDec.members, (member) => context.computeSchema(member));
47
+ const doc = await context.jsDocToDocSchema(interfaceDec);
48
+ const signature = interfaceDec.name ? await context.getQuickInfoDisplayString(interfaceDec.name) : undefined;
49
+ const extendsNodes = await this.getExpressionWithTypeArgs(interfaceDec, context);
50
+ const typeParameters = interfaceDec.typeParameters?.map((typeParam) => {
51
+ return typeParam.name.getText();
52
+ });
53
+
54
+ if (!signature) {
55
+ throw Error(`Missing signature for interface ${interfaceDec.name.getText()} declaration`);
56
+ }
57
+
58
+ return new InterfaceSchema(
59
+ context.getLocation(interfaceDec),
60
+ interfaceDec.name.getText(),
61
+ signature,
62
+ extendsNodes,
63
+ members,
64
+ doc,
65
+ typeParameters
66
+ );
67
+ }
68
+ }
@@ -0,0 +1,26 @@
1
+ import type { Node, IntersectionTypeNode } from 'typescript';
2
+ import ts from 'typescript';
3
+ import { TypeIntersectionSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import pMapSeries from 'p-map-series';
5
+ import type { SchemaTransformer } from '../schema-transformer';
6
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
7
+ import type { Identifier } from '../identifier';
8
+
9
+ export class IntersectionTypeTransformer implements SchemaTransformer {
10
+ predicate(node: Node) {
11
+ return node.kind === ts.SyntaxKind.IntersectionType;
12
+ }
13
+
14
+ async getIdentifiers(): Promise<Identifier[]> {
15
+ return [];
16
+ }
17
+
18
+ async transform(node: IntersectionTypeNode, context: SchemaExtractorContext) {
19
+ const types = await pMapSeries(node.types, async (type) => {
20
+ const typeSchema = context.computeSchema(type);
21
+ return typeSchema;
22
+ });
23
+ const location = context.getLocation(node);
24
+ return new TypeIntersectionSchema(location, types);
25
+ }
26
+ }
@@ -0,0 +1,40 @@
1
+ import type { Node } from 'typescript';
2
+ import { SyntaxKind } from 'typescript';
3
+ import { KeywordTypeSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaTransformer } from '../schema-transformer';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { Identifier } from '../identifier';
7
+
8
+ /**
9
+ * whether it's kind of `ts.KeywordTypeSyntaxKind`
10
+ */
11
+ export class KeywordTypeTransformer implements SchemaTransformer {
12
+ predicate(node: Node) {
13
+ switch (node.kind) {
14
+ case SyntaxKind.AnyKeyword:
15
+ case SyntaxKind.BigIntKeyword:
16
+ case SyntaxKind.BooleanKeyword:
17
+ case SyntaxKind.IntrinsicKeyword:
18
+ case SyntaxKind.NeverKeyword:
19
+ case SyntaxKind.NumberKeyword:
20
+ case SyntaxKind.ObjectKeyword:
21
+ case SyntaxKind.StringKeyword:
22
+ case SyntaxKind.SymbolKeyword:
23
+ case SyntaxKind.UndefinedKeyword:
24
+ case SyntaxKind.UnknownKeyword:
25
+ case SyntaxKind.VoidKeyword:
26
+ return true;
27
+ default:
28
+ return false;
29
+ }
30
+ }
31
+
32
+ async getIdentifiers(): Promise<Identifier[]> {
33
+ return [];
34
+ }
35
+
36
+ async transform(node: Node, context: SchemaExtractorContext) {
37
+ const location = context.getLocation(node);
38
+ return new KeywordTypeSchema(location, node.getText());
39
+ }
40
+ }
@@ -0,0 +1,24 @@
1
+ import type { LiteralTypeNode, Node } from 'typescript';
2
+ import ts from 'typescript';
3
+ import { LiteralTypeSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaTransformer } from '../schema-transformer';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { Identifier } from '../identifier';
7
+
8
+ /**
9
+ * e.g. string/boolean
10
+ */
11
+ export class LiteralTypeTransformer implements SchemaTransformer {
12
+ predicate(node: Node) {
13
+ return node.kind === ts.SyntaxKind.LiteralType;
14
+ }
15
+
16
+ async getIdentifiers(): Promise<Identifier[]> {
17
+ return [];
18
+ }
19
+
20
+ async transform(node: LiteralTypeNode, context: SchemaExtractorContext) {
21
+ const location = context.getLocation(node);
22
+ return new LiteralTypeSchema(location, node.getText());
23
+ }
24
+ }
@@ -0,0 +1,40 @@
1
+ import type { SchemaNode } from '@teambit/semantics.entities.semantic-schema';
2
+ import { LiteralValueSchema } from '@teambit/semantics.entities.semantic-schema';
3
+ import type { Node, StringLiteral } from 'typescript';
4
+ import ts from 'typescript';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { SchemaTransformer } from '../schema-transformer';
7
+ import type { Identifier } from '../identifier';
8
+
9
+ export type LiteralValueNode =
10
+ | StringLiteral
11
+ | ts.NumericLiteral
12
+ | ts.TrueLiteral
13
+ | ts.FalseLiteral
14
+ | ts.NullLiteral
15
+ | ts.BigIntLiteral
16
+ | ts.RegularExpressionLiteral
17
+ | ts.NewExpression;
18
+
19
+ export class LiteralValueTransformer implements SchemaTransformer {
20
+ predicate(node: Node): boolean {
21
+ return (
22
+ node.kind === ts.SyntaxKind.StringLiteral ||
23
+ node.kind === ts.SyntaxKind.NumericLiteral ||
24
+ node.kind === ts.SyntaxKind.TrueKeyword ||
25
+ node.kind === ts.SyntaxKind.FalseKeyword ||
26
+ node.kind === ts.SyntaxKind.NullKeyword ||
27
+ node.kind === ts.SyntaxKind.UndefinedKeyword ||
28
+ node.kind === ts.SyntaxKind.BigIntLiteral ||
29
+ node.kind === ts.SyntaxKind.RegularExpressionLiteral ||
30
+ node.kind === ts.SyntaxKind.NewExpression ||
31
+ node.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral
32
+ );
33
+ }
34
+ async getIdentifiers(): Promise<Identifier[]> {
35
+ return [];
36
+ }
37
+ async transform(node: LiteralValueNode, context: SchemaExtractorContext): Promise<SchemaNode> {
38
+ return new LiteralValueSchema(context.getLocation(node), node.getText());
39
+ }
40
+ }
@@ -0,0 +1,21 @@
1
+ import type { Node, ModuleDeclaration } from 'typescript';
2
+ import ts from 'typescript';
3
+ import { UnImplementedSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaTransformer } from '../schema-transformer';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { Identifier } from '../identifier';
7
+
8
+ export class ModuleDeclarationTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.ModuleDeclaration;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: ModuleDeclaration, context: SchemaExtractorContext) {
18
+ const location = context.getLocation(node);
19
+ return new UnImplementedSchema(location, node.getText(), ts.SyntaxKind[node.kind]);
20
+ }
21
+ }
@@ -0,0 +1,23 @@
1
+ import type { Node, NamedTupleMember } from 'typescript';
2
+ import { SyntaxKind } from 'typescript';
3
+ import { NamedTupleSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaTransformer } from '../schema-transformer';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { Identifier } from '../identifier';
7
+
8
+ export class NamedTupleTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === SyntaxKind.NamedTupleMember;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: NamedTupleMember, context: SchemaExtractorContext) {
18
+ const name = node.name.getText();
19
+ const location = context.getLocation(node);
20
+ const type = await context.computeSchema(node.type);
21
+ return new NamedTupleSchema(location, type, name);
22
+ }
23
+ }
@@ -0,0 +1,29 @@
1
+ import type { Node, ObjectLiteralExpression } from 'typescript';
2
+ import ts from 'typescript';
3
+ import pMapSeries from 'p-map-series';
4
+ import { ObjectLiteralExpressionSchema, UnImplementedSchema } from '@teambit/semantics.entities.semantic-schema';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { SchemaTransformer } from '../schema-transformer';
7
+
8
+ export class ObjectLiteralExpressionTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === ts.SyntaxKind.ObjectLiteralExpression;
11
+ }
12
+
13
+ async getIdentifiers() {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: ObjectLiteralExpression, context: SchemaExtractorContext) {
18
+ const properties = await pMapSeries(node.properties, async (prop) => {
19
+ const schema = await context.computeSchema(prop);
20
+ if (schema instanceof UnImplementedSchema) {
21
+ const typeRef = await context.resolveType(prop, prop.getText());
22
+ return typeRef;
23
+ }
24
+ return schema;
25
+ });
26
+ const location = context.getLocation(node);
27
+ return new ObjectLiteralExpressionSchema(properties, location);
28
+ }
29
+ }
@@ -0,0 +1,115 @@
1
+ import type { BindingElement, Node, ParameterDeclaration, ArrayBindingElement } from 'typescript';
2
+ import ts, { isIdentifier, SyntaxKind, isComputedPropertyName } from 'typescript';
3
+ import type { SchemaNode } from '@teambit/semantics.entities.semantic-schema';
4
+ import {
5
+ InferenceTypeSchema,
6
+ ParameterSchema,
7
+ TupleTypeSchema,
8
+ TypeLiteralSchema,
9
+ } from '@teambit/semantics.entities.semantic-schema';
10
+ import pMapSeries from 'p-map-series';
11
+ import type { SchemaTransformer } from '../schema-transformer';
12
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
13
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
14
+ import type { Identifier } from '../identifier';
15
+
16
+ export class ParameterTransformer implements SchemaTransformer {
17
+ predicate(node: Node) {
18
+ return node.kind === ts.SyntaxKind.Parameter;
19
+ }
20
+
21
+ async getIdentifiers(): Promise<Identifier[]> {
22
+ return [];
23
+ }
24
+
25
+ async transform(node: ParameterDeclaration, context: SchemaExtractorContext) {
26
+ const type = await this.getType(node, context);
27
+ return new ParameterSchema(
28
+ context.getLocation(node),
29
+ ParameterTransformer.getName(node),
30
+ type,
31
+ Boolean(node.questionToken) || Boolean(node.initializer),
32
+ node.initializer ? node.initializer.getText() : undefined,
33
+ undefined,
34
+ await ParameterTransformer.getObjectBindingNodes(node, type, context),
35
+ Boolean(node.dotDotDotToken)
36
+ );
37
+ }
38
+
39
+ static getName(param: ParameterDeclaration): string {
40
+ if (isIdentifier(param.name)) {
41
+ return param.name.getText();
42
+ }
43
+ // it's binding pattern, either an array or an object
44
+ const elements = param.name.elements.map((elem) => elem.getText());
45
+ const elementsStr = elements.join(', ');
46
+ if (param.name.kind === SyntaxKind.ArrayBindingPattern) {
47
+ return `[ ${elementsStr} ]`;
48
+ }
49
+ // it's an object binding
50
+ return `{ ${elementsStr} }`;
51
+ }
52
+
53
+ async getType(param: ParameterDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
54
+ if (param.type) {
55
+ return context.computeSchema(param.type);
56
+ }
57
+
58
+ if (isIdentifier(param.name)) {
59
+ const info = await context.getQuickInfo(param.name);
60
+ const parsed = parseTypeFromQuickInfo(info);
61
+ return new InferenceTypeSchema(context.getLocation(param), parsed);
62
+ }
63
+ // it's binding pattern, either an array or an object
64
+ if (param.name.kind === SyntaxKind.ArrayBindingPattern) {
65
+ const elements = await pMapSeries(param.name.elements, async (elem: ArrayBindingElement) => {
66
+ const info = await context.getQuickInfo(elem);
67
+ const parsed = parseTypeFromQuickInfo(info);
68
+ return new InferenceTypeSchema(context.getLocation(param), parsed);
69
+ });
70
+ return new TupleTypeSchema(context.getLocation(param), elements);
71
+ }
72
+ if (param.name.kind === SyntaxKind.ObjectBindingPattern) {
73
+ const elements = await pMapSeries(param.name.elements, async (elem: BindingElement) => {
74
+ const info = await context.getQuickInfo(elem.name);
75
+ const parsed = parseTypeFromQuickInfo(info);
76
+ return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());
77
+ });
78
+ return new TypeLiteralSchema(context.getLocation(param), elements);
79
+ }
80
+ throw new Error(`unknown param type`);
81
+ }
82
+
83
+ static async getObjectBindingNodes(
84
+ param: ParameterDeclaration,
85
+ paramType: SchemaNode,
86
+ context: SchemaExtractorContext
87
+ ): Promise<SchemaNode[] | undefined> {
88
+ if (param.name.kind !== SyntaxKind.ObjectBindingPattern) return undefined;
89
+ return pMapSeries(param.name.elements, async (elem: BindingElement) => {
90
+ const existing = paramType.findNode?.((node) => {
91
+ return node.name === elem.name.getText().trim();
92
+ });
93
+ if (existing && existing.__schema !== 'InferenceTypeSchema') {
94
+ return existing;
95
+ }
96
+ const info = await context.getQuickInfo(elem.name);
97
+ const parsed = info ? parseTypeFromQuickInfo(info) : elem.getText();
98
+ const defaultValue = elem.initializer ? elem.initializer.getText() : undefined;
99
+ const alias =
100
+ elem.propertyName && isComputedPropertyName(elem.propertyName)
101
+ ? elem.propertyName?.expression.getText()
102
+ : undefined;
103
+
104
+ const name = elem.name.getText();
105
+ return new InferenceTypeSchema(
106
+ context.getLocation(elem.name),
107
+ parsed,
108
+ name,
109
+ defaultValue,
110
+ Boolean(elem.dotDotDotToken),
111
+ alias
112
+ );
113
+ });
114
+ }
115
+ }
@@ -0,0 +1,21 @@
1
+ import type { Node, ParenthesizedTypeNode } from 'typescript';
2
+ import { SyntaxKind } from 'typescript';
3
+ import { ParenthesizedTypeSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaTransformer } from '../schema-transformer';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { Identifier } from '../identifier';
7
+
8
+ export class ParenthesizedTypeTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === SyntaxKind.ParenthesizedType;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: ParenthesizedTypeNode, context: SchemaExtractorContext) {
18
+ const type = await context.computeSchema(node.type);
19
+ return new ParenthesizedTypeSchema(context.getLocation(node), type);
20
+ }
21
+ }
@@ -0,0 +1,24 @@
1
+ import { PropertyAssignmentSchema } from '@teambit/semantics.entities.semantic-schema';
2
+ import type { Node, PropertyAssignment } from 'typescript';
3
+ import ts from 'typescript';
4
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import type { SchemaTransformer } from '../schema-transformer';
6
+ import type { Identifier } from '../identifier';
7
+
8
+ export class PropertyAssignmentTransformer implements SchemaTransformer {
9
+ predicate(node: Node): boolean {
10
+ return node.kind === ts.SyntaxKind.PropertyAssignment;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: PropertyAssignment, context: SchemaExtractorContext): Promise<any> {
18
+ const name = node.name.getText();
19
+ const value = await context.computeSchema(node.initializer);
20
+ const location = context.getLocation(node);
21
+ const docs = await context.jsDocToDocSchema(node);
22
+ return new PropertyAssignmentSchema(name, value, location, docs);
23
+ }
24
+ }
@@ -0,0 +1,35 @@
1
+ import type { Node, PropertyDeclaration, PropertySignature } from 'typescript';
2
+ import { SyntaxKind, isPropertyDeclaration } from 'typescript';
3
+ import { VariableLikeSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaTransformer } from '../schema-transformer';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
7
+ import type { Identifier } from '../identifier';
8
+
9
+ export class PropertyDeclarationTransformer implements SchemaTransformer {
10
+ predicate(node: Node) {
11
+ return node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature;
12
+ }
13
+
14
+ async getIdentifiers(): Promise<Identifier[]> {
15
+ return [];
16
+ }
17
+
18
+ // [computedName]: string
19
+ private isComputedProperty(node: PropertyDeclaration | PropertySignature) {
20
+ return node.name.kind === SyntaxKind.ComputedPropertyName;
21
+ }
22
+
23
+ // @todo - handle arrow function objects
24
+ async transform(node: PropertyDeclaration | PropertySignature, context: SchemaExtractorContext) {
25
+ const name = node.name.getText();
26
+ const info = this.isComputedProperty(node) ? undefined : await context.getQuickInfo(node.name);
27
+ const displaySig = info?.body?.displayString || node.getText();
28
+ const typeStr = parseTypeFromQuickInfo(info);
29
+ const type = await context.resolveType(node, typeStr);
30
+ const isOptional = Boolean(node.questionToken) || (isPropertyDeclaration(node) && Boolean(node.initializer));
31
+ const doc = await context.jsDocToDocSchema(node);
32
+ const defaultValue = isPropertyDeclaration(node) ? node.initializer?.getText() : undefined;
33
+ return new VariableLikeSchema(context.getLocation(node), name, displaySig, type, isOptional, doc, defaultValue);
34
+ }
35
+ }
@@ -0,0 +1,27 @@
1
+ import type { Node, SetAccessorDeclaration } from 'typescript';
2
+ import ts from 'typescript';
3
+ import type { ParameterSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import { SetAccessorSchema } from '@teambit/semantics.entities.semantic-schema';
5
+ import pMapSeries from 'p-map-series';
6
+ import type { SchemaTransformer } from '../schema-transformer';
7
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
8
+ import type { Identifier } from '../identifier';
9
+
10
+ export class SetAccessorTransformer implements SchemaTransformer {
11
+ predicate(node: Node) {
12
+ return node.kind === ts.SyntaxKind.SetAccessor;
13
+ }
14
+
15
+ async getIdentifiers(): Promise<Identifier[]> {
16
+ return [];
17
+ }
18
+
19
+ async transform(node: SetAccessorDeclaration, context: SchemaExtractorContext) {
20
+ const params = (await pMapSeries(node.parameters, async (param) =>
21
+ context.computeSchema(param)
22
+ )) as ParameterSchema[];
23
+
24
+ const displaySig = await context.getQuickInfoDisplayString(node.name);
25
+ return new SetAccessorSchema(context.getLocation(node), node.name.getText(), params[0], displaySig);
26
+ }
27
+ }
@@ -0,0 +1,95 @@
1
+ import type { Node, SourceFile } from 'typescript';
2
+ import ts from 'typescript';
3
+ import { flatten } from 'lodash';
4
+ import pMapSeries from 'p-map-series';
5
+ import { ModuleSchema } from '@teambit/semantics.entities.semantic-schema';
6
+ import type { SchemaTransformer } from '../schema-transformer';
7
+ import { ExportIdentifier } from '../export-identifier';
8
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
9
+ import type { Identifier } from '../identifier';
10
+
11
+ export class SourceFileTransformer implements SchemaTransformer {
12
+ predicate(node: Node) {
13
+ return node.kind === ts.SyntaxKind.SourceFile;
14
+ }
15
+
16
+ async getIdentifiers(sourceFile: SourceFile, context: SchemaExtractorContext) {
17
+ const exports = this.listExports(sourceFile);
18
+ const internals = this.listInternalNodes(sourceFile);
19
+
20
+ // change to pMap series
21
+ const exportIdentifiers = flatten(
22
+ await pMapSeries(exports, (node) => {
23
+ return context.getIdentifiers(node);
24
+ })
25
+ ).reduce<ExportIdentifier[]>((acc, current) => {
26
+ const item = acc.find((exportIdentifier) => exportIdentifier.isEqual(current));
27
+ if (!item) acc.push(new ExportIdentifier(current.id, current.filePath, current.aliasId, current.sourceFilePath));
28
+ return acc;
29
+ }, []);
30
+
31
+ const internalIdentifiers = flatten(
32
+ await pMapSeries(internals, (node) => {
33
+ return context.getIdentifiers(node);
34
+ })
35
+ ).reduce<Identifier[]>((acc, current) => {
36
+ const item = acc.find((internalIdentifier) => internalIdentifier.isEqual(current));
37
+ if (!item) acc.push(current);
38
+ return acc;
39
+ }, []);
40
+
41
+ const identifiers = [...exportIdentifiers, ...internalIdentifiers];
42
+
43
+ return identifiers;
44
+ }
45
+
46
+ async transform(node: SourceFile, context: SchemaExtractorContext) {
47
+ const exports = this.listExports(node);
48
+ const internals = this.listInternalNodes(node).filter(
49
+ (internal) => internal.kind !== ts.SyntaxKind.ImportDeclaration
50
+ );
51
+
52
+ const exportDeclarations = await pMapSeries(exports, (exportNode) => {
53
+ return context.computeSchema(exportNode);
54
+ });
55
+
56
+ const internalDeclarations = await pMapSeries(internals, (internalNode) => {
57
+ return context.computeSchema(internalNode);
58
+ });
59
+
60
+ return new ModuleSchema(context.getLocation(node), exportDeclarations, internalDeclarations);
61
+ }
62
+
63
+ /**
64
+ * list all exports of a source file.
65
+ */
66
+ private listExports(ast: SourceFile): Node[] {
67
+ return ast.statements.filter((statement) => {
68
+ if (statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment)
69
+ return true;
70
+ const modifiers = ts.canHaveModifiers(statement) ? ts.getModifiers(statement) : undefined;
71
+ const isExport = Boolean(
72
+ modifiers?.find((modifier) => {
73
+ return modifier.kind === ts.SyntaxKind.ExportKeyword;
74
+ })
75
+ );
76
+ return isExport;
77
+ });
78
+ }
79
+
80
+ private listInternalNodes(ast: SourceFile): Node[] {
81
+ return ast.statements.filter((statement) => {
82
+ const modifiers = ts.canHaveModifiers(statement) ? ts.getModifiers(statement) : undefined;
83
+ if (
84
+ !(statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment) &&
85
+ !modifiers?.find((modifier) => {
86
+ return modifier.kind === ts.SyntaxKind.ExportKeyword;
87
+ })
88
+ ) {
89
+ return true;
90
+ }
91
+
92
+ return false;
93
+ });
94
+ }
95
+ }
@@ -0,0 +1,22 @@
1
+ import type { Node, TemplateLiteralTypeSpan } from 'typescript';
2
+ import { SyntaxKind } from 'typescript';
3
+ import { TemplateLiteralTypeSpanSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaTransformer } from '../schema-transformer';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { Identifier } from '../identifier';
7
+
8
+ export class TemplateLiteralTypeSpanTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === SyntaxKind.TemplateLiteralTypeSpan;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: TemplateLiteralTypeSpan, context: SchemaExtractorContext) {
18
+ const type = await context.computeSchema(node.type);
19
+ const literal = node.literal.text;
20
+ return new TemplateLiteralTypeSpanSchema(context.getLocation(node), literal, type);
21
+ }
22
+ }
@@ -0,0 +1,26 @@
1
+ import type { Node, TemplateLiteralTypeNode } from 'typescript';
2
+ import { SyntaxKind } from 'typescript';
3
+ import pMapSeries from 'p-map-series';
4
+ import type { TemplateLiteralTypeSpanSchema } from '@teambit/semantics.entities.semantic-schema';
5
+ import { TemplateLiteralTypeSchema } from '@teambit/semantics.entities.semantic-schema';
6
+ import type { SchemaTransformer } from '../schema-transformer';
7
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
8
+ import type { Identifier } from '../identifier';
9
+
10
+ export class TemplateLiteralTypeTransformer implements SchemaTransformer {
11
+ predicate(node: Node) {
12
+ return node.kind === SyntaxKind.TemplateLiteralType;
13
+ }
14
+
15
+ async getIdentifiers(): Promise<Identifier[]> {
16
+ return [];
17
+ }
18
+
19
+ async transform(node: TemplateLiteralTypeNode, context: SchemaExtractorContext) {
20
+ const templateSpans = (await pMapSeries(node.templateSpans, (span) =>
21
+ context.computeSchema(span)
22
+ )) as TemplateLiteralTypeSpanSchema[];
23
+ const head = node.head.text;
24
+ return new TemplateLiteralTypeSchema(context.getLocation(node), head, templateSpans);
25
+ }
26
+ }
@@ -0,0 +1,20 @@
1
+ import type { Node, ThisTypeNode } from 'typescript';
2
+ import { SyntaxKind } from 'typescript';
3
+ import { ThisTypeSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaTransformer } from '../schema-transformer';
5
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import type { Identifier } from '../identifier';
7
+
8
+ export class ThisTypeTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === SyntaxKind.ThisType;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: ThisTypeNode, context: SchemaExtractorContext) {
18
+ return new ThisTypeSchema(context.getLocation(node), 'this');
19
+ }
20
+ }