react-doctor 0.7.4-dev.a31f5e8 → 0.7.4-dev.b686594
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 +0 -8
- package/dist/cli.js +79 -276
- package/dist/index.d.ts +5 -47
- package/dist/index.js +64 -251
- package/dist/lsp.js +33 -174
- package/package.json +4 -4
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]="ef42af6f-0ecf-599f-a6cb-63bf1f1bd562")}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";
|
|
@@ -8,8 +8,8 @@ import path from "node:path";
|
|
|
8
8
|
import * as NFS from "node:fs";
|
|
9
9
|
import fs, { mkdtempSync, rmSync } from "node:fs";
|
|
10
10
|
import process$1 from "node:process";
|
|
11
|
-
import reactDoctorPlugin, { ALL_REACT_DOCTOR_RULE_KEYS, CROSS_FILE_DEPENDENCY_COLLECTORS, CROSS_FILE_RULE_IDS, FRAMEWORK_SPECIFIC_RULE_KEYS, FRAMEWORK_TOKENS, MOTION_LIBRARY_PACKAGES, REACT_COMPILER_RULES, REACT_DOCTOR_RULES, classifySecurityScanFile, collectCrossFileDependencyProbes, resetManifestCaches, shouldReadSecurityScanContent } from "oxlint-plugin-react-doctor";
|
|
12
11
|
import ts from "typescript";
|
|
12
|
+
import reactDoctorPlugin, { ALL_REACT_DOCTOR_RULE_KEYS, CROSS_FILE_DEPENDENCY_COLLECTORS, CROSS_FILE_RULE_IDS, FRAMEWORK_SPECIFIC_RULE_KEYS, MOTION_LIBRARY_PACKAGES, REACT_COMPILER_RULES, REACT_DOCTOR_RULES, classifySecurityScanFile, collectCrossFileDependencyProbes, resetManifestCaches, shouldReadSecurityScanContent } from "oxlint-plugin-react-doctor";
|
|
13
13
|
import * as OS from "node:os";
|
|
14
14
|
import os, { tmpdir } from "node:os";
|
|
15
15
|
import { parseJSON5 } from "confbox";
|
|
@@ -22411,45 +22411,12 @@ var Diagnostic = class extends Class("Diagnostic")({
|
|
|
22411
22411
|
relatedLocations: optional(ArraySchema(DiagnosticRelatedLocation)),
|
|
22412
22412
|
fixGroupId: optional(String$1)
|
|
22413
22413
|
}) {};
|
|
22414
|
-
var JsonReportDiagnosticV3 = class extends Class("JsonReportDiagnosticV3")({
|
|
22415
|
-
id: String$1,
|
|
22416
|
-
normalizedFilePath: String$1,
|
|
22417
|
-
filePath: String$1,
|
|
22418
|
-
plugin: String$1,
|
|
22419
|
-
rule: String$1,
|
|
22420
|
-
severity: Severity,
|
|
22421
|
-
tags: ArraySchema(String$1),
|
|
22422
|
-
title: optional(String$1),
|
|
22423
|
-
message: String$1,
|
|
22424
|
-
help: String$1,
|
|
22425
|
-
url: optional(String$1),
|
|
22426
|
-
line: Number$1,
|
|
22427
|
-
column: Number$1,
|
|
22428
|
-
offset: optional(Number$1),
|
|
22429
|
-
length: optional(Number$1),
|
|
22430
|
-
endLine: optional(Number$1),
|
|
22431
|
-
endColumn: optional(Number$1),
|
|
22432
|
-
category: String$1,
|
|
22433
|
-
matchByOccurrence: optional(Boolean$1),
|
|
22434
|
-
fileContext: optional(Literals(["test", "story"])),
|
|
22435
|
-
suppressionHint: optional(String$1),
|
|
22436
|
-
relatedLocations: optional(ArraySchema(DiagnosticRelatedLocation)),
|
|
22437
|
-
fixGroupId: optional(String$1)
|
|
22438
|
-
}) {};
|
|
22439
|
-
/**
|
|
22440
|
-
* Deterministic identity string for a diagnostic. Same diagnostic
|
|
22441
|
-
* across two scans yields the same identity; lets baselines,
|
|
22442
|
-
* suppression files, content-hash caches, and IDE "ignore this"
|
|
22443
|
-
* actions all key off one shared shape.
|
|
22444
|
-
*/
|
|
22445
|
-
const buildDiagnosticIdentity = (input) => `${input.filePath}::${input.line}:${input.column}::${input.plugin}/${input.rule}`;
|
|
22446
22414
|
const JsonReportMode = Literals([
|
|
22447
22415
|
"full",
|
|
22448
22416
|
"diff",
|
|
22449
22417
|
"staged",
|
|
22450
22418
|
"baseline"
|
|
22451
22419
|
]);
|
|
22452
|
-
const Framework = Literals(FRAMEWORK_TOKENS);
|
|
22453
22420
|
var JsonReportSummary = class extends Class("JsonReportSummary")({
|
|
22454
22421
|
errorCount: Number$1,
|
|
22455
22422
|
warningCount: Number$1,
|
|
@@ -22487,22 +22454,13 @@ var JsonReportProjectEntry = class extends Class("JsonReportProjectEntry")({
|
|
|
22487
22454
|
scannedFileCount: optional(Number$1),
|
|
22488
22455
|
elapsedMilliseconds: Number$1
|
|
22489
22456
|
}) {};
|
|
22490
|
-
|
|
22491
|
-
|
|
22492
|
-
|
|
22493
|
-
|
|
22494
|
-
|
|
22495
|
-
|
|
22496
|
-
|
|
22497
|
-
skippedChecks: ArraySchema(String$1),
|
|
22498
|
-
skippedCheckReasons: optional(Record$1(String$1, String$1)),
|
|
22499
|
-
analyzedFiles: ArraySchema(String$1),
|
|
22500
|
-
analyzedFileCount: Number$1,
|
|
22501
|
-
complete: Boolean$1,
|
|
22502
|
-
scannedFileCount: optional(Number$1),
|
|
22503
|
-
elapsedMilliseconds: Number$1
|
|
22504
|
-
}) {};
|
|
22505
|
-
/** Original full, diff, and staged report contract. */
|
|
22457
|
+
/**
|
|
22458
|
+
* Versioned JsonReport schema. `JsonReport` is a `Schema.Union` so we
|
|
22459
|
+
* can add `schemaVersion: 2` later as one new union member without
|
|
22460
|
+
* breaking existing v1 consumers (the GitHub Action keys off the
|
|
22461
|
+
* version literal). Today's union is single-arm; the shape is
|
|
22462
|
+
* intentional.
|
|
22463
|
+
*/
|
|
22506
22464
|
var JsonReportV1 = class extends Class("JsonReportV1")({
|
|
22507
22465
|
schemaVersion: Literal(1),
|
|
22508
22466
|
version: String$1,
|
|
@@ -22563,27 +22521,7 @@ var JsonReportV2 = class extends Class("JsonReportV2")({
|
|
|
22563
22521
|
elapsedMilliseconds: Number$1,
|
|
22564
22522
|
error: NullOr(JsonReportError)
|
|
22565
22523
|
}) {};
|
|
22566
|
-
|
|
22567
|
-
schemaVersion: Literal(3),
|
|
22568
|
-
version: String$1,
|
|
22569
|
-
ok: Boolean$1,
|
|
22570
|
-
directory: String$1,
|
|
22571
|
-
mode: JsonReportMode,
|
|
22572
|
-
baselineDegraded: optional(Boolean$1),
|
|
22573
|
-
reactDetected: optional(Boolean$1),
|
|
22574
|
-
diff: NullOr(JsonReportDiffInfo),
|
|
22575
|
-
baseline: optional(JsonReportBaseline),
|
|
22576
|
-
projects: ArraySchema(JsonReportProjectEntryV3),
|
|
22577
|
-
diagnostics: ArraySchema(JsonReportDiagnosticV3),
|
|
22578
|
-
summary: JsonReportSummary,
|
|
22579
|
-
elapsedMilliseconds: Number$1,
|
|
22580
|
-
error: NullOr(JsonReportError)
|
|
22581
|
-
}) {};
|
|
22582
|
-
Union([
|
|
22583
|
-
JsonReportV1,
|
|
22584
|
-
JsonReportV2,
|
|
22585
|
-
JsonReportV3
|
|
22586
|
-
]);
|
|
22524
|
+
Union([JsonReportV1, JsonReportV2]);
|
|
22587
22525
|
//#endregion
|
|
22588
22526
|
//#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js
|
|
22589
22527
|
var require_constants$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
|
|
@@ -37147,22 +37085,6 @@ const isPackageJsonReanimatedAware = (packageJson) => {
|
|
|
37147
37085
|
};
|
|
37148
37086
|
return Object.hasOwn(allDependencies, REANIMATED_DEPENDENCY_NAME$1);
|
|
37149
37087
|
};
|
|
37150
|
-
const SSR_DEPENDENCY_NAMES = new Set([
|
|
37151
|
-
"@react-router/cloudflare",
|
|
37152
|
-
"@react-router/node",
|
|
37153
|
-
"@react-router/serve",
|
|
37154
|
-
"vike",
|
|
37155
|
-
"vite-plugin-ssr"
|
|
37156
|
-
]);
|
|
37157
|
-
const isPackageJsonSsrAware = (packageJson) => {
|
|
37158
|
-
const allDependencies = {
|
|
37159
|
-
...packageJson.peerDependencies,
|
|
37160
|
-
...packageJson.dependencies,
|
|
37161
|
-
...packageJson.devDependencies,
|
|
37162
|
-
...packageJson.optionalDependencies
|
|
37163
|
-
};
|
|
37164
|
-
return Object.keys(allDependencies).some((packageName) => SSR_DEPENDENCY_NAMES.has(packageName));
|
|
37165
|
-
};
|
|
37166
37088
|
const getWorkspacePatterns = (rootDirectory, packageJson) => {
|
|
37167
37089
|
const pnpmPatterns = parsePnpmWorkspacePatterns(rootDirectory);
|
|
37168
37090
|
if (pnpmPatterns.length > 0) return pnpmPatterns;
|
|
@@ -37303,7 +37225,6 @@ const evaluateManifestFacts = (facts, packageJson, directory) => {
|
|
|
37303
37225
|
}
|
|
37304
37226
|
facts.hasReactNativeAwarePackage = facts.hasReactNativeAwarePackage || isPackageJsonReactNativeAware(packageJson);
|
|
37305
37227
|
facts.hasReanimatedAwarePackage = facts.hasReanimatedAwarePackage || isPackageJsonReanimatedAware(packageJson);
|
|
37306
|
-
facts.hasSsrDependency = facts.hasSsrDependency || isPackageJsonSsrAware(packageJson);
|
|
37307
37228
|
};
|
|
37308
37229
|
const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGroup }) => {
|
|
37309
37230
|
const facts = {
|
|
@@ -37325,7 +37246,6 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
|
|
|
37325
37246
|
},
|
|
37326
37247
|
hasReactNativeAwarePackage: false,
|
|
37327
37248
|
hasReanimatedAwarePackage: false,
|
|
37328
|
-
hasSsrDependency: false,
|
|
37329
37249
|
reanimatedVersion: null
|
|
37330
37250
|
};
|
|
37331
37251
|
evaluateManifestFacts(facts, rootPackageJson, rootDirectory);
|
|
@@ -37562,7 +37482,6 @@ const discoverProjectWithoutPackageJson = (directory) => {
|
|
|
37562
37482
|
hasTypeScript: hasOwnTsConfig,
|
|
37563
37483
|
hasReactCompiler: false,
|
|
37564
37484
|
hasTanStackQuery: false,
|
|
37565
|
-
hasSsrDependency: false,
|
|
37566
37485
|
preactVersion: null,
|
|
37567
37486
|
preactMajorVersion: null,
|
|
37568
37487
|
hasReactNativeWorkspace: false,
|
|
@@ -37682,7 +37601,6 @@ const discoverProject = (directory) => {
|
|
|
37682
37601
|
hasTypeScript,
|
|
37683
37602
|
hasReactCompiler: detectReactCompiler(directory, packageJson),
|
|
37684
37603
|
hasTanStackQuery: hasTanStackQuery(packageJson),
|
|
37685
|
-
hasSsrDependency: workspaceFacts.hasSsrDependency,
|
|
37686
37604
|
preactVersion,
|
|
37687
37605
|
preactMajorVersion: parseReactMajor(preactVersion),
|
|
37688
37606
|
hasReactNativeWorkspace,
|
|
@@ -40536,12 +40454,6 @@ const CLIENT_ONLY_FRAMEWORKS = new Set([
|
|
|
40536
40454
|
"react-native",
|
|
40537
40455
|
"expo"
|
|
40538
40456
|
]);
|
|
40539
|
-
const SSR_FRAMEWORKS = new Set([
|
|
40540
|
-
"nextjs",
|
|
40541
|
-
"remix",
|
|
40542
|
-
"gatsby",
|
|
40543
|
-
"tanstack-start"
|
|
40544
|
-
]);
|
|
40545
40457
|
const addMajorLadder = (capabilities, name, major, earliest, latest) => {
|
|
40546
40458
|
if (major === null) return;
|
|
40547
40459
|
const cappedMajor = Math.min(major, latest);
|
|
@@ -40554,7 +40466,6 @@ const buildCapabilities = (project) => {
|
|
|
40554
40466
|
if (project.framework === "expo" || project.framework === "react-native" || project.hasReactNativeWorkspace) capabilities.add("react-native");
|
|
40555
40467
|
if (project.expoVersion !== null) capabilities.add("expo");
|
|
40556
40468
|
if ((project.framework === "nextjs" || project.framework === "tanstack-start" || project.framework === "remix") && !project.isStaticExport) capabilities.add("server-actions");
|
|
40557
|
-
if (SSR_FRAMEWORKS.has(project.framework) || project.hasSsrDependency) capabilities.add("ssr");
|
|
40558
40469
|
if (CLIENT_ONLY_FRAMEWORKS.has(project.framework)) capabilities.add("client-only");
|
|
40559
40470
|
if (project.isStaticExport) capabilities.add("nextjs:static-export");
|
|
40560
40471
|
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
|
|
@@ -43975,8 +43886,6 @@ const spawnLintBatches = async (input) => {
|
|
|
43975
43886
|
const reasonHint = firstDropReason ? ` — first failure: ${firstDropReason}` : "";
|
|
43976
43887
|
reportSkippedFiles(droppedFiles, (fileListPreview) => `${droppedFiles.length} file(s) failed to lint and were skipped (${fileListPreview})${reasonHint}`);
|
|
43977
43888
|
reportSkippedFiles(outcome.deadlineSkippedFiles, (fileListPreview) => `${outcome.deadlineSkippedFiles.length} file(s) skipped — max scan duration reached before they were linted (${fileListPreview})`);
|
|
43978
|
-
const unavailableFiles = new Set([...droppedFiles, ...outcome.deadlineSkippedFiles]);
|
|
43979
|
-
input.onAnalyzedFiles?.([...new Set(fileBatches.flat().filter((filePath) => !unavailableFiles.has(filePath)))].sort());
|
|
43980
43889
|
return dedupeDiagnostics(diagnostics);
|
|
43981
43890
|
};
|
|
43982
43891
|
let didValidate = false;
|
|
@@ -44233,18 +44142,12 @@ const reactHooksJsPluginDropNote = (error) => {
|
|
|
44233
44142
|
* 6. always restore disable directives + clean up the temp dir
|
|
44234
44143
|
*/
|
|
44235
44144
|
const runOxlint = async (options) => {
|
|
44236
|
-
const { rootDirectory, project, includePaths, nodeBinaryPath = process.execPath, customRulesOnly = false, respectInlineDisables = true, adoptExistingLintConfig = true, ignoredTags = /* @__PURE__ */ new Set(), userConfig, configSourceDirectory = rootDirectory, onPartialFailure,
|
|
44145
|
+
const { rootDirectory, project, includePaths, nodeBinaryPath = process.execPath, customRulesOnly = false, respectInlineDisables = true, adoptExistingLintConfig = true, ignoredTags = /* @__PURE__ */ new Set(), userConfig, configSourceDirectory = rootDirectory, onPartialFailure, perFileLintCacheEnabled = false, sidecarLintCacheEnabled = false, onCacheStats, onSidecarStats, spawnTimeoutMs, outputMaxBytes, lintBatchOrdering = "cost" } = options;
|
|
44237
44146
|
const serverAuthFunctionNames = Array.isArray(userConfig?.serverAuthFunctionNames) ? userConfig.serverAuthFunctionNames.filter((entry) => typeof entry === "string" && entry.length > 0) : void 0;
|
|
44238
44147
|
const severityControls = buildRuleSeverityControls(userConfig);
|
|
44239
44148
|
validateRuleRegistration();
|
|
44240
44149
|
resetManifestCaches();
|
|
44241
|
-
if (includePaths !== void 0 && includePaths.length === 0)
|
|
44242
|
-
onFileCoverage?.({
|
|
44243
|
-
candidateFiles: [],
|
|
44244
|
-
analyzedFiles: []
|
|
44245
|
-
});
|
|
44246
|
-
return [];
|
|
44247
|
-
}
|
|
44150
|
+
if (includePaths !== void 0 && includePaths.length === 0) return [];
|
|
44248
44151
|
const pluginPath = resolvePluginPath();
|
|
44249
44152
|
const extendsPaths = (adoptExistingLintConfig && !customRulesOnly ? detectUserLintConfigPaths(rootDirectory) : []).filter(canOxlintExtendConfig);
|
|
44250
44153
|
const userPlugins = resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
|
|
@@ -44305,7 +44208,6 @@ const runOxlint = async (options) => {
|
|
|
44305
44208
|
const runConfigOverFiles = async (buildConfigForPass, configFileName, files, fileProgress) => {
|
|
44306
44209
|
if (files.length === 0) return {
|
|
44307
44210
|
diagnostics: [],
|
|
44308
|
-
analyzedFiles: [],
|
|
44309
44211
|
didDropReactHooksJsPlugin: false,
|
|
44310
44212
|
hadPartialFailure: false
|
|
44311
44213
|
};
|
|
@@ -44317,32 +44219,24 @@ const runOxlint = async (options) => {
|
|
|
44317
44219
|
const passConfigPath = Path.join(configDirectory, configFileName);
|
|
44318
44220
|
const passBaseArgs = makeBaseArgs(passConfigPath);
|
|
44319
44221
|
const passFileBatches = buildFileBatches(passBaseArgs, files);
|
|
44320
|
-
|
|
44321
|
-
|
|
44322
|
-
|
|
44323
|
-
|
|
44324
|
-
|
|
44325
|
-
|
|
44326
|
-
|
|
44327
|
-
|
|
44328
|
-
|
|
44329
|
-
|
|
44330
|
-
|
|
44331
|
-
|
|
44332
|
-
|
|
44333
|
-
|
|
44334
|
-
spawnTimeoutMs,
|
|
44335
|
-
outputMaxBytes,
|
|
44336
|
-
concurrency: options.concurrency,
|
|
44337
|
-
signal: options.signal,
|
|
44338
|
-
deadlineEpochMs: options.deadlineEpochMs
|
|
44339
|
-
});
|
|
44340
|
-
};
|
|
44222
|
+
const spawnPass = () => spawnLintBatches({
|
|
44223
|
+
baseArgs: passBaseArgs,
|
|
44224
|
+
fileBatches: passFileBatches,
|
|
44225
|
+
rootDirectory,
|
|
44226
|
+
nodeBinaryPath,
|
|
44227
|
+
project,
|
|
44228
|
+
onPartialFailure: reportPartialFailure,
|
|
44229
|
+
onFileProgress: fileProgress,
|
|
44230
|
+
spawnTimeoutMs,
|
|
44231
|
+
outputMaxBytes,
|
|
44232
|
+
concurrency: options.concurrency,
|
|
44233
|
+
signal: options.signal,
|
|
44234
|
+
deadlineEpochMs: options.deadlineEpochMs
|
|
44235
|
+
});
|
|
44341
44236
|
writeOxlintConfig(passConfigPath, buildConfigForPass({}));
|
|
44342
44237
|
try {
|
|
44343
44238
|
return {
|
|
44344
44239
|
diagnostics: await spawnPass(),
|
|
44345
|
-
analyzedFiles,
|
|
44346
44240
|
didDropReactHooksJsPlugin: false,
|
|
44347
44241
|
hadPartialFailure
|
|
44348
44242
|
};
|
|
@@ -44354,7 +44248,6 @@ const runOxlint = async (options) => {
|
|
|
44354
44248
|
reportPartialFailure(reactHooksJsDropNote);
|
|
44355
44249
|
return {
|
|
44356
44250
|
diagnostics,
|
|
44357
|
-
analyzedFiles,
|
|
44358
44251
|
didDropReactHooksJsPlugin: true,
|
|
44359
44252
|
hadPartialFailure
|
|
44360
44253
|
};
|
|
@@ -44430,7 +44323,6 @@ const runOxlint = async (options) => {
|
|
|
44430
44323
|
const missFileSet = new Set(missFiles);
|
|
44431
44324
|
const hitFiles = candidateFiles.filter((candidateFile) => !missFileSet.has(candidateFile));
|
|
44432
44325
|
const sidecarReplayedDiagnostics = [];
|
|
44433
|
-
const sidecarReplayedFiles = [];
|
|
44434
44326
|
const sidecarLintFiles = [];
|
|
44435
44327
|
if (sidecarCache === null) sidecarLintFiles.push(...hitFiles);
|
|
44436
44328
|
else {
|
|
@@ -44438,10 +44330,8 @@ const runOxlint = async (options) => {
|
|
|
44438
44330
|
for (const hitFile of hitFiles) {
|
|
44439
44331
|
const cacheKey = cacheKeyByFile.get(hitFile);
|
|
44440
44332
|
const entry = cacheKey === void 0 ? null : sidecarCache.lookup(cacheKey);
|
|
44441
|
-
if (entry !== null && entry.probes.every((probe) => probeAnswers.answerFor(probe.kind, probe.path) === probe.answer))
|
|
44442
|
-
|
|
44443
|
-
sidecarReplayedDiagnostics.push(...entry.diagnostics);
|
|
44444
|
-
} else sidecarLintFiles.push(hitFile);
|
|
44333
|
+
if (entry !== null && entry.probes.every((probe) => probeAnswers.answerFor(probe.kind, probe.path) === probe.answer)) sidecarReplayedDiagnostics.push(...entry.diagnostics);
|
|
44334
|
+
else sidecarLintFiles.push(hitFile);
|
|
44445
44335
|
if (performance.now() - verifySliceStartedAt >= 12) {
|
|
44446
44336
|
await yieldToEventLoop();
|
|
44447
44337
|
verifySliceStartedAt = performance.now();
|
|
@@ -44467,7 +44357,6 @@ const runOxlint = async (options) => {
|
|
|
44467
44357
|
sidecarRuleIdFilter: new Set(unboundedSidecarRuleIds)
|
|
44468
44358
|
}), "oxlintrc.sidecar-unbounded.json", hitFiles, void 0) : {
|
|
44469
44359
|
diagnostics: [],
|
|
44470
|
-
analyzedFiles: [],
|
|
44471
44360
|
didDropReactHooksJsPlugin: false,
|
|
44472
44361
|
hadPartialFailure: false
|
|
44473
44362
|
};
|
|
@@ -44498,15 +44387,6 @@ const runOxlint = async (options) => {
|
|
|
44498
44387
|
probesByFile: await missProbesTask
|
|
44499
44388
|
}]
|
|
44500
44389
|
});
|
|
44501
|
-
const analyzedFileSet = new Set(fullResult.analyzedFiles);
|
|
44502
|
-
const boundedSidecarAnalyzedFileSet = new Set(boundedSidecarResult.analyzedFiles);
|
|
44503
|
-
const unboundedSidecarAnalyzedFileSet = new Set(unboundedSidecarResult.analyzedFiles);
|
|
44504
|
-
const sidecarReplayedFileSet = new Set(sidecarReplayedFiles);
|
|
44505
|
-
for (const hitFile of hitFiles) if (useSidecarCache ? (sidecarReplayedFileSet.has(hitFile) || boundedSidecarAnalyzedFileSet.has(hitFile)) && (unboundedSidecarRuleIds.length === 0 || unboundedSidecarAnalyzedFileSet.has(hitFile)) : boundedSidecarAnalyzedFileSet.has(hitFile)) analyzedFileSet.add(hitFile);
|
|
44506
|
-
onFileCoverage?.({
|
|
44507
|
-
candidateFiles,
|
|
44508
|
-
analyzedFiles: candidateFiles.filter((candidateFile) => analyzedFileSet.has(candidateFile))
|
|
44509
|
-
});
|
|
44510
44390
|
return dedupeDiagnostics([
|
|
44511
44391
|
...replayedDiagnostics,
|
|
44512
44392
|
...fullResult.diagnostics,
|
|
@@ -44517,7 +44397,6 @@ const runOxlint = async (options) => {
|
|
|
44517
44397
|
}
|
|
44518
44398
|
const baseArgs = makeBaseArgs(configPath);
|
|
44519
44399
|
const fileBatches = buildFileBatches(baseArgs, candidateFiles);
|
|
44520
|
-
let analyzedFiles = [];
|
|
44521
44400
|
const runBatches = () => spawnLintBatches({
|
|
44522
44401
|
baseArgs,
|
|
44523
44402
|
fileBatches,
|
|
@@ -44525,9 +44404,6 @@ const runOxlint = async (options) => {
|
|
|
44525
44404
|
nodeBinaryPath,
|
|
44526
44405
|
project,
|
|
44527
44406
|
onPartialFailure,
|
|
44528
|
-
onAnalyzedFiles: (filePaths) => {
|
|
44529
|
-
analyzedFiles = filePaths;
|
|
44530
|
-
},
|
|
44531
44407
|
onFileProgress: options.onFileProgress,
|
|
44532
44408
|
spawnTimeoutMs,
|
|
44533
44409
|
outputMaxBytes,
|
|
@@ -44537,12 +44413,7 @@ const runOxlint = async (options) => {
|
|
|
44537
44413
|
});
|
|
44538
44414
|
writeOxlintConfig(configPath, buildConfig({ extendsPaths }));
|
|
44539
44415
|
try {
|
|
44540
|
-
|
|
44541
|
-
onFileCoverage?.({
|
|
44542
|
-
candidateFiles,
|
|
44543
|
-
analyzedFiles
|
|
44544
|
-
});
|
|
44545
|
-
return diagnostics;
|
|
44416
|
+
return await runBatches();
|
|
44546
44417
|
} catch (error) {
|
|
44547
44418
|
const reactHooksJsDropNote = reactHooksJsPluginDropNote(error);
|
|
44548
44419
|
if (reactHooksJsDropNote !== null) {
|
|
@@ -44552,20 +44423,11 @@ const runOxlint = async (options) => {
|
|
|
44552
44423
|
}));
|
|
44553
44424
|
const diagnostics = await runBatches();
|
|
44554
44425
|
onPartialFailure?.(reactHooksJsDropNote);
|
|
44555
|
-
onFileCoverage?.({
|
|
44556
|
-
candidateFiles,
|
|
44557
|
-
analyzedFiles
|
|
44558
|
-
});
|
|
44559
44426
|
return diagnostics;
|
|
44560
44427
|
}
|
|
44561
44428
|
if (extendsPaths.length === 0) throw error;
|
|
44562
44429
|
writeOxlintConfig(configPath, buildConfig({ extendsPaths: [] }));
|
|
44563
|
-
|
|
44564
|
-
onFileCoverage?.({
|
|
44565
|
-
candidateFiles,
|
|
44566
|
-
analyzedFiles
|
|
44567
|
-
});
|
|
44568
|
-
return diagnostics;
|
|
44430
|
+
return await runBatches();
|
|
44569
44431
|
}
|
|
44570
44432
|
} finally {
|
|
44571
44433
|
restoreDisableDirectives();
|
|
@@ -44645,7 +44507,6 @@ var Linter = class Linter extends Service()("react-doctor/Linter") {
|
|
|
44645
44507
|
onPartialFailure: (reason) => {
|
|
44646
44508
|
collectedFailures.push(reason);
|
|
44647
44509
|
},
|
|
44648
|
-
onFileCoverage: input.onFileCoverage,
|
|
44649
44510
|
onFileProgress: input.onFileProgress,
|
|
44650
44511
|
perFileLintCacheEnabled,
|
|
44651
44512
|
sidecarLintCacheEnabled,
|
|
@@ -45353,7 +45214,6 @@ const resolveGithubActionsScoreMetadata = (environment = process.env) => {
|
|
|
45353
45214
|
...actorAssociation !== void 0 ? { githubActorAssociation: actorAssociation } : {}
|
|
45354
45215
|
};
|
|
45355
45216
|
};
|
|
45356
|
-
const toNormalizedRelativePath = (filePath, rootDirectory) => Path.relative(Path.resolve(rootDirectory), Path.resolve(rootDirectory, filePath)).replaceAll("\\", "/") || ".";
|
|
45357
45217
|
const NO_HOOKS = {
|
|
45358
45218
|
beforeLint: () => void_,
|
|
45359
45219
|
afterLint: () => void_
|
|
@@ -45452,7 +45312,7 @@ const runInspect = (input, hooks = {}) => gen(function* () {
|
|
|
45452
45312
|
repo
|
|
45453
45313
|
}).pipe(orElseSucceed(() => null)) : succeed$2(null));
|
|
45454
45314
|
const lintIncludePaths = (input.skipJsxIncludeFilter ? input.includePaths.length > 0 ? [...input.includePaths] : void 0 : computeExplicitLintIncludePaths([...input.includePaths], project)) ?? resolveLintIncludePaths(scanDirectory, resolvedConfig.config, project);
|
|
45455
|
-
const
|
|
45315
|
+
const scannedFilePaths = input.suppressScanSummary ? (lintIncludePaths ?? (yield* filesService.listSourceFiles(scanDirectory))).map((relativePath) => Path.resolve(scanDirectory, relativePath)) : [];
|
|
45456
45316
|
const beforeLint = hooks.beforeLint ?? NO_HOOKS.beforeLint;
|
|
45457
45317
|
const afterLint = hooks.afterLint ?? NO_HOOKS.afterLint;
|
|
45458
45318
|
yield* beforeLint(project, lintIncludePaths ?? void 0);
|
|
@@ -45557,7 +45417,6 @@ const runInspect = (input, hooks = {}) => gen(function* () {
|
|
|
45557
45417
|
let deadCodeCacheHit = null;
|
|
45558
45418
|
let deadCodeSummaryCacheHits = null;
|
|
45559
45419
|
let deadCodeSummaryCacheMisses = null;
|
|
45560
|
-
const lintFileCoverageState = { value: null };
|
|
45561
45420
|
const baseLintStream = linterService.run({
|
|
45562
45421
|
rootDirectory: scanDirectory,
|
|
45563
45422
|
project,
|
|
@@ -45573,9 +45432,6 @@ const runInspect = (input, hooks = {}) => gen(function* () {
|
|
|
45573
45432
|
lastReportedTotalFileCount = totalFileCount;
|
|
45574
45433
|
runSync(scanProgress.update(`Scanning files (${scannedFileCount}/${totalFileCount})${workerCountSuffix}...`));
|
|
45575
45434
|
},
|
|
45576
|
-
onFileCoverage: (coverage) => {
|
|
45577
|
-
lintFileCoverageState.value = coverage;
|
|
45578
|
-
},
|
|
45579
45435
|
onCacheStats: (cacheHitFileCount, totalConsideredFileCount) => {
|
|
45580
45436
|
lintCacheHitFileCount = cacheHitFileCount;
|
|
45581
45437
|
lintCacheTotalFileCount = totalConsideredFileCount;
|
|
@@ -45606,10 +45462,7 @@ const runInspect = (input, hooks = {}) => gen(function* () {
|
|
|
45606
45462
|
const lintFailureState = yield* get$2(lintFailure);
|
|
45607
45463
|
yield* afterLint(lintFailureState.didFail);
|
|
45608
45464
|
if (lintFailureState.didFail) yield* scanProgress.fail(formatLintFailText(lintFailureState.reasonTag, process.version));
|
|
45609
|
-
const
|
|
45610
|
-
const analyzedFiles = lintFileCoverageState.value === null ? [] : [...new Set(lintFileCoverageState.value.analyzedFiles.map((filePath) => toNormalizedRelativePath(filePath, scanDirectory)))].sort();
|
|
45611
|
-
const totalFileCount = candidateFiles.length || lastReportedTotalFileCount || (lintIncludePaths?.length ?? project.sourceFileCount);
|
|
45612
|
-
const scannedFilePaths = input.suppressScanSummary ? candidateFiles.length > 0 ? candidateFiles.map((filePath) => Path.resolve(scanDirectory, filePath)) : fallbackScannedFilePaths : [];
|
|
45465
|
+
const totalFileCount = lastReportedTotalFileCount || (lintIncludePaths?.length ?? project.sourceFileCount);
|
|
45613
45466
|
const scannedFilesLabel = `${totalFileCount} ${totalFileCount === 1 ? "file" : "files"}`;
|
|
45614
45467
|
let deadCodeCollected = [];
|
|
45615
45468
|
if (lintFailureState.didFail) {
|
|
@@ -45691,7 +45544,6 @@ const runInspect = (input, hooks = {}) => gen(function* () {
|
|
|
45691
45544
|
deadCodeOverlapped: shouldOverlapDeadCode,
|
|
45692
45545
|
scannedFileCount: totalFileCount,
|
|
45693
45546
|
scannedFilePaths,
|
|
45694
|
-
analyzedFiles,
|
|
45695
45547
|
scanElapsedMilliseconds,
|
|
45696
45548
|
scanConcurrency,
|
|
45697
45549
|
supplyChainOverlapTimedOut: supplyChainResult.timedOut,
|
|
@@ -45967,7 +45819,7 @@ const buildJsonReportError = (input) => {
|
|
|
45967
45819
|
sentryEventId
|
|
45968
45820
|
};
|
|
45969
45821
|
return {
|
|
45970
|
-
schemaVersion:
|
|
45822
|
+
schemaVersion: 1,
|
|
45971
45823
|
version: input.version,
|
|
45972
45824
|
ok: false,
|
|
45973
45825
|
directory: input.directory,
|
|
@@ -46012,7 +45864,6 @@ const summarizeDiagnostics = (diagnostics, worstScore = null, worstScoreLabel =
|
|
|
46012
45864
|
* React-runtime rule family was gated off for the project.
|
|
46013
45865
|
*/
|
|
46014
45866
|
const hasReactRuntime = (project) => project.reactVersion !== null || project.preactVersion !== null;
|
|
46015
|
-
const isScanComplete = (input) => input.analyzedFileCount !== void 0 && input.scannedFileCount !== void 0 && input.skippedCheckCount === 0 && input.skippedCheckReasonCount === 0 && input.analyzedFileCount === input.scannedFileCount;
|
|
46016
45867
|
const toJsonDiff = (diff) => {
|
|
46017
45868
|
if (!diff) return null;
|
|
46018
45869
|
return {
|
|
@@ -46035,68 +45886,21 @@ const findWorstScoredProject = (projects) => {
|
|
|
46035
45886
|
}
|
|
46036
45887
|
return worst;
|
|
46037
45888
|
};
|
|
46038
|
-
const toJsonReportDiagnostic = (diagnostic, projectRoot, reportRoot) => {
|
|
46039
|
-
const normalizedFilePath = toNormalizedRelativePath(diagnostic.filePath, projectRoot);
|
|
46040
|
-
const reportRelativeFilePath = toNormalizedRelativePath(Path.resolve(projectRoot, diagnostic.filePath), reportRoot);
|
|
46041
|
-
const ruleIdentity = getDiagnosticRuleIdentity(diagnostic);
|
|
46042
|
-
return {
|
|
46043
|
-
...diagnostic,
|
|
46044
|
-
id: buildDiagnosticIdentity({
|
|
46045
|
-
filePath: reportRelativeFilePath,
|
|
46046
|
-
line: diagnostic.line,
|
|
46047
|
-
column: diagnostic.column,
|
|
46048
|
-
plugin: diagnostic.plugin,
|
|
46049
|
-
rule: diagnostic.rule
|
|
46050
|
-
}),
|
|
46051
|
-
normalizedFilePath,
|
|
46052
|
-
category: ruleIdentity.category,
|
|
46053
|
-
tags: [...new Set(ruleIdentity.tags)].sort()
|
|
46054
|
-
};
|
|
46055
|
-
};
|
|
46056
45889
|
const buildJsonReport = (input) => {
|
|
46057
|
-
const projects = input.scans.map(({ directory, result }) => {
|
|
46058
|
-
|
|
46059
|
-
|
|
46060
|
-
|
|
46061
|
-
|
|
46062
|
-
|
|
46063
|
-
|
|
46064
|
-
|
|
46065
|
-
|
|
46066
|
-
|
|
46067
|
-
score: result.score,
|
|
46068
|
-
skippedChecks,
|
|
46069
|
-
...result.skippedCheckReasons ? { skippedCheckReasons: result.skippedCheckReasons } : {},
|
|
46070
|
-
analyzedFiles,
|
|
46071
|
-
analyzedFileCount: analyzedFiles.length,
|
|
46072
|
-
complete: isScanComplete({
|
|
46073
|
-
analyzedFileCount: result.analyzedFiles === void 0 ? void 0 : analyzedFiles.length,
|
|
46074
|
-
scannedFileCount,
|
|
46075
|
-
skippedCheckCount: skippedChecks.length,
|
|
46076
|
-
skippedCheckReasonCount: Object.keys(result.skippedCheckReasons ?? {}).length
|
|
46077
|
-
}),
|
|
46078
|
-
...typeof result.scannedFileCount === "number" ? { scannedFileCount } : {},
|
|
46079
|
-
elapsedMilliseconds: result.elapsedMilliseconds
|
|
46080
|
-
};
|
|
46081
|
-
});
|
|
45890
|
+
const projects = input.scans.map(({ directory, result }) => ({
|
|
45891
|
+
directory,
|
|
45892
|
+
project: result.project,
|
|
45893
|
+
diagnostics: result.diagnostics,
|
|
45894
|
+
score: result.score,
|
|
45895
|
+
skippedChecks: result.skippedChecks,
|
|
45896
|
+
...result.skippedCheckReasons ? { skippedCheckReasons: result.skippedCheckReasons } : {},
|
|
45897
|
+
...typeof result.scannedFileCount === "number" ? { scannedFileCount: result.scannedFileCount } : {},
|
|
45898
|
+
elapsedMilliseconds: result.elapsedMilliseconds
|
|
45899
|
+
}));
|
|
46082
45900
|
const flattenedDiagnostics = projects.flatMap((entry) => entry.diagnostics);
|
|
46083
45901
|
const worstScoredProject = findWorstScoredProject(projects);
|
|
46084
|
-
const
|
|
46085
|
-
const
|
|
46086
|
-
const summary = {
|
|
46087
|
-
...diagnosticSummary,
|
|
46088
|
-
affectedFileCount
|
|
46089
|
-
};
|
|
46090
|
-
return {
|
|
46091
|
-
schemaVersion: 3,
|
|
46092
|
-
mode: input.baseline !== void 0 ? "baseline" : input.baselineDegraded && input.mode === "baseline" ? "diff" : input.mode,
|
|
46093
|
-
...input.baseline ? { baseline: {
|
|
46094
|
-
baseRef: input.baseline.baseRef,
|
|
46095
|
-
newCount: summary.totalDiagnosticCount,
|
|
46096
|
-
fixedCount: input.baseline.fixedCount,
|
|
46097
|
-
baseTotalCount: input.baseline.baseTotalCount
|
|
46098
|
-
} } : {},
|
|
46099
|
-
...input.baselineDegraded ? { baselineDegraded: true } : {},
|
|
45902
|
+
const summary = summarizeDiagnostics(flattenedDiagnostics, worstScoredProject?.score?.score ?? null, worstScoredProject?.score?.label ?? null);
|
|
45903
|
+
const shared = {
|
|
46100
45904
|
...input.scans.length > 0 ? { reactDetected: input.scans.some((scan) => hasReactRuntime(scan.result.project)) } : {},
|
|
46101
45905
|
version: input.version,
|
|
46102
45906
|
ok: true,
|
|
@@ -46108,26 +45912,39 @@ const buildJsonReport = (input) => {
|
|
|
46108
45912
|
elapsedMilliseconds: input.totalElapsedMilliseconds,
|
|
46109
45913
|
error: null
|
|
46110
45914
|
};
|
|
45915
|
+
if (input.baseline) return {
|
|
45916
|
+
schemaVersion: 2,
|
|
45917
|
+
mode: "baseline",
|
|
45918
|
+
baseline: {
|
|
45919
|
+
baseRef: input.baseline.baseRef,
|
|
45920
|
+
newCount: summary.totalDiagnosticCount,
|
|
45921
|
+
fixedCount: input.baseline.fixedCount,
|
|
45922
|
+
baseTotalCount: input.baseline.baseTotalCount
|
|
45923
|
+
},
|
|
45924
|
+
...shared
|
|
45925
|
+
};
|
|
45926
|
+
return {
|
|
45927
|
+
schemaVersion: 1,
|
|
45928
|
+
mode: input.mode,
|
|
45929
|
+
...input.baselineDegraded ? { baselineDegraded: true } : {},
|
|
45930
|
+
...shared
|
|
45931
|
+
};
|
|
46111
45932
|
};
|
|
46112
45933
|
/**
|
|
46113
45934
|
* Single source of truth for the skipped-check accounting shared by the
|
|
46114
45935
|
* CLI renderer (`react-doctor/src/inspect.ts → finalizeAndRender`) and the
|
|
46115
45936
|
* programmatic shell (`@react-doctor/api → diagnose()`). Both surface a
|
|
46116
|
-
* failed
|
|
45937
|
+
* failed lint / dead-code pass instead of a false "all clear", so the
|
|
46117
45938
|
* branch logic lives here once.
|
|
46118
45939
|
*/
|
|
46119
45940
|
const buildSkippedChecks = (input) => {
|
|
46120
45941
|
const skippedChecks = [];
|
|
46121
45942
|
if (input.didLintFail) skippedChecks.push("lint");
|
|
46122
45943
|
if (input.didDeadCodeFail) skippedChecks.push("dead-code");
|
|
46123
|
-
if (input.supplyChainOverlapTimedOut) skippedChecks.push("supply-chain");
|
|
46124
|
-
if (input.securityScanFailed) skippedChecks.push("security-scan");
|
|
46125
45944
|
const skippedCheckReasons = {};
|
|
46126
45945
|
if (input.didLintFail && input.lintFailureReason !== null) skippedCheckReasons.lint = input.lintFailureReason;
|
|
46127
45946
|
else if (input.lintPartialFailures.length > 0) skippedCheckReasons["lint:partial"] = input.lintPartialFailures.join("; ");
|
|
46128
45947
|
if (input.didDeadCodeFail && input.deadCodeFailureReason !== null) skippedCheckReasons["dead-code"] = input.deadCodeFailureReason;
|
|
46129
|
-
if (input.supplyChainOverlapTimedOut) skippedCheckReasons["supply-chain"] = "Supply-chain analysis timed out and was skipped.";
|
|
46130
|
-
if (input.securityScanFailed) skippedCheckReasons["security-scan"] = "Security scan failed and was skipped.";
|
|
46131
45948
|
return {
|
|
46132
45949
|
skippedChecks,
|
|
46133
45950
|
skippedCheckReasons
|
|
@@ -46542,7 +46359,7 @@ const GH_DEFAULT_BRANCH_PROBE_TIMEOUT_MS = 5e3;
|
|
|
46542
46359
|
const CI_TRUST_COMPANIES = "PayPal, Rippling, and Alibaba";
|
|
46543
46360
|
const WELCOME_EXPLANATION_HOLD_MS = 1e3;
|
|
46544
46361
|
const CATEGORY_COUNTUP_SETTLE_HOLD_MS = 1e3;
|
|
46545
|
-
const INTERNAL_ERROR_JSON_FALLBACK = "{\"schemaVersion\":
|
|
46362
|
+
const INTERNAL_ERROR_JSON_FALLBACK = "{\"schemaVersion\":1,\"ok\":false,\"error\":{\"message\":\"Internal error\",\"name\":\"Error\",\"chain\":[]}}\n";
|
|
46546
46363
|
const SENTRY_FLUSH_TIMEOUT_MS = 2e3;
|
|
46547
46364
|
const NANOSECONDS_PER_SECOND = 1000000000n;
|
|
46548
46365
|
const METRIC = {
|
|
@@ -46629,7 +46446,7 @@ const makeNoopConsole = () => ({
|
|
|
46629
46446
|
});
|
|
46630
46447
|
//#endregion
|
|
46631
46448
|
//#region src/cli/utils/version.ts
|
|
46632
|
-
const VERSION = "0.7.4-dev.
|
|
46449
|
+
const VERSION = "0.7.4-dev.b686594";
|
|
46633
46450
|
//#endregion
|
|
46634
46451
|
//#region src/cli/utils/json-mode.ts
|
|
46635
46452
|
let context = null;
|
|
@@ -46998,13 +46815,13 @@ const isDevVersion = (version) => version === "0.0.0" || version.includes("-");
|
|
|
46998
46815
|
* uploads source-map artifacts under, so stack frames symbolicate. Honors the
|
|
46999
46816
|
* standard `SENTRY_RELEASE` override.
|
|
47000
46817
|
*/
|
|
47001
|
-
const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.7.4-dev.
|
|
46818
|
+
const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.7.4-dev.b686594`;
|
|
47002
46819
|
/**
|
|
47003
46820
|
* Deployment environment shown in Sentry's environment filter. Defaults to
|
|
47004
46821
|
* `production` for tagged releases and `development` for dev/unbuilt versions,
|
|
47005
46822
|
* overridable via the standard `SENTRY_ENVIRONMENT` env var.
|
|
47006
46823
|
*/
|
|
47007
|
-
const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.7.4-dev.
|
|
46824
|
+
const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.7.4-dev.b686594") ? "development" : "production");
|
|
47008
46825
|
/**
|
|
47009
46826
|
* Performance-tracing sample rate in `[0, 1]`. Reads `SENTRY_TRACES_SAMPLE_RATE`
|
|
47010
46827
|
* (set to `0` to disable tracing) and falls back to
|
|
@@ -59214,12 +59031,12 @@ const resolveCacheFilePath = (projectDirectory) => path.join(resolveReactDoctorC
|
|
|
59214
59031
|
const readPersistedCache = (cacheFilePath) => {
|
|
59215
59032
|
try {
|
|
59216
59033
|
const parsed = JSON.parse(fs.readFileSync(cacheFilePath, "utf8"));
|
|
59217
|
-
if (!isRecord(parsed) || parsed.version !==
|
|
59218
|
-
version:
|
|
59034
|
+
if (!isRecord(parsed) || parsed.version !== 4) return {
|
|
59035
|
+
version: 4,
|
|
59219
59036
|
entries: []
|
|
59220
59037
|
};
|
|
59221
59038
|
if (!Array.isArray(parsed.entries)) return {
|
|
59222
|
-
version:
|
|
59039
|
+
version: 4,
|
|
59223
59040
|
entries: []
|
|
59224
59041
|
};
|
|
59225
59042
|
const entries = [];
|
|
@@ -59229,12 +59046,12 @@ const readPersistedCache = (cacheFilePath) => {
|
|
|
59229
59046
|
entries.push(entry);
|
|
59230
59047
|
}
|
|
59231
59048
|
return {
|
|
59232
|
-
version:
|
|
59049
|
+
version: 4,
|
|
59233
59050
|
entries
|
|
59234
59051
|
};
|
|
59235
59052
|
} catch {
|
|
59236
59053
|
return {
|
|
59237
|
-
version:
|
|
59054
|
+
version: 4,
|
|
59238
59055
|
entries: []
|
|
59239
59056
|
};
|
|
59240
59057
|
}
|
|
@@ -59296,7 +59113,7 @@ const buildScanResultCacheKey = (input) => {
|
|
|
59296
59113
|
if (headSha === null) return null;
|
|
59297
59114
|
if (stringifyStableJson(input.userConfig) === null) return null;
|
|
59298
59115
|
const cacheKeyJson = stringifyStableJson({
|
|
59299
|
-
schemaVersion:
|
|
59116
|
+
schemaVersion: 4,
|
|
59300
59117
|
projectIdentity: resolveProjectIdentity(input.projectDirectory),
|
|
59301
59118
|
headSha,
|
|
59302
59119
|
worktreeFingerprint,
|
|
@@ -59337,7 +59154,7 @@ const createScanResultCache = (projectDirectory) => {
|
|
|
59337
59154
|
for (const entry of persistedCache.entries) entries.set(entry.key, entry);
|
|
59338
59155
|
const persist = () => {
|
|
59339
59156
|
writePersistedCache(cacheFilePath, {
|
|
59340
|
-
version:
|
|
59157
|
+
version: 4,
|
|
59341
59158
|
entries: [...entries.values()].sort((firstEntry, secondEntry) => secondEntry.createdAtMs - firstEntry.createdAtMs).slice(0, 20)
|
|
59342
59159
|
});
|
|
59343
59160
|
};
|
|
@@ -59478,7 +59295,6 @@ const buildOutcomeAttributes = (input) => {
|
|
|
59478
59295
|
return withNamespace("outcome", {
|
|
59479
59296
|
status: "error",
|
|
59480
59297
|
exitCode: 1,
|
|
59481
|
-
complete: false,
|
|
59482
59298
|
knownError: known,
|
|
59483
59299
|
errorTag: known ? error.reason._tag : error instanceof Error ? error.name : null
|
|
59484
59300
|
});
|
|
@@ -59488,13 +59304,8 @@ const buildOutcomeAttributes = (input) => {
|
|
|
59488
59304
|
const blockingLevel = resolveTelemetryBlocking(input.userConfig);
|
|
59489
59305
|
const gateDiagnostics = filterDiagnosticsForSurface(result.diagnostics, "ciFailure", input.userConfig);
|
|
59490
59306
|
const wouldBlock = !input.scoreOnly && !input.gateExempt && shouldBlockCi(gateDiagnostics, blockingLevel);
|
|
59491
|
-
const
|
|
59492
|
-
|
|
59493
|
-
scannedFileCount: result.scannedFileCount,
|
|
59494
|
-
skippedCheckCount: result.skippedChecks.length,
|
|
59495
|
-
skippedCheckReasonCount: Object.keys(result.skippedCheckReasons ?? {}).length
|
|
59496
|
-
});
|
|
59497
|
-
const isClean = result.diagnostics.length === 0 && complete;
|
|
59307
|
+
const hasSkippedChecks = result.skippedChecks.length > 0;
|
|
59308
|
+
const isClean = result.diagnostics.length === 0 && !hasSkippedChecks;
|
|
59498
59309
|
const outcome = wouldBlock ? "blocked" : isClean ? "clean" : "ok";
|
|
59499
59310
|
const firings = summarizeRuleFirings(result.diagnostics);
|
|
59500
59311
|
const countByRule = /* @__PURE__ */ new Map();
|
|
@@ -59544,7 +59355,6 @@ const buildOutcomeAttributes = (input) => {
|
|
|
59544
59355
|
wouldBlock,
|
|
59545
59356
|
blocking: blockingLevel,
|
|
59546
59357
|
clean: isClean,
|
|
59547
|
-
complete,
|
|
59548
59358
|
skippedChecks: result.skippedChecks.length
|
|
59549
59359
|
}),
|
|
59550
59360
|
...withNamespace("diag", {
|
|
@@ -61195,7 +61005,6 @@ const runInspectWithRuntime = async (directory, options, userConfig, hasConfigOv
|
|
|
61195
61005
|
directory: output.resolvedDirectory,
|
|
61196
61006
|
scannedFileCount: output.scannedFileCount,
|
|
61197
61007
|
scannedFilePaths: output.scannedFilePaths,
|
|
61198
|
-
analyzedFiles: output.analyzedFiles,
|
|
61199
61008
|
scanElapsedMilliseconds: output.scanElapsedMilliseconds,
|
|
61200
61009
|
scanConcurrency: output.scanConcurrency,
|
|
61201
61010
|
baselineDelta,
|
|
@@ -61250,12 +61059,9 @@ const renderAndRecordScan = async (input) => {
|
|
|
61250
61059
|
lintPartialFailures: input.payload.lintPartialFailures,
|
|
61251
61060
|
didDeadCodeFail: input.payload.didDeadCodeFail,
|
|
61252
61061
|
deadCodeFailureReason: input.payload.deadCodeFailureReason,
|
|
61253
|
-
supplyChainOverlapTimedOut: input.payload.supplyChainOverlapTimedOut,
|
|
61254
|
-
securityScanFailed: input.payload.securityScanFailed ?? false,
|
|
61255
61062
|
directory: input.payload.directory,
|
|
61256
61063
|
scannedFileCount: input.payload.scannedFileCount,
|
|
61257
61064
|
scannedFilePaths: input.payload.scannedFilePaths,
|
|
61258
|
-
analyzedFiles: input.payload.analyzedFiles ?? [],
|
|
61259
61065
|
scanElapsedMilliseconds: input.payload.scanElapsedMilliseconds,
|
|
61260
61066
|
lintCacheHitFileCount: input.lintCacheHitFileCount ?? null,
|
|
61261
61067
|
lintCacheTotalFileCount: input.lintCacheTotalFileCount ?? null,
|
|
@@ -61303,15 +61109,13 @@ const renderAndRecordScan = async (input) => {
|
|
|
61303
61109
|
return result;
|
|
61304
61110
|
};
|
|
61305
61111
|
const finalizeAndRender = (input) => gen(function* () {
|
|
61306
|
-
const { options, elapsedMilliseconds, diagnostics, score, project, userConfig, didLintFail, lintFailureReason, lintPartialFailures, didDeadCodeFail, deadCodeFailureReason,
|
|
61112
|
+
const { options, elapsedMilliseconds, diagnostics, score, project, userConfig, didLintFail, lintFailureReason, lintPartialFailures, didDeadCodeFail, deadCodeFailureReason, directory, scannedFileCount, scannedFilePaths, scanElapsedMilliseconds, lintCacheHitFileCount, lintCacheTotalFileCount, lintSidecarReplayedFileCount, lintSidecarTotalFileCount, deadCodeCacheHit, deadCodeSummaryCacheHits, deadCodeSummaryCacheMisses, baselineDelta } = input;
|
|
61307
61113
|
const { skippedChecks, skippedCheckReasons } = buildSkippedChecks({
|
|
61308
61114
|
didLintFail,
|
|
61309
61115
|
lintFailureReason,
|
|
61310
61116
|
lintPartialFailures,
|
|
61311
61117
|
didDeadCodeFail,
|
|
61312
|
-
deadCodeFailureReason
|
|
61313
|
-
supplyChainOverlapTimedOut,
|
|
61314
|
-
securityScanFailed
|
|
61118
|
+
deadCodeFailureReason
|
|
61315
61119
|
});
|
|
61316
61120
|
const hasSkippedChecks = skippedChecks.length > 0;
|
|
61317
61121
|
const noScoreMessage = buildNoScoreMessage(options.noScore);
|
|
@@ -61324,7 +61128,6 @@ const finalizeAndRender = (input) => gen(function* () {
|
|
|
61324
61128
|
elapsedMilliseconds,
|
|
61325
61129
|
scannedFileCount,
|
|
61326
61130
|
scannedFilePaths,
|
|
61327
|
-
analyzedFiles,
|
|
61328
61131
|
scanElapsedMilliseconds,
|
|
61329
61132
|
...lintCacheTotalFileCount !== null ? {
|
|
61330
61133
|
lintCacheHitFileCount,
|
|
@@ -65193,4 +64996,4 @@ Promise.resolve().then(() => assertNoRemovedFlags(process.argv)).then(() => prog
|
|
|
65193
64996
|
export {};
|
|
65194
64997
|
|
|
65195
64998
|
//# sourceMappingURL=cli.js.map
|
|
65196
|
-
//# debugId=
|
|
64999
|
+
//# debugId=ef42af6f-0ecf-599f-a6cb-63bf1f1bd562
|