@effect-app/infra 0.25.8 → 0.25.9

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,16 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 0.25.9
4
+
5
+ ### Patch Changes
6
+
7
+ - 8da4c8fc: Add match and improve error handling
8
+ - Updated dependencies [8da4c8fc]
9
+ - @effect-app/core@0.23.1
10
+ - @effect-app/infra-adapters@0.20.5
11
+ - @effect-app/prelude@0.21.5
12
+ - @effect-app/schema@0.18.4
13
+
3
14
  ## 0.25.8
4
15
 
5
16
  ### Patch Changes
@@ -14,29 +14,24 @@ var _reportError = require("./reportError.cjs");
14
14
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
15
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
16
  function defaultBasicErrorHandler(_req, res, _requestContext, r2) {
17
- return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r2, cause => tsplus_module_2.isFailure(cause) ? (0, _reportError.logRequestError)(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
18
- res.status(400).send(err.errors);
19
- }))
17
+ const sendError = code => body => tsplus_module_1.sync(() => res.status(code).send(body));
18
+ return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r2, cause => tsplus_module_2.isFailure(cause) ? (0, _reportError.logRequestError)(cause) : tsplus_module_3.unit), "ValidationError", err => sendError(400)(err.errors))
20
19
  // final catch all; expecting never so that unhandled known errors will show up
21
20
  , err => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die)));
22
21
  }
23
22
  const optimisticConcurrencySchedule = tsplus_module_5.intersect(tsplus_module_5.recurWhile(a => a._tag === "OptimisticConcurrencyException"))(tsplus_module_5.once());
24
23
  function defaultErrorHandler(req, res, _, r2) {
25
24
  const r3 = req.method === "PATCH" ? tsplus_module_1.retry(r2, optimisticConcurrencySchedule) : r2;
26
- return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r3, cause => tsplus_module_2.isFailure(cause) ? (0, _reportError.logRequestError)(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
27
- res.status(400).send(err.errors);
28
- })), "NotFoundError", err => tsplus_module_1.sync(() => {
29
- res.status(404).send(err);
30
- })), "NotLoggedInError", err => tsplus_module_1.sync(() => {
31
- res.status(401).send(err);
32
- })), "UnauthorizedError", err => tsplus_module_1.sync(() => {
33
- res.status(403).send(err);
34
- })), "InvalidStateError", err => tsplus_module_1.sync(() => {
35
- res.status(422).send(err);
36
- })), "OptimisticConcurrencyException", err => tsplus_module_1.sync(() => {
25
+ const sendError = code => body => tsplus_module_1.sync(() => res.status(code).send(body));
26
+ return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTags(tsplus_module_1.tapErrorCause(r3, cause => tsplus_module_2.isFailure(cause) ? (0, _reportError.logRequestError)(cause) : tsplus_module_3.unit), {
27
+ "ValidationError": err => sendError(400)(err.errors),
28
+ "NotFoundError": sendError(404),
29
+ "NotLoggedInError": sendError(401),
30
+ "UnauthorizedError": sendError(403),
31
+ "InvalidStateError": sendError(422),
37
32
  // 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
38
- res.status(412).send(err);
39
- }))
33
+ "OptimisticConcurrencyException": sendError(412)
34
+ })
40
35
  // final catch all; expecting never so that unhandled known errors will show up
41
36
  , err => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die)));
