react-doctor 0.8.1-dev.5b468f8 → 0.8.1-dev.6fcd9c9

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]="d6dc69de-43c3-570a-8cc4-be7d4a3605ac")}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]="6aa1c6e1-8fcc-50d4-a076-3e864425bdc5")}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,6 +32854,44 @@ 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
+ };
32857
32895
  const SOURCE_FILE_PATTERN = /\.(tsx?|jsx?|mts|mjs)$/;
32858
32896
  const GENERATED_BUNDLE_FILE_PATTERN = /\.(iife|umd|global|min)\.m?js$/i;
32859
32897
  const GENERATED_SOURCE_DIRECTORY_PATTERN = /(?:^|\/)__generated__\//;
@@ -33012,44 +33050,6 @@ const SUPPLY_CHAIN_OVERLAP_TIMEOUT_MS = 9e4;
33012
33050
  const SUPPLY_CHAIN_CACHE_TTL_MS = 864e5;
33013
33051
  const SUPPLY_CHAIN_CACHE_SUBDIR = "supply-chain";
33014
33052
  const SUPPLY_CHAIN_IGNORED_PACKAGES = new Set(["next"]);
33015
- const isErrnoException = (error) => error instanceof Error && "code" in error;
33016
- const IGNORABLE_READDIR_ERROR_CODES = new Set([
33017
- "EACCES",
33018
- "EPERM",
33019
- "ENOENT",
33020
- "ENOTDIR",
33021
- "EINVAL",
33022
- "ELOOP",
33023
- "ENAMETOOLONG"
33024
- ]);
33025
- const isIgnorableReaddirError = (error) => isErrnoException(error) && typeof error.code === "string" && IGNORABLE_READDIR_ERROR_CODES.has(error.code);
33026
- const readDirectoryEntries = (directoryPath) => {
33027
- try {
33028
- return NFS.readdirSync(directoryPath, { withFileTypes: true });
33029
- } catch (error) {
33030
- if (isIgnorableReaddirError(error)) return [];
33031
- throw error;
33032
- }
33033
- };
33034
- const isFile = (filePath) => {
33035
- try {
33036
- return NFS.statSync(filePath).isFile();
33037
- } catch {
33038
- return false;
33039
- }
33040
- };
33041
- const isDirectory = (directoryPath) => {
33042
- try {
33043
- return NFS.statSync(directoryPath).isDirectory();
33044
- } catch {
33045
- return false;
33046
- }
33047
- };
33048
- const isPlainObject = (value) => {
33049
- if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
33050
- const prototype = Object.getPrototypeOf(value);
33051
- return prototype === null || prototype === Object.prototype;
33052
- };
33053
33053
  const lastSourceMappingUrl = (fileContent) => {
33054
33054
  const lastReference = [...fileContent.matchAll(/\/\/# sourceMappingURL=(\S+)/g)].at(-1);
33055
33055
  return lastReference ? lastReference[1] : null;
@@ -33375,10 +33375,10 @@ const FALLBACK_TSCONFIG_FILENAMES = ["tsconfig.app.json", "tsconfig.build.json"]
33375
33375
  const FRAMEWORK_PACKAGES = {
33376
33376
  next: "nextjs",
33377
33377
  "@tanstack/react-start": "tanstack-start",
33378
- "@remix-run/react": "remix",
33379
- gatsby: "gatsby",
33380
33378
  vite: "vite",
33381
33379
  "react-scripts": "cra",
33380
+ "@remix-run/react": "remix",
33381
+ gatsby: "gatsby",
33382
33382
  expo: "expo",
33383
33383
  "react-native": "react-native"
33384
33384
  };
@@ -33402,17 +33402,11 @@ const NEXT_CONFIG_FILENAMES = [
33402
33402
  ];
33403
33403
  const BABEL_CONFIG_FILENAMES = [
33404
33404
  ".babelrc",
33405
- ".babelrc.js",
33406
33405
  ".babelrc.json",
33407
- ".babelrc.cjs",
33408
- ".babelrc.mjs",
33409
- ".babelrc.cts",
33410
33406
  "babel.config.js",
33411
33407
  "babel.config.json",
33412
33408
  "babel.config.cjs",
33413
- "babel.config.mjs",
33414
- "babel.config.ts",
33415
- "babel.config.cts"
33409
+ "babel.config.mjs"
33416
33410
  ];
33417
33411
  const VITE_CONFIG_FILENAMES = [
33418
33412
  "vite.config.js",
@@ -33424,28 +33418,12 @@ const VITE_CONFIG_FILENAMES = [
33424
33418
  "vitest.config.ts",
33425
33419
  "vitest.config.js"
33426
33420
  ];
33427
- const RSBUILD_CONFIG_FILENAMES = [
33428
- "rsbuild.config.ts",
33429
- "rsbuild.config.js",
33430
- "rsbuild.config.mts",
33431
- "rsbuild.config.mjs",
33432
- "rsbuild.config.cts",
33433
- "rsbuild.config.cjs"
33434
- ];
33435
- const RSPACK_CONFIG_FILENAMES = [
33436
- "rspack.config.ts",
33437
- "rspack.config.js",
33438
- "rspack.config.mts",
33439
- "rspack.config.mjs",
33440
- "rspack.config.cts",
33441
- "rspack.config.cjs"
33442
- ];
33443
33421
  const EXPO_APP_CONFIG_FILENAMES = [
33444
33422
  "app.json",
33445
33423
  "app.config.js",
33446
33424
  "app.config.ts"
33447
33425
  ];
33448
- const REACT_COMPILER_PACKAGE_REFERENCE_PATTERN = /babel-plugin-react-compiler|react-compiler-runtime|reactCompilerPreset\s*\(|["']react-compiler["']/;
33426
+ const REACT_COMPILER_PACKAGE_REFERENCE_PATTERN = /babel-plugin-react-compiler|react-compiler-runtime|["']react-compiler["']/;
33449
33427
  const REACT_COMPILER_ENABLED_FLAG_PATTERN = /["']?reactCompiler["']?\s*:\s*(?:true\b|\{)/;
33450
33428
  const STATIC_EXPORT_OUTPUT_PATTERN = /(?:^|[^.\w])["']?output["']?\s*:\s*["']export["']/m;
33451
33429
  const hasCompilerPackage = (packageJson, compilerPackages) => {
@@ -33480,8 +33458,6 @@ const detectReactCompiler = (directory, packageJson) => {
33480
33458
  if (hasCompilerInConfigFiles(directory, NEXT_CONFIG_FILENAMES)) return true;
33481
33459
  if (hasCompilerInConfigFiles(directory, BABEL_CONFIG_FILENAMES)) return true;
33482
33460
  if (hasCompilerInConfigFiles(directory, VITE_CONFIG_FILENAMES)) return true;
33483
- if (hasCompilerInConfigFiles(directory, RSBUILD_CONFIG_FILENAMES)) return true;
33484
- if (hasCompilerInConfigFiles(directory, RSPACK_CONFIG_FILENAMES)) return true;
33485
33461
  if (hasCompilerInConfigFiles(directory, EXPO_APP_CONFIG_FILENAMES)) return true;
33486
33462
  return hasCompilerPackageInAncestors(directory, REACT_COMPILER_TRANSFORM_PACKAGES);
33487
33463
  };
@@ -33490,7 +33466,7 @@ const detectNextjsStaticExport = (directory) => NEXT_CONFIG_FILENAMES.some((file
33490
33466
  const filePath = Path.join(directory, filename);
33491
33467
  return isFile(filePath) && STATIC_EXPORT_OUTPUT_PATTERN.test(NFS.readFileSync(filePath, "utf-8"));
33492
33468
  });
33493
- const UNRESOLVABLE_PROTOCOL_VERSION = /^(?:catalog|file|git|github|https?|link|patch|portal|workspace|npm):/i;
33469
+ const UNRESOLVABLE_PROTOCOL_VERSION = /^(?:file|git|github|https?|link|patch|portal|workspace|npm):/i;
33494
33470
  const DIST_TAG_VERSION = /^[a-z][a-z0-9._-]*$/i;
33495
33471
  const WILDCARD_VERSION = /^[*xX](?:\.[*xX])*$/;
33496
33472
  const NPM_ALIAS_VERSION = /^npm:(?:@[^/]+\/[^@]+|[^@]+)@(.+)$/i;
@@ -33623,16 +33599,6 @@ const getLowestDependencyMajor = (version) => {
33623
33599
  }
33624
33600
  return lowestMajor;
33625
33601
  };
33626
- const getDependencyMajorWithinSupportedRange = (version, latestSupportedMajor) => {
33627
- const normalizedVersion = normalizeDependencyVersion(version);
33628
- if (normalizedVersion === null) return null;
33629
- const validRange = import_semver.validRange(normalizedVersion);
33630
- if (validRange === null) return null;
33631
- const minimumVersion = import_semver.minVersion(validRange);
33632
- if (minimumVersion === null || minimumVersion.major > latestSupportedMajor) return null;
33633
- if (import_semver.intersects(validRange, `>=${latestSupportedMajor + 1}.0.0`)) return null;
33634
- return minimumVersion.major;
33635
- };
33636
33602
  const isConcreteDependencyVersion = (version) => {
33637
33603
  const normalizedVersion = normalizeDependencyVersion(version);
33638
33604
  return normalizedVersion !== null && /\d/.test(normalizedVersion);
@@ -33676,18 +33642,9 @@ const parseReactMajorMinor = (reactVersion) => {
33676
33642
  };
33677
33643
  };
33678
33644
  const parseLowerBoundVersion = (versionSpec) => import_semver.validRange(versionSpec) !== null ? import_semver.minVersion(versionSpec) : import_semver.coerce(versionSpec);
33679
- const parseThreeRelease = (threeVersion) => {
33680
- if (typeof threeVersion !== "string") return null;
33681
- const normalizedVersion = normalizeDependencyVersion(threeVersion);
33682
- if (normalizedVersion === null) return null;
33683
- const lowerBound = parseLowerBoundVersion(normalizedVersion);
33684
- if (lowerBound === null) return null;
33685
- if (lowerBound.major > 0) return Number.MAX_SAFE_INTEGER;
33686
- return lowerBound.minor > 0 ? lowerBound.minor : null;
33687
- };
33688
- const parseDependencyMajorMinor = (dependencyVersion) => {
33689
- if (typeof dependencyVersion !== "string") return null;
33690
- const trimmed = dependencyVersion.trim();
33645
+ const parseTailwindMajorMinor = (tailwindVersion) => {
33646
+ if (typeof tailwindVersion !== "string") return null;
33647
+ const trimmed = tailwindVersion.trim();
33691
33648
  if (trimmed.length === 0) return null;
33692
33649
  const lowerBound = parseLowerBoundVersion(trimmed);
33693
33650
  if (lowerBound === null || lowerBound.major <= 0) return null;
@@ -33696,7 +33653,6 @@ const parseDependencyMajorMinor = (dependencyVersion) => {
33696
33653
  minor: lowerBound.minor
33697
33654
  };
33698
33655
  };
33699
- const parseTailwindMajorMinor = (tailwindVersion) => parseDependencyMajorMinor(tailwindVersion);
33700
33656
  const hasUpperBoundOnlyPeerRange = (range) => {
33701
33657
  if (typeof range !== "string") return false;
33702
33658
  const normalizedRange = normalizeDependencyVersion(range);
@@ -33718,7 +33674,7 @@ const resolveEffectiveReactMajor = (reactVersion, packageJson) => {
33718
33674
  if (peerFloor === null) return hasUpperBoundOnlyPeerRange(peerReactRange) ? null : installedReactMajor;
33719
33675
  return installedReactMajor !== null ? Math.min(installedReactMajor, peerFloor) : peerFloor;
33720
33676
  };
33721
- const isCatalogReference = (version) => typeof version === "string" && version.startsWith("catalog:");
33677
+ const isCatalogReference = (version) => version.startsWith("catalog:");
33722
33678
  const extractCatalogName = (version) => {
33723
33679
  if (!isCatalogReference(version)) return null;
33724
33680
  const name = version.slice(8).trim();
@@ -33868,12 +33824,6 @@ const TAILWIND_ZOD_SECTIONS = [
33868
33824
  "devDependencies",
33869
33825
  "peerDependencies"
33870
33826
  ];
33871
- const DEPENDENCY_SPEC_SECTIONS = [
33872
- "dependencies",
33873
- "devDependencies",
33874
- "peerDependencies",
33875
- "optionalDependencies"
33876
- ];
33877
33827
  const EMPTY_DEPENDENCY_INFO = {
33878
33828
  reactVersion: null,
33879
33829
  tailwindVersion: null,
@@ -33883,7 +33833,7 @@ const EMPTY_DEPENDENCY_INFO = {
33883
33833
  const pickConcreteVersion = (packageJson, packageName, sections) => {
33884
33834
  for (const section of sections) {
33885
33835
  const version = packageJson[section]?.[packageName];
33886
- if (typeof version !== "string") continue;
33836
+ if (version === void 0) continue;
33887
33837
  if (isCatalogReference(version)) return null;
33888
33838
  if (isConcreteDependencyVersion(version)) return version;
33889
33839
  }
@@ -33915,16 +33865,13 @@ const extractDependencyInfo = (packageJson) => {
33915
33865
  };
33916
33866
  };
33917
33867
  const getDependencySpec = (packageJson, packageName) => {
33918
- for (const section of DEPENDENCY_SPEC_SECTIONS) {
33919
- const spec = packageJson[section]?.[packageName];
33920
- if (typeof spec === "string") return spec;
33921
- }
33922
- return null;
33868
+ const spec = packageJson.dependencies?.[packageName] ?? packageJson.devDependencies?.[packageName] ?? packageJson.peerDependencies?.[packageName] ?? packageJson.optionalDependencies?.[packageName];
33869
+ return typeof spec === "string" ? spec : null;
33923
33870
  };
33924
33871
  const getDependencyDeclaration = ({ packageJson, packageName, sections }) => {
33925
33872
  for (const section of sections) {
33926
33873
  const version = packageJson[section]?.[packageName];
33927
- if (typeof version !== "string") continue;
33874
+ if (version === void 0) continue;
33928
33875
  return {
33929
33876
  catalogReference: extractCatalogName(version) ?? null,
33930
33877
  hasDeclaration: true,
@@ -33958,15 +33905,24 @@ const getPreactVersion = (packageJson) => {
33958
33905
  ...packageJson.devDependencies
33959
33906
  }.preact ?? null;
33960
33907
  };
33961
- const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, sourceDirectory = rootDirectory, sourcePackageJson = rootPackageJson, version }) => {
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 }) => {
33962
33922
  if (version === null || !isCatalogReference(version)) return version;
33963
33923
  const catalogName = extractCatalogName(version);
33964
- const resolvedSourceVersion = resolveCatalogVersion(sourcePackageJson, packageName, sourceDirectory, catalogName);
33965
- if (resolvedSourceVersion) return resolvedSourceVersion;
33966
- if (sourceDirectory !== rootDirectory || sourcePackageJson !== rootPackageJson) {
33967
- const resolvedRootVersion = resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, catalogName);
33968
- if (resolvedRootVersion) return resolvedRootVersion;
33969
- }
33924
+ const resolvedLocalVersion = resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, catalogName);
33925
+ if (resolvedLocalVersion) return resolvedLocalVersion;
33970
33926
  const monorepoRoot = findMonorepoRoot(rootDirectory);
33971
33927
  if (!monorepoRoot) return version;
33972
33928
  const monorepoPackageJsonPath = Path.join(monorepoRoot, "package.json");
@@ -34164,75 +34120,11 @@ const listWorkspacePackages = (rootDirectory) => {
34164
34120
  }
34165
34121
  return packages;
34166
34122
  };
34167
- const getPreferredDependencyVersion = ({ packageJson, packageNames }) => {
34168
- const allDependencies = {
34169
- ...packageJson.devDependencies,
34170
- ...packageJson.peerDependencies,
34171
- ...packageJson.dependencies
34172
- };
34173
- for (const packageName of packageNames) {
34174
- const version = allDependencies[packageName];
34175
- if (version !== void 0) return version;
34176
- }
34177
- return null;
34178
- };
34179
- const TANSTACK_REACT_QUERY_PACKAGES = ["@tanstack/react-query", "react-query"];
34180
- const getTanStackQueryVersion = (packageJson) => {
34181
- return getPreferredDependencyVersion({
34182
- packageJson,
34183
- packageNames: TANSTACK_REACT_QUERY_PACKAGES
34184
- });
34185
- };
34186
- const STYLED_COMPONENTS_PACKAGES = ["styled-components"];
34187
- const getStyledComponentsVersion = (packageJson) => {
34188
- return getPreferredDependencyVersion({
34189
- packageJson,
34190
- packageNames: STYLED_COMPONENTS_PACKAGES
34191
- });
34192
- };
34193
- const I18N_PACKAGES = [
34194
- "i18next",
34195
- "react-i18next",
34196
- "next-i18next",
34197
- "react-intl",
34198
- "next-intl",
34199
- "use-intl",
34200
- "@formatjs/intl",
34201
- "@lingui/core",
34202
- "@lingui/react",
34203
- "typesafe-i18n",
34204
- "@tolgee/react",
34205
- "react-intl-universal"
34206
- ];
34207
- const hasI18nDependency = (packageJson) => {
34208
- const allDependencies = {
34209
- ...packageJson.peerDependencies,
34210
- ...packageJson.dependencies,
34211
- ...packageJson.devDependencies,
34212
- ...packageJson.optionalDependencies
34213
- };
34214
- return I18N_PACKAGES.some((packageName) => allDependencies[packageName] !== void 0);
34215
- };
34216
34123
  const REANIMATED_DEPENDENCY_NAME = "react-native-reanimated";
34217
34124
  const MOBX_REACT_PACKAGE_NAME = "mobx-react";
34218
34125
  const MOBX_REACT_LITE_PACKAGE_NAME = "mobx-react-lite";
34219
34126
  const MOBX_STATE_TREE_PACKAGE_NAME = "mobx-state-tree";
34220
34127
  const MOBX_REACT_OBSERVER_PACKAGE_NAME = "mobx-react-observer";
34221
- const REACT_THREE_FIBER_DEPENDENCY_NAMES = ["@react-three/fiber", "react-three-fiber"];
34222
- const REACT_THREE_FIBER_SECTIONS = [
34223
- "dependencies",
34224
- "peerDependencies",
34225
- "optionalDependencies",
34226
- "devDependencies"
34227
- ];
34228
- const THREE_DEPENDENCY_SECTIONS = [
34229
- "dependencies",
34230
- "peerDependencies",
34231
- "optionalDependencies",
34232
- "devDependencies"
34233
- ];
34234
- const REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES = [...REACT_THREE_FIBER_DEPENDENCY_NAMES, "@react-three/drei"];
34235
- const THREE_DEPENDENCY_NAMES = [...REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES, "three"];
34236
34128
  const SHOPIFY_FLASH_LIST_PACKAGE_NAME = "@shopify/flash-list";
34237
34129
  const resolveWorkspaceDependencyVersion = ({ concreteVersion, packageName, rootDirectory, rootPackageJson, sections, workspaceDirectory, workspacePackageJson }) => {
34238
34130
  const dependencyDeclaration = getDependencyDeclaration({
@@ -34243,7 +34135,7 @@ const resolveWorkspaceDependencyVersion = ({ concreteVersion, packageName, rootD
34243
34135
  if (!dependencyDeclaration.hasDeclaration) return null;
34244
34136
  return concreteVersion ?? resolveCatalogVersion(workspacePackageJson, packageName, workspaceDirectory, dependencyDeclaration.catalogReference) ?? resolveCatalogVersion(rootPackageJson, packageName, rootDirectory, dependencyDeclaration.catalogReference);
34245
34137
  };
34246
- const shouldReplaceWithLowerMajor = (currentVersion, nextVersion) => {
34138
+ const shouldReplaceReactVersion = (currentVersion, nextVersion) => {
34247
34139
  if (!currentVersion) return true;
34248
34140
  const currentMajor = parseReactMajor(currentVersion);
34249
34141
  const nextMajor = parseReactMajor(nextVersion);
@@ -34262,50 +34154,6 @@ const shouldReplaceSupportedDependencyFact = (currentFact, nextFact, latestSuppo
34262
34154
  if (nextMajor > latestSupportedMajor) return true;
34263
34155
  return nextMajor < currentMajor;
34264
34156
  };
34265
- const shouldReplaceStyledComponentsVersion = (currentVersion, nextVersion) => {
34266
- if (!currentVersion) return true;
34267
- const currentMajor = getLowestDependencyMajor(currentVersion);
34268
- const nextMajor = getLowestDependencyMajor(nextVersion);
34269
- if (currentMajor === null) return nextMajor !== null && nextMajor < 6;
34270
- if (nextMajor === null) return currentMajor >= 6;
34271
- return nextMajor < currentMajor;
34272
- };
34273
- const selectOldestDependencyVersion = (currentVersion, nextVersion) => {
34274
- if (currentVersion === null || nextVersion === null) return null;
34275
- const current = parseDependencyMajorMinor(currentVersion);
34276
- const next = parseDependencyMajorMinor(nextVersion);
34277
- if (current === null) return currentVersion;
34278
- if (next === null) return nextVersion;
34279
- if (next.major !== current.major) return next.major < current.major ? nextVersion : currentVersion;
34280
- return next.minor < current.minor ? nextVersion : currentVersion;
34281
- };
34282
- const shouldReplaceMobxFact = (currentFact, nextFact) => {
34283
- if (currentFact.sourceDirectory === null) return true;
34284
- if (currentFact.version === null) return false;
34285
- if (nextFact.version === null) return true;
34286
- const currentMajor = getDependencyMajorWithinSupportedRange(currentFact.version, 6);
34287
- const nextMajor = getDependencyMajorWithinSupportedRange(nextFact.version, 6);
34288
- if (currentMajor === null) return false;
34289
- if (nextMajor === null) return true;
34290
- return selectOldestDependencyVersion(currentFact.version, nextFact.version) === nextFact.version;
34291
- };
34292
- const collectBindingVersion = (facts, packageJson, directory, packageName) => {
34293
- const version = getDependencySpec(packageJson, packageName);
34294
- if (version === null) return;
34295
- const resolvedVersion = resolveCatalogBackedDependencyVersion({
34296
- rootDirectory: directory,
34297
- rootPackageJson: packageJson,
34298
- packageName,
34299
- version
34300
- });
34301
- if (packageName === MOBX_REACT_PACKAGE_NAME) {
34302
- facts.mobxReactVersion = facts.hasMobxReact ? selectOldestDependencyVersion(facts.mobxReactVersion, resolvedVersion) : resolvedVersion;
34303
- facts.hasMobxReact = true;
34304
- return;
34305
- }
34306
- facts.mobxReactLiteVersion = facts.hasMobxReactLite ? selectOldestDependencyVersion(facts.mobxReactLiteVersion, resolvedVersion) : resolvedVersion;
34307
- facts.hasMobxReactLite = true;
34308
- };
34309
34157
  const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, rootPackageJson) => {
34310
34158
  if (facts.expo.version === null) {
34311
34159
  const spec = getDependencySpec(packageJson, "expo");
@@ -34339,10 +34187,10 @@ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, roo
34339
34187
  }),
34340
34188
  sourceDirectory: directory
34341
34189
  };
34342
- if (shouldReplaceMobxFact(facts.mobx, nextMobxFact)) facts.mobx = nextMobxFact;
34190
+ if (shouldReplaceSupportedDependencyFact(facts.mobx, nextMobxFact, 6)) facts.mobx = nextMobxFact;
34343
34191
  }
34344
- collectBindingVersion(facts, packageJson, directory, MOBX_REACT_PACKAGE_NAME);
34345
- collectBindingVersion(facts, packageJson, directory, MOBX_REACT_LITE_PACKAGE_NAME);
34192
+ facts.hasMobxReact = facts.hasMobxReact || getDependencySpec(packageJson, MOBX_REACT_PACKAGE_NAME) !== null;
34193
+ facts.hasMobxReactLite = facts.hasMobxReactLite || getDependencySpec(packageJson, MOBX_REACT_LITE_PACKAGE_NAME) !== null;
34346
34194
  facts.hasMobxStateTree = facts.hasMobxStateTree || getDependencySpec(packageJson, MOBX_STATE_TREE_PACKAGE_NAME) !== null;
34347
34195
  facts.hasMobxReactObserver = facts.hasMobxReactObserver || getDependencySpec(packageJson, MOBX_REACT_OBSERVER_PACKAGE_NAME) !== null;
34348
34196
  const zustandSpec = getDependencySpec(packageJson, "zustand");
@@ -34366,52 +34214,6 @@ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, roo
34366
34214
  const spec = getDependencySpec(packageJson, "valtio");
34367
34215
  if (spec !== null) facts.valtioVersion = spec;
34368
34216
  }
34369
- facts.tanstackQueryVersion ??= getTanStackQueryVersion(packageJson);
34370
- const styledComponentsVersion = resolveCatalogBackedDependencyVersion({
34371
- rootDirectory: directory,
34372
- rootPackageJson: packageJson,
34373
- packageName: "styled-components",
34374
- version: getStyledComponentsVersion(packageJson)
34375
- });
34376
- if (styledComponentsVersion && shouldReplaceStyledComponentsVersion(facts.styledComponentsVersion, styledComponentsVersion)) facts.styledComponentsVersion = styledComponentsVersion;
34377
- facts.hasI18nLibrary = facts.hasI18nLibrary || hasI18nDependency(packageJson);
34378
- for (const packageName of REACT_THREE_FIBER_DEPENDENCY_NAMES) {
34379
- const version = resolveCatalogBackedDependencyVersion({
34380
- rootDirectory,
34381
- rootPackageJson,
34382
- sourceDirectory: directory,
34383
- sourcePackageJson: packageJson,
34384
- packageName,
34385
- version: getDependencyDeclaration({
34386
- packageName,
34387
- packageJson,
34388
- sections: REACT_THREE_FIBER_SECTIONS
34389
- }).version
34390
- });
34391
- if (version === null) continue;
34392
- if (shouldReplaceWithLowerMajor(facts.reactThreeFiber.version, version)) facts.reactThreeFiber = {
34393
- packageName,
34394
- version,
34395
- sourceDirectory: directory
34396
- };
34397
- }
34398
- const threeVersion = resolveCatalogBackedDependencyVersion({
34399
- rootDirectory,
34400
- rootPackageJson,
34401
- sourceDirectory: directory,
34402
- sourcePackageJson: packageJson,
34403
- packageName: "three",
34404
- version: getDependencyDeclaration({
34405
- packageName: "three",
34406
- packageJson,
34407
- sections: THREE_DEPENDENCY_SECTIONS
34408
- }).version
34409
- });
34410
- if (threeVersion !== null) {
34411
- const currentRelease = parseThreeRelease(facts.threeVersion);
34412
- const nextRelease = parseThreeRelease(threeVersion);
34413
- if (facts.threeVersion === null || nextRelease !== null && (currentRelease === null || nextRelease < currentRelease)) facts.threeVersion = threeVersion;
34414
- }
34415
34217
  facts.hasReactNativeAwarePackage = facts.hasReactNativeAwarePackage || isPackageJsonReactNativeAware(packageJson);
34416
34218
  facts.hasReanimatedAwarePackage = facts.hasReanimatedAwarePackage || isPackageJsonReanimatedAware(packageJson);
34417
34219
  facts.hasSsrDependency = facts.hasSsrDependency || isPackageJsonSsrAware(packageJson);
@@ -34433,8 +34235,6 @@ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, roo
34433
34235
  if (currentRemotionMajorVersion === null || remotionMajorVersion < currentRemotionMajorVersion) facts.remotionVersion = resolvedRemotionVersion;
34434
34236
  }
34435
34237
  }
34436
- facts.hasThree = facts.hasThree || THREE_DEPENDENCY_NAMES.some((dependencyName) => getDependencySpec(packageJson, dependencyName) !== null);
34437
- facts.hasReactThreeFiber = facts.hasReactThreeFiber || REACT_THREE_FIBER_ECOSYSTEM_DEPENDENCY_NAMES.some((dependencyName) => getDependencySpec(packageJson, dependencyName) !== null);
34438
34238
  };
34439
34239
  const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGroup }) => {
34440
34240
  const facts = {
@@ -34460,32 +34260,19 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34460
34260
  sourceDirectory: null
34461
34261
  },
34462
34262
  hasMobxReact: false,
34463
- mobxReactVersion: null,
34464
34263
  hasMobxReactLite: false,
34465
- mobxReactLiteVersion: null,
34466
34264
  hasMobxStateTree: false,
34467
34265
  hasMobxReactObserver: false,
34468
34266
  zustand: {
34469
34267
  version: null,
34470
34268
  sourceDirectory: null
34471
34269
  },
34472
- tanstackQueryVersion: null,
34473
- styledComponentsVersion: null,
34474
- hasI18nLibrary: false,
34475
34270
  hasReactNativeAwarePackage: false,
34476
34271
  hasReanimatedAwarePackage: false,
34477
34272
  hasSsrDependency: false,
34478
34273
  hasRemotionDependency: false,
34479
34274
  hasUnknownRemotionVersion: false,
34480
34275
  remotionVersion: null,
34481
- hasThree: false,
34482
- threeVersion: null,
34483
- hasReactThreeFiber: false,
34484
- reactThreeFiber: {
34485
- packageName: null,
34486
- version: null,
34487
- sourceDirectory: null
34488
- },
34489
34276
  reanimatedVersion: null
34490
34277
  };
34491
34278
  evaluateManifestFacts(facts, rootPackageJson, rootDirectory, rootDirectory, rootPackageJson);
@@ -34528,7 +34315,7 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
34528
34315
  workspaceDirectory,
34529
34316
  workspacePackageJson
34530
34317
  });
34531
- if (reactVersion && shouldReplaceWithLowerMajor(facts.reactVersion, reactVersion)) facts.reactVersion = reactVersion;
34318
+ if (reactVersion && shouldReplaceReactVersion(facts.reactVersion, reactVersion)) facts.reactVersion = reactVersion;
34532
34319
  if (tailwindVersion && !facts.tailwindVersion) facts.tailwindVersion = tailwindVersion;
34533
34320
  if (zodVersion && !facts.zodVersion) facts.zodVersion = zodVersion;
34534
34321
  const settledReactMajor = parseReactMajor(facts.reactVersion);
@@ -34724,9 +34511,7 @@ const discoverProjectWithoutPackageJson = (directory) => {
34724
34511
  mobxVersion: null,
34725
34512
  mobxMajorVersion: null,
34726
34513
  hasMobxReact: false,
34727
- mobxReactVersion: null,
34728
34514
  hasMobxReactLite: false,
34729
- mobxReactLiteVersion: null,
34730
34515
  hasMobxStateTree: false,
34731
34516
  hasMobxReactObserver: false,
34732
34517
  zustandVersion: null,
@@ -34741,15 +34526,6 @@ const discoverProjectWithoutPackageJson = (directory) => {
34741
34526
  hasRemotion: false,
34742
34527
  remotionVersion: null,
34743
34528
  remotionMajorVersion: null,
34744
- hasI18nLibrary: false,
34745
- tanstackQueryVersion: null,
34746
- styledComponentsVersion: null,
34747
- hasThree: false,
34748
- threeVersion: null,
34749
- threeRelease: null,
34750
- hasReactThreeFiber: false,
34751
- reactThreeFiberVersion: null,
34752
- reactThreeFiberMajorVersion: null,
34753
34529
  hasSsrDependency: false,
34754
34530
  preactVersion: null,
34755
34531
  preactMajorVersion: null,
@@ -34876,19 +34652,6 @@ const discoverProject = (directory) => {
34876
34652
  });
34877
34653
  const preactVersion = getPreactVersion(packageJson);
34878
34654
  const remotionVersion = workspaceFacts.remotionVersion;
34879
- const tanstackQueryVersion = getTanStackQueryVersion(packageJson) ?? workspaceFacts.tanstackQueryVersion;
34880
- const reactThreeFiberVersion = workspaceFacts.reactThreeFiber.packageName ? resolveCatalogBackedDependencyVersion({
34881
- rootDirectory: directory,
34882
- rootPackageJson: packageJson,
34883
- packageName: workspaceFacts.reactThreeFiber.packageName,
34884
- version: workspaceFacts.reactThreeFiber.version
34885
- }) : null;
34886
- const threeVersion = resolveCatalogBackedDependencyVersion({
34887
- rootDirectory: directory,
34888
- rootPackageJson: packageJson,
34889
- packageName: "three",
34890
- version: workspaceFacts.threeVersion
34891
- });
34892
34655
  const isPreES2023Target = hasTypeScript && detectPreES2023Target(directory);
34893
34656
  const projectInfo = {
34894
34657
  rootDirectory: directory,
@@ -34899,11 +34662,9 @@ const discoverProject = (directory) => {
34899
34662
  zodVersion,
34900
34663
  zodMajorVersion: zodVersion === null ? null : getLowestDependencyMajor(zodVersion),
34901
34664
  mobxVersion,
34902
- mobxMajorVersion: mobxVersion === null ? null : getDependencyMajorWithinSupportedRange(mobxVersion, 6),
34665
+ mobxMajorVersion: mobxVersion === null ? null : getLowestDependencyMajor(mobxVersion),
34903
34666
  hasMobxReact: workspaceFacts.hasMobxReact,
34904
- mobxReactVersion: workspaceFacts.mobxReactVersion,
34905
34667
  hasMobxReactLite: workspaceFacts.hasMobxReactLite,
34906
- mobxReactLiteVersion: workspaceFacts.mobxReactLiteVersion,
34907
34668
  hasMobxStateTree: workspaceFacts.hasMobxStateTree,
34908
34669
  hasMobxReactObserver: workspaceFacts.hasMobxReactObserver,
34909
34670
  zustandVersion,
@@ -34912,21 +34673,12 @@ const discoverProject = (directory) => {
34912
34673
  hasTypeScript,
34913
34674
  hasReactCompiler: detectReactCompiler(directory, packageJson),
34914
34675
  hasReactCompilerLintPlugin: detectReactCompilerLintPlugin(directory, packageJson),
34915
- hasTanStackQuery: tanstackQueryVersion !== null,
34916
- hasI18nLibrary: workspaceFacts.hasI18nLibrary,
34917
- tanstackQueryVersion,
34918
- styledComponentsVersion: workspaceFacts.styledComponentsVersion,
34676
+ hasTanStackQuery: hasTanStackQuery(packageJson),
34919
34677
  valtioVersion,
34920
34678
  valtioMajorVersion: valtioVersion === null ? null : getLowestDependencyMajor(valtioVersion),
34921
34679
  hasRemotion: workspaceFacts.hasRemotionDependency,
34922
34680
  remotionVersion,
34923
34681
  remotionMajorVersion: remotionVersion === null ? null : getLowestDependencyMajor(remotionVersion),
34924
- hasThree: workspaceFacts.hasThree,
34925
- threeVersion,
34926
- threeRelease: parseThreeRelease(threeVersion),
34927
- hasReactThreeFiber: workspaceFacts.hasReactThreeFiber,
34928
- reactThreeFiberVersion,
34929
- reactThreeFiberMajorVersion: reactThreeFiberVersion === null ? null : getLowestDependencyMajor(reactThreeFiberVersion),
34930
34682
  hasSsrDependency: workspaceFacts.hasSsrDependency,
34931
34683
  preactVersion,
34932
34684
  preactMajorVersion: parseReactMajor(preactVersion),
@@ -38201,10 +37953,10 @@ const SSR_FRAMEWORKS = new Set([
38201
37953
  "gatsby",
38202
37954
  "tanstack-start"
38203
37955
  ]);
38204
- const addVersionCapabilityLadder = (capabilities, name, detectedVersion, earliest, latest) => {
38205
- if (detectedVersion === null) return;
38206
- const cappedVersion = Math.min(detectedVersion, latest);
38207
- for (let candidate = earliest; candidate <= cappedVersion; candidate += 1) capabilities.add(`${name}:${candidate}`);
37956
+ const addMajorLadder = (capabilities, name, major, earliest, latest) => {
37957
+ if (major === null) return;
37958
+ const cappedMajor = Math.min(major, latest);
37959
+ for (let candidate = earliest; candidate <= cappedMajor; candidate += 1) capabilities.add(`${name}:${candidate}`);
38208
37960
  };
38209
37961
  const buildCapabilities = (project) => {
38210
37962
  const capabilities = /* @__PURE__ */ new Set();
@@ -38217,77 +37969,39 @@ const buildCapabilities = (project) => {
38217
37969
  if (CLIENT_ONLY_FRAMEWORKS.has(project.framework)) capabilities.add("client-only");
38218
37970
  if (project.isStaticExport) capabilities.add("nextjs:static-export");
38219
37971
  if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
38220
- if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 16) capabilities.add("nextjs:16");
38221
- addVersionCapabilityLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
37972
+ addMajorLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
38222
37973
  if (project.reactMajorVersion !== null && project.reactMajorVersion >= 19 && isMajorMinorAtLeast(parseReactMajorMinor(project.reactVersion), {
38223
37974
  major: 19,
38224
37975
  minor: 2
38225
37976
  })) capabilities.add("react:19.2");
38226
- if (project.tailwindVersion !== null) {
38227
- capabilities.add("tailwind");
38228
- const tailwindVersion = parseTailwindMajorMinor(project.tailwindVersion);
38229
- if (isMajorMinorAtLeast(tailwindVersion, {
38230
- major: 3,
38231
- minor: 4
38232
- })) capabilities.add("tailwind:3.4");
38233
- if (tailwindVersion !== null && isMajorMinorAtLeast(tailwindVersion, {
38234
- major: 4,
38235
- minor: 0
38236
- })) capabilities.add("tailwind:4");
38237
- }
37977
+ if (project.tailwindVersion !== null) capabilities.add("tailwind");
37978
+ if (project.tailwindVersion !== null && isMajorMinorAtLeast(parseTailwindMajorMinor(project.tailwindVersion), {
37979
+ major: 3,
37980
+ minor: 4
37981
+ })) capabilities.add("tailwind:3.4");
38238
37982
  if (project.zodVersion !== null) capabilities.add("zod");
38239
37983
  if (project.zodMajorVersion !== null && project.zodMajorVersion >= 4) capabilities.add("zod:4");
38240
37984
  if (project.mobxVersion !== void 0 && project.mobxVersion !== null || project.hasMobxReact === true || project.hasMobxReactLite === true || project.hasMobxStateTree === true || project.hasMobxReactObserver === true) capabilities.add("mobx");
38241
37985
  if (project.hasMobxReact === true) capabilities.add("mobx-react");
38242
37986
  if (project.hasMobxReactLite === true) capabilities.add("mobx-react-lite");
38243
37987
  if (project.hasMobxReact === true || project.hasMobxReactLite === true) capabilities.add("mobx-react-binding");
38244
- const mobxReactVersion = parseDependencyMajorMinor(project.mobxReactVersion);
38245
- const mobxReactLiteVersion = parseDependencyMajorMinor(project.mobxReactLiteVersion);
38246
- const hasMobxReactObserverMemoGuard = mobxReactVersion !== null && isMajorMinorAtLeast(mobxReactVersion, {
38247
- major: 7,
38248
- minor: 3
38249
- });
38250
- const hasMobxReactLiteObserverMemoGuard = mobxReactLiteVersion !== null && isMajorMinorAtLeast(mobxReactLiteVersion, {
38251
- major: 3,
38252
- minor: 3
38253
- });
38254
- if (hasMobxReactObserverMemoGuard) capabilities.add("mobx-react-observer-memo-guard");
38255
- if (hasMobxReactLiteObserverMemoGuard) capabilities.add("mobx-react-lite-observer-memo-guard");
38256
- if (hasMobxReactObserverMemoGuard || hasMobxReactLiteObserverMemoGuard) capabilities.add("mobx-react-binding-observer-memo-guard");
38257
37988
  if (project.hasMobxStateTree === true) capabilities.add("mobx-state-tree");
38258
37989
  if (project.hasMobxReactObserver === true) capabilities.add("mobx-react-observer");
38259
- if (project.mobxMajorVersion !== void 0 && project.mobxMajorVersion !== null && project.mobxMajorVersion >= 4 && project.mobxMajorVersion <= 6) addVersionCapabilityLadder(capabilities, "mobx", project.mobxMajorVersion, 4, 6);
38260
- const mobxVersion = parseDependencyMajorMinor(project.mobxVersion);
38261
- if (project.mobxMajorVersion === 6 && mobxVersion !== null && isMajorMinorAtLeast(mobxVersion, {
38262
- major: 6,
38263
- minor: 10
38264
- })) capabilities.add("mobx:6.10");
37990
+ if (project.mobxMajorVersion !== void 0 && project.mobxMajorVersion !== null && project.mobxMajorVersion >= 4 && project.mobxMajorVersion <= 6) addMajorLadder(capabilities, "mobx", project.mobxMajorVersion, 4, 6);
38265
37991
  if (project.zustandVersion !== void 0 && project.zustandVersion !== null) capabilities.add("zustand");
38266
- if (project.zustandMajorVersion !== void 0 && project.zustandMajorVersion !== null && project.zustandMajorVersion >= 1 && project.zustandMajorVersion <= 5) addVersionCapabilityLadder(capabilities, "zustand", project.zustandMajorVersion, 1, 5);
37992
+ if (project.zustandMajorVersion !== void 0 && project.zustandMajorVersion !== null && project.zustandMajorVersion >= 1 && project.zustandMajorVersion <= 5) addMajorLadder(capabilities, "zustand", project.zustandMajorVersion, 1, 5);
38267
37993
  if (project.isPreES2023Target) capabilities.add("pre-es2023");
38268
37994
  if (project.hasReactCompiler) capabilities.add("react-compiler");
38269
- if (Boolean(project.hasTanStackQuery) || Boolean(project.tanstackQueryVersion)) capabilities.add("tanstack-query");
38270
- if (project.styledComponentsVersion) {
38271
- capabilities.add("styled-components");
38272
- const styledComponentsMajor = getLowestDependencyMajor(project.styledComponentsVersion);
38273
- if (styledComponentsMajor !== null && styledComponentsMajor >= 6) capabilities.add("styled-components:6");
38274
- }
38275
- if (project.hasI18nLibrary) capabilities.add("i18n");
37995
+ if (project.hasTanStackQuery) capabilities.add("tanstack-query");
38276
37996
  if (project.valtioVersion !== null) capabilities.add("valtio");
38277
- addVersionCapabilityLadder(capabilities, "valtio", project.valtioMajorVersion, 1, 10);
37997
+ addMajorLadder(capabilities, "valtio", project.valtioMajorVersion, 1, 10);
38278
37998
  if (project.hasRemotion) {
38279
37999
  capabilities.add("remotion");
38280
- addVersionCapabilityLadder(capabilities, "remotion", project.remotionMajorVersion ?? null, 4, 30);
38281
- }
38282
- if (project.hasThree || project.hasReactThreeFiber) capabilities.add("three");
38283
- addVersionCapabilityLadder(capabilities, "three", project.threeRelease ?? null, 145, 250);
38284
- if (project.hasReactThreeFiber) {
38285
- capabilities.add("r3f");
38286
- addVersionCapabilityLadder(capabilities, "r3f", project.reactThreeFiberMajorVersion ?? null, 3, 10);
38000
+ addMajorLadder(capabilities, "remotion", project.remotionMajorVersion ?? null, 4, 30);
38287
38001
  }
38288
38002
  if (project.hasTypeScript) capabilities.add("typescript");
38289
38003
  if (project.preactVersion !== null) capabilities.add("preact");
38290
- addVersionCapabilityLadder(capabilities, "preact", project.preactMajorVersion, 10, 20);
38004
+ addMajorLadder(capabilities, "preact", project.preactMajorVersion, 10, 20);
38291
38005
  if (project.preactVersion !== null && project.reactVersion === null) capabilities.add("pure-preact");
38292
38006
  return capabilities;
38293
38007
  };
@@ -38299,7 +38013,7 @@ const getCapabilities = (project) => {
38299
38013
  capabilitiesByProject.set(project, capabilities);
38300
38014
  return capabilities;
38301
38015
  };
38302
- const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhen, includedTags) => {
38016
+ const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhen) => {
38303
38017
  if (requires) {
38304
38018
  for (const capability of requires) if (!capabilities.has(capability)) return false;
38305
38019
  }
@@ -38310,29 +38024,20 @@ const shouldEnableRule = (requires, tags, capabilities, ignoredTags, disabledWhe
38310
38024
  if (tags) {
38311
38025
  for (const tag of tags) if (ignoredTags.has(tag)) return false;
38312
38026
  }
38313
- if (includedTags && includedTags.size > 0) {
38314
- if (!tags?.some((tag) => includedTags.has(tag))) return false;
38315
- }
38316
38027
  return true;
38317
38028
  };
38318
- const shouldEnableRuleByDefaultStatus = (options) => options.defaultEnabled !== false || options.hasExplicitOverride === true || options.includeTagDefaults && options.hasIncludedTags;
38319
38029
  const yieldToEventLoop = () => new Promise((resolve) => {
38320
38030
  setImmediate(resolve);
38321
38031
  });
38322
38032
  const createSecurityScanSession = (rootDirectory, options) => {
38323
38033
  const capabilities = options.project ? getCapabilities(options.project) : /* @__PURE__ */ new Set();
38324
38034
  const ignoredTags = options.ignoredTags ?? /* @__PURE__ */ new Set();
38325
- const includedTags = options.includedTags ?? /* @__PURE__ */ new Set();
38326
38035
  const enabledScanRules = REACT_DOCTOR_RULES.flatMap((entry) => {
38327
38036
  const rule = entry.rule;
38328
38037
  const scan = rule.scan;
38329
38038
  if (typeof scan !== "function") return [];
38330
- if (!shouldEnableRuleByDefaultStatus({
38331
- defaultEnabled: rule.defaultEnabled,
38332
- includeTagDefaults: options.includeTagDefaults === true,
38333
- hasIncludedTags: includedTags.size > 0
38334
- })) return [];
38335
- if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen, includedTags)) return [];
38039
+ if (rule.defaultEnabled === false) return [];
38040
+ if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen)) return [];
38336
38041
  return [{
38337
38042
  entry,
38338
38043
  scan,
@@ -40318,9 +40023,8 @@ const buildUserPluginRules = (userPlugin, severityControls) => {
40318
40023
  }
40319
40024
  return enabled;
40320
40025
  };
40321
- const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), includedTags = /* @__PURE__ */ new Set(), includeTagDefaults = false, serverAuthFunctionNames, severityControls, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
40322
- const hasIncludedTags = includedTags.size > 0;
40323
- const reactHooksJsPlugin = disableReactHooksJsPlugin || ruleSelection === "sidecar" || hasIncludedTags ? null : resolveReactHooksJsPlugin(project.hasReactCompiler || project.hasReactCompilerLintPlugin === true, customRulesOnly);
40026
+ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, extendsPaths = [], ignoredTags = /* @__PURE__ */ new Set(), serverAuthFunctionNames, severityControls, userPlugins = [], disableReactHooksJsPlugin = false, ruleSelection, sidecarRuleIdFilter }) => {
40027
+ const reactHooksJsPlugin = disableReactHooksJsPlugin || ruleSelection === "sidecar" ? null : resolveReactHooksJsPlugin(project.hasReactCompiler || project.hasReactCompilerLintPlugin === true, customRulesOnly);
40324
40028
  const reactCompilerRules = reactHooksJsPlugin ? applyRuleSeverityControls(filterRulesToAvailable(REACT_COMPILER_RULES, "react-hooks-js", reactHooksJsPlugin.availableRuleNames), severityControls) : {};
40325
40029
  const jsPlugins = [];
40326
40030
  if (reactHooksJsPlugin) jsPlugins.push(reactHooksJsPlugin.entry);
@@ -40335,14 +40039,9 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
40335
40039
  if (rule.scan !== void 0) continue;
40336
40040
  if (customRulesOnly && registryEntry.originallyExternal) continue;
40337
40041
  if (rule.framework !== "global" && !rule.requires) continue;
40338
- if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen, includedTags)) continue;
40042
+ if (!shouldEnableRule(rule.requires, rule.tags, capabilities, ignoredTags, rule.disabledWhen)) continue;
40339
40043
  const explicitRuleOverride = resolveRuleSeverityOverride({ ruleKey: registryEntry.key }, severityControls);
40340
- if (!shouldEnableRuleByDefaultStatus({
40341
- defaultEnabled: rule.defaultEnabled,
40342
- includeTagDefaults,
40343
- hasIncludedTags,
40344
- hasExplicitOverride: explicitRuleOverride !== void 0
40345
- })) continue;
40044
+ if (rule.defaultEnabled === false && explicitRuleOverride === void 0) continue;
40346
40045
  const severity = resolveRuleSeverityOverride({
40347
40046
  ruleKey: registryEntry.key,
40348
40047
  category: rule.category
@@ -40351,7 +40050,7 @@ const createOxlintConfig = ({ pluginPath, project, customRulesOnly = false, exte
40351
40050
  enabledReactDoctorRules[registryEntry.key] = severity;
40352
40051
  }
40353
40052
  const userPluginRules = {};
40354
- if (ruleSelection !== "sidecar" && !hasIncludedTags) for (const userPlugin of userPlugins) {
40053
+ if (ruleSelection !== "sidecar") for (const userPlugin of userPlugins) {
40355
40054
  Object.assign(userPluginRules, buildUserPluginRules(userPlugin, severityControls));
40356
40055
  jsPlugins.push(userPlugin.entry);
40357
40056
  }
@@ -40568,19 +40267,6 @@ const createSidecarLintCache = (cacheDirectory, rulesetHash) => {
40568
40267
  }
40569
40268
  };
40570
40269
  };
40571
- const fingerprintCacheByFilePath = /* @__PURE__ */ new Map();
40572
- const fingerprintFileContents = (filePath, fingerprintLength) => {
40573
- const fileStats = NFS.statSync(filePath, { bigint: true });
40574
- const cachedFingerprint = fingerprintCacheByFilePath.get(filePath);
40575
- if (cachedFingerprint?.modifiedTimeNanoseconds === fileStats.mtimeNs && cachedFingerprint.sizeBytes === fileStats.size) return cachedFingerprint.fingerprint;
40576
- const fingerprint = crypto.createHash("sha256").update(NFS.readFileSync(filePath)).digest("hex").slice(0, fingerprintLength);
40577
- fingerprintCacheByFilePath.set(filePath, {
40578
- fingerprint,
40579
- modifiedTimeNanoseconds: fileStats.mtimeNs,
40580
- sizeBytes: fileStats.size
40581
- });
40582
- return fingerprint;
40583
- };
40584
40270
  const bundledRequire = createRequire(import.meta.url);
40585
40271
  const childNodeVersionByBinaryPath = /* @__PURE__ */ new Map();
40586
40272
  const resolveChildNodeVersion = (nodeBinaryPath) => {
@@ -40604,13 +40290,6 @@ const TOOLCHAIN_PACKAGE_SPECIFIERS = [
40604
40290
  "oxlint-plugin-react-doctor/package.json",
40605
40291
  "eslint-plugin-react-hooks/package.json"
40606
40292
  ];
40607
- const resolvePluginFingerprint = () => {
40608
- try {
40609
- return fingerprintFileContents(bundledRequire.resolve("oxlint-plugin-react-doctor"), 16);
40610
- } catch {
40611
- return "unresolved";
40612
- }
40613
- };
40614
40293
  const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
40615
40294
  const versions = [`node=${resolveChildNodeVersion(nodeBinaryPath)}`];
40616
40295
  for (const specifier of TOOLCHAIN_PACKAGE_SPECIFIERS) try {
@@ -40620,7 +40299,6 @@ const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
40620
40299
  } catch {
40621
40300
  versions.push(`${specifier}=missing`);
40622
40301
  }
40623
- versions.push(`oxlint-plugin-react-doctor#fingerprint=${resolvePluginFingerprint()}`);
40624
40302
  return versions;
40625
40303
  };
40626
40304
  const esmRequire = createRequire(import.meta.url);
@@ -42096,7 +41774,7 @@ const reactHooksJsPluginDropNote = (error) => {
42096
41774
  * 6. always restore disable directives + clean up the temp dir
42097
41775
  */
42098
41776
  const runOxlint = async (options) => {
42099
- 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;
41777
+ 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;
42100
41778
  const serverAuthFunctionNames = Array.isArray(userConfig?.serverAuthFunctionNames) ? userConfig.serverAuthFunctionNames.filter((entry) => typeof entry === "string" && entry.length > 0) : void 0;
42101
41779
  const severityControls = buildRuleSeverityControls(userConfig);
42102
41780
  validateRuleRegistration();
@@ -42110,15 +41788,13 @@ const runOxlint = async (options) => {
42110
41788
  }
42111
41789
  const pluginPath = resolvePluginPath();
42112
41790
  const extendsPaths = (adoptExistingLintConfig && !customRulesOnly ? detectUserLintConfigPaths(rootDirectory) : []).filter(canOxlintExtendConfig);
42113
- const userPlugins = includedTags.size > 0 ? [] : resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
41791
+ const userPlugins = resolveUserPlugins(userConfig?.plugins, configSourceDirectory);
42114
41792
  const buildConfig = (overrides) => createOxlintConfig({
42115
41793
  pluginPath,
42116
41794
  project,
42117
41795
  customRulesOnly,
42118
41796
  extendsPaths: overrides.extendsPaths,
42119
41797
  ignoredTags,
42120
- includedTags,
42121
- includeTagDefaults,
42122
41798
  serverAuthFunctionNames,
42123
41799
  severityControls,
42124
41800
  userPlugins,
@@ -42507,8 +42183,6 @@ var Linter = class Linter extends Service()("react-doctor/Linter") {
42507
42183
  respectInlineDisables: input.respectInlineDisables,
42508
42184
  adoptExistingLintConfig: input.adoptExistingLintConfig,
42509
42185
  ignoredTags: input.ignoredTags,
42510
- includedTags: input.includedTags,
42511
- includeTagDefaults: input.includeTagDefaults,
42512
42186
  userConfig: input.userConfig ?? null,
42513
42187
  configSourceDirectory: input.configSourceDirectory,
42514
42188
  onPartialFailure: (reason) => {
@@ -43357,9 +43031,7 @@ const runInspect = (input, hooks = {}) => gen(function* () {
43357
43031
  const securityScanFailedRef = yield* make$13(false);
43358
43032
  const securityScanFiber = yield* forkChild(runCollect(applyPerElementPipeline(isDiffMode ? empty$4 : unwrap(tryPromise(() => checkSecurityScanCooperative(scanDirectory, {
43359
43033
  project,
43360
- ignoredTags: input.ignoredTags,
43361
- includedTags: input.includedTags,
43362
- includeTagDefaults: input.includeTagDefaults
43034
+ ignoredTags: input.ignoredTags
43363
43035
  })).pipe(map$3((diagnostics) => fromIterable$1(diagnostics)), catch_$1(() => set(securityScanFailedRef, true).pipe(as(empty$4))))))).pipe(withSpan("SecurityScan.run")));
43364
43036
  const shouldRunSupplyChain = !isDiffMode || (input.supplyChainManifestChanged ?? false);
43365
43037
  const supplyChainOverlapTimeout = yield* SupplyChainOverlapTimeoutMs;
@@ -43450,8 +43122,6 @@ const runInspect = (input, hooks = {}) => gen(function* () {
43450
43122
  respectInlineDisables: input.respectInlineDisables,
43451
43123
  adoptExistingLintConfig: input.adoptExistingLintConfig,
43452
43124
  ignoredTags: input.ignoredTags,
43453
- includedTags: input.includedTags,
43454
- includeTagDefaults: input.includeTagDefaults,
43455
43125
  userConfig: resolvedConfig.config ?? void 0,
43456
43126
  configSourceDirectory: resolvedConfig.configSourceDirectory ?? void 0,
43457
43127
  onFileProgress: (scannedFileCount, totalFileCount) => {
@@ -44312,4 +43982,4 @@ const toJsonReport = (result, options) => buildJsonReport({
44312
43982
  export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
44313
43983
 
44314
43984
  //# sourceMappingURL=index.js.map
44315
- //# debugId=d6dc69de-43c3-570a-8cc4-be7d4a3605ac
43985
+ //# debugId=6aa1c6e1-8fcc-50d4-a076-3e864425bdc5