diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index c3906966..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "root": true, - "ignorePatterns": "**/*.js", - "overrides": [ - { - "files": "*.ts", - "parserOptions": { - "project": [ - "./projects/angular-ecmascript-intl/tsconfig.lib.json", - "./projects/angular-ecmascript-intl/tsconfig.spec.json", - "./projects/angular-intl-demo/tsconfig.app.json" - ] - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/strict-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked", - "plugin:@angular-eslint/recommended", - "plugin:@angular-eslint/template/process-inline-templates", - "plugin:deprecation/recommended", - "prettier" - ], - "rules": { - "@typescript-eslint/no-extraneous-class": "off", - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": "error", - "@typescript-eslint/prefer-literal-enum-member": "off", - "comma-dangle": ["error", "always-multiline"] - } - }, - { - "files": "*.html", - "extends": ["plugin:@angular-eslint/template/recommended"], - "rules": { - "@angular-eslint/template/prefer-control-flow": "error" - } - } - ] -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..671662c5 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,68 @@ +import angularEslintPlugin from "@angular-eslint/eslint-plugin"; +import angularEslintPluginTemplate from "@angular-eslint/eslint-plugin-template"; +import angularEslintTemplateParser from "@angular-eslint/template-parser"; +import js from "@eslint/js"; +import prettier from "eslint-config-prettier"; +import deprecation from "eslint-plugin-deprecation"; +import globals from "globals"; +import tseslint from "typescript-eslint"; + +export default [ + js.configs.recommended, + { ignores: ["dist/", ".angular/", "**/*.js"] }, + { + files: ["**/*.ts"], + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: [ + "./projects/angular-ecmascript-intl/tsconfig.lib.json", + "./projects/angular-ecmascript-intl/tsconfig.spec.json", + "./projects/angular-intl-demo/tsconfig.app.json", + ], + }, + globals: { + ...globals.browser, + }, + }, + plugins: { + "@typescript-eslint": tseslint.plugin, + deprecation, + "@angular-eslint": angularEslintPlugin, + }, + processor: angularEslintPluginTemplate.processors["extract-inline-html"], + rules: { + ...tseslint.configs.strictTypeChecked.rules, + ...tseslint.configs.stylisticTypeChecked.rules, + ...angularEslintPlugin.configs.recommended.rules, + "@typescript-eslint/no-extraneous-class": "off", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/prefer-literal-enum-member": "off", + "deprecation/deprecation": "error", + "@angular-eslint/prefer-standalone-component": "error", + }, + }, + { + files: ["**/*.spec.ts"], + languageOptions: { + globals: { + ...globals.jasmine, + }, + }, + }, + { + files: ["**/*.html"], + plugins: { + "@angular-eslint/template": angularEslintPluginTemplate, + }, + languageOptions: { + parser: angularEslintTemplateParser, + }, + rules: { + ...angularEslintPluginTemplate.configs.recommended.rules, + "@angular-eslint/template/prefer-control-flow": "error", + }, + }, + prettier, +]; diff --git a/package-lock.json b/package-lock.json index 81f8a4ea..8c66fa1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,14 +35,14 @@ "@angular-eslint/template-parser": "^17.0.0", "@angular/cli": "~17.3.0", "@angular/compiler-cli": "~17.3.0", + "@eslint/js": "^9.2.0", "@types/jasmine": "~5.1.0", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", "cpy-cli": "^5.0.0", "dayjs": "^1.11.7", "eslint": "^8.53.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-deprecation": "^2.0.0", + "globals": "^15.1.0", "jasmine-core": "~5.1.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", @@ -54,7 +54,8 @@ "ng-packagr": "~17.3.0", "prettier": "~3.2.0", "prettier-plugin-organize-imports": "^3.2.3", - "typescript": "~5.4.0" + "typescript": "~5.4.0", + "typescript-eslint": "^7.0.0" } }, "node_modules/@ampproject/remapping": { @@ -1683,6 +1684,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", @@ -2545,6 +2555,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", @@ -3088,12 +3107,12 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.2.0.tgz", + "integrity": "sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/config-array": { @@ -8999,6 +9018,15 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -10012,12 +10040,15 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.1.0.tgz", + "integrity": "sha512-926gJqg+4mkxwYKiFvoomM4J0kWESfk3qfTvRL2/oc/tK/eTDBbrfcKnSa2KtfdxB5onoL7D3A3qIHQFpd4+UA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby": { @@ -16560,6 +16591,57 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.8.0.tgz", + "integrity": "sha512-sheFG+/D8N/L7gC3WT0Q8sB97Nm573Yfr+vZFzl/4nBdYcmviBPtwGSX9TJ7wpVg28ocerKVOt+k2eGmHzcgVA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.8.0", + "@typescript-eslint/parser": "7.8.0", + "@typescript-eslint/utils": "7.8.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, "node_modules/ua-parser-js": { "version": "0.7.37", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz", diff --git a/package.json b/package.json index e9a6fb2c..9007c4e2 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build-app": "ng build angular-intl-demo", "watch": "ng build --watch --configuration development", "test": "ng test --code-coverage=true", - "lint": "eslint --ignore-path=.gitignore .", + "lint": "eslint .", "release": "release-it", "prettier": "prettier . --write" }, @@ -42,14 +42,14 @@ "@angular-eslint/template-parser": "^17.0.0", "@angular/cli": "~17.3.0", "@angular/compiler-cli": "~17.3.0", + "@eslint/js": "^9.2.0", "@types/jasmine": "~5.1.0", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", "cpy-cli": "^5.0.0", "dayjs": "^1.11.7", "eslint": "^8.53.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-deprecation": "^2.0.0", + "globals": "^15.1.0", "jasmine-core": "~5.1.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", @@ -61,6 +61,7 @@ "ng-packagr": "~17.3.0", "prettier": "~3.2.0", "prettier-plugin-organize-imports": "^3.2.3", - "typescript": "~5.4.0" + "typescript": "~5.4.0", + "typescript-eslint": "^7.0.0" } }