From cd314193bc343563be2c587a0e10d64da20a1459 Mon Sep 17 00:00:00 2001 From: voc0der Date: Wed, 25 Feb 2026 16:58:19 -0500 Subject: [PATCH] Migrate to ESLint 10 flat config --- .eslintrc.json | 20 ----------- eslint.config.js | 36 +++++++++++++++++++ package-lock.json | 36 +++++++++++++++++++ package.json | 2 ++ .../components/see-more/see-more.component.ts | 4 +-- src/app/posts.services.ts | 2 +- src/typings.d.ts | 2 +- 7 files changed, 78 insertions(+), 24 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 eslint.config.js diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index c5624c4..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - } -} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..0a28493 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,36 @@ +const js = require('@eslint/js'); +const globals = require('globals'); +const tsPlugin = require('@typescript-eslint/eslint-plugin'); + +const SOURCE_FILES = ['src/**/*.{js,ts}']; +const TS_FILES = ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.mts', 'src/**/*.cts']; + +const scopedTsConfigs = tsPlugin.configs['flat/recommended'].map((config) => ({ + ...config, + files: config.files ? config.files.map((pattern) => `src/${pattern}`) : TS_FILES, +})); + +module.exports = [ + { + ignores: ['node_modules/**', 'dist/**', 'coverage/**'], + linterOptions: { + reportUnusedDisableDirectives: false, + }, + }, + { + files: SOURCE_FILES, + languageOptions: { + ecmaVersion: 2021, + sourceType: 'module', + globals: { + ...globals.browser, + ...globals.es2021, + }, + }, + }, + { + ...js.configs.recommended, + files: SOURCE_FILES, + }, + ...scopedTsConfigs, +]; diff --git a/package-lock.json b/package-lock.json index 5847322..43ffc68 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,7 @@ "@angular/cli": "^21.1.5", "@angular/compiler-cli": "^21.1.5", "@angular/language-service": "^21.1.5", + "@eslint/js": "^10.0.1", "@types/core-js": "^2.5.2", "@types/file-saver": "^2.0.1", "@types/jasmine": "^6.0.0", @@ -52,6 +53,7 @@ "@typescript-eslint/parser": "^8.56.1", "ajv": "^8.18.0", "eslint": "^10.0.2", + "globals": "^17.3.0", "jasmine-core": "~6.1.0", "jasmine-spec-reporter": "~7.0.0", "karma": "~6.4.2", @@ -3800,6 +3802,27 @@ "node": "^20.19.0 || ^22.13.0 || >=24" } }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, "node_modules/@eslint/object-schema": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.2.tgz", @@ -10285,6 +10308,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/globals": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", + "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", diff --git a/package.json b/package.json index 2c071ed..e0f5587 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "@angular/cli": "^21.1.5", "@angular/compiler-cli": "^21.1.5", "@angular/language-service": "^21.1.5", + "@eslint/js": "^10.0.1", "@types/core-js": "^2.5.2", "@types/file-saver": "^2.0.1", "@types/jasmine": "^6.0.0", @@ -64,6 +65,7 @@ "@typescript-eslint/parser": "^8.56.1", "ajv": "^8.18.0", "eslint": "^10.0.2", + "globals": "^17.3.0", "jasmine-core": "~6.1.0", "jasmine-spec-reporter": "~7.0.0", "karma": "~6.4.2", diff --git a/src/app/components/see-more/see-more.component.ts b/src/app/components/see-more/see-more.component.ts index eca48a5..aec0f11 100644 --- a/src/app/components/see-more/see-more.component.ts +++ b/src/app/components/see-more/see-more.component.ts @@ -17,8 +17,8 @@ export class LinkifyPipe implements PipeTransform { private stylize(text: string): string { let stylizedText: string = ''; if (text && text.length > 0) { - for (let line of text.split("\n")) { - for (let t of line.split(" ")) { + for (const line of text.split("\n")) { + for (const t of line.split(" ")) { if (t.startsWith("http") && t.length>7) { stylizedText += `${t} `; } diff --git a/src/app/posts.services.ts b/src/app/posts.services.ts index fc939d2..65e6273 100644 --- a/src/app/posts.services.ts +++ b/src/app/posts.services.ts @@ -391,7 +391,7 @@ export class PostsService { return this.http.post(this.path + 'getAllFiles', body, this.httpOptions); } - updateFile(uid: string, change_obj: Object) { + updateFile(uid: string, change_obj: object) { const body: UpdateFileRequest = {uid: uid, change_obj: change_obj}; return this.http.post(this.path + 'updateFile', body, this.httpOptions); } diff --git a/src/typings.d.ts b/src/typings.d.ts index ef5c7bd..388fb92 100644 --- a/src/typings.d.ts +++ b/src/typings.d.ts @@ -1,5 +1,5 @@ /* SystemJS module definition */ -declare var module: NodeModule; +declare let module: NodeModule; interface NodeModule { id: string; }