@teambit/typescript 0.0.0-02c0c8ffc2ebaf66ef5cbfc2e31c48e2b4acbfc7

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 (310) hide show
  1. package/cmds/check-types.cmd.ts +76 -0
  2. package/dist/cmds/check-types.cmd.d.ts +34 -0
  3. package/dist/cmds/check-types.cmd.js +101 -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-1752542268171.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 +162 -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 +52 -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 +11 -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 +13 -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 +14 -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 +51 -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 +129 -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 +12 -0
  238. package/dist/typescript.parser.js +141 -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 +19 -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 +33 -0
  261. package/transformers/array-type.ts +21 -0
  262. package/transformers/binding-element.ts +34 -0
  263. package/transformers/class-declaration.ts +108 -0
  264. package/transformers/conditional-type.ts +23 -0
  265. package/transformers/constructor.ts +40 -0
  266. package/transformers/decorator.ts +28 -0
  267. package/transformers/enum-declaration.ts +31 -0
  268. package/transformers/export-assignment.ts +33 -0
  269. package/transformers/export-declaration.ts +182 -0
  270. package/transformers/expression-statement.ts +20 -0
  271. package/transformers/function-like.ts +70 -0
  272. package/transformers/get-accessor.ts +24 -0
  273. package/transformers/import-declaration.ts +56 -0
  274. package/transformers/index-signature.ts +25 -0
  275. package/transformers/index.ts +43 -0
  276. package/transformers/indexed-access-type.ts +21 -0
  277. package/transformers/interface-declaration.ts +66 -0
  278. package/transformers/intersection-type.ts +25 -0
  279. package/transformers/keyword-type.ts +39 -0
  280. package/transformers/literal-type.ts +23 -0
  281. package/transformers/literal-value.ts +38 -0
  282. package/transformers/module-declaration.ts +20 -0
  283. package/transformers/named-tuple.ts +22 -0
  284. package/transformers/object-literal-expression.ts +28 -0
  285. package/transformers/parameter.ts +122 -0
  286. package/transformers/parenthesized-type.ts +20 -0
  287. package/transformers/property-assignment.ts +23 -0
  288. package/transformers/property-declaration.ts +34 -0
  289. package/transformers/set-accessor.ts +25 -0
  290. package/transformers/source-file-transformer.ts +94 -0
  291. package/transformers/template-literal-type-span.ts +21 -0
  292. package/transformers/template-literal-type.ts +24 -0
  293. package/transformers/this-type.ts +19 -0
  294. package/transformers/tuple-type.ts +24 -0
  295. package/transformers/type-alias.ts +26 -0
  296. package/transformers/type-literal.ts +26 -0
  297. package/transformers/type-operator.ts +37 -0
  298. package/transformers/type-predicate.ts +22 -0
  299. package/transformers/type-query.ts +25 -0
  300. package/transformers/type-reference.ts +36 -0
  301. package/transformers/union-type.ts +25 -0
  302. package/transformers/utils/jsdoc-to-doc-schema.ts +121 -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 +32 -0
  306. package/tsconfig.default.json +25 -0
  307. package/types/asset.d.ts +41 -0
  308. package/types/style.d.ts +42 -0
  309. package/typescript.composition.tsx +7 -0
  310. package/typescript.docs.mdx +8 -0
