foresthouse 1.0.0-dev.20 → 1.0.0-dev.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as printReactUsageTree, c as printPackageDependencyTree, f as analyzeReactUsage, g as analyzePackageDependencies, h as analyzePackageDependencyDiff, i as graphToSerializablePackageTree, m as isSourceCodeFile, n as graphToSerializableTree, o as printDependencyTree, p as analyzeDependencies, r as diffGraphToSerializablePackageTree, s as printPackageDependencyDiffTree, t as graphToSerializableReactTree } from "./react-
|
|
2
|
+
import { a as printReactUsageTree, c as printPackageDependencyTree, f as analyzeReactUsage, g as analyzePackageDependencies, h as analyzePackageDependencyDiff, i as graphToSerializablePackageTree, m as isSourceCodeFile, n as graphToSerializableTree, o as printDependencyTree, p as analyzeDependencies, r as diffGraphToSerializablePackageTree, s as printPackageDependencyDiffTree, t as graphToSerializableReactTree } from "./react-CABHoyGj.mjs";
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
package/dist/index.d.mts
CHANGED
|
@@ -5,6 +5,8 @@ type PackageDependencyChangeKind = 'added' | 'removed' | 'changed' | 'unchanged'
|
|
|
5
5
|
interface PackageDependencyDiffState {
|
|
6
6
|
readonly target: string;
|
|
7
7
|
readonly specifier?: string;
|
|
8
|
+
readonly resolvedVersion?: string;
|
|
9
|
+
readonly peerContext?: string;
|
|
8
10
|
}
|
|
9
11
|
interface BasePackageDependencyDiffDependency {
|
|
10
12
|
readonly name: string;
|
|
@@ -14,6 +16,9 @@ interface BasePackageDependencyDiffDependency {
|
|
|
14
16
|
}
|
|
15
17
|
interface ExternalPackageDependencyDiff extends BasePackageDependencyDiffDependency {
|
|
16
18
|
readonly kind: 'external';
|
|
19
|
+
readonly specifierChanged: boolean;
|
|
20
|
+
readonly resolvedVersionChanged: boolean;
|
|
21
|
+
readonly peerContextChanged: boolean;
|
|
17
22
|
}
|
|
18
23
|
interface WorkspacePackageDependencyDiff extends BasePackageDependencyDiffDependency {
|
|
19
24
|
readonly kind: 'workspace';
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/package-dependency-change-kind.ts","../src/types/package-dependency-diff-dependency.ts","../src/types/package-dependency-diff-node.ts","../src/types/package-dependency-diff-graph.ts","../src/analyzers/deps/diff.ts","../src/types/package-manifest-dependency.ts","../src/types/package-dependency-node.ts","../src/types/package-dependency-graph.ts","../src/analyzers/deps/index.ts","../src/types/analyze-options.ts","../src/types/dependency-kind.ts","../src/types/reference-kind.ts","../src/types/dependency-edge.ts","../src/types/source-module-node.ts","../src/types/dependency-graph.ts","../src/analyzers/import/index.ts","../src/types/react-usage-location.ts","../src/types/react-usage-entry.ts","../src/types/react-symbol-kind.ts","../src/types/react-usage-edge-kind.ts","../src/types/react-usage-edge.ts","../src/types/react-usage-node.ts","../src/types/react-usage-graph.ts","../src/analyzers/react/index.ts","../src/types/react-usage-filter.ts","../src/analyzers/react/queries.ts","../src/types/color-mode.ts","../src/types/print-package-tree-options.ts","../src/output/ascii/deps.ts","../src/types/print-tree-options.ts","../src/output/ascii/import.ts","../src/types/print-react-tree-options.ts","../src/output/ascii/react.ts","../src/output/json/deps.ts","../src/output/json/import.ts","../src/output/json/react.ts"],"mappings":";KAAY,2BAAA;;;UCGK,0BAAA;EAAA,SACN,MAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAGD,mCAAA;EAAA,SACC,IAAA;EAAA,SACA,MAAA,EAAQ,2BAAA;EAAA,SACR,MAAA,GAAS,0BAAA;EAAA,SACT,KAAA,GAAQ,0BAAA;AAAA;AAAA,UAGF,6BAAA,SACP,mCAAA;EAAA,SACC,IAAA;AAAA;AAAA,UAGM,8BAAA,SACP,mCAAA;EAAA,SACC,IAAA;EAAA,SACA,IAAA,EAAM,yBAAA;AAAA;AAAA,KAGL,+BAAA,GACR,6BAAA,GACA,8BAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/package-dependency-change-kind.ts","../src/types/package-dependency-diff-dependency.ts","../src/types/package-dependency-diff-node.ts","../src/types/package-dependency-diff-graph.ts","../src/analyzers/deps/diff.ts","../src/types/package-manifest-dependency.ts","../src/types/package-dependency-node.ts","../src/types/package-dependency-graph.ts","../src/analyzers/deps/index.ts","../src/types/analyze-options.ts","../src/types/dependency-kind.ts","../src/types/reference-kind.ts","../src/types/dependency-edge.ts","../src/types/source-module-node.ts","../src/types/dependency-graph.ts","../src/analyzers/import/index.ts","../src/types/react-usage-location.ts","../src/types/react-usage-entry.ts","../src/types/react-symbol-kind.ts","../src/types/react-usage-edge-kind.ts","../src/types/react-usage-edge.ts","../src/types/react-usage-node.ts","../src/types/react-usage-graph.ts","../src/analyzers/react/index.ts","../src/types/react-usage-filter.ts","../src/analyzers/react/queries.ts","../src/types/color-mode.ts","../src/types/print-package-tree-options.ts","../src/output/ascii/deps.ts","../src/types/print-tree-options.ts","../src/output/ascii/import.ts","../src/types/print-react-tree-options.ts","../src/output/ascii/react.ts","../src/output/json/deps.ts","../src/output/json/import.ts","../src/output/json/react.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as printReactUsageTree, c as printPackageDependencyTree, d as getReactUsageRoots, f as analyzeReactUsage, g as analyzePackageDependencies, h as analyzePackageDependencyDiff, i as graphToSerializablePackageTree, l as getFilteredUsages, n as graphToSerializableTree, o as printDependencyTree, p as analyzeDependencies, r as diffGraphToSerializablePackageTree, s as printPackageDependencyDiffTree, t as graphToSerializableReactTree, u as getReactUsageEntries } from "./react-
|
|
1
|
+
import { a as printReactUsageTree, c as printPackageDependencyTree, d as getReactUsageRoots, f as analyzeReactUsage, g as analyzePackageDependencies, h as analyzePackageDependencyDiff, i as graphToSerializablePackageTree, l as getFilteredUsages, n as graphToSerializableTree, o as printDependencyTree, p as analyzeDependencies, r as diffGraphToSerializablePackageTree, s as printPackageDependencyDiffTree, t as graphToSerializableReactTree, u as getReactUsageEntries } from "./react-CABHoyGj.mjs";
|
|
2
2
|
export { analyzeDependencies, analyzePackageDependencies, analyzePackageDependencyDiff, analyzeReactUsage, diffGraphToSerializablePackageTree, getFilteredUsages, getReactUsageEntries, getReactUsageRoots, graphToSerializablePackageTree, graphToSerializableReactTree, graphToSerializableTree, printDependencyTree, printPackageDependencyDiffTree, printPackageDependencyTree, printReactUsageTree };
|
|
@@ -257,7 +257,111 @@ function isRecord(value) {
|
|
|
257
257
|
return typeof value === "object" && value !== null;
|
|
258
258
|
}
|
|
259
259
|
//#endregion
|
|
260
|
+
//#region src/analyzers/deps/pnpm-lock.ts
|
|
261
|
+
const PNPM_LOCKFILE$1 = "pnpm-lock.yaml";
|
|
262
|
+
const DEPENDENCY_SECTIONS = new Set(["dependencies", "optionalDependencies"]);
|
|
263
|
+
function loadPnpmLockImporterResolutions(repositoryRoot) {
|
|
264
|
+
const lockfilePath = path.join(repositoryRoot, PNPM_LOCKFILE$1);
|
|
265
|
+
if (!fs.existsSync(lockfilePath)) return;
|
|
266
|
+
return parsePnpmLockImporterResolutions(fs.readFileSync(lockfilePath, "utf8"));
|
|
267
|
+
}
|
|
268
|
+
function parsePnpmLockImporterResolutions(source) {
|
|
269
|
+
const importers = /* @__PURE__ */ new Map();
|
|
270
|
+
const lines = source.split(/\r?\n/u);
|
|
271
|
+
let inImporters = false;
|
|
272
|
+
let currentImporter;
|
|
273
|
+
let currentSection;
|
|
274
|
+
let currentDependencyName;
|
|
275
|
+
lines.forEach((line) => {
|
|
276
|
+
const trimmedLine = line.trim();
|
|
277
|
+
if (trimmedLine.length === 0 || trimmedLine.startsWith("#")) return;
|
|
278
|
+
const indentation = line.length - line.trimStart().length;
|
|
279
|
+
if (indentation === 0) {
|
|
280
|
+
if (trimmedLine === "importers:") {
|
|
281
|
+
inImporters = true;
|
|
282
|
+
currentImporter = void 0;
|
|
283
|
+
currentSection = void 0;
|
|
284
|
+
currentDependencyName = void 0;
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
inImporters = false;
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (!inImporters) return;
|
|
291
|
+
if (indentation === 2 && trimmedLine.endsWith(":")) {
|
|
292
|
+
currentImporter = parseYamlScalar(trimmedLine.slice(0, -1));
|
|
293
|
+
currentSection = void 0;
|
|
294
|
+
currentDependencyName = void 0;
|
|
295
|
+
if (!importers.has(currentImporter)) importers.set(currentImporter, /* @__PURE__ */ new Map());
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (currentImporter === void 0) return;
|
|
299
|
+
if (indentation === 4 && trimmedLine.endsWith(":")) {
|
|
300
|
+
const sectionName = parseYamlScalar(trimmedLine.slice(0, -1));
|
|
301
|
+
currentSection = DEPENDENCY_SECTIONS.has(sectionName) ? sectionName : void 0;
|
|
302
|
+
currentDependencyName = void 0;
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
if (currentSection === void 0) return;
|
|
306
|
+
if (indentation === 6) {
|
|
307
|
+
if (trimmedLine.endsWith(":")) {
|
|
308
|
+
currentDependencyName = parseYamlScalar(trimmedLine.slice(0, -1));
|
|
309
|
+
upsertDependency(importers, currentImporter, currentDependencyName, {});
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
const pair = splitYamlKeyValue(trimmedLine);
|
|
313
|
+
if (pair === void 0) return;
|
|
314
|
+
currentDependencyName = void 0;
|
|
315
|
+
upsertDependency(importers, currentImporter, parseYamlScalar(pair.key), { ...parsePnpmVersion(parseYamlScalar(pair.value)) });
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
if (indentation === 8 && currentDependencyName !== void 0) {
|
|
319
|
+
const pair = splitYamlKeyValue(trimmedLine);
|
|
320
|
+
if (pair === void 0) return;
|
|
321
|
+
if (pair.key === "specifier") {
|
|
322
|
+
upsertDependency(importers, currentImporter, currentDependencyName, { specifier: parseYamlScalar(pair.value) });
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
if (pair.key === "version") upsertDependency(importers, currentImporter, currentDependencyName, { ...parsePnpmVersion(parseYamlScalar(pair.value)) });
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
return importers;
|
|
329
|
+
}
|
|
330
|
+
function upsertDependency(importers, importerPath, dependencyName, nextValue) {
|
|
331
|
+
const importer = importers.get(importerPath);
|
|
332
|
+
if (importer === void 0) return;
|
|
333
|
+
importer.set(dependencyName, {
|
|
334
|
+
...importer.get(dependencyName),
|
|
335
|
+
...nextValue
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
function splitYamlKeyValue(line) {
|
|
339
|
+
const separatorIndex = line.indexOf(":");
|
|
340
|
+
if (separatorIndex <= 0) return;
|
|
341
|
+
return {
|
|
342
|
+
key: line.slice(0, separatorIndex).trim(),
|
|
343
|
+
value: line.slice(separatorIndex + 1).trim()
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
function parseYamlScalar(value) {
|
|
347
|
+
if (value.length >= 2) {
|
|
348
|
+
const firstCharacter = value[0];
|
|
349
|
+
const lastCharacter = value[value.length - 1];
|
|
350
|
+
if (firstCharacter === "\"" && lastCharacter === "\"" || firstCharacter === "'" && lastCharacter === "'") return value.slice(1, -1);
|
|
351
|
+
}
|
|
352
|
+
return value;
|
|
353
|
+
}
|
|
354
|
+
function parsePnpmVersion(value) {
|
|
355
|
+
const firstParenthesisIndex = value.indexOf("(");
|
|
356
|
+
if (firstParenthesisIndex < 0) return { version: value };
|
|
357
|
+
return {
|
|
358
|
+
version: value.slice(0, firstParenthesisIndex),
|
|
359
|
+
peerSuffix: value.slice(firstParenthesisIndex)
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
//#endregion
|
|
260
363
|
//#region src/analyzers/deps/diff.ts
|
|
364
|
+
const PNPM_LOCKFILE = "pnpm-lock.yaml";
|
|
261
365
|
const PNPM_WORKSPACE_FILE = "pnpm-workspace.yaml";
|
|
262
366
|
function analyzePackageDependencyDiff(directory, diff) {
|
|
263
367
|
const resolvedInputPath = path.resolve(process.cwd(), directory);
|
|
@@ -398,7 +502,7 @@ function ensureSnapshotDirectory(snapshotRoot, filePath) {
|
|
|
398
502
|
}
|
|
399
503
|
function isManifestSnapshotFile(filePath) {
|
|
400
504
|
const fileName = path.posix.basename(filePath);
|
|
401
|
-
return fileName === "package.json" || fileName === PNPM_WORKSPACE_FILE;
|
|
505
|
+
return fileName === "package.json" || fileName === PNPM_LOCKFILE || fileName === PNPM_WORKSPACE_FILE;
|
|
402
506
|
}
|
|
403
507
|
function resolveSnapshotInputPath(snapshotRoot, inputPathWithinRepository) {
|
|
404
508
|
if (inputPathWithinRepository === "") return snapshotRoot;
|
|
@@ -414,12 +518,14 @@ function tryAnalyzePackageGraph(inputPath) {
|
|
|
414
518
|
}
|
|
415
519
|
}
|
|
416
520
|
function toComparableGraph(graph) {
|
|
521
|
+
const pnpmLockResolutions = loadPnpmLockImporterResolutions(graph.repositoryRoot);
|
|
417
522
|
const nodes = /* @__PURE__ */ new Map();
|
|
418
523
|
graph.nodes.forEach((node, packageDir) => {
|
|
419
524
|
const packagePath = toDisplayPath(packageDir, graph.repositoryRoot);
|
|
525
|
+
const packageLockResolutions = pnpmLockResolutions?.get(packagePath);
|
|
420
526
|
const dependenciesByKey = /* @__PURE__ */ new Map();
|
|
421
527
|
node.dependencies.forEach((dependency) => {
|
|
422
|
-
dependenciesByKey.set(createDependencyKey(dependency), toComparableDependency(dependency, graph.repositoryRoot));
|
|
528
|
+
dependenciesByKey.set(createDependencyKey(dependency), toComparableDependency(dependency, graph.repositoryRoot, packageLockResolutions?.get(dependency.name)));
|
|
423
529
|
});
|
|
424
530
|
nodes.set(packagePath, {
|
|
425
531
|
path: packagePath,
|
|
@@ -435,13 +541,19 @@ function toComparableGraph(graph) {
|
|
|
435
541
|
function createDependencyKey(dependency) {
|
|
436
542
|
return `${dependency.kind}:${dependency.name}`;
|
|
437
543
|
}
|
|
438
|
-
function toComparableDependency(dependency, repositoryRoot) {
|
|
439
|
-
if (dependency.kind === "external")
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
544
|
+
function toComparableDependency(dependency, repositoryRoot, lockResolution) {
|
|
545
|
+
if (dependency.kind === "external") {
|
|
546
|
+
const resolvedVersion = resolveResolvedVersion(lockResolution);
|
|
547
|
+
const peerContext = resolvePeerContext(lockResolution);
|
|
548
|
+
return {
|
|
549
|
+
kind: "external",
|
|
550
|
+
key: createDependencyKey(dependency),
|
|
551
|
+
name: dependency.name,
|
|
552
|
+
specifier: dependency.specifier,
|
|
553
|
+
...resolvedVersion === void 0 ? {} : { resolvedVersion },
|
|
554
|
+
...peerContext === void 0 ? {} : { peerContext }
|
|
555
|
+
};
|
|
556
|
+
}
|
|
445
557
|
return {
|
|
446
558
|
kind: "workspace",
|
|
447
559
|
key: createDependencyKey(dependency),
|
|
@@ -450,6 +562,16 @@ function toComparableDependency(dependency, repositoryRoot) {
|
|
|
450
562
|
targetPath: toDisplayPath(dependency.target, repositoryRoot)
|
|
451
563
|
};
|
|
452
564
|
}
|
|
565
|
+
function resolveResolvedVersion(lockResolution) {
|
|
566
|
+
if (lockResolution === void 0) return;
|
|
567
|
+
const version = lockResolution.version?.trim();
|
|
568
|
+
if (version === void 0 || version.length === 0 || version.startsWith("link:") || version.startsWith("file:") || version.startsWith("workspace:")) return;
|
|
569
|
+
return version;
|
|
570
|
+
}
|
|
571
|
+
function resolvePeerContext(lockResolution) {
|
|
572
|
+
const peerSuffix = lockResolution?.peerSuffix?.trim();
|
|
573
|
+
return peerSuffix === void 0 || peerSuffix.length === 0 ? void 0 : peerSuffix;
|
|
574
|
+
}
|
|
453
575
|
function diffPackageNode(location, beforeGraph, afterGraph, changedPackagePaths, ancestry) {
|
|
454
576
|
const nodeKey = `${location.beforePath ?? ""}->${location.afterPath ?? ""}`;
|
|
455
577
|
const beforeNode = location.beforePath === void 0 ? void 0 : beforeGraph?.nodes.get(location.beforePath);
|
|
@@ -525,23 +647,37 @@ function diffDependency(beforeDependency, afterDependency, beforeGraph, afterGra
|
|
|
525
647
|
kind: "external",
|
|
526
648
|
name: dependency.name,
|
|
527
649
|
change,
|
|
650
|
+
specifierChanged: didExternalSpecifierChange(beforeDependency, afterDependency),
|
|
651
|
+
resolvedVersionChanged: didExternalResolvedVersionChange(beforeDependency, afterDependency),
|
|
652
|
+
peerContextChanged: didExternalPeerContextChange(beforeDependency, afterDependency),
|
|
528
653
|
...beforeDependency === void 0 ? {} : { before: toDiffState(beforeDependency) },
|
|
529
654
|
...afterDependency === void 0 ? {} : { after: toDiffState(afterDependency) }
|
|
530
655
|
};
|
|
531
656
|
}
|
|
657
|
+
function didExternalSpecifierChange(beforeDependency, afterDependency) {
|
|
658
|
+
return beforeDependency?.kind === "external" && afterDependency?.kind === "external" && beforeDependency.specifier !== afterDependency.specifier;
|
|
659
|
+
}
|
|
660
|
+
function didExternalResolvedVersionChange(beforeDependency, afterDependency) {
|
|
661
|
+
return beforeDependency?.kind === "external" && afterDependency?.kind === "external" && beforeDependency.resolvedVersion !== afterDependency.resolvedVersion;
|
|
662
|
+
}
|
|
663
|
+
function didExternalPeerContextChange(beforeDependency, afterDependency) {
|
|
664
|
+
return beforeDependency?.kind === "external" && afterDependency?.kind === "external" && beforeDependency.peerContext !== afterDependency.peerContext;
|
|
665
|
+
}
|
|
532
666
|
function resolveDependencyChange(beforeDependency, afterDependency) {
|
|
533
667
|
if (beforeDependency === void 0 && afterDependency !== void 0) return "added";
|
|
534
668
|
if (beforeDependency !== void 0 && afterDependency === void 0) return "removed";
|
|
535
669
|
if (beforeDependency === void 0 || afterDependency === void 0) return "unchanged";
|
|
536
670
|
if (beforeDependency.kind !== afterDependency.kind) return "changed";
|
|
537
|
-
if (beforeDependency.kind === "external" && afterDependency.kind === "external") return beforeDependency.specifier === afterDependency.specifier ? "unchanged" : "changed";
|
|
671
|
+
if (beforeDependency.kind === "external" && afterDependency.kind === "external") return beforeDependency.specifier === afterDependency.specifier && beforeDependency.resolvedVersion === afterDependency.resolvedVersion && beforeDependency.peerContext === afterDependency.peerContext ? "unchanged" : "changed";
|
|
538
672
|
if (beforeDependency.kind === "workspace" && afterDependency.kind === "workspace") return beforeDependency.specifier === afterDependency.specifier && beforeDependency.targetPath === afterDependency.targetPath ? "unchanged" : "changed";
|
|
539
673
|
return "changed";
|
|
540
674
|
}
|
|
541
675
|
function toDiffState(dependency) {
|
|
542
676
|
if (dependency.kind === "external") return {
|
|
543
677
|
target: `${dependency.name}@${dependency.specifier}`,
|
|
544
|
-
specifier: dependency.specifier
|
|
678
|
+
specifier: dependency.specifier,
|
|
679
|
+
...dependency.resolvedVersion === void 0 ? {} : { resolvedVersion: dependency.resolvedVersion },
|
|
680
|
+
...dependency.peerContext === void 0 ? {} : { peerContext: dependency.peerContext }
|
|
545
681
|
};
|
|
546
682
|
return dependency.specifier === void 0 ? { target: dependency.targetPath } : {
|
|
547
683
|
target: dependency.targetPath,
|
|
@@ -1979,9 +2115,16 @@ function formatDiffDependencyLabel(dependency) {
|
|
|
1979
2115
|
return formatWorkspaceDiffLabel(dependency);
|
|
1980
2116
|
}
|
|
1981
2117
|
function formatExternalDiffLabel(dependency) {
|
|
2118
|
+
const beforeResolution = dependency.before?.resolvedVersion;
|
|
2119
|
+
const afterResolution = dependency.after?.resolvedVersion;
|
|
1982
2120
|
if (dependency.change !== "changed") return dependency.after?.target ?? dependency.before?.target ?? dependency.name;
|
|
1983
2121
|
const previousSpecifier = dependency.before?.specifier ?? "none";
|
|
1984
2122
|
const nextSpecifier = dependency.after?.specifier ?? "none";
|
|
2123
|
+
if (dependency.resolvedVersionChanged) {
|
|
2124
|
+
const resolutionLabel = formatVersionChange(beforeResolution, afterResolution);
|
|
2125
|
+
return previousSpecifier === nextSpecifier ? `${dependency.name}@${nextSpecifier} (${resolutionLabel})` : `${dependency.name}@${previousSpecifier} -> ${nextSpecifier} (${resolutionLabel})`;
|
|
2126
|
+
}
|
|
2127
|
+
if (previousSpecifier === nextSpecifier) return `${dependency.name}@${nextSpecifier}`;
|
|
1985
2128
|
return `${dependency.name}@${previousSpecifier} -> ${nextSpecifier}`;
|
|
1986
2129
|
}
|
|
1987
2130
|
function formatWorkspaceDiffLabel(dependency) {
|
|
@@ -2005,6 +2148,9 @@ function formatWorkspaceState(state, fallbackTarget) {
|
|
|
2005
2148
|
if (state?.specifier === void 0) return target;
|
|
2006
2149
|
return `${target} (${state.specifier})`;
|
|
2007
2150
|
}
|
|
2151
|
+
function formatVersionChange(beforeResolvedVersion, afterResolvedVersion) {
|
|
2152
|
+
return `${beforeResolvedVersion ?? "none"} -> ${afterResolvedVersion ?? "none"}`;
|
|
2153
|
+
}
|
|
2008
2154
|
function toMarker(change) {
|
|
2009
2155
|
if (change === "added") return "+";
|
|
2010
2156
|
if (change === "removed") return "-";
|
|
@@ -2023,28 +2169,31 @@ function printDependencyTree(graph, options = {}) {
|
|
|
2023
2169
|
const omitUnused = options.omitUnused ?? false;
|
|
2024
2170
|
const rootLines = [toDisplayPath(graph.entryId, cwd)];
|
|
2025
2171
|
const visited = new Set([graph.entryId]);
|
|
2172
|
+
const expanded = new Set([graph.entryId]);
|
|
2026
2173
|
const entryNode = graph.nodes.get(graph.entryId);
|
|
2027
2174
|
if (entryNode === void 0) return rootLines.join("\n");
|
|
2028
2175
|
const rootDependencies = filterDependencies(entryNode.dependencies, includeExternals, omitUnused);
|
|
2029
2176
|
rootDependencies.forEach((dependency, index) => {
|
|
2030
|
-
rootLines.push(...renderDependency(dependency, graph, visited, "", index === rootDependencies.length - 1, includeExternals, omitUnused, color, cwd));
|
|
2177
|
+
rootLines.push(...renderDependency(dependency, graph, visited, expanded, "", index === rootDependencies.length - 1, includeExternals, omitUnused, color, cwd));
|
|
2031
2178
|
});
|
|
2032
2179
|
return rootLines.join("\n");
|
|
2033
2180
|
}
|
|
2034
|
-
function renderDependency(dependency, graph, visited, prefix, isLast, includeExternals, omitUnused, color, cwd) {
|
|
2181
|
+
function renderDependency(dependency, graph, visited, expanded, prefix, isLast, includeExternals, omitUnused, color, cwd) {
|
|
2035
2182
|
const branch = `${prefix}${isLast ? "└─ " : "├─ "}`;
|
|
2036
2183
|
const label = formatDependencyLabel(dependency, cwd, color);
|
|
2037
2184
|
if (dependency.kind !== "source") return [`${branch}${label}`];
|
|
2038
2185
|
if (visited.has(dependency.target)) return [`${branch}${label} (circular)`];
|
|
2039
2186
|
const childNode = graph.nodes.get(dependency.target);
|
|
2040
2187
|
if (childNode === void 0) return [`${branch}${label}`];
|
|
2188
|
+
if (expanded.has(dependency.target)) return [`${branch}${label} (shared)`];
|
|
2041
2189
|
const nextPrefix = `${prefix}${isLast ? " " : "│ "}`;
|
|
2042
2190
|
const nextVisited = new Set(visited);
|
|
2043
2191
|
nextVisited.add(dependency.target);
|
|
2192
|
+
expanded.add(dependency.target);
|
|
2044
2193
|
const childLines = [`${branch}${label}`];
|
|
2045
2194
|
const childDependencies = filterDependencies(childNode.dependencies, includeExternals, omitUnused);
|
|
2046
2195
|
childDependencies.forEach((childDependency, index) => {
|
|
2047
|
-
childLines.push(...renderDependency(childDependency, graph, nextVisited, nextPrefix, index === childDependencies.length - 1, includeExternals, omitUnused, color, cwd));
|
|
2196
|
+
childLines.push(...renderDependency(childDependency, graph, nextVisited, expanded, nextPrefix, index === childDependencies.length - 1, includeExternals, omitUnused, color, cwd));
|
|
2048
2197
|
});
|
|
2049
2198
|
return childLines;
|
|
2050
2199
|
}
|
|
@@ -2199,13 +2348,22 @@ function serializePackageDiffDependency(dependency) {
|
|
|
2199
2348
|
kind: dependency.kind,
|
|
2200
2349
|
name: dependency.name,
|
|
2201
2350
|
change: dependency.change,
|
|
2351
|
+
...dependency.kind === "external" ? {
|
|
2352
|
+
specifierChanged: dependency.specifierChanged,
|
|
2353
|
+
resolvedVersionChanged: dependency.resolvedVersionChanged,
|
|
2354
|
+
peerContextChanged: dependency.peerContextChanged
|
|
2355
|
+
} : {},
|
|
2202
2356
|
...dependency.before === void 0 ? {} : {
|
|
2203
2357
|
beforeTarget: dependency.before.target,
|
|
2204
|
-
...dependency.before.specifier === void 0 ? {} : { beforeSpecifier: dependency.before.specifier }
|
|
2358
|
+
...dependency.before.specifier === void 0 ? {} : { beforeSpecifier: dependency.before.specifier },
|
|
2359
|
+
...dependency.before.resolvedVersion === void 0 ? {} : { beforeResolvedVersion: dependency.before.resolvedVersion },
|
|
2360
|
+
...dependency.before.peerContext === void 0 ? {} : { beforePeerContext: dependency.before.peerContext }
|
|
2205
2361
|
},
|
|
2206
2362
|
...dependency.after === void 0 ? {} : {
|
|
2207
2363
|
afterTarget: dependency.after.target,
|
|
2208
|
-
...dependency.after.specifier === void 0 ? {} : { afterSpecifier: dependency.after.specifier }
|
|
2364
|
+
...dependency.after.specifier === void 0 ? {} : { afterSpecifier: dependency.after.specifier },
|
|
2365
|
+
...dependency.after.resolvedVersion === void 0 ? {} : { afterResolvedVersion: dependency.after.resolvedVersion },
|
|
2366
|
+
...dependency.after.peerContext === void 0 ? {} : { afterPeerContext: dependency.after.peerContext }
|
|
2209
2367
|
},
|
|
2210
2368
|
...dependency.before === void 0 ? {} : { before: dependency.before },
|
|
2211
2369
|
...dependency.after === void 0 ? {} : { after: dependency.after },
|
|
@@ -2216,10 +2374,9 @@ function serializePackageDiffDependency(dependency) {
|
|
|
2216
2374
|
//#endregion
|
|
2217
2375
|
//#region src/output/json/import.ts
|
|
2218
2376
|
function graphToSerializableTree(graph, options = {}) {
|
|
2219
|
-
|
|
2220
|
-
return serializeNode(graph.entryId, graph, visited, options.omitUnused ?? false);
|
|
2377
|
+
return serializeNode(graph.entryId, graph, /* @__PURE__ */ new Set(), /* @__PURE__ */ new Set(), options.omitUnused ?? false);
|
|
2221
2378
|
}
|
|
2222
|
-
function serializeNode(filePath, graph, visited, omitUnused) {
|
|
2379
|
+
function serializeNode(filePath, graph, visited, expanded, omitUnused) {
|
|
2223
2380
|
const node = graph.nodes.get(filePath);
|
|
2224
2381
|
const displayPath = toDisplayPath(filePath, graph.cwd);
|
|
2225
2382
|
if (node === void 0) return {
|
|
@@ -2232,7 +2389,14 @@ function serializeNode(filePath, graph, visited, omitUnused) {
|
|
|
2232
2389
|
kind: "circular",
|
|
2233
2390
|
dependencies: []
|
|
2234
2391
|
};
|
|
2235
|
-
|
|
2392
|
+
if (expanded.has(filePath)) return {
|
|
2393
|
+
path: displayPath,
|
|
2394
|
+
kind: "shared",
|
|
2395
|
+
dependencies: []
|
|
2396
|
+
};
|
|
2397
|
+
const nextVisited = new Set(visited);
|
|
2398
|
+
nextVisited.add(filePath);
|
|
2399
|
+
expanded.add(filePath);
|
|
2236
2400
|
const dependencies = node.dependencies.filter((dependency) => !omitUnused || !dependency.unused).map((dependency) => {
|
|
2237
2401
|
if (dependency.kind !== "source") return {
|
|
2238
2402
|
specifier: dependency.specifier,
|
|
@@ -2250,7 +2414,7 @@ function serializeNode(filePath, graph, visited, omitUnused) {
|
|
|
2250
2414
|
unused: dependency.unused,
|
|
2251
2415
|
kind: dependency.kind,
|
|
2252
2416
|
target: toDisplayPath(dependency.target, graph.cwd),
|
|
2253
|
-
node: serializeNode(dependency.target, graph,
|
|
2417
|
+
node: serializeNode(dependency.target, graph, nextVisited, expanded, omitUnused)
|
|
2254
2418
|
};
|
|
2255
2419
|
});
|
|
2256
2420
|
return {
|
|
@@ -2326,4 +2490,4 @@ function formatReactNodeFilePath(filePath, kind, cwd) {
|
|
|
2326
2490
|
//#endregion
|
|
2327
2491
|
export { printReactUsageTree as a, printPackageDependencyTree as c, getReactUsageRoots as d, analyzeReactUsage as f, analyzePackageDependencies as g, analyzePackageDependencyDiff as h, graphToSerializablePackageTree as i, getFilteredUsages as l, isSourceCodeFile as m, graphToSerializableTree as n, printDependencyTree as o, analyzeDependencies as p, diffGraphToSerializablePackageTree as r, printPackageDependencyDiffTree as s, graphToSerializableReactTree as t, getReactUsageEntries as u };
|
|
2328
2492
|
|
|
2329
|
-
//# sourceMappingURL=react-
|
|
2493
|
+
//# sourceMappingURL=react-CABHoyGj.mjs.map
|