UNPKG

seroval-plugins

Version:
796 lines (782 loc) 20.4 kB
// web/abort-signal.ts import { createPlugin } from "seroval"; var PROMISE_TO_ABORT_SIGNAL = (promise) => { const controller = new AbortController(); const abort = controller.abort.bind(controller); promise.then(abort, abort); return controller; }; function resolveAbortSignalResult(resolve) { resolve(this.reason); } function resolveAbortSignal(resolve) { this.addEventListener("abort", resolveAbortSignalResult.bind(this, resolve), { once: true }); } function abortSignalToPromise(signal) { return new Promise(resolveAbortSignal.bind(signal)); } var ABORT_CONTROLLER = {}; var AbortControllerFactoryPlugin = /* @__PURE__ */ createPlugin({ tag: "seroval-plugins/web/AbortControllerFactoryPlugin", test(value) { return value === ABORT_CONTROLLER; }, parse: { sync() { return ABORT_CONTROLLER; }, async async() { return await Promise.resolve(ABORT_CONTROLLER); }, stream() { return ABORT_CONTROLLER; } }, serialize() { return PROMISE_TO_ABORT_SIGNAL.toString(); }, deserialize() { return PROMISE_TO_ABORT_SIGNAL; } }); var AbortSignalPlugin = /* @__PURE__ */ createPlugin({ tag: "seroval-plugins/web/AbortSignal", extends: [AbortControllerFactoryPlugin], test(value) { if (typeof AbortSignal === "undefined") { return false; } return value instanceof AbortSignal; }, parse: { sync(value, ctx) { if (value.aborted) { return { reason: ctx.parse(value.reason) }; } return {}; }, async async(value, ctx) { if (value.aborted) { return { reason: await ctx.parse(value.reason) }; } const result = await abortSignalToPromise(value); return { reason: await ctx.parse(result) }; }, stream(value, ctx) { if (value.aborted) { return { reason: ctx.parse(value.reason) }; } const promise = abortSignalToPromise(value); return { factory: ctx.parse(ABORT_CONTROLLER), controller: ctx.parse(promise) }; } }, serialize(node, ctx) { if (node.reason) { return "AbortSignal.abort(" + ctx.serialize(node.reason) + ")"; } if (node.controller && node.factory) { return "(" + ctx.serialize(node.factory) + ")(" + ctx.serialize(node.controller) + ").signal"; } return "(new AbortController).signal"; }, deserialize(node, ctx) { if (node.reason) { return AbortSignal.abort(ctx.deserialize(node.reason)); } if (node.controller) { return PROMISE_TO_ABORT_SIGNAL(ctx.deserialize(node.controller)).signal; } const controller = new AbortController(); return controller.signal; } }); var abort_signal_default = AbortSignalPlugin; // web/blob.ts import { createPlugin as createPlugin2 } from "seroval"; var BlobPlugin = /* @__PURE__ */ createPlugin2({ tag: "seroval-plugins/web/Blob", test(value) { if (typeof Blob === "undefined") { return false; } return value instanceof Blob; }, parse: { async async(value, ctx) { return { type: await ctx.parse(value.type), buffer: await ctx.parse(await value.arrayBuffer()) }; } }, serialize(node, ctx) { return "new Blob([" + ctx.serialize(node.buffer) + "],{type:" + ctx.serialize(node.type) + "})"; }, deserialize(node, ctx) { return new Blob([ctx.deserialize(node.buffer)], { type: ctx.deserialize(node.type) }); } }); var blob_default = BlobPlugin; // web/custom-event.ts import { createPlugin as createPlugin3 } from "seroval"; function createCustomEventOptions(current) { return { detail: current.detail, bubbles: current.bubbles, cancelable: current.cancelable, composed: current.composed }; } var CustomEventPlugin = /* @__PURE__ */ createPlugin3({ tag: "seroval-plugins/web/CustomEvent", test(value) { if (typeof CustomEvent === "undefined") { return false; } return value instanceof CustomEvent; }, parse: { sync(value, ctx) { return { type: ctx.parse(value.type), options: ctx.parse(createCustomEventOptions(value)) }; }, async async(value, ctx) { return { type: await ctx.parse(value.type), options: await ctx.parse(createCustomEventOptions(value)) }; }, stream(value, ctx) { return { type: ctx.parse(value.type), options: ctx.parse(createCustomEventOptions(value)) }; } }, serialize(node, ctx) { return "new CustomEvent(" + ctx.serialize(node.type) + "," + ctx.serialize(node.options) + ")"; }, deserialize(node, ctx) { return new CustomEvent( ctx.deserialize(node.type), ctx.deserialize(node.options) ); } }); var custom_event_default = CustomEventPlugin; // web/dom-exception.ts import { createPlugin as createPlugin4 } from "seroval"; var DOMExceptionPlugin = /* @__PURE__ */ createPlugin4({ tag: "seroval-plugins/web/DOMException", test(value) { if (typeof DOMException === "undefined") { return false; } return value instanceof DOMException; }, parse: { sync(value, ctx) { return { name: ctx.parse(value.name), message: ctx.parse(value.message) }; }, async async(value, ctx) { return { name: await ctx.parse(value.name), message: await ctx.parse(value.message) }; }, stream(value, ctx) { return { name: ctx.parse(value.name), message: ctx.parse(value.message) }; } }, serialize(node, ctx) { return "new DOMException(" + ctx.serialize(node.message) + "," + ctx.serialize(node.name) + ")"; }, deserialize(node, ctx) { return new DOMException( ctx.deserialize(node.message), ctx.deserialize(node.name) ); } }); var dom_exception_default = DOMExceptionPlugin; // web/event.ts import { createPlugin as createPlugin5 } from "seroval"; function createEventOptions(current) { return { bubbles: current.bubbles, cancelable: current.cancelable, composed: current.composed }; } var EventPlugin = /* @__PURE__ */ createPlugin5({ tag: "seroval-plugins/web/Event", test(value) { if (typeof Event === "undefined") { return false; } return value instanceof Event; }, parse: { sync(value, ctx) { return { type: ctx.parse(value.type), options: ctx.parse(createEventOptions(value)) }; }, async async(value, ctx) { return { type: await ctx.parse(value.type), options: await ctx.parse(createEventOptions(value)) }; }, stream(value, ctx) { return { type: ctx.parse(value.type), options: ctx.parse(createEventOptions(value)) }; } }, serialize(node, ctx) { return "new Event(" + ctx.serialize(node.type) + "," + ctx.serialize(node.options) + ")"; }, deserialize(node, ctx) { return new Event( ctx.deserialize(node.type), ctx.deserialize(node.options) ); } }); var event_default = EventPlugin; // web/file.ts import { createPlugin as createPlugin6 } from "seroval"; var FilePlugin = /* @__PURE__ */ createPlugin6({ tag: "seroval-plugins/web/File", test(value) { if (typeof File === "undefined") { return false; } return value instanceof File; }, parse: { async async(value, ctx) { return { name: await ctx.parse(value.name), options: await ctx.parse({ type: value.type, lastModified: value.lastModified }), buffer: await ctx.parse(await value.arrayBuffer()) }; } }, serialize(node, ctx) { return "new File([" + ctx.serialize(node.buffer) + "]," + ctx.serialize(node.name) + "," + ctx.serialize(node.options) + ")"; }, deserialize(node, ctx) { return new File( [ctx.deserialize(node.buffer)], ctx.deserialize(node.name), ctx.deserialize(node.options) ); } }); var file_default = FilePlugin; // web/form-data.ts import { createPlugin as createPlugin7 } from "seroval"; function convertFormData(instance) { const items = []; instance.forEach((value, key) => { items.push([key, value]); }); return items; } var FORM_DATA_FACTORY = {}; var FORM_DATA_FACTORY_CONSTRUCTOR = (e, f = new FormData(), i = 0, s = e.length, t) => { for (; i < s; i++) { t = e[i]; f.append(t[0], t[1]); } return f; }; var FormDataFactoryPlugin = /* @__PURE__ */ createPlugin7({ tag: "seroval-plugins/web/FormDataFactory", test(value) { return value === FORM_DATA_FACTORY; }, parse: { sync() { return FORM_DATA_FACTORY; }, async async() { return await Promise.resolve(FORM_DATA_FACTORY); }, stream() { return FORM_DATA_FACTORY; } }, serialize() { return FORM_DATA_FACTORY_CONSTRUCTOR.toString(); }, deserialize() { return FORM_DATA_FACTORY; } }); var FormDataPlugin = /* @__PURE__ */ createPlugin7({ tag: "seroval-plugins/web/FormData", extends: [file_default, FormDataFactoryPlugin], test(value) { if (typeof FormData === "undefined") { return false; } return value instanceof FormData; }, parse: { sync(value, ctx) { return { factory: ctx.parse(FORM_DATA_FACTORY), entries: ctx.parse(convertFormData(value)) }; }, async async(value, ctx) { return { factory: await ctx.parse(FORM_DATA_FACTORY), entries: await ctx.parse(convertFormData(value)) }; }, stream(value, ctx) { return { factory: ctx.parse(FORM_DATA_FACTORY), entries: ctx.parse(convertFormData(value)) }; } }, serialize(node, ctx) { return "(" + ctx.serialize(node.factory) + ")(" + ctx.serialize(node.entries) + ")"; }, deserialize(node, ctx) { return FORM_DATA_FACTORY_CONSTRUCTOR( ctx.deserialize(node.entries) ); } }); var form_data_default = FormDataPlugin; // web/headers.ts import { createPlugin as createPlugin8 } from "seroval"; function convertHeaders(instance) { const items = []; instance.forEach((value, key) => { items.push([key, value]); }); return items; } var HeadersPlugin = /* @__PURE__ */ createPlugin8({ tag: "seroval-plugins/web/Headers", test(value) { if (typeof Headers === "undefined") { return false; } return value instanceof Headers; }, parse: { sync(value, ctx) { return { value: ctx.parse(convertHeaders(value)) }; }, async async(value, ctx) { return { value: await ctx.parse(convertHeaders(value)) }; }, stream(value, ctx) { return { value: ctx.parse(convertHeaders(value)) }; } }, serialize(node, ctx) { return "new Headers(" + ctx.serialize(node.value) + ")"; }, deserialize(node, ctx) { return new Headers(ctx.deserialize(node.value)); } }); var headers_default = HeadersPlugin; // web/image-data.ts import { createPlugin as createPlugin9 } from "seroval"; var ImageDataPlugin = /* @__PURE__ */ createPlugin9({ tag: "seroval-plugins/web/ImageData", test(value) { if (typeof ImageData === "undefined") { return false; } return value instanceof ImageData; }, parse: { sync(value, ctx) { return { data: ctx.parse(value.data), width: ctx.parse(value.width), height: ctx.parse(value.height), options: ctx.parse({ colorSpace: value.colorSpace }) }; }, async async(value, ctx) { return { data: await ctx.parse(value.data), width: await ctx.parse(value.width), height: await ctx.parse(value.height), options: await ctx.parse({ colorSpace: value.colorSpace }) }; }, stream(value, ctx) { return { data: ctx.parse(value.data), width: ctx.parse(value.width), height: ctx.parse(value.height), options: ctx.parse({ colorSpace: value.colorSpace }) }; } }, serialize(node, ctx) { return "new ImageData(" + ctx.serialize(node.data) + "," + ctx.serialize(node.width) + "," + ctx.serialize(node.height) + "," + ctx.serialize(node.options) + ")"; }, deserialize(node, ctx) { return new ImageData( ctx.deserialize(node.data), ctx.deserialize(node.width), ctx.deserialize(node.height), ctx.deserialize(node.options) ); } }); var image_data_default = ImageDataPlugin; // web/readable-stream.ts import { createPlugin as createPlugin10, createStream } from "seroval"; var READABLE_STREAM_FACTORY = {}; var READABLE_STREAM_FACTORY_CONSTRUCTOR = (stream) => new ReadableStream({ start: (controller) => { stream.on({ next: (value) => { try { controller.enqueue(value); } catch (_error) { } }, throw: (value) => { controller.error(value); }, return: () => { try { controller.close(); } catch (_error) { } } }); } }); var ReadableStreamFactoryPlugin = /* @__PURE__ */ createPlugin10({ tag: "seroval-plugins/web/ReadableStreamFactory", test(value) { return value === READABLE_STREAM_FACTORY; }, parse: { sync() { return READABLE_STREAM_FACTORY; }, async async() { return await Promise.resolve(READABLE_STREAM_FACTORY); }, stream() { return READABLE_STREAM_FACTORY; } }, serialize() { return READABLE_STREAM_FACTORY_CONSTRUCTOR.toString(); }, deserialize() { return READABLE_STREAM_FACTORY; } }); function toStream(value) { const stream = createStream(); const reader = value.getReader(); async function push() { try { const result = await reader.read(); if (result.done) { stream.return(result.value); } else { stream.next(result.value); await push(); } } catch (error) { stream.throw(error); } } push().catch(() => { }); return stream; } var ReadableStreamPlugin = /* @__PURE__ */ createPlugin10({ tag: "seroval/plugins/web/ReadableStream", extends: [ReadableStreamFactoryPlugin], test(value) { if (typeof ReadableStream === "undefined") { return false; } return value instanceof ReadableStream; }, parse: { sync(_value, ctx) { return { factory: ctx.parse(READABLE_STREAM_FACTORY), stream: ctx.parse(createStream()) }; }, async async(value, ctx) { return { factory: await ctx.parse(READABLE_STREAM_FACTORY), stream: await ctx.parse(toStream(value)) }; }, stream(value, ctx) { return { factory: ctx.parse(READABLE_STREAM_FACTORY), stream: ctx.parse(toStream(value)) }; } }, serialize(node, ctx) { return "(" + ctx.serialize(node.factory) + ")(" + ctx.serialize(node.stream) + ")"; }, deserialize(node, ctx) { const stream = ctx.deserialize(node.stream); return READABLE_STREAM_FACTORY_CONSTRUCTOR(stream); } }); var readable_stream_default = ReadableStreamPlugin; // web/request.ts import { createPlugin as createPlugin11 } from "seroval"; function createRequestOptions(current, body) { return { body, cache: current.cache, credentials: current.credentials, headers: current.headers, integrity: current.integrity, keepalive: current.keepalive, method: current.method, mode: current.mode, redirect: current.redirect, referrer: current.referrer, referrerPolicy: current.referrerPolicy }; } var RequestPlugin = /* @__PURE__ */ createPlugin11({ tag: "seroval-plugins/web/Request", extends: [readable_stream_default, headers_default], test(value) { if (typeof Request === "undefined") { return false; } return value instanceof Request; }, parse: { async async(value, ctx) { return { url: await ctx.parse(value.url), options: await ctx.parse( createRequestOptions( value, value.body && !value.bodyUsed ? await value.clone().arrayBuffer() : null ) ) }; }, stream(value, ctx) { return { url: ctx.parse(value.url), options: ctx.parse( createRequestOptions( value, value.body && !value.bodyUsed ? value.clone().body : null ) ) }; } }, serialize(node, ctx) { return "new Request(" + ctx.serialize(node.url) + "," + ctx.serialize(node.options) + ")"; }, deserialize(node, ctx) { return new Request( ctx.deserialize(node.url), ctx.deserialize(node.options) ); } }); var request_default = RequestPlugin; // web/response.ts import { createPlugin as createPlugin12 } from "seroval"; function createResponseOptions(current) { return { headers: current.headers, status: current.status, statusText: current.statusText }; } var ResponsePlugin = /* @__PURE__ */ createPlugin12({ tag: "seroval-plugins/web/Response", extends: [readable_stream_default, headers_default], test(value) { if (typeof Response === "undefined") { return false; } return value instanceof Response; }, parse: { async async(value, ctx) { return { body: await ctx.parse( value.body && !value.bodyUsed ? await value.clone().arrayBuffer() : null ), options: await ctx.parse(createResponseOptions(value)) }; }, stream(value, ctx) { return { body: ctx.parse( value.body && !value.bodyUsed ? value.clone().body : null ), options: ctx.parse(createResponseOptions(value)) }; } }, serialize(node, ctx) { return "new Response(" + ctx.serialize(node.body) + "," + ctx.serialize(node.options) + ")"; }, deserialize(node, ctx) { return new Response( ctx.deserialize(node.body), ctx.deserialize(node.options) ); } }); var response_default = ResponsePlugin; // web/url.ts import { createPlugin as createPlugin13 } from "seroval"; var URLPlugin = /* @__PURE__ */ createPlugin13({ tag: "seroval-plugins/web/URL", test(value) { if (typeof URL === "undefined") { return false; } return value instanceof URL; }, parse: { sync(value, ctx) { return { value: ctx.parse(value.href) }; }, async async(value, ctx) { return { value: await ctx.parse(value.href) }; }, stream(value, ctx) { return { value: ctx.parse(value.href) }; } }, serialize(node, ctx) { return "new URL(" + ctx.serialize(node.value) + ")"; }, deserialize(node, ctx) { return new URL(ctx.deserialize(node.value)); } }); var url_default = URLPlugin; // web/url-search-params.ts import { createPlugin as createPlugin14 } from "seroval"; var URLSearchParamsPlugin = /* @__PURE__ */ createPlugin14({ tag: "seroval-plugins/web/URLSearchParams", test(value) { if (typeof URLSearchParams === "undefined") { return false; } return value instanceof URLSearchParams; }, parse: { sync(value, ctx) { return { value: ctx.parse(value.toString()) }; }, async async(value, ctx) { return { value: await ctx.parse(value.toString()) }; }, stream(value, ctx) { return { value: ctx.parse(value.toString()) }; } }, serialize(node, ctx) { return "new URLSearchParams(" + ctx.serialize(node.value) + ")"; }, deserialize(node, ctx) { return new URLSearchParams(ctx.deserialize(node.value)); } }); var url_search_params_default = URLSearchParamsPlugin; export { abort_signal_default as AbortSignalPlugin, blob_default as BlobPlugin, custom_event_default as CustomEventPlugin, dom_exception_default as DOMExceptionPlugin, event_default as EventPlugin, file_default as FilePlugin, form_data_default as FormDataPlugin, headers_default as HeadersPlugin, image_data_default as ImageDataPlugin, readable_stream_default as ReadableStreamPlugin, request_default as RequestPlugin, response_default as ResponsePlugin, url_default as URLPlugin, url_search_params_default as URLSearchParamsPlugin }; //# sourceMappingURL=web.mjs.map