react-doctor 0.8.1-dev.3598138 → 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]="ba0e3885-0c68-5322-b382-578d3d89d5c5")}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;
@@ -33375,10 +33427,10 @@ const FALLBACK_TSCONFIG_FILENAMES = ["tsconfig.app.json", "tsconfig.build.json"]
33375
33427
  const FRAMEWORK_PACKAGES = {
33376
33428
  next: "nextjs",
33377
33429
  "@tanstack/react-start": "tanstack-start",
33378
- vite: "vite",
33379
- "react-scripts": "cra",
33380
33430
  "@remix-run/react": "remix",
33381
33431
  gatsby: "gatsby",
33432
+ vite: "vite",
33433
+ "react-scripts": "cra",
33382
33434
  expo: "expo",
33383
33435
  "react-native": "react-native"
33384
33436
  };
@@ -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,24 +34010,15 @@ const getPreactVersion = (packageJson) => {
33905
34010
  ...packageJson.devDependencies
33906
34011
  }.preact ?? null;
33907
34012
  };
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 }) => {
34013
+ const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, sourceDirectory = rootDirectory, sourcePackageJson = rootPackageJson, version }) => {
33922
34014
  if (version === null || !isCatalogReference(version)) return version;
33923
34015
  const catalogName = extractCatalogName(version);
33924
- const resolvedLocalVersion = resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, catalogName);
33925
- 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
+ }
33926
34022
  const monorepoRoot = findMonorepoRoot(rootDirectory);
33927
34023
  if (!monorepoRoot) return version;
33928
34024
  const monorepoPackageJsonPath = Path.join(monorepoRoot, "package.json");
@@ -34120,7 +34216,84 @@ const listWorkspacePackages = (rootDirectory) => {
34120
34216
  }
34121
34217
  return packages;
34122
34218
  };
34219
+ const PREFERRED_DEPENDENCY_SECTIONS = [
34220
+ "dependencies",
34221
+ "peerDependencies",
34222
+ "devDependencies"
34223
+ ];
34224
+ const getPreferredDependencyVersion = ({ packageJson, packageNames }) => {
34225
+ for (const packageName of packageNames) {
34226
+ const declaration = getDependencyDeclaration({
34227
+ packageJson,
34228
+ packageName,
34229
+ sections: PREFERRED_DEPENDENCY_SECTIONS
34230
+ });
34231
+ if (declaration.version !== null) return declaration.version;
34232
+ }
34233
+ return null;
34234
+ };
34235
+ const TANSTACK_REACT_QUERY_PACKAGES = ["@tanstack/react-query", "react-query"];
34236
+ const getTanStackQueryVersion = (packageJson) => {
34237
+ return getPreferredDependencyVersion({
34238
+ packageJson,
34239
+ packageNames: TANSTACK_REACT_QUERY_PACKAGES
34240
+ });
34241
+ };
34242
+ const STYLED_COMPONENTS_PACKAGES = ["styled-components"];
34243
+ const getStyledComponentsVersion = (packageJson) => {
34244
+ return getPreferredDependencyVersion({
34245
+ packageJson,
34246
+ packageNames: STYLED_COMPONENTS_PACKAGES
34247
+ });
34248
+ };
34249
+ const I18N_PACKAGES = [
34250
+ "i18next",
34251
+ "react-i18next",
34252
+ "next-i18next",
34253
+ "react-intl",
34254
+ "next-intl",
34255
+ "use-intl",
34256
+ "@formatjs/intl",
34257
+ "@lingui/core",
34258
+ "@lingui/react",
34259
+ "typesafe-i18n",
34260
+ "@tolgee/react",
34261
+ "react-intl-universal"
34262
+ ];
34263
+ const hasI18nDependency = (packageJson) => {
34264
+ const allDependencies = {
34265
+ ...packageJson.peerDependencies,
34266
+ ...packageJson.dependencies,
34267
+ ...packageJson.devDependencies,
34268
+ ...packageJson.optionalDependencies
34269
+ };
34270
+ return I18N_PACKAGES.some((packageName) => allDependencies[packageName] !== void 0);
34271
+ };
34123
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
+ ];
34124
34297
  const SHOPIFY_FLASH_LIST_PACKAGE_NAME = "@shopify/flash-list";
