@teambit/typescript 0.0.738 → 0.0.741
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/exceptions/transformer-not-found.d.ts +2 -1
- package/dist/exceptions/transformer-not-found.js +3 -2
- package/dist/exceptions/transformer-not-found.js.map +1 -1
- package/dist/schema-extractor-context.d.ts +8 -7
- package/dist/schema-extractor-context.js +49 -21
- package/dist/schema-extractor-context.js.map +1 -1
- package/dist/transformers/class-deceleration.js +9 -1
- package/dist/transformers/class-deceleration.js.map +1 -1
- 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-declaration.js +9 -2
- package/dist/transformers/export-declaration.js.map +1 -1
- package/dist/transformers/index.d.ts +1 -0
- package/dist/transformers/index.js +16 -0
- package/dist/transformers/index.js.map +1 -1
- package/dist/transformers/property-signature.js +5 -20
- package/dist/transformers/property-signature.js.map +1 -1
- package/dist/transformers/type-alias.js +2 -5
- package/dist/transformers/type-alias.js.map +1 -1
- package/dist/transformers/utils/get-params.js +53 -7
- package/dist/transformers/utils/get-params.js.map +1 -1
- package/dist/transformers/utils/parse-type-from-quick-info.d.ts +1 -0
- package/dist/transformers/utils/parse-type-from-quick-info.js +12 -3
- package/dist/transformers/utils/parse-type-from-quick-info.js.map +1 -1
- package/dist/transformers/utils/type-node-to-schema.js +52 -6
- package/dist/transformers/utils/type-node-to-schema.js.map +1 -1
- package/dist/typescript.extractor.d.ts +7 -1
- package/dist/typescript.extractor.js +30 -9
- package/dist/typescript.extractor.js.map +1 -1
- package/dist/typescript.main.runtime.d.ts +11 -2
- package/dist/typescript.main.runtime.js +17 -6
- package/dist/typescript.main.runtime.js.map +1 -1
- package/exceptions/transformer-not-found.ts +4 -2
- package/package-tar/teambit-typescript-0.0.741.tgz +0 -0
- package/package.json +16 -15
- package/{preview-1653227849497.js → preview-1653494536947.js} +2 -2
- package/transformers/class-deceleration.ts +4 -1
- package/transformers/enum-declaration.ts +20 -0
- package/transformers/export-declaration.ts +7 -2
- package/transformers/index.ts +1 -0
- package/transformers/property-signature.ts +2 -8
- package/transformers/type-alias.ts +2 -3
- package/transformers/utils/get-params.ts +53 -9
- package/transformers/utils/parse-type-from-quick-info.ts +9 -1
- package/transformers/utils/type-node-to-schema.ts +57 -6
- package/package-tar/teambit-typescript-0.0.738.tgz +0 -0
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
require("core-js/modules/es.promise.js");
|
|
6
4
|
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -20,7 +18,7 @@ function _semanticsEntities() {
|
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
function _typescript() {
|
|
23
|
-
const data =
|
|
21
|
+
const data = _interopRequireWildcard(require("typescript"));
|
|
24
22
|
|
|
25
23
|
_typescript = function () {
|
|
26
24
|
return data;
|
|
@@ -39,15 +37,9 @@ function _parseTypeFromQuickInfo() {
|
|
|
39
37
|
return data;
|
|
40
38
|
}
|
|
41
39
|
|
|
42
|
-
function
|
|
43
|
-
const data = require("./utils/type-node-to-schema");
|
|
44
|
-
|
|
45
|
-
_typeNodeToSchema = function () {
|
|
46
|
-
return data;
|
|
47
|
-
};
|
|
40
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
48
41
|
|
|
49
|
-
|
|
50
|
-
}
|
|
42
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
51
43
|
|
|
52
44
|
class PropertySignature {
|
|
53
45
|
predicate(node) {
|
|
@@ -63,18 +55,11 @@ class PropertySignature {
|
|
|
63
55
|
}
|
|
64
56
|
|
|
65
57
|
async transform(prop, context) {
|
|
66
|
-
var _info$body
|
|
58
|
+
var _info$body;
|
|
67
59
|
|
|
68
60
|
const name = this.getName(prop);
|
|
69
|
-
const info = await context.getQuickInfo(prop.name);
|
|
61
|
+
const info = (0, _typescript().isComputedPropertyName)(prop.name) ? undefined : await context.getQuickInfo(prop.name);
|
|
70
62
|
const displaySig = (info === null || info === void 0 ? void 0 : (_info$body = info.body) === null || _info$body === void 0 ? void 0 : _info$body.displayString) || '';
|
|
71
|
-
|
|
72
|
-
if (((_prop$type = prop.type) === null || _prop$type === void 0 ? void 0 : _prop$type.kind) === _typescript().default.SyntaxKind.FunctionType) {
|
|
73
|
-
// e.g. `propertySig: () => void;` inside interface
|
|
74
|
-
const propType = prop.type;
|
|
75
|
-
return (0, _typeNodeToSchema().typeNodeToSchema)(propType, context);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
63
|
const typeStr = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
|
|
79
64
|
const type = await context.resolveType(prop, typeStr);
|
|
80
65
|
return new (_semanticsEntities().VariableSchema)(context.getLocation(prop), name, displaySig, type);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PropertySignature","predicate","node","kind","ts","SyntaxKind","getName","name","getText","getIdentifiers","transform","prop","context","info","
|
|
1
|
+
{"version":3,"names":["PropertySignature","predicate","node","kind","ts","SyntaxKind","getName","name","getText","getIdentifiers","transform","prop","context","info","isComputedPropertyName","undefined","getQuickInfo","displaySig","body","displayString","typeStr","parseTypeFromQuickInfo","type","resolveType","VariableSchema","getLocation"],"sources":["property-signature.ts"],"sourcesContent":["import { SchemaNode, VariableSchema } from '@teambit/semantics.entities.semantic-schema';\nimport ts, { isComputedPropertyName, Node, PropertySignature as PropertySignatureNode } from 'typescript';\nimport { SchemaTransformer } from '../schema-transformer';\nimport { SchemaExtractorContext } from '../schema-extractor-context';\nimport { parseTypeFromQuickInfo } from './utils/parse-type-from-quick-info';\n\nexport class PropertySignature implements SchemaTransformer {\n predicate(node: Node) {\n return node.kind === ts.SyntaxKind.PropertySignature;\n }\n\n getName(node: PropertySignatureNode) {\n return node.name.getText();\n }\n\n async getIdentifiers() {\n return [];\n }\n\n async transform(prop: PropertySignatureNode, context: SchemaExtractorContext): Promise<SchemaNode> {\n const name = this.getName(prop);\n const info = isComputedPropertyName(prop.name) ? undefined : await context.getQuickInfo(prop.name);\n const displaySig = info?.body?.displayString || '';\n const typeStr = parseTypeFromQuickInfo(info);\n const type = await context.resolveType(prop, typeStr);\n return new VariableSchema(context.getLocation(prop), name, displaySig, type);\n }\n}\n"],"mappings":";;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;;;;;AAEO,MAAMA,iBAAN,CAAqD;EAC1DC,SAAS,CAACC,IAAD,EAAa;IACpB,OAAOA,IAAI,CAACC,IAAL,KAAcC,qBAAA,CAAGC,UAAH,CAAcL,iBAAnC;EACD;;EAEDM,OAAO,CAACJ,IAAD,EAA8B;IACnC,OAAOA,IAAI,CAACK,IAAL,CAAUC,OAAV,EAAP;EACD;;EAEmB,MAAdC,cAAc,GAAG;IACrB,OAAO,EAAP;EACD;;EAEc,MAATC,SAAS,CAACC,IAAD,EAA8BC,OAA9B,EAAoF;IAAA;;IACjG,MAAML,IAAI,GAAG,KAAKD,OAAL,CAAaK,IAAb,CAAb;IACA,MAAME,IAAI,GAAG,IAAAC,oCAAA,EAAuBH,IAAI,CAACJ,IAA5B,IAAoCQ,SAApC,GAAgD,MAAMH,OAAO,CAACI,YAAR,CAAqBL,IAAI,CAACJ,IAA1B,CAAnE;IACA,MAAMU,UAAU,GAAG,CAAAJ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,0BAAAA,IAAI,CAAEK,IAAN,0DAAYC,aAAZ,KAA6B,EAAhD;IACA,MAAMC,OAAO,GAAG,IAAAC,gDAAA,EAAuBR,IAAvB,CAAhB;IACA,MAAMS,IAAI,GAAG,MAAMV,OAAO,CAACW,WAAR,CAAoBZ,IAApB,EAA0BS,OAA1B,CAAnB;IACA,OAAO,KAAII,mCAAJ,EAAmBZ,OAAO,CAACa,WAAR,CAAoBd,IAApB,CAAnB,EAA8CJ,IAA9C,EAAoDU,UAApD,EAAgEK,IAAhE,CAAP;EACD;;AApByD"}
|
|
@@ -63,12 +63,9 @@ class TypeAliasTransformer {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
async transform(typeAlias, context) {
|
|
66
|
-
var _info$body;
|
|
67
|
-
|
|
68
66
|
const type = await (0, _typeNodeToSchema().typeNodeToSchema)(typeAlias.type, context);
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
return new (_semanticsEntities().TypeSchema)(context.getLocation(typeAlias), this.getName(typeAlias), type, displaySig || '');
|
|
67
|
+
const displaySig = await context.getQuickInfoDisplayString(typeAlias.name);
|
|
68
|
+
return new (_semanticsEntities().TypeSchema)(context.getLocation(typeAlias), this.getName(typeAlias), type, displaySig);
|
|
72
69
|
}
|
|
73
70
|
|
|
74
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TypeAliasTransformer","predicate","node","kind","ts","SyntaxKind","TypeAliasDeclaration","getIdentifiers","ExportIdentifier","name","getText","getSourceFile","fileName","getName","transform","typeAlias","context","type","typeNodeToSchema","
|
|
1
|
+
{"version":3,"names":["TypeAliasTransformer","predicate","node","kind","ts","SyntaxKind","TypeAliasDeclaration","getIdentifiers","ExportIdentifier","name","getText","getSourceFile","fileName","getName","transform","typeAlias","context","type","typeNodeToSchema","displaySig","getQuickInfoDisplayString","TypeSchema","getLocation"],"sources":["type-alias.ts"],"sourcesContent":["import ts, { Node, TypeAliasDeclaration } from 'typescript';\nimport { TypeSchema } from '@teambit/semantics.entities.semantic-schema';\nimport { SchemaTransformer } from '../schema-transformer';\nimport { SchemaExtractorContext } from '../schema-extractor-context';\nimport { ExportIdentifier } from '../export-identifier';\nimport { typeNodeToSchema } from './utils/type-node-to-schema';\n\nexport class TypeAliasTransformer implements SchemaTransformer {\n predicate(node: Node) {\n return node.kind === ts.SyntaxKind.TypeAliasDeclaration;\n }\n\n async getIdentifiers(node: TypeAliasDeclaration) {\n return [new ExportIdentifier(node.name.getText(), node.getSourceFile().fileName)];\n }\n\n private getName(node: TypeAliasDeclaration): string {\n return node.name.getText();\n }\n\n async transform(typeAlias: TypeAliasDeclaration, context: SchemaExtractorContext) {\n const type = await typeNodeToSchema(typeAlias.type, context);\n const displaySig = await context.getQuickInfoDisplayString(typeAlias.name);\n return new TypeSchema(context.getLocation(typeAlias), this.getName(typeAlias), type, displaySig);\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEO,MAAMA,oBAAN,CAAwD;EAC7DC,SAAS,CAACC,IAAD,EAAa;IACpB,OAAOA,IAAI,CAACC,IAAL,KAAcC,qBAAA,CAAGC,UAAH,CAAcC,oBAAnC;EACD;;EAEmB,MAAdC,cAAc,CAACL,IAAD,EAA6B;IAC/C,OAAO,CAAC,KAAIM,oCAAJ,EAAqBN,IAAI,CAACO,IAAL,CAAUC,OAAV,EAArB,EAA0CR,IAAI,CAACS,aAAL,GAAqBC,QAA/D,CAAD,CAAP;EACD;;EAEOC,OAAO,CAACX,IAAD,EAAqC;IAClD,OAAOA,IAAI,CAACO,IAAL,CAAUC,OAAV,EAAP;EACD;;EAEc,MAATI,SAAS,CAACC,SAAD,EAAkCC,OAAlC,EAAmE;IAChF,MAAMC,IAAI,GAAG,MAAM,IAAAC,oCAAA,EAAiBH,SAAS,CAACE,IAA3B,EAAiCD,OAAjC,CAAnB;IACA,MAAMG,UAAU,GAAG,MAAMH,OAAO,CAACI,yBAAR,CAAkCL,SAAS,CAACN,IAA5C,CAAzB;IACA,OAAO,KAAIY,+BAAJ,EAAeL,OAAO,CAACM,WAAR,CAAoBP,SAApB,CAAf,EAA+C,KAAKF,OAAL,CAAaE,SAAb,CAA/C,EAAwEE,IAAxE,EAA8EE,UAA9E,CAAP;EACD;;AAjB4D"}
|
|
@@ -29,6 +29,16 @@ function _pMapSeries() {
|
|
|
29
29
|
return data;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
function _typescript() {
|
|
33
|
+
const data = require("typescript");
|
|
34
|
+
|
|
35
|
+
_typescript = function () {
|
|
36
|
+
return data;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
41
|
+
|
|
32
42
|
function _parseTypeFromQuickInfo() {
|
|
33
43
|
const data = require("./parse-type-from-quick-info");
|
|
34
44
|
|
|
@@ -51,13 +61,26 @@ function _typeNodeToSchema() {
|
|
|
51
61
|
|
|
52
62
|
async function getParams(parameterNodes, context) {
|
|
53
63
|
return (0, _pMapSeries().default)(parameterNodes, async param => {
|
|
54
|
-
return new (_semanticsEntities().ParameterSchema)(context.getLocation(param), param
|
|
64
|
+
return new (_semanticsEntities().ParameterSchema)(context.getLocation(param), getParamName(param), await getParamType(param, context), param.initializer ? param.initializer.getText() : undefined);
|
|
55
65
|
});
|
|
56
66
|
}
|
|
57
|
-
/**
|
|
58
|
-
* @todo: probably not needed. just call context.resolveType instead.
|
|
59
|
-
*/
|
|
60
67
|
|
|
68
|
+
function getParamName(param) {
|
|
69
|
+
if ((0, _typescript().isIdentifier)(param.name)) {
|
|
70
|
+
return param.name.getText();
|
|
71
|
+
} // it's binding pattern, either an array or an object
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
const elements = param.name.elements.map(elem => elem.getText());
|
|
75
|
+
const elementsStr = elements.join(', ');
|
|
76
|
+
|
|
77
|
+
if (param.name.kind === _typescript().SyntaxKind.ArrayBindingPattern) {
|
|
78
|
+
return `[ ${elementsStr} ]`;
|
|
79
|
+
} // it's an object binding
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
return `{ ${elementsStr} }`;
|
|
83
|
+
}
|
|
61
84
|
|
|
62
85
|
async function getParamType(param, context) {
|
|
63
86
|
if (param.type) {
|
|
@@ -65,9 +88,32 @@ async function getParamType(param, context) {
|
|
|
65
88
|
return (0, _typeNodeToSchema().typeNodeToSchema)(type, context);
|
|
66
89
|
}
|
|
67
90
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
91
|
+
if ((0, _typescript().isIdentifier)(param.name)) {
|
|
92
|
+
const info = await context.getQuickInfo(param.name);
|
|
93
|
+
const parsed = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
|
|
94
|
+
return new (_semanticsEntities().InferenceTypeSchema)(context.getLocation(param), parsed);
|
|
95
|
+
} // it's binding pattern, either an array or an object
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
if (param.name.kind === _typescript().SyntaxKind.ArrayBindingPattern) {
|
|
99
|
+
const elements = await (0, _pMapSeries().default)(param.name.elements, async elem => {
|
|
100
|
+
const info = await context.getQuickInfo(elem);
|
|
101
|
+
const parsed = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
|
|
102
|
+
return new (_semanticsEntities().InferenceTypeSchema)(context.getLocation(param), parsed);
|
|
103
|
+
});
|
|
104
|
+
return new (_semanticsEntities().TupleTypeSchema)(context.getLocation(param), elements);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (param.name.kind === _typescript().SyntaxKind.ObjectBindingPattern) {
|
|
108
|
+
const elements = await (0, _pMapSeries().default)(param.name.elements, async elem => {
|
|
109
|
+
const info = await context.getQuickInfo(elem.name);
|
|
110
|
+
const parsed = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
|
|
111
|
+
return new (_semanticsEntities().InferenceTypeSchema)(context.getLocation(param), parsed, elem.name.getText());
|
|
112
|
+
});
|
|
113
|
+
return new (_semanticsEntities().TypeLiteralSchema)(context.getLocation(param), elements);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
throw new Error(`unknown param type`);
|
|
71
117
|
}
|
|
72
118
|
|
|
73
119
|
//# sourceMappingURL=get-params.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getParams","parameterNodes","context","pMapSeries","param","ParameterSchema","getLocation","
|
|
1
|
+
{"version":3,"names":["getParams","parameterNodes","context","pMapSeries","param","ParameterSchema","getLocation","getParamName","getParamType","initializer","getText","undefined","isIdentifier","name","elements","map","elem","elementsStr","join","kind","SyntaxKind","ArrayBindingPattern","type","typeNodeToSchema","info","getQuickInfo","parsed","parseTypeFromQuickInfo","InferenceTypeSchema","TupleTypeSchema","ObjectBindingPattern","TypeLiteralSchema","Error"],"sources":["get-params.ts"],"sourcesContent":["import {\n InferenceTypeSchema,\n ParameterSchema,\n TupleTypeSchema,\n TypeLiteralSchema,\n SchemaNode,\n} from '@teambit/semantics.entities.semantic-schema';\nimport pMapSeries from 'p-map-series';\nimport {\n SyntaxKind,\n ParameterDeclaration,\n NodeArray,\n isIdentifier,\n BindingElement,\n ArrayBindingElement,\n} from 'typescript';\nimport { SchemaExtractorContext } from '../../schema-extractor-context';\nimport { parseTypeFromQuickInfo } from './parse-type-from-quick-info';\nimport { typeNodeToSchema } from './type-node-to-schema';\n\nexport async function getParams(\n parameterNodes: NodeArray<ParameterDeclaration>,\n context: SchemaExtractorContext\n): Promise<ParameterSchema[]> {\n return pMapSeries(parameterNodes, async (param) => {\n return new ParameterSchema(\n context.getLocation(param),\n getParamName(param),\n await getParamType(param, context),\n param.initializer ? param.initializer.getText() : undefined\n );\n });\n}\n\nfunction getParamName(param: ParameterDeclaration): string {\n if (isIdentifier(param.name)) {\n return param.name.getText();\n }\n // it's binding pattern, either an array or an object\n const elements = param.name.elements.map((elem) => elem.getText());\n const elementsStr = elements.join(', ');\n if (param.name.kind === SyntaxKind.ArrayBindingPattern) {\n return `[ ${elementsStr} ]`;\n }\n // it's an object binding\n return `{ ${elementsStr} }`;\n}\n\nasync function getParamType(param: ParameterDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {\n if (param.type) {\n const type = param.type;\n return typeNodeToSchema(type, context);\n }\n if (isIdentifier(param.name)) {\n const info = await context.getQuickInfo(param.name);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed);\n }\n // it's binding pattern, either an array or an object\n if (param.name.kind === SyntaxKind.ArrayBindingPattern) {\n const elements = await pMapSeries(param.name.elements, async (elem: ArrayBindingElement) => {\n const info = await context.getQuickInfo(elem);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed);\n });\n return new TupleTypeSchema(context.getLocation(param), elements);\n }\n if (param.name.kind === SyntaxKind.ObjectBindingPattern) {\n const elements = await pMapSeries(param.name.elements, async (elem: BindingElement) => {\n const info = await context.getQuickInfo(elem.name);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());\n });\n return new TypeLiteralSchema(context.getLocation(param), elements);\n }\n throw new Error(`unknown param type`);\n}\n"],"mappings":"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"}
|
|
@@ -9,11 +9,11 @@ require("core-js/modules/es.string.trim.js");
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", {
|
|
10
10
|
value: true
|
|
11
11
|
});
|
|
12
|
+
exports.UNRESOLVED = void 0;
|
|
12
13
|
exports.parseReturnTypeFromQuickInfo = parseReturnTypeFromQuickInfo;
|
|
13
14
|
exports.parseTypeFromQuickInfo = parseTypeFromQuickInfo;
|
|
14
|
-
|
|
15
15
|
// eslint-disable-next-line import/no-unresolved
|
|
16
|
-
|
|
16
|
+
const UNRESOLVED = '<<unresolved>>';
|
|
17
17
|
/**
|
|
18
18
|
* try to parse the type from the quickinfo.
|
|
19
19
|
* this is an error-prone process, we do our best here.
|
|
@@ -46,6 +46,9 @@ exports.parseTypeFromQuickInfo = parseTypeFromQuickInfo;
|
|
|
46
46
|
* b: number;
|
|
47
47
|
* }
|
|
48
48
|
*/
|
|
49
|
+
|
|
50
|
+
exports.UNRESOLVED = UNRESOLVED;
|
|
51
|
+
|
|
49
52
|
function parseTypeFromQuickInfo(quickInfo) {
|
|
50
53
|
var _quickInfo$body;
|
|
51
54
|
|
|
@@ -69,7 +72,13 @@ function parseTypeFromQuickInfo(quickInfo) {
|
|
|
69
72
|
const split = displayString.split('): ');
|
|
70
73
|
|
|
71
74
|
if (split.length !== 2) {
|
|
72
|
-
|
|
75
|
+
// it's hard to determine where the return-type is. so it's better to show unresolved.
|
|
76
|
+
// maybe, in the UI, in this case, it's best to show the signature.
|
|
77
|
+
// e.g.
|
|
78
|
+
// (method) IssuesList.getIssue<T extends ComponentIssue>(IssueClass: {
|
|
79
|
+
// new (): T;
|
|
80
|
+
// }): T | undefined
|
|
81
|
+
return UNRESOLVED;
|
|
73
82
|
}
|
|
74
83
|
|
|
75
84
|
return split[1].trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["parseTypeFromQuickInfo","quickInfo","body","displayString","splitByColon","split","kind","tail","join","trim","length","
|
|
1
|
+
{"version":3,"names":["UNRESOLVED","parseTypeFromQuickInfo","quickInfo","body","displayString","splitByColon","split","kind","tail","join","trim","length","firstLine","splitBySpace","typeName","splitByEqual","parseReturnTypeFromQuickInfo","typeStr","array"],"sources":["parse-type-from-quick-info.ts"],"sourcesContent":["// eslint-disable-next-line import/no-unresolved\nimport protocol from 'typescript/lib/protocol';\n\nexport const UNRESOLVED = '<<unresolved>>';\n\n/**\n * try to parse the type from the quickinfo.\n * this is an error-prone process, we do our best here.\n *\n * an example of a function with many \":\"\n * `export function getObj(a: string, func: (b: number) => {}) { return { a: 1, b: 2 } };`\n * which produce the following quickinfo:\n * ```ts\n * function getObj(a: string, func: (b: number) => {}): {\n * a: number;\n * b: number;\n * }\n * ```\n *\n * some examples of quickinfo:\n *\n * function ts.signatureToDisplayParts(typechecker: TypeChecker, signature: Signature, enclosingDeclaration?: Node | undefined, flags?: TypeFormatFlags): SymbolDisplayPart[]\n *\n * const enum ts.TypeFormatFlags\n *\n * (method) ts.TypeChecker.writeSignature(signature: Signature, enclosingDeclaration?: Node | undefined, flags?: TypeFormatFlags | undefined, kind?: SignatureKind | undefined, writer?: EmitTextWriter | undefined): string\n *\n * const obj: {\n * a: number;\n * b: number;\n * }\n *\n * function getObj(a: string): {\n * a: number;\n * b: number;\n * }\n */\nexport function parseTypeFromQuickInfo(quickInfo: protocol.QuickInfoResponse | undefined): string {\n if (!quickInfo?.body?.displayString) return '';\n const displayString = quickInfo.body.displayString;\n const splitByColon = displayString.split(':');\n switch (quickInfo.body.kind) {\n case 'const':\n case 'property':\n case 'let':\n case 'var': {\n const [, ...tail] = splitByColon;\n return tail.join(':').trim();\n }\n case 'method':\n case 'function': {\n const split = displayString.split('): ');\n if (split.length !== 2) {\n // it's hard to determine where the return-type is. so it's better to show unresolved.\n // maybe, in the UI, in this case, it's best to show the signature.\n // e.g.\n // (method) IssuesList.getIssue<T extends ComponentIssue>(IssueClass: {\n // new (): T;\n // }): T | undefined\n return UNRESOLVED;\n }\n return split[1].trim();\n }\n case 'alias': {\n // e.g. (alias) class BuilderService\\nimport BuilderService\n // e.g. '(alias) type Serializable = {\\n' +\n // ' toString(): string;\\n' +\n // '}\\n' +\n // 'import Serializable'\n const firstLine = displayString.split('\\n')[0];\n const splitBySpace = firstLine.trim().split(' ');\n // first two are alias keyword and alias type\n const [, , typeName] = splitBySpace;\n return typeName;\n }\n case 'type': {\n // e.g. `type TaskSlot = SlotRegistry<BuildTask[]>`\n const splitByEqual = displayString.split('=');\n const [, ...tail] = splitByEqual;\n return tail.join('=').trim();\n }\n default:\n return splitByColon[splitByColon.length - 1].trim();\n }\n}\n\nexport function parseReturnTypeFromQuickInfo(quickInfo: protocol.QuickInfoResponse | undefined): string {\n if (!quickInfo) return '';\n const typeStr = parseTypeFromQuickInfo(quickInfo);\n const array = typeStr.split('=>');\n return array[array.length - 1].trim();\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAGO,MAAMA,UAAU,GAAG,gBAAnB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AACO,SAASC,sBAAT,CAAgCC,SAAhC,EAA2F;EAAA;;EAChG,IAAI,EAACA,SAAD,aAACA,SAAD,kCAACA,SAAS,CAAEC,IAAZ,4CAAC,gBAAiBC,aAAlB,CAAJ,EAAqC,OAAO,EAAP;EACrC,MAAMA,aAAa,GAAGF,SAAS,CAACC,IAAV,CAAeC,aAArC;EACA,MAAMC,YAAY,GAAGD,aAAa,CAACE,KAAd,CAAoB,GAApB,CAArB;;EACA,QAAQJ,SAAS,CAACC,IAAV,CAAeI,IAAvB;IACE,KAAK,OAAL;IACA,KAAK,UAAL;IACA,KAAK,KAAL;IACA,KAAK,KAAL;MAAY;QACV,MAAM,GAAG,GAAGC,IAAN,IAAcH,YAApB;QACA,OAAOG,IAAI,CAACC,IAAL,CAAU,GAAV,EAAeC,IAAf,EAAP;MACD;;IACD,KAAK,QAAL;IACA,KAAK,UAAL;MAAiB;QACf,MAAMJ,KAAK,GAAGF,aAAa,CAACE,KAAd,CAAoB,KAApB,CAAd;;QACA,IAAIA,KAAK,CAACK,MAAN,KAAiB,CAArB,EAAwB;UACtB;UACA;UACA;UACA;UACA;UACA;UACA,OAAOX,UAAP;QACD;;QACD,OAAOM,KAAK,CAAC,CAAD,CAAL,CAASI,IAAT,EAAP;MACD;;IACD,KAAK,OAAL;MAAc;QACZ;QACA;QACA;QACA;QACA;QACA,MAAME,SAAS,GAAGR,aAAa,CAACE,KAAd,CAAoB,IAApB,EAA0B,CAA1B,CAAlB;QACA,MAAMO,YAAY,GAAGD,SAAS,CAACF,IAAV,GAAiBJ,KAAjB,CAAuB,GAAvB,CAArB,CAPY,CAQZ;;QACA,MAAM,IAAKQ,QAAL,IAAiBD,YAAvB;QACA,OAAOC,QAAP;MACD;;IACD,KAAK,MAAL;MAAa;QACX;QACA,MAAMC,YAAY,GAAGX,aAAa,CAACE,KAAd,CAAoB,GAApB,CAArB;QACA,MAAM,GAAG,GAAGE,IAAN,IAAcO,YAApB;QACA,OAAOP,IAAI,CAACC,IAAL,CAAU,GAAV,EAAeC,IAAf,EAAP;MACD;;IACD;MACE,OAAOL,YAAY,CAACA,YAAY,CAACM,MAAb,GAAsB,CAAvB,CAAZ,CAAsCD,IAAtC,EAAP;EAzCJ;AA2CD;;AAEM,SAASM,4BAAT,CAAsCd,SAAtC,EAAiG;EACtG,IAAI,CAACA,SAAL,EAAgB,OAAO,EAAP;EAChB,MAAMe,OAAO,GAAGhB,sBAAsB,CAACC,SAAD,CAAtC;EACA,MAAMgB,KAAK,GAAGD,OAAO,CAACX,KAAR,CAAc,IAAd,CAAd;EACA,OAAOY,KAAK,CAACA,KAAK,CAACP,MAAN,GAAe,CAAhB,CAAL,CAAwBD,IAAxB,EAAP;AACD"}
|
|
@@ -89,19 +89,29 @@ async function typeNodeToSchema(node, context) {
|
|
|
89
89
|
case _typescript().SyntaxKind.TupleType:
|
|
90
90
|
return tupleType(node, context);
|
|
91
91
|
|
|
92
|
+
case _typescript().SyntaxKind.ParenthesizedType:
|
|
93
|
+
return parenthesizedType(node, context);
|
|
94
|
+
|
|
92
95
|
case _typescript().SyntaxKind.TypePredicate:
|
|
96
|
+
return typePredicate(node, context);
|
|
97
|
+
|
|
98
|
+
case _typescript().SyntaxKind.IndexedAccessType:
|
|
99
|
+
return indexedAccessType(node, context);
|
|
100
|
+
|
|
101
|
+
case _typescript().SyntaxKind.TemplateLiteralTypeSpan:
|
|
102
|
+
return templateLiteralTypeSpan(node, context);
|
|
103
|
+
|
|
104
|
+
case _typescript().SyntaxKind.TemplateLiteralType:
|
|
105
|
+
return templateLiteralType(node, context);
|
|
106
|
+
|
|
93
107
|
case _typescript().SyntaxKind.ConstructorType:
|
|
94
108
|
case _typescript().SyntaxKind.NamedTupleMember:
|
|
95
109
|
case _typescript().SyntaxKind.OptionalType:
|
|
96
110
|
case _typescript().SyntaxKind.RestType:
|
|
97
111
|
case _typescript().SyntaxKind.ConditionalType:
|
|
98
112
|
case _typescript().SyntaxKind.InferType:
|
|
99
|
-
case _typescript().SyntaxKind.ParenthesizedType:
|
|
100
113
|
case _typescript().SyntaxKind.ThisType:
|
|
101
|
-
case _typescript().SyntaxKind.IndexedAccessType:
|
|
102
114
|
case _typescript().SyntaxKind.MappedType:
|
|
103
|
-
case _typescript().SyntaxKind.TemplateLiteralType:
|
|
104
|
-
case _typescript().SyntaxKind.TemplateLiteralTypeSpan:
|
|
105
115
|
case _typescript().SyntaxKind.ImportType:
|
|
106
116
|
case _typescript().SyntaxKind.ExpressionWithTypeArguments:
|
|
107
117
|
case _typescript().SyntaxKind.JSDocTypeExpression:
|
|
@@ -115,11 +125,11 @@ async function typeNodeToSchema(node, context) {
|
|
|
115
125
|
case _typescript().SyntaxKind.JSDocNamepathType:
|
|
116
126
|
case _typescript().SyntaxKind.JSDocSignature:
|
|
117
127
|
case _typescript().SyntaxKind.JSDocTypeLiteral:
|
|
118
|
-
throw new Error(`TypeNode
|
|
128
|
+
throw new Error(`TypeNode ${node.kind} (probably ${_typescript().SyntaxKind[node.kind]}) was not implemented yet.
|
|
119
129
|
context: ${node.getText()}`);
|
|
120
130
|
|
|
121
131
|
default:
|
|
122
|
-
throw new Error(`Node
|
|
132
|
+
throw new Error(`Node ${node.kind} (probably ${_typescript().SyntaxKind[node.kind]}) is not a TypeNode.
|
|
123
133
|
context: ${node.getText()}`);
|
|
124
134
|
}
|
|
125
135
|
}
|
|
@@ -192,6 +202,12 @@ async function typeLiteral(node, context) {
|
|
|
192
202
|
async function typeReference(node, context) {
|
|
193
203
|
const name = node.typeName.getText();
|
|
194
204
|
const type = await context.resolveType(node, name, false);
|
|
205
|
+
|
|
206
|
+
if (node.typeArguments && type instanceof _semanticsEntities().TypeRefSchema) {
|
|
207
|
+
const args = await (0, _pMapSeries().default)(node.typeArguments, arg => typeNodeToSchema(arg, context));
|
|
208
|
+
type.typeArgs = args;
|
|
209
|
+
}
|
|
210
|
+
|
|
195
211
|
return type;
|
|
196
212
|
}
|
|
197
213
|
|
|
@@ -256,4 +272,34 @@ async function tupleType(node, context) {
|
|
|
256
272
|
return new (_semanticsEntities().TupleTypeSchema)(context.getLocation(node), elements);
|
|
257
273
|
}
|
|
258
274
|
|
|
275
|
+
async function parenthesizedType(node, context) {
|
|
276
|
+
const type = await typeNodeToSchema(node.type, context);
|
|
277
|
+
return new (_semanticsEntities().ParenthesizedTypeSchema)(context.getLocation(node), type);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
async function typePredicate(node, context) {
|
|
281
|
+
const parameterName = (0, _typescript().isIdentifier)(node.parameterName) ? node.parameterName.getText() : 'this';
|
|
282
|
+
const type = node.type ? await typeNodeToSchema(node.type, context) : undefined;
|
|
283
|
+
const hasAssertsModifier = Boolean(node.assertsModifier);
|
|
284
|
+
return new (_semanticsEntities().TypePredicateSchema)(context.getLocation(node), parameterName, type, hasAssertsModifier);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
async function indexedAccessType(node, context) {
|
|
288
|
+
const objectType = await typeNodeToSchema(node.objectType, context);
|
|
289
|
+
const indexType = await typeNodeToSchema(node.indexType, context);
|
|
290
|
+
return new (_semanticsEntities().IndexedAccessSchema)(context.getLocation(node), objectType, indexType);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
async function templateLiteralType(node, context) {
|
|
294
|
+
const templateSpans = await (0, _pMapSeries().default)(node.templateSpans, span => templateLiteralTypeSpan(span, context));
|
|
295
|
+
const head = node.head.text;
|
|
296
|
+
return new (_semanticsEntities().TemplateLiteralTypeSchema)(context.getLocation(node), head, templateSpans);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
async function templateLiteralTypeSpan(node, context) {
|
|
300
|
+
const type = await typeNodeToSchema(node.type, context);
|
|
301
|
+
const literal = node.literal.text;
|
|
302
|
+
return new (_semanticsEntities().TemplateLiteralTypeSpanSchema)(context.getLocation(node), literal, type);
|
|
303
|
+
}
|
|
304
|
+
|
|
259
305
|
//# sourceMappingURL=type-node-to-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["typeNodeToSchema","node","context","location","getLocation","isKeywordType","KeywordTypeSchema","getText","kind","SyntaxKind","IntersectionType","intersectionType","UnionType","unionType","TypeReference","typeReference","TypeLiteral","typeLiteral","LiteralType","LiteralTypeSchema","FunctionType","functionType","TypeQuery","typeQuery","ArrayType","arrayType","TypeOperator","typeOperator","TupleType","tupleType","TypePredicate","ConstructorType","NamedTupleMember","OptionalType","RestType","ConditionalType","InferType","ParenthesizedType","ThisType","IndexedAccessType","MappedType","TemplateLiteralType","TemplateLiteralTypeSpan","ImportType","ExpressionWithTypeArguments","JSDocTypeExpression","JSDocAllType","JSDocUnknownType","JSDocNonNullableType","JSDocNullableType","JSDocOptionalType","JSDocFunctionType","JSDocVariadicType","JSDocNamepathType","JSDocSignature","JSDocTypeLiteral","Error","AnyKeyword","BigIntKeyword","BooleanKeyword","IntrinsicKeyword","NeverKeyword","NumberKeyword","ObjectKeyword","StringKeyword","SymbolKeyword","UndefinedKeyword","UnknownKeyword","VoidKeyword","types","pMapSeries","type","typeSchema","TypeIntersectionSchema","TypeUnionSchema","members","member","computeSchema","TypeLiteralSchema","name","typeName","resolveType","params","getParams","parameters","returnType","FunctionLikeSchema","displaySig","getQuickInfoDisplayString","exprName","TypeQuerySchema","elementType","TypeArraySchema","operatorName","getOperatorName","operator","TypeOperatorSchema","KeyOfKeyword","UniqueKeyword","ReadonlyKeyword","elements","elem","TupleTypeSchema"],"sources":["type-node-to-schema.ts"],"sourcesContent":["import {\n TypeNode,\n SyntaxKind,\n KeywordTypeNode,\n FunctionTypeNode,\n TypeQueryNode,\n TypeReferenceNode,\n ArrayTypeNode,\n TypeOperatorNode,\n TupleTypeNode,\n IntersectionTypeNode,\n UnionTypeNode,\n TypeLiteralNode,\n} from 'typescript';\nimport {\n SchemaNode,\n TypeIntersectionSchema,\n TypeUnionSchema,\n TypeLiteralSchema,\n TypeQuerySchema,\n LiteralTypeSchema,\n KeywordTypeSchema,\n TypeArraySchema,\n TypeOperatorSchema,\n TupleTypeSchema,\n FunctionLikeSchema,\n} from '@teambit/semantics.entities.semantic-schema';\nimport pMapSeries from 'p-map-series';\nimport { SchemaExtractorContext } from '../../schema-extractor-context';\nimport { getParams } from './get-params';\n\n// eslint-disable-next-line complexity\nexport async function typeNodeToSchema(node: TypeNode, context: SchemaExtractorContext): Promise<SchemaNode> {\n const location = context.getLocation(node);\n if (isKeywordType(node)) {\n return new KeywordTypeSchema(location, node.getText());\n }\n switch (node.kind) {\n case SyntaxKind.IntersectionType:\n return intersectionType(node as IntersectionTypeNode, context);\n case SyntaxKind.UnionType:\n return unionType(node as UnionTypeNode, context);\n case SyntaxKind.TypeReference:\n return typeReference(node as TypeReferenceNode, context);\n case SyntaxKind.TypeLiteral:\n return typeLiteral(node as TypeLiteralNode, context);\n case SyntaxKind.LiteralType: // e.g. string/boolean\n return new LiteralTypeSchema(location, node.getText());\n case SyntaxKind.FunctionType:\n return functionType(node as FunctionTypeNode, context);\n case SyntaxKind.TypeQuery:\n return typeQuery(node as TypeQueryNode, context);\n case SyntaxKind.ArrayType:\n return arrayType(node as ArrayTypeNode, context);\n case SyntaxKind.TypeOperator:\n return typeOperator(node as TypeOperatorNode, context);\n case SyntaxKind.TupleType:\n return tupleType(node as TupleTypeNode, context);\n case SyntaxKind.TypePredicate:\n case SyntaxKind.ConstructorType:\n case SyntaxKind.NamedTupleMember:\n case SyntaxKind.OptionalType:\n case SyntaxKind.RestType:\n case SyntaxKind.ConditionalType:\n case SyntaxKind.InferType:\n case SyntaxKind.ParenthesizedType:\n case SyntaxKind.ThisType:\n case SyntaxKind.IndexedAccessType:\n case SyntaxKind.MappedType:\n case SyntaxKind.TemplateLiteralType:\n case SyntaxKind.TemplateLiteralTypeSpan:\n case SyntaxKind.ImportType:\n case SyntaxKind.ExpressionWithTypeArguments:\n case SyntaxKind.JSDocTypeExpression:\n case SyntaxKind.JSDocAllType:\n case SyntaxKind.JSDocUnknownType:\n case SyntaxKind.JSDocNonNullableType:\n case SyntaxKind.JSDocNullableType:\n case SyntaxKind.JSDocOptionalType:\n case SyntaxKind.JSDocFunctionType:\n case SyntaxKind.JSDocVariadicType:\n case SyntaxKind.JSDocNamepathType:\n case SyntaxKind.JSDocSignature:\n case SyntaxKind.JSDocTypeLiteral:\n throw new Error(`TypeNode \"${SyntaxKind[node.kind]}\" was not implemented yet.\ncontext: ${node.getText()}`);\n default:\n throw new Error(`Node \"${SyntaxKind[node.kind]}\" is not a TypeNode.\ncontext: ${node.getText()}`);\n }\n}\n\n/**\n * whether it's kind of `ts.KeywordTypeSyntaxKind`\n */\nfunction isKeywordType(node: TypeNode): node is KeywordTypeNode {\n switch (node.kind) {\n case SyntaxKind.AnyKeyword:\n case SyntaxKind.BigIntKeyword:\n case SyntaxKind.BooleanKeyword:\n case SyntaxKind.IntrinsicKeyword:\n case SyntaxKind.NeverKeyword:\n case SyntaxKind.NumberKeyword:\n case SyntaxKind.ObjectKeyword:\n case SyntaxKind.StringKeyword:\n case SyntaxKind.SymbolKeyword:\n case SyntaxKind.UndefinedKeyword:\n case SyntaxKind.UnknownKeyword:\n case SyntaxKind.VoidKeyword:\n return true;\n default:\n return false;\n }\n}\n\nasync function intersectionType(node: IntersectionTypeNode, context: SchemaExtractorContext) {\n const types = await pMapSeries(node.types, async (type) => {\n const typeSchema = await typeNodeToSchema(type, context);\n return typeSchema;\n });\n const location = context.getLocation(node);\n return new TypeIntersectionSchema(location, types);\n}\n\nasync function unionType(node: UnionTypeNode, context: SchemaExtractorContext) {\n const types = await pMapSeries(node.types, async (type) => {\n const typeSchema = await typeNodeToSchema(type, context);\n return typeSchema;\n });\n const location = context.getLocation(node);\n return new TypeUnionSchema(location, types);\n}\n\n/**\n * not to be confused with \"LiteralType\", which is string/boolean/null.\n * this \"TypeLiteral\" is an object with properties, such as: `{ a: string; b: number }`, similar to Interface.\n */\nasync function typeLiteral(node: TypeLiteralNode, context: SchemaExtractorContext) {\n const members = await pMapSeries(node.members, async (member) => {\n const typeSchema = await context.computeSchema(member);\n return typeSchema;\n });\n const location = context.getLocation(node);\n return new TypeLiteralSchema(location, members);\n}\n\n/**\n * In the following example, `AriaButtonProps` is a type reference\n * ```ts\n * import type { AriaButtonProps } from '@react-types/button';\n * export type ButtonProps = AriaButtonProps & { a: string };\n * ```\n */\nasync function typeReference(node: TypeReferenceNode, context: SchemaExtractorContext) {\n const name = node.typeName.getText();\n const type = await context.resolveType(node, name, false);\n return type;\n}\n\nasync function functionType(node: FunctionTypeNode, context: SchemaExtractorContext): Promise<SchemaNode> {\n const name = node.name?.getText() || '';\n const params = await getParams(node.parameters, context);\n const returnType = await typeNodeToSchema(node.type, context);\n const location = context.getLocation(node);\n return new FunctionLikeSchema(location, name, params, returnType, '');\n}\n\n/**\n * e.g. `typeof Foo`\n */\nasync function typeQuery(node: TypeQueryNode, context: SchemaExtractorContext) {\n const displaySig = await context.getQuickInfoDisplayString(node.exprName);\n const type = await context.resolveType(node.exprName, node.exprName.getText(), false);\n const location = context.getLocation(node);\n return new TypeQuerySchema(location, type, displaySig);\n}\n\nasync function arrayType(node: ArrayTypeNode, context: SchemaExtractorContext) {\n const type = await typeNodeToSchema(node.elementType, context);\n const location = context.getLocation(node);\n return new TypeArraySchema(location, type);\n}\n\n/**\n * e.g. keyof typeof Foo\n */\nasync function typeOperator(node: TypeOperatorNode, context: SchemaExtractorContext) {\n const operatorName = getOperatorName(node.operator);\n const type = await typeNodeToSchema(node.type, context);\n return new TypeOperatorSchema(context.getLocation(node), operatorName, type);\n}\n\nfunction getOperatorName(operator: SyntaxKind.KeyOfKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.ReadonlyKeyword) {\n switch (operator) {\n case SyntaxKind.KeyOfKeyword:\n return 'keyof';\n case SyntaxKind.UniqueKeyword:\n return 'unique';\n case SyntaxKind.ReadonlyKeyword:\n return 'readonly';\n default:\n throw new Error(`getOperatorName: unable to find operator name for ${operator}`);\n }\n}\n\nasync function tupleType(node: TupleTypeNode, context: SchemaExtractorContext) {\n const elements = await pMapSeries(node.elements, async (elem) => {\n const typeSchema = await typeNodeToSchema(elem, context);\n return typeSchema;\n });\n return new TupleTypeSchema(context.getLocation(node), elements);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["typeNodeToSchema","node","context","location","getLocation","isKeywordType","KeywordTypeSchema","getText","kind","SyntaxKind","IntersectionType","intersectionType","UnionType","unionType","TypeReference","typeReference","TypeLiteral","typeLiteral","LiteralType","LiteralTypeSchema","FunctionType","functionType","TypeQuery","typeQuery","ArrayType","arrayType","TypeOperator","typeOperator","TupleType","tupleType","ParenthesizedType","parenthesizedType","TypePredicate","typePredicate","IndexedAccessType","indexedAccessType","TemplateLiteralTypeSpan","templateLiteralTypeSpan","TemplateLiteralType","templateLiteralType","ConstructorType","NamedTupleMember","OptionalType","RestType","ConditionalType","InferType","ThisType","MappedType","ImportType","ExpressionWithTypeArguments","JSDocTypeExpression","JSDocAllType","JSDocUnknownType","JSDocNonNullableType","JSDocNullableType","JSDocOptionalType","JSDocFunctionType","JSDocVariadicType","JSDocNamepathType","JSDocSignature","JSDocTypeLiteral","Error","AnyKeyword","BigIntKeyword","BooleanKeyword","IntrinsicKeyword","NeverKeyword","NumberKeyword","ObjectKeyword","StringKeyword","SymbolKeyword","UndefinedKeyword","UnknownKeyword","VoidKeyword","types","pMapSeries","type","typeSchema","TypeIntersectionSchema","TypeUnionSchema","members","member","computeSchema","TypeLiteralSchema","name","typeName","resolveType","typeArguments","TypeRefSchema","args","arg","typeArgs","params","getParams","parameters","returnType","FunctionLikeSchema","displaySig","getQuickInfoDisplayString","exprName","TypeQuerySchema","elementType","TypeArraySchema","operatorName","getOperatorName","operator","TypeOperatorSchema","KeyOfKeyword","UniqueKeyword","ReadonlyKeyword","elements","elem","TupleTypeSchema","ParenthesizedTypeSchema","parameterName","isIdentifier","undefined","hasAssertsModifier","Boolean","assertsModifier","TypePredicateSchema","objectType","indexType","IndexedAccessSchema","templateSpans","span","head","text","TemplateLiteralTypeSchema","literal","TemplateLiteralTypeSpanSchema"],"sources":["type-node-to-schema.ts"],"sourcesContent":["import {\n TypeNode,\n SyntaxKind,\n KeywordTypeNode,\n FunctionTypeNode,\n TypeQueryNode,\n TypeReferenceNode,\n ArrayTypeNode,\n TypeOperatorNode,\n TupleTypeNode,\n IntersectionTypeNode,\n UnionTypeNode,\n TypeLiteralNode,\n ParenthesizedTypeNode,\n TypePredicateNode,\n isIdentifier,\n IndexedAccessTypeNode,\n TemplateLiteralTypeNode,\n TemplateLiteralTypeSpan,\n} from 'typescript';\nimport {\n SchemaNode,\n TypeRefSchema,\n TypeIntersectionSchema,\n TypeUnionSchema,\n TypeLiteralSchema,\n TypeQuerySchema,\n LiteralTypeSchema,\n KeywordTypeSchema,\n TypeArraySchema,\n TypeOperatorSchema,\n TupleTypeSchema,\n FunctionLikeSchema,\n ParenthesizedTypeSchema,\n TypePredicateSchema,\n IndexedAccessSchema,\n TemplateLiteralTypeSpanSchema,\n TemplateLiteralTypeSchema,\n} from '@teambit/semantics.entities.semantic-schema';\nimport pMapSeries from 'p-map-series';\nimport { SchemaExtractorContext } from '../../schema-extractor-context';\nimport { getParams } from './get-params';\n\n// eslint-disable-next-line complexity\nexport async function typeNodeToSchema(node: TypeNode, context: SchemaExtractorContext): Promise<SchemaNode> {\n const location = context.getLocation(node);\n if (isKeywordType(node)) {\n return new KeywordTypeSchema(location, node.getText());\n }\n switch (node.kind) {\n case SyntaxKind.IntersectionType:\n return intersectionType(node as IntersectionTypeNode, context);\n case SyntaxKind.UnionType:\n return unionType(node as UnionTypeNode, context);\n case SyntaxKind.TypeReference:\n return typeReference(node as TypeReferenceNode, context);\n case SyntaxKind.TypeLiteral:\n return typeLiteral(node as TypeLiteralNode, context);\n case SyntaxKind.LiteralType: // e.g. string/boolean\n return new LiteralTypeSchema(location, node.getText());\n case SyntaxKind.FunctionType:\n return functionType(node as FunctionTypeNode, context);\n case SyntaxKind.TypeQuery:\n return typeQuery(node as TypeQueryNode, context);\n case SyntaxKind.ArrayType:\n return arrayType(node as ArrayTypeNode, context);\n case SyntaxKind.TypeOperator:\n return typeOperator(node as TypeOperatorNode, context);\n case SyntaxKind.TupleType:\n return tupleType(node as TupleTypeNode, context);\n case SyntaxKind.ParenthesizedType:\n return parenthesizedType(node as ParenthesizedTypeNode, context);\n case SyntaxKind.TypePredicate:\n return typePredicate(node as TypePredicateNode, context);\n case SyntaxKind.IndexedAccessType:\n return indexedAccessType(node as IndexedAccessTypeNode, context);\n case SyntaxKind.TemplateLiteralTypeSpan:\n return templateLiteralTypeSpan(node as TemplateLiteralTypeSpan, context);\n case SyntaxKind.TemplateLiteralType:\n return templateLiteralType(node as TemplateLiteralTypeNode, context);\n case SyntaxKind.ConstructorType:\n case SyntaxKind.NamedTupleMember:\n case SyntaxKind.OptionalType:\n case SyntaxKind.RestType:\n case SyntaxKind.ConditionalType:\n case SyntaxKind.InferType:\n case SyntaxKind.ThisType:\n case SyntaxKind.MappedType:\n case SyntaxKind.ImportType:\n case SyntaxKind.ExpressionWithTypeArguments:\n case SyntaxKind.JSDocTypeExpression:\n case SyntaxKind.JSDocAllType:\n case SyntaxKind.JSDocUnknownType:\n case SyntaxKind.JSDocNonNullableType:\n case SyntaxKind.JSDocNullableType:\n case SyntaxKind.JSDocOptionalType:\n case SyntaxKind.JSDocFunctionType:\n case SyntaxKind.JSDocVariadicType:\n case SyntaxKind.JSDocNamepathType:\n case SyntaxKind.JSDocSignature:\n case SyntaxKind.JSDocTypeLiteral:\n throw new Error(`TypeNode ${node.kind} (probably ${SyntaxKind[node.kind]}) was not implemented yet.\ncontext: ${node.getText()}`);\n default:\n throw new Error(`Node ${node.kind} (probably ${SyntaxKind[node.kind]}) is not a TypeNode.\ncontext: ${node.getText()}`);\n }\n}\n\n/**\n * whether it's kind of `ts.KeywordTypeSyntaxKind`\n */\nfunction isKeywordType(node: TypeNode): node is KeywordTypeNode {\n switch (node.kind) {\n case SyntaxKind.AnyKeyword:\n case SyntaxKind.BigIntKeyword:\n case SyntaxKind.BooleanKeyword:\n case SyntaxKind.IntrinsicKeyword:\n case SyntaxKind.NeverKeyword:\n case SyntaxKind.NumberKeyword:\n case SyntaxKind.ObjectKeyword:\n case SyntaxKind.StringKeyword:\n case SyntaxKind.SymbolKeyword:\n case SyntaxKind.UndefinedKeyword:\n case SyntaxKind.UnknownKeyword:\n case SyntaxKind.VoidKeyword:\n return true;\n default:\n return false;\n }\n}\n\nasync function intersectionType(node: IntersectionTypeNode, context: SchemaExtractorContext) {\n const types = await pMapSeries(node.types, async (type) => {\n const typeSchema = await typeNodeToSchema(type, context);\n return typeSchema;\n });\n const location = context.getLocation(node);\n return new TypeIntersectionSchema(location, types);\n}\n\nasync function unionType(node: UnionTypeNode, context: SchemaExtractorContext) {\n const types = await pMapSeries(node.types, async (type) => {\n const typeSchema = await typeNodeToSchema(type, context);\n return typeSchema;\n });\n const location = context.getLocation(node);\n return new TypeUnionSchema(location, types);\n}\n\n/**\n * not to be confused with \"LiteralType\", which is string/boolean/null.\n * this \"TypeLiteral\" is an object with properties, such as: `{ a: string; b: number }`, similar to Interface.\n */\nasync function typeLiteral(node: TypeLiteralNode, context: SchemaExtractorContext) {\n const members = await pMapSeries(node.members, async (member) => {\n const typeSchema = await context.computeSchema(member);\n return typeSchema;\n });\n const location = context.getLocation(node);\n return new TypeLiteralSchema(location, members);\n}\n\n/**\n * In the following example, `AriaButtonProps` is a type reference\n * ```ts\n * import type { AriaButtonProps } from '@react-types/button';\n * export type ButtonProps = AriaButtonProps & { a: string };\n * ```\n */\nasync function typeReference(node: TypeReferenceNode, context: SchemaExtractorContext) {\n const name = node.typeName.getText();\n const type = await context.resolveType(node, name, false);\n if (node.typeArguments && type instanceof TypeRefSchema) {\n const args = await pMapSeries(node.typeArguments, (arg) => typeNodeToSchema(arg, context));\n type.typeArgs = args;\n }\n return type;\n}\n\nasync function functionType(node: FunctionTypeNode, context: SchemaExtractorContext): Promise<SchemaNode> {\n const name = node.name?.getText() || '';\n const params = await getParams(node.parameters, context);\n const returnType = await typeNodeToSchema(node.type, context);\n const location = context.getLocation(node);\n return new FunctionLikeSchema(location, name, params, returnType, '');\n}\n\n/**\n * e.g. `typeof Foo`\n */\nasync function typeQuery(node: TypeQueryNode, context: SchemaExtractorContext) {\n const displaySig = await context.getQuickInfoDisplayString(node.exprName);\n const type = await context.resolveType(node.exprName, node.exprName.getText(), false);\n const location = context.getLocation(node);\n return new TypeQuerySchema(location, type, displaySig);\n}\n\nasync function arrayType(node: ArrayTypeNode, context: SchemaExtractorContext) {\n const type = await typeNodeToSchema(node.elementType, context);\n const location = context.getLocation(node);\n return new TypeArraySchema(location, type);\n}\n\n/**\n * e.g. keyof typeof Foo\n */\nasync function typeOperator(node: TypeOperatorNode, context: SchemaExtractorContext) {\n const operatorName = getOperatorName(node.operator);\n const type = await typeNodeToSchema(node.type, context);\n return new TypeOperatorSchema(context.getLocation(node), operatorName, type);\n}\n\nfunction getOperatorName(operator: SyntaxKind.KeyOfKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.ReadonlyKeyword) {\n switch (operator) {\n case SyntaxKind.KeyOfKeyword:\n return 'keyof';\n case SyntaxKind.UniqueKeyword:\n return 'unique';\n case SyntaxKind.ReadonlyKeyword:\n return 'readonly';\n default:\n throw new Error(`getOperatorName: unable to find operator name for ${operator}`);\n }\n}\n\nasync function tupleType(node: TupleTypeNode, context: SchemaExtractorContext) {\n const elements = await pMapSeries(node.elements, async (elem) => {\n const typeSchema = await typeNodeToSchema(elem, context);\n return typeSchema;\n });\n return new TupleTypeSchema(context.getLocation(node), elements);\n}\n\nasync function parenthesizedType(node: ParenthesizedTypeNode, context: SchemaExtractorContext) {\n const type = await typeNodeToSchema(node.type, context);\n return new ParenthesizedTypeSchema(context.getLocation(node), type);\n}\n\nasync function typePredicate(node: TypePredicateNode, context: SchemaExtractorContext) {\n const parameterName = isIdentifier(node.parameterName) ? node.parameterName.getText() : 'this';\n const type = node.type ? await typeNodeToSchema(node.type, context) : undefined;\n const hasAssertsModifier = Boolean(node.assertsModifier);\n return new TypePredicateSchema(context.getLocation(node), parameterName, type, hasAssertsModifier);\n}\n\nasync function indexedAccessType(node: IndexedAccessTypeNode, context: SchemaExtractorContext) {\n const objectType = await typeNodeToSchema(node.objectType, context);\n const indexType = await typeNodeToSchema(node.indexType, context);\n return new IndexedAccessSchema(context.getLocation(node), objectType, indexType);\n}\n\nasync function templateLiteralType(node: TemplateLiteralTypeNode, context: SchemaExtractorContext) {\n const templateSpans = await pMapSeries(node.templateSpans, (span) => templateLiteralTypeSpan(span, context));\n const head = node.head.text;\n return new TemplateLiteralTypeSchema(context.getLocation(node), head, templateSpans);\n}\n\nasync function templateLiteralTypeSpan(node: TemplateLiteralTypeSpan, context: SchemaExtractorContext) {\n const type = await typeNodeToSchema(node.type, context);\n const literal = node.literal.text;\n return new TemplateLiteralTypeSpanSchema(context.getLocation(node), literal, type);\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import ts, { Node } from 'typescript';
|
|
2
2
|
import { SchemaExtractor } from '@teambit/schema';
|
|
3
|
+
import type { Workspace } from '@teambit/workspace';
|
|
4
|
+
import { DependencyResolverMain } from '@teambit/dependency-resolver';
|
|
3
5
|
import { SchemaNode, APISchema } from '@teambit/semantics.entities.semantic-schema';
|
|
4
6
|
import { Component } from '@teambit/component';
|
|
5
7
|
import { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';
|
|
@@ -10,7 +12,9 @@ export declare class TypeScriptExtractor implements SchemaExtractor {
|
|
|
10
12
|
private schemaTransformerSlot;
|
|
11
13
|
private tsMain;
|
|
12
14
|
private rootPath;
|
|
13
|
-
|
|
15
|
+
private depResolver;
|
|
16
|
+
private workspace;
|
|
17
|
+
constructor(tsconfig: any, schemaTransformerSlot: SchemaTransformerSlot, tsMain: TypescriptMain, rootPath: string, depResolver: DependencyResolverMain, workspace: Workspace | undefined);
|
|
14
18
|
parseSourceFile(file: AbstractVinyl): ts.SourceFile;
|
|
15
19
|
/**
|
|
16
20
|
* extract a component schema.
|
|
@@ -18,9 +22,11 @@ export declare class TypeScriptExtractor implements SchemaExtractor {
|
|
|
18
22
|
extract(component: Component): Promise<APISchema>;
|
|
19
23
|
computeExportedIdentifiers(node: Node, context: SchemaExtractorContext): Promise<import("./export-identifier").ExportIdentifier[]>;
|
|
20
24
|
private createContext;
|
|
25
|
+
private getComponentDeps;
|
|
21
26
|
private tsserver;
|
|
22
27
|
private getTsServer;
|
|
23
28
|
computeSchema(node: Node, context: SchemaExtractorContext): Promise<SchemaNode>;
|
|
29
|
+
getComponentIDByPath(file: string): Promise<import("@teambit/component").ComponentID | null | undefined>;
|
|
24
30
|
/**
|
|
25
31
|
* select the correct transformer for a node.
|
|
26
32
|
*/
|
|
@@ -82,11 +82,13 @@ function _exportList() {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
class TypeScriptExtractor {
|
|
85
|
-
constructor(tsconfig, schemaTransformerSlot, tsMain, rootPath) {
|
|
85
|
+
constructor(tsconfig, schemaTransformerSlot, tsMain, rootPath, depResolver, workspace) {
|
|
86
86
|
this.tsconfig = tsconfig;
|
|
87
87
|
this.schemaTransformerSlot = schemaTransformerSlot;
|
|
88
88
|
this.tsMain = tsMain;
|
|
89
89
|
this.rootPath = rootPath;
|
|
90
|
+
this.depResolver = depResolver;
|
|
91
|
+
this.workspace = workspace;
|
|
90
92
|
(0, _defineProperty2().default)(this, "tsserver", undefined);
|
|
91
93
|
}
|
|
92
94
|
|
|
@@ -102,7 +104,7 @@ class TypeScriptExtractor {
|
|
|
102
104
|
const tsserver = await this.getTsServer();
|
|
103
105
|
const mainFile = component.mainFile;
|
|
104
106
|
const mainAst = this.parseSourceFile(mainFile);
|
|
105
|
-
const context = this.createContext(tsserver, component);
|
|
107
|
+
const context = await this.createContext(tsserver, component);
|
|
106
108
|
const exportNames = await this.computeExportedIdentifiers(mainAst, context);
|
|
107
109
|
context.setExports(new (_exportList().ExportList)(exportNames));
|
|
108
110
|
const moduleSchema = await this.computeSchema(mainAst, context);
|
|
@@ -113,13 +115,24 @@ class TypeScriptExtractor {
|
|
|
113
115
|
}
|
|
114
116
|
|
|
115
117
|
async computeExportedIdentifiers(node, context) {
|
|
116
|
-
const transformer = this.getTransformer(node, context
|
|
117
|
-
|
|
118
|
+
const transformer = this.getTransformer(node, context);
|
|
119
|
+
|
|
120
|
+
if (!transformer || !transformer.getIdentifiers) {
|
|
121
|
+
throw new (_exceptions().TransformerNotFound)(node, context.component, context.getLocation(node));
|
|
122
|
+
}
|
|
123
|
+
|
|
118
124
|
return transformer.getIdentifiers(node, context);
|
|
119
125
|
}
|
|
120
126
|
|
|
121
|
-
createContext(tsserver, component) {
|
|
122
|
-
|
|
127
|
+
async createContext(tsserver, component) {
|
|
128
|
+
const componentDeps = await this.getComponentDeps(component);
|
|
129
|
+
return new (_schemaExtractorContext().SchemaExtractorContext)(tsserver, component, this, componentDeps);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async getComponentDeps(component) {
|
|
133
|
+
const deps = await this.depResolver.getDependencies(component);
|
|
134
|
+
const componentDeps = deps.getComponentDependencies();
|
|
135
|
+
return componentDeps;
|
|
123
136
|
}
|
|
124
137
|
|
|
125
138
|
async getTsServer() {
|
|
@@ -139,20 +152,28 @@ class TypeScriptExtractor {
|
|
|
139
152
|
}
|
|
140
153
|
|
|
141
154
|
async computeSchema(node, context) {
|
|
142
|
-
const transformer = this.getTransformer(node, context
|
|
155
|
+
const transformer = this.getTransformer(node, context); // leave the next line commented out, it is used for debugging
|
|
143
156
|
// console.log('transformer', transformer.constructor.name, node.getText());
|
|
144
157
|
|
|
145
158
|
return transformer.transform(node, context);
|
|
146
159
|
}
|
|
160
|
+
|
|
161
|
+
async getComponentIDByPath(file) {
|
|
162
|
+
if (!this.workspace) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return this.workspace.getComponentIdByPath(file);
|
|
167
|
+
}
|
|
147
168
|
/**
|
|
148
169
|
* select the correct transformer for a node.
|
|
149
170
|
*/
|
|
150
171
|
|
|
151
172
|
|
|
152
|
-
getTransformer(node,
|
|
173
|
+
getTransformer(node, context) {
|
|
153
174
|
const transformers = (0, _lodash().flatten)(this.schemaTransformerSlot.values());
|
|
154
175
|
const transformer = transformers.find(singleTransformer => singleTransformer.predicate(node));
|
|
155
|
-
if (!transformer) throw new (_exceptions().TransformerNotFound)(node, component);
|
|
176
|
+
if (!transformer) throw new (_exceptions().TransformerNotFound)(node, context.component, context.getLocation(node));
|
|
156
177
|
return transformer;
|
|
157
178
|
}
|
|
158
179
|
|