"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = parse;
exports.checkSyntax = checkSyntax;
exports.renderAudio = renderAudio;
exports.debugRender = debugRender;
exports.renderWavPreview = renderWavPreview;
exports.renderMidi = renderMidi;
exports.getCodeMetadata = getCodeMetadata;
exports.registerSample = registerSample;
exports.registerAddon = registerAddon;
exports.listRegisteredBanks = listRegisteredBanks;
exports.getSampleLoadEvents = getSampleLoadEvents;
exports.getPlaybackDebug = getPlaybackDebug;
exports.getDebugState = getDebugState;
exports.setDebugErrors = setDebugErrors;
exports.getLastErrors = getLastErrors;
let wasmModule = null;
async function ensureWasmLoaded() {
if (wasmModule)
return;
try {
try {
wasmModule = await import('../../pkg/web/devalang_wasm.js');
}
catch {
wasmModule = await import('../../pkg/node/devalang_wasm.js');
}
}
catch (error) {
throw new Error('Failed to load WASM module. Make sure to run "npm run rust:wasm:all" first.\n' +
`Error: ${error}`);
}
}
async function parse(entryPath, source) {
await ensureWasmLoaded();
return wasmModule.parse(entryPath, source);
}
async function checkSyntax(source) {
await ensureWasmLoaded();
return wasmModule.check_syntax(source);
}
async function renderAudio(code, options) {
await ensureWasmLoaded();
const opts = {
sampleRate: options?.sampleRate ?? 44100,
bpm: options?.bpm ?? 120
};
return wasmModule.render_audio(code, opts);
}
async function debugRender(code, options) {
await ensureWasmLoaded();
const opts = {
sampleRate: options?.sampleRate ?? 44100,
bpm: options?.bpm ?? 120
};
return wasmModule.debug_render(code, opts);
}
async function renderWavPreview(code, options) {
await ensureWasmLoaded();
const opts = {
sampleRate: options?.sampleRate ?? 44100,
bpm: options?.bpm ?? 120
};
return wasmModule.render_wav_preview(code, opts);
}
async function renderMidi(code, options) {
await ensureWasmLoaded();
const opts = {
sampleRate: options?.sampleRate ?? 44100,
bpm: options?.bpm ?? 120,
timeSignatureNum: options?.timeSignatureNum ?? 4,
timeSignatureDen: options?.timeSignatureDen ?? 4
};
return wasmModule.render_midi_array(code, opts);
}
async function getCodeMetadata(code, options) {
await ensureWasmLoaded();
const opts = {
sampleRate: options?.sampleRate ?? 44100,
bpm: options?.bpm ?? 120
};
return wasmModule.get_code_to_buffer_metadata(code, opts);
}
async function registerSample(uri, pcm) {
await ensureWasmLoaded();
return wasmModule.register_sample(uri, pcm);
}
async function registerAddon(path) {
await ensureWasmLoaded();
return wasmModule.register_addon(path);
}
async function listRegisteredBanks() {
await ensureWasmLoaded();
return wasmModule.list_registered_banks();
}
async function getSampleLoadEvents(clear = false) {
await ensureWasmLoaded();
return wasmModule.sample_load_events(clear);
}
async function getPlaybackDebug(clear = false) {
await ensureWasmLoaded();
return wasmModule.collect_playback_debug(clear);
}
async function getDebugState() {
await ensureWasmLoaded();
return wasmModule.playback_debug_state();
}
async function setDebugErrors(enable) {
await ensureWasmLoaded();
wasmModule.set_wasm_debug_errors(enable);
}
async function getLastErrors(clear = false) {
await ensureWasmLoaded();
return wasmModule.collect_last_errors(clear);
}