diff --git a/lint/src/rules/html/themed-component-usages.ts b/lint/src/rules/html/themed-component-usages.ts index 0b9a13456a6..e907285dbca 100644 --- a/lint/src/rules/html/themed-component-usages.ts +++ b/lint/src/rules/html/themed-component-usages.ts @@ -7,10 +7,8 @@ */ import { TmplAstElement } from '@angular-eslint/bundled-angular-compiler'; import { TemplateParserServices } from '@angular-eslint/utils'; -import { - ESLintUtils, - TSESLint, -} from '@typescript-eslint/utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; +import { RuleContext } from '@typescript-eslint/utils/ts-eslint'; import { fixture } from '../../../test/fixture'; import { @@ -52,7 +50,7 @@ The only exception to this rule are unit tests, where we may want to use the bas export const rule = ESLintUtils.RuleCreator.withoutDocs({ ...info, - create(context: TSESLint.RuleContext) { + create(context: RuleContext) { if (getFilename(context).includes('.spec.ts')) { // skip inline templates in unit tests return {}; diff --git a/lint/src/rules/ts/themed-component-classes.ts b/lint/src/rules/ts/themed-component-classes.ts index 66c37395b4c..527655adfa4 100644 --- a/lint/src/rules/ts/themed-component-classes.ts +++ b/lint/src/rules/ts/themed-component-classes.ts @@ -7,9 +7,9 @@ */ import { ESLintUtils, - TSESLint, TSESTree, } from '@typescript-eslint/utils'; +import { RuleContext } from '@typescript-eslint/utils/ts-eslint'; import { fixture } from '../../../test/fixture'; import { @@ -57,7 +57,7 @@ export const info = { export const rule = ESLintUtils.RuleCreator.withoutDocs({ ...info, - create(context: TSESLint.RuleContext) { + create(context: RuleContext) { const filename = getFilename(context); if (filename.endsWith('.spec.ts')) { diff --git a/lint/src/rules/ts/themed-component-selectors.ts b/lint/src/rules/ts/themed-component-selectors.ts index e06f5ababf6..c27fd66d662 100644 --- a/lint/src/rules/ts/themed-component-selectors.ts +++ b/lint/src/rules/ts/themed-component-selectors.ts @@ -7,9 +7,9 @@ */ import { ESLintUtils, - TSESLint, TSESTree, } from '@typescript-eslint/utils'; +import { RuleContext } from '@typescript-eslint/utils/ts-eslint'; import { fixture } from '../../../test/fixture'; import { getComponentSelectorNode } from '../../util/angular'; @@ -58,7 +58,7 @@ Unit tests are exempt from this rule, because they may redefine components using export const rule = ESLintUtils.RuleCreator.withoutDocs({ ...info, - create(context: TSESLint.RuleContext) { + create(context: RuleContext) { const filename = getFilename(context); if (filename.endsWith('.spec.ts')) { diff --git a/lint/src/rules/ts/themed-component-usages.ts b/lint/src/rules/ts/themed-component-usages.ts index 96e9962ccf7..83fe6f8ea89 100644 --- a/lint/src/rules/ts/themed-component-usages.ts +++ b/lint/src/rules/ts/themed-component-usages.ts @@ -7,9 +7,9 @@ */ import { ESLintUtils, - TSESLint, TSESTree, } from '@typescript-eslint/utils'; +import { RuleContext } from '@typescript-eslint/utils/ts-eslint'; import { fixture } from '../../../test/fixture'; import { @@ -68,7 +68,7 @@ There are a few exceptions where the base class can still be used: export const rule = ESLintUtils.RuleCreator.withoutDocs({ ...info, - create(context: TSESLint.RuleContext) { + create(context: RuleContext) { const filename = getFilename(context); function handleUnthemedUsagesInTypescript(node: TSESTree.Identifier) { diff --git a/lint/src/util/structure.ts b/lint/src/util/structure.ts index bfbf7ec7f27..13b2ef322b7 100644 --- a/lint/src/util/structure.ts +++ b/lint/src/util/structure.ts @@ -5,13 +5,17 @@ * * http://www.dspace.org/license/ */ -import { TSESLint } from '@typescript-eslint/utils'; -import { RuleTester } from 'eslint'; +import { + InvalidTestCase, + RuleMetaData, + RuleModule, + ValidTestCase, +} from '@typescript-eslint/utils/ts-eslint'; import { EnumType } from 'typescript'; -export type Meta = TSESLint.RuleMetaData; -export type Valid = TSESLint.ValidTestCase | RuleTester.ValidTestCase; -export type Invalid = TSESLint.InvalidTestCase | RuleTester.InvalidTestCase; +export type Meta = RuleMetaData; +export type Valid = ValidTestCase; +export type Invalid = InvalidTestCase; export interface DSpaceESLintRuleInfo { name: string; @@ -28,7 +32,7 @@ export interface NamedTests { export interface RuleExports { Message: EnumType, info: DSpaceESLintRuleInfo, - rule: TSESLint.RuleModule, + rule: RuleModule, tests: NamedTests, default: unknown, } diff --git a/lint/src/util/typescript.ts b/lint/src/util/typescript.ts index 3fecad270e6..0d04ef1a3d9 100644 --- a/lint/src/util/typescript.ts +++ b/lint/src/util/typescript.ts @@ -5,17 +5,18 @@ * * http://www.dspace.org/license/ */ +import { TSESTree } from '@typescript-eslint/utils'; import { - TSESLint, - TSESTree, -} from '@typescript-eslint/utils'; + RuleContext, + SourceCode, +} from '@typescript-eslint/utils/ts-eslint'; import { match, toUnixStylePath, } from './misc'; -export type AnyRuleContext = TSESLint.RuleContext; +export type AnyRuleContext = RuleContext; /** * Return the current filename based on the ESLint rule context as a Unix-style path. @@ -27,7 +28,7 @@ export function getFilename(context: AnyRuleContext): string { return toUnixStylePath(context.getFilename()); } -export function getSourceCode(context: AnyRuleContext): TSESLint.SourceCode { +export function getSourceCode(context: AnyRuleContext): SourceCode { // TSESLint claims this is deprecated, but the suggested alternative is undefined (could be a version mismatch between ESLint and TSESlint?) // eslint-disable-next-line deprecation/deprecation return context.getSourceCode(); diff --git a/lint/test/testing.ts b/lint/test/testing.ts index cfa54c5b85c..53faf320699 100644 --- a/lint/test/testing.ts +++ b/lint/test/testing.ts @@ -7,7 +7,7 @@ */ import { RuleTester as TypeScriptRuleTester } from '@typescript-eslint/rule-tester'; -import { RuleTester } from 'eslint'; +import { RuleTester } from '@typescript-eslint/utils/ts-eslint'; import { themeableComponents } from '../src/util/theme-support'; import { diff --git a/package.json b/package.json index 9dba94a096b..3c73bfe72d3 100644 --- a/package.json +++ b/package.json @@ -213,7 +213,7 @@ "sass-resources-loader": "^2.2.5", "ts-node": "^8.10.2", "typescript": "~5.3.3", - "webpack": "5.90.3", + "webpack": "5.94.0", "webpack-bundle-analyzer": "^4.8.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^4.15.1" diff --git a/webpack/webpack.common.ts b/webpack/webpack.common.ts index 8d433edf393..d8155288cb4 100644 --- a/webpack/webpack.common.ts +++ b/webpack/webpack.common.ts @@ -79,6 +79,7 @@ const SCSS_LOADERS = [ export const commonExports = { plugins: [ + // @ts-expect-error: EnvironmentPlugin constructor types are currently to strict see issue https://github.com/webpack/webpack/issues/18719 new EnvironmentPlugin({ languageHashes: getFileHashes(path.join(__dirname, '..', 'src', 'assets', 'i18n'), /.*\.json5/g), }), diff --git a/webpack/webpack.prod.ts b/webpack/webpack.prod.ts index 559b7f1dc71..fce321d1520 100644 --- a/webpack/webpack.prod.ts +++ b/webpack/webpack.prod.ts @@ -1,16 +1,17 @@ -import { commonExports } from './webpack.common'; -import { projectRoot } from './helpers'; +import { EnvironmentPlugin } from 'webpack'; -const webpack = require('webpack'); +import { projectRoot } from './helpers'; +import { commonExports } from './webpack.common'; module.exports = Object.assign({}, commonExports, { plugins: [ ...commonExports.plugins, - new webpack.EnvironmentPlugin({ + // @ts-expect-error: EnvironmentPlugin constructor types are currently to strict see issue https://github.com/webpack/webpack/issues/18719 + new EnvironmentPlugin({ 'process.env': { - NODE_ENV: JSON.stringify('production'), - AOT: true - } + NODE_ENV: 'production', + AOT: true, + }, }), ], mode: 'production', diff --git a/yarn.lock b/yarn.lock index bd5a524f7f4..a6a2854c67d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -123,7 +123,7 @@ undici "6.7.1" vite "5.1.5" watchpack "2.4.0" - webpack "5.90.3" + webpack "5.94.0" webpack-dev-middleware "6.1.1" webpack-dev-server "4.15.1" webpack-merge "5.10.0" @@ -194,7 +194,7 @@ undici "6.11.1" vite "5.1.7" watchpack "2.4.0" - webpack "5.90.3" + webpack "5.94.0" webpack-dev-middleware "6.1.2" webpack-dev-server "4.15.1" webpack-merge "5.10.0" @@ -2726,23 +2726,7 @@ resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.5.tgz#49d738257cc73bafe45c13cb8ff240683b4d5117" integrity sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg== -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.56.5" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.5.tgz#94b88cab77588fcecdd0771a6d576fa1c0af9d02" - integrity sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.5": +"@types/estree@1.0.5", "@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== @@ -2802,7 +2786,7 @@ resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -3307,7 +3291,7 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz#8b840305a6b48e8764803435ec0c716fa27d3802" integrity sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A== -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.11.5": +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== @@ -3373,7 +3357,7 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@^1.11.5": +"@webassemblyjs/wasm-edit@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== @@ -3408,7 +3392,7 @@ "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.11.5": +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== @@ -3491,10 +3475,10 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -5348,10 +5332,10 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.11.0" -enhanced-resolve@^5.15.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" - integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== +enhanced-resolve@^5.17.1: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -5647,9 +5631,11 @@ eslint-plugin-deprecation@^1.4.1: "eslint-plugin-dspace-angular-html@link:./lint/dist/src/rules/html": version "0.0.0" + uid "" "eslint-plugin-dspace-angular-ts@link:./lint/dist/src/rules/ts": version "0.0.0" + uid "" eslint-plugin-import-newlines@^1.3.1: version "1.4.0" @@ -6545,7 +6531,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -11863,10 +11849,10 @@ watchpack@2.4.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -watchpack@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" - integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -12095,26 +12081,25 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" -webpack@5.90.3: - version "5.90.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.3.tgz#37b8f74d3ded061ba789bb22b31e82eed75bd9ac" - integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA== +webpack@5.94.0: + version "5.94.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" + integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== dependencies: - "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.9.0" + acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" + enhanced-resolve "^5.17.1" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" @@ -12122,7 +12107,7 @@ webpack@5.90.3: schema-utils "^3.2.0" tapable "^2.1.1" terser-webpack-plugin "^5.3.10" - watchpack "^2.4.0" + watchpack "^2.4.1" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: