eslint-plugin-fast-import 1.0.0-beta2
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/.prettierrc.json +6 -0
- package/.vscode/launch.json +39 -0
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/module/computeAnalyzedInfo.d.ts +3 -0
- package/dist/module/computeAnalyzedInfo.js +297 -0
- package/dist/module/computeAnalyzedInfo.js.map +1 -0
- package/dist/module/computeBaseInfo.d.ts +24 -0
- package/dist/module/computeBaseInfo.js +564 -0
- package/dist/module/computeBaseInfo.js.map +1 -0
- package/dist/module/computeResolvedInfo.d.ts +7 -0
- package/dist/module/computeResolvedInfo.js +361 -0
- package/dist/module/computeResolvedInfo.js.map +1 -0
- package/dist/module/module.d.ts +20 -0
- package/dist/module/module.js +224 -0
- package/dist/module/module.js.map +1 -0
- package/dist/module/util.d.ts +44 -0
- package/dist/module/util.js +67 -0
- package/dist/module/util.js.map +1 -0
- package/dist/plugin.d.ts +19 -0
- package/dist/plugin.js +57 -0
- package/dist/plugin.js.map +1 -0
- package/dist/rules/circular/circular.d.ts +2 -0
- package/dist/rules/circular/circular.js +107 -0
- package/dist/rules/circular/circular.js.map +1 -0
- package/dist/rules/entryPoint/entryPoint.d.ts +1 -0
- package/dist/rules/entryPoint/entryPoint.js +38 -0
- package/dist/rules/entryPoint/entryPoint.js.map +1 -0
- package/dist/rules/externalBarrelReexports/externalBarrelReexports.d.ts +1 -0
- package/dist/rules/externalBarrelReexports/externalBarrelReexports.js +41 -0
- package/dist/rules/externalBarrelReexports/externalBarrelReexports.js.map +1 -0
- package/dist/rules/missing/missing.d.ts +1 -0
- package/dist/rules/missing/missing.js +59 -0
- package/dist/rules/missing/missing.js.map +1 -0
- package/dist/rules/testInProd/testInProd.d.ts +1 -0
- package/dist/rules/testInProd/testInProd.js +42 -0
- package/dist/rules/testInProd/testInProd.js.map +1 -0
- package/dist/rules/unused/unused.d.ts +3 -0
- package/dist/rules/unused/unused.js +77 -0
- package/dist/rules/unused/unused.js.map +1 -0
- package/dist/rules/util.d.ts +11 -0
- package/dist/rules/util.js +107 -0
- package/dist/rules/util.js.map +1 -0
- package/dist/settings/settings.d.ts +12 -0
- package/dist/settings/settings.js +123 -0
- package/dist/settings/settings.js.map +1 -0
- package/dist/settings/typescript.d.ts +3 -0
- package/dist/settings/typescript.js +39 -0
- package/dist/settings/typescript.js.map +1 -0
- package/dist/settings/user.d.ts +45 -0
- package/dist/settings/user.js +52 -0
- package/dist/settings/user.js.map +1 -0
- package/dist/settings/util.d.ts +2 -0
- package/dist/settings/util.js +33 -0
- package/dist/settings/util.js.map +1 -0
- package/dist/types/analyzed.d.ts +120 -0
- package/dist/types/analyzed.js +2 -0
- package/dist/types/analyzed.js.map +1 -0
- package/dist/types/base.d.ts +230 -0
- package/dist/types/base.js +2 -0
- package/dist/types/base.js.map +1 -0
- package/dist/types/context.d.ts +2 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/resolved.d.ts +60 -0
- package/dist/types/resolved.js +2 -0
- package/dist/types/resolved.js.map +1 -0
- package/dist/util/code.d.ts +1 -0
- package/dist/util/code.js +6 -0
- package/dist/util/code.js.map +1 -0
- package/dist/util/error.d.ts +14 -0
- package/dist/util/error.js +19 -0
- package/dist/util/error.js.map +1 -0
- package/dist/util/files.d.ts +10 -0
- package/dist/util/files.js +122 -0
- package/dist/util/files.js.map +1 -0
- package/dist/util/logging.d.ts +5 -0
- package/dist/util/logging.js +19 -0
- package/dist/util/logging.js.map +1 -0
- package/eslint.config.mjs +85 -0
- package/jest.config.ts +10 -0
- package/package.json +49 -0
- package/tsconfig.json +31 -0
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
import { parseFile, traverse } from './util.js';
|
|
2
|
+
import { TSESTree } from '@typescript-eslint/utils';
|
|
3
|
+
import { InternalError } from '../util/error.js';
|
|
4
|
+
import { isCodeFile } from '../util/code.js';
|
|
5
|
+
import { getFilesSync } from '../util/files.js';
|
|
6
|
+
/**
|
|
7
|
+
* Computes base ESM info for all source files recursively found in basePath
|
|
8
|
+
*/
|
|
9
|
+
export function computeBaseInfo({ rootDir, alias = {}, ignorePatterns, isEntryPointCheck = () => false, }) {
|
|
10
|
+
const info = {
|
|
11
|
+
files: new Map(),
|
|
12
|
+
rootDir,
|
|
13
|
+
alias,
|
|
14
|
+
};
|
|
15
|
+
const potentialFiles = getFilesSync(rootDir, ignorePatterns);
|
|
16
|
+
for (const { filePath } of potentialFiles) {
|
|
17
|
+
if (isCodeFile(filePath)) {
|
|
18
|
+
info.files.set(filePath, computeFileDetails({
|
|
19
|
+
...parseFile(filePath),
|
|
20
|
+
isEntryPointCheck,
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
info.files.set(filePath, {
|
|
25
|
+
fileType: 'other',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return info;
|
|
30
|
+
}
|
|
31
|
+
export function addBaseInfoForFile({ filePath, fileContents, ast, isEntryPointCheck }, baseProjectInfo) {
|
|
32
|
+
if (isCodeFile(filePath)) {
|
|
33
|
+
baseProjectInfo.files.set(filePath, computeFileDetails({
|
|
34
|
+
filePath,
|
|
35
|
+
fileContents,
|
|
36
|
+
ast,
|
|
37
|
+
isEntryPointCheck,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
baseProjectInfo.files.set(filePath, { fileType: 'other' });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function hasFileChanged(previousFileDetails, updatedFileDetails) {
|
|
45
|
+
// First, check if the number of exports, reexports, or imports has changed
|
|
46
|
+
if (updatedFileDetails.exports.length !== previousFileDetails.exports.length ||
|
|
47
|
+
updatedFileDetails.reexports.length !==
|
|
48
|
+
previousFileDetails.reexports.length ||
|
|
49
|
+
updatedFileDetails.imports.length !== previousFileDetails.imports.length) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
// Now, compare each import and export to see if any of their details changed
|
|
53
|
+
for (let i = 0; i < previousFileDetails.exports.length; i++) {
|
|
54
|
+
const previousExport = previousFileDetails.exports[i];
|
|
55
|
+
const updatedExport = updatedFileDetails.exports[i];
|
|
56
|
+
if (previousExport.exportName !== updatedExport.exportName) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
for (let i = 0; i < previousFileDetails.reexports.length; i++) {
|
|
61
|
+
const previousReexport = previousFileDetails.reexports[i];
|
|
62
|
+
const updatedReexport = updatedFileDetails.reexports[i];
|
|
63
|
+
if (previousReexport.reexportType !== updatedReexport.reexportType ||
|
|
64
|
+
previousReexport.exportName !== updatedReexport.exportName ||
|
|
65
|
+
previousReexport.moduleSpecifier !== previousReexport.moduleSpecifier) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (let i = 0; i < previousFileDetails.imports.length; i++) {
|
|
70
|
+
const previousImport = previousFileDetails.imports[i];
|
|
71
|
+
const updatedImport = updatedFileDetails.imports[i];
|
|
72
|
+
if (previousImport.moduleSpecifier !== updatedImport.moduleSpecifier ||
|
|
73
|
+
previousImport.importType !== updatedImport.importType ||
|
|
74
|
+
('importAlias' in previousImport &&
|
|
75
|
+
previousImport.importAlias !==
|
|
76
|
+
updatedImport.importAlias)) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
export function updateBaseInfoForFile({ filePath, fileContents, ast, isEntryPointCheck }, baseProjectInfo) {
|
|
83
|
+
const previousFileDetails = baseProjectInfo.files.get(filePath);
|
|
84
|
+
if (!isCodeFile(filePath)) {
|
|
85
|
+
throw new InternalError(`updateBaseInfoForFile called for non-code file ${filePath}`);
|
|
86
|
+
}
|
|
87
|
+
if (!previousFileDetails) {
|
|
88
|
+
throw new InternalError(`updateBaseInfoForFile called for file ${filePath} that didn't previously exist`);
|
|
89
|
+
}
|
|
90
|
+
if (previousFileDetails.fileType !== 'code') {
|
|
91
|
+
throw new InternalError(`previous file type was not code for file ${filePath}`);
|
|
92
|
+
}
|
|
93
|
+
const updatedFileDetails = computeFileDetails({
|
|
94
|
+
filePath,
|
|
95
|
+
fileContents,
|
|
96
|
+
ast,
|
|
97
|
+
isEntryPointCheck,
|
|
98
|
+
});
|
|
99
|
+
baseProjectInfo.files.set(filePath, updatedFileDetails);
|
|
100
|
+
return hasFileChanged(previousFileDetails, updatedFileDetails);
|
|
101
|
+
}
|
|
102
|
+
export function deleteBaseInfoForFile(filePath, baseProjectInfo) {
|
|
103
|
+
baseProjectInfo.files.delete(filePath);
|
|
104
|
+
}
|
|
105
|
+
class UnknownNodeTypeError extends InternalError {
|
|
106
|
+
constructor(filePath, fileContents, node) {
|
|
107
|
+
super(
|
|
108
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
|
|
109
|
+
`unknown AST node type ${node.type}`, {
|
|
110
|
+
filePath,
|
|
111
|
+
fileContents,
|
|
112
|
+
node,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function getLocationOfDefaultToken(node, tokens, filePath) {
|
|
117
|
+
if (!tokens) {
|
|
118
|
+
throw new InternalError(`tokens is unexpectedly undefined`);
|
|
119
|
+
}
|
|
120
|
+
for (const token of tokens) {
|
|
121
|
+
if (token.range[0] < node.range[0] || token.range[1] > node.range[1]) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (token.type === TSESTree.AST_TOKEN_TYPES.Keyword &&
|
|
125
|
+
token.value === 'default') {
|
|
126
|
+
return token;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
throw new InternalError('Could not get report nore', {
|
|
130
|
+
filePath,
|
|
131
|
+
node,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// This helper walks export destructure, which is by far the most complicated
|
|
135
|
+
// part of parsing exports because destructures can be destructured recursively,
|
|
136
|
+
// e.g. `export const [ [ { something } ] ] = [ [ { something: 10 } ] ]`
|
|
137
|
+
function walkExportDestructure(filePath, fileContents, fileDetails, statementNode, node, isEntryPointCheck) {
|
|
138
|
+
switch (node.type) {
|
|
139
|
+
// export const [ foo, bar ] = []
|
|
140
|
+
case TSESTree.AST_NODE_TYPES.ArrayPattern: {
|
|
141
|
+
for (const elementNode of node.elements) {
|
|
142
|
+
// Check if this is an array hole, e.g. `[a, , b]`, and if so skip
|
|
143
|
+
if (elementNode) {
|
|
144
|
+
walkExportDestructure(filePath, fileContents, fileDetails, statementNode, elementNode, isEntryPointCheck);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
// export const { ... } = {}
|
|
150
|
+
case TSESTree.AST_NODE_TYPES.ObjectPattern: {
|
|
151
|
+
for (const propertyNode of node.properties) {
|
|
152
|
+
// First check if this is a spread, in which case we directly recurse
|
|
153
|
+
if (propertyNode.type === TSESTree.AST_NODE_TYPES.RestElement) {
|
|
154
|
+
walkExportDestructure(filePath, fileContents, fileDetails, statementNode, propertyNode, isEntryPointCheck);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
// Otherwise, we need to introspect on what's going on here
|
|
158
|
+
switch (propertyNode.value.type) {
|
|
159
|
+
// export const { foo } = {}
|
|
160
|
+
case TSESTree.AST_NODE_TYPES.Identifier: {
|
|
161
|
+
fileDetails.exports.push({
|
|
162
|
+
statementNode,
|
|
163
|
+
reportNode: propertyNode.value,
|
|
164
|
+
exportName: propertyNode.value.name,
|
|
165
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
166
|
+
isEntryPoint: isEntryPointCheck(filePath, propertyNode.value.name),
|
|
167
|
+
});
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
// Cases where we need to recurse
|
|
171
|
+
case TSESTree.AST_NODE_TYPES.ArrayPattern:
|
|
172
|
+
case TSESTree.AST_NODE_TYPES.ObjectPattern: {
|
|
173
|
+
walkExportDestructure(filePath, fileContents, fileDetails, statementNode, propertyNode.value, isEntryPointCheck);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
default: {
|
|
177
|
+
// We don't use UnknownNodeTypeError here because this is typed as a
|
|
178
|
+
// general property definition, which includes a bunch of statements
|
|
179
|
+
// that actual exports don't support (and would be a syntax error),
|
|
180
|
+
// such as: `export const { foo: doThing() }`
|
|
181
|
+
throw new InternalError(`unsupported declaration type ${propertyNode.value.type}`, {
|
|
182
|
+
filePath,
|
|
183
|
+
fileContents,
|
|
184
|
+
node: propertyNode.value,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
// export const [ foo = 10 ] = [ 10 ]
|
|
192
|
+
case TSESTree.AST_NODE_TYPES.AssignmentPattern: {
|
|
193
|
+
if (node.left.type === TSESTree.AST_NODE_TYPES.Identifier) {
|
|
194
|
+
fileDetails.exports.push({
|
|
195
|
+
statementNode,
|
|
196
|
+
reportNode: node.left,
|
|
197
|
+
exportName: node.left.name,
|
|
198
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
199
|
+
isEntryPoint: isEntryPointCheck(filePath, node.left.name),
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// It's possible to do `export const [ { foo } = {} ]`
|
|
203
|
+
else {
|
|
204
|
+
walkExportDestructure(filePath, fileContents, fileDetails, statementNode, node.left, isEntryPointCheck);
|
|
205
|
+
}
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
// export const [ foo ] = [ 10 ]
|
|
209
|
+
case TSESTree.AST_NODE_TYPES.Identifier: {
|
|
210
|
+
fileDetails.exports.push({
|
|
211
|
+
statementNode,
|
|
212
|
+
reportNode: node,
|
|
213
|
+
exportName: node.name,
|
|
214
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
215
|
+
isEntryPoint: isEntryPointCheck(filePath, node.name),
|
|
216
|
+
});
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
// AFAICT this isn't actually valid, since it would imply
|
|
220
|
+
// `export const { foo.bar }`, but I'm not 100% certain.
|
|
221
|
+
// See: https://github.com/estree/estree/issues/162
|
|
222
|
+
case TSESTree.AST_NODE_TYPES.MemberExpression: {
|
|
223
|
+
throw new InternalError(`unexpected member expression in array destructure`, { filePath, fileContents, node });
|
|
224
|
+
}
|
|
225
|
+
// export const [ ... ]
|
|
226
|
+
case TSESTree.AST_NODE_TYPES.RestElement: {
|
|
227
|
+
walkExportDestructure(filePath, fileContents, fileDetails, statementNode, node.argument, isEntryPointCheck);
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
default: {
|
|
231
|
+
throw new UnknownNodeTypeError(filePath, fileContents, node);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Exports are almost always identifiers, but on rare occasions they can
|
|
236
|
+
// actually be strings, such as in:
|
|
237
|
+
//
|
|
238
|
+
// const x = 10;
|
|
239
|
+
// export { x as 'some string' };
|
|
240
|
+
//
|
|
241
|
+
// We actually don't care if the name is an identifier or string though, so this
|
|
242
|
+
// function normalizes the value
|
|
243
|
+
function getIdentifierOrStringValue(node) {
|
|
244
|
+
return node.type === TSESTree.AST_NODE_TYPES.Identifier
|
|
245
|
+
? node.name
|
|
246
|
+
: node.value;
|
|
247
|
+
}
|
|
248
|
+
function isDefault(statementNode) {
|
|
249
|
+
return (statementNode.type === TSESTree.AST_NODE_TYPES.ExportDefaultDeclaration);
|
|
250
|
+
}
|
|
251
|
+
function computeFileDetails({ filePath, fileContents, ast, isEntryPointCheck, }) {
|
|
252
|
+
const fileDetails = {
|
|
253
|
+
fileType: 'code',
|
|
254
|
+
lastUpdatedAt: Date.now(),
|
|
255
|
+
imports: [],
|
|
256
|
+
exports: [],
|
|
257
|
+
reexports: [],
|
|
258
|
+
};
|
|
259
|
+
traverse({
|
|
260
|
+
filePath,
|
|
261
|
+
fileContents,
|
|
262
|
+
ast,
|
|
263
|
+
importDeclaration(statementNode) {
|
|
264
|
+
// First, get the module specifier, if present. It might be missing in the
|
|
265
|
+
// case of a dynamic import where the sourcefile value is computed, e.g.
|
|
266
|
+
// `await import('foo' + 'bar' + computeThing())`.
|
|
267
|
+
const moduleSpecifier = statementNode.source.type === TSESTree.AST_NODE_TYPES.Literal
|
|
268
|
+
? (statementNode.source.value ?? undefined)
|
|
269
|
+
: undefined;
|
|
270
|
+
if (typeof moduleSpecifier !== 'string' &&
|
|
271
|
+
typeof moduleSpecifier !== 'undefined') {
|
|
272
|
+
throw new InternalError(`Import source ${String(moduleSpecifier)} is not a string or undefined`, {
|
|
273
|
+
filePath,
|
|
274
|
+
fileContents,
|
|
275
|
+
node: statementNode.source,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
// We check if this is a dynamic import first, since it's the only type of
|
|
279
|
+
// import that may not have a string module specifier.
|
|
280
|
+
if (statementNode.type === TSESTree.AST_NODE_TYPES.ImportExpression) {
|
|
281
|
+
fileDetails.imports.push({
|
|
282
|
+
statementNode,
|
|
283
|
+
reportNode: statementNode,
|
|
284
|
+
importType: 'dynamic',
|
|
285
|
+
moduleSpecifier,
|
|
286
|
+
});
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
// Now that we know this isn't a dynamic import, we can enforce that the
|
|
290
|
+
// module specifier is a string. In practice this should always be a
|
|
291
|
+
// string at this point, but we check to make TypeScript happy and just in
|
|
292
|
+
// case there's some edge case we missed.
|
|
293
|
+
if (typeof moduleSpecifier !== 'string') {
|
|
294
|
+
throw new InternalError(`import source ${String(moduleSpecifier)} is not a string`, {
|
|
295
|
+
filePath,
|
|
296
|
+
fileContents,
|
|
297
|
+
node: statementNode.source,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
// Now loop through each specifier in the import statement and parse it.
|
|
301
|
+
// The specifier is `foo` in: `import { foo } from './bar'`
|
|
302
|
+
for (const specifierNode of statementNode.specifiers) {
|
|
303
|
+
switch (specifierNode.type) {
|
|
304
|
+
// import * as foo from 'bar';
|
|
305
|
+
case TSESTree.AST_NODE_TYPES.ImportNamespaceSpecifier: {
|
|
306
|
+
fileDetails.imports.push({
|
|
307
|
+
statementNode,
|
|
308
|
+
reportNode: specifierNode,
|
|
309
|
+
importType: 'barrel',
|
|
310
|
+
moduleSpecifier,
|
|
311
|
+
isTypeImport: statementNode.importKind === 'type',
|
|
312
|
+
importAlias: specifierNode.local.name,
|
|
313
|
+
});
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
// import foo from 'bar';
|
|
317
|
+
case TSESTree.AST_NODE_TYPES.ImportDefaultSpecifier: {
|
|
318
|
+
fileDetails.imports.push({
|
|
319
|
+
statementNode,
|
|
320
|
+
reportNode: specifierNode,
|
|
321
|
+
importType: 'single',
|
|
322
|
+
moduleSpecifier,
|
|
323
|
+
importName: 'default',
|
|
324
|
+
importAlias: specifierNode.local.name,
|
|
325
|
+
isTypeImport: statementNode.importKind === 'type',
|
|
326
|
+
});
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
// import { foo } from 'bar';
|
|
330
|
+
case TSESTree.AST_NODE_TYPES.ImportSpecifier: {
|
|
331
|
+
const importName = getIdentifierOrStringValue(specifierNode.imported);
|
|
332
|
+
fileDetails.imports.push({
|
|
333
|
+
statementNode,
|
|
334
|
+
reportNode: specifierNode,
|
|
335
|
+
importType: 'single',
|
|
336
|
+
moduleSpecifier,
|
|
337
|
+
importName,
|
|
338
|
+
importAlias: specifierNode.local.name,
|
|
339
|
+
isTypeImport: statementNode.importKind === 'type',
|
|
340
|
+
});
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
// This shouldn't happen, but is here just in case
|
|
344
|
+
default: {
|
|
345
|
+
throw new UnknownNodeTypeError(filePath, fileContents, specifierNode);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
exportDeclaration(statementNode) {
|
|
351
|
+
// Check if this is export { foo }, which parses very different
|
|
352
|
+
if ('specifiers' in statementNode && statementNode.specifiers.length) {
|
|
353
|
+
for (const specifierNode of statementNode.specifiers) {
|
|
354
|
+
const exportName = getIdentifierOrStringValue(specifierNode.exported);
|
|
355
|
+
fileDetails.exports.push({
|
|
356
|
+
statementNode,
|
|
357
|
+
reportNode: specifierNode.exported,
|
|
358
|
+
exportName,
|
|
359
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
360
|
+
isEntryPoint: isEntryPointCheck(filePath, exportName),
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
// This happens when we do `export {}`
|
|
366
|
+
if (!statementNode.declaration) {
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
// If we got here we have a single export where we have to introspect the
|
|
370
|
+
// declaration type to figure out what the name is. Note: we still want to
|
|
371
|
+
// find the name in the case of default exports so that we can set
|
|
372
|
+
// `specifierNode` to the name. Otherwise, when we highlight a lint error,
|
|
373
|
+
// we would highlight entire classes/functions, which hurts readability
|
|
374
|
+
switch (statementNode.declaration.type) {
|
|
375
|
+
// export const ...
|
|
376
|
+
// Note: const exports can't be default
|
|
377
|
+
case TSESTree.AST_NODE_TYPES.VariableDeclaration: {
|
|
378
|
+
for (const declarationNode of statementNode.declaration
|
|
379
|
+
.declarations) {
|
|
380
|
+
switch (declarationNode.id.type) {
|
|
381
|
+
// export const foo = 10;
|
|
382
|
+
case TSESTree.AST_NODE_TYPES.Identifier: {
|
|
383
|
+
fileDetails.exports.push({
|
|
384
|
+
statementNode,
|
|
385
|
+
reportNode: declarationNode.id,
|
|
386
|
+
exportName: declarationNode.id.name,
|
|
387
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
388
|
+
isEntryPoint: isEntryPointCheck(filePath, declarationNode.id.name),
|
|
389
|
+
});
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
// export const [foo, bar] = [10, 10]
|
|
393
|
+
case TSESTree.AST_NODE_TYPES.ArrayPattern: {
|
|
394
|
+
walkExportDestructure(filePath, fileContents, fileDetails, statementNode, declarationNode.id, isEntryPointCheck);
|
|
395
|
+
break;
|
|
396
|
+
}
|
|
397
|
+
// export const { foo, bar } = { foo: 10, bar: 10 }
|
|
398
|
+
case TSESTree.AST_NODE_TYPES.ObjectPattern: {
|
|
399
|
+
walkExportDestructure(filePath, fileContents, fileDetails, statementNode, declarationNode.id, isEntryPointCheck);
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
default: {
|
|
403
|
+
throw new UnknownNodeTypeError(filePath, fileContents, declarationNode.id);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
// export interface Foo {} or export type Foo = string
|
|
410
|
+
case TSESTree.AST_NODE_TYPES.TSInterfaceDeclaration:
|
|
411
|
+
case TSESTree.AST_NODE_TYPES.TSEnumDeclaration:
|
|
412
|
+
case TSESTree.AST_NODE_TYPES.TSTypeAliasDeclaration: {
|
|
413
|
+
const exportName = isDefault(statementNode)
|
|
414
|
+
? 'default'
|
|
415
|
+
: statementNode.declaration.id.name;
|
|
416
|
+
fileDetails.exports.push({
|
|
417
|
+
statementNode,
|
|
418
|
+
reportNode: statementNode.declaration.id,
|
|
419
|
+
exportName,
|
|
420
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
421
|
+
isEntryPoint: isEntryPointCheck(filePath, exportName),
|
|
422
|
+
});
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
// export function foo() {}
|
|
426
|
+
case TSESTree.AST_NODE_TYPES.TSDeclareFunction:
|
|
427
|
+
case TSESTree.AST_NODE_TYPES.FunctionDeclaration: {
|
|
428
|
+
if (isDefault(statementNode)) {
|
|
429
|
+
fileDetails.exports.push({
|
|
430
|
+
statementNode,
|
|
431
|
+
reportNode: statementNode.declaration.id
|
|
432
|
+
? statementNode.declaration.id
|
|
433
|
+
: statementNode,
|
|
434
|
+
exportName: 'default',
|
|
435
|
+
isTypeExport: false, // functions can never be types
|
|
436
|
+
isEntryPoint: isEntryPointCheck(filePath, 'default'),
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
else {
|
|
440
|
+
// TODO: I'm pretty certain that declaration id missing means that
|
|
441
|
+
// this is a function expression, aka `export function () {}` which
|
|
442
|
+
// isn't allowed in an export statement
|
|
443
|
+
if (!statementNode.declaration.id) {
|
|
444
|
+
throw new InternalError(`function id is unexpectedly missing`, {
|
|
445
|
+
filePath,
|
|
446
|
+
fileContents,
|
|
447
|
+
node: statementNode.declaration,
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
fileDetails.exports.push({
|
|
451
|
+
statementNode,
|
|
452
|
+
reportNode: statementNode.declaration.id,
|
|
453
|
+
exportName: statementNode.declaration.id.name,
|
|
454
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
455
|
+
isEntryPoint: isEntryPointCheck(filePath, statementNode.declaration.id.name),
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
break;
|
|
459
|
+
}
|
|
460
|
+
// export class Foo {}
|
|
461
|
+
case TSESTree.AST_NODE_TYPES.ClassDeclaration: {
|
|
462
|
+
if (isDefault(statementNode)) {
|
|
463
|
+
fileDetails.exports.push({
|
|
464
|
+
statementNode,
|
|
465
|
+
reportNode: statementNode.declaration.id
|
|
466
|
+
? statementNode.declaration.id
|
|
467
|
+
: statementNode,
|
|
468
|
+
exportName: 'default',
|
|
469
|
+
isTypeExport: false, // Classes can never be types
|
|
470
|
+
isEntryPoint: isEntryPointCheck(filePath, 'default'),
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
if (!statementNode.declaration.id) {
|
|
475
|
+
throw new Error('Exporting non-default unnamed classes is not supported (e.g. `export class {}`)');
|
|
476
|
+
}
|
|
477
|
+
fileDetails.exports.push({
|
|
478
|
+
statementNode,
|
|
479
|
+
reportNode: statementNode.declaration.id,
|
|
480
|
+
exportName: statementNode.declaration.id.name,
|
|
481
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
482
|
+
isEntryPoint: isEntryPointCheck(filePath, statementNode.declaration.id.name),
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
// export default foo
|
|
488
|
+
case TSESTree.AST_NODE_TYPES.Identifier: {
|
|
489
|
+
const { name } = statementNode.declaration;
|
|
490
|
+
const isNodeDefault = isDefault(statementNode);
|
|
491
|
+
const exportName = isNodeDefault ? 'default' : name;
|
|
492
|
+
fileDetails.exports.push({
|
|
493
|
+
statementNode,
|
|
494
|
+
reportNode: statementNode.declaration,
|
|
495
|
+
exportName,
|
|
496
|
+
isTypeExport: statementNode.exportKind === 'type',
|
|
497
|
+
isEntryPoint: isEntryPointCheck(filePath, exportName),
|
|
498
|
+
});
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
default: {
|
|
502
|
+
// First we check if this is a default export, since we can still
|
|
503
|
+
// process it, even if we can't select a particularly useful specifier
|
|
504
|
+
// node
|
|
505
|
+
if (isDefault(statementNode)) {
|
|
506
|
+
fileDetails.exports.push({
|
|
507
|
+
statementNode,
|
|
508
|
+
reportNode: getLocationOfDefaultToken(statementNode, ast.tokens, filePath),
|
|
509
|
+
exportName: 'default',
|
|
510
|
+
isTypeExport: false, // Turns out default exports can't be types
|
|
511
|
+
isEntryPoint: isEntryPointCheck(filePath, 'default'),
|
|
512
|
+
});
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
// Otherwise, we can't process this node. Note: We don't use
|
|
516
|
+
// UnknownNodeTypeError here because this is typed as a general
|
|
517
|
+
// declaration, which includes a bunch of statements that actual
|
|
518
|
+
// exports don't support (and would be a syntax error), such as:
|
|
519
|
+
// `export import { foo } from 'bar'`
|
|
520
|
+
throw new InternalError(`unsupported declaration type ${statementNode.declaration.type}`, {
|
|
521
|
+
filePath,
|
|
522
|
+
fileContents,
|
|
523
|
+
node: statementNode,
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
},
|
|
528
|
+
reexportDeclaration(statementNode) {
|
|
529
|
+
const moduleSpecifier = statementNode.source.value;
|
|
530
|
+
// Check if this is a barrel reexport
|
|
531
|
+
if (statementNode.type === TSESTree.AST_NODE_TYPES.ExportAllDeclaration) {
|
|
532
|
+
const exportName = statementNode.exported?.name;
|
|
533
|
+
fileDetails.reexports.push({
|
|
534
|
+
statementNode,
|
|
535
|
+
reportNode: statementNode,
|
|
536
|
+
reexportType: 'barrel',
|
|
537
|
+
moduleSpecifier,
|
|
538
|
+
exportName,
|
|
539
|
+
isTypeReexport: statementNode.exportKind === 'type',
|
|
540
|
+
isEntryPoint: exportName
|
|
541
|
+
? isEntryPointCheck(filePath, exportName)
|
|
542
|
+
: false,
|
|
543
|
+
});
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
// Otherwise this is a single reexport, so we iterate through each specifier
|
|
547
|
+
for (const specifierNode of statementNode.specifiers) {
|
|
548
|
+
const exportName = getIdentifierOrStringValue(specifierNode.exported);
|
|
549
|
+
fileDetails.reexports.push({
|
|
550
|
+
statementNode,
|
|
551
|
+
reportNode: specifierNode,
|
|
552
|
+
reexportType: 'single',
|
|
553
|
+
moduleSpecifier,
|
|
554
|
+
importName: getIdentifierOrStringValue(specifierNode.local),
|
|
555
|
+
exportName,
|
|
556
|
+
isTypeReexport: statementNode.exportKind === 'type',
|
|
557
|
+
isEntryPoint: isEntryPointCheck(filePath, exportName),
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
});
|
|
562
|
+
return fileDetails;
|
|
563
|
+
}
|
|
564
|
+
//# sourceMappingURL=computeBaseInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeBaseInfo.js","sourceRoot":"","sources":["../../src/module/computeBaseInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BaseProjectInfo } from '../types/base.js';
|
|
2
|
+
import type { ResolvedProjectInfo } from '../types/resolved.js';
|
|
3
|
+
export declare function computeResolvedInfo(baseProjectInfo: BaseProjectInfo): ResolvedProjectInfo;
|
|
4
|
+
export declare function addResolvedInfoForFile(filePath: string, newBaseProjectInfo: BaseProjectInfo, previousResolvedProjectInfo: ResolvedProjectInfo): void;
|
|
5
|
+
export declare function updateResolvedInfoForFile(filePath: string, baseProjectInfo: BaseProjectInfo, resolvedProjectInfo: ResolvedProjectInfo): void;
|
|
6
|
+
export declare function deleteResolvedInfoForFile(filePath: string, newBaseProjectInfo: BaseProjectInfo, previousResolvedProjectInfo: ResolvedProjectInfo): void;
|
|
7
|
+
export declare function computeFolderTree(baseInfo: BaseProjectInfo): void;
|