tdepend 0.2.0 → 0.3.1

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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +212 -116
  3. package/dist/api/analyze.d.ts +8 -68
  4. package/dist/api/analyze.js +33 -108
  5. package/dist/api/analyze.js.map +1 -1
  6. package/dist/api/explain.d.ts +22 -0
  7. package/dist/api/explain.js +38 -0
  8. package/dist/api/explain.js.map +1 -0
  9. package/dist/api/export.d.ts +4 -47
  10. package/dist/api/export.js +6 -45
  11. package/dist/api/export.js.map +1 -1
  12. package/dist/api/serialization.d.ts +6 -26
  13. package/dist/api/serialization.js +68 -58
  14. package/dist/api/serialization.js.map +1 -1
  15. package/dist/cli/index.js +11 -129
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/run.d.ts +12 -0
  18. package/dist/cli/run.js +112 -0
  19. package/dist/cli/run.js.map +1 -0
  20. package/dist/config/loadConfig.d.ts +10 -10
  21. package/dist/config/loadConfig.js +73 -36
  22. package/dist/config/loadConfig.js.map +1 -1
  23. package/dist/config/schema.d.ts +59 -29
  24. package/dist/config/schema.js +45 -51
  25. package/dist/config/schema.js.map +1 -1
  26. package/dist/errors.d.ts +9 -0
  27. package/dist/errors.js +21 -0
  28. package/dist/errors.js.map +1 -0
  29. package/dist/files/collectFiles.d.ts +21 -0
  30. package/dist/files/collectFiles.js +189 -0
  31. package/dist/files/collectFiles.js.map +1 -0
  32. package/dist/fs.d.ts +16 -0
  33. package/dist/fs.js +50 -0
  34. package/dist/fs.js.map +1 -0
  35. package/dist/graph/buildFileGraph.d.ts +33 -0
  36. package/dist/graph/buildFileGraph.js +163 -0
  37. package/dist/graph/buildFileGraph.js.map +1 -0
  38. package/dist/graph/fileGraph.d.ts +20 -0
  39. package/dist/graph/fileGraph.js +75 -0
  40. package/dist/graph/fileGraph.js.map +1 -0
  41. package/dist/index.d.ts +10 -21
  42. package/dist/index.js +6 -29
  43. package/dist/index.js.map +1 -1
  44. package/dist/output/analyzeText.d.ts +7 -0
  45. package/dist/output/analyzeText.js +91 -0
  46. package/dist/output/analyzeText.js.map +1 -0
  47. package/dist/parser/extractSites.d.ts +3 -0
  48. package/dist/parser/extractSites.js +704 -0
  49. package/dist/parser/extractSites.js.map +1 -0
  50. package/dist/parser/loadsTarget.d.ts +10 -0
  51. package/dist/parser/loadsTarget.js +304 -0
  52. package/dist/parser/loadsTarget.js.map +1 -0
  53. package/dist/parser/types.d.ts +30 -0
  54. package/dist/{types/graph.js → parser/types.js} +1 -1
  55. package/dist/parser/types.js.map +1 -0
  56. package/dist/project/discoverProject.d.ts +2 -0
  57. package/dist/project/discoverProject.js +477 -0
  58. package/dist/project/discoverProject.js.map +1 -0
  59. package/dist/project/gitignore.d.ts +13 -0
  60. package/dist/project/gitignore.js +138 -0
  61. package/dist/project/gitignore.js.map +1 -0
  62. package/dist/project/types.d.ts +44 -0
  63. package/dist/{types/parser.js → project/types.js} +1 -1
  64. package/dist/project/types.js.map +1 -0
  65. package/dist/resolver/createResolver.d.ts +4 -0
  66. package/dist/resolver/createResolver.js +276 -0
  67. package/dist/resolver/createResolver.js.map +1 -0
  68. package/dist/resolver/types.d.ts +28 -0
  69. package/dist/resolver/types.js +3 -0
  70. package/dist/resolver/types.js.map +1 -0
  71. package/dist/resolver/workspaceHost.d.ts +12 -0
  72. package/dist/resolver/workspaceHost.js +253 -0
  73. package/dist/resolver/workspaceHost.js.map +1 -0
  74. package/dist/types/api.d.ts +71 -64
  75. package/package.json +24 -25
  76. package/dist/analysis/reporter.d.ts +0 -22
  77. package/dist/analysis/reporter.js +0 -116
  78. package/dist/analysis/reporter.js.map +0 -1
  79. package/dist/graph/cycleDetector.d.ts +0 -2
  80. package/dist/graph/cycleDetector.js +0 -56
  81. package/dist/graph/cycleDetector.js.map +0 -1
  82. package/dist/graph/dependencyGraph.d.ts +0 -10
  83. package/dist/graph/dependencyGraph.js +0 -41
  84. package/dist/graph/dependencyGraph.js.map +0 -1
  85. package/dist/metrics/abstractness.d.ts +0 -2
  86. package/dist/metrics/abstractness.js +0 -10
  87. package/dist/metrics/abstractness.js.map +0 -1
  88. package/dist/metrics/distance.d.ts +0 -1
  89. package/dist/metrics/distance.js +0 -7
  90. package/dist/metrics/distance.js.map +0 -1
  91. package/dist/metrics/index.d.ts +0 -4
  92. package/dist/metrics/index.js +0 -30
  93. package/dist/metrics/index.js.map +0 -1
  94. package/dist/metrics/instability.d.ts +0 -1
  95. package/dist/metrics/instability.js +0 -8
  96. package/dist/metrics/instability.js.map +0 -1
  97. package/dist/parser/fileScanner.d.ts +0 -8
  98. package/dist/parser/fileScanner.js +0 -22
  99. package/dist/parser/fileScanner.js.map +0 -1
  100. package/dist/parser/tsParser.d.ts +0 -18
  101. package/dist/parser/tsParser.js +0 -158
  102. package/dist/parser/tsParser.js.map +0 -1
  103. package/dist/types/graph.d.ts +0 -14
  104. package/dist/types/graph.js.map +0 -1
  105. package/dist/types/parser.d.ts +0 -26
  106. package/dist/types/parser.js.map +0 -1
  107. package/dist/utils/deepMerge.d.ts +0 -1
  108. package/dist/utils/deepMerge.js +0 -23
  109. package/dist/utils/deepMerge.js.map +0 -1
  110. package/dist/utils/log.d.ts +0 -2
  111. package/dist/utils/log.js +0 -9
  112. package/dist/utils/log.js.map +0 -1
  113. package/dist/utils/pathUtils.d.ts +0 -12
  114. package/dist/utils/pathUtils.js +0 -27
  115. package/dist/utils/pathUtils.js.map +0 -1
