react-doctor 0.8.1-dev.3018538 → 0.8.1-dev.359d9b3

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]="d6253eef-925f-579a-9b36-3bbf313293f5")}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]="c65f1825-0401-518f-840a-c33df84ebafc")}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__\//;
@@ -32932,6 +32894,58 @@ const IGNORED_DIRECTORIES = new Set([
32932
32894
  "storybook-static"
32933
32895
  ]);
32934
32896
  const MILLISECONDS_PER_SECOND = 1e3;
32897
+ const REACT_ROUTER_CAPABILITY_THRESHOLDS = [
32898
+ {
32899
+ capability: "react-router:6.4",
32900
+ major: 6,
32901
+ minor: 4
32902
+ },
32903
+ {
32904
+ capability: "react-router:6.7",
32905
+ major: 6,
32906
+ minor: 7
32907
+ },
32908
+ {
32909
+ capability: "react-router:6.9",
32910
+ major: 6,
32911
+ minor: 9
32912
+ },
32913
+ {
32914
+ capability: "react-router:6.19",
32915
+ major: 6,
32916
+ minor: 19
32917
+ },
32918
+ {
32919
+ capability: "react-router:7",
32920
+ major: 7,
32921
+ minor: 0
32922
+ },
32923
+ {
32924
+ capability: "react-router:7.8",
32925
+ major: 7,
32926
+ minor: 8
32927
+ },
32928
+ {
32929
+ capability: "react-router:7.9",
32930
+ major: 7,
32931
+ minor: 9
32932
+ },
32933
+ {
32934
+ capability: "react-router:7.10",
32935
+ major: 7,
32936
+ minor: 10
32937
+ },
32938
+ {
32939
+ capability: "react-router:7.15",
32940
+ major: 7,
32941
+ minor: 15
32942
+ },
32943
+ {
32944
+ capability: "react-router:8",
32945
+ major: 8,
32946
+ minor: 0
32947
+ }
32948
+ ];
32935
32949
  const SCORE_API_URL = "https://www.react.doctor/api/score";
32936
32950
  const FETCH_TIMEOUT_MS = 1e4;
32937
32951
  const GITHUB_VIEWER_PERMISSION_TIMEOUT_MS = 2e3;
@@ -33050,6 +33064,44 @@ const SUPPLY_CHAIN_OVERLAP_TIMEOUT_MS = 9e4;
33050
33064
  const SUPPLY_CHAIN_CACHE_TTL_MS = 864e5;
33051
33065
  const SUPPLY_CHAIN_CACHE_SUBDIR = "supply-chain";
33052
33066
  const SUPPLY_CHAIN_IGNORED_PACKAGES = new Set(["next"]);
