@effect-app/infra 1.20.0 → 1.20.1

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 1.20.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 4ea1323: support schema R
8
+
3
9
  ## 1.20.0
4
10
 
5
11
  ### Minor Changes
@@ -14,7 +14,8 @@ const keepAlive = _effectApp.Stream.schedule(_effectApp.Effect.succeed(":keep-al
14
14
  const makeSSE = (events, schema) => _effectApp.Effect.gen(function* () {
15
15
  yield* _effectApp.Effect.logInfo("$ start listening to events");
16
16
  const enc = new TextEncoder();
17
- const eventStream = _effectApp.Stream.map(events, _ => `id: ${_.evt.id}\ndata: ${JSON.stringify(_effectApp.S.encodeSync(schema)(_.evt))}`);
17
+ const encode = _effectApp.S.encode(schema);
18
+ const eventStream = _effectApp.Stream.flatMap(events, _ => encode(_.evt).pipe(_effectApp.Effect.andThen(evt => `id: ${_.evt.id}\ndata: ${JSON.stringify(evt)}`)));
18
19
  const stream = (0, _effectApp.pipe)(setRetry, _effectApp.Stream.merge(keepAlive), _effectApp.Stream.merge(eventStream), _effectApp.Stream.map(_ => enc.encode(_ + "\n\n")));
19
20
  const ctx = yield* _effectApp.Effect.context();
20
21
  const res = _http.HttpServerResponse.stream(stream.pipe(_effectApp.Stream.tapErrorCause((0, _errorReporter.reportError)("Request")), _effectApp.Stream.provideContext(ctx)), {
@@ -1 +1 @@
1
- {"version":3,"file":"events.cjs","names":["_setupRequest","require","_errorReporter","_effectApp","_http","setRetry","Stream","succeed","keepAlive","schedule","Effect","Schedule","fixed","Duration","seconds","makeSSE","events","schema","gen","logInfo","enc","TextEncoder","eventStream","map","_","evt","id","JSON","stringify","S","encodeSync","stream","pipe","merge","encode","ctx","context","res","HttpServerResponse","tapErrorCause","reportError","provideContext","contentType","headers","HttpHeaders","fromInput","setupRequestContext","exports"],"sources":["../../../src/api/internal/events.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAEA;AACA,MAAMI,QAAQ,GAAGC,iBAAM,CAACC,OAAO,CAAC,cAAc,CAAC;AAC/C,MAAMC,SAAS,GAAGF,iBAAM,CAACG,QAAQ,CAACC,iBAAM,CAACH,OAAO,CAAC,aAAa,CAAC,EAAEI,mBAAQ,CAACC,KAAK,CAACC,mBAAQ,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/F,MAAMC,OAAO,GAAGA,CAAiCC,MAAyD,EAAEC,MAAuB,KAAKP,iBAAM,CAClJQ,GAAG,CAAC,aAAS;EACZ,OAAOR,iBAAM,CAACS,OAAO,CAAC,6BAA6B,CAAC;EAEpD,MAAMC,GAAG,GAAG,IAAIC,WAAW,EAAE;EAE7B,MAAMC,WAAW,GAAGhB,iBAAM,CAACiB,GAAG,CAC5BP,MAAM,EACLQ,CAAC,IAAK,OAAOA,CAAC,CAACC,GAAG,CAACC,EAAE,WAAWC,IAAI,CAACC,SAAS,CAACC,YAAC,CAACC,UAAU,CAACb,MAAM,CAAC,CAACO,CAAC,CAACC,GAAG,CAAC,CAAC,EAAE,CAC/E;EAED,MAAMM,MAAM,GAAG,IAAAC,eAAI,EACjB3B,QAAQ,EACRC,iBAAM,CAAC2B,KAAK,CAACzB,SAAS,CAAC,EACvBF,iBAAM,CAAC2B,KAAK,CAACX,WAAW,CAAC,EACzBhB,iBAAM,CAACiB,GAAG,CAAEC,CAAC,IAAKJ,GAAG,CAACc,MAAM,CAACV,CAAC,GAAG,MAAM,CAAC,CAAC,CAC1C;EAED,MAAMW,GAAG,GAAG,OAAOzB,iBAAM,CAAC0B,OAAO,EAAK;EACtC,MAAMC,GAAG,GAAGC,wBAAkB,CAACP,MAAM,CACnCA,MAAM,CACHC,IAAI,CACH1B,iBAAM,CAACiC,aAAa,CAAC,IAAAC,0BAAW,EAAC,SAAS,CAAC,CAAC,EAC5ClC,iBAAM,CAACmC,cAAc,CAACN,GAAG,CAAC,CAC3B,EACH;IACEO,WAAW,EAAE,mBAAmB;IAChCC,OAAO,EAAEC,iBAAW,CAACC,SAAS,CAAC;MAC7B,cAAc,EAAE,mBAAmB;MACnC,eAAe,EAAE,UAAU;MAC3B,mBAAmB,EAAE,IAAI;MACzB,YAAY,EAAE,YAAY,CAAC;KAC5B;GACF,CACF;EACD,OAAOR,GAAG;AACZ,CAAC,CAAC,CACDL,IAAI,CAACtB,iBAAM,CAAC6B,aAAa,CAAC,IAAAC,0BAAW,EAAC,SAAS,CAAC,CAAC,EAAGhB,CAAC,IAAK,IAAAsB,iCAAmB,EAACtB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAAuB,OAAA,CAAAhC,OAAA,GAAAA,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"events.cjs","names":["_setupRequest","require","_errorReporter","_effectApp","_http","setRetry","Stream","succeed","keepAlive","schedule","Effect","Schedule","fixed","Duration","seconds","makeSSE","events","schema","gen","logInfo","enc","TextEncoder","encode","S","eventStream","flatMap","_","evt","pipe","andThen","id","JSON","stringify","stream","merge","map","ctx","context","res","HttpServerResponse","tapErrorCause","reportError","provideContext","contentType","headers","HttpHeaders","fromInput","setupRequestContext","exports"],"sources":["../../../src/api/internal/events.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAEA;AACA,MAAMI,QAAQ,GAAGC,iBAAM,CAACC,OAAO,CAAC,cAAc,CAAC;AAC/C,MAAMC,SAAS,GAAGF,iBAAM,CAACG,QAAQ,CAACC,iBAAM,CAACH,OAAO,CAAC,aAAa,CAAC,EAAEI,mBAAQ,CAACC,KAAK,CAACC,mBAAQ,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/F,MAAMC,OAAO,GAAGA,CACrBC,MAA0D,EAC1DC,MAA2B,KAE3BP,iBAAM,CACHQ,GAAG,CAAC,aAAS;EACZ,OAAOR,iBAAM,CAACS,OAAO,CAAC,6BAA6B,CAAC;EAEpD,MAAMC,GAAG,GAAG,IAAIC,WAAW,EAAE;EAE7B,MAAMC,MAAM,GAAGC,YAAC,CAACD,MAAM,CAACL,MAAM,CAAC;EAE/B,MAAMO,WAAW,GAAGlB,iBAAM,CAACmB,OAAO,CAChCT,MAAM,EACLU,CAAC,IACAJ,MAAM,CAACI,CAAC,CAACC,GAAG,CAAC,CACVC,IAAI,CAAClB,iBAAM,CAACmB,OAAO,CAAEF,GAAG,IAAK,OAAOD,CAAC,CAACC,GAAG,CAACG,EAAE,WAAWC,IAAI,CAACC,SAAS,CAACL,GAAG,CAAC,EAAE,CAAC,CAAC,CACpF;EAED,MAAMM,MAAM,GAAG,IAAAL,eAAI,EACjBvB,QAAQ,EACRC,iBAAM,CAAC4B,KAAK,CAAC1B,SAAS,CAAC,EACvBF,iBAAM,CAAC4B,KAAK,CAACV,WAAW,CAAC,EACzBlB,iBAAM,CAAC6B,GAAG,CAAET,CAAC,IAAKN,GAAG,CAACE,MAAM,CAACI,CAAC,GAAG,MAAM,CAAC,CAAC,CAC1C;EAED,MAAMU,GAAG,GAAG,OAAO1B,iBAAM,CAAC2B,OAAO,EAAU;EAC3C,MAAMC,GAAG,GAAGC,wBAAkB,CAACN,MAAM,CACnCA,MAAM,CACHL,IAAI,CACHtB,iBAAM,CAACkC,aAAa,CAAC,IAAAC,0BAAW,EAAC,SAAS,CAAC,CAAC,EAC5CnC,iBAAM,CAACoC,cAAc,CAACN,GAAG,CAAC,CAC3B,EACH;IACEO,WAAW,EAAE,mBAAmB;IAChCC,OAAO,EAAEC,iBAAW,CAACC,SAAS,CAAC;MAC7B,cAAc,EAAE,mBAAmB;MACnC,eAAe,EAAE,UAAU;MAC3B,mBAAmB,EAAE,IAAI;MACzB,YAAY,EAAE,YAAY,CAAC;KAC5B;GACF,CACF;EACD,OAAOR,GAAG;AACZ,CAAC,CAAC,CACDV,IAAI,CAAClB,iBAAM,CAAC8B,aAAa,CAAC,IAAAC,0BAAW,EAAC,SAAS,CAAC,CAAC,EAAGf,CAAC,IAAK,IAAAqB,iCAAmB,EAACrB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAAsB,OAAA,CAAAjC,OAAA,GAAAA,OAAA","ignoreList":[]}
@@ -2,8 +2,8 @@ import { Effect, S, Stream } from "effect-app";
2
2
  import { HttpServerResponse } from "effect-app/http";
3
3
  export declare const makeSSE: <A extends {
4
4
  id: any;
5
- }, E, R, SI>(events: Stream.Stream<{
5
+ }, E, R, SI, SR>(events: Stream.Stream<{
6
6
  evt: A;
7
7
  namespace: string;
8
- }, E, R>, schema: S.Schema<A, SI>) => Effect.Effect<HttpServerResponse.HttpServerResponse, never, import("../../services/RequestContextContainer.js").RequestContextContainer | import("../../services/Store/ContextMapContainer.js").ContextMapContainer | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, never>>;
8
+ }, E, R>, schema: S.Schema<A, SI, SR>) => Effect.Effect<HttpServerResponse.HttpServerResponse, never, import("../../services/RequestContextContainer.js").RequestContextContainer | import("../../services/Store/ContextMapContainer.js").ContextMapContainer | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, never> | Exclude<Exclude<SR, import("effect/Tracer").ParentSpan>, never>>;
9
9
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/api/internal/events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,MAAM,EAAQ,CAAC,EAAY,MAAM,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAe,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAMjE,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS;IAAE,EAAE,EAAE,GAAG,CAAA;CAAE,EAAE,CAAC,EAAC,CAAC,EAAE,EAAE,UAAU,MAAM,CAAC,MAAM,CAAC;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,0RAqC5C,CAAA"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/api/internal/events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,MAAM,EAAQ,CAAC,EAAY,MAAM,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAe,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAMjE,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS;IAAE,EAAE,EAAE,GAAG,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,UACjD,MAAM,CAAC,MAAM,CAAC;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,UAClD,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,4VA2CmE,CAAA"}
@@ -9,7 +9,9 @@ export const makeSSE = (events, schema) => Effect
9
9
  .gen(function* () {
10
10
  yield* Effect.logInfo("$ start listening to events");
11
11
  const enc = new TextEncoder();
12
- const eventStream = Stream.map(events, (_) => `id: ${_.evt.id}\ndata: ${JSON.stringify(S.encodeSync(schema)(_.evt))}`);
12
+ const encode = S.encode(schema);
13
+ const eventStream = Stream.flatMap(events, (_) => encode(_.evt)
14
+ .pipe(Effect.andThen((evt) => `id: ${_.evt.id}\ndata: ${JSON.stringify(evt)}`)));
13
15
  const stream = pipe(setRetry, Stream.merge(keepAlive), Stream.merge(eventStream), Stream.map((_) => enc.encode(_ + "\n\n")));
14
16
  const ctx = yield* Effect.context();
15
17
  const res = HttpServerResponse.stream(stream
@@ -25,4 +27,4 @@ export const makeSSE = (events, schema) => Effect
25
27
  return res;
26
28
  })
27
29
  .pipe(Effect.tapErrorCause(reportError("Request")), (_) => setupRequestContext(_, "events"));
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9pbnRlcm5hbC9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFakUsb0VBQW9FO0FBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7QUFDL0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFdEcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQWlDLE1BQXlELEVBQUUsTUFBdUIsRUFBRSxFQUFFLENBQUMsTUFBTTtLQUNsSixHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ1osS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0lBRXBELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUE7SUFFN0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FDNUIsTUFBTSxFQUNOLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUMvRSxDQUFBO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUNqQixRQUFRLEVBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FDMUMsQ0FBQTtJQUVELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUssQ0FBQTtJQUN0QyxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQ25DLE1BQU07U0FDSCxJQUFJLENBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDNUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FDM0IsRUFDSDtRQUNFLFdBQVcsRUFBRSxtQkFBbUI7UUFDaEMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUM7WUFDN0IsY0FBYyxFQUFFLG1CQUFtQjtZQUNuQyxlQUFlLEVBQUUsVUFBVTtZQUMzQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFlBQVksRUFBRSxZQUFZLENBQUMsaUNBQWlDO1NBQzdELENBQUM7S0FDSCxDQUNGLENBQUE7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMsQ0FBQztLQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQSJ9
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9pbnRlcm5hbC9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFakUsb0VBQW9FO0FBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7QUFDL0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFdEcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQ3JCLE1BQTBELEVBQzFELE1BQTJCLEVBQzNCLEVBQUUsQ0FDRixNQUFNO0tBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUNaLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUVwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO0lBRTdCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFL0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FDaEMsTUFBTSxFQUNOLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztTQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3BGLENBQUE7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQ2pCLFFBQVEsRUFDUixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUN2QixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUMxQyxDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBVSxDQUFBO0lBQzNDLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FDbkMsTUFBTTtTQUNILElBQUksQ0FDSCxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM1QyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUMzQixFQUNIO1FBQ0UsV0FBVyxFQUFFLG1CQUFtQjtRQUNoQyxPQUFPLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUM3QixjQUFjLEVBQUUsbUJBQW1CO1lBQ25DLGVBQWUsRUFBRSxVQUFVO1lBQzNCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsWUFBWSxFQUFFLFlBQVksQ0FBQyxpQ0FBaUM7U0FDN0QsQ0FBQztLQUNILENBQ0YsQ0FBQTtJQUNELE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQyxDQUFDO0tBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "1.20.0",
3
+ "version": "1.20.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -18,10 +18,10 @@
18
18
  "proper-lockfile": "^4.1.2",
19
19
  "pure-rand": "6.1.0",
20
20
  "redlock": "^4.2.0",
21
- "@effect-app/infra-adapters": "1.11.3",
21
+ "@effect-app/core": "1.10.1",
22
22
  "@effect-app/schema": "1.12.1",
23
23
  "effect-app": "1.17.1",
24
- "@effect-app/core": "1.10.1"
24
+ "@effect-app/infra-adapters": "1.11.3"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@babel/cli": "^7.25.6",
@@ -7,41 +7,49 @@ import { HttpHeaders, HttpServerResponse } from "effect-app/http"
7
7
  const setRetry = Stream.succeed("retry: 10000")
8
8
  const keepAlive = Stream.schedule(Effect.succeed(":keep-alive"), Schedule.fixed(Duration.seconds(15)))
9
9
 
10
- export const makeSSE = <A extends { id: any }, E,R, SI>(events: Stream.Stream<{ evt: A, namespace: string}, E, R>, schema: S.Schema<A, SI>) => Effect
11
- .gen(function*() {
12
- yield* Effect.logInfo("$ start listening to events")
10
+ export const makeSSE = <A extends { id: any }, E, R, SI, SR>(
11
+ events: Stream.Stream<{ evt: A; namespace: string }, E, R>,
12
+ schema: S.Schema<A, SI, SR>
13
+ ) =>
14
+ Effect
15
+ .gen(function*() {
16
+ yield* Effect.logInfo("$ start listening to events")
13
17
 
14
- const enc = new TextEncoder()
18
+ const enc = new TextEncoder()
15
19
 
16
- const eventStream = Stream.map(
17
- events,
18
- (_) => `id: ${_.evt.id}\ndata: ${JSON.stringify(S.encodeSync(schema)(_.evt))}`
19
- )
20
+ const encode = S.encode(schema)
20
21
 
21
- const stream = pipe(
22
- setRetry,
23
- Stream.merge(keepAlive),
24
- Stream.merge(eventStream),
25
- Stream.map((_) => enc.encode(_ + "\n\n"))
26
- )
22
+ const eventStream = Stream.flatMap(
23
+ events,
24
+ (_) =>
25
+ encode(_.evt)
26
+ .pipe(Effect.andThen((evt) => `id: ${_.evt.id}\ndata: ${JSON.stringify(evt)}`))
27
+ )
27
28
 
28
- const ctx = yield* Effect.context<R>()
29
- const res = HttpServerResponse.stream(
30
- stream
31
- .pipe(
32
- Stream.tapErrorCause(reportError("Request")),
33
- Stream.provideContext(ctx)
34
- ),
35
- {
36
- contentType: "text/event-stream",
37
- headers: HttpHeaders.fromInput({
38
- "content-type": "text/event-stream",
39
- "cache-control": "no-cache",
40
- "x-accel-buffering": "no",
41
- "connection": "keep-alive" // if (req.httpVersion !== "2.0")
42
- })
43
- }
44
- )
45
- return res
46
- })
47
- .pipe(Effect.tapErrorCause(reportError("Request")), (_) => setupRequestContext(_, "events"))
29
+ const stream = pipe(
30
+ setRetry,
31
+ Stream.merge(keepAlive),
32
+ Stream.merge(eventStream),
33
+ Stream.map((_) => enc.encode(_ + "\n\n"))
34
+ )
35
+
36
+ const ctx = yield* Effect.context<R | SR>()
37
+ const res = HttpServerResponse.stream(
38
+ stream
39
+ .pipe(
40
+ Stream.tapErrorCause(reportError("Request")),
41
+ Stream.provideContext(ctx)
42
+ ),
43
+ {
44
+ contentType: "text/event-stream",
45
+ headers: HttpHeaders.fromInput({
46
+ "content-type": "text/event-stream",
47
+ "cache-control": "no-cache",
48
+ "x-accel-buffering": "no",
49
+ "connection": "keep-alive" // if (req.httpVersion !== "2.0")
50
+ })
51
+ }
52
+ )
53
+ return res
54
+ })
55
+ .pipe(Effect.tapErrorCause(reportError("Request")), (_) => setupRequestContext(_, "events"))