foresthouse 1.0.0 → 1.0.1-dev.2

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-Fqrly1Yw.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-DxWukhfX.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
@@ -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-Fqrly1Yw.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-DxWukhfX.mjs";
2
2
  export { analyzeDependencies, analyzePackageDependencies, analyzePackageDependencyDiff, analyzeReactUsage, diffGraphToSerializablePackageTree, getFilteredUsages, getReactUsageEntries, getReactUsageRoots, graphToSerializablePackageTree, graphToSerializableReactTree, graphToSerializableTree, printDependencyTree, printPackageDependencyDiffTree, printPackageDependencyTree, printReactUsageTree };
@@ -1066,8 +1066,8 @@ function isInsideNodeModules(filePath) {
1066
1066
  }
1067
1067
  //#endregion
1068
1068
  //#region src/analyzers/import/graph.ts
1069
- function buildDependencyGraph(entryPath, options) {
1070
- return new DependencyGraphBuilder(entryPath, options).build();
1069
+ function buildDependencyGraph(entryConfigs, options) {
1070
+ return new DependencyGraphBuilder(entryConfigs, options).build();
1071
1071
  }
1072
1072
  var DependencyGraphBuilder = class {
1073
1073
  nodes = /* @__PURE__ */ new Map();
@@ -1075,20 +1075,23 @@ var DependencyGraphBuilder = class {
1075
1075
  programCache = /* @__PURE__ */ new Map();
1076
1076
  checkerCache = /* @__PURE__ */ new Map();
1077
1077
  resolverCache = /* @__PURE__ */ new Map();
1078
- constructor(entryPath, options) {
1079
- this.entryPath = entryPath;
1078
+ constructor(entryConfigs, options) {
1079
+ this.entryConfigs = entryConfigs;
1080
1080
  this.options = options;
1081
- const entryConfig = {
1082
- compilerOptions: options.entryCompilerOptions,
1083
- ...options.entryConfigPath === void 0 ? {} : { path: options.entryConfigPath }
1084
- };
1085
- this.configCache.set(path.dirname(this.entryPath), entryConfig);
1081
+ entryConfigs.forEach((entryConfig) => {
1082
+ this.configCache.set(path.dirname(entryConfig.entryPath), {
1083
+ compilerOptions: entryConfig.compilerOptions,
1084
+ ...entryConfig.configPath === void 0 ? {} : { path: entryConfig.configPath }
1085
+ });
1086
+ });
1086
1087
  }
1087
1088
  build() {
1088
- this.visitFile(this.entryPath);
1089
+ this.entryConfigs.forEach((entryConfig) => {
1090
+ this.visitFile(entryConfig.entryPath, entryConfig.configPath);
1091
+ });
1089
1092
  return this.nodes;
1090
1093
  }
1091
- visitFile(filePath) {
1094
+ visitFile(filePath, entryConfigPath) {
1092
1095
  const normalizedPath = normalizeFilePath(filePath);
1093
1096
  if (this.nodes.has(normalizedPath)) return;
1094
1097
  const config = this.getConfigForFile(normalizedPath);
@@ -1100,13 +1103,13 @@ var DependencyGraphBuilder = class {
1100
1103
  projectOnly: this.options.projectOnly,
1101
1104
  getConfigForFile: (targetPath) => this.getConfigForFile(targetPath),
1102
1105
  getResolverForFile: (targetPath) => this.getResolverForFile(targetPath),
1103
- ...this.options.entryConfigPath === void 0 ? {} : { entryConfigPath: this.options.entryConfigPath }
1106
+ ...entryConfigPath === void 0 ? {} : { entryConfigPath }
1104
1107
  }));
1105
1108
  this.nodes.set(normalizedPath, {
1106
1109
  id: normalizedPath,
1107
1110
  dependencies
1108
1111
  });
1109
- for (const dependency of dependencies) if (dependency.kind === "source") this.visitFile(dependency.target);
1112
+ for (const dependency of dependencies) if (dependency.kind === "source") this.visitFile(dependency.target, entryConfigPath);
1110
1113
  }
1111
1114
  getConfigForFile(filePath) {
1112
1115
  const directory = path.dirname(filePath);
@@ -1173,32 +1176,69 @@ var DependencyGraphBuilder = class {
1173
1176
  //#endregion
1174
1177
  //#region src/analyzers/import/index.ts
1175
1178
  function analyzeDependencies(entryFile, options = {}) {
1176
- return new ImportAnalyzer(entryFile, options).analyze();
1179
+ const graph = analyzeDependenciesForEntries([entryFile], options);
1180
+ return {
1181
+ cwd: graph.cwd,
1182
+ entryId: graph.entryId,
1183
+ nodes: graph.nodes,
1184
+ ...graph.configPath === void 0 ? {} : { configPath: graph.configPath }
1185
+ };
1186
+ }
1187
+ function analyzeDependenciesForEntries(entryFiles, options = {}) {
1188
+ return new MultiEntryImportAnalyzer(entryFiles, options).analyze();
1177
1189
  }
1178
- var ImportAnalyzer = class extends BaseAnalyzer {
1190
+ var MultiEntryImportAnalyzer = class extends BaseAnalyzer {
1179
1191
  cwd;
1180
- entryPath;
1181
- constructor(entryFile, options) {
1182
- super(entryFile, options);
1192
+ entryPaths;
1193
+ constructor(entryFiles, options) {
1194
+ const [firstEntryFile] = entryFiles;
1195
+ if (firstEntryFile === void 0) throw new Error("At least one entry file is required.");
1196
+ super(firstEntryFile, options);
1183
1197
  this.cwd = path.resolve(options.cwd ?? process.cwd());
1184
- this.entryPath = resolveExistingPath(this.cwd, entryFile);
1198
+ this.entryPaths = [...new Set(entryFiles)].map((entryFile) => resolveExistingPath(this.cwd, entryFile));
1185
1199
  }
1186
1200
  doAnalyze() {
1187
- const { compilerOptions, path: configPath } = loadCompilerOptions(path.dirname(this.entryPath), this.options.configPath);
1188
- const nodes = buildDependencyGraph(this.entryPath, {
1201
+ const entryConfigs = this.resolveEntryConfigs();
1202
+ const nodes = buildDependencyGraph(entryConfigs, {
1189
1203
  cwd: this.cwd,
1190
- entryCompilerOptions: compilerOptions,
1191
1204
  expandWorkspaces: this.options.expandWorkspaces ?? true,
1192
- projectOnly: this.options.projectOnly ?? false,
1193
- ...configPath === void 0 ? {} : { entryConfigPath: configPath }
1205
+ projectOnly: this.options.projectOnly ?? false
1194
1206
  });
1207
+ const uniqueConfigPaths = [...new Set(entryConfigs.map((entry) => entry.configPath))];
1208
+ const configPath = uniqueConfigPaths.length === 1 ? uniqueConfigPaths[0] : void 0;
1209
+ const [firstEntryPath] = this.entryPaths;
1210
+ if (firstEntryPath === void 0) throw new Error("At least one entry file is required.");
1195
1211
  return {
1196
1212
  cwd: this.cwd,
1197
- entryId: this.entryPath,
1213
+ entryId: firstEntryPath,
1214
+ entryIds: this.entryPaths,
1198
1215
  nodes,
1199
1216
  ...configPath === void 0 ? {} : { configPath }
1200
1217
  };
1201
1218
  }
1219
+ resolveEntryConfigs() {
1220
+ const configCache = /* @__PURE__ */ new Map();
1221
+ return this.entryPaths.map((entryPath) => {
1222
+ const directory = path.dirname(entryPath);
1223
+ const cached = configCache.get(directory);
1224
+ if (cached !== void 0) return {
1225
+ entryPath,
1226
+ compilerOptions: cached.compilerOptions,
1227
+ ...cached.configPath === void 0 ? {} : { configPath: cached.configPath }
1228
+ };
1229
+ const loaded = loadCompilerOptions(directory, this.options.configPath);
1230
+ const resolved = {
1231
+ compilerOptions: loaded.compilerOptions,
1232
+ ...loaded.path === void 0 ? {} : { configPath: loaded.path }
1233
+ };
1234
+ configCache.set(directory, resolved);
1235
+ return {
1236
+ entryPath,
1237
+ compilerOptions: resolved.compilerOptions,
1238
+ ...resolved.configPath === void 0 ? {} : { configPath: resolved.configPath }
1239
+ };
1240
+ });
1241
+ }
1202
1242
  };
1203
1243
  //#endregion
1204
1244
  //#region src/analyzers/react/bindings.ts
@@ -1459,6 +1499,7 @@ function unwrapExpression(expression) {
1459
1499
  }
1460
1500
  //#endregion
1461
1501
  //#region src/analyzers/react/entries.ts
1502
+ const lineStartOffsetsCache = /* @__PURE__ */ new Map();
1462
1503
  function collectEntryUsages(program, filePath, sourceText, includeBuiltins) {
1463
1504
  const entries = /* @__PURE__ */ new Map();
1464
1505
  program.body.forEach((statement) => {
@@ -1525,24 +1566,43 @@ function createReactUsageLocation(filePath, sourceText, offset) {
1525
1566
  };
1526
1567
  }
1527
1568
  function offsetToLineAndColumn(sourceText, offset) {
1528
- let line = 1;
1529
- let column = 1;
1530
- for (let index = 0; index < offset && index < sourceText.length; index += 1) {
1531
- if (sourceText[index] === "\n") {
1532
- line += 1;
1533
- column = 1;
1534
- continue;
1535
- }
1536
- column += 1;
1537
- }
1569
+ const lineStartOffsets = getLineStartOffsets(sourceText);
1570
+ const boundedOffset = Math.max(0, Math.min(offset, sourceText.length));
1571
+ const lineIndex = findLineIndex(lineStartOffsets, boundedOffset);
1572
+ const lineStartOffset = lineStartOffsets[lineIndex] ?? 0;
1538
1573
  return {
1539
- line,
1540
- column
1574
+ line: lineIndex + 1,
1575
+ column: boundedOffset - lineStartOffset + 1
1541
1576
  };
1542
1577
  }
1543
1578
  function comparePendingReactUsageEntries(left, right) {
1544
1579
  return left.location.filePath.localeCompare(right.location.filePath) || left.location.line - right.location.line || left.location.column - right.location.column || left.kind.localeCompare(right.kind) || left.referenceName.localeCompare(right.referenceName);
1545
1580
  }
1581
+ function getLineStartOffsets(sourceText) {
1582
+ const cached = lineStartOffsetsCache.get(sourceText);
1583
+ if (cached !== void 0) return cached;
1584
+ const lineStartOffsets = [0];
1585
+ for (let index = 0; index < sourceText.length; index += 1) if (sourceText[index] === "\n") lineStartOffsets.push(index + 1);
1586
+ lineStartOffsetsCache.set(sourceText, lineStartOffsets);
1587
+ return lineStartOffsets;
1588
+ }
1589
+ function findLineIndex(lineStartOffsets, offset) {
1590
+ let lowerBound = 0;
1591
+ let upperBound = lineStartOffsets.length - 1;
1592
+ while (lowerBound <= upperBound) {
1593
+ const middleIndex = Math.floor((lowerBound + upperBound) / 2);
1594
+ const middleOffset = lineStartOffsets[middleIndex];
1595
+ const nextOffset = lineStartOffsets[middleIndex + 1];
1596
+ if (middleOffset === void 0) return 0;
1597
+ if (offset < middleOffset) {
1598
+ upperBound = middleIndex - 1;
1599
+ continue;
1600
+ }
1601
+ if (nextOffset === void 0 || offset < nextOffset) return middleIndex;
1602
+ lowerBound = middleIndex + 1;
1603
+ }
1604
+ return Math.max(0, lineStartOffsets.length - 1);
1605
+ }
1546
1606
  //#endregion
1547
1607
  //#region src/analyzers/react/symbols.ts
1548
1608
  function collectTopLevelReactSymbols(statement, filePath, symbolsByName) {
@@ -1834,9 +1894,7 @@ var ReactAnalyzer = class extends BaseAnalyzer {
1834
1894
  this.entryFiles = entryFiles;
1835
1895
  }
1836
1896
  doAnalyze() {
1837
- const dependencyGraphs = this.entryFiles.map((entryFile) => analyzeDependencies(entryFile, this.options));
1838
- const dependencyGraph = mergeDependencyGraphs(dependencyGraphs);
1839
- const entryIds = dependencyGraphs.map((graph) => graph.entryId);
1897
+ const dependencyGraph = analyzeDependenciesForEntries(this.entryFiles, this.options);
1840
1898
  const fileAnalyses = this.collectFileAnalyses(dependencyGraph);
1841
1899
  const nodes = this.createNodes(fileAnalyses);
1842
1900
  this.attachUsages(fileAnalyses, nodes);
@@ -1844,7 +1902,7 @@ var ReactAnalyzer = class extends BaseAnalyzer {
1844
1902
  return {
1845
1903
  cwd: dependencyGraph.cwd,
1846
1904
  entryId: dependencyGraph.entryId,
1847
- entryIds,
1905
+ entryIds: dependencyGraph.entryIds,
1848
1906
  nodes,
1849
1907
  entries
1850
1908
  };
@@ -1939,21 +1997,6 @@ function normalizeEntryFiles(entryFile) {
1939
1997
  if (dedupedEntryFiles.length === 0) throw new Error("At least one React entry file is required.");
1940
1998
  return dedupedEntryFiles;
1941
1999
  }
1942
- function mergeDependencyGraphs(graphs) {
1943
- const firstGraph = graphs[0];
1944
- if (firstGraph === void 0) throw new Error("At least one dependency graph is required.");
1945
- const nodes = /* @__PURE__ */ new Map();
1946
- for (const graph of graphs) for (const [nodeId, node] of graph.nodes) if (!nodes.has(nodeId)) nodes.set(nodeId, node);
1947
- const uniqueConfigPaths = [...new Set(graphs.map((graph) => graph.configPath))];
1948
- const configPath = uniqueConfigPaths.length === 1 ? uniqueConfigPaths[0] : void 0;
1949
- return {
1950
- cwd: firstGraph.cwd,
1951
- entryId: firstGraph.entryId,
1952
- entryIds: graphs.map((graph) => graph.entryId),
1953
- nodes,
1954
- ...configPath === void 0 ? {} : { configPath }
1955
- };
1956
- }
1957
2000
  //#endregion
1958
2001
  //#region src/analyzers/react/queries.ts
1959
2002
  function getReactUsageEntries(graph, filter = "all") {
@@ -2497,4 +2540,4 @@ function formatReactNodeFilePath(filePath, kind, cwd) {
2497
2540
  //#endregion
2498
2541
  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 };
2499
2542
 
2500
- //# sourceMappingURL=react-Fqrly1Yw.mjs.map
2543
+ //# sourceMappingURL=react-DxWukhfX.mjs.map