effect 2.4.12 → 2.4.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cjs/BigInt.js +75 -3
  2. package/dist/cjs/BigInt.js.map +1 -1
  3. package/dist/cjs/Duration.js +31 -19
  4. package/dist/cjs/Duration.js.map +1 -1
  5. package/dist/cjs/Number.js +1 -1
  6. package/dist/cjs/Request.js.map +1 -1
  7. package/dist/cjs/internal/fiberRuntime.js +17 -3
  8. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  9. package/dist/cjs/internal/query.js +14 -14
  10. package/dist/cjs/internal/query.js.map +1 -1
  11. package/dist/cjs/internal/request.js +1 -0
  12. package/dist/cjs/internal/request.js.map +1 -1
  13. package/dist/cjs/internal/version.js +1 -1
  14. package/dist/dts/BigInt.d.ts +57 -2
  15. package/dist/dts/BigInt.d.ts.map +1 -1
  16. package/dist/dts/Duration.d.ts +8 -0
  17. package/dist/dts/Duration.d.ts.map +1 -1
  18. package/dist/dts/Number.d.ts +1 -1
  19. package/dist/dts/Request.d.ts +1 -0
  20. package/dist/dts/Request.d.ts.map +1 -1
  21. package/dist/esm/BigInt.js +72 -2
  22. package/dist/esm/BigInt.js.map +1 -1
  23. package/dist/esm/Duration.js +30 -18
  24. package/dist/esm/Duration.js.map +1 -1
  25. package/dist/esm/Number.js +1 -1
  26. package/dist/esm/Request.js.map +1 -1
  27. package/dist/esm/internal/fiberRuntime.js +17 -3
  28. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  29. package/dist/esm/internal/query.js +14 -14
  30. package/dist/esm/internal/query.js.map +1 -1
  31. package/dist/esm/internal/request.js +1 -0
  32. package/dist/esm/internal/request.js.map +1 -1
  33. package/dist/esm/internal/version.js +1 -1
  34. package/package.json +1 -1
  35. package/src/BigInt.ts +77 -2
  36. package/src/Duration.ts +38 -18
  37. package/src/Number.ts +1 -1
  38. package/src/Request.ts +2 -1
  39. package/src/internal/fiberRuntime.ts +24 -4
  40. package/src/internal/query.ts +53 -50
  41. package/src/internal/request.ts +1 -0
  42. package/src/internal/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","names":["seconds","dual","globalValue","BlockedRequests","unsafeMakeWith","isInterruptedOnly","core","ensuring","Listeners","currentCache","Symbol","for","fiberRefUnsafeMake","map","deferredMake","handle","listeners","currentCacheEnabled","fromRequest","request","dataSource","flatMap","isEffect","succeed","ds","fiberIdWith","id","proxy","Proxy","fiberRefGetWith","cacheEnabled","cache","getEither","orNew","_tag","left","increment","blocked","empty","exit","deferredAwait","cause","decrement","invalidateWhen","entry","sync","right","single","makeEntry","result","ownerId","state","completed","uninterruptibleMask","restore","ref","cacheRequest","unit","deferredComplete","withRequestCaching","self","strategy","fiberRefLocally","withRequestCache"],"sources":["../../../src/internal/query.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"query.js","names":["seconds","dual","globalValue","BlockedRequests","unsafeMakeWith","core","ensuring","Listeners","currentCache","Symbol","for","fiberRefUnsafeMake","map","deferredMake","handle","listeners","currentCacheEnabled","fromRequest","request","dataSource","flatMap","isEffect","succeed","ds","fiberIdWith","id","proxy","Proxy","fiberRefGetWith","cacheEnabled","cached","cache","getEither","orNew","_tag","left","interrupted","invalidateWhen","entry","increment","uninterruptibleMask","restore","exit","blocked","empty","deferredAwait","decrement","right","single","makeEntry","result","ownerId","state","completed","ref","sync","cacheRequest","unit","deferredComplete","withRequestCaching","self","strategy","fiberRefLocally","withRequestCache"],"sources":["../../../src/internal/query.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -68,6 +68,7 @@ export const succeed = /*#__PURE__*/dual(2, (self, value) => complete(self, core
68
68
  export class Listeners {
69
69
  count = 0;
70
70
  observers = new Set();
71
+ interrupted = false;
71
72
  addObserver(f) {
72
73
  this.observers.add(f);
73
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","names":["dual","hasProperty","completedRequestMap","core","StructuralPrototype","RequestSymbolKey","RequestTypeId","Symbol","for","requestVariance","_E","_","_A","RequestPrototype","isRequest","u","of","args","Object","assign","create","tagged","tag","request","_tag","Class","prototype","TaggedClass","complete","self","result","fiberRefGetWith","currentRequestMap","map","sync","has","entry","get","state","completed","deferredUnsafeDone","completeEffect","effect","matchEffect","onFailure","error","exitFail","onSuccess","value","exitSucceed","fail","failCause","cause","exitFailCause","succeed","Listeners","count","observers","Set","addObserver","f","add","removeObserver","delete","increment","forEach","decrement","filterOutCompleted","requests","filter"],"sources":["../../../src/internal/request.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"request.js","names":["dual","hasProperty","completedRequestMap","core","StructuralPrototype","RequestSymbolKey","RequestTypeId","Symbol","for","requestVariance","_E","_","_A","RequestPrototype","isRequest","u","of","args","Object","assign","create","tagged","tag","request","_tag","Class","prototype","TaggedClass","complete","self","result","fiberRefGetWith","currentRequestMap","map","sync","has","entry","get","state","completed","deferredUnsafeDone","completeEffect","effect","matchEffect","onFailure","error","exitFail","onSuccess","value","exitSucceed","fail","failCause","cause","exitFailCause","succeed","Listeners","count","observers","Set","interrupted","addObserver","f","add","removeObserver","delete","increment","forEach","decrement","filterOutCompleted","requests","filter"],"sources":["../../../src/internal/request.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- let moduleVersion = "2.4.12";
1
+ let moduleVersion = "2.4.14";
2
2
  export const getCurrentVersion = () => moduleVersion;
3
3
  export const setCurrentVersion = version => {
4
4
  moduleVersion = version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect",
3
- "version": "2.4.12",
3
+ "version": "2.4.14",
4
4
  "description": "The missing standard library for TypeScript, for writing production-grade software.",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/BigInt.ts CHANGED
@@ -547,10 +547,24 @@ export const multiplyAll = (collection: Iterable<bigint>): bigint => {
547
547
  }
548
548
 
549
549
  /**
550
- * Convers a bigint into a number
550
+ * Takes a `bigint` and returns an `Option` of `number`.
551
+ *
552
+ * If the `bigint` is outside the safe integer range for JavaScript (`Number.MAX_SAFE_INTEGER`
553
+ * and `Number.MIN_SAFE_INTEGER`), it returns `Option.none()`. Otherwise, it converts the `bigint`
554
+ * to a number and returns `Option.some(number)`.
555
+ *
556
+ * @param b - The `bigint` to be converted to a `number`.
557
+ *
558
+ * @example
559
+ * import { toNumber } from "effect/BigInt"
560
+ * import { Option } from "effect"
561
+ *
562
+ * assert.deepStrictEqual(toNumber(BigInt(42)), Option.some(42))
563
+ * assert.deepStrictEqual(toNumber(BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1)), Option.none())
564
+ * assert.deepStrictEqual(toNumber(BigInt(Number.MIN_SAFE_INTEGER) - BigInt(1)), Option.none())
551
565
  *
552
- * @since 2.0.0
553
566
  * @category conversions
567
+ * @since 2.0.0
554
568
  */
555
569
  export const toNumber = (b: bigint): Option.Option<number> => {
556
570
  if (b > BigInt(Number.MAX_SAFE_INTEGER) || b < BigInt(Number.MIN_SAFE_INTEGER)) {
@@ -558,3 +572,64 @@ export const toNumber = (b: bigint): Option.Option<number> => {
558
572
  }
559
573
  return Option.some(Number(b))
560
574
  }
575
+
576
+ /**
577
+ * Takes a string and returns an `Option` of `bigint`.
578
+ *
579
+ * If the string is empty or contains characters that cannot be converted into a `bigint`,
580
+ * it returns `Option.none()`, otherwise, it returns `Option.some(bigint)`.
581
+ *
582
+ * @param s - The string to be converted to a `bigint`.
583
+ *
584
+ * @example
585
+ * import { fromString } from "effect/BigInt"
586
+ * import { Option } from "effect"
587
+ *
588
+ * assert.deepStrictEqual(fromString("42"), Option.some(BigInt(42)))
589
+ * assert.deepStrictEqual(fromString(" "), Option.none())
590
+ * assert.deepStrictEqual(fromString("a"), Option.none())
591
+ *
592
+ * @category conversions
593
+ * @since 2.4.12
594
+ */
595
+ export const fromString = (s: string): Option.Option<bigint> => {
596
+ try {
597
+ return s.trim() === ""
598
+ ? Option.none()
599
+ : Option.some(BigInt(s))
600
+ } catch (_) {
601
+ return Option.none()
602
+ }
603
+ }
604
+
605
+ /**
606
+ * Takes a number and returns an `Option` of `bigint`.
607
+ *
608
+ * If the number is outside the safe integer range for JavaScript (`Number.MAX_SAFE_INTEGER`
609
+ * and `Number.MIN_SAFE_INTEGER`), it returns `Option.none()`. Otherwise, it attempts to
610
+ * convert the number to a `bigint` and returns `Option.some(bigint)`.
611
+ *
612
+ * @param n - The number to be converted to a `bigint`.
613
+ *
614
+ * @example
615
+ * import { fromNumber } from "effect/BigInt"
616
+ * import { Option } from "effect"
617
+ *
618
+ * assert.deepStrictEqual(fromNumber(42), Option.some(BigInt(42)))
619
+ * assert.deepStrictEqual(fromNumber(Number.MAX_SAFE_INTEGER + 1), Option.none())
620
+ * assert.deepStrictEqual(fromNumber(Number.MIN_SAFE_INTEGER - 1), Option.none())
621
+ *
622
+ * @category conversions
623
+ * @since 2.4.12
624
+ */
625
+ export const fromNumber = (n: number): Option.Option<bigint> => {
626
+ if (n > Number.MAX_SAFE_INTEGER || n < Number.MIN_SAFE_INTEGER) {
627
+ return Option.none()
628
+ }
629
+
630
+ try {
631
+ return Option.some(BigInt(n))
632
+ } catch (_) {
633
+ return Option.none()
634
+ }
635
+ }
package/src/Duration.ts CHANGED
@@ -15,7 +15,11 @@ import { hasProperty, isBigInt, isNumber } from "./Predicate.js"
15
15
 
16
16
  const TypeId: unique symbol = Symbol.for("effect/Duration")
17
17
 
18
+ const bigint0 = BigInt(0)
19
+ const bigint24 = BigInt(24)
20
+ const bigint60 = BigInt(60)
18
21
  const bigint1e3 = BigInt(1_000)
22
+ const bigint1e6 = BigInt(1_000_000)
19
23
  const bigint1e9 = BigInt(1_000_000_000)
20
24
 
21
25
  /**
@@ -162,7 +166,7 @@ const DurationProto: Omit<Duration, "value"> = {
162
166
  const make = (input: number | bigint): Duration => {
163
167
  const duration = Object.create(DurationProto)
164
168
  if (isNumber(input)) {
165
- if (isNaN(input) || input < 0) {
169
+ if (isNaN(input) || input <= 0) {
166
170
  duration.value = zeroValue
167
171
  } else if (!Number.isFinite(input)) {
168
172
  duration.value = infinityValue
@@ -171,7 +175,7 @@ const make = (input: number | bigint): Duration => {
171
175
  } else {
172
176
  duration.value = { _tag: "Millis", millis: input }
173
177
  }
174
- } else if (input < BigInt(0)) {
178
+ } else if (input <= bigint0) {
175
179
  duration.value = zeroValue
176
180
  } else {
177
181
  duration.value = { _tag: "Nanos", nanos: input }
@@ -522,6 +526,22 @@ export const times: {
522
526
  })
523
527
  )
524
528
 
529
+ /**
530
+ * @since 2.0.0
531
+ * @category math
532
+ */
533
+ export const subtract: {
534
+ (that: DurationInput): (self: DurationInput) => Duration
535
+ (self: DurationInput, that: DurationInput): Duration
536
+ } = dual(
537
+ 2,
538
+ (self: DurationInput, that: DurationInput): Duration =>
539
+ matchWith(self, that, {
540
+ onMillis: (self, that) => make(self - that),
541
+ onNanos: (self, that) => make(self - that)
542
+ })
543
+ )
544
+
525
545
  /**
526
546
  * @since 2.0.0
527
547
  * @category math
@@ -631,32 +651,32 @@ export const format = (self: DurationInput): string => {
631
651
 
632
652
  const nanos = unsafeToNanos(duration)
633
653
 
634
- if (nanos % 1000000n) {
635
- parts.push(`${nanos % 1000000n}ns`)
654
+ if (nanos % bigint1e6) {
655
+ parts.push(`${nanos % bigint1e6}ns`)
636
656
  }
637
657
 
638
- const ms = nanos / 1000000n
639
- if (ms % 1000n !== 0n) {
640
- parts.push(`${ms % 1000n}ms`)
658
+ const ms = nanos / bigint1e6
659
+ if (ms % bigint1e3 !== bigint0) {
660
+ parts.push(`${ms % bigint1e3}ms`)
641
661
  }
642
662
 
643
- const sec = ms / 1000n
644
- if (sec % 60n !== 0n) {
645
- parts.push(`${sec % 60n}s`)
663
+ const sec = ms / bigint1e3
664
+ if (sec % bigint60 !== bigint0) {
665
+ parts.push(`${sec % bigint60}s`)
646
666
  }
647
667
 
648
- const min = sec / 60n
649
- if (min % 60n !== 0n) {
650
- parts.push(`${min % 60n}m`)
668
+ const min = sec / bigint60
669
+ if (min % bigint60 !== bigint0) {
670
+ parts.push(`${min % bigint60}m`)
651
671
  }
652
672
 
653
- const hr = min / 60n
654
- if (hr % 24n !== 0n) {
655
- parts.push(`${hr % 24n}h`)
673
+ const hr = min / bigint60
674
+ if (hr % bigint24 !== bigint0) {
675
+ parts.push(`${hr % bigint24}h`)
656
676
  }
657
677
 
658
- const days = hr / 24n
659
- if (days !== 0n) {
678
+ const days = hr / bigint24
679
+ if (days !== bigint0) {
660
680
  parts.push(`${days}d`)
661
681
  }
662
682
 
package/src/Number.ts CHANGED
@@ -400,7 +400,7 @@ export const sumAll = (collection: Iterable<number>): number => {
400
400
  * @param collection - The collection of `number`s to multiply.
401
401
  *
402
402
  * @example
403
- * import { multiplyAll } from 'effect/Number'
403
+ * import { multiplyAll } from "effect/Number"
404
404
  *
405
405
  * assert.deepStrictEqual(multiplyAll([2, 3, 4]), 24)
406
406
  *
package/src/Request.ts CHANGED
@@ -245,6 +245,7 @@ export const succeed: {
245
245
  export interface Listeners {
246
246
  readonly count: number
247
247
  readonly observers: Set<(count: number) => void>
248
+ interrupted: boolean
248
249
  addObserver(f: (count: number) => void): void
249
250
  removeObserver(f: (count: number) => void): void
250
251
  increment(): void
@@ -309,7 +310,7 @@ export interface Entry<out R> extends Entry.Variance<R> {
309
310
  readonly listeners: Listeners
310
311
  readonly ownerId: FiberId
311
312
  readonly state: {
312
- completed: boolean // TODO: mutable by design?
313
+ completed: boolean
313
314
  }
314
315
  }
315
316
 
@@ -241,8 +241,12 @@ const runBlockedRequests = (self: RequestBlock.RequestBlock) =>
241
241
  map.set(entry.request as Request<any, any>, entry)
242
242
  }
243
243
  }
244
+ const flat = arr.flat()
244
245
  return core.fiberRefLocally(
245
- invokeWithInterrupt(dataSource.runAll(arr), arr.flat()),
246
+ invokeWithInterrupt(dataSource.runAll(arr), flat, () =>
247
+ flat.forEach((entry) => {
248
+ entry.listeners.interrupted = true
249
+ })),
246
250
  currentRequestMap,
247
251
  map
248
252
  )
@@ -2143,7 +2147,17 @@ export const forEachConcurrentDiscard = <A, X, E, R>(
2143
2147
  restore(internalFiber.join(processingFiber)),
2144
2148
  () => {
2145
2149
  onInterruptSignal()
2146
- return internalFiber._await(processingFiber)
2150
+ const all = [processingFiber] as Array<FiberRuntime<any, any>>
2151
+ residual.map((blocked) => {
2152
+ const fiber = runFiber(blocked)
2153
+ parent._scheduler.scheduleTask(() => {
2154
+ fiber.unsafeInterruptAsFork(parent.id())
2155
+ }, 0)
2156
+ return fiber
2157
+ }).forEach((additional) => {
2158
+ all.push(additional as unknown as FiberRuntime<any, any>)
2159
+ })
2160
+ return core.exit(fiberJoinAll(all))
2147
2161
  }
2148
2162
  )),
2149
2163
  () => core.forEachSequential(joinOrder, (f) => f.inheritAll)
@@ -3421,8 +3435,13 @@ export const ensuring: {
3421
3435
  /** @internal */
3422
3436
  export const invokeWithInterrupt: <A, E, R>(
3423
3437
  self: Effect.Effect<A, E, R>,
3424
- entries: ReadonlyArray<Entry<unknown>>
3425
- ) => Effect.Effect<void, E, R> = <A, E, R>(self: Effect.Effect<A, E, R>, entries: ReadonlyArray<Entry<unknown>>) =>
3438
+ entries: ReadonlyArray<Entry<unknown>>,
3439
+ onInterrupt?: () => void
3440
+ ) => Effect.Effect<void, E, R> = <A, E, R>(
3441
+ self: Effect.Effect<A, E, R>,
3442
+ entries: ReadonlyArray<Entry<unknown>>,
3443
+ onInterrupt?: () => void
3444
+ ) =>
3426
3445
  core.fiberIdWith((id) =>
3427
3446
  core.flatMap(
3428
3447
  core.flatMap(
@@ -3433,6 +3452,7 @@ export const invokeWithInterrupt: <A, E, R>(
3433
3452
  const checkDone = () => {
3434
3453
  if (counts.every((count) => count === 0)) {
3435
3454
  cleanup.forEach((f) => f())
3455
+ onInterrupt?.()
3436
3456
  cb(core.interruptFiber(processing))
3437
3457
  }
3438
3458
  }
@@ -8,7 +8,6 @@ import type * as Request from "../Request.js"
8
8
  import type * as RequestResolver from "../RequestResolver.js"
9
9
  import * as BlockedRequests from "./blockedRequests.js"
10
10
  import { unsafeMakeWith } from "./cache.js"
11
- import { isInterruptedOnly } from "./cause.js"
12
11
  import * as core from "./core.js"
13
12
  import { ensuring } from "./fiberRuntime.js"
14
13
  import { Listeners } from "./request.js"
@@ -61,77 +60,81 @@ export const fromRequest = <
61
60
  const proxy = new Proxy(request, {})
62
61
  return core.fiberRefGetWith(currentCacheEnabled, (cacheEnabled) => {
63
62
  if (cacheEnabled) {
64
- return core.fiberRefGetWith(currentCache, (cache) =>
63
+ const cached: Effect.Effect<any, any> = core.fiberRefGetWith(currentCache, (cache) =>
65
64
  core.flatMap(cache.getEither(proxy), (orNew) => {
66
65
  switch (orNew._tag) {
67
66
  case "Left": {
67
+ if (orNew.left.listeners.interrupted) {
68
+ return core.flatMap(
69
+ cache.invalidateWhen(proxy, (entry) => entry.handle === orNew.left.handle),
70
+ () => cached
71
+ )
72
+ }
68
73
  orNew.left.listeners.increment()
69
- return core.blocked(
70
- BlockedRequests.empty,
71
- core.flatMap(core.exit(core.deferredAwait(orNew.left.handle)), (exit) => {
72
- if (exit._tag === "Failure" && isInterruptedOnly(exit.cause)) {
74
+ return core.uninterruptibleMask((restore) =>
75
+ core.flatMap(
76
+ core.exit(core.blocked(
77
+ BlockedRequests.empty,
78
+ restore(core.deferredAwait(orNew.left.handle))
79
+ )),
80
+ (exit) => {
73
81
  orNew.left.listeners.decrement()
74
- return core.flatMap(
75
- cache.invalidateWhen(
76
- proxy,
77
- (entry) => entry.handle === orNew.left.handle
78
- ),
79
- () => fromRequest(proxy, ds)
80
- )
82
+ return exit
81
83
  }
82
- return ensuring(
83
- core.deferredAwait(orNew.left.handle),
84
- core.sync(() => orNew.left.listeners.decrement())
85
- )
86
- })
84
+ )
87
85
  )
88
86
  }
89
87
  case "Right": {
90
88
  orNew.right.listeners.increment()
91
- return core.blocked(
92
- BlockedRequests.single(
93
- ds as RequestResolver.RequestResolver<A>,
94
- BlockedRequests.makeEntry({
95
- request: proxy,
96
- result: orNew.right.handle,
97
- listeners: orNew.right.listeners,
98
- ownerId: id,
99
- state: { completed: false }
100
- })
101
- ),
102
- core.uninterruptibleMask((restore) =>
103
- core.flatMap(
104
- core.exit(restore(core.deferredAwait(orNew.right.handle))),
105
- (exit) => {
106
- orNew.right.listeners.decrement()
107
- return exit
108
- }
109
- )
89
+ return core.uninterruptibleMask((restore) =>
90
+ core.flatMap(
91
+ core.exit(
92
+ core.blocked(
93
+ BlockedRequests.single(
94
+ ds as RequestResolver.RequestResolver<A>,
95
+ BlockedRequests.makeEntry({
96
+ request: proxy,
97
+ result: orNew.right.handle,
98
+ listeners: orNew.right.listeners,
99
+ ownerId: id,
100
+ state: { completed: false }
101
+ })
102
+ ),
103
+ restore(core.deferredAwait(orNew.right.handle))
104
+ )
105
+ ),
106
+ () => {
107
+ orNew.right.listeners.decrement()
108
+ return core.deferredAwait(orNew.right.handle)
109
+ }
110
110
  )
111
111
  )
112
112
  }
113
113
  }
114
114
  }))
115
+ return cached
115
116
  }
116
117
  const listeners = new Listeners()
117
118
  listeners.increment()
118
119
  return core.flatMap(
119
120
  core.deferredMake<Request.Request.Success<A>, Request.Request.Error<A>>(),
120
121
  (ref) =>
121
- core.blocked(
122
- BlockedRequests.single(
123
- ds as RequestResolver.RequestResolver<A>,
124
- BlockedRequests.makeEntry({
125
- request: proxy,
126
- result: ref,
127
- listeners,
128
- ownerId: id,
129
- state: { completed: false }
130
- })
122
+ ensuring(
123
+ core.blocked(
124
+ BlockedRequests.single(
125
+ ds as RequestResolver.RequestResolver<A>,
126
+ BlockedRequests.makeEntry({
127
+ request: proxy,
128
+ result: ref,
129
+ listeners,
130
+ ownerId: id,
131
+ state: { completed: false }
132
+ })
133
+ ),
134
+ core.deferredAwait(ref)
131
135
  ),
132
- ensuring(
133
- core.deferredAwait(ref),
134
- core.sync(() => listeners.decrement())
136
+ core.sync(() =>
137
+ listeners.decrement()
135
138
  )
136
139
  )
137
140
  )
@@ -147,6 +147,7 @@ export const succeed = dual<
147
147
  export class Listeners {
148
148
  count = 0
149
149
  observers: Set<(count: number) => void> = new Set()
150
+ interrupted = false
150
151
  addObserver(f: (count: number) => void): void {
151
152
  this.observers.add(f)
152
153
  }
@@ -1,4 +1,4 @@
1
- let moduleVersion = "2.4.12"
1
+ let moduleVersion = "2.4.14"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4