@@ -0,0 +1,66 @@
1
+ import ts, { Node, InterfaceDeclaration, SyntaxKind } from 'typescript';
2
+ import pMapSeries from 'p-map-series';
3
+ import {
4
+ ExpressionWithTypeArgumentsSchema,
5
+ InterfaceSchema,
6
+ UnresolvedSchema,
7
+ } from '@teambit/semantics.entities.semantic-schema';
8
+ import { SchemaTransformer } from '../schema-transformer';
9
+ import { SchemaExtractorContext } from '../schema-extractor-context';
10
+ import { Identifier } from '../identifier';
11
+
12
+ export class InterfaceDeclarationTransformer implements SchemaTransformer {
13
+ predicate(node: Node) {
14
+ return node.kind === SyntaxKind.InterfaceDeclaration;
15
+ }
16
+
17
+ async getIdentifiers(node: InterfaceDeclaration): Promise<Identifier[]> {
18
+ return [new Identifier(node.name.getText(), node.getSourceFile().fileName)];
19
+ }
20
+
21
+ private async getExpressionWithTypeArgs(node: InterfaceDeclaration, context: SchemaExtractorContext) {
22
+ if (!node.heritageClauses) return [];
23
+
24
+ return pMapSeries(
25
+ node.heritageClauses
26
+ .filter((heritageClause: ts.HeritageClause) => heritageClause.token === SyntaxKind.ExtendsKeyword)
27
+ .flatMap((h: ts.HeritageClause) => {
28
+ const { types } = h;
29
+ const name = h.getText();
30
+ return types.map((type) => ({ ...type, name }));
31
+ }),
32
+ async (expressionWithTypeArgs: ts.ExpressionWithTypeArguments & { name: string }) => {
33
+ const { typeArguments, expression, name } = expressionWithTypeArgs;
34
+ const typeArgsNodes = typeArguments ? await pMapSeries(typeArguments, (t) => context.computeSchema(t)) : [];
35
+ const location = context.getLocation(expression);
36
+ const expressionNode =
37
+ (await context.visitDefinition(expression)) || new UnresolvedSchema(location, expression.getText());
38
+ return new ExpressionWithTypeArgumentsSchema(typeArgsNodes, expressionNode, name, location);
39
+ }
40
+ );
41
+ }
42
+
43
+ async transform(interfaceDec: InterfaceDeclaration, context: SchemaExtractorContext) {
44
+ const members = await pMapSeries(interfaceDec.members, (member) => context.computeSchema(member));
45
+ const doc = await context.jsDocToDocSchema(interfaceDec);
46
+ const signature = interfaceDec.name ? await context.getQuickInfoDisplayString(interfaceDec.name) : undefined;
47
+ const extendsNodes = await this.getExpressionWithTypeArgs(interfaceDec, context);
48
+ const typeParameters = interfaceDec.typeParameters?.map((typeParam) => {
49
+ return typeParam.name.getText();
50
+ });
51
+
52
+ if (!signature) {
53
+ throw Error(`Missing signature for interface ${interfaceDec.name.getText()} declaration`);
54
+ }
55
+
56
+ return new InterfaceSchema(
57
+ context.getLocation(interfaceDec),
58
+ interfaceDec.name.getText(),
59
+ signature,
60
+ extendsNodes,
61
+ members,
62
+ doc,
63
+ typeParameters
64
+ );
65
+ }
66
+ }
@@ -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,38 @@
1
+ import { LiteralValueSchema, SchemaNode } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { Node, StringLiteral } from 'typescript';
3
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { Identifier } from '../identifier';
6
+
7
+ export type LiteralValueNode =
8
+ | StringLiteral
9
+ | ts.NumericLiteral
10
+ | ts.TrueLiteral
11
+ | ts.FalseLiteral
12
+ | ts.NullLiteral
13
+ | ts.BigIntLiteral
14
+ | ts.RegularExpressionLiteral
15
+ | ts.NewExpression;
16
+
17
+ export class LiteralValueTransformer implements SchemaTransformer {
18
+ predicate(node: Node): boolean {
19
+ return (
20
+ node.kind === ts.SyntaxKind.StringLiteral ||
21
+ node.kind === ts.SyntaxKind.NumericLiteral ||
22
+ node.kind === ts.SyntaxKind.TrueKeyword ||
23
+ node.kind === ts.SyntaxKind.FalseKeyword ||
24
+ node.kind === ts.SyntaxKind.NullKeyword ||
25
+ node.kind === ts.SyntaxKind.UndefinedKeyword ||
26
+ node.kind === ts.SyntaxKind.BigIntLiteral ||
27
+ node.kind === ts.SyntaxKind.RegularExpressionLiteral ||
28
+ node.kind === ts.SyntaxKind.NewExpression ||
29
+ node.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral
30
+ );
31
+ }
32
+ async getIdentifiers(): Promise<Identifier[]> {
33
+ return [];
34
+ }
35
+ async transform(node: LiteralValueNode, context: SchemaExtractorContext): Promise<SchemaNode> {
36
+ return new LiteralValueSchema(context.getLocation(node), node.getText());
37
+ }
38
+ }
@@ -0,0 +1,20 @@
1
+ import ts, { Node, ModuleDeclaration } 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 ModuleDeclarationTransformer implements SchemaTransformer {
8
+ predicate(node: Node) {
9
+ return node.kind === ts.SyntaxKind.ModuleDeclaration;
10
+ }
11
+
12
+ async getIdentifiers(): Promise<Identifier[]> {
13
+ return [];
14
+ }
15
+
16
+ async transform(node: ModuleDeclaration, context: SchemaExtractorContext) {
17
+ const location = context.getLocation(node);
18
+ return new UnImplementedSchema(location, node.getText(), ts.SyntaxKind[node.kind]);
19
+ }
20
+ }
@@ -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,28 @@
1
+ import ts, { Node, ObjectLiteralExpression } from 'typescript';
2
+ import pMapSeries from 'p-map-series';
3
+ import { ObjectLiteralExpressionSchema, UnImplementedSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import type { SchemaExtractorContext } from '../schema-extractor-context';
5
+ import { SchemaTransformer } from '../schema-transformer';
6
+
7
+ export class ObjectLiteralExpressionTransformer implements SchemaTransformer {
8
+ predicate(node: Node) {
9
+ return node.kind === ts.SyntaxKind.ObjectLiteralExpression;
10
+ }
11
+
12
+ async getIdentifiers() {
13
+ return [];
14
+ }
15
+
16
+ async transform(node: ObjectLiteralExpression, context: SchemaExtractorContext) {
17
+ const properties = await pMapSeries(node.properties, async (prop) => {
18
+ const schema = await context.computeSchema(prop);
19
+ if (schema instanceof UnImplementedSchema) {
20
+ const typeRef = await context.resolveType(prop, prop.getText());
21
+ return typeRef;
22
+ }
23
+ return schema;
24
+ });
25
+ const location = context.getLocation(node);
26
+ return new ObjectLiteralExpressionSchema(properties, location);
27
+ }
28
+ }
@@ -0,0 +1,122 @@
1
+ import ts, {
2
+ BindingElement,
3
+ isIdentifier,
4
+ Node,
5
+ ParameterDeclaration,
6
+ SyntaxKind,
7
+ ArrayBindingElement,
8
+ isComputedPropertyName,
9
+ } from 'typescript';
10
+ import {
11
+ InferenceTypeSchema,
12
+ ParameterSchema,
13
+ SchemaNode,
14
+ TupleTypeSchema,
15
+ TypeLiteralSchema,
16
+ } from '@teambit/semantics.entities.semantic-schema';
17
+ import pMapSeries from 'p-map-series';
18
+ import { SchemaTransformer } from '../schema-transformer';
19
+ import { SchemaExtractorContext } from '../schema-extractor-context';
20
+ import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
21
+ import { Identifier } from '../identifier';
22
+
23
+ export class ParameterTransformer implements SchemaTransformer {
24
+ predicate(node: Node) {
25
+ return node.kind === ts.SyntaxKind.Parameter;
26
+ }
27
+
28
+ async getIdentifiers(): Promise<Identifier[]> {
29
+ return [];
30
+ }
31
+
32
+ async transform(node: ParameterDeclaration, context: SchemaExtractorContext) {
33
+ const type = await this.getType(node, context);
34
+ return new ParameterSchema(
35
+ context.getLocation(node),
36
+ ParameterTransformer.getName(node),
37
+ type,
38
+ Boolean(node.questionToken) || Boolean(node.initializer),
39
+ node.initializer ? node.initializer.getText() : undefined,
40
+ undefined,
41
+ await ParameterTransformer.getObjectBindingNodes(node, type, context),
42
+ Boolean(node.dotDotDotToken)
43
+ );
44
+ }
45
+
46
+ static getName(param: ParameterDeclaration): string {
47
+ if (isIdentifier(param.name)) {
48
+ return param.name.getText();
49
+ }
50
+ // it's binding pattern, either an array or an object
51
+ const elements = param.name.elements.map((elem) => elem.getText());
52
+ const elementsStr = elements.join(', ');
53
+ if (param.name.kind === SyntaxKind.ArrayBindingPattern) {
54
+ return `[ ${elementsStr} ]`;
55
+ }
56
+ // it's an object binding
57
+ return `{ ${elementsStr} }`;
58
+ }
59
+
60
+ async getType(param: ParameterDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
61
+ if (param.type) {
62
+ return context.computeSchema(param.type);
63
+ }
64
+
65
+ if (isIdentifier(param.name)) {
66
+ const info = await context.getQuickInfo(param.name);
67
+ const parsed = parseTypeFromQuickInfo(info);
68
+ return new InferenceTypeSchema(context.getLocation(param), parsed);
69
+ }
70
+ // it's binding pattern, either an array or an object
71
+ if (param.name.kind === SyntaxKind.ArrayBindingPattern) {
72
+ const elements = await pMapSeries(param.name.elements, async (elem: ArrayBindingElement) => {
73
+ const info = await context.getQuickInfo(elem);
74
+ const parsed = parseTypeFromQuickInfo(info);
75
+ return new InferenceTypeSchema(context.getLocation(param), parsed);
76
+ });
77
+ return new TupleTypeSchema(context.getLocation(param), elements);
78
+ }
79
+ if (param.name.kind === SyntaxKind.ObjectBindingPattern) {
80
+ const elements = await pMapSeries(param.name.elements, async (elem: BindingElement) => {
81
+ const info = await context.getQuickInfo(elem.name);
82
+ const parsed = parseTypeFromQuickInfo(info);
83
+ return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());
84
+ });
85
+ return new TypeLiteralSchema(context.getLocation(param), elements);
86
+ }
87
+ throw new Error(`unknown param type`);
88
+ }
89
+
90
+ static async getObjectBindingNodes(
91
+ param: ParameterDeclaration,
92
+ paramType: SchemaNode,
93
+ context: SchemaExtractorContext
94
+ ): Promise<SchemaNode[] | undefined> {
95
+ if (param.name.kind !== SyntaxKind.ObjectBindingPattern) return undefined;
96
+ return pMapSeries(param.name.elements, async (elem: BindingElement) => {
97
+ const existing = paramType.findNode?.((node) => {
98
+ return node.name === elem.name.getText().trim();
99
+ });
100
+ if (existing && existing.__schema !== 'InferenceTypeSchema') {
101
+ return existing;
102
+ }
103
+ const info = await context.getQuickInfo(elem.name);
104
+ const parsed = info ? parseTypeFromQuickInfo(info) : elem.getText();
105
+ const defaultValue = elem.initializer ? elem.initializer.getText() : undefined;
106
+ const alias =
107
+ elem.propertyName && isComputedPropertyName(elem.propertyName)
108
+ ? elem.propertyName?.expression.getText()
109
+ : undefined;
110
+
111
+ const name = elem.name.getText();
112
+ return new InferenceTypeSchema(
113
+ context.getLocation(elem.name),
114
+ parsed,
115
+ name,
116
+ defaultValue,
117
+ Boolean(elem.dotDotDotToken),
118
+ alias
119
+ );
120
+ });
121
+ }
122
+ }
@@ -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,23 @@
1
+ import { PropertyAssignmentSchema } from '@teambit/semantics.entities.semantic-schema';
2
+ import ts, { Node, PropertyAssignment } from 'typescript';
3
+ import { SchemaExtractorContext } from '../schema-extractor-context';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { Identifier } from '../identifier';
6
+
7
+ export class PropertyAssignmentTransformer implements SchemaTransformer {
8
+ predicate(node: Node): boolean {
9
+ return node.kind === ts.SyntaxKind.PropertyAssignment;
10
+ }
11
+
12
+ async getIdentifiers(): Promise<Identifier[]> {
13
+ return [];
14
+ }
15
+
16
+ async transform(node: PropertyAssignment, context: SchemaExtractorContext): Promise<any> {
17
+ const name = node.name.getText();
18
+ const value = await context.computeSchema(node.initializer);
19
+ const location = context.getLocation(node);
20
+ const docs = await context.jsDocToDocSchema(node);
21
+ return new PropertyAssignmentSchema(name, value, location, docs);
22
+ }
23
+ }
@@ -0,0 +1,34 @@
1
+ import { Node, PropertyDeclaration, PropertySignature, SyntaxKind, isPropertyDeclaration } 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) || (isPropertyDeclaration(node) && Boolean(node.initializer));
30
+ const doc = await context.jsDocToDocSchema(node);
31
+ const defaultValue = isPropertyDeclaration(node) ? node.initializer?.getText() : undefined;
32
+ return new VariableLikeSchema(context.getLocation(node), name, displaySig, type, isOptional, doc, defaultValue);
33
+ }
34
+ }
@@ -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
+ }
@@ -0,0 +1,94 @@
1
+ import ts, { Node, SourceFile } from 'typescript';
2
+ import { flatten } from 'lodash';
3
+ import pMapSeries from 'p-map-series';
4
+ import { ModuleSchema } from '@teambit/semantics.entities.semantic-schema';
5
+ import { SchemaTransformer } from '../schema-transformer';
6
+ import { ExportIdentifier } from '../export-identifier';
7
+ import { SchemaExtractorContext } from '../schema-extractor-context';
8
+ import { Identifier } from '../identifier';
9
+
10
+ export class SourceFileTransformer implements SchemaTransformer {
11
+ predicate(node: Node) {
12
+ return node.kind === ts.SyntaxKind.SourceFile;
13
+ }
14
+
15
+ async getIdentifiers(sourceFile: SourceFile, context: SchemaExtractorContext) {
16
+ const exports = this.listExports(sourceFile);
17
+ const internals = this.listInternalNodes(sourceFile);
18
+
19
+ // change to pMap series
20
+ const exportIdentifiers = flatten(
21
+ await pMapSeries(exports, (node) => {
22
+ return context.getIdentifiers(node);
23
+ })
24
+ ).reduce<ExportIdentifier[]>((acc, current) => {
25
+ const item = acc.find((exportIdentifier) => exportIdentifier.isEqual(current));
26
+ if (!item) acc.push(new ExportIdentifier(current.id, current.filePath, current.aliasId, current.sourceFilePath));
27
+ return acc;
28
+ }, []);
29
+
30
+ const internalIdentifiers = flatten(
31
+ await pMapSeries(internals, (node) => {
32
+ return context.getIdentifiers(node);
33
+ })
34
+ ).reduce<Identifier[]>((acc, current) => {
35
+ const item = acc.find((internalIdentifier) => internalIdentifier.isEqual(current));
36
+ if (!item) acc.push(current);
37
+ return acc;
38
+ }, []);
39
+
40
+ const identifiers = [...exportIdentifiers, ...internalIdentifiers];
41
+
42
+ return identifiers;
43
+ }
44
+
45
+ async transform(node: SourceFile, context: SchemaExtractorContext) {
46
+ const exports = this.listExports(node);
47
+ const internals = this.listInternalNodes(node).filter(
48
+ (internal) => internal.kind !== ts.SyntaxKind.ImportDeclaration
49
+ );
50
+
51
+ const exportDeclarations = await pMapSeries(exports, (exportNode) => {
52
+ return context.computeSchema(exportNode);
53
+ });
54
+
55
+ const internalDeclarations = await pMapSeries(internals, (internalNode) => {
56
+ return context.computeSchema(internalNode);
57
+ });
58
+
59
+ return new ModuleSchema(context.getLocation(node), exportDeclarations, internalDeclarations);
60
+ }
61
+
62
+ /**
63
+ * list all exports of a source file.
64
+ */
65
+ private listExports(ast: SourceFile): Node[] {
66
+ return ast.statements.filter((statement) => {
67
+ if (statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment)
68
+ return true;
69
+ const modifiers = ts.canHaveModifiers(statement) ? ts.getModifiers(statement) : undefined;
70
+ const isExport = Boolean(
71
+ modifiers?.find((modifier) => {
72
+ return modifier.kind === ts.SyntaxKind.ExportKeyword;
73
+ })
74
+ );
75
+ return isExport;
76
+ });
77
+ }
78
+
79
+ private listInternalNodes(ast: SourceFile): Node[] {
80
+ return ast.statements.filter((statement) => {
81
+ const modifiers = ts.canHaveModifiers(statement) ? ts.getModifiers(statement) : undefined;
82
+ if (
83
+ !(statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment) &&
84
+ !modifiers?.find((modifier) => {
85
+ return modifier.kind === ts.SyntaxKind.ExportKeyword;
86
+ })
87
+ ) {
88
+ return true;
89
+ }
90
+
91
+ return false;
92
+ });
93
+ }
94
+ }
@@ -0,0 +1,21 @@
1
+ import { Node, SyntaxKind, TemplateLiteralTypeSpan } from 'typescript';
2
+ import { TemplateLiteralTypeSpanSchema } 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 TemplateLiteralTypeSpanTransformer implements SchemaTransformer {
8
+ predicate(node: Node) {
9
+ return node.kind === SyntaxKind.TemplateLiteralTypeSpan;
10
+ }
11
+
12
+ async getIdentifiers(): Promise<Identifier[]> {
13
+ return [];
14
+ }
15
+
16
+ async transform(node: TemplateLiteralTypeSpan, context: SchemaExtractorContext) {
17
+ const type = await context.computeSchema(node.type);
18
+ const literal = node.literal.text;
19
+ return new TemplateLiteralTypeSpanSchema(context.getLocation(node), literal, type);
20
+ }
21
+ }
@@ -0,0 +1,24 @@
1
+ import { Node, SyntaxKind, TemplateLiteralTypeNode } from 'typescript';
2
+ import pMapSeries from 'p-map-series';
3
+ import { TemplateLiteralTypeSchema, TemplateLiteralTypeSpanSchema } from '@teambit/semantics.entities.semantic-schema';
4
+ import { SchemaTransformer } from '../schema-transformer';
5
+ import { SchemaExtractorContext } from '../schema-extractor-context';
6
+ import { Identifier } from '../identifier';
7
+
8
+ export class TemplateLiteralTypeTransformer implements SchemaTransformer {
9
+ predicate(node: Node) {
10
+ return node.kind === SyntaxKind.TemplateLiteralType;
11
+ }
12
+
13
+ async getIdentifiers(): Promise<Identifier[]> {
14
+ return [];
15
+ }
16
+
17
+ async transform(node: TemplateLiteralTypeNode, context: SchemaExtractorContext) {
18
+ const templateSpans = (await pMapSeries(node.templateSpans, (span) =>
19
+ context.computeSchema(span)
20
+ )) as TemplateLiteralTypeSpanSchema[];
21
+ const head = node.head.text;
22
+ return new TemplateLiteralTypeSchema(context.getLocation(node), head, templateSpans);
23
+ }
24
+ }
@@ -0,0 +1,19 @@
1
+ import { Node, SyntaxKind, ThisTypeNode } from 'typescript';
2
+ import { ThisTypeSchema } 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 ThisTypeTransformer implements SchemaTransformer {
8
+ predicate(node: Node) {
9
+ return node.kind === SyntaxKind.ThisType;
10
+ }
11
+
12
+ async getIdentifiers(): Promise<Identifier[]> {
13
+ return [];
14
+ }
15
+
16
+ async transform(node: ThisTypeNode, context: SchemaExtractorContext) {
17
+ return new ThisTypeSchema(context.getLocation(node), 'this');
18
+ }
19
+ }