@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
require("core-js/modules/es.array.iterator.js");
|
|
4
5
|
require("core-js/modules/es.promise.js");
|
|
5
6
|
require("core-js/modules/es.regexp.exec.js");
|
|
6
7
|
require("core-js/modules/es.string.replace.js");
|
|
@@ -57,23 +58,23 @@ function _semanticsEntities() {
|
|
|
57
58
|
};
|
|
58
59
|
return data;
|
|
59
60
|
}
|
|
60
|
-
function
|
|
61
|
-
const data = _interopRequireDefault(require("
|
|
62
|
-
|
|
61
|
+
function _isRelativeImport() {
|
|
62
|
+
const data = _interopRequireDefault(require("@teambit/legacy/dist/utils/is-relative-import"));
|
|
63
|
+
_isRelativeImport = function () {
|
|
63
64
|
return data;
|
|
64
65
|
};
|
|
65
66
|
return data;
|
|
66
67
|
}
|
|
67
|
-
function
|
|
68
|
-
const data = require("
|
|
69
|
-
|
|
68
|
+
function _pMapSeries() {
|
|
69
|
+
const data = _interopRequireDefault(require("p-map-series"));
|
|
70
|
+
_pMapSeries = function () {
|
|
70
71
|
return data;
|
|
71
72
|
};
|
|
72
73
|
return data;
|
|
73
74
|
}
|
|
74
|
-
function
|
|
75
|
-
const data = require("./
|
|
76
|
-
|
|
75
|
+
function _identifierList() {
|
|
76
|
+
const data = require("./identifier-list");
|
|
77
|
+
_identifierList = function () {
|
|
77
78
|
return data;
|
|
78
79
|
};
|
|
79
80
|
return data;
|
|
@@ -92,19 +93,103 @@ function _jsdocToDocSchema() {
|
|
|
92
93
|
};
|
|
93
94
|
return data;
|
|
94
95
|
}
|
|
96
|
+
function _identifier() {
|
|
97
|
+
const data = require("./identifier");
|
|
98
|
+
_identifier = function () {
|
|
99
|
+
return data;
|
|
100
|
+
};
|
|
101
|
+
return data;
|
|
102
|
+
}
|
|
103
|
+
function _exportIdentifier() {
|
|
104
|
+
const data = require("./export-identifier");
|
|
105
|
+
_exportIdentifier = function () {
|
|
106
|
+
return data;
|
|
107
|
+
};
|
|
108
|
+
return data;
|
|
109
|
+
}
|
|
95
110
|
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); }
|
|
96
111
|
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; }
|
|
97
112
|
class SchemaExtractorContext {
|
|
113
|
+
/**
|
|
114
|
+
* list of all declared identifiers (exported and internal) by filename
|
|
115
|
+
*/
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* computed nodes by filename and (position (line:character))
|
|
119
|
+
*/
|
|
120
|
+
|
|
121
|
+
get mainFile() {
|
|
122
|
+
return (0, _utils().pathNormalizeToLinux)(this.getPathRelativeToComponent(this.component.mainFile.path));
|
|
123
|
+
}
|
|
124
|
+
get identifiers() {
|
|
125
|
+
return this._identifiers;
|
|
126
|
+
}
|
|
127
|
+
get internalIdentifiers() {
|
|
128
|
+
return this._internalIdentifiers;
|
|
129
|
+
}
|
|
130
|
+
get computed() {
|
|
131
|
+
return this._computed;
|
|
132
|
+
}
|
|
133
|
+
get mainFileIdentifierKey() {
|
|
134
|
+
const mainFile = this.component.mainFile;
|
|
135
|
+
return this.getIdentifierKey(mainFile.path);
|
|
136
|
+
}
|
|
137
|
+
get mainModuleIdentifiers() {
|
|
138
|
+
return this.identifiers.get(this.mainFileIdentifierKey);
|
|
139
|
+
}
|
|
98
140
|
constructor(tsserver, component, extractor, componentDeps, formatter) {
|
|
99
141
|
this.tsserver = tsserver;
|
|
100
142
|
this.component = component;
|
|
101
143
|
this.extractor = extractor;
|
|
102
144
|
this.componentDeps = componentDeps;
|
|
103
145
|
this.formatter = formatter;
|
|
104
|
-
(0, _defineProperty2().default)(this, "
|
|
146
|
+
(0, _defineProperty2().default)(this, "_identifiers", new Map());
|
|
147
|
+
(0, _defineProperty2().default)(this, "_internalIdentifiers", new Map());
|
|
148
|
+
(0, _defineProperty2().default)(this, "_computed", new Map());
|
|
105
149
|
}
|
|
106
|
-
|
|
107
|
-
|
|
150
|
+
getComputedNodeKey({
|
|
151
|
+
filePath,
|
|
152
|
+
line,
|
|
153
|
+
character
|
|
154
|
+
}) {
|
|
155
|
+
return `${filePath}:${line}:${character}`;
|
|
156
|
+
}
|
|
157
|
+
getIdentifierKeyForNode(node) {
|
|
158
|
+
const filePath = node.getSourceFile().fileName;
|
|
159
|
+
return this.getIdentifierKey(filePath);
|
|
160
|
+
}
|
|
161
|
+
getIdentifierKey(filePath) {
|
|
162
|
+
return (0, _utils().pathNormalizeToLinux)(filePath);
|
|
163
|
+
}
|
|
164
|
+
setComputed(node) {
|
|
165
|
+
const {
|
|
166
|
+
location
|
|
167
|
+
} = node;
|
|
168
|
+
const key = this.getComputedNodeKey(location);
|
|
169
|
+
this.computed.set(key, node);
|
|
170
|
+
}
|
|
171
|
+
setIdentifiers(filePath, identifiers) {
|
|
172
|
+
this._identifiers.set(this.getIdentifierKey(filePath), identifiers);
|
|
173
|
+
}
|
|
174
|
+
setInternalIdentifiers(filePath, identifiers) {
|
|
175
|
+
const existing = this._internalIdentifiers.get(filePath);
|
|
176
|
+
if (!existing) {
|
|
177
|
+
this._internalIdentifiers.set(filePath, identifiers);
|
|
178
|
+
} else {
|
|
179
|
+
const uniqueIdentifiers = (0, _lodash().uniqBy)(existing.identifiers.concat(identifiers.identifiers), k => k.aliasId || k.id);
|
|
180
|
+
this._internalIdentifiers.set(filePath, new (_identifierList().IdentifierList)(uniqueIdentifiers));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async computeSchema(node) {
|
|
184
|
+
const location = this.getLocation(node);
|
|
185
|
+
const key = this.getComputedNodeKey(location);
|
|
186
|
+
const existingComputedSchema = this.computed.get(key);
|
|
187
|
+
if (existingComputedSchema) {
|
|
188
|
+
return existingComputedSchema;
|
|
189
|
+
}
|
|
190
|
+
const computedSchema = await this.extractor.computeSchema(node, this);
|
|
191
|
+
this.setComputed(computedSchema);
|
|
192
|
+
return computedSchema;
|
|
108
193
|
}
|
|
109
194
|
|
|
110
195
|
/**
|
|
@@ -177,22 +262,31 @@ class SchemaExtractorContext {
|
|
|
177
262
|
}
|
|
178
263
|
visitTypeDefinition() {}
|
|
179
264
|
findFileInComponent(filePath) {
|
|
180
|
-
|
|
181
|
-
|
|
265
|
+
const filePathToCompare = (0, _utils().pathNormalizeToLinux)(filePath);
|
|
266
|
+
const matchingFile = this.component.filesystem.files.find(file => {
|
|
267
|
+
const currentFilePath = (0, _utils().pathNormalizeToLinux)(file.path);
|
|
182
268
|
// TODO: fix this line to support further extensions.
|
|
183
|
-
if (currentFilePath.includes(
|
|
269
|
+
if (currentFilePath.includes(filePathToCompare)) {
|
|
184
270
|
const strings = ['ts', 'tsx', 'js', 'jsx'].map(format => {
|
|
185
|
-
if (
|
|
186
|
-
return `${
|
|
271
|
+
if (filePathToCompare.endsWith(`.${format}`)) return filePathToCompare;
|
|
272
|
+
return `${filePathToCompare}.${format}`;
|
|
273
|
+
});
|
|
274
|
+
const matchesWithExtension = !!strings.find(string => string === currentFilePath);
|
|
275
|
+
// check if it is an index file export
|
|
276
|
+
const matchesIndexFile = !matchesWithExtension && ['ts', 'js'].some(format => {
|
|
277
|
+
return `${filePathToCompare}/index.${format}` === currentFilePath;
|
|
187
278
|
});
|
|
188
|
-
return
|
|
279
|
+
return matchesWithExtension || matchesIndexFile;
|
|
189
280
|
}
|
|
190
281
|
return false;
|
|
191
282
|
});
|
|
283
|
+
return matchingFile;
|
|
192
284
|
}
|
|
193
285
|
parsePackageNameFromPath(path) {
|
|
194
286
|
const parts = path.split('node_modules');
|
|
195
|
-
if (parts.length === 1)
|
|
287
|
+
if (parts.length === 1) {
|
|
288
|
+
return path;
|
|
289
|
+
}
|
|
196
290
|
const lastPart = parts[parts.length - 1].replace(_path().sep, '');
|
|
197
291
|
const pkgParts = lastPart.split('/');
|
|
198
292
|
if (lastPart.startsWith('@')) {
|
|
@@ -213,8 +307,7 @@ class SchemaExtractorContext {
|
|
|
213
307
|
*/
|
|
214
308
|
getSourceFileInsideComponent(filePath) {
|
|
215
309
|
const file = this.findFileInComponent(filePath);
|
|
216
|
-
|
|
217
|
-
return this.extractor.parseSourceFile(file);
|
|
310
|
+
return file && this.extractor.parseSourceFile(file);
|
|
218
311
|
}
|
|
219
312
|
async getSourceFileFromNode(node) {
|
|
220
313
|
const filePath = await this.getFilePathByNode(node);
|
|
@@ -266,12 +359,15 @@ class SchemaExtractorContext {
|
|
|
266
359
|
return this.visit(definition.parent);
|
|
267
360
|
}
|
|
268
361
|
async visit(node) {
|
|
362
|
+
if (node.kind === _typescript().SyntaxKind.Identifier && node.parent.parent.kind !== _typescript().SyntaxKind.SourceFile) {
|
|
363
|
+
return this.visit(node.parent);
|
|
364
|
+
}
|
|
269
365
|
return this.extractor.computeSchema(node, this);
|
|
270
366
|
}
|
|
271
367
|
references() {}
|
|
272
368
|
isExported() {}
|
|
273
369
|
isFromComponent() {}
|
|
274
|
-
async
|
|
370
|
+
async getFileIdentifiers(exportDec) {
|
|
275
371
|
var _exportDec$moduleSpec;
|
|
276
372
|
const file = exportDec.getSourceFile().fileName;
|
|
277
373
|
const specifierPathStr = exportDec.kind === _typescript().SyntaxKind.ExportDeclaration && ((_exportDec$moduleSpec = exportDec.moduleSpecifier) === null || _exportDec$moduleSpec === void 0 ? void 0 : _exportDec$moduleSpec.getText()) || '';
|
|
@@ -279,108 +375,154 @@ class SchemaExtractorContext {
|
|
|
279
375
|
const absPath = (0, _path().resolve)(file, '..', specifierPath);
|
|
280
376
|
const sourceFile = this.getSourceFileInsideComponent(absPath);
|
|
281
377
|
if (!sourceFile) return [];
|
|
282
|
-
return this.
|
|
378
|
+
return this.getIdentifiers(sourceFile);
|
|
283
379
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
return
|
|
380
|
+
async getFileExports(exportDec) {
|
|
381
|
+
const identifiers = await this.getFileIdentifiers(exportDec);
|
|
382
|
+
return identifiers.filter(identifier => _exportIdentifier().ExportIdentifier.isExportIdentifier(identifier));
|
|
287
383
|
}
|
|
288
|
-
|
|
289
|
-
|
|
384
|
+
async getFileInternals(exportDec) {
|
|
385
|
+
const identifiers = await this.getFileIdentifiers(exportDec);
|
|
386
|
+
return identifiers.filter(identifier => !_exportIdentifier().ExportIdentifier.isExportIdentifier(identifier));
|
|
387
|
+
}
|
|
388
|
+
getIdentifiers(node) {
|
|
389
|
+
return this.extractor.computeIdentifiers(node, this);
|
|
290
390
|
}
|
|
291
|
-
async jump(file, start) {
|
|
292
|
-
const sourceFile = this.extractor.parseSourceFile(file);
|
|
293
|
-
const pos = this.getPosition(sourceFile, start.line, start.offset);
|
|
294
|
-
const nodeAtPos = (0, _tsutils().getTokenAtPosition)(sourceFile, pos);
|
|
295
|
-
if (!nodeAtPos) return undefined;
|
|
296
391
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
return
|
|
309
|
-
} catch (err) {
|
|
310
|
-
if (err instanceof _exceptions().TransformerNotFound) {
|
|
311
|
-
return undefined;
|
|
312
|
-
}
|
|
313
|
-
throw err;
|
|
392
|
+
/**
|
|
393
|
+
* tsserver has two different calls: "definition" and "typeDefinition".
|
|
394
|
+
* normally, we need the "typeDefinition" to get the type data of a node.
|
|
395
|
+
* sometimes, it has no data, for example when the node is of type TypeReference, and then using "definition" is
|
|
396
|
+
* helpful. (couldn't find a rule when to use each one. e.g. "VariableDeclaration" sometimes has data only in
|
|
397
|
+
* "definition" but it's not clear when/why).
|
|
398
|
+
*/
|
|
399
|
+
async getDefinition(node) {
|
|
400
|
+
const typeDefinition = await this.typeDefinition(node);
|
|
401
|
+
const headTypeDefinition = (0, _lodash().head)(typeDefinition === null || typeDefinition === void 0 ? void 0 : typeDefinition.body);
|
|
402
|
+
if (headTypeDefinition) {
|
|
403
|
+
return headTypeDefinition;
|
|
314
404
|
}
|
|
405
|
+
const definition = await this.tsserver.getDefinition(node.getSourceFile().fileName, this.getLocation(node));
|
|
406
|
+
return (0, _lodash().head)(definition === null || definition === void 0 ? void 0 : definition.body);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// when we can't figure out the component/package/type of this node, we'll use the typeStr as the type.
|
|
410
|
+
async unknownExactType(node, location, typeStr = 'any', isTypeStrFromQuickInfo = true) {
|
|
411
|
+
if (isTypeStrFromQuickInfo) {
|
|
412
|
+
return new (_semanticsEntities().InferenceTypeSchema)(location, typeStr || 'any');
|
|
413
|
+
}
|
|
414
|
+
const info = await this.getQuickInfo(node);
|
|
415
|
+
const type = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
|
|
416
|
+
return new (_semanticsEntities().InferenceTypeSchema)(location, type, typeStr);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// the reason for this check is to avoid infinite loop when calling `this.jump` with the same file+location
|
|
420
|
+
isDefInSameLocation(node, definition) {
|
|
421
|
+
if (definition.file !== node.getSourceFile().fileName) {
|
|
422
|
+
return false;
|
|
423
|
+
}
|
|
424
|
+
const loc = this.getLocation(node);
|
|
425
|
+
return loc.line === definition.start.line && loc.character === definition.start.offset;
|
|
315
426
|
}
|
|
316
427
|
|
|
317
428
|
/**
|
|
318
429
|
* resolve a type by a node and its identifier.
|
|
319
430
|
*/
|
|
320
431
|
async resolveType(node, typeStr, isTypeStrFromQuickInfo = true) {
|
|
321
|
-
var _this$_exports;
|
|
322
432
|
const location = this.getLocation(node);
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
433
|
+
|
|
434
|
+
// check if internal ref with typeInfo
|
|
435
|
+
const internalRef = await this.getTypeRef(typeStr, this.getIdentifierKeyForNode(node), location);
|
|
436
|
+
if (internalRef) return internalRef;
|
|
437
|
+
|
|
438
|
+
// if a node has "type" prop, it has the type data of the node. this normally happens when the code has the type
|
|
439
|
+
// explicitly, e.g. `const str: string` vs implicitly `const str = 'some-string'`, which the node won't have "type"
|
|
326
440
|
if (node.type && _typescript().default.isTypeNode(node.type)) {
|
|
327
|
-
|
|
328
|
-
// explicitly, e.g. `const str: string` vs implicitly `const str = 'some-string'`, which the node won't have "type"
|
|
329
|
-
return (0, _typeNodeToSchema().typeNodeToSchema)(node.type, this);
|
|
441
|
+
return this.computeSchema(node.type);
|
|
330
442
|
}
|
|
331
|
-
|
|
332
|
-
* tsserver has two different calls: "definition" and "typeDefinition".
|
|
333
|
-
* normally, we need the "typeDefinition" to get the type data of a node.
|
|
334
|
-
* sometimes, it has no data, for example when the node is of type TypeReference, and then using "definition" is
|
|
335
|
-
* helpful. (couldn't find a rule when to use each one. e.g. "VariableDeclaration" sometimes has data only in
|
|
336
|
-
* "definition" but it's not clear when/why).
|
|
337
|
-
*/
|
|
338
|
-
const getDef = async () => {
|
|
339
|
-
const typeDefinition = await this.typeDefinition(node);
|
|
340
|
-
const headTypeDefinition = (0, _lodash().head)(typeDefinition === null || typeDefinition === void 0 ? void 0 : typeDefinition.body);
|
|
341
|
-
if (headTypeDefinition) {
|
|
342
|
-
return headTypeDefinition;
|
|
343
|
-
}
|
|
344
|
-
const definition = await this.tsserver.getDefinition(node.getSourceFile().fileName, this.getLocation(node));
|
|
345
|
-
return (0, _lodash().head)(definition === null || definition === void 0 ? void 0 : definition.body);
|
|
346
|
-
};
|
|
347
|
-
const definition = await getDef();
|
|
348
|
-
|
|
349
|
-
// when we can't figure out the component/package/type of this node, we'll use the typeStr as the type.
|
|
350
|
-
const unknownExactType = async () => {
|
|
351
|
-
if (isTypeStrFromQuickInfo) {
|
|
352
|
-
return new (_semanticsEntities().InferenceTypeSchema)(location, typeStr || 'any');
|
|
353
|
-
}
|
|
354
|
-
const info = await this.getQuickInfo(node);
|
|
355
|
-
const type = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
|
|
356
|
-
return new (_semanticsEntities().InferenceTypeSchema)(location, type, typeStr);
|
|
357
|
-
};
|
|
443
|
+
const definition = await this.getDefinition(node);
|
|
358
444
|
if (!definition) {
|
|
359
|
-
return unknownExactType();
|
|
445
|
+
return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);
|
|
360
446
|
}
|
|
361
|
-
|
|
362
|
-
// the reason for this check is to avoid infinite loop when calling `this.jump` with the same file+location
|
|
363
|
-
const isDefInSameLocation = () => {
|
|
364
|
-
if (definition.file !== node.getSourceFile().fileName) {
|
|
365
|
-
return false;
|
|
366
|
-
}
|
|
367
|
-
const loc = this.getLocation(node);
|
|
368
|
-
return loc.line === definition.start.line && loc.character === definition.start.offset;
|
|
369
|
-
};
|
|
370
447
|
const file = this.findFileInComponent(definition.file);
|
|
371
|
-
if (file)
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
448
|
+
if (!file) return this.getTypeRefForExternalPath(typeStr, definition.file, location);
|
|
449
|
+
if (this.isDefInSameLocation(node, definition)) {
|
|
450
|
+
return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);
|
|
451
|
+
}
|
|
452
|
+
const definitionNode = await this.definition(definition);
|
|
453
|
+
if (!definitionNode) {
|
|
454
|
+
return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);
|
|
377
455
|
}
|
|
378
|
-
|
|
456
|
+
const definitionNodeName = definitionNode === null || definitionNode === void 0 ? void 0 : definitionNode.getText();
|
|
457
|
+
|
|
458
|
+
// check if internal ref with definition info
|
|
459
|
+
const definitionInternalRef = await this.getTypeRef(definitionNodeName, this.getIdentifierKeyForNode(definitionNode), location);
|
|
460
|
+
if (definitionInternalRef) return definitionInternalRef;
|
|
461
|
+
const transformer = this.extractor.getTransformer(definitionNode, this);
|
|
462
|
+
if (transformer === undefined) {
|
|
463
|
+
return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);
|
|
464
|
+
}
|
|
465
|
+
const schemaNode = await this.visit(definitionNode);
|
|
466
|
+
return schemaNode || this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);
|
|
379
467
|
}
|
|
380
468
|
getCompIdByPkgName(pkgName) {
|
|
381
469
|
var _this$componentDeps$f;
|
|
382
470
|
return (_this$componentDeps$f = this.componentDeps.find(dep => dep.packageName === pkgName)) === null || _this$componentDeps$f === void 0 ? void 0 : _this$componentDeps$f.componentId;
|
|
383
471
|
}
|
|
472
|
+
async getTypeRef(typeStr, filePath, location) {
|
|
473
|
+
const nodeIdentifierKey = this.getIdentifierKey(filePath);
|
|
474
|
+
const mainFileIdentifierKey = this.mainFileIdentifierKey;
|
|
475
|
+
const nodeIdentifierList = this.identifiers.get(nodeIdentifierKey);
|
|
476
|
+
const mainIdentifierList = this.identifiers.get(mainFileIdentifierKey);
|
|
477
|
+
const nodeIdentifier = new (_identifier().Identifier)(typeStr, nodeIdentifierKey);
|
|
478
|
+
const mainIdentifier = new (_identifier().Identifier)(typeStr, mainFileIdentifierKey);
|
|
479
|
+
const parsedNodeIdentifier = nodeIdentifierList === null || nodeIdentifierList === void 0 ? void 0 : nodeIdentifierList.find(nodeIdentifier);
|
|
480
|
+
const parsedMainIdentifier = mainIdentifierList === null || mainIdentifierList === void 0 ? void 0 : mainIdentifierList.find(mainIdentifier);
|
|
481
|
+
const isExportedFromMain = parsedMainIdentifier && _exportIdentifier().ExportIdentifier.isExportIdentifier(parsedMainIdentifier);
|
|
482
|
+
if (!parsedNodeIdentifier) return undefined;
|
|
483
|
+
const internalRef = !isExportedFromMain;
|
|
484
|
+
if (internalRef) {
|
|
485
|
+
this.setInternalIdentifiers(filePath, new (_identifierList().IdentifierList)([parsedNodeIdentifier]));
|
|
486
|
+
}
|
|
487
|
+
return this.resolveTypeRef(parsedNodeIdentifier, location, isExportedFromMain);
|
|
488
|
+
}
|
|
489
|
+
async resolveTypeRef(identifier, location, isExportedFromMain) {
|
|
490
|
+
var _this$identifiers$get;
|
|
491
|
+
const sourceFilePath = identifier.sourceFilePath;
|
|
492
|
+
if (!sourceFilePath || isExportedFromMain) {
|
|
493
|
+
return new (_semanticsEntities().TypeRefSchema)(location, identifier.id, undefined, undefined, !isExportedFromMain ? this.getPathRelativeToComponent(identifier.filePath) : undefined);
|
|
494
|
+
}
|
|
495
|
+
if (!(0, _isRelativeImport().default)(sourceFilePath)) {
|
|
496
|
+
const pkgName = this.parsePackageNameFromPath(sourceFilePath);
|
|
497
|
+
const compIdByPkg = this.getCompIdByPkgName(pkgName);
|
|
498
|
+
const compIdByPath = await this.extractor.getComponentIDByPath(sourceFilePath);
|
|
499
|
+
if (compIdByPath) {
|
|
500
|
+
return new (_semanticsEntities().TypeRefSchema)(location, identifier.id, compIdByPath);
|
|
501
|
+
}
|
|
502
|
+
if (compIdByPkg) {
|
|
503
|
+
return new (_semanticsEntities().TypeRefSchema)(location, identifier.id, compIdByPkg);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
// package without comp id
|
|
507
|
+
return new (_semanticsEntities().TypeRefSchema)(location, identifier.id, undefined, pkgName);
|
|
508
|
+
}
|
|
509
|
+
const relativeDir = identifier.filePath.substring(0, identifier.filePath.lastIndexOf('/'));
|
|
510
|
+
const absFilePath = (0, _path().resolve)(relativeDir, sourceFilePath);
|
|
511
|
+
const compFilePath = this.findFileInComponent(absFilePath);
|
|
512
|
+
if (!compFilePath) {
|
|
513
|
+
// @todo handle this better
|
|
514
|
+
throw new Error(`cannot find file in component \n absolute path: ${absFilePath}\n source file path ${sourceFilePath}\n identifier file path ${identifier.filePath} \n relative dir ${relativeDir}`);
|
|
515
|
+
return new (_semanticsEntities().TypeRefSchema)(location, identifier.id);
|
|
516
|
+
}
|
|
517
|
+
const idKey = this.getIdentifierKey(compFilePath === null || compFilePath === void 0 ? void 0 : compFilePath.path);
|
|
518
|
+
|
|
519
|
+
// if re exported from a file, recurse until definition
|
|
520
|
+
const exportedIdentifier = (((_this$identifiers$get = this.identifiers.get(idKey)) === null || _this$identifiers$get === void 0 ? void 0 : _this$identifiers$get.identifiers) || []).find(i => i.id === identifier.id);
|
|
521
|
+
if (exportedIdentifier) {
|
|
522
|
+
return this.resolveTypeRef(exportedIdentifier, location, isExportedFromMain);
|
|
523
|
+
}
|
|
524
|
+
return new (_semanticsEntities().TypeRefSchema)(location, identifier.id);
|
|
525
|
+
}
|
|
384
526
|
async getTypeRefForExternalNode(node) {
|
|
385
527
|
const info = await this.getQuickInfo(node);
|
|
386
528
|
const typeStr = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SchemaExtractorContext","constructor","tsserver","component","extractor","componentDeps","formatter","undefined","computeSchema","node","getLocation","targetSourceFile","absolutePath","sourceFile","getSourceFile","position","getLineAndCharacterOfPosition","getStart","line","character","filePath","fileName","getPathRelativeToComponent","pathNormalizeToLinux","getLocationAsString","location","basePath","filesystem","files","base","relative","getSignature","getSignatureHelp","getPath","getPosition","offset","getPositionOfLineAndCharacter","getQuickInfo","err","message","Error","getQuickInfoDisplayString","quickInfo","body","displayString","typeDefinition","getTypeDefinition","visitTypeDefinition","findFileInComponent","find","file","currentFilePath","path","replaceAll","includes","strings","map","format","endsWith","string","parsePackageNameFromPath","parts","split","length","lastPart","replace","sep","pkgParts","startsWith","pkgName","getSourceFileInsideComponent","parseSourceFile","getSourceFileFromNode","getFilePathByNode","def","getDefinition","firstDef","head","definitionInfo","definition","startPosition","start","pos","nodeAtPos","getTokenAtPosition","visitDefinition","getTypeRefForExternalNode","visit","parent","references","isExported","isFromComponent","getFileExports","exportDec","specifierPathStr","kind","SyntaxKind","ExportDeclaration","moduleSpecifier","getText","specifierPath","substring","absPath","resolve","computeExportedIdentifiers","setExports","exports","_exports","getExportedIdentifiers","jump","TransformerNotFound","resolveType","typeStr","isTypeStrFromQuickInfo","TypeRefSchema","type","ts","isTypeNode","typeNodeToSchema","getDef","headTypeDefinition","unknownExactType","InferenceTypeSchema","info","parseTypeFromQuickInfo","isDefInSameLocation","loc","schemaNode","getTypeRefForExternalPath","getCompIdByPkgName","dep","packageName","componentId","compIdByPath","getComponentIDByPath","compIdByPkg","jsDocToDocSchema","canHaveJsDoc","jsDocs","getJsDoc","jsDoc","comment","getTextOfJSDocComment","tags","pMapSeries","tag","tagParser","DocSchema"],"sources":["schema-extractor-context.ts"],"sourcesContent":["import { TsserverClient } from '@teambit/ts-server';\nimport { getTokenAtPosition, canHaveJsDoc, getJsDoc } from 'tsutils';\nimport ts, { ExportAssignment, getTextOfJSDocComment, ExportDeclaration, Node, SyntaxKind, TypeNode } from 'typescript';\nimport { head } from 'lodash';\n// eslint-disable-next-line import/no-unresolved\nimport protocol from 'typescript/lib/protocol';\n// @ts-ignore david we should figure fix this.\nimport type { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\nimport { pathNormalizeToLinux } from '@teambit/legacy/dist/utils';\nimport { resolve, sep, relative } from 'path';\nimport { Component, ComponentID } from '@teambit/component';\nimport {\n TypeRefSchema,\n SchemaNode,\n InferenceTypeSchema,\n Location,\n DocSchema,\n} from '@teambit/semantics.entities.semantic-schema';\nimport { ComponentDependency } from '@teambit/dependency-resolver';\nimport { Formatter } from '@teambit/formatter';\nimport pMapSeries from 'p-map-series';\nimport { TypeScriptExtractor } from './typescript.extractor';\nimport { ExportList } from './export-list';\nimport { typeNodeToSchema } from './transformers/utils/type-node-to-schema';\nimport { TransformerNotFound } from './exceptions';\nimport { parseTypeFromQuickInfo } from './transformers/utils/parse-type-from-quick-info';\nimport { tagParser } from './transformers/utils/jsdoc-to-doc-schema';\n\nexport class SchemaExtractorContext {\n constructor(\n readonly tsserver: TsserverClient,\n readonly component: Component,\n readonly extractor: TypeScriptExtractor,\n readonly componentDeps: ComponentDependency[],\n readonly formatter?: Formatter\n ) {}\n\n computeSchema(node: Node) {\n return this.extractor.computeSchema(node, this);\n }\n\n /**\n * returns the location of a node in a source file.\n */\n getLocation(node: Node, targetSourceFile?: ts.SourceFile, absolutePath = false): Location {\n const sourceFile = targetSourceFile || node.getSourceFile();\n const position = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n const line = position.line + 1;\n const character = position.character + 1;\n const filePath = absolutePath ? sourceFile.fileName : this.getPathRelativeToComponent(sourceFile.fileName);\n\n return {\n filePath: pathNormalizeToLinux(filePath),\n line,\n character,\n };\n }\n\n getLocationAsString(node: Node): string {\n const location = this.getLocation(node);\n return `${node.getSourceFile().fileName}, line: ${location.line}, character: ${location.character}`;\n }\n\n getPathRelativeToComponent(filePath: string): string {\n const basePath = this.component.filesystem.files[0].base;\n return relative(basePath, filePath);\n }\n\n /**\n * returns a signature for a node.\n */\n async getSignature(node: Node) {\n return this.tsserver.getSignatureHelp(this.getPath(node), this.getLocation(node));\n }\n\n /**\n * get the position for the tsserver.\n */\n getPosition(sourceFile: ts.SourceFile, line: number, offset: number): number {\n return sourceFile.getPositionOfLineAndCharacter(line - 1, offset - 1);\n }\n\n /**\n * get the path for a source file.\n */\n getPath(node: Node) {\n const sourceFile = node.getSourceFile();\n return sourceFile.fileName;\n }\n\n async getQuickInfo(node: Node) {\n const location = this.getLocation(node);\n try {\n return await this.tsserver.getQuickInfo(this.getPath(node), location);\n } catch (err: any) {\n if (err.message === 'No content available.') {\n throw new Error(\n `unable to get quickinfo data from tsserver at ${this.getPath(node)}, Ln ${location.line}, Col ${\n location.character\n }`\n );\n }\n throw err;\n }\n }\n\n async getQuickInfoDisplayString(node: Node): Promise<string> {\n const quickInfo = await this.getQuickInfo(node);\n return quickInfo?.body?.displayString || '';\n }\n\n /**\n * returns the type definition for a type.\n */\n typeDefinition(node: Node) {\n return this.tsserver.getTypeDefinition(this.getPath(node), this.getLocation(node));\n }\n\n visitTypeDefinition() {}\n\n private findFileInComponent(filePath: string) {\n return this.component.filesystem.files.find((file) => {\n const currentFilePath = file.path.replaceAll(/\\\\/g, '/');\n // TODO: fix this line to support further extensions.\n if (currentFilePath.includes(filePath)) {\n const strings = ['ts', 'tsx', 'js', 'jsx'].map((format) => {\n if (filePath.endsWith(format)) return filePath;\n return `${filePath}.${format}`;\n });\n return strings.find((string) => string === currentFilePath);\n }\n\n return false;\n });\n }\n\n private parsePackageNameFromPath(path: string) {\n const parts = path.split('node_modules');\n if (parts.length === 1) return '';\n const lastPart = parts[parts.length - 1].replace(sep, '');\n const pkgParts = lastPart.split('/');\n if (lastPart.startsWith('@')) {\n // scoped package\n return `${pkgParts[0]}/${pkgParts[1]}`;\n }\n const pkgName = pkgParts[0];\n if (pkgName === 'typescript') {\n // it's a built-in type, such as \"string\".\n return '';\n }\n return pkgName;\n }\n\n /**\n * return the file if part of the component.\n * otherwise, a reference to the target package and the type name.\n */\n getSourceFileInsideComponent(filePath: string) {\n const file = this.findFileInComponent(filePath);\n if (!file) return undefined;\n return this.extractor.parseSourceFile(file);\n }\n\n async getSourceFileFromNode(node: Node) {\n const filePath = await this.getFilePathByNode(node);\n if (!filePath) {\n return undefined;\n }\n return this.getSourceFileInsideComponent(filePath);\n }\n\n async getFilePathByNode(node: Node) {\n const def = await this.tsserver.getDefinition(this.getPath(node), this.getLocation(node));\n\n const firstDef = head(def.body);\n return firstDef?.file;\n }\n\n async definitionInfo(node: Node): Promise<protocol.DefinitionInfo | undefined> {\n const location = this.getLocation(node);\n const filePath = this.getPath(node);\n\n const def = await this.tsserver.getDefinition(filePath, location);\n\n const firstDef = head(def.body);\n\n return firstDef;\n }\n\n /**\n * get a definition for a given node.\n */\n async definition(definition: protocol.DefinitionInfo): Promise<Node | undefined> {\n const startPosition = definition.start;\n const sourceFile = this.getSourceFileInsideComponent(definition.file);\n if (!sourceFile) {\n // it might be an external reference, cant get the node\n return undefined;\n }\n const pos = this.getPosition(sourceFile, startPosition.line, startPosition.offset);\n const nodeAtPos = getTokenAtPosition(sourceFile, pos);\n return nodeAtPos;\n }\n\n /**\n * visit a definition for node - e.g. return it's schema.\n */\n async visitDefinition(node: Node): Promise<SchemaNode | undefined> {\n const definitionInfo = await this.definitionInfo(node);\n if (!definitionInfo) {\n return undefined;\n }\n\n const definition = await this.definition(definitionInfo);\n if (!definition) {\n return this.getTypeRefForExternalNode(node);\n }\n\n return this.visit(definition.parent);\n }\n\n async visit(node: Node): Promise<SchemaNode> {\n return this.extractor.computeSchema(node, this);\n }\n\n references() {}\n\n isExported() {}\n\n isFromComponent() {}\n\n async getFileExports(exportDec: ExportDeclaration | ExportAssignment) {\n const file = exportDec.getSourceFile().fileName;\n const specifierPathStr =\n (exportDec.kind === SyntaxKind.ExportDeclaration && exportDec.moduleSpecifier?.getText()) || '';\n const specifierPath = specifierPathStr.substring(1, specifierPathStr.length - 1);\n const absPath = resolve(file, '..', specifierPath);\n const sourceFile = this.getSourceFileInsideComponent(absPath);\n if (!sourceFile) return [];\n return this.extractor.computeExportedIdentifiers(sourceFile, this);\n }\n\n _exports: ExportList | undefined = undefined;\n\n setExports(exports: ExportList) {\n this._exports = exports;\n return this;\n }\n\n getExportedIdentifiers(node: Node) {\n return this.extractor.computeExportedIdentifiers(node, this);\n }\n\n async jump(file: AbstractVinyl, start: any): Promise<SchemaNode | undefined> {\n const sourceFile = this.extractor.parseSourceFile(file);\n const pos = this.getPosition(sourceFile, start.line, start.offset);\n const nodeAtPos = getTokenAtPosition(sourceFile, pos);\n if (!nodeAtPos) return undefined;\n\n // this causes some infinite loops. it's helpful for getting more data from types that are not exported.\n // e.g.\n // ```ts\n // class Bar {}\n // export const getBar = () => new Bar();\n // ```\n // if (nodeAtPos.kind === ts.SyntaxKind.Identifier) {\n // // @todo: make sure with Ran that it's fine. Maybe it's better to do: `this.visit(nodeAtPos.parent);`\n // return this.visitDefinition(nodeAtPos);\n // }\n try {\n return await this.visit(nodeAtPos);\n } catch (err) {\n if (err instanceof TransformerNotFound) {\n return undefined;\n }\n throw err;\n }\n }\n\n /**\n * resolve a type by a node and its identifier.\n */\n async resolveType(\n node: Node & { type?: TypeNode },\n typeStr: string,\n isTypeStrFromQuickInfo = true\n ): Promise<SchemaNode> {\n const location = this.getLocation(node);\n if (this._exports?.includes(typeStr)) {\n return new TypeRefSchema(location, typeStr);\n }\n if (node.type && ts.isTypeNode(node.type)) {\n // if a node has \"type\" prop, it has the type data of the node. this normally happens when the code has the type\n // explicitly, e.g. `const str: string` vs implicitly `const str = 'some-string'`, which the node won't have \"type\"\n return typeNodeToSchema(node.type, this);\n }\n /**\n * tsserver has two different calls: \"definition\" and \"typeDefinition\".\n * normally, we need the \"typeDefinition\" to get the type data of a node.\n * sometimes, it has no data, for example when the node is of type TypeReference, and then using \"definition\" is\n * helpful. (couldn't find a rule when to use each one. e.g. \"VariableDeclaration\" sometimes has data only in\n * \"definition\" but it's not clear when/why).\n */\n const getDef = async () => {\n const typeDefinition = await this.typeDefinition(node);\n const headTypeDefinition = head(typeDefinition?.body);\n if (headTypeDefinition) {\n return headTypeDefinition;\n }\n const definition = await this.tsserver.getDefinition(node.getSourceFile().fileName, this.getLocation(node));\n return head(definition?.body);\n };\n const definition = await getDef();\n\n // when we can't figure out the component/package/type of this node, we'll use the typeStr as the type.\n const unknownExactType = async () => {\n if (isTypeStrFromQuickInfo) {\n return new InferenceTypeSchema(location, typeStr || 'any');\n }\n const info = await this.getQuickInfo(node);\n const type = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(location, type, typeStr);\n };\n if (!definition) {\n return unknownExactType();\n }\n\n // the reason for this check is to avoid infinite loop when calling `this.jump` with the same file+location\n const isDefInSameLocation = () => {\n if (definition.file !== node.getSourceFile().fileName) {\n return false;\n }\n const loc = this.getLocation(node);\n return loc.line === definition.start.line && loc.character === definition.start.offset;\n };\n\n const file = this.findFileInComponent(definition.file);\n if (file) {\n if (isDefInSameLocation()) {\n return unknownExactType();\n }\n const schemaNode = await this.jump(file, definition.start);\n return schemaNode || unknownExactType();\n }\n return this.getTypeRefForExternalPath(typeStr, definition.file, location);\n }\n\n private getCompIdByPkgName(pkgName: string): ComponentID | undefined {\n return this.componentDeps.find((dep) => dep.packageName === pkgName)?.componentId;\n }\n\n async getTypeRefForExternalNode(node: Node): Promise<TypeRefSchema> {\n const info = await this.getQuickInfo(node);\n const typeStr = parseTypeFromQuickInfo(info);\n const location = this.getLocation(node);\n const filePath = this.getPath(node);\n return this.getTypeRefForExternalPath(typeStr, filePath, location);\n }\n\n async getTypeRefForExternalPath(typeStr: string, filePath: string, location: Location): Promise<TypeRefSchema> {\n const compIdByPath = await this.extractor.getComponentIDByPath(filePath);\n if (compIdByPath) {\n return new TypeRefSchema(location, typeStr, compIdByPath);\n }\n const pkgName = this.parsePackageNameFromPath(filePath);\n const compIdByPkg = this.getCompIdByPkgName(pkgName);\n if (compIdByPkg) {\n return new TypeRefSchema(location, typeStr, compIdByPkg);\n }\n return new TypeRefSchema(location, typeStr, undefined, pkgName);\n }\n\n async jsDocToDocSchema(node: Node): Promise<DocSchema | undefined> {\n if (!canHaveJsDoc(node)) {\n return undefined;\n }\n const jsDocs = getJsDoc(node);\n if (!jsDocs.length) {\n return undefined;\n }\n // not sure how common it is to have multiple JSDocs. never seen it before.\n // regardless, in typescript implementation of methods like `getJSDocDeprecatedTag()`, they use the first one. (`getFirstJSDocTag()`)\n const jsDoc = jsDocs[0];\n const location = this.getLocation(jsDoc);\n const comment = getTextOfJSDocComment(jsDoc.comment);\n const tags = jsDoc.tags ? await pMapSeries(jsDoc.tags, (tag) => tagParser(tag, this, this.formatter)) : undefined;\n return new DocSchema(location, jsDoc.getText(), comment, tags);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["SchemaExtractorContext","mainFile","pathNormalizeToLinux","getPathRelativeToComponent","component","path","identifiers","_identifiers","internalIdentifiers","_internalIdentifiers","computed","_computed","mainFileIdentifierKey","getIdentifierKey","mainModuleIdentifiers","get","constructor","tsserver","extractor","componentDeps","formatter","Map","getComputedNodeKey","filePath","line","character","getIdentifierKeyForNode","node","getSourceFile","fileName","setComputed","location","key","set","setIdentifiers","setInternalIdentifiers","existing","uniqueIdentifiers","uniqBy","concat","k","aliasId","id","IdentifierList","computeSchema","getLocation","existingComputedSchema","computedSchema","targetSourceFile","absolutePath","sourceFile","position","getLineAndCharacterOfPosition","getStart","getLocationAsString","basePath","filesystem","files","base","relative","getSignature","getSignatureHelp","getPath","getPosition","offset","getPositionOfLineAndCharacter","getQuickInfo","err","message","Error","getQuickInfoDisplayString","quickInfo","body","displayString","typeDefinition","getTypeDefinition","visitTypeDefinition","findFileInComponent","filePathToCompare","matchingFile","find","file","currentFilePath","includes","strings","map","format","endsWith","matchesWithExtension","string","matchesIndexFile","some","parsePackageNameFromPath","parts","split","length","lastPart","replace","sep","pkgParts","startsWith","pkgName","getSourceFileInsideComponent","parseSourceFile","getSourceFileFromNode","getFilePathByNode","undefined","def","getDefinition","firstDef","head","definitionInfo","definition","startPosition","start","pos","nodeAtPos","getTokenAtPosition","visitDefinition","getTypeRefForExternalNode","visit","parent","kind","SyntaxKind","Identifier","SourceFile","references","isExported","isFromComponent","getFileIdentifiers","exportDec","specifierPathStr","ExportDeclaration","moduleSpecifier","getText","specifierPath","substring","absPath","resolve","getIdentifiers","getFileExports","filter","identifier","ExportIdentifier","isExportIdentifier","getFileInternals","computeIdentifiers","headTypeDefinition","unknownExactType","typeStr","isTypeStrFromQuickInfo","InferenceTypeSchema","info","type","parseTypeFromQuickInfo","isDefInSameLocation","loc","resolveType","internalRef","getTypeRef","ts","isTypeNode","getTypeRefForExternalPath","definitionNode","definitionNodeName","definitionInternalRef","transformer","getTransformer","schemaNode","getCompIdByPkgName","dep","packageName","componentId","nodeIdentifierKey","nodeIdentifierList","mainIdentifierList","nodeIdentifier","mainIdentifier","parsedNodeIdentifier","parsedMainIdentifier","isExportedFromMain","resolveTypeRef","sourceFilePath","TypeRefSchema","isRelativeImport","compIdByPkg","compIdByPath","getComponentIDByPath","relativeDir","lastIndexOf","absFilePath","compFilePath","idKey","exportedIdentifier","i","jsDocToDocSchema","canHaveJsDoc","jsDocs","getJsDoc","jsDoc","comment","getTextOfJSDocComment","tags","pMapSeries","tag","tagParser","DocSchema"],"sources":["schema-extractor-context.ts"],"sourcesContent":["import { TsserverClient } from '@teambit/ts-server';\nimport { getTokenAtPosition, canHaveJsDoc, getJsDoc } from 'tsutils';\nimport ts, { ExportAssignment, getTextOfJSDocComment, ExportDeclaration, Node, SyntaxKind, TypeNode } from 'typescript';\nimport { head, uniqBy } from 'lodash';\n// @ts-ignore david we should figure fix this.\n// eslint-disable-next-line import/no-unresolved\nimport protocol from 'typescript/lib/protocol';\nimport { pathNormalizeToLinux } from '@teambit/legacy/dist/utils';\nimport { resolve, sep, relative } from 'path';\nimport { Component, ComponentID } from '@teambit/component';\nimport {\n TypeRefSchema,\n SchemaNode,\n InferenceTypeSchema,\n Location,\n DocSchema,\n} from '@teambit/semantics.entities.semantic-schema';\nimport isRelativeImport from '@teambit/legacy/dist/utils/is-relative-import';\nimport { ComponentDependency } from '@teambit/dependency-resolver';\nimport { Formatter } from '@teambit/formatter';\nimport pMapSeries from 'p-map-series';\nimport { TypeScriptExtractor } from './typescript.extractor';\nimport { IdentifierList } from './identifier-list';\nimport { parseTypeFromQuickInfo } from './transformers/utils/parse-type-from-quick-info';\nimport { tagParser } from './transformers/utils/jsdoc-to-doc-schema';\nimport { Identifier } from './identifier';\nimport { ExportIdentifier } from './export-identifier';\n\nexport class SchemaExtractorContext {\n /**\n * list of all declared identifiers (exported and internal) by filename\n */\n private _identifiers = new Map<string, IdentifierList>();\n private _internalIdentifiers = new Map<string, IdentifierList>();\n\n /**\n * computed nodes by filename and (position (line:character))\n */\n private _computed = new Map<string, SchemaNode>();\n\n get mainFile() {\n return pathNormalizeToLinux(this.getPathRelativeToComponent(this.component.mainFile.path));\n }\n\n get identifiers() {\n return this._identifiers;\n }\n\n get internalIdentifiers() {\n return this._internalIdentifiers;\n }\n\n get computed() {\n return this._computed;\n }\n\n get mainFileIdentifierKey() {\n const mainFile = this.component.mainFile;\n return this.getIdentifierKey(mainFile.path);\n }\n\n get mainModuleIdentifiers() {\n return this.identifiers.get(this.mainFileIdentifierKey);\n }\n\n constructor(\n readonly tsserver: TsserverClient,\n readonly component: Component,\n readonly extractor: TypeScriptExtractor,\n readonly componentDeps: ComponentDependency[],\n readonly formatter?: Formatter\n ) {}\n\n getComputedNodeKey({ filePath, line, character }: Location) {\n return `${filePath}:${line}:${character}`;\n }\n\n getIdentifierKeyForNode(node: Node) {\n const filePath = node.getSourceFile().fileName;\n return this.getIdentifierKey(filePath);\n }\n\n getIdentifierKey(filePath: string) {\n return pathNormalizeToLinux(filePath);\n }\n\n setComputed(node: SchemaNode) {\n const { location } = node;\n const key = this.getComputedNodeKey(location);\n this.computed.set(key, node);\n }\n\n setIdentifiers(filePath: string, identifiers: IdentifierList) {\n this._identifiers.set(this.getIdentifierKey(filePath), identifiers);\n }\n\n setInternalIdentifiers(filePath: string, identifiers: IdentifierList) {\n const existing = this._internalIdentifiers.get(filePath);\n if (!existing) {\n this._internalIdentifiers.set(filePath, identifiers);\n } else {\n const uniqueIdentifiers = uniqBy(existing.identifiers.concat(identifiers.identifiers), (k) => k.aliasId || k.id);\n this._internalIdentifiers.set(filePath, new IdentifierList(uniqueIdentifiers));\n }\n }\n\n async computeSchema(node: Node) {\n const location = this.getLocation(node);\n const key = this.getComputedNodeKey(location);\n const existingComputedSchema = this.computed.get(key);\n\n if (existingComputedSchema) {\n return existingComputedSchema;\n }\n\n const computedSchema = await this.extractor.computeSchema(node, this);\n this.setComputed(computedSchema);\n return computedSchema;\n }\n\n /**\n * returns the location of a node in a source file.\n */\n getLocation(node: Node, targetSourceFile?: ts.SourceFile, absolutePath = false): Location {\n const sourceFile = targetSourceFile || node.getSourceFile();\n const position = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n const line = position.line + 1;\n const character = position.character + 1;\n const filePath = absolutePath ? sourceFile.fileName : this.getPathRelativeToComponent(sourceFile.fileName);\n\n return {\n filePath: pathNormalizeToLinux(filePath),\n line,\n character,\n };\n }\n\n getLocationAsString(node: Node): string {\n const location = this.getLocation(node);\n return `${node.getSourceFile().fileName}, line: ${location.line}, character: ${location.character}`;\n }\n\n getPathRelativeToComponent(filePath: string): string {\n const basePath = this.component.filesystem.files[0].base;\n return relative(basePath, filePath);\n }\n\n /**\n * returns a signature for a node.\n */\n async getSignature(node: Node) {\n return this.tsserver.getSignatureHelp(this.getPath(node), this.getLocation(node));\n }\n\n /**\n * get the position for the tsserver.\n */\n getPosition(sourceFile: ts.SourceFile, line: number, offset: number): number {\n return sourceFile.getPositionOfLineAndCharacter(line - 1, offset - 1);\n }\n\n /**\n * get the path for a source file.\n */\n getPath(node: Node) {\n const sourceFile = node.getSourceFile();\n return sourceFile.fileName;\n }\n\n async getQuickInfo(node: Node) {\n const location = this.getLocation(node);\n try {\n return await this.tsserver.getQuickInfo(this.getPath(node), location);\n } catch (err: any) {\n if (err.message === 'No content available.') {\n throw new Error(\n `unable to get quickinfo data from tsserver at ${this.getPath(node)}, Ln ${location.line}, Col ${\n location.character\n }`\n );\n }\n throw err;\n }\n }\n\n async getQuickInfoDisplayString(node: Node): Promise<string> {\n const quickInfo = await this.getQuickInfo(node);\n return quickInfo?.body?.displayString || '';\n }\n\n /**\n * returns the type definition for a type.\n */\n typeDefinition(node: Node) {\n return this.tsserver.getTypeDefinition(this.getPath(node), this.getLocation(node));\n }\n\n visitTypeDefinition() {}\n\n findFileInComponent(filePath: string) {\n const filePathToCompare = pathNormalizeToLinux(filePath);\n const matchingFile = this.component.filesystem.files.find((file) => {\n const currentFilePath = pathNormalizeToLinux(file.path);\n // TODO: fix this line to support further extensions.\n if (currentFilePath.includes(filePathToCompare)) {\n const strings = ['ts', 'tsx', 'js', 'jsx'].map((format) => {\n if (filePathToCompare.endsWith(`.${format}`)) return filePathToCompare;\n\n return `${filePathToCompare}.${format}`;\n });\n\n const matchesWithExtension = !!strings.find((string) => string === currentFilePath);\n // check if it is an index file export\n const matchesIndexFile =\n !matchesWithExtension &&\n ['ts', 'js'].some((format) => {\n return `${filePathToCompare}/index.${format}` === currentFilePath;\n });\n\n return matchesWithExtension || matchesIndexFile;\n }\n\n return false;\n });\n\n return matchingFile;\n }\n\n private parsePackageNameFromPath(path: string) {\n const parts = path.split('node_modules');\n\n if (parts.length === 1) {\n return path;\n }\n\n const lastPart = parts[parts.length - 1].replace(sep, '');\n const pkgParts = lastPart.split('/');\n if (lastPart.startsWith('@')) {\n // scoped package\n return `${pkgParts[0]}/${pkgParts[1]}`;\n }\n const pkgName = pkgParts[0];\n if (pkgName === 'typescript') {\n // it's a built-in type, such as \"string\".\n return '';\n }\n return pkgName;\n }\n\n /**\n * return the file if part of the component.\n * otherwise, a reference to the target package and the type name.\n */\n getSourceFileInsideComponent(filePath: string) {\n const file = this.findFileInComponent(filePath);\n return file && this.extractor.parseSourceFile(file);\n }\n\n async getSourceFileFromNode(node: Node) {\n const filePath = await this.getFilePathByNode(node);\n if (!filePath) {\n return undefined;\n }\n return this.getSourceFileInsideComponent(filePath);\n }\n\n async getFilePathByNode(node: Node) {\n const def = await this.tsserver.getDefinition(this.getPath(node), this.getLocation(node));\n\n const firstDef = head(def.body);\n return firstDef?.file;\n }\n\n async definitionInfo(node: Node): Promise<protocol.DefinitionInfo | undefined> {\n const location = this.getLocation(node);\n const filePath = this.getPath(node);\n\n const def = await this.tsserver.getDefinition(filePath, location);\n\n const firstDef = head(def.body);\n\n return firstDef;\n }\n\n /**\n * get a definition for a given node.\n */\n async definition(definition: protocol.DefinitionInfo): Promise<Node | undefined> {\n const startPosition = definition.start;\n const sourceFile = this.getSourceFileInsideComponent(definition.file);\n if (!sourceFile) {\n // it might be an external reference, cant get the node\n return undefined;\n }\n const pos = this.getPosition(sourceFile, startPosition.line, startPosition.offset);\n const nodeAtPos = getTokenAtPosition(sourceFile, pos);\n return nodeAtPos;\n }\n\n /**\n * visit a definition for node - e.g. return it's schema.\n */\n async visitDefinition(node: Node): Promise<SchemaNode | undefined> {\n const definitionInfo = await this.definitionInfo(node);\n if (!definitionInfo) {\n return undefined;\n }\n\n const definition = await this.definition(definitionInfo);\n if (!definition) {\n return this.getTypeRefForExternalNode(node);\n }\n\n return this.visit(definition.parent);\n }\n\n async visit(node: Node): Promise<SchemaNode> {\n if (node.kind === SyntaxKind.Identifier && node.parent.parent.kind !== SyntaxKind.SourceFile) {\n return this.visit(node.parent);\n }\n return this.extractor.computeSchema(node, this);\n }\n\n references() {}\n\n isExported() {}\n\n isFromComponent() {}\n\n async getFileIdentifiers(exportDec: ExportDeclaration | ExportAssignment) {\n const file = exportDec.getSourceFile().fileName;\n const specifierPathStr =\n (exportDec.kind === SyntaxKind.ExportDeclaration && exportDec.moduleSpecifier?.getText()) || '';\n const specifierPath = specifierPathStr.substring(1, specifierPathStr.length - 1);\n const absPath = resolve(file, '..', specifierPath);\n const sourceFile = this.getSourceFileInsideComponent(absPath);\n if (!sourceFile) return [];\n return this.getIdentifiers(sourceFile);\n }\n\n async getFileExports(exportDec: ExportDeclaration | ExportAssignment) {\n const identifiers = await this.getFileIdentifiers(exportDec);\n return identifiers.filter((identifier) => ExportIdentifier.isExportIdentifier(identifier));\n }\n\n async getFileInternals(exportDec: ExportDeclaration | ExportAssignment) {\n const identifiers = await this.getFileIdentifiers(exportDec);\n return identifiers.filter((identifier) => !ExportIdentifier.isExportIdentifier(identifier));\n }\n\n getIdentifiers(node: Node) {\n return this.extractor.computeIdentifiers(node, this);\n }\n\n /**\n * tsserver has two different calls: \"definition\" and \"typeDefinition\".\n * normally, we need the \"typeDefinition\" to get the type data of a node.\n * sometimes, it has no data, for example when the node is of type TypeReference, and then using \"definition\" is\n * helpful. (couldn't find a rule when to use each one. e.g. \"VariableDeclaration\" sometimes has data only in\n * \"definition\" but it's not clear when/why).\n */\n async getDefinition(node: Node) {\n const typeDefinition = await this.typeDefinition(node);\n const headTypeDefinition = head(typeDefinition?.body);\n if (headTypeDefinition) {\n return headTypeDefinition;\n }\n const definition = await this.tsserver.getDefinition(node.getSourceFile().fileName, this.getLocation(node));\n return head(definition?.body);\n }\n\n // when we can't figure out the component/package/type of this node, we'll use the typeStr as the type.\n private async unknownExactType(node: Node, location: Location, typeStr = 'any', isTypeStrFromQuickInfo = true) {\n if (isTypeStrFromQuickInfo) {\n return new InferenceTypeSchema(location, typeStr || 'any');\n }\n const info = await this.getQuickInfo(node);\n const type = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(location, type, typeStr);\n }\n\n // the reason for this check is to avoid infinite loop when calling `this.jump` with the same file+location\n private isDefInSameLocation(node: Node, definition: protocol.FileSpanWithContext) {\n if (definition.file !== node.getSourceFile().fileName) {\n return false;\n }\n const loc = this.getLocation(node);\n\n return loc.line === definition.start.line && loc.character === definition.start.offset;\n }\n\n /**\n * resolve a type by a node and its identifier.\n */\n async resolveType(\n node: Node & { type?: TypeNode },\n typeStr: string,\n isTypeStrFromQuickInfo = true\n ): Promise<SchemaNode> {\n const location = this.getLocation(node);\n\n // check if internal ref with typeInfo\n const internalRef = await this.getTypeRef(typeStr, this.getIdentifierKeyForNode(node), location);\n\n if (internalRef) return internalRef;\n\n // if a node has \"type\" prop, it has the type data of the node. this normally happens when the code has the type\n // explicitly, e.g. `const str: string` vs implicitly `const str = 'some-string'`, which the node won't have \"type\"\n if (node.type && ts.isTypeNode(node.type)) {\n return this.computeSchema(node.type);\n }\n\n const definition = await this.getDefinition(node);\n if (!definition) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const file = this.findFileInComponent(definition.file);\n\n if (!file) return this.getTypeRefForExternalPath(typeStr, definition.file, location);\n\n if (this.isDefInSameLocation(node, definition)) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const definitionNode = await this.definition(definition);\n\n if (!definitionNode) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n const definitionNodeName = definitionNode?.getText();\n\n // check if internal ref with definition info\n const definitionInternalRef = await this.getTypeRef(\n definitionNodeName,\n this.getIdentifierKeyForNode(definitionNode),\n location\n );\n\n if (definitionInternalRef) return definitionInternalRef;\n\n const transformer = this.extractor.getTransformer(definitionNode, this);\n\n if (transformer === undefined) {\n return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n const schemaNode = await this.visit(definitionNode);\n return schemaNode || this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);\n }\n\n private getCompIdByPkgName(pkgName: string): ComponentID | undefined {\n return this.componentDeps.find((dep) => dep.packageName === pkgName)?.componentId;\n }\n\n async getTypeRef(typeStr: string, filePath: string, location: Location): Promise<TypeRefSchema | undefined> {\n const nodeIdentifierKey = this.getIdentifierKey(filePath);\n const mainFileIdentifierKey = this.mainFileIdentifierKey;\n\n const nodeIdentifierList = this.identifiers.get(nodeIdentifierKey);\n const mainIdentifierList = this.identifiers.get(mainFileIdentifierKey);\n\n const nodeIdentifier = new Identifier(typeStr, nodeIdentifierKey);\n const mainIdentifier = new Identifier(typeStr, mainFileIdentifierKey);\n\n const parsedNodeIdentifier = nodeIdentifierList?.find(nodeIdentifier);\n const parsedMainIdentifier = mainIdentifierList?.find(mainIdentifier);\n const isExportedFromMain = parsedMainIdentifier && ExportIdentifier.isExportIdentifier(parsedMainIdentifier);\n\n if (!parsedNodeIdentifier) return undefined;\n\n const internalRef = !isExportedFromMain;\n\n if (internalRef) {\n this.setInternalIdentifiers(filePath, new IdentifierList([parsedNodeIdentifier]));\n }\n\n return this.resolveTypeRef(parsedNodeIdentifier, location, isExportedFromMain);\n }\n\n async resolveTypeRef(\n identifier: Identifier,\n location: Location,\n isExportedFromMain?: boolean\n ): Promise<TypeRefSchema> {\n const sourceFilePath = identifier.sourceFilePath;\n\n if (!sourceFilePath || isExportedFromMain) {\n return new TypeRefSchema(\n location,\n identifier.id,\n undefined,\n undefined,\n !isExportedFromMain ? this.getPathRelativeToComponent(identifier.filePath) : undefined\n );\n }\n\n if (!isRelativeImport(sourceFilePath)) {\n const pkgName = this.parsePackageNameFromPath(sourceFilePath);\n const compIdByPkg = this.getCompIdByPkgName(pkgName);\n\n const compIdByPath = await this.extractor.getComponentIDByPath(sourceFilePath);\n\n if (compIdByPath) {\n return new TypeRefSchema(location, identifier.id, compIdByPath);\n }\n\n if (compIdByPkg) {\n return new TypeRefSchema(location, identifier.id, compIdByPkg);\n }\n\n // package without comp id\n return new TypeRefSchema(location, identifier.id, undefined, pkgName);\n }\n\n const relativeDir = identifier.filePath.substring(0, identifier.filePath.lastIndexOf('/'));\n const absFilePath = resolve(relativeDir, sourceFilePath);\n const compFilePath = this.findFileInComponent(absFilePath);\n\n if (!compFilePath) {\n // @todo handle this better\n throw new Error(\n `cannot find file in component \\n absolute path: ${absFilePath}\\n source file path ${sourceFilePath}\\n identifier file path ${identifier.filePath} \\n relative dir ${relativeDir}`\n );\n return new TypeRefSchema(location, identifier.id);\n }\n\n const idKey = this.getIdentifierKey(compFilePath?.path);\n\n // if re exported from a file, recurse until definition\n const exportedIdentifier = (this.identifiers.get(idKey)?.identifiers || []).find((i) => i.id === identifier.id);\n\n if (exportedIdentifier) {\n return this.resolveTypeRef(exportedIdentifier, location, isExportedFromMain);\n }\n\n return new TypeRefSchema(location, identifier.id);\n }\n\n async getTypeRefForExternalNode(node: Node): Promise<TypeRefSchema> {\n const info = await this.getQuickInfo(node);\n const typeStr = parseTypeFromQuickInfo(info);\n const location = this.getLocation(node);\n const filePath = this.getPath(node);\n return this.getTypeRefForExternalPath(typeStr, filePath, location);\n }\n\n async getTypeRefForExternalPath(typeStr: string, filePath: string, location: Location): Promise<TypeRefSchema> {\n const compIdByPath = await this.extractor.getComponentIDByPath(filePath);\n if (compIdByPath) {\n return new TypeRefSchema(location, typeStr, compIdByPath);\n }\n const pkgName = this.parsePackageNameFromPath(filePath);\n const compIdByPkg = this.getCompIdByPkgName(pkgName);\n if (compIdByPkg) {\n return new TypeRefSchema(location, typeStr, compIdByPkg);\n }\n return new TypeRefSchema(location, typeStr, undefined, pkgName);\n }\n\n async jsDocToDocSchema(node: Node): Promise<DocSchema | undefined> {\n if (!canHaveJsDoc(node)) {\n return undefined;\n }\n const jsDocs = getJsDoc(node);\n if (!jsDocs.length) {\n return undefined;\n }\n // not sure how common it is to have multiple JSDocs. never seen it before.\n // regardless, in typescript implementation of methods like `getJSDocDeprecatedTag()`, they use the first one. (`getFirstJSDocTag()`)\n const jsDoc = jsDocs[0];\n const location = this.getLocation(jsDoc);\n const comment = getTextOfJSDocComment(jsDoc.comment);\n const tags = jsDoc.tags ? await pMapSeries(jsDoc.tags, (tag) => tagParser(tag, this, this.formatter)) : undefined;\n return new DocSchema(location, jsDoc.getText(), comment, tags);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Node } from 'typescript';
|
|
2
2
|
import { SchemaNode } from '@teambit/semantics.entities.semantic-schema';
|
|
3
3
|
import { SchemaExtractorContext } from './schema-extractor-context';
|
|
4
|
-
import {
|
|
4
|
+
import { Identifier } from './identifier';
|
|
5
5
|
export declare type SchemaTransformer = {
|
|
6
6
|
/**
|
|
7
7
|
* determine whether to apply schema on given node.
|
|
8
8
|
*/
|
|
9
9
|
predicate(node: Node): boolean;
|
|
10
|
-
getIdentifiers(node: Node, context: SchemaExtractorContext): Promise<
|
|
10
|
+
getIdentifiers(node: Node, context: SchemaExtractorContext): Promise<Identifier[]>;
|
|
11
11
|
/**
|
|
12
12
|
* transform the node into JSONSchema.
|
|
13
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["schema-transformer.ts"],"sourcesContent":["import { Node } from 'typescript';\nimport { SchemaNode } from '@teambit/semantics.entities.semantic-schema';\nimport { SchemaExtractorContext } from './schema-extractor-context';\nimport {
|
|
1
|
+
{"version":3,"names":[],"sources":["schema-transformer.ts"],"sourcesContent":["import { Node } from 'typescript';\nimport { SchemaNode } from '@teambit/semantics.entities.semantic-schema';\nimport { SchemaExtractorContext } from './schema-extractor-context';\nimport { Identifier } from './identifier';\n\nexport type SchemaTransformer = {\n /**\n * determine whether to apply schema on given node.\n */\n predicate(node: Node): boolean;\n\n getIdentifiers(node: Node, context: SchemaExtractorContext): Promise<Identifier[]>;\n\n /**\n * transform the node into JSONSchema.\n */\n transform(node: Node, context: SchemaExtractorContext): Promise<SchemaNode>;\n};\n"],"mappings":""}
|