42
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"defaultErrorHandler.cjs","mappings":";;;;;;;;;;;;AAUA;AAAkD;AAAA;AAE5C,SAAUA,wBAAwB,CACtCC,IAAqB,EACrBC,GAAqB,EACrBC,eAA+B,EAC/BC,EAAoC;EAEpC,OAAOC,yBAAe,MACpBC,kFAAE,EACeC,KAAK,IAAIC,+BAAK,CAAY,GAAG,gCAAe,EAACD,KAAK,CAAC,GAAEE,oBAAY,CAAC,EACvE,iBAAiB,EAAEC,GAAG,IAC9BJ,qBAAY,MAAK;IACfJ,GAAG,CAACS,MAAM,CAAC,GAAG,CAAC,CAACC,IAAI,CAACF,GAAG,CAACG,MAAM,CAAC;EAClC,CAAC,CAAC;EACJ;EAAA,EACWH,GAAU,IACnBJ,qEACE,gGAAgG,GAAGI,GAAG,CACvG,EACM,MAAMA,GAAc,CAAC,sBACN,CACvB,CACJ;AACH;AAEA,MAAMI,6BAA6B,6BACjCC,2BAAqCC,CAAC,IAAIA,CAAC,CAACC,IAAI,KAAK,gCAAgC,CAAC,EADlDF,sBAAe,CACmC;AAElF,SAAUG,mBAAmB,CACjCC,GAAoB,EACpBjB,GAAqB,EACrBkB,CAAiB,EACjBhB,EAAoC;EAEpC,MAAMiB,EAAE,GAAGF,GAAG,CAACG,MAAM,KAAK,OAAO,GAC7BhB,wBAAE,EAAOQ,6BAA6B,CAAC,GACvCV,EAAE;EACN,OAAOC,yBAAe,MACpBC,+MAAE,EACeC,KAAK,IAAIC,+BAAK,CAAY,GAAG,gCAAe,EAACD,KAAK,CAAC,GAAEE,oBAAY,CAAC,EACvE,iBAAiB,EAAEC,GAAG,IAC9BJ,qBAAY,MAAK;IACfJ,GAAG,CAACS,MAAM,CAAC,GAAG,CAAC,CAACC,IAAI,CAACF,GAAG,CAACG,MAAM,CAAC;EAClC,CAAC,CAAC,CAAC,EACK,eAAe,EAAEH,GAAG,IAC5BJ,qBAAY,MAAK;IACfJ,GAAG,CAACS,MAAM,CAAC,GAAG,CAAC,CAACC,IAAI,CAACF,GAAG,CAAC;EAC3B,CAAC,CAAC,CAAC,EACK,kBAAkB,EAAEA,GAAG,IAC/BJ,qBAAY,MAAK;IACfJ,GAAG,CAACS,MAAM,CAAC,GAAG,CAAC,CAACC,IAAI,CAACF,GAAG,CAAC;EAC3B,CAAC,CAAC,CAAC,EACK,mBAAmB,EAAEA,GAAG,IAChCJ,qBAAY,MAAK;IACfJ,GAAG,CAACS,MAAM,CAAC,GAAG,CAAC,CAACC,IAAI,CAACF,GAAG,CAAC;EAC3B,CAAC,CAAC,CAAC,EACK,mBAAmB,EAAEA,GAAG,IAChCJ,qBAAY,MAAK;IACfJ,GAAG,CAACS,MAAM,CAAC,GAAG,CAAC,CAACC,IAAI,CAACF,GAAG,CAAC;EAC3B,CAAC,CAAC,CAAC,EACK,gCAAgC,EAAEA,GAAG,IAC7CJ,qBAAY,MAAK;IACf;IACAJ,GAAG,CAACS,MAAM,CAAC,GAAG,CAAC,CAACC,IAAI,CAACF,GAAG,CAAC;EAC3B,CAAC,CAAC;EACJ;EAAA,EACWA,GAAU,IACnBJ,qEACE,gGAAgG,GAAGI,GAAG,CACvG,EACM,MAAMA,GAAc,CAAC,sBACN,CACvB,CACJ;AACH","names":["defaultBasicErrorHandler","_req","res","_requestContext","r2","tsplus_module_4","tsplus_module_1","cause","tsplus_module_2","tsplus_module_3","err","status","send","errors","optimisticConcurrencySchedule","tsplus_module_5","a","_tag","defaultErrorHandler","req","_","r3","method"],"sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"sourcesContent":[null]}
1
+ {"version":3,"file":"defaultErrorHandler.cjs","mappings":";;;;;;;;;;;;AAUA;AAAkD;AAAA;AAE5C,SAAUA,wBAAwB,CACtCC,IAAqB,EACrBC,GAAqB,EACrBC,eAA+B,EAC/BC,EAAoC;EAEpC,MAAMC,SAAS,GAAIC,IAAY,IAAMC,IAAa,IAAKC,2BAAON,GAAG,CAACO,MAAM,CAACH,IAAI,CAAC,CAACI,IAAI,CAACH,IAAI,CAAC,CAAC;EAC1F,OAAOI,yBAAe,MACpBH,kFAAE,EACeI,KAAK,IAAIC,+BAAK,CAAY,GAAG,gCAAe,EAACD,KAAK,CAAC,GAAEE,oBAAY,CAAC,EACvE,iBAAiB,EAAEC,GAAG,IAAIV,SAAS,CAAC,GAAG,CAAC,CAACU,GAAG,CAACC,MAAM,CAAC;EAC9D;EAAA,EACWD,GAAU,IACnBP,qEACE,gGAAgG,GAAGO,GAAG,CACvG,EACM,MAAMA,GAAc,CAAC,sBACN,CACvB,CACJ;AACH;AAEA,MAAME,6BAA6B,6BACjCC,2BAAqCC,CAAC,IAAIA,CAAC,CAACC,IAAI,KAAK,gCAAgC,CAAC,EADlDF,sBAAe,CACmC;AAElF,SAAUG,mBAAmB,CACjCC,GAAoB,EACpBpB,GAAqB,EACrBqB,CAAiB,EACjBnB,EAAoC;EAEpC,MAAMoB,EAAE,GAAGF,GAAG,CAACG,MAAM,KAAK,OAAO,GAC7BjB,wBAAE,EAAOS,6BAA6B,CAAC,GACvCb,EAAE;EACN,MAAMC,SAAS,GAAIC,IAAY,IAAMC,IAAa,IAAKC,2BAAON,GAAG,CAACO,MAAM,CAACH,IAAI,CAAC,CAACI,IAAI,CAACH,IAAI,CAAC,CAAC;EAC1F,OAAOI,yBAAe,MACpBH,mFAAE,EACeI,KAAK,IAAIC,+BAAK,CAAY,GAAG,gCAAe,EAACD,KAAK,CAAC,GAAEE,oBAAY,CAAC,EACtE;IACT,iBAAiB,EAAEC,GAAG,IAAIV,SAAS,CAAC,GAAG,CAAC,CAACU,GAAG,CAACC,MAAM,CAAC;IACpD,eAAe,EAAEX,SAAS,CAAC,GAAG,CAAC;IAC/B,kBAAkB,EAAEA,SAAS,CAAC,GAAG,CAAC;IAClC,mBAAmB,EAAEA,SAAS,CAAC,GAAG,CAAC;IACnC,mBAAmB,EAAEA,SAAS,CAAC,GAAG,CAAC;IACnC;IACA,gCAAgC,EAAEA,SAAS,CAAC,GAAG;GAChD;EACD;EAAA,EACWU,GAAU,IACnBP,qEACE,gGAAgG,GAAGO,GAAG,CACvG,EACM,MAAMA,GAAc,CAAC,sBACN,CACvB,CACJ;AACH","names":["defaultBasicErrorHandler","_req","res","_requestContext","r2","sendError","code","body","tsplus_module_1","status","send","tsplus_module_4","cause","tsplus_module_2","tsplus_module_3","err","errors","optimisticConcurrencySchedule","tsplus_module_5","a","_tag","defaultErrorHandler","req","_","r3","method"],"sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"sourcesContent":[null]}
@@ -16,13 +16,11 @@ export function defaultBasicErrorHandler<R>(
16
16
  _requestContext: RequestContext,
17
17
  r2: Effect<R, ValidationError, void>
18
18
  ) {
19
+ const sendError = (code: number) => (body: unknown) => Effect(res.status(code).send(body))
19
20
  return Debug.untraced(() =>
20
21
  r2
21
22
  .tapErrorCause(cause => cause.isFailure() ? logRequestError(cause) : Effect.unit)
22
- .catchTag("ValidationError", err =>
23
- Effect.sync(() => {
24
- res.status(400).send(err.errors)
25
- }))
23
+ .catchTag("ValidationError", err => sendError(400)(err.errors))
26
24
  // final catch all; expecting never so that unhandled known errors will show up
27
25
  .catchAll((err: never) =>
28
26
  Effect.logError(
@@ -46,34 +44,19 @@ export function defaultErrorHandler<R>(
46
44
  const r3 = req.method === "PATCH"
47
45
  ? r2.retry(optimisticConcurrencySchedule)
48
46
  : r2
47
+ const sendError = (code: number) => (body: unknown) => Effect(res.status(code).send(body))
49
48
  return Debug.untraced(() =>
50
49
  r3
51
50
  .tapErrorCause(cause => cause.isFailure() ? logRequestError(cause) : Effect.unit)
52
- .catchTag("ValidationError", err =>
53
- Effect.sync(() => {
54
- res.status(400).send(err.errors)
55
- }))
56
- .catchTag("NotFoundError", err =>
57
- Effect.sync(() => {
58
- res.status(404).send(err)
59
- }))
60
- .catchTag("NotLoggedInError", err =>
61
- Effect.sync(() => {
62
- res.status(401).send(err)
63
- }))
64
- .catchTag("UnauthorizedError", err =>
65
- Effect.sync(() => {
66
- res.status(403).send(err)
67
- }))
68
- .catchTag("InvalidStateError", err =>
69
- Effect.sync(() => {
70
- res.status(422).send(err)
71
- }))
72
- .catchTag("OptimisticConcurrencyException", err =>
73
- Effect.sync(() => {
74
- // 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
75
- res.status(412).send(err)
76
- }))
51
+ .catchTags({
52
+ "ValidationError": err => sendError(400)(err.errors),
53
+ "NotFoundError": sendError(404),
54
+ "NotLoggedInError": sendError(401),
55
+ "UnauthorizedError": sendError(403),
56
+ "InvalidStateError": sendError(422),
57
+ // 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
58
+ "OptimisticConcurrencyException": sendError(412)
59
+ })
77
60
  // final catch all; expecting never so that unhandled known errors will show up
78
61
  .catchAll((err: never) =>
79
62
  Effect.logError(
@@ -2,7 +2,7 @@ import { Effect } from "@effect/io/Effect";
2
2
  import type express from "express";
3
3
  import type { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, UnauthorizedError, ValidationError } from "../errors.js";
4
4
  import type { RequestContext } from "../RequestContext.js";
5
- export declare function defaultBasicErrorHandler<R>(_req: express.Request, res: express.Response, _requestContext: RequestContext, r2: Effect<R, ValidationError, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
6
- export declare function defaultErrorHandler<R>(req: express.Request, res: express.Response, _: RequestContext, r2: Effect<R, SupportedErrors, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
5
+ export declare function defaultBasicErrorHandler<R>(_req: express.Request, res: express.Response, _requestContext: RequestContext, r2: Effect<R, ValidationError, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void | express.Response<any, Record<string, any>>>;
6
+ export declare function defaultErrorHandler<R>(req: express.Request, res: express.Response, _: RequestContext, r2: Effect<R, SupportedErrors, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void | express.Response<any, Record<string, any>>>;
7
7
  export type SupportedErrors = ValidationError | NotFoundError | NotLoggedInError | UnauthorizedError | InvalidStateError | OptimisticConcurrencyException;
8
8
  //# sourceMappingURL=defaultErrorHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,CAAC,OAAO,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,eAAe,EAAE,cAAc,EAC/B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uEAkBrC;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,CAAC,EAAE,cAAc,EACjB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,uEA0CrC;AAED,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,8BAA8B,CAAA"}
1
+ {"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,CAAC,OAAO,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,eAAe,EAAE,cAAc,EAC/B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,oHAgBrC;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,CAAC,EAAE,cAAc,EACjB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,oHA2BrC;AAED,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,8BAA8B,CAAA"}
@@ -5,9 +5,8 @@ import * as tsplus_module_4 from "@effect/io/Debug";
5
5
  import * as tsplus_module_5 from "@effect/io/Schedule";
6
6
  import { logRequestError } from "./reportError.js";
7
7
  export function defaultBasicErrorHandler(_req, res, _requestContext, r2) {
8
- return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r2, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
9
- res.status(400).send(err.errors);
10
- }))
8
+ const sendError = (code) => (body) => tsplus_module_1.sync(() => res.status(code).send(body));
9
+ return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r2, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => sendError(400)(err.errors))
11
10
  // final catch all; expecting never so that unhandled known errors will show up
12
11
  , (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die)));
13
12
  }
@@ -16,21 +15,17 @@ export function defaultErrorHandler(req, res, _, r2) {
16
15
  const r3 = req.method === "PATCH"
17
16
  ? tsplus_module_1.retry(r2, optimisticConcurrencySchedule)
18
17
  : r2;
19
- return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r3, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => tsplus_module_1.sync(() => {
20
- res.status(400).send(err.errors);
21
- })), "NotFoundError", err => tsplus_module_1.sync(() => {
22
- res.status(404).send(err);
23
- })), "NotLoggedInError", err => tsplus_module_1.sync(() => {
24
- res.status(401).send(err);
25
- })), "UnauthorizedError", err => tsplus_module_1.sync(() => {
26
- res.status(403).send(err);
27
- })), "InvalidStateError", err => tsplus_module_1.sync(() => {
28
- res.status(422).send(err);
29
- })), "OptimisticConcurrencyException", err => tsplus_module_1.sync(() => {
18
+ const sendError = (code) => (body) => tsplus_module_1.sync(() => res.status(code).send(body));
19
+ return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTags(tsplus_module_1.tapErrorCause(r3, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), {
20
+ "ValidationError": err => sendError(400)(err.errors),
21
+ "NotFoundError": sendError(404),
22
+ "NotLoggedInError": sendError(401),
23
+ "UnauthorizedError": sendError(403),
24
+ "InvalidStateError": sendError(422),
30
25
  // 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
31
- res.status(412).send(err);
32
- }))
26
+ "OptimisticConcurrencyException": sendError(412)
27
+ })
33
28
  // final catch all; expecting never so that unhandled known errors will show up
34
29
  , (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die)));
