react-doctor 0.8.1-dev.21221c2 → 0.8.1-dev.284b4e4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f412a400-e7a3-5cfa-a67f-1192f6a38df2")}catch(e){}}();
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]="137db449-e390-5d6c-9d14-a8803909eea3")}catch(e){}}();
3
3
  import { r as __toESM$1, t as __commonJSMin$1 } from "./chunk-N93fKeF6.js";
4
4
  import { createRequire } from "node:module";
5
5
  import reactDoctorPlugin, { ALL_REACT_DOCTOR_RULE_KEYS, CROSS_FILE_DEPENDENCY_COLLECTORS, CROSS_FILE_RULE_IDS, FRAMEWORK_SPECIFIC_RULE_KEYS, FRAMEWORK_TOKENS, MOTION_LIBRARY_PACKAGES, REACT_COMPILER_RULES, REACT_DOCTOR_RULES, classifySecurityScanFile, collectCrossFileDependencyProbes, resetManifestCaches, shouldReadSecurityScanContent } from "oxlint-plugin-react-doctor";
@@ -32854,44 +32854,6 @@ var AmbiguousProjectError = class extends Error {
32854
32854
  }
32855
32855
  };
32856
32856
  const isProjectDiscoveryError = (value) => value instanceof ProjectNotFoundError || value instanceof NoReactDependencyError || value instanceof PackageJsonNotFoundError || value instanceof NotADirectoryError || value instanceof AmbiguousProjectError;
32857
- const isErrnoException = (error) => error instanceof Error && "code" in error;
32858
- const IGNORABLE_READDIR_ERROR_CODES = new Set([
32859
- "EACCES",
32860
- "EPERM",
32861
- "ENOENT",
32862
- "ENOTDIR",
32863
- "EINVAL",
32864
- "ELOOP",
32865
- "ENAMETOOLONG"
32866
- ]);
32867
- const isIgnorableReaddirError = (error) => isErrnoException(error) && typeof error.code === "string" && IGNORABLE_READDIR_ERROR_CODES.has(error.code);
32868
- const readDirectoryEntries = (directoryPath) => {
32869
- try {
32870
- return NFS.readdirSync(directoryPath, { withFileTypes: true });
32871
- } catch (error) {
32872
- if (isIgnorableReaddirError(error)) return [];
32873
- throw error;
32874
- }
32875
- };
32876
- const isFile = (filePath) => {
32877
- try {
32878
- return NFS.statSync(filePath).isFile();
32879
- } catch {
32880
- return false;
32881
- }
32882
- };
32883
- const isDirectory = (directoryPath) => {
32884
- try {
32885
- return NFS.statSync(directoryPath).isDirectory();
32886
- } catch {
32887
- return false;
32888
- }
32889
- };
32890
- const isPlainObject = (value) => {
32891
- if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
32892
- const prototype = Object.getPrototypeOf(value);
32893
- return prototype === null || prototype === Object.prototype;
32894
- };
32895
32857
  const SOURCE_FILE_PATTERN = /\.(tsx?|jsx?|mts|mjs)$/;
32896
32858
  const GENERATED_BUNDLE_FILE_PATTERN = /\.(iife|umd|global|min)\.m?js$/i;
32897
32859
  const GENERATED_SOURCE_DIRECTORY_PATTERN = /(?:^|\/)__generated__\//;
@@ -33050,6 +33012,44 @@ const SUPPLY_CHAIN_OVERLAP_TIMEOUT_MS = 9e4;
33050
33012
  const SUPPLY_CHAIN_CACHE_TTL_MS = 864e5;
33051
33013
  const SUPPLY_CHAIN_CACHE_SUBDIR = "supply-chain";
33052
33014
  const SUPPLY_CHAIN_IGNORED_PACKAGES = new Set(["next"]);
