@typed/fx 1.13.0 → 1.15.0
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/dist/Computed.d.ts +42 -0
- package/dist/Computed.d.ts.map +1 -0
- package/dist/Computed.js +39 -0
- package/dist/Computed.js.map +1 -0
- package/dist/Filtered.d.ts +34 -0
- package/dist/Filtered.d.ts.map +1 -0
- package/dist/Filtered.js +40 -0
- package/dist/Filtered.js.map +1 -0
- package/dist/Fx.d.ts +2 -3
- package/dist/Fx.d.ts.map +1 -1
- package/dist/Fx.js +11 -26
- package/dist/Fx.js.map +1 -1
- package/dist/RefArray.d.ts +116 -0
- package/dist/RefArray.d.ts.map +1 -0
- package/dist/RefArray.js +67 -0
- package/dist/RefArray.js.map +1 -0
- package/dist/RefSubject.d.ts +23 -20
- package/dist/RefSubject.d.ts.map +1 -1
- package/dist/RefSubject.js +352 -247
- package/dist/RefSubject.js.map +1 -1
- package/dist/RefTransform.d.ts +51 -0
- package/dist/RefTransform.d.ts.map +1 -0
- package/dist/RefTransform.js +69 -0
- package/dist/RefTransform.js.map +1 -0
- package/dist/Subject.d.ts.map +1 -1
- package/dist/Subject.js +2 -3
- package/dist/Subject.js.map +1 -1
- package/dist/catchAllCause.d.ts +6 -0
- package/dist/catchAllCause.d.ts.map +1 -1
- package/dist/catchAllCause.js +21 -2
- package/dist/catchAllCause.js.map +1 -1
- package/dist/cjs/Computed.d.ts +42 -0
- package/dist/cjs/Computed.d.ts.map +1 -0
- package/dist/cjs/Computed.js +66 -0
- package/dist/cjs/Computed.js.map +1 -0
- package/dist/cjs/Filtered.d.ts +34 -0
- package/dist/cjs/Filtered.d.ts.map +1 -0
- package/dist/cjs/Filtered.js +67 -0
- package/dist/cjs/Filtered.js.map +1 -0
- package/dist/cjs/Fx.d.ts +2 -3
- package/dist/cjs/Fx.d.ts.map +1 -1
- package/dist/cjs/Fx.js +13 -28
- package/dist/cjs/Fx.js.map +1 -1
- package/dist/cjs/RefArray.d.ts +116 -0
- package/dist/cjs/RefArray.d.ts.map +1 -0
- package/dist/cjs/RefArray.js +97 -0
- package/dist/cjs/RefArray.js.map +1 -0
- package/dist/cjs/RefSubject.d.ts +23 -20
- package/dist/cjs/RefSubject.d.ts.map +1 -1
- package/dist/cjs/RefSubject.js +358 -249
- package/dist/cjs/RefSubject.js.map +1 -1
- package/dist/cjs/RefTransform.d.ts +51 -0
- package/dist/cjs/RefTransform.d.ts.map +1 -0
- package/dist/cjs/RefTransform.js +96 -0
- package/dist/cjs/RefTransform.js.map +1 -0
- package/dist/cjs/Subject.d.ts.map +1 -1
- package/dist/cjs/Subject.js +2 -3
- package/dist/cjs/Subject.js.map +1 -1
- package/dist/cjs/catchAllCause.d.ts +6 -0
- package/dist/cjs/catchAllCause.d.ts.map +1 -1
- package/dist/cjs/catchAllCause.js +23 -2
- package/dist/cjs/catchAllCause.js.map +1 -1
- package/dist/cjs/combineAll.d.ts.map +1 -1
- package/dist/cjs/combineAll.js +4 -4
- package/dist/cjs/combineAll.js.map +1 -1
- package/dist/cjs/combineAllDiscard.d.ts.map +1 -1
- package/dist/cjs/combineAllDiscard.js +4 -4
- package/dist/cjs/combineAllDiscard.js.map +1 -1
- package/dist/cjs/data-first.d.ts +10 -0
- package/dist/cjs/data-first.d.ts.map +1 -1
- package/dist/cjs/data-first.js +10 -0
- package/dist/cjs/data-first.js.map +1 -1
- package/dist/cjs/empty.js +1 -1
- package/dist/cjs/empty.js.map +1 -1
- package/dist/cjs/exhaustMapCause.js +1 -1
- package/dist/cjs/exhaustMapCause.js.map +1 -1
- package/dist/cjs/exhaustMapLatestCause.js +1 -1
- package/dist/cjs/exhaustMapLatestCause.js.map +1 -1
- package/dist/cjs/failCause.d.ts +1 -0
- package/dist/cjs/failCause.d.ts.map +1 -1
- package/dist/cjs/failCause.js +5 -1
- package/dist/cjs/failCause.js.map +1 -1
- package/dist/cjs/filter.d.ts.map +1 -1
- package/dist/cjs/filter.js +1 -1
- package/dist/cjs/filter.js.map +1 -1
- package/dist/cjs/filterMap.d.ts.map +1 -1
- package/dist/cjs/filterMap.js +1 -1
- package/dist/cjs/filterMap.js.map +1 -1
- package/dist/cjs/fromArray.js +1 -1
- package/dist/cjs/fromArray.js.map +1 -1
- package/dist/cjs/fromDequeue.d.ts +5 -0
- package/dist/cjs/fromDequeue.d.ts.map +1 -0
- package/dist/cjs/fromDequeue.js +49 -0
- package/dist/cjs/fromDequeue.js.map +1 -0
- package/dist/cjs/fromEffect.d.ts.map +1 -1
- package/dist/cjs/fromEffect.js +9 -1
- package/dist/cjs/fromEffect.js.map +1 -1
- package/dist/cjs/fromEmitter.d.ts.map +1 -1
- package/dist/cjs/fromEmitter.js +4 -5
- package/dist/cjs/fromEmitter.js.map +1 -1
- package/dist/cjs/fromFxEffect.d.ts.map +1 -1
- package/dist/cjs/fromFxEffect.js +1 -1
- package/dist/cjs/fromFxEffect.js.map +1 -1
- package/dist/cjs/fromHub.d.ts +5 -0
- package/dist/cjs/fromHub.d.ts.map +1 -0
- package/dist/cjs/fromHub.js +34 -0
- package/dist/cjs/fromHub.js.map +1 -0
- package/dist/cjs/fromIterable.js +1 -1
- package/dist/cjs/fromIterable.js.map +1 -1
- package/dist/cjs/fromStream.d.ts +4 -0
- package/dist/cjs/fromStream.d.ts.map +1 -0
- package/dist/cjs/fromStream.js +34 -0
- package/dist/cjs/fromStream.js.map +1 -0
- package/dist/cjs/helpers.d.ts +3 -2
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +28 -69
- package/dist/cjs/helpers.js.map +1 -1
- package/dist/cjs/hold.d.ts +2 -4
- package/dist/cjs/hold.d.ts.map +1 -1
- package/dist/cjs/hold.js +0 -4
- package/dist/cjs/hold.js.map +1 -1
- package/dist/cjs/index.d.ts +36 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +185 -119
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/keyed.d.ts.map +1 -1
- package/dist/cjs/keyed.js +23 -12
- package/dist/cjs/keyed.js.map +1 -1
- package/dist/cjs/mergeAll.d.ts.map +1 -1
- package/dist/cjs/mergeAll.js +1 -1
- package/dist/cjs/mergeAll.js.map +1 -1
- package/dist/cjs/mergeBufferConcurrently.d.ts +8 -0
- package/dist/cjs/mergeBufferConcurrently.d.ts.map +1 -0
- package/dist/cjs/mergeBufferConcurrently.js +95 -0
- package/dist/cjs/mergeBufferConcurrently.js.map +1 -0
- package/dist/cjs/mergeConcurrently.d.ts +3 -0
- package/dist/cjs/mergeConcurrently.d.ts.map +1 -0
- package/dist/cjs/mergeConcurrently.js +69 -0
- package/dist/cjs/mergeConcurrently.js.map +1 -0
- package/dist/cjs/multicast.d.ts +5 -5
- package/dist/cjs/multicast.d.ts.map +1 -1
- package/dist/cjs/multicast.js +14 -14
- package/dist/cjs/multicast.js.map +1 -1
- package/dist/cjs/never.js +1 -1
- package/dist/cjs/never.js.map +1 -1
- package/dist/cjs/observe.d.ts +3 -0
- package/dist/cjs/observe.d.ts.map +1 -1
- package/dist/cjs/observe.js +12 -7
- package/dist/cjs/observe.js.map +1 -1
- package/dist/cjs/onExit.d.ts +5 -0
- package/dist/cjs/onExit.d.ts.map +1 -0
- package/dist/cjs/onExit.js +33 -0
- package/dist/cjs/onExit.js.map +1 -0
- package/dist/cjs/orElse.d.ts +4 -0
- package/dist/cjs/orElse.d.ts.map +1 -0
- package/dist/cjs/orElse.js +34 -0
- package/dist/cjs/orElse.js.map +1 -0
- package/dist/cjs/promise.js +4 -4
- package/dist/cjs/promise.js.map +1 -1
- package/dist/cjs/provide.d.ts.map +1 -1
- package/dist/cjs/provide.js +6 -3
- package/dist/cjs/provide.js.map +1 -1
- package/dist/cjs/skipRepeats.d.ts +1 -1
- package/dist/cjs/skipRepeats.d.ts.map +1 -1
- package/dist/cjs/skipRepeats.js +7 -6
- package/dist/cjs/skipRepeats.js.map +1 -1
- package/dist/cjs/skipWhile.js +1 -1
- package/dist/cjs/skipWhile.js.map +1 -1
- package/dist/cjs/slice.js +3 -3
- package/dist/cjs/slice.js.map +1 -1
- package/dist/cjs/struct.d.ts +5 -0
- package/dist/cjs/struct.d.ts.map +1 -0
- package/dist/cjs/struct.js +10 -0
- package/dist/cjs/struct.js.map +1 -0
- package/dist/cjs/switchMapCause.d.ts +1 -0
- package/dist/cjs/switchMapCause.d.ts.map +1 -1
- package/dist/cjs/switchMapCause.js +13 -2
- package/dist/cjs/switchMapCause.js.map +1 -1
- package/dist/cjs/switchMatch.js +1 -1
- package/dist/cjs/switchMatch.js.map +1 -1
- package/dist/cjs/takeWhile.js +1 -1
- package/dist/cjs/takeWhile.js.map +1 -1
- package/dist/cjs/tap.d.ts.map +1 -1
- package/dist/cjs/tap.js +1 -1
- package/dist/cjs/tap.js.map +1 -1
- package/dist/cjs/tapCause.d.ts.map +1 -1
- package/dist/cjs/tapCause.js +5 -2
- package/dist/cjs/tapCause.js.map +1 -1
- package/dist/cjs/test-utils.js +2 -2
- package/dist/cjs/test-utils.js.map +1 -1
- package/dist/cjs/toArray.d.ts.map +1 -1
- package/dist/cjs/toArray.js +2 -3
- package/dist/cjs/toArray.js.map +1 -1
- package/dist/cjs/toEnqueue.d.ts +6 -0
- package/dist/cjs/toEnqueue.d.ts.map +1 -0
- package/dist/cjs/toEnqueue.js +9 -0
- package/dist/cjs/toEnqueue.js.map +1 -0
- package/dist/cjs/toStream.d.ts +4 -0
- package/dist/cjs/toStream.d.ts.map +1 -0
- package/dist/cjs/toStream.js +35 -0
- package/dist/cjs/toStream.js.map +1 -0
- package/dist/combineAll.d.ts.map +1 -1
- package/dist/combineAll.js +4 -4
- package/dist/combineAll.js.map +1 -1
- package/dist/combineAllDiscard.d.ts.map +1 -1
- package/dist/combineAllDiscard.js +4 -4
- package/dist/combineAllDiscard.js.map +1 -1
- package/dist/data-first.d.ts +10 -0
- package/dist/data-first.d.ts.map +1 -1
- package/dist/data-first.js +10 -0
- package/dist/data-first.js.map +1 -1
- package/dist/empty.js +1 -1
- package/dist/empty.js.map +1 -1
- package/dist/exhaustMapCause.js +1 -1
- package/dist/exhaustMapCause.js.map +1 -1
- package/dist/exhaustMapLatestCause.js +1 -1
- package/dist/exhaustMapLatestCause.js.map +1 -1
- package/dist/failCause.d.ts +1 -0
- package/dist/failCause.d.ts.map +1 -1
- package/dist/failCause.js +3 -0
- package/dist/failCause.js.map +1 -1
- package/dist/filter.d.ts.map +1 -1
- package/dist/filter.js +1 -1
- package/dist/filter.js.map +1 -1
- package/dist/filterMap.d.ts.map +1 -1
- package/dist/filterMap.js +1 -1
- package/dist/filterMap.js.map +1 -1
- package/dist/fromArray.js +1 -1
- package/dist/fromArray.js.map +1 -1
- package/dist/fromDequeue.d.ts +5 -0
- package/dist/fromDequeue.d.ts.map +1 -0
- package/dist/fromDequeue.js +21 -0
- package/dist/fromDequeue.js.map +1 -0
- package/dist/fromEffect.d.ts.map +1 -1
- package/dist/fromEffect.js +10 -2
- package/dist/fromEffect.js.map +1 -1
- package/dist/fromEmitter.d.ts.map +1 -1
- package/dist/fromEmitter.js +4 -5
- package/dist/fromEmitter.js.map +1 -1
- package/dist/fromFxEffect.d.ts.map +1 -1
- package/dist/fromFxEffect.js +1 -1
- package/dist/fromFxEffect.js.map +1 -1
- package/dist/fromHub.d.ts +5 -0
- package/dist/fromHub.d.ts.map +1 -0
- package/dist/fromHub.js +7 -0
- package/dist/fromHub.js.map +1 -0
- package/dist/fromIterable.js +1 -1
- package/dist/fromIterable.js.map +1 -1
- package/dist/fromStream.d.ts +4 -0
- package/dist/fromStream.d.ts.map +1 -0
- package/dist/fromStream.js +7 -0
- package/dist/fromStream.js.map +1 -0
- package/dist/helpers.d.ts +3 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +28 -69
- package/dist/helpers.js.map +1 -1
- package/dist/hold.d.ts +2 -4
- package/dist/hold.d.ts.map +1 -1
- package/dist/hold.js +0 -4
- package/dist/hold.js.map +1 -1
- package/dist/index.d.ts +36 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +132 -116
- package/dist/index.js.map +1 -1
- package/dist/keyed.d.ts.map +1 -1
- package/dist/keyed.js +24 -13
- package/dist/keyed.js.map +1 -1
- package/dist/mergeAll.d.ts.map +1 -1
- package/dist/mergeAll.js +1 -1
- package/dist/mergeAll.js.map +1 -1
- package/dist/mergeBufferConcurrently.d.ts +8 -0
- package/dist/mergeBufferConcurrently.d.ts.map +1 -0
- package/dist/mergeBufferConcurrently.js +68 -0
- package/dist/mergeBufferConcurrently.js.map +1 -0
- package/dist/mergeConcurrently.d.ts +3 -0
- package/dist/mergeConcurrently.d.ts.map +1 -0
- package/dist/mergeConcurrently.js +42 -0
- package/dist/mergeConcurrently.js.map +1 -0
- package/dist/multicast.d.ts +5 -5
- package/dist/multicast.d.ts.map +1 -1
- package/dist/multicast.js +15 -15
- package/dist/multicast.js.map +1 -1
- package/dist/never.js +1 -1
- package/dist/never.js.map +1 -1
- package/dist/observe.d.ts +3 -0
- package/dist/observe.d.ts.map +1 -1
- package/dist/observe.js +9 -6
- package/dist/observe.js.map +1 -1
- package/dist/onExit.d.ts +5 -0
- package/dist/onExit.d.ts.map +1 -0
- package/dist/onExit.js +6 -0
- package/dist/onExit.js.map +1 -0
- package/dist/orElse.d.ts +4 -0
- package/dist/orElse.d.ts.map +1 -0
- package/dist/orElse.js +7 -0
- package/dist/orElse.js.map +1 -0
- package/dist/promise.js +4 -4
- package/dist/promise.js.map +1 -1
- package/dist/provide.d.ts.map +1 -1
- package/dist/provide.js +6 -3
- package/dist/provide.js.map +1 -1
- package/dist/skipRepeats.d.ts +1 -1
- package/dist/skipRepeats.d.ts.map +1 -1
- package/dist/skipRepeats.js +4 -6
- package/dist/skipRepeats.js.map +1 -1
- package/dist/skipWhile.js +1 -1
- package/dist/skipWhile.js.map +1 -1
- package/dist/slice.js +3 -3
- package/dist/slice.js.map +1 -1
- package/dist/struct.d.ts +5 -0
- package/dist/struct.d.ts.map +1 -0
- package/dist/struct.js +6 -0
- package/dist/struct.js.map +1 -0
- package/dist/switchMapCause.d.ts +1 -0
- package/dist/switchMapCause.d.ts.map +1 -1
- package/dist/switchMapCause.js +11 -1
- package/dist/switchMapCause.js.map +1 -1
- package/dist/switchMatch.js +1 -1
- package/dist/switchMatch.js.map +1 -1
- package/dist/takeWhile.js +1 -1
- package/dist/takeWhile.js.map +1 -1
- package/dist/tap.d.ts.map +1 -1
- package/dist/tap.js +1 -1
- package/dist/tap.js.map +1 -1
- package/dist/tapCause.d.ts.map +1 -1
- package/dist/tapCause.js +5 -2
- package/dist/tapCause.js.map +1 -1
- package/dist/test-utils.js +2 -2
- package/dist/test-utils.js.map +1 -1
- package/dist/toArray.d.ts.map +1 -1
- package/dist/toArray.js +2 -3
- package/dist/toArray.js.map +1 -1
- package/dist/toEnqueue.d.ts +6 -0
- package/dist/toEnqueue.d.ts.map +1 -0
- package/dist/toEnqueue.js +5 -0
- package/dist/toEnqueue.js.map +1 -0
- package/dist/toStream.d.ts +4 -0
- package/dist/toStream.d.ts.map +1 -0
- package/dist/toStream.js +8 -0
- package/dist/toStream.js.map +1 -0
- package/dist/tsconfig.cjs.build.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/Computed.ts +114 -0
- package/src/Filtered.ts +112 -0
- package/src/Fx.ts +17 -42
- package/src/RefArray.ts +226 -0
- package/src/RefSubject.test.ts +67 -6
- package/src/RefSubject.ts +601 -581
- package/src/RefTransform.ts +134 -0
- package/src/Subject.ts +4 -13
- package/src/catchAllCause.ts +43 -2
- package/src/combineAll.ts +16 -13
- package/src/combineAllDiscard.ts +16 -13
- package/src/data-first.ts +10 -0
- package/src/empty.ts +1 -1
- package/src/exhaustMapCause.ts +1 -1
- package/src/exhaustMapLatestCause.ts +1 -1
- package/src/failCause.ts +4 -0
- package/src/filter.ts +1 -3
- package/src/filterMap.ts +8 -1
- package/src/fromArray.ts +1 -1
- package/src/fromDequeue.ts +39 -0
- package/src/fromEffect.ts +12 -2
- package/src/fromEmitter.ts +4 -10
- package/src/fromFxEffect.ts +3 -1
- package/src/fromHub.ts +10 -0
- package/src/fromIterable.ts +1 -1
- package/src/helpers.ts +73 -106
- package/src/hold.ts +1 -7
- package/src/index.ts +573 -607
- package/src/keyed.ts +45 -28
- package/src/mergeAll.ts +8 -5
- package/src/mergeBufferConcurrently.test.ts +37 -0
- package/src/mergeBufferConcurrently.ts +105 -0
- package/src/mergeConcurrently.test.ts +20 -0
- package/src/mergeConcurrently.ts +57 -0
- package/src/multicast.ts +30 -22
- package/src/never.ts +1 -1
- package/src/observe.ts +16 -7
- package/src/onExit.ts +13 -0
- package/src/orElse.ts +16 -0
- package/src/promise.ts +4 -4
- package/src/provide.ts +9 -7
- package/src/skipRepeats.ts +5 -7
- package/src/skipWhile.ts +1 -1
- package/src/slice.ts +3 -3
- package/src/struct.ts +18 -0
- package/src/switchMapCause.ts +17 -1
- package/src/switchMatch.ts +1 -1
- package/src/takeWhile.ts +1 -1
- package/src/tap.ts +5 -1
- package/src/tapCause.ts +8 -6
- package/src/test-utils.ts +2 -2
- package/src/toArray.ts +5 -4
- package/src/toEnqueue.ts +13 -0
- package/tsconfig.build.json +2 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/vite.config.js +3 -0
package/dist/cjs/RefSubject.js
CHANGED
|
@@ -22,294 +22,403 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
26
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.isRefSubject = exports.RefSubject = exports.makeRef = exports.RefSubjectTypeId = void 0;
|
|
28
|
-
const
|
|
29
|
-
const Equal_1 = require("@effect/data/Equal");
|
|
29
|
+
exports.asRef = exports.isRefSubject = exports.RefSubject = exports.makeRef = exports.RefSubjectTypeId = void 0;
|
|
30
|
+
const Context = __importStar(require("@effect/data/Context"));
|
|
30
31
|
const Equal = __importStar(require("@effect/data/Equal"));
|
|
31
32
|
const Function_1 = require("@effect/data/Function");
|
|
32
33
|
const Hash = __importStar(require("@effect/data/Hash"));
|
|
33
34
|
const MutableRef = __importStar(require("@effect/data/MutableRef"));
|
|
34
35
|
const Option = __importStar(require("@effect/data/Option"));
|
|
35
|
-
const
|
|
36
|
-
const Equivalence = __importStar(require("@effect/data/
|
|
36
|
+
const Pipeable_1 = require("@effect/data/Pipeable");
|
|
37
|
+
const Equivalence = __importStar(require("@effect/data/Equivalence"));
|
|
38
|
+
const Deferred = __importStar(require("@effect/io/Deferred"));
|
|
37
39
|
const Effect = __importStar(require("@effect/io/Effect"));
|
|
38
40
|
const Fiber = __importStar(require("@effect/io/Fiber"));
|
|
41
|
+
const Scope = __importStar(require("@effect/io/Scope"));
|
|
42
|
+
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
|
43
|
+
const Computed_js_1 = require("./Computed.js");
|
|
44
|
+
const Filtered_js_1 = require("./Filtered.js");
|
|
39
45
|
const Fx_js_1 = require("./Fx.js");
|
|
46
|
+
const RefTransform_js_1 = require("./RefTransform.js");
|
|
40
47
|
const combineAll_js_1 = require("./combineAll.js");
|
|
41
48
|
const hold_js_1 = require("./hold.js");
|
|
42
|
-
const map_js_1 = require("./map.js");
|
|
43
|
-
const multicast_js_1 = require("./multicast.js");
|
|
44
49
|
const never_js_1 = require("./never.js");
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
const observe_js_1 = require("./observe.js");
|
|
51
|
+
const struct_js_1 = require("./struct.js");
|
|
52
|
+
const switchMatch_js_1 = require("./switchMatch.js");
|
|
53
|
+
const unboundedConcurrency = { concurrency: 'unbounded' };
|
|
54
|
+
const refVariance = {
|
|
55
|
+
_R: Function_1.identity,
|
|
56
|
+
_E: Function_1.identity,
|
|
57
|
+
_A: Function_1.identity,
|
|
58
|
+
};
|
|
59
|
+
exports.RefSubjectTypeId = Symbol.for('@typed/fx/RefSubject');
|
|
60
|
+
function makeRef(effect, eq) {
|
|
61
|
+
return Effect.contextWithEffect((context) => Effect.suspend(() => {
|
|
62
|
+
const ref = RefSubject.unsafeMake(Effect.provideContext(effect, context), Context.get(context, Scope.Scope), eq);
|
|
63
|
+
return Effect.as(Effect.addFinalizer(() => ref.end()), ref);
|
|
64
|
+
}));
|
|
49
65
|
}
|
|
50
66
|
exports.makeRef = makeRef;
|
|
51
67
|
var RefSubject;
|
|
52
68
|
(function (RefSubject) {
|
|
53
|
-
function
|
|
54
|
-
return
|
|
69
|
+
function unsafeMake(initial, scope, eq = fast_deep_equal_1.default) {
|
|
70
|
+
return makeRefFromPrimitive(unsafeMakeRefPrimitive(initial, scope, eq));
|
|
71
|
+
}
|
|
72
|
+
RefSubject.unsafeMake = unsafeMake;
|
|
73
|
+
function tuple(...refs) {
|
|
74
|
+
return makeRefFromPrimitive(tupleRefPrimitive(refs));
|
|
55
75
|
}
|
|
56
76
|
RefSubject.tuple = tuple;
|
|
57
|
-
function struct(
|
|
58
|
-
return
|
|
77
|
+
function struct(refs) {
|
|
78
|
+
return makeRefFromPrimitive(structRefPrimitive(refs));
|
|
59
79
|
}
|
|
60
80
|
RefSubject.struct = struct;
|
|
61
|
-
function all(subjects) {
|
|
62
|
-
|
|
81
|
+
function all(...subjects) {
|
|
82
|
+
/// MUST be a tuple if more than one argument
|
|
83
|
+
if (subjects.length > 1) {
|
|
84
|
+
return tuple(...subjects);
|
|
85
|
+
}
|
|
86
|
+
// Otherwise a single param is either a tuple or a struct
|
|
87
|
+
const singleParam = subjects[0];
|
|
88
|
+
if (Array.isArray(singleParam)) {
|
|
89
|
+
return tuple(...singleParam);
|
|
90
|
+
}
|
|
91
|
+
return struct(singleParam);
|
|
63
92
|
}
|
|
64
93
|
RefSubject.all = all;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this.i0 = i0;
|
|
79
|
-
this.i1 = i1;
|
|
80
|
-
this._tag = 'Commit';
|
|
81
|
-
this.i2 = undefined;
|
|
82
|
-
this.trace = undefined;
|
|
83
|
-
this[_a] = refSubjectVariant;
|
|
84
|
-
this[_b] = exports.RefSubjectTypeId;
|
|
85
|
-
this.lock = Effect.unsafeMakeSemaphore(1).withPermits(1);
|
|
86
|
-
this.initializeFiber = MutableRef.make(Option.none());
|
|
87
|
-
this.event = (0, Debug_1.methodWithTrace)((trace) => (a) => Effect.catchAllCause(this.set(a), this.error).traced(trace));
|
|
88
|
-
this.end = (0, Debug_1.methodWithTrace)((trace) => () => Effect.suspend(() => Effect.zipPar(this.interruptFibers(), this.interruptInitializeFiber())).traced(trace));
|
|
89
|
-
this.get = Effect.suspend(() => (0, Function_1.pipe)(MutableRef.get(this.current), Option.match(() => (0, Function_1.pipe)(MutableRef.get(this.initializeFiber), Option.match(() => this.lock(Effect.uninterruptibleMask((restore) => (0, Function_1.pipe)(Effect.forkDaemon(restore(this.i0)), Effect.tap((fiber) => Effect.sync(() => MutableRef.set(this.initializeFiber, Option.some(fiber)))), Effect.flatMap(Fiber.join), Effect.tap((a) => Effect.suspend(() => {
|
|
90
|
-
MutableRef.set(this.current, Option.some(a));
|
|
91
|
-
MutableRef.set(this.initializeFiber, Option.none());
|
|
92
|
-
return super.event(a);
|
|
93
|
-
}))))), Fiber.join)), Effect.succeed)));
|
|
94
|
-
this.modify = (f) => this.modifyEffect((a) => Effect.sync(() => f(a)));
|
|
95
|
-
this.updateEffect = (f) => this.modifyEffect((a) => Effect.map(f(a), (a) => [a, a]));
|
|
96
|
-
this.update = (f) => this.updateEffect((a) => Effect.sync(() => f(a)));
|
|
97
|
-
this.set = (a) => this.update(() => a);
|
|
98
|
-
this.delete = Effect.suspend(() => {
|
|
99
|
-
const current = MutableRef.get(this.current);
|
|
100
|
-
if (Option.isSome(current)) {
|
|
101
|
-
MutableRef.set(this.current, Option.none());
|
|
102
|
-
}
|
|
103
|
-
return Effect.succeed(current);
|
|
104
|
-
});
|
|
105
|
-
this.mapEffect = (f) => new ComputedImpl(this, f);
|
|
106
|
-
this.map = (f) => this.mapEffect((a) => Effect.sync(() => f(a)));
|
|
107
|
-
this.modifyEffect = this.modifyEffect.bind(this);
|
|
108
|
-
this.eq = i1;
|
|
109
|
-
}
|
|
110
|
-
run(sink) {
|
|
111
|
-
return Effect.suspend(() => {
|
|
112
|
-
const current = MutableRef.get(this.current);
|
|
113
|
-
if (Option.isNone(current)) {
|
|
114
|
-
return (0, Function_1.pipe)(this.get, Effect.catchAllCause(sink.error), Effect.flatMap(() => super.run(sink)));
|
|
115
|
-
}
|
|
116
|
-
return super.run(sink);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
interruptFibers() {
|
|
120
|
-
return this.fiber ? Fiber.interrupt(this.fiber) : Effect.unit();
|
|
121
|
-
}
|
|
122
|
-
interruptInitializeFiber() {
|
|
123
|
-
const fiber = MutableRef.get(this.initializeFiber);
|
|
94
|
+
})(RefSubject || (exports.RefSubject = RefSubject = {}));
|
|
95
|
+
function isRefSubject(u) {
|
|
96
|
+
return (0, Fx_js_1.isFx)(u) && exports.RefSubjectTypeId in u;
|
|
97
|
+
}
|
|
98
|
+
exports.isRefSubject = isRefSubject;
|
|
99
|
+
// Internals for RefSubject
|
|
100
|
+
function makeGetFromContext(ctx) {
|
|
101
|
+
return Effect.suspend(() => {
|
|
102
|
+
const current = MutableRef.get(ctx.currentRef);
|
|
103
|
+
if (Option.isSome(current)) {
|
|
104
|
+
return Effect.succeed(current.value);
|
|
105
|
+
}
|
|
106
|
+
const fiber = MutableRef.get(ctx.initializingFiberRef);
|
|
124
107
|
if (Option.isSome(fiber)) {
|
|
125
|
-
return Fiber.
|
|
108
|
+
return Fiber.join(fiber.value);
|
|
126
109
|
}
|
|
127
|
-
return Effect.
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
110
|
+
return Effect.tap(ctx.lock(initializeFromContext(ctx)), (a) => ctx.hold.event(a));
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function initializeFromContext(ctx) {
|
|
114
|
+
return Effect.uninterruptibleMask((restore) => Effect.flatMap(Effect.forkIn(restore(ctx.initial), ctx.scope), (fiber) => {
|
|
115
|
+
MutableRef.set(ctx.initializingFiberRef, Option.some(fiber));
|
|
116
|
+
return Effect.tap(Fiber.join(fiber), (a) => Effect.sync(() => {
|
|
117
|
+
MutableRef.increment(ctx.version);
|
|
118
|
+
MutableRef.set(ctx.currentRef, Option.some(a));
|
|
119
|
+
MutableRef.set(ctx.initializingFiberRef, Option.none());
|
|
120
|
+
}));
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
function makeRefMethods(primitive) {
|
|
124
|
+
const modify = makeModify(primitive.modifyEffect);
|
|
125
|
+
const updateEffect = makeUpdateEffect(primitive.modifyEffect);
|
|
126
|
+
const update = makeUpdate(updateEffect);
|
|
127
|
+
return {
|
|
128
|
+
modify,
|
|
129
|
+
updateEffect,
|
|
130
|
+
update,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function makeModifyEffectFromContext(get, ctx) {
|
|
134
|
+
return (f) => Effect.flatMap(get, (a1) => ctx.lock(Effect.flatMap(f(a1), ([b, a2]) => Effect.suspend(() => {
|
|
135
|
+
MutableRef.set(ctx.currentRef, Option.some(a2));
|
|
136
|
+
if (ctx.eq(a1, a2)) {
|
|
137
|
+
return Effect.succeed(b);
|
|
138
|
+
}
|
|
139
|
+
MutableRef.increment(ctx.version);
|
|
140
|
+
return Effect.as(ctx.hold.event(a2), b);
|
|
141
|
+
}))));
|
|
142
|
+
}
|
|
143
|
+
function makeModify(modifyEffect) {
|
|
144
|
+
return (f) => modifyEffect((a) => Effect.sync(() => f(a)));
|
|
145
|
+
}
|
|
146
|
+
function makeUpdateEffect(modifyEffect) {
|
|
147
|
+
return (f) => modifyEffect((a) => Effect.map(f(a), (a) => [a, a]));
|
|
148
|
+
}
|
|
149
|
+
function makeUpdate(updateEffect) {
|
|
150
|
+
return (f) => updateEffect((a) => Effect.sync(() => f(a)));
|
|
151
|
+
}
|
|
152
|
+
function makeSetFromContext(ctx) {
|
|
153
|
+
return (a) => Effect.suspend(() => {
|
|
154
|
+
const fiber = MutableRef.get(ctx.initializingFiberRef);
|
|
155
|
+
return (0, Function_1.pipe)(fiber, Option.match({ onNone: () => Effect.unit, onSome: Fiber.await }),
|
|
156
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
157
|
+
Effect.flatMap((_) => {
|
|
158
|
+
const current = MutableRef.get(ctx.currentRef);
|
|
159
|
+
MutableRef.set(ctx.currentRef, Option.some(a));
|
|
160
|
+
// Only emit if the value has changed
|
|
161
|
+
if (Option.isNone(current) || (Option.isSome(current) && !ctx.eq(current.value, a))) {
|
|
162
|
+
// Increment the version
|
|
163
|
+
MutableRef.increment(ctx.version);
|
|
164
|
+
return Effect.as(ctx.hold.event(a), a);
|
|
134
165
|
}
|
|
135
|
-
return Effect.
|
|
136
|
-
}))
|
|
137
|
-
}
|
|
138
|
-
|
|
166
|
+
return Effect.succeed(a);
|
|
167
|
+
}));
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function makeDeleteFromContext(ctx) {
|
|
171
|
+
return Effect.sync(() => {
|
|
172
|
+
const current = MutableRef.get(ctx.currentRef);
|
|
173
|
+
if (Option.isSome(current)) {
|
|
174
|
+
MutableRef.set(ctx.version, 0);
|
|
175
|
+
MutableRef.set(ctx.currentRef, Option.none());
|
|
176
|
+
}
|
|
177
|
+
return current;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function makeEndFromContext(ctx) {
|
|
181
|
+
return () => Effect.suspend(() => {
|
|
182
|
+
MutableRef.set(ctx.version, 0);
|
|
183
|
+
const fibers = [
|
|
184
|
+
ctx.hold.fiber || Fiber.unit,
|
|
185
|
+
Option.getOrElse(MutableRef.get(ctx.initializingFiberRef), () => Fiber.unit),
|
|
186
|
+
];
|
|
187
|
+
return Fiber.interruptAll(fibers);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function makeFiltered(f) {
|
|
191
|
+
const get = makeMemoizedGet(f);
|
|
192
|
+
function filterMapEffect(f) {
|
|
193
|
+
return new Filtered_js_1.FilteredImpl(get(), f);
|
|
194
|
+
}
|
|
195
|
+
function filterMap(f) {
|
|
196
|
+
return filterMapEffect((a) => Effect.sync(() => f(a)));
|
|
197
|
+
}
|
|
198
|
+
function filterEffect(f) {
|
|
199
|
+
return filterMapEffect((a) => Effect.map(f(a), (b) => (b ? Option.some(a) : Option.none())));
|
|
200
|
+
}
|
|
201
|
+
function filter(f) {
|
|
202
|
+
return filterEffect((a) => Effect.sync(() => f(a)));
|
|
203
|
+
}
|
|
204
|
+
function filterNotEffect(f) {
|
|
205
|
+
return filterEffect((a) => Effect.map(f(a), (b) => !b));
|
|
206
|
+
}
|
|
207
|
+
function filterNot(f) {
|
|
208
|
+
return filterNotEffect((a) => Effect.sync(() => f(a)));
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
filterMapEffect,
|
|
212
|
+
filterMap,
|
|
213
|
+
filterEffect,
|
|
214
|
+
filter,
|
|
215
|
+
filterNotEffect,
|
|
216
|
+
filterNot,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function makeComputedMethods(f) {
|
|
220
|
+
const get = makeMemoizedGet(f);
|
|
221
|
+
function mapEffect(f) {
|
|
222
|
+
return new Computed_js_1.ComputedImpl(get(), f);
|
|
223
|
+
}
|
|
224
|
+
function map(f) {
|
|
225
|
+
return mapEffect((a) => Effect.sync(() => f(a)));
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
mapEffect,
|
|
229
|
+
map,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function makeTransformMethods(f) {
|
|
233
|
+
const get = makeMemoizedGet(f);
|
|
234
|
+
function transformBoth(f, g) {
|
|
235
|
+
return new RefTransform_js_1.RefTransformImpl(get(), f, g);
|
|
236
|
+
}
|
|
237
|
+
function transform(f) {
|
|
238
|
+
return transformBoth(f, Function_1.identity);
|
|
239
|
+
}
|
|
240
|
+
function transformGet(f) {
|
|
241
|
+
return transformBoth(Function_1.identity, f);
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
transformBoth,
|
|
245
|
+
transform,
|
|
246
|
+
transformGet,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const placeholders = {
|
|
250
|
+
_tag: 'Commit',
|
|
251
|
+
[Effect.EffectTypeId]: refVariance,
|
|
252
|
+
i0: undefined,
|
|
253
|
+
i1: undefined,
|
|
254
|
+
i2: undefined,
|
|
255
|
+
[Equal.symbol](that) {
|
|
139
256
|
return this === that;
|
|
140
|
-
}
|
|
257
|
+
},
|
|
141
258
|
[Hash.symbol]() {
|
|
142
259
|
return Hash.random(this);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
260
|
+
},
|
|
261
|
+
pipe() {
|
|
262
|
+
// eslint-disable-next-line prefer-rest-params
|
|
263
|
+
return (0, Pipeable_1.pipeArguments)(this, arguments);
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
function makeEffectMethods(get) {
|
|
267
|
+
return Object.assign({
|
|
268
|
+
commit() {
|
|
269
|
+
return get;
|
|
270
|
+
},
|
|
271
|
+
}, placeholders);
|
|
272
|
+
}
|
|
273
|
+
function makeMemoizedGet(f) {
|
|
274
|
+
let memoized = Option.none();
|
|
275
|
+
return () => {
|
|
276
|
+
if (Option.isNone(memoized)) {
|
|
277
|
+
memoized = Option.some(f());
|
|
149
278
|
}
|
|
150
|
-
return
|
|
151
|
-
}
|
|
152
|
-
commit() {
|
|
153
|
-
return this.get.traced(this.trace);
|
|
154
|
-
}
|
|
279
|
+
return memoized.value;
|
|
280
|
+
};
|
|
155
281
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
282
|
+
function makeRefSubjectContext(initial, scope, eq) {
|
|
283
|
+
const hold = new hold_js_1.HoldFx((0, never_js_1.never)());
|
|
284
|
+
const ctx = {
|
|
285
|
+
initial,
|
|
286
|
+
currentRef: hold.current,
|
|
287
|
+
initializingFiberRef: MutableRef.make(Option.none()),
|
|
288
|
+
lock: Effect.unsafeMakeSemaphore(1).withPermits(1),
|
|
289
|
+
scope,
|
|
290
|
+
eq,
|
|
291
|
+
hold,
|
|
292
|
+
version: MutableRef.make(0),
|
|
293
|
+
};
|
|
294
|
+
return ctx;
|
|
295
|
+
}
|
|
296
|
+
function unsafeMakeRefPrimitive(initial, scope, eq) {
|
|
297
|
+
const ctx = makeRefSubjectContext(initial, scope, eq);
|
|
298
|
+
const get = makeGetFromContext(ctx);
|
|
299
|
+
const set = makeSetFromContext(ctx);
|
|
300
|
+
function run(sink) {
|
|
301
|
+
return Effect.suspend(() => {
|
|
302
|
+
const current = MutableRef.get(ctx.hold.current);
|
|
303
|
+
if (Option.isNone(current)) {
|
|
304
|
+
return (0, Function_1.pipe)(primitive.get, Effect.catchAllCause(sink.error), Effect.flatMap(() => ctx.hold.run(sink)));
|
|
175
305
|
}
|
|
176
|
-
return
|
|
306
|
+
return ctx.hold.run(sink);
|
|
177
307
|
});
|
|
178
|
-
this.mapEffect = (f) => new ComputedImpl(this, f);
|
|
179
|
-
this.map = (f) => this.mapEffect((a) => Effect.sync(() => f(a)));
|
|
180
|
-
this.i1 = this.eq = Equivalence.tuple(...i0.map((s) => s.eq));
|
|
181
|
-
}
|
|
182
|
-
end() {
|
|
183
|
-
return Effect.allPar(this.i0.map((s) => s.end()));
|
|
184
|
-
}
|
|
185
|
-
modifyEffect(f) {
|
|
186
|
-
const { current, i0 } = this;
|
|
187
|
-
return (0, Function_1.pipe)(this.get, Effect.flatMap((a) => this.lock(Effect.gen(function* ($) {
|
|
188
|
-
const [b, a2] = yield* $(f(a));
|
|
189
|
-
MutableRef.set(current, Option.some(a2));
|
|
190
|
-
yield* $(Effect.allPar(i0.map((s, i) => s.set(a2[i]))));
|
|
191
|
-
return b;
|
|
192
|
-
}))));
|
|
193
|
-
}
|
|
194
|
-
[(_c = Effect.EffectTypeId, _d = exports.RefSubjectTypeId, Equal.symbol)](that) {
|
|
195
|
-
return this === that;
|
|
196
|
-
}
|
|
197
|
-
[Hash.symbol]() {
|
|
198
|
-
return Hash.random(this);
|
|
199
|
-
}
|
|
200
|
-
traced(trace) {
|
|
201
|
-
if (trace) {
|
|
202
|
-
const traced = new TupleRefSubjectImpl(this.i0);
|
|
203
|
-
traced.trace = trace;
|
|
204
|
-
return traced;
|
|
205
|
-
}
|
|
206
|
-
return this;
|
|
207
|
-
}
|
|
208
|
-
commit() {
|
|
209
|
-
return this.get.traced(this.trace);
|
|
210
308
|
}
|
|
309
|
+
const primitive = {
|
|
310
|
+
delete: makeDeleteFromContext(ctx),
|
|
311
|
+
end: makeEndFromContext(ctx),
|
|
312
|
+
eq,
|
|
313
|
+
error: (cause) => ctx.hold.error(cause),
|
|
314
|
+
event: set,
|
|
315
|
+
get,
|
|
316
|
+
modifyEffect: makeModifyEffectFromContext(get, ctx),
|
|
317
|
+
run,
|
|
318
|
+
set,
|
|
319
|
+
version: ctx.version,
|
|
320
|
+
};
|
|
321
|
+
return primitive;
|
|
322
|
+
}
|
|
323
|
+
function makeRefFromPrimitive(primitive) {
|
|
324
|
+
const ref = {
|
|
325
|
+
[Fx_js_1.FxTypeId]: refVariance,
|
|
326
|
+
[exports.RefSubjectTypeId]: exports.RefSubjectTypeId,
|
|
327
|
+
[Computed_js_1.ComputedTypeId]: Computed_js_1.ComputedTypeId,
|
|
328
|
+
...primitive,
|
|
329
|
+
...makeRefMethods(primitive),
|
|
330
|
+
...makeEffectMethods(primitive.get),
|
|
331
|
+
...makeFiltered(() => ref),
|
|
332
|
+
...makeComputedMethods(() => ref),
|
|
333
|
+
...makeTransformMethods(() => ref),
|
|
334
|
+
version() {
|
|
335
|
+
return MutableRef.get(primitive.version);
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
return ref;
|
|
211
339
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
340
|
+
// Internals for RefSubject.tuple
|
|
341
|
+
function tupleRefPrimitive(refs) {
|
|
342
|
+
const hold = new hold_js_1.HoldFx((0, combineAll_js_1.combineAll)(...refs));
|
|
343
|
+
const eq = Equivalence.tuple(...refs.map((ref) => ref.eq));
|
|
344
|
+
const get = Effect.all(refs.map((ref) => ref.get), unboundedConcurrency);
|
|
345
|
+
const primitive = {
|
|
346
|
+
delete: Effect.map(Effect.all(refs.map((ref) => ref.delete), { concurrency: 'unbounded' }), (values) => Option.all(values)),
|
|
347
|
+
end: () => Effect.all(refs.map((ref) => ref.end()), unboundedConcurrency),
|
|
348
|
+
eq,
|
|
349
|
+
error: (error) => hold.error(error),
|
|
350
|
+
event: (value) => Effect.all(value.map((v, i) => refs[i].event(v)), unboundedConcurrency),
|
|
351
|
+
get,
|
|
352
|
+
modifyEffect: makeModifyEffectTuple(refs, get, eq),
|
|
353
|
+
run: (sink) => hold.run(sink),
|
|
354
|
+
set: (value) => Effect.all(value.map((v, i) => refs[i].set(v)), unboundedConcurrency),
|
|
355
|
+
version: MutableRef.make(0),
|
|
356
|
+
};
|
|
357
|
+
return primitive;
|
|
358
|
+
}
|
|
359
|
+
function makeModifyEffectTuple(refs, get, eq) {
|
|
360
|
+
return (f) => {
|
|
361
|
+
return Effect.gen(function* ($) {
|
|
362
|
+
const current = yield* $(get);
|
|
363
|
+
const [b, a] = yield* $(f(current));
|
|
364
|
+
if (eq(a, current)) {
|
|
365
|
+
return b;
|
|
231
366
|
}
|
|
232
|
-
|
|
367
|
+
yield* $(Effect.all(refs.map((ref, i) => ref.set(a[i])), unboundedConcurrency));
|
|
368
|
+
return b;
|
|
233
369
|
});
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
function structRefPrimitive(refs) {
|
|
373
|
+
const hold = new hold_js_1.HoldFx((0, struct_js_1.struct)(refs));
|
|
374
|
+
const eq = Equivalence.struct(mapRecord(refs, (ref) => ref.eq));
|
|
375
|
+
const get = Effect.all(mapRecord(refs, (ref) => ref.get), unboundedConcurrency);
|
|
376
|
+
const primitive = {
|
|
377
|
+
delete: Effect.map(Effect.all(mapRecord(refs, (ref) => ref.delete), unboundedConcurrency), (values) => Option.all(values)),
|
|
378
|
+
end: () => Effect.all(mapRecord(refs, (ref) => ref.end()), unboundedConcurrency),
|
|
379
|
+
eq,
|
|
380
|
+
error: (error) => hold.error(error),
|
|
381
|
+
event: (value) => Effect.all(mapRecord(value, (v, i) => refs[i].event(v)), unboundedConcurrency),
|
|
382
|
+
get,
|
|
383
|
+
modifyEffect: makeModifyEffectStruct(refs, get, eq),
|
|
384
|
+
run: (sink) => hold.run(sink),
|
|
385
|
+
set: (value) => Effect.all(mapRecord(value, (v, i) => refs[i].set(v)), unboundedConcurrency),
|
|
386
|
+
version: MutableRef.make(0),
|
|
387
|
+
};
|
|
388
|
+
return primitive;
|
|
389
|
+
}
|
|
390
|
+
function makeModifyEffectStruct(refs, get, eq) {
|
|
391
|
+
return (f) => {
|
|
392
|
+
return Effect.gen(function* ($) {
|
|
393
|
+
const current = yield* $(get);
|
|
394
|
+
const [b, a] = yield* $(f(current));
|
|
395
|
+
if (eq(a, current)) {
|
|
396
|
+
return b;
|
|
397
|
+
}
|
|
398
|
+
yield* $(Effect.all(mapRecord(refs, (ref, i) => ref.set(a[i])), unboundedConcurrency));
|
|
247
399
|
return b;
|
|
248
|
-
})
|
|
249
|
-
}
|
|
250
|
-
[(_e = Effect.EffectTypeId, _f = exports.RefSubjectTypeId, Equal.symbol)](that) {
|
|
251
|
-
return this === that;
|
|
252
|
-
}
|
|
253
|
-
[Hash.symbol]() {
|
|
254
|
-
return Hash.random(this);
|
|
255
|
-
}
|
|
256
|
-
traced(trace) {
|
|
257
|
-
if (trace) {
|
|
258
|
-
const traced = new StructRefSubjectImpl(this.i0);
|
|
259
|
-
traced.trace = trace;
|
|
260
|
-
return traced;
|
|
261
|
-
}
|
|
262
|
-
return this;
|
|
263
|
-
}
|
|
264
|
-
commit() {
|
|
265
|
-
return this.get.traced(this.trace);
|
|
266
|
-
}
|
|
400
|
+
});
|
|
401
|
+
};
|
|
267
402
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
this[_g] = {
|
|
273
|
-
_R: Function_1.identity,
|
|
274
|
-
_E: Function_1.identity,
|
|
275
|
-
_A: Function_1.identity,
|
|
276
|
-
};
|
|
277
|
-
this._tag = 'Commit';
|
|
278
|
-
this.trace = undefined;
|
|
279
|
-
this[_h] = refSubjectVariant;
|
|
280
|
-
this[_j] = exports.RefSubjectTypeId;
|
|
281
|
-
this.get = Effect.flatMap(this.i0.get, this.i1);
|
|
282
|
-
this.mapEffect = (f) => new ComputedImpl(this.i0, (a) => Effect.flatMap(this.i1(a), f));
|
|
283
|
-
this.map = (f) => this.mapEffect((a) => Effect.sync(() => f(a)));
|
|
284
|
-
// Create a stable reference to derived Fx
|
|
285
|
-
this.i2 = (0, multicast_js_1.multicast)((0, switchMap_js_1.switchMapEffect)(this.i0, this.i1));
|
|
286
|
-
}
|
|
287
|
-
run(sink) {
|
|
288
|
-
return this.i2.run(sink);
|
|
289
|
-
}
|
|
290
|
-
addTrace(trace) {
|
|
291
|
-
return (0, Fx_js_1.Traced)(this, trace);
|
|
292
|
-
}
|
|
293
|
-
[(_g = Fx_js_1.FxTypeId, _h = Effect.EffectTypeId, _j = exports.RefSubjectTypeId, Equal.symbol)](that) {
|
|
294
|
-
return this === that;
|
|
295
|
-
}
|
|
296
|
-
[Hash.symbol]() {
|
|
297
|
-
return Hash.random(this);
|
|
298
|
-
}
|
|
299
|
-
traced(trace) {
|
|
300
|
-
if (trace) {
|
|
301
|
-
const traced = new ComputedImpl(this.i0, this.i1);
|
|
302
|
-
traced.trace = trace;
|
|
303
|
-
return traced;
|
|
304
|
-
}
|
|
305
|
-
return this;
|
|
306
|
-
}
|
|
307
|
-
commit() {
|
|
308
|
-
return this.get.traced(this.trace);
|
|
403
|
+
function mapRecord(record, f) {
|
|
404
|
+
const result = {};
|
|
405
|
+
for (const k in record) {
|
|
406
|
+
result[k] = f(record[k], k);
|
|
309
407
|
}
|
|
408
|
+
return result;
|
|
310
409
|
}
|
|
311
|
-
function
|
|
312
|
-
return (
|
|
410
|
+
function asRef(fx) {
|
|
411
|
+
return Effect.flatMap(Deferred.make(), (deferred) => Effect.flatMap(makeRef(Deferred.await(deferred)), (ref) => {
|
|
412
|
+
const onValue = (value) => Effect.flatMap(Deferred.succeed(deferred, value), (closed) => closed ? Effect.unit : ref.set(value));
|
|
413
|
+
return Effect.as(Effect.forkScoped(Effect.catchAllCause((0, observe_js_1.drain)((0, switchMatch_js_1.switchMatchCauseEffect)(fx, ref.error, onValue)), ref.error)), ref);
|
|
414
|
+
}));
|
|
415
|
+
return Effect.gen(function* ($) {
|
|
416
|
+
const deferred = yield* $(Deferred.make());
|
|
417
|
+
const ref = yield* $(makeRef(Deferred.await(deferred)));
|
|
418
|
+
const onValue = (value) => Effect.flatMap(Deferred.succeed(deferred, value), (closed) => closed ? Effect.unit : ref.set(value));
|
|
419
|
+
yield* $((0, switchMatch_js_1.switchMatchCauseEffect)(fx, ref.error, onValue), observe_js_1.drain, Effect.catchAllCause(ref.error), Effect.forkScoped);
|
|
420
|
+
return ref;
|
|
421
|
+
});
|
|
313
422
|
}
|
|
314
|
-
exports.
|
|
423
|
+
exports.asRef = asRef;
|
|
315
424
|
//# sourceMappingURL=RefSubject.js.map
|