Signatur
Beschreibung
AbstractModuleSource ist eine abstrakte Basisklasse im Kontext des TC39-Proposals "Source Phase Imports". Instanzen dieser Klasse halten den kompilierten, aber noch nicht ausgeführten Quellcode eines JavaScript-Moduls. Sie werden erzeugt, wenn ein Modul über die neue import source-Syntax oder die dynamische Form import.source() geladen wird, anstatt es vollständig zu evaluieren und dessen Exporte zu binden.
Der Hauptzweck von AbstractModuleSource ist es, Modulquellcode als First-Class-Objekt behandelbar zu machen – beispielsweise um ihn an Worker-Konstruktoren oder WebAssembly-APIs weiterzugeben, ohne das Modul vorab im aktuellen Kontext auszuführen. Dies ermöglicht effizientes Teilen von kompiliertem Modul-Code zwischen Threads oder Ausführungskontexten.
Konkrete Unterklassen wie WebAssembly.Module oder host-spezifische Modulquellen erben von AbstractModuleSource. Direkt instanziiert wird die Klasse nicht – sie definiert lediglich das gemeinsame Protokoll (z. B. den Symbol.toStringTag-Eintrag) aller Modulquell-Objekte.
Da sich dieses Feature noch im TC39 Stage-3-Prozess befindet, ist die Unterstützung in Browsern und Laufzeitumgebungen sehr begrenzt und hinter Feature-Flags versteckt. Der Einsatz in Produktionscode ist derzeit nicht empfohlen.
Rückgabewert
AbstractModuleSource ist eine abstrakte Klasse und kann nicht direkt instanziiert werden. Sie dient ausschließlich als Basisklasse für konkrete Modulquell-Typen.Beispiele
Modulquellcode mit import source laden (experimentell)
// Experimentelle Syntax – benötigt entsprechende Engine-Unterstützung
// import source myModuleSource from './my-module.js';
//
// Das Objekt myModuleSource ist eine Instanz von AbstractModuleSource
// (bzw. einer konkreten Unterklasse) und enthält den kompilierten
// Quellcode, ohne das Modul auszuführen.
// Prüfen, ob ein Objekt eine Modulquelle ist:
const isModuleSource = (obj) =>
obj instanceof AbstractModuleSource;
// Beispiel mit dynamischer Form (sofern verfügbar):
// const src = await import.source('./my-module.js');
// console.log(src instanceof AbstractModuleSource); // true
console.log('AbstractModuleSource ist die Basisklasse aller Modulquell-Objekte.');
Modulquellcode an einen Worker übergeben
// Geplante Nutzung: Modulquellcode an Worker übergeben
// ohne erneuten Netzwerkzugriff oder erneute Kompilierung.
// (Experimentell – noch nicht in allen Umgebungen verfügbar)
async function startWorkerWithModuleSource() {
// const moduleSource = await import.source('./worker-logic.js');
//
// Der Worker erhält den bereits kompilierten Quellcode:
// const worker = new Worker(moduleSource, { type: 'module' });
//
// So kann derselbe kompilierte Code in mehreren Workern
// wiederverwendet werden, ohne erneut geladen zu werden.
// Zur Veranschaulichung mit WebAssembly.Module (bestehende Unterklasse):
const response = await fetch('example.wasm');
const buffer = await response.arrayBuffer();
const wasmModule = await WebAssembly.compile(buffer);
// WebAssembly.Module erbt von AbstractModuleSource:
console.log(wasmModule instanceof WebAssembly.Module); // true
// In Umgebungen mit AbstractModuleSource-Support:
// console.log(wasmModule instanceof AbstractModuleSource); // true
}
// startWorkerWithModuleSource();
// Wichtig · Fallstricke
Experimenteller Status: AbstractModuleSource ist Teil des TC39-Proposals "Source Phase Imports" (Stage 3, Stand 2024). Es ist weder in allen Browsern noch in aktuellen Node.js-Versionen standardmäßig verfügbar. Vor einem produktiven Einsatz sollte der aktuelle Status des Proposals geprüft werden.
Keine direkte Instanziierung: Der Aufruf new AbstractModuleSource() löst einen TypeError aus. Nur Host-Umgebungen oder konkrete Unterklassen dürfen Instanzen erzeugen.
Beziehung zu WebAssembly.Module: WebAssembly.Module ist eine der ersten konkreten Klassen, die von AbstractModuleSource erben soll, sobald das Proposal finalisiert ist. Dies vereinheitlicht das Handling von JS- und Wasm-Modulquellen.
Symbol.toStringTag: Instanzen von AbstractModuleSource liefern über Symbol.toStringTag einen typspezifischen String, der den konkreten Modulquelltyp identifiziert.