@@ -0,0 +1,477 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.discoverProject = discoverProject;
40
+ const node_child_process_1 = require("node:child_process");
41
+ const node_path_1 = require("node:path");
42
+ const picomatch_1 = __importDefault(require("picomatch"));
43
+ const ts = __importStar(require("typescript"));
44
+ const yaml_1 = require("yaml");
45
+ const errors_1 = require("../errors");
46
+ const fs_1 = require("../fs");
47
+ const gitignore_1 = require("./gitignore");
48
+ const UNKNOWN_OPTION_CODES = new Set([5023, 5024, 5025]);
49
+ const BUNDLER_DEPENDENCIES = ['vite', 'next', 'webpack', '@rsbuild/core', '@tanstack/react-start'];
50
+ function discoverProject(rootDir, opts = {}) {
51
+ const fs = opts.fs ?? (0, fs_1.nodeFileSystem)();
52
+ const root = realpathOrSelf(fs, rootDir);
53
+ const gitTopLevel = findGitTopLevel(root);
54
+ const localExclude = opts.localExclude ?? readLocalExclude(fs, gitTopLevel);
55
+ const ignore = (0, gitignore_1.createIgnoreMatcher)({
56
+ rootDir: root,
57
+ gitTopLevel,
58
+ localExcludeBase: gitTopLevel ?? root,
59
+ localExclude,
60
+ fs,
61
+ });
62
+ const warnings = [];
63
+ const unsupported = [];
64
+ const tsconfigPaths = [];
65
+ const packagePaths = [];
66
+ walk(root, fs, ignore, (abs, rel) => {
67
+ const name = (0, node_path_1.basename)(abs);
68
+ if ((name.startsWith('tsconfig') || name.startsWith('jsconfig')) && name.endsWith('.json')) {
69
+ tsconfigPaths.push(rel);
70
+ }
71
+ else if (name === 'package.json') {
72
+ packagePaths.push(rel);
73
+ }
74
+ });
75
+ const packageSet = new Set(packagePaths);
76
+ const readPackage = (rel) => readJsonObject(fs, (0, node_path_1.join)(root, rel));
77
+ const isConfigExcluded = opts.isConfigExcluded ?? (() => false);
78
+ const tsconfigs = tsconfigPaths
79
+ .filter((rel) => !isConfigExcluded(rel))
80
+ .map((rel) => parseTsconfig(rel, root, warnings));
81
+ const packages = readWorkspacePackages(root, fs, packageSet, readPackage);
82
+ const isExcluded = opts.isExcluded ?? (() => false);
83
+ const projectDirs = new Set(['']);
84
+ for (const rel of packagePaths) {
85
+ if (isExcluded(rel))
86
+ continue;
87
+ const pkg = readPackage(rel);
88
+ if (pkg !== null && declaresDependencies(pkg))
89
+ projectDirs.add(dirOfPosix(rel));
90
+ }
91
+ for (const pkg of packages)
92
+ projectDirs.add(pkg.dir);
93
+ const projects = [...projectDirs].sort().map((dir) => {
94
+ const rel = dir === '' ? 'package.json' : `${dir}/package.json`;
95
+ const pkg = packageSet.has(rel) ? readPackage(rel) : null;
96
+ return {
97
+ id: dir === '' ? 'proj:(repo)' : `proj:${dir}`,
98
+ dir,
99
+ dependencies: dependenciesOf(pkg),
100
+ packageJson: pkg,
101
+ };
102
+ });
103
+ if ((0, fs_1.isFile)(fs, (0, node_path_1.join)(root, '.pnp.cjs')) && !(0, fs_1.isDir)(fs, (0, node_path_1.join)(root, 'node_modules'))) {
104
+ unsupported.push('yarn-pnp');
105
+ }
106
+ const projectFor = (file) => {
107
+ const rel = normalizeRel(root, file);
108
+ let best = projects[0];
109
+ for (const project of projects) {
110
+ if (isAncestorDir(project.dir, rel) && project.dir.length > best.dir.length)
111
+ best = project;
112
+ }
113
+ return best;
114
+ };
115
+ const packageFor = (file) => {
116
+ const rel = normalizeRel(root, file);
117
+ let best = null;
118
+ for (const pkg of packages) {
119
+ if (isAncestorDir(pkg.dir, rel) && (best === null || pkg.dir.length > best.dir.length)) {
120
+ best = pkg;
121
+ }
122
+ }
123
+ return best;
124
+ };
125
+ const optionsFor = (file) => {
126
+ const rel = normalizeRel(root, file);
127
+ const containing = tsconfigs.filter((entry) => entry.fileNames.has(rel));
128
+ const entry = pickNearest(containing, rel) ?? pickNearestAncestor(tsconfigs, rel);
129
+ if (entry === null) {
130
+ const project = projectFor(rel);
131
+ const fallback = fallbackOptions(project, rel, packageSet, readPackage);
132
+ return { options: fallback, entry: null };
133
+ }
134
+ return { options: entry.options, entry };
135
+ };
136
+ const isIgnored = (path) => {
137
+ const abs = (0, node_path_1.isAbsolute)(path) ? path : (0, node_path_1.join)(root, path);
138
+ return ignore.test(abs);
139
+ };
140
+ return {
141
+ rootDir: root,
142
+ gitTopLevel,
143
+ projects,
144
+ packages,
145
+ tsconfigs,
146
+ projectFor,
147
+ packageFor,
148
+ optionsFor,
149
+ isIgnored,
150
+ unsupported,
151
+ warnings,
152
+ };
153
+ }
154
+ function realpathOrSelf(fs, path) {
155
+ try {
156
+ return fs.realpath(path);
157
+ }
158
+ catch {
159
+ return path;
160
+ }
161
+ }
162
+ function findGitTopLevel(dir) {
163
+ try {
164
+ const out = (0, node_child_process_1.execFileSync)('git', ['rev-parse', '--show-toplevel'], {
165
+ cwd: dir,
166
+ encoding: 'utf-8',
167
+ stdio: ['ignore', 'pipe', 'ignore'],
168
+ });
169
+ const line = out.trim();
170
+ return line === '' ? null : line;
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ }
176
+ function readLocalExclude(fs, gitTopLevel) {
177
+ if (gitTopLevel === null)
178
+ return [];
179
+ const text = (0, fs_1.tryRead)(fs, (0, node_path_1.join)(gitTopLevel, '.git', 'info', 'exclude'));
180
+ if (text === null)
181
+ return [];
182
+ return text.split('\n');
183
+ }
184
+ function walk(root, fs, ignore, visit, dir = root, relDir = '') {
185
+ let entries;
186
+ try {
187
+ entries = fs.readdir(dir);
188
+ }
189
+ catch {
190
+ return;
191
+ }
192
+ entries.sort();
193
+ for (const name of entries) {
194
+ if ((0, gitignore_1.shouldSkipDir)(name))
195
+ continue;
196
+ const abs = (0, node_path_1.join)(dir, name);
197
+ const stats = (0, fs_1.tryStat)(fs, abs);
198
+ if (stats === null)
199
+ continue;
200
+ if (!isInsideRoot(fs, root, abs))
201
+ continue;
202
+ const rel = relDir === '' ? name : `${relDir}/${name}`;
203
+ if (stats.isDirectory()) {
204
+ if (ignore.test(abs, true))
205
+ continue;
206
+ walk(root, fs, ignore, visit, abs, rel);
207
+ }
208
+ else if (stats.isFile()) {
209
+ if (ignore.test(abs, false))
210
+ continue;
211
+ visit(abs, rel);
212
+ }
213
+ }
214
+ }
215
+ function isInsideRoot(fs, root, abs) {
216
+ const real = realpathOrSelf(fs, abs);
217
+ return real === root || real.startsWith(root + node_path_1.sep);
218
+ }
219
+ function parseTsconfig(rel, root, warnings) {
220
+ const abs = (0, node_path_1.join)(root, rel);
221
+ let unrecoverable = null;
222
+ let parsed;
223
+ try {
224
+ parsed = ts.getParsedCommandLineOfConfigFile(abs, {}, {
225
+ ...ts.sys,
226
+ onUnRecoverableConfigFileDiagnostic: (diagnostic) => {
227
+ unrecoverable = diagnostic;
228
+ },
229
+ });
230
+ }
231
+ catch (error) {
232
+ throw new errors_1.ConfigError(`Cannot parse TypeScript config ${rel}: ${error instanceof Error ? error.message : String(error)}`);
233
+ }
234
+ if (parsed === undefined) {
235
+ const detail = unrecoverable === null ? '' : `: ${flatten(unrecoverable)}`;
236
+ throw new errors_1.ConfigError(`Invalid TypeScript config ${rel}${detail}`);
237
+ }
238
+ let unknownOption = false;
239
+ for (const diagnostic of parsed.errors) {
240
+ if (UNKNOWN_OPTION_CODES.has(diagnostic.code)) {
241
+ unknownOption = true;
242
+ continue;
243
+ }
244
+ if (diagnostic.code === 18003)
245
+ continue;
246
+ throw new errors_1.ConfigError(`Invalid TypeScript config ${rel}: ${flatten(diagnostic)}`);
247
+ }
248
+ if (unknownOption)
249
+ warnings.push(`unknown-compiler-option: ${rel}`);
250
+ const options = parsed.options;
251
+ const fileNames = new Set(parsed.fileNames.map((file) => (0, fs_1.toPosix)((0, node_path_1.relative)(root, file))));
252
+ const declaredRootDir = options.rootDir === undefined ? null : (0, fs_1.toPosix)((0, node_path_1.relative)(root, options.rootDir));
253
+ return {
254
+ configPath: rel,
255
+ options,
256
+ fileNames,
257
+ rootDir: declaredRootDir ?? commonDir([...fileNames]) ?? dirOfPosix(rel),
258
+ outDir: options.outDir === undefined ? undefined : (0, fs_1.toPosix)((0, node_path_1.relative)(root, options.outDir)),
259
+ declarationDir: options.declarationDir === undefined
260
+ ? undefined
261
+ : (0, fs_1.toPosix)((0, node_path_1.relative)(root, options.declarationDir)),
262
+ };
263
+ }
264
+ function flatten(diagnostic) {
265
+ return ts.flattenDiagnosticMessageText(diagnostic.messageText, ' ');
266
+ }
267
+ function readWorkspacePackages(root, fs, packageSet, readPackage) {
268
+ const rootPackage = packageSet.has('package.json') ? readPackage('package.json') : null;
269
+ const globs = readWorkspaceGlobs(root, fs, rootPackage);
270
+ if (globs.length === 0)
271
+ return [];
272
+ const isPackageDir = workspaceMatcher(globs);
273
+ const dirs = [...packageSet]
274
+ .map((rel) => dirOfPosix(rel))
275
+ .filter((dir) => dir !== '' && isPackageDir(dir))
276
+ .sort();
277
+ const seen = new Map();
278
+ return dirs.map((dir) => {
279
+ const pkg = readPackage(`${dir}/package.json`);
280
+ const name = pkg !== null && typeof pkg.name === 'string' ? pkg.name : null;
281
+ if (name === null) {
282
+ throw new errors_1.ConfigError(`Workspace package ${dir} has no "name" in its package.json`);
283
+ }
284
+ const previous = seen.get(name);
285
+ if (previous !== undefined) {
286
+ throw new errors_1.ConfigError(`Duplicate workspace package name "${name}" in ${previous} and ${dir}`);
287
+ }
288
+ seen.set(name, dir);
289
+ return { id: `pkg:${dir}`, name, dir, packageJson: pkg };
290
+ });
291
+ }
292
+ // picomatch treats a negated pattern in a list as "match anything but", which
293
+ // would make `['packages/*', '!**/test/**']` match every directory. Positive and
294
+ // negative patterns are matched separately instead.
295
+ function workspaceMatcher(globs) {
296
+ const positive = globs.filter((glob) => !glob.startsWith('!'));
297
+ const negative = globs.filter((glob) => glob.startsWith('!')).map((glob) => glob.slice(1));
298
+ const matchesPositive = positive.length === 0 ? () => false : (0, picomatch_1.default)(positive, { dot: true });
299
+ const matchesNegative = negative.length === 0 ? () => false : (0, picomatch_1.default)(negative, { dot: true });
300
+ return (dir) => matchesPositive(dir) && !matchesNegative(dir);
301
+ }
302
+ function readWorkspaceGlobs(root, fs, rootPackage) {
303
+ const yamlText = (0, fs_1.tryRead)(fs, (0, node_path_1.join)(root, 'pnpm-workspace.yaml'));
304
+ if (yamlText !== null) {
305
+ let doc = null;
306
+ try {
307
+ doc = (0, yaml_1.parse)(yamlText);
308
+ }
309
+ catch {
310
+ doc = null;
311
+ }
312
+ if (doc !== null &&
313
+ typeof doc === 'object' &&
314
+ Array.isArray(doc.packages)) {
315
+ const packages = doc.packages;
316
+ const strings = packages.filter((entry) => typeof entry === 'string');
317
+ if (strings.length > 0)
318
+ return strings;
319
+ }
320
+ }
321
+ const workspaces = rootPackage?.workspaces;
322
+ if (Array.isArray(workspaces)) {
323
+ return workspaces.filter((entry) => typeof entry === 'string');
324
+ }
325
+ if (workspaces !== null && typeof workspaces === 'object') {
326
+ const nested = workspaces.packages;
327
+ if (Array.isArray(nested)) {
328
+ return nested.filter((entry) => typeof entry === 'string');
329
+ }
330
+ }
331
+ return [];
332
+ }
333
+ function pickNearestAncestor(entries, rel) {
334
+ return pickNearest(entries.filter((entry) => isAncestorDir(dirOfPosix(entry.configPath), rel)), rel);
335
+ }
336
+ function pickNearest(entries, rel) {
337
+ if (entries.length === 0)
338
+ return null;
339
+ const sorted = [...entries].sort((a, b) => {
340
+ const dirA = dirOfPosix(a.configPath);
341
+ const dirB = dirOfPosix(b.configPath);
342
+ const byAncestor = Number(isAncestorDir(dirB, rel)) - Number(isAncestorDir(dirA, rel));
343
+ if (byAncestor !== 0)
344
+ return byAncestor;
345
+ const byDepth = depthOf(dirB) - depthOf(dirA);
346
+ if (byDepth !== 0)
347
+ return byDepth;
348
+ const byPriority = configPriority(a.configPath) - configPriority(b.configPath);
349
+ if (byPriority !== 0)
350
+ return byPriority;
351
+ return a.configPath < b.configPath ? -1 : a.configPath > b.configPath ? 1 : 0;
352
+ });
353
+ return sorted[0];
354
+ }
355
+ function configPriority(configPath) {
356
+ const name = (0, node_path_1.basename)(configPath);
357
+ if (name === 'tsconfig.json')
358
+ return 0;
359
+ if (name === 'jsconfig.json')
360
+ return 1;
361
+ return 2;
362
+ }
363
+ function fallbackOptions(project, rel, packageSet, readPackage) {
364
+ const base = {
365
+ allowJs: true,
366
+ resolveJsonModule: true,
367
+ jsx: ts.JsxEmit.Preserve,
368
+ };
369
+ if (BUNDLER_DEPENDENCIES.some((name) => project.dependencies.has(name))) {
370
+ return {
371
+ ...base,
372
+ module: ts.ModuleKind.ESNext,
373
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
374
+ };
375
+ }
376
+ if (nearestPackageIsModule(rel, packageSet, readPackage)) {
377
+ return {
378
+ ...base,
379
+ module: ts.ModuleKind.NodeNext,
380
+ moduleResolution: ts.ModuleResolutionKind.NodeNext,
381
+ };
382
+ }
383
+ return {
384
+ ...base,
385
+ module: ts.ModuleKind.CommonJS,
386
+ moduleResolution: ts.ModuleResolutionKind.Node10,
387
+ };
388
+ }
389
+ function nearestPackageIsModule(rel, packageSet, readPackage) {
390
+ let dir = dirOfPosix(rel);
391
+ for (;;) {
392
+ const candidate = dir === '' ? 'package.json' : `${dir}/package.json`;
393
+ if (packageSet.has(candidate)) {
394
+ const pkg = readPackage(candidate);
395
+ return pkg !== null && pkg.type === 'module';
396
+ }
397
+ if (dir === '')
398
+ return false;
399
+ dir = dirOfPosix(dir);
400
+ }
401
+ }
402
+ function readJsonObject(fs, path) {
403
+ const text = (0, fs_1.tryRead)(fs, path);
404
+ if (text === null)
405
+ return null;
406
+ try {
407
+ const value = JSON.parse(text);
408
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
409
+ return value;
410
+ }
411
+ return null;
412
+ }
413
+ catch {
414
+ return null;
415
+ }
416
+ }
417
+ const DEPENDENCY_FIELDS = [
418
+ 'dependencies',
419
+ 'devDependencies',
420
+ 'peerDependencies',
421
+ 'optionalDependencies',
422
+ ];
423
+ function declaresDependencies(pkg) {
424
+ return DEPENDENCY_FIELDS.some((key) => pkg[key] !== null && typeof pkg[key] === 'object');
425
+ }
426
+ function dependenciesOf(pkg) {
427
+ const deps = new Set();
428
+ if (pkg === null)
429
+ return deps;
430
+ for (const key of DEPENDENCY_FIELDS) {
431
+ const value = pkg[key];
432
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
433
+ for (const name of Object.keys(value))
434
+ deps.add(name);
435
+ }
436
+ }
437
+ return deps;
438
+ }
439
+ function normalizeRel(root, file) {
440
+ if ((0, node_path_1.isAbsolute)(file))
441
+ return (0, fs_1.toPosix)((0, node_path_1.relative)(root, file));
442
+ return file.replace(/^\.\//, '').split('\\').join('/');
443
+ }
444
+ function isAncestorDir(dir, rel) {
445
+ if (dir === '')
446
+ return true;
447
+ return rel === dir || rel.startsWith(`${dir}/`);
448
+ }
449
+ function depthOf(dir) {
450
+ return dir === '' ? 0 : dir.split('/').length;
451
+ }
452
+ function dirOfPosix(path) {
453
+ return path.includes('/') ? path.slice(0, path.lastIndexOf('/')) : '';
454
+ }
455
+ function commonDir(paths) {
456
+ if (paths.length === 0)
457
+ return null;
458
+ let prefix = dirOfPosix(paths[0]);
459
+ for (const path of paths.slice(1)) {
460
+ prefix = commonPrefixDir(prefix, dirOfPosix(path));
461
+ if (prefix === '')
462
+ return '';
463
+ }
464
+ return prefix;
465
+ }
466
+ function commonPrefixDir(a, b) {
467
+ const left = a === '' ? [] : a.split('/');
468
+ const right = b === '' ? [] : b.split('/');
469
+ const shared = [];
470
+ for (let i = 0; i < Math.min(left.length, right.length); i++) {
471
+ if (left[i] !== right[i])
472
+ break;
473
+ shared.push(left[i]);
474
+ }
475
+ return shared.join('/');
476
+ }
477
+ //# sourceMappingURL=discoverProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoverProject.js","sourceRoot":"","sources":["../../src/project/discoverProject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type FileSystemLike } from '../fs';
2
+ export declare function shouldSkipDir(name: string): boolean;
3
+ export interface IgnoreMatcher {
4
+ test(absPath: string, isDir?: boolean): boolean;
5
+ }
6
+ export interface CreateIgnoreMatcherOptions {
7
+ rootDir: string;
8
+ gitTopLevel?: string | null;
9
+ localExcludeBase: string;
10
+ localExclude: string[];
11
+ fs: FileSystemLike;
12
+ }
13
+ export declare function createIgnoreMatcher(opts: CreateIgnoreMatcherOptions): IgnoreMatcher;
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.shouldSkipDir = shouldSkipDir;
7
+ exports.createIgnoreMatcher = createIgnoreMatcher;
8
+ const node_path_1 = require("node:path");
9
+ const picomatch_1 = __importDefault(require("picomatch"));
10
+ const fs_1 = require("../fs");
11
+ const SKIP_DIRS = new Set(['node_modules', 'dist', 'build', 'out', 'coverage']);
12
+ function shouldSkipDir(name) {
13
+ return SKIP_DIRS.has(name) || name.startsWith('.');
14
+ }
15
+ function createIgnoreMatcher(opts) {
16
+ const rules = [];
17
+ for (const pattern of opts.localExclude) {
18
+ const rule = compileRule(opts.localExcludeBase, pattern);
19
+ if (rule !== null)
20
+ rules.push(rule);
21
+ }
22
+ const readRules = (dir) => {
23
+ const text = (0, fs_1.tryRead)(opts.fs, (0, node_path_1.join)(dir, '.gitignore'));
24
+ if (text === null)
25
+ return;
26
+ for (const line of text.split('\n')) {
27
+ const rule = compileRule(dir, line);
28
+ if (rule !== null)
29
+ rules.push(rule);
30
+ }
31
+ };
32
+ for (const dir of ancestorsBetween(opts.gitTopLevel ?? null, opts.rootDir))
33
+ readRules(dir);
34
+ const collect = (dir) => {
35
+ readRules(dir);
36
+ let entries;
37
+ try {
38
+ entries = opts.fs.readdir(dir);
39
+ }
40
+ catch {
41
+ return;
42
+ }
43
+ for (const name of entries) {
44
+ if (shouldSkipDir(name))
45
+ continue;
46
+ const child = (0, node_path_1.join)(dir, name);
47
+ if (!(0, fs_1.isDir)(opts.fs, child))
48
+ continue;
49
+ if (matches(rules, child, true))
50
+ continue;
51
+ collect(child);
52
+ }
53
+ };
54
+ collect(opts.rootDir);
55
+ return { test: (absPath, isDirectory = false) => matches(rules, absPath, isDirectory) };
56
+ }
57
+ function ancestorsBetween(top, rootDir) {
58
+ if (top === null || relativeToBase(top, rootDir) === null)
59
+ return [];
60
+ const dirs = [];
61
+ for (let dir = (0, node_path_1.dirname)(rootDir); dir.length >= top.length; dir = (0, node_path_1.dirname)(dir)) {
62
+ dirs.unshift(dir);
63
+ if (dir === top || (0, node_path_1.dirname)(dir) === dir)
64
+ break;
65
+ }
66
+ return dirs;
67
+ }
68
+ function matches(rules, absPath, isDirectory) {
69
+ let ignored = false;
70
+ for (const rule of rules) {
71
+ const rel = relativeToBase(rule.base, absPath);
72
+ if (rel === null)
73
+ continue;
74
+ if (ruleMatches(rule, rel, isDirectory))
75
+ ignored = !rule.negated;
76
+ }
77
+ return ignored;
78
+ }
79
+ function relativeToBase(base, absPath) {
80
+ const rel = (0, node_path_1.relative)(base, absPath);
81
+ if (rel === '' || rel.startsWith('..') || (0, node_path_1.isAbsolute)(rel))
82
+ return null;
83
+ return (0, fs_1.toPosix)(rel);
84
+ }
85
+ function ruleMatches(rule, rel, isDirectory) {
86
+ const parts = rel.split('/');
87
+ for (let i = parts.length; i >= 1; i--) {
88
+ const candidate = parts.slice(0, i).join('/');
89
+ const isSelf = i === parts.length;
90
+ if (rule.dirOnly && isSelf && !isDirectory)
91
+ continue;
92
+ if (rule.regex.test(candidate))
93
+ return true;
94
+ }
95
+ return false;
96
+ }
97
+ function compileRule(base, rawLine) {
98
+ const line = rawLine.replace(/\r$/, '').replace(/\s+$/, '');
99
+ if (line === '' || line.startsWith('#'))
100
+ return null;
101
+ let negated = false;
102
+ let pattern = line;
103
+ if (pattern.startsWith('\\#') || pattern.startsWith('\\!')) {
104
+ pattern = pattern.slice(1);
105
+ }
106
+ else if (pattern.startsWith('!')) {
107
+ negated = true;
108
+ pattern = pattern.slice(1);
109
+ if (pattern === '')
110
+ return null;
111
+ }
112
+ let dirOnly = false;
113
+ if (pattern.endsWith('/')) {
114
+ dirOnly = true;
115
+ pattern = pattern.slice(0, -1);
116
+ }
117
+ let anchored = false;
118
+ if (pattern.startsWith('/')) {
119
+ anchored = true;
120
+ pattern = pattern.slice(1);
121
+ }
122
+ if (pattern.includes('/'))
123
+ anchored = true;
124
+ if (pattern === '')
125
+ return null;
126
+ const glob = anchored ? pattern : `**/${pattern}`;
127
+ let regex;
128
+ try {
129
+ regex = picomatch_1.default.makeRe(glob, { dot: true });
130
+ }
131
+ catch {
132
+ return null;
133
+ }
134
+ if (regex === undefined || regex === null)
135
+ return null;
136
+ return { base, regex, negated, dirOnly };
137
+ }
138
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/project/gitignore.ts"],"names":[],"mappings":"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"}