| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- "use strict";
- exports.init = init;
- exports.parse = parse;
- let wasm;
- const isLE = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
- function parse(source, name = '@') {
- if (!wasm) throw new Error('Not initialized');
- const len = source.length + 1;
- // need 2 bytes per code point plus analysis space so we double again
- const extraMem = (wasm.__heap_base.value || wasm.__heap_base) + len * 4 - wasm.memory.buffer.byteLength;
- if (extraMem > 0) wasm.memory.grow(Math.ceil(extraMem / 65536));
- const addr = wasm.sa(len);
- (isLE ? copyLE : copyBE)(source, new Uint16Array(wasm.memory.buffer, addr, len));
- const err_code = wasm.parseCJS(addr, source.length, 0, 0, 0);
- if (err_code) {
- const err = new Error(`Parse error ${name}${wasm.e()}:${source.slice(0, wasm.e()).split('\n').length}:${wasm.e() - source.lastIndexOf('\n', wasm.e() - 1)}`);
- Object.assign(err, {
- idx: wasm.e()
- });
- if (err_code === 5 || err_code === 6 || err_code === 7) Object.assign(err, {
- code: 'ERR_LEXER_ESM_SYNTAX'
- });
- throw err;
- }
- let exports = new Set(),
- reexports = new Set(),
- unsafeGetters = new Set();
- while (wasm.rre()) {
- const reexptStr = decode(source.slice(wasm.res(), wasm.ree()));
- if (reexptStr) reexports.add(reexptStr);
- }
- while (wasm.ru()) unsafeGetters.add(decode(source.slice(wasm.us(), wasm.ue())));
- while (wasm.re()) {
- let exptStr = decode(source.slice(wasm.es(), wasm.ee()));
- if (exptStr !== undefined && !unsafeGetters.has(exptStr)) exports.add(exptStr);
- }
- return {
- exports: [...exports],
- reexports: [...reexports]
- };
- }
- function decode(str) {
- if (str[0] === '"' || str[0] === '\'') {
- try {
- const decoded = (0, eval)(str);
- // Filter to exclude non-matching UTF-16 surrogate strings
- for (let i = 0; i < decoded.length; i++) {
- const surrogatePrefix = decoded.charCodeAt(i) & 0xFC00;
- if (surrogatePrefix < 0xD800) {
- // Not a surrogate
- continue;
- } else if (surrogatePrefix === 0xD800) {
- // Validate surrogate pair
- if ((decoded.charCodeAt(++i) & 0xFC00) !== 0xDC00) return;
- } else {
- // Out-of-range surrogate code (above 0xD800)
- return;
- }
- }
- return decoded;
- } catch {}
- } else {
- return str;
- }
- }
- function copyBE(src, outBuf16) {
- const len = src.length;
- let i = 0;
- while (i < len) {
- const ch = src.charCodeAt(i);
- outBuf16[i++] = (ch & 0xff) << 8 | ch >>> 8;
- }
- }
- function copyLE(src, outBuf16) {
- const len = src.length;
- let i = 0;
- while (i < len) outBuf16[i] = src.charCodeAt(i++);
- }
- let initPromise;
- function init() {
- if (initPromise) return initPromise;
- return initPromise = (async () => {
- const compiled = await WebAssembly.compile((await import('node:fs')).readFileSync(new URL(import.meta.resolve('../lib/lexer.wasm'))));
- const {
- exports
- } = await WebAssembly.instantiate(compiled);
- wasm = exports;
- })();
- }
|