@stormcat-works/stormmin は Node.js とブラウザの両方から import できる ESM 専用パッケージです。公開しているのは粗粒度の compile 系関数のみで、pass ごとの個別 API は提供していません。
Node.js とブラウザの違い
パッケージの実体はどちらも同じ WASM ビルドで、出力は byte 単位で同一です。実行方式だけが異なります。- ブラウザ:
compile()はメインスレッドをブロックしません。内部の coordinator が Web Worker 上に WASM を lazy-load し、候補の評価を coordinator 自身 + 複数の candidate Worker に分散します。SharedArrayBufferやクロスオリジン分離は不要です。 - Node.js: 同じ WASM を呼び出し元のプロセス内で同期的にロードし、候補の評価は Worker を使わず逐次実行します。
ブラウザ環境では
Worker コンストラクタが必須です。Worker を提供しない実行コンテキストで呼び出すと、compile() などのすべての呼び出しが Promise の reject で失敗します。公開関数
各関数のシグネチャとオプション/戻り値の型は ライブラリ API リファレンス を参照してください。
エラーの扱い
ライブラリは専用のエラークラスを公開していません。失敗は次のいずれかの形で表れます。compile()/compileProject()が{ ok: false, error, diagnostics }を返す(構文エラーや Stormworks 非対応 API の使用など)。- Worker のクラッシュや未対応環境など、呼び出し自体が失敗した場合は Promise が reject される。
analyze() は構文エラーがあっても ok: true のまま diagnostics に syntax-error として報告します。編集中のエディタでリアルタイムに lint 結果を表示する用途を想定した挙動です。ok: false になるのは呼び出し自体の内部エラーのときだけです。
require を使った複数モジュールのリンク
modules はモジュールキー(. 区切りの Lua 識別子、例: lib.util)からソース文字列へのフラットな map です。詳しいルールと制約は require によるモジュール分割 を参照してください。