react-doctor 0.7.1-dev.160f84c → 0.7.1-dev.5809083
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.js +42 -24
- package/dist/index.js +3 -3
- package/dist/lsp.js +3 -3
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="69a45de3-fe65-53dc-aed2-17f9cea22159")}catch(e){}}();
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
4
|
import * as NodeChildProcess from "node:child_process";
|
|
5
5
|
import { execFile, execFileSync, spawn, spawnSync } from "node:child_process";
|
|
@@ -41807,7 +41807,7 @@ var Git = class Git extends Service()("react-doctor/Git") {
|
|
|
41807
41807
|
})),
|
|
41808
41808
|
showStagedContent: (directory, relativePath, options) => runCommand({
|
|
41809
41809
|
command: "git",
|
|
41810
|
-
args: ["show",
|
|
41810
|
+
args: ["show", `:./${relativePath}`],
|
|
41811
41811
|
directory,
|
|
41812
41812
|
maxStdoutBytes: options?.maxBufferBytes
|
|
41813
41813
|
}).pipe(map$3((result) => result.status === 0 ? result.stdout : null)),
|
|
@@ -45924,7 +45924,7 @@ const makeNoopConsole = () => ({
|
|
|
45924
45924
|
});
|
|
45925
45925
|
//#endregion
|
|
45926
45926
|
//#region src/cli/utils/version.ts
|
|
45927
|
-
const VERSION = "0.7.1-dev.
|
|
45927
|
+
const VERSION = "0.7.1-dev.5809083";
|
|
45928
45928
|
//#endregion
|
|
45929
45929
|
//#region src/cli/utils/json-mode.ts
|
|
45930
45930
|
let context = null;
|
|
@@ -46293,13 +46293,13 @@ const isDevVersion = (version) => version === "0.0.0" || version.includes("-");
|
|
|
46293
46293
|
* uploads source-map artifacts under, so stack frames symbolicate. Honors the
|
|
46294
46294
|
* standard `SENTRY_RELEASE` override.
|
|
46295
46295
|
*/
|
|
46296
|
-
const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.7.1-dev.
|
|
46296
|
+
const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.7.1-dev.5809083`;
|
|
46297
46297
|
/**
|
|
46298
46298
|
* Deployment environment shown in Sentry's environment filter. Defaults to
|
|
46299
46299
|
* `production` for tagged releases and `development` for dev/unbuilt versions,
|
|
46300
46300
|
* overridable via the standard `SENTRY_ENVIRONMENT` env var.
|
|
46301
46301
|
*/
|
|
46302
|
-
const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.7.1-dev.
|
|
46302
|
+
const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.7.1-dev.5809083") ? "development" : "production");
|
|
46303
46303
|
/**
|
|
46304
46304
|
* Performance-tracing sample rate in `[0, 1]`. Reads `SENTRY_TRACES_SAMPLE_RATE`
|
|
46305
46305
|
* (set to `0` to disable tracing) and falls back to
|
|
@@ -58143,7 +58143,7 @@ const buildRuntimeLayers = (input) => {
|
|
|
58143
58143
|
const linterLayer = input.shouldSkipLint ? Linter.layerOf([]) : Linter.layerOxlint;
|
|
58144
58144
|
const deadCodeLayer = input.shouldRunDeadCode ? DeadCode.layerNode : DeadCode.layerOf([]);
|
|
58145
58145
|
const scoreLayer = input.shouldComputeScore ? Score.layerHttp : Score.layerOf(null);
|
|
58146
|
-
const supplyChainLayer = input.
|
|
58146
|
+
const supplyChainLayer = input.shouldRunSupplyChain ? SupplyChain.layerNode : SupplyChain.layerOf([]);
|
|
58147
58147
|
const projectLayer = input.projectInfoOverride === void 0 ? Project.layerNode : Project.layerOf(input.projectInfoOverride);
|
|
58148
58148
|
const progressLayer = input.shouldShowProgressSpinners ? Progress.layerOra(buildSpinnerProgressHandle) : Progress.layerNoop;
|
|
58149
58149
|
const baseLayers = mergeAll$1(projectLayer, input.hasConfigOverride ? Config.layerOf({
|
|
@@ -58499,21 +58499,22 @@ const resolveDotenvFingerprint = (projectDirectory) => {
|
|
|
58499
58499
|
return [];
|
|
58500
58500
|
}
|
|
58501
58501
|
};
|
|
58502
|
-
const
|
|
58502
|
+
const isGitIdentityTrustworthy = (projectDirectory) => {
|
|
58503
58503
|
const output = runGit(projectDirectory, ["ls-files", "-v"]);
|
|
58504
|
-
if (output === null) return
|
|
58505
|
-
|
|
58504
|
+
if (output === null) return false;
|
|
58505
|
+
const entryLines = output.split("\n").filter((line) => line.length > 0);
|
|
58506
|
+
return entryLines.length > 0 && entryLines.every((line) => line[0] === "H");
|
|
58506
58507
|
};
|
|
58507
58508
|
const resolveCacheFilePath = (projectDirectory) => path.join(resolveReactDoctorCacheDir(projectDirectory), SCAN_RESULT_CACHE_FILENAME);
|
|
58508
58509
|
const readPersistedCache = (cacheFilePath) => {
|
|
58509
58510
|
try {
|
|
58510
58511
|
const parsed = JSON.parse(fs.readFileSync(cacheFilePath, "utf8"));
|
|
58511
|
-
if (!isRecord(parsed) || parsed.version !==
|
|
58512
|
-
version:
|
|
58512
|
+
if (!isRecord(parsed) || parsed.version !== 4) return {
|
|
58513
|
+
version: 4,
|
|
58513
58514
|
entries: []
|
|
58514
58515
|
};
|
|
58515
58516
|
if (!Array.isArray(parsed.entries)) return {
|
|
58516
|
-
version:
|
|
58517
|
+
version: 4,
|
|
58517
58518
|
entries: []
|
|
58518
58519
|
};
|
|
58519
58520
|
const entries = [];
|
|
@@ -58523,12 +58524,12 @@ const readPersistedCache = (cacheFilePath) => {
|
|
|
58523
58524
|
entries.push(entry);
|
|
58524
58525
|
}
|
|
58525
58526
|
return {
|
|
58526
|
-
version:
|
|
58527
|
+
version: 4,
|
|
58527
58528
|
entries
|
|
58528
58529
|
};
|
|
58529
58530
|
} catch {
|
|
58530
58531
|
return {
|
|
58531
|
-
version:
|
|
58532
|
+
version: 4,
|
|
58532
58533
|
entries: []
|
|
58533
58534
|
};
|
|
58534
58535
|
}
|
|
@@ -58560,6 +58561,7 @@ const resolveProjectIdentity = (projectDirectory) => {
|
|
|
58560
58561
|
return path.resolve(projectDirectory);
|
|
58561
58562
|
}
|
|
58562
58563
|
};
|
|
58564
|
+
const resolveManifestContentHash = (projectDirectory) => hashFileContents(getPackageJsonPath(projectDirectory));
|
|
58563
58565
|
const fileFingerprint = (filePath) => {
|
|
58564
58566
|
try {
|
|
58565
58567
|
const stat = fs.statSync(filePath);
|
|
@@ -58582,14 +58584,14 @@ const resolveToolchainFingerprint = (nodeBinaryPath) => {
|
|
|
58582
58584
|
};
|
|
58583
58585
|
const buildScanResultCacheKey = (input) => {
|
|
58584
58586
|
if (isCacheGloballyDisabled()) return null;
|
|
58585
|
-
if (
|
|
58587
|
+
if (!isGitIdentityTrustworthy(input.projectDirectory)) return null;
|
|
58586
58588
|
const worktreeFingerprint = buildWorktreeFingerprint(input.projectDirectory);
|
|
58587
58589
|
if (worktreeFingerprint === null) return null;
|
|
58588
58590
|
const headSha = readHeadSha(input.projectDirectory);
|
|
58589
58591
|
if (headSha === null) return null;
|
|
58590
58592
|
if (stringifyStableJson(input.userConfig) === null) return null;
|
|
58591
58593
|
const cacheKeyJson = stringifyStableJson({
|
|
58592
|
-
schemaVersion:
|
|
58594
|
+
schemaVersion: 4,
|
|
58593
58595
|
projectIdentity: resolveProjectIdentity(input.projectDirectory),
|
|
58594
58596
|
headSha,
|
|
58595
58597
|
worktreeFingerprint,
|
|
@@ -58604,6 +58606,7 @@ const buildScanResultCacheKey = (input) => {
|
|
|
58604
58606
|
engineOptions: {
|
|
58605
58607
|
lint: input.options.lint,
|
|
58606
58608
|
deadCode: input.options.deadCode,
|
|
58609
|
+
supplyChain: input.options.supplyChain,
|
|
58607
58610
|
includePaths: [...input.options.includePaths].sort(),
|
|
58608
58611
|
customRulesOnly: input.options.customRulesOnly,
|
|
58609
58612
|
respectInlineDisables: input.options.respectInlineDisables,
|
|
@@ -58629,17 +58632,24 @@ const createScanResultCache = (projectDirectory) => {
|
|
|
58629
58632
|
for (const entry of persistedCache.entries) entries.set(entry.key, entry);
|
|
58630
58633
|
const persist = () => {
|
|
58631
58634
|
writePersistedCache(cacheFilePath, {
|
|
58632
|
-
version:
|
|
58635
|
+
version: 4,
|
|
58633
58636
|
entries: [...entries.values()].sort((firstEntry, secondEntry) => secondEntry.createdAtMs - firstEntry.createdAtMs).slice(0, 20)
|
|
58634
58637
|
});
|
|
58635
58638
|
};
|
|
58636
58639
|
return {
|
|
58637
|
-
lookup: (key) =>
|
|
58640
|
+
lookup: (key) => {
|
|
58641
|
+
const payload = entries.get(key)?.payload;
|
|
58642
|
+
if (payload === void 0) return null;
|
|
58643
|
+
return resolveProjectIdentity(payload.directory) === resolveProjectIdentity(projectDirectory) && (payload.manifestContentHash ?? null) === resolveManifestContentHash(projectDirectory) ? payload : null;
|
|
58644
|
+
},
|
|
58638
58645
|
store: (key, payload) => {
|
|
58639
58646
|
entries.set(key, {
|
|
58640
58647
|
key,
|
|
58641
58648
|
createdAtMs: Date.now(),
|
|
58642
|
-
payload
|
|
58649
|
+
payload: {
|
|
58650
|
+
...payload,
|
|
58651
|
+
manifestContentHash: resolveManifestContentHash(projectDirectory)
|
|
58652
|
+
}
|
|
58643
58653
|
});
|
|
58644
58654
|
persist();
|
|
58645
58655
|
}
|
|
@@ -58904,6 +58914,7 @@ const buildScanAttributes = (input) => {
|
|
|
58904
58914
|
maxDurationMs: input.maxDurationMs,
|
|
58905
58915
|
lint: input.lint,
|
|
58906
58916
|
deadCode: input.deadCode,
|
|
58917
|
+
supplyChain: input.supplyChain,
|
|
58907
58918
|
scoreOnly: input.scoreOnly,
|
|
58908
58919
|
noScore: input.noScore,
|
|
58909
58920
|
respectInlineDisables: input.respectInlineDisables,
|
|
@@ -60178,6 +60189,7 @@ const buildIgnoredTags = (userConfig) => {
|
|
|
60178
60189
|
const mergeInspectOptions = (inputOptions, userConfig) => ({
|
|
60179
60190
|
lint: inputOptions.lint ?? userConfig?.lint ?? true,
|
|
60180
60191
|
deadCode: inputOptions.deadCode ?? userConfig?.deadCode ?? true,
|
|
60192
|
+
supplyChain: inputOptions.supplyChain ?? userConfig?.supplyChain?.enabled ?? true,
|
|
60181
60193
|
verbose: inputOptions.verbose ?? userConfig?.verbose ?? false,
|
|
60182
60194
|
outputDirectory: inputOptions.outputDirectory || null,
|
|
60183
60195
|
scoreOnly: inputOptions.scoreOnly ?? false,
|
|
@@ -60217,6 +60229,7 @@ const buildRunEventConfig = (options, userConfig, hasCustomConfig, resolvedWorke
|
|
|
60217
60229
|
maxDurationMs: options.maxDurationMs,
|
|
60218
60230
|
lint: options.lint,
|
|
60219
60231
|
deadCode: options.deadCode,
|
|
60232
|
+
supplyChain: options.supplyChain,
|
|
60220
60233
|
scoreOnly: options.scoreOnly,
|
|
60221
60234
|
noScore: options.noScore,
|
|
60222
60235
|
respectInlineDisables: options.respectInlineDisables,
|
|
@@ -60300,6 +60313,7 @@ const runBaselineComparison = async (params) => {
|
|
|
60300
60313
|
projectInfoOverride: params.headProjectInfo,
|
|
60301
60314
|
shouldSkipLint: !params.options.lint || !params.resolvedNodeBinaryPath,
|
|
60302
60315
|
shouldRunDeadCode: false,
|
|
60316
|
+
shouldRunSupplyChain: params.options.supplyChain,
|
|
60303
60317
|
shouldComputeScore: false,
|
|
60304
60318
|
shouldShowProgressSpinners: false,
|
|
60305
60319
|
oxlintConcurrency: params.options.concurrency
|
|
@@ -60388,6 +60402,7 @@ const runInspectWithRuntime = async (directory, options, userConfig, hasConfigOv
|
|
|
60388
60402
|
configSourceDirectory,
|
|
60389
60403
|
shouldSkipLint: !options.lint || lintBindingMissing,
|
|
60390
60404
|
shouldRunDeadCode: options.deadCode,
|
|
60405
|
+
shouldRunSupplyChain: options.supplyChain,
|
|
60391
60406
|
shouldComputeScore: !options.noScore,
|
|
60392
60407
|
shouldShowProgressSpinners,
|
|
60393
60408
|
oxlintConcurrency: options.concurrency
|
|
@@ -62673,8 +62688,8 @@ const resolveParallelFlag = (parallel) => parallel === false ? 1 : void 0;
|
|
|
62673
62688
|
* accepts. Flag-derived fields only (`scoreOnly`, `noScore`, `silent`,
|
|
62674
62689
|
* `isCi`): every `userConfig` fallback — including `noScore` — lives in
|
|
62675
62690
|
* `inspect()`'s merge layer, which sees each project's module-merged
|
|
62676
|
-
* config. The plain boolean knobs (`lint`, `deadCode`, `
|
|
62677
|
-
* through unchanged for the same reason. This resolver reads
|
|
62691
|
+
* config. The plain boolean knobs (`lint`, `deadCode`, `supplyChain`,
|
|
62692
|
+
* `verbose`) pass through unchanged for the same reason. This resolver reads
|
|
62678
62693
|
* `userConfig` only to decide the `--blocking warning` gate.
|
|
62679
62694
|
*/
|
|
62680
62695
|
const resolveCliInspectOptions = (flags, userConfig) => {
|
|
@@ -62682,6 +62697,7 @@ const resolveCliInspectOptions = (flags, userConfig) => {
|
|
|
62682
62697
|
return {
|
|
62683
62698
|
lint: flags.lint,
|
|
62684
62699
|
deadCode: flags.deadCode,
|
|
62700
|
+
supplyChain: flags.supplyChain,
|
|
62685
62701
|
verbose: flags.verbose,
|
|
62686
62702
|
outputDirectory: flags.outputDir,
|
|
62687
62703
|
respectInlineDisables: flags.respectInlineDisables === false ? false : void 0,
|
|
@@ -63232,7 +63248,7 @@ const inspectAction = async (directory, flags) => {
|
|
|
63232
63248
|
const scanDirectory = projectScanTarget.resolvedDirectory;
|
|
63233
63249
|
const projectConfig = projectDirectory === resolvedDirectory ? userConfig : mergeReactDoctorConfigs(userConfig, projectScanTarget.userConfig ?? void 0);
|
|
63234
63250
|
const projectConfigSourceDirectory = projectScanTarget.userConfig?.plugins === void 0 ? scanTarget.configSourceDirectory : projectScanTarget.configSourceDirectory;
|
|
63235
|
-
const supplyChainEnabled = projectConfig?.supplyChain?.enabled !== false;
|
|
63251
|
+
const supplyChainEnabled = flags.supplyChain ?? projectConfig?.supplyChain?.enabled !== false;
|
|
63236
63252
|
let includePaths;
|
|
63237
63253
|
let supplyChainManifestChanged = false;
|
|
63238
63254
|
if (isDiffMode) {
|
|
@@ -64152,10 +64168,12 @@ const ROOT_FLAG_SPEC = {
|
|
|
64152
64168
|
"--no-parallel",
|
|
64153
64169
|
"--no-respect-inline-disables",
|
|
64154
64170
|
"--no-score",
|
|
64171
|
+
"--no-supply-chain",
|
|
64155
64172
|
"--no-telemetry",
|
|
64156
64173
|
"--no-warnings",
|
|
64157
64174
|
"--score",
|
|
64158
64175
|
"--staged",
|
|
64176
|
+
"--supply-chain",
|
|
64159
64177
|
"--verbose",
|
|
64160
64178
|
"--version",
|
|
64161
64179
|
"--warnings",
|
|
@@ -64404,7 +64422,7 @@ ${highlighter.dim("Learn more:")}
|
|
|
64404
64422
|
${highlighter.info(CI_URL)}
|
|
64405
64423
|
`;
|
|
64406
64424
|
const collectCategoryOption = (value, previousValues) => [...previousValues ?? [], value];
|
|
64407
|
-
const program = new Command().name("react-doctor").description("Diagnose React codebase health").version(VERSION, "-v, --version", "display the version number").argument("[directory]", "project directory to scan", ".").option("--lint", "enable linting").option("--no-lint", "skip linting").option("--dead-code", "enable dead-code analysis (default)").option("--no-dead-code", "skip dead-code analysis (unused files / exports / dependencies, circular imports)").option("--verbose", "show every rule and per-file details (default shows top 3 rules)").option("--debug", "force a Sentry trace and print its id at the end (paste it into a bug report)").option("--output-dir <dir>", "directory for the full diagnostics dump (default: a temp folder)").option("--score", "output only the score").option("--json", "output a single structured JSON report (suppresses other output)").option("--json-compact", "with --json, emit compact JSON (no indentation)").option("--json-out <path>", "with --json, write the report to a file instead of stdout").option("-y, --yes", "skip prompts, scan all workspace projects").option("--no-parallel", "lint serially with one worker (default: parallel across CPU cores; set the worker count with REACT_DOCTOR_PARALLEL)").option("--project <name>", "select projects: workspace names or directory paths (comma-separated for multiple); overrides the `projects` config field").option("--scope <value>", "how much to scan/report: full (default), files, changed (only new issues vs base), or lines (only changed lines)").option("--base <ref>", "base git ref for files/changed/lines scope (auto-detected when omitted)").addOption(new Option("--diff [base]", "[deprecated] alias for --scope changed (pass `false` to force a full scan)").hideHelp()).addOption(new Option("--changed-files-from <file>", "scan source files listed in a newline-delimited changed-files file").hideHelp()).option("--no-score", "skip the score API, the share URL, and crash reporting").addOption(new Option("--category <category>", "only show diagnostics in a category (repeatable; e.g. Security)").argParser(collectCategoryOption)).option("--no-telemetry", "alias for --no-score (skip the score API, share URL, and crash reporting)").option("--staged", "scan only staged (git index) files for pre-commit hooks").option("--max-duration <seconds>", "scan time budget for the whole run, shared across workspace projects: past it, remaining lint batches and dead-code are skipped and partial results are reported (skipped files are listed in the JSON report)").option("--blocking <level>", "severity that fails CI: error (default), warning, or none (advisory)").addOption(new Option("--fail-on <level>", "[deprecated] alias for --blocking <level>").hideHelp()).option("--no-respect-inline-disables", "audit mode: neutralize inline lint suppressions before scanning").option("--warnings", "show warning-severity diagnostics (default)").option("--no-warnings", "hide warning-severity diagnostics (errors only)").option("--color", "force colored output").option("--no-color", "disable colored output (also honors NO_COLOR)").addHelpText("after", renderRootHelpEpilog);
|
|
64425
|
+
const program = new Command().name("react-doctor").description("Diagnose React codebase health").version(VERSION, "-v, --version", "display the version number").argument("[directory]", "project directory to scan", ".").option("--lint", "enable linting").option("--no-lint", "skip linting").option("--dead-code", "enable dead-code analysis (default)").option("--no-dead-code", "skip dead-code analysis (unused files / exports / dependencies, circular imports)").option("--supply-chain", "enable the dependency supply-chain scan (default)").option("--no-supply-chain", "skip the dependency supply-chain scan (Socket.dev dependency health checks)").option("--verbose", "show every rule and per-file details (default shows top 3 rules)").option("--debug", "force a Sentry trace and print its id at the end (paste it into a bug report)").option("--output-dir <dir>", "directory for the full diagnostics dump (default: a temp folder)").option("--score", "output only the score").option("--json", "output a single structured JSON report (suppresses other output)").option("--json-compact", "with --json, emit compact JSON (no indentation)").option("--json-out <path>", "with --json, write the report to a file instead of stdout").option("-y, --yes", "skip prompts, scan all workspace projects").option("--no-parallel", "lint serially with one worker (default: parallel across CPU cores; set the worker count with REACT_DOCTOR_PARALLEL)").option("--project <name>", "select projects: workspace names or directory paths (comma-separated for multiple); overrides the `projects` config field").option("--scope <value>", "how much to scan/report: full (default), files, changed (only new issues vs base), or lines (only changed lines)").option("--base <ref>", "base git ref for files/changed/lines scope (auto-detected when omitted)").addOption(new Option("--diff [base]", "[deprecated] alias for --scope changed (pass `false` to force a full scan)").hideHelp()).addOption(new Option("--changed-files-from <file>", "scan source files listed in a newline-delimited changed-files file").hideHelp()).option("--no-score", "skip the score API, the share URL, and crash reporting").addOption(new Option("--category <category>", "only show diagnostics in a category (repeatable; e.g. Security)").argParser(collectCategoryOption)).option("--no-telemetry", "alias for --no-score (skip the score API, share URL, and crash reporting)").option("--staged", "scan only staged (git index) files for pre-commit hooks").option("--max-duration <seconds>", "scan time budget for the whole run, shared across workspace projects: past it, remaining lint batches and dead-code are skipped and partial results are reported (skipped files are listed in the JSON report)").option("--blocking <level>", "severity that fails CI: error (default), warning, or none (advisory)").addOption(new Option("--fail-on <level>", "[deprecated] alias for --blocking <level>").hideHelp()).option("--no-respect-inline-disables", "audit mode: neutralize inline lint suppressions before scanning").option("--warnings", "show warning-severity diagnostics (default)").option("--no-warnings", "hide warning-severity diagnostics (errors only)").option("--color", "force colored output").option("--no-color", "disable colored output (also honors NO_COLOR)").addHelpText("after", renderRootHelpEpilog);
|
|
64408
64426
|
program.action(inspectAction);
|
|
64409
64427
|
program.command("why <location>").description("Explain why a rule fired (or why a suppression didn't apply) at a file:line").option("--project <name>", "select projects: workspace names or directory paths (comma-separated for multiple)").option("-c, --cwd <cwd>", "working directory", process.cwd()).option("--color", "force colored output").option("--no-color", "disable colored output (also honors NO_COLOR)").action((location, options) => whyAction(location, options));
|
|
64410
64428
|
program.command("install").alias("setup").description("Install the react-doctor skill into your coding agents and optional git hook").option("-y, --yes", "skip prompts, install for all detected agents").option("--dry-run", "show what would be installed without writing files").option("--agent-hooks", "install native non-blocking agent hooks for Claude Code and Cursor").option("-c, --cwd <cwd>", "working directory", process.cwd()).option("--color", "force colored output").option("--no-color", "disable colored output (also honors NO_COLOR)").addHelpText("after", renderInstallHelpEpilog).action(installAction);
|
|
@@ -64454,4 +64472,4 @@ Promise.resolve().then(() => assertNoRemovedFlags(process.argv)).then(() => prog
|
|
|
64454
64472
|
export {};
|
|
64455
64473
|
|
|
64456
64474
|
//# sourceMappingURL=cli.js.map
|
|
64457
|
-
//# debugId=
|
|
64475
|
+
//# debugId=69a45de3-fe65-53dc-aed2-17f9cea22159
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f1919957-a013-5ded-b0ed-3d2e8469d0e2")}catch(e){}}();
|
|
3
3
|
import { r as __toESM$1, t as __commonJSMin$1 } from "./chunk-N93fKeF6.js";
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
import * as NFS from "node:fs";
|
|
@@ -38564,7 +38564,7 @@ var Git = class Git extends Service()("react-doctor/Git") {
|
|
|
38564
38564
|
})),
|
|
38565
38565
|
showStagedContent: (directory, relativePath, options) => runCommand({
|
|
38566
38566
|
command: "git",
|
|
38567
|
-
args: ["show",
|
|
38567
|
+
args: ["show", `:./${relativePath}`],
|
|
38568
38568
|
directory,
|
|
38569
38569
|
maxStdoutBytes: options?.maxBufferBytes
|
|
38570
38570
|
}).pipe(map$3((result) => result.status === 0 ? result.stdout : null)),
|
|
@@ -42441,4 +42441,4 @@ const toJsonReport = (result, options) => buildJsonReport({
|
|
|
42441
42441
|
export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
|
|
42442
42442
|
|
|
42443
42443
|
//# sourceMappingURL=index.js.map
|
|
42444
|
-
//# debugId=
|
|
42444
|
+
//# debugId=f1919957-a013-5ded-b0ed-3d2e8469d0e2
|
package/dist/lsp.js
CHANGED
|
@@ -38549,7 +38549,7 @@ var Git = class Git extends Service()("react-doctor/Git") {
|
|
|
38549
38549
|
})),
|
|
38550
38550
|
showStagedContent: (directory, relativePath, options) => runCommand({
|
|
38551
38551
|
command: "git",
|
|
38552
|
-
args: ["show",
|
|
38552
|
+
args: ["show", `:./${relativePath}`],
|
|
38553
38553
|
directory,
|
|
38554
38554
|
maxStdoutBytes: options?.maxBufferBytes
|
|
38555
38555
|
}).pipe(map$3((result) => result.status === 0 ? result.stdout : null)),
|
|
@@ -44160,5 +44160,5 @@ const startLanguageServer = () => {
|
|
|
44160
44160
|
};
|
|
44161
44161
|
//#endregion
|
|
44162
44162
|
export { startLanguageServer };
|
|
44163
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
44164
|
-
//# debugId=
|
|
44163
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0cab34bf-65ac-5994-9a93-41f1b5670387")}catch(e){}}();
|
|
44164
|
+
//# debugId=0cab34bf-65ac-5994-9a93-41f1b5670387
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-doctor",
|
|
3
|
-
"version": "0.7.1-dev.
|
|
3
|
+
"version": "0.7.1-dev.5809083",
|
|
4
4
|
"description": "Your agent writes bad React. This catches it",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"accessibility",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"vscode-uri": "^3.1.0",
|
|
67
67
|
"yaml": "^2.9.0",
|
|
68
68
|
"deslop-js": "0.7.1",
|
|
69
|
-
"oxlint-plugin-react-doctor": "0.7.1-dev.
|
|
69
|
+
"oxlint-plugin-react-doctor": "0.7.1-dev.5809083"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/babel__code-frame": "^7.27.0",
|