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-CAx-td8K.mjs";
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';
@@ -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":"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"}
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-CAx-td8K.mjs";
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") return {
440
- kind: "external",
441
- key: createDependencyKey(dependency),
442
- name: dependency.name,
443
- specifier: dependency.specifier
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
- const visited = /* @__PURE__ */ new Set();
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
- visited.add(filePath);
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, new Set(visited), omitUnused)
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-CAx-td8K.mjs.map
2493
+ //# sourceMappingURL=react-CABHoyGj.mjs.map