react-doctor 0.9.12-dev.ffc2d14 → 0.9.13-dev.1239043

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.
Files changed (47) hide show
  1. package/README.md +33 -0
  2. package/dist/active-run-trace-dlIZeEvb.js +18 -0
  3. package/dist/active-scan-abort-registry-DwG6tSPy.js +28 -0
  4. package/dist/{build-section-divider-BuOtLrzK.js → build-section-divider-C09RcJrc.js} +8 -22
  5. package/dist/{ci-DVVsf25h.js → ci-CUgNjCr-.js} +12 -11
  6. package/dist/cli.js +116 -35
  7. package/dist/{design-Y1pcA2uj.js → design-CX2j8ubS.js} +4 -4
  8. package/dist/{devtools-D8NTVj81.js → devtools-CC2PAZ85.js} +3 -3
  9. package/dist/{exit-gracefully-DnXGONjj.js → exit-gracefully-cGJM2g3O.js} +15 -9
  10. package/dist/get-east-asian-width-Bv2TD3Xj.js +444 -0
  11. package/dist/{report-error-MGKyeIns.js → handle-error-BCI-Nv3P.js} +18 -68
  12. package/dist/index.d.ts +32 -0
  13. package/dist/index.js +628 -301
  14. package/dist/{inspect-g3_lzs3l.js → inspect-Dq5krKWG.js} +41 -29
  15. package/dist/{install-02Lq6wKC.js → install-C0aiZKgf.js} +9 -8
  16. package/dist/{install-doctor-script-DmEWQpVJ.js → install-doctor-script-CaTIms0r.js} +7 -449
  17. package/dist/{install-github-workflow-Dx6Pl9Wl.js → install-github-workflow-DjPgXVqg.js} +10 -6
  18. package/dist/{install-react-doctor-CMCXgenA.js → install-react-doctor-C-PVDWXv.js} +8 -8
  19. package/dist/{run-scan-app-CDDu7P32.js → jsx-runtime-D_A4d39v.js} +280 -2774
  20. package/dist/path-format-DnHpmJwG.js +9 -0
  21. package/dist/{print-branded-header-kbvWYuGv.js → print-branded-header-Dz0SwyHQ.js} +4 -4
  22. package/dist/project-analysis-worker.js +59 -54
  23. package/dist/prompt-runtime-scan-url-BXdY2Opw.js +240 -0
  24. package/dist/{read-object-file-Cwhr9OIi.js → read-object-file-CmMGK1uu.js} +4 -4
  25. package/dist/{record-metric-CFfsgcVs.js → record-metric-B6T_Ej33.js} +592 -250
  26. package/dist/report-error-DwL3b99q.js +64 -0
  27. package/dist/{report-workflow-result-DGg9xopH.js → report-workflow-result-5PueDIAr.js} +5 -5
  28. package/dist/{resolve-scope-CXS-5jLR.js → resolve-scope-CTlLl7e6.js} +8 -10
  29. package/dist/{rules-CThlosPx.js → rules-DEbHKRag.js} +6 -6
  30. package/dist/run-scan-app-D3huvmXJ.js +2517 -0
  31. package/dist/runtime-scan/browser-probe.iife.js +855 -0
  32. package/dist/runtime-scan-CHFAEYg3.js +770 -0
  33. package/dist/sanitize-runtime-url-Bbq40iIp.js +76 -0
  34. package/dist/scan-C7sCm7wi.js +47 -0
  35. package/dist/{should-fail-scan-gate-C0Bo5Gqy.js → should-fail-scan-gate-CfG_ppAV.js} +50 -117
  36. package/dist/{should-skip-prompts-BqrtVX4G.js → should-skip-prompts-BuNtAVEs.js} +4 -4
  37. package/dist/should-use-tui-B-lCjXVG.js +25 -0
  38. package/dist/skills/improve-threejs/SKILL.md +102 -0
  39. package/dist/skills/performance/SKILL.md +113 -0
  40. package/dist/skills/react-doctor/SKILL.md +6 -0
  41. package/dist/{unref-stdin-BxyvqsOy.js → telemetry-runtime-BF83aBFL.js} +55 -25
  42. package/dist/unref-stdin-SK3WfwxS.js +12 -0
  43. package/dist/{version-S-8vvWFi.js → version-C27gr4Qj.js} +4 -4
  44. package/dist/{why-DXfx0oL9.js → why-CYRkZ2VY.js} +4 -4
  45. package/dist/with-run-span-CdsXSJgE.js +110 -0
  46. package/package.json +9 -6
  47. package/dist/scan-4I1mvxBO.js +0 -53
package/dist/index.js CHANGED
@@ -1,14 +1,15 @@
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]="3404885b-ce22-59ed-b773-5398b6af4974")}catch(e){}}();
3
- import { i as __toESM$1, r as __require, t as __commonJSMin$1 } from "./chunk-ChKA3wi6.js";
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]="ffdf66e4-453b-5f6c-993d-310f76b49218")}catch(e){}}();
3
+ import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-ChKA3wi6.js";
4
4
  import { createRequire } from "node:module";
5
5
  import * as path$1$1 from "node:path";
6
- import path from "node:path";
6
+ import path, { join, posix } from "node:path";
7
7
  import * as fs$1$3 from "node:fs";
8
- import fs from "node:fs";
8
+ import fs, { existsSync } from "node:fs";
9
9
  import * as NodeChildProcess from "node:child_process";
10
10
  import { execFile, execFileSync, spawn, spawnSync } from "node:child_process";
11
11
  import ts from "typescript";
12
+ import { parseSync } from "oxc-parser";
12
13
  import { 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_OPT_IN_PROJECT_RULE_IDS, REACT_DOCTOR_PROJECT_RULES, REACT_DOCTOR_RULES, REACT_DOCTOR_RULE_REGISTRY, REACT_DOCTOR_SCAN_RULES, classifySecurityScanFile, collectCrossFileDependencyProbes, resetManifestCaches, shouldReadSecurityScanContent } from "oxlint-plugin-react-doctor/core";
13
14
  import * as Crypto from "node:crypto";
14
15
  import crypto, { createHash, randomUUID } from "node:crypto";
@@ -18,14 +19,14 @@ import { fileURLToPath } from "node:url";
18
19
  import * as OS from "node:os";
19
20
  import os from "node:os";
20
21
  import { createJiti } from "jiti";
21
- import { parseJSON5 } from "confbox";
22
+ import { parseJSON5, parseJSONC } from "confbox";
22
23
  import * as fs$1 from "node:fs/promises";
23
24
  import { PassThrough } from "node:stream";
24
25
  import { convertToTSX } from "@astrojs/compiler/sync";
25
26
  import { STATUS_CODES } from "node:http";
26
27
  import { gzipSync } from "node:zlib";
27
28
  //#region ../../node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/constants.js
28
- var require_constants$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
29
+ var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
29
30
  const WIN_SLASH = "\\\\/";
30
31
  const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
31
32
  const DEFAULT_MAX_EXTGLOB_RECURSION = 0;
@@ -194,7 +195,7 @@ var require_constants$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) =>
194
195
  }));
195
196
  //#endregion
196
197
  //#region ../../node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/utils.js
197
- var require_utils = /* @__PURE__ */ __commonJSMin$1(((exports) => {
198
+ var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
198
199
  const { REGEX_BACKSLASH, REGEX_REMOVE_BACKSLASH, REGEX_SPECIAL_CHARS, REGEX_SPECIAL_CHARS_GLOBAL } = require_constants$1();
199
200
  exports.isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
200
201
  exports.hasRegexChars = (str) => REGEX_SPECIAL_CHARS.test(str);
@@ -242,7 +243,7 @@ var require_utils = /* @__PURE__ */ __commonJSMin$1(((exports) => {
242
243
  }));
243
244
  //#endregion
244
245
  //#region ../../node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/scan.js
245
- var require_scan = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
246
+ var require_scan = /* @__PURE__ */ __commonJSMin(((exports, module) => {
246
247
  const utils = require_utils();
247
248
  const { CHAR_ASTERISK, CHAR_AT, CHAR_BACKWARD_SLASH, CHAR_COMMA, CHAR_DOT, CHAR_EXCLAMATION_MARK, CHAR_FORWARD_SLASH, CHAR_LEFT_CURLY_BRACE, CHAR_LEFT_PARENTHESES, CHAR_LEFT_SQUARE_BRACKET, CHAR_PLUS, CHAR_QUESTION_MARK, CHAR_RIGHT_CURLY_BRACE, CHAR_RIGHT_PARENTHESES, CHAR_RIGHT_SQUARE_BRACKET } = require_constants$1();
248
249
  const isPathSeparator = (code) => {
@@ -529,7 +530,7 @@ var require_scan = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
529
530
  }));
530
531
  //#endregion
531
532
  //#region ../../node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/parse.js
532
- var require_parse$2 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
533
+ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
533
534
  const constants = require_constants$1();
534
535
  const utils = require_utils();
535
536
  /**
@@ -1584,7 +1585,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
1584
1585
  }));
1585
1586
  //#endregion
1586
1587
  //#region ../../node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/picomatch.js
1587
- var require_picomatch$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
1588
+ var require_picomatch$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1588
1589
  const scan = require_scan();
1589
1590
  const parse = require_parse$2();
1590
1591
  const utils = require_utils();
@@ -1883,8 +1884,8 @@ var require_picomatch$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) =>
1883
1884
  module.exports = picomatch;
1884
1885
  }));
1885
1886
  //#endregion
1886
- //#region ../core/dist/collect-unplugin-auto-import-global-scopes-Dno9RW5R.js
1887
- var import_picomatch = /* @__PURE__ */ __toESM$1((/* @__PURE__ */ __commonJSMin$1(((exports, module) => {
1887
+ //#region ../core/dist/collect-unplugin-auto-import-global-scopes-BUQgAJ1L.js
1888
+ var import_picomatch = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
1888
1889
  const pico = require_picomatch$1();
1889
1890
  const utils = require_utils();
1890
1891
  function picomatch(glob, options, returnState = false) {
@@ -2164,6 +2165,7 @@ const ES_TARGET_YEAR_BY_NAME = {
2164
2165
  * compiler options — the root config first, then a monorepo base config.
2165
2166
  */
2166
2167
  const TSCONFIG_FILENAMES = ["tsconfig.json", "tsconfig.base.json"];
2168
+ const DISABLE_DIRECTIVE_BACKUP_DIRECTORY_SEGMENTS = [".react-doctor", "audit-backups"];
2167
2169
  /**
2168
2170
  * Project-config files that `StagedFiles.materialize` copies into
2169
2171
  * the temp directory alongside staged sources so oxlint resolves
@@ -2244,7 +2246,7 @@ const SUPPLY_CHAIN_OVERLAP_TIMEOUT_MS = 9e4;
2244
2246
  const SUPPLY_CHAIN_CACHE_TTL_MS = 864e5;
2245
2247
  const SUPPLY_CHAIN_CACHE_SUBDIR = "supply-chain";
2246
2248
  const SUPPLY_CHAIN_IGNORED_PACKAGES = new Set(["next"]);
2247
- const JSX_DUPLICATION_SOURCE_FILE_PATTERN = /\.[cm]?[jt]sx?$/;
2249
+ const JSX_DUPLICATION_SOURCE_FILE_PATTERN = /\.[cm]?(?:jsx?|tsx)$/;
2248
2250
  const MAINTAINABILITY_PLUGIN = "react-doctor";
2249
2251
  const MAINTAINABILITY_DUPLICATE_JSX_RULE = "duplicate-jsx-subtree";
2250
2252
  const MAINTAINABILITY_CATEGORY = "Maintainability";
@@ -2396,6 +2398,74 @@ const compileGlobPatternsLenient = (patterns, onInvalid) => {
2396
2398
  }
2397
2399
  return compiled;
2398
2400
  };
2401
+ const isOxcAstNode = (value) => Boolean(value) && typeof value === "object" && typeof value.type === "string";
2402
+ const getStaticModuleSpecifier = (value) => {
2403
+ if (!isOxcAstNode(value)) return void 0;
2404
+ if (typeof value.value === "string") return value.value;
2405
+ if (value.type === "TemplateLiteral" && Array.isArray(value.expressions) && value.expressions.length === 0 && Array.isArray(value.quasis) && isOxcAstNode(value.quasis[0]) && value.quasis[0].value && typeof value.quasis[0].value === "object" && "cooked" in value.quasis[0].value && typeof value.quasis[0].value.cooked === "string") return value.quasis[0].value.cooked;
2406
+ };
2407
+ const collectStaticModuleSpecifiers = (sourceText, options = {}) => {
2408
+ const { filePath = "module.tsx", includeTypeOnly = true } = options;
2409
+ const parsedModule = parseSync(filePath, sourceText, { sourceType: "unambiguous" });
2410
+ const moduleSpecifiers = /* @__PURE__ */ new Set();
2411
+ const addSpecifier = (value) => {
2412
+ const moduleSpecifier = getStaticModuleSpecifier(value);
2413
+ if (moduleSpecifier) moduleSpecifiers.add(moduleSpecifier);
2414
+ };
2415
+ const visitNode = (value) => {
2416
+ if (Array.isArray(value)) {
2417
+ for (const child of value) visitNode(child);
2418
+ return;
2419
+ }
2420
+ if (!isOxcAstNode(value)) return;
2421
+ if (value.type === "ImportDeclaration") {
2422
+ const specifiers = Array.isArray(value.specifiers) ? value.specifiers : [];
2423
+ const hasRuntimeSpecifier = specifiers.some((specifier) => !isOxcAstNode(specifier) || specifier.importKind !== "type");
2424
+ if (includeTypeOnly || value.importKind !== "type" && (specifiers.length === 0 || hasRuntimeSpecifier)) addSpecifier(value.source);
2425
+ } else if (value.type === "ExportNamedDeclaration") {
2426
+ const specifiers = Array.isArray(value.specifiers) ? value.specifiers : [];
2427
+ const hasRuntimeSpecifier = specifiers.some((specifier) => !isOxcAstNode(specifier) || specifier.exportKind !== "type");
2428
+ if (includeTypeOnly || value.exportKind !== "type" && (specifiers.length === 0 || hasRuntimeSpecifier)) addSpecifier(value.source);
2429
+ } else if (value.type === "ExportAllDeclaration" || value.type === "ImportExpression") {
2430
+ if (includeTypeOnly || value.exportKind !== "type") addSpecifier(value.source);
2431
+ } else if (value.type === "TSImportType") {
2432
+ if (includeTypeOnly) addSpecifier(value.source);
2433
+ } else if (value.type === "TSExternalModuleReference") addSpecifier(value.expression);
2434
+ else if (value.type === "CallExpression" && isOxcAstNode(value.callee) && value.callee.type === "Identifier" && value.callee.name === "require" && Array.isArray(value.arguments) && value.arguments.length > 0) addSpecifier(value.arguments[0]);
2435
+ for (const child of Object.values(value)) visitNode(child);
2436
+ };
2437
+ visitNode(parsedModule.program);
2438
+ return moduleSpecifiers;
2439
+ };
2440
+ const toPosixPath = (filePath) => filePath.replace(/\\/g, "/");
2441
+ const isPathInsideDirectoryOrEqual = (candidatePath, directoryPath) => {
2442
+ const normalizedCandidatePath = posix.normalize(toPosixPath(candidatePath));
2443
+ const normalizedDirectoryPath = posix.normalize(toPosixPath(directoryPath));
2444
+ const relativePath = posix.relative(normalizedDirectoryPath, normalizedCandidatePath);
2445
+ return relativePath === "" || relativePath !== ".." && !relativePath.startsWith("../") && !posix.isAbsolute(relativePath);
2446
+ };
2447
+ const RESOLVABLE_EXTENSIONS = [
2448
+ ".ts",
2449
+ ".tsx",
2450
+ ".js",
2451
+ ".jsx",
2452
+ ".mjs",
2453
+ ".mts",
2454
+ ".cjs",
2455
+ ".cts",
2456
+ ".es6"
2457
+ ];
2458
+ const resolveEntryWithExtensions = (basePath) => {
2459
+ if (existsSync(basePath)) return basePath;
2460
+ for (const extension of RESOLVABLE_EXTENSIONS) {
2461
+ const withExtension = basePath + extension;
2462
+ if (existsSync(withExtension)) return withExtension;
2463
+ }
2464
+ for (const extension of RESOLVABLE_EXTENSIONS) {
2465
+ const indexCandidate = join(basePath, `index${extension}`);
2466
+ if (existsSync(indexCandidate)) return indexCandidate;
2467
+ }
2468
+ };
2399
2469
  /**
2400
2470
  * Resolves a path to its canonical, symlink-free form, falling back to
2401
2471
  * the input when it cannot be realpath'd (broken symlink, permission
@@ -23377,7 +23447,7 @@ Union([
23377
23447
  ]);
23378
23448
  //#endregion
23379
23449
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js
23380
- var require_constants = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23450
+ var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23381
23451
  const SEMVER_SPEC_VERSION = "2.0.0";
23382
23452
  const MAX_LENGTH = 256;
23383
23453
  const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
@@ -23402,12 +23472,12 @@ var require_constants = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23402
23472
  }));
23403
23473
  //#endregion
23404
23474
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/debug.js
23405
- var require_debug = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23475
+ var require_debug = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23406
23476
  module.exports = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {};
23407
23477
  }));
23408
23478
  //#endregion
23409
23479
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/re.js
23410
- var require_re = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23480
+ var require_re = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23411
23481
  const { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_LENGTH } = require_constants();
23412
23482
  const debug = require_debug();
23413
23483
  exports = module.exports = {};
@@ -23486,7 +23556,7 @@ var require_re = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23486
23556
  }));
23487
23557
  //#endregion
23488
23558
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/parse-options.js
23489
- var require_parse_options = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23559
+ var require_parse_options = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23490
23560
  const looseOption = Object.freeze({ loose: true });
23491
23561
  const emptyOpts = Object.freeze({});
23492
23562
  const parseOptions = (options) => {
@@ -23498,7 +23568,7 @@ var require_parse_options = /* @__PURE__ */ __commonJSMin$1(((exports, module) =
23498
23568
  }));
23499
23569
  //#endregion
23500
23570
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/identifiers.js
23501
- var require_identifiers = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23571
+ var require_identifiers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23502
23572
  const numeric = /^[0-9]+$/;
23503
23573
  const compareIdentifiers = (a, b) => {
23504
23574
  if (typeof a === "number" && typeof b === "number") return a === b ? 0 : a < b ? -1 : 1;
@@ -23518,7 +23588,7 @@ var require_identifiers = /* @__PURE__ */ __commonJSMin$1(((exports, module) =>
23518
23588
  }));
23519
23589
  //#endregion
23520
23590
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/semver.js
23521
- var require_semver$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23591
+ var require_semver$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23522
23592
  const debug = require_debug();
23523
23593
  const { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
23524
23594
  const { safeRe: re, t } = require_re();
@@ -23696,7 +23766,7 @@ var require_semver$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23696
23766
  }));
23697
23767
  //#endregion
23698
23768
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/parse.js
23699
- var require_parse$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23769
+ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23700
23770
  const SemVer = require_semver$1();
23701
23771
  const parse = (version, options, throwErrors = false) => {
23702
23772
  if (version instanceof SemVer) return version;
@@ -23711,7 +23781,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23711
23781
  }));
23712
23782
  //#endregion
23713
23783
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/valid.js
23714
- var require_valid$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23784
+ var require_valid$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23715
23785
  const parse = require_parse$1();
23716
23786
  const valid = (version, options) => {
23717
23787
  const v = parse(version, options);
@@ -23721,7 +23791,7 @@ var require_valid$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23721
23791
  }));
23722
23792
  //#endregion
23723
23793
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/clean.js
23724
- var require_clean = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23794
+ var require_clean = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23725
23795
  const parse = require_parse$1();
23726
23796
  const clean = (version, options) => {
23727
23797
  const s = parse(version.trim().replace(/^[=v]+/, ""), options);
@@ -23731,7 +23801,7 @@ var require_clean = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23731
23801
  }));
23732
23802
  //#endregion
23733
23803
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/inc.js
23734
- var require_inc = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23804
+ var require_inc = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23735
23805
  const SemVer = require_semver$1();
23736
23806
  const inc = (version, release, options, identifier, identifierBase) => {
23737
23807
  if (typeof options === "string") {
@@ -23749,7 +23819,7 @@ var require_inc = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23749
23819
  }));
