@effect/cluster 0.53.2 → 0.53.3

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.
@@ -3,7 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.make = exports.TypeId = void 0;
6
+ exports.make = exports.TypeId = exports.CloseScope = void 0;
7
+ var Context = _interopRequireWildcard(require("effect/Context"));
7
8
  var Duration = _interopRequireWildcard(require("effect/Duration"));
8
9
  var Effect = _interopRequireWildcard(require("effect/Effect"));
9
10
  var _Function = require("effect/Function");
@@ -20,6 +21,15 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
20
21
  * @category Type ids
21
22
  */
22
23
  const TypeId = exports.TypeId = "~@effect/cluster/EntityResource";
24
+ /**
25
+ * A `Scope` that is only closed when the resource is explicitly closed.
26
+ *
27
+ * It is not closed during restarts, due to shard movement or node shutdowns.
28
+ *
29
+ * @since 1.0.0
30
+ * @category Scope
31
+ */
32
+ class CloseScope extends /*#__PURE__*/Context.Tag("@effect/cluster/EntityResource/CloseScope")() {}
23
33
  /**
24
34
  * A `EntityResource` is a resource that can be acquired inside a cluster
25
35
  * entity, which will keep the entity alive even across restarts.
@@ -33,29 +43,19 @@ const TypeId = exports.TypeId = "~@effect/cluster/EntityResource";
33
43
  * @since 1.0.0
34
44
  * @category Constructors
35
45
  */
46
+ exports.CloseScope = CloseScope;
36
47
  const make = exports.make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
37
- const shutdownMode = options.shutdownMode ?? "always";
38
48
  let shuttingDown = false;
39
49
  const ref = yield* RcRef.make({
40
50
  acquire: Effect.gen(function* () {
41
- let scope = yield* Effect.scope;
42
- if (shutdownMode === "explicit") {
43
- const closeable = yield* Scope.make();
44
- const context = yield* Effect.context();
45
- yield* Scope.addFinalizerExit(scope, Effect.fnUntraced(function* (exit) {
46
- if (shuttingDown) return;
47
- yield* Scope.close(closeable, exit);
48
- yield* Entity.keepAlive(false);
49
- }, Effect.provide(context)));
50
- scope = closeable;
51
- } else {
52
- yield* Effect.addFinalizer(() => {
53
- if (shuttingDown) return Effect.void;
54
- return Entity.keepAlive(false);
55
- });
56
- }
51
+ const closeable = yield* Scope.make();
52
+ yield* Effect.addFinalizer(Effect.fnUntraced(function* (exit) {
53
+ if (shuttingDown) return;
54
+ yield* Scope.close(closeable, exit);
55
+ yield* Entity.keepAlive(false);
56
+ }));
57
57
  yield* Entity.keepAlive(true);
58
- return yield* options.acquire.pipe(Scope.extend(scope));
58
+ return yield* options.acquire.pipe(Effect.provideService(CloseScope, closeable));
59
59
  }),
60
60
  idleTimeToLive: options.idleTimeToLive ?? Duration.infinity
61
61
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EntityResource.js","names":["Duration","_interopRequireWildcard","require","Effect","_Function","RcRef","Scope","Entity","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypeId","exports","make","fnUntraced","options","shutdownMode","shuttingDown","ref","acquire","gen","scope","closeable","context","addFinalizerExit","exit","close","keepAlive","provide","addFinalizer","void","pipe","extend","idleTimeToLive","infinity","scoped","identity","invalidate"],"sources":["../../src/EntityResource.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"EntityResource.js","names":["Context","_interopRequireWildcard","require","Duration","Effect","_Function","RcRef","Scope","Entity","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypeId","exports","CloseScope","Tag","make","fnUntraced","options","shuttingDown","ref","acquire","gen","closeable","addFinalizer","exit","close","keepAlive","pipe","provideService","idleTimeToLive","infinity","void","scoped","identity","invalidate"],"sources":["../../src/EntityResource.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import * as Context from "effect/Context";
4
5
  import * as Duration from "effect/Duration";
5
6
  import * as Effect from "effect/Effect";
6
7
  import * as Scope from "effect/Scope";
@@ -25,6 +26,17 @@ export interface EntityResource<out A, out E = never> {
25
26
  readonly get: Effect.Effect<A, E, Scope.Scope>;
26
27
  readonly close: Effect.Effect<void>;
27
28
  }
29
+ declare const CloseScope_base: Context.TagClass<CloseScope, "@effect/cluster/EntityResource/CloseScope", Scope.Scope>;
30
+ /**
31
+ * A `Scope` that is only closed when the resource is explicitly closed.
32
+ *
33
+ * It is not closed during restarts, due to shard movement or node shutdowns.
34
+ *
35
+ * @since 1.0.0
36
+ * @category Scope
37
+ */
38
+ export declare class CloseScope extends CloseScope_base {
39
+ }
28
40
  /**
29
41
  * A `EntityResource` is a resource that can be acquired inside a cluster
30
42
  * entity, which will keep the entity alive even across restarts.
@@ -41,15 +53,6 @@ export interface EntityResource<out A, out E = never> {
41
53
  export declare const make: <A, E, R>(options: {
42
54
  readonly acquire: Effect.Effect<A, E, R>;
43
55
  readonly idleTimeToLive?: Duration.DurationInput | undefined;
44
- /**
45
- * When to close the resource Scope.
46
- *
47
- * If set to "explicit", the resource will only be cleaned up when either the
48
- * `idleTimeToLive` is reached, or the .close effect is called.
49
- *
50
- * Defaults to "always", which means the resource will be cleaned up when the
51
- * the parent Scope is closed.
52
- */
53
- readonly shutdownMode?: "explicit" | "always" | undefined;
54
- }) => Effect.Effect<EntityResource<A, E>, E, Scope.Scope | R | Sharding | Entity.CurrentAddress>;
56
+ }) => Effect.Effect<EntityResource<A, E>, E, Scope.Scope | Exclude<R, CloseScope> | Sharding | Entity.CurrentAddress>;
57
+ export {};
55
58
  //# sourceMappingURL=EntityResource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityResource.d.ts","sourceRoot":"","sources":["../../src/EntityResource.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAA0C,CAAA;AAE/D;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,iCAAiC,CAAA;AAEtD;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK;IAClD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACpC;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAA;IAC5D;;;;;;;;OAQG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAA;CAC1D,KAAK,MAAM,CAAC,MAAM,CACjB,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,CAAC,EACD,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,cAAc,CAsDlD,CAAA"}
