effect 2.4.13 → 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.
@@ -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":"AAEA,SAASA,IAAI,QAAQ,gBAAgB;AACrC,SAASC,WAAW,QAAQ,iBAAiB;AAG7C,OAAO,KAAKC,mBAAmB,MAAM,0BAA0B;AAC/D,OAAO,KAAKC,IAAI,MAAM,WAAW;AACjC,SAASC,mBAAmB,QAAQ,iBAAiB;AAErD;AACA,MAAMC,gBAAgB,GAAG,gBAAgB;AAEzC;AACA,OAAO,MAAMC,aAAa,gBAA0BC,MAAM,CAACC,GAAG,CAC5DH,gBAAgB,CACQ;AAE1B,MAAMI,eAAe,GAAG;EACtB;EACAC,EAAE,EAAGC,CAAQ,IAAKA,CAAC;EACnB;EACAC,EAAE,EAAGD,CAAQ,IAAKA;CACnB;AAED,MAAME,gBAAgB,GAAG;EACvB,GAAGT,mBAAmB;EACtB,CAACE,aAAa,GAAGG;CAClB;AAED;AACA,OAAO,MAAMK,SAAS,GAAIC,CAAU,IAA6Cd,WAAW,CAACc,CAAC,EAAET,aAAa,CAAC;AAE9G;AACA,OAAO,MAAMU,EAAE,GAAGA,CAAA,KAA4EC,IAAI,IAChGC,MAAM,CAACC,MAAM,CAACD,MAAM,CAACE,MAAM,CAACP,gBAAgB,CAAC,EAAEI,IAAI,CAAC;AAEtD;AACA,OAAO,MAAMI,MAAM,GACjBC,GAAc,IAEfL,IAAI,IAAI;EACP,MAAMM,OAAO,GAAGL,MAAM,CAACC,MAAM,CAACD,MAAM,CAACE,MAAM,CAACP,gBAAgB,CAAC,EAAEI,IAAI,CAAC;EACpEM,OAAO,CAACC,IAAI,GAAGF,GAAG;EAClB,OAAOC,OAAO;AAChB,CAAC;AAED;AACA,OAAO,MAAME,KAAK,gBAGoC;EACpD,SAASA,KAAKA,CAAYR,IAAS;IACjC,IAAIA,IAAI,EAAE;MACRC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEF,IAAI,CAAC;IAC3B;EACF;EACAQ,KAAK,CAACC,SAAS,GAAGb,gBAAgB;EAClC,OAAOY,KAAY;AACrB,CAAC,CAAC,CAAE;AAEJ;AACA,OAAO,MAAME,WAAW,GACtBL,GAAQ,IAIoE;EAC5E,OAAO,MAAMK,WAAY,SAAQF,KAAoB;IAC1CD,IAAI,GAAGF,GAAG;GACb;AACV,CAAC;AAED;AACA,OAAO,MAAMM,QAAQ,gBAAG5B,IAAI,CAQ1B,CAAC,EAAE,CAAC6B,IAAI,EAAEC,MAAM,KAChB3B,IAAI,CAAC4B,eAAe,CAClB7B,mBAAmB,CAAC8B,iBAAiB,EACpCC,GAAG,IACF9B,IAAI,CAAC+B,IAAI,CAAC,MAAK;EACb,IAAID,GAAG,CAACE,GAAG,CAACN,IAAI,CAAC,EAAE;IACjB,MAAMO,KAAK,GAAGH,GAAG,CAACI,GAAG,CAACR,IAAI,CAAE;IAC5B,IAAI,CAACO,KAAK,CAACE,KAAK,CAACC,SAAS,EAAE;MAC1BH,KAAK,CAACE,KAAK,CAACC,SAAS,GAAG,IAAI;MAC5BpC,IAAI,CAACqC,kBAAkB,CAACJ,KAAK,CAACN,MAAM,EAAEA,MAAM,CAAC;IAC/C;EACF;AACF,CAAC,CAAC,CACL,CAAC;AAEJ;AACA,OAAO,MAAMW,cAAc,gBAAGzC,IAAI,CAQhC,CAAC,EAAE,CAAC6B,IAAI,EAAEa,MAAM,KAChBvC,IAAI,CAACwC,WAAW,CAACD,MAAM,EAAE;EACvBE,SAAS,EAAGC,KAAK,IAAKjB,QAAQ,CAACC,IAAI,EAAE1B,IAAI,CAAC2C,QAAQ,CAACD,KAAK,CAAQ,CAAC;EACjEE,SAAS,EAAGC,KAAK,IAAKpB,QAAQ,CAACC,IAAI,EAAE1B,IAAI,CAAC8C,WAAW,CAACD,KAAK,CAAQ;CACpE,CAAC,CAAC;AAEL;AACA,OAAO,MAAME,IAAI,gBAAGlD,IAAI,CAQtB,CAAC,EAAE,CAAC6B,IAAI,EAAEgB,KAAK,KAAKjB,QAAQ,CAACC,IAAI,EAAE1B,IAAI,CAAC2C,QAAQ,CAACD,KAAK,CAAQ,CAAC,CAAC;AAElE;AACA,OAAO,MAAMM,SAAS,gBAAGnD,IAAI,CAQ3B,CAAC,EAAE,CAAC6B,IAAI,EAAEuB,KAAK,KAAKxB,QAAQ,CAACC,IAAI,EAAE1B,IAAI,CAACkD,aAAa,CAACD,KAAK,CAAQ,CAAC,CAAC;AAEvE;AACA,OAAO,MAAME,OAAO,gBAAGtD,IAAI,CAQzB,CAAC,EAAE,CAAC6B,IAAI,EAAEmB,KAAK,KAAKpB,QAAQ,CAACC,IAAI,EAAE1B,IAAI,CAAC8C,WAAW,CAACD,KAAK,CAAQ,CAAC,CAAC;AAErE;AACA,OAAM,MAAOO,SAAS;EACpBC,KAAK,GAAG,CAAC;EACTC,SAAS,GAAiC,IAAIC,GAAG,EAAE;EACnDC,WAAWA,CAACC,CAA0B;IACpC,IAAI,CAACH,SAAS,CAACI,GAAG,CAACD,CAAC,CAAC;EACvB;EACAE,cAAcA,CAACF,CAA0B;IACvC,IAAI,CAACH,SAAS,CAACM,MAAM,CAACH,CAAC,CAAC;EAC1B;EACAI,SAASA,CAAA;IACP,IAAI,CAACR,KAAK,EAAE;IACZ,IAAI,CAACC,SAAS,CAACQ,OAAO,CAAEL,CAAC,IAAKA,CAAC,CAAC,IAAI,CAACJ,KAAK,CAAC,CAAC;EAC9C;EACAU,SAASA,CAAA;IACP,IAAI,CAACV,KAAK,EAAE;IACZ,IAAI,CAACC,SAAS,CAACQ,OAAO,CAAEL,CAAC,IAAKA,CAAC,CAAC,IAAI,CAACJ,KAAK,CAAC,CAAC;EAC9C;;AAGF;;;AAGA,OAAO,MAAMW,kBAAkB,GAAyCC,QAAkB,IACxFjE,IAAI,CAAC4B,eAAe,CAClB7B,mBAAmB,CAAC8B,iBAAiB,EACpCC,GAAG,IACF9B,IAAI,CAACmD,OAAO,CACVc,QAAQ,CAACC,MAAM,CAAE9C,OAAO,IAAK,EAAEU,GAAG,CAACI,GAAG,CAACd,OAAO,CAAC,EAAEe,KAAK,CAACC,SAAS,KAAK,IAAI,CAAC,CAAC,CAC5E,CACJ","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.13";
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.13",
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/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.13"
1
+ let moduleVersion = "2.4.14"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4