foresthouse 1.0.0-dev.20 → 1.0.0-dev.21

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-DWxB8qZ6.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-DWxB8qZ6.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 "-";
@@ -2199,13 +2345,22 @@ function serializePackageDiffDependency(dependency) {
2199
2345
  kind: dependency.kind,
2200
2346
  name: dependency.name,
2201
2347
  change: dependency.change,
2348
+ ...dependency.kind === "external" ? {
2349
+ specifierChanged: dependency.specifierChanged,
2350
+ resolvedVersionChanged: dependency.resolvedVersionChanged,
2351
+ peerContextChanged: dependency.peerContextChanged
2352
+ } : {},
2202
2353
  ...dependency.before === void 0 ? {} : {
2203
2354
  beforeTarget: dependency.before.target,
2204
- ...dependency.before.specifier === void 0 ? {} : { beforeSpecifier: dependency.before.specifier }
2355
+ ...dependency.before.specifier === void 0 ? {} : { beforeSpecifier: dependency.before.specifier },
2356
+ ...dependency.before.resolvedVersion === void 0 ? {} : { beforeResolvedVersion: dependency.before.resolvedVersion },
2357
+ ...dependency.before.peerContext === void 0 ? {} : { beforePeerContext: dependency.before.peerContext }
2205
2358
  },
2206
2359
  ...dependency.after === void 0 ? {} : {
2207
2360
  afterTarget: dependency.after.target,
2208
- ...dependency.after.specifier === void 0 ? {} : { afterSpecifier: dependency.after.specifier }
2361
+ ...dependency.after.specifier === void 0 ? {} : { afterSpecifier: dependency.after.specifier },
2362
+ ...dependency.after.resolvedVersion === void 0 ? {} : { afterResolvedVersion: dependency.after.resolvedVersion },
2363
+ ...dependency.after.peerContext === void 0 ? {} : { afterPeerContext: dependency.after.peerContext }
2209
2364
  },
2210
2365
  ...dependency.before === void 0 ? {} : { before: dependency.before },
2211
2366
  ...dependency.after === void 0 ? {} : { after: dependency.after },
@@ -2326,4 +2481,4 @@ function formatReactNodeFilePath(filePath, kind, cwd) {
2326
2481
  //#endregion
2327
2482
  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
2483
 
2329
- //# sourceMappingURL=react-CAx-td8K.mjs.map
2484
+ //# sourceMappingURL=react-DWxB8qZ6.mjs.map