35
30
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFbEQsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxJQUFxQixFQUNyQixHQUFxQixFQUNyQixlQUErQixFQUMvQixFQUFvQztJQUVwQyxPQUFPLHlCQUFlLEdBQUcsRUFBRSxDQUN6Qix5QkFBQSx5QkFBQSw4QkFBQSxFQUFFLEVBQ2UsS0FBSyxDQUFDLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksQ0FBQyxFQUN2RSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNqQyxxQkFBWSxHQUFHLEVBQUU7UUFDZixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCwrRUFBK0U7TUFDckUsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUN2Qix3QkFBQSxvQkFBQSx5QkFDRSxnR0FBZ0csR0FBRyxHQUFHLENBQ3ZHLEVBQ00sR0FBRyxFQUFFLENBQUMsR0FBYyxDQUFDLHNCQUNOLENBQ3ZCLENBQ0osQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLDZCQUE2Qiw2QkFDakMsMkJBQXFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxFQURsRCxzQkFBZSxDQUNtQyxDQUFBO0FBRXhGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsQ0FBaUIsRUFDakIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE9BQU8seUJBQWUsR0FBRyxFQUFFLENBQ3pCLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLHlCQUFBLDhCQUFBLEVBQUUsRUFDZSxLQUFLLENBQUMsRUFBRSxDQUFDLDBCQUFBLEtBQUssQ0FBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBWSxDQUFDLEVBQ3ZFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2pDLHFCQUFZLEdBQUcsRUFBRTtRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsQyxDQUFDLENBQUMsQ0FBQyxFQUNLLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUMvQixxQkFBWSxHQUFHLEVBQUU7UUFDZixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2xDLHFCQUFZLEdBQUcsRUFBRTtRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDLEVBQ0ssbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDbkMscUJBQVksR0FBRyxFQUFFO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUMsRUFDSyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNuQyxxQkFBWSxHQUFHLEVBQUU7UUFDZixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLGdDQUFnQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2hELHFCQUFZLEdBQUcsRUFBRTtRQUNmLDRJQUE0STtRQUM1SSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLCtFQUErRTtNQUNyRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLHdCQUFBLG9CQUFBLHlCQUNFLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDTSxHQUFHLEVBQUUsQ0FBQyxHQUFjLENBQUMsc0JBQ04sQ0FDdkIsQ0FDSixDQUFBO0FBQ0gsQ0FBQyJ9
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFbEQsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxJQUFxQixFQUNyQixHQUFxQixFQUNyQixlQUErQixFQUMvQixFQUFvQztJQUVwQyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLDJCQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDMUYsT0FBTyx5QkFBZSxHQUFHLEVBQUUsQ0FDekIseUJBQUEseUJBQUEsOEJBQUEsRUFBRSxFQUNlLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDdkUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELCtFQUErRTtNQUNyRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLHdCQUFBLG9CQUFBLHlCQUNFLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDTSxHQUFHLEVBQUUsQ0FBQyxHQUFjLENBQUMsc0JBQ04sQ0FDdkIsQ0FDSixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sNkJBQTZCLDZCQUNqQywyQkFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdDQUFnQyxDQUFDLEVBRGxELHNCQUFlLENBQ21DLENBQUE7QUFFeEYsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxHQUFvQixFQUNwQixHQUFxQixFQUNyQixDQUFpQixFQUNqQixFQUFvQztJQUVwQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLE9BQU87UUFDL0IsQ0FBQyxDQUFDLHNCQUFBLEVBQUUsRUFBTyw2QkFBNkIsQ0FBQztRQUN6QyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ04sTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQywyQkFBTyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzFGLE9BQU8seUJBQWUsR0FBRyxFQUFFLENBQ3pCLHlCQUFBLDBCQUFBLDhCQUFBLEVBQUUsRUFDZSxLQUFLLENBQUMsRUFBRSxDQUFDLDBCQUFBLEtBQUssQ0FBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBWSxDQUFDLEVBQ3RFO1FBQ1QsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNwRCxlQUFlLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUMvQixrQkFBa0IsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ2xDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDbkMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNuQyw0SUFBNEk7UUFDNUksZ0NBQWdDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztLQUNqRCxDQUFDO0lBQ0YsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBQ0UsZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNNLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUNKLENBQUE7QUFDSCxDQUFDIn0=
@@ -6,8 +6,8 @@ import type { DBRecord } from "./shared.js";
6
6
  import { OptimisticLockException } from "./shared.js";
7
7
  import * as simpledb from "./simpledb.js";
8
8
  export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, indexes: IndexingPolicy) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient, unknown, {
9
- find: (id: string) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient | simpledb.RecordCache | RDecode, unknown, import("@fp-ts/core/Option").Option<A>>;
9
+ find: (id: string) => import("@effect/io/Effect").Effect<RDecode | Cosmos.CosmosClient | simpledb.RecordCache, unknown, import("@fp-ts/core/Option").Option<A>>;
10
10
  findBy: (parameters: Record<string, string>) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient, unknown, import("@fp-ts/core/Option").Option<any>>;
11
- save: (record: A) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient | simpledb.RecordCache | REncode, OptimisticLockException, A>;
11
+ save: (record: A) => import("@effect/io/Effect").Effect<REncode | Cosmos.CosmosClient | simpledb.RecordCache, OptimisticLockException, A>;
12
12
  }>;
13
13
  //# sourceMappingURL=cosmosdb.d.ts.map
@@ -4,9 +4,9 @@ import type { DBRecord, Index } from "./shared.js";
4
4
  import { CouldNotAquireDbLockException } from "./shared.js";
5
5
  import * as simpledb from "./simpledb.js";
6
6
  export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, schemaVersion: string, makeIndexKey: (r: A) => Index, dir?: string) => {
7
- find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode, simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
7
+ find: (id: string) => import("@effect/io/Effect").Effect<RDecode | simpledb.RecordCache, simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
8
8
  findByIndex: (index: Index) => import("@effect/io/Effect").Effect<never, never, import("@fp-ts/core/Option").Option<TKey & {}>>;
9
- save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache | REncode, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
9
+ save: (record: A) => import("@effect/io/Effect").Effect<REncode | simpledb.RecordCache, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
10
10
  };
