react-doctor 0.8.1-dev.cc2d168 → 0.8.1-dev.cd9ca68
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/cli.js +116 -23
- package/dist/index.d.ts +3 -0
- package/dist/index.js +110 -19
- package/dist/lsp.js +110 -19
- package/package.json +4 -4
package/dist/cli.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]="
|
|
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]="434800fc-200b-5a59-aa25-61e682ab57d7")}catch(e){}}();
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
4
|
import * as NodeChildProcess from "node:child_process";
|
|
5
5
|
import { execFile, execFileSync, spawn, spawnSync } from "node:child_process";
|
|
@@ -36571,10 +36571,10 @@ const FALLBACK_TSCONFIG_FILENAMES = ["tsconfig.app.json", "tsconfig.build.json"]
|
|
|
36571
36571
|
const FRAMEWORK_PACKAGES = {
|
|
36572
36572
|
next: "nextjs",
|
|
36573
36573
|
"@tanstack/react-start": "tanstack-start",
|
|
36574
|
-
vite: "vite",
|
|
36575
|
-
"react-scripts": "cra",
|
|
36576
36574
|
"@remix-run/react": "remix",
|
|
36577
36575
|
gatsby: "gatsby",
|
|
36576
|
+
vite: "vite",
|
|
36577
|
+
"react-scripts": "cra",
|
|
36578
36578
|
expo: "expo",
|
|
36579
36579
|
"react-native": "react-native"
|
|
36580
36580
|
};
|
|
@@ -37101,19 +37101,6 @@ const getPreactVersion = (packageJson) => {
|
|
|
37101
37101
|
...packageJson.devDependencies
|
|
37102
37102
|
}.preact ?? null;
|
|
37103
37103
|
};
|
|
37104
|
-
const TANSTACK_QUERY_PACKAGES = new Set([
|
|
37105
|
-
"@tanstack/react-query",
|
|
37106
|
-
"@tanstack/query-core",
|
|
37107
|
-
"react-query"
|
|
37108
|
-
]);
|
|
37109
|
-
const hasTanStackQuery = (packageJson) => {
|
|
37110
|
-
const allDependencies = {
|
|
37111
|
-
...packageJson.peerDependencies,
|
|
37112
|
-
...packageJson.dependencies,
|
|
37113
|
-
...packageJson.devDependencies
|
|
37114
|
-
};
|
|
37115
|
-
return Object.keys(allDependencies).some((packageName) => TANSTACK_QUERY_PACKAGES.has(packageName));
|
|
37116
|
-
};
|
|
37117
37104
|
const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, version }) => {
|
|
37118
37105
|
if (version === null || !isCatalogReference(version)) return version;
|
|
37119
37106
|
const catalogName = extractCatalogName(version);
|
|
@@ -37316,6 +37303,55 @@ const listWorkspacePackages = (rootDirectory) => {
|
|
|
37316
37303
|
}
|
|
37317
37304
|
return packages;
|
|
37318
37305
|
};
|
|
37306
|
+
const getPreferredDependencyVersion = ({ packageJson, packageNames }) => {
|
|
37307
|
+
const allDependencies = {
|
|
37308
|
+
...packageJson.devDependencies,
|
|
37309
|
+
...packageJson.peerDependencies,
|
|
37310
|
+
...packageJson.dependencies
|
|
37311
|
+
};
|
|
37312
|
+
for (const packageName of packageNames) {
|
|
37313
|
+
const version = allDependencies[packageName];
|
|
37314
|
+
if (version !== void 0) return version;
|
|
37315
|
+
}
|
|
37316
|
+
return null;
|
|
37317
|
+
};
|
|
37318
|
+
const TANSTACK_REACT_QUERY_PACKAGES = ["@tanstack/react-query", "react-query"];
|
|
37319
|
+
const getTanStackQueryVersion = (packageJson) => {
|
|
37320
|
+
return getPreferredDependencyVersion({
|
|
37321
|
+
packageJson,
|
|
37322
|
+
packageNames: TANSTACK_REACT_QUERY_PACKAGES
|
|
37323
|
+
});
|
|
37324
|
+
};
|
|
37325
|
+
const STYLED_COMPONENTS_PACKAGES = ["styled-components"];
|
|
37326
|
+
const getStyledComponentsVersion = (packageJson) => {
|
|
37327
|
+
return getPreferredDependencyVersion({
|
|
37328
|
+
packageJson,
|
|
37329
|
+
packageNames: STYLED_COMPONENTS_PACKAGES
|
|
37330
|
+
});
|
|
37331
|
+
};
|
|
37332
|
+
const I18N_PACKAGES = [
|
|
37333
|
+
"i18next",
|
|
37334
|
+
"react-i18next",
|
|
37335
|
+
"next-i18next",
|
|
37336
|
+
"react-intl",
|
|
37337
|
+
"next-intl",
|
|
37338
|
+
"use-intl",
|
|
37339
|
+
"@formatjs/intl",
|
|
37340
|
+
"@lingui/core",
|
|
37341
|
+
"@lingui/react",
|
|
37342
|
+
"typesafe-i18n",
|
|
37343
|
+
"@tolgee/react",
|
|
37344
|
+
"react-intl-universal"
|
|
37345
|
+
];
|
|
37346
|
+
const hasI18nDependency = (packageJson) => {
|
|
37347
|
+
const allDependencies = {
|
|
37348
|
+
...packageJson.peerDependencies,
|
|
37349
|
+
...packageJson.dependencies,
|
|
37350
|
+
...packageJson.devDependencies,
|
|
37351
|
+
...packageJson.optionalDependencies
|
|
37352
|
+
};
|
|
37353
|
+
return I18N_PACKAGES.some((packageName) => allDependencies[packageName] !== void 0);
|
|
37354
|
+
};
|
|
37319
37355
|
const REANIMATED_DEPENDENCY_NAME = "react-native-reanimated";
|
|
37320
37356
|
const MOBX_REACT_PACKAGE_NAME = "mobx-react";
|
|
37321
37357
|
const MOBX_REACT_LITE_PACKAGE_NAME = "mobx-react-lite";
|
|
@@ -37350,6 +37386,14 @@ const shouldReplaceSupportedDependencyFact = (currentFact, nextFact, latestSuppo
|
|
|
37350
37386
|
if (nextMajor > latestSupportedMajor) return true;
|
|
37351
37387
|
return nextMajor < currentMajor;
|
|
37352
37388
|
};
|
|
37389
|
+
const shouldReplaceStyledComponentsVersion = (currentVersion, nextVersion) => {
|
|
37390
|
+
if (!currentVersion) return true;
|
|
37391
|
+
const currentMajor = getLowestDependencyMajor(currentVersion);
|
|
37392
|
+
const nextMajor = getLowestDependencyMajor(nextVersion);
|
|
37393
|
+
if (currentMajor === null) return nextMajor !== null && nextMajor < 6;
|
|
37394
|
+
if (nextMajor === null) return currentMajor >= 6;
|
|
37395
|
+
return nextMajor < currentMajor;
|
|
37396
|
+
};
|
|
37353
37397
|
const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, rootPackageJson) => {
|
|
37354
37398
|
if (facts.expo.version === null) {
|
|
37355
37399
|
const spec = getDependencySpec(packageJson, "expo");
|
|
@@ -37410,6 +37454,15 @@ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, roo
|
|
|
37410
37454
|
const spec = getDependencySpec(packageJson, "valtio");
|
|
37411
37455
|
if (spec !== null) facts.valtioVersion = spec;
|
|
37412
37456
|
}
|
|
37457
|
+
facts.tanstackQueryVersion ??= getTanStackQueryVersion(packageJson);
|
|
37458
|
+
const styledComponentsVersion = resolveCatalogBackedDependencyVersion({
|
|
37459
|
+
rootDirectory: directory,
|
|
37460
|
+
rootPackageJson: packageJson,
|
|
37461
|
+
packageName: "styled-components",
|
|
37462
|
+
version: getStyledComponentsVersion(packageJson)
|
|
37463
|
+
});
|
|
37464
|
+
if (styledComponentsVersion && shouldReplaceStyledComponentsVersion(facts.styledComponentsVersion, styledComponentsVersion)) facts.styledComponentsVersion = styledComponentsVersion;
|
|
37465
|
+
facts.hasI18nLibrary = facts.hasI18nLibrary || hasI18nDependency(packageJson);
|
|
37413
37466
|
facts.hasReactNativeAwarePackage = facts.hasReactNativeAwarePackage || isPackageJsonReactNativeAware(packageJson);
|
|
37414
37467
|
facts.hasReanimatedAwarePackage = facts.hasReanimatedAwarePackage || isPackageJsonReanimatedAware(packageJson);
|
|
37415
37468
|
facts.hasSsrDependency = facts.hasSsrDependency || isPackageJsonSsrAware(packageJson);
|
|
@@ -37463,6 +37516,9 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
|
|
|
37463
37516
|
version: null,
|
|
37464
37517
|
sourceDirectory: null
|
|
37465
37518
|
},
|
|
37519
|
+
tanstackQueryVersion: null,
|
|
37520
|
+
styledComponentsVersion: null,
|
|
37521
|
+
hasI18nLibrary: false,
|
|
37466
37522
|
hasReactNativeAwarePackage: false,
|
|
37467
37523
|
hasReanimatedAwarePackage: false,
|
|
37468
37524
|
hasSsrDependency: false,
|
|
@@ -37719,6 +37775,9 @@ const discoverProjectWithoutPackageJson = (directory) => {
|
|
|
37719
37775
|
hasRemotion: false,
|
|
37720
37776
|
remotionVersion: null,
|
|
37721
37777
|
remotionMajorVersion: null,
|
|
37778
|
+
hasI18nLibrary: false,
|
|
37779
|
+
tanstackQueryVersion: null,
|
|
37780
|
+
styledComponentsVersion: null,
|
|
37722
37781
|
hasSsrDependency: false,
|
|
37723
37782
|
preactVersion: null,
|
|
37724
37783
|
preactMajorVersion: null,
|
|
@@ -37845,6 +37904,7 @@ const discoverProject = (directory) => {
|
|
|
37845
37904
|
});
|
|
37846
37905
|
const preactVersion = getPreactVersion(packageJson);
|
|
37847
37906
|
const remotionVersion = workspaceFacts.remotionVersion;
|
|
37907
|
+
const tanstackQueryVersion = getTanStackQueryVersion(packageJson) ?? workspaceFacts.tanstackQueryVersion;
|
|
37848
37908
|
const isPreES2023Target = hasTypeScript && detectPreES2023Target(directory);
|
|
37849
37909
|
const projectInfo = {
|
|
37850
37910
|
rootDirectory: directory,
|
|
@@ -37866,7 +37926,10 @@ const discoverProject = (directory) => {
|
|
|
37866
37926
|
hasTypeScript,
|
|
37867
37927
|
hasReactCompiler: detectReactCompiler(directory, packageJson),
|
|
37868
37928
|
hasReactCompilerLintPlugin: detectReactCompilerLintPlugin(directory, packageJson),
|
|
37869
|
-
hasTanStackQuery:
|
|
37929
|
+
hasTanStackQuery: tanstackQueryVersion !== null,
|
|
37930
|
+
hasI18nLibrary: workspaceFacts.hasI18nLibrary,
|
|
37931
|
+
tanstackQueryVersion,
|
|
37932
|
+
styledComponentsVersion: workspaceFacts.styledComponentsVersion,
|
|
37870
37933
|
valtioVersion,
|
|
37871
37934
|
valtioMajorVersion: valtioVersion === null ? null : getLowestDependencyMajor(valtioVersion),
|
|
37872
37935
|
hasRemotion: workspaceFacts.hasRemotionDependency,
|
|
@@ -41197,6 +41260,7 @@ const buildCapabilities = (project) => {
|
|
|
41197
41260
|
if (CLIENT_ONLY_FRAMEWORKS.has(project.framework)) capabilities.add("client-only");
|
|
41198
41261
|
if (project.isStaticExport) capabilities.add("nextjs:static-export");
|
|
41199
41262
|
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
|
|
41263
|
+
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 16) capabilities.add("nextjs:16");
|
|
41200
41264
|
addMajorLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
|
|
41201
41265
|
if (project.reactMajorVersion !== null && project.reactMajorVersion >= 19 && isMajorMinorAtLeast(parseReactMajorMinor(project.reactVersion), {
|
|
41202
41266
|
major: 19,
|
|
@@ -41220,7 +41284,13 @@ const buildCapabilities = (project) => {
|
|
|
41220
41284
|
if (project.zustandMajorVersion !== void 0 && project.zustandMajorVersion !== null && project.zustandMajorVersion >= 1 && project.zustandMajorVersion <= 5) addMajorLadder(capabilities, "zustand", project.zustandMajorVersion, 1, 5);
|
|
41221
41285
|
if (project.isPreES2023Target) capabilities.add("pre-es2023");
|
|
41222
41286
|
if (project.hasReactCompiler) capabilities.add("react-compiler");
|
|
41223
|
-
if (project.hasTanStackQuery) capabilities.add("tanstack-query");
|
|
41287
|
+
if (Boolean(project.hasTanStackQuery) || Boolean(project.tanstackQueryVersion)) capabilities.add("tanstack-query");
|
|
41288
|
+
if (project.styledComponentsVersion) {
|
|
41289
|
+
capabilities.add("styled-components");
|
|
41290
|
+
const styledComponentsMajor = getLowestDependencyMajor(project.styledComponentsVersion);
|
|
41291
|
+
if (styledComponentsMajor !== null && styledComponentsMajor >= 6) capabilities.add("styled-components:6");
|
|
41292
|
+
}
|
|
41293
|
+
if (project.hasI18nLibrary) capabilities.add("i18n");
|
|
41224
41294
|
if (project.valtioVersion !== null) capabilities.add("valtio");
|
|
41225
41295
|
addMajorLadder(capabilities, "valtio", project.valtioMajorVersion, 1, 10);
|
|
41226
41296
|
if (project.hasRemotion) {
|
|
@@ -43511,6 +43581,19 @@ const createSidecarLintCache = (cacheDirectory, rulesetHash) => {
|
|
|
43511
43581
|
}
|
|
43512
43582
|
};
|
|
43513
43583
|
};
|
|
43584
|
+
const fingerprintCacheByFilePath = /* @__PURE__ */ new Map();
|
|
43585
|
+
const fingerprintFileContents = (filePath, fingerprintLength) => {
|
|
43586
|
+
const fileStats = NFS.statSync(filePath, { bigint: true });
|
|
43587
|
+
const cachedFingerprint = fingerprintCacheByFilePath.get(filePath);
|
|
43588
|
+
if (cachedFingerprint?.modifiedTimeNanoseconds === fileStats.mtimeNs && cachedFingerprint.sizeBytes === fileStats.size) return cachedFingerprint.fingerprint;
|
|
43589
|
+
const fingerprint = crypto.createHash("sha256").update(NFS.readFileSync(filePath)).digest("hex").slice(0, fingerprintLength);
|
|
43590
|
+
fingerprintCacheByFilePath.set(filePath, {
|
|
43591
|
+
fingerprint,
|
|
43592
|
+
modifiedTimeNanoseconds: fileStats.mtimeNs,
|
|
43593
|
+
sizeBytes: fileStats.size
|
|
43594
|
+
});
|
|
43595
|
+
return fingerprint;
|
|
43596
|
+
};
|
|
43514
43597
|
const bundledRequire$3 = createRequire(import.meta.url);
|
|
43515
43598
|
const childNodeVersionByBinaryPath = /* @__PURE__ */ new Map();
|
|
43516
43599
|
const resolveChildNodeVersion = (nodeBinaryPath) => {
|
|
@@ -43534,6 +43617,13 @@ const TOOLCHAIN_PACKAGE_SPECIFIERS$1 = [
|
|
|
43534
43617
|
"oxlint-plugin-react-doctor/package.json",
|
|
43535
43618
|
"eslint-plugin-react-hooks/package.json"
|
|
43536
43619
|
];
|
|
43620
|
+
const resolvePluginFingerprint = () => {
|
|
43621
|
+
try {
|
|
43622
|
+
return fingerprintFileContents(bundledRequire$3.resolve("oxlint-plugin-react-doctor"), 16);
|
|
43623
|
+
} catch {
|
|
43624
|
+
return "unresolved";
|
|
43625
|
+
}
|
|
43626
|
+
};
|
|
43537
43627
|
const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
|
|
43538
43628
|
const versions = [`node=${resolveChildNodeVersion(nodeBinaryPath)}`];
|
|
43539
43629
|
for (const specifier of TOOLCHAIN_PACKAGE_SPECIFIERS$1) try {
|
|
@@ -43543,6 +43633,7 @@ const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
|
|
|
43543
43633
|
} catch {
|
|
43544
43634
|
versions.push(`${specifier}=missing`);
|
|
43545
43635
|
}
|
|
43636
|
+
versions.push(`oxlint-plugin-react-doctor#fingerprint=${resolvePluginFingerprint()}`);
|
|
43546
43637
|
return versions;
|
|
43547
43638
|
};
|
|
43548
43639
|
const esmRequire = createRequire(import.meta.url);
|
|
@@ -47510,7 +47601,7 @@ const makeNoopConsole = () => ({
|
|
|
47510
47601
|
});
|
|
47511
47602
|
//#endregion
|
|
47512
47603
|
//#region src/cli/utils/version.ts
|
|
47513
|
-
const VERSION = "0.8.1-dev.
|
|
47604
|
+
const VERSION = "0.8.1-dev.cd9ca68";
|
|
47514
47605
|
//#endregion
|
|
47515
47606
|
//#region src/cli/utils/json-mode.ts
|
|
47516
47607
|
let context = null;
|
|
@@ -47681,7 +47772,9 @@ const buildSentryProjectContext = (projectInfo) => ({
|
|
|
47681
47772
|
reactMajorVersion: projectInfo.reactMajorVersion,
|
|
47682
47773
|
hasTypeScript: projectInfo.hasTypeScript,
|
|
47683
47774
|
hasReactCompiler: projectInfo.hasReactCompiler,
|
|
47684
|
-
|
|
47775
|
+
tanstackQueryVersion: projectInfo.tanstackQueryVersion,
|
|
47776
|
+
mobxVersion: projectInfo.mobxVersion,
|
|
47777
|
+
styledComponentsVersion: projectInfo.styledComponentsVersion,
|
|
47685
47778
|
tailwindVersion: projectInfo.tailwindVersion,
|
|
47686
47779
|
zodVersion: projectInfo.zodVersion,
|
|
47687
47780
|
preactVersion: projectInfo.preactVersion,
|
|
@@ -47862,13 +47955,13 @@ const isDevVersion = (version) => version === "0.0.0" || version.includes("-");
|
|
|
47862
47955
|
* uploads source-map artifacts under, so stack frames symbolicate. Honors the
|
|
47863
47956
|
* standard `SENTRY_RELEASE` override.
|
|
47864
47957
|
*/
|
|
47865
|
-
const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.8.1-dev.
|
|
47958
|
+
const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.8.1-dev.cd9ca68`;
|
|
47866
47959
|
/**
|
|
47867
47960
|
* Deployment environment shown in Sentry's environment filter. Defaults to
|
|
47868
47961
|
* `production` for tagged releases and `development` for dev/unbuilt versions,
|
|
47869
47962
|
* overridable via the standard `SENTRY_ENVIRONMENT` env var.
|
|
47870
47963
|
*/
|
|
47871
|
-
const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.8.1-dev.
|
|
47964
|
+
const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.8.1-dev.cd9ca68") ? "development" : "production");
|
|
47872
47965
|
/**
|
|
47873
47966
|
* Performance-tracing sample rate in `[0, 1]`. Reads `SENTRY_TRACES_SAMPLE_RATE`
|
|
47874
47967
|
* (set to `0` to disable tracing) and falls back to
|
|
@@ -66548,4 +66641,4 @@ Promise.resolve().then(() => assertNoRemovedFlags(process.argv)).then(() => prog
|
|
|
66548
66641
|
export {};
|
|
66549
66642
|
|
|
66550
66643
|
//# sourceMappingURL=cli.js.map
|
|
66551
|
-
//# debugId=
|
|
66644
|
+
//# debugId=434800fc-200b-5a59-aa25-61e682ab57d7
|
package/dist/index.d.ts
CHANGED
|
@@ -9563,6 +9563,9 @@ interface ProjectInfo {
|
|
|
9563
9563
|
hasRemotion?: boolean;
|
|
9564
9564
|
remotionVersion?: string | null;
|
|
9565
9565
|
remotionMajorVersion?: number | null;
|
|
9566
|
+
hasI18nLibrary?: boolean;
|
|
9567
|
+
tanstackQueryVersion?: string | null;
|
|
9568
|
+
styledComponentsVersion?: string | null;
|
|
9566
9569
|
/**
|
|
9567
9570
|
* The declared `valtio` version spec, or `null` when no package in the
|
|
9568
9571
|
* analyzed project declares Valtio. `useSnapshot` has kept the same
|
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]="
|
|
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]="44c11483-7e3b-5388-9124-551e272d5e2d")}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";
|
|
@@ -33375,10 +33375,10 @@ const FALLBACK_TSCONFIG_FILENAMES = ["tsconfig.app.json", "tsconfig.build.json"]
|
|
|
33375
33375
|
const FRAMEWORK_PACKAGES = {
|
|
33376
33376
|
next: "nextjs",
|
|
33377
33377
|
"@tanstack/react-start": "tanstack-start",
|
|
33378
|
-
vite: "vite",
|
|
33379
|
-
"react-scripts": "cra",
|
|
33380
33378
|
"@remix-run/react": "remix",
|
|
33381
33379
|
gatsby: "gatsby",
|
|
33380
|
+
vite: "vite",
|
|
33381
|
+
"react-scripts": "cra",
|
|
33382
33382
|
expo: "expo",
|
|
33383
33383
|
"react-native": "react-native"
|
|
33384
33384
|
};
|
|
@@ -33905,19 +33905,6 @@ const getPreactVersion = (packageJson) => {
|
|
|
33905
33905
|
...packageJson.devDependencies
|
|
33906
33906
|
}.preact ?? null;
|
|
33907
33907
|
};
|
|
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
33908
|
const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, version }) => {
|
|
33922
33909
|
if (version === null || !isCatalogReference(version)) return version;
|
|
33923
33910
|
const catalogName = extractCatalogName(version);
|
|
@@ -34120,6 +34107,55 @@ const listWorkspacePackages = (rootDirectory) => {
|
|
|
34120
34107
|
}
|
|
34121
34108
|
return packages;
|
|
34122
34109
|
};
|
|
34110
|
+
const getPreferredDependencyVersion = ({ packageJson, packageNames }) => {
|
|
34111
|
+
const allDependencies = {
|
|
34112
|
+
...packageJson.devDependencies,
|
|
34113
|
+
...packageJson.peerDependencies,
|
|
34114
|
+
...packageJson.dependencies
|
|
34115
|
+
};
|
|
34116
|
+
for (const packageName of packageNames) {
|
|
34117
|
+
const version = allDependencies[packageName];
|
|
34118
|
+
if (version !== void 0) return version;
|
|
34119
|
+
}
|
|
34120
|
+
return null;
|
|
34121
|
+
};
|
|
34122
|
+
const TANSTACK_REACT_QUERY_PACKAGES = ["@tanstack/react-query", "react-query"];
|
|
34123
|
+
const getTanStackQueryVersion = (packageJson) => {
|
|
34124
|
+
return getPreferredDependencyVersion({
|
|
34125
|
+
packageJson,
|
|
34126
|
+
packageNames: TANSTACK_REACT_QUERY_PACKAGES
|
|
34127
|
+
});
|
|
34128
|
+
};
|
|
34129
|
+
const STYLED_COMPONENTS_PACKAGES = ["styled-components"];
|
|
34130
|
+
const getStyledComponentsVersion = (packageJson) => {
|
|
34131
|
+
return getPreferredDependencyVersion({
|
|
34132
|
+
packageJson,
|
|
34133
|
+
packageNames: STYLED_COMPONENTS_PACKAGES
|
|
34134
|
+
});
|
|
34135
|
+
};
|
|
34136
|
+
const I18N_PACKAGES = [
|
|
34137
|
+
"i18next",
|
|
34138
|
+
"react-i18next",
|
|
34139
|
+
"next-i18next",
|
|
34140
|
+
"react-intl",
|
|
34141
|
+
"next-intl",
|
|
34142
|
+
"use-intl",
|
|
34143
|
+
"@formatjs/intl",
|
|
34144
|
+
"@lingui/core",
|
|
34145
|
+
"@lingui/react",
|
|
34146
|
+
"typesafe-i18n",
|
|
34147
|
+
"@tolgee/react",
|
|
34148
|
+
"react-intl-universal"
|
|
34149
|
+
];
|
|
34150
|
+
const hasI18nDependency = (packageJson) => {
|
|
34151
|
+
const allDependencies = {
|
|
34152
|
+
...packageJson.peerDependencies,
|
|
34153
|
+
...packageJson.dependencies,
|
|
34154
|
+
...packageJson.devDependencies,
|
|
34155
|
+
...packageJson.optionalDependencies
|
|
34156
|
+
};
|
|
34157
|
+
return I18N_PACKAGES.some((packageName) => allDependencies[packageName] !== void 0);
|
|
34158
|
+
};
|
|
34123
34159
|
const REANIMATED_DEPENDENCY_NAME = "react-native-reanimated";
|
|
34124
34160
|
const MOBX_REACT_PACKAGE_NAME = "mobx-react";
|
|
34125
34161
|
const MOBX_REACT_LITE_PACKAGE_NAME = "mobx-react-lite";
|
|
@@ -34154,6 +34190,14 @@ const shouldReplaceSupportedDependencyFact = (currentFact, nextFact, latestSuppo
|
|
|
34154
34190
|
if (nextMajor > latestSupportedMajor) return true;
|
|
34155
34191
|
return nextMajor < currentMajor;
|
|
34156
34192
|
};
|
|
34193
|
+
const shouldReplaceStyledComponentsVersion = (currentVersion, nextVersion) => {
|
|
34194
|
+
if (!currentVersion) return true;
|
|
34195
|
+
const currentMajor = getLowestDependencyMajor(currentVersion);
|
|
34196
|
+
const nextMajor = getLowestDependencyMajor(nextVersion);
|
|
34197
|
+
if (currentMajor === null) return nextMajor !== null && nextMajor < 6;
|
|
34198
|
+
if (nextMajor === null) return currentMajor >= 6;
|
|
34199
|
+
return nextMajor < currentMajor;
|
|
34200
|
+
};
|
|
34157
34201
|
const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, rootPackageJson) => {
|
|
34158
34202
|
if (facts.expo.version === null) {
|
|
34159
34203
|
const spec = getDependencySpec(packageJson, "expo");
|
|
@@ -34214,6 +34258,15 @@ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, roo
|
|
|
34214
34258
|
const spec = getDependencySpec(packageJson, "valtio");
|
|
34215
34259
|
if (spec !== null) facts.valtioVersion = spec;
|
|
34216
34260
|
}
|
|
34261
|
+
facts.tanstackQueryVersion ??= getTanStackQueryVersion(packageJson);
|
|
34262
|
+
const styledComponentsVersion = resolveCatalogBackedDependencyVersion({
|
|
34263
|
+
rootDirectory: directory,
|
|
34264
|
+
rootPackageJson: packageJson,
|
|
34265
|
+
packageName: "styled-components",
|
|
34266
|
+
version: getStyledComponentsVersion(packageJson)
|
|
34267
|
+
});
|
|
34268
|
+
if (styledComponentsVersion && shouldReplaceStyledComponentsVersion(facts.styledComponentsVersion, styledComponentsVersion)) facts.styledComponentsVersion = styledComponentsVersion;
|
|
34269
|
+
facts.hasI18nLibrary = facts.hasI18nLibrary || hasI18nDependency(packageJson);
|
|
34217
34270
|
facts.hasReactNativeAwarePackage = facts.hasReactNativeAwarePackage || isPackageJsonReactNativeAware(packageJson);
|
|
34218
34271
|
facts.hasReanimatedAwarePackage = facts.hasReanimatedAwarePackage || isPackageJsonReanimatedAware(packageJson);
|
|
34219
34272
|
facts.hasSsrDependency = facts.hasSsrDependency || isPackageJsonSsrAware(packageJson);
|
|
@@ -34267,6 +34320,9 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
|
|
|
34267
34320
|
version: null,
|
|
34268
34321
|
sourceDirectory: null
|
|
34269
34322
|
},
|
|
34323
|
+
tanstackQueryVersion: null,
|
|
34324
|
+
styledComponentsVersion: null,
|
|
34325
|
+
hasI18nLibrary: false,
|
|
34270
34326
|
hasReactNativeAwarePackage: false,
|
|
34271
34327
|
hasReanimatedAwarePackage: false,
|
|
34272
34328
|
hasSsrDependency: false,
|
|
@@ -34526,6 +34582,9 @@ const discoverProjectWithoutPackageJson = (directory) => {
|
|
|
34526
34582
|
hasRemotion: false,
|
|
34527
34583
|
remotionVersion: null,
|
|
34528
34584
|
remotionMajorVersion: null,
|
|
34585
|
+
hasI18nLibrary: false,
|
|
34586
|
+
tanstackQueryVersion: null,
|
|
34587
|
+
styledComponentsVersion: null,
|
|
34529
34588
|
hasSsrDependency: false,
|
|
34530
34589
|
preactVersion: null,
|
|
34531
34590
|
preactMajorVersion: null,
|
|
@@ -34652,6 +34711,7 @@ const discoverProject = (directory) => {
|
|
|
34652
34711
|
});
|
|
34653
34712
|
const preactVersion = getPreactVersion(packageJson);
|
|
34654
34713
|
const remotionVersion = workspaceFacts.remotionVersion;
|
|
34714
|
+
const tanstackQueryVersion = getTanStackQueryVersion(packageJson) ?? workspaceFacts.tanstackQueryVersion;
|
|
34655
34715
|
const isPreES2023Target = hasTypeScript && detectPreES2023Target(directory);
|
|
34656
34716
|
const projectInfo = {
|
|
34657
34717
|
rootDirectory: directory,
|
|
@@ -34673,7 +34733,10 @@ const discoverProject = (directory) => {
|
|
|
34673
34733
|
hasTypeScript,
|
|
34674
34734
|
hasReactCompiler: detectReactCompiler(directory, packageJson),
|
|
34675
34735
|
hasReactCompilerLintPlugin: detectReactCompilerLintPlugin(directory, packageJson),
|
|
34676
|
-
hasTanStackQuery:
|
|
34736
|
+
hasTanStackQuery: tanstackQueryVersion !== null,
|
|
34737
|
+
hasI18nLibrary: workspaceFacts.hasI18nLibrary,
|
|
34738
|
+
tanstackQueryVersion,
|
|
34739
|
+
styledComponentsVersion: workspaceFacts.styledComponentsVersion,
|
|
34677
34740
|
valtioVersion,
|
|
34678
34741
|
valtioMajorVersion: valtioVersion === null ? null : getLowestDependencyMajor(valtioVersion),
|
|
34679
34742
|
hasRemotion: workspaceFacts.hasRemotionDependency,
|
|
@@ -37969,6 +38032,7 @@ const buildCapabilities = (project) => {
|
|
|
37969
38032
|
if (CLIENT_ONLY_FRAMEWORKS.has(project.framework)) capabilities.add("client-only");
|
|
37970
38033
|
if (project.isStaticExport) capabilities.add("nextjs:static-export");
|
|
37971
38034
|
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
|
|
38035
|
+
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 16) capabilities.add("nextjs:16");
|
|
37972
38036
|
addMajorLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
|
|
37973
38037
|
if (project.reactMajorVersion !== null && project.reactMajorVersion >= 19 && isMajorMinorAtLeast(parseReactMajorMinor(project.reactVersion), {
|
|
37974
38038
|
major: 19,
|
|
@@ -37992,7 +38056,13 @@ const buildCapabilities = (project) => {
|
|
|
37992
38056
|
if (project.zustandMajorVersion !== void 0 && project.zustandMajorVersion !== null && project.zustandMajorVersion >= 1 && project.zustandMajorVersion <= 5) addMajorLadder(capabilities, "zustand", project.zustandMajorVersion, 1, 5);
|
|
37993
38057
|
if (project.isPreES2023Target) capabilities.add("pre-es2023");
|
|
37994
38058
|
if (project.hasReactCompiler) capabilities.add("react-compiler");
|
|
37995
|
-
if (project.hasTanStackQuery) capabilities.add("tanstack-query");
|
|
38059
|
+
if (Boolean(project.hasTanStackQuery) || Boolean(project.tanstackQueryVersion)) capabilities.add("tanstack-query");
|
|
38060
|
+
if (project.styledComponentsVersion) {
|
|
38061
|
+
capabilities.add("styled-components");
|
|
38062
|
+
const styledComponentsMajor = getLowestDependencyMajor(project.styledComponentsVersion);
|
|
38063
|
+
if (styledComponentsMajor !== null && styledComponentsMajor >= 6) capabilities.add("styled-components:6");
|
|
38064
|
+
}
|
|
38065
|
+
if (project.hasI18nLibrary) capabilities.add("i18n");
|
|
37996
38066
|
if (project.valtioVersion !== null) capabilities.add("valtio");
|
|
37997
38067
|
addMajorLadder(capabilities, "valtio", project.valtioMajorVersion, 1, 10);
|
|
37998
38068
|
if (project.hasRemotion) {
|
|
@@ -40267,6 +40337,19 @@ const createSidecarLintCache = (cacheDirectory, rulesetHash) => {
|
|
|
40267
40337
|
}
|
|
40268
40338
|
};
|
|
40269
40339
|
};
|
|
40340
|
+
const fingerprintCacheByFilePath = /* @__PURE__ */ new Map();
|
|
40341
|
+
const fingerprintFileContents = (filePath, fingerprintLength) => {
|
|
40342
|
+
const fileStats = NFS.statSync(filePath, { bigint: true });
|
|
40343
|
+
const cachedFingerprint = fingerprintCacheByFilePath.get(filePath);
|
|
40344
|
+
if (cachedFingerprint?.modifiedTimeNanoseconds === fileStats.mtimeNs && cachedFingerprint.sizeBytes === fileStats.size) return cachedFingerprint.fingerprint;
|
|
40345
|
+
const fingerprint = crypto.createHash("sha256").update(NFS.readFileSync(filePath)).digest("hex").slice(0, fingerprintLength);
|
|
40346
|
+
fingerprintCacheByFilePath.set(filePath, {
|
|
40347
|
+
fingerprint,
|
|
40348
|
+
modifiedTimeNanoseconds: fileStats.mtimeNs,
|
|
40349
|
+
sizeBytes: fileStats.size
|
|
40350
|
+
});
|
|
40351
|
+
return fingerprint;
|
|
40352
|
+
};
|
|
40270
40353
|
const bundledRequire = createRequire(import.meta.url);
|
|
40271
40354
|
const childNodeVersionByBinaryPath = /* @__PURE__ */ new Map();
|
|
40272
40355
|
const resolveChildNodeVersion = (nodeBinaryPath) => {
|
|
@@ -40290,6 +40373,13 @@ const TOOLCHAIN_PACKAGE_SPECIFIERS = [
|
|
|
40290
40373
|
"oxlint-plugin-react-doctor/package.json",
|
|
40291
40374
|
"eslint-plugin-react-hooks/package.json"
|
|
40292
40375
|
];
|
|
40376
|
+
const resolvePluginFingerprint = () => {
|
|
40377
|
+
try {
|
|
40378
|
+
return fingerprintFileContents(bundledRequire.resolve("oxlint-plugin-react-doctor"), 16);
|
|
40379
|
+
} catch {
|
|
40380
|
+
return "unresolved";
|
|
40381
|
+
}
|
|
40382
|
+
};
|
|
40293
40383
|
const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
|
|
40294
40384
|
const versions = [`node=${resolveChildNodeVersion(nodeBinaryPath)}`];
|
|
40295
40385
|
for (const specifier of TOOLCHAIN_PACKAGE_SPECIFIERS) try {
|
|
@@ -40299,6 +40389,7 @@ const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
|
|
|
40299
40389
|
} catch {
|
|
40300
40390
|
versions.push(`${specifier}=missing`);
|
|
40301
40391
|
}
|
|
40392
|
+
versions.push(`oxlint-plugin-react-doctor#fingerprint=${resolvePluginFingerprint()}`);
|
|
40302
40393
|
return versions;
|
|
40303
40394
|
};
|
|
40304
40395
|
const esmRequire = createRequire(import.meta.url);
|
|
@@ -43982,4 +44073,4 @@ const toJsonReport = (result, options) => buildJsonReport({
|
|
|
43982
44073
|
export { AmbiguousProjectError, NoReactDependencyError, NotADirectoryError, PackageJsonNotFoundError, ProjectNotFoundError, ReactDoctorError, buildJsonReport, buildJsonReportError, clearCaches, defineConfig, diagnose, filterSourceFiles, getDiffInfo, hasReactRuntime, isProjectDiscoveryError, isReactDoctorError, summarizeDiagnostics, toJsonReport };
|
|
43983
44074
|
|
|
43984
44075
|
//# sourceMappingURL=index.js.map
|
|
43985
|
-
//# debugId=
|
|
44076
|
+
//# debugId=44c11483-7e3b-5388-9124-551e272d5e2d
|
package/dist/lsp.js
CHANGED
|
@@ -33427,10 +33427,10 @@ const FALLBACK_TSCONFIG_FILENAMES = ["tsconfig.app.json", "tsconfig.build.json"]
|
|
|
33427
33427
|
const FRAMEWORK_PACKAGES = {
|
|
33428
33428
|
next: "nextjs",
|
|
33429
33429
|
"@tanstack/react-start": "tanstack-start",
|
|
33430
|
-
vite: "vite",
|
|
33431
|
-
"react-scripts": "cra",
|
|
33432
33430
|
"@remix-run/react": "remix",
|
|
33433
33431
|
gatsby: "gatsby",
|
|
33432
|
+
vite: "vite",
|
|
33433
|
+
"react-scripts": "cra",
|
|
33434
33434
|
expo: "expo",
|
|
33435
33435
|
"react-native": "react-native"
|
|
33436
33436
|
};
|
|
@@ -33957,19 +33957,6 @@ const getPreactVersion = (packageJson) => {
|
|
|
33957
33957
|
...packageJson.devDependencies
|
|
33958
33958
|
}.preact ?? null;
|
|
33959
33959
|
};
|
|
33960
|
-
const TANSTACK_QUERY_PACKAGES = new Set([
|
|
33961
|
-
"@tanstack/react-query",
|
|
33962
|
-
"@tanstack/query-core",
|
|
33963
|
-
"react-query"
|
|
33964
|
-
]);
|
|
33965
|
-
const hasTanStackQuery = (packageJson) => {
|
|
33966
|
-
const allDependencies = {
|
|
33967
|
-
...packageJson.peerDependencies,
|
|
33968
|
-
...packageJson.dependencies,
|
|
33969
|
-
...packageJson.devDependencies
|
|
33970
|
-
};
|
|
33971
|
-
return Object.keys(allDependencies).some((packageName) => TANSTACK_QUERY_PACKAGES.has(packageName));
|
|
33972
|
-
};
|
|
33973
33960
|
const resolveCatalogBackedDependencyVersion = ({ rootDirectory, rootPackageJson, packageName, version }) => {
|
|
33974
33961
|
if (version === null || !isCatalogReference(version)) return version;
|
|
33975
33962
|
const catalogName = extractCatalogName(version);
|
|
@@ -34172,6 +34159,55 @@ const listWorkspacePackages = (rootDirectory) => {
|
|
|
34172
34159
|
}
|
|
34173
34160
|
return packages;
|
|
34174
34161
|
};
|
|
34162
|
+
const getPreferredDependencyVersion = ({ packageJson, packageNames }) => {
|
|
34163
|
+
const allDependencies = {
|
|
34164
|
+
...packageJson.devDependencies,
|
|
34165
|
+
...packageJson.peerDependencies,
|
|
34166
|
+
...packageJson.dependencies
|
|
34167
|
+
};
|
|
34168
|
+
for (const packageName of packageNames) {
|
|
34169
|
+
const version = allDependencies[packageName];
|
|
34170
|
+
if (version !== void 0) return version;
|
|
34171
|
+
}
|
|
34172
|
+
return null;
|
|
34173
|
+
};
|
|
34174
|
+
const TANSTACK_REACT_QUERY_PACKAGES = ["@tanstack/react-query", "react-query"];
|
|
34175
|
+
const getTanStackQueryVersion = (packageJson) => {
|
|
34176
|
+
return getPreferredDependencyVersion({
|
|
34177
|
+
packageJson,
|
|
34178
|
+
packageNames: TANSTACK_REACT_QUERY_PACKAGES
|
|
34179
|
+
});
|
|
34180
|
+
};
|
|
34181
|
+
const STYLED_COMPONENTS_PACKAGES = ["styled-components"];
|
|
34182
|
+
const getStyledComponentsVersion = (packageJson) => {
|
|
34183
|
+
return getPreferredDependencyVersion({
|
|
34184
|
+
packageJson,
|
|
34185
|
+
packageNames: STYLED_COMPONENTS_PACKAGES
|
|
34186
|
+
});
|
|
34187
|
+
};
|
|
34188
|
+
const I18N_PACKAGES = [
|
|
34189
|
+
"i18next",
|
|
34190
|
+
"react-i18next",
|
|
34191
|
+
"next-i18next",
|
|
34192
|
+
"react-intl",
|
|
34193
|
+
"next-intl",
|
|
34194
|
+
"use-intl",
|
|
34195
|
+
"@formatjs/intl",
|
|
34196
|
+
"@lingui/core",
|
|
34197
|
+
"@lingui/react",
|
|
34198
|
+
"typesafe-i18n",
|
|
34199
|
+
"@tolgee/react",
|
|
34200
|
+
"react-intl-universal"
|
|
34201
|
+
];
|
|
34202
|
+
const hasI18nDependency = (packageJson) => {
|
|
34203
|
+
const allDependencies = {
|
|
34204
|
+
...packageJson.peerDependencies,
|
|
34205
|
+
...packageJson.dependencies,
|
|
34206
|
+
...packageJson.devDependencies,
|
|
34207
|
+
...packageJson.optionalDependencies
|
|
34208
|
+
};
|
|
34209
|
+
return I18N_PACKAGES.some((packageName) => allDependencies[packageName] !== void 0);
|
|
34210
|
+
};
|
|
34175
34211
|
const REANIMATED_DEPENDENCY_NAME = "react-native-reanimated";
|
|
34176
34212
|
const MOBX_REACT_PACKAGE_NAME = "mobx-react";
|
|
34177
34213
|
const MOBX_REACT_LITE_PACKAGE_NAME = "mobx-react-lite";
|
|
@@ -34206,6 +34242,14 @@ const shouldReplaceSupportedDependencyFact = (currentFact, nextFact, latestSuppo
|
|
|
34206
34242
|
if (nextMajor > latestSupportedMajor) return true;
|
|
34207
34243
|
return nextMajor < currentMajor;
|
|
34208
34244
|
};
|
|
34245
|
+
const shouldReplaceStyledComponentsVersion = (currentVersion, nextVersion) => {
|
|
34246
|
+
if (!currentVersion) return true;
|
|
34247
|
+
const currentMajor = getLowestDependencyMajor(currentVersion);
|
|
34248
|
+
const nextMajor = getLowestDependencyMajor(nextVersion);
|
|
34249
|
+
if (currentMajor === null) return nextMajor !== null && nextMajor < 6;
|
|
34250
|
+
if (nextMajor === null) return currentMajor >= 6;
|
|
34251
|
+
return nextMajor < currentMajor;
|
|
34252
|
+
};
|
|
34209
34253
|
const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, rootPackageJson) => {
|
|
34210
34254
|
if (facts.expo.version === null) {
|
|
34211
34255
|
const spec = getDependencySpec(packageJson, "expo");
|
|
@@ -34266,6 +34310,15 @@ const evaluateManifestFacts = (facts, packageJson, directory, rootDirectory, roo
|
|
|
34266
34310
|
const spec = getDependencySpec(packageJson, "valtio");
|
|
34267
34311
|
if (spec !== null) facts.valtioVersion = spec;
|
|
34268
34312
|
}
|
|
34313
|
+
facts.tanstackQueryVersion ??= getTanStackQueryVersion(packageJson);
|
|
34314
|
+
const styledComponentsVersion = resolveCatalogBackedDependencyVersion({
|
|
34315
|
+
rootDirectory: directory,
|
|
34316
|
+
rootPackageJson: packageJson,
|
|
34317
|
+
packageName: "styled-components",
|
|
34318
|
+
version: getStyledComponentsVersion(packageJson)
|
|
34319
|
+
});
|
|
34320
|
+
if (styledComponentsVersion && shouldReplaceStyledComponentsVersion(facts.styledComponentsVersion, styledComponentsVersion)) facts.styledComponentsVersion = styledComponentsVersion;
|
|
34321
|
+
facts.hasI18nLibrary = facts.hasI18nLibrary || hasI18nDependency(packageJson);
|
|
34269
34322
|
facts.hasReactNativeAwarePackage = facts.hasReactNativeAwarePackage || isPackageJsonReactNativeAware(packageJson);
|
|
34270
34323
|
facts.hasReanimatedAwarePackage = facts.hasReanimatedAwarePackage || isPackageJsonReanimatedAware(packageJson);
|
|
34271
34324
|
facts.hasSsrDependency = facts.hasSsrDependency || isPackageJsonSsrAware(packageJson);
|
|
@@ -34319,6 +34372,9 @@ const collectWorkspaceFacts = (rootDirectory, rootPackageJson, { collectReactGro
|
|
|
34319
34372
|
version: null,
|
|
34320
34373
|
sourceDirectory: null
|
|
34321
34374
|
},
|
|
34375
|
+
tanstackQueryVersion: null,
|
|
34376
|
+
styledComponentsVersion: null,
|
|
34377
|
+
hasI18nLibrary: false,
|
|
34322
34378
|
hasReactNativeAwarePackage: false,
|
|
34323
34379
|
hasReanimatedAwarePackage: false,
|
|
34324
34380
|
hasSsrDependency: false,
|
|
@@ -34578,6 +34634,9 @@ const discoverProjectWithoutPackageJson = (directory) => {
|
|
|
34578
34634
|
hasRemotion: false,
|
|
34579
34635
|
remotionVersion: null,
|
|
34580
34636
|
remotionMajorVersion: null,
|
|
34637
|
+
hasI18nLibrary: false,
|
|
34638
|
+
tanstackQueryVersion: null,
|
|
34639
|
+
styledComponentsVersion: null,
|
|
34581
34640
|
hasSsrDependency: false,
|
|
34582
34641
|
preactVersion: null,
|
|
34583
34642
|
preactMajorVersion: null,
|
|
@@ -34704,6 +34763,7 @@ const discoverProject = (directory) => {
|
|
|
34704
34763
|
});
|
|
34705
34764
|
const preactVersion = getPreactVersion(packageJson);
|
|
34706
34765
|
const remotionVersion = workspaceFacts.remotionVersion;
|
|
34766
|
+
const tanstackQueryVersion = getTanStackQueryVersion(packageJson) ?? workspaceFacts.tanstackQueryVersion;
|
|
34707
34767
|
const isPreES2023Target = hasTypeScript && detectPreES2023Target(directory);
|
|
34708
34768
|
const projectInfo = {
|
|
34709
34769
|
rootDirectory: directory,
|
|
@@ -34725,7 +34785,10 @@ const discoverProject = (directory) => {
|
|
|
34725
34785
|
hasTypeScript,
|
|
34726
34786
|
hasReactCompiler: detectReactCompiler(directory, packageJson),
|
|
34727
34787
|
hasReactCompilerLintPlugin: detectReactCompilerLintPlugin(directory, packageJson),
|
|
34728
|
-
hasTanStackQuery:
|
|
34788
|
+
hasTanStackQuery: tanstackQueryVersion !== null,
|
|
34789
|
+
hasI18nLibrary: workspaceFacts.hasI18nLibrary,
|
|
34790
|
+
tanstackQueryVersion,
|
|
34791
|
+
styledComponentsVersion: workspaceFacts.styledComponentsVersion,
|
|
34729
34792
|
valtioVersion,
|
|
34730
34793
|
valtioMajorVersion: valtioVersion === null ? null : getLowestDependencyMajor(valtioVersion),
|
|
34731
34794
|
hasRemotion: workspaceFacts.hasRemotionDependency,
|
|
@@ -37947,6 +38010,7 @@ const buildCapabilities = (project) => {
|
|
|
37947
38010
|
if (CLIENT_ONLY_FRAMEWORKS.has(project.framework)) capabilities.add("client-only");
|
|
37948
38011
|
if (project.isStaticExport) capabilities.add("nextjs:static-export");
|
|
37949
38012
|
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 15) capabilities.add("nextjs:15");
|
|
38013
|
+
if (project.nextjsMajorVersion !== null && project.nextjsMajorVersion >= 16) capabilities.add("nextjs:16");
|
|
37950
38014
|
addMajorLadder(capabilities, "react", project.reactMajorVersion, 17, 30);
|
|
37951
38015
|
if (project.reactMajorVersion !== null && project.reactMajorVersion >= 19 && isMajorMinorAtLeast(parseReactMajorMinor(project.reactVersion), {
|
|
37952
38016
|
major: 19,
|
|
@@ -37970,7 +38034,13 @@ const buildCapabilities = (project) => {
|
|
|
37970
38034
|
if (project.zustandMajorVersion !== void 0 && project.zustandMajorVersion !== null && project.zustandMajorVersion >= 1 && project.zustandMajorVersion <= 5) addMajorLadder(capabilities, "zustand", project.zustandMajorVersion, 1, 5);
|
|
37971
38035
|
if (project.isPreES2023Target) capabilities.add("pre-es2023");
|
|
37972
38036
|
if (project.hasReactCompiler) capabilities.add("react-compiler");
|
|
37973
|
-
if (project.hasTanStackQuery) capabilities.add("tanstack-query");
|
|
38037
|
+
if (Boolean(project.hasTanStackQuery) || Boolean(project.tanstackQueryVersion)) capabilities.add("tanstack-query");
|
|
38038
|
+
if (project.styledComponentsVersion) {
|
|
38039
|
+
capabilities.add("styled-components");
|
|
38040
|
+
const styledComponentsMajor = getLowestDependencyMajor(project.styledComponentsVersion);
|
|
38041
|
+
if (styledComponentsMajor !== null && styledComponentsMajor >= 6) capabilities.add("styled-components:6");
|
|
38042
|
+
}
|
|
38043
|
+
if (project.hasI18nLibrary) capabilities.add("i18n");
|
|
37974
38044
|
if (project.valtioVersion !== null) capabilities.add("valtio");
|
|
37975
38045
|
addMajorLadder(capabilities, "valtio", project.valtioMajorVersion, 1, 10);
|
|
37976
38046
|
if (project.hasRemotion) {
|
|
@@ -40245,6 +40315,19 @@ const createSidecarLintCache = (cacheDirectory, rulesetHash) => {
|
|
|
40245
40315
|
}
|
|
40246
40316
|
};
|
|
40247
40317
|
};
|
|
40318
|
+
const fingerprintCacheByFilePath = /* @__PURE__ */ new Map();
|
|
40319
|
+
const fingerprintFileContents = (filePath, fingerprintLength) => {
|
|
40320
|
+
const fileStats = NFS.statSync(filePath, { bigint: true });
|
|
40321
|
+
const cachedFingerprint = fingerprintCacheByFilePath.get(filePath);
|
|
40322
|
+
if (cachedFingerprint?.modifiedTimeNanoseconds === fileStats.mtimeNs && cachedFingerprint.sizeBytes === fileStats.size) return cachedFingerprint.fingerprint;
|
|
40323
|
+
const fingerprint = crypto.createHash("sha256").update(NFS.readFileSync(filePath)).digest("hex").slice(0, fingerprintLength);
|
|
40324
|
+
fingerprintCacheByFilePath.set(filePath, {
|
|
40325
|
+
fingerprint,
|
|
40326
|
+
modifiedTimeNanoseconds: fileStats.mtimeNs,
|
|
40327
|
+
sizeBytes: fileStats.size
|
|
40328
|
+
});
|
|
40329
|
+
return fingerprint;
|
|
40330
|
+
};
|
|
40248
40331
|
const bundledRequire = createRequire(import.meta.url);
|
|
40249
40332
|
const childNodeVersionByBinaryPath = /* @__PURE__ */ new Map();
|
|
40250
40333
|
const resolveChildNodeVersion = (nodeBinaryPath) => {
|
|
@@ -40268,6 +40351,13 @@ const TOOLCHAIN_PACKAGE_SPECIFIERS = [
|
|
|
40268
40351
|
"oxlint-plugin-react-doctor/package.json",
|
|
40269
40352
|
"eslint-plugin-react-hooks/package.json"
|
|
40270
40353
|
];
|
|
40354
|
+
const resolvePluginFingerprint = () => {
|
|
40355
|
+
try {
|
|
40356
|
+
return fingerprintFileContents(bundledRequire.resolve("oxlint-plugin-react-doctor"), 16);
|
|
40357
|
+
} catch {
|
|
40358
|
+
return "unresolved";
|
|
40359
|
+
}
|
|
40360
|
+
};
|
|
40271
40361
|
const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
|
|
40272
40362
|
const versions = [`node=${resolveChildNodeVersion(nodeBinaryPath)}`];
|
|
40273
40363
|
for (const specifier of TOOLCHAIN_PACKAGE_SPECIFIERS) try {
|
|
@@ -40277,6 +40367,7 @@ const resolveOxlintToolchainVersions = (nodeBinaryPath = process.execPath) => {
|
|
|
40277
40367
|
} catch {
|
|
40278
40368
|
versions.push(`${specifier}=missing`);
|
|
40279
40369
|
}
|
|
40370
|
+
versions.push(`oxlint-plugin-react-doctor#fingerprint=${resolvePluginFingerprint()}`);
|
|
40280
40371
|
return versions;
|
|
40281
40372
|
};
|
|
40282
40373
|
const esmRequire = createRequire(import.meta.url);
|
|
@@ -45602,5 +45693,5 @@ const startLanguageServer = () => {
|
|
|
45602
45693
|
};
|
|
45603
45694
|
//#endregion
|
|
45604
45695
|
export { startLanguageServer };
|
|
45605
|
-
!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]="
|
|
45606
|
-
//# debugId=
|
|
45696
|
+
!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]="9a23503e-e7cd-5df6-a9fe-39a2baf287bc")}catch(e){}}();
|
|
45697
|
+
//# debugId=9a23503e-e7cd-5df6-a9fe-39a2baf287bc
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-doctor",
|
|
3
|
-
"version": "0.8.1-dev.
|
|
3
|
+
"version": "0.8.1-dev.cd9ca68",
|
|
4
4
|
"description": "Your agent writes bad React. This catches it",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"accessibility",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"vscode-uri": "^3.1.0",
|
|
67
67
|
"yaml": "^2.9.0",
|
|
68
68
|
"deslop-js": "0.8.1",
|
|
69
|
-
"oxlint-plugin-react-doctor": "0.8.1-dev.
|
|
69
|
+
"oxlint-plugin-react-doctor": "0.8.1-dev.cd9ca68"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/babel__code-frame": "^7.27.0",
|
|
@@ -74,9 +74,9 @@
|
|
|
74
74
|
"@xterm/headless": "^6.0.0",
|
|
75
75
|
"commander": "^14.0.3",
|
|
76
76
|
"ora": "^9.4.0",
|
|
77
|
-
"@react-doctor/core": "0.8.1",
|
|
78
77
|
"@react-doctor/api": "0.8.1",
|
|
79
|
-
"@react-doctor/language-server": "0.8.1"
|
|
78
|
+
"@react-doctor/language-server": "0.8.1",
|
|
79
|
+
"@react-doctor/core": "0.8.1"
|
|
80
80
|
},
|
|
81
81
|
"engines": {
|
|
82
82
|
"node": "^20.19.0 || >=22.13.0"
|