transone-cli 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -1
- package/dist/build-mp-skmdzgyc.js +2574 -0
- package/dist/build-mp-skmdzgyc.js.map +22 -0
- package/dist/cli.js +1 -1
- package/dist/create.d.ts +2 -2
- package/dist/{index-30n2h2ep.js → index-m62p34v6.js} +175 -18
- package/dist/index-m62p34v6.js.map +23 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/mp/analyze.d.ts +15 -0
- package/dist/mp/binding.d.ts +21 -0
- package/dist/mp/build-mp.d.ts +7 -0
- package/dist/mp/compile.d.ts +13 -0
- package/dist/mp/dialect.d.ts +49 -0
- package/dist/mp/errors.d.ts +6 -0
- package/dist/mp/fold.d.ts +15 -0
- package/dist/mp/jsgen.d.ts +8 -0
- package/dist/mp/methods.d.ts +14 -0
- package/dist/mp/state.d.ts +6 -0
- package/dist/mp/styles.d.ts +15 -0
- package/dist/mp/ts-loader.d.ts +6 -0
- package/dist/mp/types.d.ts +62 -0
- package/dist/mp/wxml.d.ts +29 -0
- package/dist/project-ybacfze8.js.map +1 -1
- package/dist/project.d.ts +1 -1
- package/dist/target/mp-target.d.ts +24 -0
- package/dist/target/registry.d.ts +2 -2
- package/dist/types.d.ts +44 -0
- package/package.json +3 -2
- package/dist/index-30n2h2ep.js.map +0 -21
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type * as tsTypes from 'typescript';
|
|
2
|
+
/** 绑定表达式求值作用域:each 参数名 + render 内局部 const。 */
|
|
3
|
+
export interface BindingScope {
|
|
4
|
+
params: Set<string>;
|
|
5
|
+
locals: Map<string, tsTypes.Expression>;
|
|
6
|
+
/** 模块级 const(name -> 初始化表达式)。 */
|
|
7
|
+
consts: Map<string, tsTypes.Expression>;
|
|
8
|
+
}
|
|
9
|
+
export interface BindingContext {
|
|
10
|
+
ts: typeof tsTypes;
|
|
11
|
+
scope: BindingScope;
|
|
12
|
+
filePath: string;
|
|
13
|
+
/** 组件模板中访问 this.props.X 时回调,用于收集 properties 声明。 */
|
|
14
|
+
onProp?: (name: string) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 把 TypeScript 表达式转换为 WXML 数据绑定表达式({{...}} 内的部分)。
|
|
18
|
+
* 支持:this.state / this.props 路径、字面量、三元、二元、each 参数、
|
|
19
|
+
* render 局部 const、可折叠的模块级 const。
|
|
20
|
+
*/
|
|
21
|
+
export declare function toBinding(context: BindingContext, node: tsTypes.Node): string;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ResolvedConfig, BuildResult } from '../types';
|
|
2
|
+
import type { MpDialect } from './dialect';
|
|
3
|
+
/**
|
|
4
|
+
* 把 TSone 应用编译为小程序原生工程(微信 / 阿里 / 字节,差异见 MpDialect):
|
|
5
|
+
* app.json / app.js / <appStyleFile> / 工程配置 + pages/<route>/<name>.* + components/<tag>/<tag>.*
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildMiniProgram(config: ResolvedConfig, dialect: MpDialect): Promise<BuildResult>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ClassSource, CompiledUnit, CompileContext, UnitKind } from './types';
|
|
2
|
+
export interface UnitOptions {
|
|
3
|
+
kind: UnitKind;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 编译一个页面或自定义组件单元。组件会被缓存(按 kebab 标签名),
|
|
8
|
+
* 并通过 usedComponents 递归编译依赖的组件。
|
|
9
|
+
*/
|
|
10
|
+
export declare function compileUnit(context: CompileContext, classSource: ClassSource, options: UnitOptions): CompiledUnit;
|
|
11
|
+
/** 编译全部页面后,聚合调用点属性与模板 props 引用,生成组件 properties。 */
|
|
12
|
+
export declare function finalizeComponentProperties(context: CompileContext): void;
|
|
13
|
+
export declare function componentTag(className: string): string;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ResolvedMiniProgramConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* 跨端差异层:同一套 mp 编译器(AST 静态分析 → WXML 系模板 / WXSS 系样式 /
|
|
4
|
+
* Page/Component JS)通过 MpDialect 描述各小程序平台的产物差异。
|
|
5
|
+
*
|
|
6
|
+
* 平台差异点(positioning 9.M3「沉淀跨端差异层」):
|
|
7
|
+
* - 模板文件后缀:.wxml / .axml / .ttml
|
|
8
|
+
* - 样式文件后缀与 app 样式文件名:.wxss / .acss / .ttss
|
|
9
|
+
* - 模板指令前缀:wx: / a: / tt:
|
|
10
|
+
* - 事件绑定写法:bindtap / onTap / bindtap
|
|
11
|
+
* - 工程配置文件与字段:project.config.json / mini.project.json / project.config.json
|
|
12
|
+
* - app.json 的 window 字段名(navigationBarTitleText vs defaultTitle)与顶层差异
|
|
13
|
+
* - 组件 json(微信 multipleSlots;阿里 / 字节无需)
|
|
14
|
+
* - 是否生成 sitemap.json(微信特有)
|
|
15
|
+
*/
|
|
16
|
+
export interface MpDialect {
|
|
17
|
+
/** 目标端标识,与 TargetType 一致。 */
|
|
18
|
+
id: string;
|
|
19
|
+
/** 人类可读描述。 */
|
|
20
|
+
label: string;
|
|
21
|
+
/** 模板文件后缀(不含点)。 */
|
|
22
|
+
templateExt: string;
|
|
23
|
+
/** 样式文件后缀(不含点)。 */
|
|
24
|
+
styleExt: string;
|
|
25
|
+
/** 全局样式文件名(app.wxss / app.acss / app.ttss)。 */
|
|
26
|
+
appStyleFile: string;
|
|
27
|
+
/** 模板指令前缀(wx: / a: / tt:)。 */
|
|
28
|
+
directivePrefix: string;
|
|
29
|
+
/** 普通事件绑定:bindtap / onTap / bindtap。 */
|
|
30
|
+
bindEvent: (eventName: string) => string;
|
|
31
|
+
/** 阻止冒泡事件绑定:catchtap / catchTap / catchtap。 */
|
|
32
|
+
catchEvent: (eventName: string) => string;
|
|
33
|
+
/** 工程配置文件文件名(project.config.json / mini.project.json)。 */
|
|
34
|
+
projectConfigFile: string;
|
|
35
|
+
/** 工程配置文件内容。 */
|
|
36
|
+
buildProjectConfig: (mp: ResolvedMiniProgramConfig, projectName: string) => Record<string, unknown>;
|
|
37
|
+
/** app.json.window 的默认字段(平台字段名映射)。 */
|
|
38
|
+
windowDefaults: (title: string) => Record<string, unknown>;
|
|
39
|
+
/** app.json 顶层额外字段(微信的 style / sitemapLocation)。 */
|
|
40
|
+
appJsonExtras: () => Record<string, unknown>;
|
|
41
|
+
/** 是否生成 sitemap.json(微信特有)。 */
|
|
42
|
+
sitemap: boolean;
|
|
43
|
+
/** 自定义组件 json 的固定字段。 */
|
|
44
|
+
componentJson: (usingComponents: Record<string, string>) => Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
export declare const MP_WEIXIN_DIALECT: MpDialect;
|
|
47
|
+
export declare const MP_ALIPAY_DIALECT: MpDialect;
|
|
48
|
+
export declare const MP_BYTEDANCE_DIALECT: MpDialect;
|
|
49
|
+
export declare const MP_DIALECTS: Record<string, MpDialect>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type * as tsTypes from 'typescript';
|
|
2
|
+
export type FoldedValue = string | number | boolean | null | FoldedValue[] | {
|
|
3
|
+
[key: string]: FoldedValue;
|
|
4
|
+
};
|
|
5
|
+
/** 收集源文件顶层 const 声明(name -> 初始化表达式)。 */
|
|
6
|
+
export declare function collectModuleConsts(ts: typeof tsTypes, source: tsTypes.SourceFile): Map<string, tsTypes.Expression>;
|
|
7
|
+
/**
|
|
8
|
+
* 常量折叠:把可静态求值的表达式折叠为 JSON 值。
|
|
9
|
+
* 无法求值时返回 undefined(调用方决定如何报错)。
|
|
10
|
+
*/
|
|
11
|
+
export declare function foldExpression(ts: typeof tsTypes, node: tsTypes.Node, consts: Map<string, tsTypes.Expression>, seen?: Set<string>): FoldedValue | undefined;
|
|
12
|
+
export declare function propertyNameText(ts: typeof tsTypes, name: tsTypes.PropertyName): string | undefined;
|
|
13
|
+
export declare function unwrapParentheses<T extends tsTypes.Node>(ts: typeof tsTypes, node: T): T;
|
|
14
|
+
/** this 表达式判断(TypeScript API 未导出 isThisExpression)。 */
|
|
15
|
+
export declare function isThisExpression(ts: typeof tsTypes, node: tsTypes.Node): node is tsTypes.ThisExpression;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CompiledUnit, PropertyTypes } from './types';
|
|
2
|
+
import type { MpDialect } from './dialect';
|
|
3
|
+
/** 生成页面 JS:Page({ data, methods, lifecycle })(CommonJS)。 */
|
|
4
|
+
export declare function generatePageJs(unit: CompiledUnit, dialect: MpDialect): string;
|
|
5
|
+
/** 生成自定义组件 JS:Component({ properties, data, methods, lifetimes })。 */
|
|
6
|
+
export declare function generateComponentJs(unit: CompiledUnit, dialect: MpDialect): string;
|
|
7
|
+
/** 生成 properties 对象源码:{ title: { type: String, value: '' } }。 */
|
|
8
|
+
export declare function generatePropertiesSource(properties: PropertyTypes): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ClassSource, CompileContext, FunctionEntry, UnitKind } from './types';
|
|
2
|
+
export interface CompiledMethods {
|
|
3
|
+
methods: FunctionEntry[];
|
|
4
|
+
lifecycle: FunctionEntry[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 编译事件方法与小程序的 data 语义桥:
|
|
8
|
+
* - this.state.x -> this.data.x
|
|
9
|
+
* - this.setState(obj) -> this.setData(obj)
|
|
10
|
+
* - this.state.a.b = expr / += -> this.setData({ 'a.b': expr })
|
|
11
|
+
* - 组件内 this.emit('name', args) -> this.triggerEvent('name', { args })
|
|
12
|
+
* - 方法体中的模块常量原地折叠为字面量
|
|
13
|
+
*/
|
|
14
|
+
export declare function compileMethods(context: CompileContext, classSource: ClassSource, usedNames: Set<string>, kind: UnitKind, customEvents: Set<string>): CompiledMethods;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ClassSource, CompileContext } from './types';
|
|
2
|
+
export interface CompiledStyles {
|
|
3
|
+
/** 本单元作用域内的 WXSS(class 等选择器)。 */
|
|
4
|
+
style: string;
|
|
5
|
+
/** 全局样式(body 选择器,页面单元会合并进 app.wxss)。 */
|
|
6
|
+
global: string;
|
|
7
|
+
/** 存在 hover 样式的选择器(如 '.card'),模板据此生成 hover-class。 */
|
|
8
|
+
hoverSelectors: Set<string>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 编译 initStyles():只支持
|
|
12
|
+
* `this.styleManager.addStyle('name', { selector, properties, media, hover })`
|
|
13
|
+
* 字面量调用;body 选择器归入全局样式(小程序用 page 选择器)。
|
|
14
|
+
*/
|
|
15
|
+
export declare function compileStyles(context: CompileContext, classSource: ClassSource): CompiledStyles;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type * as tsTypes from 'typescript';
|
|
2
|
+
import type { MpDialect } from './dialect';
|
|
3
|
+
export type UnitKind = 'page' | 'component';
|
|
4
|
+
/** 一个 Component 子类的定位信息:文件 + 类声明。 */
|
|
5
|
+
export interface ClassSource {
|
|
6
|
+
filePath: string;
|
|
7
|
+
source: tsTypes.SourceFile;
|
|
8
|
+
declaration: tsTypes.ClassLikeDeclaration;
|
|
9
|
+
className: string;
|
|
10
|
+
}
|
|
11
|
+
/** 编译生成的函数条目(页面/组件方法或生命周期钩子)。 */
|
|
12
|
+
export interface FunctionEntry {
|
|
13
|
+
key: string;
|
|
14
|
+
fn: string;
|
|
15
|
+
}
|
|
16
|
+
/** 组件属性定义:propName -> WeChat 属性类型(String/Number/...)。 */
|
|
17
|
+
export type PropertyTypes = Record<string, string>;
|
|
18
|
+
/** 编译产物单元:一个页面或一个自定义组件。 */
|
|
19
|
+
export interface CompiledUnit {
|
|
20
|
+
kind: UnitKind;
|
|
21
|
+
/** 页面为路由叶名(如 index),组件为 kebab-case 标签名。 */
|
|
22
|
+
name: string;
|
|
23
|
+
/** WXML 模板源码。 */
|
|
24
|
+
template: string;
|
|
25
|
+
/** 本单元作用域内的 WXSS(class 选择器)。 */
|
|
26
|
+
style: string;
|
|
27
|
+
/** 全局样式(body 选择器,页面单元会合并进 app.wxss)。 */
|
|
28
|
+
globalStyle: string;
|
|
29
|
+
/** data 初始值 JS 源码(对象字面量)。 */
|
|
30
|
+
data: string;
|
|
31
|
+
/** 自定义组件 properties(页面为空对象)。 */
|
|
32
|
+
properties: PropertyTypes;
|
|
33
|
+
/** 页面/组件 methods 条目(不含生命周期钩子)。 */
|
|
34
|
+
methods: FunctionEntry[];
|
|
35
|
+
/** 页面级生命周期(onLoad/onReady/onUnload)或组件 lifetimes。 */
|
|
36
|
+
lifecycle: FunctionEntry[];
|
|
37
|
+
/** 组件通过 triggerEvent 暴露的自定义事件名。 */
|
|
38
|
+
customEvents: string[];
|
|
39
|
+
/** 模板中引用到的 props 名(finalize 时并入 properties)。 */
|
|
40
|
+
propsReferenced: Set<string>;
|
|
41
|
+
/** usingComponents:tag -> 小程序绝对路径。 */
|
|
42
|
+
usingComponents: Record<string, string>;
|
|
43
|
+
}
|
|
44
|
+
/** 编译过程中的上下文:跨模块共享的文件缓存与产物缓存。 */
|
|
45
|
+
export interface CompileContext {
|
|
46
|
+
ts: typeof tsTypes;
|
|
47
|
+
root: string;
|
|
48
|
+
/** 已解析的源文件缓存(绝对路径 -> SourceFile)。 */
|
|
49
|
+
files: Map<string, tsTypes.SourceFile>;
|
|
50
|
+
/** 已编译完成的组件(tag -> unit)。 */
|
|
51
|
+
components: Map<string, CompiledUnit>;
|
|
52
|
+
/** 正在编译的组件 tag,用于检测循环引用。 */
|
|
53
|
+
compiling: Set<string>;
|
|
54
|
+
/** 组件调用点收集:tag -> 各调用点传的属性(name -> 类型)。 */
|
|
55
|
+
callSites: Map<string, Array<Record<string, string>>>;
|
|
56
|
+
/** 样式数字长度单位:'px'(默认)或 'rpx'(数值按 1px=2rpx 换算)。 */
|
|
57
|
+
lengthUnit: 'px' | 'rpx';
|
|
58
|
+
/** 跨端差异层:决定模板指令前缀、事件绑定、文件后缀、工程配置等平台差异。 */
|
|
59
|
+
dialect: MpDialect;
|
|
60
|
+
warnings: string[];
|
|
61
|
+
}
|
|
62
|
+
export declare function warn(context: CompileContext, message: string): void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type * as tsTypes from 'typescript';
|
|
2
|
+
import { ClassSource, CompileContext } from './types';
|
|
3
|
+
/** 一个组件调用点通过 emitters 绑定的自定义事件。 */
|
|
4
|
+
export interface EmitterUsage {
|
|
5
|
+
event: string;
|
|
6
|
+
method: string;
|
|
7
|
+
passArgs: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** 模板编译期间收集的产物信息。 */
|
|
10
|
+
export interface TemplateBuilder {
|
|
11
|
+
/** 模板绑定的事件处理方法名。 */
|
|
12
|
+
handlers: Set<string>;
|
|
13
|
+
/** 用到的自定义组件(tag -> 类来源)。 */
|
|
14
|
+
usedComponents: Map<string, ClassSource>;
|
|
15
|
+
/** 本模板中引用到的 props 名(组件需要声明 properties)。 */
|
|
16
|
+
propsReferenced: Set<string>;
|
|
17
|
+
/** 本模板的组件通过 triggerEvent 触发的事件名。 */
|
|
18
|
+
customEvents: Set<string>;
|
|
19
|
+
/** 父级需要生成的 emitters 包装方法。 */
|
|
20
|
+
emitters: EmitterUsage[];
|
|
21
|
+
}
|
|
22
|
+
export interface CompiledTemplate {
|
|
23
|
+
template: string;
|
|
24
|
+
builder: TemplateBuilder;
|
|
25
|
+
}
|
|
26
|
+
export declare function compileTemplate(context: CompileContext, classSource: ClassSource, _kind: 'page' | 'component', hoverSelectors?: Set<string>): CompiledTemplate;
|
|
27
|
+
declare function kebabCase(name: string): string;
|
|
28
|
+
export declare function findMethod(context: CompileContext, classSource: ClassSource, name: string): tsTypes.MethodDeclaration | undefined;
|
|
29
|
+
export { kebabCase };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"sources": ["../../transone/lib/dom/index.ts", "../src/project.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * 零依赖最小 DOM 实现。\n *\n * 供 SSR(CLI 项目渲染、docs 静态构建)与测试环境使用,\n * 覆盖 TSone 框架与测试实际依赖的 DOM 面(节点树、事件、CSS 选择器、\n * innerHTML 序列化/解析、history/location/localStorage 等)。\n * 仅面向本项目所需场景,不追求完整浏览器兼容。\n */\n\nexport const enum DomNodeType {\n ELEMENT_NODE = 1,\n TEXT_NODE = 3,\n COMMENT_NODE = 8,\n DOCUMENT_NODE = 9,\n DOCUMENT_FRAGMENT_NODE = 11,\n}\n\nexport class DOMException extends Error {\n public readonly code: number;\n\n constructor(message: string, name = 'Error') {\n super(message);\n this.name = name;\n this.code = 0;\n }\n}\n\ntype EventListenerRecord =\n | ((event: Event) => void)\n | { handleEvent(event: Event): void };\n\ninterface ListenerEntry {\n listener: EventListenerRecord;\n capture: boolean;\n once: boolean;\n passive: boolean;\n}\n\n/**\n * EventTarget 基类:addEventListener / removeEventListener / dispatchEvent。\n */\nexport class EventTarget {\n private readonly listenerMap = new Map<string, ListenerEntry[]>();\n\n public addEventListener(\n type: string,\n listener: EventListenerRecord | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!listener) {\n return;\n }\n const capture =\n typeof options === 'boolean' ? options : (options?.capture ?? false);\n const once = typeof options === 'object' ? (options.once ?? false) : false;\n const passive =\n typeof options === 'object' ? (options.passive ?? false) : false;\n let entries = this.listenerMap.get(type);\n if (!entries) {\n entries = [];\n this.listenerMap.set(type, entries);\n }\n if (\n entries.some(\n (entry) => entry.listener === listener && entry.capture === capture\n )\n ) {\n return;\n }\n entries.push({ listener, capture, once, passive });\n }\n\n public removeEventListener(\n type: string,\n listener: EventListenerRecord | null,\n options?: boolean | EventListenerOptions\n ): void {\n if (!listener) {\n return;\n }\n const capture =\n typeof options === 'boolean' ? options : (options?.capture ?? false);\n const entries = this.listenerMap.get(type);\n if (!entries) {\n return;\n }\n const index = entries.findIndex(\n (entry) => entry.listener === listener && entry.capture === capture\n );\n if (index >= 0) {\n entries.splice(index, 1);\n }\n if (entries.length === 0) {\n this.listenerMap.delete(type);\n }\n }\n\n public dispatchEvent(event: Event): boolean {\n if (!(event instanceof Event)) {\n throw new TypeError('dispatchEvent requires an Event instance');\n }\n if (event.dispatched) {\n throw new Error('Event has already been dispatched');\n }\n return dispatchOnTarget(this, event);\n }\n\n /** @internal 返回本节点的监听器。 */\n public getListeners(type: string): ListenerEntry[] {\n return this.listenerMap.get(type) ?? [];\n }\n}\n\nexport class Event {\n public static readonly NONE = 0;\n public static readonly CAPTURING_PHASE = 1;\n public static readonly AT_TARGET = 2;\n public static readonly BUBBLING_PHASE = 3;\n\n public readonly type: string;\n public readonly bubbles: boolean;\n public readonly cancelable: boolean;\n public readonly composed: boolean;\n public target: EventTarget | null = null;\n public currentTarget: EventTarget | null = null;\n public eventPhase = Event.NONE;\n public defaultPrevented = false;\n public readonly isTrusted = false;\n public readonly timeStamp: number;\n public cancelBubble = false;\n\n /** @internal */\n public dispatched = false;\n /** @internal */\n private propagationStopped = false;\n /** @internal */\n private immediateStopped = false;\n /** @internal */\n private canceled = false;\n\n constructor(type: string, init?: EventInit) {\n this.type = type;\n this.bubbles = init?.bubbles ?? false;\n this.cancelable = init?.cancelable ?? false;\n this.composed = init?.composed ?? false;\n this.timeStamp = Date.now();\n }\n\n public preventDefault(): void {\n if (this.cancelable) {\n this.canceled = true;\n this.defaultPrevented = true;\n }\n }\n\n public stopPropagation(): void {\n this.propagationStopped = true;\n this.cancelBubble = true;\n }\n\n public stopImmediatePropagation(): void {\n this.propagationStopped = true;\n this.immediateStopped = true;\n this.cancelBubble = true;\n }\n\n /** @internal */\n public propagationPrevented(): boolean {\n return this.propagationStopped;\n }\n\n /** @internal */\n public immediatePrevented(): boolean {\n return this.immediateStopped;\n }\n\n /** @internal */\n public wasCanceled(): boolean {\n return this.canceled;\n }\n}\n\nexport class CustomEvent<T = unknown> extends Event {\n public readonly detail: T;\n\n constructor(type: string, init?: CustomEventInit<T>) {\n super(type, init);\n this.detail = init?.detail as T;\n }\n}\n\nexport class MouseEvent extends Event {\n public readonly clientX: number;\n public readonly clientY: number;\n public readonly button: number;\n public readonly buttons: number;\n public readonly relatedTarget: unknown;\n\n constructor(type: string, init?: MouseEventInit) {\n super(type, init);\n this.clientX = init?.clientX ?? 0;\n this.clientY = init?.clientY ?? 0;\n this.button = init?.button ?? 0;\n this.buttons = init?.buttons ?? 0;\n this.relatedTarget = init?.relatedTarget ?? null;\n }\n}\n\nexport class KeyboardEvent extends Event {\n public readonly key: string;\n public readonly code: string;\n public readonly shiftKey: boolean;\n public readonly ctrlKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n\n constructor(type: string, init?: KeyboardEventInit) {\n super(type, init);\n this.key = init?.key ?? '';\n this.code = init?.code ?? '';\n this.shiftKey = init?.shiftKey ?? false;\n this.ctrlKey = init?.ctrlKey ?? false;\n this.altKey = init?.altKey ?? false;\n this.metaKey = init?.metaKey ?? false;\n }\n}\n\nfunction invokeListener(listener: ListenerEntry, event: Event): void {\n const record = listener.listener;\n if (typeof record === 'function') {\n record.call(event.currentTarget, event);\n } else {\n record.handleEvent(event);\n }\n}\n\nfunction dispatchOnTarget(target: EventTarget, event: Event): boolean {\n event.dispatched = true;\n event.target = target;\n\n const chain = buildEventPath(target);\n const capturePath = [...chain].reverse();\n const targetIndex = capturePath.length - 1;\n\n event.eventPhase = Event.CAPTURING_PHASE;\n for (let index = 0; index < targetIndex; index += 1) {\n const current = capturePath[index];\n if (event.propagationPrevented()) {\n break;\n }\n event.currentTarget = current;\n runListeners(current, event, true);\n }\n\n if (!event.propagationPrevented()) {\n event.eventPhase = Event.AT_TARGET;\n event.currentTarget = target;\n runListeners(target, event, true);\n if (!event.immediatePrevented()) {\n runListeners(target, event, false);\n }\n }\n\n if (event.bubbles && !event.propagationPrevented()) {\n event.eventPhase = Event.BUBBLING_PHASE;\n for (let index = capturePath.length - 2; index >= 0; index -= 1) {\n const current = capturePath[index];\n if (event.propagationPrevented()) {\n break;\n }\n event.currentTarget = current;\n runListeners(current, event, false);\n }\n }\n\n event.eventPhase = Event.NONE;\n event.currentTarget = null;\n return !event.wasCanceled();\n}\n\nfunction runListeners(\n target: EventTarget,\n event: Event,\n capture: boolean\n): void {\n const listeners = target.getListeners(event.type);\n for (const entry of [...listeners]) {\n if (entry.capture !== capture) {\n continue;\n }\n if (event.immediatePrevented()) {\n break;\n }\n if (entry.once) {\n target.removeEventListener(event.type, entry.listener, {\n capture: entry.capture,\n });\n }\n invokeListener(entry, event);\n }\n}\n\nfunction buildEventPath(target: EventTarget): EventTarget[] {\n const path: EventTarget[] = [];\n let current: EventTarget | null = target;\n while (current) {\n path.push(current);\n const node = current as unknown as Node;\n if (node.nodeType === DomNodeType.DOCUMENT_NODE) {\n const view = (node as Document).defaultView;\n if (view) {\n path.push(view);\n }\n break;\n }\n const parent = node.parentNode;\n if (parent) {\n current = parent;\n continue;\n }\n break;\n }\n return path;\n}\n\nexport class DOMTokenList implements Iterable<string> {\n private readonly element: Element;\n private readonly attributeName: string;\n\n constructor(element: Element, attributeName = 'class') {\n this.element = element;\n this.attributeName = attributeName;\n }\n\n public get length(): number {\n return this.tokens().length;\n }\n\n public get value(): string {\n return this.element.getAttribute(this.attributeName) ?? '';\n }\n\n public set value(value: string) {\n this.setTokens(splitTokens(value));\n }\n\n public item(index: number): string | null {\n return this.tokens()[index] ?? null;\n }\n\n public contains(token: string): boolean {\n return this.tokens().includes(token);\n }\n\n public add(...tokens: string[]): void {\n const current = new Set(this.tokens());\n for (const token of tokens) {\n if (token) {\n current.add(token);\n }\n }\n this.setTokens([...current]);\n }\n\n public remove(...tokens: string[]): void {\n const current = new Set(this.tokens());\n for (const token of tokens) {\n current.delete(token);\n }\n this.setTokens([...current]);\n }\n\n public toggle(token: string, force?: boolean): boolean {\n const current = new Set(this.tokens());\n const shouldAdd = force ?? !current.has(token);\n if (shouldAdd) {\n current.add(token);\n } else {\n current.delete(token);\n }\n this.setTokens([...current]);\n return shouldAdd;\n }\n\n public replace(oldToken: string, newToken: string): boolean {\n const current = this.tokens();\n const index = current.indexOf(oldToken);\n if (index < 0) {\n return false;\n }\n current[index] = newToken;\n this.setTokens(current);\n return true;\n }\n\n public [Symbol.iterator](): Iterator<string> {\n return this.tokens()[Symbol.iterator]();\n }\n\n public forEach(\n callback: (value: string, index: number, list: DOMTokenList) => void\n ): void {\n this.tokens().forEach((value, index) => callback(value, index, this));\n }\n\n public toString(): string {\n return this.value;\n }\n\n private tokens(): string[] {\n return splitTokens(this.element.getAttribute(this.attributeName) ?? '');\n }\n\n private setTokens(tokens: string[]): void {\n const value = tokens.filter(Boolean).join(' ');\n if (value) {\n this.element.setAttribute(this.attributeName, value);\n } else {\n this.element.removeAttribute(this.attributeName);\n }\n }\n}\n\nfunction splitTokens(value: string): string[] {\n return value.trim().split(/\\s+/).filter(Boolean);\n}\n\nfunction normalizeCssProperty(property: string): string {\n return property.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n}\n\ninterface StyleTarget {\n properties: Map<string, { value: string; priority: string }>;\n setProperty(property: string, value: string, priority?: string): void;\n getPropertyValue(property: string): string;\n getPropertyPriority(property: string): string;\n removeProperty(property: string): string;\n item(index: number): string;\n readonly length: number;\n cssText: string;\n}\n\n/**\n * 创建 CSSStyleDeclaration 代理,支持任意 camelCase 属性访问与赋值。\n */\nexport function createStyleDeclaration(): CSSStyleDeclaration {\n const properties = new Map<string, { value: string; priority: string }>();\n\n const target: StyleTarget = {\n properties,\n\n setProperty(property: string, value: string, priority = ''): void {\n const name = normalizeCssProperty(property);\n if (value === '') {\n properties.delete(name);\n } else {\n properties.set(name, { value, priority });\n }\n },\n\n getPropertyValue(property: string): string {\n return properties.get(normalizeCssProperty(property))?.value ?? '';\n },\n\n getPropertyPriority(property: string): string {\n return properties.get(normalizeCssProperty(property))?.priority ?? '';\n },\n\n removeProperty(property: string): string {\n const name = normalizeCssProperty(property);\n const previous = properties.get(name)?.value ?? '';\n properties.delete(name);\n return previous;\n },\n\n item(index: number): string {\n return [...properties.keys()][index] ?? '';\n },\n\n get length(): number {\n return properties.size;\n },\n\n get cssText(): string {\n return [...properties.entries()]\n .map(\n ([name, entry]) =>\n `${name}: ${entry.value}${entry.priority ? ` ${entry.priority}` : ''};`\n )\n .join(' ');\n },\n\n set cssText(value: string) {\n properties.clear();\n for (const declaration of value.split(';')) {\n const trimmed = declaration.trim();\n if (!trimmed) {\n continue;\n }\n const separator = trimmed.indexOf(':');\n if (separator < 0) {\n continue;\n }\n const name = trimmed.slice(0, separator).trim();\n const propertyValue = trimmed.slice(separator + 1).trim();\n if (name) {\n target.setProperty(name, propertyValue);\n }\n }\n },\n };\n\n const handler: ProxyHandler<StyleTarget> = {\n get(t, property, receiver) {\n if (typeof property === 'symbol') {\n return Reflect.get(t, property, receiver);\n }\n if (property in t) {\n const value = Reflect.get(t, property, receiver);\n return typeof value === 'function' ? value.bind(t) : value;\n }\n return t.getPropertyValue(property);\n },\n set(t, property, value, receiver) {\n if (typeof property === 'symbol') {\n return Reflect.set(t, property, value, receiver);\n }\n if (property in t) {\n return Reflect.set(t, property, value, receiver);\n }\n t.setProperty(property, String(value));\n return true;\n },\n has(t, property) {\n if (typeof property === 'symbol') {\n return Reflect.has(t, property);\n }\n if (property in t) {\n return true;\n }\n return t.getPropertyValue(property) !== '';\n },\n ownKeys() {\n return [\n ...Reflect.ownKeys(target),\n ...[...properties.keys()].map((name) => camelCaseProperty(name)),\n ];\n },\n getOwnPropertyDescriptor(t, property) {\n if (typeof property === 'symbol') {\n return Reflect.getOwnPropertyDescriptor(t, property);\n }\n if (property in t) {\n return Reflect.getOwnPropertyDescriptor(t, property);\n }\n const value = t.getPropertyValue(property);\n if (value !== '') {\n return { configurable: true, enumerable: true, writable: true, value };\n }\n return undefined;\n },\n };\n\n return new Proxy(target, handler) as unknown as CSSStyleDeclaration;\n}\n\nfunction camelCaseProperty(property: string): string {\n return property.replace(/-([a-z])/g, (_match, char: string) =>\n char.toUpperCase()\n );\n}\n\n/**\n * 类数组节点列表:支持 .length、.item()、数值索引与迭代。\n */\nexport class NodeList<T extends Node = Node> implements Iterable<T> {\n /** @internal */\n private readonly items: T[];\n\n constructor(items: T[] = []) {\n this.items = items;\n for (let index = 0; index < items.length; index += 1) {\n Object.defineProperty(this, String(index), {\n configurable: true,\n enumerable: true,\n get: () => this.items[index],\n });\n }\n }\n\n public get length(): number {\n return this.items.length;\n }\n\n public item(index: number): T | null {\n return this.items[index] ?? null;\n }\n\n public [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n public forEach(\n callback: (value: T, index: number, list: NodeList<T>) => void\n ): void {\n this.items.forEach((value, index) => callback(value, index, this));\n }\n\n public entries(): IterableIterator<[number, T]> {\n return this.items.entries();\n }\n\n public keys(): IterableIterator<number> {\n return this.items.keys();\n }\n\n public values(): IterableIterator<T> {\n return this.items.values();\n }\n\n public toArray(): T[] {\n return [...this.items];\n }\n}\n\n/**\n * Node 基类:节点树、父子关系、文本内容。\n */\nexport class Node extends EventTarget {\n public static readonly ELEMENT_NODE = DomNodeType.ELEMENT_NODE;\n public static readonly TEXT_NODE = DomNodeType.TEXT_NODE;\n public static readonly COMMENT_NODE = DomNodeType.COMMENT_NODE;\n public static readonly DOCUMENT_NODE = DomNodeType.DOCUMENT_NODE;\n public static readonly DOCUMENT_FRAGMENT_NODE =\n DomNodeType.DOCUMENT_FRAGMENT_NODE;\n\n public readonly nodeType: number;\n public readonly nodeName: string;\n public parentNode: Node | null = null;\n public ownerDocument: Document | null = null;\n\n /** @internal */\n public childList: Node[] = [];\n\n constructor(nodeType: number, nodeName: string) {\n super();\n this.nodeType = nodeType;\n this.nodeName = nodeName;\n }\n\n public get parentElement(): Element | null {\n const parent = this.parentNode;\n return parent instanceof Element ? parent : null;\n }\n\n public get childNodes(): NodeList<Node> {\n return new NodeList([...this.childList]);\n }\n\n public get firstChild(): Node | null {\n return this.childList[0] ?? null;\n }\n\n public get lastChild(): Node | null {\n return this.childList[this.childList.length - 1] ?? null;\n }\n\n public get nextSibling(): Node | null {\n const parent = this.parentNode;\n if (!parent) {\n return null;\n }\n const index = parent.childList.indexOf(this);\n return index >= 0 ? (parent.childList[index + 1] ?? null) : null;\n }\n\n public get previousSibling(): Node | null {\n const parent = this.parentNode;\n if (!parent) {\n return null;\n }\n const index = parent.childList.indexOf(this);\n return index > 0 ? parent.childList[index - 1] : null;\n }\n\n public get textContent(): string {\n let text = '';\n for (const child of this.childList) {\n if (child.nodeType === DomNodeType.TEXT_NODE) {\n text += (child as Text).data;\n } else if (child.nodeType === DomNodeType.ELEMENT_NODE) {\n text += child.textContent;\n }\n }\n return text;\n }\n\n public set textContent(value: string) {\n this.childList = [];\n if (value) {\n const textNode = new Text(value);\n textNode.ownerDocument = this.ownerDocument;\n textNode.parentNode = this;\n this.childList.push(textNode);\n }\n }\n\n public hasChildNodes(): boolean {\n return this.childList.length > 0;\n }\n\n public appendChild<T extends Node>(node: T): T {\n if (node === (this as Node)) {\n throw new Error('Cannot append a node to itself');\n }\n this.insertBefore(node, null);\n return node;\n }\n\n public insertBefore<T extends Node>(node: T, reference: Node | null): T {\n if (node === (this as Node)) {\n throw new Error('Cannot insert a node before itself');\n }\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n node.parentNode = this;\n if (node.ownerDocument === null) {\n node.ownerDocument = this.ownerDocument;\n }\n if (reference === null) {\n this.childList.push(node);\n return node;\n }\n const index = this.childList.indexOf(reference);\n if (index < 0) {\n throw new Error('Reference node is not a child of this node');\n }\n this.childList.splice(index, 0, node);\n return node;\n }\n\n public removeChild<T extends Node>(node: T): T {\n const index = this.childList.indexOf(node);\n if (index < 0) {\n throw new Error('Node is not a child of this node');\n }\n this.childList.splice(index, 1);\n node.parentNode = null;\n return node;\n }\n\n public replaceChild<T extends Node>(newChild: T, oldChild: Node): T {\n const index = this.childList.indexOf(oldChild);\n if (index < 0) {\n throw new Error('Old child is not a child of this node');\n }\n if (newChild.parentNode) {\n newChild.parentNode.removeChild(newChild);\n }\n newChild.parentNode = this;\n if (newChild.ownerDocument === null) {\n newChild.ownerDocument = this.ownerDocument;\n }\n this.childList[index] = newChild;\n oldChild.parentNode = null;\n return newChild;\n }\n\n public replaceChildren(...nodes: Node[]): void {\n for (const child of [...this.childList]) {\n this.removeChild(child);\n }\n for (const node of nodes) {\n this.appendChild(node);\n }\n }\n\n public contains(node: Node | null): boolean {\n if (!node) {\n return false;\n }\n let current: Node | null = node;\n while (current) {\n if (current === this) {\n return true;\n }\n current = current.parentNode;\n }\n return false;\n }\n\n public remove(): void {\n this.parentNode?.removeChild(this);\n }\n\n public cloneNode(deep = false): Node {\n const clone = this.createClone();\n if (deep) {\n for (const child of this.childList) {\n clone.appendChild(child.cloneNode(true) as Node);\n }\n }\n return clone;\n }\n\n /** @internal */\n protected createClone(): Node {\n const clone = new Node(this.nodeType, this.nodeName);\n clone.ownerDocument = this.ownerDocument;\n return clone;\n }\n\n public getRootNode(): Node {\n if (!this.parentNode) {\n return this;\n }\n let parent = this.parentNode;\n while (parent.parentNode) {\n parent = parent.parentNode;\n }\n return parent;\n }\n\n public get isConnected(): boolean {\n return this.getRootNode().nodeType === DomNodeType.DOCUMENT_NODE;\n }\n}\n\n/**\n * Element:标签节点。\n */\nexport class Element extends Node {\n public readonly namespaceURI: string | null;\n\n /** @internal */\n private readonly attributeList: Array<{ name: string; value: string }> = [];\n /** @internal */\n private styleValue: CSSStyleDeclaration | undefined;\n /** @internal */\n private classListValue: DOMTokenList | undefined;\n /** @internal */\n private datasetProxy: Record<string, string> | undefined;\n\n constructor(tagName: string, namespaceURI: string | null = null) {\n super(DomNodeType.ELEMENT_NODE, tagName.toUpperCase());\n this.namespaceURI = namespaceURI;\n }\n\n public get tagName(): string {\n return this.nodeName;\n }\n\n public get localName(): string {\n return this.nodeName.toLowerCase();\n }\n\n public get id(): string {\n return this.getAttribute('id') ?? '';\n }\n\n public set id(value: string) {\n this.setAttribute('id', value);\n }\n\n public get className(): string {\n return this.getAttribute('class') ?? '';\n }\n\n public set className(value: string) {\n this.setAttribute('class', value);\n }\n\n public get classList(): DOMTokenList {\n if (!this.classListValue) {\n this.classListValue = new DOMTokenList(this, 'class');\n }\n return this.classListValue;\n }\n\n public get style(): CSSStyleDeclaration {\n if (!this.styleValue) {\n this.styleValue = createStyleDeclaration();\n }\n return this.styleValue;\n }\n\n public get dataset(): Record<string, string> {\n if (!this.datasetProxy) {\n this.datasetProxy = createDatasetProxy(this);\n }\n return this.datasetProxy;\n }\n\n public get children(): NodeList<Element> {\n return new NodeList(\n this.childList.filter(\n (child): child is Element => child.nodeType === DomNodeType.ELEMENT_NODE\n )\n );\n }\n\n public get firstElementChild(): Element | null {\n return this.children.item(0);\n }\n\n public get lastElementChild(): Element | null {\n return this.children.item(this.children.length - 1);\n }\n\n public get childElementCount(): number {\n return this.children.length;\n }\n\n public get attributes(): NamedNodeMap {\n return new NamedNodeMap(this);\n }\n\n public getAttribute(name: string): string | null {\n const entry = this.findAttribute(name);\n return entry ? entry.value : null;\n }\n\n public getAttributeNames(): string[] {\n return this.attributeList.map((entry) => entry.name);\n }\n\n public setAttribute(name: string, value: unknown): void {\n const stringValue = String(value);\n if (name === 'style') {\n this.styleValue = createStyleDeclaration();\n this.styleValue.cssText = stringValue;\n }\n const entry = this.findAttribute(name);\n if (entry) {\n entry.value = stringValue;\n } else {\n this.attributeList.push({ name, value: stringValue });\n }\n }\n\n public removeAttribute(name: string): void {\n if (name === 'style') {\n this.styleValue = createStyleDeclaration();\n }\n const index = this.attributeList.findIndex((entry) => entry.name === name);\n if (index >= 0) {\n this.attributeList.splice(index, 1);\n }\n }\n\n public hasAttribute(name: string): boolean {\n return this.findAttribute(name) !== undefined;\n }\n\n public toggleAttribute(name: string, force?: boolean): boolean {\n const shouldAdd = force ?? !this.hasAttribute(name);\n if (shouldAdd) {\n this.setAttribute(name, '');\n } else {\n this.removeAttribute(name);\n }\n return shouldAdd;\n }\n\n public hasAttributes(): boolean {\n return this.attributeList.length > 0;\n }\n\n public get innerHTML(): string {\n return serializeChildren(this);\n }\n\n public set innerHTML(value: string) {\n this.replaceChildren(...parseHtmlFragment(value, this.ownerDocument));\n }\n\n public get outerHTML(): string {\n return serializeNode(this);\n }\n\n public get value(): string {\n return this.getAttribute('value') ?? '';\n }\n\n public set value(value: string) {\n this.setAttribute('value', value);\n }\n\n public querySelector(selector: string): Element | null {\n return querySelectorAll(this, selector).item(0);\n }\n\n public querySelectorAll(selector: string): NodeList<Element> {\n return querySelectorAll(this, selector);\n }\n\n public getElementsByTagName(tagName: string): NodeList<Element> {\n const lowered = tagName.toLowerCase();\n const results: Element[] = [];\n collectElements(this, (element) => {\n if (element.localName === lowered) {\n results.push(element);\n }\n });\n return new NodeList(results);\n }\n\n public matches(selector: string): boolean {\n return matchSelector(this, selector);\n }\n\n public closest(selector: string): Element | null {\n if (this.matches(selector)) {\n return this;\n }\n let parent = this.parentElement;\n while (parent) {\n if (parent.matches(selector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n\n public getBoundingClientRect(): DOMRect {\n const view = this.ownerDocument?.defaultView;\n // 无排版引擎时 body/documentElement 的边界即视口,给默认视口尺寸\n const width = view?.innerWidth ?? 1024;\n const height = view?.innerHeight ?? 768;\n const current = this as unknown as HTMLElement;\n const viewport =\n current === this.ownerDocument?.body ||\n current === this.ownerDocument?.documentElement;\n return {\n x: 0,\n y: 0,\n top: 0,\n left: 0,\n right: viewport ? width : 0,\n bottom: viewport ? height : 0,\n width: viewport ? width : 0,\n height: viewport ? height : 0,\n toJSON(): Record<string, number> {\n return {\n x: 0,\n y: 0,\n top: 0,\n left: 0,\n right: viewport ? width : 0,\n bottom: viewport ? height : 0,\n width: viewport ? width : 0,\n height: viewport ? height : 0,\n };\n },\n };\n }\n\n public scrollIntoView(): void {}\n\n public focus(): void {\n this.ownerDocument?.setActiveElement(this);\n }\n\n public blur(): void {\n if (this.ownerDocument?.activeElement === this) {\n this.ownerDocument.setActiveElement(null);\n }\n }\n\n public click(): void {\n // 禁用态表单控件不派发 click(真实浏览器行为)\n const candidate = this as unknown as { disabled?: boolean };\n if (candidate.disabled === true) {\n return;\n }\n this.dispatchEvent(\n new MouseEvent('click', { bubbles: true, cancelable: true })\n );\n // 表单按钮默认行为:type=reset 的按钮点击触发表单 reset 事件\n if (\n this.tagName === 'BUTTON' &&\n this.getAttribute('type') === 'reset' &&\n this.isConnected\n ) {\n this.closest('form')?.dispatchEvent(\n new Event('reset', { bubbles: true, cancelable: true })\n );\n }\n }\n\n public append(...nodes: (Node | string)[]): void {\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n this.appendChild(textNode);\n } else {\n this.appendChild(node);\n }\n }\n }\n\n public prepend(...nodes: (Node | string)[]): void {\n const reference = this.firstChild;\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n this.insertBefore(textNode, reference);\n } else {\n this.insertBefore(node, reference);\n }\n }\n }\n\n public before(...nodes: (Node | string)[]): void {\n const parent = this.parentNode;\n if (!parent) {\n return;\n }\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n parent.insertBefore(textNode, this);\n } else {\n parent.insertBefore(node, this);\n }\n }\n }\n\n public after(...nodes: (Node | string)[]): void {\n const parent = this.parentNode;\n if (!parent) {\n return;\n }\n const reference = this.nextSibling;\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n parent.insertBefore(textNode, reference);\n } else {\n parent.insertBefore(node, reference);\n }\n }\n }\n\n public replaceWith(...nodes: (Node | string)[]): void {\n const parent = this.parentNode;\n if (!parent) {\n return;\n }\n const reference = this.nextSibling;\n parent.removeChild(this);\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new Text(node);\n textNode.ownerDocument = this.ownerDocument;\n parent.insertBefore(textNode, reference);\n } else {\n parent.insertBefore(node, reference);\n }\n }\n }\n\n public setAttributeNS(\n _namespace: string,\n name: string,\n value: unknown\n ): void {\n this.setAttribute(name, value);\n }\n\n public removeAttributeNS(_namespace: string, name: string): void {\n this.removeAttribute(name);\n }\n\n public hasAttributeNS(_namespace: string, name: string): boolean {\n return this.hasAttribute(name);\n }\n\n public getAttributeNS(_namespace: string, name: string): string | null {\n return this.getAttribute(name);\n }\n\n /** @internal */\n public findAttribute(\n name: string\n ): { name: string; value: string } | undefined {\n return this.attributeList.find((entry) => entry.name === name);\n }\n\n /** @internal */\n public attributeEntries(): Array<{ name: string; value: string }> {\n return [...this.attributeList];\n }\n\n /** @internal 供序列化读取内联样式。 */\n public inlineStyleText(): string {\n return this.styleValue?.cssText ?? '';\n }\n\n /** @internal */\n protected createClone(): Node {\n const clone = createElementForTag(this.localName, this.ownerDocument);\n for (const entry of this.attributeList) {\n clone.setAttribute(entry.name, entry.value);\n }\n return clone;\n }\n}\n\nexport class HTMLElement extends Element {\n constructor(tagName: string) {\n super(tagName);\n }\n\n /** 页面语言(属性反射,无值回退空串)。 */\n public get lang(): string {\n return this.getAttribute('lang') ?? '';\n }\n\n public set lang(value: string) {\n this.setAttribute('lang', value);\n }\n\n /** 是否隐藏(布尔属性反射)。 */\n public get hidden(): boolean {\n return this.hasAttribute('hidden');\n }\n\n public set hidden(value: boolean) {\n if (value) {\n this.setAttribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\n }\n }\n\n /** 键盘焦点顺序(数字属性反射;0 表示按文档顺序)。 */\n public get tabIndex(): number {\n const raw = this.getAttribute('tabindex');\n return raw === null ? 0 : Number(raw);\n }\n\n public set tabIndex(value: number) {\n if (value === 0) {\n this.removeAttribute('tabindex');\n } else {\n this.setAttribute('tabindex', String(value));\n }\n }\n\n /** 布局尺寸与偏移;无排版引擎时恒为 0,测试可覆盖 getBoundingClientRect。 */\n public get offsetWidth(): number {\n return 0;\n }\n\n public get offsetHeight(): number {\n return 0;\n }\n\n public get offsetLeft(): number {\n return 0;\n }\n\n public get offsetTop(): number {\n return 0;\n }\n}\n\nexport class NamedNodeMap implements Iterable<{ name: string; value: string }> {\n private readonly element: Element;\n\n constructor(element: Element) {\n this.element = element;\n for (let index = 0; index < element.attributeEntries().length; index += 1) {\n Object.defineProperty(this, String(index), {\n configurable: true,\n enumerable: true,\n get: () => this.element.attributeEntries()[index] ?? null,\n });\n }\n }\n\n public get length(): number {\n return this.element.attributeEntries().length;\n }\n\n public item(index: number): { name: string; value: string } | null {\n return this.element.attributeEntries()[index] ?? null;\n }\n\n public getNamedItem(name: string): { name: string; value: string } | null {\n return this.element.findAttribute(name) ?? null;\n }\n\n public setNamedItem(attr: { name: string; value: string }): void {\n this.element.setAttribute(attr.name, attr.value);\n }\n\n public removeNamedItem(name: string): void {\n this.element.removeAttribute(name);\n }\n\n public [Symbol.iterator](): Iterator<{ name: string; value: string }> {\n return this.element.attributeEntries()[Symbol.iterator]();\n }\n}\n\nexport class HTMLOptionElement extends HTMLElement {\n /** @internal */\n private selectedValue: boolean | undefined;\n\n constructor(tagName = 'option') {\n super(tagName);\n }\n\n public get value(): string {\n return this.getAttribute('value') ?? this.textContent;\n }\n\n public set value(value: string) {\n this.setAttribute('value', value);\n }\n\n public get text(): string {\n return this.textContent;\n }\n\n public get label(): string {\n return this.getAttribute('label') ?? this.textContent;\n }\n\n public get selected(): boolean {\n return this.hasSelectedValue();\n }\n\n public set selected(value: boolean) {\n this.setSelectedRaw(value);\n if (value) {\n const select = this.parentElement;\n if (select instanceof HTMLSelectElement && !select.multiple) {\n for (const option of select.options.toArray()) {\n if (option !== this) {\n option.setSelectedRaw(false);\n }\n }\n }\n }\n }\n\n /** @internal */\n public setSelectedRaw(value: boolean): void {\n this.selectedValue = value;\n if (value) {\n this.setAttribute('selected', '');\n } else {\n this.removeAttribute('selected');\n }\n }\n\n /** @internal */\n public hasSelectedValue(): boolean {\n if (this.selectedValue !== undefined) {\n return this.selectedValue;\n }\n return this.hasAttribute('selected');\n }\n}\n\nexport class HTMLSelectElement extends HTMLElement {\n constructor(tagName = 'select') {\n super(tagName);\n }\n\n public get disabled(): boolean {\n return this.hasAttribute('disabled');\n }\n\n public set disabled(value: boolean) {\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n public get multiple(): boolean {\n return this.hasAttribute('multiple');\n }\n\n public set multiple(value: boolean) {\n if (value) {\n this.setAttribute('multiple', '');\n } else {\n this.removeAttribute('multiple');\n }\n }\n\n public get options(): HTMLOptionsCollection {\n const options: HTMLOptionElement[] = [];\n collectElements(this, (element) => {\n if (element instanceof HTMLOptionElement) {\n options.push(element);\n }\n });\n return new HTMLOptionsCollection(options);\n }\n\n public get selectedOptions(): NodeList<HTMLOptionElement> {\n return new NodeList(\n this.options.toArray().filter((option) => option.hasSelectedValue())\n );\n }\n\n public get selectedIndex(): number {\n return this.options\n .toArray()\n .findIndex((option) => option.hasSelectedValue());\n }\n\n public set selectedIndex(index: number) {\n const options = this.options.toArray();\n options.forEach((option, optionIndex) =>\n option.setSelectedRaw(optionIndex === index)\n );\n }\n\n public get value(): string {\n const options = this.options.toArray();\n const selected = options.find((option) => option.hasSelectedValue());\n if (selected) {\n return selected.value;\n }\n if (!this.multiple && options.length > 0) {\n return options[0].value;\n }\n return '';\n }\n\n public set value(value: string) {\n const options = this.options.toArray();\n for (const option of options) {\n const shouldSelect = option.value === value;\n if (shouldSelect) {\n if (this.multiple) {\n option.setSelectedRaw(true);\n } else {\n for (const other of options) {\n other.setSelectedRaw(other === option);\n }\n return;\n }\n }\n }\n }\n\n public add(option: HTMLOptionElement): void {\n this.appendChild(option);\n }\n\n public removeOption(index: number): void {\n const options = this.options.toArray();\n const option = options[index];\n if (option) {\n option.remove();\n }\n }\n}\n\nexport class HTMLOptionsCollection implements Iterable<HTMLOptionElement> {\n private readonly items: HTMLOptionElement[];\n\n constructor(items: HTMLOptionElement[]) {\n this.items = items;\n for (let index = 0; index < items.length; index += 1) {\n Object.defineProperty(this, String(index), {\n configurable: true,\n enumerable: true,\n get: () => this.items[index],\n });\n }\n }\n\n public get length(): number {\n return this.items.length;\n }\n\n public item(index: number): HTMLOptionElement | null {\n return this.items[index] ?? null;\n }\n\n public get value(): string {\n return this.items.find((option) => option.hasSelectedValue())?.value ?? '';\n }\n\n public get selectedIndex(): number {\n return this.items.findIndex((option) => option.hasSelectedValue());\n }\n\n public toArray(): HTMLOptionElement[] {\n return [...this.items];\n }\n\n public [Symbol.iterator](): Iterator<HTMLOptionElement> {\n return this.items[Symbol.iterator]();\n }\n}\n\nexport class HTMLInputElement extends HTMLElement {\n /** @internal */\n private inputValue: string | undefined;\n /** @internal */\n private checkedValue: boolean | undefined;\n\n constructor(tagName = 'input') {\n super(tagName);\n }\n\n public get type(): string {\n return this.getAttribute('type') ?? 'text';\n }\n\n public set type(value: string) {\n this.setAttribute('type', value);\n }\n\n public get name(): string {\n return this.getAttribute('name') ?? '';\n }\n\n public set name(value: string) {\n this.setAttribute('name', value);\n }\n\n public get value(): string {\n return this.inputValue ?? this.getAttribute('value') ?? '';\n }\n\n public set value(value: string) {\n this.inputValue = value;\n }\n\n public get defaultValue(): string {\n return this.getAttribute('value') ?? '';\n }\n\n public get checked(): boolean {\n return this.checkedValue ?? this.hasAttribute('checked');\n }\n\n public set checked(value: boolean) {\n this.checkedValue = value;\n }\n\n public get disabled(): boolean {\n return this.hasAttribute('disabled');\n }\n\n public set disabled(value: boolean) {\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n public get placeholder(): string {\n return this.getAttribute('placeholder') ?? '';\n }\n\n public set placeholder(value: string) {\n this.setAttribute('placeholder', value);\n }\n\n public get accept(): string {\n return this.getAttribute('accept') ?? '';\n }\n\n public get multiple(): boolean {\n return this.hasAttribute('multiple');\n }\n\n public set multiple(value: boolean) {\n if (value) {\n this.setAttribute('multiple', '');\n } else {\n this.removeAttribute('multiple');\n }\n }\n\n public set accept(value: string) {\n this.setAttribute('accept', value);\n }\n\n public get min(): string {\n return this.getAttribute('min') ?? '';\n }\n\n public set min(value: string) {\n this.setAttribute('min', value);\n }\n\n public get max(): string {\n return this.getAttribute('max') ?? '';\n }\n\n public set max(value: string) {\n this.setAttribute('max', value);\n }\n\n public get step(): string {\n return this.getAttribute('step') ?? '';\n }\n\n public set step(value: string) {\n this.setAttribute('step', value);\n }\n\n /** @internal */\n protected createClone(): Node {\n const clone = super.createClone() as HTMLInputElement;\n clone.inputValue = this.inputValue;\n clone.checkedValue = this.checkedValue;\n return clone;\n }\n}\n\nexport class HTMLTextAreaElement extends HTMLElement {\n /** @internal */\n private textareaValue: string | undefined;\n\n constructor(tagName = 'textarea') {\n super(tagName);\n }\n\n public get value(): string {\n return this.textareaValue ?? this.textContent;\n }\n\n public set value(value: string) {\n this.textareaValue = value;\n }\n\n public get name(): string {\n return this.getAttribute('name') ?? '';\n }\n\n public set name(value: string) {\n this.setAttribute('name', value);\n }\n\n public get disabled(): boolean {\n return this.hasAttribute('disabled');\n }\n\n public set disabled(value: boolean) {\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n public get placeholder(): string {\n return this.getAttribute('placeholder') ?? '';\n }\n\n public set placeholder(value: string) {\n this.setAttribute('placeholder', value);\n }\n}\n\nexport class HTMLButtonElement extends HTMLElement {\n constructor(tagName = 'button') {\n super(tagName);\n }\n\n public get disabled(): boolean {\n return this.hasAttribute('disabled');\n }\n\n public set disabled(value: boolean) {\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n public get type(): string {\n return this.getAttribute('type') ?? 'submit';\n }\n}\n\nexport class HTMLTableCellElement extends HTMLElement {\n constructor(tagName = 'td') {\n super(tagName);\n }\n\n public get colSpan(): number {\n const raw = this.getAttribute('colspan');\n return raw === null ? 1 : Number(raw);\n }\n\n public set colSpan(value: number) {\n this.setAttribute('colspan', String(value));\n }\n}\n\nexport class HTMLLabelElement extends HTMLElement {\n constructor(tagName = 'label') {\n super(tagName);\n }\n\n public get htmlFor(): string {\n return this.getAttribute('for') ?? '';\n }\n\n public set htmlFor(value: string) {\n this.setAttribute('for', value);\n }\n}\n\nexport class HTMLImageElement extends HTMLElement {\n constructor(tagName = 'img') {\n super(tagName);\n }\n\n public get src(): string {\n return this.getAttribute('src') ?? '';\n }\n\n public set src(value: string) {\n this.setAttribute('src', value);\n }\n\n public get alt(): string {\n return this.getAttribute('alt') ?? '';\n }\n\n public set alt(value: string) {\n this.setAttribute('alt', value);\n }\n}\n\nexport class HTMLStyleElement extends HTMLElement {\n constructor(tagName = 'style') {\n super(tagName);\n }\n}\n\nexport class HTMLAnchorElement extends HTMLElement {\n constructor(tagName = 'a') {\n super(tagName);\n }\n\n public get href(): string {\n return this.getAttribute('href') ?? '';\n }\n\n public set href(value: string) {\n this.setAttribute('href', value);\n }\n}\n\nexport class Text extends Node {\n public data: string;\n\n constructor(data = '') {\n super(DomNodeType.TEXT_NODE, '#text');\n this.data = data;\n }\n\n public get nodeValue(): string {\n return this.data;\n }\n\n public set nodeValue(value: string) {\n this.data = value;\n }\n\n public get textContent(): string {\n return this.data;\n }\n\n public set textContent(value: string) {\n this.data = value;\n }\n\n public get wholeText(): string {\n return this.data;\n }\n\n /** @internal */\n protected createClone(): Node {\n const clone = new Text(this.data);\n clone.ownerDocument = this.ownerDocument;\n return clone;\n }\n}\n\nexport class Comment extends Node {\n public data: string;\n\n constructor(data = '') {\n super(DomNodeType.COMMENT_NODE, '#comment');\n this.data = data;\n }\n\n public get nodeValue(): string {\n return this.data;\n }\n\n public set nodeValue(value: string) {\n this.data = value;\n }\n\n /** @internal */\n protected createClone(): Node {\n const clone = new Comment(this.data);\n clone.ownerDocument = this.ownerDocument;\n return clone;\n }\n}\n\nexport class DocumentFragment extends Node {\n constructor() {\n super(DomNodeType.DOCUMENT_FRAGMENT_NODE, '#document-fragment');\n }\n}\n\nexport interface DomDocumentImplementation {\n createHTMLDocument(title?: string): Document;\n createDocument(): Document;\n createDocumentType(): never;\n hasFeature(): boolean;\n}\n\nexport class DomDOMImplementation implements DomDocumentImplementation {\n public createDocument(): Document {\n return new Document();\n }\n\n public createDocumentType(): never {\n throw new Error('createDocumentType is not supported in tsone DOM');\n }\n\n public hasFeature(): boolean {\n return false;\n }\n\n public createHTMLDocument(title?: string): Document {\n const document = new Document();\n const html = document.createElement('html');\n const head = document.createElement('head');\n const body = document.createElement('body');\n if (title) {\n const titleElement = document.createElement('title');\n titleElement.textContent = title;\n head.appendChild(titleElement);\n }\n html.appendChild(head);\n html.appendChild(body);\n document.appendChild(html);\n return document;\n }\n}\n\nexport class Document extends Node {\n public readonly defaultView: DomWindow | null = null;\n\n public readonly implementation: DomDocumentImplementation;\n\n private activeElementRef: Element | null = null;\n\n constructor() {\n super(DomNodeType.DOCUMENT_NODE, '#document');\n this.implementation = new DomDOMImplementation();\n }\n\n public get activeElement(): Element | null {\n return this.activeElementRef;\n }\n\n /** @internal 由 Element.focus()/blur() 维护。 */\n public setActiveElement(element: Element | null): void {\n this.activeElementRef = element;\n }\n\n public createElement(tagName: string): HTMLElement {\n return createElementForTag(tagName, this);\n }\n\n public createElementNS(namespaceURI: string, tagName: string): HTMLElement {\n const element = createElementForTag(tagName, this);\n (element as { namespaceURI: string | null }).namespaceURI = namespaceURI;\n return element;\n }\n\n public createTextNode(data: string): Text {\n const text = new Text(data);\n text.ownerDocument = this;\n return text;\n }\n\n public createComment(data: string): Comment {\n const comment = new Comment(data);\n comment.ownerDocument = this;\n return comment;\n }\n\n public createDocumentFragment(): DocumentFragment {\n const fragment = new DocumentFragment();\n fragment.ownerDocument = this;\n return fragment;\n }\n\n public createEvent(type: string): Event {\n if (type === 'MouseEvent' || type === 'mouseevent') {\n return new MouseEvent('');\n }\n if (type === 'KeyboardEvent' || type === 'keyboardevent') {\n return new KeyboardEvent('');\n }\n if (type === 'CustomEvent' || type === 'customevent') {\n return new CustomEvent('');\n }\n return new Event('');\n }\n\n public get documentElement(): HTMLElement {\n const html = this.childList.find(\n (child) => child.nodeType === DomNodeType.ELEMENT_NODE\n ) as HTMLElement | undefined;\n if (html) {\n return html;\n }\n const created = createElementForTag('html', this);\n this.appendChild(created);\n return created;\n }\n\n public get head(): HTMLElement {\n return this.ensureDocumentChild('head');\n }\n\n public get body(): HTMLElement {\n return this.ensureDocumentChild('body');\n }\n\n public get title(): string {\n const titleElement = this.querySelector('title');\n return titleElement?.textContent ?? '';\n }\n\n public set title(value: string) {\n let titleElement = this.querySelector('title');\n if (!titleElement) {\n titleElement = createElementForTag('title', this);\n this.head.appendChild(titleElement);\n }\n titleElement.textContent = value;\n }\n\n public querySelector(selector: string): Element | null {\n return querySelectorAll(this, selector).item(0);\n }\n\n public querySelectorAll(selector: string): NodeList<Element> {\n return querySelectorAll(this, selector);\n }\n\n public getElementById(id: string): Element | null {\n let result: Element | null = null;\n collectElements(this, (element) => {\n if (!result && element.id === id) {\n result = element;\n }\n });\n return result;\n }\n\n public getElementsByTagName(tagName: string): NodeList<Element> {\n return this.documentElement.getElementsByTagName(tagName);\n }\n\n /** @internal */\n protected createClone(): Node {\n return new Document();\n }\n\n private ensureDocumentChild(tagName: 'head' | 'body'): HTMLElement {\n const documentElement = this.documentElement;\n let child = documentElement.childList.find(\n (node) =>\n node.nodeType === DomNodeType.ELEMENT_NODE &&\n (node as Element).localName === tagName\n ) as HTMLElement | undefined;\n if (!child) {\n child = createElementForTag(tagName, this);\n documentElement.appendChild(child);\n }\n return child;\n }\n}\n\n/**\n * History / Location / Storage 等浏览器环境对象。\n */\nexport class Location {\n /** @internal */\n private url: URL;\n\n constructor(url: string) {\n this.url = new URL(url);\n }\n\n public get href(): string {\n return this.url.href;\n }\n\n public set href(value: string) {\n this.url = new URL(value, this.url.href);\n }\n\n public get origin(): string {\n return this.url.origin;\n }\n\n public get protocol(): string {\n return this.url.protocol;\n }\n\n public get host(): string {\n return this.url.host;\n }\n\n public get hostname(): string {\n return this.url.hostname;\n }\n\n public get port(): string {\n return this.url.port;\n }\n\n public get pathname(): string {\n return this.url.pathname;\n }\n\n public set pathname(value: string) {\n const url = this.url;\n const next = new URL(value, url.href);\n url.pathname = next.pathname;\n }\n\n public get search(): string {\n return this.url.search;\n }\n\n public set search(value: string) {\n this.url.search = value.startsWith('?') ? value : `?${value}`;\n }\n\n public get hash(): string {\n return this.url.hash;\n }\n\n public set hash(value: string) {\n const nextHash = value.startsWith('#') ? value : `#${value}`;\n this.url.hash = nextHash;\n }\n\n public get username(): string {\n return this.url.username;\n }\n\n public get password(): string {\n return this.url.password;\n }\n\n public assign(value: string): void {\n this.url = new URL(value, this.url.href);\n }\n\n public replace(value: string): void {\n this.url = new URL(value, this.url.href);\n }\n\n public reload(): void {}\n\n public toString(): string {\n return this.url.href;\n }\n\n /** @internal */\n public getHashPath(): string {\n return this.url.hash.slice(1);\n }\n\n /** @internal */\n public getHrefWithoutHash(): string {\n const url = this.url;\n return `${url.origin}${url.pathname}${url.search}`;\n }\n}\n\ninterface HistoryEntry {\n state: unknown;\n url: string;\n}\n\nexport class History {\n /** @internal */\n private readonly windowRef: DomWindow;\n /** @internal */\n private entries: HistoryEntry[] = [];\n /** @internal */\n private index = 0;\n /** @internal */\n public scrollRestoration: 'auto' | 'manual' = 'auto';\n\n constructor(windowRef: DomWindow) {\n this.windowRef = windowRef;\n this.entries = [{ state: null, url: windowRef.location.href }];\n }\n\n public get length(): number {\n return this.entries.length;\n }\n\n public get state(): unknown {\n return this.entries[this.index]?.state ?? null;\n }\n\n public pushState(state: unknown, _unusedTitle: string, url?: string): void {\n const nextUrl = url\n ? new URL(url, this.windowRef.location.href).href\n : this.windowRef.location.href;\n this.entries = this.entries.slice(0, this.index + 1);\n this.entries.push({ state, url: nextUrl });\n this.index = this.entries.length - 1;\n this.windowRef.setLocationUrl(nextUrl);\n }\n\n public replaceState(\n state: unknown,\n _unusedTitle: string,\n url?: string\n ): void {\n const nextUrl = url\n ? new URL(url, this.windowRef.location.href).href\n : this.windowRef.location.href;\n this.entries[this.index] = { state, url: nextUrl };\n this.windowRef.setLocationUrl(nextUrl);\n }\n\n public back(): void {\n this.go(-1);\n }\n\n public forward(): void {\n this.go(1);\n }\n\n public go(delta = 0): void {\n const nextIndex = this.index + delta;\n if (nextIndex < 0 || nextIndex >= this.entries.length) {\n return;\n }\n this.index = nextIndex;\n this.windowRef.setLocationUrl(this.entries[nextIndex].url);\n this.windowRef.dispatchEvent(\n new Event('popstate', { bubbles: false, cancelable: false })\n );\n }\n}\n\nexport class Storage {\n private readonly store = new Map<string, string>();\n\n public get length(): number {\n return this.store.size;\n }\n\n public key(index: number): string | null {\n return [...this.store.keys()][index] ?? null;\n }\n\n public getItem(key: string): string | null {\n return this.store.has(key) ? (this.store.get(key) as string) : null;\n }\n\n public setItem(key: string, value: string): void {\n this.store.set(key, String(value));\n }\n\n public removeItem(key: string): void {\n this.store.delete(key);\n }\n\n public clear(): void {\n this.store.clear();\n }\n}\n\nexport class Navigator {\n public readonly userAgent = 'TSone/0.5.1';\n public readonly platform = 'TSone';\n public readonly language = 'zh-CN';\n public readonly languages = ['zh-CN'];\n public readonly onLine = true;\n public readonly maxTouchPoints = 0;\n}\n\nexport interface MediaQueryList {\n readonly media: string;\n readonly matches: boolean;\n onchange: ((event: Event) => void) | null;\n addEventListener(type: string, listener: EventListenerRecord): void;\n removeEventListener(type: string, listener: EventListenerRecord): void;\n addListener(listener: EventListenerRecord): void;\n removeListener(listener: EventListenerRecord): void;\n dispatchEvent(event: Event): boolean;\n}\n\nexport function createMatchMedia(\n _windowRef: DomWindow,\n query: string\n): MediaQueryList {\n const listeners = new Set<EventListenerRecord>();\n const matches = false;\n const list: MediaQueryList = {\n media: query,\n matches,\n onchange: null,\n addEventListener(type, listener) {\n if (type === 'change') {\n listeners.add(listener);\n }\n },\n removeEventListener(type, listener) {\n if (type === 'change') {\n listeners.delete(listener);\n }\n },\n addListener(listener) {\n listeners.add(listener);\n },\n removeListener(listener) {\n listeners.delete(listener);\n },\n dispatchEvent(event) {\n for (const listener of [...listeners]) {\n if (typeof listener === 'function') {\n listener.call(list, event);\n } else {\n listener.handleEvent(event);\n }\n }\n return true;\n },\n };\n return list;\n}\n\nexport class ResizeObserver {\n public observe(): void {}\n public unobserve(): void {}\n public disconnect(): void {}\n}\n\nexport const DOM_GLOBAL_KEYS: readonly string[] = [\n 'window',\n 'document',\n 'Node',\n 'Text',\n 'Comment',\n 'Element',\n 'HTMLElement',\n 'HTMLInputElement',\n 'HTMLTextAreaElement',\n 'HTMLSelectElement',\n 'HTMLButtonElement',\n 'HTMLOptionElement',\n 'HTMLStyleElement',\n 'HTMLAnchorElement',\n 'HTMLImageElement',\n 'HTMLTableCellElement',\n 'HTMLLabelElement',\n 'DocumentFragment',\n 'Document',\n 'Event',\n 'MouseEvent',\n 'KeyboardEvent',\n 'CustomEvent',\n 'EventTarget',\n 'DOMException',\n 'history',\n 'location',\n 'navigator',\n 'localStorage',\n 'matchMedia',\n 'getComputedStyle',\n 'requestAnimationFrame',\n 'cancelAnimationFrame',\n 'ResizeObserver',\n];\n\n/**\n * DomWindow:模拟的浏览器 window 环境。\n */\nexport class DomWindow extends EventTarget {\n public readonly innerWidth = 1024;\n public readonly innerHeight = 768;\n\n public setTimeout(\n handler: () => void,\n timeout?: number\n ): ReturnType<typeof setTimeout> {\n return setTimeout(handler, timeout);\n }\n\n public clearTimeout(id: ReturnType<typeof setTimeout>): void {\n clearTimeout(id);\n }\n public readonly window: DomWindow = this;\n public readonly document: Document;\n public readonly location: Location;\n public readonly history: History;\n public readonly localStorage = new Storage();\n public readonly navigator = new Navigator();\n public readonly Node = Node;\n public readonly Text = Text;\n public readonly Comment = Comment;\n public readonly Element = Element;\n public readonly HTMLElement = HTMLElement;\n public readonly HTMLInputElement = HTMLInputElement;\n public readonly HTMLTextAreaElement = HTMLTextAreaElement;\n public readonly HTMLSelectElement = HTMLSelectElement;\n public readonly HTMLButtonElement = HTMLButtonElement;\n public readonly HTMLOptionElement = HTMLOptionElement;\n public readonly HTMLStyleElement = HTMLStyleElement;\n public readonly HTMLAnchorElement = HTMLAnchorElement;\n public readonly DocumentFragment = DocumentFragment;\n public readonly Document = Document;\n public readonly Event = Event;\n public readonly MouseEvent = MouseEvent;\n public readonly KeyboardEvent = KeyboardEvent;\n public readonly CustomEvent = CustomEvent;\n public readonly EventTarget = EventTarget;\n public readonly DOMException = DOMException;\n public readonly NodeList = NodeList;\n\n constructor(options: { url?: string } = {}) {\n super();\n const url = options.url ?? 'http://localhost/';\n this.location = new Location(url);\n this.history = new History(this);\n this.document = new Document();\n (this.document as { defaultView: DomWindow | null }).defaultView = this;\n setupDocumentTree(this.document);\n }\n\n public matchMedia(query: string): MediaQueryList {\n return createMatchMedia(this, query);\n }\n\n public getComputedStyle(element: Element): CSSStyleDeclaration {\n return element.style;\n }\n\n public requestAnimationFrame(callback: FrameRequestCallback): number {\n return setTimeout(() => callback(Date.now()), 0) as unknown as number;\n }\n\n public cancelAnimationFrame(handle: number): void {\n clearTimeout(handle as unknown as ReturnType<typeof setTimeout>);\n }\n\n /** @internal */\n public setLocationUrl(url: string): void {\n this.location.href = url;\n }\n\n /** @internal 安装到目标对象上的全局属性名。 */\n public installKeys(): string[] {\n return [...DOM_GLOBAL_KEYS];\n }\n}\n\nexport interface DomWindowOptions {\n url?: string;\n}\n\n/**\n * 创建隔离的 DOM window 环境。\n */\nexport function createDomWindow(options: DomWindowOptions = {}): DomWindow {\n return new DomWindow(options);\n}\n\n/**\n * 将 DOM window 的全局属性安装到目标对象(默认 globalThis),\n * 返回可恢复旧值的函数。\n */\nexport function installDomGlobals(\n windowRef: DomWindow,\n target: Record<string, unknown> = globalThis as Record<string, unknown>\n): () => void {\n const previous = new Map<string, PropertyDescriptor | undefined>();\n const keys = windowRef.installKeys();\n for (const key of keys) {\n previous.set(key, Object.getOwnPropertyDescriptor(target, key));\n }\n for (const key of keys) {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: (windowRef as unknown as Record<string, unknown>)[key],\n });\n }\n Object.defineProperty(target, 'window', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: windowRef,\n });\n\n return () => {\n for (const key of keys) {\n const descriptor = previous.get(key);\n if (descriptor) {\n Object.defineProperty(target, key, descriptor);\n } else {\n Reflect.deleteProperty(target, key);\n }\n }\n };\n}\n\n/**\n * 解析 HTML 片段为节点列表(innerHTML setter 用)。\n */\nexport function parseHtmlFragment(\n source: string,\n documentRef: Document | null\n): Node[] {\n const root = new DocumentFragment();\n if (documentRef) {\n root.ownerDocument = documentRef;\n }\n parseInto(root, source, documentRef);\n return [...root.childList];\n}\n\nfunction parseInto(\n parent: Node,\n source: string,\n documentRef: Document | null\n): void {\n const stack: Element[] = [];\n let current: Node = parent;\n let index = 0;\n const length = source.length;\n\n const append = (node: Node): void => {\n if (node.ownerDocument === null) {\n node.ownerDocument = documentRef;\n }\n current.appendChild(node);\n };\n\n while (index < length) {\n const openIndex = source.indexOf('<', index);\n if (openIndex < 0) {\n append(new Text(source.slice(index)));\n break;\n }\n if (openIndex > index) {\n append(new Text(source.slice(index, openIndex)));\n }\n if (source.startsWith('<!--', openIndex)) {\n const closeIndex = source.indexOf('-->', openIndex + 4);\n const commentEnd = closeIndex < 0 ? length : closeIndex;\n append(new Comment(source.slice(openIndex + 4, commentEnd)));\n index = closeIndex < 0 ? length : closeIndex + 3;\n continue;\n }\n const tagEnd = findTagEnd(source, openIndex);\n if (tagEnd < 0) {\n append(new Text(source.slice(openIndex)));\n break;\n }\n const tagSource = source.slice(openIndex + 1, tagEnd);\n const trimmed = tagSource.trim();\n if (trimmed.startsWith('/')) {\n const tagName = trimmed.slice(1).trim().toLowerCase();\n if (stack.length > 0 && stack[stack.length - 1].localName === tagName) {\n stack.pop();\n current = stack[stack.length - 1] ?? parent;\n }\n index = tagEnd + 1;\n continue;\n }\n const selfClosing = trimmed.endsWith('/');\n const parsed = parseTag(trimmed.replace(/\\/$/, '').trim());\n if (!parsed) {\n index = tagEnd + 1;\n continue;\n }\n const element = createElementForTag(parsed.name, documentRef);\n for (const attr of parsed.attributes) {\n element.setAttribute(attr.name, attr.value);\n }\n append(element);\n if (VOID_TAGS.has(parsed.name) || selfClosing) {\n index = tagEnd + 1;\n continue;\n }\n if (RAW_TEXT_TAGS.has(parsed.name)) {\n const closeTag = `</${parsed.name}>`;\n const rawEnd = source.toLowerCase().indexOf(closeTag, tagEnd + 1);\n const rawText = source.slice(tagEnd + 1, rawEnd < 0 ? length : rawEnd);\n element.appendChild(\n documentRef?.createTextNode(rawText) ?? new Text(rawText)\n );\n index = rawEnd < 0 ? length : rawEnd + closeTag.length;\n continue;\n }\n stack.push(element);\n current = element;\n index = tagEnd + 1;\n }\n}\n\nconst VOID_TAGS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nconst RAW_TEXT_TAGS = new Set(['script', 'style', 'textarea', 'title']);\n\nfunction findTagEnd(source: string, openIndex: number): number {\n let inQuote: string | null = null;\n for (let index = openIndex + 1; index < source.length; index += 1) {\n const char = source[index];\n if (inQuote) {\n if (char === inQuote) {\n inQuote = null;\n }\n continue;\n }\n if (char === '\"' || char === \"'\") {\n inQuote = char;\n continue;\n }\n if (char === '>') {\n return index;\n }\n }\n return -1;\n}\n\nfunction parseTag(\n source: string\n): { name: string; attributes: Array<{ name: string; value: string }> } | null {\n const match = source.match(/^([a-zA-Z][a-zA-Z0-9-]*)\\s*(.*)$/);\n if (!match) {\n return null;\n }\n const name = match[1].toLowerCase();\n const attributes: Array<{ name: string; value: string }> = [];\n const attributeSource = match[2];\n const pattern =\n /([a-zA-Z_:][a-zA-Z0-9_:.-]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'=<>`]+)))?/g;\n let attributeMatch: RegExpExecArray | null;\n while ((attributeMatch = pattern.exec(attributeSource)) !== null) {\n const attrName = attributeMatch[1];\n const value =\n attributeMatch[2] ?? attributeMatch[3] ?? attributeMatch[4] ?? '';\n attributes.push({ name: attrName, value: decodeEntities(value) });\n }\n return { name, attributes };\n}\n\nfunction decodeEntities(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/ /g, '\\u00a0');\n}\n\nfunction encodeText(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction encodeAttribute(value: string): string {\n return encodeText(value).replace(/\"/g, '"');\n}\n\nfunction serializeNode(node: Node): string {\n switch (node.nodeType) {\n case DomNodeType.TEXT_NODE:\n return encodeText((node as Text).data);\n case DomNodeType.COMMENT_NODE:\n return `<!--${(node as Comment).data}-->`;\n case DomNodeType.ELEMENT_NODE:\n return serializeElement(node as Element);\n default:\n return '';\n }\n}\n\nfunction serializeElement(element: Element): string {\n const tag = element.localName;\n const attributes: string[] = [];\n for (const entry of element.attributeEntries()) {\n if (entry.name === 'style') {\n continue;\n }\n attributes.push(`${entry.name}=\"${encodeAttribute(entry.value)}\"`);\n }\n const inlineStyle = element.inlineStyleText();\n if (inlineStyle) {\n attributes.push(`style=\"${encodeAttribute(inlineStyle)}\"`);\n }\n const attributeText = attributes.length > 0 ? ` ${attributes.join(' ')}` : '';\n if (VOID_TAGS.has(tag)) {\n return `<${tag}${attributeText}>`;\n }\n if (RAW_TEXT_TAGS.has(tag)) {\n return `<${tag}${attributeText}>${element.textContent}</${tag}>`;\n }\n return `<${tag}${attributeText}>${serializeChildren(element)}</${tag}>`;\n}\n\nfunction serializeChildren(element: Element): string {\n return element.childList.map((child) => serializeNode(child)).join('');\n}\n\n/**\n * CSS 选择器引擎:支持 tag、#id、.class、[attr]、[attr=value]、复合与后代选择器。\n */\nfunction parseSelector(selector: string): SimpleSelector[][] {\n return selector.split(',').map((group) => {\n const segments: SimpleSelector[] = [];\n let index = 0;\n while (index < group.length) {\n while (index < group.length && group[index] === ' ') {\n index += 1;\n }\n if (index >= group.length) {\n break;\n }\n if (group[index] === '>') {\n segments.push({ type: 'child' });\n index += 1;\n continue;\n }\n const start = index;\n while (\n index < group.length &&\n group[index] !== ' ' &&\n group[index] !== '>'\n ) {\n index += 1;\n }\n segments.push(parseCompound(group.slice(start, index)));\n }\n return segments;\n });\n}\n\ntype SimpleSelector =\n | { type: 'universal' }\n | { type: 'tag'; name: string }\n | { type: 'id'; id: string }\n | { type: 'class'; className: string }\n | { type: 'attribute'; name: string; operator?: string; value?: string }\n | { type: 'compound'; parts: SimpleSelector[] }\n | { type: 'not'; selector: SimpleSelector }\n | { type: 'child' };\n\nfunction parseCompound(source: string): SimpleSelector {\n const selectors: SimpleSelector[] = [];\n let index = 0;\n while (index < source.length) {\n const char = source[index];\n if (char === '*') {\n selectors.push({ type: 'universal' });\n index += 1;\n } else if (char === '#') {\n const end = scanIdentifier(source, index + 1);\n selectors.push({ type: 'id', id: source.slice(index + 1, end) });\n index = end;\n } else if (char === '.') {\n const end = scanIdentifier(source, index + 1);\n selectors.push({\n type: 'class',\n className: source.slice(index + 1, end),\n });\n index = end;\n } else if (char === '[') {\n const end = source.indexOf(']', index);\n const inner = source\n .slice(index + 1, end < 0 ? source.length : end)\n .trim();\n const attrMatch = inner.match(\n /^([a-zA-Z_:][a-zA-Z0-9_:.-]*)(?:([~|^$*]?=)(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'=<>`]+)))?$/\n );\n if (attrMatch) {\n selectors.push({\n type: 'attribute',\n name: attrMatch[1],\n operator: attrMatch[2],\n value: attrMatch[3] ?? attrMatch[4] ?? attrMatch[5],\n });\n } else {\n selectors.push({ type: 'attribute', name: inner });\n }\n index = end < 0 ? source.length : end + 1;\n } else if (char === ':' && source.startsWith(':not(', index)) {\n const close = source.indexOf(')', index);\n const inner = source.slice(index + 5, close < 0 ? source.length : close);\n selectors.push({ type: 'not', selector: parseCompound(inner.trim()) });\n index = close < 0 ? source.length : close + 1;\n } else if (char === ':' && source.startsWith(':disabled', index)) {\n selectors.push({ type: 'attribute', name: 'disabled' });\n index += ':disabled'.length;\n } else if (/[a-zA-Z_]/.test(char)) {\n const end = scanIdentifier(source, index);\n selectors.push({\n type: 'tag',\n name: source.slice(index, end).toLowerCase(),\n });\n index = end;\n } else {\n index += 1;\n }\n }\n if (selectors.length === 1) {\n return selectors[0];\n }\n return { type: 'compound', parts: selectors };\n}\n\nfunction scanIdentifier(source: string, start: number): number {\n let index = start;\n // ':' 是伪类(:not)起始,不属于标识符\n while (index < source.length && /[a-zA-Z0-9_-]/.test(source[index])) {\n index += 1;\n }\n return index;\n}\n\nfunction matchSelector(element: Element, selector: string): boolean {\n const groups = parseSelector(selector);\n return groups.some((group) => matchGroup(element, group));\n}\n\nfunction matchGroup(element: Element, group: SimpleSelector[]): boolean {\n let index = group.length - 1;\n if (index < 0) {\n return true;\n }\n\n // The rightmost compound must match the queried element itself.\n if (!matchSegment(element, group[index])) {\n return false;\n }\n if (index === 0) {\n return true;\n }\n\n // Remaining compounds must match ancestors, right to left.\n let current: Element | null = element.parentElement;\n index -= 1;\n while (current) {\n const selector = group[index];\n if (!selector) {\n return true;\n }\n if (selector.type === 'child') {\n // The previously matched element must be the immediate child of this parent.\n const parentSelector = group[index - 1];\n if (!parentSelector || !matchSegment(current, parentSelector)) {\n return false;\n }\n index -= 2;\n if (index < 0) {\n return true;\n }\n current = current.parentElement;\n continue;\n }\n if (matchSegment(current, selector)) {\n index -= 1;\n if (index < 0) {\n return true;\n }\n }\n current = current.parentElement;\n }\n return false;\n}\n\nfunction matchSegment(element: Element, selector: SimpleSelector): boolean {\n switch (selector.type) {\n case 'universal':\n return true;\n case 'tag':\n return element.localName === selector.name;\n case 'id':\n return element.id === selector.id;\n case 'class':\n return element.classList.contains(selector.className);\n case 'attribute':\n return matchAttribute(element, selector);\n case 'compound':\n return selector.parts.every((part) => matchSegment(element, part));\n case 'not':\n return !matchSegment(element, selector.selector);\n case 'child':\n return false;\n default:\n return false;\n }\n}\n\nfunction matchAttribute(\n element: Element,\n selector: { name: string; operator?: string; value?: string }\n): boolean {\n const attributeValue = element.getAttribute(selector.name);\n if (!selector.operator) {\n return attributeValue !== null;\n }\n if (attributeValue === null) {\n return false;\n }\n const expected = selector.value ?? '';\n switch (selector.operator) {\n case '=':\n return attributeValue === expected;\n case '~=':\n return attributeValue.split(/\\s+/).includes(expected);\n case '|=':\n return (\n attributeValue === expected || attributeValue.startsWith(`${expected}-`)\n );\n case '^=':\n return attributeValue.startsWith(expected);\n case '$=':\n return attributeValue.endsWith(expected);\n case '*=':\n return attributeValue.includes(expected);\n default:\n return false;\n }\n}\n\nfunction querySelectorAll(root: Node, selector: string): NodeList<Element> {\n const results: Element[] = [];\n collectElements(root, (element) => {\n if (element !== root && matchSelector(element, selector)) {\n results.push(element);\n }\n });\n return new NodeList(results);\n}\n\nfunction collectElements(root: Node, visit: (element: Element) => void): void {\n for (const child of root.childList) {\n if (child.nodeType === DomNodeType.ELEMENT_NODE) {\n visit(child as Element);\n collectElements(child, visit);\n }\n }\n}\n\nfunction createElementForTag(\n tagName: string,\n documentRef: Document | null\n): HTMLElement {\n const tag = tagName.toLowerCase();\n let element: HTMLElement;\n if (tag === 'input') {\n element = new HTMLInputElement(tag);\n } else if (tag === 'textarea') {\n element = new HTMLTextAreaElement(tag);\n } else if (tag === 'select') {\n element = new HTMLSelectElement(tag);\n } else if (tag === 'option') {\n element = new HTMLOptionElement(tag);\n } else if (tag === 'button') {\n element = new HTMLButtonElement(tag);\n } else if (tag === 'style') {\n element = new HTMLStyleElement(tag);\n } else if (tag === 'a') {\n element = new HTMLAnchorElement(tag);\n } else if (tag === 'img') {\n element = new HTMLImageElement(tag);\n } else if (tag === 'label') {\n element = new HTMLLabelElement(tag);\n } else if (tag === 'td' || tag === 'th') {\n element = new HTMLTableCellElement(tag);\n } else {\n element = new HTMLElement(tag);\n }\n element.ownerDocument = documentRef;\n return element;\n}\n\nfunction setupDocumentTree(documentRef: Document): void {\n const html = documentRef.createElement('html');\n documentRef.appendChild(html);\n const head = documentRef.createElement('head');\n const body = documentRef.createElement('body');\n html.appendChild(head);\n html.appendChild(body);\n}\n\nfunction createDatasetProxy(element: Element): Record<string, string> {\n const handler: ProxyHandler<Record<string, string>> = {\n get(_target, property: string) {\n if (typeof property === 'symbol') {\n return undefined;\n }\n return (\n element.getAttribute(`data-${toKebabCase(property)}`) ?? undefined\n );\n },\n set(_target, property: string, value: string): boolean {\n if (typeof property === 'symbol') {\n return true;\n }\n if (value === null || value === undefined) {\n element.removeAttribute(`data-${toKebabCase(property)}`);\n } else {\n element.setAttribute(`data-${toKebabCase(property)}`, String(value));\n }\n return true;\n },\n deleteProperty(_target, property: string): boolean {\n if (typeof property !== 'symbol') {\n element.removeAttribute(`data-${toKebabCase(property)}`);\n }\n return true;\n },\n has(_target, property: string): boolean {\n if (typeof property === 'symbol') {\n return false;\n }\n return element.hasAttribute(`data-${toKebabCase(property)}`);\n },\n ownKeys() {\n const keys: string[] = [];\n for (const entry of element.attributeEntries()) {\n if (entry.name.startsWith('data-')) {\n keys.push(toCamelCase(entry.name.slice(5)));\n }\n }\n return keys;\n },\n getOwnPropertyDescriptor(_target, property: string) {\n if (typeof property === 'symbol') {\n return undefined;\n }\n if (element.hasAttribute(`data-${toKebabCase(property)}`)) {\n return {\n configurable: true,\n enumerable: true,\n writable: true,\n value: element.getAttribute(`data-${toKebabCase(property)}`),\n };\n }\n return undefined;\n },\n };\n return new Proxy({}, handler);\n}\n\nfunction toKebabCase(value: string): string {\n return value.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n}\n\nfunction toCamelCase(value: string): string {\n return value.replace(/-([a-z])/g, (_match, char: string) =>\n char.toUpperCase()\n );\n}\n",
|
|
6
|
-
"import {\n createDomWindow,\n installDomGlobals,\n DOM_GLOBAL_KEYS,\n} from '
|
|
6
|
+
"import {\n createDomWindow,\n installDomGlobals,\n DOM_GLOBAL_KEYS,\n} from 'transone/dom';\nimport type { AppDocumentRenderOptions, OneApp } from 'transone';\nimport type { ResolvedConfig } from './types';\n\nconst PROJECT_GLOBAL_KEYS = [...DOM_GLOBAL_KEYS, '__APP__'];\n\ntype ProjectGlobalKey = (typeof PROJECT_GLOBAL_KEYS)[number];\ntype GlobalDescriptorMap = Map<\n ProjectGlobalKey,\n PropertyDescriptor | undefined\n>;\n\ninterface ProjectEntryModule {\n app?: unknown;\n}\n\nlet projectDomQueue: Promise<void> = Promise.resolve();\n\nexport async function renderProjectHtml(\n config: ResolvedConfig,\n options: AppDocumentRenderOptions,\n entry: string = config.entry,\n route = '/'\n): Promise<string> {\n return withProjectDom(async () => {\n const module = await importProjectEntry(entry);\n const app = module.app as Partial<OneApp> | undefined;\n if (!app || typeof app.renderHtmlDocument !== 'function') {\n throw new Error(\n `TransOne entry ${entry} must export an app with renderHtmlDocument()`\n );\n }\n\n return app.renderHtmlDocument(options);\n }, route, config.build.basePath);\n}\n\nasync function withProjectDom<T>(\n callback: () => Promise<T>,\n route: string,\n basePath: string\n): Promise<T> {\n const task = projectDomQueue.then(() =>\n runWithProjectDom(callback, route, basePath)\n );\n projectDomQueue = task.then(\n () => undefined,\n () => undefined\n );\n\n return task;\n}\n\nasync function runWithProjectDom<T>(\n callback: () => Promise<T>,\n route: string,\n basePath: string\n): Promise<T> {\n const url = `http://127.0.0.1${basePath}${route === '/' ? '/' : route}`;\n const windowRef = createDomWindow({ url });\n Object.assign(windowRef, {\n Error,\n EvalError,\n RangeError,\n ReferenceError,\n SyntaxError,\n TypeError,\n URIError,\n });\n const descriptors = captureGlobalDescriptors();\n\n try {\n installDomGlobals(windowRef);\n return await callback();\n } finally {\n restoreGlobalDescriptors(descriptors);\n }\n}\n\nlet projectEntrySequence = 0;\n\nasync function importProjectEntry(entry: string): Promise<ProjectEntryModule> {\n projectEntrySequence += 1;\n return (await import(\n `${entry}?transone_entry=${projectEntrySequence}`\n )) as ProjectEntryModule;\n}\n\nfunction captureGlobalDescriptors(): GlobalDescriptorMap {\n return new Map(\n PROJECT_GLOBAL_KEYS.map((key) => [\n key,\n Object.getOwnPropertyDescriptor(globalThis, key),\n ])\n );\n}\n\nfunction restoreGlobalDescriptors(descriptors: GlobalDescriptorMap): void {\n PROJECT_GLOBAL_KEYS.forEach((key) => {\n const descriptor = descriptors.get(key);\n if (descriptor) {\n Object.defineProperty(globalThis, key, descriptor);\n return;\n }\n\n delete (globalThis as Record<string, unknown>)[key];\n });\n}\n"
|
|
7
7
|
],
|
|
8
8
|
"mappings": "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",
|
|
9
9
|
"debugId": "B2D457EF5744300A64756E2164756E21",
|