34125
34298
  const resolveWorkspaceDependencyVersion = ({ concreteVersion, packageName, rootDirectory, rootPackageJson, sections, workspaceDirectory, workspacePackageJson }) => {
34126
34299
  const dependencyDeclaration = getDependencyDeclaration({
@@ -34131,7 +34304,7 @@ const resolveWorkspaceDependencyVersion = ({ concreteVersion, packageName, rootD
34131
34304
  if (!dependencyDeclaration.hasDeclaration) return null;
34132
34305
  return concreteVersion ?? resolveCatalogVersion(workspacePackageJson, packageName, workspaceDirectory, dependencyDeclaration.catalogReference) ?? resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, dependencyDeclaration.catalogReference);
34133
34306
  };
34134
- const shouldReplaceReactVersion = (currentVersion, nextVersion) => {
34307
+ const shouldReplaceWithLowerMajor = (currentVersion, nextVersion) => {
34135
34308
  if (!currentVersion) return true;
34136
34309
  const currentMajor = parseReactMajor(currentVersion);
34137
34310
  const nextMajor = parseReactMajor(nextVersion);
@@ -34139,7 +34312,71 @@ const shouldReplaceReactVersion = (currentVersion, nextVersion) => {
34139
34312
  if (nextMajor === null) return false;
34140
34313
  return nextMajor < currentMajor;
34141
34314
  };
34142
- const evaluateManifestFacts = (facts, packageJson, directory) => {
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
+ };
34326
+ const shouldReplaceStyledComponentsVersion = (currentVersion, nextVersion) => {
34327
+ if (!currentVersion) return true;
34328
+ const currentMajor = getLowestDependencyMajor(currentVersion);
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);
34349
+ if (currentMajor === null) return false;
34350
+ if (nextMajor === null) return true;
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;
34369
+ };
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) => {
34143
34380
  if (facts.expo.version === null) {
34144
34381
  const spec = getDependencySpec(packageJson, "expo");
34145
34382
  if (spec !== null) facts.expo = {
@@ -34154,6 +34391,23 @@ const evaluateManifestFacts = (facts, packageJson, directory) => {
34154
34391
  sourceDirectory: directory
34155
34392
  };
34156
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;
34157
34411
  if (facts.shopifyFlashList.version === null) {
34158
34412
  const spec = getDependencySpec(packageJson, SHOPIFY_FLASH_LIST_PACKAGE_NAME);
34159
34413
  if (spec !== null) facts.shopifyFlashList = {
@@ -34161,13 +34415,113 @@ const evaluateManifestFacts = (facts, packageJson, directory) => {
34161
34415
  sourceDirectory: directory
34162
34416
  };
34163
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
+ }
34164
34448
  if (facts.reanimatedVersion === null) {
34165
34449
  const spec = getDependencySpec(packageJson, REANIMATED_DEPENDENCY_NAME);
34166
34450
  if (spec !== null) facts.reanimatedVersion = spec;
34167
34451
  }
34452
+ if (facts.valtioVersion === null) {
34453
+ const spec = getDependencySpec(packageJson, "valtio");
34454
+ if (spec !== null) facts.valtioVersion = spec;
34455
+ }
34456
+ facts.tanstackQueryVersion ??= getTanStackQueryVersion(packageJson);
34457
+ const styledComponentsVersion = resolveCatalogBackedDependencyVersion({
34458
+ rootDirectory: directory,
34459
+ rootPackageJson: packageJson,
34460
+ packageName: "styled-components",
34461
+ version: getStyledComponentsVersion(packageJson)
34462
+ });
34463
+ if (styledComponentsVersion && shouldReplaceStyledComponentsVersion(facts.styledComponentsVersion, styledComponentsVersion)) facts.styledComponentsVersion = styledComponentsVersion;
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
+ }
34168
34502
  facts.hasReactNativeAwarePackage = facts.hasReactNativeAwarePackage || isPackageJsonReactNativeAware(packageJson);
34169
34503
  facts.hasReanimatedAwarePackage = facts.hasReanimatedAwarePackage || isPackageJsonReanimatedAware(packageJson);
34170
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);
34171
34525
  };
34172
34526
  const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGroup }) => {
34173
34527
  const facts = {
@@ -34183,25 +34537,60 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34183
34537
  version: null,
34184
34538
  sourceDirectory: null
34185
34539
  },
34540
+ reactRouter: {
34541
+ version: null,
34542
+ sourceDirectory: null,
34543
+ packageName: null
34544
+ },
34186
34545
  shopifyFlashList: {
34187
34546
  version: null,
34188
34547
  sourceDirectory: null
34189
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
+ },
34564
+ tanstackQueryVersion: null,
34565
+ styledComponentsVersion: null,
34566
+ hasI18nLibrary: false,
34190
34567
  hasReactNativeAwarePackage: false,
34191
34568
  hasReanimatedAwarePackage: false,
34192
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,
34193
34582
  reanimatedVersion: null
34194
34583
  };
34195
- evaluateManifestFacts(facts, rootPackageJson, rootDirectory);
34584
+ evaluateManifestFacts(facts, rootPackageJson, rootDirectory, rootDirectory, rootPackageJson);
34196
34585
  let isReactGroupSettled = !collectReactGroup;
34197
34586
  const visitedDirectories = /* @__PURE__ */ new Set();
34198
34587
  for (const pattern of getWorkspacePatterns(rootDirectory, rootPackageJson)) {
34199
- const directories = [...resolveWorkspaceDirectories(rootDirectory, pattern)].sort();
34588
+ const directories = resolveWorkspaceDirectories(rootDirectory, pattern).toSorted();
34200
34589
  for (const workspaceDirectory of directories) {
34201
34590
  if (visitedDirectories.has(workspaceDirectory)) continue;
34202
34591
  visitedDirectories.add(workspaceDirectory);
34203
34592
  const workspacePackageJson = readPackageJson(Path.join(workspaceDirectory, "package.json"));
34204
- evaluateManifestFacts(facts, workspacePackageJson, workspaceDirectory);
34593
+ evaluateManifestFacts(facts, workspacePackageJson, workspaceDirectory, rootDirectory, rootPackageJson);
34205
34594
  const info = extractDependencyInfo(workspacePackageJson);
34206
34595
  if (info.framework !== "unknown" && frameworkMergeRank(info.framework) < frameworkMergeRank(facts.framework)) facts.framework = info.framework;
34207
34596
  if (isReactGroupSettled) continue;
@@ -34232,7 +34621,7 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34232
34621
  workspaceDirectory,
34233
34622
  workspacePackageJson
34234
34623
  });
34235
- if (reactVersion && shouldReplaceReactVersion(facts.reactVersion, reactVersion)) facts.reactVersion = reactVersion;
34624
+ if (reactVersion && shouldReplaceWithLowerMajor(facts.reactVersion, reactVersion)) facts.reactVersion = reactVersion;
34236
34625
  if (tailwindVersion && !facts.tailwindVersion) facts.tailwindVersion = tailwindVersion;
34237
34626
  if (zodVersion && !facts.zodVersion) facts.zodVersion = zodVersion;
34238
34627
  const settledReactMajor = parseReactMajor(facts.reactVersion);
@@ -34425,17 +34814,43 @@ const discoverProjectWithoutPackageJson = (directory) => {
34425
34814
  tailwindVersion: null,
34426
34815
  zodVersion: null,
34427
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,
34428
34827
  framework: "unknown",
34429
34828
  hasTypeScript: hasOwnTsConfig,
34430
34829
  hasReactCompiler: false,
34431
34830
  hasReactCompilerLintPlugin: false,
34432
34831
  hasTanStackQuery: false,
34832
+ valtioVersion: null,
34833
+ valtioMajorVersion: null,
34834
+ hasRemotion: false,
34835
+ remotionVersion: null,
34836
+ remotionMajorVersion: null,
34837
+ hasI18nLibrary: false,
34838
+ tanstackQueryVersion: null,
34839
+ styledComponentsVersion: null,
34840
+ hasThree: false,
34841
+ threeVersion: null,
34842
+ threeRelease: null,
34843
+ hasReactThreeFiber: false,
34844
+ reactThreeFiberVersion: null,
34845
+ reactThreeFiberMajorVersion: null,
34433
34846
  hasSsrDependency: false,
34434
34847
  preactVersion: null,
34435
34848
  preactMajorVersion: null,
34436
34849
  hasReactNativeWorkspace: false,
34437
34850
  nextjsVersion: null,
34438
34851
  nextjsMajorVersion: null,
34852
+ reactRouterVersion: null,
34853
+ hasReactRouterFramework: false,
34439
34854
  expoVersion: null,
34440
34855
  shopifyFlashListVersion: null,
34441
34856
  shopifyFlashListMajorVersion: null,
@@ -34528,6 +34943,12 @@ const discoverProject = (directory) => {
34528
34943
  packageName: SHOPIFY_FLASH_LIST_PACKAGE_NAME,
34529
34944
  version: workspaceFacts.shopifyFlashList.version
34530
34945
  }) : null;
34946
+ const zustandVersion = resolveCatalogBackedDependencyVersion({
34947
+ rootDirectory: directory,
34948
+ rootPackageJson: packageJson,
34949
+ packageName: "zustand",
34950
+ version: workspaceFacts.zustand.version
34951
+ });
34531
34952
  const hasReanimated = hasReactNativeWorkspace && workspaceFacts.hasReanimatedAwarePackage;
34532
34953
  const reanimatedVersion = hasReanimated ? workspaceFacts.reanimatedVersion : null;
34533
34954
  const nextjsVersion = framework === "nextjs" ? resolveCatalogBackedDependencyVersion({
@@ -34536,7 +34957,39 @@ const discoverProject = (directory) => {
34536
34957
  packageName: "next",
34537
34958
  version: workspaceFacts.next.version
34538
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
+ });
34539
34978
  const preactVersion = getPreactVersion(packageJson);
34979
+ const remotionVersion = workspaceFacts.remotionVersion;
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
+ });
34540
34993
  const isPreES2023Target = hasTypeScript && detectPreES2023Target(directory);
34541
34994
  const projectInfo = {
34542
34995
  rootDirectory: directory,
@@ -34546,17 +34999,43 @@ const discoverProject = (directory) => {
34546
34999
  tailwindVersion,
34547
35000
  zodVersion,
34548
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),
34549
35012
  framework,
34550
35013
  hasTypeScript,
34551
35014
  hasReactCompiler: detectReactCompiler(directory, packageJson),
34552
35015
  hasReactCompilerLintPlugin: detectReactCompilerLintPlugin(directory, packageJson),
34553
- hasTanStackQuery: hasTanStackQuery(packageJson),
35016
+ hasTanStackQuery: tanstackQueryVersion !== null,
35017
+ hasI18nLibrary: workspaceFacts.hasI18nLibrary,
35018
+ tanstackQueryVersion,
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),
34554
35031
  hasSsrDependency: workspaceFacts.hasSsrDependency,
34555
35032
  preactVersion,
34556
35033
  preactMajorVersion: parseReactMajor(preactVersion),
34557
35034
  hasReactNativeWorkspace,
34558
35035
  nextjsVersion,
34559
35036
  nextjsMajorVersion: nextjsVersion === null ? null : getLowestDependencyMajor(nextjsVersion),
35037
+ reactRouterVersion,
35038
+ hasReactRouterFramework: workspaceFacts.hasReactRouterFramework,
34560
35039
  expoVersion,
34561
35040
  shopifyFlashListVersion,
34562
35041
  shopifyFlashListMajorVersion: shopifyFlashListVersion === null ? null : getLowestDependencyMajor(shopifyFlashListVersion),
@@ -37825,10 +38304,10 @@ const SSR_FRAMEWORKS = new Set([
37825
38304
  "gatsby",
37826
38305
  "tanstack-start"
37827
38306
  ]);
37828
- const addMajorLadder = (capabilities, name, major, earliest, latest) => {
37829
- if (major === null) return;
37830
- const cappedMajor = Math.min(major, latest);
37831
- 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}`);
37832
38311
  };
37833
38312
  const buildCapabilities = (project) => {
37834
38313
  const capabilities = /* @__PURE__ */ new Set();
@@ -37841,24 +38320,86 @@ const buildCapabilities = (project) => {
37841
38320
  if (CLIENT_ONLY_FRAMEWORKS.has(project.framework)) capabilities.add("client-only");
37842
38321
  if (project.isStaticExport) capabilities.add("nextjs:static-export");
37843
38322
  if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
37844
- addMajorLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
38323
+ if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 16) capabilities.add("nextjs:16");
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);
37845
38334
  if (project.reactMajorVersion !== null && project.reactMajorVersion >= 19 && isMajorMinorAtLeast(parseReactMajorMinor(project.reactVersion), {
37846
38335
  major: 19,
37847
38336
  minor: 2
37848
38337
  })) capabilities.add("react:19.2");
37849
- if (project.tailwindVersion !== null) capabilities.add("tailwind");
37850
- if (project.tailwindVersion !== null && isMajorMinorAtLeast(parseTailwindMajorMinor(project.tailwindVersion), {
37851
- major: 3,
37852
- minor: 4
37853
- })) 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
+ }
37854
38350
  if (project.zodVersion !== null) capabilities.add("zod");
37855
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);
37856
38379
  if (project.isPreES2023Target) capabilities.add("pre-es2023");
37857
38380
  if (project.hasReactCompiler) capabilities.add("react-compiler");
37858
- if (project.hasTanStackQuery) capabilities.add("tanstack-query");
38381
+ if (Boolean(project.hasTanStackQuery) || Boolean(project.tanstackQueryVersion)) capabilities.add("tanstack-query");
38382
+ if (project.styledComponentsVersion) {
38383
+ capabilities.add("styled-components");
38384
+ const styledComponentsMajor = getLowestDependencyMajor(project.styledComponentsVersion);
38385
+ if (styledComponentsMajor !== null && styledComponentsMajor >= 6) capabilities.add("styled-components:6");
38386
+ }
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
+ }
37859
38400
  if (project.hasTypeScript) capabilities.add("typescript");
37860
38401
  if (project.preactVersion !== null) capabilities.add("preact");
37861
- addMajorLadder(capabilities, "preact", project.preactMajorVersion, 10, 20);
38402
+ addVersionCapabilityLadder(capabilities, "preact", project.preactMajorVersion, 10, 20);
37862
38403
  if (project.preactVersion !== null && project.reactVersion === null) capabilities.add("pure-preact");
37863
38404
  return capabilities;
37864
38405
  };
@@ -37870,7 +38411,7 @@ const getCapabilities = (project) => {
37870
38411
  capabilitiesByProject.set(project, capabilities);
37871
38412
  return capabilities;
37872
38413
  };
37873
- const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhen) => {
38414
+ const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhen, includedTags) => {
37874
38415
  if (requires) {
37875
38416
  for (const capability of requires) if (!capabilities.has(capability)) return false;
37876
38417
  }
@@ -37881,20 +38422,29 @@ const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhe
37881
38422
  if (tags) {
37882
38423
  for (const tag of tags) if (ignoredTags.has(tag)) return false;
37883
38424
  }
38425
+ if (includedTags && includedTags.size > 0) {
38426
+ if (!tags?.some((tag) => includedTags.has(tag))) return false;
38427
+ }
37884
38428
  return true;
37885
38429
  };
38430
+ const shouldEnableRuleByDefaultStatus = (options) => options.defaultEnabled !== false || options.hasExplicitOverride === true || options.includeTagDefaults && options.hasIncludedTags;
37886
38431
  const yieldToEventLoop = () => new Promise((resolve) => {
37887
38432
  setImmediate(resolve);
37888
38433
  });
37889
38434
  const createSecurityScanSession = (rootDirectory, options) => {
37890
38435
  const capabilities = options.project ? getCapabilities(options.project) : /* @__PURE__ */ new Set();
37891
38436
  const ignoredTags = options.ignoredTags ?? /* @__PURE__ */ new Set();
38437
+ const includedTags = options.includedTags ?? /* @__PURE__ */ new Set();
37892
38438
  const enabledScanRules = REACT_DOCTOR_RULES.flatMap((entry) => {
37893
38439
  const rule = entry.rule;
37894
38440
  const scan = rule.scan;
37895
38441
  if (typeof scan !== "function") return [];
37896
- if (rule.defaultEnabled === false) return [];
37897
- 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 [];
37898
38448
  return [{
37899
38449
  entry,
37900
38450
  scan,
@@ -39880,8 +40430,9 @@ const buildUserPluginRules = (userPlugin, severityControls) => {
39880
40430
  }
39881
40431
  return enabled;
39882
40432
  };
39883
- const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), serverAuthFunctionNames, severityControls, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
39884
- 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);
39885
40436
  const reactCompilerRules = reactHooksJsPlugin ? applyRuleSeverityControls(filterRulesToAvailable(REACT_COMPILER_RULES, "react-hooks-js", reactHooksJsPlugin.availableRuleNames), severityControls) : {};
39886
40437
  const jsPlugins = [];
39887
40438
  if (reactHooksJsPlugin) jsPlugins.push(reactHooksJsPlugin.entry);
@@ -39896,9 +40447,14 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
39896
40447
  if (rule.scan !== void 0) continue;
39897
40448
  if (customRulesOnly && registryEntry.originallyExternal) continue;
39898
40449
  if (rule.framework !== "global" && !rule.requires) continue;
39899
- if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen)) continue;
40450
+ if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen, includedTags)) continue;
39900
40451
  const explicitRuleOverride = resolveRuleSeverityOverride({ ruleKey: registryEntry.key }, severityControls);
39901
- 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;
39902
40458
  const severity = resolveRuleSeverityOverride({
39903
40459
  ruleKey: registryEntry.key,
39904
40460
  category: rule.category
@@ -39907,7 +40463,7 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
39907
40463
  enabledReactDoctorRules[registryEntry.key] = severity;
39908
40464
  }
39909
40465
  const userPluginRules = {};
39910
- if (ruleSelection !== "sidecar") for (const userPlugin of userPlugins) {
40466
+ if (ruleSelection !== "sidecar" && !hasIncludedTags) for (const userPlugin of userPlugins) {
39911
40467
  Object.assign(userPluginRules, buildUserPluginRules(userPlugin, severityControls));
39912
40468
  jsPlugins.push(userPlugin.entry);
39913
40469
  }
@@ -40124,6 +40680,19 @@ const createSidecarLintCache = (cacheDirectory, rulesetHash) => {
40124
40680
  }
40125
40681
  };
40126
40682
  };
40683
+ const fingerprintCacheByFilePath = /* @__PURE__ */ new Map();
40684
+ const fingerprintFileContents = (filePath, fingerprintLength) => {
40685
+ const fileStats = NFS.statSync(filePath, { bigint: true });
40686
+ const cachedFingerprint = fingerprintCacheByFilePath.get(filePath);
40687
+ if (cachedFingerprint?.modifiedTimeNanoseconds === fileStats.mtimeNs && cachedFingerprint.sizeBytes === fileStats.size) return cachedFingerprint.fingerprint;
40688
+ const fingerprint = crypto.createHash("sha256").update(NFS.readFileSync(filePath)).digest("hex").slice(0, fingerprintLength);
40689
+ fingerprintCacheByFilePath.set(filePath, {
40690
+ fingerprint,
40691
+ modifiedTimeNanoseconds: fileStats.mtimeNs,
40692
+ sizeBytes: fileStats.size
40693
+ });
40694
+ return fingerprint;
40695
+ };
40127
40696
  const bundledRequire = createRequire(import.meta.url);
40128
40697
  const childNodeVersionByBinaryPath = /* @__PURE__ */ new Map();
40129
40698
  const resolveChildNodeVersion = (nodeBinaryPath) => {
@@ -40147,6 +40716,13 @@ const TOOLCHAIN_PACKAGE_SPECIFIERS = [
40147
40716
  "oxlint-plugin-react-doctor/package.json",
40148
40717
  "eslint-plugin-react-hooks/package.json"
40149
40718
  ];
40719
+ const resolvePluginFingerprint = () => {
40720
+ try {
40721
+ return fingerprintFileContents(bundledRequire.resolve("oxlint-plugin-react-doctor"), 16);
40722
+ } catch {
40723
+ return "unresolved";
40724
+ }
40725
+ };
40150
40726
  const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
40151
40727
  const versions = [`node=${resolveChildNodeVersion(nodeBinaryPath)}`];
40152
40728
  for (const specifier of TOOLCHAIN_PACKAGE_SPECIFIERS) try {
@@ -40156,6 +40732,7 @@ const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
40156
40732
  } catch {
40157
40733
  versions.push(`${specifier}=missing`);
40158
40734
  }
40735
+ versions.push(`oxlint-plugin-react-doctor#fingerprint=${resolvePluginFingerprint()}`);
40159
40736
  return versions;
40160
40737
  };
