@xylabs/ts-scripts-yarn3 7.3.2 → 7.4.0

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 (41) hide show
  1. package/dist/actions/cycle.mjs +1 -1
  2. package/dist/actions/cycle.mjs.map +1 -1
  3. package/dist/actions/deplint/checkPackage/checkPackage.mjs +278 -35
  4. package/dist/actions/deplint/checkPackage/checkPackage.mjs.map +1 -1
  5. package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs +13 -6
  6. package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs.map +1 -1
  7. package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs +3 -1
  8. package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs.map +1 -1
  9. package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs +175 -0
  10. package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs.map +1 -0
  11. package/dist/actions/deplint/checkPackage/index.mjs +278 -35
  12. package/dist/actions/deplint/checkPackage/index.mjs.map +1 -1
  13. package/dist/actions/deplint/deplint.mjs +281 -38
  14. package/dist/actions/deplint/deplint.mjs.map +1 -1
  15. package/dist/actions/deplint/findFiles.mjs +8 -2
  16. package/dist/actions/deplint/findFiles.mjs.map +1 -1
  17. package/dist/actions/deplint/getExtendsFromTsconfigs.mjs +44 -0
  18. package/dist/actions/deplint/getExtendsFromTsconfigs.mjs.map +1 -0
  19. package/dist/actions/deplint/getExternalImportsFromFiles.mjs +15 -1
  20. package/dist/actions/deplint/getExternalImportsFromFiles.mjs.map +1 -1
  21. package/dist/actions/deplint/getRequiredPeerDependencies.mjs +36 -0
  22. package/dist/actions/deplint/getRequiredPeerDependencies.mjs.map +1 -0
  23. package/dist/actions/deplint/getScriptReferencedPackages.mjs +81 -0
  24. package/dist/actions/deplint/getScriptReferencedPackages.mjs.map +1 -0
  25. package/dist/actions/deplint/implicitDevDependencies.mjs +25 -0
  26. package/dist/actions/deplint/implicitDevDependencies.mjs.map +1 -0
  27. package/dist/actions/deplint/index.mjs +281 -38
  28. package/dist/actions/deplint/index.mjs.map +1 -1
  29. package/dist/actions/index.mjs +385 -142
  30. package/dist/actions/index.mjs.map +1 -1
  31. package/dist/bin/xy.mjs +328 -85
  32. package/dist/bin/xy.mjs.map +1 -1
  33. package/dist/index.mjs +397 -154
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/xy/index.mjs +328 -85
  36. package/dist/xy/index.mjs.map +1 -1
  37. package/dist/xy/xy.mjs +328 -85
  38. package/dist/xy/xy.mjs.map +1 -1
  39. package/dist/xy/xyLintCommands.mjs +301 -58
  40. package/dist/xy/xyLintCommands.mjs.map +1 -1
  41. package/package.json +15 -16
@@ -1,5 +1,5 @@
1
1
  // src/actions/deplint/deplint.ts
2
- import chalk5 from "chalk";
2
+ import chalk6 from "chalk";
3
3
 
4
4
  // src/lib/yarn/workspace/yarnWorkspaces.ts
5
5
  import { spawnSync } from "child_process";
@@ -27,12 +27,18 @@ function findFilesByGlob(cwd, pattern) {
27
27
  }
28
28
 
29
29
  // src/actions/deplint/findFiles.ts
30
- function findFiles(path3) {
31
- const allSourceInclude = ["./src/**/*.{ts,tsx}"];
30
+ function findFiles(path5) {
31
+ const allSourceInclude = ["./src/**/*.{ts,tsx,mts,cts,js,mjs,cjs}"];
32
32
  const allDistInclude = ["./dist/**/*.d.ts", "./dist/**/*.{mjs,js,cjs}"];
33
- const srcFiles = allSourceInclude.flatMap((pattern) => findFilesByGlob(path3, pattern));
34
- const distFiles = allDistInclude.flatMap((pattern) => findFilesByGlob(path3, pattern));
35
- return { srcFiles, distFiles };
33
+ const allConfigInclude = ["./*.config.{ts,mts,mjs,js}"];
34
+ const srcFiles = allSourceInclude.flatMap((pattern) => findFilesByGlob(path5, pattern));
35
+ const distFiles = allDistInclude.flatMap((pattern) => findFilesByGlob(path5, pattern));
36
+ const configFiles = allConfigInclude.flatMap((pattern) => findFilesByGlob(path5, pattern));
37
+ return {
38
+ srcFiles,
39
+ distFiles,
40
+ configFiles
41
+ };
36
42
  }
37
43
 
38
44
  // src/actions/deplint/getDependenciesFromPackageJson.ts
@@ -52,10 +58,9 @@ function getDependenciesFromPackageJson(packageJsonPath) {
52
58
  };
53
59
  }
54
60
 
55
- // src/actions/deplint/getImportsFromFile.ts
61
+ // src/actions/deplint/getExtendsFromTsconfigs.ts
56
62
  import fs2 from "fs";
57
- import path2 from "path";
58
- import ts from "typescript";
63
+ import { globSync as globSync2 } from "glob";
59
64
 
60
65
  // src/actions/deplint/getBasePackageName.ts
61
66
  function getBasePackageName(importName) {
@@ -67,7 +72,37 @@ function getBasePackageName(importName) {
67
72
  return importNameScrubbed.split("/")[0];
68
73
  }
69
74
 
75
+ // src/actions/deplint/getExtendsFromTsconfigs.ts
76
+ var isExternalReference = (ref) => !ref.startsWith(".") && !ref.startsWith("/");
77
+ function parseExtendsField(value) {
78
+ if (typeof value === "string") return [value];
79
+ if (Array.isArray(value)) return value.filter((v) => typeof v === "string");
80
+ return [];
81
+ }
82
+ function getExtendsFromTsconfigs(location) {
83
+ const tsconfigFiles = globSync2("./tsconfig*.json", { cwd: location, absolute: true });
84
+ const packages = /* @__PURE__ */ new Set();
85
+ for (const file of tsconfigFiles) {
86
+ try {
87
+ const content = fs2.readFileSync(file, "utf8");
88
+ const cleaned = content.replaceAll(/\/\/.*/g, "").replaceAll(/,\s*([}\]])/g, "$1");
89
+ const parsed = JSON.parse(cleaned);
90
+ const refs = parseExtendsField(parsed.extends);
91
+ for (const ref of refs) {
92
+ if (isExternalReference(ref)) {
93
+ packages.add(getBasePackageName(ref));
94
+ }
95
+ }
96
+ } catch {
97
+ }
98
+ }
99
+ return [...packages];
100
+ }
101
+
70
102
  // src/actions/deplint/getImportsFromFile.ts
