From 44d51144405c8214a7bde621b2e103cea4d45b0d Mon Sep 17 00:00:00 2001 From: eti Date: Thu, 3 Sep 2026 00:38:54 +0200 Subject: [PATCH] web: forbid relative imports in the route tree Signed-off-by: eti --- web/eslint.config.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/web/eslint.config.js b/web/eslint.config.js index 384672f0a..2f2f03afc 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -20,6 +20,11 @@ const relative = { message: "import through $lib, not a relative path." }; +const relativeRoute = { + group: ["./*", "../*", "!./$types", "!./+*", "!../app.css"], + message: "import through $lib or $routes, not a relative path." +}; + export default defineConfig( { ignores: ["src/lib/api/lexicons/"] }, includeIgnoreFile(gitignorePath), @@ -77,11 +82,24 @@ export default defineConfig( // them and ship sample data, which is how the notifications page got its // mock feed files: ["**/*.svelte", "**/*.svelte.ts", "**/*.svelte.js", "**/*.ts", "**/*.js"], - ignores: ["**/*.stories.svelte", "src/lib/**"], + ignores: ["**/*.stories.svelte", "src/lib/**", "src/routes/**"], rules: { "no-restricted-imports": ["error", { patterns: [fixtures] }] } }, + { + files: ["src/routes/**"], + ignores: ["**/*.stories.svelte"], + rules: { + "no-restricted-imports": ["error", { patterns: [fixtures, relativeRoute] }] + } + }, + { + files: ["src/routes/**/*.stories.svelte"], + rules: { + "no-restricted-imports": ["error", { patterns: [relativeRoute] }] + } + }, { files: ["src/lib/**"], ignores: ["**/*.stories.svelte"], -- 2.51.2