diff --git a/assets/workers/ShaderWorker.ts b/assets/workers/ShaderWorker.ts index d19ac85..0891248 100644 --- a/assets/workers/ShaderWorker.ts +++ b/assets/workers/ShaderWorker.ts @@ -1,9 +1,6 @@ import noise from "~/assets/shaders/noise.frag?raw" -// @ts-ignore Import module -import resolveLygia from "https://lygia.xyz/resolve.esm.js" - -declare const resolveLygia: (source: string) => string +import resolveLygia from "~/assets/workers/resolve-lygia.esm" let interval: number let timeout: number diff --git a/assets/workers/resolve-lygia.esm.js b/assets/workers/resolve-lygia.esm.js new file mode 100644 index 0000000..5537afc --- /dev/null +++ b/assets/workers/resolve-lygia.esm.js @@ -0,0 +1,52 @@ +function getFile(url) { + let httpRequest = new XMLHttpRequest(); + httpRequest.open("GET", url, false); + httpRequest.send(); + if (httpRequest.status == 200) + return httpRequest.responseText; + else + return ""; + } + +function resolveLygia(lines) { + if ( !Array.isArray(lines) ) { + lines = lines.split(/\r?\n/); + } + + let src = ""; + lines.forEach( (line, i) => { + const line_trim = line.trim(); + if (line_trim.startsWith('#include \"lygia') ) { + let include_url = line_trim.substring(15); + include_url = "https://lygia.xyz" + include_url.replace(/\"|\;|\s/g,''); + src += getFile(include_url) + '\n'; + } + else { + src += line + '\n'; + } + }); + + return src; +} + +async function resolveLygiaAsync(lines) { + if (!Array.isArray(lines)) + lines = lines.split(/\r?\n/); + + let src = ""; + const response = await Promise.all( + lines.map(async (line, i) => { + const line_trim = line.trim(); + if (line_trim.startsWith('#include "lygia')) { + let include_url = line_trim.substring(15); + include_url = "https://lygia.xyz" + include_url.replace(/\"|\;|\s/g, ""); + return fetch(include_url).then((res) => res.text()); + } + else + return line; + }) + ); + + return response.join("\n"); +} +export { resolveLygia as default };