@effect/platform 0.48.27 → 0.48.29

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.
Files changed (54) hide show
  1. package/README.md +51 -0
  2. package/dist/cjs/Http/App.js +50 -32
  3. package/dist/cjs/Http/App.js.map +1 -1
  4. package/dist/cjs/Http/Headers.js +4 -1
  5. package/dist/cjs/Http/Headers.js.map +1 -1
  6. package/dist/cjs/Http/Router.js.map +1 -1
  7. package/dist/cjs/Http/UrlParams.js +1 -1
  8. package/dist/cjs/Http/UrlParams.js.map +1 -1
  9. package/dist/cjs/Transferable.js +6 -3
  10. package/dist/cjs/Transferable.js.map +1 -1
  11. package/dist/cjs/WorkerError.js +9 -6
  12. package/dist/cjs/WorkerError.js.map +1 -1
  13. package/dist/cjs/internal/http/middleware.js +14 -16
  14. package/dist/cjs/internal/http/middleware.js.map +1 -1
  15. package/dist/cjs/internal/http/multipart.js +2 -2
  16. package/dist/cjs/internal/http/multipart.js.map +1 -1
  17. package/dist/cjs/internal/http/router.js +21 -11
  18. package/dist/cjs/internal/http/router.js.map +1 -1
  19. package/dist/dts/Http/App.d.ts +5 -7
  20. package/dist/dts/Http/App.d.ts.map +1 -1
  21. package/dist/dts/Http/Headers.d.ts.map +1 -1
  22. package/dist/dts/Http/Router.d.ts +57 -20
  23. package/dist/dts/Http/Router.d.ts.map +1 -1
  24. package/dist/dts/Transferable.d.ts.map +1 -1
  25. package/dist/dts/WorkerError.d.ts +2 -2
  26. package/dist/dts/WorkerError.d.ts.map +1 -1
  27. package/dist/dts/internal/http/router.d.ts.map +1 -1
  28. package/dist/esm/Http/App.js +48 -30
  29. package/dist/esm/Http/App.js.map +1 -1
  30. package/dist/esm/Http/Headers.js +4 -1
  31. package/dist/esm/Http/Headers.js.map +1 -1
  32. package/dist/esm/Http/Router.js.map +1 -1
  33. package/dist/esm/Http/UrlParams.js +1 -1
  34. package/dist/esm/Http/UrlParams.js.map +1 -1
  35. package/dist/esm/Transferable.js +6 -3
  36. package/dist/esm/Transferable.js.map +1 -1
  37. package/dist/esm/WorkerError.js +9 -6
  38. package/dist/esm/WorkerError.js.map +1 -1
  39. package/dist/esm/internal/http/middleware.js +14 -16
  40. package/dist/esm/internal/http/middleware.js.map +1 -1
  41. package/dist/esm/internal/http/multipart.js +2 -2
  42. package/dist/esm/internal/http/multipart.js.map +1 -1
  43. package/dist/esm/internal/http/router.js +21 -11
  44. package/dist/esm/internal/http/router.js.map +1 -1
  45. package/package.json +3 -3
  46. package/src/Http/App.ts +70 -46
  47. package/src/Http/Headers.ts +2 -3
  48. package/src/Http/Router.ts +42 -22
  49. package/src/Http/UrlParams.ts +2 -2
  50. package/src/Transferable.ts +3 -4
  51. package/src/WorkerError.ts +11 -9
  52. package/src/internal/http/middleware.ts +7 -7
  53. package/src/internal/http/multipart.ts +2 -2
  54. package/src/internal/http/router.ts +69 -50
@@ -3,6 +3,7 @@ import * as Chunk from "effect/Chunk";
3
3
  import * as Context from "effect/Context";
4
4
  import * as Effect from "effect/Effect";
5
5
  import * as Effectable from "effect/Effectable";
6
+ import * as FiberRef from "effect/FiberRef";
6
7
  import { dual } from "effect/Function";
7
8
  import * as Inspectable from "effect/Inspectable";
8
9
  import * as Option from "effect/Option";
@@ -97,7 +98,7 @@ class RouterImpl extends Effectable.StructuralClass {
97
98
  }
