@teambit/typescript 0.0.965 → 0.0.967
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/dist/export-identifier.d.ts +5 -4
- package/dist/export-identifier.js +23 -4
- package/dist/export-identifier.js.map +1 -1
- 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 +9 -0
- package/dist/identifier.js +30 -0
- package/dist/identifier.js.map +1 -0
- package/dist/{preview-1674271762484.js → preview-1674617375675.js} +2 -2
- package/dist/schema-extractor-context.d.ts +40 -8
- package/dist/schema-extractor-context.js +243 -101
- package/dist/schema-extractor-context.js.map +1 -1
- package/dist/schema-transformer.d.ts +2 -2
- package/dist/schema-transformer.js.map +1 -1
- package/dist/transformers/array-type.d.ts +10 -0
- package/dist/transformers/array-type.js +38 -0
- package/dist/transformers/array-type.js.map +1 -0
- package/dist/transformers/binding-element.d.ts +2 -2
- package/dist/transformers/binding-element.js +7 -7
- package/dist/transformers/binding-element.js.map +1 -1
- package/dist/transformers/class-declaration.d.ts +2 -2
- package/dist/transformers/class-declaration.js +6 -20
- package/dist/transformers/class-declaration.js.map +1 -1
- package/dist/transformers/conditional-type.d.ts +10 -0
- package/dist/transformers/conditional-type.js +39 -0
- package/dist/transformers/conditional-type.js.map +1 -0
- package/dist/transformers/constructor.d.ts +10 -0
- package/dist/transformers/constructor.js +50 -0
- package/dist/transformers/constructor.js.map +1 -0
- package/dist/transformers/enum-declaration.d.ts +2 -2
- package/dist/transformers/enum-declaration.js +4 -4
- package/dist/transformers/enum-declaration.js.map +1 -1
- package/dist/transformers/{export-assignment-declaration.d.ts → export-assignment.d.ts} +7 -2
- package/dist/transformers/export-assignment.js +41 -0
- package/dist/transformers/export-assignment.js.map +1 -0
- package/dist/transformers/export-declaration.d.ts +2 -3
- package/dist/transformers/export-declaration.js +21 -10
- package/dist/transformers/export-declaration.js.map +1 -1
- package/dist/transformers/function-like.d.ts +11 -0
- package/dist/transformers/function-like.js +82 -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 +48 -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 +74 -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 +45 -0
- package/dist/transformers/index-signature.js.map +1 -0
- package/dist/transformers/index.d.ts +28 -3
- package/dist/transformers/index.js +337 -12
- package/dist/transformers/index.js.map +1 -1
- package/dist/transformers/indexed-access-type.d.ts +10 -0
- package/dist/transformers/indexed-access-type.js +37 -0
- package/dist/transformers/indexed-access-type.js.map +1 -0
- package/dist/transformers/interface-declaration.d.ts +2 -2
- package/dist/transformers/interface-declaration.js +6 -20
- package/dist/transformers/interface-declaration.js.map +1 -1
- package/dist/transformers/intersection-type.d.ts +10 -0
- package/dist/transformers/intersection-type.js +48 -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 +55 -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 +40 -0
- package/dist/transformers/literal-type.js.map +1 -0
- package/dist/transformers/named-tuple.d.ts +10 -0
- package/dist/transformers/named-tuple.js +38 -0
- package/dist/transformers/named-tuple.js.map +1 -0
- package/dist/transformers/parameter.d.ts +13 -0
- package/dist/transformers/parameter.js +112 -0
- package/dist/transformers/parameter.js.map +1 -0
- package/dist/transformers/parenthesized-type.d.ts +10 -0
- package/dist/transformers/parenthesized-type.js +36 -0
- package/dist/transformers/parenthesized-type.js.map +1 -0
- package/dist/transformers/property-declaration.d.ts +11 -0
- package/dist/transformers/property-declaration.js +57 -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 +45 -0
- package/dist/transformers/set-accessor.js.map +1 -0
- package/dist/transformers/source-file-transformer.d.ts +3 -2
- package/dist/transformers/source-file-transformer.js +44 -15
- package/dist/transformers/source-file-transformer.js.map +1 -1
- package/dist/transformers/template-literal-type-span.d.ts +10 -0
- package/dist/transformers/template-literal-type-span.js +37 -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 +45 -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 +35 -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 +47 -0
- package/dist/transformers/tuple-type.js.map +1 -0
- package/dist/transformers/type-alias.d.ts +2 -2
- package/dist/transformers/type-alias.js +5 -12
- package/dist/transformers/type-alias.js.map +1 -1
- package/dist/transformers/type-literal.d.ts +14 -0
- package/dist/transformers/type-literal.js +49 -0
- package/dist/transformers/type-literal.js.map +1 -0
- package/dist/transformers/type-operator.d.ts +14 -0
- package/dist/transformers/type-operator.js +52 -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 +38 -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 +42 -0
- package/dist/transformers/type-query.js.map +1 -0
- package/dist/transformers/type-reference.d.ts +16 -0
- package/dist/transformers/type-reference.js +56 -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 +48 -0
- package/dist/transformers/union-type.js.map +1 -0
- package/dist/transformers/utils/jsdoc-to-doc-schema.js +2 -10
- package/dist/transformers/utils/jsdoc-to-doc-schema.js.map +1 -1
- package/dist/transformers/variable-declaration.d.ts +2 -2
- package/dist/transformers/variable-declaration.js +11 -11
- package/dist/transformers/variable-declaration.js.map +1 -1
- package/dist/transformers/variable-statement.d.ts +2 -2
- package/dist/transformers/variable-statement.js +5 -5
- package/dist/transformers/variable-statement.js.map +1 -1
- package/dist/typescript.extractor.d.ts +10 -4
- package/dist/typescript.extractor.js +70 -17
- package/dist/typescript.extractor.js.map +1 -1
- package/dist/typescript.main.runtime.d.ts +4 -2
- package/dist/typescript.main.runtime.js +5 -11
- package/dist/typescript.main.runtime.js.map +1 -1
- package/package-tar/teambit-typescript-0.0.967.tgz +0 -0
- package/package.json +17 -17
- package/transformers/array-type.ts +21 -0
- package/transformers/binding-element.ts +2 -2
- package/transformers/class-declaration.ts +4 -6
- package/transformers/conditional-type.ts +23 -0
- package/transformers/constructor.ts +40 -0
- package/transformers/enum-declaration.ts +3 -3
- package/transformers/{export-assignment-declaration.ts → export-assignment.ts} +9 -3
- package/transformers/export-declaration.ts +35 -8
- package/transformers/function-like.ts +65 -0
- package/transformers/get-accessor.ts +24 -0
- package/transformers/import-declaration.ts +56 -0
- package/transformers/index-signature.ts +24 -0
- package/transformers/index.ts +28 -3
- package/transformers/indexed-access-type.ts +21 -0
- package/transformers/interface-declaration.ts +5 -7
- package/transformers/intersection-type.ts +25 -0
- package/transformers/keyword-type.ts +39 -0
- package/transformers/literal-type.ts +23 -0
- package/transformers/named-tuple.ts +22 -0
- package/transformers/parameter.ts +110 -0
- package/transformers/parenthesized-type.ts +20 -0
- package/transformers/property-declaration.ts +33 -0
- package/transformers/set-accessor.ts +25 -0
- package/transformers/source-file-transformer.ts +56 -24
- package/transformers/template-literal-type-span.ts +21 -0
- package/transformers/template-literal-type.ts +24 -0
- package/transformers/this-type.ts +19 -0
- package/transformers/tuple-type.ts +24 -0
- package/transformers/type-alias.ts +3 -4
- package/transformers/type-literal.ts +26 -0
- package/transformers/type-operator.ts +37 -0
- package/transformers/type-predicate.ts +22 -0
- package/transformers/type-query.ts +25 -0
- package/transformers/type-reference.ts +33 -0
- package/transformers/union-type.ts +25 -0
- package/transformers/utils/jsdoc-to-doc-schema.ts +2 -4
- package/transformers/variable-declaration.ts +7 -4
- package/transformers/variable-statement.ts +3 -3
- package/dist/export-list.d.ts +0 -6
- package/dist/export-list.js +0 -17
- package/dist/export-list.js.map +0 -1
- package/dist/transformers/export-assignment-declaration.js +0 -29
- package/dist/transformers/export-assignment-declaration.js.map +0 -1
- package/dist/transformers/function-declaration.d.ts +0 -11
- package/dist/transformers/function-declaration.js +0 -49
- package/dist/transformers/function-declaration.js.map +0 -1
- package/dist/transformers/utils/class-element-to-schema.d.ts +0 -4
- package/dist/transformers/utils/class-element-to-schema.js +0 -95
- package/dist/transformers/utils/class-element-to-schema.js.map +0 -1
- package/dist/transformers/utils/get-params.d.ts +0 -4
- package/dist/transformers/utils/get-params.js +0 -100
- package/dist/transformers/utils/get-params.js.map +0 -1
- package/dist/transformers/utils/to-function-like-schema.d.ts +0 -4
- package/dist/transformers/utils/to-function-like-schema.js +0 -58
- package/dist/transformers/utils/to-function-like-schema.js.map +0 -1
- package/dist/transformers/utils/type-element-to-schema.d.ts +0 -7
- package/dist/transformers/utils/type-element-to-schema.js +0 -106
- package/dist/transformers/utils/type-element-to-schema.js.map +0 -1
- package/dist/transformers/utils/type-node-to-schema.d.ts +0 -4
- package/dist/transformers/utils/type-node-to-schema.js +0 -274
- package/dist/transformers/utils/type-node-to-schema.js.map +0 -1
- package/package-tar/teambit-typescript-0.0.965.tgz +0 -0
- package/transformers/function-declaration.ts +0 -25
- package/transformers/utils/class-element-to-schema.ts +0 -64
- package/transformers/utils/get-params.ts +0 -92
- package/transformers/utils/to-function-like-schema.ts +0 -39
- package/transformers/utils/type-element-to-schema.ts +0 -79
- package/transformers/utils/type-node-to-schema.ts +0 -294
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { FunctionLikeSchema, ParameterSchema, SchemaNode, Modifier } from '@teambit/semantics.entities.semantic-schema';
|
|
2
|
+
import ts, { Node, SignatureDeclaration } from 'typescript';
|
|
3
|
+
import pMapSeries from 'p-map-series';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
6
|
+
import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
|
|
7
|
+
import { Identifier } from '../identifier';
|
|
8
|
+
|
|
9
|
+
export class FunctionLikeTransformer implements SchemaTransformer {
|
|
10
|
+
predicate(node: Node) {
|
|
11
|
+
return (
|
|
12
|
+
node.kind === ts.SyntaxKind.FunctionDeclaration ||
|
|
13
|
+
node.kind === ts.SyntaxKind.ArrowFunction ||
|
|
14
|
+
node.kind === ts.SyntaxKind.MethodDeclaration ||
|
|
15
|
+
node.kind === ts.SyntaxKind.CallSignature ||
|
|
16
|
+
node.kind === ts.SyntaxKind.ConstructSignature ||
|
|
17
|
+
node.kind === ts.SyntaxKind.IndexSignature ||
|
|
18
|
+
node.kind === ts.SyntaxKind.FunctionType ||
|
|
19
|
+
node.kind === ts.SyntaxKind.MethodSignature
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// need to check for anonymous functions assigned for vars, const and let.
|
|
24
|
+
async getIdentifiers(funcDec: SignatureDeclaration) {
|
|
25
|
+
return [new Identifier(this.getName(funcDec), funcDec.getSourceFile().fileName)];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private getName(funcDec: SignatureDeclaration) {
|
|
29
|
+
if (funcDec.kind === ts.SyntaxKind.ConstructSignature) return 'new';
|
|
30
|
+
return funcDec.name?.getText() || '';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async transform(node: SignatureDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
|
|
34
|
+
const name = this.getName(node);
|
|
35
|
+
const getQuickInfoFromDefaultModifier = async () => {
|
|
36
|
+
const defaultModifier = node.modifiers?.find((modifier) => modifier.kind === ts.SyntaxKind.DefaultKeyword);
|
|
37
|
+
if (defaultModifier) return context.getQuickInfo(defaultModifier);
|
|
38
|
+
if (node.kind === ts.SyntaxKind.ArrowFunction) return context.getQuickInfo(node.equalsGreaterThanToken);
|
|
39
|
+
return null;
|
|
40
|
+
};
|
|
41
|
+
const info = node.name ? await context.getQuickInfo(node.name) : await getQuickInfoFromDefaultModifier();
|
|
42
|
+
const returnTypeStr = info ? parseTypeFromQuickInfo(info) : 'any';
|
|
43
|
+
const displaySig = info?.body?.displayString || '';
|
|
44
|
+
const args = (await pMapSeries(node.parameters, async (param) =>
|
|
45
|
+
context.computeSchema(param)
|
|
46
|
+
)) as ParameterSchema[];
|
|
47
|
+
|
|
48
|
+
const returnType = await context.resolveType(node, returnTypeStr, Boolean(info));
|
|
49
|
+
const modifiers = node.modifiers?.map((modifier) => modifier.getText()) || [];
|
|
50
|
+
const typeParameters = node.typeParameters?.map((typeParam) => typeParam.name.getText());
|
|
51
|
+
const location = context.getLocation(node);
|
|
52
|
+
const doc = await context.jsDocToDocSchema(node);
|
|
53
|
+
|
|
54
|
+
return new FunctionLikeSchema(
|
|
55
|
+
location,
|
|
56
|
+
name,
|
|
57
|
+
args,
|
|
58
|
+
returnType,
|
|
59
|
+
displaySig,
|
|
60
|
+
modifiers as Modifier[],
|
|
61
|
+
doc,
|
|
62
|
+
typeParameters
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import ts, { Node, GetAccessorDeclaration } from 'typescript';
|
|
2
|
+
import { GetAccessorSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
|
|
6
|
+
import { Identifier } from '../identifier';
|
|
7
|
+
|
|
8
|
+
export class GetAccessorTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === ts.SyntaxKind.GetAccessor;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async transform(node: GetAccessorDeclaration, context: SchemaExtractorContext) {
|
|
18
|
+
const info = await context.getQuickInfo(node.name);
|
|
19
|
+
const displaySig = info?.body?.displayString || '';
|
|
20
|
+
const typeStr = parseTypeFromQuickInfo(info);
|
|
21
|
+
const type = await context.resolveType(node, typeStr);
|
|
22
|
+
return new GetAccessorSchema(context.getLocation(node), node.name.getText(), type, displaySig);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ImportDeclaration, Node, SyntaxKind } from 'typescript';
|
|
2
|
+
import { UnImplementedSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { Identifier } from '../identifier';
|
|
6
|
+
|
|
7
|
+
export class ImportDeclarationTransformer implements SchemaTransformer {
|
|
8
|
+
predicate(node: Node) {
|
|
9
|
+
return node.kind === SyntaxKind.ImportDeclaration;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async getIdentifiers(importDec: ImportDeclaration): Promise<Identifier[]> {
|
|
13
|
+
if (!importDec.importClause) return [];
|
|
14
|
+
|
|
15
|
+
const sourceFile = importDec.getSourceFile().fileName;
|
|
16
|
+
const rawSourceFilePath = importDec.moduleSpecifier.getText();
|
|
17
|
+
const sourceFilePath = rawSourceFilePath.substring(1, rawSourceFilePath.length - 1);
|
|
18
|
+
|
|
19
|
+
// import A from 'a'
|
|
20
|
+
if (!importDec.importClause.namedBindings) {
|
|
21
|
+
return [new Identifier(importDec.importClause.getText(), sourceFile, undefined, sourceFilePath)];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// import { A } from 'a'
|
|
25
|
+
if (importDec.importClause.namedBindings?.kind === SyntaxKind.NamedImports) {
|
|
26
|
+
const { elements } = importDec.importClause.namedBindings;
|
|
27
|
+
|
|
28
|
+
return elements.map(({ name, propertyName }) => {
|
|
29
|
+
const id = propertyName?.getText() || name.getText();
|
|
30
|
+
const alias = (propertyName && name.getText()) || undefined;
|
|
31
|
+
const identifier = new Identifier(id, sourceFile, alias, sourceFilePath);
|
|
32
|
+
return identifier;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// import * as A from 'a';
|
|
37
|
+
if (importDec.importClause.namedBindings.kind === SyntaxKind.NamespaceImport) {
|
|
38
|
+
return [
|
|
39
|
+
new Identifier(
|
|
40
|
+
importDec.importClause.namedBindings.name.getText(),
|
|
41
|
+
sourceFile,
|
|
42
|
+
undefined,
|
|
43
|
+
importDec.moduleSpecifier.getText()
|
|
44
|
+
),
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async transform(node: ImportDeclaration, context: SchemaExtractorContext) {
|
|
52
|
+
const location = context.getLocation(node);
|
|
53
|
+
|
|
54
|
+
return new UnImplementedSchema(location, node.getText(), node.kind.toString());
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import ts, { Node, IndexSignatureDeclaration } from 'typescript';
|
|
2
|
+
import { IndexSignatureSchema, ParameterSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import pMapSeries from 'p-map-series';
|
|
4
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
5
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
6
|
+
import { Identifier } from '../identifier';
|
|
7
|
+
|
|
8
|
+
export class IndexSignatureTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === ts.SyntaxKind.IndexSignature;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async transform(node: IndexSignatureDeclaration, context: SchemaExtractorContext) {
|
|
18
|
+
const params = (await pMapSeries(node.parameters, async (param) =>
|
|
19
|
+
context.computeSchema(param)
|
|
20
|
+
)) as ParameterSchema[];
|
|
21
|
+
const type = await context.computeSchema(node.type);
|
|
22
|
+
return new IndexSignatureSchema(context.getLocation(node), params, type);
|
|
23
|
+
}
|
|
24
|
+
}
|
package/transformers/index.ts
CHANGED
|
@@ -1,11 +1,36 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { ExportDeclarationTransformer } from './export-declaration';
|
|
2
|
+
export { FunctionLikeTransformer } from './function-like';
|
|
3
|
+
export { ParameterTransformer } from './parameter';
|
|
3
4
|
export { VariableStatementTransformer } from './variable-statement';
|
|
4
5
|
export { VariableDeclaration } from './variable-declaration';
|
|
5
6
|
export { SourceFileTransformer } from './source-file-transformer';
|
|
6
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';
|
|
7
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';
|
|
8
32
|
export { InterfaceDeclarationTransformer } from './interface-declaration';
|
|
9
33
|
export { EnumDeclarationTransformer } from './enum-declaration';
|
|
10
34
|
export { BindingElementTransformer } from './binding-element';
|
|
11
|
-
export {
|
|
35
|
+
export { ExportAssignmentTransformer } from './export-assignment';
|
|
36
|
+
export { ImportDeclarationTransformer } from './import-declaration';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IndexedAccessTypeNode, Node, SyntaxKind } from 'typescript';
|
|
2
|
+
import { IndexedAccessSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { Identifier } from '../identifier';
|
|
6
|
+
|
|
7
|
+
export class IndexedAccessTypeTransformer implements SchemaTransformer {
|
|
8
|
+
predicate(node: Node) {
|
|
9
|
+
return node.kind === SyntaxKind.IndexedAccessType;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async transform(node: IndexedAccessTypeNode, context: SchemaExtractorContext) {
|
|
17
|
+
const objectType = await context.computeSchema(node.objectType);
|
|
18
|
+
const indexType = await context.computeSchema(node.indexType);
|
|
19
|
+
return new IndexedAccessSchema(context.getLocation(node), objectType, indexType);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -7,17 +7,15 @@ import {
|
|
|
7
7
|
} from '@teambit/semantics.entities.semantic-schema';
|
|
8
8
|
import { SchemaTransformer } from '../schema-transformer';
|
|
9
9
|
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
10
|
-
import {
|
|
11
|
-
import { typeElementToSchema } from './utils/type-element-to-schema';
|
|
12
|
-
import { typeNodeToSchema } from './utils/type-node-to-schema';
|
|
10
|
+
import { Identifier } from '../identifier';
|
|
13
11
|
|
|
14
12
|
export class InterfaceDeclarationTransformer implements SchemaTransformer {
|
|
15
13
|
predicate(node: Node) {
|
|
16
14
|
return node.kind === SyntaxKind.InterfaceDeclaration;
|
|
17
15
|
}
|
|
18
16
|
|
|
19
|
-
async getIdentifiers(node: InterfaceDeclaration): Promise<
|
|
20
|
-
return [new
|
|
17
|
+
async getIdentifiers(node: InterfaceDeclaration): Promise<Identifier[]> {
|
|
18
|
+
return [new Identifier(node.name.getText(), node.getSourceFile().fileName)];
|
|
21
19
|
}
|
|
22
20
|
|
|
23
21
|
private async getExpressionWithTypeArgs(node: InterfaceDeclaration, context: SchemaExtractorContext) {
|
|
@@ -33,7 +31,7 @@ export class InterfaceDeclarationTransformer implements SchemaTransformer {
|
|
|
33
31
|
}),
|
|
34
32
|
async (expressionWithTypeArgs: ts.ExpressionWithTypeArguments & { name: string }) => {
|
|
35
33
|
const { typeArguments, expression, name } = expressionWithTypeArgs;
|
|
36
|
-
const typeArgsNodes = typeArguments ? await pMapSeries(typeArguments, (t) =>
|
|
34
|
+
const typeArgsNodes = typeArguments ? await pMapSeries(typeArguments, (t) => context.computeSchema(t)) : [];
|
|
37
35
|
const location = context.getLocation(expression);
|
|
38
36
|
const expressionNode =
|
|
39
37
|
(await context.visitDefinition(expression)) || new UnresolvedSchema(location, expression.getText());
|
|
@@ -43,7 +41,7 @@ export class InterfaceDeclarationTransformer implements SchemaTransformer {
|
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
async transform(interfaceDec: InterfaceDeclaration, context: SchemaExtractorContext) {
|
|
46
|
-
const members = await pMapSeries(interfaceDec.members, (member) =>
|
|
44
|
+
const members = await pMapSeries(interfaceDec.members, (member) => context.computeSchema(member));
|
|
47
45
|
const doc = await context.jsDocToDocSchema(interfaceDec);
|
|
48
46
|
const signature = interfaceDec.name ? await context.getQuickInfoDisplayString(interfaceDec.name) : undefined;
|
|
49
47
|
const extendsNodes = await this.getExpressionWithTypeArgs(interfaceDec, context);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import ts, { Node, IntersectionTypeNode } from 'typescript';
|
|
2
|
+
import { TypeIntersectionSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import pMapSeries from 'p-map-series';
|
|
4
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
5
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
6
|
+
import { Identifier } from '../identifier';
|
|
7
|
+
|
|
8
|
+
export class IntersectionTypeTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === ts.SyntaxKind.IntersectionType;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async transform(node: IntersectionTypeNode, context: SchemaExtractorContext) {
|
|
18
|
+
const types = await pMapSeries(node.types, async (type) => {
|
|
19
|
+
const typeSchema = context.computeSchema(type);
|
|
20
|
+
return typeSchema;
|
|
21
|
+
});
|
|
22
|
+
const location = context.getLocation(node);
|
|
23
|
+
return new TypeIntersectionSchema(location, types);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Node, SyntaxKind } from 'typescript';
|
|
2
|
+
import { KeywordTypeSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { Identifier } from '../identifier';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* whether it's kind of `ts.KeywordTypeSyntaxKind`
|
|
9
|
+
*/
|
|
10
|
+
export class KeywordTypeTransformer implements SchemaTransformer {
|
|
11
|
+
predicate(node: Node) {
|
|
12
|
+
switch (node.kind) {
|
|
13
|
+
case SyntaxKind.AnyKeyword:
|
|
14
|
+
case SyntaxKind.BigIntKeyword:
|
|
15
|
+
case SyntaxKind.BooleanKeyword:
|
|
16
|
+
case SyntaxKind.IntrinsicKeyword:
|
|
17
|
+
case SyntaxKind.NeverKeyword:
|
|
18
|
+
case SyntaxKind.NumberKeyword:
|
|
19
|
+
case SyntaxKind.ObjectKeyword:
|
|
20
|
+
case SyntaxKind.StringKeyword:
|
|
21
|
+
case SyntaxKind.SymbolKeyword:
|
|
22
|
+
case SyntaxKind.UndefinedKeyword:
|
|
23
|
+
case SyntaxKind.UnknownKeyword:
|
|
24
|
+
case SyntaxKind.VoidKeyword:
|
|
25
|
+
return true;
|
|
26
|
+
default:
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async transform(node: Node, context: SchemaExtractorContext) {
|
|
36
|
+
const location = context.getLocation(node);
|
|
37
|
+
return new KeywordTypeSchema(location, node.getText());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import ts, { LiteralTypeNode, Node } from 'typescript';
|
|
2
|
+
import { LiteralTypeSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { Identifier } from '../identifier';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* e.g. string/boolean
|
|
9
|
+
*/
|
|
10
|
+
export class LiteralTypeTransformer implements SchemaTransformer {
|
|
11
|
+
predicate(node: Node) {
|
|
12
|
+
return node.kind === ts.SyntaxKind.LiteralType;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async transform(node: LiteralTypeNode, context: SchemaExtractorContext) {
|
|
20
|
+
const location = context.getLocation(node);
|
|
21
|
+
return new LiteralTypeSchema(location, node.getText());
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Node, SyntaxKind, NamedTupleMember } from 'typescript';
|
|
2
|
+
import { NamedTupleSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { Identifier } from '../identifier';
|
|
6
|
+
|
|
7
|
+
export class NamedTupleTransformer implements SchemaTransformer {
|
|
8
|
+
predicate(node: Node) {
|
|
9
|
+
return node.kind === SyntaxKind.NamedTupleMember;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async transform(node: NamedTupleMember, context: SchemaExtractorContext) {
|
|
17
|
+
const name = node.name.getText();
|
|
18
|
+
const location = context.getLocation(node);
|
|
19
|
+
const type = await context.computeSchema(node.type);
|
|
20
|
+
return new NamedTupleSchema(location, type, name);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import ts, {
|
|
2
|
+
BindingElement,
|
|
3
|
+
isIdentifier,
|
|
4
|
+
Node,
|
|
5
|
+
ParameterDeclaration,
|
|
6
|
+
SyntaxKind,
|
|
7
|
+
ArrayBindingElement,
|
|
8
|
+
} from 'typescript';
|
|
9
|
+
import {
|
|
10
|
+
InferenceTypeSchema,
|
|
11
|
+
ParameterSchema,
|
|
12
|
+
SchemaNode,
|
|
13
|
+
TupleTypeSchema,
|
|
14
|
+
TypeLiteralSchema,
|
|
15
|
+
} from '@teambit/semantics.entities.semantic-schema';
|
|
16
|
+
import pMapSeries from 'p-map-series';
|
|
17
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
18
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
19
|
+
import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
|
|
20
|
+
import { Identifier } from '../identifier';
|
|
21
|
+
|
|
22
|
+
export class ParameterTransformer implements SchemaTransformer {
|
|
23
|
+
predicate(node: Node) {
|
|
24
|
+
return node.kind === ts.SyntaxKind.Parameter;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async transform(node: ParameterDeclaration, context: SchemaExtractorContext) {
|
|
32
|
+
return new ParameterSchema(
|
|
33
|
+
context.getLocation(node),
|
|
34
|
+
this.getName(node),
|
|
35
|
+
await this.getType(node, context),
|
|
36
|
+
Boolean(node.questionToken),
|
|
37
|
+
node.initializer ? node.initializer.getText() : undefined,
|
|
38
|
+
undefined,
|
|
39
|
+
await this.getObjectBindingNodes(node, context)
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
getName(param: ParameterDeclaration): string {
|
|
44
|
+
if (isIdentifier(param.name)) {
|
|
45
|
+
return param.name.getText();
|
|
46
|
+
}
|
|
47
|
+
// it's binding pattern, either an array or an object
|
|
48
|
+
const elements = param.name.elements.map((elem) => elem.getText());
|
|
49
|
+
const elementsStr = elements.join(', ');
|
|
50
|
+
if (param.name.kind === SyntaxKind.ArrayBindingPattern) {
|
|
51
|
+
return `[ ${elementsStr} ]`;
|
|
52
|
+
}
|
|
53
|
+
// it's an object binding
|
|
54
|
+
return `{ ${elementsStr} }`;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async getType(param: ParameterDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
|
|
58
|
+
if (param.type) {
|
|
59
|
+
return context.computeSchema(param.type);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (isIdentifier(param.name)) {
|
|
63
|
+
const info = await context.getQuickInfo(param.name);
|
|
64
|
+
const parsed = parseTypeFromQuickInfo(info);
|
|
65
|
+
return new InferenceTypeSchema(context.getLocation(param), parsed);
|
|
66
|
+
}
|
|
67
|
+
// it's binding pattern, either an array or an object
|
|
68
|
+
if (param.name.kind === SyntaxKind.ArrayBindingPattern) {
|
|
69
|
+
const elements = await pMapSeries(param.name.elements, async (elem: ArrayBindingElement) => {
|
|
70
|
+
const info = await context.getQuickInfo(elem);
|
|
71
|
+
const parsed = parseTypeFromQuickInfo(info);
|
|
72
|
+
return new InferenceTypeSchema(context.getLocation(param), parsed);
|
|
73
|
+
});
|
|
74
|
+
return new TupleTypeSchema(context.getLocation(param), elements);
|
|
75
|
+
}
|
|
76
|
+
if (param.name.kind === SyntaxKind.ObjectBindingPattern) {
|
|
77
|
+
const elements = await pMapSeries(param.name.elements, async (elem: BindingElement) => {
|
|
78
|
+
const info = await context.getQuickInfo(elem.name);
|
|
79
|
+
const parsed = parseTypeFromQuickInfo(info);
|
|
80
|
+
return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());
|
|
81
|
+
});
|
|
82
|
+
return new TypeLiteralSchema(context.getLocation(param), elements);
|
|
83
|
+
}
|
|
84
|
+
throw new Error(`unknown param type`);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async getObjectBindingNodes(
|
|
88
|
+
param: ParameterDeclaration,
|
|
89
|
+
context: SchemaExtractorContext
|
|
90
|
+
): Promise<SchemaNode[] | undefined> {
|
|
91
|
+
if (param.name.kind !== SyntaxKind.ObjectBindingPattern) return undefined;
|
|
92
|
+
return pMapSeries(param.name.elements, async (elem: BindingElement) => {
|
|
93
|
+
const info =
|
|
94
|
+
elem.name.kind === SyntaxKind.ObjectBindingPattern ? undefined : await context.getQuickInfo(elem.name);
|
|
95
|
+
// @todo look into extracting nested objected binding patters
|
|
96
|
+
/**
|
|
97
|
+
* apiNode: {
|
|
98
|
+
api: {
|
|
99
|
+
name,
|
|
100
|
+
signature: defaultSignature,
|
|
101
|
+
doc,
|
|
102
|
+
location: { filePath },
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
*/
|
|
106
|
+
const parsed = info ? parseTypeFromQuickInfo(info) : elem.getText();
|
|
107
|
+
return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Node, ParenthesizedTypeNode, SyntaxKind } from 'typescript';
|
|
2
|
+
import { ParenthesizedTypeSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { Identifier } from '../identifier';
|
|
6
|
+
|
|
7
|
+
export class ParenthesizedTypeTransformer implements SchemaTransformer {
|
|
8
|
+
predicate(node: Node) {
|
|
9
|
+
return node.kind === SyntaxKind.ParenthesizedType;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async transform(node: ParenthesizedTypeNode, context: SchemaExtractorContext) {
|
|
17
|
+
const type = await context.computeSchema(node.type);
|
|
18
|
+
return new ParenthesizedTypeSchema(context.getLocation(node), type);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Node, PropertyDeclaration, PropertySignature, SyntaxKind } from 'typescript';
|
|
2
|
+
import { VariableLikeSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
4
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
5
|
+
import { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';
|
|
6
|
+
import { Identifier } from '../identifier';
|
|
7
|
+
|
|
8
|
+
export class PropertyDeclarationTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// [computedName]: string
|
|
18
|
+
private isComputedProperty(node: PropertyDeclaration | PropertySignature) {
|
|
19
|
+
return node.name.kind === SyntaxKind.ComputedPropertyName;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// @todo - handle arrow function objects
|
|
23
|
+
async transform(node: PropertyDeclaration | PropertySignature, context: SchemaExtractorContext) {
|
|
24
|
+
const name = node.name.getText();
|
|
25
|
+
const info = this.isComputedProperty(node) ? undefined : await context.getQuickInfo(node.name);
|
|
26
|
+
const displaySig = info?.body?.displayString || node.getText();
|
|
27
|
+
const typeStr = parseTypeFromQuickInfo(info);
|
|
28
|
+
const type = await context.resolveType(node, typeStr);
|
|
29
|
+
const isOptional = Boolean(node.questionToken);
|
|
30
|
+
const doc = await context.jsDocToDocSchema(node);
|
|
31
|
+
return new VariableLikeSchema(context.getLocation(node), name, displaySig, type, isOptional, doc);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import ts, { Node, SetAccessorDeclaration } from 'typescript';
|
|
2
|
+
import { ParameterSchema, SetAccessorSchema } from '@teambit/semantics.entities.semantic-schema';
|
|
3
|
+
import pMapSeries from 'p-map-series';
|
|
4
|
+
import { SchemaTransformer } from '../schema-transformer';
|
|
5
|
+
import { SchemaExtractorContext } from '../schema-extractor-context';
|
|
6
|
+
import { Identifier } from '../identifier';
|
|
7
|
+
|
|
8
|
+
export class SetAccessorTransformer implements SchemaTransformer {
|
|
9
|
+
predicate(node: Node) {
|
|
10
|
+
return node.kind === ts.SyntaxKind.SetAccessor;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async getIdentifiers(): Promise<Identifier[]> {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async transform(node: SetAccessorDeclaration, context: SchemaExtractorContext) {
|
|
18
|
+
const params = (await pMapSeries(node.parameters, async (param) =>
|
|
19
|
+
context.computeSchema(param)
|
|
20
|
+
)) as ParameterSchema[];
|
|
21
|
+
|
|
22
|
+
const displaySig = await context.getQuickInfoDisplayString(node.name);
|
|
23
|
+
return new SetAccessorSchema(context.getLocation(node), node.name.getText(), params[0], displaySig);
|
|
24
|
+
}
|
|
25
|
+
}
|