40161
40738
  const esmRequire = createRequire(import.meta.url);
@@ -41631,7 +42208,7 @@ const reactHooksJsPluginDropNote = (error) => {
41631
42208
  * 6. always restore disable directives + clean up the temp dir
41632
42209
  */
41633
42210
  const runOxlint = async (options) => {
41634
- 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;
41635
42212
  const serverAuthFunctionNames = Array.isArray(userConfig?.serverAuthFunctionNames) ? userConfig.serverAuthFunctionNames.filter((entry) => typeof entry === "string" && entry.length > 0) : void 0;
41636
42213
  const severityControls = buildRuleSeverityControls(userConfig);
41637
42214
  validateRuleRegistration();
@@ -41645,13 +42222,15 @@ const runOxlint = async (options) => {
41645
42222
  }
41646
42223
  const pluginPath = resolvePluginPath();
41647
42224
  const extendsPaths = (adoptExistingLintConfig && !customRulesOnly ? detectUserLintConfigPaths(rootDirectory) : []).filter(canOxlintExtendConfig);
41648
- const userPlugins = resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
42225
+ const userPlugins = includedTags.size > 0 ? [] : resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
41649
42226
  const buildConfig = (overrides) => createOxlintConfig({
41650
42227
  pluginPath,
41651
42228
  project,
41652
42229
  customRulesOnly,
41653
42230
  extendsPaths: overrides.extendsPaths,
41654
42231
  ignoredTags,
42232
+ includedTags,
42233
+ includeTagDefaults,
41655
42234
  serverAuthFunctionNames,
41656
42235
  severityControls,
41657
42236
  userPlugins,
@@ -42040,6 +42619,8 @@ var Linter = class Linter extends Service()("react-doctor/Linter") {
42040
42619
  respectInlineDisables: input.respectInlineDisables,
42041
42620
  adoptExistingLintConfig: input.adoptExistingLintConfig,
42042
42621
  ignoredTags: input.ignoredTags,
42622
+ includedTags: input.includedTags,
42623
+ includeTagDefaults: input.includeTagDefaults,
42043
42624
  userConfig: input.userConfig ?? null,
42044
42625
  configSourceDirectory: input.configSourceDirectory,
42045
42626
  onPartialFailure: (reason) => {
@@ -42888,7 +43469,9 @@ const runInspect = (input, hooks = {}) => gen(function* () {
42888
43469
  const securityScanFailedRef = yield* make$13(false);
42889
43470
  const securityScanFiber = yield* forkChild(runCollect(applyPerElementPipeline(isDiffMode ? empty$4 : unwrap(tryPromise(() => checkSecurityScanCooperative(scanDirectory, {
42890
43471
  project,
42891
- ignoredTags: input.ignoredTags
43472
+ ignoredTags: input.ignoredTags,
43473
+ includedTags: input.includedTags,
43474
+ includeTagDefaults: input.includeTagDefaults
42892
43475
  })).pipe(map$3((diagnostics) => fromIterable$1(diagnostics)), catch_$1(() => set(securityScanFailedRef, true).pipe(as(empty$4))))))).pipe(withSpan("SecurityScan.run")));
42893
43476
  const shouldRunSupplyChain = !isDiffMode || (input.supplyChainManifestChanged ?? false);
42894
43477
  const supplyChainOverlapTimeout = yield* SupplyChainOverlapTimeoutMs;
@@ -42979,6 +43562,8 @@ const runInspect = (input, hooks = {}) => gen(function* () {
42979
43562
  respectInlineDisables: input.respectInlineDisables,
42980
43563
  adoptExistingLintConfig: input.adoptExistingLintConfig,
42981
43564
  ignoredTags: input.ignoredTags,
43565
+ includedTags: input.includedTags,
43566
+ includeTagDefaults: input.includeTagDefaults,
42982
43567
  userConfig: resolvedConfig.config ?? void 0,
42983
43568
  configSourceDirectory: resolvedConfig.configSourceDirectory ?? void 0,
42984
43569
  onFileProgress: (scannedFileCount, totalFileCount) => {
@@ -43839,4 +44424,4 @@ const toJsonReport = (result, options) => buildJsonReport({
43839
44424
  export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
43840
44425
 
43841
44426
  //# sourceMappingURL=index.js.map
43842
- //# debugId=ba0e3885-0c68-5322-b382-578d3d89d5c5
44427
+ //# debugId=c65f1825-0401-518f-840a-c33df84ebafc