{"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"}