11
11
  export declare function initialise(dir: string): void;
12
12
  //# sourceMappingURL=diskdb.d.ts.map
@@ -5,8 +5,8 @@ import * as MO from "@effect-app/schema";
5
5
  import type { DBRecord } from "./shared.js";
6
6
  import * as simpledb from "./simpledb.js";
7
7
  export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>) => {
8
- find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode, MO.CondemnException | simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
8
+ find: (id: string) => import("@effect/io/Effect").Effect<RDecode | simpledb.RecordCache, MO.CondemnException | simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
9
9
  findBy: <V extends Partial<A>>(keys: V, eq: import("@fp-ts/core/typeclass/Equivalence").Equivalence<V>) => import("@effect/io/Effect").Effect<RDecode, MO.CondemnException, import("@fp-ts/core/Option").Option<A & {}>>;
10
- save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache | REncode, MO.CondemnException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
10
+ save: (record: A) => import("@effect/io/Effect").Effect<REncode | simpledb.RecordCache, MO.CondemnException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
11
11
  };
12
12
  //# sourceMappingURL=memdb.d.ts.map
@@ -6,8 +6,8 @@ import type { DBRecord } from "./shared.js";
6
6
  import { OptimisticLockException } from "./shared.js";
7
7
  import * as simpledb from "./simpledb.js";
