Skip to content

Commit 910effd

Browse files
committed
update
1 parent cb70fea commit 910effd

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

packages/eslint-plugin-svelte/src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,10 @@ export interface PartialRuleMetaData {
115115
* If not specified, the rule will be applied to all files.
116116
*/
117117
conditions?: {
118-
svelteVersion?: string; // e.g.: '>= 5.0.0'
118+
svelteVersions?: SvelteContext['svelteVersion'][];
119119
fileTypes?: SvelteContext['fileType'][];
120120
runes?: SvelteContext['runes'];
121-
svelteKitVersion?: string; // e.g.: '>= 1.0.0'
121+
svelteKitVersions?: NonNullable<SvelteContext['svelteKitVersion']>[];
122122
svelteKitFileTypes?: NonNullable<SvelteContext['svelteKitFileType']>[];
123123
}[];
124124
}

packages/eslint-plugin-svelte/src/utils/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import type { RuleModule, PartialRuleModule, PartialRuleMetaData, RuleContext } from '../types.js';
22
import { getSvelteContext, type SvelteContext } from '../utils/svelte-context.js';
3-
import semver from 'semver';
43

54
function satisfiesCondition(
65
condition: NonNullable<PartialRuleMetaData['conditions']>[number],
76
svelteContext: SvelteContext
87
): boolean {
98
if (
10-
condition.svelteVersion != null &&
11-
!semver.satisfies(svelteContext.svelteVersion, condition.svelteVersion)
9+
condition.svelteVersions != null &&
10+
condition.svelteVersions.length > 0 &&
11+
!condition.svelteVersions.includes(svelteContext.svelteVersion)
1212
) {
1313
return false;
1414
}
@@ -25,10 +25,10 @@ function satisfiesCondition(
2525
return false;
2626
}
2727

28-
if (condition.svelteKitVersion != null) {
28+
if (condition.svelteKitVersions != null && condition.svelteKitVersions.length > 0) {
2929
if (
3030
svelteContext.svelteKitVersion == null ||
31-
!semver.satisfies(svelteContext.svelteKitVersion, condition.svelteKitVersion)
31+
!condition.svelteKitVersions.includes(svelteContext.svelteKitVersion)
3232
) {
3333
return false;
3434
}

packages/eslint-plugin-svelte/src/utils/svelte-context.ts

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import path from 'path';
44
import { getPackageJson } from './get-package-json.js';
55
import { getFilename, getSourceCode } from './compat.js';
66

7-
const isRunOnBrowser = !fs.readFileSync;
7+
const isRunInBrowser = !fs.readFileSync;
88

99
export type SvelteContext = {
10-
svelteVersion: string;
10+
svelteVersion: '3/4' | 5;
1111
fileType: '.svelte' | '.svelte.[js|ts]';
1212
runes: boolean;
13-
svelteKitVersion: string | null;
13+
svelteKitVersion: '1-next' | 1 | 2 | null;
1414
svelteKitFileType:
1515
| '+page.svelte'
1616
| '+page.js'
@@ -77,14 +77,14 @@ function getSvelteKitContext(
7777
context: RuleContext
7878
): Pick<SvelteContext, 'svelteKitFileType' | 'svelteKitVersion'> {
7979
const filePath = getFilename(context);
80-
const svelteKitVersion = gteSvelteKitVersion(filePath);
80+
const svelteKitVersion = getSvelteKitVersion(filePath);
8181
if (svelteKitVersion == null) {
8282
return {
8383
svelteKitFileType: null,
8484
svelteKitVersion: null
8585
};
8686
}
87-
if (isRunOnBrowser) {
87+
if (isRunInBrowser) {
8888
return {
8989
svelteKitVersion,
9090
// Judge by only file path if it runs on browser.
@@ -120,32 +120,51 @@ function getSvelteKitContext(
120120
* @param filePath A file path.
121121
* @returns
122122
*/
123-
function gteSvelteKitVersion(filePath: string): string | null {
123+
function getSvelteKitVersion(filePath: string): SvelteContext['svelteKitVersion'] {
124124
// Hack: if it runs on browser, it regards as SvelteKit project.
125-
if (isRunOnBrowser) return '2.15.1';
125+
if (isRunInBrowser) return 2;
126126
try {
127127
const packageJson = getPackageJson(filePath);
128128
if (!packageJson) return null;
129129
if (packageJson.name === 'eslint-plugin-svelte')
130130
// Hack: CI removes `@sveltejs/kit` and it returns false and test failed.
131131
// So always it returns true if it runs on the package.
132-
return '2.15.1';
132+
return 2;
133133

134134
const version =
135135
packageJson.dependencies?.['@sveltejs/kit'] ?? packageJson.devDependencies?.['@sveltejs/kit'];
136-
return typeof version === 'string' ? version : null;
136+
if (typeof version !== 'string') {
137+
return null;
138+
}
139+
if (version.startsWith('1.0.0-next.')) {
140+
return '1-next';
141+
} else if (version.startsWith('1.')) {
142+
return 1;
143+
} else if (version.startsWith('2.')) {
144+
return 2;
145+
}
146+
// If unknown version, it recognize as v2.
147+
return 2;
137148
} catch {
138149
return null;
139150
}
140151
}
141152

153+
function getSvelteVersion(compilerVersion: string): SvelteContext['svelteVersion'] {
154+
const version = parseInt(compilerVersion.split('.')[0], 10);
155+
if (version === 3 || version === 4) {
156+
return '3/4';
157+
}
158+
return 5;
159+
}
160+
142161
/**
143162
* Gets a project root folder path.
144163
* @param filePath A file path to lookup.
145164
* @returns A found project root folder path or null.
146165
*/
147166
function getProjectRootDir(filePath: string): string | null {
148-
if (isRunOnBrowser) return null;
167+
if (isRunInBrowser) return null;
149168
const packageJsonFilePath = getPackageJson(filePath)?.filePath;
150169
if (!packageJsonFilePath) return null;
151170
return path.dirname(path.resolve(packageJsonFilePath));
@@ -173,7 +192,7 @@ export function getSvelteContext(context: RuleContext): SvelteContext | null {
173192
}
174193

175194
return {
176-
svelteVersion: compilerVersion,
195+
svelteVersion: getSvelteVersion(compilerVersion),
177196
runes,
178197
fileType,
179198
svelteKitVersion: svelteKitContext.svelteKitVersion,

0 commit comments

Comments
 (0)