23750
23820
  //#endregion
23751
23821
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/diff.js
23752
- var require_diff = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23822
+ var require_diff = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23753
23823
  const parse = require_parse$1();
23754
23824
  const diff = (version1, version2) => {
23755
23825
  const v1 = parse(version1, null, true);
@@ -23777,28 +23847,28 @@ var require_diff = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23777
23847
  }));
23778
23848
  //#endregion
23779
23849
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/major.js
23780
- var require_major = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23850
+ var require_major = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23781
23851
  const SemVer = require_semver$1();
23782
23852
  const major = (a, loose) => new SemVer(a, loose).major;
23783
23853
  module.exports = major;
23784
23854
  }));
23785
23855
  //#endregion
23786
23856
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/minor.js
23787
- var require_minor = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23857
+ var require_minor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23788
23858
  const SemVer = require_semver$1();
23789
23859
  const minor = (a, loose) => new SemVer(a, loose).minor;
23790
23860
  module.exports = minor;
23791
23861
  }));
23792
23862
  //#endregion
23793
23863
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/patch.js
23794
- var require_patch = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23864
+ var require_patch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23795
23865
  const SemVer = require_semver$1();
23796
23866
  const patch = (a, loose) => new SemVer(a, loose).patch;
23797
23867
  module.exports = patch;
23798
23868
  }));
23799
23869
  //#endregion
23800
23870
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/prerelease.js
23801
- var require_prerelease = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23871
+ var require_prerelease = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23802
23872
  const parse = require_parse$1();
23803
23873
  const prerelease = (version, options) => {
23804
23874
  const parsed = parse(version, options);
@@ -23808,28 +23878,28 @@ var require_prerelease = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23808
23878
  }));
23809
23879
  //#endregion
23810
23880
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare.js
23811
- var require_compare = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23881
+ var require_compare = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23812
23882
  const SemVer = require_semver$1();
23813
23883
  const compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
23814
23884
  module.exports = compare;
23815
23885
  }));
23816
23886
  //#endregion
23817
23887
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/rcompare.js
23818
- var require_rcompare = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23888
+ var require_rcompare = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23819
23889
  const compare = require_compare();
23820
23890
  const rcompare = (a, b, loose) => compare(b, a, loose);
23821
23891
  module.exports = rcompare;
23822
23892
  }));
23823
23893
  //#endregion
23824
23894
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare-loose.js
23825
- var require_compare_loose = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23895
+ var require_compare_loose = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23826
23896
  const compare = require_compare();
23827
23897
  const compareLoose = (a, b) => compare(a, b, true);
23828
23898
  module.exports = compareLoose;
23829
23899
  }));
23830
23900
  //#endregion
23831
23901
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare-build.js
23832
- var require_compare_build = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23902
+ var require_compare_build = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23833
23903
  const SemVer = require_semver$1();
23834
23904
  const compareBuild = (a, b, loose) => {
23835
23905
  const versionA = new SemVer(a, loose);
@@ -23840,63 +23910,63 @@ var require_compare_build = /* @__PURE__ */ __commonJSMin$1(((exports, module) =
23840
23910
  }));
23841
23911
  //#endregion
23842
23912
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/sort.js
23843
- var require_sort = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23913
+ var require_sort = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23844
23914
  const compareBuild = require_compare_build();
23845
23915
  const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));
23846
23916
  module.exports = sort;
23847
23917
  }));
23848
23918
  //#endregion
23849
23919
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/rsort.js
23850
- var require_rsort = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23920
+ var require_rsort = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23851
23921
  const compareBuild = require_compare_build();
23852
23922
  const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));
23853
23923
  module.exports = rsort;
23854
23924
  }));
23855
23925
  //#endregion
23856
23926
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gt.js
23857
- var require_gt = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23927
+ var require_gt = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23858
23928
  const compare = require_compare();
23859
23929
  const gt = (a, b, loose) => compare(a, b, loose) > 0;
23860
23930
  module.exports = gt;
23861
23931
  }));
23862
23932
  //#endregion
23863
23933
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lt.js
23864
- var require_lt = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23934
+ var require_lt = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23865
23935
  const compare = require_compare();
23866
23936
  const lt = (a, b, loose) => compare(a, b, loose) < 0;
23867
23937
  module.exports = lt;
23868
23938
  }));
23869
23939
  //#endregion
23870
23940
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/eq.js
23871
- var require_eq = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23941
+ var require_eq = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23872
23942
  const compare = require_compare();
23873
23943
  const eq = (a, b, loose) => compare(a, b, loose) === 0;
23874
23944
  module.exports = eq;
23875
23945
  }));
23876
23946
  //#endregion
23877
23947
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/neq.js
23878
- var require_neq = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23948
+ var require_neq = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23879
23949
  const compare = require_compare();
23880
23950
  const neq = (a, b, loose) => compare(a, b, loose) !== 0;
23881
23951
  module.exports = neq;
23882
23952
  }));
23883
23953
  //#endregion
23884
23954
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gte.js
23885
- var require_gte = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23955
+ var require_gte = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23886
23956
  const compare = require_compare();
23887
23957
  const gte = (a, b, loose) => compare(a, b, loose) >= 0;
23888
23958
  module.exports = gte;
23889
23959
  }));
23890
23960
  //#endregion
23891
23961
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lte.js
23892
- var require_lte = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23962
+ var require_lte = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23893
23963
  const compare = require_compare();
23894
23964
  const lte = (a, b, loose) => compare(a, b, loose) <= 0;
23895
23965
  module.exports = lte;
23896
23966
  }));
23897
23967
  //#endregion
23898
23968
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/cmp.js
23899
- var require_cmp = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23969
+ var require_cmp = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23900
23970
  const eq = require_eq();
23901
23971
  const neq = require_neq();
23902
23972
  const gt = require_gt();
@@ -23928,7 +23998,7 @@ var require_cmp = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23928
23998
  }));
23929
23999
  //#endregion
23930
24000
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/coerce.js
23931
- var require_coerce = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24001
+ var require_coerce = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23932
24002
  const SemVer = require_semver$1();
23933
24003
  const parse = require_parse$1();
23934
24004
  const { safeRe: re, t } = require_re();
@@ -23956,7 +24026,7 @@ var require_coerce = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23956
24026
  }));
23957
24027
  //#endregion
23958
24028
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/lrucache.js
23959
- var require_lrucache = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24029
+ var require_lrucache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23960
24030
  var LRUCache = class {
23961
24031
  constructor() {
23962
24032
  this.max = 1e3;
@@ -23989,7 +24059,7 @@ var require_lrucache = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
23989
24059
  }));
23990
24060
  //#endregion
23991
24061
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/range.js
23992
- var require_range = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24062
+ var require_range = /* @__PURE__ */ __commonJSMin(((exports, module) => {
23993
24063
  const SPACE_CHARACTERS = /\s+/g;
23994
24064
  module.exports = class Range {
23995
24065
  constructor(range, options) {
@@ -24261,7 +24331,7 @@ var require_range = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24261
24331
  }));
24262
24332
  //#endregion
24263
24333
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/comparator.js
24264
- var require_comparator = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24334
+ var require_comparator = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24265
24335
  const ANY = Symbol("SemVer ANY");
24266
24336
  module.exports = class Comparator {
24267
24337
  static get ANY() {
@@ -24331,7 +24401,7 @@ var require_comparator = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24331
24401
  }));
24332
24402
  //#endregion
24333
24403
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/satisfies.js
24334
- var require_satisfies = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24404
+ var require_satisfies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24335
24405
  const Range = require_range();
24336
24406
  const satisfies = (version, range, options) => {
24337
24407
  try {
@@ -24345,14 +24415,14 @@ var require_satisfies = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24345
24415
  }));
24346
24416
  //#endregion
24347
24417
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/to-comparators.js
24348
- var require_to_comparators = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24418
+ var require_to_comparators = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24349
24419
  const Range = require_range();
24350
24420
  const toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" "));
24351
24421
  module.exports = toComparators;
24352
24422
  }));
24353
24423
  //#endregion
24354
24424
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/max-satisfying.js
24355
- var require_max_satisfying = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24425
+ var require_max_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24356
24426
  const SemVer = require_semver$1();
24357
24427
  const Range = require_range();
24358
24428
  const maxSatisfying = (versions, range, options) => {
@@ -24378,7 +24448,7 @@ var require_max_satisfying = /* @__PURE__ */ __commonJSMin$1(((exports, module)
24378
24448
  }));
