@teambit/typescript 1.0.106 → 1.0.108

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 (86) hide show
  1. package/compiler-options.ts +27 -0
  2. package/dedupe-path.spec.ts +34 -0
  3. package/dist/cmds/write-tsconfig.cmd.d.ts +2 -2
  4. package/dist/compiler-options.d.ts +2 -2
  5. package/dist/extractor-options.d.ts +1 -1
  6. package/dist/identifier-list.d.ts +1 -1
  7. package/dist/identifier.d.ts +3 -3
  8. package/dist/{preview-1703505948637.js → preview-1703647408454.js} +2 -2
  9. package/dist/schema-extractor-context.d.ts +11 -11
  10. package/dist/schema-extractor-context.js +13 -17
  11. package/dist/schema-extractor-context.js.map +1 -1
  12. package/dist/schema-transformer.d.ts +2 -2
  13. package/dist/sourceFileTransformers/export.js +1 -2
  14. package/dist/sourceFileTransformers/export.js.map +1 -1
  15. package/dist/sourceFileTransformers/function.js +2 -3
  16. package/dist/sourceFileTransformers/function.js.map +1 -1
  17. package/dist/sourceFileTransformers/import.js +1 -2
  18. package/dist/sourceFileTransformers/import.js.map +1 -1
  19. package/dist/sourceFileTransformers/index.d.ts +1 -1
  20. package/dist/sourceFileTransformers/transform.js +1 -1
  21. package/dist/sourceFileTransformers/transform.js.map +1 -1
  22. package/dist/transformers/binding-element.js +1 -2
  23. package/dist/transformers/binding-element.js.map +1 -1
  24. package/dist/transformers/class-declaration.js +3 -6
  25. package/dist/transformers/class-declaration.js.map +1 -1
  26. package/dist/transformers/constructor.js +3 -4
  27. package/dist/transformers/constructor.js.map +1 -1
  28. package/dist/transformers/enum-declaration.js +1 -2
  29. package/dist/transformers/enum-declaration.js.map +1 -1
  30. package/dist/transformers/export-declaration.js +5 -7
  31. package/dist/transformers/export-declaration.js.map +1 -1
  32. package/dist/transformers/function-like.js +5 -8
  33. package/dist/transformers/function-like.js.map +1 -1
  34. package/dist/transformers/get-accessor.js +1 -2
  35. package/dist/transformers/get-accessor.js.map +1 -1
  36. package/dist/transformers/import-declaration.js +2 -3
  37. package/dist/transformers/import-declaration.js.map +1 -1
  38. package/dist/transformers/interface-declaration.js +1 -2
  39. package/dist/transformers/interface-declaration.js.map +1 -1
  40. package/dist/transformers/parameter.js +1 -2
  41. package/dist/transformers/parameter.js.map +1 -1
  42. package/dist/transformers/property-declaration.js +1 -2
  43. package/dist/transformers/property-declaration.js.map +1 -1
  44. package/dist/transformers/source-file-transformer.js +3 -5
  45. package/dist/transformers/source-file-transformer.js.map +1 -1
  46. package/dist/transformers/utils/jsdoc-to-doc-schema.js +2 -4
  47. package/dist/transformers/utils/jsdoc-to-doc-schema.js.map +1 -1
  48. package/dist/transformers/utils/parse-type-from-quick-info.js +1 -2
  49. package/dist/transformers/utils/parse-type-from-quick-info.js.map +1 -1
  50. package/dist/transformers/variable-declaration.js +8 -12
  51. package/dist/transformers/variable-declaration.js.map +1 -1
  52. package/dist/tsconfig-writer.d.ts +2 -2
  53. package/dist/tsconfig-writer.js +1 -4
  54. package/dist/tsconfig-writer.js.map +1 -1
  55. package/dist/typescript.composition.d.ts +2 -2
  56. package/dist/typescript.extractor.d.ts +3 -3
  57. package/dist/typescript.extractor.js +5 -7
  58. package/dist/typescript.extractor.js.map +1 -1
  59. package/dist/typescript.main.runtime.d.ts +7 -7
  60. package/dist/typescript.main.runtime.js +1 -2
  61. package/dist/typescript.main.runtime.js.map +1 -1
  62. package/dist/typescript.parser.js +7 -8
  63. package/dist/typescript.parser.js.map +1 -1
  64. package/dist/typescript.parser.spec.js +12 -15
  65. package/dist/typescript.parser.spec.js.map +1 -1
  66. package/export-identifier.ts +14 -0
  67. package/extractor-options.ts +21 -0
  68. package/identifier-list.ts +14 -0
  69. package/identifier.ts +23 -0
  70. package/index.ts +14 -0
  71. package/package.json +27 -34
  72. package/remove-types-task.ts +33 -0
  73. package/schema-extractor-context.ts +625 -0
  74. package/schema-transformer.plugin.ts +14 -0
  75. package/schema-transformer.ts +23 -0
  76. package/transform-source-file.spec.ts +155 -0
  77. package/tsconfig-writer.ts +249 -0
  78. package/tsconfig.json +16 -21
  79. package/types/asset.d.ts +15 -3
  80. package/typescript.aspect.ts +5 -0
  81. package/typescript.compiler.spec.ts +63 -0
  82. package/typescript.compiler.ts +286 -0
  83. package/typescript.extractor.ts +247 -0
  84. package/typescript.main.runtime.ts +442 -0
  85. package/typescript.parser.spec.ts +221 -0
  86. package/typescript.parser.ts +123 -0
