react-doctor 0.7.0-dev.574cba6 → 0.7.0-dev.6b21b70
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 +32 -6
- package/dist/index.d.ts +40 -1
- package/dist/index.js +28 -5
- package/dist/lsp.js +23 -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]="e920d892-391e-5c2c-85c7-689bd4fe9775")}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";
|
|
@@ -22475,6 +22475,16 @@ var JsonReportV1 = class extends Class("JsonReportV1")({
|
|
|
22475
22475
|
* successful `baseline` run (`schemaVersion: 2`) and on non-compare scopes.
|
|
22476
22476
|
*/
|
|
22477
22477
|
baselineDegraded: optional(Boolean$1),
|
|
22478
|
+
/**
|
|
22479
|
+
* Whether any scanned project resolved a React-compatible runtime (React
|
|
22480
|
+
* or Preact). `false` means every React-runtime rule family was gated off,
|
|
22481
|
+
* so an empty `diagnostics` array is vacuous — NOT the same as a clean
|
|
22482
|
+
* React scan. Consumers gating on the report (CI, verifiers, hooks) should
|
|
22483
|
+
* treat `reactDetected === false` as "wrong scan target", not "all clear".
|
|
22484
|
+
* Absent when nothing was scanned (`projects` is empty), on error reports,
|
|
22485
|
+
* and on reports from older CLI versions.
|
|
22486
|
+
*/
|
|
22487
|
+
reactDetected: optional(Boolean$1),
|
|
22478
22488
|
diff: NullOr(JsonReportDiffInfo),
|
|
22479
22489
|
projects: ArraySchema(JsonReportProjectEntry),
|
|
22480
22490
|
diagnostics: ArraySchema(Diagnostic),
|
|
@@ -22500,6 +22510,8 @@ var JsonReportV2 = class extends Class("JsonReportV2")({
|
|
|
22500
22510
|
ok: Boolean$1,
|
|
22501
22511
|
directory: String$1,
|
|
22502
22512
|
mode: JsonReportMode,
|
|
22513
|
+
/** See `JsonReportV1.reactDetected`. */
|
|
22514
|
+
reactDetected: optional(Boolean$1),
|
|
22503
22515
|
diff: NullOr(JsonReportDiffInfo),
|
|
22504
22516
|
baseline: JsonReportBaseline,
|
|
22505
22517
|
projects: ArraySchema(JsonReportProjectEntry),
|
|
@@ -40237,10 +40249,17 @@ function* collectSecurityScanFiles(rootDirectory) {
|
|
|
40237
40249
|
}
|
|
40238
40250
|
}
|
|
40239
40251
|
}
|
|
40252
|
+
/**
|
|
40253
|
+
* Whether project discovery resolved a React-compatible runtime (React or
|
|
40254
|
+
* Preact, which ships the same hooks + JSX model). This is the same
|
|
40255
|
+
* predicate that grants the `react` capability, so `false` means every
|
|
40256
|
+
* React-runtime rule family was gated off for the project.
|
|
40257
|
+
*/
|
|
40258
|
+
const hasReactRuntime = (project) => project.reactVersion !== null || project.preactVersion !== null;
|
|
40240
40259
|
const buildCapabilities = (project) => {
|
|
40241
40260
|
const capabilities = /* @__PURE__ */ new Set();
|
|
40242
40261
|
capabilities.add(project.framework);
|
|
40243
|
-
if (project
|
|
40262
|
+
if (hasReactRuntime(project)) capabilities.add("react");
|
|
40244
40263
|
if (project.framework === "expo" || project.framework === "react-native" || project.hasReactNativeWorkspace) capabilities.add("react-native");
|
|
40245
40264
|
if (project.expoVersion !== null) capabilities.add("expo");
|
|
40246
40265
|
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
|
|
@@ -45355,6 +45374,7 @@ const buildJsonReport = (input) => {
|
|
|
45355
45374
|
const worstScoredProject = findWorstScoredProject(projects);
|
|
45356
45375
|
const summary = summarizeDiagnostics(flattenedDiagnostics, worstScoredProject?.score?.score ?? null, worstScoredProject?.score?.label ?? null);
|
|
45357
45376
|
const shared = {
|
|
45377
|
+
...input.scans.length > 0 ? { reactDetected: input.scans.some((scan) => hasReactRuntime(scan.result.project)) } : {},
|
|
45358
45378
|
version: input.version,
|
|
45359
45379
|
ok: true,
|
|
45360
45380
|
directory: input.directory,
|
|
@@ -45818,6 +45838,7 @@ const METRIC = {
|
|
|
45818
45838
|
scanScore: "scan.score",
|
|
45819
45839
|
scanClean: "scan.clean",
|
|
45820
45840
|
scanCheckSkipped: "scan.check_skipped",
|
|
45841
|
+
scanNoReactDetected: "scan.no_react_detected",
|
|
45821
45842
|
baselineDegraded: "baseline.degraded",
|
|
45822
45843
|
ruleFired: "rule.fired",
|
|
45823
45844
|
ruleDisabled: "rule.disabled",
|
|
@@ -45887,7 +45908,7 @@ const makeNoopConsole = () => ({
|
|
|
45887
45908
|
});
|
|
45888
45909
|
//#endregion
|
|
45889
45910
|
//#region src/cli/utils/version.ts
|
|
45890
|
-
const VERSION = "0.7.0-dev.
|
|
45911
|
+
const VERSION = "0.7.0-dev.6b21b70";
|
|
45891
45912
|
//#endregion
|
|
45892
45913
|
//#region src/cli/utils/json-mode.ts
|
|
45893
45914
|
let context = null;
|
|
@@ -46256,13 +46277,13 @@ const isDevVersion = (version) => version === "0.0.0" || version.includes("-");
|
|
|
46256
46277
|
* uploads source-map artifacts under, so stack frames symbolicate. Honors the
|
|
46257
46278
|
* standard `SENTRY_RELEASE` override.
|
|
46258
46279
|
*/
|
|
46259
|
-
const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.7.0-dev.
|
|
46280
|
+
const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.7.0-dev.6b21b70`;
|
|
46260
46281
|
/**
|
|
46261
46282
|
* Deployment environment shown in Sentry's environment filter. Defaults to
|
|
46262
46283
|
* `production` for tagged releases and `development` for dev/unbuilt versions,
|
|
46263
46284
|
* overridable via the standard `SENTRY_ENVIRONMENT` env var.
|
|
46264
46285
|
*/
|
|
46265
|
-
const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.7.0-dev.
|
|
46286
|
+
const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.7.0-dev.6b21b70") ? "development" : "production");
|
|
46266
46287
|
/**
|
|
46267
46288
|
* Performance-tracing sample rate in `[0, 1]`. Reads `SENTRY_TRACES_SAMPLE_RATE`
|
|
46268
46289
|
* (set to `0` to disable tracing) and falls back to
|
|
@@ -62975,6 +62996,11 @@ const finalizeScans = (input) => {
|
|
|
62975
62996
|
const baselineComputed = input.completedScans.length > 0 && input.completedScans.every((scan) => scan.result.baselineDelta !== void 0);
|
|
62976
62997
|
const baselineDegraded = input.baselineIntended && !baselineComputed;
|
|
62977
62998
|
const mode = baselineDegraded ? "diff" : input.mode;
|
|
62999
|
+
const isReactDetected = input.completedScans.some((scan) => hasReactRuntime(scan.result.project));
|
|
63000
|
+
if (input.completedScans.length > 0 && !isReactDetected) {
|
|
63001
|
+
recordCount(METRIC.scanNoReactDetected, 1);
|
|
63002
|
+
cliLogger.warn(`No React project detected at ${input.resolvedDirectory} — React rules were gated off; this is not the same as a clean scan.`);
|
|
63003
|
+
}
|
|
62978
63004
|
const jsonCompletedScans = filterCompletedScansByCategories(input.completedScans, input.categoryFilters);
|
|
62979
63005
|
if (input.isJsonMode) {
|
|
62980
63006
|
const baseline = baselineComputed && baselineDeltas.length > 0 ? {
|
|
@@ -64412,4 +64438,4 @@ Promise.resolve().then(() => assertNoRemovedFlags(process.argv)).then(() => prog
|
|
|
64412
64438
|
export {};
|
|
64413
64439
|
|
|
64414
64440
|
//# sourceMappingURL=cli.js.map
|
|
64415
|
-
//# debugId=
|
|
64441
|
+
//# debugId=e920d892-391e-5c2c-85c7-689bd4fe9775
|
package/dist/index.d.ts
CHANGED
|
@@ -9644,6 +9644,17 @@ interface DiagnoseResult {
|
|
|
9644
9644
|
/** See `InspectResult.skippedCheckReasons`. */
|
|
9645
9645
|
skippedCheckReasons?: Record<string, string>;
|
|
9646
9646
|
project: ProjectInfo;
|
|
9647
|
+
/**
|
|
9648
|
+
* Whether the scanned project resolved a React-compatible runtime (React
|
|
9649
|
+
* or Preact). `false` means every React-runtime rule family was gated
|
|
9650
|
+
* off, so an empty `diagnostics` array is vacuous — NOT the same as a
|
|
9651
|
+
* clean React scan. Consumers gating on the result should treat
|
|
9652
|
+
* `reactDetected === false` as "wrong scan target", not "all clear".
|
|
9653
|
+
* Mirrors `JsonReport.reactDetected`; same predicate as
|
|
9654
|
+
* `hasReactRuntime(result.project)`. Always set by `diagnose()`;
|
|
9655
|
+
* optional so hand-constructed results keep compiling.
|
|
9656
|
+
*/
|
|
9657
|
+
reactDetected?: boolean;
|
|
9647
9658
|
elapsedMilliseconds: number;
|
|
9648
9659
|
}
|
|
9649
9660
|
/**
|
|
@@ -9693,6 +9704,13 @@ interface DiagnoseProjectsResult {
|
|
|
9693
9704
|
projects: ProjectResult[];
|
|
9694
9705
|
diagnostics: Diagnostic[];
|
|
9695
9706
|
score: ScoreResult | null;
|
|
9707
|
+
/**
|
|
9708
|
+
* Whether any successfully scanned project resolved a React-compatible
|
|
9709
|
+
* runtime (React or Preact). Absent when no project scanned successfully.
|
|
9710
|
+
* See `DiagnoseResult.reactDetected` for gating guidance; per-project
|
|
9711
|
+
* detail is on each `ProjectResultOk.reactDetected`.
|
|
9712
|
+
*/
|
|
9713
|
+
reactDetected?: boolean;
|
|
9696
9714
|
elapsedMilliseconds: number;
|
|
9697
9715
|
} //#endregion
|
|
9698
9716
|
//#region src/types/handle-error.d.ts
|
|
@@ -9888,6 +9906,17 @@ interface JsonReportV1$1 {
|
|
|
9888
9906
|
ok: boolean;
|
|
9889
9907
|
directory: string;
|
|
9890
9908
|
mode: JsonReportMode;
|
|
9909
|
+
/**
|
|
9910
|
+
* Whether any scanned project resolved a React-compatible runtime (React
|
|
9911
|
+
* or Preact). `false` means every React-runtime rule family was gated off,
|
|
9912
|
+
* so an empty `diagnostics` array is vacuous — NOT the same as a clean
|
|
9913
|
+
* React scan. Consumers gating on the report (CI, verifiers, hooks) should
|
|
9914
|
+
* treat `reactDetected === false` as "wrong scan target", not "all clear"
|
|
9915
|
+
* (per project, `projects[].project.reactVersion` / `preactVersion` say
|
|
9916
|
+
* which roots were non-React). Absent when nothing was scanned (`projects`
|
|
9917
|
+
* is empty), on error reports, and on reports from older CLI versions.
|
|
9918
|
+
*/
|
|
9919
|
+
reactDetected?: boolean;
|
|
9891
9920
|
diff: JsonReportDiffInfo | null;
|
|
9892
9921
|
projects: JsonReportProjectEntry[];
|
|
9893
9922
|
/**
|
|
@@ -10172,6 +10201,16 @@ declare const summarizeDiagnostics: (diagnostics: Diagnostic[], worstScore?: num
|
|
|
10172
10201
|
declare const defineConfig: (config: ReactDoctorConfig) => ReactDoctorConfig; //#endregion
|
|
10173
10202
|
//#region src/utils/detect-ai-training-environment.d.ts
|
|
10174
10203
|
//#endregion
|
|
10204
|
+
//#region src/utils/has-react-runtime.d.ts
|
|
10205
|
+
/**
|
|
10206
|
+
* Whether project discovery resolved a React-compatible runtime (React or
|
|
10207
|
+
* Preact, which ships the same hooks + JSX model). This is the same
|
|
10208
|
+
* predicate that grants the `react` capability, so `false` means every
|
|
10209
|
+
* React-runtime rule family was gated off for the project.
|
|
10210
|
+
*/
|
|
10211
|
+
declare const hasReactRuntime: (project: ProjectInfo) => boolean; //#endregion
|
|
10212
|
+
//#region src/utils/is-errno-exception.d.ts
|
|
10213
|
+
//#endregion
|
|
10175
10214
|
//#region ../api/dist/index.d.ts
|
|
10176
10215
|
//#region src/diagnose.d.ts
|
|
10177
10216
|
interface Diagnose {
|
|
@@ -10198,5 +10237,5 @@ interface ToJsonReportOptions {
|
|
|
10198
10237
|
}
|
|
10199
10238
|
declare const toJsonReport: (result: DiagnoseResult, options: ToJsonReportOptions) => JsonReport;
|
|
10200
10239
|
//#endregion
|
|
10201
|
-
export { AmbiguousProjectError, type DiagnoseOptions, type DiagnoseProjectsInput, type DiagnoseProjectsResult, type DiagnoseResult, type Diagnostic, type DiffInfo, type JsonReport, type JsonReportDiffInfo, type JsonReportError, type JsonReportMode, type JsonReportProjectEntry, type JsonReportSummary, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, type ProjectDefinition, type ProjectInfo, ProjectNotFoundError, type ProjectResult, type ProjectResultError, type ProjectResultOk, type ReactDoctorConfig, ReactDoctorError, type ScoreResult, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
|
|
10240
|
+
export { AmbiguousProjectError, type DiagnoseOptions, type DiagnoseProjectsInput, type DiagnoseProjectsResult, type DiagnoseResult, type Diagnostic, type DiffInfo, type JsonReport, type JsonReportDiffInfo, type JsonReportError, type JsonReportMode, type JsonReportProjectEntry, type JsonReportSummary, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, type ProjectDefinition, type ProjectInfo, ProjectNotFoundError, type ProjectResult, type ProjectResultError, type ProjectResultOk, type ReactDoctorConfig, ReactDoctorError, type ScoreResult, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
|
|
10202
10241
|
//# sourceMappingURL=index.d.ts.map
|
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]="07deeb70-f47f-5572-9930-e743f970f84f")}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";
|
|
@@ -19374,6 +19374,16 @@ var JsonReportV1 = class extends Class("JsonReportV1")({
|
|
|
19374
19374
|
* successful `baseline` run (`schemaVersion: 2`) and on non-compare scopes.
|
|
19375
19375
|
*/
|
|
19376
19376
|
baselineDegraded: optional(Boolean$1),
|
|
19377
|
+
/**
|
|
19378
|
+
* Whether any scanned project resolved a React-compatible runtime (React
|
|
19379
|
+
* or Preact). `false` means every React-runtime rule family was gated off,
|
|
19380
|
+
* so an empty `diagnostics` array is vacuous — NOT the same as a clean
|
|
19381
|
+
* React scan. Consumers gating on the report (CI, verifiers, hooks) should
|
|
19382
|
+
* treat `reactDetected === false` as "wrong scan target", not "all clear".
|
|
19383
|
+
* Absent when nothing was scanned (`projects` is empty), on error reports,
|
|
19384
|
+
* and on reports from older CLI versions.
|
|
19385
|
+
*/
|
|
19386
|
+
reactDetected: optional(Boolean$1),
|
|
19377
19387
|
diff: NullOr(JsonReportDiffInfo),
|
|
19378
19388
|
projects: ArraySchema(JsonReportProjectEntry),
|
|
19379
19389
|
diagnostics: ArraySchema(Diagnostic),
|
|
@@ -19399,6 +19409,8 @@ var JsonReportV2 = class extends Class("JsonReportV2")({
|
|
|
19399
19409
|
ok: Boolean$1,
|
|
19400
19410
|
directory: String$1,
|
|
19401
19411
|
mode: JsonReportMode,
|
|
19412
|
+
/** See `JsonReportV1.reactDetected`. */
|
|
19413
|
+
reactDetected: optional(Boolean$1),
|
|
19402
19414
|
diff: NullOr(JsonReportDiffInfo),
|
|
19403
19415
|
baseline: JsonReportBaseline,
|
|
19404
19416
|
projects: ArraySchema(JsonReportProjectEntry),
|
|
@@ -37010,10 +37022,17 @@ function* collectSecurityScanFiles(rootDirectory) {
|
|
|
37010
37022
|
}
|
|
37011
37023
|
}
|
|
37012
37024
|
}
|
|
37025
|
+
/**
|
|
37026
|
+
* Whether project discovery resolved a React-compatible runtime (React or
|
|
37027
|
+
* Preact, which ships the same hooks + JSX model). This is the same
|
|
37028
|
+
* predicate that grants the `react` capability, so `false` means every
|
|
37029
|
+
* React-runtime rule family was gated off for the project.
|
|
37030
|
+
*/
|
|
37031
|
+
const hasReactRuntime = (project) => project.reactVersion !== null || project.preactVersion !== null;
|
|
37013
37032
|
const buildCapabilities = (project) => {
|
|
37014
37033
|
const capabilities = /* @__PURE__ */ new Set();
|
|
37015
37034
|
capabilities.add(project.framework);
|
|
37016
|
-
if (project
|
|
37035
|
+
if (hasReactRuntime(project)) capabilities.add("react");
|
|
37017
37036
|
if (project.framework === "expo" || project.framework === "react-native" || project.hasReactNativeWorkspace) capabilities.add("react-native");
|
|
37018
37037
|
if (project.expoVersion !== null) capabilities.add("expo");
|
|
37019
37038
|
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
|
|
@@ -42088,6 +42107,7 @@ const buildJsonReport = (input) => {
|
|
|
42088
42107
|
const worstScoredProject = findWorstScoredProject(projects);
|
|
42089
42108
|
const summary = summarizeDiagnostics(flattenedDiagnostics, worstScoredProject?.score?.score ?? null, worstScoredProject?.score?.label ?? null);
|
|
42090
42109
|
const shared = {
|
|
42110
|
+
...input.scans.length > 0 ? { reactDetected: input.scans.some((scan) => hasReactRuntime(scan.result.project)) } : {},
|
|
42091
42111
|
version: input.version,
|
|
42092
42112
|
ok: true,
|
|
42093
42113
|
directory: input.directory,
|
|
@@ -42317,6 +42337,7 @@ const outputToDiagnoseResult = (output, elapsedMilliseconds) => {
|
|
|
42317
42337
|
skippedChecks,
|
|
42318
42338
|
...Object.keys(skippedCheckReasons).length > 0 ? { skippedCheckReasons } : {},
|
|
42319
42339
|
project: output.project,
|
|
42340
|
+
reactDetected: hasReactRuntime(output.project),
|
|
42320
42341
|
elapsedMilliseconds
|
|
42321
42342
|
};
|
|
42322
42343
|
};
|
|
@@ -42372,10 +42393,12 @@ const diagnoseProjectBatch = async (input) => {
|
|
|
42372
42393
|
const startTime = globalThis.performance.now();
|
|
42373
42394
|
const { projects, concurrency, config: batchConfig, ...baseOptions } = input;
|
|
42374
42395
|
const projectResults = await mapWithConcurrency(projects, concurrency ?? 4, (projectDefinition) => diagnoseProject(projectDefinition, baseOptions, batchConfig));
|
|
42396
|
+
const succeededProjects = projectResults.filter((projectResult) => projectResult.ok);
|
|
42375
42397
|
return {
|
|
42376
42398
|
projects: projectResults,
|
|
42377
|
-
diagnostics:
|
|
42399
|
+
diagnostics: succeededProjects.flatMap((projectResult) => projectResult.diagnostics),
|
|
42378
42400
|
score: findWorstScore(projectResults),
|
|
42401
|
+
...succeededProjects.length > 0 ? { reactDetected: succeededProjects.some((projectResult) => projectResult.reactDetected) } : {},
|
|
42379
42402
|
elapsedMilliseconds: globalThis.performance.now() - startTime
|
|
42380
42403
|
};
|
|
42381
42404
|
};
|
|
@@ -42410,7 +42433,7 @@ const toJsonReport = (result, options) => buildJsonReport({
|
|
|
42410
42433
|
totalElapsedMilliseconds: result.elapsedMilliseconds
|
|
42411
42434
|
});
|
|
42412
42435
|
//#endregion
|
|
42413
|
-
export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
|
|
42436
|
+
export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
|
|
42414
42437
|
|
|
42415
42438
|
//# sourceMappingURL=index.js.map
|
|
42416
|
-
//# debugId=
|
|
42439
|
+
//# debugId=07deeb70-f47f-5572-9930-e743f970f84f
|
package/dist/lsp.js
CHANGED
|
@@ -19410,6 +19410,16 @@ var JsonReportV1 = class extends Class("JsonReportV1")({
|
|
|
19410
19410
|
* successful `baseline` run (`schemaVersion: 2`) and on non-compare scopes.
|
|
19411
19411
|
*/
|
|
19412
19412
|
baselineDegraded: optional(Boolean$1),
|
|
19413
|
+
/**
|
|
19414
|
+
* Whether any scanned project resolved a React-compatible runtime (React
|
|
19415
|
+
* or Preact). `false` means every React-runtime rule family was gated off,
|
|
19416
|
+
* so an empty `diagnostics` array is vacuous — NOT the same as a clean
|
|
19417
|
+
* React scan. Consumers gating on the report (CI, verifiers, hooks) should
|
|
19418
|
+
* treat `reactDetected === false` as "wrong scan target", not "all clear".
|
|
19419
|
+
* Absent when nothing was scanned (`projects` is empty), on error reports,
|
|
19420
|
+
* and on reports from older CLI versions.
|
|
19421
|
+
*/
|
|
19422
|
+
reactDetected: optional(Boolean$1),
|
|
19413
19423
|
diff: NullOr(JsonReportDiffInfo),
|
|
19414
19424
|
projects: ArraySchema(JsonReportProjectEntry),
|
|
19415
19425
|
diagnostics: ArraySchema(Diagnostic),
|
|
@@ -19435,6 +19445,8 @@ var JsonReportV2 = class extends Class("JsonReportV2")({
|
|
|
19435
19445
|
ok: Boolean$1,
|
|
19436
19446
|
directory: String$1,
|
|
19437
19447
|
mode: JsonReportMode,
|
|
19448
|
+
/** See `JsonReportV1.reactDetected`. */
|
|
19449
|
+
reactDetected: optional(Boolean$1),
|
|
19438
19450
|
diff: NullOr(JsonReportDiffInfo),
|
|
19439
19451
|
baseline: JsonReportBaseline,
|
|
19440
19452
|
projects: ArraySchema(JsonReportProjectEntry),
|
|
@@ -36995,10 +37007,17 @@ function* collectSecurityScanFiles(rootDirectory) {
|
|
|
36995
37007
|
}
|
|
36996
37008
|
}
|
|
36997
37009
|
}
|
|
37010
|
+
/**
|
|
37011
|
+
* Whether project discovery resolved a React-compatible runtime (React or
|
|
37012
|
+
* Preact, which ships the same hooks + JSX model). This is the same
|
|
37013
|
+
* predicate that grants the `react` capability, so `false` means every
|
|
37014
|
+
* React-runtime rule family was gated off for the project.
|
|
37015
|
+
*/
|
|
37016
|
+
const hasReactRuntime = (project) => project.reactVersion !== null || project.preactVersion !== null;
|
|
36998
37017
|
const buildCapabilities = (project) => {
|
|
36999
37018
|
const capabilities = /* @__PURE__ */ new Set();
|
|
37000
37019
|
capabilities.add(project.framework);
|
|
37001
|
-
if (project
|
|
37020
|
+
if (hasReactRuntime(project)) capabilities.add("react");
|
|
37002
37021
|
if (project.framework === "expo" || project.framework === "react-native" || project.hasReactNativeWorkspace) capabilities.add("react-native");
|
|
37003
37022
|
if (project.expoVersion !== null) capabilities.add("expo");
|
|
37004
37023
|
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
|
|
@@ -43792,6 +43811,7 @@ const METRIC = {
|
|
|
43792
43811
|
scanScore: "scan.score",
|
|
43793
43812
|
scanClean: "scan.clean",
|
|
43794
43813
|
scanCheckSkipped: "scan.check_skipped",
|
|
43814
|
+
scanNoReactDetected: "scan.no_react_detected",
|
|
43795
43815
|
baselineDegraded: "baseline.degraded",
|
|
43796
43816
|
ruleFired: "rule.fired",
|
|
43797
43817
|
ruleDisabled: "rule.disabled",
|
|
@@ -44135,5 +44155,5 @@ const startLanguageServer = () => {
|
|
|
44135
44155
|
};
|
|
44136
44156
|
//#endregion
|
|
44137
44157
|
export { startLanguageServer };
|
|
44138
|
-
!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]="
|
|
44139
|
-
//# debugId=
|
|
44158
|
+
!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]="1c7dd926-433e-5edb-a6d7-2bb0a9f6df24")}catch(e){}}();
|
|
44159
|
+
//# debugId=1c7dd926-433e-5edb-a6d7-2bb0a9f6df24
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-doctor",
|
|
3
|
-
"version": "0.7.0-dev.
|
|
3
|
+
"version": "0.7.0-dev.6b21b70",
|
|
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.0",
|
|
69
|
-
"oxlint-plugin-react-doctor": "0.7.0-dev.
|
|
69
|
+
"oxlint-plugin-react-doctor": "0.7.0-dev.6b21b70"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/babel__code-frame": "^7.27.0",
|