103
+ import fs3 from "fs";
104
+ import path2 from "path";
105
+ import ts from "typescript";
71
106
  function isTypeOnlyImportClause(clause) {
72
107
  if (clause === void 0) {
73
108
  return false;
@@ -80,7 +115,7 @@ function isTypeOnlyImportClause(clause) {
80
115
  return clause.isTypeOnly;
81
116
  }
82
117
  function getImportsFromFile(filePath, importPaths, typeImportPaths) {
83
- const sourceCode = fs2.readFileSync(filePath, "utf8");
118
+ const sourceCode = fs3.readFileSync(filePath, "utf8");
84
119
  const isMjsFile = filePath.endsWith(".mjs");
85
120
  const sourceFile = ts.createSourceFile(
86
121
  path2.basename(filePath),
@@ -133,24 +168,38 @@ var internalImportPrefixes = [".", "#", "node:"];
133
168
  var removeInternalImports = (imports) => {
134
169
  return imports.filter((imp) => !internalImportPrefixes.some((prefix) => imp.startsWith(prefix)));
135
170
  };
136
- function getExternalImportsFromFiles({ srcFiles, distFiles }) {
171
+ function getExternalImportsFromFiles({
172
+ srcFiles,
173
+ distFiles,
174
+ configFiles = [],
175
+ tsconfigExtends = []
176
+ }) {
137
177
  const srcImportPaths = {};
138
178
  const distImportPaths = {};
139
179
  const distTypeImportPaths = {};
140
- for (const path3 of srcFiles) getImportsFromFile(path3, srcImportPaths, srcImportPaths).flat();
180
+ const configImportPaths = {};
181
+ for (const path5 of srcFiles) getImportsFromFile(path5, srcImportPaths, srcImportPaths).flat();
182
+ for (const path5 of configFiles) getImportsFromFile(path5, configImportPaths, configImportPaths).flat();
141
183
  const distTypeFiles = distFiles.filter((file) => file.endsWith(".d.ts") || file.endsWith(".d.cts") || file.endsWith(".d.mts"));
142
184
  const distCodeFiles = distFiles.filter((file) => !(file.endsWith(".d.ts") || file.endsWith(".d.cts") || file.endsWith(".d.mts")));
143
- for (const path3 of distCodeFiles) getImportsFromFile(path3, distImportPaths, distImportPaths).flat();
144
- for (const path3 of distTypeFiles) getImportsFromFile(path3, distTypeImportPaths, distTypeImportPaths).flat();
185
+ for (const path5 of distCodeFiles) getImportsFromFile(path5, distImportPaths, distImportPaths).flat();
186
+ for (const path5 of distTypeFiles) getImportsFromFile(path5, distTypeImportPaths, distTypeImportPaths).flat();
145
187
  const srcImports = Object.keys(srcImportPaths);
146
188
  const distImports = Object.keys(distImportPaths);
147
189
  const distTypeImports = Object.keys(distTypeImportPaths);
148
190
  const externalSrcImports = removeInternalImports(srcImports);
149
191
  const externalDistImports = removeInternalImports(distImports);
150
192
  const externalDistTypeImports = removeInternalImports(distTypeImports);
193
+ const externalConfigImports = removeInternalImports(Object.keys(configImportPaths));
194
+ for (const ext of tsconfigExtends) {
195
+ if (!externalSrcImports.includes(ext)) externalSrcImports.push(ext);
196
+ if (!externalConfigImports.includes(ext)) externalConfigImports.push(ext);
197
+ }
151
198
  return {
199
+ configImportPaths,
152
200
  srcImports,
153
201
  srcImportPaths,
202
+ externalConfigImports,
154
203
  externalSrcImports,
155
204
  distImports,
156
205
  distImportPaths,
@@ -162,6 +211,15 @@ function getExternalImportsFromFiles({ srcFiles, distFiles }) {
162
211
  // src/actions/deplint/checkPackage/getUnlistedDependencies.ts
163
212
  import { builtinModules } from "module";
164
213
  import chalk from "chalk";
214
+ function isListedOrBuiltin(imp, name, dependencies, peerDependencies) {
215
+ return dependencies.includes(imp) || imp === name || dependencies.includes(`@types/${imp}`) || peerDependencies.includes(imp) || peerDependencies.includes(`@types/${imp}`) || builtinModules.includes(imp) || builtinModules.includes(`@types/${imp}`);
216
+ }
217
+ function logMissing(name, imp, importPaths) {
218
+ console.log(`[${chalk.blue(name)}] Missing dependency in package.json: ${chalk.red(imp)}`);
219
+ if (importPaths[imp]) {
220
+ console.log(` ${importPaths[imp].join("\n ")}`);
221
+ }
222
+ }
165
223
  function getUnlistedDependencies({ name, location }, { dependencies, peerDependencies }, {
166
224
  externalDistImports,
167
225
  externalDistTypeImports,
@@ -169,17 +227,15 @@ function getUnlistedDependencies({ name, location }, { dependencies, peerDepende
169
227
  }) {
170
228
  let unlistedDependencies = 0;
171
229
  for (const imp of externalDistImports) {
172
- if (!dependencies.includes(imp) && imp !== name && !dependencies.includes(`@types/${imp}`) && !peerDependencies.includes(imp) && !peerDependencies.includes(`@types/${imp}`) && !builtinModules.includes(imp) && !builtinModules.includes(`@types/${imp}`)) {
230
+ if (!isListedOrBuiltin(imp, name, dependencies, peerDependencies)) {
173
231
  unlistedDependencies++;
174
- console.log(`[${chalk.blue(name)}] Missing dependency in package.json: ${chalk.red(imp)}`);
175
- console.log(` ${distImportPaths[imp].join("\n ")}`);
232
+ logMissing(name, imp, distImportPaths);
176
233
  }
177
234
  }
178
235
  for (const imp of externalDistTypeImports) {
179
- if (!dependencies.includes(imp) && imp !== name && dependencies.includes(`@types/${imp}`) && !peerDependencies.includes(imp) && peerDependencies.includes(`@types/${imp}`) && !builtinModules.includes(imp) && builtinModules.includes(`@types/${imp}`)) {
236
+ if (!isListedOrBuiltin(imp, name, dependencies, peerDependencies)) {
180
237
  unlistedDependencies++;
181
- console.log(`[${chalk.blue(name)}] Missing dependency in package.json: ${chalk.red(imp)}`);
182
- console.log(` ${distImportPaths[imp].join("\n ")}`);
238
+ logMissing(name, imp, distImportPaths);
183
239
  }
184
240
  }
185
241
  if (unlistedDependencies > 0) {
@@ -207,7 +263,9 @@ function getUnlistedDevDependencies({ name, location }, {
207
263
  if (!distImports.includes(imp) && imp !== name && !dependencies.includes(imp) && !dependencies.includes(`@types/${imp}`) && !peerDependencies.includes(imp) && !peerDependencies.includes(`@types/${imp}`) && !devDependencies.includes(imp) && !devDependencies.includes(`@types/${imp}`) && !builtinModules2.includes(imp)) {
208
264
  unlistedDevDependencies++;
209
265
  console.log(`[${chalk2.blue(name)}] Missing devDependency in package.json: ${chalk2.red(imp)}`);
210
- console.log(` ${srcImportPaths[imp].join("\n ")}`);
266
+ if (srcImportPaths[imp]) {
267
+ console.log(` ${srcImportPaths[imp].join("\n ")}`);
268
+ }
211
269
  }
212
270
  }
213
271
  if (unlistedDevDependencies > 0) {
@@ -244,29 +302,205 @@ function getUnusedDependencies({ name, location }, { dependencies }, {
244
302
  return unusedDependencies;
245
303
  }
246
304
 
247
- // src/actions/deplint/checkPackage/getUnusedPeerDependencies.ts
305
+ // src/actions/deplint/checkPackage/getUnusedDevDependencies.ts
248
306
  import chalk4 from "chalk";
307
+
308
+ // src/actions/deplint/getRequiredPeerDependencies.ts
309
+ import fs4 from "fs";
310
+ import path3 from "path";
311
+ function findDepPackageJson(location, dep) {
312
+ let dir = location;
313
+ while (true) {
314
+ const candidate = path3.join(dir, "node_modules", dep, "package.json");
315
+ if (fs4.existsSync(candidate)) return candidate;
316
+ const parent = path3.dirname(dir);
317
+ if (parent === dir) return void 0;
318
+ dir = parent;
319
+ }
320
+ }
321
+ function getRequiredPeerDependencies(location, allDeps) {
322
+ const required = /* @__PURE__ */ new Set();
323
+ for (const dep of allDeps) {
324
+ const depPkgPath = findDepPackageJson(location, dep);
325
+ if (!depPkgPath) continue;
326
+ try {
327
+ const raw = fs4.readFileSync(depPkgPath, "utf8");
328
+ const pkg = JSON.parse(raw);
329
+ if (pkg.peerDependencies) {
330
+ for (const peer of Object.keys(pkg.peerDependencies)) {
331
+ required.add(peer);
332
+ }
333
+ }
334
+ } catch {
335
+ }
336
+ }
337
+ return required;
338
+ }
339
+
340
+ // src/actions/deplint/getScriptReferencedPackages.ts
341
+ import fs5 from "fs";
342
+ import path4 from "path";
343
+ function getBinNames(location, dep) {
344
+ const depPkgPath = findDepPackageJson(location, dep);
345
+ if (!depPkgPath) return [];
346
+ try {
347
+ const raw = fs5.readFileSync(depPkgPath, "utf8");
348
+ const pkg = JSON.parse(raw);
349
+ if (!pkg.bin) return [];
350
+ if (typeof pkg.bin === "string") return [pkg.name?.split("/").pop() ?? dep];
351
+ return Object.keys(pkg.bin);
352
+ } catch {
353
+ return [];
354
+ }
355
+ }
356
+ function tokenizeScript(script) {
357
+ return script.split(/[&|;$()"`\s]+/).map((t) => t.trim()).filter(Boolean);
358
+ }
359
+ function getScriptReferencedPackages(location, allDeps) {
360
+ const pkgPath = path4.join(location, "package.json");
361
+ let scripts = {};
362
+ try {
363
+ const raw = fs5.readFileSync(pkgPath, "utf8");
364
+ const pkg = JSON.parse(raw);
365
+ scripts = pkg.scripts ?? {};
366
+ } catch {
367
+ return /* @__PURE__ */ new Set();
368
+ }
369
+ const scriptText = Object.values(scripts).join(" ");
370
+ const tokens = new Set(tokenizeScript(scriptText));
371
+ const binToPackage = /* @__PURE__ */ new Map();
372
+ for (const dep of allDeps) {
373
+ const bins = getBinNames(location, dep);
374
+ for (const bin of bins) {
375
+ binToPackage.set(bin, dep);
376
+ }
377
+ }
378
+ const referenced = /* @__PURE__ */ new Set();
379
+ for (const token of tokens) {
380
+ const baseName = getBasePackageName(token);
381
+ if (allDeps.includes(baseName)) {
382
+ referenced.add(baseName);
383
+ }
384
+ const pkg = binToPackage.get(token);
385
+ if (pkg) {
386
+ referenced.add(pkg);
387
+ }
388
+ }
389
+ return referenced;
390
+ }
391
+
392
+ // src/actions/deplint/implicitDevDependencies.ts
393
+ var hasFileWithExtension = (files, extensions) => files.some((f) => extensions.some((ext) => f.endsWith(ext)));
394
+ var rules = [
395
+ {
396
+ package: "typescript",
397
+ isNeeded: ({ srcFiles, configFiles }) => hasFileWithExtension([...srcFiles, ...configFiles], [".ts", ".tsx", ".mts", ".cts"])
398
+ },
399
+ {
400
+ package: "eslint-import-resolver-typescript",
401
+ isNeeded: ({ srcFiles, configFiles }) => hasFileWithExtension([...srcFiles, ...configFiles], [".ts", ".tsx", ".mts", ".cts"])
402
+ }
403
+ ];
404
+ function getImplicitDevDependencies(context) {
405
+ const implicit = /* @__PURE__ */ new Set();
406
+ for (const rule of rules) {
407
+ if (rule.isNeeded(context)) {
408
+ implicit.add(rule.package);
409
+ }
410
+ }
411
+ return implicit;
412
+ }
413
+
414
+ // src/actions/deplint/checkPackage/getUnusedDevDependencies.ts
415
+ var allExternalImports = ({
416
+ externalSrcImports,
417
+ externalDistImports,
418
+ externalDistTypeImports,
419
+ externalConfigImports
420
+ }) => {
421
+ const all = /* @__PURE__ */ new Set([
422
+ ...externalSrcImports,
423
+ ...externalDistImports,
424
+ ...externalDistTypeImports,
425
+ ...externalConfigImports
426
+ ]);
427
+ return all;
428
+ };
429
+ function isDevDepUsed(dep, allImports, implicitDeps, requiredPeers, scriptRefs) {
430
+ if (implicitDeps.has(dep)) return true;
431
+ if (requiredPeers.has(dep)) return true;
432
+ if (scriptRefs.has(dep)) return true;
433
+ if (dep.startsWith("@types/")) {
434
+ const baseName = dep.replace(/^@types\//, "");
435
+ return allImports.has(baseName) || allImports.has(dep) || implicitDeps.has(baseName);
436
+ }
437
+ return allImports.has(dep);
438
+ }
439
+ function getUnusedDevDependencies({ name, location }, {
440
+ devDependencies,
441
+ dependencies,
442
+ peerDependencies
443
+ }, sourceParams, fileContext) {
444
+ const allImports = allExternalImports(sourceParams);
445
+ const implicitDeps = getImplicitDevDependencies(fileContext);
446
+ const allDeps = [...dependencies, ...devDependencies, ...peerDependencies];
447
+ const requiredPeers = getRequiredPeerDependencies(location, allDeps);
448
+ const scriptRefs = getScriptReferencedPackages(location, allDeps);
449
+ let unusedDevDependencies = 0;
450
+ for (const dep of devDependencies) {
451
+ if (dependencies.includes(dep) || peerDependencies.includes(dep)) continue;
452
+ if (!isDevDepUsed(dep, allImports, implicitDeps, requiredPeers, scriptRefs)) {
453
+ unusedDevDependencies++;
454
+ console.log(`[${chalk4.blue(name)}] Unused devDependency in package.json: ${chalk4.red(dep)}`);
455
+ }
456
+ }
457
+ if (unusedDevDependencies > 0) {
458
+ const packageLocation = `${location}/package.json`;
459
+ console.log(` ${chalk4.yellow(packageLocation)}
460
+ `);
461
+ }
462
+ return unusedDevDependencies;
463
+ }
464
+
465
+ // src/actions/deplint/checkPackage/getUnusedPeerDependencies.ts
466
+ import chalk5 from "chalk";
249
467
  function getUnusedPeerDependencies({ name, location }, { peerDependencies, dependencies }, { externalDistImports, externalDistTypeImports }) {
250
468
  let unusedDependencies = 0;
251
469
  for (const dep of peerDependencies) {
252
470
  if (!externalDistImports.includes(dep) && !externalDistImports.includes(dep.replace(/^@types\//, "")) && !externalDistTypeImports.includes(dep) && !externalDistTypeImports.includes(dep.replace(/^@types\//, ""))) {
253
471
  unusedDependencies++;
254
472
  if (dependencies.includes(dep)) {
255
- console.log(`[${chalk4.blue(name)}] Unused peerDependency [already a dependency] in package.json: ${chalk4.red(dep)}`);
473
+ console.log(`[${chalk5.blue(name)}] Unused peerDependency [already a dependency] in package.json: ${chalk5.red(dep)}`);
256
474
  } else {
257
- console.log(`[${chalk4.blue(name)}] Unused peerDependency in package.json: ${chalk4.red(dep)}`);
475
+ console.log(`[${chalk5.blue(name)}] Unused peerDependency in package.json: ${chalk5.red(dep)}`);
258
476
  }
259
477
  }
260
478
  }
261
479
  if (unusedDependencies > 0) {
262
480
  const packageLocation = `${location}/package.json`;
263
- console.log(` ${chalk4.yellow(packageLocation)}
481
+ console.log(` ${chalk5.yellow(packageLocation)}
264
482
  `);
265
483
  }
266
484
  return unusedDependencies;
267
485
  }
268
486
 
269
487
  // src/actions/deplint/checkPackage/checkPackage.ts
488
+ function logVerbose(name, location, srcFiles, distFiles, configFiles, tsconfigExtends) {
489
+ console.info(`Checking package: ${name} at ${location}`);
490
+ console.info(`Source files: ${srcFiles.length}, Distribution files: ${distFiles.length}, Config files: ${configFiles.length}`);
491
+ for (const file of srcFiles) {
492
+ console.info(`Source file: ${file}`);
493
+ }
494
+ for (const file of distFiles) {
495
+ console.info(`Distribution file: ${file}`);
496
+ }
497
+ for (const file of configFiles) {
498
+ console.info(`Config file: ${file}`);
499
+ }
500
+ for (const ext of tsconfigExtends) {
501
+ console.info(`Tsconfig extends: ${ext}`);
502
+ }
503
+ }
270
504
  function checkPackage({
271
505
  name,
272
506
  location,
@@ -275,27 +509,36 @@ function checkPackage({
275
509
  peerDeps = false,
276
510
  verbose = false
277
511
  }) {
278
- const { srcFiles, distFiles } = findFiles(location);
512
+ const {
513
+ srcFiles,
514
+ distFiles,
515
+ configFiles
516
+ } = findFiles(location);
517
+ const tsconfigExtends = getExtendsFromTsconfigs(location);
279
518
  if (verbose) {
280
- console.info(`Checking package: ${name} at ${location}`);
281
- console.info(`Source files: ${srcFiles.length}, Distribution files: ${distFiles.length}`);
282
- for (const file of srcFiles) {
283
- console.info(`Source file: ${file}`);
284
- }
285
- for (const file of distFiles) {
286
- console.info(`Distribution file: ${file}`);
287
- }
519
+ logVerbose(name, location, srcFiles, distFiles, configFiles, tsconfigExtends);
288
520
  }
289
521
  const checkDeps = deps || !(deps || devDeps || peerDeps);
290
522
  const checkDevDeps = devDeps || !(deps || devDeps || peerDeps);
291
523
  const checkPeerDeps = peerDeps;
292
- const sourceParams = getExternalImportsFromFiles({ srcFiles, distFiles });
524
+ const sourceParams = getExternalImportsFromFiles({
525
+ srcFiles,
526
+ distFiles,
527
+ configFiles,
528
+ tsconfigExtends
529
+ });
293
530
  const packageParams = getDependenciesFromPackageJson(`${location}/package.json`);
294
531
  const unlistedDependencies = checkDeps ? getUnlistedDependencies({ name, location }, packageParams, sourceParams) : 0;
295
532
  const unusedDependencies = checkDeps ? getUnusedDependencies({ name, location }, packageParams, sourceParams) : 0;
296
533
  const unlistedDevDependencies = checkDevDeps ? getUnlistedDevDependencies({ name, location }, packageParams, sourceParams) : 0;
534
+ const fileContext = {
535
+ configFiles,
536
+ distFiles,
537
+ srcFiles
538
+ };
539
+ const unusedDevDependencies = checkDevDeps ? getUnusedDevDependencies({ name, location }, packageParams, sourceParams, fileContext) : 0;
297
540
  const unusedPeerDependencies = checkPeerDeps ? getUnusedPeerDependencies({ name, location }, packageParams, sourceParams) : 0;
298
- const totalErrors = unlistedDependencies + unlistedDevDependencies + unusedDependencies + unusedPeerDependencies;
541
+ const totalErrors = unlistedDependencies + unlistedDevDependencies + unusedDependencies + unusedDevDependencies + unusedPeerDependencies;
299
542
  return totalErrors;
300
543
  }
301
544
 
@@ -333,9 +576,9 @@ var deplint = ({
333
576
  });
334
577
  }
335
578
  if (totalErrors > 0) {
336
- console.warn(`Deplint: Found ${chalk5.red(totalErrors)} dependency problems. ${chalk5.red("\u2716")}`);
579
+ console.warn(`Deplint: Found ${chalk6.red(totalErrors)} dependency problems. ${chalk6.red("\u2716")}`);
337
580
  } else {
338
- console.info(`Deplint: Found no dependency problems. ${chalk5.green("\u2714")}`);
581
+ console.info(`Deplint: Found no dependency problems. ${chalk6.green("\u2714")}`);
339
582
  }
340
583
  return 0;
341
584
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/deplint/deplint.ts","../../../src/lib/yarn/workspace/yarnWorkspaces.ts","../../../src/lib/yarn/workspace/yarnWorkspace.ts","../../../src/actions/deplint/findFilesByGlob.ts","../../../src/actions/deplint/findFiles.ts","../../../src/actions/deplint/getDependenciesFromPackageJson.ts","../../../src/actions/deplint/getImportsFromFile.ts","../../../src/actions/deplint/getBasePackageName.ts","../../../src/actions/deplint/getExternalImportsFromFiles.ts","../../../src/actions/deplint/checkPackage/getUnlistedDependencies.ts","../../../src/actions/deplint/checkPackage/getUnlistedDevDependencies.ts","../../../src/actions/deplint/checkPackage/getUnusedDependencies.ts","../../../src/actions/deplint/checkPackage/getUnusedPeerDependencies.ts","../../../src/actions/deplint/checkPackage/checkPackage.ts"],"sourcesContent":["import chalk from 'chalk'\n\nimport { yarnWorkspace, yarnWorkspaces } from '../../lib/index.ts'\nimport type { CheckPackageOptions } from './checkPackage/index.ts'\nimport { checkPackage } from './checkPackage/index.ts'\n\nexport interface DepLintOptions extends CheckPackageOptions {\n pkg?: string\n}\n\nexport const deplint = ({\n pkg, deps, devDeps, peerDeps, verbose,\n}: DepLintOptions) => {\n let totalErrors = 0\n\n if (pkg === undefined) {\n const workspaces = yarnWorkspaces()\n\n console.info('Deplint Started...')\n\n for (const workspace of workspaces) {\n totalErrors += checkPackage({\n ...workspace, deps, devDeps, peerDeps, verbose,\n })\n }\n } else {\n const { location, name } = yarnWorkspace(pkg)\n\n console.info(`Running Deplint for ${name}`)\n totalErrors += checkPackage({\n name, location, devDeps, deps, peerDeps, verbose,\n })\n }\n\n if (totalErrors > 0) {\n console.warn(`Deplint: Found ${chalk.red(totalErrors)} dependency problems. ${chalk.red('✖')}`)\n } else {\n console.info(`Deplint: Found no dependency problems. ${chalk.green('✔')}`)\n }\n return 0\n}\n","import { spawnSync } from 'node:child_process'\n\nimport type { Workspace } from './Workspace.ts'\n\nexport const yarnWorkspaces = (): Workspace[] => {\n const result = spawnSync('yarn', ['workspaces', 'list', '--json', '--recursive'], { encoding: 'utf8', shell: true })\n if (result.error) {\n throw result.error\n }\n return (\n result.stdout\n .toString()\n // NOTE: This probably doesn't work on Windows\n // TODO: Replace /r/n with /n first\n .split('\\n')\n .slice(0, -1)\n .map((item) => {\n return JSON.parse(item)\n })\n )\n}\n","import type { Workspace } from './Workspace.ts'\nimport { yarnWorkspaces } from './yarnWorkspaces.ts'\n\nexport const yarnWorkspace = (pkg: string): Workspace => {\n const workspace = yarnWorkspaces().find(({ name }) => name === pkg)\n if (!workspace) throw new Error(`Workspace ${pkg} not found`)\n return workspace\n}\n","import { globSync } from 'glob'\n\nexport function findFilesByGlob(cwd: string, pattern: string) {\n return globSync(pattern, { cwd, absolute: true })\n}\n","import { findFilesByGlob } from './findFilesByGlob.ts'\n\nexport function findFiles(path: string) {\n const allSourceInclude = ['./src/**/*.{ts,tsx}']\n const allDistInclude = ['./dist/**/*.d.ts', './dist/**/*.{mjs,js,cjs}']\n const srcFiles = allSourceInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n const distFiles = allDistInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n\n return { srcFiles, distFiles }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport function getDependenciesFromPackageJson(packageJsonPath: string) {\n const packageJsonFullPath = path.resolve(packageJsonPath)\n const rawContent = fs.readFileSync(packageJsonFullPath, 'utf8')\n const packageJson = JSON.parse(rawContent)\n\n const dependencies = packageJson.dependencies\n ? Object.keys(packageJson.dependencies)\n : []\n\n const devDependencies = packageJson.devDependencies\n ? Object.keys(packageJson.devDependencies)\n : []\n\n const peerDependencies = packageJson.peerDependencies\n ? Object.keys(packageJson.peerDependencies)\n : []\n\n return {\n dependencies, devDependencies, peerDependencies,\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport ts from 'typescript'\n\nimport { getBasePackageName } from './getBasePackageName.ts'\n\nexport function isTypeOnlyImportClause(clause?: ts.ImportClause): boolean {\n if (clause === undefined) {\n return false\n }\n // Newer TS: clause.phaseModifier -> token or number\n if ('phaseModifier' in clause) {\n const mod = clause.phaseModifier\n // handle number enum or token node with .kind\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const kind: number | undefined = typeof mod === 'number' ? mod : (mod as any)?.kind\n return kind === ts.SyntaxKind.TypeKeyword\n }\n // Older TS fallback\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (clause as any).isTypeOnly\n}\n\nexport function getImportsFromFile(filePath: string, importPaths: Record<string, string[]>, typeImportPaths: Record<string, string[]>) {\n const sourceCode = fs.readFileSync(filePath, 'utf8')\n\n const isMjsFile = filePath.endsWith('.mjs')\n\n const sourceFile = ts.createSourceFile(\n path.basename(filePath),\n sourceCode,\n ts.ScriptTarget.Latest,\n true,\n isMjsFile ? ts.ScriptKind.JS : undefined,\n )\n\n const imports: string[] = []\n const typeImports: string[] = []\n\n const isDeclarationFile = filePath.endsWith('.d.ts')\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {\n const moduleSpecifier = (node.moduleSpecifier)?.getFullText()\n const isTypeImport = ts.isImportDeclaration(node) ? isTypeOnlyImportClause(node.importClause) : false\n if (typeof moduleSpecifier === 'string') {\n const trimmed = moduleSpecifier.replaceAll(\"'\", '').replaceAll('\"', '').trim()\n // we are determining if the type import is being imported in an exported d.ts file\n if (isTypeImport || isDeclarationFile) {\n typeImports.push(trimmed)\n } else {\n imports.push(trimmed)\n }\n }\n } else if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword) {\n const [arg] = node.arguments\n if (ts.isStringLiteral(arg)) {\n const trimmed = arg.text\n imports.push(trimmed)\n }\n }\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n\n const importsStartsWithExcludes = ['.', '#', 'node:']\n\n const cleanedImports = imports.filter(imp => !importsStartsWithExcludes.some(exc => imp.startsWith(exc))).map(getBasePackageName)\n const cleanedTypeImports = typeImports.filter(imp => !importsStartsWithExcludes.some(exc => imp.startsWith(exc))).map(getBasePackageName)\n\n for (const imp of cleanedImports) {\n importPaths[imp] = importPaths[imp] ?? []\n importPaths[imp].push(filePath)\n }\n\n for (const imp of cleanedTypeImports) {\n typeImportPaths[imp] = typeImportPaths[imp] ?? []\n typeImportPaths[imp].push(filePath)\n }\n\n return [cleanedImports, cleanedTypeImports]\n}\n","export function getBasePackageName(importName: string) {\n const importNameScrubbed = importName.replaceAll('\"', '').trim()\n if (importNameScrubbed.startsWith('@')) {\n const parts = importNameScrubbed.split('/')\n return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : importNameScrubbed\n }\n return importNameScrubbed.split('/')[0]\n}\n","import type { CheckSourceParams } from './checkPackage/index.ts'\nimport { getImportsFromFile } from './getImportsFromFile.ts'\n\nconst internalImportPrefixes = ['.', '#', 'node:']\n\nconst removeInternalImports = (imports: string[]) => {\n return imports.filter(imp => !internalImportPrefixes.some(prefix => imp.startsWith(prefix)))\n}\n\nexport function getExternalImportsFromFiles({ srcFiles, distFiles }: { distFiles: string []; srcFiles: string[] }): CheckSourceParams {\n const srcImportPaths: Record<string, string[]> = {}\n const distImportPaths: Record<string, string[]> = {}\n const distTypeImportPaths: Record<string, string[]> = {}\n for (const path of srcFiles) getImportsFromFile(path, srcImportPaths, srcImportPaths).flat()\n const distTypeFiles = distFiles.filter(file => file.endsWith('.d.ts') || file.endsWith('.d.cts') || file.endsWith('.d.mts'))\n const distCodeFiles = distFiles.filter(file => !(file.endsWith('.d.ts') || file.endsWith('.d.cts') || file.endsWith('.d.mts')))\n for (const path of distCodeFiles) getImportsFromFile(path, distImportPaths, distImportPaths).flat()\n for (const path of distTypeFiles) getImportsFromFile(path, distTypeImportPaths, distTypeImportPaths).flat()\n const srcImports = Object.keys(srcImportPaths)\n const distImports = Object.keys(distImportPaths)\n const distTypeImports = Object.keys(distTypeImportPaths)\n\n const externalSrcImports = removeInternalImports(srcImports)\n const externalDistImports = removeInternalImports(distImports)\n const externalDistTypeImports = removeInternalImports(distTypeImports)\n\n return {\n srcImports,\n srcImportPaths,\n externalSrcImports,\n distImports,\n distImportPaths,\n externalDistImports,\n externalDistTypeImports,\n }\n}\n","import { builtinModules } from 'node:module'\n\nimport chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nexport function getUnlistedDependencies(\n { name, location }: Workspace,\n { dependencies, peerDependencies }: CheckPackageParams,\n {\n externalDistImports, externalDistTypeImports, distImportPaths,\n }: CheckSourceParams,\n) {\n let unlistedDependencies = 0\n\n for (const imp of externalDistImports) {\n if (!dependencies.includes(imp)\n && imp !== name\n && !dependencies.includes(`@types/${imp}`)\n && !peerDependencies.includes(imp)\n && !peerDependencies.includes(`@types/${imp}`)\n && !builtinModules.includes(imp)\n && !builtinModules.includes(`@types/${imp}`)) {\n unlistedDependencies++\n console.log(`[${chalk.blue(name)}] Missing dependency in package.json: ${chalk.red(imp)}`)\n console.log(` ${distImportPaths[imp].join('\\n ')}`)\n }\n }\n\n for (const imp of externalDistTypeImports) {\n if (!dependencies.includes(imp)\n && imp !== name\n && dependencies.includes(`@types/${imp}`)\n && !peerDependencies.includes(imp)\n && peerDependencies.includes(`@types/${imp}`)\n && !builtinModules.includes(imp)\n && builtinModules.includes(`@types/${imp}`)) {\n unlistedDependencies++\n console.log(`[${chalk.blue(name)}] Missing dependency in package.json: ${chalk.red(imp)}`)\n console.log(` ${distImportPaths[imp].join('\\n ')}`)\n }\n }\n\n if (unlistedDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unlistedDependencies\n}\n","import { builtinModules } from 'node:module'\n\nimport chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nexport function getUnlistedDevDependencies(\n { name, location }: Workspace,\n {\n devDependencies, dependencies, peerDependencies,\n }: CheckPackageParams,\n {\n srcImportPaths, externalSrcImports, distImports,\n }: CheckSourceParams,\n) {\n let unlistedDevDependencies = 0\n for (const imp of externalSrcImports) {\n if (!distImports.includes(imp)\n && imp !== name\n && !dependencies.includes(imp)\n && !dependencies.includes(`@types/${imp}`)\n && !peerDependencies.includes(imp)\n && !peerDependencies.includes(`@types/${imp}`)\n && !devDependencies.includes(imp)\n && !devDependencies.includes(`@types/${imp}`)\n && !builtinModules.includes(imp)\n ) {\n unlistedDevDependencies++\n console.log(`[${chalk.blue(name)}] Missing devDependency in package.json: ${chalk.red(imp)}`)\n console.log(` ${srcImportPaths[imp].join('\\n ')}`)\n }\n }\n if (unlistedDevDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unlistedDevDependencies\n}\n","import chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nexport function getUnusedDependencies(\n { name, location }: Workspace,\n { dependencies }: CheckPackageParams,\n {\n externalDistImports,\n externalDistTypeImports,\n externalSrcImports,\n }: CheckSourceParams,\n) {\n let unusedDependencies = 0\n for (const dep of dependencies) {\n if (!externalDistImports.includes(dep)\n && !externalDistImports.includes(dep.replace(/^@types\\//, ''))\n && !externalDistTypeImports.includes(dep)\n && !externalDistTypeImports.includes(dep.replace(/^@types\\//, ''))) {\n unusedDependencies++\n if (externalSrcImports.includes(dep)) {\n console.log(`[${chalk.blue(name)}] dependency should be devDependency in package.json: ${chalk.red(dep)}`)\n } else {\n console.log(`[${chalk.blue(name)}] Unused dependency in package.json: ${chalk.red(dep)}`)\n }\n }\n }\n if (unusedDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unusedDependencies\n}\n","import chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nexport function getUnusedPeerDependencies(\n { name, location }: Workspace,\n { peerDependencies, dependencies }: CheckPackageParams,\n { externalDistImports, externalDistTypeImports }: CheckSourceParams,\n) {\n let unusedDependencies = 0\n for (const dep of peerDependencies) {\n if (!externalDistImports.includes(dep) && !externalDistImports.includes(dep.replace(/^@types\\//, ''))\n && !externalDistTypeImports.includes(dep) && !externalDistTypeImports.includes(dep.replace(/^@types\\//, ''))) {\n unusedDependencies++\n if (dependencies.includes(dep)) {\n console.log(`[${chalk.blue(name)}] Unused peerDependency [already a dependency] in package.json: ${chalk.red(dep)}`)\n } else {\n console.log(`[${chalk.blue(name)}] Unused peerDependency in package.json: ${chalk.red(dep)}`)\n }\n }\n }\n if (unusedDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unusedDependencies\n}\n","import type { Workspace } from '../../../lib/index.ts'\nimport { findFiles } from '../findFiles.ts'\nimport { getDependenciesFromPackageJson } from '../getDependenciesFromPackageJson.ts'\nimport { getExternalImportsFromFiles } from '../getExternalImportsFromFiles.ts'\nimport { getUnlistedDependencies } from './getUnlistedDependencies.ts'\nimport { getUnlistedDevDependencies } from './getUnlistedDevDependencies.ts'\nimport { getUnusedDependencies } from './getUnusedDependencies.ts'\nimport { getUnusedPeerDependencies } from './getUnusedPeerDependencies.ts'\n\nexport interface CheckPackageOptions {\n deps?: boolean\n devDeps?: boolean\n peerDeps?: boolean\n verbose?: boolean\n}\n\nexport function checkPackage({\n name, location, deps = false, devDeps = false, peerDeps = false, verbose = false,\n}: CheckPackageOptions & Workspace) {\n const { srcFiles, distFiles } = findFiles(location)\n if (verbose) {\n console.info(`Checking package: ${name} at ${location}`)\n console.info(`Source files: ${srcFiles.length}, Distribution files: ${distFiles.length}`)\n for (const file of srcFiles) {\n console.info(`Source file: ${file}`)\n }\n for (const file of distFiles) {\n console.info(`Distribution file: ${file}`)\n }\n }\n const checkDeps = deps || !(deps || devDeps || peerDeps)\n const checkDevDeps = devDeps || !(deps || devDeps || peerDeps)\n const checkPeerDeps = peerDeps // || !(deps || devDeps || peerDeps)\n const sourceParams = getExternalImportsFromFiles({ srcFiles, distFiles })\n\n const packageParams = getDependenciesFromPackageJson(`${location}/package.json`)\n\n const unlistedDependencies = checkDeps ? getUnlistedDependencies({ name, location }, packageParams, sourceParams) : 0\n const unusedDependencies = checkDeps ? getUnusedDependencies({ name, location }, packageParams, sourceParams) : 0\n const unlistedDevDependencies = checkDevDeps ? getUnlistedDevDependencies({ name, location }, packageParams, sourceParams) : 0\n const unusedPeerDependencies = checkPeerDeps ? getUnusedPeerDependencies({ name, location }, packageParams, sourceParams) : 0\n\n const totalErrors = unlistedDependencies + unlistedDevDependencies + unusedDependencies + unusedPeerDependencies\n return totalErrors\n}\n"],"mappings":"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","names":["chalk","path","fs","path","fs","path","path","builtinModules","chalk","chalk","chalk","chalk"]}
1
+ {"version":3,"sources":["../../../src/actions/deplint/deplint.ts","../../../src/lib/yarn/workspace/yarnWorkspaces.ts","../../../src/lib/yarn/workspace/yarnWorkspace.ts","../../../src/actions/deplint/findFilesByGlob.ts","../../../src/actions/deplint/findFiles.ts","../../../src/actions/deplint/getDependenciesFromPackageJson.ts","../../../src/actions/deplint/getExtendsFromTsconfigs.ts","../../../src/actions/deplint/getBasePackageName.ts","../../../src/actions/deplint/getImportsFromFile.ts","../../../src/actions/deplint/getExternalImportsFromFiles.ts","../../../src/actions/deplint/checkPackage/getUnlistedDependencies.ts","../../../src/actions/deplint/checkPackage/getUnlistedDevDependencies.ts","../../../src/actions/deplint/checkPackage/getUnusedDependencies.ts","../../../src/actions/deplint/checkPackage/getUnusedDevDependencies.ts","../../../src/actions/deplint/getRequiredPeerDependencies.ts","../../../src/actions/deplint/getScriptReferencedPackages.ts","../../../src/actions/deplint/implicitDevDependencies.ts","../../../src/actions/deplint/checkPackage/getUnusedPeerDependencies.ts","../../../src/actions/deplint/checkPackage/checkPackage.ts"],"sourcesContent":["import chalk from 'chalk'\n\nimport { yarnWorkspace, yarnWorkspaces } from '../../lib/index.ts'\nimport type { CheckPackageOptions } from './checkPackage/index.ts'\nimport { checkPackage } from './checkPackage/index.ts'\n\nexport interface DepLintOptions extends CheckPackageOptions {\n pkg?: string\n}\n\nexport const deplint = ({\n pkg, deps, devDeps, peerDeps, verbose,\n}: DepLintOptions) => {\n let totalErrors = 0\n\n if (pkg === undefined) {\n const workspaces = yarnWorkspaces()\n\n console.info('Deplint Started...')\n\n for (const workspace of workspaces) {\n totalErrors += checkPackage({\n ...workspace, deps, devDeps, peerDeps, verbose,\n })\n }\n } else {\n const { location, name } = yarnWorkspace(pkg)\n\n console.info(`Running Deplint for ${name}`)\n totalErrors += checkPackage({\n name, location, devDeps, deps, peerDeps, verbose,\n })\n }\n\n if (totalErrors > 0) {\n console.warn(`Deplint: Found ${chalk.red(totalErrors)} dependency problems. ${chalk.red('✖')}`)\n } else {\n console.info(`Deplint: Found no dependency problems. ${chalk.green('✔')}`)\n }\n return 0\n}\n","import { spawnSync } from 'node:child_process'\n\nimport type { Workspace } from './Workspace.ts'\n\nexport const yarnWorkspaces = (): Workspace[] => {\n const result = spawnSync('yarn', ['workspaces', 'list', '--json', '--recursive'], { encoding: 'utf8', shell: true })\n if (result.error) {\n throw result.error\n }\n return (\n result.stdout\n .toString()\n // NOTE: This probably doesn't work on Windows\n // TODO: Replace /r/n with /n first\n .split('\\n')\n .slice(0, -1)\n .map((item) => {\n return JSON.parse(item)\n })\n )\n}\n","import type { Workspace } from './Workspace.ts'\nimport { yarnWorkspaces } from './yarnWorkspaces.ts'\n\nexport const yarnWorkspace = (pkg: string): Workspace => {\n const workspace = yarnWorkspaces().find(({ name }) => name === pkg)\n if (!workspace) throw new Error(`Workspace ${pkg} not found`)\n return workspace\n}\n","import { globSync } from 'glob'\n\nexport function findFilesByGlob(cwd: string, pattern: string) {\n return globSync(pattern, { cwd, absolute: true })\n}\n","import { findFilesByGlob } from './findFilesByGlob.ts'\n\nexport function findFiles(path: string) {\n const allSourceInclude = ['./src/**/*.{ts,tsx,mts,cts,js,mjs,cjs}']\n const allDistInclude = ['./dist/**/*.d.ts', './dist/**/*.{mjs,js,cjs}']\n const allConfigInclude = ['./*.config.{ts,mts,mjs,js}']\n const srcFiles = allSourceInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n const distFiles = allDistInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n const configFiles = allConfigInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n\n return {\n srcFiles, distFiles, configFiles,\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport function getDependenciesFromPackageJson(packageJsonPath: string) {\n const packageJsonFullPath = path.resolve(packageJsonPath)\n const rawContent = fs.readFileSync(packageJsonFullPath, 'utf8')\n const packageJson = JSON.parse(rawContent)\n\n const dependencies = packageJson.dependencies\n ? Object.keys(packageJson.dependencies)\n : []\n\n const devDependencies = packageJson.devDependencies\n ? Object.keys(packageJson.devDependencies)\n : []\n\n const peerDependencies = packageJson.peerDependencies\n ? Object.keys(packageJson.peerDependencies)\n : []\n\n return {\n dependencies, devDependencies, peerDependencies,\n }\n}\n","import fs from 'node:fs'\n\nimport { globSync } from 'glob'\n\nimport { getBasePackageName } from './getBasePackageName.ts'\n\nconst isExternalReference = (ref: string) => !ref.startsWith('.') && !ref.startsWith('/')\n\nfunction parseExtendsField(value: unknown): string[] {\n if (typeof value === 'string') return [value]\n if (Array.isArray(value)) return value.filter((v): v is string => typeof v === 'string')\n return []\n}\n\nexport function getExtendsFromTsconfigs(location: string): string[] {\n const tsconfigFiles = globSync('./tsconfig*.json', { cwd: location, absolute: true })\n const packages = new Set<string>()\n\n for (const file of tsconfigFiles) {\n try {\n const content = fs.readFileSync(file, 'utf8')\n // Strip single-line comments (tsconfig allows them) and trailing commas before parsing\n const cleaned = content\n .replaceAll(/\\/\\/.*/g, '')\n .replaceAll(/,\\s*([}\\]])/g, '$1')\n const parsed = JSON.parse(cleaned)\n const refs = parseExtendsField(parsed.extends)\n for (const ref of refs) {\n if (isExternalReference(ref)) {\n packages.add(getBasePackageName(ref))\n }\n }\n } catch {\n // Skip files that can't be parsed\n }\n }\n\n return [...packages]\n}\n","export function getBasePackageName(importName: string) {\n const importNameScrubbed = importName.replaceAll('\"', '').trim()\n if (importNameScrubbed.startsWith('@')) {\n const parts = importNameScrubbed.split('/')\n return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : importNameScrubbed\n }\n return importNameScrubbed.split('/')[0]\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport ts from 'typescript'\n\nimport { getBasePackageName } from './getBasePackageName.ts'\n\nexport function isTypeOnlyImportClause(clause?: ts.ImportClause): boolean {\n if (clause === undefined) {\n return false\n }\n // Newer TS: clause.phaseModifier -> token or number\n if ('phaseModifier' in clause) {\n const mod = clause.phaseModifier\n // handle number enum or token node with .kind\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const kind: number | undefined = typeof mod === 'number' ? mod : (mod as any)?.kind\n return kind === ts.SyntaxKind.TypeKeyword\n }\n // Older TS fallback\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (clause as any).isTypeOnly\n}\n\nexport function getImportsFromFile(filePath: string, importPaths: Record<string, string[]>, typeImportPaths: Record<string, string[]>) {\n const sourceCode = fs.readFileSync(filePath, 'utf8')\n\n const isMjsFile = filePath.endsWith('.mjs')\n\n const sourceFile = ts.createSourceFile(\n path.basename(filePath),\n sourceCode,\n ts.ScriptTarget.Latest,\n true,\n isMjsFile ? ts.ScriptKind.JS : undefined,\n )\n\n const imports: string[] = []\n const typeImports: string[] = []\n\n const isDeclarationFile = filePath.endsWith('.d.ts')\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {\n const moduleSpecifier = (node.moduleSpecifier)?.getFullText()\n const isTypeImport = ts.isImportDeclaration(node) ? isTypeOnlyImportClause(node.importClause) : false\n if (typeof moduleSpecifier === 'string') {\n const trimmed = moduleSpecifier.replaceAll(\"'\", '').replaceAll('\"', '').trim()\n // we are determining if the type import is being imported in an exported d.ts file\n if (isTypeImport || isDeclarationFile) {\n typeImports.push(trimmed)\n } else {\n imports.push(trimmed)\n }\n }\n } else if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword) {\n const [arg] = node.arguments\n if (ts.isStringLiteral(arg)) {\n const trimmed = arg.text\n imports.push(trimmed)\n }\n }\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n\n const importsStartsWithExcludes = ['.', '#', 'node:']\n\n const cleanedImports = imports.filter(imp => !importsStartsWithExcludes.some(exc => imp.startsWith(exc))).map(getBasePackageName)\n const cleanedTypeImports = typeImports.filter(imp => !importsStartsWithExcludes.some(exc => imp.startsWith(exc))).map(getBasePackageName)\n\n for (const imp of cleanedImports) {\n importPaths[imp] = importPaths[imp] ?? []\n importPaths[imp].push(filePath)\n }\n\n for (const imp of cleanedTypeImports) {\n typeImportPaths[imp] = typeImportPaths[imp] ?? []\n typeImportPaths[imp].push(filePath)\n }\n\n return [cleanedImports, cleanedTypeImports]\n}\n","import type { CheckSourceParams } from './checkPackage/index.ts'\nimport { getImportsFromFile } from './getImportsFromFile.ts'\n\nconst internalImportPrefixes = ['.', '#', 'node:']\n\nconst removeInternalImports = (imports: string[]) => {\n return imports.filter(imp => !internalImportPrefixes.some(prefix => imp.startsWith(prefix)))\n}\n\nexport function getExternalImportsFromFiles({\n srcFiles, distFiles, configFiles = [], tsconfigExtends = [],\n}: {\n configFiles?: string[]\n distFiles: string[]\n srcFiles: string[]\n tsconfigExtends?: string[]\n}): CheckSourceParams {\n const srcImportPaths: Record<string, string[]> = {}\n const distImportPaths: Record<string, string[]> = {}\n const distTypeImportPaths: Record<string, string[]> = {}\n const configImportPaths: Record<string, string[]> = {}\n for (const path of srcFiles) getImportsFromFile(path, srcImportPaths, srcImportPaths).flat()\n for (const path of configFiles) getImportsFromFile(path, configImportPaths, configImportPaths).flat()\n const distTypeFiles = distFiles.filter(file => file.endsWith('.d.ts') || file.endsWith('.d.cts') || file.endsWith('.d.mts'))\n const distCodeFiles = distFiles.filter(file => !(file.endsWith('.d.ts') || file.endsWith('.d.cts') || file.endsWith('.d.mts')))\n for (const path of distCodeFiles) getImportsFromFile(path, distImportPaths, distImportPaths).flat()\n for (const path of distTypeFiles) getImportsFromFile(path, distTypeImportPaths, distTypeImportPaths).flat()\n const srcImports = Object.keys(srcImportPaths)\n const distImports = Object.keys(distImportPaths)\n const distTypeImports = Object.keys(distTypeImportPaths)\n\n const externalSrcImports = removeInternalImports(srcImports)\n const externalDistImports = removeInternalImports(distImports)\n const externalDistTypeImports = removeInternalImports(distTypeImports)\n const externalConfigImports = removeInternalImports(Object.keys(configImportPaths))\n\n // Tsconfig extends references count as used devDependencies\n for (const ext of tsconfigExtends) {\n if (!externalSrcImports.includes(ext)) externalSrcImports.push(ext)\n if (!externalConfigImports.includes(ext)) externalConfigImports.push(ext)\n }\n\n return {\n configImportPaths,\n srcImports,\n srcImportPaths,\n externalConfigImports,\n externalSrcImports,\n distImports,\n distImportPaths,\n externalDistImports,\n externalDistTypeImports,\n }\n}\n","import { builtinModules } from 'node:module'\n\nimport chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nfunction isListedOrBuiltin(\n imp: string,\n name: string,\n dependencies: string[],\n peerDependencies: string[],\n) {\n return dependencies.includes(imp)\n || imp === name\n || dependencies.includes(`@types/${imp}`)\n || peerDependencies.includes(imp)\n || peerDependencies.includes(`@types/${imp}`)\n || builtinModules.includes(imp)\n || builtinModules.includes(`@types/${imp}`)\n}\n\nfunction logMissing(name: string, imp: string, importPaths: Record<string, string[]>) {\n console.log(`[${chalk.blue(name)}] Missing dependency in package.json: ${chalk.red(imp)}`)\n if (importPaths[imp]) {\n console.log(` ${importPaths[imp].join('\\n ')}`)\n }\n}\n\nexport function getUnlistedDependencies(\n { name, location }: Workspace,\n { dependencies, peerDependencies }: CheckPackageParams,\n {\n externalDistImports, externalDistTypeImports, distImportPaths,\n }: CheckSourceParams,\n) {\n let unlistedDependencies = 0\n\n for (const imp of externalDistImports) {\n if (!isListedOrBuiltin(imp, name, dependencies, peerDependencies)) {\n unlistedDependencies++\n logMissing(name, imp, distImportPaths)\n }\n }\n\n for (const imp of externalDistTypeImports) {\n if (!isListedOrBuiltin(imp, name, dependencies, peerDependencies)) {\n unlistedDependencies++\n logMissing(name, imp, distImportPaths)\n }\n }\n\n if (unlistedDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unlistedDependencies\n}\n","import { builtinModules } from 'node:module'\n\nimport chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nexport function getUnlistedDevDependencies(\n { name, location }: Workspace,\n {\n devDependencies, dependencies, peerDependencies,\n }: CheckPackageParams,\n {\n srcImportPaths, externalSrcImports, distImports,\n }: CheckSourceParams,\n) {\n let unlistedDevDependencies = 0\n for (const imp of externalSrcImports) {\n if (!distImports.includes(imp)\n && imp !== name\n && !dependencies.includes(imp)\n && !dependencies.includes(`@types/${imp}`)\n && !peerDependencies.includes(imp)\n && !peerDependencies.includes(`@types/${imp}`)\n && !devDependencies.includes(imp)\n && !devDependencies.includes(`@types/${imp}`)\n && !builtinModules.includes(imp)\n ) {\n unlistedDevDependencies++\n console.log(`[${chalk.blue(name)}] Missing devDependency in package.json: ${chalk.red(imp)}`)\n if (srcImportPaths[imp]) {\n console.log(` ${srcImportPaths[imp].join('\\n ')}`)\n }\n }\n }\n if (unlistedDevDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unlistedDevDependencies\n}\n","import chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nexport function getUnusedDependencies(\n { name, location }: Workspace,\n { dependencies }: CheckPackageParams,\n {\n externalDistImports,\n externalDistTypeImports,\n externalSrcImports,\n }: CheckSourceParams,\n) {\n let unusedDependencies = 0\n for (const dep of dependencies) {\n if (!externalDistImports.includes(dep)\n && !externalDistImports.includes(dep.replace(/^@types\\//, ''))\n && !externalDistTypeImports.includes(dep)\n && !externalDistTypeImports.includes(dep.replace(/^@types\\//, ''))) {\n unusedDependencies++\n if (externalSrcImports.includes(dep)) {\n console.log(`[${chalk.blue(name)}] dependency should be devDependency in package.json: ${chalk.red(dep)}`)\n } else {\n console.log(`[${chalk.blue(name)}] Unused dependency in package.json: ${chalk.red(dep)}`)\n }\n }\n }\n if (unusedDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unusedDependencies\n}\n","import chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport { getRequiredPeerDependencies } from '../getRequiredPeerDependencies.ts'\nimport { getScriptReferencedPackages } from '../getScriptReferencedPackages.ts'\nimport type { ImplicitDepContext } from '../implicitDevDependencies.ts'\nimport { getImplicitDevDependencies } from '../implicitDevDependencies.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nconst allExternalImports = ({\n externalSrcImports,\n externalDistImports,\n externalDistTypeImports,\n externalConfigImports,\n}: CheckSourceParams) => {\n const all = new Set<string>([\n ...externalSrcImports,\n ...externalDistImports,\n ...externalDistTypeImports,\n ...externalConfigImports,\n ])\n return all\n}\n\nfunction isDevDepUsed(\n dep: string,\n allImports: Set<string>,\n implicitDeps: Set<string>,\n requiredPeers: Set<string>,\n scriptRefs: Set<string>,\n) {\n if (implicitDeps.has(dep)) return true\n if (requiredPeers.has(dep)) return true\n if (scriptRefs.has(dep)) return true\n\n if (dep.startsWith('@types/')) {\n const baseName = dep.replace(/^@types\\//, '')\n return allImports.has(baseName) || allImports.has(dep) || implicitDeps.has(baseName)\n }\n\n return allImports.has(dep)\n}\n\nexport function getUnusedDevDependencies(\n { name, location }: Workspace,\n {\n devDependencies, dependencies, peerDependencies,\n }: CheckPackageParams,\n sourceParams: CheckSourceParams,\n fileContext: ImplicitDepContext,\n) {\n const allImports = allExternalImports(sourceParams)\n const implicitDeps = getImplicitDevDependencies(fileContext)\n const allDeps = [...dependencies, ...devDependencies, ...peerDependencies]\n const requiredPeers = getRequiredPeerDependencies(location, allDeps)\n const scriptRefs = getScriptReferencedPackages(location, allDeps)\n let unusedDevDependencies = 0\n for (const dep of devDependencies) {\n // Skip devDeps that are also declared as dependencies or peerDependencies\n if (dependencies.includes(dep) || peerDependencies.includes(dep)) continue\n\n if (!isDevDepUsed(dep, allImports, implicitDeps, requiredPeers, scriptRefs)) {\n unusedDevDependencies++\n console.log(`[${chalk.blue(name)}] Unused devDependency in package.json: ${chalk.red(dep)}`)\n }\n }\n if (unusedDevDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unusedDevDependencies\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport function findDepPackageJson(location: string, dep: string): string | undefined {\n let dir = location\n while (true) {\n const candidate = path.join(dir, 'node_modules', dep, 'package.json')\n if (fs.existsSync(candidate)) return candidate\n const parent = path.dirname(dir)\n if (parent === dir) return undefined\n dir = parent\n }\n}\n\n/**\n * Collects the peerDependencies declared by all of a package's\n * dependencies and devDependencies. A devDependency that satisfies\n * one of these peer requirements should not be flagged as unused.\n */\nexport function getRequiredPeerDependencies(\n location: string,\n allDeps: string[],\n): Set<string> {\n const required = new Set<string>()\n for (const dep of allDeps) {\n const depPkgPath = findDepPackageJson(location, dep)\n if (!depPkgPath) continue\n try {\n const raw = fs.readFileSync(depPkgPath, 'utf8')\n const pkg = JSON.parse(raw)\n if (pkg.peerDependencies) {\n for (const peer of Object.keys(pkg.peerDependencies)) {\n required.add(peer)\n }\n }\n } catch {\n // Package not readable — skip\n }\n }\n return required\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport { getBasePackageName } from './getBasePackageName.ts'\nimport { findDepPackageJson } from './getRequiredPeerDependencies.ts'\n\nfunction getBinNames(location: string, dep: string): string[] {\n const depPkgPath = findDepPackageJson(location, dep)\n if (!depPkgPath) return []\n try {\n const raw = fs.readFileSync(depPkgPath, 'utf8')\n const pkg = JSON.parse(raw)\n if (!pkg.bin) return []\n if (typeof pkg.bin === 'string') return [pkg.name?.split('/').pop() ?? dep]\n return Object.keys(pkg.bin)\n } catch {\n return []\n }\n}\n\nfunction tokenizeScript(script: string): string[] {\n // Split on shell operators and whitespace to get command tokens\n return script\n .split(/[&|;$()\"`\\s]+/)\n .map(t => t.trim())\n .filter(Boolean)\n}\n\n/**\n * Scans package.json scripts for references to installed packages,\n * either by package name or by binary name they provide.\n */\nexport function getScriptReferencedPackages(\n location: string,\n allDeps: string[],\n): Set<string> {\n const pkgPath = path.join(location, 'package.json')\n let scripts: Record<string, string> = {}\n try {\n const raw = fs.readFileSync(pkgPath, 'utf8')\n const pkg = JSON.parse(raw)\n scripts = pkg.scripts ?? {}\n } catch {\n return new Set()\n }\n\n const scriptText = Object.values(scripts).join(' ')\n const tokens = new Set(tokenizeScript(scriptText))\n\n // Build a map from bin name -> package name\n const binToPackage = new Map<string, string>()\n for (const dep of allDeps) {\n const bins = getBinNames(location, dep)\n for (const bin of bins) {\n binToPackage.set(bin, dep)\n }\n }\n\n const referenced = new Set<string>()\n for (const token of tokens) {\n // Direct package name match (e.g. \"yarn rimraf\" -> token \"rimraf\")\n const baseName = getBasePackageName(token)\n if (allDeps.includes(baseName)) {\n referenced.add(baseName)\n }\n // Binary name match (e.g. \"tsup\" -> @xylabs/ts-scripts-yarn3 provides \"tsup\"? no, tsup provides \"tsup\")\n const pkg = binToPackage.get(token)\n if (pkg) {\n referenced.add(pkg)\n }\n }\n\n return referenced\n}\n","export interface ImplicitDevDependencyRule {\n isNeeded: (context: ImplicitDepContext) => boolean\n package: string\n}\n\nexport interface ImplicitDepContext {\n configFiles: string[]\n distFiles: string[]\n srcFiles: string[]\n}\n\nconst hasFileWithExtension = (files: string[], extensions: string[]) =>\n files.some(f => extensions.some(ext => f.endsWith(ext)))\n\nconst rules: ImplicitDevDependencyRule[] = [\n {\n package: 'typescript',\n isNeeded: ({ srcFiles, configFiles }) =>\n hasFileWithExtension([...srcFiles, ...configFiles], ['.ts', '.tsx', '.mts', '.cts']),\n },\n {\n package: 'eslint-import-resolver-typescript',\n isNeeded: ({ srcFiles, configFiles }) =>\n hasFileWithExtension([...srcFiles, ...configFiles], ['.ts', '.tsx', '.mts', '.cts']),\n },\n]\n\nexport function getImplicitDevDependencies(context: ImplicitDepContext): Set<string> {\n const implicit = new Set<string>()\n for (const rule of rules) {\n if (rule.isNeeded(context)) {\n implicit.add(rule.package)\n }\n }\n return implicit\n}\n","import chalk from 'chalk'\n\nimport type { Workspace } from '../../../lib/index.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nexport function getUnusedPeerDependencies(\n { name, location }: Workspace,\n { peerDependencies, dependencies }: CheckPackageParams,\n { externalDistImports, externalDistTypeImports }: CheckSourceParams,\n) {\n let unusedDependencies = 0\n for (const dep of peerDependencies) {\n if (!externalDistImports.includes(dep) && !externalDistImports.includes(dep.replace(/^@types\\//, ''))\n && !externalDistTypeImports.includes(dep) && !externalDistTypeImports.includes(dep.replace(/^@types\\//, ''))) {\n unusedDependencies++\n if (dependencies.includes(dep)) {\n console.log(`[${chalk.blue(name)}] Unused peerDependency [already a dependency] in package.json: ${chalk.red(dep)}`)\n } else {\n console.log(`[${chalk.blue(name)}] Unused peerDependency in package.json: ${chalk.red(dep)}`)\n }\n }\n }\n if (unusedDependencies > 0) {\n const packageLocation = `${location}/package.json`\n console.log(` ${chalk.yellow(packageLocation)}\\n`)\n }\n return unusedDependencies\n}\n","import type { Workspace } from '../../../lib/index.ts'\nimport { findFiles } from '../findFiles.ts'\nimport { getDependenciesFromPackageJson } from '../getDependenciesFromPackageJson.ts'\nimport { getExtendsFromTsconfigs } from '../getExtendsFromTsconfigs.ts'\nimport { getExternalImportsFromFiles } from '../getExternalImportsFromFiles.ts'\nimport { getUnlistedDependencies } from './getUnlistedDependencies.ts'\nimport { getUnlistedDevDependencies } from './getUnlistedDevDependencies.ts'\nimport { getUnusedDependencies } from './getUnusedDependencies.ts'\nimport { getUnusedDevDependencies } from './getUnusedDevDependencies.ts'\nimport { getUnusedPeerDependencies } from './getUnusedPeerDependencies.ts'\n\nexport interface CheckPackageOptions {\n deps?: boolean\n devDeps?: boolean\n peerDeps?: boolean\n verbose?: boolean\n}\n\nfunction logVerbose(\n name: string,\n location: string,\n srcFiles: string[],\n distFiles: string[],\n configFiles: string[],\n tsconfigExtends: string[],\n) {\n console.info(`Checking package: ${name} at ${location}`)\n console.info(`Source files: ${srcFiles.length}, Distribution files: ${distFiles.length}, Config files: ${configFiles.length}`)\n for (const file of srcFiles) {\n console.info(`Source file: ${file}`)\n }\n for (const file of distFiles) {\n console.info(`Distribution file: ${file}`)\n }\n for (const file of configFiles) {\n console.info(`Config file: ${file}`)\n }\n for (const ext of tsconfigExtends) {\n console.info(`Tsconfig extends: ${ext}`)\n }\n}\n\nexport function checkPackage({\n name, location, deps = false, devDeps = false, peerDeps = false, verbose = false,\n}: CheckPackageOptions & Workspace) {\n const {\n srcFiles, distFiles, configFiles,\n } = findFiles(location)\n const tsconfigExtends = getExtendsFromTsconfigs(location)\n if (verbose) {\n logVerbose(name, location, srcFiles, distFiles, configFiles, tsconfigExtends)\n }\n const checkDeps = deps || !(deps || devDeps || peerDeps)\n const checkDevDeps = devDeps || !(deps || devDeps || peerDeps)\n const checkPeerDeps = peerDeps // || !(deps || devDeps || peerDeps)\n const sourceParams = getExternalImportsFromFiles({\n srcFiles, distFiles, configFiles, tsconfigExtends,\n })\n\n const packageParams = getDependenciesFromPackageJson(`${location}/package.json`)\n\n const unlistedDependencies = checkDeps ? getUnlistedDependencies({ name, location }, packageParams, sourceParams) : 0\n const unusedDependencies = checkDeps ? getUnusedDependencies({ name, location }, packageParams, sourceParams) : 0\n const unlistedDevDependencies = checkDevDeps ? getUnlistedDevDependencies({ name, location }, packageParams, sourceParams) : 0\n const fileContext = {\n configFiles, distFiles, srcFiles,\n }\n const unusedDevDependencies = checkDevDeps\n ? getUnusedDevDependencies({ name, location }, packageParams, sourceParams, fileContext)\n : 0\n const unusedPeerDependencies = checkPeerDeps ? getUnusedPeerDependencies({ name, location }, packageParams, sourceParams) : 0\n\n const totalErrors = unlistedDependencies + unlistedDevDependencies + unusedDependencies + unusedDevDependencies + unusedPeerDependencies\n return totalErrors\n}\n"],"mappings":"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","names":["chalk","path","fs","globSync","globSync","fs","fs","path","fs","path","path","builtinModules","chalk","chalk","chalk","fs","path","fs","path","fs","path","chalk","chalk","chalk"]}
@@ -6,11 +6,17 @@ function findFilesByGlob(cwd, pattern) {
6
6
 
7
7
  // src/actions/deplint/findFiles.ts
8
8
  function findFiles(path) {
9
- const allSourceInclude = ["./src/**/*.{ts,tsx}"];
9
+ const allSourceInclude = ["./src/**/*.{ts,tsx,mts,cts,js,mjs,cjs}"];
10
10
  const allDistInclude = ["./dist/**/*.d.ts", "./dist/**/*.{mjs,js,cjs}"];
11
+ const allConfigInclude = ["./*.config.{ts,mts,mjs,js}"];
11
12
  const srcFiles = allSourceInclude.flatMap((pattern) => findFilesByGlob(path, pattern));
12
13
  const distFiles = allDistInclude.flatMap((pattern) => findFilesByGlob(path, pattern));
13
- return { srcFiles, distFiles };
14
+ const configFiles = allConfigInclude.flatMap((pattern) => findFilesByGlob(path, pattern));
15
+ return {
16
+ srcFiles,
17
+ distFiles,
18
+ configFiles
19
+ };
14
20
  }
15
21
  export {
16
22
  findFiles
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/deplint/findFilesByGlob.ts","../../../src/actions/deplint/findFiles.ts"],"sourcesContent":["import { globSync } from 'glob'\n\nexport function findFilesByGlob(cwd: string, pattern: string) {\n return globSync(pattern, { cwd, absolute: true })\n}\n","import { findFilesByGlob } from './findFilesByGlob.ts'\n\nexport function findFiles(path: string) {\n const allSourceInclude = ['./src/**/*.{ts,tsx}']\n const allDistInclude = ['./dist/**/*.d.ts', './dist/**/*.{mjs,js,cjs}']\n const srcFiles = allSourceInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n const distFiles = allDistInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n\n return { srcFiles, distFiles }\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AAElB,SAAS,gBAAgB,KAAa,SAAiB;AAC5D,SAAO,SAAS,SAAS,EAAE,KAAK,UAAU,KAAK,CAAC;AAClD;;;ACFO,SAAS,UAAU,MAAc;AACtC,QAAM,mBAAmB,CAAC,qBAAqB;AAC/C,QAAM,iBAAiB,CAAC,oBAAoB,0BAA0B;AACtE,QAAM,WAAW,iBAAiB,QAAQ,aAAW,gBAAgB,MAAM,OAAO,CAAC;AACnF,QAAM,YAAY,eAAe,QAAQ,aAAW,gBAAgB,MAAM,OAAO,CAAC;AAElF,SAAO,EAAE,UAAU,UAAU;AAC/B;","names":[]}
1
+ {"version":3,"sources":["../../../src/actions/deplint/findFilesByGlob.ts","../../../src/actions/deplint/findFiles.ts"],"sourcesContent":["import { globSync } from 'glob'\n\nexport function findFilesByGlob(cwd: string, pattern: string) {\n return globSync(pattern, { cwd, absolute: true })\n}\n","import { findFilesByGlob } from './findFilesByGlob.ts'\n\nexport function findFiles(path: string) {\n const allSourceInclude = ['./src/**/*.{ts,tsx,mts,cts,js,mjs,cjs}']\n const allDistInclude = ['./dist/**/*.d.ts', './dist/**/*.{mjs,js,cjs}']\n const allConfigInclude = ['./*.config.{ts,mts,mjs,js}']\n const srcFiles = allSourceInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n const distFiles = allDistInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n const configFiles = allConfigInclude.flatMap(pattern => findFilesByGlob(path, pattern))\n\n return {\n srcFiles, distFiles, configFiles,\n }\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AAElB,SAAS,gBAAgB,KAAa,SAAiB;AAC5D,SAAO,SAAS,SAAS,EAAE,KAAK,UAAU,KAAK,CAAC;AAClD;;;ACFO,SAAS,UAAU,MAAc;AACtC,QAAM,mBAAmB,CAAC,wCAAwC;AAClE,QAAM,iBAAiB,CAAC,oBAAoB,0BAA0B;AACtE,QAAM,mBAAmB,CAAC,4BAA4B;AACtD,QAAM,WAAW,iBAAiB,QAAQ,aAAW,gBAAgB,MAAM,OAAO,CAAC;AACnF,QAAM,YAAY,eAAe,QAAQ,aAAW,gBAAgB,MAAM,OAAO,CAAC;AAClF,QAAM,cAAc,iBAAiB,QAAQ,aAAW,gBAAgB,MAAM,OAAO,CAAC;AAEtF,SAAO;AAAA,IACL;AAAA,IAAU;AAAA,IAAW;AAAA,EACvB;AACF;","names":[]}