@spiffcommerce/core
Version:
Core client API for interacting with the Spiff Commerce backend.
155 lines (154 loc) • 5.57 kB
JavaScript
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