24379
24449
  //#endregion
24380
24450
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/min-satisfying.js
24381
- var require_min_satisfying = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24451
+ var require_min_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24382
24452
  const SemVer = require_semver$1();
24383
24453
  const Range = require_range();
24384
24454
  const minSatisfying = (versions, range, options) => {
@@ -24404,7 +24474,7 @@ var require_min_satisfying = /* @__PURE__ */ __commonJSMin$1(((exports, module)
24404
24474
  }));
24405
24475
  //#endregion
24406
24476
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/min-version.js
24407
- var require_min_version = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24477
+ var require_min_version = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24408
24478
  const SemVer = require_semver$1();
24409
24479
  const Range = require_range();
24410
24480
  const gt = require_gt();
@@ -24444,7 +24514,7 @@ var require_min_version = /* @__PURE__ */ __commonJSMin$1(((exports, module) =>
24444
24514
  }));
24445
24515
  //#endregion
24446
24516
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/valid.js
24447
- var require_valid = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24517
+ var require_valid = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24448
24518
  const Range = require_range();
24449
24519
  const validRange = (range, options) => {
24450
24520
  try {
@@ -24457,7 +24527,7 @@ var require_valid = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24457
24527
  }));
24458
24528
  //#endregion
24459
24529
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/outside.js
24460
- var require_outside = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24530
+ var require_outside = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24461
24531
  const SemVer = require_semver$1();
24462
24532
  const Comparator = require_comparator();
24463
24533
  const { ANY } = Comparator;
@@ -24510,21 +24580,21 @@ var require_outside = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24510
24580
  }));
24511
24581
  //#endregion
24512
24582
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/gtr.js
24513
- var require_gtr = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24583
+ var require_gtr = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24514
24584
  const outside = require_outside();
24515
24585
  const gtr = (version, range, options) => outside(version, range, ">", options);
24516
24586
  module.exports = gtr;
24517
24587
  }));
24518
24588
  //#endregion
24519
24589
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/ltr.js
24520
- var require_ltr = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24590
+ var require_ltr = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24521
24591
  const outside = require_outside();
24522
24592
  const ltr = (version, range, options) => outside(version, range, "<", options);
24523
24593
  module.exports = ltr;
24524
24594
  }));
24525
24595
  //#endregion
24526
24596
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/intersects.js
24527
- var require_intersects = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24597
+ var require_intersects = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24528
24598
  const Range = require_range();
24529
24599
  const intersects = (r1, r2, options) => {
24530
24600
  r1 = new Range(r1, options);
@@ -24535,7 +24605,7 @@ var require_intersects = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24535
24605
  }));
24536
24606
  //#endregion
24537
24607
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/simplify.js
24538
- var require_simplify = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24608
+ var require_simplify = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24539
24609
  const satisfies = require_satisfies();
24540
24610
  const compare = require_compare();
24541
24611
  module.exports = (versions, range, options) => {
@@ -24565,7 +24635,7 @@ var require_simplify = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24565
24635
  }));
24566
24636
  //#endregion
24567
24637
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/subset.js
24568
- var require_subset = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24638
+ var require_subset = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24569
24639
  const Range = require_range();
24570
24640
  const Comparator = require_comparator();
24571
24641
  const { ANY } = Comparator;
@@ -24660,7 +24730,7 @@ var require_subset = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24660
24730
  }));
24661
24731
  //#endregion
24662
24732
  //#region ../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/index.js
24663
- var require_semver = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24733
+ var require_semver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24664
24734
  const internalRe = require_re();
24665
24735
  const constants = require_constants();
24666
24736
  const SemVer = require_semver$1();
@@ -24715,7 +24785,7 @@ var require_semver = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
24715
24785
  }));
24716
24786
  //#endregion
24717
24787
  //#region ../../node_modules/.pnpm/baseline-browser-mapping@2.9.19/node_modules/baseline-browser-mapping/dist/index.cjs
24718
- var require_dist = /* @__PURE__ */ __commonJSMin$1(((exports) => {
24788
+ var require_dist = /* @__PURE__ */ __commonJSMin(((exports) => {
24719
24789
  const s = {
24720
24790
  chrome: { releases: [
24721
24791
  [
@@ -43965,7 +44035,7 @@ var require_dist = /* @__PURE__ */ __commonJSMin$1(((exports) => {
43965
44035
  }));
43966
44036
  //#endregion
43967
44037
  //#region ../../node_modules/.pnpm/node-releases@2.0.27/node_modules/node-releases/data/processed/envs.json
43968
- var require_envs = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
44038
+ var require_envs = /* @__PURE__ */ __commonJSMin(((exports, module) => {
43969
44039
  module.exports = [
43970
44040
  {
43971
44041
  "name": "nodejs",
@@ -46747,7 +46817,7 @@ var require_envs = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
46747
46817
  }));
46748
46818
  //#endregion
46749
46819
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/data/browsers.js
46750
- var require_browsers$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
46820
+ var require_browsers$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
46751
46821
  module.exports = {
46752
46822
  A: "ie",
46753
46823
  B: "edge",
@@ -46772,12 +46842,12 @@ var require_browsers$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
46772
46842
  }));
46773
46843
  //#endregion
46774
46844
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/dist/unpacker/browsers.js
46775
- var require_browsers = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
46845
+ var require_browsers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
46776
46846
  module.exports.browsers = require_browsers$1();
46777
46847
  }));
46778
46848
  //#endregion
46779
46849
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/data/browserVersions.js
46780
- var require_browserVersions$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
46850
+ var require_browserVersions$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
46781
46851
  module.exports = {
46782
46852
  "0": "117",
46783
46853
  "1": "118",
@@ -47029,12 +47099,12 @@ var require_browserVersions$1 = /* @__PURE__ */ __commonJSMin$1(((exports, modul
47029
47099
  }));
47030
47100
  //#endregion
47031
47101
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/dist/unpacker/browserVersions.js
47032
- var require_browserVersions = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
47102
+ var require_browserVersions = /* @__PURE__ */ __commonJSMin(((exports, module) => {
47033
47103
  module.exports.browserVersions = require_browserVersions$1();
47034
47104
  }));
47035
47105
  //#endregion
47036
47106
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/data/agents.js
47037
- var require_agents$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
47107
+ var require_agents$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
47038
47108
  module.exports = {
47039
47109
  A: {
47040
47110
  A: {
@@ -51403,7 +51473,7 @@ var require_agents$1 = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51403
51473
  }));
51404
51474
  //#endregion
51405
51475
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/dist/unpacker/agents.js
51406
- var require_agents = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51476
+ var require_agents = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51407
51477
  const browsers = require_browsers().browsers;
51408
51478
  const versions = require_browserVersions().browserVersions;
51409
51479
  const agentsData = require_agents$1();
@@ -51436,7 +51506,7 @@ var require_agents = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51436
51506
  }));
51437
51507
  //#endregion
51438
51508
  //#region ../../node_modules/.pnpm/electron-to-chromium@1.5.286/node_modules/electron-to-chromium/versions.js
51439
- var require_versions = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51509
+ var require_versions = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51440
51510
  module.exports = {
51441
51511
  "0.20": "39",
51442
51512
  "0.21": "41",
@@ -51670,7 +51740,7 @@ var require_versions = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51670
51740
  }));
51671
51741
  //#endregion
51672
51742
  //#region ../../node_modules/.pnpm/node-releases@2.0.27/node_modules/node-releases/data/release-schedule/release-schedule.json
51673
- var require_release_schedule = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51743
+ var require_release_schedule = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51674
51744
  module.exports = {
51675
51745
  "v0.8": {
51676
51746
  "start": "2012-06-25",
@@ -51827,7 +51897,7 @@ var require_release_schedule = /* @__PURE__ */ __commonJSMin$1(((exports, module
51827
51897
  }));
51828
51898
  //#endregion
51829
51899
  //#region ../../node_modules/.pnpm/browserslist@4.28.1/node_modules/browserslist/error.js
51830
- var require_error = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51900
+ var require_error = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51831
51901
  function BrowserslistError(message) {
51832
51902
  this.name = "BrowserslistError";
51833
51903
  this.message = message;
@@ -51839,7 +51909,7 @@ var require_error = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51839
51909
  }));
51840
51910
  //#endregion
51841
51911
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/dist/lib/statuses.js
51842
- var require_statuses = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51912
+ var require_statuses = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51843
51913
  module.exports = {
51844
51914
  1: "ls",
51845
51915
  2: "rec",
@@ -51852,7 +51922,7 @@ var require_statuses = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51852
51922
  }));
51853
51923
  //#endregion
51854
51924
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/dist/lib/supported.js
51855
- var require_supported = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51925
+ var require_supported = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51856
51926
  module.exports = {
51857
51927
  y: 1,
51858
51928
  n: 2,
@@ -51865,7 +51935,7 @@ var require_supported = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51865
51935
  }));
51866
51936
  //#endregion
51867
51937
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/dist/unpacker/feature.js
51868
- var require_feature = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51938
+ var require_feature = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51869
51939
  const statuses = require_statuses();
51870
51940
  const supported = require_supported();
51871
51941
  const browsers = require_browsers().browsers;
@@ -51908,7 +51978,7 @@ var require_feature = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51908
51978
  }));
51909
51979
  //#endregion
51910
51980
  //#region ../../node_modules/.pnpm/caniuse-lite@1.0.30001769/node_modules/caniuse-lite/dist/unpacker/region.js
51911
- var require_region = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51981
+ var require_region = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51912
51982
  const browsers = require_browsers().browsers;
51913
51983
  function unpackRegion(packed) {
51914
51984
  return Object.keys(packed).reduce((list, browser) => {
@@ -51927,7 +51997,7 @@ var require_region = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
51927
51997
  }));
51928
51998
  //#endregion
51929
51999
  //#region ../../node_modules/.pnpm/browserslist@4.28.1/node_modules/browserslist/node.js
51930
- var require_node = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
52000
+ var require_node = /* @__PURE__ */ __commonJSMin(((exports, module) => {
51931
52001
  var feature = require_feature().default;
51932
52002
  var region = require_region().default;
51933
52003
  var fs$2 = __require("fs");
@@ -52220,7 +52290,7 @@ var require_node = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
52220
52290
  }));
52221
52291
  //#endregion
52222
52292
  //#region ../../node_modules/.pnpm/browserslist@4.28.1/node_modules/browserslist/parse.js
52223
- var require_parse = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
52293
+ var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
52224
52294
  var AND_REGEXP = /^\s+and\s+(.*)/i;
52225
52295
  var OR_REGEXP = /^(?:,\s*|\s+or\s+)(.*)/i;
52226
52296
  function flatten(array) {
@@ -52286,7 +52356,7 @@ var require_parse = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
52286
52356
  }));
52287
52357
  //#endregion
52288
52358
  //#region ../../node_modules/.pnpm/browserslist@4.28.1/node_modules/browserslist/index.js
