Start · Sprachen · JavaScript · Referenz · AbstractModuleSource

AbstractModuleSource

Klasse

Repräsentiert den kompilierten Quellcode eines Moduls, der über <code>import source</code> oder <code>import.source()</code> abgerufen wurde.

seit JavaScript Stage 3 Proposal (experimentell, kein breiter Brow Kategorie: core

Signatur

class AbstractModuleSource

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

Typ
void
Beschreibung
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.');
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();
true

// 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.