Sprint 3: ReferenceError 'document is not defined' in Vue Runtime Sub-Modules #53

Closed
opened 2026-06-18 11:19:04 +00:00 by Artur · 1 comment
Owner

Problembeschreibung

Nach Sprint 2 (#51, #52) wird __VP_HASH_MAP__ korrekt gesynct. vuejs.org erreicht jetzt die Vue Runtime, scheitert aber mit:

ReferenceError: document is not defined
    at vt (/tmp/thb-modules/26m56kl4l7mkj.mjs:1:14735)
    at <anonymous> (/tmp/thb-modules/26m56kl4l7mkj.mjs:1:14692)

26m56kl4l7mkj.mjs ist ein Sub-Module (vue runtime-dom), geladen via _resolveSubModuleImports(). Der Fehler zeigt document als nicht definiert — obwohl der Modul-Prologue var document = globalThis.__THB_document; enthält.

Analyse

Verdacht A: globalThis.__THB_document ist zum Zeitpunkt des Sub-Module-Imports nicht gesetzt.

  • _buildModulePrologue() setzt (globalThis as any)["__THB_document"] = win.document
  • Wird aber erst beim Schreiben der Datei aufgerufen (vor import())
  • Bei rekursiven Sub-Modules könnte die Reihenfolge anders sein

Verdacht B: win.document ist null oder ein falscher Wert

  • Wird allowedGlobals.document korrekt gesetzt?
  • Ist die Document-Instanz nach document.write() noch gültig?

Verdacht C: Sub-Module haben einen anderen globalThis-Kontext

  • Bun's import() könnte Sub-Modules in einem anderen Scope laden
  • var document = globalThis.__THB_document könnte in einem anderen globalThis suchen

Lösungsansatz

Option A: document direkt in der Sub-Module Prologue hartcodieren (nicht via globalThis)

var document = window.document;

Da window.document über den Proxy sichergestellt ist.

Option B: Sub-Module den globalThis-Wert explizit mitgeben (via import.meta oder eval)

Option C: document direkt in den Sub-Module-Code injecten statt über Prologue

Akzeptanzkriterien

  • Sub-Modules der Vue Runtime sehen document als definiert
  • Keine Regression bei __VP_HASH_MAP__ Sync
  • Isolierter Test: Inline Modul importiert Sub-Module, beide sehen document
  • Bestehende Tests bleiben grün

Betroffene Dateien

Datei Änderung
src/js/execution-realm.ts Prologue-Generierung oder Sub-Module-Sync

Cross-Ref

  • #51: Inline Script Sequencing (fix: prologue für XXX globals)
  • #52: globalThis Sync in Sub-Module Resolution
## Problembeschreibung Nach Sprint 2 (#51, #52) wird `__VP_HASH_MAP__` korrekt gesynct. vuejs.org erreicht jetzt die Vue Runtime, scheitert aber mit: ``` ReferenceError: document is not defined at vt (/tmp/thb-modules/26m56kl4l7mkj.mjs:1:14735) at <anonymous> (/tmp/thb-modules/26m56kl4l7mkj.mjs:1:14692) ``` `26m56kl4l7mkj.mjs` ist ein Sub-Module (vue runtime-dom), geladen via `_resolveSubModuleImports()`. Der Fehler zeigt `document` als nicht definiert — obwohl der Modul-Prologue `var document = globalThis.__THB_document;` enthält. ## Analyse **Verdacht A:** `globalThis.__THB_document` ist zum Zeitpunkt des Sub-Module-Imports nicht gesetzt. - `_buildModulePrologue()` setzt `(globalThis as any)["__THB_document"] = win.document` - Wird aber erst beim Schreiben der Datei aufgerufen (vor `import()`) - Bei rekursiven Sub-Modules könnte die Reihenfolge anders sein **Verdacht B:** `win.document` ist `null` oder ein falscher Wert - Wird `allowedGlobals.document` korrekt gesetzt? - Ist die Document-Instanz nach `document.write()` noch gültig? **Verdacht C:** Sub-Module haben einen anderen globalThis-Kontext - Bun's `import()` könnte Sub-Modules in einem anderen Scope laden - `var document = globalThis.__THB_document` könnte in einem anderen globalThis suchen ## Lösungsansatz **Option A:** `document` direkt in der Sub-Module Prologue hartcodieren (nicht via globalThis) ```javascript var document = window.document; ``` Da `window.document` über den Proxy sichergestellt ist. **Option B:** Sub-Module den globalThis-Wert explizit mitgeben (via `import.meta` oder eval) **Option C:** `document` direkt in den Sub-Module-Code injecten statt über Prologue ## Akzeptanzkriterien - [ ] Sub-Modules der Vue Runtime sehen `document` als definiert - [ ] Keine Regression bei `__VP_HASH_MAP__` Sync - [ ] Isolierter Test: Inline Modul importiert Sub-Module, beide sehen `document` - [ ] Bestehende Tests bleiben grün ## Betroffene Dateien | Datei | Änderung | |-------|----------| | `src/js/execution-realm.ts` | Prologue-Generierung oder Sub-Module-Sync | ## Cross-Ref - #51: Inline Script Sequencing (fix: prologue für __XXX__ globals) - #52: globalThis Sync in Sub-Module Resolution
Author
Owner

Fix: Prologue-Architektur fundamental umgestellt (Single-Anchor-Pattern)

Problem: _resolveSubModuleImports schrieb Sub-Module OHNE Prologue (Zeile 472). Bun.write(subFile, subCode) — das _buildModulePrologue(...) + fehlte nach dem Refactoring!

Wirkung: Sub-Modules (runtime-dom, runtime-core) hatten keine var document = ...ReferenceError: document is not defined.

Lösung (Single-Anchor-Pattern):

- await Bun.write(subFile, subCode);
+ await Bun.write(subFile, ExecutionRealm._buildModulePrologue(this._executionWindow) + subCode);

Architektur:
Früher: globalThis.__THB_X für JEDES Global (100+ Einträge)
Jetzt: EIN globalThis.__THB_window → ALLE Globals via window.X:

var window = globalThis.__THB_window;
var document = window.document;       // ← IMMER korrekt
var location = window.location;
var __VP_HASH_MAP__ = window.__VP_HASH_MAP__;  // ← via Proxy dynamicStorage

document is not defined GEFIXT
Nächster: TypeError: instanceof — right side not object (vermutlich SVGElement fehlt im Proxy)

## Fix: Prologue-Architektur fundamental umgestellt (Single-Anchor-Pattern) **Problem:** `_resolveSubModuleImports` schrieb Sub-Module OHNE Prologue (Zeile 472). `Bun.write(subFile, subCode)` — das `_buildModulePrologue(...)` + fehlte nach dem Refactoring! Wirkung: Sub-Modules (runtime-dom, runtime-core) hatten keine `var document = ...` → `ReferenceError: document is not defined`. **Lösung (Single-Anchor-Pattern):** ```diff - await Bun.write(subFile, subCode); + await Bun.write(subFile, ExecutionRealm._buildModulePrologue(this._executionWindow) + subCode); ``` **Architektur:** Früher: `globalThis.__THB_X` für JEDES Global (100+ Einträge) Jetzt: EIN `globalThis.__THB_window` → ALLE Globals via `window.X`: ``` var window = globalThis.__THB_window; var document = window.document; // ← IMMER korrekt var location = window.location; var __VP_HASH_MAP__ = window.__VP_HASH_MAP__; // ← via Proxy dynamicStorage ``` ✅ `document is not defined` GEFIXT ❌ Nächster: `TypeError: instanceof — right side not object` (vermutlich `SVGElement` fehlt im Proxy)
Artur closed this issue 2026-06-18 11:29:17 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
glow-all/true-headless-browser#53
No description provided.