diff --git a/web/eslint.config.mjs b/web/eslint.config.js similarity index 83% rename from web/eslint.config.mjs rename to web/eslint.config.js index f855a99c53..5c24cd1aeb 100644 --- a/web/eslint.config.mjs +++ b/web/eslint.config.js @@ -1,21 +1,16 @@ -import { FlatCompat } from '@eslint/eslintrc'; import js from '@eslint/js'; -import typescriptEslint from '@typescript-eslint/eslint-plugin'; -import tsParser from '@typescript-eslint/parser'; import eslintPluginSvelte from 'eslint-plugin-svelte'; import eslintPluginUnicorn from 'eslint-plugin-unicorn'; import globals from 'globals'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import parser from 'svelte-eslint-parser'; +import typescriptEslint from 'typescript-eslint'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, -}); -export default [ +export default typescriptEslint.config( ...eslintPluginSvelte.configs.recommended, eslintPluginUnicorn.configs.recommended, js.configs.recommended, @@ -33,16 +28,15 @@ export default [ '**/package-lock.json', '**/yarn.lock', '**/svelte.config.js', - 'eslint.config.mjs', + 'eslint.config.js', 'postcss.config.cjs', 'tailwind.config.js', 'coverage', ], }, - ...compat.extends('plugin:@typescript-eslint/recommended'), + typescriptEslint.configs.recommended, { plugins: { - '@typescript-eslint': typescriptEslint, svelte: eslintPluginSvelte, }, @@ -53,7 +47,7 @@ export default [ NodeJS: true, }, - parser: tsParser, + parser: typescriptEslint.parser, ecmaVersion: 2022, sourceType: 'module', @@ -100,8 +94,8 @@ export default [ sourceType: 'script', parserOptions: { - parser: '@typescript-eslint/parser', + parser: typescriptEslint.parser, }, }, }, -]; +); diff --git a/web/package-lock.json b/web/package-lock.json index 889baca943..f0273a6e79 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -53,8 +53,6 @@ "@types/lodash-es": "^4.17.12", "@types/luxon": "^3.4.2", "@types/qrcode": "^1.5.5", - "@typescript-eslint/eslint-plugin": "^8.20.0", - "@typescript-eslint/parser": "^8.20.0", "@vitest/coverage-v8": "^3.0.0", "autoprefixer": "^10.4.17", "dotenv": "^16.4.7", @@ -75,6 +73,7 @@ "tailwindcss": "^3.4.17", "tslib": "^2.6.2", "typescript": "^5.7.3", + "typescript-eslint": "^8.28.0", "vite": "^6.0.0", "vitest": "^3.0.0" } @@ -2582,17 +2581,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.27.0.tgz", - "integrity": "sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz", + "integrity": "sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/type-utils": "8.27.0", - "@typescript-eslint/utils": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/type-utils": "8.28.0", + "@typescript-eslint/utils": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2612,16 +2611,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.27.0.tgz", - "integrity": "sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.28.0.tgz", + "integrity": "sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/typescript-estree": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/typescript-estree": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", "debug": "^4.3.4" }, "engines": { @@ -2637,14 +2636,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.27.0.tgz", - "integrity": "sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz", + "integrity": "sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0" + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2655,14 +2654,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.27.0.tgz", - "integrity": "sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz", + "integrity": "sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.27.0", - "@typescript-eslint/utils": "8.27.0", + "@typescript-eslint/typescript-estree": "8.28.0", + "@typescript-eslint/utils": "8.28.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -2679,9 +2678,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.27.0.tgz", - "integrity": "sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.28.0.tgz", + "integrity": "sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==", "dev": true, "license": "MIT", "engines": { @@ -2693,14 +2692,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.27.0.tgz", - "integrity": "sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz", + "integrity": "sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2746,16 +2745,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.27.0.tgz", - "integrity": "sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.28.0.tgz", + "integrity": "sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/typescript-estree": "8.27.0" + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/typescript-estree": "8.28.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2770,13 +2769,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.27.0.tgz", - "integrity": "sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz", + "integrity": "sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.27.0", + "@typescript-eslint/types": "8.28.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -9462,6 +9461,29 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.28.0.tgz", + "integrity": "sha512-jfZtxJoHm59bvoCMYCe2BM0/baMswRhMmYhy+w6VfcyHrjxZ0OJe0tGasydCpIpA+A/WIJhTyZfb3EtwNC/kHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.28.0", + "@typescript-eslint/parser": "8.28.0", + "@typescript-eslint/utils": "8.28.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/typewise": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", diff --git a/web/package.json b/web/package.json index 8758f98e5f..634d62bafc 100644 --- a/web/package.json +++ b/web/package.json @@ -2,6 +2,7 @@ "name": "immich-web", "version": "1.130.3", "license": "GNU Affero General Public License version 3", + "type": "module", "scripts": { "dev": "vite dev --host 0.0.0.0 --port 3000", "build": "vite build", @@ -22,49 +23,6 @@ "test:watch": "vitest dev", "prepare": "svelte-kit sync" }, - "devDependencies": { - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.18.0", - "@faker-js/faker": "^9.3.0", - "@socket.io/component-emitter": "^3.1.0", - "@sveltejs/adapter-static": "^3.0.8", - "@sveltejs/enhanced-img": "^0.4.4", - "@sveltejs/kit": "^2.15.2", - "@sveltejs/vite-plugin-svelte": "^5.0.3", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/svelte": "^5.2.6", - "@testing-library/user-event": "^14.5.2", - "@types/dom-to-image": "^2.6.7", - "@types/justified-layout": "^4.1.4", - "@types/lodash-es": "^4.17.12", - "@types/luxon": "^3.4.2", - "@types/qrcode": "^1.5.5", - "@typescript-eslint/eslint-plugin": "^8.20.0", - "@typescript-eslint/parser": "^8.20.0", - "@vitest/coverage-v8": "^3.0.0", - "autoprefixer": "^10.4.17", - "dotenv": "^16.4.7", - "eslint": "^9.18.0", - "eslint-config-prettier": "^10.0.0", - "eslint-plugin-svelte": "^3.0.0", - "eslint-plugin-unicorn": "^57.0.0", - "factory.ts": "^1.4.1", - "globals": "^16.0.0", - "postcss": "^8.5.0", - "prettier": "^3.4.2", - "prettier-plugin-organize-imports": "^4.0.0", - "prettier-plugin-sort-json": "^4.1.1", - "prettier-plugin-svelte": "^3.3.3", - "rollup-plugin-visualizer": "^5.14.0", - "svelte": "^5.25.3", - "svelte-check": "^4.1.5", - "tailwindcss": "^3.4.17", - "tslib": "^2.6.2", - "typescript": "^5.7.3", - "vite": "^6.0.0", - "vitest": "^3.0.0" - }, - "type": "module", "dependencies": { "@formatjs/icu-messageformat-parser": "^2.9.8", "@immich/sdk": "file:../open-api/typescript-sdk", @@ -93,6 +51,47 @@ "svelte-maplibre": "^0.9.13", "thumbhash": "^0.1.1" }, + "devDependencies": { + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.18.0", + "@faker-js/faker": "^9.3.0", + "@socket.io/component-emitter": "^3.1.0", + "@sveltejs/adapter-static": "^3.0.8", + "@sveltejs/enhanced-img": "^0.4.4", + "@sveltejs/kit": "^2.15.2", + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/svelte": "^5.2.6", + "@testing-library/user-event": "^14.5.2", + "@types/dom-to-image": "^2.6.7", + "@types/justified-layout": "^4.1.4", + "@types/lodash-es": "^4.17.12", + "@types/luxon": "^3.4.2", + "@types/qrcode": "^1.5.5", + "@vitest/coverage-v8": "^3.0.0", + "autoprefixer": "^10.4.17", + "dotenv": "^16.4.7", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.0", + "eslint-plugin-svelte": "^3.0.0", + "eslint-plugin-unicorn": "^57.0.0", + "factory.ts": "^1.4.1", + "globals": "^16.0.0", + "postcss": "^8.5.0", + "prettier": "^3.4.2", + "prettier-plugin-organize-imports": "^4.0.0", + "prettier-plugin-sort-json": "^4.1.1", + "prettier-plugin-svelte": "^3.3.3", + "rollup-plugin-visualizer": "^5.14.0", + "svelte": "^5.25.3", + "svelte-check": "^4.1.5", + "tailwindcss": "^3.4.17", + "tslib": "^2.6.2", + "typescript": "^5.7.3", + "typescript-eslint": "^8.28.0", + "vite": "^6.0.0", + "vitest": "^3.0.0" + }, "volta": { "node": "22.14.0" }