33067
+ const isErrnoException = (error) => error instanceof Error && "code" in error;
33068
+ const IGNORABLE_READDIR_ERROR_CODES = new Set([
33069
+ "EACCES",
33070
+ "EPERM",
33071
+ "ENOENT",
33072
+ "ENOTDIR",
33073
+ "EINVAL",
33074
+ "ELOOP",
33075
+ "ENAMETOOLONG"
33076
+ ]);
33077
+ const isIgnorableReaddirError = (error) => isErrnoException(error) && typeof error.code === "string" && IGNORABLE_READDIR_ERROR_CODES.has(error.code);
33078
+ const readDirectoryEntries = (directoryPath) => {
33079
+ try {
33080
+ return NFS.readdirSync(directoryPath, { withFileTypes: true });
33081
+ } catch (error) {
33082
+ if (isIgnorableReaddirError(error)) return [];
33083
+ throw error;
33084
+ }
33085
+ };
33086
+ const isFile = (filePath) => {
33087
+ try {
33088
+ return NFS.statSync(filePath).isFile();
33089
+ } catch {
33090
+ return false;
33091
+ }
33092
+ };
33093
+ const isDirectory = (directoryPath) => {
33094
+ try {
33095
+ return NFS.statSync(directoryPath).isDirectory();
33096
+ } catch {
33097
+ return false;
33098
+ }
33099
+ };
33100
+ const isPlainObject = (value) => {
33101
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
33102
+ const prototype = Object.getPrototypeOf(value);
33103
+ return prototype === null || prototype === Object.prototype;
33104
+ };
33053
33105
  const lastSourceMappingUrl = (fileContent) => {
33054
33106
  const lastReference = [...fileContent.matchAll(/\/\/# sourceMappingURL=(\S+)/g)].at(-1);
33055
33107
  return lastReference ? lastReference[1] : null;
@@ -33402,11 +33454,17 @@ const NEXT_CONFIG_FILENAMES = [
33402
33454
  ];
33403
33455
  const BABEL_CONFIG_FILENAMES = [
33404
33456
  ".babelrc",
33457
+ ".babelrc.js",
33405
33458
  ".babelrc.json",
33459
+ ".babelrc.cjs",
33460
+ ".babelrc.mjs",
33461
+ ".babelrc.cts",
33406
33462
  "babel.config.js",
33407
33463
  "babel.config.json",
33408
33464
  "babel.config.cjs",
33409
- "babel.config.mjs"
33465
+ "babel.config.mjs",
33466
+ "babel.config.ts",
33467
+ "babel.config.cts"
33410
33468
  ];
33411
33469
  const VITE_CONFIG_FILENAMES = [
33412
33470
  "vite.config.js",
@@ -33418,12 +33476,28 @@ const VITE_CONFIG_FILENAMES = [
33418
33476
  "vitest.config.ts",
33419
33477
  "vitest.config.js"
33420
33478
  ];
33479
+ const RSBUILD_CONFIG_FILENAMES = [
33480
+ "rsbuild.config.ts",
33481
+ "rsbuild.config.js",
33482
+ "rsbuild.config.mts",
33483
+ "rsbuild.config.mjs",
33484
+ "rsbuild.config.cts",
33485
+ "rsbuild.config.cjs"
33486
+ ];
33487
+ const RSPACK_CONFIG_FILENAMES = [
33488
+ "rspack.config.ts",
33489
+ "rspack.config.js",
33490
+ "rspack.config.mts",
33491
+ "rspack.config.mjs",
33492
+ "rspack.config.cts",
33493
+ "rspack.config.cjs"
33494
+ ];
33421
33495
  const EXPO_APP_CONFIG_FILENAMES = [
33422
33496
  "app.json",
33423
33497
  "app.config.js",
33424
33498
  "app.config.ts"
33425
33499
  ];
33426
- const REACT_COMPILER_PACKAGE_REFERENCE_PATTERN = /babel-plugin-react-compiler|react-compiler-runtime|["']react-compiler["']/;
33500
+ const REACT_COMPILER_PACKAGE_REFERENCE_PATTERN = /babel-plugin-react-compiler|react-compiler-runtime|reactCompilerPreset\s*\(|["']react-compiler["']/;
33427
33501
  const REACT_COMPILER_ENABLED_FLAG_PATTERN = /["']?reactCompiler["']?\s*:\s*(?:true\b|\{)/;
33428
33502
  const STATIC_EXPORT_OUTPUT_PATTERN = /(?:^|[^.\w])["']?output["']?\s*:\s*["']export["']/m;
33429
33503
  const hasCompilerPackage = (packageJson, compilerPackages) => {
@@ -33458,6 +33532,8 @@ const detectReactCompiler = (directory, packageJson) => {
33458
33532
  if (hasCompilerInConfigFiles(directory, NEXT_CONFIG_FILENAMES)) return true;
33459
33533
  if (hasCompilerInConfigFiles(directory, BABEL_CONFIG_FILENAMES)) return true;
33460
33534
  if (hasCompilerInConfigFiles(directory, VITE_CONFIG_FILENAMES)) return true;
33535
+ if (hasCompilerInConfigFiles(directory, RSBUILD_CONFIG_FILENAMES)) return true;
33536
+ if (hasCompilerInConfigFiles(directory, RSPACK_CONFIG_FILENAMES)) return true;
33461
33537
  if (hasCompilerInConfigFiles(directory, EXPO_APP_CONFIG_FILENAMES)) return true;
33462
33538
  return hasCompilerPackageInAncestors(directory, REACT_COMPILER_TRANSFORM_PACKAGES);
33463
33539
  };
@@ -33466,7 +33542,7 @@ const detectNextjsStaticExport = (directory) => NEXT_CONFIG_FILENAMES.some((file
33466
33542
  const filePath = Path.join(directory, filename);
33467
33543
  return isFile(filePath) && STATIC_EXPORT_OUTPUT_PATTERN.test(NFS.readFileSync(filePath, "utf-8"));
33468
33544
  });
33469
- const UNRESOLVABLE_PROTOCOL_VERSION = /^(?:file|git|github|https?|link|patch|portal|workspace|npm):/i;
33545
+ const UNRESOLVABLE_PROTOCOL_VERSION = /^(?:catalog|file|git|github|https?|link|patch|portal|workspace|npm):/i;
33470
33546
  const DIST_TAG_VERSION = /^[a-z][a-z0-9._-]*$/i;
33471
33547
  const WILDCARD_VERSION = /^[*xX](?:\.[*xX])*$/;
33472
33548
  const NPM_ALIAS_VERSION = /^npm:(?:@[^/]+\/[^@]+|[^@]+)@(.+)$/i;
@@ -33599,6 +33675,16 @@ const getLowestDependencyMajor = (version) => {
33599
33675
  }
33600
33676
  return lowestMajor;
33601
33677
  };
33678
+ const getDependencyMajorWithinSupportedRange = (version, latestSupportedMajor) => {
33679
+ const normalizedVersion = normalizeDependencyVersion(version);
33680
+ if (normalizedVersion === null) return null;
33681
+ const validRange = import_semver.validRange(normalizedVersion);
33682
+ if (validRange === null) return null;
33683
+ const minimumVersion = import_semver.minVersion(validRange);
33684
+ if (minimumVersion === null || minimumVersion.major > latestSupportedMajor) return null;
33685
+ if (import_semver.intersects(validRange, `>=${latestSupportedMajor + 1}.0.0`)) return null;
33686
+ return minimumVersion.major;
33687
+ };
33602
33688
  const isConcreteDependencyVersion = (version) => {
33603
33689
  const normalizedVersion = normalizeDependencyVersion(version);
33604
33690
  return normalizedVersion !== null && /\d/.test(normalizedVersion);
@@ -33642,9 +33728,18 @@ const parseReactMajorMinor = (reactVersion) => {
33642
33728
  };
33643
33729
  };
33644
33730
  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();
33731
+ const parseThreeRelease = (threeVersion) => {
33732
+ if (typeof threeVersion !== "string") return null;
33733
+ const normalizedVersion = normalizeDependencyVersion(threeVersion);
33734
+ if (normalizedVersion === null) return null;
33735
+ const lowerBound = parseLowerBoundVersion(normalizedVersion);
33736
+ if (lowerBound === null) return null;
33737
+ if (lowerBound.major > 0) return Number.MAX_SAFE_INTEGER;
33738
+ return lowerBound.minor > 0 ? lowerBound.minor : null;
33739
+ };
33740
+ const parseDependencyMajorMinor = (dependencyVersion) => {
33741
+ if (typeof dependencyVersion !== "string") return null;
33742
+ const trimmed = dependencyVersion.trim();
33648
33743
  if (trimmed.length === 0) return null;
33649
33744
  const lowerBound = parseLowerBoundVersion(trimmed);
33650
33745
  if (lowerBound === null || lowerBound.major <= 0) return null;
@@ -33653,6 +33748,7 @@ const parseTailwindMajorMinor = (tailwindVersion) => {
33653
33748
  minor: lowerBound.minor
33654
33749
  };
33655
33750
  };
33751
+ const parseTailwindMajorMinor = (tailwindVersion) => parseDependencyMajorMinor(tailwindVersion);
33656
33752
  const hasUpperBoundOnlyPeerRange = (range) => {
33657
33753
  if (typeof range !== "string") return false;
33658
33754
  const normalizedRange = normalizeDependencyVersion(range);
@@ -33674,7 +33770,7 @@ const resolveEffectiveReactMajor = (reactVersion, packageJson) => {
33674
33770
  if (peerFloor === null) return hasUpperBoundOnlyPeerRange(peerReactRange) ? null : installedReactMajor;
33675
33771
  return installedReactMajor !== null ? Math.min(installedReactMajor, peerFloor) : peerFloor;
33676
33772
  };
33677
- const isCatalogReference = (version) => version.startsWith("catalog:");
33773
+ const isCatalogReference = (version) => typeof version === "string" && version.startsWith("catalog:");
33678
33774
  const extractCatalogName = (version) => {
33679
33775
  if (!isCatalogReference(version)) return null;
33680
33776
  const name = version.slice(8).trim();
@@ -33824,6 +33920,12 @@ const TAILWIND_ZOD_SECTIONS = [
33824
33920
  "devDependencies",
33825
33921
  "peerDependencies"
33826
33922
  ];
33923
+ const DEPENDENCY_SPEC_SECTIONS = [
33924
+ "dependencies",
33925
+ "devDependencies",
33926
+ "peerDependencies",
33927
+ "optionalDependencies"
33928
+ ];
33827
33929
  const EMPTY_DEPENDENCY_INFO = {
33828
33930
  reactVersion: null,
33829
33931
  tailwindVersion: null,
@@ -33833,7 +33935,7 @@ const EMPTY_DEPENDENCY_INFO = {
33833
33935
  const pickConcreteVersion = (packageJson, packageName, sections) => {
33834
33936
  for (const section of sections) {
33835
33937
  const version = packageJson[section]?.[packageName];
33836
- if (version === void 0) continue;
33938
+ if (typeof version !== "string") continue;
33837
33939
  if (isCatalogReference(version)) return null;
33838
33940
  if (isConcreteDependencyVersion(version)) return version;
33839
33941
  }
@@ -33865,13 +33967,16 @@ const extractDependencyInfo = (packageJson) => {
33865
33967
  };
33866
33968
  };
33867
33969
  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;
33970
+ for (const section of DEPENDENCY_SPEC_SECTIONS) {
33971
+ const spec = packageJson[section]?.[packageName];
33972
+ if (typeof spec === "string") return spec;
33973
+ }
33974
+ return null;
33870
33975
  };
33871
33976
  const getDependencyDeclaration = ({ packageJson, packageName, sections }) => {
33872
33977
  for (const section of sections) {
33873
33978
  const version = packageJson[section]?.[packageName];
33874
- if (version === void 0) continue;
33979
+ if (typeof version !== "string") continue;
33875
33980
  return {
33876
33981
  catalogReference: extractCatalogName(version) ?? null,
33877
33982
  hasDeclaration: true,
@@ -33905,11 +34010,15 @@ const getPreactVersion = (packageJson) => {
33905
34010
  ...packageJson.devDependencies
33906
34011
  }.preact ?? null;
33907
34012
  };
33908
- const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, version }) => {
34013
+ const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, sourceDirectory = rootDirectory, sourcePackageJson = rootPackageJson, version }) => {
33909
34014
  if (version === null || !isCatalogReference(version)) return version;
33910
34015
  const catalogName = extractCatalogName(version);
33911
- const resolvedLocalVersion = resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, catalogName);
33912
- if (resolvedLocalVersion) return resolvedLocalVersion;
34016
+ const resolvedSourceVersion = resolveCatalogVersion(sourcePackageJson, packageName, sourceDirectory, catalogName);
34017
+ if (resolvedSourceVersion) return resolvedSourceVersion;
34018
+ if (sourceDirectory !== rootDirectory || sourcePackageJson !== rootPackageJson) {
34019
+ const resolvedRootVersion = resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, catalogName);
34020
+ if (resolvedRootVersion) return resolvedRootVersion;
34021
+ }
33913
34022
  const monorepoRoot = findMonorepoRoot(rootDirectory);
33914
34023
  if (!monorepoRoot) return version;
33915
34024
  const monorepoPackageJsonPath = Path.join(monorepoRoot, "package.json");
@@ -34107,15 +34216,19 @@ const listWorkspacePackages = (rootDirectory) => {
34107
34216
  }
34108
34217
  return packages;
34109
34218
  };
34219
+ const PREFERRED_DEPENDENCY_SECTIONS = [
34220
+ "dependencies",
34221
+ "peerDependencies",
34222
+ "devDependencies"
34223
+ ];
34110
34224
  const getPreferredDependencyVersion = ({ packageJson, packageNames }) => {
34111
- const allDependencies = {
34112
- ...packageJson.devDependencies,
34113
- ...packageJson.peerDependencies,
34114
- ...packageJson.dependencies
34115
- };
34116
34225
  for (const packageName of packageNames) {
34117
- const version = allDependencies[packageName];
34118
- if (version !== void 0) return version;
34226
+ const declaration = getDependencyDeclaration({
34227
+ packageJson,
34228
+ packageName,
34229
+ sections: PREFERRED_DEPENDENCY_SECTIONS
34230
+ });
34231
+ if (declaration.version !== null) return declaration.version;
34119
34232
  }
34120
34233
  return null;
34121
34234
  };
@@ -34126,18 +34239,6 @@ const getTanStackQueryVersion = (packageJson) => {
34126
34239
  packageNames: TANSTACK_REACT_QUERY_PACKAGES
34127
34240
  });
34128
34241
  };
34129
- const MOBX_PACKAGES = [
34130
- "mobx",
34131
- "mobx-react",
34132
- "mobx-react-lite",
34133
- "mobx-state-tree"
34134
- ];
34135
- const getMobxVersion = (packageJson) => {
34136
- return getPreferredDependencyVersion({
34137
- packageJson,
34138
- packageNames: MOBX_PACKAGES
34139
- });
34140
- };
34141
34242
  const STYLED_COMPONENTS_PACKAGES = ["styled-components"];
34142
34243
  const getStyledComponentsVersion = (packageJson) => {
34143
34244
  return getPreferredDependencyVersion({
@@ -34169,6 +34270,30 @@ const hasI18nDependency = (packageJson) => {
34169
34270
  return I18N_PACKAGES.some((packageName) => allDependencies[packageName] !== void 0);
34170
34271
  };
34171
34272
  const REANIMATED_DEPENDENCY_NAME = "react-native-reanimated";
34273
+ const MOBX_REACT_PACKAGE_NAME = "mobx-react";
34274
+ const MOBX_REACT_LITE_PACKAGE_NAME = "mobx-react-lite";
34275
+ const MOBX_STATE_TREE_PACKAGE_NAME = "mobx-state-tree";
34276
+ const MOBX_REACT_OBSERVER_PACKAGE_NAME = "mobx-react-observer";
34277
+ const REACT_THREE_FIBER_DEPENDENCY_NAMES = ["@react-three/fiber", "react-three-fiber"];
34278
+ const REACT_THREE_FIBER_SECTIONS = [
34279
+ "dependencies",
34280
+ "peerDependencies",
34281
+ "optionalDependencies",
34282
+ "devDependencies"
34283
+ ];
34284
+ const THREE_DEPENDENCY_SECTIONS = [
34285
+ "dependencies",
34286
+ "peerDependencies",
34287
+ "optionalDependencies",
34288
+ "devDependencies"
34289
+ ];
34290
+ const REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES = [...REACT_THREE_FIBER_DEPENDENCY_NAMES, "@react-three/drei"];
34291
+ const THREE_DEPENDENCY_NAMES = [...REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES, "three"];
34292
+ const REACT_ROUTER_DEPENDENCY_NAMES = [
34293
+ "@react-router/dev",
34294
+ "react-router-dom",
34295
+ "react-router"
34296
+ ];
34172
34297
  const SHOPIFY_FLASH_LIST_PACKAGE_NAME = "@shopify/flash-list";
34173
34298
  const resolveWorkspaceDependencyVersion = ({ concreteVersion, packageName, rootDirectory, rootPackageJson, sections, workspaceDirectory, workspacePackageJson }) => {
34174
34299
  const dependencyDeclaration = getDependencyDeclaration({
@@ -34179,7 +34304,7 @@ const resolveWorkspaceDependencyVersion = ({ concreteVersion, packageName, rootD
34179
34304
  if (!dependencyDeclaration.hasDeclaration) return null;
34180
34305
  return concreteVersion ?? resolveCatalogVersion(workspacePackageJson, packageName, workspaceDirectory, dependencyDeclaration.catalogReference) ?? resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, dependencyDeclaration.catalogReference);
34181
34306
  };
34182
- const shouldReplaceReactVersion = (currentVersion, nextVersion) => {
34307
+ const shouldReplaceWithLowerMajor = (currentVersion, nextVersion) => {
34183
34308
  if (!currentVersion) return true;
34184
34309
  const currentMajor = parseReactMajor(currentVersion);
34185
34310
  const nextMajor = parseReactMajor(nextVersion);
@@ -34187,15 +34312,71 @@ const shouldReplaceReactVersion = (currentVersion, nextVersion) => {
34187
34312
  if (nextMajor === null) return false;
34188
34313
  return nextMajor < currentMajor;
34189
34314
  };
34315
+ const shouldReplaceSupportedDependencyFact = (currentFact, nextFact, latestSupportedMajor) => {
34316
+ if (currentFact.version === null) return true;
34317
+ if (nextFact.version === null) return false;
34318
+ const currentMajor = getLowestDependencyMajor(currentFact.version);
34319
+ const nextMajor = getLowestDependencyMajor(nextFact.version);
34320
+ if (currentMajor === null) return false;
34321
+ if (nextMajor === null) return true;
34322
+ if (currentMajor > latestSupportedMajor) return false;
34323
+ if (nextMajor > latestSupportedMajor) return true;
34324
+ return nextMajor < currentMajor;
34325
+ };
34190
34326
  const shouldReplaceStyledComponentsVersion = (currentVersion, nextVersion) => {
34191
34327
  if (!currentVersion) return true;
34192
34328
  const currentMajor = getLowestDependencyMajor(currentVersion);
34193
34329
  const nextMajor = getLowestDependencyMajor(nextVersion);
34330
+ if (currentMajor === null) return nextMajor !== null && nextMajor < 6;
34331
+ if (nextMajor === null) return currentMajor >= 6;
34332
+ return nextMajor < currentMajor;
34333
+ };
34334
+ const selectOldestDependencyVersion = (currentVersion, nextVersion) => {
34335
+ if (currentVersion === null || nextVersion === null) return null;
34336
+ const current = parseDependencyMajorMinor(currentVersion);
34337
+ const next = parseDependencyMajorMinor(nextVersion);
34338
+ if (current === null) return currentVersion;
34339
+ if (next === null) return nextVersion;
34340
+ if (next.major !== current.major) return next.major < current.major ? nextVersion : currentVersion;
34341
+ return next.minor < current.minor ? nextVersion : currentVersion;
34342
+ };
34343
+ const shouldReplaceMobxFact = (currentFact, nextFact) => {
34344
+ if (currentFact.sourceDirectory === null) return true;
34345
+ if (currentFact.version === null) return false;
34346
+ if (nextFact.version === null) return true;
34347
+ const currentMajor = getDependencyMajorWithinSupportedRange(currentFact.version, 6);
34348
+ const nextMajor = getDependencyMajorWithinSupportedRange(nextFact.version, 6);
34194
34349
  if (currentMajor === null) return false;
34195
34350
  if (nextMajor === null) return true;
34196
- return nextMajor < currentMajor;
34351
+ return selectOldestDependencyVersion(currentFact.version, nextFact.version) === nextFact.version;
34352
+ };
34353
+ const collectBindingVersion = (facts, packageJson, directory, packageName) => {
34354
+ const version = getDependencySpec(packageJson, packageName);
34355
+ if (version === null) return;
34356
+ const resolvedVersion = resolveCatalogBackedDependencyVersion({
34357
+ rootDirectory: directory,
34358
+ rootPackageJson: packageJson,
34359
+ packageName,
34360
+ version
34361
+ });
34362
+ if (packageName === MOBX_REACT_PACKAGE_NAME) {
34363
+ facts.mobxReactVersion = facts.hasMobxReact ? selectOldestDependencyVersion(facts.mobxReactVersion, resolvedVersion) : resolvedVersion;
34364
+ facts.hasMobxReact = true;
34365
+ return;
34366
+ }
34367
+ facts.mobxReactLiteVersion = facts.hasMobxReactLite ? selectOldestDependencyVersion(facts.mobxReactLiteVersion, resolvedVersion) : resolvedVersion;
34368
+ facts.hasMobxReactLite = true;
34197
34369
  };
34198
- const evaluateManifestFacts = (facts, packageJson, directory) => {
34370
+ const shouldReplaceReactRouterVersion = (currentVersion, nextVersion) => {
34371
+ if (currentVersion === null) return true;
34372
+ const current = parseReactMajorMinor(currentVersion);
34373
+ const next = parseReactMajorMinor(nextVersion);
34374
+ if (current === null) return next !== null;
34375
+ if (next === null) return false;
34376
+ if (next.major !== current.major) return next.major < current.major;
34377
+ return next.minor < current.minor;
34378
+ };
34379
+ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, rootPackageJson) => {
34199
34380
  if (facts.expo.version === null) {
34200
34381
  const spec = getDependencySpec(packageJson, "expo");
34201
34382
  if (spec !== null) facts.expo = {
@@ -34210,6 +34391,23 @@ const evaluateManifestFacts = (facts, packageJson, directory) => {
34210
34391
  sourceDirectory: directory
34211
34392
  };
34212
34393
  }
34394
+ for (const packageName of REACT_ROUTER_DEPENDENCY_NAMES) {
34395
+ const resolvedSpec = resolveCatalogBackedDependencyVersion({
34396
+ rootDirectory,
34397
+ rootPackageJson,
34398
+ sourceDirectory: directory,
34399
+ sourcePackageJson: packageJson,
34400
+ packageName,
34401
+ version: getDependencySpec(packageJson, packageName)
34402
+ });
34403
+ if (resolvedSpec === null || !shouldReplaceReactRouterVersion(facts.reactRouter.version, resolvedSpec)) continue;
34404
+ facts.reactRouter = {
34405
+ version: resolvedSpec,
34406
+ sourceDirectory: directory,
34407
+ packageName
34408
+ };
34409
+ }
34410
+ facts.hasReactRouterFramework = facts.hasReactRouterFramework || getDependencySpec(packageJson, "@react-router/dev") !== null;
34213
34411
  if (facts.shopifyFlashList.version === null) {
34214
34412
  const spec = getDependencySpec(packageJson, SHOPIFY_FLASH_LIST_PACKAGE_NAME);
34215
34413
  if (spec !== null) facts.shopifyFlashList = {
@@ -34217,18 +34415,113 @@ const evaluateManifestFacts = (facts, packageJson, directory) => {
34217
34415
  sourceDirectory: directory
34218
34416
  };
34219
34417
  }
34418
+ const mobxSpec = getDependencySpec(packageJson, "mobx");
34419
+ if (mobxSpec !== null) {
34420
+ const nextMobxFact = {
34421
+ version: resolveCatalogBackedDependencyVersion({
34422
+ rootDirectory: directory,
34423
+ rootPackageJson: packageJson,
34424
+ packageName: "mobx",
34425
+ version: mobxSpec
34426
+ }),
34427
+ sourceDirectory: directory
34428
+ };
34429
+ if (shouldReplaceMobxFact(facts.mobx, nextMobxFact)) facts.mobx = nextMobxFact;
34430
+ }
34431
+ collectBindingVersion(facts, packageJson, directory, MOBX_REACT_PACKAGE_NAME);
34432
+ collectBindingVersion(facts, packageJson, directory, MOBX_REACT_LITE_PACKAGE_NAME);
34433
+ facts.hasMobxStateTree = facts.hasMobxStateTree || getDependencySpec(packageJson, MOBX_STATE_TREE_PACKAGE_NAME) !== null;
34434
+ facts.hasMobxReactObserver = facts.hasMobxReactObserver || getDependencySpec(packageJson, MOBX_REACT_OBSERVER_PACKAGE_NAME) !== null;
34435
+ const zustandSpec = getDependencySpec(packageJson, "zustand");
34436
+ if (zustandSpec !== null) {
34437
+ const nextZustandFact = {
34438
+ version: resolveCatalogBackedDependencyVersion({
34439
+ rootDirectory: directory,
34440
+ rootPackageJson: packageJson,
34441
+ packageName: "zustand",
34442
+ version: zustandSpec
34443
+ }),
34444
+ sourceDirectory: directory
34445
+ };
34446
+ if (shouldReplaceSupportedDependencyFact(facts.zustand, nextZustandFact, 5)) facts.zustand = nextZustandFact;
34447
+ }
34220
34448
  if (facts.reanimatedVersion === null) {
34221
34449
  const spec = getDependencySpec(packageJson, REANIMATED_DEPENDENCY_NAME);
34222
34450
  if (spec !== null) facts.reanimatedVersion = spec;
34223
34451
  }
34452
+ if (facts.valtioVersion === null) {
34453
+ const spec = getDependencySpec(packageJson, "valtio");
34454
+ if (spec !== null) facts.valtioVersion = spec;
34455
+ }
34224
34456
  facts.tanstackQueryVersion ??= getTanStackQueryVersion(packageJson);
34225
- facts.mobxVersion ??= getMobxVersion(packageJson);
34226
- const styledComponentsVersion = getStyledComponentsVersion(packageJson);
34457
+ const styledComponentsVersion = resolveCatalogBackedDependencyVersion({
34458
+ rootDirectory: directory,
34459
+ rootPackageJson: packageJson,
34460
+ packageName: "styled-components",
34461
+ version: getStyledComponentsVersion(packageJson)
34462
+ });
34227
34463
  if (styledComponentsVersion && shouldReplaceStyledComponentsVersion(facts.styledComponentsVersion, styledComponentsVersion)) facts.styledComponentsVersion = styledComponentsVersion;
34228
34464
  facts.hasI18nLibrary = facts.hasI18nLibrary || hasI18nDependency(packageJson);
34465
+ for (const packageName of REACT_THREE_FIBER_DEPENDENCY_NAMES) {
34466
+ const version = resolveCatalogBackedDependencyVersion({
34467
+ rootDirectory,
34468
+ rootPackageJson,
34469
+ sourceDirectory: directory,
34470
+ sourcePackageJson: packageJson,
34471
+ packageName,
34472
+ version: getDependencyDeclaration({
34473
+ packageName,
34474
+ packageJson,
34475
+ sections: REACT_THREE_FIBER_SECTIONS
34476
+ }).version
34477
+ });
34478
+ if (version === null) continue;
34479
+ if (shouldReplaceWithLowerMajor(facts.reactThreeFiber.version, version)) facts.reactThreeFiber = {
34480
+ packageName,
34481
+ version,
34482
+ sourceDirectory: directory
34483
+ };
34484
+ }
34485
+ const threeVersion = resolveCatalogBackedDependencyVersion({
34486
+ rootDirectory,
34487
+ rootPackageJson,
34488
+ sourceDirectory: directory,
34489
+ sourcePackageJson: packageJson,
34490
+ packageName: "three",
34491
+ version: getDependencyDeclaration({
34492
+ packageName: "three",
34493
+ packageJson,
34494
+ sections: THREE_DEPENDENCY_SECTIONS
34495
+ }).version
34496
+ });
34497
+ if (threeVersion !== null) {
34498
+ const currentRelease = parseThreeRelease(facts.threeVersion);
34499
+ const nextRelease = parseThreeRelease(threeVersion);
34500
+ if (facts.threeVersion === null || nextRelease !== null && (currentRelease === null || nextRelease < currentRelease)) facts.threeVersion = threeVersion;
34501
+ }
34229
34502
  facts.hasReactNativeAwarePackage = facts.hasReactNativeAwarePackage || isPackageJsonReactNativeAware(packageJson);
34230
34503
  facts.hasReanimatedAwarePackage = facts.hasReanimatedAwarePackage || isPackageJsonReanimatedAware(packageJson);
34231
34504
  facts.hasSsrDependency = facts.hasSsrDependency || isPackageJsonSsrAware(packageJson);
34505
+ const remotionSpec = getDependencySpec(packageJson, "remotion");
34506
+ if (remotionSpec !== null) {
34507
+ facts.hasRemotionDependency = true;
34508
+ const resolvedRemotionVersion = resolveCatalogBackedDependencyVersion({
34509
+ rootDirectory,
34510
+ rootPackageJson,
34511
+ packageName: "remotion",
34512
+ version: remotionSpec
34513
+ });
34514
+ const remotionMajorVersion = resolvedRemotionVersion === null ? null : getLowestDependencyMajor(resolvedRemotionVersion);
34515
+ if (remotionMajorVersion === null) {
34516
+ facts.hasUnknownRemotionVersion = true;
34517
+ facts.remotionVersion = null;
34518
+ } else if (!facts.hasUnknownRemotionVersion) {
34519
+ const currentRemotionMajorVersion = facts.remotionVersion === null ? null : getLowestDependencyMajor(facts.remotionVersion);
34520
+ if (currentRemotionMajorVersion === null || remotionMajorVersion < currentRemotionMajorVersion) facts.remotionVersion = resolvedRemotionVersion;
34521
+ }
34522
+ }
34523
+ facts.hasThree = facts.hasThree || THREE_DEPENDENCY_NAMES.some((dependencyName) => getDependencySpec(packageJson, dependencyName) !== null);
34524
+ facts.hasReactThreeFiber = facts.hasReactThreeFiber || REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES.some((dependencyName) => getDependencySpec(packageJson, dependencyName) !== null);
34232
34525
  };
34233
34526
  const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGroup }) => {
34234
34527
  const facts = {
@@ -34244,29 +34537,60 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34244
34537
  version: null,
34245
34538
  sourceDirectory: null
34246
34539
  },
34540
+ reactRouter: {
34541
+ version: null,
34542
+ sourceDirectory: null,
34543
+ packageName: null
34544
+ },
34247
34545
  shopifyFlashList: {
34248
34546
  version: null,
34249
34547
  sourceDirectory: null
34250
34548
  },
34549
+ valtioVersion: null,
34550
+ mobx: {
34551
+ version: null,
34552
+ sourceDirectory: null
34553
+ },
34554
+ hasMobxReact: false,
34555
+ mobxReactVersion: null,
34556
+ hasMobxReactLite: false,
34557
+ mobxReactLiteVersion: null,
34558
+ hasMobxStateTree: false,
34559
+ hasMobxReactObserver: false,
34560
+ zustand: {
34561
+ version: null,
34562
+ sourceDirectory: null
34563
+ },
34251
34564
  tanstackQueryVersion: null,
34252
- mobxVersion: null,
34253
34565
  styledComponentsVersion: null,
34254
34566
  hasI18nLibrary: false,
34255
34567
  hasReactNativeAwarePackage: false,
34256
34568
  hasReanimatedAwarePackage: false,
34257
34569
  hasSsrDependency: false,
34570
+ hasRemotionDependency: false,
34571
+ hasUnknownRemotionVersion: false,
34572
+ remotionVersion: null,
34573
+ hasThree: false,
34574
+ threeVersion: null,
34575
+ hasReactThreeFiber: false,
34576
+ reactThreeFiber: {
34577
+ packageName: null,
34578
+ version: null,
34579
+ sourceDirectory: null
34580
+ },
34581
+ hasReactRouterFramework: false,
34258
34582
  reanimatedVersion: null
34259
34583
  };
34260
- evaluateManifestFacts(facts, rootPackageJson, rootDirectory);
34584
+ evaluateManifestFacts(facts, rootPackageJson, rootDirectory, rootDirectory, rootPackageJson);
34261
34585
  let isReactGroupSettled = !collectReactGroup;
34262
34586
  const visitedDirectories = /* @__PURE__ */ new Set();
34263
34587
  for (const pattern of getWorkspacePatterns(rootDirectory, rootPackageJson)) {
34264
- const directories = [...resolveWorkspaceDirectories(rootDirectory, pattern)].sort();
34588
+ const directories = resolveWorkspaceDirectories(rootDirectory, pattern).toSorted();
34265
34589
  for (const workspaceDirectory of directories) {
34266
34590
  if (visitedDirectories.has(workspaceDirectory)) continue;
34267
34591
  visitedDirectories.add(workspaceDirectory);
34268
34592
  const workspacePackageJson = readPackageJson(Path.join(workspaceDirectory, "package.json"));
34269
- evaluateManifestFacts(facts, workspacePackageJson, workspaceDirectory);
34593
+ evaluateManifestFacts(facts, workspacePackageJson, workspaceDirectory, rootDirectory, rootPackageJson);
34270
34594
  const info = extractDependencyInfo(workspacePackageJson);
34271
34595
  if (info.framework !== "unknown" && frameworkMergeRank(info.framework) < frameworkMergeRank(facts.framework)) facts.framework = info.framework;
34272
34596
  if (isReactGroupSettled) continue;
@@ -34297,7 +34621,7 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34297
34621
  workspaceDirectory,
34298
34622
  workspacePackageJson
34299
34623
  });
34300
- if (reactVersion && shouldReplaceReactVersion(facts.reactVersion, reactVersion)) facts.reactVersion = reactVersion;
34624
+ if (reactVersion && shouldReplaceWithLowerMajor(facts.reactVersion, reactVersion)) facts.reactVersion = reactVersion;
34301
34625
  if (tailwindVersion && !facts.tailwindVersion) facts.tailwindVersion = tailwindVersion;
34302
34626
  if (zodVersion && !facts.zodVersion) facts.zodVersion = zodVersion;
34303
34627
  const settledReactMajor = parseReactMajor(facts.reactVersion);
@@ -34490,21 +34814,43 @@ const discoverProjectWithoutPackageJson = (directory) => {
34490
34814
  tailwindVersion: null,
34491
34815
  zodVersion: null,
34492
34816
  zodMajorVersion: null,
34817
+ mobxVersion: null,
34818
+ mobxMajorVersion: null,
34819
+ hasMobxReact: false,
34820
+ mobxReactVersion: null,
34821
+ hasMobxReactLite: false,
34822
+ mobxReactLiteVersion: null,
34823
+ hasMobxStateTree: false,
34824
+ hasMobxReactObserver: false,
34825
+ zustandVersion: null,
34826
+ zustandMajorVersion: null,
34493
34827
  framework: "unknown",
34494
34828
  hasTypeScript: hasOwnTsConfig,
34495
34829
  hasReactCompiler: false,
34496
34830
  hasReactCompilerLintPlugin: false,
34497
34831
  hasTanStackQuery: false,
34832
+ valtioVersion: null,
34833
+ valtioMajorVersion: null,
34834
+ hasRemotion: false,
34835
+ remotionVersion: null,
34836
+ remotionMajorVersion: null,
34498
34837
  hasI18nLibrary: false,
34499
34838
  tanstackQueryVersion: null,
34500
- mobxVersion: null,
34501
34839
  styledComponentsVersion: null,
34840
+ hasThree: false,
34841
+ threeVersion: null,
34842
+ threeRelease: null,
34843
+ hasReactThreeFiber: false,
34844
+ reactThreeFiberVersion: null,
34845
+ reactThreeFiberMajorVersion: null,
34502
34846
  hasSsrDependency: false,
34503
34847
  preactVersion: null,
34504
34848
  preactMajorVersion: null,
34505
34849
  hasReactNativeWorkspace: false,
34506
34850
  nextjsVersion: null,
34507
34851
  nextjsMajorVersion: null,
34852
+ reactRouterVersion: null,
34853
+ hasReactRouterFramework: false,
34508
34854
  expoVersion: null,
34509
34855
  shopifyFlashListVersion: null,
34510
34856
  shopifyFlashListMajorVersion: null,
@@ -34597,6 +34943,12 @@ const discoverProject = (directory) => {
34597
34943
  packageName: SHOPIFY_FLASH_LIST_PACKAGE_NAME,
34598
34944
  version: workspaceFacts.shopifyFlashList.version
34599
34945
  }) : null;
34946
+ const zustandVersion = resolveCatalogBackedDependencyVersion({
34947
+ rootDirectory: directory,
34948
+ rootPackageJson: packageJson,
34949
+ packageName: "zustand",
34950
+ version: workspaceFacts.zustand.version
34951
+ });
34600
34952
  const hasReanimated = hasReactNativeWorkspace && workspaceFacts.hasReanimatedAwarePackage;
34601
34953
  const reanimatedVersion = hasReanimated ? workspaceFacts.reanimatedVersion : null;
34602
34954
  const nextjsVersion = framework === "nextjs" ? resolveCatalogBackedDependencyVersion({
@@ -34605,8 +34957,39 @@ const discoverProject = (directory) => {
34605
34957
  packageName: "next",
34606
34958
  version: workspaceFacts.next.version
34607
34959
  }) : null;
34960
+ const valtioVersion = resolveCatalogBackedDependencyVersion({
34961
+ rootDirectory: directory,
34962
+ rootPackageJson: packageJson,
34963
+ packageName: "valtio",
34964
+ version: workspaceFacts.valtioVersion
34965
+ });
34966
+ const mobxVersion = resolveCatalogBackedDependencyVersion({
34967
+ rootDirectory: directory,
34968
+ rootPackageJson: packageJson,
34969
+ packageName: "mobx",
34970
+ version: workspaceFacts.mobx.version
34971
+ });
34972
+ const reactRouterVersion = workspaceFacts.reactRouter.packageName === null ? null : resolveCatalogBackedDependencyVersion({
34973
+ rootDirectory: directory,
34974
+ rootPackageJson: packageJson,
34975
+ packageName: workspaceFacts.reactRouter.packageName,
34976
+ version: workspaceFacts.reactRouter.version
34977
+ });
34608
34978
  const preactVersion = getPreactVersion(packageJson);
34979
+ const remotionVersion = workspaceFacts.remotionVersion;
34609
34980
  const tanstackQueryVersion = getTanStackQueryVersion(packageJson) ?? workspaceFacts.tanstackQueryVersion;
34981
+ const reactThreeFiberVersion = workspaceFacts.reactThreeFiber.packageName ? resolveCatalogBackedDependencyVersion({
34982
+ rootDirectory: directory,
34983
+ rootPackageJson: packageJson,
34984
+ packageName: workspaceFacts.reactThreeFiber.packageName,
34985
+ version: workspaceFacts.reactThreeFiber.version
34986
+ }) : null;
34987
+ const threeVersion = resolveCatalogBackedDependencyVersion({
34988
+ rootDirectory: directory,
34989
+ rootPackageJson: packageJson,
34990
+ packageName: "three",
34991
+ version: workspaceFacts.threeVersion
34992
+ });
34610
34993
  const isPreES2023Target = hasTypeScript && detectPreES2023Target(directory);
34611
34994
  const projectInfo = {
34612
34995
  rootDirectory: directory,
@@ -34616,6 +34999,16 @@ const discoverProject = (directory) => {
34616
34999
  tailwindVersion,
34617
35000
  zodVersion,
34618
35001
  zodMajorVersion: zodVersion === null ? null : getLowestDependencyMajor(zodVersion),
35002
+ mobxVersion,
35003
+ mobxMajorVersion: mobxVersion === null ? null : getDependencyMajorWithinSupportedRange(mobxVersion, 6),
35004
+ hasMobxReact: workspaceFacts.hasMobxReact,
35005
+ mobxReactVersion: workspaceFacts.mobxReactVersion,
35006
+ hasMobxReactLite: workspaceFacts.hasMobxReactLite,
35007
+ mobxReactLiteVersion: workspaceFacts.mobxReactLiteVersion,
35008
+ hasMobxStateTree: workspaceFacts.hasMobxStateTree,
35009
+ hasMobxReactObserver: workspaceFacts.hasMobxReactObserver,
35010
+ zustandVersion,
35011
+ zustandMajorVersion: zustandVersion === null ? null : getLowestDependencyMajor(zustandVersion),
34619
35012
  framework,
34620
35013
  hasTypeScript,
34621
35014
  hasReactCompiler: detectReactCompiler(directory, packageJson),
@@ -34623,14 +35016,26 @@ const discoverProject = (directory) => {
34623
35016
  hasTanStackQuery: tanstackQueryVersion !== null,
34624
35017
  hasI18nLibrary: workspaceFacts.hasI18nLibrary,
34625
35018
  tanstackQueryVersion,
34626
- mobxVersion: workspaceFacts.mobxVersion,
34627
35019
  styledComponentsVersion: workspaceFacts.styledComponentsVersion,
35020
+ valtioVersion,
35021
+ valtioMajorVersion: valtioVersion === null ? null : getLowestDependencyMajor(valtioVersion),
35022
+ hasRemotion: workspaceFacts.hasRemotionDependency,
35023
+ remotionVersion,
35024
+ remotionMajorVersion: remotionVersion === null ? null : getLowestDependencyMajor(remotionVersion),
35025
+ hasThree: workspaceFacts.hasThree,
35026
+ threeVersion,
35027
+ threeRelease: parseThreeRelease(threeVersion),
35028
+ hasReactThreeFiber: workspaceFacts.hasReactThreeFiber,
35029
+ reactThreeFiberVersion,
35030
+ reactThreeFiberMajorVersion: reactThreeFiberVersion === null ? null : getLowestDependencyMajor(reactThreeFiberVersion),
34628
35031
  hasSsrDependency: workspaceFacts.hasSsrDependency,
34629
35032
  preactVersion,
34630
35033
  preactMajorVersion: parseReactMajor(preactVersion),
34631
35034
  hasReactNativeWorkspace,
34632
35035
  nextjsVersion,
34633
35036
  nextjsMajorVersion: nextjsVersion === null ? null : getLowestDependencyMajor(nextjsVersion),
35037
+ reactRouterVersion,
35038
+ hasReactRouterFramework: workspaceFacts.hasReactRouterFramework,
34634
35039
  expoVersion,
34635
35040
  shopifyFlashListVersion,
34636
35041
  shopifyFlashListMajorVersion: shopifyFlashListVersion === null ? null : getLowestDependencyMajor(shopifyFlashListVersion),
@@ -37144,9 +37549,25 @@ const BABEL_CONFIG_FILE_NAMES = [
37144
37549
  ".babelrc.json"
37145
37550
  ];
37146
37551
  const LEGACY_PRESET_SPEC = "module:metro-react-native-babel-preset";
37552
+ const LEGACY_PRESET_PACKAGE = "metro-react-native-babel-preset";
37553
+ const REACT_NATIVE_PACKAGE = "react-native";
37554
+ const PRESET_RENAME_MINIMUM_REACT_NATIVE_VERSION = "0.73.0";
37555
+ const LEGACY_PRESET_REFERENCE = new RegExp(`['"]${LEGACY_PRESET_SPEC}['"]`);
37147
37556
  const MODERN_PRESET_REFERENCE = new RegExp(`['"]module:@react-native/babel-preset['"]`);
37148
37557
  const ENABLE_BABEL_RUNTIME_VERSION = /enableBabelRuntime["']?\s*:\s*['"]/;
37558
+ const isReactNativeVersionAtLeastPresetRename = (rootDirectory, packageJson) => {
37559
+ const installedReactNativeManifestPath = Path.join(rootDirectory, "node_modules", REACT_NATIVE_PACKAGE, "package.json");
37560
+ const reactNativeVersionSpec = (isFile(installedReactNativeManifestPath) ? readPackageJson(installedReactNativeManifestPath).version : void 0) ?? getDependencySpec(packageJson, REACT_NATIVE_PACKAGE);
37561
+ if (reactNativeVersionSpec === null || reactNativeVersionSpec === void 0) return false;
37562
+ const normalizedVersionRange = import_semver.validRange(reactNativeVersionSpec);
37563
+ if (normalizedVersionRange === null) return false;
37564
+ const minimumVersion = import_semver.minVersion(normalizedVersionRange);
37565
+ return minimumVersion !== null && import_semver.gte(minimumVersion, PRESET_RENAME_MINIMUM_REACT_NATIVE_VERSION);
37566
+ };
37567
+ const canResolveLegacyPreset = (rootDirectory, packageJson) => getDependencySpec(packageJson, LEGACY_PRESET_PACKAGE) !== null || isFile(Path.join(rootDirectory, "node_modules", LEGACY_PRESET_PACKAGE, "package.json"));
37149
37568
  const checkReactNativeMetroBabelPreset = (rootDirectory) => {
37569
+ const packageJson = readPackageJson(Path.join(rootDirectory, "package.json"));
37570
+ const shouldReportLegacyPreset = isReactNativeVersionAtLeastPresetRename(rootDirectory, packageJson) && !canResolveLegacyPreset(rootDirectory, packageJson);
37150
37571
  for (const fileName of BABEL_CONFIG_FILE_NAMES) {
37151
37572
  const filePath = Path.join(rootDirectory, fileName);
37152
37573
  if (!isFile(filePath)) continue;
@@ -37156,7 +37577,7 @@ const checkReactNativeMetroBabelPreset = (rootDirectory) => {
37156
37577
  } catch {
37157
37578
  continue;
37158
37579
  }
37159
- if (contents.includes(LEGACY_PRESET_SPEC)) return [buildReactNativeDiagnostic({
37580
+ if (shouldReportLegacyPreset && LEGACY_PRESET_REFERENCE.test(contents)) return [buildReactNativeDiagnostic({
37160
37581
  filePath: fileName,
37161
37582
  rule: "rn-no-metro-babel-preset",
37162
37583
  severity: "error",
@@ -37179,12 +37600,6 @@ const checkReactNativeProject = (rootDirectory, project) => {
37179
37600
  return [...checkReactNativeMetroBabelPreset(rootDirectory), ...checkReactNativeLibraryDependencies(rootDirectory)];
37180
37601
  };
37181
37602
  const RULE_KEY = "no-vulnerable-react-server-components";
37182
- const DEPENDENCY_SECTIONS = [
37183
- "dependencies",
37184
- "devDependencies",
37185
- "peerDependencies",
37186
- "optionalDependencies"
37187
- ];
37188
37603
  const REACT_RSC_ADVISORIES_BY_MINOR = {
37189
37604
  "19.0": {
37190
37605
  rceFixedVersion: "19.0.1",
@@ -37231,20 +37646,13 @@ const enumerateWorkspaceDirectories = (workspaceRoot) => {
37231
37646
  for (const pattern of patterns) for (const directory of resolveWorkspaceDirectories(workspaceRoot, pattern)) directories.add(directory);
37232
37647
  return [...directories];
37233
37648
  };
37234
- const readDeclaredSpec = (packageJson, packageName) => {
37235
- for (const section of DEPENDENCY_SECTIONS) {
37236
- const spec = packageJson[section]?.[packageName];
37237
- if (typeof spec === "string") return spec;
37238
- }
37239
- return null;
37240
- };
37241
37649
  const resolveVersionInDirectory = (directory, packageName, declaredSpecOverride) => {
37242
37650
  const manifestPath = Path.join(directory, "node_modules", packageName, "package.json");
37243
37651
  if (isFile(manifestPath)) {
37244
37652
  const installedVersion = import_semver.valid(readPackageJson(manifestPath).version ?? null);
37245
37653
  if (installedVersion !== null) return installedVersion;
37246
37654
  }
37247
- const candidateSpecs = [readDeclaredSpec(readPackageJson(Path.join(directory, "package.json")), packageName), declaredSpecOverride];
37655
+ const candidateSpecs = [getDependencySpec(readPackageJson(Path.join(directory, "package.json")), packageName), declaredSpecOverride];
37248
37656
  for (const spec of candidateSpecs) {
37249
37657
  const pinnedVersion = spec === null ? null : import_semver.valid(spec);
37250
37658
  if (pinnedVersion !== null) return pinnedVersion;
@@ -37896,10 +38304,10 @@ const SSR_FRAMEWORKS = new Set([
37896
38304
  "gatsby",
37897
38305
  "tanstack-start"
37898
38306
  ]);
37899
- const addMajorLadder = (capabilities, name, major, earliest, latest) => {
37900
- if (major === null) return;
37901
- const cappedMajor = Math.min(major, latest);
37902
- for (let candidate = earliest; candidate <= cappedMajor; candidate += 1) capabilities.add(`${name}:${candidate}`);
38307
+ const addVersionCapabilityLadder = (capabilities, name, detectedVersion, earliest, latest) => {
38308
+ if (detectedVersion === null) return;
38309
+ const cappedVersion = Math.min(detectedVersion, latest);
38310
+ for (let candidate = earliest; candidate <= cappedVersion; candidate += 1) capabilities.add(`${name}:${candidate}`);
37903
38311
  };
37904
38312
  const buildCapabilities = (project) => {
37905
38313
  const capabilities = /* @__PURE__ */ new Set();
@@ -37913,31 +38321,85 @@ const buildCapabilities = (project) => {
37913
38321
  if (project.isStaticExport) capabilities.add("nextjs:static-export");
37914
38322
  if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
37915
38323
  if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 16) capabilities.add("nextjs:16");
37916
- addMajorLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
38324
+ const reactRouterVersion = project.reactRouterVersion ?? null;
38325
+ if (reactRouterVersion !== null) {
38326
+ capabilities.add("react-router");
38327
+ if (project.hasReactRouterFramework === true) capabilities.add("react-router-framework");
38328
+ const detectedVersion = parseReactMajorMinor(reactRouterVersion);
38329
+ if (detectedVersion !== null) {
38330
+ for (const threshold of REACT_ROUTER_CAPABILITY_THRESHOLDS) if (isMajorMinorAtLeast(detectedVersion, threshold)) capabilities.add(threshold.capability);
38331
+ }
38332
+ }
38333
+ addVersionCapabilityLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
37917
38334
  if (project.reactMajorVersion !== null && project.reactMajorVersion >= 19 && isMajorMinorAtLeast(parseReactMajorMinor(project.reactVersion), {
37918
38335
  major: 19,
37919
38336
  minor: 2
37920
38337
  })) capabilities.add("react:19.2");
37921
- if (project.tailwindVersion !== null) capabilities.add("tailwind");
37922
- if (project.tailwindVersion !== null && isMajorMinorAtLeast(parseTailwindMajorMinor(project.tailwindVersion), {
37923
- major: 3,
37924
- minor: 4
37925
- })) capabilities.add("tailwind:3.4");
38338
+ if (project.tailwindVersion !== null) {
38339
+ capabilities.add("tailwind");
38340
+ const tailwindVersion = parseTailwindMajorMinor(project.tailwindVersion);
38341
+ if (isMajorMinorAtLeast(tailwindVersion, {
38342
+ major: 3,
38343
+ minor: 4
38344
+ })) capabilities.add("tailwind:3.4");
38345
+ if (tailwindVersion !== null && isMajorMinorAtLeast(tailwindVersion, {
38346
+ major: 4,
38347
+ minor: 0
38348
+ })) capabilities.add("tailwind:4");
38349
+ }
37926
38350
  if (project.zodVersion !== null) capabilities.add("zod");
37927
38351
  if (project.zodMajorVersion !== null && project.zodMajorVersion >= 4) capabilities.add("zod:4");
38352
+ if (project.mobxVersion !== void 0 && project.mobxVersion !== null || project.hasMobxReact === true || project.hasMobxReactLite === true || project.hasMobxStateTree === true || project.hasMobxReactObserver === true) capabilities.add("mobx");
38353
+ if (project.hasMobxReact === true) capabilities.add("mobx-react");
38354
+ if (project.hasMobxReactLite === true) capabilities.add("mobx-react-lite");
38355
+ if (project.hasMobxReact === true || project.hasMobxReactLite === true) capabilities.add("mobx-react-binding");
38356
+ const mobxReactVersion = parseDependencyMajorMinor(project.mobxReactVersion);
38357
+ const mobxReactLiteVersion = parseDependencyMajorMinor(project.mobxReactLiteVersion);
38358
+ const hasMobxReactObserverMemoGuard = mobxReactVersion !== null && isMajorMinorAtLeast(mobxReactVersion, {
38359
+ major: 7,
38360
+ minor: 3
38361
+ });
38362
+ const hasMobxReactLiteObserverMemoGuard = mobxReactLiteVersion !== null && isMajorMinorAtLeast(mobxReactLiteVersion, {
38363
+ major: 3,
38364
+ minor: 3
38365
+ });
38366
+ if (hasMobxReactObserverMemoGuard) capabilities.add("mobx-react-observer-memo-guard");
38367
+ if (hasMobxReactLiteObserverMemoGuard) capabilities.add("mobx-react-lite-observer-memo-guard");
38368
+ if (hasMobxReactObserverMemoGuard || hasMobxReactLiteObserverMemoGuard) capabilities.add("mobx-react-binding-observer-memo-guard");
38369
+ if (project.hasMobxStateTree === true) capabilities.add("mobx-state-tree");
38370
+ if (project.hasMobxReactObserver === true) capabilities.add("mobx-react-observer");
38371
+ if (project.mobxMajorVersion !== void 0 && project.mobxMajorVersion !== null && project.mobxMajorVersion >= 4 && project.mobxMajorVersion <= 6) addVersionCapabilityLadder(capabilities, "mobx", project.mobxMajorVersion, 4, 6);
38372
+ const mobxVersion = parseDependencyMajorMinor(project.mobxVersion);
38373
+ if (project.mobxMajorVersion === 6 && mobxVersion !== null && isMajorMinorAtLeast(mobxVersion, {
38374
+ major: 6,
38375
+ minor: 10
38376
+ })) capabilities.add("mobx:6.10");
38377
+ if (project.zustandVersion !== void 0 && project.zustandVersion !== null) capabilities.add("zustand");
38378
+ if (project.zustandMajorVersion !== void 0 && project.zustandMajorVersion !== null && project.zustandMajorVersion >= 1 && project.zustandMajorVersion <= 5) addVersionCapabilityLadder(capabilities, "zustand", project.zustandMajorVersion, 1, 5);
37928
38379
  if (project.isPreES2023Target) capabilities.add("pre-es2023");
37929
38380
  if (project.hasReactCompiler) capabilities.add("react-compiler");
37930
38381
  if (Boolean(project.hasTanStackQuery) || Boolean(project.tanstackQueryVersion)) capabilities.add("tanstack-query");
37931
- if (project.mobxVersion) capabilities.add("mobx");
37932
38382
  if (project.styledComponentsVersion) {
37933
38383
  capabilities.add("styled-components");
37934
38384
  const styledComponentsMajor = getLowestDependencyMajor(project.styledComponentsVersion);
37935
38385
  if (styledComponentsMajor !== null && styledComponentsMajor >= 6) capabilities.add("styled-components:6");
37936
38386
  }
37937
38387
  if (project.hasI18nLibrary) capabilities.add("i18n");
38388
+ if (project.valtioVersion !== null) capabilities.add("valtio");
38389
+ addVersionCapabilityLadder(capabilities, "valtio", project.valtioMajorVersion, 1, 10);
38390
+ if (project.hasRemotion) {
38391
+ capabilities.add("remotion");
38392
+ addVersionCapabilityLadder(capabilities, "remotion", project.remotionMajorVersion ?? null, 4, 30);
38393
+ }
38394
+ if (project.hasThree || project.hasReactThreeFiber) capabilities.add("three");
38395
+ addVersionCapabilityLadder(capabilities, "three", project.threeRelease ?? null, 145, 250);
38396
+ if (project.hasReactThreeFiber) {
38397
+ capabilities.add("r3f");
38398
+ addVersionCapabilityLadder(capabilities, "r3f", project.reactThreeFiberMajorVersion ?? null, 3, 10);
38399
+ }
37938
38400
  if (project.hasTypeScript) capabilities.add("typescript");
37939
38401
  if (project.preactVersion !== null) capabilities.add("preact");
37940
- addMajorLadder(capabilities, "preact", project.preactMajorVersion, 10, 20);
38402
+ addVersionCapabilityLadder(capabilities, "preact", project.preactMajorVersion, 10, 20);
37941
38403
  if (project.preactVersion !== null && project.reactVersion === null) capabilities.add("pure-preact");
37942
38404
  return capabilities;
37943
38405
  };
@@ -37949,7 +38411,7 @@ const getCapabilities = (project) => {
37949
38411
  capabilitiesByProject.set(project, capabilities);
37950
38412
  return capabilities;
37951
38413
  };
37952
- const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhen) => {
38414
+ const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhen, includedTags) => {
37953
38415
  if (requires) {
37954
38416
  for (const capability of requires) if (!capabilities.has(capability)) return false;
37955
38417
  }
@@ -37960,20 +38422,29 @@ const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhe
37960
38422
  if (tags) {
37961
38423
  for (const tag of tags) if (ignoredTags.has(tag)) return false;
37962
38424
  }
38425
+ if (includedTags && includedTags.size > 0) {
38426
+ if (!tags?.some((tag) => includedTags.has(tag))) return false;
38427
+ }
37963
38428
  return true;
37964
38429
  };
38430
+ const shouldEnableRuleByDefaultStatus = (options) => options.defaultEnabled !== false || options.hasExplicitOverride === true || options.includeTagDefaults && options.hasIncludedTags;
37965
38431
  const yieldToEventLoop = () => new Promise((resolve) => {
37966
38432
  setImmediate(resolve);
37967
38433
  });
37968
38434
  const createSecurityScanSession = (rootDirectory, options) => {
37969
38435
  const capabilities = options.project ? getCapabilities(options.project) : /* @__PURE__ */ new Set();
37970
38436
  const ignoredTags = options.ignoredTags ?? /* @__PURE__ */ new Set();
38437
+ const includedTags = options.includedTags ?? /* @__PURE__ */ new Set();
37971
38438
  const enabledScanRules = REACT_DOCTOR_RULES.flatMap((entry) => {
37972
38439
  const rule = entry.rule;
37973
38440
  const scan = rule.scan;
37974
38441
  if (typeof scan !== "function") return [];
37975
- if (rule.defaultEnabled === false) return [];
37976
- if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen)) return [];
38442
+ if (!shouldEnableRuleByDefaultStatus({
38443
+ defaultEnabled: rule.defaultEnabled,
38444
+ includeTagDefaults: options.includeTagDefaults === true,
38445
+ hasIncludedTags: includedTags.size > 0
38446
+ })) return [];
38447
+ if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen, includedTags)) return [];
37977
38448
  return [{
37978
38449
  entry,
37979
38450
  scan,
@@ -39959,8 +40430,9 @@ const buildUserPluginRules = (userPlugin, severityControls) => {
39959
40430
  }
39960
40431
  return enabled;
39961
40432
  };
39962
- const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), serverAuthFunctionNames, severityControls, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
39963
- const reactHooksJsPlugin = disableReactHooksJsPlugin || ruleSelection === "sidecar" ? null : resolveReactHooksJsPlugin(project.hasReactCompiler || project.hasReactCompilerLintPlugin === true, customRulesOnly);
40433
+ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), includedTags = /* @__PURE__ */ new Set(), includeTagDefaults = false, serverAuthFunctionNames, severityControls, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
40434
+ const hasIncludedTags = includedTags.size > 0;
40435
+ const reactHooksJsPlugin = disableReactHooksJsPlugin || ruleSelection === "sidecar" || hasIncludedTags ? null : resolveReactHooksJsPlugin(project.hasReactCompiler || project.hasReactCompilerLintPlugin === true, customRulesOnly);
39964
40436
  const reactCompilerRules = reactHooksJsPlugin ? applyRuleSeverityControls(filterRulesToAvailable(REACT_COMPILER_RULES, "react-hooks-js", reactHooksJsPlugin.availableRuleNames), severityControls) : {};
39965
40437
  const jsPlugins = [];
39966
40438
  if (reactHooksJsPlugin) jsPlugins.push(reactHooksJsPlugin.entry);
@@ -39975,9 +40447,14 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
39975
40447
  if (rule.scan !== void 0) continue;
39976
40448
  if (customRulesOnly && registryEntry.originallyExternal) continue;
39977
40449
  if (rule.framework !== "global" && !rule.requires) continue;
39978
- if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen)) continue;
40450
+ if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen, includedTags)) continue;
39979
40451
  const explicitRuleOverride = resolveRuleSeverityOverride({ ruleKey: registryEntry.key }, severityControls);
39980
- if (rule.defaultEnabled === false && explicitRuleOverride === void 0) continue;
40452
+ if (!shouldEnableRuleByDefaultStatus({
40453
+ defaultEnabled: rule.defaultEnabled,
40454
+ includeTagDefaults,
40455
+ hasIncludedTags,
40456
+ hasExplicitOverride: explicitRuleOverride !== void 0
40457
+ })) continue;
39981
40458
  const severity = resolveRuleSeverityOverride({
39982
40459
  ruleKey: registryEntry.key,
39983
40460
  category: rule.category
@@ -39986,7 +40463,7 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
39986
40463
  enabledReactDoctorRules[registryEntry.key] = severity;
39987
40464
  }
39988
40465
  const userPluginRules = {};
39989
- if (ruleSelection !== "sidecar") for (const userPlugin of userPlugins) {
40466
+ if (ruleSelection !== "sidecar" && !hasIncludedTags) for (const userPlugin of userPlugins) {
39990
40467
  Object.assign(userPluginRules, buildUserPluginRules(userPlugin, severityControls));
39991
40468
  jsPlugins.push(userPlugin.entry);
39992
40469
  }
@@ -41731,7 +42208,7 @@ const reactHooksJsPluginDropNote = (error) => {
41731
42208
  * 6. always restore disable directives + clean up the temp dir
41732
42209
  */
41733
42210
  const runOxlint = async (options) => {
41734
- 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;
42211
+ 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;
41735
42212
  const serverAuthFunctionNames = Array.isArray(userConfig?.serverAuthFunctionNames) ? userConfig.serverAuthFunctionNames.filter((entry) => typeof entry === "string" && entry.length > 0) : void 0;
41736
42213
  const severityControls = buildRuleSeverityControls(userConfig);
41737
42214
  validateRuleRegistration();
@@ -41745,13 +42222,15 @@ const runOxlint = async (options) => {
41745
42222
  }
41746
42223
  const pluginPath = resolvePluginPath();
41747
42224
  const extendsPaths = (adoptExistingLintConfig && !customRulesOnly ? detectUserLintConfigPaths(rootDirectory) : []).filter(canOxlintExtendConfig);
41748
- const userPlugins = resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
42225
+ const userPlugins = includedTags.size > 0 ? [] : resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
41749
42226
  const buildConfig = (overrides) => createOxlintConfig({
41750
42227
  pluginPath,
41751
42228
  project,
41752
42229
  customRulesOnly,
41753
42230
  extendsPaths: overrides.extendsPaths,
41754
42231
  ignoredTags,
42232
+ includedTags,
42233
+ includeTagDefaults,
41755
42234
  serverAuthFunctionNames,
41756
42235
  severityControls,
41757
42236
  userPlugins,
@@ -42140,6 +42619,8 @@ var Linter = class Linter extends Service()("react-doctor/Linter") {
42140
42619
  respectInlineDisables: input.respectInlineDisables,
42141
42620
  adoptExistingLintConfig: input.adoptExistingLintConfig,
42142
42621
  ignoredTags: input.ignoredTags,
42622
+ includedTags: input.includedTags,
42623
+ includeTagDefaults: input.includeTagDefaults,
42143
42624
  userConfig: input.userConfig ?? null,
42144
42625
  configSourceDirectory: input.configSourceDirectory,
42145
42626
  onPartialFailure: (reason) => {
@@ -42988,7 +43469,9 @@ const runInspect = (input, hooks = {}) => gen(function* () {
42988
43469
  const securityScanFailedRef = yield* make$13(false);
42989
43470
  const securityScanFiber = yield* forkChild(runCollect(applyPerElementPipeline(isDiffMode ? empty$4 : unwrap(tryPromise(() => checkSecurityScanCooperative(scanDirectory, {
42990
43471
  project,
42991
- ignoredTags: input.ignoredTags
43472
+ ignoredTags: input.ignoredTags,
43473
+ includedTags: input.includedTags,
43474
+ includeTagDefaults: input.includeTagDefaults
42992
43475
  })).pipe(map$3((diagnostics) => fromIterable$1(diagnostics)), catch_$1(() => set(securityScanFailedRef, true).pipe(as(empty$4))))))).pipe(withSpan("SecurityScan.run")));
42993
43476
  const shouldRunSupplyChain = !isDiffMode || (input.supplyChainManifestChanged ?? false);
42994
43477
  const supplyChainOverlapTimeout = yield* SupplyChainOverlapTimeoutMs;
@@ -43079,6 +43562,8 @@ const runInspect = (input, hooks = {}) => gen(function* () {
43079
43562
  respectInlineDisables: input.respectInlineDisables,
43080
43563
  adoptExistingLintConfig: input.adoptExistingLintConfig,
43081
43564
  ignoredTags: input.ignoredTags,
43565
+ includedTags: input.includedTags,
43566
+ includeTagDefaults: input.includeTagDefaults,
43082
43567
  userConfig: resolvedConfig.config ?? void 0,
43083
43568
  configSourceDirectory: resolvedConfig.configSourceDirectory ?? void 0,
43084
43569
  onFileProgress: (scannedFileCount, totalFileCount) => {
@@ -43939,4 +44424,4 @@ const toJsonReport = (result, options) => buildJsonReport({
43939
44424
  export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
43940
44425
 
43941
44426
  //# sourceMappingURL=index.js.map
43942
- //# debugId=d6253eef-925f-579a-9b36-3bbf313293f5
44427
+ //# debugId=c65f1825-0401-518f-840a-c33df84ebafc