wasm-rquickjs 0.2.2

Tool for wrapping JavaScript modules as WebAssembly components using the QuickJS engine
Documentation
import { setTimeout, setInterval, setImmediate, clearTimeout, clearInterval, clearImmediate } from '__wasm_rquickjs_builtin/timeout';
import { setTimeout as pSetTimeout, setImmediate as pSetImmediate, setInterval as pSetInterval } from 'node:timers/promises';

export { setTimeout, setInterval, setImmediate, clearTimeout, clearInterval, clearImmediate };
export const promises = { setTimeout: pSetTimeout, setImmediate: pSetImmediate, setInterval: pSetInterval };

const TIMEOUT_MAX = 2 ** 31 - 1;

function emitWarning(msg, type, code) {
    if (typeof process !== 'undefined' && typeof process.emitWarning === 'function') {
        if (code) {
            process.emitWarning(msg, type, code);
        } else {
            process.emitWarning(msg, type);
        }
    }
}

export function enroll(item, msecs) {
    emitWarning('timers.enroll() is deprecated. Please use setTimeout instead.', 'DeprecationWarning', 'DEP0095');
    const delay = +msecs;
    if (delay > TIMEOUT_MAX) {
        emitWarning(`${msecs} does not fit into a 32-bit signed integer.\nTimer duration was truncated to ${TIMEOUT_MAX}.`, 'TimeoutOverflowWarning');
        item._idleTimeout = TIMEOUT_MAX;
    } else if (!(delay >= 1)) {
        item._idleTimeout = 1;
    } else {
        item._idleTimeout = Math.trunc(delay);
    }
    item._idleStart = Date.now();
}

export function active(item) {
    emitWarning('timers.active() is deprecated. Please use setTimeout instead.', 'DeprecationWarning', 'DEP0096');
    if (item._onTimeout && item._idleTimeout >= 0) {
        if (item.__timerHandle) {
            clearTimeout(item.__timerHandle);
        }
        item.__timerHandle = setTimeout(item._onTimeout, item._idleTimeout);
    }
}

export function unenroll(item) {
    emitWarning('timers.unenroll() is deprecated. Please use clearTimeout instead.', 'DeprecationWarning', 'DEP0096');
    if (item.__timerHandle) {
        clearTimeout(item.__timerHandle);
        item.__timerHandle = null;
    }
    item._idleTimeout = -1;
}

export default { setTimeout, setInterval, setImmediate, clearTimeout, clearInterval, clearImmediate, promises, active, unenroll, enroll };