@knpkv/herdr-fleet 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,39 @@
1
+ import { Effect, Predicate, Schema, Stream } from "effect";
2
+ import { FleetResponseBodyError } from "./errors.js";
3
+ import { fleetResponseBodyMaxBytes } from "./limits.js";
4
+ export { fleetResponseBodyMaxBytes } from "./limits.js";
5
+ const emptyResponseBody = () => ({ bytes: 0, chunks: [] });
6
+ export const boundedResponseText = Effect.fn("FleetResponse.boundedText")(function* (response, maximumBytes = fleetResponseBodyMaxBytes) {
7
+ const collected = yield* response.stream.pipe(Stream.runFoldEffect(emptyResponseBody, (state, chunk) => {
8
+ const bytes = state.bytes + chunk.byteLength;
9
+ return bytes > maximumBytes
10
+ ? Effect.fail(new FleetResponseBodyError({
11
+ cause: bytes,
12
+ detail: `response body exceeded ${maximumBytes} bytes`,
13
+ reason: "too_large"
14
+ }))
15
+ : Effect.succeed({ bytes, chunks: [...state.chunks, chunk] });
16
+ }), Effect.mapError((cause) => Predicate.isTagged(cause, "FleetResponseBodyError")
17
+ ? cause
18
+ : new FleetResponseBodyError({
19
+ cause,
20
+ detail: String(cause),
21
+ reason: "transport"
22
+ })));
23
+ const body = new Uint8Array(collected.bytes);
24
+ let offset = 0;
25
+ for (const chunk of collected.chunks) {
26
+ body.set(chunk, offset);
27
+ offset += chunk.byteLength;
28
+ }
29
+ return new TextDecoder().decode(body);
30
+ });
31
+ export const decodeBoundedResponseJson = Effect.fn("FleetResponse.decodeJson")(function* (response, schema, maximumBytes = fleetResponseBodyMaxBytes) {
32
+ const text = yield* boundedResponseText(response, maximumBytes);
33
+ return yield* Schema.decodeUnknownEffect(Schema.fromJsonString(schema))(text).pipe(Effect.mapError((cause) => new FleetResponseBodyError({
34
+ cause,
35
+ detail: String(cause),
36
+ reason: "decode"
37
+ })));
38
+ });
39
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAOvD,MAAM,iBAAiB,GAAG,GAAsB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;AAE7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EACjF,QAA+C,EAC/C,YAAY,GAAG,yBAAyB;IAExC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAC3C,MAAM,CAAC,aAAa,CAClB,iBAAiB,EACjB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAA;QAC5C,OAAO,KAAK,GAAG,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CACX,IAAI,sBAAsB,CAAC;gBACzB,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,0BAA0B,YAAY,QAAQ;gBACtD,MAAM,EAAE,WAAW;aACpB,CAAC,CACH;YACD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IACjE,CAAC,CACF,EACD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;QACjD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,sBAAsB,CAAC;YAC3B,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;YACrB,MAAM,EAAE,WAAW;SACpB,CAAC,CACL,CACF,CAAA;IACD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC5C,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACvB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAA;IAC5B,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EACtF,QAA+C,EAC/C,MAA8C,EAC9C,YAAY,GAAG,yBAAyB;IAExC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC/D,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAChF,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,sBAAsB,CAAC;QACzB,KAAK;QACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrB,MAAM,EAAE,QAAQ;KACjB,CAAC,CACL,CACF,CAAA;AACH,CAAC,CAAC,CAAA"}