@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,25 @@
|
|
|
1
|
+
import type { Node, TupleTypeNode } from 'typescript';
|
|
2
|
+
import { SyntaxKind } from 'typescript';
|
|
3
|
+
import pMapSeries from 'p-map-series';
|
|
4
|
+
import { TupleTypeSchema } 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 TupleTypeTransformer implements SchemaTransformer {
|
|
10
|
+
predicate(node: Node) {
|
|
11
|
+
return node.kind === SyntaxKind.TupleType;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async transform(node: TupleTypeNode, context: SchemaExtractorContext) {
|
|
19
|
+
const elements = await pMapSeries(node.elements, async (elem) => {
|
|
20
|
+
const typeSchema = await context.computeSchema(elem);
|
|
21
|
+
return typeSchema;
|
|
22
|
+
});
|
|
23
|
+
return new TupleTypeSchema(context.getLocation(node), elements);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Node, TypeAliasDeclaration } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { TypeSchema } 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 TypeAliasTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === ts.SyntaxKind.TypeAliasDeclaration;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(node: TypeAliasDeclaration) {
|
|
14
|
+
return [new Identifier(node.name.getText(), node.getSourceFile().fileName)];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
private getName(node: TypeAliasDeclaration): string {
|
|
18
|
+
return node.name.getText();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async transform(typeAlias: TypeAliasDeclaration, context: SchemaExtractorContext) {
|
|
22
|
+
const type = await context.computeSchema(typeAlias.type);
|
|
23
|
+
const displaySig = await context.getQuickInfoDisplayString(typeAlias.name);
|
|
24
|
+
const doc = await context.jsDocToDocSchema(typeAlias);
|
|
25
|
+
return new TypeSchema(context.getLocation(typeAlias), this.getName(typeAlias), type, displaySig, doc);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Node, TypeLiteralNode } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { TypeLiteralSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
4
|
+
import pMapSeries from 'p-map-series';
|
|
5
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
6
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
7
|
+
import type { Identifier } from '../identifier';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* not to be confused with "LiteralType", which is string/boolean/null.
|
|
11
|
+
* this "TypeLiteral" is an object with properties, such as: `{ a: string; b: number }`, similar to Interface.
|
|
12
|
+
*/
|
|
13
|
+
export class TypeLiteralTransformer implements SchemaTransformer {
|
|
14
|
+
predicate(node: Node) {
|
|
15
|
+
return node.kind === ts.SyntaxKind.TypeLiteral;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async transform(node: TypeLiteralNode, context: SchemaExtractorContext) {
|
|
23
|
+
const members = await pMapSeries(node.members, (member) => context.computeSchema(member));
|
|
24
|
+
const location = context.getLocation(node);
|
|
25
|
+
return new TypeLiteralSchema(location, members);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Node, TypeOperatorNode } from 'typescript';
|
|
2
|
+
import { SyntaxKind } from 'typescript';
|
|
3
|
+
import { TypeOperatorSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
4
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
5
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
6
|
+
import type { Identifier } from '../identifier';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* e.g. keyof typeof Foo
|
|
10
|
+
*/
|
|
11
|
+
export class TypeOperatorTransformer implements SchemaTransformer {
|
|
12
|
+
predicate(node: Node) {
|
|
13
|
+
return node.kind === SyntaxKind.TypeOperator;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async transform(node: TypeOperatorNode, context: SchemaExtractorContext) {
|
|
21
|
+
const operatorName = this.getOperatorName(node.operator);
|
|
22
|
+
const type = await context.computeSchema(node.type);
|
|
23
|
+
return new TypeOperatorSchema(context.getLocation(node), operatorName, type);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
getOperatorName(operator: SyntaxKind.KeyOfKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.ReadonlyKeyword) {
|
|
27
|
+
switch (operator) {
|
|
28
|
+
case SyntaxKind.KeyOfKeyword:
|
|
29
|
+
return 'keyof';
|
|
30
|
+
case SyntaxKind.UniqueKeyword:
|
|
31
|
+
return 'unique';
|
|
32
|
+
case SyntaxKind.ReadonlyKeyword:
|
|
33
|
+
return 'readonly';
|
|
34
|
+
default:
|
|
35
|
+
throw new Error(`getOperatorName: unable to find operator name for ${operator}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Node, TypePredicateNode } from 'typescript';
|
|
2
|
+
import { isIdentifier, SyntaxKind } from 'typescript';
|
|
3
|
+
import { TypePredicateSchema } 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 TypePredicateTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === SyntaxKind.TypePredicate;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async transform(node: TypePredicateNode, context: SchemaExtractorContext) {
|
|
18
|
+
const parameterName = isIdentifier(node.parameterName) ? node.parameterName.getText() : 'this';
|
|
19
|
+
const type = node.type ? await context.computeSchema(node.type) : undefined;
|
|
20
|
+
const hasAssertsModifier = Boolean(node.assertsModifier);
|
|
21
|
+
return new TypePredicateSchema(context.getLocation(node), parameterName, type, hasAssertsModifier);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Node, TypeQueryNode } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { TypeQuerySchema } from '@teambit/semantics.entities.semantic-schema';
|
|
4
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
5
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
6
|
+
import type { Identifier } from '../identifier';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* e.g. `typeof Foo`
|
|
10
|
+
*/
|
|
11
|
+
export class TypeQueryTransformer implements SchemaTransformer {
|
|
12
|
+
predicate(node: Node) {
|
|
13
|
+
return node.kind === ts.SyntaxKind.TypeQuery;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async transform(node: TypeQueryNode, context: SchemaExtractorContext) {
|
|
21
|
+
const displaySig = await context.getQuickInfoDisplayString(node.exprName);
|
|
22
|
+
const type = await context.resolveType(node.exprName, node.exprName.getText());
|
|
23
|
+
const location = context.getLocation(node);
|
|
24
|
+
return new TypeQuerySchema(location, type, displaySig);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Node, TypeReferenceNode } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { TypeRefSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
4
|
+
import pMapSeries from 'p-map-series';
|
|
5
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
6
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
7
|
+
import type { Identifier } from '../identifier';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* In the following example, `AriaButtonProps` is a type reference
|
|
11
|
+
* ```ts
|
|
12
|
+
* import type { AriaButtonProps } from '@react-types/button';
|
|
13
|
+
* export type ButtonProps = AriaButtonProps & { a: string };
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class TypeReferenceTransformer implements SchemaTransformer {
|
|
17
|
+
predicate(node: Node) {
|
|
18
|
+
return node.kind === ts.SyntaxKind.TypeReference;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async transform(node: TypeReferenceNode, context: SchemaExtractorContext) {
|
|
26
|
+
const name = node.typeName.getText();
|
|
27
|
+
let type = await context.resolveType(node, name);
|
|
28
|
+
if (!(type instanceof TypeRefSchema)) {
|
|
29
|
+
type = new TypeRefSchema(context.getLocation(node), name);
|
|
30
|
+
}
|
|
31
|
+
if (node.typeArguments && type instanceof TypeRefSchema) {
|
|
32
|
+
const args = await pMapSeries(node.typeArguments, (arg) => context.computeSchema(arg));
|
|
33
|
+
type.withTypeArgs(args);
|
|
34
|
+
}
|
|
35
|
+
return type;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Node, UnionTypeNode } from 'typescript';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { TypeUnionSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
4
|
+
import pMapSeries from 'p-map-series';
|
|
5
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
6
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
7
|
+
import type { Identifier } from '../identifier';
|
|
8
|
+
|
|
9
|
+
export class UnionTypeTransformer implements SchemaTransformer {
|
|
10
|
+
predicate(node: Node) {
|
|
11
|
+
return node.kind === ts.SyntaxKind.UnionType;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async transform(node: UnionTypeNode, context: SchemaExtractorContext) {
|
|
19
|
+
const types = await pMapSeries(node.types, async (type) => {
|
|
20
|
+
const typeSchema = context.computeSchema(type);
|
|
21
|
+
return typeSchema;
|
|
22
|
+
});
|
|
23
|
+
const location = context.getLocation(node);
|
|
24
|
+
return new TypeUnionSchema(location, types);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/* eslint-disable complexity */
|
|
2
|
+
/* eslint-disable no-fallthrough */
|
|
3
|
+
import type { JSDocParameterTag, JSDocPropertyLikeTag, JSDocPropertyTag, JSDocReturnTag, JSDocTag } from 'typescript';
|
|
4
|
+
import { getTextOfJSDocComment, SyntaxKind } from 'typescript';
|
|
5
|
+
import {
|
|
6
|
+
PropertyLikeTagSchema,
|
|
7
|
+
ReturnTagSchema,
|
|
8
|
+
TagName,
|
|
9
|
+
TagSchema,
|
|
10
|
+
} from '@teambit/semantics.entities.semantic-schema';
|
|
11
|
+
import type { Formatter } from '@teambit/formatter';
|
|
12
|
+
import type { SchemaExtractorContext } from '../../schema-extractor-context';
|
|
13
|
+
|
|
14
|
+
export async function tagParser(
|
|
15
|
+
tag: JSDocTag,
|
|
16
|
+
context: SchemaExtractorContext,
|
|
17
|
+
formatter?: Formatter
|
|
18
|
+
): Promise<TagSchema> {
|
|
19
|
+
// for some reason, in some cases, if `tag.getSourceFile()` is not provided to the `getText()`, it throws "Cannot read property 'text' of undefined"
|
|
20
|
+
switch (tag.kind) {
|
|
21
|
+
case SyntaxKind.JSDocReturnTag:
|
|
22
|
+
return returnTag(tag as JSDocReturnTag, context);
|
|
23
|
+
case SyntaxKind.JSDocPropertyTag:
|
|
24
|
+
return propertyLikeTag(tag as JSDocPropertyTag, context);
|
|
25
|
+
case SyntaxKind.JSDocParameterTag:
|
|
26
|
+
return propertyLikeTag(tag as JSDocParameterTag, context);
|
|
27
|
+
case SyntaxKind.JSDocAugmentsTag:
|
|
28
|
+
return simpleTag(tag, TagName.augments, context);
|
|
29
|
+
case SyntaxKind.JSDocAuthorTag:
|
|
30
|
+
return simpleTag(tag, TagName.author, context);
|
|
31
|
+
case SyntaxKind.JSDocClassTag:
|
|
32
|
+
return simpleTag(tag, TagName.class, context);
|
|
33
|
+
case SyntaxKind.JSDocCallbackTag:
|
|
34
|
+
return simpleTag(tag, TagName.callback, context);
|
|
35
|
+
case SyntaxKind.JSDocPublicTag:
|
|
36
|
+
return simpleTag(tag, TagName.public, context);
|
|
37
|
+
case SyntaxKind.JSDocPrivateTag:
|
|
38
|
+
return simpleTag(tag, TagName.private, context);
|
|
39
|
+
case SyntaxKind.JSDocProtectedTag:
|
|
40
|
+
return simpleTag(tag, TagName.protected, context);
|
|
41
|
+
case SyntaxKind.JSDocReadonlyTag:
|
|
42
|
+
return simpleTag(tag, TagName.readonly, context);
|
|
43
|
+
case SyntaxKind.JSDocOverrideTag:
|
|
44
|
+
return simpleTag(tag, TagName.override, context);
|
|
45
|
+
case SyntaxKind.JSDocDeprecatedTag:
|
|
46
|
+
return simpleTag(tag, TagName.deprecated, context);
|
|
47
|
+
case SyntaxKind.JSDocSeeTag:
|
|
48
|
+
return simpleTag(tag, TagName.see, context);
|
|
49
|
+
case SyntaxKind.JSDocEnumTag:
|
|
50
|
+
return simpleTag(tag, TagName.enum, context);
|
|
51
|
+
case SyntaxKind.JSDocThisTag:
|
|
52
|
+
return simpleTag(tag, TagName.this, context);
|
|
53
|
+
case SyntaxKind.JSDocTypeTag:
|
|
54
|
+
return simpleTag(tag, TagName.type, context);
|
|
55
|
+
case SyntaxKind.JSDocTemplateTag:
|
|
56
|
+
return simpleTag(tag, TagName.template, context);
|
|
57
|
+
case SyntaxKind.JSDocTypedefTag:
|
|
58
|
+
return simpleTag(tag, TagName.typedef, context);
|
|
59
|
+
case SyntaxKind.JSDocImplementsTag:
|
|
60
|
+
return simpleTag(tag, TagName.implements, context);
|
|
61
|
+
default: {
|
|
62
|
+
const tagName: TagName | string = tag.tagName.getText(tag.getSourceFile());
|
|
63
|
+
if (tagName === 'example') {
|
|
64
|
+
const comment = getTextOfJSDocComment(tag.comment);
|
|
65
|
+
if (!formatter) return simpleTag(tag, tagName, context);
|
|
66
|
+
try {
|
|
67
|
+
const extractedSnippetToFormat = comment && extractCodeBlock(comment);
|
|
68
|
+
const formattedComment =
|
|
69
|
+
extractedSnippetToFormat && (await formatter.formatSnippet(extractedSnippetToFormat.code));
|
|
70
|
+
return new TagSchema(context.getLocation(tag), tagName, formattedComment ?? undefined);
|
|
71
|
+
} catch {
|
|
72
|
+
return simpleTag(tag, tagName, context);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return simpleTag(tag, tagName, context);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function simpleTag(tag: JSDocTag, tagName: TagName | string, context: SchemaExtractorContext): TagSchema {
|
|
82
|
+
return new TagSchema(context.getLocation(tag), tagName, getTextOfJSDocComment(tag.comment));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async function returnTag(tag: JSDocReturnTag, context: SchemaExtractorContext) {
|
|
86
|
+
const type = tag.typeExpression?.type ? await context.computeSchema(tag.typeExpression?.type) : undefined;
|
|
87
|
+
return new ReturnTagSchema(context.getLocation(tag), getTextOfJSDocComment(tag.comment), type);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async function propertyLikeTag(tag: JSDocPropertyLikeTag, context: SchemaExtractorContext) {
|
|
91
|
+
const type = tag.typeExpression?.type ? await context.computeSchema(tag.typeExpression?.type) : undefined;
|
|
92
|
+
return new PropertyLikeTagSchema(
|
|
93
|
+
context.getLocation(tag),
|
|
94
|
+
tag.name.getText(),
|
|
95
|
+
getTextOfJSDocComment(tag.comment),
|
|
96
|
+
type
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function extractCodeBlock(text: string): { lang: string; code: string } | null {
|
|
101
|
+
let processedText = text;
|
|
102
|
+
if (text.endsWith(';') && !text.endsWith('```')) {
|
|
103
|
+
processedText = text.slice(0, -1) + '```';
|
|
104
|
+
}
|
|
105
|
+
const regex = /```([\w+-]*)\s*([\s\S]*?)```/;
|
|
106
|
+
const match = processedText.match(regex);
|
|
107
|
+
|
|
108
|
+
if (match) {
|
|
109
|
+
const lang = match[1];
|
|
110
|
+
const code = match[2];
|
|
111
|
+
return { lang, code };
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type ts from 'typescript/lib/tsserverlibrary';
|
|
2
|
+
|
|
3
|
+
export const UNRESOLVED = '<<unresolved>>';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* try to parse the type from the quickinfo.
|
|
7
|
+
* this is an error-prone process, we do our best here.
|
|
8
|
+
*
|
|
9
|
+
* an example of a function with many ":"
|
|
10
|
+
* `export function getObj(a: string, func: (b: number) => {}) { return { a: 1, b: 2 } };`
|
|
11
|
+
* which produce the following quickinfo:
|
|
12
|
+
* ```ts
|
|
13
|
+
* function getObj(a: string, func: (b: number) => {}): {
|
|
14
|
+
* a: number;
|
|
15
|
+
* b: number;
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* some examples of quickinfo:
|
|
20
|
+
*
|
|
21
|
+
* function ts.signatureToDisplayParts(typechecker: TypeChecker, signature: Signature, enclosingDeclaration?: Node | undefined, flags?: TypeFormatFlags): SymbolDisplayPart[]
|
|
22
|
+
*
|
|
23
|
+
* const enum ts.TypeFormatFlags
|
|
24
|
+
*
|
|
25
|
+
* (method) ts.TypeChecker.writeSignature(signature: Signature, enclosingDeclaration?: Node | undefined, flags?: TypeFormatFlags | undefined, kind?: SignatureKind | undefined, writer?: EmitTextWriter | undefined): string
|
|
26
|
+
*
|
|
27
|
+
* const obj: {
|
|
28
|
+
* a: number;
|
|
29
|
+
* b: number;
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* function getObj(a: string): {
|
|
33
|
+
* a: number;
|
|
34
|
+
* b: number;
|
|
35
|
+
* }
|
|
36
|
+
*/
|
|
37
|
+
export function parseTypeFromQuickInfo(quickInfo: ts.server.protocol.QuickInfoResponse | undefined): string {
|
|
38
|
+
if (!quickInfo?.body?.displayString) return '';
|
|
39
|
+
const displayString = quickInfo.body.displayString;
|
|
40
|
+
const splitByColon = displayString.split(':');
|
|
41
|
+
switch (quickInfo.body.kind) {
|
|
42
|
+
case 'type parameter':
|
|
43
|
+
// (type parameter) T in concat<T, K, V>(array1: T[], array2: T[]): T[]
|
|
44
|
+
return displayString.replace(`(${quickInfo.body.kind}) `, '').split(' ')[0];
|
|
45
|
+
case 'const':
|
|
46
|
+
case 'property':
|
|
47
|
+
case 'let':
|
|
48
|
+
case 'getter':
|
|
49
|
+
case 'var': {
|
|
50
|
+
const [, ...tail] = splitByColon;
|
|
51
|
+
return tail.join(':').trim();
|
|
52
|
+
}
|
|
53
|
+
case 'method':
|
|
54
|
+
case 'function': {
|
|
55
|
+
const split = displayString.split('): ');
|
|
56
|
+
if (split.length !== 2) {
|
|
57
|
+
// it's hard to determine where the return-type is. so it's better to show unresolved.
|
|
58
|
+
// maybe, in the UI, in this case, it's best to show the signature.
|
|
59
|
+
// e.g.
|
|
60
|
+
// (method) IssuesList.getIssue<T extends ComponentIssue>(IssueClass: {
|
|
61
|
+
// new (): T;
|
|
62
|
+
// }): T | undefined
|
|
63
|
+
return UNRESOLVED;
|
|
64
|
+
}
|
|
65
|
+
return split[1].trim();
|
|
66
|
+
}
|
|
67
|
+
case 'alias': {
|
|
68
|
+
// e.g. (alias) class BuilderService\nimport BuilderService
|
|
69
|
+
// e.g. '(alias) type Serializable = {\n' +
|
|
70
|
+
// ' toString(): string;\n' +
|
|
71
|
+
// '}\n' +
|
|
72
|
+
// 'import Serializable'
|
|
73
|
+
const firstLine = displayString.split('\n')[0];
|
|
74
|
+
const splitBySpace = firstLine.trim().split(' ');
|
|
75
|
+
// first two are alias keyword and alias type
|
|
76
|
+
const [, , typeName] = splitBySpace;
|
|
77
|
+
return typeName;
|
|
78
|
+
}
|
|
79
|
+
case 'type': {
|
|
80
|
+
// e.g. `type TaskSlot = SlotRegistry<BuildTask[]>`
|
|
81
|
+
const splitByEqual = displayString.split('=');
|
|
82
|
+
const [, ...tail] = splitByEqual;
|
|
83
|
+
return tail.join('=').trim();
|
|
84
|
+
}
|
|
85
|
+
case 'parameter': {
|
|
86
|
+
const typeColonIndex = displayString.indexOf(':');
|
|
87
|
+
return displayString.slice(typeColonIndex + 1).trim();
|
|
88
|
+
}
|
|
89
|
+
default:
|
|
90
|
+
return splitByColon[splitByColon.length - 1].trim();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function parseReturnTypeFromQuickInfo(quickInfo: ts.server.protocol.QuickInfoResponse | undefined): string {
|
|
95
|
+
if (!quickInfo) return '';
|
|
96
|
+
const typeStr = parseTypeFromQuickInfo(quickInfo);
|
|
97
|
+
const array = typeStr.split('=>');
|
|
98
|
+
return array[array.length - 1].trim();
|
|
99
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { SchemaNode, Modifier } from '@teambit/semantics.entities.semantic-schema';
|
|
2
|
+
import {
|
|
3
|
+
VariableLikeSchema,
|
|
4
|
+
FunctionLikeSchema,
|
|
5
|
+
ParameterSchema,
|
|
6
|
+
TypeRefSchema,
|
|
7
|
+
} from '@teambit/semantics.entities.semantic-schema';
|
|
8
|
+
import type { Node, VariableDeclaration as VariableDeclarationNode, ArrowFunction } from 'typescript';
|
|
9
|
+
import ts from 'typescript';
|
|
10
|
+
import pMapSeries from 'p-map-series';
|
|
11
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
12
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
13
|
+
import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
|
|
14
|
+
import { Identifier } from '../identifier';
|
|
15
|
+
import { ParameterTransformer } from './parameter';
|
|
16
|
+
|
|
17
|
+
export class VariableDeclaration implements SchemaTransformer {
|
|
18
|
+
predicate(node: Node) {
|
|
19
|
+
return node.kind === ts.SyntaxKind.VariableDeclaration;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getName(node: VariableDeclarationNode) {
|
|
23
|
+
return node.name.getText();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async getIdentifiers(node: VariableDeclarationNode) {
|
|
27
|
+
return [new Identifier(node.name.getText(), node.getSourceFile().fileName)];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async transform(varDec: VariableDeclarationNode, context: SchemaExtractorContext): Promise<SchemaNode> {
|
|
31
|
+
const name = this.getName(varDec);
|
|
32
|
+
const info = await context.getQuickInfo(varDec.name);
|
|
33
|
+
const displaySig = info?.body?.displayString || '';
|
|
34
|
+
const location = context.getLocation(varDec);
|
|
35
|
+
const doc = await context.jsDocToDocSchema(varDec);
|
|
36
|
+
const nodeModifiers = ts.canHaveModifiers(varDec) ? ts.getModifiers(varDec) : undefined;
|
|
37
|
+
const modifiers = nodeModifiers?.map((modifier) => modifier.getText()) || [];
|
|
38
|
+
if (varDec.initializer?.kind === ts.SyntaxKind.ArrowFunction) {
|
|
39
|
+
const functionLikeInfo = await context.getQuickInfo((varDec.initializer as ArrowFunction).equalsGreaterThanToken);
|
|
40
|
+
const returnTypeStr = functionLikeInfo ? parseTypeFromQuickInfo(functionLikeInfo) : 'any';
|
|
41
|
+
// example => export const useLanesContext: () => LanesContextModel | undefined = () => {
|
|
42
|
+
if (varDec.type) {
|
|
43
|
+
const funcType = await context.resolveType(varDec, '');
|
|
44
|
+
if (isFunctionLike(funcType)) {
|
|
45
|
+
return new FunctionLikeSchema(
|
|
46
|
+
location,
|
|
47
|
+
name,
|
|
48
|
+
funcType.params,
|
|
49
|
+
funcType.returnType,
|
|
50
|
+
functionLikeInfo?.body?.displayString || '',
|
|
51
|
+
modifiers as Modifier[],
|
|
52
|
+
doc
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
// e.g. export const MyComponent: React.FC<T> = ({}) => {}
|
|
56
|
+
if (funcType instanceof TypeRefSchema) {
|
|
57
|
+
const paramTypes = funcType.typeArgs;
|
|
58
|
+
const params = (varDec.initializer as ArrowFunction).parameters;
|
|
59
|
+
const paramsSchema = await pMapSeries(params, async (param, index) => {
|
|
60
|
+
const objectBindingNodes = await ParameterTransformer.getObjectBindingNodes(
|
|
61
|
+
param,
|
|
62
|
+
paramTypes?.[index] ?? funcType,
|
|
63
|
+
context
|
|
64
|
+
);
|
|
65
|
+
return new ParameterSchema(
|
|
66
|
+
location,
|
|
67
|
+
ParameterTransformer.getName(param),
|
|
68
|
+
paramTypes?.[index] ?? funcType,
|
|
69
|
+
Boolean(param.questionToken),
|
|
70
|
+
param.initializer ? param.initializer.getText() : undefined,
|
|
71
|
+
undefined,
|
|
72
|
+
objectBindingNodes,
|
|
73
|
+
Boolean(param.dotDotDotToken)
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
return new FunctionLikeSchema(
|
|
78
|
+
location,
|
|
79
|
+
name,
|
|
80
|
+
paramsSchema,
|
|
81
|
+
await context.resolveType(varDec.initializer, returnTypeStr),
|
|
82
|
+
functionLikeInfo?.body?.displayString || '',
|
|
83
|
+
modifiers as Modifier[],
|
|
84
|
+
doc
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const args = (await pMapSeries((varDec.initializer as ArrowFunction).parameters, async (param) =>
|
|
89
|
+
context.computeSchema(param)
|
|
90
|
+
)) as ParameterSchema[];
|
|
91
|
+
return new FunctionLikeSchema(
|
|
92
|
+
location,
|
|
93
|
+
name,
|
|
94
|
+
args,
|
|
95
|
+
await context.resolveType(varDec.initializer, returnTypeStr),
|
|
96
|
+
functionLikeInfo?.body?.displayString || '',
|
|
97
|
+
modifiers as Modifier[],
|
|
98
|
+
doc
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
const typeStr = parseTypeFromQuickInfo(info);
|
|
102
|
+
const type = await context.resolveType(varDec, typeStr);
|
|
103
|
+
const defaultValue = varDec.initializer ? varDec.initializer.getText() : undefined;
|
|
104
|
+
|
|
105
|
+
return new VariableLikeSchema(location, name, displaySig, type, false, doc, defaultValue);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function isFunctionLike(node: SchemaNode): node is FunctionLikeSchema {
|
|
110
|
+
return node instanceof FunctionLikeSchema;
|
|
111
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { SchemaNode } from '@teambit/semantics.entities.semantic-schema';
|
|
2
|
+
import { ModuleSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { compact } from 'lodash';
|
|
4
|
+
import pMapSeries from 'p-map-series';
|
|
5
|
+
import type { Node, VariableStatement } from 'typescript';
|
|
6
|
+
import ts from 'typescript';
|
|
7
|
+
import type { SchemaTransformer } from '../schema-transformer';
|
|
8
|
+
import type { SchemaExtractorContext } from '../schema-extractor-context';
|
|
9
|
+
import { Identifier } from '../identifier';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* variable statement is a collection of variable declarations.
|
|
13
|
+
* e.g. `export const a = 1, b = () => {}, c = {};`
|
|
14
|
+
*/
|
|
15
|
+
export class VariableStatementTransformer implements SchemaTransformer {
|
|
16
|
+
predicate(node: Node) {
|
|
17
|
+
return node.kind === ts.SyntaxKind.VariableStatement;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async getIdentifiers(node: VariableStatement) {
|
|
21
|
+
return node.declarationList.declarations.map((dec) => {
|
|
22
|
+
return new Identifier(dec.name.getText(), dec.getSourceFile().fileName);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async transform(node: VariableStatement, context: SchemaExtractorContext): Promise<SchemaNode> {
|
|
27
|
+
const schemas = await pMapSeries(node.declarationList.declarations, async (dec) => {
|
|
28
|
+
// this will get the schema from variable-declaration
|
|
29
|
+
const schema = await context.visitDefinition(dec.name);
|
|
30
|
+
return schema;
|
|
31
|
+
});
|
|
32
|
+
return new ModuleSchema(context.getLocation(node), compact(schemas), []);
|
|
33
|
+
}
|
|
34
|
+
}
|
package/types/asset.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
declare module '*.png' {
|
|
2
|
+
const value: any;
|
|
3
|
+
export = value;
|
|
4
|
+
}
|
|
5
|
+
declare module '*.svg' {
|
|
6
|
+
import type { FunctionComponent, SVGProps } from 'react';
|
|
7
|
+
|
|
8
|
+
export const ReactComponent: FunctionComponent<
|
|
9
|
+
SVGProps<SVGSVGElement> & { title?: string }
|
|
10
|
+
>;
|
|
11
|
+
const src: string;
|
|
12
|
+
export default src;
|
|
13
|
+
}
|
|
14
|
+
declare module '*.jpg' {
|
|
15
|
+
const value: any;
|
|
16
|
+
export = value;
|
|
17
|
+
}
|
|
18
|
+
declare module '*.jpeg' {
|
|
19
|
+
const value: any;
|
|
20
|
+
export = value;
|
|
21
|
+
}
|
|
22
|
+
declare module '*.gif' {
|
|
23
|
+
const value: any;
|
|
24
|
+
export = value;
|
|
25
|
+
}
|
|
26
|
+
declare module '*.bmp' {
|
|
27
|
+
const value: any;
|
|
28
|
+
export = value;
|
|
29
|
+
}
|
|
30
|
+
declare module '*.otf' {
|
|
31
|
+
const value: any;
|
|
32
|
+
export = value;
|
|
33
|
+
}
|
|
34
|
+
declare module '*.woff' {
|
|
35
|
+
const value: any;
|
|
36
|
+
export = value;
|
|
37
|
+
}
|
|
38
|
+
declare module '*.woff2' {
|
|
39
|
+
const value: any;
|
|
40
|
+
export = value;
|
|
41
|
+
}
|
package/types/style.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
declare module '*.module.css' {
|
|
2
|
+
const classes: { readonly [key: string]: string };
|
|
3
|
+
export default classes;
|
|
4
|
+
}
|
|
5
|
+
declare module '*.module.scss' {
|
|
6
|
+
const classes: { readonly [key: string]: string };
|
|
7
|
+
export default classes;
|
|
8
|
+
}
|
|
9
|
+
declare module '*.module.sass' {
|
|
10
|
+
const classes: { readonly [key: string]: string };
|
|
11
|
+
export default classes;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
declare module '*.module.less' {
|
|
15
|
+
const classes: { readonly [key: string]: string };
|
|
16
|
+
export default classes;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare module '*.less' {
|
|
20
|
+
const classes: { readonly [key: string]: string };
|
|
21
|
+
export default classes;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
declare module '*.css' {
|
|
25
|
+
const classes: { readonly [key: string]: string };
|
|
26
|
+
export default classes;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
declare module '*.sass' {
|
|
30
|
+
const classes: { readonly [key: string]: string };
|
|
31
|
+
export default classes;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
declare module '*.scss' {
|
|
35
|
+
const classes: { readonly [key: string]: string };
|
|
36
|
+
export default classes;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
declare module '*.mdx' {
|
|
40
|
+
const component: any;
|
|
41
|
+
export default component;
|
|
42
|
+
}
|