98
99
  const toHttpApp = self => {
99
100
  const router = FindMyWay.make();
100
- const mounts = Chunk.toReadonlyArray(self.mounts).map(([path, app, options]) => [path, new RouteContextImpl(new RouteImpl("*", options?.includePrefix ? `${path}/*` : "/*", app, options?.includePrefix ? Option.none() : Option.some(path)), {}, {}), options]);
101
+ const mounts = Chunk.toReadonlyArray(self.mounts).map(([path, app, options]) => [path, new RouteContextImpl(new RouteImpl("*", options?.includePrefix ? `${path}/*` : "/*", app, options?.includePrefix ? Option.none() : Option.some(path), false), {}, {}), options]);
101
102
  const mountsLen = mounts.length;
102
103
  Chunk.forEach(self.routes, route => {
103
104
  if (route.method === "*") {
@@ -106,12 +107,18 @@ const toHttpApp = self => {
106
107
  router.on(route.method, route.path, route);
107
108
  }
108
109
  });
109
- return Effect.flatMap(ServerRequest.ServerRequest, request => {
110
+ return Effect.withFiberRuntime(fiber => {
111
+ let context = fiber.getFiberRef(FiberRef.currentContext);
112
+ const request = Context.unsafeGet(context, ServerRequest.ServerRequest);
110
113
  if (mountsLen > 0) {
111
114
  for (let i = 0; i < mountsLen; i++) {
112
- const [path, context, options] = mounts[i];
115
+ const [path, routeContext, options] = mounts[i];
113
116
  if (request.url.startsWith(path)) {
114
- return Effect.provideService(Effect.provideService(context.route.handler, RouteContext, context), ServerRequest.ServerRequest, options?.includePrefix ? request : sliceRequestUrl(request, path));
117
+ context = Context.add(context, RouteContext, routeContext);
118
+ if (options?.includePrefix !== true) {
119
+ context = Context.add(context, ServerRequest.ServerRequest, sliceRequestUrl(request, path));
120
+ }
121
+ return Effect.locally(routeContext.route.handler, FiberRef.currentContext, context);
115
122
  }
116
123
  }
117
124
  }
@@ -126,9 +133,10 @@ const toHttpApp = self => {
126
133
  }
127
134
  const route = result.handler;
128
135
  if (route.prefix._tag === "Some") {
129
- request = sliceRequestUrl(request, route.prefix.value);
136
+ context = Context.add(context, ServerRequest.ServerRequest, sliceRequestUrl(request, route.prefix.value));
130
137
  }
131
- return Effect.mapInputContext(route.handler, context => Context.add(Context.add(context, ServerRequest.ServerRequest, request), RouteContext, new RouteContextImpl(route, result.params, result.searchParams)));
138
+ context = Context.add(context, RouteContext, new RouteContextImpl(route, result.params, result.searchParams));
139
+ return Effect.locally(route.uninterruptible ? route.handler : Effect.interruptible(route.handler), FiberRef.currentContext, context);
132
140
  });
133
141
  };
134
142
  function sliceRequestUrl(request, prefix) {
@@ -142,13 +150,15 @@ class RouteImpl extends Inspectable.Class {
142
150
  path;
143
151
  handler;
144
152
  prefix;
153
+ uninterruptible;
145
154
  [RouteTypeId];
146
- constructor(method, path, handler, prefix = Option.none()) {
155
+ constructor(method, path, handler, prefix = Option.none(), uninterruptible = false) {
147
156
  super();
148
157
  this.method = method;
149
158
  this.path = path;
150
159
  this.handler = handler;
151
160
  this.prefix = prefix;
161
+ this.uninterruptible = uninterruptible;
152
162
  this[RouteTypeId] = RouteTypeId;
153
163
  }
154
164
  toJSON() {
@@ -177,21 +187,21 @@ export const empty = /*#__PURE__*/new RouterImpl( /*#__PURE__*/Chunk.empty(), /*
177
187
  /** @internal */
178
188
  export const fromIterable = routes => new RouterImpl(Chunk.fromIterable(routes), Chunk.empty());
179
189
  /** @internal */
180
- export const makeRoute = (method, path, handler, prefix = Option.none()) => new RouteImpl(method, path, handler, prefix);
190
+ export const makeRoute = (method, path, handler, prefix = Option.none(), uninterruptible = false) => new RouteImpl(method, path, handler, prefix, uninterruptible);
181
191
  /** @internal */
182
192
  export const concat = /*#__PURE__*/dual(2, (self, that) => new RouterImpl(Chunk.appendAll(self.routes, that.routes), self.mounts));
183
193
  const removeTrailingSlash = path => path.endsWith("/") ? path.slice(0, -1) : path;
184
194
  /** @internal */
185
195
  export const prefixAll = /*#__PURE__*/dual(2, (self, prefix) => {
186
196
  prefix = removeTrailingSlash(prefix);
187
- return new RouterImpl(Chunk.map(self.routes, route => new RouteImpl(route.method, route.path === "/" ? prefix : prefix + route.path, route.handler, Option.orElse(Option.map(route.prefix, _ => prefix + _), () => Option.some(prefix)))), Chunk.map(self.mounts, ([path, app]) => [path === "/" ? prefix : prefix + path, app]));
197
+ return new RouterImpl(Chunk.map(self.routes, route => new RouteImpl(route.method, route.path === "/" ? prefix : prefix + route.path, route.handler, Option.orElse(Option.map(route.prefix, _ => prefix + _), () => Option.some(prefix)), route.uninterruptible)), Chunk.map(self.mounts, ([path, app]) => [path === "/" ? prefix : prefix + path, app]));
188
198
  });
189
199
  /** @internal */
190
200
  export const mount = /*#__PURE__*/dual(3, (self, path, that) => concat(self, prefixAll(that, path)));
191
201
  /** @internal */
192
202
  export const mountApp = /*#__PURE__*/dual(args => Predicate.hasProperty(args[0], TypeId), (self, path, that, options) => new RouterImpl(self.routes, Chunk.append(self.mounts, [removeTrailingSlash(path), that, options])));
193
203
  /** @internal */
194
- export const route = method => dual(3, (self, path, handler) => new RouterImpl(Chunk.append(self.routes, new RouteImpl(method, path, handler)), self.mounts));
204
+ export const route = method => dual(args => Predicate.hasProperty(args[0], TypeId), (self, path, handler, options) => new RouterImpl(Chunk.append(self.routes, new RouteImpl(method, path, handler, Option.none(), options?.uninterruptible ?? false)), self.mounts));
195
205
  /** @internal */
196
206
  export const all = /*#__PURE__*/route("*");
197
207
  /** @internal */
@@ -209,7 +219,7 @@ export const head = /*#__PURE__*/route("HEAD");
209
219
  /** @internal */
210
220
  export const options = /*#__PURE__*/route("OPTIONS");
211
221
  /** @internal */
212
- export const use = /*#__PURE__*/dual(2, (self, f) => new RouterImpl(Chunk.map(self.routes, route => new RouteImpl(route.method, route.path, f(route.handler), route.prefix)), Chunk.map(self.mounts, ([path, app]) => [path, f(app)])));
222
+ export const use = /*#__PURE__*/dual(2, (self, f) => new RouterImpl(Chunk.map(self.routes, route => new RouteImpl(route.method, route.path, f(route.handler), route.prefix, route.uninterruptible)), Chunk.map(self.mounts, ([path, app]) => [path, f(app)])));
213
223
  /** @internal */
214
224
  export const catchAll = /*#__PURE__*/dual(2, (self, f) => use(self, Effect.catchAll(f)));
215
225
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","names":["Schema","Chunk","Context","Effect","Effectable","dual","Inspectable","Option","Predicate","FindMyWay","Error","ServerRequest","TypeId","Symbol","for","RouteTypeId","RouteContextTypeId","RouteContext","GenericTag","params","map","_","searchParams","schemaJson","schema","options","parse","decodeUnknown","flatMap","request","zip","json","body","context","method","url","headers","cookies","pathParams","schemaNoBody","schemaParams","schemaPathParams","schemaSearchParams","RouterImpl","StructuralClass","routes","mounts","constructor","httpApp","toHttpApp","commit","toJSON","_id","toString","format","NodeInspectSymbol","self","router","make","toReadonlyArray","path","app","RouteContextImpl","RouteImpl","includePrefix","none","some","mountsLen","length","forEach","route","all","on","i","startsWith","provideService","handler","sliceRequestUrl","result","find","undefined","fail","RouteNotFound","prefix","_tag","value","mapInputContext","add","prefexLen","modify","slice","Class","empty","fromIterable","makeRoute","concat","that","appendAll","removeTrailingSlash","endsWith","prefixAll","orElse","mount","mountApp","args","hasProperty","append","get","post","put","patch","del","head","use","f","catchAll","catchAllCause","catchTag","k","catchTags","cases","tag","service","provideServiceEffect","effect"],"sources":["../../../../src/internal/http/router.ts"],"sourcesContent":[null],"mappings":"AACA,OAAO,KAAKA,MAAM,MAAM,uBAAuB;AAE/C,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,UAAU,MAAM,mBAAmB;AAC/C,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,WAAW,MAAM,oBAAoB;AACjD,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,SAAS,MAAM,kBAAkB;AAC7C,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAI3C,OAAO,KAAKC,KAAK,MAAM,2BAA2B;AAClD,OAAO,KAAKC,aAAa,MAAM,6BAA6B;AAG5D;AACA,OAAO,MAAMC,MAAM,gBAAkBC,MAAM,CAACC,GAAG,CAAC,8BAA8B,CAAkB;AAEhG;AACA,OAAO,MAAMC,WAAW,gBAAuBF,MAAM,CAACC,GAAG,CAAC,oCAAoC,CAAuB;AAErH;AACA,OAAO,MAAME,kBAAkB,gBAA8BH,MAAM,CAACC,GAAG,CACrE,2CAA2C,CACf;AAE9B;AACA,OAAO,MAAMG,YAAY,gBAAGf,OAAO,CAACgB,UAAU,CAAsB,2CAA2C,CAAC;AAEhH;AACA,OAAO,MAAMC,MAAM,gBAAGhB,MAAM,CAACiB,GAAG,CAACH,YAAY,EAAGI,CAAC,IAAKA,CAAC,CAACF,MAAM,CAAC;AAE/D;AACA,OAAO,MAAMG,YAAY,gBAAGnB,MAAM,CAACiB,GAAG,CAACH,YAAY,EAAGI,CAAC,IAAKA,CAAC,CAACC,YAAY,CAAC;AAE3E;AACA,OAAO,MAAMC,UAAU,GAAGA,CAaxBC,MAA8B,EAC9BC,OAAkC,KAChC;EACF,MAAMC,KAAK,GAAG1B,MAAM,CAAC2B,aAAa,CAACH,MAAM,EAAEC,OAAO,CAAC;EACnD,OAAOtB,MAAM,CAACyB,OAAO,CACnBjB,aAAa,CAACA,aAAa,EAC1BkB,OAAO,IACN1B,MAAM,CAACyB,OAAO,CAACzB,MAAM,CAAC2B,GAAG,CAACD,OAAO,CAACE,IAAI,EAAEd,YAAY,CAAC,EAAE,CAAC,CAACe,IAAI,EAAEC,OAAO,CAAC,KACrEP,KAAK,CAAC;IACJQ,MAAM,EAAEL,OAAO,CAACK,MAAM;IACtBC,GAAG,EAAEN,OAAO,CAACM,GAAG;IAChBC,OAAO,EAAEP,OAAO,CAACO,OAAO;IACxBC,OAAO,EAAER,OAAO,CAACQ,OAAO;IACxBC,UAAU,EAAEL,OAAO,CAACd,MAAM;IAC1BG,YAAY,EAAEW,OAAO,CAACX,YAAY;IAClCU;GACD,CAAC,CAAC,CACR;AACH,CAAC;AAED;AACA,OAAO,MAAMO,YAAY,GAAGA,CAY1Bf,MAA8B,EAC9BC,OAAkC,KAChC;EACF,MAAMC,KAAK,GAAG1B,MAAM,CAAC2B,aAAa,CAACH,MAAM,EAAEC,OAAO,CAAC;EACnD,OAAOtB,MAAM,CAACyB,OAAO,CACnBjB,aAAa,CAACA,aAAa,EAC1BkB,OAAO,IACN1B,MAAM,CAACyB,OAAO,CAACX,YAAY,EAAGgB,OAAO,IACnCP,KAAK,CAAC;IACJQ,MAAM,EAAEL,OAAO,CAACK,MAAM;IACtBC,GAAG,EAAEN,OAAO,CAACM,GAAG;IAChBC,OAAO,EAAEP,OAAO,CAACO,OAAO;IACxBC,OAAO,EAAER,OAAO,CAACQ,OAAO;IACxBC,UAAU,EAAEL,OAAO,CAACd,MAAM;IAC1BG,YAAY,EAAEW,OAAO,CAACX;GACvB,CAAC,CAAC,CACR;AACH,CAAC;AAED;AACA,OAAO,MAAMkB,YAAY,GAAGA,CAC1BhB,MAA8B,EAC9BC,OAAkC,KAChC;EACF,MAAMC,KAAK,GAAG1B,MAAM,CAAC2B,aAAa,CAACH,MAAM,EAAEC,OAAO,CAAC;EACnD,OAAOtB,MAAM,CAACyB,OAAO,CAACX,YAAY,EAAGI,CAAC,IAAKK,KAAK,CAAC;IAAE,GAAGL,CAAC,CAACC,YAAY;IAAE,GAAGD,CAAC,CAACF;EAAM,CAAE,CAAC,CAAC;AACvF,CAAC;AAED;AACA,OAAO,MAAMsB,gBAAgB,GAAGA,CAC9BjB,MAA8B,EAC9BC,OAAkC,KAChC;EACF,MAAMC,KAAK,GAAG1B,MAAM,CAAC2B,aAAa,CAACH,MAAM,EAAEC,OAAO,CAAC;EACnD,OAAOtB,MAAM,CAACyB,OAAO,CAACX,YAAY,EAAGI,CAAC,IAAKK,KAAK,CAACL,CAAC,CAACF,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED;AACA,OAAO,MAAMuB,kBAAkB,GAAGA,CAChClB,MAA8B,EAC9BC,OAAkC,KAChC;EACF,MAAMC,KAAK,GAAG1B,MAAM,CAAC2B,aAAa,CAACH,MAAM,EAAEC,OAAO,CAAC;EACnD,OAAOtB,MAAM,CAACyB,OAAO,CAACX,YAAY,EAAGI,CAAC,IAAKK,KAAK,CAACL,CAAC,CAACC,YAAY,CAAC,CAAC;AACnE,CAAC;AAED,MAAMqB,UAAiB,SAAQvC,UAAU,CAACwC,eAIzC;EAGYC,MAAA;EACAC,MAAA;EAHF,CAAClC,MAAM;EAChBmC,YACWF,MAAuC,EACvCC,MAMR;IAED,KAAK,EAAE;IATE,KAAAD,MAAM,GAANA,MAAM;IACN,KAAAC,MAAM,GAANA,MAAM;IASf,IAAI,CAAClC,MAAM,CAAC,GAAGA,MAAM;IACrB,IAAI,CAACoC,OAAO,GAAGC,SAAS,CAAC,IAAI,CAAQ;EACvC;EACQD,OAAO;EAKfE,MAAMA,CAAA;IACJ,OAAO,IAAI,CAACF,OAAO;EACrB;EACAG,MAAMA,CAAA;IACJ,OAAO;MACLC,GAAG,EAAE,QAAQ;MACbP,MAAM,EAAE,IAAI,CAACA,MAAM,CAACM,MAAM,EAAE;MAC5BL,MAAM,EAAE,IAAI,CAACA,MAAM,CAACK,MAAM;KAC3B;EACH;EACAE,QAAQA,CAAA;IACN;IACA,OAAQ/C,WAAmB,CAACgD,MAAM,CAAC,IAAI,CAAC;EAC1C;EACA,CAAChD,WAAW,CAACiD,iBAAiB,IAAC;IAC7B,OAAO,IAAI,CAACJ,MAAM,EAAE;EACtB;;AAGF,MAAMF,SAAS,GACbO,IAAyB,IACkB;EAC3C,MAAMC,MAAM,GAAGhD,SAAS,CAACiD,IAAI,EAAsB;EACnD,MAAMZ,MAAM,GAAG7C,KAAK,CAAC0D,eAAe,CAACH,IAAI,CAACV,MAAM,CAAC,CAAC1B,GAAG,CAAC,CAAC,CAACwC,IAAI,EAAEC,GAAG,EAAEpC,OAAO,CAAC,KACzE,CACEmC,IAAI,EACJ,IAAIE,gBAAgB,CAClB,IAAIC,SAAS,CACX,GAAG,EACHtC,OAAO,EAAEuC,aAAa,GAAG,GAAGJ,IAAI,IAAwB,GAAG,IAAI,EAC/DC,GAAG,EACHpC,OAAO,EAAEuC,aAAa,GAAGzD,MAAM,CAAC0D,IAAI,EAAE,GAAG1D,MAAM,CAAC2D,IAAI,CAACN,IAAI,CAAC,CAC3D,EACD,EAAE,EACF,EAAE,CACH,EACDnC,OAAO,CACC,CACX;EACD,MAAM0C,SAAS,GAAGrB,MAAM,CAACsB,MAAM;EAC/BnE,KAAK,CAACoE,OAAO,CAACb,IAAI,CAACX,MAAM,EAAGyB,KAAK,IAAI;IACnC,IAAIA,KAAK,CAACpC,MAAM,KAAK,GAAG,EAAE;MACxBuB,MAAM,CAACc,GAAG,CAACD,KAAK,CAACV,IAAI,EAAEU,KAAK,CAAC;IAC/B,CAAC,MAAM;MACLb,MAAM,CAACe,EAAE,CAACF,KAAK,CAACpC,MAAM,EAAEoC,KAAK,CAACV,IAAI,EAAEU,KAAK,CAAC;IAC5C;EACF,CAAC,CAAC;EACF,OAAOnE,MAAM,CAACyB,OAAO,CACnBjB,aAAa,CAACA,aAAa,EAC1BkB,OAAO,IAA6C;IACnD,IAAIsC,SAAS,GAAG,CAAC,EAAE;MACjB,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,SAAS,EAAEM,CAAC,EAAE,EAAE;QAClC,MAAM,CAACb,IAAI,EAAE3B,OAAO,EAAER,OAAO,CAAC,GAAGqB,MAAM,CAAC2B,CAAC,CAAC;QAC1C,IAAI5C,OAAO,CAACM,GAAG,CAACuC,UAAU,CAACd,IAAI,CAAC,EAAE;UAChC,OAAOzD,MAAM,CAACwE,cAAc,CAC1BxE,MAAM,CAACwE,cAAc,CACnB1C,OAAO,CAACqC,KAAK,CAACM,OAA4B,EAC1C3D,YAAY,EACZgB,OAAO,CACR,EACDtB,aAAa,CAACA,aAAa,EAC3Bc,OAAO,EAAEuC,aAAa,GACpBnC,OAAO,GACPgD,eAAe,CAAChD,OAAO,EAAE+B,IAAI,CAAC,CACjC;QACH;MACF;IACF;IAEA,IAAIkB,MAAM,GAAGrB,MAAM,CAACsB,IAAI,CAAClD,OAAO,CAACK,MAAM,EAAEL,OAAO,CAACM,GAAG,CAAC;IACrD,IAAI2C,MAAM,KAAKE,SAAS,IAAInD,OAAO,CAACK,MAAM,KAAK,MAAM,EAAE;MACrD4C,MAAM,GAAGrB,MAAM,CAACsB,IAAI,CAAC,KAAK,EAAElD,OAAO,CAACM,GAAG,CAAC;IAC1C;IACA,IAAI2C,MAAM,KAAKE,SAAS,EAAE;MACxB,OAAO7E,MAAM,CAAC8E,IAAI,CAAC,IAAIvE,KAAK,CAACwE,aAAa,CAAC;QAAErD;MAAO,CAAE,CAAC,CAAC;IAC1D;IACA,MAAMyC,KAAK,GAAGQ,MAAM,CAACF,OAAO;IAC5B,IAAIN,KAAK,CAACa,MAAM,CAACC,IAAI,KAAK,MAAM,EAAE;MAChCvD,OAAO,GAAGgD,eAAe,CAAChD,OAAO,EAAEyC,KAAK,CAACa,MAAM,CAACE,KAAK,CAAC;IACxD;IACA,OAAOlF,MAAM,CAACmF,eAAe,CAC3BhB,KAAK,CAACM,OAA4F,EACjG3C,OAAO,IACN/B,OAAO,CAACqF,GAAG,CACTrF,OAAO,CAACqF,GAAG,CAACtD,OAAO,EAAEtB,aAAa,CAACA,aAAa,EAAEkB,OAAO,CAAC,EAC1DZ,YAAY,EACZ,IAAI6C,gBAAgB,CAACQ,KAAK,EAAEQ,MAAO,CAAC3D,MAAM,EAAE2D,MAAO,CAACxD,YAAY,CAAC,CAC5C,CAC1B;EACH,CAAC,CACF;AACH,CAAC;AAED,SAASuD,eAAeA,CAAChD,OAAoC,EAAEsD,MAAc;EAC3E,MAAMK,SAAS,GAAGL,MAAM,CAACf,MAAM;EAC/B,OAAOvC,OAAO,CAAC4D,MAAM,CAAC;IAAEtD,GAAG,EAAEN,OAAO,CAACM,GAAG,CAACiC,MAAM,IAAIoB,SAAS,GAAG,GAAG,GAAG3D,OAAO,CAACM,GAAG,CAACuD,KAAK,CAACF,SAAS;EAAC,CAAE,CAAC;AACtG;AAEA,MAAMzB,SAAgB,SAAQzD,WAAW,CAACqF,KAAK;EAGlCzD,MAAA;EACA0B,IAAA;EACAgB,OAAA;EACAO,MAAA;EALF,CAACpE,WAAW;EACrBgC,YACWb,MAA2B,EAC3B0B,IAAsB,EACtBgB,OAAmC,EACnCO,MAAA,GAAS5E,MAAM,CAAC0D,IAAI,EAAU;IAEvC,KAAK,EAAE;IALE,KAAA/B,MAAM,GAANA,MAAM;IACN,KAAA0B,IAAI,GAAJA,IAAI;IACJ,KAAAgB,OAAO,GAAPA,OAAO;IACP,KAAAO,MAAM,GAANA,MAAM;IAGf,IAAI,CAACpE,WAAW,CAAC,GAAGA,WAAW;EACjC;EACAoC,MAAMA,CAAA;IACJ,OAAO;MACLC,GAAG,EAAE,oCAAoC;MACzClB,MAAM,EAAE,IAAI,CAACA,MAAM;MACnB0B,IAAI,EAAE,IAAI,CAACA,IAAI;MACfuB,MAAM,EAAE,IAAI,CAACA,MAAM,CAAChC,MAAM;KAC3B;EACH;;AAGF,MAAMW,gBAAgB;EAGTQ,KAAA;EACAnD,MAAA;EACAG,YAAA;EAJF,CAACN,kBAAkB;EAC5B+B,YACWuB,KAAqC,EACrCnD,MAAoD,EACpDG,YAA8C;IAF9C,KAAAgD,KAAK,GAALA,KAAK;IACL,KAAAnD,MAAM,GAANA,MAAM;IACN,KAAAG,YAAY,GAAZA,YAAY;IAErB,IAAI,CAACN,kBAAkB,CAAC,GAAGA,kBAAkB;EAC/C;;AAGF;AACA,OAAO,MAAM4E,KAAK,gBAAgC,IAAIjD,UAAU,eAAC1C,KAAK,CAAC2F,KAAK,EAAE,eAAE3F,KAAK,CAAC2F,KAAK,EAAE,CAAC;AAE9F;AACA,OAAO,MAAMC,YAAY,GACvBhD,MAAmB,IAIhB,IAAIF,UAAU,CAAC1C,KAAK,CAAC4F,YAAY,CAAChD,MAAM,CAAC,EAAE5C,KAAK,CAAC2F,KAAK,EAAE,CAAQ;AAErE;AACA,OAAO,MAAME,SAAS,GAAGA,CACvB5D,MAAqB,EACrB0B,IAAsB,EACtBgB,OAAmC,EACnCO,MAAA,GAAgC5E,MAAM,CAAC0D,IAAI,EAAE,KACS,IAAIF,SAAS,CAAC7B,MAAM,EAAE0B,IAAI,EAAEgB,OAAO,EAAEO,MAAM,CAAQ;AAE3G;AACA,OAAO,MAAMY,MAAM,gBAAG1F,IAAI,CAGxB,CAAC,EAAE,CAACmD,IAAI,EAAEwC,IAAI,KAAK,IAAIrD,UAAU,CAAC1C,KAAK,CAACgG,SAAS,CAACzC,IAAI,CAACX,MAAM,EAAEmD,IAAI,CAACnD,MAAM,CAAQ,EAAEW,IAAI,CAACV,MAAM,CAAC,CAAC;AAEnG,MAAMoD,mBAAmB,GACvBtC,IAAsB,IACAA,IAAI,CAACuC,QAAQ,CAAC,GAAG,CAAC,GAAGvC,IAAI,CAAC8B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG9B,IAAY;AAE7E;AACA,OAAO,MAAMwC,SAAS,gBAAG/F,IAAI,CAI3B,CAAC,EACD,CAACmD,IAAI,EAAE2B,MAAM,KAAI;EACfA,MAAM,GAAGe,mBAAmB,CAACf,MAAM,CAAC;EACpC,OAAO,IAAIxC,UAAU,CACnB1C,KAAK,CAACmB,GAAG,CAACoC,IAAI,CAACX,MAAM,EAAGyB,KAAK,IAC3B,IAAIP,SAAS,CACXO,KAAK,CAACpC,MAAM,EACZoC,KAAK,CAACV,IAAI,KAAK,GAAG,GAAGuB,MAAM,GAAGA,MAAM,GAAGb,KAAK,CAACV,IAAwB,EACrEU,KAAK,CAACM,OAAO,EACbrE,MAAM,CAAC8F,MAAM,CACX9F,MAAM,CAACa,GAAG,CAACkD,KAAK,CAACa,MAAM,EAAG9D,CAAC,IAAK8D,MAAM,GAAG9D,CAAC,CAAC,EAC3C,MAAMd,MAAM,CAAC2D,IAAI,CAACiB,MAAM,CAAC,CAC1B,CACF,CAAC,EACJlF,KAAK,CAACmB,GAAG,CAACoC,IAAI,CAACV,MAAM,EAAE,CAAC,CAACc,IAAI,EAAEC,GAAG,CAAC,KAAK,CAACD,IAAI,KAAK,GAAG,GAAGuB,MAAM,GAAGA,MAAM,GAAGvB,IAAI,EAAEC,GAAG,CAAC,CAAC,CACtF;AACH,CAAC,CACF;AAED;AACA,OAAO,MAAMyC,KAAK,gBAAGjG,IAAI,CAWvB,CAAC,EACD,CAACmD,IAAI,EAAEI,IAAI,EAAEoC,IAAI,KAAKD,MAAM,CAACvC,IAAI,EAAE4C,SAAS,CAACJ,IAAI,EAAEpC,IAAI,CAAC,CAAC,CAC1D;AAED;AACA,OAAO,MAAM2C,QAAQ,gBAAGlG,IAAI,CAmBzBmG,IAAI,IAAKhG,SAAS,CAACiG,WAAW,CAACD,IAAI,CAAC,CAAC,CAAC,EAAE5F,MAAM,CAAC,EAChD,CACE4C,IAAyB,EACzBI,IAAkB,EAClBoC,IAAyB,EACzBvE,OAEa,KAEb,IAAIkB,UAAU,CAAWa,IAAI,CAACX,MAAM,EAAE5C,KAAK,CAACyG,MAAM,CAAClD,IAAI,CAACV,MAAM,EAAE,CAACoD,mBAAmB,CAACtC,IAAI,CAAC,EAAEoC,IAAI,EAAEvE,OAAO,CAAC,CAAC,CAAQ,CACtH;AAED;AACA,OAAO,MAAM6C,KAAK,GAAIpC,MAA2B,IAa/C7B,IAAI,CAYF,CAAC,EAAE,CAACmD,IAAI,EAAEI,IAAI,EAAEgB,OAAO,KACvB,IAAIjC,UAAU,CACZ1C,KAAK,CAACyG,MAAM,CAAClD,IAAI,CAACX,MAAM,EAAE,IAAIkB,SAAS,CAAC7B,MAAM,EAAE0B,IAAI,EAAEgB,OAAO,CAAC,CAAC,EAC/DpB,IAAI,CAACV,MAAM,CACZ,CAAC;AAEN;AACA,OAAO,MAAMyB,GAAG,gBAAGD,KAAK,CAAC,GAAG,CAAC;AAE7B;AACA,OAAO,MAAMqC,GAAG,gBAAGrC,KAAK,CAAC,KAAK,CAAC;AAE/B;AACA,OAAO,MAAMsC,IAAI,gBAAGtC,KAAK,CAAC,MAAM,CAAC;AAEjC;AACA,OAAO,MAAMuC,GAAG,gBAAGvC,KAAK,CAAC,KAAK,CAAC;AAE/B;AACA,OAAO,MAAMwC,KAAK,gBAAGxC,KAAK,CAAC,OAAO,CAAC;AAEnC;AACA,OAAO,MAAMyC,GAAG,gBAAGzC,KAAK,CAAC,QAAQ,CAAC;AAElC;AACA,OAAO,MAAM0C,IAAI,gBAAG1C,KAAK,CAAC,MAAM,CAAC;AAEjC;AACA,OAAO,MAAM7C,OAAO,gBAAG6C,KAAK,CAAC,SAAS,CAAC;AAEvC;AACA,OAAO,MAAM2C,GAAG,gBAAG5G,IAAI,CAQrB,CAAC,EAAE,CAACmD,IAAI,EAAE0D,CAAC,KACX,IAAIvE,UAAU,CACZ1C,KAAK,CAACmB,GAAG,CACPoC,IAAI,CAACX,MAAM,EACVyB,KAAK,IAAK,IAAIP,SAAS,CAACO,KAAK,CAACpC,MAAM,EAAEoC,KAAK,CAACV,IAAI,EAAEsD,CAAC,CAAC5C,KAAK,CAACM,OAAO,CAAQ,EAAEN,KAAK,CAACa,MAAM,CAAC,CAC1F,EACDlF,KAAK,CAACmB,GAAG,CACPoC,IAAI,CAACV,MAAM,EACX,CAAC,CAACc,IAAI,EAAEC,GAAG,CAAC,KAAK,CAACD,IAAI,EAAEsD,CAAC,CAACrD,GAAU,CAAC,CAAC,CACvC,CACF,CAAC;AAEJ;AACA,OAAO,MAAMsD,QAAQ,gBAAG9G,IAAI,CAQ1B,CAAC,EAAE,CAACmD,IAAI,EAAE0D,CAAC,KAAKD,GAAG,CAACzD,IAAI,EAAErD,MAAM,CAACgH,QAAQ,CAACD,CAAC,CAAC,CAAC,CAAC;AAEhD;AACA,OAAO,MAAME,aAAa,gBAAG/G,IAAI,CAQ/B,CAAC,EAAE,CAACmD,IAAI,EAAE0D,CAAC,KAAKD,GAAG,CAACzD,IAAI,EAAErD,MAAM,CAACiH,aAAa,CAACF,CAAC,CAAC,CAAC,CAAC;AAErD;AACA,OAAO,MAAMG,QAAQ,gBAAGhH,IAAI,CAY1B,CAAC,EAAE,CAACmD,IAAI,EAAE8D,CAAC,EAAEJ,CAAC,KAAKD,GAAG,CAACzD,IAAI,EAAErD,MAAM,CAACkH,QAAQ,CAACC,CAAC,EAAEJ,CAAC,CAAC,CAAC,CAAC;AAEtD;AACA,OAAO,MAAMK,SAAS,gBA2ClBlH,IAAI,CAAC,CAAC,EAAE,CAACmD,IAA6B,EAAEgE,KAAS,KAAKP,GAAG,CAACzD,IAAI,EAAErD,MAAM,CAACoH,SAAS,CAACC,KAAK,CAAC,CAAC,CAAC;AAE7F,OAAO,MAAM7C,cAAc,gBAAGtE,IAAI,CAYhC,CAAC,EAAE,CACHmD,IAAyB,EACzBiE,GAAM,EACNC,OAA+B,KAC6BT,GAAG,CAACzD,IAAI,EAAErD,MAAM,CAACwE,cAAc,CAAC8C,GAAG,EAAEC,OAAO,CAAC,CAAC,CAAC;AAE7G;AACA,OAAO,MAAMC,oBAAoB,gBAAGtH,IAAI,CAwBtC,CAAC,EAAE,CACHmD,IAAyB,EACzBiE,GAAM,EACNG,MAAqD,KAOlDX,GAAG,CAACzD,IAAI,EAAErD,MAAM,CAACwH,oBAAoB,CAACF,GAAG,EAAEG,MAAM,CAAC,CAAQ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"router.js","names":["Schema","Chunk","Context","Effect","Effectable","FiberRef","dual","Inspectable","Option","Predicate","FindMyWay","Error","ServerRequest","TypeId","Symbol","for","RouteTypeId","RouteContextTypeId","RouteContext","GenericTag","params","map","_","searchParams","schemaJson","schema","options","parse","decodeUnknown","flatMap","request","zip","json","body","context","method","url","headers","cookies","pathParams","schemaNoBody","schemaParams","schemaPathParams","schemaSearchParams","RouterImpl","StructuralClass","routes","mounts","constructor","httpApp","toHttpApp","commit","toJSON","_id","toString","format","NodeInspectSymbol","self","router","make","toReadonlyArray","path","app","RouteContextImpl","RouteImpl","includePrefix","none","some","mountsLen","length","forEach","route","all","on","withFiberRuntime","fiber","getFiberRef","currentContext","unsafeGet","i","routeContext","startsWith","add","sliceRequestUrl","locally","handler","result","find","undefined","fail","RouteNotFound","prefix","_tag","value","uninterruptible","interruptible","prefexLen","modify","slice","Class","empty","fromIterable","makeRoute","concat","that","appendAll","removeTrailingSlash","endsWith","prefixAll","orElse","mount","mountApp","args","hasProperty","append","get","post","put","patch","del","head","use","f","catchAll","catchAllCause","catchTag","k","catchTags","cases","provideService","tag","service","provideServiceEffect","effect"],"sources":["../../../../src/internal/http/router.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform",
3
- "version": "0.48.27",
3
+ "version": "0.48.29",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -16,8 +16,8 @@
16
16
  "path-browserify": "^1.0.1"
17
17
  },
18
18
  "peerDependencies": {
19
- "@effect/schema": "^0.64.20",
20
- "effect": "^2.4.18"
19
+ "@effect/schema": "^0.65.0",
20
+ "effect": "^2.4.19"
21
21
  },
22
22
  "main": "./dist/cjs/index.js",
23
23
  "module": "./dist/esm/index.js",
package/src/Http/App.ts CHANGED
@@ -2,16 +2,18 @@
2
2
  * @since 1.0.0
3
3
  */
4
4
  import * as Cause from "effect/Cause"
5
+ import * as Context from "effect/Context"
5
6
  import * as Effect from "effect/Effect"
6
7
  import * as Exit from "effect/Exit"
7
8
  import * as FiberRef from "effect/FiberRef"
8
9
  import { dual } from "effect/Function"
9
10
  import { globalValue } from "effect/GlobalValue"
10
11
  import * as Layer from "effect/Layer"
11
- import * as ReadonlyArray from "effect/ReadonlyArray"
12
+ import * as Option from "effect/Option"
12
13
  import * as Runtime from "effect/Runtime"
13
14
  import * as Scope from "effect/Scope"
14
15
  import * as internalMiddleware from "../internal/http/middleware.js"
16
+ import type { Middleware } from "./Middleware.js"
15
17
  import * as ServerError from "./ServerError.js"
16
18
  import * as ServerRequest from "./ServerRequest.js"
17
19
  import * as ServerResponse from "./ServerResponse.js"
@@ -32,9 +34,40 @@ export type Default<R, E> = HttpApp<R, E, ServerResponse.ServerResponse>
32
34
  * @since 1.0.0
33
35
  * @category combinators
34
36
  */
35
- export const withDefaultMiddleware = <R, E>(
36
- self: Default<R, E>
37
- ): Default<R, E> => internalMiddleware.tracer(self)
37
+ export const toHandled = <R, E, _, RH>(
38
+ self: Default<R, E>,
39
+ handleResponse: (
40
+ request: ServerRequest.ServerRequest,
41
+ exit: Exit.Exit<ServerResponse.ServerResponse, E | ServerError.ResponseError>
42
+ ) => Effect.Effect<_, never, RH>,
43
+ middleware?: Middleware | undefined
44
+ ): Default<Exclude<R | RH, Scope.Scope>, E | ServerError.ResponseError> => {
45
+ const withTracer = internalMiddleware.tracer(self)
46
+ const responded = Effect.withFiberRuntime<
47
+ ServerResponse.ServerResponse,
48
+ E | ServerError.ResponseError,
49
+ R | RH | ServerRequest.ServerRequest
50
+ >((fiber) => {
51
+ const request = Context.unsafeGet(fiber.getFiberRef(FiberRef.currentContext), ServerRequest.ServerRequest)
52
+ const handler = fiber.getFiberRef(currentPreResponseHandlers)
53
+ const preHandled = handler._tag === "Some"
54
+ ? Effect.flatMap(withTracer, (response) => handler.value(request, response))
55
+ : withTracer
56
+ return Effect.flatMap(
57
+ Effect.exit(preHandled),
58
+ (exit) => {
59
+ if (exit._tag === "Failure") {
60
+ const dieOption = Cause.dieOption(exit.cause)
61
+ if (dieOption._tag === "Some" && ServerResponse.isServerResponse(dieOption.value)) {
62
+ exit = Exit.succeed(dieOption.value)
63
+ }
64
+ }
65
+ return Effect.zipRight(handleResponse(request, exit), exit)
66
+ }
67
+ )
68
+ })
69
+ return Effect.uninterruptible(Effect.scoped(middleware === undefined ? responded : middleware(responded)))
70
+ }
38
71
 
39
72
  /**
40
73
  * @since 1.0.0
@@ -49,32 +82,9 @@ export type PreResponseHandler = (
49
82
  * @since 1.0.0
50
83
  * @category fiber refs
51
84
  */
52
- export const currentPreResponseHandlers: FiberRef.FiberRef<ReadonlyArray<PreResponseHandler>> = globalValue(
85
+ export const currentPreResponseHandlers: FiberRef.FiberRef<Option.Option<PreResponseHandler>> = globalValue(
53
86
  Symbol.for("@effect/platform/Http/App/preResponseHandlers"),
54
- () => FiberRef.unsafeMake<ReadonlyArray<PreResponseHandler>>([])
55
- )
56
-
57
- function noopHandler(_request: ServerRequest.ServerRequest, response: ServerResponse.ServerResponse) {
58
- return Effect.succeed(response)
59
- }
60
-
61
- /**
62
- * @since 1.0.0
63
- * @category fiber refs
64
- */
65
- export const preResponseHandler: Effect.Effect<PreResponseHandler> = Effect.map(
66
- FiberRef.get(currentPreResponseHandlers),
67
- (handlers): PreResponseHandler =>
68
- handlers.length === 0 ?
69
- noopHandler :
70
- handlers.reduce((acc, handler) => (function(request, response) {
71
- return Effect.flatMap(
72
- acc(request, response),
73
- function(response) {
74
- return handler(request, response)
75
- }
76
- )
77
- }))
87
+ () => FiberRef.unsafeMake<Option.Option<PreResponseHandler>>(Option.none())
78
88
  )
79
89
 
80
90
  /**
@@ -86,7 +96,13 @@ export const appendPreResponseHandler: (handler: PreResponseHandler) => Effect.E
86
96
  ) =>
87
97
  FiberRef.update(
88
98
  currentPreResponseHandlers,
89
- ReadonlyArray.append(handler)
99
+ Option.match({
100
+ onNone: () => Option.some(handler),
101
+ onSome: (prev) =>
102
+ Option.some((request, response) =>
103
+ Effect.flatMap(prev(request, response), (response) => handler(request, response))
104
+ )
105
+ })
90
106
  )
91
107
 
92
108
  /**
@@ -100,7 +116,13 @@ export const withPreResponseHandler = dual<
100
116
  Effect.locallyWith(
101
117
  self,
102
118
  currentPreResponseHandlers,
103
- ReadonlyArray.append(handler)
119
+ Option.match({
120
+ onNone: () => Option.some(handler),
121
+ onSome: (prev) =>
122
+ Option.some((request, response) =>
123
+ Effect.flatMap(prev(request, response), (response) => handler(request, response))
124
+ )
125
+ })
104
126
  ))
105
127
 
106
128
  /**
@@ -110,25 +132,27 @@ export const withPreResponseHandler = dual<
110
132
  export const toWebHandlerRuntime = <R>(runtime: Runtime.Runtime<R>) => {
111
133
  const run = Runtime.runFork(runtime)
112
134
  return <E>(self: Default<R | Scope.Scope, E>) => {
113
- self = withDefaultMiddleware(self)
135
+ const handled = Effect.scoped(toHandled(self, (request, exit) => {
136
+ const webRequest = request.source as Request
137
+ if (Exit.isSuccess(exit)) {
138
+ ;(request as any)._resolve(ServerResponse.toWeb(exit.value, request.method === "HEAD"))
139
+ } else if (Cause.isInterruptedOnly(exit.cause)) {
140
+ ;(request as any)._resolve(new Response(null, { status: webRequest.signal.aborted ? 499 : 503 }))
141
+ } else {
142
+ ;(request as any)._reject(Cause.pretty(exit.cause))
143
+ }
144
+ return Effect.unit
145
+ }))
114
146
  return (request: Request): Promise<Response> =>
115
147
  new Promise((resolve, reject) => {
116
148
  const req = ServerRequest.fromWeb(request)
117
- const fiber = run(Effect.scoped(Effect.map(
118
- Effect.provideService(self, ServerRequest.ServerRequest, req),
119
- (res) => ServerResponse.toWeb(res, req.method === "HEAD")
120
- )))
149
+ ;(req as any)._resolve = resolve
150
+ ;(req as any)._reject = reject
151
+ const fiber = run(
152
+ Effect.provideService(handled, ServerRequest.ServerRequest, req)
153
+ )
121
154
  request.signal.addEventListener("abort", () => {
122
- Effect.runFork(fiber.interruptAsFork(ServerError.clientAbortFiberId))
123
- })
124
- fiber.addObserver((exit) => {
125
- if (Exit.isSuccess(exit)) {
126
- resolve(exit.value)
127
- } else if (Cause.isInterruptedOnly(exit.cause)) {
128
- resolve(new Response(null, { status: request.signal.aborted ? 499 : 503 }))
129
- } else {
130
- reject(Cause.pretty(exit.cause))
131
- }
155
+ fiber.unsafeInterruptAsFork(ServerError.clientAbortFiberId)
132
156
  })
133
157
  })
134
158
  }
@@ -52,10 +52,9 @@ export const schemaFromSelf: Schema.Schema<Headers> = Schema.declare(isHeaders,
52
52
  */
53
53
  export const schema: Schema.Schema<Headers, ReadonlyRecord.ReadonlyRecord<string, string | ReadonlyArray<string>>> =
54
54
  Schema.transform(
55
- Schema.record(Schema.string, Schema.union(Schema.string, Schema.array(Schema.string))),
55
+ Schema.Record(Schema.String, Schema.Union(Schema.String, Schema.Array(Schema.String))),
56
56
  schemaFromSelf,
57
- (record) => fromInput(record),
58
- identity
57
+ { decode: (record) => fromInput(record), encode: identity }
59
58
  )
60
59
 
61
60
  /**
@@ -84,6 +84,7 @@ export interface Route<R, E> extends Inspectable {
84
84
  readonly path: PathInput
85
85
  readonly handler: Route.Handler<R, E>
86
86
  readonly prefix: Option.Option<string>
87
+ readonly uninterruptible: boolean
87
88
  }
88
89
 
89
90
  /**
@@ -243,7 +244,8 @@ export const makeRoute: <R, E>(
243
244
  method: Method.Method,
244
245
  path: PathInput,
245
246
  handler: Route.Handler<R, E>,
246
- prefix?: Option.Option<string>
247
+ prefix?: Option.Option<string>,
248
+ uninterruptible?: boolean
247
249
  ) => Route<Exclude<R, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E> = internal.makeRoute
248
250
 
249
251
  /**
@@ -311,19 +313,21 @@ export const mountApp: {
311
313
  * @category routing
312
314
  */
313
315
  export const route: (
314
- method: Method.Method | "*"
316
+ method: "*" | Method.Method
315
317
  ) => {
316
318
  <R1, E1>(
317
319
  path: PathInput,
318
- handler: Route.Handler<R1, E1>
320
+ handler: Route.Handler<R1, E1>,
321
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
319
322
  ): <R, E>(
320
323
  self: Router<R, E>
321
- ) => Router<R | Exclude<R1, ServerRequest.ServerRequest | RouteContext | Scope.Scope>, E1 | E>
324
+ ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
322
325
  <R, E, R1, E1>(
323
326
  self: Router<R, E>,
324
327
  path: PathInput,
325
- handler: Route.Handler<R1, E1>
326
- ): Router<R | Exclude<R1, ServerRequest.ServerRequest | RouteContext | Scope.Scope>, E | E1>
328
+ handler: Route.Handler<R1, E1>,
329
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
330
+ ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
327
331
  } = internal.route
328
332
 
329
333
  /**
@@ -333,14 +337,16 @@ export const route: (
333
337
  export const all: {
334
338
  <R1, E1>(
335
339
  path: PathInput,
336
- handler: Route.Handler<R1, E1>
340
+ handler: Route.Handler<R1, E1>,
341
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
337
342
  ): <R, E>(
338
343
  self: Router<R, E>
339
344
  ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
340
345
  <R, E, R1, E1>(
341
346
  self: Router<R, E>,
342
347
  path: PathInput,
343
- handler: Route.Handler<R1, E1>
348
+ handler: Route.Handler<R1, E1>,
349
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
344
350
  ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
345
351
  } = internal.all
346
352
 
@@ -351,14 +357,16 @@ export const all: {
351
357
  export const get: {
352
358
  <R1, E1>(
353
359
  path: PathInput,
354
- handler: Route.Handler<R1, E1>
360
+ handler: Route.Handler<R1, E1>,
361
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
355
362
  ): <R, E>(
356
363
  self: Router<R, E>
357
364
  ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
358
365
  <R, E, R1, E1>(
359
366
  self: Router<R, E>,
360
367
  path: PathInput,
361
- handler: Route.Handler<R1, E1>
368
+ handler: Route.Handler<R1, E1>,
369
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
362
370
  ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
363
371
  } = internal.get
364
372
 
@@ -369,14 +377,16 @@ export const get: {
369
377
  export const post: {
370
378
  <R1, E1>(
371
379
  path: PathInput,
372
- handler: Route.Handler<R1, E1>
380
+ handler: Route.Handler<R1, E1>,
381
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
373
382
  ): <R, E>(
374
383
  self: Router<R, E>
375
384
  ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
376
385
  <R, E, R1, E1>(
377
386
  self: Router<R, E>,
378
387
  path: PathInput,
379
- handler: Route.Handler<R1, E1>
388
+ handler: Route.Handler<R1, E1>,
389
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
380
390
  ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
381
391
  } = internal.post
382
392
 
@@ -387,14 +397,16 @@ export const post: {
387
397
  export const patch: {
388
398
  <R1, E1>(
389
399
  path: PathInput,
390
- handler: Route.Handler<R1, E1>
400
+ handler: Route.Handler<R1, E1>,
401
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
391
402
  ): <R, E>(
392
403
  self: Router<R, E>
393
404
  ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
394
405
  <R, E, R1, E1>(
395
406
  self: Router<R, E>,
396
407
  path: PathInput,
397
- handler: Route.Handler<R1, E1>
408
+ handler: Route.Handler<R1, E1>,
409
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
398
410
  ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
399
411
  } = internal.patch
400
412
 
@@ -405,14 +417,16 @@ export const patch: {
405
417
  export const put: {
406
418
  <R1, E1>(
407
419
  path: PathInput,
408
- handler: Route.Handler<R1, E1>
420
+ handler: Route.Handler<R1, E1>,
421
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
409
422
  ): <R, E>(
410
423
  self: Router<R, E>
411
424
  ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
412
425
  <R, E, R1, E1>(
413
426
  self: Router<R, E>,
414
427
  path: PathInput,
415
- handler: Route.Handler<R1, E1>
428
+ handler: Route.Handler<R1, E1>,
429
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
416
430
  ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
417
431
  } = internal.put
418
432
 
@@ -423,14 +437,16 @@ export const put: {
423
437
  export const del: {
424
438
  <R1, E1>(
425
439
  path: PathInput,
426
- handler: Route.Handler<R1, E1>
440
+ handler: Route.Handler<R1, E1>,
441
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
427
442
  ): <R, E>(
428
443
  self: Router<R, E>
429
444
  ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
430
445
  <R, E, R1, E1>(
431
446
  self: Router<R, E>,
432
447
  path: PathInput,
433
- handler: Route.Handler<R1, E1>
448
+ handler: Route.Handler<R1, E1>,
449
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
434
450
  ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
435
451
  } = internal.del
436
452
 
@@ -441,14 +457,16 @@ export const del: {
441
457
  export const head: {
442
458
  <R1, E1>(
443
459
  path: PathInput,
444
- handler: Route.Handler<R1, E1>
460
+ handler: Route.Handler<R1, E1>,
461
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
445
462
  ): <R, E>(
446
463
  self: Router<R, E>
447
464
  ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
448
465
  <R, E, R1, E1>(
449
466
  self: Router<R, E>,
450
467
  path: PathInput,
451
- handler: Route.Handler<R1, E1>
468
+ handler: Route.Handler<R1, E1>,
469
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
452
470
  ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
453
471
  } = internal.head
454
472
 
@@ -459,14 +477,16 @@ export const head: {
459
477
  export const options: {
460
478
  <R1, E1>(
461
479
  path: PathInput,
462
- handler: Route.Handler<R1, E1>
480
+ handler: Route.Handler<R1, E1>,
481
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
463
482
  ): <R, E>(
464
483
  self: Router<R, E>
465
484
  ) => Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E1 | E>
466
485
  <R, E, R1, E1>(
467
486
  self: Router<R, E>,
468
487
  path: PathInput,
469
- handler: Route.Handler<R1, E1>
488
+ handler: Route.Handler<R1, E1>,
489
+ options?: { readonly uninterruptible?: boolean | undefined } | undefined
470
490
  ): Router<R | Exclude<R1, RouteContext | ServerRequest.ServerRequest | Scope.Scope>, E | E1>
471
491
  } = internal.options
472
492
 
@@ -36,8 +36,8 @@ export const fromInput = (input: Input): UrlParams => {
36
36
  * @since 1.0.0
37
37
  * @category schemas
38
38
  */
39
- export const schema: Schema.Schema<UrlParams, ReadonlyArray<readonly [string, string]>> = Schema.array(
40
- Schema.tuple(Schema.string, Schema.string)
39
+ export const schema: Schema.Schema<UrlParams, ReadonlyArray<readonly [string, string]>> = Schema.Array(
40
+ Schema.Tuple(Schema.String, Schema.String)
41
41
  ).pipe(
42
42
  Schema.identifier("UrlParams")
43
43
  )
@@ -93,8 +93,7 @@ export const schema: {
93
93
  Schema.transformOrFail(
94
94
  Schema.encodedSchema(self),
95
95
  self,
96
- ParseResult.succeed,
97
- (i) => Effect.as(addAll(f(i)), i)
96
+ { decode: ParseResult.succeed, encode: (i) => Effect.as(addAll(f(i)), i) }
98
97
  ))
99
98
 
100
99
  /**
@@ -102,7 +101,7 @@ export const schema: {
102
101
  * @category schema
103
102
  */
104
103
  export const ImageData: Schema.Schema<ImageData> = schema(
105
- Schema.any,
104
+ Schema.Any,
106
105
  (_) => [(_ as ImageData).data.buffer]
107
106
  )
108
107
 
@@ -111,7 +110,7 @@ export const ImageData: Schema.Schema<ImageData> = schema(
111
110
  * @category schema
112
111
  */
113
112
  export const MessagePort: Schema.Schema<MessagePort> = schema(
114
- Schema.any,
113
+ Schema.Any,
115
114
  (_) => [_ as MessagePort]
116
115
  )
117
116
 
@@ -26,14 +26,16 @@ export type WorkerErrorTypeId = typeof WorkerErrorTypeId
26
26
  export const isWorkerError = (u: unknown): u is WorkerError => Predicate.hasProperty(u, WorkerErrorTypeId)
27
27
 
28
28
  const causeDefectPretty: Schema.Schema<unknown> = Schema.transform(
29
- Schema.unknown,
30
- Schema.unknown,
31
- identity,
32
- (defect) => {
33
- if (Predicate.isObject(defect)) {
34
- return Cause.pretty(Cause.die(defect))
29
+ Schema.Unknown,
30
+ Schema.Unknown,
31
+ {
32
+ decode: identity,
33
+ encode: (defect) => {
34
+ if (Predicate.isObject(defect)) {
35
+ return Cause.pretty(Cause.die(defect))
36
+ }
37
+ return String(defect)
35
38
  }
36
- return String(defect)
37
39
  }
38
40
  )
39
41
 
@@ -42,7 +44,7 @@ const causeDefectPretty: Schema.Schema<unknown> = Schema.transform(
42
44
  * @category errors
43
45
  */
44
46
  export class WorkerError extends Schema.TaggedError<WorkerError>()("WorkerError", {
45
- reason: Schema.literal("spawn", "decode", "send", "unknown", "encode"),
47
+ reason: Schema.Literal("spawn", "decode", "send", "unknown", "encode"),
46
48
  error: causeDefectPretty
47
49
  }) {
48
50
  /**
@@ -56,7 +58,7 @@ export class WorkerError extends Schema.TaggedError<WorkerError>()("WorkerError"
56
58
  static readonly Cause: Schema.Schema<
57
59
  Cause.Cause<WorkerError>,
58
60
  Schema.CauseEncoded<WorkerErrorFrom>
59
- > = Schema.cause({ defect: causeDefectPretty, error: this })
61
+ > = Schema.Cause({ defect: causeDefectPretty, error: this })
60
62
 
61
63
  /**
62
64
  * @since 1.0.0