@tanstack/router-core
Version:
Modern and scalable routing for React applications
1 lines • 2.85 kB
Source Map (JSON)
{"version":3,"file":"RawStreamJSONPlugin.cjs","names":[],"sources":["../../../../src/ssr/serializer/RawStreamJSONPlugin.ts"],"sourcesContent":["import { createPlugin } from 'seroval'\nimport { RawStream } from './RawStream'\nimport {\n decodeText,\n encodeText,\n fromBase64,\n fromEncodedStream,\n pumpEncodedStream,\n toBase64,\n} from './rawStreamCodec'\nimport type { createStream } from 'seroval'\nimport type { RawStreamJSONNode } from './RawStream'\n\n/**\n * Serializes a RawStream into JSON requests and static-cache responses.\n * The optional signal stops the source pump when the request is aborted.\n */\n/* @__NO_SIDE_EFFECTS__ */\nexport function createRawStreamJSONPlugin(signal?: AbortSignal) {\n return /* @__PURE__ */ createPlugin<RawStream, RawStreamJSONNode>({\n tag: 'tss/RawStream',\n test: (value) => value instanceof RawStream,\n parse: {\n async: async (value, ctx) => {\n // Parse the hint before touching the source so a failed parse never\n // locks the caller's stream.\n const text = await ctx.parse(value.hint === 'text')\n const [stream] = pumpEncodedStream(\n value.stream,\n value.hint === 'text' ? encodeText : toBase64,\n signal,\n )\n return { text, stream: await ctx.parse(stream) }\n },\n },\n serialize: undefined as never,\n deserialize: undefined as never,\n })\n}\n\nexport const RawStreamJSONPlugin = /* @__PURE__ */ createRawStreamJSONPlugin()\n\n/**\n * Deserializes the JSON shape above back into a `ReadableStream<Uint8Array>`.\n * `test` never matches, so this plugin is inert during serialization and can\n * share a plugin list with `RawStreamJSONPlugin`.\n */\nexport const RawStreamJSONDeserializePlugin = /* @__PURE__ */ createPlugin<\n ReadableStream<Uint8Array>,\n RawStreamJSONNode\n>({\n tag: 'tss/RawStream',\n test: () => false,\n parse: {},\n serialize: undefined as never,\n deserialize(node, ctx) {\n return fromEncodedStream(\n ctx.deserialize<ReturnType<typeof createStream<string | undefined>>>(\n node.stream,\n ),\n ctx.deserialize<boolean>(node.text) ? decodeText : fromBase64,\n )\n },\n})\n"],"mappings":";;;;;;;;;AAkBA,SAAgB,0BAA0B,QAAsB;CAC9D,OAAuB,iBAAA,GAAA,QAAA,cAA2C;EAChE,KAAK;EACL,OAAO,UAAU,iBAAiB,kBAAA;EAClC,OAAO,EACL,OAAO,OAAO,OAAO,QAAQ;GAG3B,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS,MAAM;GAClD,MAAM,CAAC,UAAU,uBAAA,kBACf,MAAM,QACN,MAAM,SAAS,SAAS,uBAAA,aAAa,uBAAA,UACrC,MACF;GACA,OAAO;IAAE;IAAM,QAAQ,MAAM,IAAI,MAAM,MAAM;GAAE;EACjD,EACF;EACA,WAAW,KAAA;EACX,aAAa,KAAA;CACf,CAAC;AACH;AAEA,MAAa,sBAAsC,0CAA0B;;;;;;AAO7E,MAAa,iCAAiD,iBAAA,GAAA,QAAA,cAG5D;CACA,KAAK;CACL,YAAY;CACZ,OAAO,CAAC;CACR,WAAW,KAAA;CACX,YAAY,MAAM,KAAK;EACrB,OAAO,uBAAA,kBACL,IAAI,YACF,KAAK,MACP,GACA,IAAI,YAAqB,KAAK,IAAI,IAAI,uBAAA,aAAa,uBAAA,UACrD;CACF;AACF,CAAC"}