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 {RuleTester} from 'eslint';
class VitestRuleTester extends RuleTester {
static describe = describe;
static it = it;
static itOnly = it.only;
}
const ruleTester = new VitestRuleTester();
const ruleTester = new RuleTester();
ruleTester.run('unescaped-html-literal', rule, {
valid: [
+2 -1
View File
@@ -10,7 +10,7 @@
"${configDir}/web_src/js/**/.*",
],
"compilerOptions": {
"target": "es2020",
"target": "es2022",
"module": "esnext",
"moduleResolution": "bundler",
"lib": ["dom", "esnext", "webworker"],
@@ -26,6 +26,7 @@
"libReplacement": false,
"noEmit": true,
"noFallthroughCasesInSwitch": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noUncheckedSideEffectImports": true,
"noPropertyAccessFromIndexSignature": false,
+1 -1
View File
@@ -61,7 +61,7 @@ function commonViteOpts({build, ...other}: InlineConfig): InlineConfig {
outDir,
emptyOutDir: false,
sourcemap: enableSourcemap !== 'false',
target: 'es2020',
target: 'es2022',
minify: isProduction ? 'oxc' : false,
cssMinify: isProduction ? 'esbuild' : false,
chunkSizeWarningLimit: Infinity,
+2 -2
View File
@@ -319,11 +319,11 @@ class RelativeTime extends HTMLElement {
return undefined;
}
get prefix(): string {
override get prefix(): string {
return this.getAttribute('prefix') ?? (this.format === 'datetime' ? '' : 'on');
}
set prefix(v: string) {
override set prefix(v: string) {
this.setAttribute('prefix', v);
}