@teambit/typescript 0.0.964 → 0.0.966
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-1674098968766.js → preview-1674531051110.js} +2 -2
- package/dist/schema-extractor-context.d.ts +40 -8
- package/dist/schema-extractor-context.js +243 -100
- 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.966.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.964.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,21 +262,31 @@ class SchemaExtractorContext {
|
|
|
177
262
|
}
|
|
178
263
|
visitTypeDefinition() {}
|
|
179
264
|
findFileInComponent(filePath) {
|
|
180
|
-
|
|
265
|
+
const filePathToCompare = (0, _utils().pathNormalizeToLinux)(filePath);
|
|
266
|
+
const matchingFile = this.component.filesystem.files.find(file => {
|
|
267
|
+
const currentFilePath = (0, _utils().pathNormalizeToLinux)(file.path);
|
|
181
268
|
// TODO: fix this line to support further extensions.
|
|
182
|
-
if (
|
|
269
|
+
if (currentFilePath.includes(filePathToCompare)) {
|
|
183
270
|
const strings = ['ts', 'tsx', 'js', 'jsx'].map(format => {
|
|
184
|
-
if (
|
|
185
|
-
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;
|
|
186
278
|
});
|
|
187
|
-
return
|
|
279
|
+
return matchesWithExtension || matchesIndexFile;
|
|
188
280
|
}
|
|
189
281
|
return false;
|
|
190
282
|
});
|
|
283
|
+
return matchingFile;
|
|
191
284
|
}
|
|
192
285
|
parsePackageNameFromPath(path) {
|
|
193
286
|
const parts = path.split('node_modules');
|
|
194
|
-
if (parts.length === 1)
|
|
287
|
+
if (parts.length === 1) {
|
|
288
|
+
return path;
|
|
289
|
+
}
|
|
195
290
|
const lastPart = parts[parts.length - 1].replace(_path().sep, '');
|
|
196
291
|
const pkgParts = lastPart.split('/');
|
|
197
292
|
if (lastPart.startsWith('@')) {
|
|
@@ -212,8 +307,7 @@ class SchemaExtractorContext {
|
|
|
212
307
|
*/
|
|
213
308
|
getSourceFileInsideComponent(filePath) {
|
|
214
309
|
const file = this.findFileInComponent(filePath);
|
|
215
|
-
|
|
216
|
-
return this.extractor.parseSourceFile(file);
|
|
310
|
+
return file && this.extractor.parseSourceFile(file);
|
|
217
311
|
}
|
|
218
312
|
async getSourceFileFromNode(node) {
|
|
219
313
|
const filePath = await this.getFilePathByNode(node);
|
|
@@ -265,12 +359,15 @@ class SchemaExtractorContext {
|
|
|
265
359
|
return this.visit(definition.parent);
|
|
266
360
|
}
|
|
267
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
|
+
}
|
|
268
365
|
return this.extractor.computeSchema(node, this);
|
|
269
366
|
}
|
|
270
367
|
references() {}
|
|
271
368
|
isExported() {}
|
|
272
369
|
isFromComponent() {}
|
|
273
|
-
async
|
|
370
|
+
async getFileIdentifiers(exportDec) {
|
|
274
371
|
var _exportDec$moduleSpec;
|
|
275
372
|
const file = exportDec.getSourceFile().fileName;
|
|
276
373
|
const specifierPathStr = exportDec.kind === _typescript().SyntaxKind.ExportDeclaration && ((_exportDec$moduleSpec = exportDec.moduleSpecifier) === null || _exportDec$moduleSpec === void 0 ? void 0 : _exportDec$moduleSpec.getText()) || '';
|
|
@@ -278,108 +375,154 @@ class SchemaExtractorContext {
|
|
|
278
375
|
const absPath = (0, _path().resolve)(file, '..', specifierPath);
|
|
279
376
|
const sourceFile = this.getSourceFileInsideComponent(absPath);
|
|
280
377
|
if (!sourceFile) return [];
|
|
281
|
-
return this.
|
|
378
|
+
return this.getIdentifiers(sourceFile);
|
|
282
379
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
return
|
|
380
|
+
async getFileExports(exportDec) {
|
|
381
|
+
const identifiers = await this.getFileIdentifiers(exportDec);
|
|
382
|
+
return identifiers.filter(identifier => _exportIdentifier().ExportIdentifier.isExportIdentifier(identifier));
|
|
286
383
|
}
|
|
287
|
-
|
|
288
|
-
|
|
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);
|
|
289
390
|
}
|
|
290
|
-
async jump(file, start) {
|
|
291
|
-
const sourceFile = this.extractor.parseSourceFile(file);
|
|
292
|
-
const pos = this.getPosition(sourceFile, start.line, start.offset);
|
|
293
|
-
const nodeAtPos = (0, _tsutils().getTokenAtPosition)(sourceFile, pos);
|
|
294
|
-
if (!nodeAtPos) return undefined;
|
|
295
391
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
return
|
|
308
|
-
} catch (err) {
|
|
309
|
-
if (err instanceof _exceptions().TransformerNotFound) {
|
|
310
|
-
return undefined;
|
|
311
|
-
}
|
|
312
|
-
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;
|
|
313
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;
|
|
314
426
|
}
|
|
315
427
|
|
|
316
428
|
/**
|
|
317
429
|
* resolve a type by a node and its identifier.
|
|
318
430
|
*/
|
|
319
431
|
async resolveType(node, typeStr, isTypeStrFromQuickInfo = true) {
|
|
320
|
-
var _this$_exports;
|
|
321
432
|
const location = this.getLocation(node);
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
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"
|
|
325
440
|
if (node.type && _typescript().default.isTypeNode(node.type)) {
|
|
326
|
-
|
|
327
|
-
// explicitly, e.g. `const str: string` vs implicitly `const str = 'some-string'`, which the node won't have "type"
|
|
328
|
-
return (0, _typeNodeToSchema().typeNodeToSchema)(node.type, this);
|
|
441
|
+
return this.computeSchema(node.type);
|
|
329
442
|
}
|
|
330
|
-
|
|
331
|
-
* tsserver has two different calls: "definition" and "typeDefinition".
|
|
332
|
-
* normally, we need the "typeDefinition" to get the type data of a node.
|
|
333
|
-
* sometimes, it has no data, for example when the node is of type TypeReference, and then using "definition" is
|
|
334
|
-
* helpful. (couldn't find a rule when to use each one. e.g. "VariableDeclaration" sometimes has data only in
|
|
335
|
-
* "definition" but it's not clear when/why).
|
|
336
|
-
*/
|
|
337
|
-
const getDef = async () => {
|
|
338
|
-
const typeDefinition = await this.typeDefinition(node);
|
|
339
|
-
const headTypeDefinition = (0, _lodash().head)(typeDefinition === null || typeDefinition === void 0 ? void 0 : typeDefinition.body);
|
|
340
|
-
if (headTypeDefinition) {
|
|
341
|
-
return headTypeDefinition;
|
|
342
|
-
}
|
|
343
|
-
const definition = await this.tsserver.getDefinition(node.getSourceFile().fileName, this.getLocation(node));
|
|
344
|
-
return (0, _lodash().head)(definition === null || definition === void 0 ? void 0 : definition.body);
|
|
345
|
-
};
|
|
346
|
-
const definition = await getDef();
|
|
347
|
-
|
|
348
|
-
// when we can't figure out the component/package/type of this node, we'll use the typeStr as the type.
|
|
349
|
-
const unknownExactType = async () => {
|
|
350
|
-
if (isTypeStrFromQuickInfo) {
|
|
351
|
-
return new (_semanticsEntities().InferenceTypeSchema)(location, typeStr || 'any');
|
|
352
|
-
}
|
|
353
|
-
const info = await this.getQuickInfo(node);
|
|
354
|
-
const type = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
|
|
355
|
-
return new (_semanticsEntities().InferenceTypeSchema)(location, type, typeStr);
|
|
356
|
-
};
|
|
443
|
+
const definition = await this.getDefinition(node);
|
|
357
444
|
if (!definition) {
|
|
358
|
-
return unknownExactType();
|
|
445
|
+
return this.unknownExactType(node, location, typeStr, isTypeStrFromQuickInfo);
|
|
359
446
|
}
|
|
360
|
-
|
|
361
|
-
// the reason for this check is to avoid infinite loop when calling `this.jump` with the same file+location
|
|
362
|
-
const isDefInSameLocation = () => {
|
|
363
|
-
if (definition.file !== node.getSourceFile().fileName) {
|
|
364
|
-
return false;
|
|
365
|
-
}
|
|
366
|
-
const loc = this.getLocation(node);
|
|
367
|
-
return loc.line === definition.start.line && loc.character === definition.start.offset;
|
|
368
|
-
};
|
|
369
447
|
const file = this.findFileInComponent(definition.file);
|
|
370
|
-
if (file)
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
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);
|
|
376
455
|
}
|
|
377
|
-
|
|
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);
|
|
378
467
|
}
|
|
379
468
|
getCompIdByPkgName(pkgName) {
|
|
380
469
|
var _this$componentDeps$f;
|
|
381
470
|
return (_this$componentDeps$f = this.componentDeps.find(dep => dep.packageName === pkgName)) === null || _this$componentDeps$f === void 0 ? void 0 : _this$componentDeps$f.componentId;
|
|
382
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
|
+
}
|
|
383
526
|
async getTypeRefForExternalNode(node) {
|
|
384
527
|
const info = await this.getQuickInfo(node);
|
|
385
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","path","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 // TODO: fix this line to support further extensions.\n if (file.path.includes(filePath)) {\n const strings = ['ts', 'tsx', 'js', 'jsx'].map((format) => {\n if (filePath.endsWith(format)) return filePath;\n return `${filePath}.${format}`;\n });\n\n return strings.find((string) => string === file.path);\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":""}
|