修复ESM初始化与动态成员投影
live binding 仅以模块初始化结束时的最终 callable 建立外部需求。 直接 awaited namespace 成员按 occurrence 支持赋值、回调、构造与深层成员替换。 side-effect import 按依赖顺序投影全局效果并对静态不完成顶层 await 失败关闭。 投影保持依赖和声明源码顺序,循环去重同步移除重复初始化写入。 assignment class expression 分离 static 与 instance member demand。 补充正例、反例、视觉回归并更新技术方案与共享决策。
This commit is contained in:
@@ -845,6 +845,9 @@ game-project/
|
||||
- 循环 ESM 的投影身份固定为 `(origin module, original root binding)`;canonical 重命名只改变组合单元中的展示名,身份随投影闭包传播。删除已存在的回流声明后仍必须把 import 引用改接到 importer 中同一身份的既有 canonical;固定点未在“模块数 + 1”轮内收敛时失败关闭,不能返回最后一轮仍变化的部分结果。inline module 必须先提取原文并计入与外部脚本共享的累计源码 `2 MiB` 上限,再执行语法和语义校验;超限源码不能因无效语法被过滤,小型无效模块也必须明确失败关闭。
|
||||
- HTML 静态门只屏蔽 raw-text 容器之外的真正 HTML 注释,`script / style` 原文必须逐字交给对应 parser;禁止对整份 HTML 做非词法 `//`、`/* */` 删除,字符串中的 `https://`、路径和注释形状不能被截断,HTML 注释诱饵仍不得进入标签或脚本证据。Canvas 尺寸、可见性、元素绑定和 stylesheet 选择器扫描只读取浏览器可渲染标记,必须完整跳过 `template / textarea / noscript / title / style / xmp / iframe / noembed / plaintext` 的标签诱饵;活动顶层 stylesheet 独立提取,不能借用 inert 容器中的样式或把 CSS raw-text 当 HTML 标签。classic inline 与无 `defer / async` 的 external 脚本按 HTML 标签出现顺序组成 parser-blocking global 段;classic external `defer` 必须在解析阻塞段之后按文档顺序求值,不能提前到标签之后的 inline 前,`async` 因下载完成顺序不可静态证明而失败关闭。带 `src` 的标签忽略 inline body,普通脚本顺序不得退化。
|
||||
- ESM 投影的最终组合顺序必须反映 dependency 先初始化、importer 后求值:先在原 importer 坐标上完成 import reference span replacement,再把依赖闭包投影放到 importer 顶层正文之前,使 dependency 在声明后安装的 function-valued export 能被 importer 调用看见。最终单元继续重跑 parser / semantic 和单元 `2 MiB`、累计投影 `32 MiB` 门禁;canonical identity、循环回接去重与有界固定点规则不因顺序调整而放宽。
|
||||
- ESM live binding 的外部 callable demand 以模块初始化完成后的最终直接顶层 assignment 为准;同一 root 或 member 的旧 RHS 仍按源码参与初始化投影,但不得继续作为外部调用根加载旧 dynamic dependency。projection declaration 按原模块源码位置输出,静态 dependency origin 按 importer 中的声明顺序输出;循环回流去重必须同时删除对应声明与初始化写入,确保同一模块初始化只出现一次。
|
||||
- 直接 `(await import(source)).member` 不限定为立即调用:赋值、受控 callback、constructor 和后续完整静态 member path 都保留 `(source, import occurrence)` demand,并只替换首段 export member span;恒假 occurrence 仍不得借用可达 occurrence。`export let Game; Game = class { ... }` 的 class expression assignment 同时支持 static 与 instance member root,二者不得串线。
|
||||
- side-effect-only static import 只把 dependency 中直接可观察的 `globalThis / window` 顶层 effect 按有界 DFS dependency-before-importer 顺序加入组合 unit,不把 dependency local binding 暴露给 importer,也不采纳未链接 module。模块含可静态证明永不完成的 top-level await(当前至少覆盖未遮蔽全局 `await new Promise(() => {})`)时读取失败关闭;嵌套 async function 内同形 await 和可完成的 top-level await 不误拒绝。
|
||||
|
||||
## 2026-07-31 长耗时与恢复收口
|
||||
|
||||
|
||||
Reference in New Issue
Block a user