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.
Files changed (83) hide show
  1. package/.prettierrc.json +6 -0
  2. package/.vscode/launch.json +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +3 -0
  5. package/dist/module/computeAnalyzedInfo.d.ts +3 -0
  6. package/dist/module/computeAnalyzedInfo.js +297 -0
  7. package/dist/module/computeAnalyzedInfo.js.map +1 -0
  8. package/dist/module/computeBaseInfo.d.ts +24 -0
  9. package/dist/module/computeBaseInfo.js +564 -0
  10. package/dist/module/computeBaseInfo.js.map +1 -0
  11. package/dist/module/computeResolvedInfo.d.ts +7 -0
  12. package/dist/module/computeResolvedInfo.js +361 -0
  13. package/dist/module/computeResolvedInfo.js.map +1 -0
  14. package/dist/module/module.d.ts +20 -0
  15. package/dist/module/module.js +224 -0
  16. package/dist/module/module.js.map +1 -0
  17. package/dist/module/util.d.ts +44 -0
  18. package/dist/module/util.js +67 -0
  19. package/dist/module/util.js.map +1 -0
  20. package/dist/plugin.d.ts +19 -0
  21. package/dist/plugin.js +57 -0
  22. package/dist/plugin.js.map +1 -0
  23. package/dist/rules/circular/circular.d.ts +2 -0
  24. package/dist/rules/circular/circular.js +107 -0
  25. package/dist/rules/circular/circular.js.map +1 -0
  26. package/dist/rules/entryPoint/entryPoint.d.ts +1 -0
  27. package/dist/rules/entryPoint/entryPoint.js +38 -0
  28. package/dist/rules/entryPoint/entryPoint.js.map +1 -0
  29. package/dist/rules/externalBarrelReexports/externalBarrelReexports.d.ts +1 -0
  30. package/dist/rules/externalBarrelReexports/externalBarrelReexports.js +41 -0
  31. package/dist/rules/externalBarrelReexports/externalBarrelReexports.js.map +1 -0
  32. package/dist/rules/missing/missing.d.ts +1 -0
  33. package/dist/rules/missing/missing.js +59 -0
  34. package/dist/rules/missing/missing.js.map +1 -0
  35. package/dist/rules/testInProd/testInProd.d.ts +1 -0
  36. package/dist/rules/testInProd/testInProd.js +42 -0
  37. package/dist/rules/testInProd/testInProd.js.map +1 -0
  38. package/dist/rules/unused/unused.d.ts +3 -0
  39. package/dist/rules/unused/unused.js +77 -0
  40. package/dist/rules/unused/unused.js.map +1 -0
  41. package/dist/rules/util.d.ts +11 -0
  42. package/dist/rules/util.js +107 -0
  43. package/dist/rules/util.js.map +1 -0
  44. package/dist/settings/settings.d.ts +12 -0
  45. package/dist/settings/settings.js +123 -0
  46. package/dist/settings/settings.js.map +1 -0
  47. package/dist/settings/typescript.d.ts +3 -0
  48. package/dist/settings/typescript.js +39 -0
  49. package/dist/settings/typescript.js.map +1 -0
  50. package/dist/settings/user.d.ts +45 -0
  51. package/dist/settings/user.js +52 -0
  52. package/dist/settings/user.js.map +1 -0
  53. package/dist/settings/util.d.ts +2 -0
  54. package/dist/settings/util.js +33 -0
  55. package/dist/settings/util.js.map +1 -0
  56. package/dist/types/analyzed.d.ts +120 -0
  57. package/dist/types/analyzed.js +2 -0
  58. package/dist/types/analyzed.js.map +1 -0
  59. package/dist/types/base.d.ts +230 -0
  60. package/dist/types/base.js +2 -0
  61. package/dist/types/base.js.map +1 -0
  62. package/dist/types/context.d.ts +2 -0
  63. package/dist/types/context.js +2 -0
  64. package/dist/types/context.js.map +1 -0
  65. package/dist/types/resolved.d.ts +60 -0
  66. package/dist/types/resolved.js +2 -0
  67. package/dist/types/resolved.js.map +1 -0
  68. package/dist/util/code.d.ts +1 -0
  69. package/dist/util/code.js +6 -0
  70. package/dist/util/code.js.map +1 -0
  71. package/dist/util/error.d.ts +14 -0
  72. package/dist/util/error.js +19 -0
  73. package/dist/util/error.js.map +1 -0
  74. package/dist/util/files.d.ts +10 -0
  75. package/dist/util/files.js +122 -0
  76. package/dist/util/files.js.map +1 -0
  77. package/dist/util/logging.d.ts +5 -0
  78. package/dist/util/logging.js +19 -0
  79. package/dist/util/logging.js.map +1 -0
  80. package/eslint.config.mjs +85 -0
  81. package/jest.config.ts +10 -0
  82. package/package.json +49 -0
  83. 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":"AAMA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAYhD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,EACP,KAAK,GAAG,EAAE,EACV,cAAc,EACd,iBAAiB,GAAG,GAAG,EAAE,CAAC,KAAK,GACR;IACvB,MAAM,IAAI,GAAoB;QAC5B,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,OAAO;QACP,KAAK;KACN,CAAC;IAEF,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAE7D,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,cAAc,EAAE,CAAC;QAC1C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ,QAAQ,EACR,kBAAkB,CAAC;gBACjB,GAAG,SAAS,CAAC,QAAQ,CAAC;gBACtB,iBAAiB;aAClB,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACvB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,UAAU,kBAAkB,CAChC,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAA6B,EAC7E,eAAgC;IAEhC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,eAAe,CAAC,KAAK,CAAC,GAAG,CACvB,QAAQ,EACR,kBAAkB,CAAC;YACjB,QAAQ;YACR,YAAY;YACZ,GAAG;YACH,iBAAiB;SAClB,CAAC,CACH,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,mBAAwC,EACxC,kBAAuC;IAEvC,2EAA2E;IAC3E,IACE,kBAAkB,CAAC,OAAO,CAAC,MAAM,KAAK,mBAAmB,CAAC,OAAO,CAAC,MAAM;QACxE,kBAAkB,CAAC,SAAS,CAAC,MAAM;YACjC,mBAAmB,CAAC,SAAS,CAAC,MAAM;QACtC,kBAAkB,CAAC,OAAO,CAAC,MAAM,KAAK,mBAAmB,CAAC,OAAO,CAAC,MAAM,EACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6EAA6E;IAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5D,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,cAAc,CAAC,UAAU,KAAK,aAAa,CAAC,UAAU,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACxD,IACE,gBAAgB,CAAC,YAAY,KAAK,eAAe,CAAC,YAAY;YAC9D,gBAAgB,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU;YAC1D,gBAAgB,CAAC,eAAe,KAAK,gBAAgB,CAAC,eAAe,EACrE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5D,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,IACE,cAAc,CAAC,eAAe,KAAK,aAAa,CAAC,eAAe;YAChE,cAAc,CAAC,UAAU,KAAK,aAAa,CAAC,UAAU;YACtD,CAAC,aAAa,IAAI,cAAc;gBAC9B,cAAc,CAAC,WAAW;oBACvB,aAAkC,CAAC,WAAW,CAAC,EACpD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAA6B,EAC7E,eAAgC;IAEhC,MAAM,mBAAmB,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,aAAa,CACrB,kDAAkD,QAAQ,EAAE,CAC7D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,IAAI,aAAa,CACrB,yCAAyC,QAAQ,+BAA+B,CACjF,CAAC;IACJ,CAAC;IACD,IAAI,mBAAmB,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC5C,MAAM,IAAI,aAAa,CACrB,4CAA4C,QAAQ,EAAE,CACvD,CAAC;IACJ,CAAC;IACD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;QAC5C,QAAQ;QACR,YAAY;QACZ,GAAG;QACH,iBAAiB;KAClB,CAAC,CAAC;IAEH,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACxD,OAAO,cAAc,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,eAAgC;IAEhC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,oBAAqB,SAAQ,aAAa;IAC9C,YAAY,QAAgB,EAAE,YAAoB,EAAE,IAAW;QAC7D,KAAK;QACH,4JAA4J;QAC5J,yBAA0B,IAAY,CAAC,IAAI,EAAE,EAC7C;YACE,QAAQ;YACR,YAAY;YACZ,IAAI;SACL,CACF,CAAC;IACJ,CAAC;CACF;AAED,SAAS,yBAAyB,CAChC,IAAmB,EACnB,MAAoC,EACpC,QAAgB;IAEhB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,aAAa,CAAC,kCAAkC,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,SAAS;QACX,CAAC;QACD,IACE,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,eAAe,CAAC,OAAO;YAC/C,KAAK,CAAC,KAAK,KAAK,SAAS,EACzB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,2BAA2B,EAAE;QACnD,QAAQ;QACR,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,6EAA6E;AAC7E,gFAAgF;AAChF,wEAAwE;AACxE,SAAS,qBAAqB,CAC5B,QAAgB,EAChB,YAAoB,EACpB,WAAgC,EAChC,aAAgC,EAChC,IAAmC,EACnC,iBAAoC;IAEpC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,iCAAiC;QACjC,KAAK,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1C,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxC,kEAAkE;gBAClE,IAAI,WAAW,EAAE,CAAC;oBAChB,qBAAqB,CACnB,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,iBAAiB,CAClB,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM;QACR,CAAC;QAED,4BAA4B;QAC5B,KAAK,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3C,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3C,qEAAqE;gBACrE,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;oBAC9D,qBAAqB,CACnB,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,CAClB,CAAC;oBACF,SAAS;gBACX,CAAC;gBAED,2DAA2D;gBAC3D,QAAQ,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAChC,4BAA4B;oBAC5B,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;wBACxC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,YAAY,CAAC,KAAK;4BAC9B,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI;4BACnC,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;4BACjD,YAAY,EAAE,iBAAiB,CAC7B,QAAQ,EACR,YAAY,CAAC,KAAK,CAAC,IAAI,CACxB;yBACF,CAAC,CAAC;wBACH,MAAM;oBACR,CAAC;oBAED,iCAAiC;oBACjC,KAAK,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;oBAC1C,KAAK,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;wBAC3C,qBAAqB,CACnB,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,CAAC,KAAK,EAClB,iBAAiB,CAClB,CAAC;wBACF,MAAM;oBACR,CAAC;oBAED,OAAO,CAAC,CAAC,CAAC;wBACR,oEAAoE;wBACpE,oEAAoE;wBACpE,mEAAmE;wBACnE,6CAA6C;wBAC7C,MAAM,IAAI,aAAa,CACrB,gCAAgC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EACzD;4BACE,QAAQ;4BACR,YAAY;4BACZ,IAAI,EAAE,YAAY,CAAC,KAAK;yBACzB,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM;QACR,CAAC;QAED,qCAAqC;QACrC,KAAK,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;gBAC1D,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;oBACvB,aAAa;oBACb,UAAU,EAAE,IAAI,CAAC,IAAI;oBACrB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;oBAC1B,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;oBACjD,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;iBAC1D,CAAC,CAAC;YACL,CAAC;YACD,sDAAsD;iBACjD,CAAC;gBACJ,qBAAqB,CACnB,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,IAAI,CAAC,IAAI,EACT,iBAAiB,CAClB,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;QAED,gCAAgC;QAChC,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;YACxC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;gBACvB,aAAa;gBACb,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI,CAAC,IAAI;gBACrB,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;gBACjD,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;aACrD,CAAC,CAAC;YACH,MAAM;QACR,CAAC;QAED,yDAAyD;QACzD,wDAAwD;QACxD,mDAAmD;QACnD,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC9C,MAAM,IAAI,aAAa,CACrB,mDAAmD,EACnD,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CACjC,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,KAAK,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;YACzC,qBAAqB,CACnB,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,IAAI,CAAC,QAAQ,EACb,iBAAiB,CAClB,CAAC;YACF,MAAM;QACR,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,mCAAmC;AACnC,EAAE;AACF,gBAAgB;AAChB,iCAAiC;AACjC,EAAE;AACF,gFAAgF;AAChF,gCAAgC;AAChC,SAAS,0BAA0B,CACjC,IAAkD;IAElD,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU;QACrD,CAAC,CAAC,IAAI,CAAC,IAAI;QACX,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CAChB,aAAgC;IAEhC,OAAO,CACL,aAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CACxE,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,QAAQ,EACR,YAAY,EACZ,GAAG,EACH,iBAAiB,GACS;IAC1B,MAAM,WAAW,GAAwB;QACvC,QAAQ,EAAE,MAAM;QAChB,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;QACzB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,QAAQ,CAAC;QACP,QAAQ;QACR,YAAY;QACZ,GAAG;QACH,iBAAiB,CAAC,aAAa;YAC7B,0EAA0E;YAC1E,wEAAwE;YACxE,kDAAkD;YAClD,MAAM,eAAe,GACnB,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,OAAO;gBAC3D,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;gBAC3C,CAAC,CAAC,SAAS,CAAC;YAChB,IACE,OAAO,eAAe,KAAK,QAAQ;gBACnC,OAAO,eAAe,KAAK,WAAW,EACtC,CAAC;gBACD,MAAM,IAAI,aAAa,CACrB,iBAAiB,MAAM,CAAC,eAAe,CAAC,+BAA+B,EACvE;oBACE,QAAQ;oBACR,YAAY;oBACZ,IAAI,EAAE,aAAa,CAAC,MAAM;iBAC3B,CACF,CAAC;YACJ,CAAC;YAED,0EAA0E;YAC1E,sDAAsD;YACtD,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;gBACpE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;oBACvB,aAAa;oBACb,UAAU,EAAE,aAAa;oBACzB,UAAU,EAAE,SAAS;oBACrB,eAAe;iBAChB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,wEAAwE;YACxE,oEAAoE;YACpE,0EAA0E;YAC1E,yCAAyC;YACzC,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,aAAa,CACrB,iBAAiB,MAAM,CAAC,eAAe,CAAC,kBAAkB,EAC1D;oBACE,QAAQ;oBACR,YAAY;oBACZ,IAAI,EAAE,aAAa,CAAC,MAAM;iBAC3B,CACF,CAAC;YACJ,CAAC;YAED,wEAAwE;YACxE,2DAA2D;YAC3D,KAAK,MAAM,aAAa,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;gBACrD,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;oBAC3B,8BAA8B;oBAC9B,KAAK,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,CAAC;wBACtD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,aAAa;4BACzB,UAAU,EAAE,QAAQ;4BACpB,eAAe;4BACf,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;4BACjD,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI;yBACtC,CAAC,CAAC;wBACH,MAAM;oBACR,CAAC;oBAED,yBAAyB;oBACzB,KAAK,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC;wBACpD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,aAAa;4BACzB,UAAU,EAAE,QAAQ;4BACpB,eAAe;4BACf,UAAU,EAAE,SAAS;4BACrB,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI;4BACrC,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;yBAClD,CAAC,CAAC;wBACH,MAAM;oBACR,CAAC;oBAED,6BAA6B;oBAC7B,KAAK,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;wBAC7C,MAAM,UAAU,GAAG,0BAA0B,CAC3C,aAAa,CAAC,QAAQ,CACvB,CAAC;wBAEF,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,aAAa;4BACzB,UAAU,EAAE,QAAQ;4BACpB,eAAe;4BACf,UAAU;4BACV,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI;4BACrC,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;yBAClD,CAAC,CAAC;wBACH,MAAM;oBACR,CAAC;oBAED,kDAAkD;oBAClD,OAAO,CAAC,CAAC,CAAC;wBACR,MAAM,IAAI,oBAAoB,CAC5B,QAAQ,EACR,YAAY,EACZ,aAAa,CACd,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,iBAAiB,CAAC,aAAa;YAC7B,+DAA+D;YAC/D,IAAI,YAAY,IAAI,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBACrE,KAAK,MAAM,aAAa,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;oBACrD,MAAM,UAAU,GAAG,0BAA0B,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACtE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;wBACvB,aAAa;wBACb,UAAU,EAAE,aAAa,CAAC,QAAQ;wBAClC,UAAU;wBACV,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;wBACjD,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC;qBACtD,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YAED,sCAAsC;YACtC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,yEAAyE;YACzE,0EAA0E;YAC1E,kEAAkE;YAClE,0EAA0E;YAC1E,uEAAuE;YACvE,QAAQ,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACvC,mBAAmB;gBACnB,uCAAuC;gBACvC,KAAK,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBACjD,KAAK,MAAM,eAAe,IAAI,aAAa,CAAC,WAAW;yBACpD,YAAY,EAAE,CAAC;wBAChB,QAAQ,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;4BAChC,yBAAyB;4BACzB,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gCACxC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;oCACvB,aAAa;oCACb,UAAU,EAAE,eAAe,CAAC,EAAE;oCAC9B,UAAU,EAAE,eAAe,CAAC,EAAE,CAAC,IAAI;oCACnC,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;oCACjD,YAAY,EAAE,iBAAiB,CAC7B,QAAQ,EACR,eAAe,CAAC,EAAE,CAAC,IAAI,CACxB;iCACF,CAAC,CAAC;gCACH,MAAM;4BACR,CAAC;4BACD,qCAAqC;4BACrC,KAAK,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;gCAC1C,qBAAqB,CACnB,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,eAAe,CAAC,EAAE,EAClB,iBAAiB,CAClB,CAAC;gCACF,MAAM;4BACR,CAAC;4BACD,mDAAmD;4BACnD,KAAK,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;gCAC3C,qBAAqB,CACnB,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,eAAe,CAAC,EAAE,EAClB,iBAAiB,CAClB,CAAC;gCACF,MAAM;4BACR,CAAC;4BACD,OAAO,CAAC,CAAC,CAAC;gCACR,MAAM,IAAI,oBAAoB,CAC5B,QAAQ,EACR,YAAY,EACZ,eAAe,CAAC,EAAE,CACnB,CAAC;4BACJ,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,sDAAsD;gBACtD,KAAK,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;gBACpD,KAAK,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;gBAC/C,KAAK,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC;oBACpD,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC;wBACzC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC;oBACtC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;wBACvB,aAAa;wBACb,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE;wBACxC,UAAU;wBACV,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;wBACjD,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC;qBACtD,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;gBAED,2BAA2B;gBAC3B,KAAK,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;gBAC/C,KAAK,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBACjD,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;wBAC7B,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE;gCACtC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;gCAC9B,CAAC,CAAC,aAAa;4BACjB,UAAU,EAAE,SAAS;4BACrB,YAAY,EAAE,KAAK,EAAE,+BAA+B;4BACpD,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC;yBACrD,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,kEAAkE;wBAClE,mEAAmE;wBACnE,uCAAuC;wBACvC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;4BAClC,MAAM,IAAI,aAAa,CAAC,qCAAqC,EAAE;gCAC7D,QAAQ;gCACR,YAAY;gCACZ,IAAI,EAAE,aAAa,CAAC,WAAW;6BAChC,CAAC,CAAC;wBACL,CAAC;wBACD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE;4BACxC,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI;4BAC7C,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;4BACjD,YAAY,EAAE,iBAAiB,CAC7B,QAAQ,EACR,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAClC;yBACF,CAAC,CAAC;oBACL,CAAC;oBAED,MAAM;gBACR,CAAC;gBAED,sBAAsB;gBACtB,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBAC9C,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;wBAC7B,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE;gCACtC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;gCAC9B,CAAC,CAAC,aAAa;4BACjB,UAAU,EAAE,SAAS;4BACrB,YAAY,EAAE,KAAK,EAAE,6BAA6B;4BAClD,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC;yBACrD,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;4BAClC,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;wBACJ,CAAC;wBACD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE;4BACxC,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI;4BAC7C,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;4BACjD,YAAY,EAAE,iBAAiB,CAC7B,QAAQ,EACR,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAClC;yBACF,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,qBAAqB;gBACrB,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;oBACxC,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC;oBAC3C,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;oBAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;oBACpD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;wBACvB,aAAa;wBACb,UAAU,EAAE,aAAa,CAAC,WAAW;wBACrC,UAAU;wBACV,YAAY,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;wBACjD,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC;qBACtD,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;gBAED,OAAO,CAAC,CAAC,CAAC;oBACR,iEAAiE;oBACjE,sEAAsE;oBACtE,OAAO;oBACP,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;wBAC7B,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;4BACvB,aAAa;4BACb,UAAU,EAAE,yBAAyB,CACnC,aAAa,EACb,GAAG,CAAC,MAAM,EACV,QAAQ,CACT;4BACD,UAAU,EAAE,SAAS;4BACrB,YAAY,EAAE,KAAK,EAAE,2CAA2C;4BAChE,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC;yBACrD,CAAC,CAAC;wBACH,MAAM;oBACR,CAAC;oBAED,4DAA4D;oBAC5D,+DAA+D;oBAC/D,gEAAgE;oBAChE,gEAAgE;oBAChE,qCAAqC;oBACrC,MAAM,IAAI,aAAa,CACrB,gCAAgC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,EAChE;wBACE,QAAQ;wBACR,YAAY;wBACZ,IAAI,EAAE,aAAa;qBACpB,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB,CAAC,aAAa;YAC/B,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;YAEnD,qCAAqC;YACrC,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;gBACxE,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC;gBAChD,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;oBACzB,aAAa;oBACb,UAAU,EAAE,aAAa;oBACzB,YAAY,EAAE,QAAQ;oBACtB,eAAe;oBACf,UAAU;oBACV,cAAc,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;oBACnD,YAAY,EAAE,UAAU;wBACtB,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC;wBACzC,CAAC,CAAC,KAAK;iBACV,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,4EAA4E;YAC5E,KAAK,MAAM,aAAa,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;gBACrD,MAAM,UAAU,GAAG,0BAA0B,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACtE,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;oBACzB,aAAa;oBACb,UAAU,EAAE,aAAa;oBACzB,YAAY,EAAE,QAAQ;oBACtB,eAAe;oBACf,UAAU,EAAE,0BAA0B,CAAC,aAAa,CAAC,KAAK,CAAC;oBAC3D,UAAU;oBACV,cAAc,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM;oBACnD,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC;iBACtD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -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;