52289
- var require_browserslist = /* @__PURE__ */ __commonJSMin$1(((exports, module) => {
52359
+ var require_browserslist = /* @__PURE__ */ __commonJSMin(((exports, module) => {
52290
52360
  var bbm = require_dist();
52291
52361
  var jsReleases = require_envs();
52292
52362
  var agents = require_agents().agents;
@@ -53308,8 +53378,8 @@ var require_browserslist = /* @__PURE__ */ __commonJSMin$1(((exports, module) =>
53308
53378
  }));
53309
53379
  //#endregion
53310
53380
  //#region ../../node_modules/.pnpm/effect@4.0.0-beta.102/node_modules/effect/dist/Brand.js
53311
- var import_semver = /* @__PURE__ */ __toESM$1(require_semver(), 1);
53312
- var import_browserslist = /* @__PURE__ */ __toESM$1(require_browserslist(), 1);
53381
+ var import_semver = /* @__PURE__ */ __toESM(require_semver(), 1);
53382
+ var import_browserslist = /* @__PURE__ */ __toESM(require_browserslist(), 1);
53313
53383
  /**
53314
53384
  * Returns a `Constructor` that **does not apply any runtime checks** and just
53315
53385
  * returns the provided value.
@@ -53516,7 +53586,7 @@ const await_ = fiberAwait;
53516
53586
  * @category combinators
53517
53587
  * @since 2.0.0
53518
53588
  */
53519
- const join = fiberJoin;
53589
+ const join$1 = fiberJoin;
53520
53590
  /**
53521
53591
  * Interrupts a fiber, causing it to stop executing and clean up any
53522
53592
  * acquired resources.
@@ -55513,7 +55583,7 @@ const mapEffectConcurrent = (self, f, options) => fromTransformBracket(fnUntrace
55513
55583
  const fiber = runFork(f(value, i++));
55514
55584
  trackFiber(fiber);
55515
55585
  fiber.addObserver(onExit);
55516
- return offer(effects, join(fiber));
55586
+ return offer(effects, join$1(fiber));
55517
55587
  }), forever({ disableYield: true }), catchCause$1((cause) => offer(effects, failCause$3(cause)).pipe(andThen(failCause$1(effects, cause)))), forkIn(forkedScope));
55518
55588
  }
55519
55589
  return take(queue);
@@ -55839,9 +55909,9 @@ const mergeAll = /* @__PURE__ */ dual(2, (channels, { bufferSize = 16, concurren
55839
55909
  if (semaphore) if (fibers.size < concurrencyN) yield* semaphore.take(1);
55840
55910
  else {
55841
55911
  pullFiber = yield* forkChild(pull);
55842
- yield* raceFirst(semaphore.take(1), andThen(join(pullFiber), never));
55912
+ yield* raceFirst(semaphore.take(1), andThen(join$1(pullFiber), never));
55843
55913
  }
55844
- const channel = pullFiber === void 0 ? yield* pull : yield* join(pullFiber);
55914
+ const channel = pullFiber === void 0 ? yield* pull : yield* join$1(pullFiber);
55845
55915
  const childScope = forkUnsafe(forkedScope);
55846
55916
  const childPull = yield* toTransform(channel)(upstream, childScope);
55847
55917
  while (fibers.size >= concurrencyN) {
@@ -62294,6 +62364,72 @@ const warn$1 = (...args) => consoleWith((console) => sync$2(() => {
62294
62364
  }));
62295
62365
  //#endregion
62296
62366
  //#region ../../node_modules/.pnpm/effect@4.0.0-beta.102/node_modules/effect/dist/Cache.js
62367
+ var import_picocolors = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
62368
+ let p = process || {}, argv = p.argv || [], env = p.env || {};
62369
+ let isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
62370
+ let formatter = (open, close, replace = open) => (input) => {
62371
+ let string = "" + input, index = string.indexOf(close, open.length);
62372
+ return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
62373
+ };
62374
+ let replaceClose = (string, close, replace, index) => {
62375
+ let result = "", cursor = 0;
62376
+ do {
62377
+ result += string.substring(cursor, index) + replace;
62378
+ cursor = index + close.length;
62379
+ index = string.indexOf(close, cursor);
62380
+ } while (~index);
62381
+ return result + string.substring(cursor);
62382
+ };
62383
+ let createColors = (enabled = isColorSupported) => {
62384
+ let f = enabled ? formatter : () => String;
62385
+ return {
62386
+ isColorSupported: enabled,
62387
+ reset: f("\x1B[0m", "\x1B[0m"),
62388
+ bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
62389
+ dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
62390
+ italic: f("\x1B[3m", "\x1B[23m"),
62391
+ underline: f("\x1B[4m", "\x1B[24m"),
62392
+ inverse: f("\x1B[7m", "\x1B[27m"),
62393
+ hidden: f("\x1B[8m", "\x1B[28m"),
62394
+ strikethrough: f("\x1B[9m", "\x1B[29m"),
62395
+ black: f("\x1B[30m", "\x1B[39m"),
62396
+ red: f("\x1B[31m", "\x1B[39m"),
62397
+ green: f("\x1B[32m", "\x1B[39m"),
62398
+ yellow: f("\x1B[33m", "\x1B[39m"),
62399
+ blue: f("\x1B[34m", "\x1B[39m"),
62400
+ magenta: f("\x1B[35m", "\x1B[39m"),
62401
+ cyan: f("\x1B[36m", "\x1B[39m"),
62402
+ white: f("\x1B[37m", "\x1B[39m"),
62403
+ gray: f("\x1B[90m", "\x1B[39m"),
62404
+ bgBlack: f("\x1B[40m", "\x1B[49m"),
62405
+ bgRed: f("\x1B[41m", "\x1B[49m"),
62406
+ bgGreen: f("\x1B[42m", "\x1B[49m"),
62407
+ bgYellow: f("\x1B[43m", "\x1B[49m"),
62408
+ bgBlue: f("\x1B[44m", "\x1B[49m"),
62409
+ bgMagenta: f("\x1B[45m", "\x1B[49m"),
62410
+ bgCyan: f("\x1B[46m", "\x1B[49m"),
62411
+ bgWhite: f("\x1B[47m", "\x1B[49m"),
62412
+ blackBright: f("\x1B[90m", "\x1B[39m"),
62413
+ redBright: f("\x1B[91m", "\x1B[39m"),
62414
+ greenBright: f("\x1B[92m", "\x1B[39m"),
62415
+ yellowBright: f("\x1B[93m", "\x1B[39m"),
62416
+ blueBright: f("\x1B[94m", "\x1B[39m"),
62417
+ magentaBright: f("\x1B[95m", "\x1B[39m"),
62418
+ cyanBright: f("\x1B[96m", "\x1B[39m"),
62419
+ whiteBright: f("\x1B[97m", "\x1B[39m"),
62420
+ bgBlackBright: f("\x1B[100m", "\x1B[49m"),
62421
+ bgRedBright: f("\x1B[101m", "\x1B[49m"),
62422
+ bgGreenBright: f("\x1B[102m", "\x1B[49m"),
62423
+ bgYellowBright: f("\x1B[103m", "\x1B[49m"),
62424
+ bgBlueBright: f("\x1B[104m", "\x1B[49m"),
62425
+ bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
62426
+ bgCyanBright: f("\x1B[106m", "\x1B[49m"),
62427
+ bgWhiteBright: f("\x1B[107m", "\x1B[49m")
62428
+ };
62429
+ };
62430
+ module.exports = createColors();
62431
+ module.exports.createColors = createColors;
62432
+ })))(), 1);
62297
62433
  /**
62298
62434
  * Caches values loaded by an Effect lookup function.
62299
62435
  *
@@ -64263,27 +64399,6 @@ function traceSegmentInternal(segments, memo, line, column, bias) {
64263
64399
  }
64264
64400
  //#endregion
64265
64401
  //#region ../core/dist/index.js
64266
- var __create = Object.create;
64267
- var __defProp = Object.defineProperty;
64268
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
64269
- var __getOwnPropNames = Object.getOwnPropertyNames;
64270
- var __getProtoOf = Object.getPrototypeOf;
64271
- var __hasOwnProp = Object.prototype.hasOwnProperty;
64272
- var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
64273
- var __copyProps = (to, from, except, desc) => {
64274
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
64275
- key = keys[i];
64276
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
64277
- get: ((k) => from[k]).bind(null, key),
64278
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
64279
- });
64280
- }
64281
- return to;
64282
- };
64283
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
64284
- value: mod,
64285
- enumerable: true
64286
- }) : target, mod));
64287
64402
  var ProjectNotFoundError = class extends Error {
64288
64403
  name = "ProjectNotFoundError";
64289
64404
  directory;
@@ -64416,6 +64531,14 @@ const isLargeMinifiedFile = (absolutePath, knownSizeBytes) => {
64416
64531
  cachedIsLargeMinifiedByPath.set(absolutePath, result);
64417
64532
  return result;
64418
64533
  };
64534
+ const isMissingPath = (absolutePath) => {
64535
+ try {
64536
+ fs$1$3.statSync(absolutePath);
64537
+ return false;
64538
+ } catch (error) {
64539
+ return isErrnoException(error) && error.code === "ENOENT";
64540
+ }
64541
+ };
64419
64542
  function* walkSourceTreeFiles(rootDirectory) {
64420
64543
  const stack = [rootDirectory];
64421
64544
  while (stack.length > 0) {
@@ -64437,16 +64560,21 @@ function* walkSourceTreeFiles(rootDirectory) {
64437
64560
  const yieldToEventLoop = () => new Promise((resolve) => {
64438
64561
  setImmediate(resolve);
64439
64562
  });
64563
+ const toSizedSourceFileEntry = (rootDirectory, relativePath) => {
64564
+ const absolutePath = path$1$1.resolve(rootDirectory, relativePath);
64565
+ const sizeBytes = statSourceFileSize(absolutePath);
64566
+ if (sizeBytes === null && isMissingPath(absolutePath)) return null;
64567
+ if (isLargeMinifiedFile(absolutePath, sizeBytes)) return null;
64568
+ return {
64569
+ path: relativePath,
64570
+ sizeBytes: sizeBytes ?? 0
64571
+ };
64572
+ };
64440
64573
  const collectSizedSourceFiles = (rootDirectory, relativePaths) => {
64441
64574
  const entries = [];
64442
64575
  for (const relativePath of relativePaths) {
64443
- const absolutePath = path$1$1.resolve(rootDirectory, relativePath);
64444
- const sizeBytes = statSourceFileSize(absolutePath);
64445
- if (isLargeMinifiedFile(absolutePath, sizeBytes)) continue;
64446
- entries.push({
64447
- path: relativePath,
64448
- sizeBytes: sizeBytes ?? 0
64449
- });
64576
+ const entry = toSizedSourceFileEntry(rootDirectory, relativePath);
64577
+ if (entry !== null) entries.push(entry);
64450
64578
  }
64451
64579
  return entries;
64452
64580
  };
@@ -64455,12 +64583,8 @@ const collectSizedSourceFilesCooperative = async (rootDirectory, relativePaths,
64455
64583
  let sliceStartedAt = performance.now();
64456
64584
  for (const relativePath of relativePaths) {
64457
64585
  signal?.throwIfAborted();
64458
- const absolutePath = path$1$1.resolve(rootDirectory, relativePath);
64459
- const sizeBytes = statSourceFileSize(absolutePath);
64460
- if (!isLargeMinifiedFile(absolutePath, sizeBytes)) entries.push({
64461
- path: relativePath,
64462
- sizeBytes: sizeBytes ?? 0
64463
- });
64586
+ const entry = toSizedSourceFileEntry(rootDirectory, relativePath);
64587
+ if (entry !== null) entries.push(entry);
64464
64588
  if (performance.now() - sliceStartedAt >= 12) {
64465
64589
  await yieldToEventLoop();
64466
64590
  sliceStartedAt = performance.now();
@@ -65293,12 +65417,27 @@ const analyzeConfigIdentifier = (identifier, analysis, allowCompilerTransform, i
65293
65417
  const topLevelBinding = getTopLevelBinding(analysis.sourceFile, identifier.text);
65294
65418
  return Boolean(topLevelBinding && analyzeConfigNode(topLevelBinding, analysis, allowCompilerTransform, isCompilerTransformCollection, overriddenPropertyNames));
65295
65419
  };
65420
+ const hasReactCompilerConfigInSentryWrapperArgument = (callExpression, analysis, moduleSpecifier, exportName) => {
65421
+ if (moduleSpecifier !== "@sentry/nextjs" || exportName !== "withSentryConfig") return false;
65422
+ const [configArgument] = callExpression.arguments;
65423
+ return Boolean(configArgument && analyzeConfigNode(configArgument, analysis, false));
65424
+ };
65425
+ const hasEnabledCompilerOptionInVitePluginArgument = (callExpression, analysis, moduleSpecifier, exportName) => {
65426
+ if (moduleSpecifier !== "@vitejs/plugin-react" || exportName !== "default") return false;
65427
+ const [optionsArgument] = callExpression.arguments;
65428
+ if (!optionsArgument) return false;
65429
+ const compilerProperty = getSelectedObjectProperty(optionsArgument, "compiler", analysis);
65430
+ if (compilerProperty === null) return false;
65431
+ return !ts.isExpression(compilerProperty.node) || !isStaticallyDisabledConfigExpression(compilerProperty.node, compilerProperty.analysis);
65432
+ };
65433
+ const hasReactCompilerConfigInCallArguments = (callExpression, analysis, moduleSpecifier, exportName) => hasReactCompilerConfigInSentryWrapperArgument(callExpression, analysis, moduleSpecifier, exportName) || hasEnabledCompilerOptionInVitePluginArgument(callExpression, analysis, moduleSpecifier, exportName);
65296
65434
  const analyzeConfigCallTarget = (callExpression, analysis, allowCompilerTransform) => {
65297
65435
  const target = callExpression.expression;
65298
65436
  const callableRequiredModuleSpecifier = getRequireModuleSpecifier(target);
65299
65437
  if (callableRequiredModuleSpecifier !== null) {
65300
65438
  if (ts.isCallExpression(target) && ts.isIdentifier(target.expression) && (analysis.localBindings.has(target.expression.text) || getScopedConfigBinding(target.expression).wasFound || hasTopLevelValueBinding(analysis.sourceFile, "require"))) return false;
65301
65439
  if (allowCompilerTransform && isCompilerTransformModule(callableRequiredModuleSpecifier, "default")) return true;
65440
+ if (hasReactCompilerConfigInCallArguments(callExpression, analysis, callableRequiredModuleSpecifier, "default")) return true;
65302
65441
  const hasCompilerTransform = analyzeImportedConfig({
65303
65442
  analysis,
65304
65443
  moduleSpecifier: callableRequiredModuleSpecifier,
@@ -65316,6 +65455,7 @@ const analyzeConfigCallTarget = (callExpression, analysis, allowCompilerTransfor
65316
65455
  if (requiredModuleSpecifier !== null) {
65317
65456
  if (ts.isCallExpression(target.expression) && ts.isIdentifier(target.expression.expression) && (analysis.localBindings.has(target.expression.expression.text) || getScopedConfigBinding(target.expression.expression).wasFound || hasTopLevelValueBinding(analysis.sourceFile, "require"))) return false;
65318
65457
  if (allowCompilerTransform && isCompilerTransformModule(requiredModuleSpecifier, propertyName)) return true;
65458
+ if (hasReactCompilerConfigInCallArguments(callExpression, analysis, requiredModuleSpecifier, propertyName)) return true;
65319
65459
  const hasCompilerTransform = analyzeImportedConfig({
65320
65460
  analysis,
65321
65461
  moduleSpecifier: requiredModuleSpecifier,
@@ -65330,6 +65470,7 @@ const analyzeConfigCallTarget = (callExpression, analysis, allowCompilerTransfor
65330
65470
  const importBinding = analysis.localBindings.has(target.expression.text) || getScopedConfigBinding(target.expression).wasFound ? null : getImportBinding(analysis.sourceFile, target.expression.text);
65331
65471
  if (importBinding?.isNamespace) {
65332
65472
  if (allowCompilerTransform && isCompilerTransformModule(importBinding.moduleSpecifier, propertyName)) return true;
65473
+ if (hasReactCompilerConfigInCallArguments(callExpression, analysis, importBinding.moduleSpecifier, propertyName)) return true;
65333
65474
  const hasCompilerTransform = analyzeImportedConfig({
65334
65475
  analysis,
65335
65476
  moduleSpecifier: importBinding.moduleSpecifier,
@@ -65431,6 +65572,7 @@ const analyzeConfigNode = (node, analysis, allowCompilerTransform, isCompilerTra
65431
65572
  const importBinding = getImportBinding(analysis.sourceFile, node.expression.text);
65432
65573
  if (importBinding) {
65433
65574
  if (allowCompilerTransform && isCompilerTransformModule(importBinding.moduleSpecifier, importBinding.exportName)) return true;
65575
+ if (hasReactCompilerConfigInCallArguments(node, analysis, importBinding.moduleSpecifier, importBinding.exportName)) return true;
65434
65576
  if (allowCompilerTransform && importBinding.moduleSpecifier === "@rolldown/plugin-babel" && importBinding.exportName === "default" && node.arguments.some((argument) => analyzeConfigNode(argument, analysis, false))) return true;
65435
65577
  const hasCompilerTransform = analyzeImportedConfig({
65436
65578
  analysis,
@@ -65664,6 +65806,18 @@ const detectPreES2023Target = (directory) => {
65664
65806
  }
65665
65807
  return false;
65666
65808
  };
65809
+ const SHADCN_CONFIG_FILE_NAME = "components.json";
65810
+ const detectShadcnUi = (directory) => {
65811
+ if (isFile(path$1$1.join(directory, SHADCN_CONFIG_FILE_NAME))) return true;
65812
+ if (isProjectBoundary(directory)) return false;
65813
+ let ancestorDirectory = path$1$1.dirname(directory);
65814
+ while (ancestorDirectory !== path$1$1.dirname(ancestorDirectory)) {
65815
+ if (isFile(path$1$1.join(ancestorDirectory, SHADCN_CONFIG_FILE_NAME))) return true;
65816
+ if (isProjectBoundary(ancestorDirectory)) return false;
65817
+ ancestorDirectory = path$1$1.dirname(ancestorDirectory);
65818
+ }
65819
+ return false;
65820
+ };
65667
65821
  const FRAMEWORK_PACKAGES = {
65668
65822
  next: "nextjs",
65669
65823
  "@tanstack/react-start": "tanstack-start",
@@ -66429,6 +66583,29 @@ const getTanStackQueryVersion = (packageJson) => {
66429
66583
  packageNames: TANSTACK_REACT_QUERY_PACKAGES
66430
66584
  });
66431
66585
  };
66586
+ const hasAnyDependency = (packageJson, packageNames) => {
66587
+ const allDependencies = {
66588
+ ...packageJson.peerDependencies,
66589
+ ...packageJson.dependencies,
66590
+ ...packageJson.devDependencies,
66591
+ ...packageJson.optionalDependencies
66592
+ };
66593
+ return packageNames.some((packageName) => allDependencies[packageName] !== void 0);
66594
+ };
66595
+ const BASE_UI_PACKAGES = ["@base-ui-components/react", "@base-ui/react"];
66596
+ const hasBaseUiDependency = (packageJson) => hasAnyDependency(packageJson, BASE_UI_PACKAGES);
66597
+ const RADIX_UNIFIED_PACKAGE = "radix-ui";
66598
+ const RADIX_PRIMITIVE_PACKAGE_PREFIX = "@radix-ui/react-";
66599
+ const RADIX_NON_PRIMITIVE_PACKAGES = new Set(["@radix-ui/react-icons"]);
66600
+ const hasRadixUiDependency = (packageJson) => {
66601
+ const allDependencies = {
66602
+ ...packageJson.peerDependencies,
66603
+ ...packageJson.dependencies,
66604
+ ...packageJson.devDependencies,
66605
+ ...packageJson.optionalDependencies
66606
+ };
66607
+ return Object.keys(allDependencies).some((packageName) => packageName === RADIX_UNIFIED_PACKAGE || packageName.startsWith(RADIX_PRIMITIVE_PACKAGE_PREFIX) && !RADIX_NON_PRIMITIVE_PACKAGES.has(packageName));
66608
+ };
66432
66609
  const STYLED_COMPONENTS_PACKAGES = ["styled-components"];
66433
66610
  const getStyledComponentsVersion = (packageJson) => {
66434
66611
  return getPreferredDependencyVersion({
@@ -66459,6 +66636,10 @@ const hasI18nDependency = (packageJson) => {
66459
66636
  };
66460
66637
  return I18N_PACKAGES.some((packageName) => allDependencies[packageName] !== void 0);
66461
66638
  };
66639
+ const REACT_ARIA_COMPONENT_PACKAGES = ["react-aria-components"];
66640
+ const TANSTACK_TABLE_PACKAGES = ["@tanstack/react-table"];
66641
+ const TANSTACK_VIRTUAL_PACKAGES = ["@tanstack/react-virtual"];
66642
+ const TANSTACK_FORM_PACKAGES = ["@tanstack/react-form"];
66462
66643
  const REANIMATED_DEPENDENCY_NAME = "react-native-reanimated";
66463
66644
  const MOBX_REACT_PACKAGE_NAME = "mobx-react";
66464
66645
  const MOBX_REACT_LITE_PACKAGE_NAME = "mobx-react-lite";
@@ -66649,6 +66830,13 @@ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, roo
66649
66830
  });
66650
66831
  if (styledComponentsVersion && shouldReplaceStyledComponentsVersion(facts.styledComponentsVersion, styledComponentsVersion)) facts.styledComponentsVersion = styledComponentsVersion;
66651
66832
  facts.hasI18nLibrary = facts.hasI18nLibrary || hasI18nDependency(packageJson);
66833
+ facts.hasShadcnUi = facts.hasShadcnUi || detectShadcnUi(directory);
66834
+ facts.hasRadixUi = facts.hasRadixUi || hasRadixUiDependency(packageJson);
66835
+ facts.hasBaseUi = facts.hasBaseUi || hasBaseUiDependency(packageJson);
66836
+ facts.hasReactAriaComponents = facts.hasReactAriaComponents || hasAnyDependency(packageJson, REACT_ARIA_COMPONENT_PACKAGES);
66837
+ facts.hasTanstackTable = facts.hasTanstackTable || hasAnyDependency(packageJson, TANSTACK_TABLE_PACKAGES);
66838
+ facts.hasTanstackVirtual = facts.hasTanstackVirtual || hasAnyDependency(packageJson, TANSTACK_VIRTUAL_PACKAGES);
66839
+ facts.hasTanstackForm = facts.hasTanstackForm || hasAnyDependency(packageJson, TANSTACK_FORM_PACKAGES);
66652
66840
  for (const packageName of REACT_THREE_FIBER_DEPENDENCY_NAMES) {
66653
66841
  const version = resolveCatalogBackedDependencyVersion({
66654
66842
  rootDirectory,
@@ -66751,6 +66939,13 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
66751
66939
  tanstackQueryVersion: null,
66752
66940
  styledComponentsVersion: null,
66753
66941
  hasI18nLibrary: false,
66942
+ hasShadcnUi: false,
66943
+ hasRadixUi: false,
66944
+ hasBaseUi: false,
66945
+ hasReactAriaComponents: false,
66946
+ hasTanstackTable: false,
66947
+ hasTanstackVirtual: false,
66948
+ hasTanstackForm: false,
66754
66949
  hasReactNativeAwarePackage: false,
66755
66950
  hasReanimatedAwarePackage: false,
66756
66951
  hasSsrDependency: false,
@@ -67102,6 +67297,12 @@ const discoverProjectWithoutPackageJson = (directory, options) => {
67102
67297
  remotionVersion: null,
67103
67298
  remotionMajorVersion: null,
67104
67299
  hasI18nLibrary: false,
67300
+ hasRadixUi: false,
67301
+ hasBaseUi: false,
67302
+ hasReactAriaComponents: false,
67303
+ hasTanstackTable: false,
67304
+ hasTanstackVirtual: false,
67305
+ hasTanstackForm: false,
67105
67306
  tanstackQueryVersion: null,
67106
67307
  styledComponentsVersion: null,
67107
67308
  hasThree: false,
@@ -67123,6 +67324,7 @@ const discoverProjectWithoutPackageJson = (directory, options) => {
67123
67324
  shopifyFlashListMajorVersion: null,
67124
67325
  hasReanimated: false,
67125
67326
  reanimatedVersion: null,
67327
+ hasShadcnUi: detectShadcnUi(directory),
67126
67328
  isPreES2023Target: hasOwnTsConfig && detectPreES2023Target(directory),
67127
67329
  isStaticExport: false,
67128
67330
  sourceFileCount
@@ -67285,6 +67487,12 @@ const discoverProject = (directory, options = {}) => {
67285
67487
  hasReactCompilerLintPlugin: detectReactCompilerLintPlugin(directory, packageJson),
67286
67488
  hasTanStackQuery: tanstackQueryVersion !== null,
67287
67489
  hasI18nLibrary: workspaceFacts.hasI18nLibrary,
67490
+ hasRadixUi: workspaceFacts.hasRadixUi,
67491
+ hasBaseUi: workspaceFacts.hasBaseUi,
67492
+ hasReactAriaComponents: workspaceFacts.hasReactAriaComponents,
67493
+ hasTanstackTable: workspaceFacts.hasTanstackTable,
67494
+ hasTanstackVirtual: workspaceFacts.hasTanstackVirtual,
67495
+ hasTanstackForm: workspaceFacts.hasTanstackForm,
67288
67496
  tanstackQueryVersion,
67289
67497
  styledComponentsVersion: workspaceFacts.styledComponentsVersion,
67290
67498
  valtioVersion,
@@ -67311,6 +67519,7 @@ const discoverProject = (directory, options = {}) => {
67311
67519
  shopifyFlashListMajorVersion: shopifyFlashListVersion === null ? null : getLowestDependencyMajor(shopifyFlashListVersion),
67312
67520
  hasReanimated,
67313
67521
  reanimatedVersion,
67522
+ hasShadcnUi: workspaceFacts.hasShadcnUi,
67314
67523
  isPreES2023Target,
67315
67524
  isStaticExport: framework === "nextjs" && detectNextjsStaticExport(workspaceFacts.next.sourceDirectory ?? directory),
67316
67525
  sourceFileCount
@@ -67487,12 +67696,26 @@ const getEquivalentRuleKeys = (ruleKey) => {
67487
67696
  const nativeRuleKey = canonicalizeRuleKey(ruleKey);
67488
67697
  return [nativeRuleKey, ...getLegacyRuleKeysForNative(nativeRuleKey)];
67489
67698
  };
67490
- const toRelativePath = (filePath, rootDirectory) => {
67491
- const normalizedFilePath = filePath.replace(/\\/g, "/");
67492
- const normalizedRoot = rootDirectory.replace(/\\/g, "/").replace(/\/$/, "") + "/";
67493
- if (normalizedFilePath.startsWith(normalizedRoot)) return normalizedFilePath.slice(normalizedRoot.length);
67494
- return normalizedFilePath.replace(/^\.\//, "");
67699
+ /**
67700
+ * Resolves the absolute path to read for a diagnostic's `filePath`,
67701
+ * accounting for the various shapes oxlint emits:
67702
+ *
67703
+ * - `file://` URL — decode to an absolute filesystem path.
67704
+ * - Absolute POSIX (`/abs/path/file.tsx`) — pass through.
67705
+ * - Absolute Windows (`C:/...` or `C:\...`) — pass through.
67706
+ * - `./relative` or bare relative — join against `rootDirectory`.
67707
+ *
67708
+ * Shared between the streaming diagnostic pipeline and the legacy
67709
+ * array-shaped `mergeAndFilterDiagnostics` wrapper so file-line lookups
67710
+ * use one canonical resolution path.
67711
+ */
67712
+ const resolveCandidateReadPath = (rootDirectory, filePath) => {
67713
+ if (filePath.startsWith("file://")) return fileURLToPath(filePath);
67714
+ const normalizedFile = filePath.replace(/\\/g, "/");
67715
+ if (normalizedFile.startsWith("/") || /^[a-zA-Z]:\//.test(normalizedFile) || /^[a-zA-Z]:\\/.test(filePath)) return filePath;
67716
+ return `${rootDirectory.replace(/\\/g, "/").replace(/\/$/, "")}/${normalizedFile.replace(/^\.\//, "")}`;
67495
67717
  };
67718
+ const toNormalizedRelativePath = (filePath, rootDirectory) => path$1$1.relative(path$1$1.resolve(rootDirectory), path$1$1.resolve(resolveCandidateReadPath(rootDirectory, filePath))).replaceAll("\\", "/") || ".";
67496
67719
  const warnConfigIssue = (message) => {
67497
67720
  process.stderr.write(`[react-doctor] ${message}\n`);
67498
67721
  };
@@ -67541,7 +67764,7 @@ const compileIgnoreOverrides = (userConfig) => {
67541
67764
  };
67542
67765
  const isDiagnosticIgnoredByOverrides = (diagnostic, rootDirectory, overrides) => {
67543
67766
  if (overrides.length === 0) return false;
67544
- const relativeFilePath = toRelativePath(diagnostic.filePath, rootDirectory);
67767
+ const relativeFilePath = toNormalizedRelativePath(diagnostic.filePath, rootDirectory);
67545
67768
  const ruleIdentifier = `${diagnostic.plugin}/${diagnostic.rule}`;
67546
67769
  return overrides.some((override) => override.filePatterns.some((pattern) => pattern.test(relativeFilePath)) && hasMatchingRuleOverride(override.ruleIds, ruleIdentifier));
67547
67770
  };
@@ -67881,7 +68104,7 @@ const compileIgnoredFilePatterns = (userConfig) => {
67881
68104
  };
67882
68105
  const isFileIgnoredByPatterns = (filePath, rootDirectory, patterns) => {
67883
68106
  if (patterns.length === 0) return false;
67884
- const relativePath = toRelativePath(filePath, rootDirectory);
68107
+ const relativePath = toNormalizedRelativePath(filePath, rootDirectory);
67885
68108
  return patterns.some((pattern) => pattern.test(relativePath));
67886
68109
  };
67887
68110
  const SCRIPT_EXTENSION_FRAGMENT = "[cm]?[jt]sx?";
@@ -68009,25 +68232,6 @@ const classifyPackageRole = (filename) => {
68009
68232
  return result;
68010
68233
  };
68011
68234
  /**
68012
- * Resolves the absolute path to read for a diagnostic's `filePath`,
68013
- * accounting for the various shapes oxlint emits:
68014
- *
68015
- * - `file://` URL — decode to an absolute filesystem path.
68016
- * - Absolute POSIX (`/abs/path/file.tsx`) — pass through.
68017
- * - Absolute Windows (`C:/...` or `C:\...`) — pass through.
68018
- * - `./relative` or bare relative — join against `rootDirectory`.
68019
- *
68020
- * Shared between the streaming diagnostic pipeline and the legacy
68021
- * array-shaped `mergeAndFilterDiagnostics` wrapper so file-line lookups
68022
- * use one canonical resolution path.
68023
- */
68024
- const resolveCandidateReadPath = (rootDirectory, filePath) => {
68025
- if (filePath.startsWith("file://")) return fileURLToPath(filePath);
68026
- const normalizedFile = filePath.replace(/\\/g, "/");
68027
- if (normalizedFile.startsWith("/") || /^[a-zA-Z]:\//.test(normalizedFile) || /^[a-zA-Z]:\\/.test(filePath)) return filePath;
68028
- return `${rootDirectory.replace(/\\/g, "/").replace(/\/$/, "")}/${normalizedFile.replace(/^\.\//, "")}`;
68029
- };
68030
- /**
68031
68235
  * Shared raw-line scanners that detect whether a diagnostic site is
68032
68236
  * enclosed by a configured `textComponents` entry or a
68033
68237
  * `rawTextWrapperComponents` entry. Both checks are used by the
@@ -69462,6 +69666,28 @@ const checkExpoEnvLocalFiles = (context) => {
69462
69666
  help: `Add \`.env*.local\` to your .gitignore. If already committed, untrack with \`git rm --cached ${committedEnvFiles.join(" ")}\``
69463
69667
  })];
69464
69668
  };
69669
+ const JAVASCRIPT_MODULE_FILE_PATTERN = /\.[cm]?[jt]sx?$/;
69670
+ const hasStaticModuleSubpath = (rootDirectory, packageName) => {
69671
+ const packageSubpathPrefix = `${packageName}/`;
69672
+ for (const { absolutePath, name } of walkSourceTreeFiles(rootDirectory)) {
69673
+ if (!JAVASCRIPT_MODULE_FILE_PATTERN.test(name)) continue;
69674
+ let sourceText;
69675
+ try {
69676
+ sourceText = fs$1$3.readFileSync(absolutePath, "utf-8");
69677
+ } catch {
69678
+ continue;
69679
+ }
69680
+ if (!sourceText.includes(packageSubpathPrefix)) continue;
69681
+ let moduleSpecifiers;
69682
+ try {
69683
+ moduleSpecifiers = collectStaticModuleSpecifiers(sourceText, { filePath: absolutePath });
69684
+ } catch {
69685
+ continue;
69686
+ }
69687
+ for (const moduleSpecifier of moduleSpecifiers) if (moduleSpecifier.startsWith(packageSubpathPrefix)) return true;
69688
+ }
69689
+ return false;
69690
+ };
69465
69691
  const isExpoSdkAtLeast = (expoSdkMajor, minMajor) => expoSdkMajor !== null && expoSdkMajor >= minMajor;
69466
69692
  const UNIMODULES_HELP = "Remove every `@unimodules/*` and `react-native-unimodules` package — their functionality now lives in `expo-modules-core`. See https://expo.fyi/r/sdk-44-remove-unimodules";
69467
69693
  const FIREBASE_HELP = "Use the Firebase JS SDK or React Native Firebase directly. See https://expo.fyi/firebase-migration-guide";
@@ -69515,7 +69741,8 @@ const FLAGGED_DEPENDENCIES = [
69515
69741
  packageName: "@expo/metro-config",
69516
69742
  rule: "expo-no-redundant-dependency",
69517
69743
  message: "\"@expo/metro-config\" should not be a direct dependency. Expo pins the compatible Metro config, and a direct entry can drift to a version that breaks bundling",
69518
- help: "Remove `@expo/metro-config` and import `expo/metro-config` in your metro.config.js"
69744
+ help: "Remove `@expo/metro-config` and import `expo/metro-config` in your metro.config.js",
69745
+ skipWhenSubpathImported: true
69519
69746
  },
69520
69747
  {
69521
69748
  packageName: "@types/react-native",
@@ -69576,8 +69803,9 @@ const FLAGGED_DEPENDENCIES = [
69576
69803
  ];
69577
69804
  const checkExpoFlaggedDependencies = (context) => FLAGGED_DEPENDENCIES.filter((flaggedDependency) => {
69578
69805
  if (!context.directDependencyNames.has(flaggedDependency.packageName)) return false;
69579
- if (flaggedDependency.minSdkMajor === void 0) return true;
69580
- return isExpoSdkAtLeast(context.expoSdkMajor, flaggedDependency.minSdkMajor);
69806
+ if (flaggedDependency.minSdkMajor !== void 0 && !isExpoSdkAtLeast(context.expoSdkMajor, flaggedDependency.minSdkMajor)) return false;
69807
+ if (flaggedDependency.skipWhenSubpathImported && hasStaticModuleSubpath(context.rootDirectory, flaggedDependency.packageName)) return false;
69808
+ return true;
69581
69809
  }).map((flaggedDependency) => buildExpoDiagnostic({
69582
69810
  rule: flaggedDependency.rule,
69583
69811
  message: flaggedDependency.message,
@@ -69646,18 +69874,58 @@ const METRO_CONFIG_FILE_NAMES = [
69646
69874
  const EXPO_METRO_CONFIG_EXTEND_SIGNALS = [
69647
69875
  "expo/metro-config",
69648
69876
  "@sentry/react-native/metro",
69649
- "getSentryExpoConfig"
69877
+ "getSentryExpoConfig",
69878
+ "posthog-react-native/metro",
69879
+ "getPostHogExpoConfig"
69650
69880
  ];
69881
+ const resolveLocalMetroConfigModule = (moduleSpecifier, importingFilePath, rootDirectory) => {
69882
+ if (!moduleSpecifier.startsWith(".")) return void 0;
69883
+ const importedPath = path$1$1.resolve(path$1$1.dirname(importingFilePath), moduleSpecifier);
69884
+ const candidateBasePaths = [
69885
+ importedPath,
69886
+ importedPath.replace(/\.[cm]?js$/, ""),
69887
+ path$1$1.join(importedPath, "index")
69888
+ ];
69889
+ for (const candidateBasePath of candidateBasePaths) {
69890
+ const resolvedPath = resolveEntryWithExtensions(candidateBasePath);
69891
+ if (resolvedPath !== void 0 && isFile(resolvedPath) && isPathInsideDirectoryOrEqual(resolvedPath, rootDirectory)) return resolvedPath;
69892
+ }
69893
+ };
69894
+ const hasExpoMetroConfigSignal = (metroConfigPath, rootDirectory) => {
69895
+ const pendingFilePaths = [metroConfigPath];
69896
+ const visitedFilePaths = /* @__PURE__ */ new Set();
69897
+ while (pendingFilePaths.length > 0) {
69898
+ const currentFilePath = pendingFilePaths.pop();
69899
+ if (currentFilePath === void 0 || visitedFilePaths.has(currentFilePath)) continue;
69900
+ if (visitedFilePaths.size >= 100) return true;
69901
+ visitedFilePaths.add(currentFilePath);
69902
+ let contents;
69903
+ try {
69904
+ contents = fs$1$3.readFileSync(currentFilePath, "utf-8");
69905
+ } catch {
69906
+ return true;
69907
+ }
69908
+ if (EXPO_METRO_CONFIG_EXTEND_SIGNALS.some((signal) => contents.includes(signal))) return true;
69909
+ let moduleSpecifiers;
69910
+ try {
69911
+ moduleSpecifiers = collectStaticModuleSpecifiers(contents, {
69912
+ filePath: currentFilePath,
69913
+ includeTypeOnly: false
69914
+ });
69915
+ } catch {
69916
+ continue;
69917
+ }
69918
+ for (const moduleSpecifier of moduleSpecifiers) {
69919
+ const localModulePath = resolveLocalMetroConfigModule(moduleSpecifier, currentFilePath, rootDirectory);
69920
+ if (localModulePath !== void 0 && !visitedFilePaths.has(localModulePath)) pendingFilePaths.push(localModulePath);
69921
+ }
69922
+ }
69923
+ return false;
69924
+ };
69651
69925
  const checkExpoMetroConfig = (context) => {
69652
69926
  const metroConfigPath = METRO_CONFIG_FILE_NAMES.map((fileName) => path$1$1.join(context.rootDirectory, fileName)).find((candidatePath) => isFile(candidatePath));
69653
69927
  if (metroConfigPath === void 0) return [];
69654
- let contents;
69655
- try {
69656
- contents = fs$1$3.readFileSync(metroConfigPath, "utf-8");
69657
- } catch {
69658
- return [];
69659
- }
69660
- if (EXPO_METRO_CONFIG_EXTEND_SIGNALS.some((signal) => contents.includes(signal))) return [];
69928
+ if (hasExpoMetroConfigSignal(metroConfigPath, context.rootDirectory)) return [];
69661
69929
  return [buildExpoDiagnostic({
69662
69930
  rule: "expo-metro-config",
69663
69931
  filePath: path$1$1.basename(metroConfigPath),
@@ -71059,6 +71327,13 @@ const buildCapabilities = (project) => {
71059
71327
  minor: 0
71060
71328
  })) capabilities.add("tailwind:4");
71061
71329
  }
71330
+ if (project.hasShadcnUi === true) capabilities.add("shadcn");
71331
+ if (project.hasRadixUi === true) capabilities.add("radix-ui");
71332
+ if (project.hasBaseUi === true) capabilities.add("base-ui");
71333
+ if (project.hasReactAriaComponents === true) capabilities.add("react-aria");
71334
+ if (project.hasTanstackTable === true) capabilities.add("tanstack-table");
71335
+ if (project.hasTanstackVirtual === true) capabilities.add("tanstack-virtual");
71336
+ if (project.hasTanstackForm === true) capabilities.add("tanstack-form");
71062
71337
  if (project.zodVersion !== null) capabilities.add("zod");
71063
71338
  if (project.zodMajorVersion !== null && project.zodMajorVersion >= 4) capabilities.add("zod:4");
71064
71339
  if (project.mobxVersion !== void 0 && project.mobxVersion !== null || project.hasMobxReact === true || project.hasMobxReactLite === true || project.hasMobxStateTree === true || project.hasMobxReactObserver === true) capabilities.add("mobx");
@@ -71236,72 +71511,6 @@ const checkSecurityScanCooperative = async (rootDirectory, options = {}) => {
71236
71511
  }
71237
71512
  return session.diagnostics;
71238
71513
  };
71239
- var import_picocolors = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
71240
- let p = process || {}, argv = p.argv || [], env = p.env || {};
71241
- let isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
71242
- let formatter = (open, close, replace = open) => (input) => {
71243
- let string = "" + input, index = string.indexOf(close, open.length);
71244
- return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
71245
- };
71246
- let replaceClose = (string, close, replace, index) => {
71247
- let result = "", cursor = 0;
71248
- do {
71249
- result += string.substring(cursor, index) + replace;
71250
- cursor = index + close.length;
71251
- index = string.indexOf(close, cursor);
71252
- } while (~index);
71253
- return result + string.substring(cursor);
71254
- };
71255
- let createColors = (enabled = isColorSupported) => {
71256
- let f = enabled ? formatter : () => String;
71257
- return {
71258
- isColorSupported: enabled,
71259
- reset: f("\x1B[0m", "\x1B[0m"),
71260
- bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
71261
- dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
71262
- italic: f("\x1B[3m", "\x1B[23m"),
71263
- underline: f("\x1B[4m", "\x1B[24m"),
71264
- inverse: f("\x1B[7m", "\x1B[27m"),
71265
- hidden: f("\x1B[8m", "\x1B[28m"),
71266
- strikethrough: f("\x1B[9m", "\x1B[29m"),
71267
- black: f("\x1B[30m", "\x1B[39m"),
71268
- red: f("\x1B[31m", "\x1B[39m"),
71269
- green: f("\x1B[32m", "\x1B[39m"),
71270
- yellow: f("\x1B[33m", "\x1B[39m"),
71271
- blue: f("\x1B[34m", "\x1B[39m"),
71272
- magenta: f("\x1B[35m", "\x1B[39m"),
71273
- cyan: f("\x1B[36m", "\x1B[39m"),
71274
- white: f("\x1B[37m", "\x1B[39m"),
71275
- gray: f("\x1B[90m", "\x1B[39m"),
71276
- bgBlack: f("\x1B[40m", "\x1B[49m"),
71277
- bgRed: f("\x1B[41m", "\x1B[49m"),
71278
- bgGreen: f("\x1B[42m", "\x1B[49m"),
71279
- bgYellow: f("\x1B[43m", "\x1B[49m"),
71280
- bgBlue: f("\x1B[44m", "\x1B[49m"),
71281
- bgMagenta: f("\x1B[45m", "\x1B[49m"),
71282
- bgCyan: f("\x1B[46m", "\x1B[49m"),
71283
- bgWhite: f("\x1B[47m", "\x1B[49m"),
71284
- blackBright: f("\x1B[90m", "\x1B[39m"),
71285
- redBright: f("\x1B[91m", "\x1B[39m"),
71286
- greenBright: f("\x1B[92m", "\x1B[39m"),
71287
- yellowBright: f("\x1B[93m", "\x1B[39m"),
71288
- blueBright: f("\x1B[94m", "\x1B[39m"),
71289
- magentaBright: f("\x1B[95m", "\x1B[39m"),
71290
- cyanBright: f("\x1B[96m", "\x1B[39m"),
71291
- whiteBright: f("\x1B[97m", "\x1B[39m"),
71292
- bgBlackBright: f("\x1B[100m", "\x1B[49m"),
71293
- bgRedBright: f("\x1B[101m", "\x1B[49m"),
71294
- bgGreenBright: f("\x1B[102m", "\x1B[49m"),
71295
- bgYellowBright: f("\x1B[103m", "\x1B[49m"),
71296
- bgBlueBright: f("\x1B[104m", "\x1B[49m"),
71297
- bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
71298
- bgCyanBright: f("\x1B[106m", "\x1B[49m"),
71299
- bgWhiteBright: f("\x1B[107m", "\x1B[49m")
71300
- };
71301
- };
71302
- module.exports = createColors();
71303
- module.exports.createColors = createColors;
71304
- })))(), 1);
71305
71514
  const highlighter = {
71306
71515
  error: import_picocolors.default.red,
71307
71516
  warn: import_picocolors.default.yellow,
@@ -71458,6 +71667,12 @@ const withProjectAnalysisWorkerSlot = async (task, abortSignal) => {
71458
71667
  });
