chore(frontend): target ES2022 (#39420)

Bump the TypeScript and Vite targets from ES2020 to ES2022. The frontend
already calls ES2022 APIs like `Object.hasOwn` and `Array.prototype.at`
without polyfills, so downleveling class syntax only added helpers. JS
output shrinks by 36 KB.

The only new syntax-level requirement is Safari 16.4 for mermaid, which
ships class static blocks. Pale Moon supports all emitted syntax since
32.2.

The ES2022 target implies `useDefineForClassFields`, so
`noImplicitOverride` is enabled to flag class fields that shadow
inherited DOM properties.
This commit is contained in:
silverwind
2026-09-25 05:56:07 +00:00
committed by GitHub
parent 722e52334a
commit 455f30a7b6
4 changed files with 6 additions and 11 deletions
@@ -4,13 +4,7 @@
import rule from './unescaped-html-literal.ts'; import rule from './unescaped-html-literal.ts';
import {RuleTester} from 'eslint'; import {RuleTester} from 'eslint';
class VitestRuleTester extends RuleTester { const ruleTester = new RuleTester();
static describe = describe;
static it = it;
static itOnly = it.only;
}
const ruleTester = new VitestRuleTester();
ruleTester.run('unescaped-html-literal', rule, { ruleTester.run('unescaped-html-literal', rule, {
valid: [ valid: [
+2 -1
View File
@@ -10,7 +10,7 @@
"${configDir}/web_src/js/**/.*", "${configDir}/web_src/js/**/.*",
], ],
"compilerOptions": { "compilerOptions": {
"target": "es2020", "target": "es2022",
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"lib": ["dom", "esnext", "webworker"], "lib": ["dom", "esnext", "webworker"],
@@ -26,6 +26,7 @@
"libReplacement": false, "libReplacement": false,
"noEmit": true, "noEmit": true,
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"noImplicitOverride": true,
"noImplicitReturns": true, "noImplicitReturns": true,
"noUncheckedSideEffectImports": true, "noUncheckedSideEffectImports": true,
"noPropertyAccessFromIndexSignature": false, "noPropertyAccessFromIndexSignature": false,
+1 -1
View File
@@ -61,7 +61,7 @@ function commonViteOpts({build, ...other}: InlineConfig): InlineConfig {
outDir, outDir,
emptyOutDir: false, emptyOutDir: false,
sourcemap: enableSourcemap !== 'false', sourcemap: enableSourcemap !== 'false',
target: 'es2020', target: 'es2022',
minify: isProduction ? 'oxc' : false, minify: isProduction ? 'oxc' : false,
cssMinify: isProduction ? 'esbuild' : false, cssMinify: isProduction ? 'esbuild' : false,
chunkSizeWarningLimit: Infinity, chunkSizeWarningLimit: Infinity,
+2 -2
View File
@@ -319,11 +319,11 @@ class RelativeTime extends HTMLElement {
return undefined; return undefined;
} }
get prefix(): string { override get prefix(): string {
return this.getAttribute('prefix') ?? (this.format === 'datetime' ? '' : 'on'); return this.getAttribute('prefix') ?? (this.format === 'datetime' ? '' : 'on');
} }
set prefix(v: string) { override set prefix(v: string) {
this.setAttribute('prefix', v); this.setAttribute('prefix', v);
} }