@effect-app/infra 1.8.0 → 1.9.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,17 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 1.9.1
4
+
5
+ ### Patch Changes
6
+
7
+ - m
8
+
9
+ ## 1.9.0
10
+
11
+ ### Minor Changes
12
+
13
+ - d7a4881: Add persistent Operations
14
+
3
15
  ## 1.8.0
4
16
 
5
17
  ### Minor Changes
@@ -16,60 +16,43 @@ var _Operations = require("effect-app/Operations");
16
16
  var _MainFiberSet = require("effect-app/services/MainFiberSet");
17
17
  var Scope = _interopRequireWildcard(require("effect/Scope"));
18
18
  var _reportError = require("../api/reportError.cjs");
19
+ var _rateLimit = require("../rateLimit.cjs");
20
+ var _OperationsRepo = require("./OperationsRepo.cjs");
21
+ var _query = require("./query.cjs");
19
22
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
23
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
24
  const reportAppError = (0, _errorReporter.reportError)("Operations.Cleanup");
22
- const make = _effectApp.Effect.sync(() => {
23
- const ops = new Map();
25
+ const make = _effectApp.Effect.gen(function* () {
26
+ const repo = yield* _OperationsRepo.OperationsRepo;
24
27
  const makeOp = _effectApp.Effect.sync(() => _Operations.OperationId.make());
25
- const cleanup = _effectApp.Effect.sync(() => {
26
- const before = (0, _dateFns.subHours)(new Date(), 1);
27
- [...ops.entries()].forEach(([id, op]) => {
28
- const lastChanged = _effectApp.Option.fromNullable(op.updatedAt).pipe(_effectApp.Option.getOrElse(() => op.createdAt));
29
- if (lastChanged < before) {
30
- ops.delete(id);
31
- }
32
- });
33
- }).pipe(_effectApp.Effect.withSpan("Operations.cleanup"));
28
+ const cleanup = _effectApp.Effect.sync(() => (0, _dateFns.subHours)(new Date(), 1)).pipe(_effectApp.Effect.andThen(before => repo.query((0, _query.where)("updatedAt", "lt", before.toISOString()))), _effectApp.Effect.andThen(ops => (0, _Function.pipe)(ops, (0, _rateLimit.batch)(100, _effectApp.Effect.succeed, items => repo.removeAndPublish(items)))), _effectApp.Effect.withSpan("Operations.cleanup"));
34
29
  function addOp(id, title) {
35
- return _effectApp.Effect.sync(() => {
36
- ops.set(id, new _Operations.Operation({
37
- id,
38
- title
39
- }));
40
- });
30
+ return repo.save(new _Operations.Operation({
31
+ id,
32
+ title
33
+ })).pipe(_effectApp.Effect.orDie);
41
34
  }
42
35
  function findOp(id) {
43
- return _effectApp.Effect.sync(() => _effectApp.Option.fromNullable(ops.get(id)));
36
+ return repo.find(id);
44
37
  }
45
38
  function finishOp(id, exit) {
46
- return _effectApp.Effect.flatMap(findOp(id), _ => _effectApp.Effect.sync(() => {
47
- if (_effectApp.Option.isNone(_)) {
48
- throw new Error("Not found");
49
- }
50
- ops.set(id, (0, _effectApp.copy)(_.value, {
51
- updatedAt: new Date(),
52
- result: _effectApp.Exit.isSuccess(exit) ? new _Operations.Success() : new _Operations.Failure({
53
- message: _effectApp.Cause.isInterrupted(exit.cause) ? (0, _schema.NonEmptyString2k)("Interrupted") : _effectApp.Cause.isDie(exit.cause) ? (0, _schema.NonEmptyString2k)("Unknown error") : _effectApp.Cause.failureOption(exit.cause).pipe(_effectApp.Option.flatMap(_ => typeof _ === "object" && _ !== null && "message" in _ && _effectApp.S.is(_schema.NonEmptyString2k)(_.message) ? _effectApp.Option.some(_.message) : _effectApp.Option.none()), _effectApp.Option.getOrNull)
54
- })
55
- }));
56
- }));
39
+ return _effectApp.Effect.flatMap(repo.get(id).pipe(_effectApp.Effect.orDie), _ => repo.save((0, _effectApp.copy)(_, {
40
+ updatedAt: new Date(),
41
+ result: _effectApp.Exit.isSuccess(exit) ? new _Operations.Success() : new _Operations.Failure({
42
+ message: _effectApp.Cause.isInterrupted(exit.cause) ? (0, _schema.NonEmptyString2k)("Interrupted") : _effectApp.Cause.isDie(exit.cause) ? (0, _schema.NonEmptyString2k)("Unknown error") : _effectApp.Cause.failureOption(exit.cause).pipe(_effectApp.Option.flatMap(_ => typeof _ === "object" && _ !== null && "message" in _ && _effectApp.S.is(_schema.NonEmptyString2k)(_.message) ? _effectApp.Option.some(_.message) : _effectApp.Option.none()), _effectApp.Option.getOrNull)
43
+ })
44
+ })).pipe(_effectApp.Effect.orDie));
57
45
  }
58
46
  function update(id, progress) {
59
- return _effectApp.Effect.flatMap(findOp(id), _ => _effectApp.Effect.sync(() => {
60
- if (_effectApp.Option.isNone(_)) {
61
- throw new Error("Not found");
62
- }
63
- ops.set(id, (0, _effectApp.copy)(_.value, {
64
- updatedAt: new Date(),
65
- progress
66
- }));
67
- }));
47
+ return _effectApp.Effect.flatMap(repo.get(id).pipe(_effectApp.Effect.orDie), _ => repo.save((0, _effectApp.copy)(_, {
48
+ updatedAt: new Date(),
49
+ progress
50
+ })).pipe(_effectApp.Effect.orDie));
68
51
  }
69
52
  return {
70
53
  cleanup,
71
54
  register: title => _effectApp.Effect.tap(makeOp, id => _effectApp.Effect.andThen((0, _Effect.annotateLogscoped)("operationId", id), _effectApp.Effect.acquireRelease(addOp(id, title), (_, exit) => finishOp(id, exit)))),
72
- all: _effectApp.Effect.sync(() => [...ops.values()]),
55
+ all: repo.all,
73
56
  find: findOp,
74
57
  update
75
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Operations.cjs","names":["_Effect","require","_Function","_errorReporter","_schema","_dateFns","_effectApp","_Operations","_MainFiberSet","Scope","_interopRequireWildcard","_reportError","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","reportAppError","reportError","make","Effect","sync","ops","Map","makeOp","OperationId","cleanup","before","subHours","Date","entries","forEach","id","op","lastChanged","Option","fromNullable","updatedAt","pipe","getOrElse","createdAt","delete","withSpan","addOp","title","Operation","findOp","finishOp","exit","flatMap","_","isNone","Error","copy","value","result","Exit","isSuccess","Success","Failure","message","Cause","isInterrupted","cause","NonEmptyString2k","isDie","failureOption","S","is","some","none","getOrNull","update","progress","register","tap","andThen","annotateLogscoped","acquireRelease","all","values","find","Operations","Context","TagMakeId","CleanupLive","use","void","schedule","Schedule","fixed","Duration","minutes","map","MainFiberSet","run","Layer","effectDiscard","provide","Live","provideMerge","toLayer","forkOperation","exports","dual","self","scope","extend","forkDaemonReportRequestUnexpected","fiber","forkOperationFunction","fnc","inp","forkOperation2","forkOperationWithEffect","interruptible","forkScoped"],"sources":["../../src/services/Operations.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Operations.cjs","names":["_Effect","require","_Function","_errorReporter","_schema","_dateFns","_effectApp","_Operations","_MainFiberSet","Scope","_interopRequireWildcard","_reportError","_rateLimit","_OperationsRepo","_query","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","reportAppError","reportError","make","Effect","gen","repo","OperationsRepo","makeOp","sync","OperationId","cleanup","subHours","Date","pipe","andThen","before","query","where","toISOString","ops","batch","succeed","items","removeAndPublish","withSpan","addOp","id","title","save","Operation","orDie","findOp","find","finishOp","exit","flatMap","_","copy","updatedAt","result","Exit","isSuccess","Success","Failure","message","Cause","isInterrupted","cause","NonEmptyString2k","isDie","failureOption","Option","S","is","some","none","getOrNull","update","progress","register","tap","annotateLogscoped","acquireRelease","all","Operations","Context","TagMakeId","CleanupLive","use","void","schedule","Schedule","fixed","Duration","minutes","map","MainFiberSet","run","Layer","effectDiscard","provide","Live","provideMerge","toLayer","forkOperation","exports","dual","self","scope","extend","forkDaemonReportRequestUnexpected","fiber","forkOperationFunction","fnc","inp","forkOperation2","forkOperationWithEffect","interruptible","forkScoped"],"sources":["../../src/services/Operations.ts"],"sourcesContent":[null],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAEA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAEA,IAAAK,UAAA,GAAAL,OAAA;AAEA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,aAAA,GAAAP,OAAA;AACA,IAAAQ,KAAA,GAAAC,uBAAA,CAAAT,OAAA;AACA,IAAAU,YAAA,GAAAV,OAAA;AACA,IAAAW,UAAA,GAAAX,OAAA;AACA,IAAAY,eAAA,GAAAZ,OAAA;AACA,IAAAa,MAAA,GAAAb,OAAA;AAAkC,SAAAc,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAElC,MAAMW,cAAc,GAAG,IAAAC,0BAAW,EAAC,oBAAoB,CAAC;AAExD,MAAMC,IAAI,GAAGC,iBAAM,CAACC,GAAG,CAAC,aAAS;EAC/B,MAAMC,IAAI,GAAG,OAAOC,8BAAc;EAClC,MAAMC,MAAM,GAAGJ,iBAAM,CAACK,IAAI,CAAC,MAAMC,uBAAW,CAACP,IAAI,EAAE,CAAC;EAEpD,MAAMQ,OAAO,GAAGP,iBAAM,CAACK,IAAI,CAAC,MAAM,IAAAG,iBAAQ,EAAC,IAAIC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAACC,IAAI,CAC7DV,iBAAM,CAACW,OAAO,CAAEC,MAAM,IAAKV,IAAI,CAACW,KAAK,CAAC,IAAAC,YAAK,EAAC,WAAW,EAAE,IAAI,EAAEF,MAAM,CAACG,WAAW,EAAE,CAAC,CAAC,CAAC,EACtFf,iBAAM,CAACW,OAAO,CAAEK,GAAG,IAAK,IAAAN,cAAI,EAACM,GAAG,EAAE,IAAAC,gBAAK,EAAC,GAAG,EAAEjB,iBAAM,CAACkB,OAAO,EAAGC,KAAK,IAAKjB,IAAI,CAACkB,gBAAgB,CAACD,KAAK,CAAC,CAAC,CAAC,CAAC,EACvGnB,iBAAM,CAACqB,QAAQ,CAAC,oBAAoB,CAAC,CACtC;EAED,SAASC,KAAKA,CAACC,EAAe,EAAEC,KAAuB;IACrD,OAAOtB,IAAI,CAACuB,IAAI,CAAC,IAAIC,qBAAS,CAAC;MAAEH,EAAE;MAAEC;IAAK,CAAE,CAAC,CAAC,CAACd,IAAI,CAACV,iBAAM,CAAC2B,KAAK,CAAC;EACnE;EACA,SAASC,MAAMA,CAACL,EAAe;IAC7B,OAAOrB,IAAI,CAAC2B,IAAI,CAACN,EAAE,CAAC;EACtB;EACA,SAASO,QAAQA,CAACP,EAAe,EAAEQ,IAA4B;IAC7D,OAAO/B,iBAAM,CACVgC,OAAO,CAAC9B,IAAI,CAACjB,GAAG,CAACsC,EAAE,CAAC,CAACb,IAAI,CAACV,iBAAM,CAAC2B,KAAK,CAAC,EAAGM,CAAC,IAC1C/B,IAAI,CACDuB,IAAI,CACH,IAAAS,eAAI,EAACD,CAAC,EAAE;MACNE,SAAS,EAAE,IAAI1B,IAAI,EAAE;MACrB2B,MAAM,EAAEC,eAAI,CAACC,SAAS,CAACP,IAAI,CAAC,GACxB,IAAIQ,mBAAO,EAAE,GACb,IAAIC,mBAAO,CAAC;QACZC,OAAO,EAAEC,gBAAK,CAACC,aAAa,CAACZ,IAAI,CAACa,KAAK,CAAC,GACpC,IAAAC,wBAAgB,EAAC,aAAa,CAAC,GAC/BH,gBAAK,CAACI,KAAK,CAACf,IAAI,CAACa,KAAK,CAAC,GACvB,IAAAC,wBAAgB,EAAC,eAAe,CAAC,GACjCH,gBAAK,CACJK,aAAa,CAAChB,IAAI,CAACa,KAAK,CAAC,CACzBlC,IAAI,CACHsC,iBAAM,CAAChB,OAAO,CAAEC,CAAC,IACf,OAAOA,CAAC,KAAK,QAAQ,IAAIA,CAAC,KAAK,IAAI,IAAI,SAAS,IAAIA,CAAC,IAAIgB,YAAC,CAACC,EAAE,CAACL,wBAAgB,CAAC,CAACZ,CAAC,CAACQ,OAAO,CAAC,GACtFO,iBAAM,CAACG,IAAI,CAAClB,CAAC,CAACQ,OAAO,CAAC,GACtBO,iBAAM,CAACI,IAAI,EAAE,CAClB,EACDJ,iBAAM,CAACK,SAAS;OAEvB;KACJ,CAAC,CACH,CACA3C,IAAI,CAACV,iBAAM,CAAC2B,KAAK,CAAC,CAAC;EAC5B;EACA,SAAS2B,MAAMA,CAAC/B,EAAe,EAAEgC,QAA2B;IAC1D,OAAOvD,iBAAM,CAACgC,OAAO,CACnB9B,IAAI,CAACjB,GAAG,CAACsC,EAAE,CAAC,CAACb,IAAI,CAACV,iBAAM,CAAC2B,KAAK,CAAC,EAC9BM,CAAC,IAAK/B,IAAI,CAACuB,IAAI,CAAC,IAAAS,eAAI,EAACD,CAAC,EAAE;MAAEE,SAAS,EAAE,IAAI1B,IAAI,EAAE;MAAE8C;IAAQ,CAAE,CAAC,CAAC,CAAC7C,IAAI,CAACV,iBAAM,CAAC2B,KAAK,CAAC,CAClF;EACH;EACA,OAAO;IACLpB,OAAO;IACPiD,QAAQ,EAAGhC,KAAuB,IAChCxB,iBAAM,CAACyD,GAAG,CACRrD,MAAM,EACLmB,EAAE,IACDvB,iBAAM,CAACW,OAAO,CACZ,IAAA+C,yBAAiB,EAAC,aAAa,EAAEnC,EAAE,CAAC,EACpCvB,iBAAM,CAAC2D,cAAc,CAACrC,KAAK,CAACC,EAAE,EAAEC,KAAK,CAAC,EAAE,CAACS,CAAC,EAAEF,IAAI,KAAKD,QAAQ,CAACP,EAAE,EAAEQ,IAAI,CAAC,CAAC,CACzE,CACJ;IAEH6B,GAAG,EAAE1D,IAAI,CAAC0D,GAAG;IACb/B,IAAI,EAAED,MAAM;IACZ0B;GACD;AACH,CAAC,CAAC;AAEI,MAAOO,UAAW,SAAQC,kBAAO,CAACC,SAAS,CAAC,uBAAuB,EAAEhE,IAAI,CAAC,EAAc;EACpF,OAAgBiE,WAAW,GAAG,IAAI,CACvCC,GAAG,CAAEhC,CAAC,IACLA,CAAC,CAAC1B,OAAO,CAACG,IAAI,CACZV,iBAAM,CAAC+B,IAAI,EACX/B,iBAAM,CACHgC,OAAO,CAAEC,CAAC,IAAI;IACb,IAAII,eAAI,CAACC,SAAS,CAACL,CAAC,CAAC,EAAE;MACrB,OAAOjC,iBAAM,CAACkE,IAAI;IACpB,CAAC,MAAM;MACL,OAAOrE,cAAc,CAACoC,CAAC,CAACW,KAAK,CAAC;IAChC;EACF,CAAC,CAAC,EACJ5C,iBAAM,CAACmE,QAAQ,CAACC,mBAAQ,CAACC,KAAK,CAACC,mBAAQ,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EACrDvE,iBAAM,CAACwE,GAAG,CAAEvC,CAAC,IAAKA,CAAU,CAAC,EAC7BwC,0BAAY,CAACC,GAAG,CACjB,CACF,CACAhE,IAAI,CAACiE,gBAAK,CAACC,aAAa,EAAED,gBAAK,CAACE,OAAO,CAACJ,0BAAY,CAACK,IAAI,CAAC,CAAC;EAE9D,OAAgBA,IAAI,GAAG,IAAI,CAACd,WAAW,CAACtD,IAAI,CAACiE,gBAAK,CAACI,YAAY,CAAC,IAAI,CAACC,OAAO,EAAE,CAAC,CAAC;;;AAQ3E,MAAMC,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAQtB,IAAAE,cAAI,EACN,CAAC,EACD,CAAUC,IAAqB,EAAE5D,KAAuB,KACtDxB,iBAAM,CAACgC,OAAO,CACZ7D,KAAK,CAAC4B,IAAI,EAAE,EACXsF,KAAK,IACJxB,UAAU,CACPL,QAAQ,CAAChC,KAAK,CAAC,CACfd,IAAI,CACHvC,KAAK,CAACmH,MAAM,CAACD,KAAK,CAAC,EACnBrF,iBAAM,CACHgC,OAAO,CAAET,EAAE,IACV,IAAAgE,8CAAiC,EAACpH,KAAK,CAAC8F,GAAG,CACzCmB,IAAI,CAAC1E,IAAI,CAACV,iBAAM,CAACqB,QAAQ,CAACG,KAAK,CAAC,CAAC,EACjC6D,KAAK,CACN,CAAC,CACC3E,IAAI,CAACV,iBAAM,CAACwE,GAAG,CAAEgB,KAAK,KAA8B;EAAEA,KAAK;EAAEjE;AAAE,CAAE,CAAC,CAAC,CAAC,CACxE,CACJ,CACN,CACJ;AAEK,SAAUkE,qBAAqBA,CAAeC,GAAkC,EAAElE,KAAuB;EAC7G,OAAQmE,GAAQ,IAAKD,GAAG,CAACC,GAAG,CAAC,CAACjF,IAAI,CAAEuB,CAAC,IAAKgD,aAAa,CAAChD,CAAC,EAAET,KAAK,CAAC,CAAC;AACpE;AAEO,MAAMoE,cAAc,GAAAV,OAAA,CAAAU,cAAA,GAQvB,IAAAT,cAAI,EACN,CAAC,EACD,CAAUC,IAA4C,EAAE5D,KAAuB,KAC7E,IAAAQ,eAAO,EAAC6B,UAAU,EAAGA,UAAU,IAC7B7D,iBAAM,CAACgC,OAAO,CACZ7D,KAAK,CAAC4B,IAAI,EAAE,EACXsF,KAAK,IACJxB,UAAU,CACPL,QAAQ,CAAChC,KAAK,CAAC,CACfd,IAAI,CACHvC,KAAK,CAACmH,MAAM,CAACD,KAAK,CAAC,EACnBrF,iBAAM,CACHgC,OAAO,CAAET,EAAE,IACV,IAAAgE,8CAAiC,EAACpH,KAAK,CAAC8F,GAAG,CACzCmB,IAAI,CAAC7D,EAAE,CAAC,CAACb,IAAI,CAACV,iBAAM,CAACqB,QAAQ,CAACG,KAAK,CAAC,CAAC,EACrC6D,KAAK,CACN,CAAC,CACC3E,IAAI,CAACV,iBAAM,CAACwE,GAAG,CAAEgB,KAAK,KAA8B;EAAEA,KAAK;EAAEjE;AAAE,CAAE,CAAC,CAAC,CAAC,CACxE,CACJ,CACN,CAAC,CACP;AAEK,SAAUsE,uBAAuBA,CACrCT,IAA0C,EAC1CM,GAA4C,EAC5ClE,KAAuB;EAMvB,OAAOxB,iBAAM,CAACgC,OAAO,CAAC6B,UAAU,EAAGA,UAAU,IAC3C7D,iBAAM,CAACgC,OAAO,CACZ7D,KAAK,CAAC4B,IAAI,EAAE,EACXsF,KAAK,IACJxB,UAAU,CACPL,QAAQ,CAAChC,KAAK,CAAC,CACfd,IAAI,CACHvC,KAAK,CAACmH,MAAM,CAACD,KAAK,CAAC,EACnBrF,iBAAM,CAACgC,OAAO,CAAET,EAAE,IAChB,IAAAgE,8CAAiC,EAACpH,KAAK,CAAC8F,GAAG,CACzCmB,IAAI,CAAC7D,EAAE,CAAC,CAACb,IAAI,CAACV,iBAAM,CAACqB,QAAQ,CAACG,KAAK,CAAC,CAAC,EACrC6D,KAAK,CACN,CAAC,CACC3E,IAAI,CAACV,iBAAM,CAACwE,GAAG,CAAEgB,KAAK,KAA8B;IAAEA,KAAK;IAAEjE;EAAE,CAAE,CAAC,CAAC,CAAC,CACxE,EACDvB,iBAAM,CAACyD,GAAG,CAAC,CAAC;IAAElC;EAAE,CAAE,KAChBvB,iBAAM,CAAC8F,aAAa,CAACJ,GAAG,CAACnE,EAAE,CAAC,CAAC,CAACb,IAAI,CAChCV,iBAAM,CAAC+F,UAAU,EACjB5H,KAAK,CAACmH,MAAM,CAACD,KAAK,CAAC,CACpB,CACF,CACF,CACN,CAAC;AACN","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OperationsRepo = void 0;
7
+ var _Operations = require("effect-app/Operations");
8
+ var _RepositoryBase = require("./RepositoryBase.cjs");
9
+ class OperationsRepo extends (0, _RepositoryBase.RepositoryDefaultImpl)()("Operation", _Operations.Operation) {}
10
+ exports.OperationsRepo = OperationsRepo;
11
+ //# sourceMappingURL=OperationsRepo.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationsRepo.cjs","names":["_Operations","require","_RepositoryBase","OperationsRepo","RepositoryDefaultImpl","Operation","exports"],"sources":["../../src/services/OperationsRepo.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAEM,MAAOE,cAAe,SAAQ,IAAAC,qCAAqB,GAAkB,CACzE,WAAW,EACXC,qBAAS,CACV;AAAGC,OAAA,CAAAH,cAAA,GAAAA,cAAA","ignoreList":[]}
@@ -5,53 +5,54 @@ import { Context, Effect, Layer, Option, S } from "effect-app";
5
5
  import type { OperationProgress } from "effect-app/Operations";
6
6
  import { Operation, OperationId } from "effect-app/Operations";
7
7
  import * as Scope from "effect/Scope";
8
+ import { OperationsRepo } from "./OperationsRepo.js";
8
9
  declare const Operations_base: (abstract new (service: {
9
- cleanup: Effect.Effect<void, never, never>;
10
+ cleanup: Effect.Effect<void[], never, never>;
10
11
  register: (title: NonEmptyString2k) => Effect.Effect<S.StringId, never, Scope.Scope>;
11
- all: Effect.Effect<Operation[], never, never>;
12
- find: (id: OperationId) => Effect.Effect<Option.Option<Operation>, never, never>;
12
+ all: Effect<Operation[]>;
13
+ find: (id: OperationId) => Effect<Option<Operation>>;
13
14
  update: (id: OperationId, progress: OperationProgress) => Effect.Effect<void, never, never>;
14
15
  }) => Readonly<{
15
- cleanup: Effect.Effect<void, never, never>;
16
+ cleanup: Effect.Effect<void[], never, never>;
16
17
  register: (title: NonEmptyString2k) => Effect.Effect<S.StringId, never, Scope.Scope>;
17
- all: Effect.Effect<Operation[], never, never>;
18
- find: (id: OperationId) => Effect.Effect<Option.Option<Operation>, never, never>;
18
+ all: Effect<Operation[]>;
19
+ find: (id: OperationId) => Effect<Option<Operation>>;
19
20
  update: (id: OperationId, progress: OperationProgress) => Effect.Effect<void, never, never>;
20
21
  }> & Context.TagClassShape<"effect-app/Operations", {
21
- cleanup: Effect.Effect<void, never, never>;
22
+ cleanup: Effect.Effect<void[], never, never>;
22
23
  register: (title: NonEmptyString2k) => Effect.Effect<S.StringId, never, Scope.Scope>;
23
- all: Effect.Effect<Operation[], never, never>;
24
- find: (id: OperationId) => Effect.Effect<Option.Option<Operation>, never, never>;
24
+ all: Effect<Operation[]>;
25
+ find: (id: OperationId) => Effect<Option<Operation>>;
25
26
  update: (id: OperationId, progress: OperationProgress) => Effect.Effect<void, never, never>;
26
27
  }>) & {
27
28
  toLayer: {
28
- (): Layer<Operations, never, never>;
29
+ (): Layer<Operations, never, OperationsRepo>;
29
30
  <E_1, R_1>(eff: Effect<Omit<Operations, keyof Context.TagClassShape<any, any>>, E_1, R_1>): Layer<Operations, E_1, R_1>;
30
31
  };
31
32
  toLayerScoped: {
32
- (): Layer<Operations, never, Exclude<never, import("effect-app").Scope>>;
33
+ (): Layer<Operations, never, Exclude<OperationsRepo, import("effect-app").Scope>>;
33
34
  <E_1, R_2>(eff: Effect<Context.TagClassShape<any, any>, E_1, R_2>): Layer<Operations, E_1, Exclude<R_2, import("effect-app").Scope>>;
34
35
  };
35
36
  of: (service: Context.TagClassShape<any, any>) => Operations;
36
- make: Effect<Operations, never, never>;
37
+ make: Effect<Operations, never, OperationsRepo>;
37
38
  } & Context.Tag<Operations, Operations> & {
38
- cleanup: Effect<void, never, Operations>;
39
+ cleanup: Effect<void[], never, Operations>;
39
40
  register: (title: NonEmptyString2k) => Effect<S.StringId, never, Operations | Scope.Scope>;
40
41
  all: Effect<Operation[], never, Operations>;
41
- find: (id: S.StringId) => Effect<Option.Option<Operation>, never, Operations | never>;
42
+ find: (id: S.StringId) => Effect<Option<Operation>, never, Operations | never>;
42
43
  update: (id: S.StringId, progress: OperationProgress) => Effect<void, never, Operations | never>;
43
44
  } & {
44
45
  use: <X>(body: (_: {
45
- cleanup: Effect.Effect<void, never, never>;
46
+ cleanup: Effect.Effect<void[], never, never>;
46
47
  register: (title: NonEmptyString2k) => Effect.Effect<S.StringId, never, Scope.Scope>;
47
- all: Effect.Effect<Operation[], never, never>;
48
- find: (id: OperationId) => Effect.Effect<Option.Option<Operation>, never, never>;
48
+ all: Effect<Operation[]>;
49
+ find: (id: OperationId) => Effect<Option<Operation>>;
49
50
  update: (id: OperationId, progress: OperationProgress) => Effect.Effect<void, never, never>;
50
51
  }) => X) => X extends Effect<infer A_1, infer E_2, infer R_4> ? Effect<A_1, E_2, R_4 | Operations> : Effect<X, never, Operations>;
51
52
  };
52
53
  export declare class Operations extends Operations_base {
53
54
  private static readonly CleanupLive;
54
- static readonly Live: Layer.Layer<Operations, never, never>;
55
+ static readonly Live: Layer.Layer<Operations, never, OperationsRepo>;
55
56
  }
56
57
  export interface RunningOperation<A, E> {
57
58
  id: OperationId;
@@ -1 +1 @@
1
- {"version":3,"file":"Operations.d.ts","sourceRoot":"","sources":["../../src/services/Operations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAS,OAAO,EAAkB,MAAM,EAAQ,KAAK,EAAE,MAAM,EAAE,CAAC,EAAY,MAAM,YAAY,CAAA;AACrG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAW,SAAS,EAAE,WAAW,EAAW,MAAM,uBAAuB,CAAA;AAEhF,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;;;sBA0Ef,gBAAgB;;eA9ChB,WAAW;iBAmCX,WAAW,YAAY,iBAAiB;;;sBAWxC,gBAAgB;;eA9ChB,WAAW;iBAmCX,WAAW,YAAY,iBAAiB;;;sBAWxC,gBAAgB;;eA9ChB,WAAW;iBAmCX,WAAW,YAAY,iBAAiB;;;;;;;;;;;;;;;;;;;;;0BAWxC,gBAAgB;;mBA9ChB,WAAW;qBAmCX,WAAW,YAAY,iBAAiB;;;AA2B9D,qBAAa,UAAW,SAAQ,eAA8D;IAC5F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAiB2B;IAE9D,MAAM,CAAC,QAAQ,CAAC,IAAI,wCAA4D;CACjF;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,EAAE,CAAC;IACpC,EAAE,EAAE,WAAW,CAAA;IACf,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAChC;AAED,eAAO,MAAM,aAAa,EAAE;IAC1B,CAAC,KAAK,EAAE,gBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACjC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAClB,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAChF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrB,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;CAqB/E,CAAA;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,SAChG,GAAG,iFACjB;AAED,eAAO,MAAM,cAAc,EAAE;IAC3B,CAAC,KAAK,EAAE,gBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACjC,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACzC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAChF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5C,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;CAsB/E,CAAA;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACzD,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1C,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC5C,KAAK,EAAE,gBAAgB,GACtB,MAAM,CACP,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,KAAK,EACL,UAAU,GAAG,eAAe,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAClF,CAwBA"}
1
+ {"version":3,"file":"Operations.d.ts","sourceRoot":"","sources":["../../src/services/Operations.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { annotateLogscoped, flatMap } from "@effect-app/core/Effect";
2
- import { dual } from "@effect-app/core/Function";
2
+ import { dual, pipe } from "@effect-app/core/Function";
3
3
  import { reportError } from "@effect-app/infra/errorReporter";
4
4
  import { NonEmptyString2k } from "@effect-app/schema";
5
5
  import { subHours } from "date-fns";
@@ -8,66 +8,48 @@ import { Failure, Operation, OperationId, Success } from "effect-app/Operations"
8
8
  import { MainFiberSet } from "effect-app/services/MainFiberSet";
9
9
  import * as Scope from "effect/Scope";
10
10
  import { forkDaemonReportRequestUnexpected } from "../api/reportError.js";
11
+ import { batch } from "../rateLimit.js";
12
+ import { OperationsRepo } from "./OperationsRepo.js";
13
+ import { where } from "./query.js";
11
14
  const reportAppError = reportError("Operations.Cleanup");
12
- const make = Effect.sync(() => {
13
- const ops = new Map();
15
+ const make = Effect.gen(function* () {
16
+ const repo = yield* OperationsRepo;
14
17
  const makeOp = Effect.sync(() => OperationId.make());
15
- const cleanup = Effect
16
- .sync(() => {
17
- const before = subHours(new Date(), 1);
18
- [...ops
19
- .entries()]
20
- .forEach(([id, op]) => {
21
- const lastChanged = Option.fromNullable(op.updatedAt).pipe(Option.getOrElse(() => op.createdAt));
22
- if (lastChanged < before) {
23
- ops.delete(id);
24
- }
25
- });
26
- })
27
- .pipe(Effect.withSpan("Operations.cleanup"));
18
+ const cleanup = Effect.sync(() => subHours(new Date(), 1)).pipe(Effect.andThen((before) => repo.query(where("updatedAt", "lt", before.toISOString()))), Effect.andThen((ops) => pipe(ops, batch(100, Effect.succeed, (items) => repo.removeAndPublish(items)))), Effect.withSpan("Operations.cleanup"));
28
19
  function addOp(id, title) {
29
- return Effect.sync(() => {
30
- ops.set(id, new Operation({ id, title }));
31
- });
20
+ return repo.save(new Operation({ id, title })).pipe(Effect.orDie);
32
21
  }
33
22
  function findOp(id) {
34
- return Effect.sync(() => Option.fromNullable(ops.get(id)));
23
+ return repo.find(id);
35
24
  }
36
25
  function finishOp(id, exit) {
37
- return Effect.flatMap(findOp(id), (_) => Effect.sync(() => {
38
- if (Option.isNone(_)) {
39
- throw new Error("Not found");
40
- }
41
- ops.set(id, copy(_.value, {
42
- updatedAt: new Date(),
43
- result: Exit.isSuccess(exit)
44
- ? new Success()
45
- : new Failure({
46
- message: Cause.isInterrupted(exit.cause)
47
- ? NonEmptyString2k("Interrupted")
48
- : Cause.isDie(exit.cause)
49
- ? NonEmptyString2k("Unknown error")
50
- : Cause
51
- .failureOption(exit.cause)
52
- .pipe(Option.flatMap((_) => typeof _ === "object" && _ !== null && "message" in _ && S.is(NonEmptyString2k)(_.message)
53
- ? Option.some(_.message)
54
- : Option.none()), Option.getOrNull)
55
- })
56
- }));
57
- }));
26
+ return Effect
27
+ .flatMap(repo.get(id).pipe(Effect.orDie), (_) => repo
28
+ .save(copy(_, {
29
+ updatedAt: new Date(),
30
+ result: Exit.isSuccess(exit)
31
+ ? new Success()
32
+ : new Failure({
33
+ message: Cause.isInterrupted(exit.cause)
34
+ ? NonEmptyString2k("Interrupted")
35
+ : Cause.isDie(exit.cause)
36
+ ? NonEmptyString2k("Unknown error")
37
+ : Cause
38
+ .failureOption(exit.cause)
39
+ .pipe(Option.flatMap((_) => typeof _ === "object" && _ !== null && "message" in _ && S.is(NonEmptyString2k)(_.message)
40
+ ? Option.some(_.message)
41
+ : Option.none()), Option.getOrNull)
42
+ })
43
+ }))
44
+ .pipe(Effect.orDie));
58
45
  }
59
46
  function update(id, progress) {
60
- return Effect.flatMap(findOp(id), (_) => Effect.sync(() => {
61
- if (Option.isNone(_)) {
62
- throw new Error("Not found");
63
- }
64
- ops.set(id, copy(_.value, { updatedAt: new Date(), progress }));
65
- }));
47
+ return Effect.flatMap(repo.get(id).pipe(Effect.orDie), (_) => repo.save(copy(_, { updatedAt: new Date(), progress })).pipe(Effect.orDie));
66
48
  }
67
49
  return {
68
50
  cleanup,
69
51
  register: (title) => Effect.tap(makeOp, (id) => Effect.andThen(annotateLogscoped("operationId", id), Effect.acquireRelease(addOp(id, title), (_, exit) => finishOp(id, exit)))),
70
- all: Effect.sync(() => [...ops.values()]),
52
+ all: repo.all,
71
53
  find: findOp,
72
54
  update
73
55
  };
@@ -105,4 +87,4 @@ export function forkOperationWithEffect(self, fnc, title) {
105
87
  .pipe(Scope.extend(scope), Effect.flatMap((id) => forkDaemonReportRequestUnexpected(Scope.use(self(id).pipe(Effect.withSpan(title)), scope))
106
88
  .pipe(Effect.map((fiber) => ({ fiber, id })))), Effect.tap(({ id }) => Effect.interruptible(fnc(id)).pipe(Effect.forkScoped, Scope.extend(scope))))));
107
89
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9PcGVyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQy9ELE9BQU8sS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRXpFLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0FBRXhELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFBO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENB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
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9PcGVyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRW5DLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMvRCxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFbEMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUE7QUFFeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDL0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFBO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7SUFFcEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ3RGLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3ZHLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FDdEMsQ0FBQTtJQUVELFNBQVMsS0FBSyxDQUFDLEVBQWUsRUFBRSxLQUF1QjtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUNELFNBQVMsTUFBTSxDQUFDLEVBQWU7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3RCLENBQUM7SUFDRCxTQUFTLFFBQVEsQ0FBQyxFQUFlLEVBQUUsSUFBNEI7UUFDN0QsT0FBTyxNQUFNO2FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzlDLElBQUk7YUFDRCxJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNOLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRTtnQkFDZixDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7b0JBQ1osT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDdEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQzt3QkFDakMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzs0QkFDekIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQzs0QkFDbkMsQ0FBQyxDQUFDLEtBQUs7aUNBQ0osYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7aUNBQ3pCLElBQUksQ0FDSCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDbkIsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQ0FDeEYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQ0FDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FDbEIsRUFDRCxNQUFNLENBQUMsU0FBUyxDQUNqQjtpQkFDTixDQUFDO1NBQ0wsQ0FBQyxDQUNIO2FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFDRCxTQUFTLE1BQU0sQ0FBQyxFQUFlLEVBQUUsUUFBMkI7UUFDMUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQy9CLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDbEYsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPO1FBQ0wsT0FBTztRQUNQLFFBQVEsRUFBRSxDQUFDLEtBQXVCLEVBQUUsRUFBRSxDQUNwQyxNQUFNLENBQUMsR0FBRyxDQUNSLE1BQU0sRUFDTixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ0wsTUFBTSxDQUFDLE9BQU8sQ0FDWixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQ3BDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDekUsQ0FDSjtRQUVILEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztRQUNiLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTTtLQUNQLENBQUE7QUFDSCxDQUFDLENBQUMsQ0FBQTtBQUVGLE1BQU0sT0FBTyxVQUFXLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsRUFBYztJQUNwRixNQUFNLENBQVUsV0FBVyxHQUFHLElBQUk7U0FDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDVCxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDWixNQUFNLENBQUMsSUFBSSxFQUNYLE1BQU07U0FDSCxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQTtRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLEVBQ0osTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFVLENBQUMsRUFDN0IsWUFBWSxDQUFDLEdBQUcsQ0FDakIsQ0FDRjtTQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFFOUQsTUFBTSxDQUFVLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUE7O0FBUWxGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FRdEIsSUFBSSxDQUNOLENBQUMsRUFDRCxDQUFVLElBQXFCLEVBQUUsS0FBdUIsRUFBRSxFQUFFLENBQzFELE1BQU0sQ0FBQyxPQUFPLENBQ1osS0FBSyxDQUFDLElBQUksRUFBRSxFQUNaLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixVQUFVO0tBQ1AsUUFBUSxDQUFDLEtBQUssQ0FBQztLQUNmLElBQUksQ0FDSCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUNuQixNQUFNO0tBQ0gsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDZCxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDakMsS0FBSyxDQUNOLENBQUM7S0FDQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBMEIsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3hFLENBQ0osQ0FDTixDQUNKLENBQUE7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQWUsR0FBa0MsRUFBRSxLQUF1QjtJQUM3RyxPQUFPLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDcEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FRdkIsSUFBSSxDQUNOLENBQUMsRUFDRCxDQUFVLElBQTRDLEVBQUUsS0FBdUIsRUFBRSxFQUFFLENBQ2pGLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNqQyxNQUFNLENBQUMsT0FBTyxDQUNaLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFDWixDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsVUFBVTtLQUNQLFFBQVEsQ0FBQyxLQUFLLENBQUM7S0FDZixJQUFJLENBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDbkIsTUFBTTtLQUNILE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ2QsaUNBQWlDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDekMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3JDLEtBQUssQ0FDTixDQUFDO0tBQ0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQTBCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN4RSxDQUNKLENBQ04sQ0FBQyxDQUNQLENBQUE7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQTBDLEVBQzFDLEdBQTRDLEVBQzVDLEtBQXVCO0lBTXZCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUMvQyxNQUFNLENBQUMsT0FBTyxDQUNaLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFDWixDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsVUFBVTtTQUNQLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDZixJQUFJLENBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ3BCLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ3pDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNyQyxLQUFLLENBQ04sQ0FBQztTQUNDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUEwQixFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDeEUsRUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQ3BCLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoQyxNQUFNLENBQUMsVUFBVSxFQUNqQixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUNwQixDQUNGLENBQ0YsQ0FDTixDQUFDLENBQUE7QUFDTixDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ import { Operation } from "effect-app/Operations";
2
+ declare const OperationsRepo_base: (abstract new (impl: import("./Repository.js").Repository<Operation, Operation.From, never, "Operation">) => import("./RepositoryBase.js").RepositoryBaseC3<Operation, Operation.From, never, "Operation">) & import("effect/Context").Tag<OperationsRepo, OperationsRepo> & import("./RepositoryBase.js").Repos<Operation, Operation.From, never, never, "Operation"> & import("./RepositoryBase.js").RepoFunctions<Operation, Operation.From, never, "Operation", OperationsRepo>;
3
+ export declare class OperationsRepo extends OperationsRepo_base {
4
+ }
5
+ export {};
6
+ //# sourceMappingURL=OperationsRepo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationsRepo.d.ts","sourceRoot":"","sources":["../../src/services/OperationsRepo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;;AAGjD,qBAAa,cAAe,SAAQ,mBAGnC;CAAG"}
@@ -0,0 +1,5 @@
1
+ import { Operation } from "effect-app/Operations";
2
+ import { RepositoryDefaultImpl } from "./RepositoryBase.js";
3
+ export class OperationsRepo extends RepositoryDefaultImpl()("Operation", Operation) {
4
+ }
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uc1JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvT3BlcmF0aW9uc1JlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTNELE1BQU0sT0FBTyxjQUFlLFNBQVEscUJBQXFCLEVBQWtCLENBQ3pFLFdBQVcsRUFDWCxTQUFTLENBQ1Y7Q0FBRyJ9
@@ -26,7 +26,7 @@ export declare function byIdAndSaveWithPure<T extends {
26
26
  id: unknown;
27
27
  }, Encoded extends {
28
28
  id: string;
29
- }, Evt, ItemType extends string>(self: RepositoryBaseC<T, Encoded, Evt, ItemType>, id: T["id"]): <R, A, E, S2 extends T>(pure: Effect<A, E, FixEnv<R, Evt, T, S2>>) => Effect.Effect<A, import("effect-app/client/errors").OptimisticConcurrencyException | import("effect-app/client/errors").InvalidStateError | NotFoundError<ItemType> | E, Exclude<R, {
29
+ }, Evt, ItemType extends string>(self: RepositoryBaseC<T, Encoded, Evt, ItemType>, id: T["id"]): <R, A, E, S2 extends T>(pure: Effect<A, E, FixEnv<R, Evt, T, S2>>) => Effect.Effect<A, import("effect-app/client/errors").OptimisticConcurrencyException | import("effect-app/client/errors").InvalidStateError | E | NotFoundError<ItemType>, Exclude<R, {
30
30
  env: import("effect-app/Pure").PureEnv<Evt, T, S2>;
31
31
  }>>;
32
32
  /**
@@ -14,7 +14,7 @@ export declare const toFilter: <TFieldValues extends FieldValues, A, R>(q: QAll<
14
14
  key: import("../../filter/types/path/eager.js").Path<TFieldValues>;
15
15
  direction: "ASC" | "DESC";
16
16
  }[]];
17
- ttype: "one" | "many" | "count";
17
+ ttype: "many" | "count" | "one";
18
18
  mode: "project" | "collect" | "transform";
19
19
  filter: FilterResult[];
20
20
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "1.8.0",
3
+ "version": "1.9.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -18,9 +18,9 @@
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.4.0",
22
- "effect-app": "1.6.0",
23
21
  "@effect-app/core": "1.4.0",
22
+ "effect-app": "1.6.0",
23
+ "@effect-app/infra-adapters": "1.4.0",
24
24
  "@effect-app/schema": "1.4.0"
25
25
  },
26
26
  "devDependencies": {
@@ -384,6 +384,16 @@
384
384
  "default": "./_cjs/services/Operations.cjs"
385
385
  }
386
386
  },
387
+ "./services/OperationsRepo": {
388
+ "import": {
389
+ "types": "./dist/services/OperationsRepo.d.ts",
390
+ "default": "./dist/services/OperationsRepo.js"
391
+ },
392
+ "require": {
393
+ "types": "./dist/services/OperationsRepo.d.ts",
394
+ "default": "./_cjs/services/OperationsRepo.cjs"
395
+ }
396
+ },
387
397
  "./services/QueueMaker/errors": {
388
398
  "import": {
389
399
  "types": "./dist/services/QueueMaker/errors.d.ts",
@@ -1,5 +1,5 @@
1
1
  import { annotateLogscoped, flatMap } from "@effect-app/core/Effect"
2
- import { dual } from "@effect-app/core/Function"
2
+ import { dual, pipe } from "@effect-app/core/Function"
3
3
  import type { RequestFiberSet } from "@effect-app/infra-adapters/RequestFiberSet"
4
4
  import { reportError } from "@effect-app/infra/errorReporter"
5
5
  import { NonEmptyString2k } from "@effect-app/schema"
@@ -11,75 +11,62 @@ import { Failure, Operation, OperationId, Success } from "effect-app/Operations"
11
11
  import { MainFiberSet } from "effect-app/services/MainFiberSet"
12
12
  import * as Scope from "effect/Scope"
13
13
  import { forkDaemonReportRequestUnexpected } from "../api/reportError.js"
14
+ import { batch } from "../rateLimit.js"
15
+ import { OperationsRepo } from "./OperationsRepo.js"
16
+ import { where } from "./query.js"
14
17
 
15
18
  const reportAppError = reportError("Operations.Cleanup")
16
19
 
17
- const make = Effect.sync(() => {
18
- const ops = new Map<OperationId, Operation>()
20
+ const make = Effect.gen(function*() {
21
+ const repo = yield* OperationsRepo
19
22
  const makeOp = Effect.sync(() => OperationId.make())
20
23
 
21
- const cleanup = Effect
22
- .sync(() => {
23
- const before = subHours(new Date(), 1)
24
- ;[...ops
25
- .entries()]
26
- .forEach(([id, op]) => {
27
- const lastChanged = Option.fromNullable(op.updatedAt).pipe(Option.getOrElse(() => op.createdAt))
28
- if (lastChanged < before) {
29
- ops.delete(id)
30
- }
31
- })
32
- })
33
- .pipe(Effect.withSpan("Operations.cleanup"))
24
+ const cleanup = Effect.sync(() => subHours(new Date(), 1)).pipe(
25
+ Effect.andThen((before) => repo.query(where("updatedAt", "lt", before.toISOString()))),
26
+ Effect.andThen((ops) => pipe(ops, batch(100, Effect.succeed, (items) => repo.removeAndPublish(items)))),
27
+ Effect.withSpan("Operations.cleanup")
28
+ )
34
29
 
35
30
  function addOp(id: OperationId, title: NonEmptyString2k) {
36
- return Effect.sync(() => {
37
- ops.set(id, new Operation({ id, title }))
38
- })
31
+ return repo.save(new Operation({ id, title })).pipe(Effect.orDie)
39
32
  }
40
33
  function findOp(id: OperationId) {
41
- return Effect.sync(() => Option.fromNullable(ops.get(id)))
34
+ return repo.find(id)
42
35
  }
43
36
  function finishOp(id: OperationId, exit: Exit<unknown, unknown>) {
44
- return Effect.flatMap(findOp(id), (_) =>
45
- Effect.sync(() => {
46
- if (Option.isNone(_)) {
47
- throw new Error("Not found")
48
- }
49
- ops.set(
50
- id,
51
- copy(_.value, {
52
- updatedAt: new Date(),
53
- result: Exit.isSuccess(exit)
54
- ? new Success()
55
- : new Failure({
56
- message: Cause.isInterrupted(exit.cause)
57
- ? NonEmptyString2k("Interrupted")
58
- : Cause.isDie(exit.cause)
59
- ? NonEmptyString2k("Unknown error")
60
- : Cause
61
- .failureOption(exit.cause)
62
- .pipe(
63
- Option.flatMap((_) =>
64
- typeof _ === "object" && _ !== null && "message" in _ && S.is(NonEmptyString2k)(_.message)
65
- ? Option.some(_.message)
66
- : Option.none()
67
- ),
68
- Option.getOrNull
69
- )
70
- })
71
- })
72
- )
73
- }))
37
+ return Effect
38
+ .flatMap(repo.get(id).pipe(Effect.orDie), (_) =>
39
+ repo
40
+ .save(
41
+ copy(_, {
42
+ updatedAt: new Date(),
43
+ result: Exit.isSuccess(exit)
44
+ ? new Success()
45
+ : new Failure({
46
+ message: Cause.isInterrupted(exit.cause)
47
+ ? NonEmptyString2k("Interrupted")
48
+ : Cause.isDie(exit.cause)
49
+ ? NonEmptyString2k("Unknown error")
50
+ : Cause
51
+ .failureOption(exit.cause)
52
+ .pipe(
53
+ Option.flatMap((_) =>
54
+ typeof _ === "object" && _ !== null && "message" in _ && S.is(NonEmptyString2k)(_.message)
55
+ ? Option.some(_.message)
56
+ : Option.none()
57
+ ),
58
+ Option.getOrNull
59
+ )
60
+ })
61
+ })
62
+ )
63
+ .pipe(Effect.orDie))
74
64
  }
75
65
  function update(id: OperationId, progress: OperationProgress) {
76
- return Effect.flatMap(findOp(id), (_) =>
77
- Effect.sync(() => {
78
- if (Option.isNone(_)) {
79
- throw new Error("Not found")
80
- }
81
- ops.set(id, copy(_.value, { updatedAt: new Date(), progress }))
82
- }))
66
+ return Effect.flatMap(
67
+ repo.get(id).pipe(Effect.orDie),
68
+ (_) => repo.save(copy(_, { updatedAt: new Date(), progress })).pipe(Effect.orDie)
69
+ )
83
70
  }
84
71
  return {
85
72
  cleanup,
@@ -93,7 +80,7 @@ const make = Effect.sync(() => {
93
80
  )
94
81
  ),
95
82
 
96
- all: Effect.sync(() => [...ops.values()]),
83
+ all: repo.all,
97
84
  find: findOp,
98
85
  update
99
86
  }
@@ -0,0 +1,7 @@
1
+ import { Operation } from "effect-app/Operations"
2
+ import { RepositoryDefaultImpl } from "./RepositoryBase.js"
3
+
4
+ export class OperationsRepo extends RepositoryDefaultImpl<OperationsRepo>()(
5
+ "Operation",
6
+ Operation
7
+ ) {}