71459
71668
  return projectAnalysisWorkerSlots.run(task, abortSignal);
71460
71669
  };
71670
+ const toRelativePath = (filePath, rootDirectory) => {
71671
+ const normalizedFilePath = filePath.replace(/\\/g, "/");
71672
+ const normalizedRoot = rootDirectory.replace(/\\/g, "/").replace(/\/$/, "") + "/";
71673
+ if (normalizedFilePath.startsWith(normalizedRoot)) return normalizedFilePath.slice(normalizedRoot.length);
71674
+ return normalizedFilePath.replace(/^\.\//, "");
71675
+ };
71461
71676
  const REACT_DOCTOR_TOOLCHAIN_PACKAGES = new Set([
71462
71677
  "react-doctor",
71463
71678
  "eslint-plugin-react-doctor",
@@ -72143,7 +72358,7 @@ const buildResult = (input) => {
72143
72358
  const detectDuplicateJsxSubtreesCooperative = async (sourceReader, options = {}) => {
72144
72359
  const resolvedOptions = resolveOptions$1(options);
72145
72360
  const incompleteReasons = [];
72146
- const sortedPaths = [...sourceReader.paths].sort((left, right) => left.localeCompare(right));
72361
+ const sortedPaths = sourceReader.paths.filter((sourcePath) => JSX_DUPLICATION_SOURCE_FILE_PATTERN.test(sourcePath)).sort((left, right) => left.localeCompare(right));
72147
72362
  if (sortedPaths.length > resolvedOptions.maxSourceFiles) incompleteReasons.push({
72148
72363
  kind: "source-file-limit",
72149
72364
  limit: resolvedOptions.maxSourceFiles,
@@ -72207,7 +72422,6 @@ const readTextFileUpToCharacterLimit = async (input) => {
72207
72422
  input.signal?.throwIfAborted();
72208
72423
  return buffer.subarray(0, readOffset).toString("utf-8");
72209
72424
  };
72210
- const toNormalizedRelativePath = (filePath, rootDirectory) => path$1$1.relative(path$1$1.resolve(rootDirectory), path$1$1.resolve(rootDirectory, filePath)).replaceAll("\\", "/") || ".";
72211
72425
  const buildJsxSourceReader = async (input) => {
72212
72426
  const ignoredFilePatterns = compileGlobPatternsLenient(input.ignorePatterns ?? [], (error) => warnConfigIssue(`ignore.files: ${error.message}`));
72213
72427
  const sourceFiles = (await listSourceFilesWithSizeCooperative(input.rootDirectory, input.signal)).filter((sourceFile) => JSX_DUPLICATION_SOURCE_FILE_PATTERN.test(sourceFile.path) && classifyFileContext(sourceFile.path) === "production" && !isFileIgnoredByPatterns(sourceFile.path, input.rootDirectory, ignoredFilePatterns));
@@ -72619,7 +72833,11 @@ var Git = class Git extends Service()("react-doctor/Git") {
72619
72833
  const symref = yield* runGit(directory, ["symbolic-ref", "refs/remotes/origin/HEAD"]);
72620
72834
  if (symref.status === 0) {
72621
72835
  const trimmed = trimOrNull(symref.stdout);
72622
- if (trimmed !== null) return trimmed.replace("refs/remotes/origin/", "");
72836
+ if (trimmed !== null) {
72837
+ const branchName = trimmed.replace("refs/remotes/origin/", "");
72838
+ const remoteBranch = `origin/${branchName}`;
72839
+ return (yield* branchExists(directory, remoteBranch)) ? remoteBranch : branchName;
72840
+ }
72623
72841
  }
72624
72842
  const candidates = yield* runGit(directory, [
72625
72843
  "for-each-ref",
@@ -72627,7 +72845,10 @@ var Git = class Git extends Service()("react-doctor/Git") {
72627
72845
  ...DEFAULT_BRANCH_CANDIDATES.map((candidate) => `refs/heads/${candidate}`)
72628
72846
  ]);
72629
72847
  if (candidates.status !== 0) return null;
72630
- return trimOrNull(candidates.stdout.split("\n")[0] ?? "");
72848
+ const localBranch = trimOrNull(candidates.stdout.split("\n")[0] ?? "");
72849
+ if (localBranch === null) return null;
72850
+ const remoteBranch = `origin/${localBranch}`;
72851
+ return (yield* branchExists(directory, remoteBranch)) ? remoteBranch : localBranch;
72631
72852
  }).pipe(withSpan("Git.defaultBranch"));
72632
72853
  const branchExists = (directory, branch) => runGit(directory, [
72633
72854
  "rev-parse",
@@ -72964,59 +73185,11 @@ const isLocalPathExtend = (entry) => {
72964
73185
  for (const prefix of EXTENDS_LOCAL_PATH_PREFIXES) if (entry.startsWith(prefix)) return true;
72965
73186
  return false;
72966
73187
  };
72967
- const stripJsoncComments = (raw) => {
72968
- let result = "";
72969
- let cursor = 0;
72970
- let inString = false;
72971
- let stringQuote = "";
72972
- while (cursor < raw.length) {
72973
- const character = raw[cursor];
72974
- const nextCharacter = raw[cursor + 1];
72975
- if (inString) {
72976
- result += character;
72977
- if (character === "\\" && cursor + 1 < raw.length) {
72978
- result += nextCharacter;
72979
- cursor += 2;
72980
- continue;
72981
- }
72982
- if (character === stringQuote) inString = false;
72983
- cursor += 1;
72984
- continue;
72985
- }
72986
- if (character === "\"" || character === "'") {
72987
- inString = true;
72988
- stringQuote = character;
72989
- result += character;
72990
- cursor += 1;
72991
- continue;
72992
- }
72993
- if (character === "/" && nextCharacter === "/") {
72994
- const lineEndIndex = raw.indexOf("\n", cursor);
72995
- cursor = lineEndIndex === -1 ? raw.length : lineEndIndex;
72996
- continue;
72997
- }
72998
- if (character === "/" && nextCharacter === "*") {
72999
- const blockEndIndex = raw.indexOf("*/", cursor + 2);
73000
- cursor = blockEndIndex === -1 ? raw.length : blockEndIndex + 2;
73001
- continue;
73002
- }
73003
- result += character;
73004
- cursor += 1;
73005
- }
73006
- return result;
73007
- };
73008
- const parseJsonOrJsonc = (raw) => {
73009
- try {
73010
- return JSON.parse(raw);
73011
- } catch {
73012
- return JSON.parse(stripJsoncComments(raw));
73013
- }
73014
- };
73015
73188
  const canOxlintExtendConfig = (configPath) => {
73016
73189
  if (!configPath.endsWith(".eslintrc.json")) return true;
73017
73190
  let parsed;
73018
73191
  try {
73019
- parsed = parseJsonOrJsonc(fs$1$3.readFileSync(configPath, "utf-8"));
73192
+ parsed = parseJSONC(fs$1$3.readFileSync(configPath, "utf-8"), { allowTrailingComma: true });
73020
73193
  } catch {
73021
73194
  return true;
73022
73195
  }
@@ -73128,7 +73301,39 @@ const detectUserLintConfigPaths = (rootDirectory) => {
73128
73301
  }
73129
73302
  return [];
73130
73303
  };
73304
+ const readAdoptedLintConfigSettings = (configPaths) => {
73305
+ const mergedSettings = /* @__PURE__ */ new Map();
73306
+ for (const configPath of configPaths) {
73307
+ let parsed;
73308
+ try {
73309
+ parsed = parseJSONC(fs$1$3.readFileSync(configPath, "utf-8"), { allowTrailingComma: true });
73310
+ } catch {
73311
+ continue;
73312
+ }
73313
+ if (!isPlainObject(parsed)) continue;
73314
+ const settings = parsed.settings;
73315
+ if (!isPlainObject(settings)) continue;
73316
+ for (const [pluginName, pluginSettings] of Object.entries(settings)) {
73317
+ if (pluginName === "react-doctor") continue;
73318
+ mergedSettings.set(pluginName, pluginSettings);
73319
+ }
73320
+ }
73321
+ return Object.fromEntries(mergedSettings);
73322
+ };
73131
73323
  const DISABLE_DIRECTIVE_PATTERN = /(eslint|oxlint)-disable/;
73324
+ const getBackupRootDirectory = (rootDirectory) => path$1$1.join(rootDirectory, ...DISABLE_DIRECTIVE_BACKUP_DIRECTORY_SEGMENTS);
73325
+ const getBackupPath = (rootDirectory, absolutePath) => {
73326
+ if (!isPathInsideDirectory(absolutePath, rootDirectory)) return null;
73327
+ return path$1$1.join(getBackupRootDirectory(rootDirectory), path$1$1.relative(rootDirectory, absolutePath));
73328
+ };
73329
+ const removeBackupRootIfEmpty = (rootDirectory) => {
73330
+ const backupRootDirectory = getBackupRootDirectory(rootDirectory);
73331
+ if (!walkSourceTreeFiles(backupRootDirectory).next().done) return;
73332
+ fs$1$3.rmSync(backupRootDirectory, {
73333
+ recursive: true,
73334
+ force: true
73335
+ });
73336
+ };
73132
73337
  const neutralizedFileLeases = /* @__PURE__ */ new Map();
73133
73338
  const activeNeutralizationInitializations = /* @__PURE__ */ new Set();
73134
73339
  const directoriesOverlap = (left, right) => {
@@ -73220,8 +73425,50 @@ const collectNeutralizationCandidatePaths = (rootDirectory, discoveredRelativePa
73220
73425
  }
73221
73426
  return candidatePaths;
73222
73427
  };
73428
+ const recoverOrphanedBackups = (rootDirectory) => {
73429
+ const blockedPaths = /* @__PURE__ */ new Set();
73430
+ const backupRootDirectory = getBackupRootDirectory(rootDirectory);
73431
+ for (const { absolutePath: backupPath } of walkSourceTreeFiles(backupRootDirectory)) {
73432
+ const originalPath = path$1$1.join(rootDirectory, path$1$1.relative(backupRootDirectory, backupPath));
73433
+ if (neutralizedFileLeases.has(originalPath)) continue;
73434
+ let backupContent;
73435
+ let currentContent;
73436
+ try {
73437
+ backupContent = fs$1$3.readFileSync(backupPath, "utf-8");
73438
+ currentContent = fs$1$3.readFileSync(originalPath, "utf-8");
73439
+ } catch (error) {
73440
+ process.stderr.write(`[react-doctor] Could not recover ${originalPath}: ${messageFromUnknown(error)}. The backup remains at ${backupPath}.\n`);
73441
+ blockedPaths.add(originalPath);
73442
+ continue;
73443
+ }
73444
+ if (currentContent === backupContent) {
73445
+ try {
73446
+ fs$1$3.rmSync(backupPath);
73447
+ } catch (error) {
73448
+ process.stderr.write(`[react-doctor] Failed to delete stale backup ${backupPath}: ${messageFromUnknown(error)}\n`);
73449
+ blockedPaths.add(originalPath);
73450
+ }
73451
+ continue;
73452
+ }
73453
+ if (currentContent !== neutralizeContent(backupContent)) {
73454
+ process.stderr.write(`[react-doctor] Did not overwrite changed file ${originalPath}. Recover it manually from ${backupPath}.\n`);
73455
+ blockedPaths.add(originalPath);
73456
+ continue;
73457
+ }
73458
+ try {
73459
+ fs$1$3.writeFileSync(originalPath, backupContent);
73460
+ fs$1$3.rmSync(backupPath);
73461
+ } catch (error) {
73462
+ process.stderr.write(`[react-doctor] Failed to restore ${originalPath} from backup: ${messageFromUnknown(error)}\n`);
73463
+ blockedPaths.add(originalPath);
73464
+ }
73465
+ }
73466
+ removeBackupRootIfEmpty(rootDirectory);
73467
+ return blockedPaths;
73468
+ };
73223
73469
  const neutralizeDisableDirectives = async (rootDirectory, includePaths, options = {}) => {
73224
73470
  const resolvedRootDirectory = fs$1$3.realpathSync(rootDirectory);
73471
+ const blockedPaths = /* @__PURE__ */ new Set();
73225
73472
  const leasedPaths = /* @__PURE__ */ new Set();
73226
73473
  let isRestored = false;
73227
73474
  const restore = () => {
@@ -73234,16 +73481,24 @@ const neutralizeDisableDirectives = async (rootDirectory, includePaths, options
73234
73481
  if (lease.referenceCount > 0) continue;
73235
73482
  neutralizedFileLeases.delete(absolutePath);
73236
73483
  try {
73237
- fs$1$3.writeFileSync(absolutePath, lease.originalContent);
73484
+ const currentContent = fs$1$3.readFileSync(absolutePath, "utf-8");
73485
+ if (currentContent !== lease.neutralizedContent && currentContent !== lease.originalContent) {
73486
+ process.stderr.write(`[react-doctor] Did not overwrite changed file ${absolutePath}. Recover it manually from ${lease.backupPath}.\n`);
73487
+ continue;
73488
+ }
73489
+ if (currentContent === lease.neutralizedContent) fs$1$3.writeFileSync(absolutePath, lease.originalContent);
73490
+ fs$1$3.rmSync(lease.backupPath, { force: true });
73238
73491
  } catch (error) {
73239
- process.stderr.write(`[react-doctor] Failed to restore inline disable directives in ${absolutePath}: ${messageFromUnknown(error)}\n[react-doctor] Run: git checkout -- ${absolutePath}\n`);
73492
+ process.stderr.write(`[react-doctor] Failed to restore inline disable directives in ${absolutePath}: ${messageFromUnknown(error)}. The backup remains at ${lease.backupPath}.\n`);
73240
73493
  }
73241
73494
  }
73495
+ removeBackupRootIfEmpty(resolvedRootDirectory);
73242
73496
  };
73243
73497
  const onExit = () => restore();
73244
73498
  process.once("exit", onExit);
73245
73499
  const leaseCandidatePath = (absolutePath) => {
73246
73500
  if (leasedPaths.has(absolutePath)) return;
73501
+ if (blockedPaths.has(absolutePath)) return;
73247
73502
  const existingLease = neutralizedFileLeases.get(absolutePath);
73248
73503
  if (existingLease) {
73249
73504
  existingLease.referenceCount += 1;
@@ -73258,9 +73513,20 @@ const neutralizeDisableDirectives = async (rootDirectory, includePaths, options
73258
73513
  }
73259
73514
  const neutralizedContent = neutralizeContent(originalContent);
73260
73515
  if (neutralizedContent !== originalContent) {
73516
+ const backupPath = getBackupPath(resolvedRootDirectory, absolutePath);
73517
+ if (backupPath === null) return;
73518
+ try {
73519
+ fs$1$3.mkdirSync(path$1$1.dirname(backupPath), { recursive: true });
73520
+ fs$1$3.writeFileSync(backupPath, originalContent, { flag: "wx" });
73521
+ } catch (error) {
73522
+ process.stderr.write(`[react-doctor] Did not modify ${absolutePath}: ${messageFromUnknown(error)}. Check ${backupPath}.\n`);
73523
+ return;
73524
+ }
73261
73525
  fs$1$3.writeFileSync(absolutePath, neutralizedContent);
73262
73526
  neutralizedFileLeases.set(absolutePath, {
73527
+ backupPath,
73263
73528
  originalContent,
73529
+ neutralizedContent,
73264
73530
  referenceCount: 1
73265
73531
  });
73266
73532
  leasedPaths.add(absolutePath);
@@ -73268,6 +73534,8 @@ const neutralizeDisableDirectives = async (rootDirectory, includePaths, options
73268
73534
  };
73269
73535
  try {
73270
73536
  await withOverlappingInitializationLock(resolvedRootDirectory, async () => {
73537
+ for (const blockedPath of recoverOrphanedBackups(resolvedRootDirectory)) blockedPaths.add(blockedPath);
73538
+ if (options.recoverOnly) return;
73271
73539
  for (const absolutePath of collectNeutralizationCandidatePaths(resolvedRootDirectory, [], includePaths)) if (neutralizedFileLeases.has(absolutePath)) leaseCandidatePath(absolutePath);
73272
73540
  const discoveredRelativePaths = await (options.findFiles ?? findFilesWithDisableDirectives)(resolvedRootDirectory, includePaths);
73273
73541
  for (const absolutePath of collectNeutralizationCandidatePaths(resolvedRootDirectory, discoveredRelativePaths, includePaths)) leaseCandidatePath(absolutePath);
@@ -73448,7 +73716,7 @@ const buildUserPluginRules = (userPlugin, severityControls) => {
73448
73716
  }
73449
73717
  return enabled;
73450
73718
  };
73451
- const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), includedTags = /* @__PURE__ */ new Set(), includeTagDefaults = false, runtimeGlobals, unpluginAutoImportGlobalScopes, serverAuthFunctionNames, projectIndexModuleSources, severityControls, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
73719
+ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), includedTags = /* @__PURE__ */ new Set(), includeTagDefaults = false, runtimeGlobals, unpluginAutoImportGlobalScopes, serverAuthFunctionNames, projectIndexModuleSources, severityControls, adoptedSettings = {}, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
73452
73720
  const hasIncludedTags = includedTags.size > 0;
73453
73721
  const reactHooksJsPlugin = disableReactHooksJsPlugin || ruleSelection === "sidecar" || hasIncludedTags ? null : resolveReactHooksJsPlugin(project.hasReactCompiler || project.hasReactCompilerLintPlugin === true, customRulesOnly);
73454
73722
  const reactCompilerRules = reactHooksJsPlugin ? applyRuleSeverityControls(filterRulesToAvailable(REACT_COMPILER_RULES, "react-hooks-js", reactHooksJsPlugin.availableRuleNames), severityControls) : {};
@@ -73503,23 +73771,26 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
73503
73771
  },
73504
73772
  plugins: [],
73505
73773
  jsPlugins: [...jsPlugins, pluginPath],
73506
- settings: { "react-doctor": {
73507
- portedRuleMode: "curated",
73508
- framework: project.framework,
73509
- rootDirectory: settingsRootDirectory,
73510
- capabilities: [...capabilities].sort(),
73511
- ...runtimeGlobals && runtimeGlobals.length > 0 ? { runtimeGlobals: [...runtimeGlobals] } : {},
73512
- ...unpluginAutoImportGlobalScopes && unpluginAutoImportGlobalScopes.length > 0 ? {
73513
- unpluginAutoImportRootDirectories: [...new Set([settingsRootDirectory, project.rootDirectory])],
73514
- unpluginAutoImportGlobalScopes: unpluginAutoImportGlobalScopes.map((scope) => ({
73515
- directory: scope.directory,
73516
- names: [...scope.names]
73517
- }))
73518
- } : {},
73519
- ...project.shopifyFlashListMajorVersion !== null ? { shopifyFlashListMajorVersion: project.shopifyFlashListMajorVersion } : {},
73520
- ...serverAuthFunctionNames && serverAuthFunctionNames.length > 0 ? { serverAuthFunctionNames: [...serverAuthFunctionNames] } : {},
73521
- ...projectIndexModuleSources !== void 0 ? { projectIndexModuleSources: [...projectIndexModuleSources] } : {}
73522
- } },
73774
+ settings: {
73775
+ ...adoptedSettings,
73776
+ "react-doctor": {
73777
+ portedRuleMode: "curated",
73778
+ framework: project.framework,
73779
+ rootDirectory: settingsRootDirectory,
73780
+ capabilities: [...capabilities].sort(),
73781
+ ...runtimeGlobals && runtimeGlobals.length > 0 ? { runtimeGlobals: [...runtimeGlobals] } : {},
73782
+ ...unpluginAutoImportGlobalScopes && unpluginAutoImportGlobalScopes.length > 0 ? {
73783
+ unpluginAutoImportRootDirectories: [...new Set([settingsRootDirectory, project.rootDirectory])],
73784
+ unpluginAutoImportGlobalScopes: unpluginAutoImportGlobalScopes.map((scope) => ({
73785
+ directory: scope.directory,
73786
+ names: [...scope.names]
73787
+ }))
73788
+ } : {},
73789
+ ...project.shopifyFlashListMajorVersion !== null ? { shopifyFlashListMajorVersion: project.shopifyFlashListMajorVersion } : {},
73790
+ ...serverAuthFunctionNames && serverAuthFunctionNames.length > 0 ? { serverAuthFunctionNames: [...serverAuthFunctionNames] } : {},
73791
+ ...projectIndexModuleSources !== void 0 ? { projectIndexModuleSources: [...projectIndexModuleSources] } : {}
73792
+ }
73793
+ },
73523
73794
  rules: {
73524
73795
  ...reactCompilerRules,
73525
73796
  ...enabledReactDoctorRules,
@@ -74653,6 +74924,46 @@ const buildProfiledNodeArguments = (input) => [
74653
74924
  ...input.heapProfileDirectory ? ["--heap-prof", `--heap-prof-dir=${input.heapProfileDirectory}`] : [],
74654
74925
  ...input.argumentsList
74655
74926
  ];
74927
+ const buildOxlintTimingArguments = (argumentsList) => {
74928
+ const timingArguments = [...argumentsList];
74929
+ const formatFlagIndex = timingArguments.indexOf("--format");
74930
+ if (formatFlagIndex === -1 || formatFlagIndex + 1 >= timingArguments.length) throw new Error("Oxlint timing arguments require a --format value");
74931
+ timingArguments[formatFlagIndex + 1] = "default";
74932
+ timingArguments.push("--debug", "timings", "--quiet");
74933
+ return timingArguments;
74934
+ };
74935
+ const captureOxlintRuleTimings = (input) => new Promise((resolve, reject) => {
74936
+ const timingEnvironment = { ...input.environment };
74937
+ timingEnvironment.REACT_DOCTOR_RULE_TIMINGS_DIR = void 0;
74938
+ const timingChild = spawn(input.nodeBinaryPath, buildOxlintTimingArguments(input.argumentsList), {
74939
+ cwd: input.rootDirectory,
74940
+ env: timingEnvironment,
74941
+ stdio: [
74942
+ "ignore",
74943
+ "pipe",
74944
+ "pipe"
74945
+ ]
74946
+ });
74947
+ const stdoutBuffers = [];
74948
+ const stderrBuffers = [];
74949
+ timingChild.stdout.on("data", (buffer) => stdoutBuffers.push(buffer));
74950
+ timingChild.stderr.on("data", (buffer) => stderrBuffers.push(buffer));
74951
+ timingChild.on("error", reject);
74952
+ timingChild.on("close", (_code, signal) => {
74953
+ if (signal) {
74954
+ reject(/* @__PURE__ */ new Error(`Oxlint timing pass was killed by ${signal}`));
74955
+ return;
74956
+ }
74957
+ const timingOutput = `${Buffer.concat(stdoutBuffers).toString("utf8")}\n${Buffer.concat(stderrBuffers).toString("utf8")}`;
74958
+ if (!timingOutput.includes("Rule timings:")) {
74959
+ resolve();
74960
+ return;
74961
+ }
74962
+ fs$1$3.mkdirSync(input.timingDirectory, { recursive: true });
74963
+ fs$1$3.writeFileSync(path$1$1.join(input.timingDirectory, `oxlint-${timingChild.pid ?? process.pid}.timings.txt`), timingOutput);
74964
+ resolve();
74965
+ });
74966
+ });
74656
74967
  const lowerChildProcessPriority = (processId) => {
74657
74968
  if (processId === void 0) return;
74658
74969
  try {
@@ -74774,7 +75085,18 @@ const spawnOxlint = (args, rootDirectory, nodeBinaryPath, spawnTimeoutMs = OXLIN
74774
75085
  return;
74775
75086
  }
74776
75087
  }
74777
- resolve(output);
75088
+ const timingDirectory = SANITIZED_ENV.REACT_DOCTOR_OXLINT_TIMINGS_DIR;
75089
+ if (timingDirectory === void 0) {
75090
+ resolve(output);
75091
+ return;
75092
+ }
75093
+ captureOxlintRuleTimings({
75094
+ argumentsList: args,
75095
+ environment: SANITIZED_ENV,
75096
+ nodeBinaryPath,
75097
+ rootDirectory,
75098
+ timingDirectory
75099
+ }).then(() => resolve(output), reject);
74778
75100
  });
74779
75101
  });
74780
75102
  const PARALLELISM_EXHAUSTION_ERROR_CODES = new Set([
@@ -75347,6 +75669,7 @@ const prepareLintSources = (rootDirectory, temporaryDirectory, candidateFiles) =
75347
75669
  continue;
75348
75670
  }
75349
75671
  const absoluteSourcePath = path$1$1.isAbsolute(candidateFile) ? candidateFile : path$1$1.resolve(rootDirectory, candidateFile);
75672
+ if (isMissingPath(absoluteSourcePath)) continue;
75350
75673
  const sourceBuffer = fs$1$3.readFileSync(absoluteSourcePath);
75351
75674
  if (ASTRO_FILE_PATTERN.test(candidateFile)) {
75352
75675
  const compilerSourcePath = absoluteSourcePath.replaceAll("\\", "/");
@@ -75577,9 +75900,11 @@ const runOxlint = async (options) => {
75577
75900
  return [];
75578
75901
  }
75579
75902
  const pluginPath = resolvePluginPath();
75580
- const extendsPaths = (adoptExistingLintConfig && !customRulesOnly ? detectUserLintConfigPaths(rootDirectory) : []).filter(canOxlintExtendConfig);
75903
+ const detectedConfigPaths = adoptExistingLintConfig && !customRulesOnly ? detectUserLintConfigPaths(rootDirectory) : [];
75904
+ const extendsPaths = detectedConfigPaths.filter(canOxlintExtendConfig);
75905
+ const adoptedSettings = detectedConfigPaths.length > 0 ? readAdoptedLintConfigSettings(detectedConfigPaths) : {};
75581
75906
  const userPlugins = includedTags.size > 0 ? [] : resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
75582
- const restoreDisableDirectives = respectInlineDisables ? () => {} : await neutralizeDisableDirectives(rootDirectory, includePaths ?? options.precomputedSourceFiles?.map((sourceFile) => sourceFile.path));
75907
+ const restoreDisableDirectives = await neutralizeDisableDirectives(rootDirectory, includePaths ?? options.precomputedSourceFiles?.map((sourceFile) => sourceFile.path), { recoverOnly: respectInlineDisables });
75583
75908
  const configDirectory = fs$1$3.mkdtempSync(path$1$1.join(os.tmpdir(), "react-doctor-oxlintrc-"));
75584
75909
  const configPath = path$1$1.join(configDirectory, "oxlintrc.json");
75585
75910
  try {
@@ -75639,6 +75964,7 @@ const runOxlint = async (options) => {
75639
75964
  serverAuthFunctionNames,
75640
75965
  projectIndexModuleSources,
75641
75966
  severityControls,
75967
+ adoptedSettings,
75642
75968
  userPlugins,
75643
75969
  disableReactHooksJsPlugin: overrides.disableReactHooksJsPlugin,
75644
75970
  ruleSelection: overrides.ruleSelection,
@@ -77021,9 +77347,9 @@ const runInspect = (input, hooks = {}) => gen(function* () {
77021
77347
  if (!lintFailureState.didFail) if (maintainabilityFailureState.didFail) yield* scanProgress.fail(MAINTAINABILITY_FAIL_TEXT);
77022
77348
  else if (input.suppressScanSummary) yield* scanProgress.stop();
77023
77349
  else yield* scanProgress.succeed(`Scanned ${scannedFilesLabel} in ${scanElapsedSeconds}s${workerCountSuffix}`);
77024
- const supplyChainResult = yield* join(supplyChainFiber);
77350
+ const supplyChainResult = yield* join$1(supplyChainFiber);
77025
77351
  const supplyChainCollected = supplyChainResult.diagnostics;
77026
- const securityScanCollected = yield* join(securityScanFiber);
77352
+ const securityScanCollected = yield* join$1(securityScanFiber);
77027
77353
  yield* reporterService.finalize;
77028
77354
  const finalDiagnostics = sortDiagnosticsStable(assignFixGroups([
77029
77355
  ...envCollected,
@@ -77032,7 +77358,7 @@ const runInspect = (input, hooks = {}) => gen(function* () {
77032
77358
  ...lintCollected,
77033
77359
  ...maintainabilityCollected
77034
77360
  ]));
77035
- const githubViewerPermission = yield* join(githubViewerPermissionFiber);
77361
+ const githubViewerPermission = yield* join$1(githubViewerPermissionFiber);
77036
77362
  const scoreMetadata = {
77037
77363
  ...repo !== null ? { repo } : {},
77038
77364
  ...sha !== null ? { sha } : {},
@@ -77398,8 +77724,9 @@ const findWorstScoredProject = (projects) => {
77398
77724
  return worst;
77399
77725
  };
77400
77726
  const toJsonReportDiagnostic = (diagnostic, projectRoot, reportRoot) => {
77401
- const normalizedFilePath = toNormalizedRelativePath(diagnostic.filePath, projectRoot);
77402
- const reportRelativeFilePath = toNormalizedRelativePath(path$1$1.resolve(projectRoot, diagnostic.filePath), reportRoot);
77727
+ const resolvedFilePath = resolveCandidateReadPath(projectRoot, diagnostic.filePath);
77728
+ const normalizedFilePath = toNormalizedRelativePath(resolvedFilePath, projectRoot);
77729
+ const reportRelativeFilePath = toNormalizedRelativePath(resolvedFilePath, reportRoot);
77403
77730
  const ruleIdentity = getDiagnosticRuleIdentity(diagnostic);
77404
77731
  return {
77405
77732
  ...diagnostic,
@@ -77882,4 +78209,4 @@ const toJsonReport = (result, options) => buildJsonReport({
77882
78209
  export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
77883
78210
 
77884
78211
  //# sourceMappingURL=index.js.map
77885
- //# debugId=3404885b-ce22-59ed-b773-5398b6af4974
78212
+ //# debugId=ffdf66e4-453b-5f6c-993d-310f76b49218