diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-13 21:34:48 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-13 21:34:48 -0800 |
| commit | 76cb9c2a39d477a64824a985ade40507e3bbade1 (patch) | |
| tree | 41e997aa9c6f538d3a136af61dae9424db2005a9 /vanilla/node_modules/vitest/dist/chunks/index.Chj8NDwU.js | |
| parent | 819a39a21ac992b1393244a4c283bbb125208c69 (diff) | |
| download | neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.gz neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.bz2 neko-76cb9c2a39d477a64824a985ade40507e3bbade1.zip | |
feat(vanilla): add testing infrastructure and tests (NK-wjnczv)
Diffstat (limited to 'vanilla/node_modules/vitest/dist/chunks/index.Chj8NDwU.js')
| -rw-r--r-- | vanilla/node_modules/vitest/dist/chunks/index.Chj8NDwU.js | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/vanilla/node_modules/vitest/dist/chunks/index.Chj8NDwU.js b/vanilla/node_modules/vitest/dist/chunks/index.Chj8NDwU.js new file mode 100644 index 0000000..5943b9b --- /dev/null +++ b/vanilla/node_modules/vitest/dist/chunks/index.Chj8NDwU.js @@ -0,0 +1,206 @@ +//#region src/messages.ts +const TYPE_REQUEST = "q"; +const TYPE_RESPONSE = "s"; + +//#endregion +//#region src/utils.ts +function createPromiseWithResolvers() { + let resolve; + let reject; + return { + promise: new Promise((res, rej) => { + resolve = res; + reject = rej; + }), + resolve, + reject + }; +} +const random = Math.random.bind(Math); +const urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"; +function nanoid(size = 21) { + let id = ""; + let i = size; + while (i--) id += urlAlphabet[random() * 64 | 0]; + return id; +} + +//#endregion +//#region src/main.ts +const DEFAULT_TIMEOUT = 6e4; +const defaultSerialize = (i) => i; +const defaultDeserialize = defaultSerialize; +const { clearTimeout, setTimeout } = globalThis; +function createBirpc($functions, options) { + const { post, on, off = () => {}, eventNames = [], serialize = defaultSerialize, deserialize = defaultDeserialize, resolver, bind = "rpc", timeout = DEFAULT_TIMEOUT, proxify = true } = options; + let $closed = false; + const _rpcPromiseMap = /* @__PURE__ */ new Map(); + let _promiseInit; + let rpc; + async function _call(method, args, event, optional) { + if ($closed) throw new Error(`[birpc] rpc is closed, cannot call "${method}"`); + const req = { + m: method, + a: args, + t: TYPE_REQUEST + }; + if (optional) req.o = true; + const send = async (_req) => post(serialize(_req)); + if (event) { + await send(req); + return; + } + if (_promiseInit) try { + await _promiseInit; + } finally { + _promiseInit = void 0; + } + let { promise, resolve, reject } = createPromiseWithResolvers(); + const id = nanoid(); + req.i = id; + let timeoutId; + async function handler(newReq = req) { + if (timeout >= 0) { + timeoutId = setTimeout(() => { + try { + if (options.onTimeoutError?.call(rpc, method, args) !== true) throw new Error(`[birpc] timeout on calling "${method}"`); + } catch (e) { + reject(e); + } + _rpcPromiseMap.delete(id); + }, timeout); + if (typeof timeoutId === "object") timeoutId = timeoutId.unref?.(); + } + _rpcPromiseMap.set(id, { + resolve, + reject, + timeoutId, + method + }); + await send(newReq); + return promise; + } + try { + if (options.onRequest) await options.onRequest.call(rpc, req, handler, resolve); + else await handler(); + } catch (e) { + if (options.onGeneralError?.call(rpc, e) !== true) throw e; + return; + } finally { + clearTimeout(timeoutId); + _rpcPromiseMap.delete(id); + } + return promise; + } + const builtinMethods = { + $call: (method, ...args) => _call(method, args, false), + $callOptional: (method, ...args) => _call(method, args, false, true), + $callEvent: (method, ...args) => _call(method, args, true), + $callRaw: (options$1) => _call(options$1.method, options$1.args, options$1.event, options$1.optional), + $rejectPendingCalls, + get $closed() { + return $closed; + }, + get $meta() { + return options.meta; + }, + $close, + $functions + }; + if (proxify) rpc = new Proxy({}, { get(_, method) { + if (Object.prototype.hasOwnProperty.call(builtinMethods, method)) return builtinMethods[method]; + if (method === "then" && !eventNames.includes("then") && !("then" in $functions)) return void 0; + const sendEvent = (...args) => _call(method, args, true); + if (eventNames.includes(method)) { + sendEvent.asEvent = sendEvent; + return sendEvent; + } + const sendCall = (...args) => _call(method, args, false); + sendCall.asEvent = sendEvent; + return sendCall; + } }); + else rpc = builtinMethods; + function $close(customError) { + $closed = true; + _rpcPromiseMap.forEach(({ reject, method }) => { + const error = /* @__PURE__ */ new Error(`[birpc] rpc is closed, cannot call "${method}"`); + if (customError) { + customError.cause ??= error; + return reject(customError); + } + reject(error); + }); + _rpcPromiseMap.clear(); + off(onMessage); + } + function $rejectPendingCalls(handler) { + const handlerResults = Array.from(_rpcPromiseMap.values()).map(({ method, reject }) => { + if (!handler) return reject(/* @__PURE__ */ new Error(`[birpc]: rejected pending call "${method}".`)); + return handler({ + method, + reject + }); + }); + _rpcPromiseMap.clear(); + return handlerResults; + } + async function onMessage(data, ...extra) { + let msg; + try { + msg = deserialize(data); + } catch (e) { + if (options.onGeneralError?.call(rpc, e) !== true) throw e; + return; + } + if (msg.t === TYPE_REQUEST) { + const { m: method, a: args, o: optional } = msg; + let result, error; + let fn = await (resolver ? resolver.call(rpc, method, $functions[method]) : $functions[method]); + if (optional) fn ||= () => void 0; + if (!fn) error = /* @__PURE__ */ new Error(`[birpc] function "${method}" not found`); + else try { + result = await fn.apply(bind === "rpc" ? rpc : $functions, args); + } catch (e) { + error = e; + } + if (msg.i) { + if (error && options.onFunctionError) { + if (options.onFunctionError.call(rpc, error, method, args) === true) return; + } + if (!error) try { + await post(serialize({ + t: TYPE_RESPONSE, + i: msg.i, + r: result + }), ...extra); + return; + } catch (e) { + error = e; + if (options.onGeneralError?.call(rpc, e, method, args) !== true) throw e; + } + try { + await post(serialize({ + t: TYPE_RESPONSE, + i: msg.i, + e: error + }), ...extra); + } catch (e) { + if (options.onGeneralError?.call(rpc, e, method, args) !== true) throw e; + } + } + } else { + const { i: ack, r: result, e: error } = msg; + const promise = _rpcPromiseMap.get(ack); + if (promise) { + clearTimeout(promise.timeoutId); + if (error) promise.reject(error); + else promise.resolve(result); + } + _rpcPromiseMap.delete(ack); + } + } + _promiseInit = on(onMessage); + return rpc; +} + +export { createBirpc as c }; |
