UNPKG

@spiffcommerce/core

Version:

Core client API for interacting with the Spiff Commerce backend.

155 lines (154 loc) • 5.57 kB
import { t as z, f as x } from "./index-BK_Y6Sl7.js"; class T { marshaller; serializer; deserializer; serdeContext; defaultContentType; constructor({ marshaller: i, serializer: n, deserializer: o, serdeContext: c, defaultContentType: y }) { this.marshaller = i, this.serializer = n, this.deserializer = o, this.serdeContext = c, this.defaultContentType = y; } async serializeEventStream({ eventStream: i, requestSchema: n, initialRequest: o }) { const c = this.marshaller, y = n.getEventStreamMember(), p = n.getMemberSchema(y), d = this.serializer, u = this.defaultContentType, h = /* @__PURE__ */ Symbol("initialRequestMarker"), S = { async *[Symbol.asyncIterator]() { if (o) { const r = { ":event-type": { type: "string", value: "initial-request" }, ":message-type": { type: "string", value: "event" }, ":content-type": { type: "string", value: u } }; d.write(n, o); const t = d.flush(); yield { [h]: !0, headers: r, body: t }; } for await (const r of i) yield r; } }; return c.serialize(S, (r) => { if (r[h]) return { headers: r.headers, body: r.body }; const t = Object.keys(r).find((s) => s !== "__type") ?? "", { additionalHeaders: e, body: a, eventType: l, explicitPayloadContentType: m } = this.writeEventBody(t, p, r); return { headers: { ":event-type": { type: "string", value: l }, ":message-type": { type: "string", value: "event" }, ":content-type": { type: "string", value: m ?? u }, ...e }, body: a }; }); } async deserializeEventStream({ response: i, responseSchema: n, initialResponseContainer: o }) { const c = this.marshaller, y = n.getEventStreamMember(), d = n.getMemberSchema(y).getMemberSchemas(), u = /* @__PURE__ */ Symbol("initialResponseMarker"), h = c.deserialize(i.body, async (t) => { const e = Object.keys(t).find((l) => l !== "__type") ?? "", a = t[e].body; if (e === "initial-response") { const l = await this.deserializer.read(n, a); return delete l[y], { [u]: !0, ...l }; } else if (e in d) { const l = d[e]; if (l.isStructSchema()) { const m = {}; let f = !1; for (const [s, g] of l.structIterator()) { const { eventHeader: v, eventPayload: w } = g.getMergedTraits(); if (f = f || !!(v || w), w) g.isBlobSchema() ? m[s] = a : g.isStringSchema() ? m[s] = (this.serdeContext?.utf8Encoder ?? z)(a) : g.isStructSchema() && (m[s] = await this.deserializer.read(g, a)); else if (v) { const b = t[e].headers[s]?.value; b != null && (g.isNumericSchema() ? b && typeof b == "object" && "bytes" in b ? m[s] = BigInt(b.toString()) : m[s] = Number(b) : m[s] = b); } } if (f) return { [e]: m }; if (a.byteLength === 0) return { [e]: {} }; } return { [e]: await this.deserializer.read(l, a) }; } else return { $unknown: t }; }), S = h[Symbol.asyncIterator](), r = await S.next(); if (r.done) return h; if (r.value?.[u]) { if (!n) throw new Error("@smithy::core/protocols - initial-response event encountered in event stream but no response schema given."); for (const [t, e] of Object.entries(r.value)) o[t] = e; } return { async *[Symbol.asyncIterator]() { for (r?.value?.[u] || (yield r.value); ; ) { const { done: t, value: e } = await S.next(); if (t) break; yield e; } } }; } writeEventBody(i, n, o) { const c = this.serializer; let y = i, p = null, d; const u = n.getSchema()[4].includes(i), h = {}; if (u) { const t = n.getMemberSchema(i); if (t.isStructSchema()) { for (const [e, a] of t.structIterator()) { const { eventHeader: l, eventPayload: m } = a.getMergedTraits(); if (m) p = e; else if (l) { const f = o[i][e]; let s = "binary"; a.isNumericSchema() ? (-2) ** 31 <= f && f <= 2 ** 31 - 1 ? s = "integer" : s = "long" : a.isTimestampSchema() ? s = "timestamp" : a.isStringSchema() ? s = "string" : a.isBooleanSchema() && (s = "boolean"), f != null && (h[e] = { type: s, value: f }, delete o[i][e]); } } if (p !== null) { const e = t.getMemberSchema(p); e.isBlobSchema() ? d = "application/octet-stream" : e.isStringSchema() && (d = "text/plain"), c.write(e, o[i][p]); } else c.write(t, o[i]); } else if (t.isUnitSchema()) c.write(t, {}); else throw new Error("@smithy/core/event-streams - non-struct member not supported in event stream union."); } else { const [t, e] = o[i]; y = t, c.write(15, e); } const S = c.flush() ?? new Uint8Array(); return { body: typeof S == "string" ? (this.serdeContext?.utf8Decoder ?? x)(S) : S, eventType: y, explicitPayloadContentType: d, additionalHeaders: h }; } } export { T as EventStreamSerde }; //# sourceMappingURL=index-DUIgJq_6.js.map