33015
+ const isErrnoException = (error) => error instanceof Error && "code" in error;
33016
+ const IGNORABLE_READDIR_ERROR_CODES = new Set([
33017
+ "EACCES",
33018
+ "EPERM",
33019
+ "ENOENT",
33020
+ "ENOTDIR",
33021
+ "EINVAL",
33022
+ "ELOOP",
33023
+ "ENAMETOOLONG"
33024
+ ]);
33025
+ const isIgnorableReaddirError = (error) => isErrnoException(error) && typeof error.code === "string" && IGNORABLE_READDIR_ERROR_CODES.has(error.code);
33026
+ const readDirectoryEntries = (directoryPath) => {
33027
+ try {
33028
+ return NFS.readdirSync(directoryPath, { withFileTypes: true });
33029
+ } catch (error) {
33030
+ if (isIgnorableReaddirError(error)) return [];
33031
+ throw error;
33032
+ }
33033
+ };
33034
+ const isFile = (filePath) => {
33035
+ try {
33036
+ return NFS.statSync(filePath).isFile();
33037
+ } catch {
33038
+ return false;
33039
+ }
33040
+ };
33041
+ const isDirectory = (directoryPath) => {
33042
+ try {
33043
+ return NFS.statSync(directoryPath).isDirectory();
33044
+ } catch {
33045
+ return false;
33046
+ }
33047
+ };
33048
+ const isPlainObject = (value) => {
33049
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
33050
+ const prototype = Object.getPrototypeOf(value);
33051
+ return prototype === null || prototype === Object.prototype;
33052
+ };
33053
33053
  const lastSourceMappingUrl = (fileContent) => {
33054
33054
  const lastReference = [...fileContent.matchAll(/\/\/# sourceMappingURL=(\S+)/g)].at(-1);
33055
33055
  return lastReference ? lastReference[1] : null;
@@ -33375,10 +33375,10 @@ const FALLBACK_TSCONFIG_FILENAMES = ["tsconfig.app.json", "tsconfig.build.json"]
33375
33375
  const FRAMEWORK_PACKAGES = {
33376
33376
  next: "nextjs",
33377
33377
  "@tanstack/react-start": "tanstack-start",
33378
- vite: "vite",
33379
- "react-scripts": "cra",
33380
33378
  "@remix-run/react": "remix",
33381
33379
  gatsby: "gatsby",
33380
+ vite: "vite",
33381
+ "react-scripts": "cra",
33382
33382
  expo: "expo",
33383
33383
  "react-native": "react-native"
33384
33384
  };
@@ -33402,11 +33402,17 @@ const NEXT_CONFIG_FILENAMES = [
33402
33402
  ];
33403
33403
  const BABEL_CONFIG_FILENAMES = [
33404
33404
  ".babelrc",
33405
+ ".babelrc.js",
33405
33406
  ".babelrc.json",
33407
+ ".babelrc.cjs",
33408
+ ".babelrc.mjs",
33409
+ ".babelrc.cts",
33406
33410
  "babel.config.js",
33407
33411
  "babel.config.json",
33408
33412
  "babel.config.cjs",
33409
- "babel.config.mjs"
33413
+ "babel.config.mjs",
33414
+ "babel.config.ts",
33415
+ "babel.config.cts"
33410
33416
  ];
33411
33417
  const VITE_CONFIG_FILENAMES = [
33412
33418
  "vite.config.js",
@@ -33418,12 +33424,28 @@ const VITE_CONFIG_FILENAMES = [
33418
33424
  "vitest.config.ts",
33419
33425
  "vitest.config.js"
33420
33426
  ];
33427
+ const RSBUILD_CONFIG_FILENAMES = [
33428
+ "rsbuild.config.ts",
33429
+ "rsbuild.config.js",
33430
+ "rsbuild.config.mts",
33431
+ "rsbuild.config.mjs",
33432
+ "rsbuild.config.cts",
33433
+ "rsbuild.config.cjs"
33434
+ ];
33435
+ const RSPACK_CONFIG_FILENAMES = [
33436
+ "rspack.config.ts",
33437
+ "rspack.config.js",
33438
+ "rspack.config.mts",
33439
+ "rspack.config.mjs",
33440
+ "rspack.config.cts",
33441
+ "rspack.config.cjs"
33442
+ ];
33421
33443
  const EXPO_APP_CONFIG_FILENAMES = [
33422
33444
  "app.json",
33423
33445
  "app.config.js",
33424
33446
  "app.config.ts"
33425
33447
  ];
33426
- const REACT_COMPILER_PACKAGE_REFERENCE_PATTERN = /babel-plugin-react-compiler|react-compiler-runtime|["']react-compiler["']/;
33448
+ const REACT_COMPILER_PACKAGE_REFERENCE_PATTERN = /babel-plugin-react-compiler|react-compiler-runtime|reactCompilerPreset\s*\(|["']react-compiler["']/;
33427
33449
  const REACT_COMPILER_ENABLED_FLAG_PATTERN = /["']?reactCompiler["']?\s*:\s*(?:true\b|\{)/;
33428
33450
  const STATIC_EXPORT_OUTPUT_PATTERN = /(?:^|[^.\w])["']?output["']?\s*:\s*["']export["']/m;
33429
33451
  const hasCompilerPackage = (packageJson, compilerPackages) => {
@@ -33458,6 +33480,8 @@ const detectReactCompiler = (directory, packageJson) => {
33458
33480
  if (hasCompilerInConfigFiles(directory, NEXT_CONFIG_FILENAMES)) return true;
33459
33481
  if (hasCompilerInConfigFiles(directory, BABEL_CONFIG_FILENAMES)) return true;
33460
33482
  if (hasCompilerInConfigFiles(directory, VITE_CONFIG_FILENAMES)) return true;
33483
+ if (hasCompilerInConfigFiles(directory, RSBUILD_CONFIG_FILENAMES)) return true;
33484
+ if (hasCompilerInConfigFiles(directory, RSPACK_CONFIG_FILENAMES)) return true;
33461
33485
  if (hasCompilerInConfigFiles(directory, EXPO_APP_CONFIG_FILENAMES)) return true;
33462
33486
  return hasCompilerPackageInAncestors(directory, REACT_COMPILER_TRANSFORM_PACKAGES);
33463
33487
  };
@@ -33466,7 +33490,7 @@ const detectNextjsStaticExport = (directory) => NEXT_CONFIG_FILENAMES.some((file
33466
33490
  const filePath = Path.join(directory, filename);
33467
33491
  return isFile(filePath) && STATIC_EXPORT_OUTPUT_PATTERN.test(NFS.readFileSync(filePath, "utf-8"));
33468
33492
  });
33469
- const UNRESOLVABLE_PROTOCOL_VERSION = /^(?:file|git|github|https?|link|patch|portal|workspace|npm):/i;
33493
+ const UNRESOLVABLE_PROTOCOL_VERSION = /^(?:catalog|file|git|github|https?|link|patch|portal|workspace|npm):/i;
33470
33494
  const DIST_TAG_VERSION = /^[a-z][a-z0-9._-]*$/i;
33471
33495
  const WILDCARD_VERSION = /^[*xX](?:\.[*xX])*$/;
33472
33496
  const NPM_ALIAS_VERSION = /^npm:(?:@[^/]+\/[^@]+|[^@]+)@(.+)$/i;
@@ -33599,6 +33623,16 @@ const getLowestDependencyMajor = (version) => {
33599
33623
  }
33600
33624
  return lowestMajor;
33601
33625
  };
33626
+ const getDependencyMajorWithinSupportedRange = (version, latestSupportedMajor) => {
33627
+ const normalizedVersion = normalizeDependencyVersion(version);
33628
+ if (normalizedVersion === null) return null;
33629
+ const validRange = import_semver.validRange(normalizedVersion);
33630
+ if (validRange === null) return null;
33631
+ const minimumVersion = import_semver.minVersion(validRange);
33632
+ if (minimumVersion === null || minimumVersion.major > latestSupportedMajor) return null;
33633
+ if (import_semver.intersects(validRange, `>=${latestSupportedMajor + 1}.0.0`)) return null;
33634
+ return minimumVersion.major;
33635
+ };
33602
33636
  const isConcreteDependencyVersion = (version) => {
33603
33637
  const normalizedVersion = normalizeDependencyVersion(version);
33604
33638
  return normalizedVersion !== null && /\d/.test(normalizedVersion);
@@ -33642,9 +33676,18 @@ const parseReactMajorMinor = (reactVersion) => {
33642
33676
  };
33643
33677
  };
33644
33678
  const parseLowerBoundVersion = (versionSpec) => import_semver.validRange(versionSpec) !== null ? import_semver.minVersion(versionSpec) : import_semver.coerce(versionSpec);
33645
- const parseTailwindMajorMinor = (tailwindVersion) => {
33646
- if (typeof tailwindVersion !== "string") return null;
33647
- const trimmed = tailwindVersion.trim();
33679
+ const parseThreeRelease = (threeVersion) => {
33680
+ if (typeof threeVersion !== "string") return null;
33681
+ const normalizedVersion = normalizeDependencyVersion(threeVersion);
33682
+ if (normalizedVersion === null) return null;
33683
+ const lowerBound = parseLowerBoundVersion(normalizedVersion);
33684
+ if (lowerBound === null) return null;
33685
+ if (lowerBound.major > 0) return Number.MAX_SAFE_INTEGER;
33686
+ return lowerBound.minor > 0 ? lowerBound.minor : null;
33687
+ };
33688
+ const parseDependencyMajorMinor = (dependencyVersion) => {
33689
+ if (typeof dependencyVersion !== "string") return null;
33690
+ const trimmed = dependencyVersion.trim();
33648
33691
  if (trimmed.length === 0) return null;
33649
33692
  const lowerBound = parseLowerBoundVersion(trimmed);
33650
33693
  if (lowerBound === null || lowerBound.major <= 0) return null;
@@ -33653,6 +33696,7 @@ const parseTailwindMajorMinor = (tailwindVersion) => {
33653
33696
  minor: lowerBound.minor
33654
33697
  };
33655
33698
  };
33699
+ const parseTailwindMajorMinor = (tailwindVersion) => parseDependencyMajorMinor(tailwindVersion);
33656
33700
  const hasUpperBoundOnlyPeerRange = (range) => {
33657
33701
  if (typeof range !== "string") return false;
33658
33702
  const normalizedRange = normalizeDependencyVersion(range);
@@ -33674,7 +33718,7 @@ const resolveEffectiveReactMajor = (reactVersion, packageJson) => {
33674
33718
  if (peerFloor === null) return hasUpperBoundOnlyPeerRange(peerReactRange) ? null : installedReactMajor;
33675
33719
  return installedReactMajor !== null ? Math.min(installedReactMajor, peerFloor) : peerFloor;
33676
33720
  };
33677
- const isCatalogReference = (version) => version.startsWith("catalog:");
33721
+ const isCatalogReference = (version) => typeof version === "string" && version.startsWith("catalog:");
33678
33722
  const extractCatalogName = (version) => {
33679
33723
  if (!isCatalogReference(version)) return null;
33680
33724
  const name = version.slice(8).trim();
@@ -33824,6 +33868,12 @@ const TAILWIND_ZOD_SECTIONS = [
33824
33868
  "devDependencies",
33825
33869
  "peerDependencies"
33826
33870
  ];
33871
+ const DEPENDENCY_SPEC_SECTIONS = [
33872
+ "dependencies",
33873
+ "devDependencies",
33874
+ "peerDependencies",
33875
+ "optionalDependencies"
33876
+ ];
33827
33877
  const EMPTY_DEPENDENCY_INFO = {
33828
33878
  reactVersion: null,
33829
33879
  tailwindVersion: null,
@@ -33833,7 +33883,7 @@ const EMPTY_DEPENDENCY_INFO = {
33833
33883
  const pickConcreteVersion = (packageJson, packageName, sections) => {
33834
33884
  for (const section of sections) {
33835
33885
  const version = packageJson[section]?.[packageName];
33836
- if (version === void 0) continue;
33886
+ if (typeof version !== "string") continue;
33837
33887
  if (isCatalogReference(version)) return null;
33838
33888
  if (isConcreteDependencyVersion(version)) return version;
33839
33889
  }
@@ -33865,13 +33915,16 @@ const extractDependencyInfo = (packageJson) => {
33865
33915
  };
33866
33916
  };
33867
33917
  const getDependencySpec = (packageJson, packageName) => {
33868
- const spec = packageJson.dependencies?.[packageName] ?? packageJson.devDependencies?.[packageName] ?? packageJson.peerDependencies?.[packageName] ?? packageJson.optionalDependencies?.[packageName];
33869
- return typeof spec === "string" ? spec : null;
33918
+ for (const section of DEPENDENCY_SPEC_SECTIONS) {
33919
+ const spec = packageJson[section]?.[packageName];
33920
+ if (typeof spec === "string") return spec;
33921
+ }
33922
+ return null;
33870
33923
  };
33871
33924
  const getDependencyDeclaration = ({ packageJson, packageName, sections }) => {
33872
33925
  for (const section of sections) {
33873
33926
  const version = packageJson[section]?.[packageName];
33874
- if (version === void 0) continue;
33927
+ if (typeof version !== "string") continue;
33875
33928
  return {
33876
33929
  catalogReference: extractCatalogName(version) ?? null,
33877
33930
  hasDeclaration: true,
@@ -33905,24 +33958,15 @@ const getPreactVersion = (packageJson) => {
33905
33958
  ...packageJson.devDependencies
33906
33959
  }.preact ?? null;
33907
33960
  };
33908
- const TANSTACK_QUERY_PACKAGES = new Set([
33909
- "@tanstack/react-query",
33910
- "@tanstack/query-core",
33911
- "react-query"
33912
- ]);
33913
- const hasTanStackQuery = (packageJson) => {
33914
- const allDependencies = {
33915
- ...packageJson.peerDependencies,
33916
- ...packageJson.dependencies,
33917
- ...packageJson.devDependencies
33918
- };
33919
- return Object.keys(allDependencies).some((packageName) => TANSTACK_QUERY_PACKAGES.has(packageName));
33920
- };
33921
- const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, version }) => {
33961
+ const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, sourceDirectory = rootDirectory, sourcePackageJson = rootPackageJson, version }) => {
33922
33962
  if (version === null || !isCatalogReference(version)) return version;
33923
33963
  const catalogName = extractCatalogName(version);
33924
- const resolvedLocalVersion = resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, catalogName);
33925
- if (resolvedLocalVersion) return resolvedLocalVersion;
33964
+ const resolvedSourceVersion = resolveCatalogVersion(sourcePackageJson, packageName, sourceDirectory, catalogName);
33965
+ if (resolvedSourceVersion) return resolvedSourceVersion;
33966
+ if (sourceDirectory !== rootDirectory || sourcePackageJson !== rootPackageJson) {
33967
+ const resolvedRootVersion = resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, catalogName);
33968
+ if (resolvedRootVersion) return resolvedRootVersion;
33969
+ }
33926
33970
  const monorepoRoot = findMonorepoRoot(rootDirectory);
33927
33971
  if (!monorepoRoot) return version;
33928
33972
  const monorepoPackageJsonPath = Path.join(monorepoRoot, "package.json");
@@ -34120,7 +34164,79 @@ const listWorkspacePackages = (rootDirectory) => {
34120
34164
  }
34121
34165
  return packages;
34122
34166
  };
34167
+ const PREFERRED_DEPENDENCY_SECTIONS = [
34168
+ "dependencies",
34169
+ "peerDependencies",
34170
+ "devDependencies"
34171
+ ];
34172
+ const getPreferredDependencyVersion = ({ packageJson, packageNames }) => {
34173
+ for (const packageName of packageNames) {
34174
+ const declaration = getDependencyDeclaration({
34175
+ packageJson,
34176
+ packageName,
34177
+ sections: PREFERRED_DEPENDENCY_SECTIONS
34178
+ });
34179
+ if (declaration.version !== null) return declaration.version;
34180
+ }
34181
+ return null;
34182
+ };
34183
+ const TANSTACK_REACT_QUERY_PACKAGES = ["@tanstack/react-query", "react-query"];
34184
+ const getTanStackQueryVersion = (packageJson) => {
34185
+ return getPreferredDependencyVersion({
34186
+ packageJson,
34187
+ packageNames: TANSTACK_REACT_QUERY_PACKAGES
34188
+ });
34189
+ };
34190
+ const STYLED_COMPONENTS_PACKAGES = ["styled-components"];
34191
+ const getStyledComponentsVersion = (packageJson) => {
34192
+ return getPreferredDependencyVersion({
34193
+ packageJson,
34194
+ packageNames: STYLED_COMPONENTS_PACKAGES
34195
+ });
34196
+ };
34197
+ const I18N_PACKAGES = [
34198
+ "i18next",
34199
+ "react-i18next",
34200
+ "next-i18next",
34201
+ "react-intl",
34202
+ "next-intl",
34203
+ "use-intl",
34204
+ "@formatjs/intl",
34205
+ "@lingui/core",
34206
+ "@lingui/react",
34207
+ "typesafe-i18n",
34208
+ "@tolgee/react",
34209
+ "react-intl-universal"
34210
+ ];
34211
+ const hasI18nDependency = (packageJson) => {
34212
+ const allDependencies = {
34213
+ ...packageJson.peerDependencies,
34214
+ ...packageJson.dependencies,
34215
+ ...packageJson.devDependencies,
34216
+ ...packageJson.optionalDependencies
34217
+ };
34218
+ return I18N_PACKAGES.some((packageName) => allDependencies[packageName] !== void 0);
34219
+ };
34123
34220
  const REANIMATED_DEPENDENCY_NAME = "react-native-reanimated";
34221
+ const MOBX_REACT_PACKAGE_NAME = "mobx-react";
34222
+ const MOBX_REACT_LITE_PACKAGE_NAME = "mobx-react-lite";
34223
+ const MOBX_STATE_TREE_PACKAGE_NAME = "mobx-state-tree";
34224
+ const MOBX_REACT_OBSERVER_PACKAGE_NAME = "mobx-react-observer";
34225
+ const REACT_THREE_FIBER_DEPENDENCY_NAMES = ["@react-three/fiber", "react-three-fiber"];
34226
+ const REACT_THREE_FIBER_SECTIONS = [
34227
+ "dependencies",
34228
+ "peerDependencies",
34229
+ "optionalDependencies",
34230
+ "devDependencies"
34231
+ ];
34232
+ const THREE_DEPENDENCY_SECTIONS = [
34233
+ "dependencies",
34234
+ "peerDependencies",
34235
+ "optionalDependencies",
34236
+ "devDependencies"
34237
+ ];
34238
+ const REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES = [...REACT_THREE_FIBER_DEPENDENCY_NAMES, "@react-three/drei"];
34239
+ const THREE_DEPENDENCY_NAMES = [...REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES, "three"];
34124
34240
  const SHOPIFY_FLASH_LIST_PACKAGE_NAME = "@shopify/flash-list";
34125
34241
  const resolveWorkspaceDependencyVersion = ({ concreteVersion, packageName, rootDirectory, rootPackageJson, sections, workspaceDirectory, workspacePackageJson }) => {
34126
34242
  const dependencyDeclaration = getDependencyDeclaration({
@@ -34131,7 +34247,7 @@ const resolveWorkspaceDependencyVersion = ({ concreteVersion, packageName, rootD
34131
34247
  if (!dependencyDeclaration.hasDeclaration) return null;
34132
34248
  return concreteVersion ?? resolveCatalogVersion(workspacePackageJson, packageName, workspaceDirectory, dependencyDeclaration.catalogReference) ?? resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, dependencyDeclaration.catalogReference);
34133
34249
  };
34134
- const shouldReplaceReactVersion = (currentVersion, nextVersion) => {
34250
+ const shouldReplaceWithLowerMajor = (currentVersion, nextVersion) => {
34135
34251
  if (!currentVersion) return true;
34136
34252
  const currentMajor = parseReactMajor(currentVersion);
34137
34253
  const nextMajor = parseReactMajor(nextVersion);
@@ -34139,7 +34255,62 @@ const shouldReplaceReactVersion = (currentVersion, nextVersion) => {
34139
34255
  if (nextMajor === null) return false;
34140
34256
  return nextMajor < currentMajor;
34141
34257
  };
34142
- const evaluateManifestFacts = (facts, packageJson, directory) => {
34258
+ const shouldReplaceSupportedDependencyFact = (currentFact, nextFact, latestSupportedMajor) => {
34259
+ if (currentFact.version === null) return true;
34260
+ if (nextFact.version === null) return false;
34261
+ const currentMajor = getLowestDependencyMajor(currentFact.version);
34262
+ const nextMajor = getLowestDependencyMajor(nextFact.version);
34263
+ if (currentMajor === null) return false;
34264
+ if (nextMajor === null) return true;
34265
+ if (currentMajor > latestSupportedMajor) return false;
34266
+ if (nextMajor > latestSupportedMajor) return true;
34267
+ return nextMajor < currentMajor;
34268
+ };
34269
+ const shouldReplaceStyledComponentsVersion = (currentVersion, nextVersion) => {
34270
+ if (!currentVersion) return true;
34271
+ const currentMajor = getLowestDependencyMajor(currentVersion);
34272
+ const nextMajor = getLowestDependencyMajor(nextVersion);
34273
+ if (currentMajor === null) return nextMajor !== null && nextMajor < 6;
34274
+ if (nextMajor === null) return currentMajor >= 6;
34275
+ return nextMajor < currentMajor;
34276
+ };
34277
+ const selectOldestDependencyVersion = (currentVersion, nextVersion) => {
34278
+ if (currentVersion === null || nextVersion === null) return null;
34279
+ const current = parseDependencyMajorMinor(currentVersion);
34280
+ const next = parseDependencyMajorMinor(nextVersion);
34281
+ if (current === null) return currentVersion;
34282
+ if (next === null) return nextVersion;
34283
+ if (next.major !== current.major) return next.major < current.major ? nextVersion : currentVersion;
34284
+ return next.minor < current.minor ? nextVersion : currentVersion;
34285
+ };
34286
+ const shouldReplaceMobxFact = (currentFact, nextFact) => {
34287
+ if (currentFact.sourceDirectory === null) return true;
34288
+ if (currentFact.version === null) return false;
34289
+ if (nextFact.version === null) return true;
34290
+ const currentMajor = getDependencyMajorWithinSupportedRange(currentFact.version, 6);
34291
+ const nextMajor = getDependencyMajorWithinSupportedRange(nextFact.version, 6);
34292
+ if (currentMajor === null) return false;
34293
+ if (nextMajor === null) return true;
34294
+ return selectOldestDependencyVersion(currentFact.version, nextFact.version) === nextFact.version;
34295
+ };
34296
+ const collectBindingVersion = (facts, packageJson, directory, packageName) => {
34297
+ const version = getDependencySpec(packageJson, packageName);
34298
+ if (version === null) return;
34299
+ const resolvedVersion = resolveCatalogBackedDependencyVersion({
34300
+ rootDirectory: directory,
34301
+ rootPackageJson: packageJson,
34302
+ packageName,
34303
+ version
34304
+ });
34305
+ if (packageName === MOBX_REACT_PACKAGE_NAME) {
34306
+ facts.mobxReactVersion = facts.hasMobxReact ? selectOldestDependencyVersion(facts.mobxReactVersion, resolvedVersion) : resolvedVersion;
34307
+ facts.hasMobxReact = true;
34308
+ return;
34309
+ }
34310
+ facts.mobxReactLiteVersion = facts.hasMobxReactLite ? selectOldestDependencyVersion(facts.mobxReactLiteVersion, resolvedVersion) : resolvedVersion;
34311
+ facts.hasMobxReactLite = true;
34312
+ };
34313
+ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, rootPackageJson) => {
34143
34314
  if (facts.expo.version === null) {
34144
34315
  const spec = getDependencySpec(packageJson, "expo");
34145
34316
  if (spec !== null) facts.expo = {
@@ -34161,13 +34332,113 @@ const evaluateManifestFacts = (facts, packageJson, directory) => {
34161
34332
  sourceDirectory: directory
34162
34333
  };
34163
34334
  }
34335
+ const mobxSpec = getDependencySpec(packageJson, "mobx");
34336
+ if (mobxSpec !== null) {
34337
+ const nextMobxFact = {
34338
+ version: resolveCatalogBackedDependencyVersion({
34339
+ rootDirectory: directory,
34340
+ rootPackageJson: packageJson,
34341
+ packageName: "mobx",
34342
+ version: mobxSpec
34343
+ }),
34344
+ sourceDirectory: directory
34345
+ };
34346
+ if (shouldReplaceMobxFact(facts.mobx, nextMobxFact)) facts.mobx = nextMobxFact;
34347
+ }
34348
+ collectBindingVersion(facts, packageJson, directory, MOBX_REACT_PACKAGE_NAME);
34349
+ collectBindingVersion(facts, packageJson, directory, MOBX_REACT_LITE_PACKAGE_NAME);
34350
+ facts.hasMobxStateTree = facts.hasMobxStateTree || getDependencySpec(packageJson, MOBX_STATE_TREE_PACKAGE_NAME) !== null;
34351
+ facts.hasMobxReactObserver = facts.hasMobxReactObserver || getDependencySpec(packageJson, MOBX_REACT_OBSERVER_PACKAGE_NAME) !== null;
34352
+ const zustandSpec = getDependencySpec(packageJson, "zustand");
34353
+ if (zustandSpec !== null) {
34354
+ const nextZustandFact = {
34355
+ version: resolveCatalogBackedDependencyVersion({
34356
+ rootDirectory: directory,
34357
+ rootPackageJson: packageJson,
34358
+ packageName: "zustand",
34359
+ version: zustandSpec
34360
+ }),
34361
+ sourceDirectory: directory
34362
+ };
34363
+ if (shouldReplaceSupportedDependencyFact(facts.zustand, nextZustandFact, 5)) facts.zustand = nextZustandFact;
34364
+ }
34164
34365
  if (facts.reanimatedVersion === null) {
34165
34366
  const spec = getDependencySpec(packageJson, REANIMATED_DEPENDENCY_NAME);
34166
34367
  if (spec !== null) facts.reanimatedVersion = spec;
34167
34368
  }
34369
+ if (facts.valtioVersion === null) {
34370
+ const spec = getDependencySpec(packageJson, "valtio");
34371
+ if (spec !== null) facts.valtioVersion = spec;
34372
+ }
34373
+ facts.tanstackQueryVersion ??= getTanStackQueryVersion(packageJson);
34374
+ const styledComponentsVersion = resolveCatalogBackedDependencyVersion({
34375
+ rootDirectory: directory,
34376
+ rootPackageJson: packageJson,
34377
+ packageName: "styled-components",
34378
+ version: getStyledComponentsVersion(packageJson)
34379
+ });
34380
+ if (styledComponentsVersion && shouldReplaceStyledComponentsVersion(facts.styledComponentsVersion, styledComponentsVersion)) facts.styledComponentsVersion = styledComponentsVersion;
34381
+ facts.hasI18nLibrary = facts.hasI18nLibrary || hasI18nDependency(packageJson);
34382
+ for (const packageName of REACT_THREE_FIBER_DEPENDENCY_NAMES) {
34383
+ const version = resolveCatalogBackedDependencyVersion({
34384
+ rootDirectory,
34385
+ rootPackageJson,
34386
+ sourceDirectory: directory,
34387
+ sourcePackageJson: packageJson,
34388
+ packageName,
34389
+ version: getDependencyDeclaration({
34390
+ packageName,
34391
+ packageJson,
34392
+ sections: REACT_THREE_FIBER_SECTIONS
34393
+ }).version
34394
+ });
34395
+ if (version === null) continue;
34396
+ if (shouldReplaceWithLowerMajor(facts.reactThreeFiber.version, version)) facts.reactThreeFiber = {
34397
+ packageName,
34398
+ version,
34399
+ sourceDirectory: directory
34400
+ };
34401
+ }
34402
+ const threeVersion = resolveCatalogBackedDependencyVersion({
34403
+ rootDirectory,
34404
+ rootPackageJson,
34405
+ sourceDirectory: directory,
34406
+ sourcePackageJson: packageJson,
34407
+ packageName: "three",
34408
+ version: getDependencyDeclaration({
34409
+ packageName: "three",
34410
+ packageJson,
34411
+ sections: THREE_DEPENDENCY_SECTIONS
34412
+ }).version
34413
+ });
34414
+ if (threeVersion !== null) {
34415
+ const currentRelease = parseThreeRelease(facts.threeVersion);
34416
+ const nextRelease = parseThreeRelease(threeVersion);
34417
+ if (facts.threeVersion === null || nextRelease !== null && (currentRelease === null || nextRelease < currentRelease)) facts.threeVersion = threeVersion;
34418
+ }
34168
34419
  facts.hasReactNativeAwarePackage = facts.hasReactNativeAwarePackage || isPackageJsonReactNativeAware(packageJson);
34169
34420
  facts.hasReanimatedAwarePackage = facts.hasReanimatedAwarePackage || isPackageJsonReanimatedAware(packageJson);
34170
34421
  facts.hasSsrDependency = facts.hasSsrDependency || isPackageJsonSsrAware(packageJson);
34422
+ const remotionSpec = getDependencySpec(packageJson, "remotion");
34423
+ if (remotionSpec !== null) {
34424
+ facts.hasRemotionDependency = true;
34425
+ const resolvedRemotionVersion = resolveCatalogBackedDependencyVersion({
34426
+ rootDirectory,
34427
+ rootPackageJson,
34428
+ packageName: "remotion",
34429
+ version: remotionSpec
34430
+ });
34431
+ const remotionMajorVersion = resolvedRemotionVersion === null ? null : getLowestDependencyMajor(resolvedRemotionVersion);
34432
+ if (remotionMajorVersion === null) {
34433
+ facts.hasUnknownRemotionVersion = true;
34434
+ facts.remotionVersion = null;
34435
+ } else if (!facts.hasUnknownRemotionVersion) {
34436
+ const currentRemotionMajorVersion = facts.remotionVersion === null ? null : getLowestDependencyMajor(facts.remotionVersion);
34437
+ if (currentRemotionMajorVersion === null || remotionMajorVersion < currentRemotionMajorVersion) facts.remotionVersion = resolvedRemotionVersion;
34438
+ }
34439
+ }
34440
+ facts.hasThree = facts.hasThree || THREE_DEPENDENCY_NAMES.some((dependencyName) => getDependencySpec(packageJson, dependencyName) !== null);
34441
+ facts.hasReactThreeFiber = facts.hasReactThreeFiber || REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES.some((dependencyName) => getDependencySpec(packageJson, dependencyName) !== null);
34171
34442
  };
34172
34443
  const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGroup }) => {
34173
34444
  const facts = {
@@ -34187,12 +34458,41 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34187
34458
  version: null,
34188
34459
  sourceDirectory: null
34189
34460
  },
34461
+ valtioVersion: null,
34462
+ mobx: {
34463
+ version: null,
34464
+ sourceDirectory: null
34465
+ },
34466
+ hasMobxReact: false,
34467
+ mobxReactVersion: null,
34468
+ hasMobxReactLite: false,
34469
+ mobxReactLiteVersion: null,
34470
+ hasMobxStateTree: false,
34471
+ hasMobxReactObserver: false,
34472
+ zustand: {
34473
+ version: null,
34474
+ sourceDirectory: null
34475
+ },
34476
+ tanstackQueryVersion: null,
34477
+ styledComponentsVersion: null,
34478
+ hasI18nLibrary: false,
34190
34479
  hasReactNativeAwarePackage: false,
34191
34480
  hasReanimatedAwarePackage: false,
34192
34481
  hasSsrDependency: false,
34482
+ hasRemotionDependency: false,
34483
+ hasUnknownRemotionVersion: false,
34484
+ remotionVersion: null,
34485
+ hasThree: false,
34486
+ threeVersion: null,
34487
+ hasReactThreeFiber: false,
34488
+ reactThreeFiber: {
34489
+ packageName: null,
34490
+ version: null,
34491
+ sourceDirectory: null
34492
+ },
34193
34493
  reanimatedVersion: null
34194
34494
  };
34195
- evaluateManifestFacts(facts, rootPackageJson, rootDirectory);
34495
+ evaluateManifestFacts(facts, rootPackageJson, rootDirectory, rootDirectory, rootPackageJson);
34196
34496
  let isReactGroupSettled = !collectReactGroup;
34197
34497
  const visitedDirectories = /* @__PURE__ */ new Set();
34198
34498
  for (const pattern of getWorkspacePatterns(rootDirectory, rootPackageJson)) {
@@ -34201,7 +34501,7 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34201
34501
  if (visitedDirectories.has(workspaceDirectory)) continue;
34202
34502
  visitedDirectories.add(workspaceDirectory);
34203
34503
  const workspacePackageJson = readPackageJson(Path.join(workspaceDirectory, "package.json"));
34204
- evaluateManifestFacts(facts, workspacePackageJson, workspaceDirectory);
34504
+ evaluateManifestFacts(facts, workspacePackageJson, workspaceDirectory, rootDirectory, rootPackageJson);
34205
34505
  const info = extractDependencyInfo(workspacePackageJson);
34206
34506
  if (info.framework !== "unknown" && frameworkMergeRank(info.framework) < frameworkMergeRank(facts.framework)) facts.framework = info.framework;
34207
34507
  if (isReactGroupSettled) continue;
@@ -34232,7 +34532,7 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34232
34532
  workspaceDirectory,
34233
34533
  workspacePackageJson
34234
34534
  });
34235
- if (reactVersion && shouldReplaceReactVersion(facts.reactVersion, reactVersion)) facts.reactVersion = reactVersion;
34535
+ if (reactVersion && shouldReplaceWithLowerMajor(facts.reactVersion, reactVersion)) facts.reactVersion = reactVersion;
34236
34536
  if (tailwindVersion && !facts.tailwindVersion) facts.tailwindVersion = tailwindVersion;
34237
34537
  if (zodVersion && !facts.zodVersion) facts.zodVersion = zodVersion;
34238
34538
  const settledReactMajor = parseReactMajor(facts.reactVersion);
@@ -34425,11 +34725,35 @@ const discoverProjectWithoutPackageJson = (directory) => {
34425
34725
  tailwindVersion: null,
34426
34726
  zodVersion: null,
34427
34727
  zodMajorVersion: null,
34728
+ mobxVersion: null,
34729
+ mobxMajorVersion: null,
34730
+ hasMobxReact: false,
34731
+ mobxReactVersion: null,
34732
+ hasMobxReactLite: false,
34733
+ mobxReactLiteVersion: null,
34734
+ hasMobxStateTree: false,
34735
+ hasMobxReactObserver: false,
34736
+ zustandVersion: null,
34737
+ zustandMajorVersion: null,
34428
34738
  framework: "unknown",
34429
34739
  hasTypeScript: hasOwnTsConfig,
34430
34740
  hasReactCompiler: false,
34431
34741
  hasReactCompilerLintPlugin: false,
34432
34742
  hasTanStackQuery: false,
34743
+ valtioVersion: null,
34744
+ valtioMajorVersion: null,
34745
+ hasRemotion: false,
34746
+ remotionVersion: null,
34747
+ remotionMajorVersion: null,
34748
+ hasI18nLibrary: false,
34749
+ tanstackQueryVersion: null,
34750
+ styledComponentsVersion: null,
34751
+ hasThree: false,
34752
+ threeVersion: null,
34753
+ threeRelease: null,
34754
+ hasReactThreeFiber: false,
34755
+ reactThreeFiberVersion: null,
34756
+ reactThreeFiberMajorVersion: null,
34433
34757
  hasSsrDependency: false,
34434
34758
  preactVersion: null,
34435
34759
  preactMajorVersion: null,
@@ -34528,6 +34852,12 @@ const discoverProject = (directory) => {
34528
34852
  packageName: SHOPIFY_FLASH_LIST_PACKAGE_NAME,
34529
34853
  version: workspaceFacts.shopifyFlashList.version
34530
34854
  }) : null;
34855
+ const zustandVersion = resolveCatalogBackedDependencyVersion({
34856
+ rootDirectory: directory,
34857
+ rootPackageJson: packageJson,
34858
+ packageName: "zustand",
34859
+ version: workspaceFacts.zustand.version
34860
+ });
34531
34861
  const hasReanimated = hasReactNativeWorkspace && workspaceFacts.hasReanimatedAwarePackage;
34532
34862
  const reanimatedVersion = hasReanimated ? workspaceFacts.reanimatedVersion : null;
34533
34863
  const nextjsVersion = framework === "nextjs" ? resolveCatalogBackedDependencyVersion({
@@ -34536,7 +34866,33 @@ const discoverProject = (directory) => {
34536
34866
  packageName: "next",
34537
34867
  version: workspaceFacts.next.version
34538
34868
  }) : null;
34869
+ const valtioVersion = resolveCatalogBackedDependencyVersion({
34870
+ rootDirectory: directory,
34871
+ rootPackageJson: packageJson,
34872
+ packageName: "valtio",
34873
+ version: workspaceFacts.valtioVersion
34874
+ });
34875
+ const mobxVersion = resolveCatalogBackedDependencyVersion({
34876
+ rootDirectory: directory,
34877
+ rootPackageJson: packageJson,
34878
+ packageName: "mobx",
34879
+ version: workspaceFacts.mobx.version
34880
+ });
34539
34881
  const preactVersion = getPreactVersion(packageJson);
34882
+ const remotionVersion = workspaceFacts.remotionVersion;
34883
+ const tanstackQueryVersion = getTanStackQueryVersion(packageJson) ?? workspaceFacts.tanstackQueryVersion;
34884
+ const reactThreeFiberVersion = workspaceFacts.reactThreeFiber.packageName ? resolveCatalogBackedDependencyVersion({
34885
+ rootDirectory: directory,
34886
+ rootPackageJson: packageJson,
34887
+ packageName: workspaceFacts.reactThreeFiber.packageName,
34888
+ version: workspaceFacts.reactThreeFiber.version
34889
+ }) : null;
34890
+ const threeVersion = resolveCatalogBackedDependencyVersion({
34891
+ rootDirectory: directory,
34892
+ rootPackageJson: packageJson,
34893
+ packageName: "three",
34894
+ version: workspaceFacts.threeVersion
34895
+ });
34540
34896
  const isPreES2023Target = hasTypeScript && detectPreES2023Target(directory);
34541
34897
  const projectInfo = {
34542
34898
  rootDirectory: directory,
@@ -34546,11 +34902,35 @@ const discoverProject = (directory) => {
34546
34902
  tailwindVersion,
34547
34903
  zodVersion,
34548
34904
  zodMajorVersion: zodVersion === null ? null : getLowestDependencyMajor(zodVersion),
34905
+ mobxVersion,
34906
+ mobxMajorVersion: mobxVersion === null ? null : getDependencyMajorWithinSupportedRange(mobxVersion, 6),
34907
+ hasMobxReact: workspaceFacts.hasMobxReact,
34908
+ mobxReactVersion: workspaceFacts.mobxReactVersion,
34909
+ hasMobxReactLite: workspaceFacts.hasMobxReactLite,
34910
+ mobxReactLiteVersion: workspaceFacts.mobxReactLiteVersion,
34911
+ hasMobxStateTree: workspaceFacts.hasMobxStateTree,
34912
+ hasMobxReactObserver: workspaceFacts.hasMobxReactObserver,
34913
+ zustandVersion,
34914
+ zustandMajorVersion: zustandVersion === null ? null : getLowestDependencyMajor(zustandVersion),
34549
34915
  framework,
34550
34916
  hasTypeScript,
34551
34917
  hasReactCompiler: detectReactCompiler(directory, packageJson),
34552
34918
  hasReactCompilerLintPlugin: detectReactCompilerLintPlugin(directory, packageJson),
34553
- hasTanStackQuery: hasTanStackQuery(packageJson),
34919
+ hasTanStackQuery: tanstackQueryVersion !== null,
34920
+ hasI18nLibrary: workspaceFacts.hasI18nLibrary,
34921
+ tanstackQueryVersion,
34922
+ styledComponentsVersion: workspaceFacts.styledComponentsVersion,
34923
+ valtioVersion,
34924
+ valtioMajorVersion: valtioVersion === null ? null : getLowestDependencyMajor(valtioVersion),
34925
+ hasRemotion: workspaceFacts.hasRemotionDependency,
34926
+ remotionVersion,
34927
+ remotionMajorVersion: remotionVersion === null ? null : getLowestDependencyMajor(remotionVersion),
34928
+ hasThree: workspaceFacts.hasThree,
34929
+ threeVersion,
34930
+ threeRelease: parseThreeRelease(threeVersion),
34931
+ hasReactThreeFiber: workspaceFacts.hasReactThreeFiber,
34932
+ reactThreeFiberVersion,
34933
+ reactThreeFiberMajorVersion: reactThreeFiberVersion === null ? null : getLowestDependencyMajor(reactThreeFiberVersion),
34554
34934
  hasSsrDependency: workspaceFacts.hasSsrDependency,
34555
34935
  preactVersion,
34556
34936
  preactMajorVersion: parseReactMajor(preactVersion),
@@ -37070,9 +37450,25 @@ const BABEL_CONFIG_FILE_NAMES = [
37070
37450
  ".babelrc.json"
37071
37451
  ];
37072
37452
  const LEGACY_PRESET_SPEC = "module:metro-react-native-babel-preset";
37453
+ const LEGACY_PRESET_PACKAGE = "metro-react-native-babel-preset";
37454
+ const REACT_NATIVE_PACKAGE = "react-native";
37455
+ const PRESET_RENAME_MINIMUM_REACT_NATIVE_VERSION = "0.73.0";
37456
+ const LEGACY_PRESET_REFERENCE = new RegExp(`['"]${LEGACY_PRESET_SPEC}['"]`);
37073
37457
  const MODERN_PRESET_REFERENCE = new RegExp(`['"]module:@react-native/babel-preset['"]`);
37074
37458
  const ENABLE_BABEL_RUNTIME_VERSION = /enableBabelRuntime["']?\s*:\s*['"]/;
37459
+ const isReactNativeVersionAtLeastPresetRename = (rootDirectory, packageJson) => {
37460
+ const installedReactNativeManifestPath = Path.join(rootDirectory, "node_modules", REACT_NATIVE_PACKAGE, "package.json");
37461
+ const reactNativeVersionSpec = (isFile(installedReactNativeManifestPath) ? readPackageJson(installedReactNativeManifestPath).version : void 0) ?? getDependencySpec(packageJson, REACT_NATIVE_PACKAGE);
37462
+ if (reactNativeVersionSpec === null || reactNativeVersionSpec === void 0) return false;
37463
+ const normalizedVersionRange = import_semver.validRange(reactNativeVersionSpec);
37464
+ if (normalizedVersionRange === null) return false;
37465
+ const minimumVersion = import_semver.minVersion(normalizedVersionRange);
37466
+ return minimumVersion !== null && import_semver.gte(minimumVersion, PRESET_RENAME_MINIMUM_REACT_NATIVE_VERSION);
37467
+ };
37468
+ const canResolveLegacyPreset = (rootDirectory, packageJson) => getDependencySpec(packageJson, LEGACY_PRESET_PACKAGE) !== null || isFile(Path.join(rootDirectory, "node_modules", LEGACY_PRESET_PACKAGE, "package.json"));
37075
37469
  const checkReactNativeMetroBabelPreset = (rootDirectory) => {
37470
+ const packageJson = readPackageJson(Path.join(rootDirectory, "package.json"));
37471
+ const shouldReportLegacyPreset = isReactNativeVersionAtLeastPresetRename(rootDirectory, packageJson) && !canResolveLegacyPreset(rootDirectory, packageJson);
37076
37472
  for (const fileName of BABEL_CONFIG_FILE_NAMES) {
37077
37473
  const filePath = Path.join(rootDirectory, fileName);
37078
37474
  if (!isFile(filePath)) continue;
@@ -37082,7 +37478,7 @@ const checkReactNativeMetroBabelPreset = (rootDirectory) => {
37082
37478
  } catch {
37083
37479
  continue;
37084
37480
  }
37085
- if (contents.includes(LEGACY_PRESET_SPEC)) return [buildReactNativeDiagnostic({
37481
+ if (shouldReportLegacyPreset && LEGACY_PRESET_REFERENCE.test(contents)) return [buildReactNativeDiagnostic({
37086
37482
  filePath: fileName,
37087
37483
  rule: "rn-no-metro-babel-preset",
37088
37484
  severity: "error",
@@ -37105,12 +37501,6 @@ const checkReactNativeProject = (rootDirectory, project) => {
37105
37501
  return [...checkReactNativeMetroBabelPreset(rootDirectory), ...checkReactNativeLibraryDependencies(rootDirectory)];
37106
37502
  };
37107
37503
  const RULE_KEY = "no-vulnerable-react-server-components";
37108
- const DEPENDENCY_SECTIONS = [
37109
- "dependencies",
37110
- "devDependencies",
37111
- "peerDependencies",
37112
- "optionalDependencies"
37113
- ];
37114
37504
  const REACT_RSC_ADVISORIES_BY_MINOR = {
37115
37505
  "19.0": {
37116
37506
  rceFixedVersion: "19.0.1",
@@ -37157,20 +37547,13 @@ const enumerateWorkspaceDirectories = (workspaceRoot) => {
37157
37547
  for (const pattern of patterns) for (const directory of resolveWorkspaceDirectories(workspaceRoot, pattern)) directories.add(directory);
37158
37548
  return [...directories];
37159
37549
  };
37160
- const readDeclaredSpec = (packageJson, packageName) => {
37161
- for (const section of DEPENDENCY_SECTIONS) {
37162
- const spec = packageJson[section]?.[packageName];
37163
- if (typeof spec === "string") return spec;
37164
- }
37165
- return null;
37166
- };
37167
37550
  const resolveVersionInDirectory = (directory, packageName, declaredSpecOverride) => {
37168
37551
  const manifestPath = Path.join(directory, "node_modules", packageName, "package.json");
37169
37552
  if (isFile(manifestPath)) {
37170
37553
  const installedVersion = import_semver.valid(readPackageJson(manifestPath).version ?? null);
37171
37554
  if (installedVersion !== null) return installedVersion;
37172
37555
  }
37173
- const candidateSpecs = [readDeclaredSpec(readPackageJson(Path.join(directory, "package.json")), packageName), declaredSpecOverride];
37556
+ const candidateSpecs = [getDependencySpec(readPackageJson(Path.join(directory, "package.json")), packageName), declaredSpecOverride];
37174
37557
  for (const spec of candidateSpecs) {
37175
37558
  const pinnedVersion = spec === null ? null : import_semver.valid(spec);
37176
37559
  if (pinnedVersion !== null) return pinnedVersion;
@@ -37822,10 +38205,10 @@ const SSR_FRAMEWORKS = new Set([
37822
38205
  "gatsby",
37823
38206
  "tanstack-start"
37824
38207
  ]);
37825
- const addMajorLadder = (capabilities, name, major, earliest, latest) => {
37826
- if (major === null) return;
37827
- const cappedMajor = Math.min(major, latest);
37828
- for (let candidate = earliest; candidate <= cappedMajor; candidate += 1) capabilities.add(`${name}:${candidate}`);
38208
+ const addVersionCapabilityLadder = (capabilities, name, detectedVersion, earliest, latest) => {
38209
+ if (detectedVersion === null) return;
38210
+ const cappedVersion = Math.min(detectedVersion, latest);
38211
+ for (let candidate = earliest; candidate <= cappedVersion; candidate += 1) capabilities.add(`${name}:${candidate}`);
37829
38212
  };
37830
38213
  const buildCapabilities = (project) => {
37831
38214
  const capabilities = /* @__PURE__ */ new Set();
@@ -37838,24 +38221,77 @@ const buildCapabilities = (project) => {
37838
38221
  if (CLIENT_ONLY_FRAMEWORKS.has(project.framework)) capabilities.add("client-only");
37839
38222
  if (project.isStaticExport) capabilities.add("nextjs:static-export");
37840
38223
  if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
37841
- addMajorLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
38224
+ if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 16) capabilities.add("nextjs:16");
38225
+ addVersionCapabilityLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
37842
38226
  if (project.reactMajorVersion !== null && project.reactMajorVersion >= 19 && isMajorMinorAtLeast(parseReactMajorMinor(project.reactVersion), {
37843
38227
  major: 19,
37844
38228
  minor: 2
37845
38229
  })) capabilities.add("react:19.2");
37846
- if (project.tailwindVersion !== null) capabilities.add("tailwind");
37847
- if (project.tailwindVersion !== null && isMajorMinorAtLeast(parseTailwindMajorMinor(project.tailwindVersion), {
37848
- major: 3,
37849
- minor: 4
37850
- })) capabilities.add("tailwind:3.4");
38230
+ if (project.tailwindVersion !== null) {
38231
+ capabilities.add("tailwind");
38232
+ const tailwindVersion = parseTailwindMajorMinor(project.tailwindVersion);
38233
+ if (isMajorMinorAtLeast(tailwindVersion, {
38234
+ major: 3,
38235
+ minor: 4
38236
+ })) capabilities.add("tailwind:3.4");
38237
+ if (tailwindVersion !== null && isMajorMinorAtLeast(tailwindVersion, {
38238
+ major: 4,
38239
+ minor: 0
38240
+ })) capabilities.add("tailwind:4");
38241
+ }
37851
38242
  if (project.zodVersion !== null) capabilities.add("zod");
37852
38243
  if (project.zodMajorVersion !== null && project.zodMajorVersion >= 4) capabilities.add("zod:4");
38244
+ if (project.mobxVersion !== void 0 && project.mobxVersion !== null || project.hasMobxReact === true || project.hasMobxReactLite === true || project.hasMobxStateTree === true || project.hasMobxReactObserver === true) capabilities.add("mobx");
38245
+ if (project.hasMobxReact === true) capabilities.add("mobx-react");
38246
+ if (project.hasMobxReactLite === true) capabilities.add("mobx-react-lite");
38247
+ if (project.hasMobxReact === true || project.hasMobxReactLite === true) capabilities.add("mobx-react-binding");
38248
+ const mobxReactVersion = parseDependencyMajorMinor(project.mobxReactVersion);
38249
+ const mobxReactLiteVersion = parseDependencyMajorMinor(project.mobxReactLiteVersion);
38250
+ const hasMobxReactObserverMemoGuard = mobxReactVersion !== null && isMajorMinorAtLeast(mobxReactVersion, {
38251
+ major: 7,
38252
+ minor: 3
38253
+ });
38254
+ const hasMobxReactLiteObserverMemoGuard = mobxReactLiteVersion !== null && isMajorMinorAtLeast(mobxReactLiteVersion, {
38255
+ major: 3,
38256
+ minor: 3
38257
+ });
38258
+ if (hasMobxReactObserverMemoGuard) capabilities.add("mobx-react-observer-memo-guard");
38259
+ if (hasMobxReactLiteObserverMemoGuard) capabilities.add("mobx-react-lite-observer-memo-guard");
38260
+ if (hasMobxReactObserverMemoGuard || hasMobxReactLiteObserverMemoGuard) capabilities.add("mobx-react-binding-observer-memo-guard");
38261
+ if (project.hasMobxStateTree === true) capabilities.add("mobx-state-tree");
38262
+ if (project.hasMobxReactObserver === true) capabilities.add("mobx-react-observer");
38263
+ if (project.mobxMajorVersion !== void 0 && project.mobxMajorVersion !== null && project.mobxMajorVersion >= 4 && project.mobxMajorVersion <= 6) addVersionCapabilityLadder(capabilities, "mobx", project.mobxMajorVersion, 4, 6);
38264
+ const mobxVersion = parseDependencyMajorMinor(project.mobxVersion);
38265
+ if (project.mobxMajorVersion === 6 && mobxVersion !== null && isMajorMinorAtLeast(mobxVersion, {
38266
+ major: 6,
38267
+ minor: 10
38268
+ })) capabilities.add("mobx:6.10");
38269
+ if (project.zustandVersion !== void 0 && project.zustandVersion !== null) capabilities.add("zustand");
38270
+ if (project.zustandMajorVersion !== void 0 && project.zustandMajorVersion !== null && project.zustandMajorVersion >= 1 && project.zustandMajorVersion <= 5) addVersionCapabilityLadder(capabilities, "zustand", project.zustandMajorVersion, 1, 5);
37853
38271
  if (project.isPreES2023Target) capabilities.add("pre-es2023");
37854
38272
  if (project.hasReactCompiler) capabilities.add("react-compiler");
37855
- if (project.hasTanStackQuery) capabilities.add("tanstack-query");
38273
+ if (Boolean(project.hasTanStackQuery) || Boolean(project.tanstackQueryVersion)) capabilities.add("tanstack-query");
38274
+ if (project.styledComponentsVersion) {
38275
+ capabilities.add("styled-components");
38276
+ const styledComponentsMajor = getLowestDependencyMajor(project.styledComponentsVersion);
38277
+ if (styledComponentsMajor !== null && styledComponentsMajor >= 6) capabilities.add("styled-components:6");
38278
+ }
38279
+ if (project.hasI18nLibrary) capabilities.add("i18n");
38280
+ if (project.valtioVersion !== null) capabilities.add("valtio");
38281
+ addVersionCapabilityLadder(capabilities, "valtio", project.valtioMajorVersion, 1, 10);
38282
+ if (project.hasRemotion) {
38283
+ capabilities.add("remotion");
38284
+ addVersionCapabilityLadder(capabilities, "remotion", project.remotionMajorVersion ?? null, 4, 30);
38285
+ }
38286
+ if (project.hasThree || project.hasReactThreeFiber) capabilities.add("three");
38287
+ addVersionCapabilityLadder(capabilities, "three", project.threeRelease ?? null, 145, 250);
38288
+ if (project.hasReactThreeFiber) {
38289
+ capabilities.add("r3f");
38290
+ addVersionCapabilityLadder(capabilities, "r3f", project.reactThreeFiberMajorVersion ?? null, 3, 10);
38291
+ }
37856
38292
  if (project.hasTypeScript) capabilities.add("typescript");
37857
38293
  if (project.preactVersion !== null) capabilities.add("preact");
37858
- addMajorLadder(capabilities, "preact", project.preactMajorVersion, 10, 20);
38294
+ addVersionCapabilityLadder(capabilities, "preact", project.preactMajorVersion, 10, 20);
37859
38295
  if (project.preactVersion !== null && project.reactVersion === null) capabilities.add("pure-preact");
37860
38296
  return capabilities;
37861
38297
  };
@@ -37867,7 +38303,7 @@ const getCapabilities = (project) => {
37867
38303
  capabilitiesByProject.set(project, capabilities);
37868
38304
  return capabilities;
37869
38305
  };
37870
- const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhen) => {
38306
+ const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhen, includedTags) => {
37871
38307
  if (requires) {
37872
38308
  for (const capability of requires) if (!capabilities.has(capability)) return false;
37873
38309
  }
@@ -37878,20 +38314,29 @@ const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhe
37878
38314
  if (tags) {
37879
38315
  for (const tag of tags) if (ignoredTags.has(tag)) return false;
37880
38316
  }
38317
+ if (includedTags && includedTags.size > 0) {
38318
+ if (!tags?.some((tag) => includedTags.has(tag))) return false;
38319
+ }
37881
38320
  return true;
37882
38321
  };
38322
+ const shouldEnableRuleByDefaultStatus = (options) => options.defaultEnabled !== false || options.hasExplicitOverride === true || options.includeTagDefaults && options.hasIncludedTags;
37883
38323
  const yieldToEventLoop = () => new Promise((resolve) => {
37884
38324
  setImmediate(resolve);
37885
38325
  });
37886
38326
  const createSecurityScanSession = (rootDirectory, options) => {
37887
38327
  const capabilities = options.project ? getCapabilities(options.project) : /* @__PURE__ */ new Set();
37888
38328
  const ignoredTags = options.ignoredTags ?? /* @__PURE__ */ new Set();
38329
+ const includedTags = options.includedTags ?? /* @__PURE__ */ new Set();
37889
38330
  const enabledScanRules = REACT_DOCTOR_RULES.flatMap((entry) => {
37890
38331
  const rule = entry.rule;
37891
38332
  const scan = rule.scan;
37892
38333
  if (typeof scan !== "function") return [];
37893
- if (rule.defaultEnabled === false) return [];
37894
- if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen)) return [];
38334
+ if (!shouldEnableRuleByDefaultStatus({
38335
+ defaultEnabled: rule.defaultEnabled,
38336
+ includeTagDefaults: options.includeTagDefaults === true,
38337
+ hasIncludedTags: includedTags.size > 0
38338
+ })) return [];
38339
+ if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen, includedTags)) return [];
37895
38340
  return [{
37896
38341
  entry,
37897
38342
  scan,
@@ -39877,8 +40322,9 @@ const buildUserPluginRules = (userPlugin, severityControls) => {
39877
40322
  }
39878
40323
  return enabled;
39879
40324
  };
39880
- const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), serverAuthFunctionNames, severityControls, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
39881
- const reactHooksJsPlugin = disableReactHooksJsPlugin || ruleSelection === "sidecar" ? null : resolveReactHooksJsPlugin(project.hasReactCompiler || project.hasReactCompilerLintPlugin === true, customRulesOnly);
40325
+ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), includedTags = /* @__PURE__ */ new Set(), includeTagDefaults = false, serverAuthFunctionNames, severityControls, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
40326
+ const hasIncludedTags = includedTags.size > 0;
40327
+ const reactHooksJsPlugin = disableReactHooksJsPlugin || ruleSelection === "sidecar" || hasIncludedTags ? null : resolveReactHooksJsPlugin(project.hasReactCompiler || project.hasReactCompilerLintPlugin === true, customRulesOnly);
39882
40328
  const reactCompilerRules = reactHooksJsPlugin ? applyRuleSeverityControls(filterRulesToAvailable(REACT_COMPILER_RULES, "react-hooks-js", reactHooksJsPlugin.availableRuleNames), severityControls) : {};
39883
40329
  const jsPlugins = [];
39884
40330
  if (reactHooksJsPlugin) jsPlugins.push(reactHooksJsPlugin.entry);
@@ -39893,9 +40339,14 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
39893
40339
  if (rule.scan !== void 0) continue;
39894
40340
  if (customRulesOnly && registryEntry.originallyExternal) continue;
39895
40341
  if (rule.framework !== "global" && !rule.requires) continue;
39896
- if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen)) continue;
40342
+ if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen, includedTags)) continue;
39897
40343
  const explicitRuleOverride = resolveRuleSeverityOverride({ ruleKey: registryEntry.key }, severityControls);
39898
- if (rule.defaultEnabled === false && explicitRuleOverride === void 0) continue;
40344
+ if (!shouldEnableRuleByDefaultStatus({
40345
+ defaultEnabled: rule.defaultEnabled,
40346
+ includeTagDefaults,
40347
+ hasIncludedTags,
40348
+ hasExplicitOverride: explicitRuleOverride !== void 0
40349
+ })) continue;
39899
40350
  const severity = resolveRuleSeverityOverride({
39900
40351
  ruleKey: registryEntry.key,
39901
40352
  category: rule.category
@@ -39904,7 +40355,7 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
39904
40355
  enabledReactDoctorRules[registryEntry.key] = severity;
39905
40356
  }
39906
40357
  const userPluginRules = {};
39907
- if (ruleSelection !== "sidecar") for (const userPlugin of userPlugins) {
40358
+ if (ruleSelection !== "sidecar" && !hasIncludedTags) for (const userPlugin of userPlugins) {
39908
40359
  Object.assign(userPluginRules, buildUserPluginRules(userPlugin, severityControls));
39909
40360
  jsPlugins.push(userPlugin.entry);
39910
40361
  }
@@ -40121,6 +40572,19 @@ const createSidecarLintCache = (cacheDirectory, rulesetHash) => {
40121
40572
  }
40122
40573
  };
40123
40574
  };
40575
+ const fingerprintCacheByFilePath = /* @__PURE__ */ new Map();
40576
+ const fingerprintFileContents = (filePath, fingerprintLength) => {
40577
+ const fileStats = NFS.statSync(filePath, { bigint: true });
40578
+ const cachedFingerprint = fingerprintCacheByFilePath.get(filePath);
40579
+ if (cachedFingerprint?.modifiedTimeNanoseconds === fileStats.mtimeNs && cachedFingerprint.sizeBytes === fileStats.size) return cachedFingerprint.fingerprint;
40580
+ const fingerprint = crypto.createHash("sha256").update(NFS.readFileSync(filePath)).digest("hex").slice(0, fingerprintLength);
40581
+ fingerprintCacheByFilePath.set(filePath, {
40582
+ fingerprint,
40583
+ modifiedTimeNanoseconds: fileStats.mtimeNs,
40584
+ sizeBytes: fileStats.size
40585
+ });
40586
+ return fingerprint;
40587
+ };
40124
40588
  const bundledRequire = createRequire(import.meta.url);
40125
40589
  const childNodeVersionByBinaryPath = /* @__PURE__ */ new Map();
40126
40590
  const resolveChildNodeVersion = (nodeBinaryPath) => {
@@ -40144,6 +40608,13 @@ const TOOLCHAIN_PACKAGE_SPECIFIERS = [
40144
40608
  "oxlint-plugin-react-doctor/package.json",
40145
40609
  "eslint-plugin-react-hooks/package.json"
40146
40610
  ];
40611
+ const resolvePluginFingerprint = () => {
40612
+ try {
40613
+ return fingerprintFileContents(bundledRequire.resolve("oxlint-plugin-react-doctor"), 16);
40614
+ } catch {
40615
+ return "unresolved";
40616
+ }
40617
+ };
40147
40618
  const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
40148
40619
  const versions = [`node=${resolveChildNodeVersion(nodeBinaryPath)}`];
40149
40620
  for (const specifier of TOOLCHAIN_PACKAGE_SPECIFIERS) try {
@@ -40153,6 +40624,7 @@ const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
40153
40624
  } catch {
40154
40625
  versions.push(`${specifier}=missing`);
40155
40626
  }
40627
+ versions.push(`oxlint-plugin-react-doctor#fingerprint=${resolvePluginFingerprint()}`);
40156
40628
  return versions;
40157
40629
  };
40158
40630
  const esmRequire = createRequire(import.meta.url);
@@ -41628,7 +42100,7 @@ const reactHooksJsPluginDropNote = (error) => {
41628
42100
  * 6. always restore disable directives + clean up the temp dir
41629
42101
  */
41630
42102
  const runOxlint = async (options) => {
41631
- const { rootDirectory, project, includePaths, nodeBinaryPath = process.execPath, customRulesOnly = false, respectInlineDisables = true, adoptExistingLintConfig = true, ignoredTags = /* @__PURE__ */ new Set(), userConfig, configSourceDirectory = rootDirectory, onPartialFailure, onFileCoverage, perFileLintCacheEnabled = false, sidecarLintCacheEnabled = false, onCacheStats, onSidecarStats, spawnTimeoutMs, outputMaxBytes, lintBatchOrdering = "cost" } = options;
42103
+ const { rootDirectory, project, includePaths, nodeBinaryPath = process.execPath, customRulesOnly = false, respectInlineDisables = true, adoptExistingLintConfig = true, ignoredTags = /* @__PURE__ */ new Set(), includedTags = /* @__PURE__ */ new Set(), includeTagDefaults = false, userConfig, configSourceDirectory = rootDirectory, onPartialFailure, onFileCoverage, perFileLintCacheEnabled = false, sidecarLintCacheEnabled = false, onCacheStats, onSidecarStats, spawnTimeoutMs, outputMaxBytes, lintBatchOrdering = "cost" } = options;
41632
42104
  const serverAuthFunctionNames = Array.isArray(userConfig?.serverAuthFunctionNames) ? userConfig.serverAuthFunctionNames.filter((entry) => typeof entry === "string" && entry.length > 0) : void 0;
41633
42105
  const severityControls = buildRuleSeverityControls(userConfig);
41634
42106
  validateRuleRegistration();
@@ -41642,13 +42114,15 @@ const runOxlint = async (options) => {
41642
42114
  }
41643
42115
  const pluginPath = resolvePluginPath();
41644
42116
  const extendsPaths = (adoptExistingLintConfig && !customRulesOnly ? detectUserLintConfigPaths(rootDirectory) : []).filter(canOxlintExtendConfig);
41645
- const userPlugins = resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
42117
+ const userPlugins = includedTags.size > 0 ? [] : resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
41646
42118
  const buildConfig = (overrides) => createOxlintConfig({
41647
42119
  pluginPath,
41648
42120
  project,
41649
42121
  customRulesOnly,
41650
42122
  extendsPaths: overrides.extendsPaths,
41651
42123
  ignoredTags,
42124
+ includedTags,
42125
+ includeTagDefaults,
41652
42126
  serverAuthFunctionNames,
41653
42127
  severityControls,
41654
42128
  userPlugins,
@@ -42037,6 +42511,8 @@ var Linter = class Linter extends Service()("react-doctor/Linter") {
42037
42511
  respectInlineDisables: input.respectInlineDisables,
42038
42512
  adoptExistingLintConfig: input.adoptExistingLintConfig,
42039
42513
  ignoredTags: input.ignoredTags,
42514
+ includedTags: input.includedTags,
42515
+ includeTagDefaults: input.includeTagDefaults,
42040
42516
  userConfig: input.userConfig ?? null,
42041
42517
  configSourceDirectory: input.configSourceDirectory,
42042
42518
  onPartialFailure: (reason) => {
@@ -42885,7 +43361,9 @@ const runInspect = (input, hooks = {}) => gen(function* () {
42885
43361
  const securityScanFailedRef = yield* make$13(false);
42886
43362
  const securityScanFiber = yield* forkChild(runCollect(applyPerElementPipeline(isDiffMode ? empty$4 : unwrap(tryPromise(() => checkSecurityScanCooperative(scanDirectory, {
42887
43363
  project,
42888
- ignoredTags: input.ignoredTags
43364
+ ignoredTags: input.ignoredTags,
43365
+ includedTags: input.includedTags,
43366
+ includeTagDefaults: input.includeTagDefaults
42889
43367
  })).pipe(map$3((diagnostics) => fromIterable$1(diagnostics)), catch_$1(() => set(securityScanFailedRef, true).pipe(as(empty$4))))))).pipe(withSpan("SecurityScan.run")));
42890
43368
  const shouldRunSupplyChain = !isDiffMode || (input.supplyChainManifestChanged ?? false);
42891
43369
  const supplyChainOverlapTimeout = yield* SupplyChainOverlapTimeoutMs;
@@ -42976,6 +43454,8 @@ const runInspect = (input, hooks = {}) => gen(function* () {
42976
43454
  respectInlineDisables: input.respectInlineDisables,
42977
43455
  adoptExistingLintConfig: input.adoptExistingLintConfig,
42978
43456
  ignoredTags: input.ignoredTags,
43457
+ includedTags: input.includedTags,
43458
+ includeTagDefaults: input.includeTagDefaults,
42979
43459
  userConfig: resolvedConfig.config ?? void 0,
42980
43460
  configSourceDirectory: resolvedConfig.configSourceDirectory ?? void 0,
42981
43461
  onFileProgress: (scannedFileCount, totalFileCount) => {
@@ -43836,4 +44316,4 @@ const toJsonReport = (result, options) => buildJsonReport({
43836
44316
  export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
43837
44317
 
43838
44318
  //# sourceMappingURL=index.js.map
43839
- //# debugId=f412a400-e7a3-5cfa-a67f-1192f6a38df2
44319
+ //# debugId=137db449-e390-5d6c-9d14-a8803909eea3