foresthouse 1.0.0-dev.1 → 1.0.0-dev.11
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/README.md +16 -2
- package/dist/cli.mjs +157 -82
- package/dist/cli.mjs.map +1 -1
- package/dist/index.d.mts +103 -10
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/react-Dy_CvvJp.mjs +1146 -0
- package/dist/react-Dy_CvvJp.mjs.map +1 -0
- package/package.json +4 -2
- package/dist/tree-BiiNljTI.mjs +0 -276
- package/dist/tree-BiiNljTI.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
- Resolves local imports, re-exports, `require()`, and string-literal dynamic `import()`
|
|
20
20
|
- Honors the nearest `tsconfig.json` or `jsconfig.json`, including `baseUrl` and `paths`
|
|
21
21
|
- Prints a tree by default, or JSON with `--json`
|
|
22
|
+
- Colorizes ASCII output automatically when the terminal supports ANSI colors
|
|
22
23
|
|
|
23
24
|
## Usage
|
|
24
25
|
|
|
@@ -26,13 +27,13 @@
|
|
|
26
27
|
corepack enable
|
|
27
28
|
pnpm install
|
|
28
29
|
pnpm run build
|
|
29
|
-
node dist/cli.mjs src/index.ts
|
|
30
|
+
node dist/cli.mjs import src/index.ts
|
|
30
31
|
```
|
|
31
32
|
|
|
32
33
|
### Example
|
|
33
34
|
|
|
34
35
|
```bash
|
|
35
|
-
node dist/cli.mjs src/main.ts --cwd test/fixtures/basic
|
|
36
|
+
node dist/cli.mjs import src/main.ts --cwd test/fixtures/basic
|
|
36
37
|
```
|
|
37
38
|
|
|
38
39
|
Output:
|
|
@@ -48,9 +49,22 @@ src/main.ts
|
|
|
48
49
|
|
|
49
50
|
### Options
|
|
50
51
|
|
|
52
|
+
`import` command:
|
|
53
|
+
|
|
54
|
+
- `foresthouse import <path>`: analyze an entry file by positional argument
|
|
55
|
+
- `foresthouse import --entry <path>`: analyze an entry file by explicit option
|
|
51
56
|
- `--cwd <path>`: working directory for resolving the entry file and config
|
|
52
57
|
- `--config <path>`: use a specific `tsconfig.json` or `jsconfig.json`
|
|
53
58
|
- `--include-externals`: include packages and Node built-ins in the output
|
|
59
|
+
- `--no-unused`: omit imports that are never referenced
|
|
60
|
+
- `--json`: print a JSON tree instead of ASCII output
|
|
61
|
+
|
|
62
|
+
`react` command:
|
|
63
|
+
|
|
64
|
+
- `foresthouse react <path>`: print a React usage tree from an entry file
|
|
65
|
+
- `--cwd <path>`: working directory for resolving the entry file and config
|
|
66
|
+
- `--config <path>`: use a specific `tsconfig.json` or `jsconfig.json`
|
|
67
|
+
- `--filter <component|hook>`: limit the output to a specific React symbol kind
|
|
54
68
|
- `--json`: print a JSON tree instead of ASCII output
|
|
55
69
|
|
|
56
70
|
## Development
|
package/dist/cli.mjs
CHANGED
|
@@ -1,99 +1,174 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { c as analyzeReactUsage, i as printDependencyTree, l as analyzeDependencies, n as graphToSerializableTree, r as printReactUsageTree, t as graphToSerializableReactTree } from "./react-Dy_CvvJp.mjs";
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
|
-
import process from "node:process";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
process.stdout.write(`${JSON.stringify(graphToSerializableTree(graph), null, 2)}\n`);
|
|
4
|
+
import process$1 from "node:process";
|
|
5
|
+
import { cac } from "cac";
|
|
6
|
+
//#region src/commands/base.ts
|
|
7
|
+
var BaseCommand = class {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.options = options;
|
|
10
|
+
}
|
|
11
|
+
run() {
|
|
12
|
+
const graph = this.analyze();
|
|
13
|
+
if (this.isJsonMode()) {
|
|
14
|
+
process.stdout.write(`${JSON.stringify(this.serialize(graph), null, 2)}\n`);
|
|
16
15
|
return;
|
|
17
16
|
}
|
|
18
|
-
process.stdout.write(`${
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
process.stdout.write(`${this.render(graph)}\n`);
|
|
18
|
+
}
|
|
19
|
+
isJsonMode() {
|
|
20
|
+
return this.options.json;
|
|
21
|
+
}
|
|
22
|
+
getAnalyzeOptions() {
|
|
23
|
+
return {
|
|
24
|
+
...this.options.cwd === void 0 ? {} : { cwd: this.options.cwd },
|
|
25
|
+
...this.options.configPath === void 0 ? {} : { configPath: this.options.configPath }
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/commands/import.ts
|
|
31
|
+
var ImportCommand = class extends BaseCommand {
|
|
32
|
+
analyze() {
|
|
33
|
+
return analyzeDependencies(this.options.entryFile, this.getAnalyzeOptions());
|
|
34
|
+
}
|
|
35
|
+
serialize(graph) {
|
|
36
|
+
return graphToSerializableTree(graph, { omitUnused: this.options.omitUnused });
|
|
37
|
+
}
|
|
38
|
+
render(graph) {
|
|
39
|
+
return printDependencyTree(graph, {
|
|
40
|
+
cwd: this.options.cwd ?? graph.cwd,
|
|
41
|
+
includeExternals: this.options.includeExternals,
|
|
42
|
+
omitUnused: this.options.omitUnused
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/commands/react.ts
|
|
48
|
+
var ReactCommand = class extends BaseCommand {
|
|
49
|
+
analyze() {
|
|
50
|
+
return analyzeReactUsage(this.options.entryFile, this.getAnalyzeOptions());
|
|
51
|
+
}
|
|
52
|
+
serialize(graph) {
|
|
53
|
+
return graphToSerializableReactTree(graph, { filter: this.getFilter() });
|
|
54
|
+
}
|
|
55
|
+
render(graph) {
|
|
56
|
+
return printReactUsageTree(graph, {
|
|
57
|
+
cwd: this.options.cwd ?? graph.cwd,
|
|
58
|
+
filter: this.getFilter()
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
getFilter() {
|
|
62
|
+
return this.options.filter;
|
|
26
63
|
}
|
|
64
|
+
};
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/app/run.ts
|
|
67
|
+
function runCli(options) {
|
|
68
|
+
new CliApplication(options).run();
|
|
27
69
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
var CliApplication = class {
|
|
71
|
+
constructor(options) {
|
|
72
|
+
this.options = options;
|
|
73
|
+
}
|
|
74
|
+
run() {
|
|
75
|
+
this.createCommand().run();
|
|
76
|
+
}
|
|
77
|
+
createCommand() {
|
|
78
|
+
if (this.options.command === "react") return new ReactCommand(this.options);
|
|
79
|
+
return new ImportCommand(this.options);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/app/cli.ts
|
|
84
|
+
function main(version, argv = process$1.argv.slice(2)) {
|
|
85
|
+
new CliMain(version, argv).run();
|
|
86
|
+
}
|
|
87
|
+
var CliMain = class {
|
|
88
|
+
constructor(version, argv) {
|
|
89
|
+
this.version = version;
|
|
90
|
+
this.argv = argv;
|
|
91
|
+
}
|
|
92
|
+
run() {
|
|
93
|
+
try {
|
|
94
|
+
const cli = this.createCli();
|
|
95
|
+
if (this.argv.length === 0) {
|
|
96
|
+
cli.outputHelp();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.validateCommandSyntax();
|
|
100
|
+
cli.parse(this.toProcessArgv());
|
|
101
|
+
} catch (error) {
|
|
102
|
+
const message = error instanceof Error ? error.message : "Unknown error occurred.";
|
|
103
|
+
process$1.stderr.write(`foresthouse: ${message}\n`);
|
|
104
|
+
process$1.exitCode = 1;
|
|
62
105
|
}
|
|
63
|
-
if (argument.startsWith("-")) throw new Error(`Unknown option: ${argument}`);
|
|
64
|
-
if (entryFile !== void 0) throw new Error("Only one entry file can be provided.");
|
|
65
|
-
entryFile = argument;
|
|
66
106
|
}
|
|
67
|
-
|
|
107
|
+
createCli() {
|
|
108
|
+
const cli = cac("foresthouse");
|
|
109
|
+
cli.command("import [entry-file]", "Analyze an entry file and print its dependency tree.").usage("import <entry-file> [options]").option("--entry <path>", "Entry file to analyze.").option("--cwd <path>", "Working directory used for relative paths.").option("--config <path>", "Explicit tsconfig.json or jsconfig.json path.").option("--include-externals", "Include packages and Node built-ins in the tree.").option("--no-unused", "Omit imports that are never referenced.").option("--json", "Print the dependency tree as JSON.").action((entryFile, rawOptions) => {
|
|
110
|
+
runCli(normalizeImportCliOptions(entryFile, rawOptions));
|
|
111
|
+
});
|
|
112
|
+
cli.command("react <entry-file>", "Analyze React usage from an entry file.").usage("react <entry-file> [options]").option("--cwd <path>", "Working directory used for relative paths.").option("--config <path>", "Explicit tsconfig.json or jsconfig.json path.").option("--filter <mode>", "Limit output to `component` or `hook` usages.").option("--json", "Print the React usage tree as JSON.").action((entryFile, rawOptions) => {
|
|
113
|
+
runCli(normalizeReactCliOptions(entryFile, rawOptions));
|
|
114
|
+
});
|
|
115
|
+
cli.help();
|
|
116
|
+
cli.version(this.version);
|
|
117
|
+
return cli;
|
|
118
|
+
}
|
|
119
|
+
validateCommandSyntax() {
|
|
120
|
+
if (this.argv.length === 0) return;
|
|
121
|
+
const firstArgument = this.argv[0];
|
|
122
|
+
if (firstArgument === void 0) return;
|
|
123
|
+
if (firstArgument === "--react" || firstArgument.startsWith("--react=")) throw new Error("Unknown option `--react`");
|
|
124
|
+
if (firstArgument.startsWith("-")) return;
|
|
125
|
+
if (firstArgument === "import" || firstArgument === "react") return;
|
|
126
|
+
throw new Error(`Unknown command \`${firstArgument}\``);
|
|
127
|
+
}
|
|
128
|
+
toProcessArgv() {
|
|
129
|
+
return [
|
|
130
|
+
"node",
|
|
131
|
+
"foresthouse",
|
|
132
|
+
...this.argv
|
|
133
|
+
];
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
function normalizeImportCliOptions(entryFile, options) {
|
|
137
|
+
return {
|
|
138
|
+
command: "import",
|
|
139
|
+
entryFile: resolveImportEntryFile(entryFile, options.entry),
|
|
140
|
+
cwd: options.cwd,
|
|
141
|
+
configPath: options.config,
|
|
142
|
+
includeExternals: options.includeExternals === true,
|
|
143
|
+
omitUnused: options.unused === false,
|
|
144
|
+
json: options.json === true
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function normalizeReactCliOptions(entryFile, options) {
|
|
68
148
|
return {
|
|
149
|
+
command: "react",
|
|
69
150
|
entryFile,
|
|
70
|
-
cwd,
|
|
71
|
-
configPath,
|
|
72
|
-
|
|
73
|
-
|
|
151
|
+
cwd: options.cwd,
|
|
152
|
+
configPath: options.config,
|
|
153
|
+
json: options.json === true,
|
|
154
|
+
filter: normalizeReactFilter(options.filter)
|
|
74
155
|
};
|
|
75
156
|
}
|
|
76
|
-
function
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
157
|
+
function resolveImportEntryFile(positionalEntryFile, optionEntryFile) {
|
|
158
|
+
if (positionalEntryFile !== void 0 && optionEntryFile !== void 0 && positionalEntryFile !== optionEntryFile) throw new Error("Provide the import entry only once, either as `foresthouse import <entry-file>` or `foresthouse import --entry <path>`.");
|
|
159
|
+
const resolvedEntryFile = positionalEntryFile ?? optionEntryFile;
|
|
160
|
+
if (resolvedEntryFile === void 0) throw new Error("Missing import entry file. Use `foresthouse import <entry-file>` or `foresthouse import --entry <path>`.");
|
|
161
|
+
return resolvedEntryFile;
|
|
80
162
|
}
|
|
81
|
-
function
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
foresthouse <entry-file> [options]
|
|
86
|
-
|
|
87
|
-
Options:
|
|
88
|
-
--cwd <path> Working directory used for relative paths.
|
|
89
|
-
--config <path> Explicit tsconfig.json or jsconfig.json path.
|
|
90
|
-
--include-externals Include packages and Node built-ins in the tree.
|
|
91
|
-
--json Print the dependency tree as JSON.
|
|
92
|
-
-v, --version Show the current version.
|
|
93
|
-
-h, --help Show this help message.
|
|
94
|
-
`);
|
|
163
|
+
function normalizeReactFilter(filter) {
|
|
164
|
+
if (filter === void 0) return "all";
|
|
165
|
+
if (filter === "component" || filter === "hook") return filter;
|
|
166
|
+
throw new Error(`Unknown React filter: ${filter}`);
|
|
95
167
|
}
|
|
96
|
-
|
|
168
|
+
//#endregion
|
|
169
|
+
//#region src/cli.ts
|
|
170
|
+
const { version } = createRequire(import.meta.url)("../package.json");
|
|
171
|
+
main(version);
|
|
97
172
|
//#endregion
|
|
98
173
|
export {};
|
|
99
174
|
|
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { createRequire } from 'node:module'\nimport process from 'node:process'\n\nimport { analyzeDependencies, graphToSerializableTree } from './analyzer.js'\nimport { printDependencyTree } from './tree.js'\n\nconst require = createRequire(import.meta.url)\nconst { version } = require('../package.json') as { version: string }\n\ninterface CliOptions {\n readonly entryFile: string\n readonly cwd: string | undefined\n readonly configPath: string | undefined\n readonly includeExternals: boolean\n readonly json: boolean\n}\n\nfunction main(): void {\n try {\n const options = parseArgs(process.argv.slice(2))\n const graph = analyzeDependencies(options.entryFile, {\n ...(options.cwd === undefined ? {} : { cwd: options.cwd }),\n ...(options.configPath === undefined\n ? {}\n : { configPath: options.configPath }),\n })\n\n if (options.json) {\n process.stdout.write(\n `${JSON.stringify(graphToSerializableTree(graph), null, 2)}\\n`,\n )\n return\n }\n\n process.stdout.write(\n `${printDependencyTree(graph, {\n cwd: options.cwd ?? graph.cwd,\n includeExternals: options.includeExternals,\n })}\\n`,\n )\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown error occurred.'\n process.stderr.write(`foresthouse: ${message}\\n`)\n process.exitCode = 1\n }\n}\n\nfunction parseArgs(argv: string[]): CliOptions {\n if (argv.includes('--version') || argv.includes('-v')) {\n process.stdout.write(`${version}\\n`)\n process.exit(0)\n }\n\n if (argv.length === 0 || argv.includes('--help') || argv.includes('-h')) {\n printHelp()\n process.exit(0)\n }\n\n let entryFile: string | undefined\n let cwd: string | undefined\n let configPath: string | undefined\n let includeExternals = false\n let json = false\n\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index]\n if (argument === undefined) {\n continue\n }\n\n if (argument === '--cwd') {\n cwd = readOptionValue(argv, index, '--cwd')\n index += 1\n continue\n }\n\n if (argument === '--config') {\n configPath = readOptionValue(argv, index, '--config')\n index += 1\n continue\n }\n\n if (argument === '--include-externals') {\n includeExternals = true\n continue\n }\n\n if (argument === '--json') {\n json = true\n continue\n }\n\n if (argument.startsWith('-')) {\n throw new Error(`Unknown option: ${argument}`)\n }\n\n if (entryFile !== undefined) {\n throw new Error('Only one entry file can be provided.')\n }\n\n entryFile = argument\n }\n\n if (entryFile === undefined) {\n throw new Error('An entry file is required.')\n }\n\n return {\n entryFile,\n cwd,\n configPath,\n includeExternals,\n json,\n }\n}\n\nfunction readOptionValue(\n argv: string[],\n index: number,\n optionName: string,\n): string {\n const value = argv[index + 1]\n if (value === undefined || value.startsWith('-')) {\n throw new Error(`Missing value for ${optionName}`)\n }\n\n return value\n}\n\nfunction printHelp(): void {\n process.stdout.write(`foresthouse v${version}\n\nUsage:\n foresthouse <entry-file> [options]\n\nOptions:\n --cwd <path> Working directory used for relative paths.\n --config <path> Explicit tsconfig.json or jsconfig.json path.\n --include-externals Include packages and Node built-ins in the tree.\n --json Print the dependency tree as JSON.\n -v, --version Show the current version.\n -h, --help Show this help message.\n`)\n}\n\nmain()\n"],"mappings":";;;;;AASA,MAAM,EAAE,YADQ,cAAc,OAAO,KAAK,IAAI,CAClB,kBAAkB;AAU9C,SAAS,OAAa;AACpB,KAAI;EACF,MAAM,UAAU,UAAU,QAAQ,KAAK,MAAM,EAAE,CAAC;EAChD,MAAM,QAAQ,oBAAoB,QAAQ,WAAW;GACnD,GAAI,QAAQ,QAAQ,KAAA,IAAY,EAAE,GAAG,EAAE,KAAK,QAAQ,KAAK;GACzD,GAAI,QAAQ,eAAe,KAAA,IACvB,EAAE,GACF,EAAE,YAAY,QAAQ,YAAY;GACvC,CAAC;AAEF,MAAI,QAAQ,MAAM;AAChB,WAAQ,OAAO,MACb,GAAG,KAAK,UAAU,wBAAwB,MAAM,EAAE,MAAM,EAAE,CAAC,IAC5D;AACD;;AAGF,UAAQ,OAAO,MACb,GAAG,oBAAoB,OAAO;GAC5B,KAAK,QAAQ,OAAO,MAAM;GAC1B,kBAAkB,QAAQ;GAC3B,CAAC,CAAC,IACJ;UACM,OAAO;EACd,MAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,UAAQ,OAAO,MAAM,gBAAgB,QAAQ,IAAI;AACjD,UAAQ,WAAW;;;AAIvB,SAAS,UAAU,MAA4B;AAC7C,KAAI,KAAK,SAAS,YAAY,IAAI,KAAK,SAAS,KAAK,EAAE;AACrD,UAAQ,OAAO,MAAM,GAAG,QAAQ,IAAI;AACpC,UAAQ,KAAK,EAAE;;AAGjB,KAAI,KAAK,WAAW,KAAK,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,KAAK,EAAE;AACvE,aAAW;AACX,UAAQ,KAAK,EAAE;;CAGjB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI,mBAAmB;CACvB,IAAI,OAAO;AAEX,MAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;EACnD,MAAM,WAAW,KAAK;AACtB,MAAI,aAAa,KAAA,EACf;AAGF,MAAI,aAAa,SAAS;AACxB,SAAM,gBAAgB,MAAM,OAAO,QAAQ;AAC3C,YAAS;AACT;;AAGF,MAAI,aAAa,YAAY;AAC3B,gBAAa,gBAAgB,MAAM,OAAO,WAAW;AACrD,YAAS;AACT;;AAGF,MAAI,aAAa,uBAAuB;AACtC,sBAAmB;AACnB;;AAGF,MAAI,aAAa,UAAU;AACzB,UAAO;AACP;;AAGF,MAAI,SAAS,WAAW,IAAI,CAC1B,OAAM,IAAI,MAAM,mBAAmB,WAAW;AAGhD,MAAI,cAAc,KAAA,EAChB,OAAM,IAAI,MAAM,uCAAuC;AAGzD,cAAY;;AAGd,KAAI,cAAc,KAAA,EAChB,OAAM,IAAI,MAAM,6BAA6B;AAG/C,QAAO;EACL;EACA;EACA;EACA;EACA;EACD;;AAGH,SAAS,gBACP,MACA,OACA,YACQ;CACR,MAAM,QAAQ,KAAK,QAAQ;AAC3B,KAAI,UAAU,KAAA,KAAa,MAAM,WAAW,IAAI,CAC9C,OAAM,IAAI,MAAM,qBAAqB,aAAa;AAGpD,QAAO;;AAGT,SAAS,YAAkB;AACzB,SAAQ,OAAO,MAAM,gBAAgB,QAAQ;;;;;;;;;;;;EAY7C;;AAGF,MAAM"}
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":["process"],"sources":["../src/commands/base.ts","../src/commands/import.ts","../src/commands/react.ts","../src/app/run.ts","../src/app/cli.ts","../src/cli.ts"],"sourcesContent":["import type { CliOptions } from '../app/args.js'\nimport type { AnalyzeOptions } from '../types/analyze-options.js'\n\nexport abstract class BaseCommand<\n TGraph,\n TOptions extends CliOptions = CliOptions,\n> {\n constructor(protected readonly options: TOptions) {}\n\n run(): void {\n const graph = this.analyze()\n\n if (this.isJsonMode()) {\n process.stdout.write(\n `${JSON.stringify(this.serialize(graph), null, 2)}\\n`,\n )\n return\n }\n\n process.stdout.write(`${this.render(graph)}\\n`)\n }\n\n protected isJsonMode(): boolean {\n return this.options.json\n }\n\n protected getAnalyzeOptions(): AnalyzeOptions {\n return {\n ...(this.options.cwd === undefined ? {} : { cwd: this.options.cwd }),\n ...(this.options.configPath === undefined\n ? {}\n : { configPath: this.options.configPath }),\n }\n }\n\n protected abstract analyze(): TGraph\n protected abstract serialize(graph: TGraph): object\n protected abstract render(graph: TGraph): string\n}\n","import { analyzeDependencies } from '../analyzers/import/index.js'\nimport type { ImportCliOptions } from '../app/args.js'\nimport { printDependencyTree } from '../output/ascii/import.js'\nimport { graphToSerializableTree } from '../output/json/import.js'\nimport type { DependencyGraph } from '../types/dependency-graph.js'\nimport { BaseCommand } from './base.js'\n\nexport class ImportCommand extends BaseCommand<\n DependencyGraph,\n ImportCliOptions\n> {\n protected analyze(): DependencyGraph {\n return analyzeDependencies(this.options.entryFile, this.getAnalyzeOptions())\n }\n\n protected serialize(graph: DependencyGraph): object {\n return graphToSerializableTree(graph, {\n omitUnused: this.options.omitUnused,\n })\n }\n\n protected render(graph: DependencyGraph): string {\n return printDependencyTree(graph, {\n cwd: this.options.cwd ?? graph.cwd,\n includeExternals: this.options.includeExternals,\n omitUnused: this.options.omitUnused,\n })\n }\n}\n","import { analyzeReactUsage } from '../analyzers/react/index.js'\nimport type { ReactCliOptions } from '../app/args.js'\nimport { printReactUsageTree } from '../output/ascii/react.js'\nimport { graphToSerializableReactTree } from '../output/json/react.js'\nimport type { ReactUsageFilter } from '../types/react-usage-filter.js'\nimport type { ReactUsageGraph } from '../types/react-usage-graph.js'\nimport { BaseCommand } from './base.js'\n\nexport class ReactCommand extends BaseCommand<\n ReactUsageGraph,\n ReactCliOptions\n> {\n protected analyze(): ReactUsageGraph {\n return analyzeReactUsage(this.options.entryFile, this.getAnalyzeOptions())\n }\n\n protected serialize(graph: ReactUsageGraph): object {\n return graphToSerializableReactTree(graph, {\n filter: this.getFilter(),\n })\n }\n\n protected render(graph: ReactUsageGraph): string {\n return printReactUsageTree(graph, {\n cwd: this.options.cwd ?? graph.cwd,\n filter: this.getFilter(),\n })\n }\n\n private getFilter(): ReactUsageFilter {\n return this.options.filter\n }\n}\n","import { ImportCommand } from '../commands/import.js'\nimport { ReactCommand } from '../commands/react.js'\nimport type { CliOptions } from './args.js'\n\nexport function runCli(options: CliOptions): void {\n new CliApplication(options).run()\n}\n\nclass CliApplication {\n constructor(private readonly options: CliOptions) {}\n\n run(): void {\n this.createCommand().run()\n }\n\n private createCommand(): {\n run(): void\n } {\n if (this.options.command === 'react') {\n return new ReactCommand(this.options)\n }\n\n return new ImportCommand(this.options)\n }\n}\n","import process from 'node:process'\n\nimport { cac } from 'cac'\n\nimport type { ReactUsageFilter } from '../types/react-usage-filter.js'\nimport type { ImportCliOptions, ReactCliOptions } from './args.js'\nimport { runCli } from './run.js'\n\nexport function main(version: string, argv = process.argv.slice(2)): void {\n new CliMain(version, argv).run()\n}\n\nclass CliMain {\n constructor(\n private readonly version: string,\n private readonly argv: string[],\n ) {}\n\n run(): void {\n try {\n const cli = this.createCli()\n\n if (this.argv.length === 0) {\n cli.outputHelp()\n return\n }\n\n this.validateCommandSyntax()\n cli.parse(this.toProcessArgv())\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown error occurred.'\n process.stderr.write(`foresthouse: ${message}\\n`)\n process.exitCode = 1\n }\n }\n\n private createCli() {\n const cli = cac('foresthouse')\n\n cli\n .command(\n 'import [entry-file]',\n 'Analyze an entry file and print its dependency tree.',\n )\n .usage('import <entry-file> [options]')\n .option('--entry <path>', 'Entry file to analyze.')\n .option('--cwd <path>', 'Working directory used for relative paths.')\n .option(\n '--config <path>',\n 'Explicit tsconfig.json or jsconfig.json path.',\n )\n .option(\n '--include-externals',\n 'Include packages and Node built-ins in the tree.',\n )\n .option('--no-unused', 'Omit imports that are never referenced.')\n .option('--json', 'Print the dependency tree as JSON.')\n .action(\n (entryFile: string | undefined, rawOptions: ParsedImportCliOptions) => {\n runCli(normalizeImportCliOptions(entryFile, rawOptions))\n },\n )\n\n cli\n .command('react <entry-file>', 'Analyze React usage from an entry file.')\n .usage('react <entry-file> [options]')\n .option('--cwd <path>', 'Working directory used for relative paths.')\n .option(\n '--config <path>',\n 'Explicit tsconfig.json or jsconfig.json path.',\n )\n .option(\n '--filter <mode>',\n 'Limit output to `component` or `hook` usages.',\n )\n .option('--json', 'Print the React usage tree as JSON.')\n .action((entryFile: string, rawOptions: ParsedReactCliOptions) => {\n runCli(normalizeReactCliOptions(entryFile, rawOptions))\n })\n\n cli.help()\n cli.version(this.version)\n\n return cli\n }\n\n private validateCommandSyntax(): void {\n if (this.argv.length === 0) {\n return\n }\n\n const firstArgument = this.argv[0]\n\n if (firstArgument === undefined) {\n return\n }\n\n if (firstArgument === '--react' || firstArgument.startsWith('--react=')) {\n throw new Error('Unknown option `--react`')\n }\n\n if (firstArgument.startsWith('-')) {\n return\n }\n\n if (firstArgument === 'import' || firstArgument === 'react') {\n return\n }\n\n throw new Error(`Unknown command \\`${firstArgument}\\``)\n }\n\n private toProcessArgv(): string[] {\n return ['node', 'foresthouse', ...this.argv]\n }\n}\n\ninterface ParsedBaseCliOptions {\n readonly cwd?: string\n readonly config?: string\n readonly json?: boolean\n}\n\ninterface ParsedImportCliOptions extends ParsedBaseCliOptions {\n readonly entry?: string\n readonly includeExternals?: boolean\n readonly unused?: boolean\n}\n\ninterface ParsedReactCliOptions extends ParsedBaseCliOptions {\n readonly filter?: string\n}\n\nfunction normalizeImportCliOptions(\n entryFile: string | undefined,\n options: ParsedImportCliOptions,\n): ImportCliOptions {\n return {\n command: 'import',\n entryFile: resolveImportEntryFile(entryFile, options.entry),\n cwd: options.cwd,\n configPath: options.config,\n includeExternals: options.includeExternals === true,\n omitUnused: options.unused === false,\n json: options.json === true,\n }\n}\n\nfunction normalizeReactCliOptions(\n entryFile: string,\n options: ParsedReactCliOptions,\n): ReactCliOptions {\n return {\n command: 'react',\n entryFile,\n cwd: options.cwd,\n configPath: options.config,\n json: options.json === true,\n filter: normalizeReactFilter(options.filter),\n }\n}\n\nfunction resolveImportEntryFile(\n positionalEntryFile: string | undefined,\n optionEntryFile: string | undefined,\n): string {\n if (\n positionalEntryFile !== undefined &&\n optionEntryFile !== undefined &&\n positionalEntryFile !== optionEntryFile\n ) {\n throw new Error(\n 'Provide the import entry only once, either as `foresthouse import <entry-file>` or `foresthouse import --entry <path>`.',\n )\n }\n\n const resolvedEntryFile = positionalEntryFile ?? optionEntryFile\n\n if (resolvedEntryFile === undefined) {\n throw new Error(\n 'Missing import entry file. Use `foresthouse import <entry-file>` or `foresthouse import --entry <path>`.',\n )\n }\n\n return resolvedEntryFile\n}\n\nfunction normalizeReactFilter(\n filter: ParsedReactCliOptions['filter'],\n): ReactUsageFilter {\n if (filter === undefined) {\n return 'all'\n }\n\n if (filter === 'component' || filter === 'hook') {\n return filter\n }\n\n throw new Error(`Unknown React filter: ${filter}`)\n}\n","#!/usr/bin/env node\n\nimport { createRequire } from 'node:module'\n\nimport { main } from './app/cli.js'\n\nconst require = createRequire(import.meta.url)\nconst { version } = require('../package.json') as { version: string }\n\nmain(version)\n"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,38 +1,131 @@
|
|
|
1
|
-
//#region src/types.d.ts
|
|
1
|
+
//#region src/types/analyze-options.d.ts
|
|
2
|
+
interface AnalyzeOptions {
|
|
3
|
+
readonly cwd?: string;
|
|
4
|
+
readonly configPath?: string;
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/types/dependency-kind.d.ts
|
|
2
8
|
type DependencyKind = 'source' | 'external' | 'builtin' | 'missing';
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/types/reference-kind.d.ts
|
|
3
11
|
type ReferenceKind = 'import' | 'export' | 'require' | 'dynamic-import' | 'import-equals';
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/types/dependency-edge.d.ts
|
|
4
14
|
interface DependencyEdge {
|
|
5
15
|
readonly specifier: string;
|
|
6
16
|
readonly referenceKind: ReferenceKind;
|
|
7
17
|
readonly isTypeOnly: boolean;
|
|
18
|
+
readonly unused: boolean;
|
|
8
19
|
readonly kind: DependencyKind;
|
|
9
20
|
readonly target: string;
|
|
10
21
|
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/types/source-module-node.d.ts
|
|
11
24
|
interface SourceModuleNode {
|
|
12
25
|
readonly id: string;
|
|
13
26
|
readonly dependencies: readonly DependencyEdge[];
|
|
14
27
|
}
|
|
28
|
+
//#endregion
|
|
29
|
+
//#region src/types/dependency-graph.d.ts
|
|
15
30
|
interface DependencyGraph {
|
|
16
31
|
readonly cwd: string;
|
|
17
32
|
readonly entryId: string;
|
|
18
33
|
readonly nodes: ReadonlyMap<string, SourceModuleNode>;
|
|
19
34
|
readonly configPath?: string;
|
|
20
35
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/analyzers/import/index.d.ts
|
|
38
|
+
declare function analyzeDependencies(entryFile: string, options?: AnalyzeOptions): DependencyGraph;
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/types/react-usage-location.d.ts
|
|
41
|
+
interface ReactUsageLocation {
|
|
42
|
+
readonly filePath: string;
|
|
43
|
+
readonly line: number;
|
|
44
|
+
readonly column: number;
|
|
24
45
|
}
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/types/react-usage-entry.d.ts
|
|
48
|
+
interface ReactUsageEntry {
|
|
49
|
+
readonly target: string;
|
|
50
|
+
readonly referenceName: string;
|
|
51
|
+
readonly location: ReactUsageLocation;
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region src/types/react-symbol-kind.d.ts
|
|
55
|
+
type ReactSymbolKind = 'component' | 'hook';
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/types/react-usage-edge-kind.d.ts
|
|
58
|
+
type ReactUsageEdgeKind = 'render' | 'hook-call';
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/types/react-usage-edge.d.ts
|
|
61
|
+
interface ReactUsageEdge {
|
|
62
|
+
readonly kind: ReactUsageEdgeKind;
|
|
63
|
+
readonly target: string;
|
|
64
|
+
readonly referenceName: string;
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/types/react-usage-node.d.ts
|
|
68
|
+
interface ReactUsageNode {
|
|
69
|
+
readonly id: string;
|
|
70
|
+
readonly name: string;
|
|
71
|
+
readonly kind: ReactSymbolKind;
|
|
72
|
+
readonly filePath: string;
|
|
73
|
+
readonly exportNames: readonly string[];
|
|
74
|
+
readonly usages: readonly ReactUsageEdge[];
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region src/types/react-usage-graph.d.ts
|
|
78
|
+
interface ReactUsageGraph {
|
|
79
|
+
readonly cwd: string;
|
|
80
|
+
readonly entryId: string;
|
|
81
|
+
readonly nodes: ReadonlyMap<string, ReactUsageNode>;
|
|
82
|
+
readonly entries: readonly ReactUsageEntry[];
|
|
83
|
+
}
|
|
84
|
+
//#endregion
|
|
85
|
+
//#region src/analyzers/react/index.d.ts
|
|
86
|
+
declare function analyzeReactUsage(entryFile: string, options?: AnalyzeOptions): ReactUsageGraph;
|
|
87
|
+
//#endregion
|
|
88
|
+
//#region src/types/react-usage-filter.d.ts
|
|
89
|
+
type ReactUsageFilter = 'all' | ReactSymbolKind;
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/analyzers/react/queries.d.ts
|
|
92
|
+
declare function getReactUsageEntries(graph: ReactUsageGraph, filter?: ReactUsageFilter): ReactUsageEntry[];
|
|
93
|
+
declare function getReactUsageRoots(graph: ReactUsageGraph, filter?: ReactUsageFilter): string[];
|
|
94
|
+
declare function getFilteredUsages(node: ReactUsageNode, graph: ReactUsageGraph, filter?: ReactUsageFilter): ReactUsageEdge[];
|
|
95
|
+
//#endregion
|
|
96
|
+
//#region src/types/color-mode.d.ts
|
|
97
|
+
type ColorMode = boolean | 'auto';
|
|
98
|
+
//#endregion
|
|
99
|
+
//#region src/types/print-tree-options.d.ts
|
|
25
100
|
interface PrintTreeOptions {
|
|
26
101
|
readonly cwd?: string;
|
|
27
102
|
readonly includeExternals?: boolean;
|
|
103
|
+
readonly omitUnused?: boolean;
|
|
104
|
+
readonly color?: ColorMode;
|
|
28
105
|
}
|
|
29
106
|
//#endregion
|
|
30
|
-
//#region src/
|
|
31
|
-
declare function analyzeDependencies(entryFile: string, options?: AnalyzeOptions): DependencyGraph;
|
|
32
|
-
declare function graphToSerializableTree(graph: DependencyGraph): object;
|
|
33
|
-
//#endregion
|
|
34
|
-
//#region src/tree.d.ts
|
|
107
|
+
//#region src/output/ascii/import.d.ts
|
|
35
108
|
declare function printDependencyTree(graph: DependencyGraph, options?: PrintTreeOptions): string;
|
|
36
109
|
//#endregion
|
|
37
|
-
|
|
110
|
+
//#region src/types/print-react-tree-options.d.ts
|
|
111
|
+
interface PrintReactTreeOptions {
|
|
112
|
+
readonly cwd?: string;
|
|
113
|
+
readonly filter?: ReactUsageFilter;
|
|
114
|
+
readonly color?: ColorMode;
|
|
115
|
+
}
|
|
116
|
+
//#endregion
|
|
117
|
+
//#region src/output/ascii/react.d.ts
|
|
118
|
+
declare function printReactUsageTree(graph: ReactUsageGraph, options?: PrintReactTreeOptions): string;
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region src/output/json/import.d.ts
|
|
121
|
+
declare function graphToSerializableTree(graph: DependencyGraph, options?: {
|
|
122
|
+
readonly omitUnused?: boolean;
|
|
123
|
+
}): object;
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region src/output/json/react.d.ts
|
|
126
|
+
declare function graphToSerializableReactTree(graph: ReactUsageGraph, options?: {
|
|
127
|
+
readonly filter?: ReactUsageFilter;
|
|
128
|
+
}): object;
|
|
129
|
+
//#endregion
|
|
130
|
+
export { type AnalyzeOptions, type ColorMode, type DependencyEdge, type DependencyGraph, type DependencyKind, type PrintReactTreeOptions, type PrintTreeOptions, type ReactSymbolKind, type ReactUsageEdge, type ReactUsageEdgeKind, type ReactUsageEntry, type ReactUsageFilter, type ReactUsageGraph, type ReactUsageLocation, type ReactUsageNode, type ReferenceKind, type SourceModuleNode, analyzeDependencies, analyzeReactUsage, getFilteredUsages, getReactUsageEntries, getReactUsageRoots, graphToSerializableReactTree, graphToSerializableTree, printDependencyTree, printReactUsageTree };
|
|
38
131
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../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-tree-options.ts","../src/output/ascii/import.ts","../src/types/print-react-tree-options.ts","../src/output/ascii/react.ts","../src/output/json/import.ts","../src/output/json/react.ts"],"mappings":";UAAiB,cAAA;EAAA,SACN,GAAA;EAAA,SACA,UAAA;AAAA;;;KCFC,cAAA;;;KCAA,aAAA;;;UCGK,cAAA;EAAA,SACN,SAAA;EAAA,SACA,aAAA,EAAe,aAAA;EAAA,SACf,UAAA;EAAA,SACA,MAAA;EAAA,SACA,IAAA,EAAM,cAAA;EAAA,SACN,MAAA;AAAA;;;UCPM,gBAAA;EAAA,SACN,EAAA;EAAA,SACA,YAAA,WAAuB,cAAA;AAAA;;;UCFjB,eAAA;EAAA,SACN,GAAA;EAAA,SACA,OAAA;EAAA,SACA,KAAA,EAAO,WAAA,SAAoB,gBAAA;EAAA,SAC3B,UAAA;AAAA;;;iBCGK,mBAAA,CACd,SAAA,UACA,OAAA,GAAS,cAAA,GACR,eAAA;;;UCZc,kBAAA;EAAA,SACN,QAAA;EAAA,SACA,IAAA;EAAA,SACA,MAAA;AAAA;;;UCDM,eAAA;EAAA,SACN,MAAA;EAAA,SACA,aAAA;EAAA,SACA,QAAA,EAAU,kBAAA;AAAA;;;KCLT,eAAA;;;KCAA,kBAAA;;;UCEK,cAAA;EAAA,SACN,IAAA,EAAM,kBAAA;EAAA,SACN,MAAA;EAAA,SACA,aAAA;AAAA;;;UCFM,cAAA;EAAA,SACN,EAAA;EAAA,SACA,IAAA;EAAA,SACA,IAAA,EAAM,eAAA;EAAA,SACN,QAAA;EAAA,SACA,WAAA;EAAA,SACA,MAAA,WAAiB,cAAA;AAAA;;;UCNX,eAAA;EAAA,SACN,GAAA;EAAA,SACA,OAAA;EAAA,SACA,KAAA,EAAO,WAAA,SAAoB,cAAA;EAAA,SAC3B,OAAA,WAAkB,eAAA;AAAA;;;iBCcb,iBAAA,CACd,SAAA,UACA,OAAA,GAAS,cAAA,GACR,eAAA;;;KCtBS,gBAAA,WAA2B,eAAA;;;iBCKvB,oBAAA,CACd,KAAA,EAAO,eAAA,EACP,MAAA,GAAQ,gBAAA,GACP,eAAA;AAAA,iBAOa,kBAAA,CACd,KAAA,EAAO,eAAA,EACP,MAAA,GAAQ,gBAAA;AAAA,iBAsCM,iBAAA,CACd,IAAA,EAAM,cAAA,EACN,KAAA,EAAO,eAAA,EACP,MAAA,GAAQ,gBAAA,GACP,cAAA;;;KC7DS,SAAA;;;UCEK,gBAAA;EAAA,SACN,GAAA;EAAA,SACA,gBAAA;EAAA,SACA,UAAA;EAAA,SACA,KAAA,GAAQ,SAAA;AAAA;;;iBCAH,mBAAA,CACd,KAAA,EAAO,eAAA,EACP,OAAA,GAAS,gBAAA;;;UCLM,qBAAA;EAAA,SACN,GAAA;EAAA,SACA,MAAA,GAAS,gBAAA;EAAA,SACT,KAAA,GAAQ,SAAA;AAAA;;;iBCaH,mBAAA,CACd,KAAA,EAAO,eAAA,EACP,OAAA,GAAS,qBAAA;;;iBClBK,uBAAA,CACd,KAAA,EAAO,eAAA,EACP,OAAA;EAAA,SACW,UAAA;AAAA;;;iBC+BG,4BAAA,CACd,KAAA,EAAO,eAAA,EACP,OAAA;EAAA,SACW,MAAA,GAAS,gBAAA;AAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { analyzeDependencies, graphToSerializableTree, printDependencyTree };
|
|
1
|
+
import { a as getFilteredUsages, c as analyzeReactUsage, i as printDependencyTree, l as analyzeDependencies, n as graphToSerializableTree, o as getReactUsageEntries, r as printReactUsageTree, s as getReactUsageRoots, t as graphToSerializableReactTree } from "./react-Dy_CvvJp.mjs";
|
|
2
|
+
export { analyzeDependencies, analyzeReactUsage, getFilteredUsages, getReactUsageEntries, getReactUsageRoots, graphToSerializableReactTree, graphToSerializableTree, printDependencyTree, printReactUsageTree };
|