1
+ {"version":3,"file":"EntityResource.d.ts","sourceRoot":"","sources":["../../src/EntityResource.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAA0C,CAAA;AAE/D;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,iCAAiC,CAAA;AAEtD;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK;IAClD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACpC;;AAED;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,eAG7B;CAAG;AAEN;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAA;CAC7D,KAAK,MAAM,CAAC,MAAM,CACjB,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,CAAC,EACD,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,cAAc,CAyCvE,CAAA"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import * as Context from "effect/Context";
4
5
  import * as Duration from "effect/Duration";
5
6
  import * as Effect from "effect/Effect";
6
7
  import { identity } from "effect/Function";
@@ -12,6 +13,15 @@ import * as Entity from "./Entity.js";
12
13
  * @category Type ids
13
14
  */
14
15
  export const TypeId = "~@effect/cluster/EntityResource";
16
+ /**
17
+ * A `Scope` that is only closed when the resource is explicitly closed.
18
+ *
19
+ * It is not closed during restarts, due to shard movement or node shutdowns.
20
+ *
21
+ * @since 1.0.0
22
+ * @category Scope
23
+ */
24
+ export class CloseScope extends /*#__PURE__*/Context.Tag("@effect/cluster/EntityResource/CloseScope")() {}
15
25
  /**
16
26
  * A `EntityResource` is a resource that can be acquired inside a cluster
17
27
  * entity, which will keep the entity alive even across restarts.
@@ -26,28 +36,17 @@ export const TypeId = "~@effect/cluster/EntityResource";
26
36
  * @category Constructors
27
37
  */
28
38
  export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
29
- const shutdownMode = options.shutdownMode ?? "always";
30
39
  let shuttingDown = false;
31
40
  const ref = yield* RcRef.make({
32
41
  acquire: Effect.gen(function* () {
33
- let scope = yield* Effect.scope;
34
- if (shutdownMode === "explicit") {
35
- const closeable = yield* Scope.make();
36
- const context = yield* Effect.context();
37
- yield* Scope.addFinalizerExit(scope, Effect.fnUntraced(function* (exit) {
38
- if (shuttingDown) return;
39
- yield* Scope.close(closeable, exit);
40
- yield* Entity.keepAlive(false);
41
- }, Effect.provide(context)));
42
- scope = closeable;
43
- } else {
44
- yield* Effect.addFinalizer(() => {
45
- if (shuttingDown) return Effect.void;
46
- return Entity.keepAlive(false);
47
- });
48
- }
42
+ const closeable = yield* Scope.make();
43
+ yield* Effect.addFinalizer(Effect.fnUntraced(function* (exit) {
44
+ if (shuttingDown) return;
45
+ yield* Scope.close(closeable, exit);
46
+ yield* Entity.keepAlive(false);
47
+ }));
49
48
  yield* Entity.keepAlive(true);
50
- return yield* options.acquire.pipe(Scope.extend(scope));
49
+ return yield* options.acquire.pipe(Effect.provideService(CloseScope, closeable));
51
50
  }),
52
51
  idleTimeToLive: options.idleTimeToLive ?? Duration.infinity
53
52
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EntityResource.js","names":["Duration","Effect","identity","RcRef","Scope","Entity","TypeId","make","fnUntraced","options","shutdownMode","shuttingDown","ref","acquire","gen","scope","closeable","context","addFinalizerExit","exit","close","keepAlive","provide","addFinalizer","void","pipe","extend","idleTimeToLive","infinity","scoped","get","invalidate"],"sources":["../../src/EntityResource.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,aAAa;AAGrC;;;;AAIA,OAAO,MAAMC,MAAM,GAAW,iCAAiC;AAkB/D;;;;;;;;;;;;;AAaA,OAAO,MAAMC,IAAI,gBAiBbN,MAAM,CAACO,UAAU,CAAC,WAAmBC,OAIxC;EACC,MAAMC,YAAY,GAAGD,OAAO,CAACC,YAAY,IAAI,QAAQ;EACrD,IAAIC,YAAY,GAAG,KAAK;EAExB,MAAMC,GAAG,GAAG,OAAOT,KAAK,CAACI,IAAI,CAAC;IAC5BM,OAAO,EAAEZ,MAAM,CAACa,GAAG,CAAC,aAAS;MAC3B,IAAIC,KAAK,GAAG,OAAOd,MAAM,CAACc,KAAK;MAE/B,IAAIL,YAAY,KAAK,UAAU,EAAE;QAC/B,MAAMM,SAAS,GAAG,OAAOZ,KAAK,CAACG,IAAI,EAAE;QACrC,MAAMU,OAAO,GAAG,OAAOhB,MAAM,CAACgB,OAAO,EAAoC;QACzE,OAAOb,KAAK,CAACc,gBAAgB,CAC3BH,KAAK,EACLd,MAAM,CAACO,UAAU,CAAC,WAAUW,IAAI;UAC9B,IAAIR,YAAY,EAAE;UAClB,OAAOP,KAAK,CAACgB,KAAK,CAACJ,SAAS,EAAEG,IAAI,CAAC;UACnC,OAAOd,MAAM,CAACgB,SAAS,CAAC,KAAK,CAAC;QAChC,CAAC,EAAEpB,MAAM,CAACqB,OAAO,CAACL,OAAO,CAAC,CAAC,CAC5B;QACDF,KAAK,GAAGC,SAAS;MACnB,CAAC,MAAM;QACL,OAAOf,MAAM,CAACsB,YAAY,CAAC,MAAK;UAC9B,IAAIZ,YAAY,EAAE,OAAOV,MAAM,CAACuB,IAAI;UACpC,OAAOnB,MAAM,CAACgB,SAAS,CAAC,KAAK,CAAC;QAChC,CAAC,CAAC;MACJ;MAEA,OAAOhB,MAAM,CAACgB,SAAS,CAAC,IAAI,CAAC;MAE7B,OAAO,OAAOZ,OAAO,CAACI,OAAO,CAACY,IAAI,CAChCrB,KAAK,CAACsB,MAAM,CAACX,KAAK,CAAC,CACpB;IACH,CAAC,CAAC;IACFY,cAAc,EAAElB,OAAO,CAACkB,cAAc,IAAI3B,QAAQ,CAAC4B;GACpD,CAAC;EAEF,OAAO3B,MAAM,CAACsB,YAAY,CAAC,MAAK;IAC9BZ,YAAY,GAAG,IAAI;IACnB,OAAOV,MAAM,CAACuB,IAAI;EACpB,CAAC,CAAC;EAEF;EACA,OAAOvB,MAAM,CAAC4B,MAAM,CAAC1B,KAAK,CAAC2B,GAAG,CAAClB,GAAG,CAAC,CAAC;EAEpC,OAAOV,QAAQ,CAAuB;IACpC,CAACI,MAAM,GAAGA,MAAM;IAChBwB,GAAG,EAAE3B,KAAK,CAAC2B,GAAG,CAAClB,GAAG,CAAC;IACnBQ,KAAK,EAAEjB,KAAK,CAAC4B,UAAU,CAACnB,GAAG;GAC5B,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"EntityResource.js","names":["Context","Duration","Effect","identity","RcRef","Scope","Entity","TypeId","CloseScope","Tag","make","fnUntraced","options","shuttingDown","ref","acquire","gen","closeable","addFinalizer","exit","close","keepAlive","pipe","provideService","idleTimeToLive","infinity","void","scoped","get","invalidate"],"sources":["../../src/EntityResource.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,aAAa;AAGrC;;;;AAIA,OAAO,MAAMC,MAAM,GAAW,iCAAiC;AAkB/D;;;;;;;;AAQA,OAAM,MAAOC,UAAW,sBAAQR,OAAO,CAACS,GAAG,CAAC,2CAA2C,CAAC,EAGrF;AAEH;;;;;;;;;;;;;AAaA,OAAO,MAAMC,IAAI,gBAObR,MAAM,CAACS,UAAU,CAAC,WAAmBC,OAGxC;EACC,IAAIC,YAAY,GAAG,KAAK;EAExB,MAAMC,GAAG,GAAG,OAAOV,KAAK,CAACM,IAAI,CAAC;IAC5BK,OAAO,EAAEb,MAAM,CAACc,GAAG,CAAC,aAAS;MAC3B,MAAMC,SAAS,GAAG,OAAOZ,KAAK,CAACK,IAAI,EAAE;MAErC,OAAOR,MAAM,CAACgB,YAAY,CACxBhB,MAAM,CAACS,UAAU,CAAC,WAAUQ,IAAI;QAC9B,IAAIN,YAAY,EAAE;QAClB,OAAOR,KAAK,CAACe,KAAK,CAACH,SAAS,EAAEE,IAAI,CAAC;QACnC,OAAOb,MAAM,CAACe,SAAS,CAAC,KAAK,CAAC;MAChC,CAAC,CAAC,CACH;MAED,OAAOf,MAAM,CAACe,SAAS,CAAC,IAAI,CAAC;MAE7B,OAAO,OAAOT,OAAO,CAACG,OAAO,CAACO,IAAI,CAChCpB,MAAM,CAACqB,cAAc,CAACf,UAAU,EAAES,SAAS,CAAC,CAC7C;IACH,CAAC,CAAC;IACFO,cAAc,EAAEZ,OAAO,CAACY,cAAc,IAAIvB,QAAQ,CAACwB;GACpD,CAAC;EAEF,OAAOvB,MAAM,CAACgB,YAAY,CAAC,MAAK;IAC9BL,YAAY,GAAG,IAAI;IACnB,OAAOX,MAAM,CAACwB,IAAI;EACpB,CAAC,CAAC;EAEF;EACA,OAAOxB,MAAM,CAACyB,MAAM,CAACvB,KAAK,CAACwB,GAAG,CAACd,GAAG,CAAC,CAAC;EAEpC,OAAOX,QAAQ,CAAuB;IACpC,CAACI,MAAM,GAAGA,MAAM;IAChBqB,GAAG,EAAExB,KAAK,CAACwB,GAAG,CAACd,GAAG,CAAC;IACnBM,KAAK,EAAEhB,KAAK,CAACyB,UAAU,CAACf,GAAG;GAC5B,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/cluster",
3
- "version": "0.53.2",
3
+ "version": "0.53.3",
4
4
  "description": "Unified interfaces for common cluster-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -13,9 +13,9 @@
13
13
  "peerDependencies": {
14
14
  "@effect/platform": "^0.93.3",
15
15
  "@effect/sql": "^0.48.0",
16
+ "@effect/rpc": "^0.72.2",
16
17
  "@effect/workflow": "^0.13.0",
17
- "effect": "^3.19.6",
18
- "@effect/rpc": "^0.72.2"
18
+ "effect": "^3.19.6"
19
19
  },
20
20
  "publishConfig": {
21
21
  "provenance": true
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import * as Context from "effect/Context"
4
5
  import * as Duration from "effect/Duration"
5
6
  import * as Effect from "effect/Effect"
6
7
  import { identity } from "effect/Function"
@@ -31,6 +32,19 @@ export interface EntityResource<out A, out E = never> {
31
32
  readonly close: Effect.Effect<void>
32
33
  }
33
34
 
35
+ /**
36
+ * A `Scope` that is only closed when the resource is explicitly closed.
37
+ *
38
+ * It is not closed during restarts, due to shard movement or node shutdowns.
39
+ *
40
+ * @since 1.0.0
41
+ * @category Scope
42
+ */
43
+ export class CloseScope extends Context.Tag("@effect/cluster/EntityResource/CloseScope")<
44
+ CloseScope,
45
+ Scope.Scope
46
+ >() {}
47
+
34
48
  /**
35
49
  * A `EntityResource` is a resource that can be acquired inside a cluster
36
50
  * entity, which will keep the entity alive even across restarts.
@@ -47,55 +61,32 @@ export interface EntityResource<out A, out E = never> {
47
61
  export const make: <A, E, R>(options: {
48
62
  readonly acquire: Effect.Effect<A, E, R>
49
63
  readonly idleTimeToLive?: Duration.DurationInput | undefined
50
- /**
51
- * When to close the resource Scope.
52
- *
53
- * If set to "explicit", the resource will only be cleaned up when either the
54
- * `idleTimeToLive` is reached, or the .close effect is called.
55
- *
56
- * Defaults to "always", which means the resource will be cleaned up when the
57
- * the parent Scope is closed.
58
- */
59
- readonly shutdownMode?: "explicit" | "always" | undefined
60
64
  }) => Effect.Effect<
61
65
  EntityResource<A, E>,
62
66
  E,
63
- Scope.Scope | R | Sharding | Entity.CurrentAddress
67
+ Scope.Scope | Exclude<R, CloseScope> | Sharding | Entity.CurrentAddress
64
68
  > = Effect.fnUntraced(function*<A, E, R>(options: {
65
69
  readonly acquire: Effect.Effect<A, E, R>
66
70
  readonly idleTimeToLive?: Duration.DurationInput | undefined
67
- readonly shutdownMode?: "explicit" | "always" | undefined
68
71
  }) {
69
- const shutdownMode = options.shutdownMode ?? "always"
70
72
  let shuttingDown = false
71
73
 
72
74
  const ref = yield* RcRef.make({
73
75
  acquire: Effect.gen(function*() {
74
- let scope = yield* Effect.scope
76
+ const closeable = yield* Scope.make()
75
77
 
76
- if (shutdownMode === "explicit") {
77
- const closeable = yield* Scope.make()
78
- const context = yield* Effect.context<Sharding | Entity.CurrentAddress>()
79
- yield* Scope.addFinalizerExit(
80
- scope,
81
- Effect.fnUntraced(function*(exit) {
82
- if (shuttingDown) return
83
- yield* Scope.close(closeable, exit)
84
- yield* Entity.keepAlive(false)
85
- }, Effect.provide(context))
86
- )
87
- scope = closeable
88
- } else {
89
- yield* Effect.addFinalizer(() => {
90
- if (shuttingDown) return Effect.void
91
- return Entity.keepAlive(false)
78
+ yield* Effect.addFinalizer(
79
+ Effect.fnUntraced(function*(exit) {
80
+ if (shuttingDown) return
81
+ yield* Scope.close(closeable, exit)
82
+ yield* Entity.keepAlive(false)
92
83
  })
93
- }
84
+ )
94
85
 
95
86
  yield* Entity.keepAlive(true)
96
87
 
97
88
  return yield* options.acquire.pipe(
98
- Scope.extend(scope)
89
+ Effect.provideService(CloseScope, closeable)
99
90
  )
100
91
  }),
101
92
  idleTimeToLive: options.idleTimeToLive ?? Duration.infinity