8
8
  export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, indexes: IndexDescription[]) => import("@effect/io/Effect").Effect<Mongo.MongoClient, unknown, {
9
- find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode | Mongo.MongoClient, unknown, import("@fp-ts/core/Option").Option<A>>;
9
+ find: (id: string) => import("@effect/io/Effect").Effect<RDecode | Mongo.MongoClient | simpledb.RecordCache, unknown, import("@fp-ts/core/Option").Option<A>>;
10
10
  findBy: (keys: Record<string, string>) => import("@effect/io/Effect").Effect<Mongo.MongoClient, unknown, import("@fp-ts/core/Option").Option<TKey>>;
11
- save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache | REncode | Mongo.MongoClient, OptimisticLockException, A>;
11
+ save: (record: A) => import("@effect/io/Effect").Effect<REncode | Mongo.MongoClient | simpledb.RecordCache, OptimisticLockException, A>;
12
12
  }>;
13
13
  //# sourceMappingURL=mongodb.d.ts.map
@@ -6,9 +6,9 @@ import type { DBRecord, Index } from "./shared.js";
6
6
  import { CouldNotAquireDbLockException } from "./shared.js";
7
7
  import * as simpledb from "./simpledb.js";
8
8
  export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, schemaVersion: string, makeIndexKey: (r: A) => Index) => {
9
- find: (id: string) => import("@effect/io/Effect").Effect<RED.RedisClient | simpledb.RecordCache | RDecode, simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
9
+ find: (id: string) => import("@effect/io/Effect").Effect<RDecode | RED.RedisClient | simpledb.RecordCache, simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
10
10
  findByIndex: (index: Index) => import("@effect/io/Effect").Effect<RED.RedisClient, RED.ConnectionException, import("@fp-ts/core/Option").Option<TKey>>;
11
- save: (record: A) => import("@effect/io/Effect").Effect<RED.RedisClient | simpledb.RecordCache | REncode, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
11
+ save: (record: A) => import("@effect/io/Effect").Effect<REncode | RED.RedisClient | simpledb.RecordCache, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
12
12
  };