@@ -0,0 +1,123 @@
1
+ import { Parser } from '@teambit/schema';
2
+ import { Export, StaticProperties } from '@teambit/semantics.entities.semantic-schema';
3
+ import { Logger } from '@teambit/logger';
4
+ import { readFileSync } from 'fs-extra';
5
+ import ts from 'typescript';
6
+
7
+ export class TypeScriptParser implements Parser {
8
+ public extension = /^.*\.(js|jsx|ts|tsx)$/;
9
+
10
+ getExports(sourceFile: ts.SourceFile): Export[] {
11
+ const staticProperties = this.parseStaticProperties(sourceFile);
12
+ const exportModels: Export[] = [];
13
+
14
+ sourceFile.statements.forEach((statement) => {
15
+ // export default
16
+ if (ts.isExportAssignment(statement)) {
17
+ // export default
18
+ }
19
+
20
+ // export declarations or re-exports
21
+ if (ts.isExportDeclaration(statement)) {
22
+ if (statement.exportClause) {
23
+ if (ts.isNamedExports(statement.exportClause)) {
24
+ statement.exportClause.elements.forEach((element) => {
25
+ const name = element.name.escapedText.toString();
26
+ if (name !== 'default') {
27
+ exportModels.push(new Export(name, staticProperties.get(name)));
28
+ }
29
+ });
30
+ }
31
+ if (ts.isNamespaceExport(statement.exportClause)) {
32
+ const name = statement.exportClause.name.escapedText.toString();
33
+ exportModels.push(new Export(name, staticProperties.get(name)));
34
+ }
35
+ }
36
+ }
37
+
38
+ // export modifiers
39
+ // - variable statement
40
+ // - function statement
41
+ // - class statement
42
+ if (statement.modifiers) {
43
+ statement.modifiers.some((modifier) => {
44
+ if (modifier.kind === ts.SyntaxKind.ExportKeyword) {
45
+ if (ts.isVariableStatement(statement)) {
46
+ const child = statement.declarationList.declarations[0];
47
+ if (ts.isIdentifier(child.name)) {
48
+ const name = child.name.escapedText.toString();
49
+ exportModels.push(new Export(name, staticProperties.get(name)));
50
+ }
51
+ } else if (ts.isFunctionDeclaration(statement)) {
52
+ if (statement.name) {
53
+ const name = statement.name.escapedText.toString();
54
+ exportModels.push(new Export(name, staticProperties.get(name)));
55
+ }
56
+ } else if (ts.isClassDeclaration(statement)) {
57
+ if (statement.name) {
58
+ const name = statement.name.escapedText.toString();
59
+ exportModels.push(new Export(name, staticProperties.get(name)));
60
+ }
61
+ }
62
+ return true;
63
+ }
64
+ return false;
65
+ });
66
+ }
67
+ });
68
+
69
+ const withoutEmpty = exportModels.filter((exportModel) => exportModel !== undefined);
70
+ // @ts-ignore
71
+ return withoutEmpty;
72
+ }
73
+
74
+ parseModule(modulePath: string, content?: string) {
75
+ const ast = ts.createSourceFile(modulePath, content || readFileSync(modulePath, 'utf8'), ts.ScriptTarget.Latest);
76
+
77
+ const moduleExports = this.getExports(ast);
78
+ return moduleExports;
79
+ }
80
+
81
+ parseStaticProperties(sourceFile: ts.SourceFile) {
82
+ // TODO - should we also parse staticProperties inside classes / objects?
83
+
84
+ const exportStaticProperties = new Map<string, StaticProperties>();
85
+
86
+ sourceFile.statements.forEach((statement) => {
87
+ try {
88
+ if (!ts.isExpressionStatement(statement)) return;
89
+ if (!ts.isBinaryExpression(statement.expression)) return;
90
+ if (statement.expression.operatorToken.kind !== ts.SyntaxKind.EqualsToken) return;
91
+ if (!ts.isPropertyAccessExpression(statement.expression.left)) return;
92
+ if (!ts.isIdentifier(statement.expression.left.expression)) return;
93
+
94
+ const targetName = statement.expression.left.expression.text;
95
+ const propertyName = statement.expression.left.name.text;
96
+
97
+ if (!exportStaticProperties.has(targetName)) exportStaticProperties.set(targetName, new Map());
98
+
99
+ const existingProperties = exportStaticProperties.get(targetName);
100
+
101
+ if (ts.isStringLiteral(statement.expression.right)) {
102
+ existingProperties?.set(propertyName, statement.expression.right.text);
103
+ } else if (ts.isNumericLiteral(statement.expression.right)) {
104
+ existingProperties?.set(propertyName, +statement.expression.right.text);
105
+ } else if (statement.expression.right.kind === ts.SyntaxKind.UndefinedKeyword) {
106
+ existingProperties?.set(propertyName, undefined);
107
+ } else if (statement.expression.right.kind === ts.SyntaxKind.NullKeyword) {
108
+ existingProperties?.set(propertyName, null);
109
+ } else if (statement.expression.right.kind === ts.SyntaxKind.TrueKeyword) {
110
+ existingProperties?.set(propertyName, true);
111
+ } else if (statement.expression.right.kind === ts.SyntaxKind.FalseKeyword) {
112
+ existingProperties?.set(propertyName, false);
113
+ }
114
+ } catch (err) {
115
+ this.logger?.error('failed parsing static properties', err);
116
+ }
117
+ });
118
+
119
+ return exportStaticProperties;
120
+ }
121
+
122
+ constructor(private logger?: Logger | undefined) {}
123
+ }