@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.
- package/cmds/check-types.cmd.ts +81 -0
- package/dist/cmds/check-types.cmd.d.ts +35 -0
- package/dist/cmds/check-types.cmd.js +105 -0
- package/dist/cmds/check-types.cmd.js.map +1 -0
- package/dist/compiler-options.d.ts +22 -0
- package/dist/compiler-options.js +3 -0
- package/dist/compiler-options.js.map +1 -0
- package/dist/esm.mjs +21 -0
- package/dist/exceptions/index.d.ts +1 -0
- package/dist/exceptions/index.js +20 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/exceptions/transformer-not-found.d.ts +8 -0
- package/dist/exceptions/transformer-not-found.js +26 -0
- package/dist/exceptions/transformer-not-found.js.map +1 -0
- package/dist/export-identifier.d.ts +6 -0
- package/dist/export-identifier.js +29 -0
- package/dist/export-identifier.js.map +1 -0
- package/dist/extractor-options.d.ts +26 -0
- package/dist/extractor-options.js +3 -0
- package/dist/extractor-options.js.map +1 -0
- package/dist/identifier-list.d.ts +7 -0
- package/dist/identifier-list.js +21 -0
- package/dist/identifier-list.js.map +1 -0
- package/dist/identifier.d.ts +11 -0
- package/dist/identifier.js +45 -0
- package/dist/identifier.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/preview-1760469561956.js +7 -0
- package/dist/remove-types-task.d.ts +12 -0
- package/dist/remove-types-task.js +64 -0
- package/dist/remove-types-task.js.map +1 -0
- package/dist/schema-extractor-context.d.ts +164 -0
- package/dist/schema-extractor-context.js +745 -0
- package/dist/schema-extractor-context.js.map +1 -0
- package/dist/schema-transformer.d.ts +19 -0
- package/dist/schema-transformer.js +3 -0
- package/dist/schema-transformer.js.map +1 -0
- package/dist/schema-transformer.plugin.d.ts +9 -0
- package/dist/schema-transformer.plugin.js +22 -0
- package/dist/schema-transformer.plugin.js.map +1 -0
- package/dist/sourceFileTransformers/class.d.ts +2 -0
- package/dist/sourceFileTransformers/class.js +57 -0
- package/dist/sourceFileTransformers/class.js.map +1 -0
- package/dist/sourceFileTransformers/empty-line-encoder.d.ts +14 -0
- package/dist/sourceFileTransformers/empty-line-encoder.js +62 -0
- package/dist/sourceFileTransformers/empty-line-encoder.js.map +1 -0
- package/dist/sourceFileTransformers/export.d.ts +2 -0
- package/dist/sourceFileTransformers/export.js +58 -0
- package/dist/sourceFileTransformers/export.js.map +1 -0
- package/dist/sourceFileTransformers/expression-statement.d.ts +2 -0
- package/dist/sourceFileTransformers/expression-statement.js +58 -0
- package/dist/sourceFileTransformers/expression-statement.js.map +1 -0
- package/dist/sourceFileTransformers/function.d.ts +2 -0
- package/dist/sourceFileTransformers/function.js +119 -0
- package/dist/sourceFileTransformers/function.js.map +1 -0
- package/dist/sourceFileTransformers/import.d.ts +2 -0
- package/dist/sourceFileTransformers/import.js +71 -0
- package/dist/sourceFileTransformers/import.js.map +1 -0
- package/dist/sourceFileTransformers/index.d.ts +12 -0
- package/dist/sourceFileTransformers/index.js +137 -0
- package/dist/sourceFileTransformers/index.js.map +1 -0
- package/dist/sourceFileTransformers/interface.d.ts +2 -0
- package/dist/sourceFileTransformers/interface.js +50 -0
- package/dist/sourceFileTransformers/interface.js.map +1 -0
- package/dist/sourceFileTransformers/replaceName.d.ts +1 -0
- package/dist/sourceFileTransformers/replaceName.js +19 -0
- package/dist/sourceFileTransformers/replaceName.js.map +1 -0
- package/dist/sourceFileTransformers/transform.d.ts +12 -0
- package/dist/sourceFileTransformers/transform.js +76 -0
- package/dist/sourceFileTransformers/transform.js.map +1 -0
- package/dist/sourceFileTransformers/type-reference.d.ts +2 -0
- package/dist/sourceFileTransformers/type-reference.js +38 -0
- package/dist/sourceFileTransformers/type-reference.js.map +1 -0
- package/dist/sourceFileTransformers/typeAlias.d.ts +2 -0
- package/dist/sourceFileTransformers/typeAlias.js +41 -0
- package/dist/sourceFileTransformers/typeAlias.js.map +1 -0
- package/dist/sourceFileTransformers/variable.d.ts +2 -0
- package/dist/sourceFileTransformers/variable.js +41 -0
- package/dist/sourceFileTransformers/variable.js.map +1 -0
- package/dist/transform-source-file.spec.d.ts +1 -0
- package/dist/transform-source-file.spec.js +182 -0
- package/dist/transform-source-file.spec.js.map +1 -0
- package/dist/transformers/array-literal-expression.d.ts +10 -0
- package/dist/transformers/array-literal-expression.js +51 -0
- package/dist/transformers/array-literal-expression.js.map +1 -0
- package/dist/transformers/array-type.d.ts +10 -0
- package/dist/transformers/array-type.js +37 -0
- package/dist/transformers/array-type.js.map +1 -0
- package/dist/transformers/binding-element.d.ts +17 -0
- package/dist/transformers/binding-element.js +63 -0
- package/dist/transformers/binding-element.js.map +1 -0
- package/dist/transformers/class-declaration.d.ts +12 -0
- package/dist/transformers/class-declaration.js +116 -0
- package/dist/transformers/class-declaration.js.map +1 -0
- package/dist/transformers/conditional-type.d.ts +10 -0
- package/dist/transformers/conditional-type.js +38 -0
- package/dist/transformers/conditional-type.js.map +1 -0
- package/dist/transformers/constructor.d.ts +10 -0
- package/dist/transformers/constructor.js +49 -0
- package/dist/transformers/constructor.js.map +1 -0
- package/dist/transformers/decorator.d.ts +10 -0
- package/dist/transformers/decorator.js +54 -0
- package/dist/transformers/decorator.js.map +1 -0
- package/dist/transformers/enum-declaration.d.ts +10 -0
- package/dist/transformers/enum-declaration.js +60 -0
- package/dist/transformers/enum-declaration.js.map +1 -0
- package/dist/transformers/export-assignment.d.ts +14 -0
- package/dist/transformers/export-assignment.js +54 -0
- package/dist/transformers/export-assignment.js.map +1 -0
- package/dist/transformers/export-declaration.d.ts +10 -0
- package/dist/transformers/export-declaration.js +154 -0
- package/dist/transformers/export-declaration.js.map +1 -0
- package/dist/transformers/expression-statement.d.ts +10 -0
- package/dist/transformers/expression-statement.js +36 -0
- package/dist/transformers/expression-statement.js.map +1 -0
- package/dist/transformers/function-like.d.ts +11 -0
- package/dist/transformers/function-like.js +81 -0
- package/dist/transformers/function-like.js.map +1 -0
- package/dist/transformers/get-accessor.d.ts +10 -0
- package/dist/transformers/get-accessor.js +46 -0
- package/dist/transformers/get-accessor.js.map +1 -0
- package/dist/transformers/import-declaration.d.ts +10 -0
- package/dist/transformers/import-declaration.js +72 -0
- package/dist/transformers/import-declaration.js.map +1 -0
- package/dist/transformers/index-signature.d.ts +10 -0
- package/dist/transformers/index-signature.js +41 -0
- package/dist/transformers/index-signature.js.map +1 -0
- package/dist/transformers/index.d.ts +43 -0
- package/dist/transformers/index.js +566 -0
- package/dist/transformers/index.js.map +1 -0
- package/dist/transformers/indexed-access-type.d.ts +10 -0
- package/dist/transformers/indexed-access-type.js +36 -0
- package/dist/transformers/indexed-access-type.js.map +1 -0
- package/dist/transformers/interface-declaration.d.ts +11 -0
- package/dist/transformers/interface-declaration.js +86 -0
- package/dist/transformers/interface-declaration.js.map +1 -0
- package/dist/transformers/intersection-type.d.ts +10 -0
- package/dist/transformers/intersection-type.js +47 -0
- package/dist/transformers/intersection-type.js.map +1 -0
- package/dist/transformers/keyword-type.d.ts +13 -0
- package/dist/transformers/keyword-type.js +54 -0
- package/dist/transformers/keyword-type.js.map +1 -0
- package/dist/transformers/literal-type.d.ts +13 -0
- package/dist/transformers/literal-type.js +39 -0
- package/dist/transformers/literal-type.js.map +1 -0
- package/dist/transformers/literal-value.d.ts +12 -0
- package/dist/transformers/literal-value.js +35 -0
- package/dist/transformers/literal-value.js.map +1 -0
- package/dist/transformers/module-declaration.d.ts +10 -0
- package/dist/transformers/module-declaration.js +36 -0
- package/dist/transformers/module-declaration.js.map +1 -0
- package/dist/transformers/named-tuple.d.ts +10 -0
- package/dist/transformers/named-tuple.js +37 -0
- package/dist/transformers/named-tuple.js.map +1 -0
- package/dist/transformers/object-literal-expression.d.ts +9 -0
- package/dist/transformers/object-literal-expression.js +51 -0
- package/dist/transformers/object-literal-expression.js.map +1 -0
- package/dist/transformers/parameter.d.ts +14 -0
- package/dist/transformers/parameter.js +109 -0
- package/dist/transformers/parameter.js.map +1 -0
- package/dist/transformers/parenthesized-type.d.ts +10 -0
- package/dist/transformers/parenthesized-type.js +35 -0
- package/dist/transformers/parenthesized-type.js.map +1 -0
- package/dist/transformers/property-assignment.d.ts +9 -0
- package/dist/transformers/property-assignment.js +39 -0
- package/dist/transformers/property-assignment.js.map +1 -0
- package/dist/transformers/property-declaration.d.ts +11 -0
- package/dist/transformers/property-declaration.js +56 -0
- package/dist/transformers/property-declaration.js.map +1 -0
- package/dist/transformers/set-accessor.d.ts +10 -0
- package/dist/transformers/set-accessor.js +44 -0
- package/dist/transformers/set-accessor.js.map +1 -0
- package/dist/transformers/source-file-transformer.d.ts +15 -0
- package/dist/transformers/source-file-transformer.js +108 -0
- package/dist/transformers/source-file-transformer.js.map +1 -0
- package/dist/transformers/template-literal-type-span.d.ts +10 -0
- package/dist/transformers/template-literal-type-span.js +36 -0
- package/dist/transformers/template-literal-type-span.js.map +1 -0
- package/dist/transformers/template-literal-type.d.ts +10 -0
- package/dist/transformers/template-literal-type.js +44 -0
- package/dist/transformers/template-literal-type.js.map +1 -0
- package/dist/transformers/this-type.d.ts +10 -0
- package/dist/transformers/this-type.js +34 -0
- package/dist/transformers/this-type.js.map +1 -0
- package/dist/transformers/tuple-type.d.ts +10 -0
- package/dist/transformers/tuple-type.js +46 -0
- package/dist/transformers/tuple-type.js.map +1 -0
- package/dist/transformers/type-alias.d.ts +11 -0
- package/dist/transformers/type-alias.js +48 -0
- package/dist/transformers/type-alias.js.map +1 -0
- package/dist/transformers/type-literal.d.ts +14 -0
- package/dist/transformers/type-literal.js +48 -0
- package/dist/transformers/type-literal.js.map +1 -0
- package/dist/transformers/type-operator.d.ts +15 -0
- package/dist/transformers/type-operator.js +51 -0
- package/dist/transformers/type-operator.js.map +1 -0
- package/dist/transformers/type-predicate.d.ts +10 -0
- package/dist/transformers/type-predicate.js +37 -0
- package/dist/transformers/type-predicate.js.map +1 -0
- package/dist/transformers/type-query.d.ts +13 -0
- package/dist/transformers/type-query.js +41 -0
- package/dist/transformers/type-query.js.map +1 -0
- package/dist/transformers/type-reference.d.ts +17 -0
- package/dist/transformers/type-reference.js +58 -0
- package/dist/transformers/type-reference.js.map +1 -0
- package/dist/transformers/union-type.d.ts +10 -0
- package/dist/transformers/union-type.js +47 -0
- package/dist/transformers/union-type.js.map +1 -0
- package/dist/transformers/utils/jsdoc-to-doc-schema.d.ts +5 -0
- package/dist/transformers/utils/jsdoc-to-doc-schema.js +114 -0
- package/dist/transformers/utils/jsdoc-to-doc-schema.js.map +1 -0
- package/dist/transformers/utils/parse-type-from-quick-info.d.ts +36 -0
- package/dist/transformers/utils/parse-type-from-quick-info.js +111 -0
- package/dist/transformers/utils/parse-type-from-quick-info.js.map +1 -0
- package/dist/transformers/variable-declaration.d.ts +11 -0
- package/dist/transformers/variable-declaration.js +102 -0
- package/dist/transformers/variable-declaration.js.map +1 -0
- package/dist/transformers/variable-statement.d.ts +14 -0
- package/dist/transformers/variable-statement.js +67 -0
- package/dist/transformers/variable-statement.js.map +1 -0
- package/dist/tsconfig.default.json +25 -0
- package/dist/typescript.aspect.d.ts +2 -0
- package/dist/typescript.aspect.js +18 -0
- package/dist/typescript.aspect.js.map +1 -0
- package/dist/typescript.composition.d.ts +1 -0
- package/dist/typescript.composition.js +29 -0
- package/dist/typescript.composition.js.map +1 -0
- package/dist/typescript.docs.mdx +8 -0
- package/dist/typescript.extractor.d.ts +52 -0
- package/dist/typescript.extractor.js +254 -0
- package/dist/typescript.extractor.js.map +1 -0
- package/dist/typescript.main.runtime.d.ts +130 -0
- package/dist/typescript.main.runtime.js +400 -0
- package/dist/typescript.main.runtime.js.map +1 -0
- package/dist/typescript.parser.d.ts +13 -0
- package/dist/typescript.parser.js +142 -0
- package/dist/typescript.parser.js.map +1 -0
- package/dist/typescript.parser.spec.d.ts +1 -0
- package/dist/typescript.parser.spec.js +189 -0
- package/dist/typescript.parser.spec.js.map +1 -0
- package/esm.mjs +21 -0
- package/exceptions/index.ts +1 -0
- package/exceptions/transformer-not-found.ts +20 -0
- package/package.json +86 -0
- package/sourceFileTransformers/class.ts +73 -0
- package/sourceFileTransformers/empty-line-encoder.ts +56 -0
- package/sourceFileTransformers/export.ts +65 -0
- package/sourceFileTransformers/expression-statement.ts +48 -0
- package/sourceFileTransformers/function.ts +170 -0
- package/sourceFileTransformers/import.ts +101 -0
- package/sourceFileTransformers/index.ts +14 -0
- package/sourceFileTransformers/interface.ts +41 -0
- package/sourceFileTransformers/replaceName.ts +11 -0
- package/sourceFileTransformers/transform.ts +70 -0
- package/sourceFileTransformers/type-reference.ts +19 -0
- package/sourceFileTransformers/typeAlias.ts +25 -0
- package/sourceFileTransformers/variable.ts +25 -0
- package/transformers/array-literal-expression.ts +31 -0
- package/transformers/array-type.ts +22 -0
- package/transformers/binding-element.ts +35 -0
- package/transformers/class-declaration.ts +109 -0
- package/transformers/conditional-type.ts +24 -0
- package/transformers/constructor.ts +37 -0
- package/transformers/decorator.ts +30 -0
- package/transformers/enum-declaration.ts +32 -0
- package/transformers/export-assignment.ts +48 -0
- package/transformers/export-declaration.ts +182 -0
- package/transformers/expression-statement.ts +21 -0
- package/transformers/function-like.ts +72 -0
- package/transformers/get-accessor.ts +25 -0
- package/transformers/import-declaration.ts +57 -0
- package/transformers/index-signature.ts +27 -0
- package/transformers/index.ts +43 -0
- package/transformers/indexed-access-type.ts +22 -0
- package/transformers/interface-declaration.ts +68 -0
- package/transformers/intersection-type.ts +26 -0
- package/transformers/keyword-type.ts +40 -0
- package/transformers/literal-type.ts +24 -0
- package/transformers/literal-value.ts +40 -0
- package/transformers/module-declaration.ts +21 -0
- package/transformers/named-tuple.ts +23 -0
- package/transformers/object-literal-expression.ts +29 -0
- package/transformers/parameter.ts +115 -0
- package/transformers/parenthesized-type.ts +21 -0
- package/transformers/property-assignment.ts +24 -0
- package/transformers/property-declaration.ts +35 -0
- package/transformers/set-accessor.ts +27 -0
- package/transformers/source-file-transformer.ts +95 -0
- package/transformers/template-literal-type-span.ts +22 -0
- package/transformers/template-literal-type.ts +26 -0
- package/transformers/this-type.ts +20 -0
- package/transformers/tuple-type.ts +25 -0
- package/transformers/type-alias.ts +27 -0
- package/transformers/type-literal.ts +27 -0
- package/transformers/type-operator.ts +38 -0
- package/transformers/type-predicate.ts +23 -0
- package/transformers/type-query.ts +26 -0
- package/transformers/type-reference.ts +37 -0
- package/transformers/union-type.ts +26 -0
- package/transformers/utils/jsdoc-to-doc-schema.ts +114 -0
- package/transformers/utils/parse-type-from-quick-info.ts +99 -0
- package/transformers/variable-declaration.ts +111 -0
- package/transformers/variable-statement.ts +34 -0
- package/types/asset.d.ts +41 -0
- package/types/style.d.ts +42 -0
- package/typescript.composition.tsx +7 -0
- package/typescript.docs.mdx +8 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Node, ConditionalTypeNode } from 'typescript';
|
|
2
|
+
import { SyntaxKind } from 'typescript';
|
|
3
|
+
import { ConditionalTypeSchema } 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 ConditionalTypeTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === SyntaxKind.ConditionalType;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async transform(node: ConditionalTypeNode, context: SchemaExtractorContext) {
|
|
18
|
+
const checkType = await context.computeSchema(node.checkType);
|
|
19
|
+
const extendsType = await context.computeSchema(node.extendsType);
|
|
20
|
+
const trueType = await context.computeSchema(node.trueType);
|
|
21
|
+
const falseType = await context.computeSchema(node.falseType);
|
|
22
|
+
return new ConditionalTypeSchema(context.getLocation(node), checkType, extendsType, trueType, falseType);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Node, ConstructorDeclaration } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import type { ParameterSchema, Modifier } from '@teambit/semantics.entities.semantic-schema';
|
|
4
|
+
import { ConstructorSchema, ThisTypeSchema } 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 ConstructorTransformer implements SchemaTransformer {
|
|
11
|
+
predicate(node: Node) {
|
|
12
|
+
return node.kind === ts.SyntaxKind.Constructor;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async transform(node: ConstructorDeclaration, context: SchemaExtractorContext) {
|
|
20
|
+
const args = await pMapSeries(node.parameters, async (param) => context.computeSchema(param));
|
|
21
|
+
const info = await context.getQuickInfo(node);
|
|
22
|
+
const displaySig = info?.body?.displayString || '';
|
|
23
|
+
const name = node.parent?.name?.getText() || '';
|
|
24
|
+
const returns = new ThisTypeSchema(context.getLocation(node.parent), name);
|
|
25
|
+
const modifiers = node.modifiers?.map((modifier) => modifier.getText()) || [];
|
|
26
|
+
const doc = await context.jsDocToDocSchema(node);
|
|
27
|
+
|
|
28
|
+
return new ConstructorSchema(
|
|
29
|
+
context.getLocation(node),
|
|
30
|
+
args as ParameterSchema[],
|
|
31
|
+
returns,
|
|
32
|
+
displaySig,
|
|
33
|
+
modifiers as Modifier[],
|
|
34
|
+
doc
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SchemaNode } from '@teambit/semantics.entities.semantic-schema';
|
|
2
|
+
import { DecoratorSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import type { Decorator, Node } from 'typescript';
|
|
4
|
+
import ts from 'typescript';
|
|
5
|
+
import pMapSeries from 'p-map-series';
|
|
6
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
7
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
8
|
+
import { Identifier } from '../identifier';
|
|
9
|
+
|
|
10
|
+
export class DecoratorTransformer implements SchemaTransformer {
|
|
11
|
+
predicate(node: Node) {
|
|
12
|
+
return node.kind === ts.SyntaxKind.Decorator;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async getIdentifiers(decorator: Decorator) {
|
|
16
|
+
const identifierText = decorator.expression.getFirstToken()?.getText() || '';
|
|
17
|
+
return [new Identifier(identifierText, decorator.getSourceFile().fileName)];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async transform(node: Decorator, context: SchemaExtractorContext): Promise<SchemaNode> {
|
|
21
|
+
const name = node.expression.getFirstToken()?.getText() || '';
|
|
22
|
+
const location = context.getLocation(node);
|
|
23
|
+
const doc = await context.jsDocToDocSchema(node);
|
|
24
|
+
const args =
|
|
25
|
+
ts.isCallExpression(node.expression) && node.expression.arguments.length
|
|
26
|
+
? await pMapSeries(node.expression.arguments, (arg) => context.computeSchema(arg))
|
|
27
|
+
: undefined;
|
|
28
|
+
return new DecoratorSchema(location, name, doc, args);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Node, EnumDeclaration } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { EnumMemberSchema, EnumSchema } 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 { Identifier } from '../identifier';
|
|
8
|
+
|
|
9
|
+
export class EnumDeclarationTransformer implements SchemaTransformer {
|
|
10
|
+
predicate(node: Node) {
|
|
11
|
+
return node.kind === ts.SyntaxKind.EnumDeclaration;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async getIdentifiers(node: EnumDeclaration): Promise<Identifier[]> {
|
|
15
|
+
return [new Identifier(node.name.getText(), node.getSourceFile().fileName)];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async transform(enumDec: EnumDeclaration, context: SchemaExtractorContext) {
|
|
19
|
+
const name = enumDec.name.getText();
|
|
20
|
+
const members = await pMapSeries(enumDec.members, async (member) => {
|
|
21
|
+
const memberName = member.name.getText();
|
|
22
|
+
const memberSignature = await context.getQuickInfoDisplayString(member);
|
|
23
|
+
const memberDoc = await context.jsDocToDocSchema(member);
|
|
24
|
+
const memberLocation = await context.getLocation(member);
|
|
25
|
+
const memberValue = member.initializer?.getText();
|
|
26
|
+
return new EnumMemberSchema(memberLocation, memberName, memberSignature, memberValue, memberDoc);
|
|
27
|
+
});
|
|
28
|
+
const signature = await context.getQuickInfoDisplayString(enumDec.name);
|
|
29
|
+
const doc = await context.jsDocToDocSchema(enumDec);
|
|
30
|
+
return new EnumSchema(context.getLocation(enumDec), name, members, signature, doc);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { SchemaNode } from '@teambit/semantics.entities.semantic-schema';
|
|
2
|
+
import { ExportSchema, TypeRefSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import type { Node, ExportAssignment as ExportAssignmentNode } from 'typescript';
|
|
4
|
+
import { SyntaxKind } from 'typescript';
|
|
5
|
+
import { ExportIdentifier } from '../export-identifier';
|
|
6
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
7
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This is either an export = or an export default declaration.
|
|
11
|
+
* Unless isExportEquals is set, this node was parsed as an export default
|
|
12
|
+
*/
|
|
13
|
+
export class ExportAssignmentTransformer implements SchemaTransformer {
|
|
14
|
+
predicate(node: Node) {
|
|
15
|
+
return node.kind === SyntaxKind.ExportAssignment;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async getIdentifiers(exportDec: ExportAssignmentNode) {
|
|
19
|
+
return [new ExportIdentifier('default', exportDec.getSourceFile().fileName)];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async transform(exportDec: ExportAssignmentNode, context: SchemaExtractorContext): Promise<SchemaNode> {
|
|
23
|
+
const specifier = exportDec.expression;
|
|
24
|
+
const location = context.getLocation(exportDec);
|
|
25
|
+
const absoluteFilePath = exportDec.getSourceFile().fileName;
|
|
26
|
+
|
|
27
|
+
const exportNode = await context.getTypeRef(specifier.getText(), absoluteFilePath, location);
|
|
28
|
+
|
|
29
|
+
if (exportNode) {
|
|
30
|
+
return new ExportSchema(
|
|
31
|
+
location,
|
|
32
|
+
`${exportNode.name} (default)`,
|
|
33
|
+
new TypeRefSchema(
|
|
34
|
+
exportNode.location,
|
|
35
|
+
exportNode.name,
|
|
36
|
+
exportNode.componentId,
|
|
37
|
+
exportNode.packageName,
|
|
38
|
+
exportNode.internalFilePath
|
|
39
|
+
),
|
|
40
|
+
`${exportNode.name} (default)`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const schemaNode = await context.computeSchema(specifier);
|
|
45
|
+
const nodeName = schemaNode.name ? `${schemaNode.name} (default)` : 'default';
|
|
46
|
+
return new ExportSchema(location, nodeName, schemaNode, nodeName);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { SchemaNode } from '@teambit/semantics.entities.semantic-schema';
|
|
2
|
+
import {
|
|
3
|
+
ModuleSchema,
|
|
4
|
+
UnresolvedSchema,
|
|
5
|
+
UnImplementedSchema,
|
|
6
|
+
ExportSchema,
|
|
7
|
+
} from '@teambit/semantics.entities.semantic-schema';
|
|
8
|
+
import type {
|
|
9
|
+
Node,
|
|
10
|
+
ExportDeclaration as ExportDeclarationNode,
|
|
11
|
+
NamedExports,
|
|
12
|
+
NamespaceExport,
|
|
13
|
+
ExportSpecifier,
|
|
14
|
+
} from 'typescript';
|
|
15
|
+
import ts, { SyntaxKind } from 'typescript';
|
|
16
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
17
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
18
|
+
import { ExportIdentifier } from '../export-identifier';
|
|
19
|
+
|
|
20
|
+
export class ExportDeclarationTransformer implements SchemaTransformer {
|
|
21
|
+
predicate(node: Node) {
|
|
22
|
+
return node.kind === SyntaxKind.ExportDeclaration;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async getIdentifiers(exportDec: ExportDeclarationNode, context: SchemaExtractorContext) {
|
|
26
|
+
// e.g. `export { button1, button2 } as Composition from './button';
|
|
27
|
+
const rawSourceFilePath = exportDec.moduleSpecifier?.getText();
|
|
28
|
+
|
|
29
|
+
// strip off quotes ''
|
|
30
|
+
const sourceFilePath = rawSourceFilePath && rawSourceFilePath.substring(1, rawSourceFilePath?.length - 1);
|
|
31
|
+
|
|
32
|
+
if (exportDec.exportClause?.kind === ts.SyntaxKind.NamedExports) {
|
|
33
|
+
return exportDec.exportClause.elements.map((elm) => {
|
|
34
|
+
const alias = (elm.propertyName && elm.name.getText()) || undefined;
|
|
35
|
+
const id = elm.propertyName?.getText() || elm.name.getText();
|
|
36
|
+
const fileName = elm.getSourceFile().fileName;
|
|
37
|
+
|
|
38
|
+
return new ExportIdentifier(id, fileName, alias, sourceFilePath);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// e.g. `export * as Composition from './button';
|
|
43
|
+
if (exportDec.exportClause?.kind === ts.SyntaxKind.NamespaceExport) {
|
|
44
|
+
return [
|
|
45
|
+
new ExportIdentifier(
|
|
46
|
+
exportDec.exportClause.name.getText(),
|
|
47
|
+
exportDec.getSourceFile().fileName,
|
|
48
|
+
undefined,
|
|
49
|
+
sourceFilePath
|
|
50
|
+
),
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (exportDec.moduleSpecifier) {
|
|
55
|
+
return context.getFileExports(exportDec);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async transform(exportDec: ExportDeclarationNode, context: SchemaExtractorContext): Promise<SchemaNode> {
|
|
62
|
+
const exportClause = exportDec.exportClause;
|
|
63
|
+
|
|
64
|
+
// it's export-all, e.g. `export * from './button'`;
|
|
65
|
+
if (!exportClause) {
|
|
66
|
+
const specifier = exportDec.moduleSpecifier;
|
|
67
|
+
if (!specifier) {
|
|
68
|
+
throw new Error(`fatal: no specifier`);
|
|
69
|
+
}
|
|
70
|
+
const sourceFile = await context.getSourceFileFromNode(specifier);
|
|
71
|
+
// export * from 'webpack', export-all from a package
|
|
72
|
+
if (!sourceFile) {
|
|
73
|
+
return new UnImplementedSchema(
|
|
74
|
+
context.getLocation(exportDec),
|
|
75
|
+
exportDec.getText(),
|
|
76
|
+
SyntaxKind[SyntaxKind.ExportDeclaration]
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return context.computeSchema(sourceFile);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// e.g. `export { button1, button2 } as Composition from './button';
|
|
83
|
+
if (exportClause.kind === SyntaxKind.NamedExports) {
|
|
84
|
+
const schemas = await namedExport(exportClause, context);
|
|
85
|
+
return new ModuleSchema(context.getLocation(exportDec), schemas, []);
|
|
86
|
+
}
|
|
87
|
+
// e.g. `export * as Composition from './button';
|
|
88
|
+
if (exportClause.kind === SyntaxKind.NamespaceExport) {
|
|
89
|
+
return namespaceExport(exportClause, exportDec, context);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// should never reach here. exportClause can be either NamespaceExport or NamedExports
|
|
93
|
+
throw new Error(`unrecognized exportClause type`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function isSameNode(nodeA: Node, nodeB: Node): boolean {
|
|
98
|
+
return nodeA.kind === nodeB.kind && nodeA.pos === nodeB.pos && nodeA.end === nodeB.end;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function namedExport(exportClause: NamedExports, context: SchemaExtractorContext): Promise<ExportSchema[]> {
|
|
102
|
+
const schemas = await Promise.all(
|
|
103
|
+
exportClause.elements.map(async (element) => {
|
|
104
|
+
return exportSpecifierToSchemaNode(element, context);
|
|
105
|
+
})
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
return schemas;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async function exportSpecifierToSchemaNode(
|
|
112
|
+
element: ExportSpecifier,
|
|
113
|
+
context: SchemaExtractorContext
|
|
114
|
+
): Promise<ExportSchema> {
|
|
115
|
+
try {
|
|
116
|
+
const name = element.propertyName?.getText() || element.name.getText();
|
|
117
|
+
const alias = element.propertyName ? element.name.getText() : undefined;
|
|
118
|
+
const location = context.getLocation(element.name);
|
|
119
|
+
const definitionInfo = element.isTypeOnly
|
|
120
|
+
? await context.definitionInfo(element.name)
|
|
121
|
+
: await context.definitionInfo(element);
|
|
122
|
+
|
|
123
|
+
if (!definitionInfo) {
|
|
124
|
+
const exportNode = new UnresolvedSchema(location, element.name.getText());
|
|
125
|
+
// happens for example when the main index.ts file exports variable from an mdx file.
|
|
126
|
+
// tsserver is unable to get the definition node because it doesn't know to parse mdx files.
|
|
127
|
+
// return new UnresolvedSchema(context.getLocation(element.name), element.name.getText());
|
|
128
|
+
return new ExportSchema(location, name, exportNode, alias);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const definitionNode = await context.definition(definitionInfo);
|
|
132
|
+
|
|
133
|
+
if (!definitionNode) {
|
|
134
|
+
const exportNode = await context.resolveType(element, name);
|
|
135
|
+
return new ExportSchema(location, name, exportNode, alias);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// if it is reexported from another export
|
|
139
|
+
if (isSameNode(element, definitionNode.parent)) {
|
|
140
|
+
// the definition node is the same node as element.name. tsserver wasn't able to find the source for it
|
|
141
|
+
// normally, "bit install" should fix it. another option is to open vscode and look for errors.
|
|
142
|
+
throw new Error(`error: tsserver is unable to locate the identifier "${element.name.getText()}" at ${context.getLocationAsString(
|
|
143
|
+
element.name
|
|
144
|
+
)}.
|
|
145
|
+
make sure "bit status" is clean and there are no errors about missing packages/links.
|
|
146
|
+
also, make sure the tsconfig.json in the root has the "jsx" setting defined.`);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (definitionNode.parent.kind === SyntaxKind.ExportSpecifier) {
|
|
150
|
+
return await exportSpecifierToSchemaNode(definitionNode.parent as ExportSpecifier, context);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const exportNode = await context.computeSchema(definitionNode.parent);
|
|
154
|
+
return new ExportSchema(location, name, exportNode, alias);
|
|
155
|
+
} catch {
|
|
156
|
+
const exportNode = new UnresolvedSchema(context.getLocation(element.name), element.name.getText());
|
|
157
|
+
return new ExportSchema(context.getLocation(element.name), element.name.getText(), exportNode);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async function namespaceExport(
|
|
162
|
+
exportClause: NamespaceExport,
|
|
163
|
+
exportDec: ExportDeclarationNode,
|
|
164
|
+
context: SchemaExtractorContext
|
|
165
|
+
) {
|
|
166
|
+
const namespace = exportClause.name.getText();
|
|
167
|
+
const filePath = await context.getFilePathByNode(exportClause.name);
|
|
168
|
+
if (!filePath) {
|
|
169
|
+
throw new Error(`unable to find the file-path for "${namespace}"`);
|
|
170
|
+
}
|
|
171
|
+
const sourceFile = context.getSourceFileInsideComponent(filePath);
|
|
172
|
+
if (!sourceFile) {
|
|
173
|
+
// it's a namespace from another component or an external package.
|
|
174
|
+
return context.getTypeRefForExternalPath(namespace, filePath, context.getLocation(exportDec));
|
|
175
|
+
}
|
|
176
|
+
const result = await context.computeSchema(sourceFile);
|
|
177
|
+
if (!(result instanceof ModuleSchema)) {
|
|
178
|
+
throw new Error(`expect result to be instance of Module`);
|
|
179
|
+
}
|
|
180
|
+
result.namespace = namespace;
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Node, ExpressionStatement } 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 ExpressionStatementTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === ts.SyntaxKind.ExpressionStatement;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async transform(node: ExpressionStatement, context: SchemaExtractorContext) {
|
|
18
|
+
const location = context.getLocation(node);
|
|
19
|
+
return new UnImplementedSchema(location, node.getText(), ts.SyntaxKind[node.kind]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ParameterSchema, SchemaNode, Modifier } from '@teambit/semantics.entities.semantic-schema';
|
|
2
|
+
import { FunctionLikeSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import type { Node, SignatureDeclaration } from 'typescript';
|
|
4
|
+
import ts from 'typescript';
|
|
5
|
+
import pMapSeries from 'p-map-series';
|
|
6
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
7
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
8
|
+
import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
|
|
9
|
+
import { Identifier } from '../identifier';
|
|
10
|
+
|
|
11
|
+
export class FunctionLikeTransformer implements SchemaTransformer {
|
|
12
|
+
predicate(node: Node) {
|
|
13
|
+
return (
|
|
14
|
+
node.kind === ts.SyntaxKind.FunctionDeclaration ||
|
|
15
|
+
node.kind === ts.SyntaxKind.ArrowFunction ||
|
|
16
|
+
node.kind === ts.SyntaxKind.MethodDeclaration ||
|
|
17
|
+
node.kind === ts.SyntaxKind.CallSignature ||
|
|
18
|
+
node.kind === ts.SyntaxKind.ConstructSignature ||
|
|
19
|
+
node.kind === ts.SyntaxKind.FunctionType ||
|
|
20
|
+
node.kind === ts.SyntaxKind.MethodSignature
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// need to check for anonymous functions assigned for vars, const and let.
|
|
25
|
+
async getIdentifiers(funcDec: SignatureDeclaration) {
|
|
26
|
+
return [new Identifier(this.getName(funcDec), funcDec.getSourceFile().fileName)];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private getName(funcDec: SignatureDeclaration) {
|
|
30
|
+
if (funcDec.kind === ts.SyntaxKind.ConstructSignature) return 'new';
|
|
31
|
+
return funcDec.name?.getText() || '';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async transform(node: SignatureDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
|
|
35
|
+
const name = this.getName(node);
|
|
36
|
+
const nodeModifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;
|
|
37
|
+
const getQuickInfoFromDefaultModifier = async () => {
|
|
38
|
+
const defaultModifier = nodeModifiers?.find((modifier) => modifier.kind === ts.SyntaxKind.DefaultKeyword);
|
|
39
|
+
if (defaultModifier) return context.getQuickInfo(defaultModifier);
|
|
40
|
+
if (node.kind === ts.SyntaxKind.ArrowFunction) return context.getQuickInfo(node.equalsGreaterThanToken);
|
|
41
|
+
return null;
|
|
42
|
+
};
|
|
43
|
+
const info = node.name ? await context.getQuickInfo(node.name) : await getQuickInfoFromDefaultModifier();
|
|
44
|
+
const returnTypeStr = info ? parseTypeFromQuickInfo(info) : 'any';
|
|
45
|
+
const displaySig = info?.body?.displayString || '';
|
|
46
|
+
const args = (await pMapSeries(node.parameters, async (param) =>
|
|
47
|
+
context.computeSchema(param)
|
|
48
|
+
)) as ParameterSchema[];
|
|
49
|
+
|
|
50
|
+
const returnType = await context.resolveType(node, returnTypeStr);
|
|
51
|
+
const modifiers = nodeModifiers?.map((modifier) => modifier.getText()) || [];
|
|
52
|
+
const typeParameters = node.typeParameters?.map((typeParam) => typeParam.name.getText());
|
|
53
|
+
const location = context.getLocation(node);
|
|
54
|
+
const doc = await context.jsDocToDocSchema(node);
|
|
55
|
+
const nodeDecorators = ts.canHaveDecorators(node) ? ts.getDecorators(node) : undefined;
|
|
56
|
+
const decorators = nodeDecorators?.length
|
|
57
|
+
? await pMapSeries(nodeDecorators, (decorator) => context.computeSchema(decorator))
|
|
58
|
+
: undefined;
|
|
59
|
+
|
|
60
|
+
return new FunctionLikeSchema(
|
|
61
|
+
location,
|
|
62
|
+
name,
|
|
63
|
+
args,
|
|
64
|
+
returnType,
|
|
65
|
+
displaySig,
|
|
66
|
+
modifiers as Modifier[],
|
|
67
|
+
doc,
|
|
68
|
+
typeParameters,
|
|
69
|
+
decorators
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Node, GetAccessorDeclaration } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { GetAccessorSchema } 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 GetAccessorTransformer implements SchemaTransformer {
|
|
10
|
+
predicate(node: Node) {
|
|
11
|
+
return node.kind === ts.SyntaxKind.GetAccessor;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async transform(node: GetAccessorDeclaration, context: SchemaExtractorContext) {
|
|
19
|
+
const info = await context.getQuickInfo(node.name);
|
|
20
|
+
const displaySig = info?.body?.displayString || '';
|
|
21
|
+
const typeStr = parseTypeFromQuickInfo(info);
|
|
22
|
+
const type = await context.resolveType(node, typeStr);
|
|
23
|
+
return new GetAccessorSchema(context.getLocation(node), node.name.getText(), type, displaySig);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { ImportDeclaration, Node } from 'typescript';
|
|
2
|
+
import { SyntaxKind } 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 { Identifier } from '../identifier';
|
|
7
|
+
|
|
8
|
+
export class ImportDeclarationTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === SyntaxKind.ImportDeclaration;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(importDec: ImportDeclaration): Promise<Identifier[]> {
|
|
14
|
+
if (!importDec.importClause) return [];
|
|
15
|
+
|
|
16
|
+
const sourceFile = importDec.getSourceFile().fileName;
|
|
17
|
+
const rawSourceFilePath = importDec.moduleSpecifier.getText();
|
|
18
|
+
const sourceFilePath = rawSourceFilePath.substring(1, rawSourceFilePath.length - 1);
|
|
19
|
+
|
|
20
|
+
// import A from 'a'
|
|
21
|
+
if (!importDec.importClause.namedBindings) {
|
|
22
|
+
return [new Identifier(importDec.importClause.getText(), sourceFile, undefined, sourceFilePath)];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// import { A } from 'a'
|
|
26
|
+
if (importDec.importClause.namedBindings?.kind === SyntaxKind.NamedImports) {
|
|
27
|
+
const { elements } = importDec.importClause.namedBindings;
|
|
28
|
+
|
|
29
|
+
return elements.map(({ name, propertyName }) => {
|
|
30
|
+
const id = propertyName?.getText() || name.getText();
|
|
31
|
+
const alias = (propertyName && name.getText()) || undefined;
|
|
32
|
+
const identifier = new Identifier(id, sourceFile, alias, sourceFilePath);
|
|
33
|
+
return identifier;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// import * as A from 'a';
|
|
38
|
+
if (importDec.importClause.namedBindings.kind === SyntaxKind.NamespaceImport) {
|
|
39
|
+
return [
|
|
40
|
+
new Identifier(
|
|
41
|
+
importDec.importClause.namedBindings.name.getText(),
|
|
42
|
+
sourceFile,
|
|
43
|
+
undefined,
|
|
44
|
+
importDec.moduleSpecifier.getText()
|
|
45
|
+
),
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async transform(node: ImportDeclaration, context: SchemaExtractorContext) {
|
|
53
|
+
const location = context.getLocation(node);
|
|
54
|
+
|
|
55
|
+
return new UnImplementedSchema(location, node.getText(), node.kind.toString());
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Node, IndexSignatureDeclaration } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import type { ParameterSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
4
|
+
import { IndexSignatureSchema, UnresolvedSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
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 IndexSignatureTransformer implements SchemaTransformer {
|
|
10
|
+
predicate(node: Node) {
|
|
11
|
+
return node.kind === ts.SyntaxKind.IndexSignature;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async transform(node: IndexSignatureDeclaration, context: SchemaExtractorContext) {
|
|
19
|
+
const param = node.parameters[0];
|
|
20
|
+
if (!param) {
|
|
21
|
+
return new UnresolvedSchema(context.getLocation(node), `IndexSignatureTransformer: no parameter found`);
|
|
22
|
+
}
|
|
23
|
+
const keyType = (await context.computeSchema(param)) as ParameterSchema;
|
|
24
|
+
const valueType = await context.computeSchema(node.type);
|
|
25
|
+
return new IndexSignatureSchema(context.getLocation(node), keyType, valueType);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export { ExportDeclarationTransformer } from './export-declaration';
|
|
2
|
+
export { FunctionLikeTransformer } from './function-like';
|
|
3
|
+
export { ParameterTransformer } from './parameter';
|
|
4
|
+
export { VariableStatementTransformer } from './variable-statement';
|
|
5
|
+
export { VariableDeclaration } from './variable-declaration';
|
|
6
|
+
export { SourceFileTransformer } from './source-file-transformer';
|
|
7
|
+
export { TypeAliasTransformer } from './type-alias';
|
|
8
|
+
export { IntersectionTypeTransformer } from './intersection-type';
|
|
9
|
+
export { UnionTypeTransformer } from './union-type';
|
|
10
|
+
export { TypeReferenceTransformer } from './type-reference';
|
|
11
|
+
export { TypeLiteralTransformer } from './type-literal';
|
|
12
|
+
export { LiteralTypeTransformer } from './literal-type';
|
|
13
|
+
export { TypeQueryTransformer } from './type-query';
|
|
14
|
+
export { TypeOperatorTransformer } from './type-operator';
|
|
15
|
+
export { KeywordTypeTransformer } from './keyword-type';
|
|
16
|
+
export { TupleTypeTransformer } from './tuple-type';
|
|
17
|
+
export { ParenthesizedTypeTransformer } from './parenthesized-type';
|
|
18
|
+
export { TypePredicateTransformer } from './type-predicate';
|
|
19
|
+
export { IndexedAccessTypeTransformer } from './indexed-access-type';
|
|
20
|
+
export { TemplateLiteralTypeSpanTransformer } from './template-literal-type-span';
|
|
21
|
+
export { TemplateLiteralTypeTransformer } from './template-literal-type';
|
|
22
|
+
export { ThisTypeTransformer } from './this-type';
|
|
23
|
+
export { ConditionalTypeTransformer } from './conditional-type';
|
|
24
|
+
export { NamedTupleTransformer } from './named-tuple';
|
|
25
|
+
export { ArrayTypeTransformer } from './array-type';
|
|
26
|
+
export { ClassDeclarationTransformer } from './class-declaration';
|
|
27
|
+
export { ConstructorTransformer } from './constructor';
|
|
28
|
+
export { PropertyDeclarationTransformer } from './property-declaration';
|
|
29
|
+
export { SetAccessorTransformer } from './set-accessor';
|
|
30
|
+
export { GetAccessorTransformer } from './get-accessor';
|
|
31
|
+
export { IndexSignatureTransformer } from './index-signature';
|
|
32
|
+
export { InterfaceDeclarationTransformer } from './interface-declaration';
|
|
33
|
+
export { EnumDeclarationTransformer } from './enum-declaration';
|
|
34
|
+
export { BindingElementTransformer } from './binding-element';
|
|
35
|
+
export { ExportAssignmentTransformer } from './export-assignment';
|
|
36
|
+
export { ImportDeclarationTransformer } from './import-declaration';
|
|
37
|
+
export { ExpressionStatementTransformer } from './expression-statement';
|
|
38
|
+
export { ModuleDeclarationTransformer } from './module-declaration';
|
|
39
|
+
export { DecoratorTransformer } from './decorator';
|
|
40
|
+
export { ArrayLiteralExpressionTransformer } from './array-literal-expression';
|
|
41
|
+
export { ObjectLiteralExpressionTransformer } from './object-literal-expression';
|
|
42
|
+
export { PropertyAssignmentTransformer } from './property-assignment';
|
|
43
|
+
export { LiteralValueTransformer } from './literal-value';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IndexedAccessTypeNode, Node } from 'typescript';
|
|
2
|
+
import { SyntaxKind } from 'typescript';
|
|
3
|
+
import { IndexedAccessSchema } 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 IndexedAccessTypeTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === SyntaxKind.IndexedAccessType;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async transform(node: IndexedAccessTypeNode, context: SchemaExtractorContext) {
|
|
18
|
+
const objectType = await context.computeSchema(node.objectType);
|
|
19
|
+
const indexType = await context.computeSchema(node.indexType);
|
|
20
|
+
return new IndexedAccessSchema(context.getLocation(node), objectType, indexType);
|
|
21
|
+
}
|
|
22
|
+
}
|