13
13
  declare const RedisSerializedDBRecord_base: MO.Model<RedisSerializedDBRecord, MO.SchemaProperties<{
14
14
  version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
@@ -17,7 +17,7 @@ export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {
17
17
  }
18
18
  export declare const RecordCache: import("@effect/data/Context").Tag<RecordCache>;
19
19
  export declare const LiveRecordCache: import("@effect/io/Layer").Layer<never, never, RecordCache>;
20
- export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<R, E, Option<CachedRecord<EA>>>, decode: (d: EA) => Effect<RDecode, EDecode, A>, type: string): (id: string) => import("@effect/io/Effect").Effect<RecordCache | R | RDecode, InvalidStateError | E, import("@fp-ts/core/Option").Option<A>>;
21
- export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Option<Version>) => Effect<R, E, CachedRecord<A>>, type: string): (record: A) => import("@effect/io/Effect").Effect<RecordCache | R, E, A>;
22
- export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<R, E, Option<CachedRecord<EA>>>, save: (r: A, version: Option<Version>) => Effect<R, E, CachedRecord<A>>, lock: (id: string) => Effect<R2 | Scope, E2, unknown>, type: string): (record: A) => import("@effect/io/Effect").Effect<RecordCache | R | Exclude<R2, import("@effect/io/Scope").Scope>, OptimisticLockException | InvalidStateError | E | E2, A>;
20
+ export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<R, E, Option<CachedRecord<EA>>>, decode: (d: EA) => Effect<RDecode, EDecode, A>, type: string): (id: string) => import("@effect/io/Effect").Effect<R | RDecode | RecordCache, E | InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
21
+ export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Option<Version>) => Effect<R, E, CachedRecord<A>>, type: string): (record: A) => import("@effect/io/Effect").Effect<R | RecordCache, E, A>;
22
+ export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<R, E, Option<CachedRecord<EA>>>, save: (r: A, version: Option<Version>) => Effect<R, E, CachedRecord<A>>, lock: (id: string) => Effect<R2 | Scope, E2, unknown>, type: string): (record: A) => import("@effect/io/Effect").Effect<R | RecordCache | Exclude<R2, import("@effect/io/Scope").Scope>, E | E2 | OptimisticLockException | InvalidStateError, A>;
23
23
  //# sourceMappingURL=simpledb.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "0.25.8",
3
+ "version": "0.25.9",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -20,10 +20,10 @@
20
20
  "proper-lockfile": "^4.1.2",
21
21
  "pure-rand": "^6.0.0",
22
22
  "redlock": "^4.2.0",
23
- "@effect-app/prelude": "0.21.4",
24
- "@effect-app/core": "0.23.0",
25
- "@effect-app/infra-adapters": "0.20.4",
26
- "@effect-app/schema": "0.18.3"
23
+ "@effect-app/prelude": "0.21.5",
24
+ "@effect-app/core": "0.23.1",
25
+ "@effect-app/schema": "0.18.4",
26
+ "@effect-app/infra-adapters": "0.20.5"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@babel/cli": "^7.20.7",