@typed/fx 1.18.4 → 1.20.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/AsyncData/package.json +6 -0
- package/Emitter/package.json +6 -0
- package/Form/package.json +6 -0
- package/FormEntry/package.json +6 -0
- package/Fx/package.json +6 -0
- package/Guard/package.json +6 -0
- package/Idle/package.json +6 -0
- package/Match/package.json +6 -0
- package/Pull/package.json +6 -0
- package/Push/package.json +6 -0
- package/RefArray/package.json +6 -0
- package/RefChunk/package.json +6 -0
- package/RefHashMap/package.json +6 -0
- package/RefHashSet/package.json +6 -0
- package/RefSubject/package.json +6 -0
- package/Sink/package.json +6 -0
- package/Stream/package.json +6 -0
- package/Subject/package.json +6 -0
- package/TypeId/package.json +6 -0
- package/Typeclass/package.json +6 -0
- package/Versioned/package.json +6 -0
- package/dist/cjs/AsyncData.js +177 -0
- package/dist/cjs/AsyncData.js.map +1 -0
- package/dist/cjs/Emitter.js +24 -21
- package/dist/cjs/Emitter.js.map +1 -1
- package/dist/cjs/Form.js +78 -21
- package/dist/cjs/Form.js.map +1 -1
- package/dist/cjs/FormEntry.js +75 -48
- package/dist/cjs/FormEntry.js.map +1 -1
- package/dist/cjs/Fx.js +517 -872
- package/dist/cjs/Fx.js.map +1 -1
- package/dist/cjs/Guard.js +21 -13
- package/dist/cjs/Guard.js.map +1 -1
- package/dist/cjs/Idle.js +49 -37
- package/dist/cjs/Idle.js.map +1 -1
- package/dist/cjs/Match.js +99 -61
- package/dist/cjs/Match.js.map +1 -1
- package/dist/cjs/Pull.js.map +1 -1
- package/dist/cjs/Push.js +168 -0
- package/dist/cjs/Push.js.map +1 -0
- package/dist/cjs/RefArray.js +32 -30
- package/dist/cjs/RefArray.js.map +1 -1
- package/dist/cjs/RefChunk.js +26 -24
- package/dist/cjs/RefChunk.js.map +1 -1
- package/dist/cjs/RefHashMap.js +20 -20
- package/dist/cjs/RefHashMap.js.map +1 -1
- package/dist/cjs/RefHashSet.js +11 -8
- package/dist/cjs/RefHashSet.js.map +1 -1
- package/dist/cjs/RefSubject.js +899 -158
- package/dist/cjs/RefSubject.js.map +1 -1
- package/dist/cjs/Sink.js +588 -62
- package/dist/cjs/Sink.js.map +1 -1
- package/dist/cjs/Stream.js +15 -10
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/Subject.js +153 -55
- package/dist/cjs/Subject.js.map +1 -1
- package/dist/cjs/TypeId.js +10 -5
- package/dist/cjs/TypeId.js.map +1 -1
- package/dist/cjs/Typeclass.js +28 -31
- package/dist/cjs/Typeclass.js.map +1 -1
- package/dist/cjs/Versioned.js +118 -57
- package/dist/cjs/Versioned.js.map +1 -1
- package/dist/cjs/index.js +44 -8
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/{deferred-ref.js → DeferredRef.js} +45 -13
- package/dist/cjs/internal/DeferredRef.js.map +1 -0
- package/dist/cjs/internal/UnionToTuple.js +6 -0
- package/dist/cjs/internal/UnionToTuple.js.map +1 -0
- package/dist/cjs/internal/core.js +1590 -779
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/diff.js +114 -0
- package/dist/cjs/internal/diff.js.map +1 -0
- package/dist/cjs/internal/effect-loop-operator.js +288 -0
- package/dist/cjs/internal/effect-loop-operator.js.map +1 -0
- package/dist/cjs/internal/effect-operator.js +46 -37
- package/dist/cjs/internal/effect-operator.js.map +1 -1
- package/dist/cjs/internal/effect-producer.js +74 -0
- package/dist/cjs/internal/effect-producer.js.map +1 -0
- package/dist/cjs/internal/helpers.js +158 -128
- package/dist/cjs/internal/helpers.js.map +1 -1
- package/dist/cjs/internal/keyed.js +136 -173
- package/dist/cjs/internal/keyed.js.map +1 -1
- package/dist/cjs/internal/loop-operator.js +213 -0
- package/dist/cjs/internal/loop-operator.js.map +1 -0
- package/dist/cjs/internal/operator.js +79 -0
- package/dist/cjs/internal/operator.js.map +1 -0
- package/dist/cjs/internal/protos.js +19 -81
- package/dist/cjs/internal/protos.js.map +1 -1
- package/dist/cjs/internal/provide.js +47 -25
- package/dist/cjs/internal/provide.js.map +1 -1
- package/dist/cjs/internal/requestIdleCallback.js +5 -5
- package/dist/cjs/internal/requestIdleCallback.js.map +1 -1
- package/dist/cjs/internal/share.js +12 -15
- package/dist/cjs/internal/share.js.map +1 -1
- package/dist/cjs/internal/sync-operator.js +50 -22
- package/dist/cjs/internal/sync-operator.js.map +1 -1
- package/dist/cjs/internal/sync-producer.js +114 -0
- package/dist/cjs/internal/sync-producer.js.map +1 -0
- package/dist/cjs/internal/withKey.js +45 -51
- package/dist/cjs/internal/withKey.js.map +1 -1
- package/dist/dts/AsyncData.d.ts +185 -0
- package/dist/dts/AsyncData.d.ts.map +1 -0
- package/dist/dts/Emitter.d.ts +13 -20
- package/dist/dts/Emitter.d.ts.map +1 -1
- package/dist/dts/Form.d.ts +45 -28
- package/dist/dts/Form.d.ts.map +1 -1
- package/dist/dts/FormEntry.d.ts +25 -13
- package/dist/dts/FormEntry.d.ts.map +1 -1
- package/dist/dts/Fx.d.ts +983 -1387
- package/dist/dts/Fx.d.ts.map +1 -1
- package/dist/dts/Guard.d.ts +8 -1
- package/dist/dts/Guard.d.ts.map +1 -1
- package/dist/dts/Idle.d.ts +3 -3
- package/dist/dts/Idle.d.ts.map +1 -1
- package/dist/dts/Match.d.ts +8 -8
- package/dist/dts/Match.d.ts.map +1 -1
- package/dist/dts/Pull.d.ts +5 -5
- package/dist/dts/Pull.d.ts.map +1 -1
- package/dist/dts/Push.d.ts +170 -0
- package/dist/dts/Push.d.ts.map +1 -0
- package/dist/dts/RefArray.d.ts +21 -23
- package/dist/dts/RefArray.d.ts.map +1 -1
- package/dist/dts/RefChunk.d.ts +17 -19
- package/dist/dts/RefChunk.d.ts.map +1 -1
- package/dist/dts/RefHashMap.d.ts +19 -20
- package/dist/dts/RefHashMap.d.ts.map +1 -1
- package/dist/dts/RefHashSet.d.ts +12 -16
- package/dist/dts/RefHashSet.d.ts.map +1 -1
- package/dist/dts/RefSubject.d.ts +396 -187
- package/dist/dts/RefSubject.d.ts.map +1 -1
- package/dist/dts/Sink.d.ts +193 -93
- package/dist/dts/Sink.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +7 -1
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/Subject.d.ts +27 -36
- package/dist/dts/Subject.d.ts.map +1 -1
- package/dist/dts/TypeId.d.ts +10 -0
- package/dist/dts/TypeId.d.ts.map +1 -1
- package/dist/dts/Typeclass.d.ts +2 -2
- package/dist/dts/Typeclass.d.ts.map +1 -1
- package/dist/dts/Versioned.d.ts +50 -78
- package/dist/dts/Versioned.d.ts.map +1 -1
- package/dist/dts/index.d.ts +66 -6
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/DeferredRef.d.ts +20 -0
- package/dist/dts/internal/DeferredRef.d.ts.map +1 -0
- package/dist/dts/internal/UnionToTuple.d.ts +6 -0
- package/dist/dts/internal/UnionToTuple.d.ts.map +1 -0
- package/dist/dts/internal/core.d.ts +218 -450
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/diff.d.ts +38 -0
- package/dist/dts/internal/diff.d.ts.map +1 -0
- package/dist/dts/internal/effect-loop-operator.d.ts +34 -0
- package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -0
- package/dist/dts/internal/effect-operator.d.ts +8 -5
- package/dist/dts/internal/effect-operator.d.ts.map +1 -1
- package/dist/dts/internal/effect-producer.d.ts +25 -0
- package/dist/dts/internal/effect-producer.d.ts.map +1 -0
- package/dist/dts/internal/helpers.d.ts +33 -24
- package/dist/dts/internal/helpers.d.ts.map +1 -1
- package/dist/dts/internal/keyed.d.ts +3 -3
- package/dist/dts/internal/keyed.d.ts.map +1 -1
- package/dist/dts/internal/loop-operator.d.ts +40 -0
- package/dist/dts/internal/loop-operator.d.ts.map +1 -0
- package/dist/dts/internal/operator.d.ts +16 -0
- package/dist/dts/internal/operator.d.ts.map +1 -0
- package/dist/dts/internal/protos.d.ts +16 -43
- package/dist/dts/internal/protos.d.ts.map +1 -1
- package/dist/dts/internal/provide.d.ts +7 -1
- package/dist/dts/internal/provide.d.ts.map +1 -1
- package/dist/dts/internal/share.d.ts +12 -9
- package/dist/dts/internal/share.d.ts.map +1 -1
- package/dist/dts/internal/sync-operator.d.ts +7 -3
- package/dist/dts/internal/sync-operator.d.ts.map +1 -1
- package/dist/dts/internal/sync-producer.d.ts +36 -0
- package/dist/dts/internal/sync-producer.d.ts.map +1 -0
- package/dist/dts/internal/withKey.d.ts +3 -3
- package/dist/dts/internal/withKey.d.ts.map +1 -1
- package/dist/esm/AsyncData.js +151 -0
- package/dist/esm/AsyncData.js.map +1 -0
- package/dist/esm/Emitter.js +24 -21
- package/dist/esm/Emitter.js.map +1 -1
- package/dist/esm/Form.js +69 -14
- package/dist/esm/Form.js.map +1 -1
- package/dist/esm/FormEntry.js +77 -52
- package/dist/esm/FormEntry.js.map +1 -1
- package/dist/esm/Fx.js +509 -874
- package/dist/esm/Fx.js.map +1 -1
- package/dist/esm/Guard.js +5 -1
- package/dist/esm/Guard.js.map +1 -1
- package/dist/esm/Idle.js +49 -39
- package/dist/esm/Idle.js.map +1 -1
- package/dist/esm/Match.js +103 -63
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Pull.js.map +1 -1
- package/dist/esm/Push.js +159 -0
- package/dist/esm/Push.js.map +1 -0
- package/dist/esm/RefArray.js +32 -30
- package/dist/esm/RefArray.js.map +1 -1
- package/dist/esm/RefChunk.js +26 -24
- package/dist/esm/RefChunk.js.map +1 -1
- package/dist/esm/RefHashMap.js +20 -20
- package/dist/esm/RefHashMap.js.map +1 -1
- package/dist/esm/RefHashSet.js +11 -8
- package/dist/esm/RefHashSet.js.map +1 -1
- package/dist/esm/RefSubject.js +873 -150
- package/dist/esm/RefSubject.js.map +1 -1
- package/dist/esm/Sink.js +608 -57
- package/dist/esm/Sink.js.map +1 -1
- package/dist/esm/Stream.js +13 -9
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/Subject.js +151 -56
- package/dist/esm/Subject.js.map +1 -1
- package/dist/esm/TypeId.js +9 -4
- package/dist/esm/TypeId.js.map +1 -1
- package/dist/esm/Typeclass.js +29 -29
- package/dist/esm/Typeclass.js.map +1 -1
- package/dist/esm/Versioned.js +110 -53
- package/dist/esm/Versioned.js.map +1 -1
- package/dist/esm/index.js +66 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/DeferredRef.js +54 -0
- package/dist/esm/internal/DeferredRef.js.map +1 -0
- package/dist/esm/internal/UnionToTuple.js +2 -0
- package/dist/esm/internal/UnionToTuple.js.map +1 -0
- package/dist/esm/internal/core.js +1439 -719
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/diff.js +82 -0
- package/dist/esm/internal/diff.js.map +1 -0
- package/dist/esm/internal/effect-loop-operator.js +269 -0
- package/dist/esm/internal/effect-loop-operator.js.map +1 -0
- package/dist/esm/internal/effect-operator.js +44 -37
- package/dist/esm/internal/effect-operator.js.map +1 -1
- package/dist/esm/internal/effect-producer.js +47 -0
- package/dist/esm/internal/effect-producer.js.map +1 -0
- package/dist/esm/internal/helpers.js +157 -129
- package/dist/esm/internal/helpers.js.map +1 -1
- package/dist/esm/internal/keyed.js +128 -139
- package/dist/esm/internal/keyed.js.map +1 -1
- package/dist/esm/internal/loop-operator.js +186 -0
- package/dist/esm/internal/loop-operator.js.map +1 -0
- package/dist/esm/internal/operator.js +68 -0
- package/dist/esm/internal/operator.js.map +1 -0
- package/dist/esm/internal/protos.js +16 -75
- package/dist/esm/internal/protos.js.map +1 -1
- package/dist/esm/internal/provide.js +33 -25
- package/dist/esm/internal/provide.js.map +1 -1
- package/dist/esm/internal/requestIdleCallback.js +5 -5
- package/dist/esm/internal/requestIdleCallback.js.map +1 -1
- package/dist/esm/internal/share.js +12 -12
- package/dist/esm/internal/share.js.map +1 -1
- package/dist/esm/internal/sync-operator.js +49 -21
- package/dist/esm/internal/sync-operator.js.map +1 -1
- package/dist/esm/internal/sync-producer.js +88 -0
- package/dist/esm/internal/sync-producer.js.map +1 -0
- package/dist/esm/internal/withKey.js +46 -47
- package/dist/esm/internal/withKey.js.map +1 -1
- package/package.json +22 -62
- package/src/AsyncData.ts +447 -0
- package/src/Emitter.ts +47 -38
- package/src/Form.ts +185 -65
- package/src/FormEntry.ts +142 -109
- package/src/Fx.ts +1685 -1851
- package/src/Guard.ts +12 -1
- package/src/Idle.ts +76 -62
- package/src/Match.ts +149 -93
- package/src/Pull.ts +8 -8
- package/src/Push.ts +472 -0
- package/src/RefArray.ts +53 -51
- package/src/RefChunk.ts +44 -41
- package/src/RefHashMap.ts +57 -43
- package/src/RefHashSet.ts +21 -31
- package/src/RefSubject.ts +1984 -457
- package/src/Sink.ts +922 -171
- package/src/Stream.ts +32 -20
- package/src/Subject.ts +230 -87
- package/src/TypeId.ts +16 -4
- package/src/Typeclass.ts +31 -32
- package/src/Versioned.ts +220 -168
- package/src/index.ts +78 -6
- package/src/internal/DeferredRef.ts +62 -0
- package/src/internal/UnionToTuple.ts +11 -0
- package/src/internal/core.ts +2491 -1950
- package/src/internal/diff.ts +157 -0
- package/src/internal/effect-loop-operator.ts +466 -0
- package/src/internal/effect-operator.ts +89 -54
- package/src/internal/effect-producer.ts +125 -0
- package/src/internal/helpers.ts +275 -205
- package/src/internal/keyed.ts +192 -241
- package/src/internal/loop-operator.ts +266 -0
- package/src/internal/operator.ts +87 -0
- package/src/internal/protos.ts +29 -104
- package/src/internal/provide.ts +48 -40
- package/src/internal/requestIdleCallback.ts +5 -6
- package/src/internal/share.ts +26 -24
- package/src/internal/sync-operator.ts +68 -27
- package/src/internal/sync-producer.ts +146 -0
- package/src/internal/withKey.ts +64 -74
- package/dist/cjs/Computed.js +0 -115
- package/dist/cjs/Computed.js.map +0 -1
- package/dist/cjs/Filtered.js +0 -95
- package/dist/cjs/Filtered.js.map +0 -1
- package/dist/cjs/Model.js +0 -119
- package/dist/cjs/Model.js.map +0 -1
- package/dist/cjs/RefAsyncData.js +0 -187
- package/dist/cjs/RefAsyncData.js.map +0 -1
- package/dist/cjs/RefAsyncDataArray.js +0 -38
- package/dist/cjs/RefAsyncDataArray.js.map +0 -1
- package/dist/cjs/RefBoolean.js +0 -45
- package/dist/cjs/RefBoolean.js.map +0 -1
- package/dist/cjs/RefNumber.js +0 -49
- package/dist/cjs/RefNumber.js.map +0 -1
- package/dist/cjs/internal/core-ref-subject.js +0 -254
- package/dist/cjs/internal/core-ref-subject.js.map +0 -1
- package/dist/cjs/internal/core-subject.js +0 -108
- package/dist/cjs/internal/core-subject.js.map +0 -1
- package/dist/cjs/internal/deferred-ref.js.map +0 -1
- package/dist/cjs/internal/effect-primitive.js +0 -47
- package/dist/cjs/internal/effect-primitive.js.map +0 -1
- package/dist/cjs/internal/fx-effect-proto.js +0 -58
- package/dist/cjs/internal/fx-effect-proto.js.map +0 -1
- package/dist/cjs/internal/fx-primitive.js +0 -193
- package/dist/cjs/internal/fx-primitive.js.map +0 -1
- package/dist/cjs/internal/fx.js +0 -240
- package/dist/cjs/internal/fx.js.map +0 -1
- package/dist/cjs/internal/matchers.js +0 -34
- package/dist/cjs/internal/matchers.js.map +0 -1
- package/dist/cjs/internal/run.js +0 -54
- package/dist/cjs/internal/run.js.map +0 -1
- package/dist/cjs/internal/schema-ref-subject.js +0 -132
- package/dist/cjs/internal/schema-ref-subject.js.map +0 -1
- package/dist/cjs/internal/versioned-transform.js +0 -46
- package/dist/cjs/internal/versioned-transform.js.map +0 -1
- package/dist/dts/Computed.d.ts +0 -106
- package/dist/dts/Computed.d.ts.map +0 -1
- package/dist/dts/Filtered.d.ts +0 -97
- package/dist/dts/Filtered.d.ts.map +0 -1
- package/dist/dts/Model.d.ts +0 -200
- package/dist/dts/Model.d.ts.map +0 -1
- package/dist/dts/RefAsyncData.d.ts +0 -236
- package/dist/dts/RefAsyncData.d.ts.map +0 -1
- package/dist/dts/RefAsyncDataArray.d.ts +0 -56
- package/dist/dts/RefAsyncDataArray.d.ts.map +0 -1
- package/dist/dts/RefBoolean.d.ts +0 -47
- package/dist/dts/RefBoolean.d.ts.map +0 -1
- package/dist/dts/RefNumber.d.ts +0 -48
- package/dist/dts/RefNumber.d.ts.map +0 -1
- package/dist/dts/internal/core-ref-subject.d.ts +0 -100
- package/dist/dts/internal/core-ref-subject.d.ts.map +0 -1
- package/dist/dts/internal/core-subject.d.ts +0 -5
- package/dist/dts/internal/core-subject.d.ts.map +0 -1
- package/dist/dts/internal/deferred-ref.d.ts +0 -12
- package/dist/dts/internal/deferred-ref.d.ts.map +0 -1
- package/dist/dts/internal/effect-primitive.d.ts +0 -6
- package/dist/dts/internal/effect-primitive.d.ts.map +0 -1
- package/dist/dts/internal/fx-effect-proto.d.ts +0 -30
- package/dist/dts/internal/fx-effect-proto.d.ts.map +0 -1
- package/dist/dts/internal/fx-primitive.d.ts +0 -109
- package/dist/dts/internal/fx-primitive.d.ts.map +0 -1
- package/dist/dts/internal/fx.d.ts +0 -245
- package/dist/dts/internal/fx.d.ts.map +0 -1
- package/dist/dts/internal/matchers.d.ts +0 -33
- package/dist/dts/internal/matchers.d.ts.map +0 -1
- package/dist/dts/internal/run.d.ts +0 -8
- package/dist/dts/internal/run.d.ts.map +0 -1
- package/dist/dts/internal/schema-ref-subject.d.ts +0 -5
- package/dist/dts/internal/schema-ref-subject.d.ts.map +0 -1
- package/dist/dts/internal/versioned-transform.d.ts +0 -17
- package/dist/dts/internal/versioned-transform.d.ts.map +0 -1
- package/dist/esm/Computed.js +0 -103
- package/dist/esm/Computed.js.map +0 -1
- package/dist/esm/Filtered.js +0 -83
- package/dist/esm/Filtered.js.map +0 -1
- package/dist/esm/Model.js +0 -100
- package/dist/esm/Model.js.map +0 -1
- package/dist/esm/RefAsyncData.js +0 -163
- package/dist/esm/RefAsyncData.js.map +0 -1
- package/dist/esm/RefAsyncDataArray.js +0 -27
- package/dist/esm/RefAsyncDataArray.js.map +0 -1
- package/dist/esm/RefBoolean.js +0 -31
- package/dist/esm/RefBoolean.js.map +0 -1
- package/dist/esm/RefNumber.js +0 -35
- package/dist/esm/RefNumber.js.map +0 -1
- package/dist/esm/internal/core-ref-subject.js +0 -242
- package/dist/esm/internal/core-ref-subject.js.map +0 -1
- package/dist/esm/internal/core-subject.js +0 -90
- package/dist/esm/internal/core-subject.js.map +0 -1
- package/dist/esm/internal/deferred-ref.js +0 -23
- package/dist/esm/internal/deferred-ref.js.map +0 -1
- package/dist/esm/internal/effect-primitive.js +0 -41
- package/dist/esm/internal/effect-primitive.js.map +0 -1
- package/dist/esm/internal/fx-effect-proto.js +0 -43
- package/dist/esm/internal/fx-effect-proto.js.map +0 -1
- package/dist/esm/internal/fx-primitive.js +0 -175
- package/dist/esm/internal/fx-primitive.js.map +0 -1
- package/dist/esm/internal/fx.js +0 -216
- package/dist/esm/internal/fx.js.map +0 -1
- package/dist/esm/internal/matchers.js +0 -38
- package/dist/esm/internal/matchers.js.map +0 -1
- package/dist/esm/internal/run.js +0 -32
- package/dist/esm/internal/run.js.map +0 -1
- package/dist/esm/internal/schema-ref-subject.js +0 -121
- package/dist/esm/internal/schema-ref-subject.js.map +0 -1
- package/dist/esm/internal/versioned-transform.js +0 -37
- package/dist/esm/internal/versioned-transform.js.map +0 -1
- package/src/Computed.ts +0 -289
- package/src/Filtered.ts +0 -274
- package/src/Model.ts +0 -483
- package/src/RefAsyncData.ts +0 -547
- package/src/RefAsyncDataArray.ts +0 -135
- package/src/RefBoolean.ts +0 -71
- package/src/RefNumber.ts +0 -77
- package/src/internal/core-ref-subject.ts +0 -528
- package/src/internal/core-subject.ts +0 -143
- package/src/internal/deferred-ref.ts +0 -26
- package/src/internal/effect-primitive.ts +0 -230
- package/src/internal/fx-effect-proto.ts +0 -56
- package/src/internal/fx-primitive.ts +0 -223
- package/src/internal/fx.ts +0 -619
- package/src/internal/matchers.ts +0 -83
- package/src/internal/run.ts +0 -51
- package/src/internal/schema-ref-subject.ts +0 -163
- package/src/internal/versioned-transform.ts +0 -48
package/dist/cjs/RefSubject.js
CHANGED
|
@@ -3,237 +3,978 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.compact = void 0;
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
6
|
+
exports.compact = exports.asTrue = exports.asFalse = void 0;
|
|
7
|
+
exports.computedFromTag = computedFromTag;
|
|
8
|
+
exports.filterMapEffect = exports.filterMap = exports.filterEffect = exports.filter = exports.drop = exports.decrement = void 0;
|
|
9
|
+
exports.filteredFromTag = filteredFromTag;
|
|
9
10
|
exports.fromEffect = fromEffect;
|
|
10
|
-
exports.
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
11
|
+
exports.fromFx = fromFx;
|
|
12
|
+
exports.fromRefSubject = fromRefSubject;
|
|
13
|
+
exports.fromTag = fromTag;
|
|
14
|
+
exports.increment = void 0;
|
|
15
|
+
exports.isComputed = isComputed;
|
|
16
|
+
exports.isDerived = isDerived;
|
|
17
|
+
exports.isFiltered = isFiltered;
|
|
18
|
+
exports.isRefSubject = isRefSubject;
|
|
19
|
+
exports.modifyEffect = exports.modify = exports.mapEffect = exports.map = exports.make = void 0;
|
|
13
20
|
exports.of = of;
|
|
14
|
-
exports.
|
|
15
|
-
exports.
|
|
21
|
+
exports.provide = void 0;
|
|
22
|
+
exports.delete = exports.reset = reset;
|
|
23
|
+
exports.set = exports.runUpdates = void 0;
|
|
24
|
+
exports.skipRepeats = skipRepeats;
|
|
25
|
+
exports.slice = exports.skipRepeatsWith = void 0;
|
|
26
|
+
exports.struct = struct;
|
|
16
27
|
exports.tagged = tagged;
|
|
17
|
-
exports.
|
|
28
|
+
exports.toggle = exports.take = void 0;
|
|
29
|
+
exports.transform = transform;
|
|
30
|
+
exports.transformOrFail = transformOrFail;
|
|
31
|
+
exports.tuple = tuple;
|
|
32
|
+
exports.unsafeMake = unsafeMake;
|
|
33
|
+
exports.updateEffect = exports.update = void 0;
|
|
18
34
|
var C = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@typed/context"));
|
|
19
35
|
var _effect = /*#__PURE__*/require("effect");
|
|
36
|
+
var Boolean = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Boolean"));
|
|
37
|
+
var Cause = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Cause"));
|
|
20
38
|
var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
|
|
21
|
-
var
|
|
39
|
+
var Equal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Equal"));
|
|
40
|
+
var ExecutionStrategy = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/ExecutionStrategy"));
|
|
41
|
+
var Exit = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Exit"));
|
|
22
42
|
var _Function = /*#__PURE__*/require("effect/Function");
|
|
43
|
+
var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Layer"));
|
|
44
|
+
var _Number = /*#__PURE__*/require("effect/Number");
|
|
23
45
|
var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Option"));
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
46
|
+
var ReadonlyArray = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/ReadonlyArray"));
|
|
47
|
+
var Scope = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Scope"));
|
|
48
|
+
var core = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/core.js"));
|
|
49
|
+
var DeferredRef = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/DeferredRef.js"));
|
|
50
|
+
var _helpers = /*#__PURE__*/require("./internal/helpers.js");
|
|
29
51
|
var _protos = /*#__PURE__*/require("./internal/protos.js");
|
|
30
|
-
var
|
|
52
|
+
var _provide = /*#__PURE__*/require("./internal/provide.js");
|
|
53
|
+
var share = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/share.js"));
|
|
54
|
+
var Sink = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Sink.js"));
|
|
55
|
+
var Subject = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Subject.js"));
|
|
31
56
|
var _TypeId = /*#__PURE__*/require("./TypeId.js");
|
|
32
57
|
var Versioned = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Versioned.js"));
|
|
33
58
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
34
59
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
35
60
|
/**
|
|
36
|
-
* A RefSubject is
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @since 1.18.0
|
|
61
|
+
* A RefSubject is a Subject that can be used to read and write a value.
|
|
62
|
+
* @since 1.20.0
|
|
40
63
|
*/
|
|
41
64
|
|
|
65
|
+
const UNBOUNDED = {
|
|
66
|
+
concurrency: "unbounded"
|
|
67
|
+
};
|
|
42
68
|
/**
|
|
43
|
-
*
|
|
44
|
-
* @since 1.18.0
|
|
45
|
-
* @category constructors
|
|
69
|
+
* @since 1.20.0
|
|
46
70
|
*/
|
|
47
|
-
function fromEffect(
|
|
48
|
-
return
|
|
71
|
+
function fromEffect(effect, options) {
|
|
72
|
+
return Effect.map(makeCore(effect, options), core => new RefSubjectImpl(core));
|
|
49
73
|
}
|
|
50
74
|
/**
|
|
51
|
-
*
|
|
52
|
-
* @since 1.18.0
|
|
53
|
-
* @category constructors
|
|
75
|
+
* @since 1.20.0
|
|
54
76
|
*/
|
|
55
|
-
function
|
|
56
|
-
return
|
|
77
|
+
function fromFx(fx, options) {
|
|
78
|
+
return DeferredRef.make((0, _helpers.getExitEquivalence)(options?.eq ?? Equal.equals)).pipe(Effect.bindTo("deferredRef"), Effect.bind("core", ({
|
|
79
|
+
deferredRef
|
|
80
|
+
}) => makeCore(deferredRef, options)), Effect.tap(({
|
|
81
|
+
core,
|
|
82
|
+
deferredRef
|
|
83
|
+
}) => Effect.forkIn(fx.run(Sink.make(cause => Effect.flatMap(Effect.sync(() => deferredRef.done(Exit.failCause(cause))), () => core.subject.onFailure(cause)), value => Effect.flatMap(Effect.sync(() => deferredRef.done(Exit.succeed(value))), () => setCore(core, value)))), core.scope)), Effect.map(({
|
|
84
|
+
core
|
|
85
|
+
}) => new RefSubjectImpl(core)));
|
|
57
86
|
}
|
|
58
87
|
/**
|
|
59
|
-
*
|
|
60
|
-
|
|
61
|
-
|
|
88
|
+
* @since 1.20.0
|
|
89
|
+
*/
|
|
90
|
+
function fromRefSubject(ref, options) {
|
|
91
|
+
return DeferredRef.make((0, _helpers.getExitEquivalence)(options?.eq ?? Equal.equals)).pipe(Effect.bindTo("deferredRef"), Effect.bind("core", ({
|
|
92
|
+
deferredRef
|
|
93
|
+
}) => makeCore(deferredRef, options)), Effect.tap(({
|
|
94
|
+
core,
|
|
95
|
+
deferredRef
|
|
96
|
+
}) => Effect.forkIn(ref.run(Sink.make(cause => Effect.sync(() => deferredRef.done(Exit.failCause(cause))), value => Effect.sync(() => deferredRef.done(Exit.succeed(value))))), core.scope)), Effect.map(({
|
|
97
|
+
core
|
|
98
|
+
}) => new DerivedImpl(core, persistCore(ref, core))));
|
|
99
|
+
}
|
|
100
|
+
function persistCore(ref, core) {
|
|
101
|
+
// Log any errors that fail to persist, but don't fail the consumer
|
|
102
|
+
return Effect.ignoreLogged(Effect.provide(Effect.flatMap(core.deferredRef, value => set(ref, value)), core.context));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* @since 1.20.0
|
|
106
|
+
*/
|
|
107
|
+
const make = exports.make = function make(fxOrEffect, options) {
|
|
108
|
+
if (_TypeId.RefSubjectTypeId in fxOrEffect) return fromRefSubject(fxOrEffect, options);else if (_TypeId.TypeId in fxOrEffect) return fromFx(fxOrEffect, options);else return fromEffect(fxOrEffect, options);
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* @since 1.20.0
|
|
62
112
|
*/
|
|
63
|
-
function
|
|
64
|
-
return
|
|
113
|
+
function of(a, options) {
|
|
114
|
+
return Effect.acquireRelease(withScopeAndFiberId((scope, id) => unsafeMake({
|
|
115
|
+
id,
|
|
116
|
+
initial: Effect.succeed(a),
|
|
117
|
+
initialValue: a,
|
|
118
|
+
options,
|
|
119
|
+
scope
|
|
120
|
+
}), options?.executionStrategy ?? ExecutionStrategy.sequential), ref => ref.interrupt);
|
|
65
121
|
}
|
|
66
|
-
|
|
67
|
-
|
|
122
|
+
const withScopeAndFiberId = (f, strategy) => Effect.fiberIdWith(id => (0, _helpers.withScope)(scope => f(scope, id), strategy));
|
|
123
|
+
const emptyContext = /*#__PURE__*/C.empty();
|
|
124
|
+
/**
|
|
125
|
+
* @since 1.20.0
|
|
126
|
+
*/
|
|
127
|
+
function unsafeMake(params) {
|
|
128
|
+
const {
|
|
129
|
+
id,
|
|
130
|
+
initial,
|
|
131
|
+
options,
|
|
132
|
+
scope
|
|
133
|
+
} = params;
|
|
134
|
+
return Effect.suspend(() => {
|
|
135
|
+
const core = unsafeMakeCore(initial, id, emptyContext, scope, options);
|
|
136
|
+
// Sometimes we might be instantiating directly from a known value
|
|
137
|
+
// Here we seed the value and ensure the subject has it as well for re-broadcasting
|
|
138
|
+
if ("initialValue" in params) {
|
|
139
|
+
core.deferredRef.done(Exit.succeed(params.initialValue));
|
|
140
|
+
return Effect.map(core.subject.onSuccess(params.initialValue), () => new RefSubjectImpl(core));
|
|
141
|
+
}
|
|
142
|
+
return Effect.succeed(new RefSubjectImpl(core));
|
|
143
|
+
});
|
|
68
144
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
145
|
+
class RefSubjectImpl extends _protos.FxEffectBase {
|
|
146
|
+
core;
|
|
147
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
148
|
+
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
149
|
+
version;
|
|
150
|
+
interrupt;
|
|
151
|
+
subscriberCount;
|
|
152
|
+
getSetDelete;
|
|
153
|
+
constructor(core) {
|
|
154
|
+
super();
|
|
155
|
+
this.core = core;
|
|
156
|
+
this.version = Effect.sync(() => core.deferredRef.version);
|
|
157
|
+
this.interrupt = interruptCore(core);
|
|
158
|
+
this.subscriberCount = Effect.provide(core.subject.subscriberCount, core.context);
|
|
159
|
+
this.getSetDelete = getSetDelete(core);
|
|
160
|
+
this.runUpdates = this.runUpdates.bind(this);
|
|
161
|
+
this.onSuccess = this.onSuccess.bind(this);
|
|
162
|
+
this.onFailure = this.onFailure.bind(this);
|
|
163
|
+
}
|
|
164
|
+
run(sink) {
|
|
165
|
+
return Effect.matchCauseEffect(this.toEffect(), {
|
|
166
|
+
onFailure: cause => sink.onFailure(cause),
|
|
167
|
+
onSuccess: () => Effect.provide(this.core.subject.run(sink), this.core.context)
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
runUpdates(run, lock = true) {
|
|
171
|
+
return lock ? this.core.semaphore.withPermits(1)(run(this.getSetDelete)) : run(this.getSetDelete);
|
|
172
|
+
}
|
|
173
|
+
onSuccess(value) {
|
|
174
|
+
return setCore(this.core, value);
|
|
175
|
+
}
|
|
176
|
+
onFailure(cause) {
|
|
177
|
+
return onFailureCore(this.core, cause);
|
|
178
|
+
}
|
|
179
|
+
toEffect() {
|
|
180
|
+
return getOrInitializeCore(this.core, true);
|
|
72
181
|
}
|
|
73
|
-
return makeTagged;
|
|
74
182
|
}
|
|
75
|
-
class
|
|
76
|
-
|
|
77
|
-
|
|
183
|
+
class DerivedImpl extends RefSubjectImpl {
|
|
184
|
+
persist;
|
|
185
|
+
constructor(core, persist) {
|
|
186
|
+
super(core);
|
|
187
|
+
this.persist = persist;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @since 1.20.0
|
|
192
|
+
*/
|
|
193
|
+
const set = exports.set = /*#__PURE__*/(0, _Function.dual)(2, function set(ref, a) {
|
|
194
|
+
return ref.runUpdates(ref => ref.set(a));
|
|
195
|
+
});
|
|
196
|
+
/**
|
|
197
|
+
* @since 1.20.0
|
|
198
|
+
*/
|
|
199
|
+
function reset(ref) {
|
|
200
|
+
return ref.runUpdates(ref => ref.delete);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* @since 1.20.0
|
|
204
|
+
*/
|
|
205
|
+
|
|
206
|
+
function getSetDelete(ref) {
|
|
207
|
+
return {
|
|
208
|
+
get: getOrInitializeCore(ref, false),
|
|
209
|
+
set: a => setCore(ref, a),
|
|
210
|
+
delete: deleteCore(ref)
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* @since 1.20.0
|
|
215
|
+
*/
|
|
216
|
+
const updateEffect = exports.updateEffect = /*#__PURE__*/(0, _Function.dual)(2, function updateEffect(ref, f) {
|
|
217
|
+
return ref.runUpdates(ref => Effect.flatMap(Effect.flatMap(ref.get, f), ref.set));
|
|
218
|
+
});
|
|
219
|
+
/**
|
|
220
|
+
* @since 1.20.0
|
|
221
|
+
*/
|
|
222
|
+
const update = exports.update = /*#__PURE__*/(0, _Function.dual)(2, function update(ref, f) {
|
|
223
|
+
return updateEffect(ref, value => Effect.succeed(f(value)));
|
|
224
|
+
});
|
|
225
|
+
/**
|
|
226
|
+
* @since 1.20.0
|
|
227
|
+
*/
|
|
228
|
+
const modifyEffect = exports.modifyEffect = /*#__PURE__*/(0, _Function.dual)(2, function modifyEffect(ref, f) {
|
|
229
|
+
return ref.runUpdates(ref => Effect.flatMap(ref.get, value => Effect.flatMap(f(value), ([b, a]) => Effect.flatMap(ref.set(a), () => Effect.succeed(b)))));
|
|
230
|
+
});
|
|
231
|
+
/**
|
|
232
|
+
* @since 1.20.0
|
|
233
|
+
*/
|
|
234
|
+
const modify = exports.modify = /*#__PURE__*/(0, _Function.dual)(2, function modify(ref, f) {
|
|
235
|
+
return modifyEffect(ref, value => Effect.succeed(f(value)));
|
|
236
|
+
});
|
|
237
|
+
const isRefSubjectDataFirst = args => isRefSubject(args[0]);
|
|
238
|
+
/**
|
|
239
|
+
* @since 1.20.0
|
|
240
|
+
*/
|
|
241
|
+
const runUpdates = exports.runUpdates = /*#__PURE__*/(0, _Function.dual)(isRefSubjectDataFirst, function runUpdates(ref, f, options) {
|
|
242
|
+
if (!options) {
|
|
243
|
+
return ref.runUpdates(f);
|
|
244
|
+
} else if (options.value === "initial") {
|
|
245
|
+
return ref.runUpdates(ref => Effect.uninterruptibleMask(restore => Effect.flatMap(ref.get, initial => f(ref).pipe(restore, Effect.tapErrorCause(Effect.unifiedFn(cause => Cause.isInterruptedOnly(cause) ? options.onInterrupt(initial) : Effect.unit))))));
|
|
246
|
+
} else {
|
|
247
|
+
return ref.runUpdates(ref => Effect.uninterruptibleMask(restore => f(ref).pipe(restore, Effect.tapErrorCause(Effect.unifiedFn(cause => Cause.isInterruptedOnly(cause) ? Effect.flatMap(ref.get, options.onInterrupt) : Effect.unit)))));
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
class RefSubjectCore {
|
|
251
|
+
initial;
|
|
252
|
+
subject;
|
|
253
|
+
context;
|
|
254
|
+
scope;
|
|
255
|
+
deferredRef;
|
|
256
|
+
semaphore;
|
|
257
|
+
constructor(initial, subject, context, scope, deferredRef, semaphore) {
|
|
258
|
+
this.initial = initial;
|
|
259
|
+
this.subject = subject;
|
|
260
|
+
this.context = context;
|
|
261
|
+
this.scope = scope;
|
|
262
|
+
this.deferredRef = deferredRef;
|
|
263
|
+
this.semaphore = semaphore;
|
|
264
|
+
}
|
|
265
|
+
_fiber = undefined;
|
|
266
|
+
}
|
|
267
|
+
function makeCore(initial, options) {
|
|
268
|
+
return Effect.context().pipe(Effect.bindTo("ctx"), Effect.let("executionStrategy", () => options?.executionStrategy ?? ExecutionStrategy.parallel), Effect.bind("scope", ({
|
|
269
|
+
ctx,
|
|
270
|
+
executionStrategy
|
|
271
|
+
}) => Scope.fork(C.get(ctx, Scope.Scope), executionStrategy)), Effect.bind("deferredRef", () => DeferredRef.make((0, _helpers.getExitEquivalence)(options?.eq ?? Equal.equals))), Effect.let("subject", () => Subject.unsafeMake(Math.max(1, options?.replay ?? 1))), Effect.tap(({
|
|
272
|
+
scope,
|
|
273
|
+
subject
|
|
274
|
+
}) => Scope.addFinalizer(scope, subject.interrupt)), Effect.map(({
|
|
275
|
+
ctx,
|
|
276
|
+
deferredRef,
|
|
277
|
+
scope,
|
|
278
|
+
subject
|
|
279
|
+
}) => new RefSubjectCore(initial, subject, ctx, scope, deferredRef, Effect.unsafeMakeSemaphore(1))));
|
|
280
|
+
}
|
|
281
|
+
function unsafeMakeCore(initial, id, ctx, scope, options) {
|
|
282
|
+
return new RefSubjectCore(initial, Subject.unsafeMake(Math.max(1, options?.replay ?? 1)), ctx, scope, DeferredRef.unsafeMake(id, (0, _helpers.getExitEquivalence)(options?.eq ?? Equal.equals)), Effect.unsafeMakeSemaphore(1));
|
|
283
|
+
}
|
|
284
|
+
function getOrInitializeCore(core, lockInitialize) {
|
|
285
|
+
return Effect.suspend(() => {
|
|
286
|
+
if (core._fiber === undefined && Option.isNone(core.deferredRef.current)) {
|
|
287
|
+
return initializeCoreAndTap(core, lockInitialize);
|
|
288
|
+
} else {
|
|
289
|
+
return core.deferredRef;
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
function initializeCoreEffect(core, lock) {
|
|
294
|
+
const initialize = Effect.onExit(Effect.provide(core.initial, core.context), exit => {
|
|
295
|
+
core._fiber = undefined;
|
|
296
|
+
core.deferredRef.done(exit);
|
|
297
|
+
return Effect.unit;
|
|
298
|
+
});
|
|
299
|
+
return Effect.flatMap(Effect.forkIn(lock && core.semaphore ? core.semaphore.withPermits(1)(initialize) : initialize, core.scope), fiber => Effect.sync(() => core._fiber = fiber));
|
|
300
|
+
}
|
|
301
|
+
function initializeCore(core, lock) {
|
|
302
|
+
const onSuccess = a => {
|
|
303
|
+
core.deferredRef.done(Exit.succeed(a));
|
|
304
|
+
return Effect.succeed(_effect.Fiber.succeed(a));
|
|
305
|
+
};
|
|
306
|
+
const onCause = cause => {
|
|
307
|
+
core.deferredRef.done(Exit.failCause(cause));
|
|
308
|
+
return Effect.succeed(_effect.Fiber.failCause(cause));
|
|
309
|
+
};
|
|
310
|
+
const onError = e => onCause(Cause.fail(e));
|
|
311
|
+
return (0, _helpers.matchEffectPrimitive)(core.initial, {
|
|
312
|
+
Success: onSuccess,
|
|
313
|
+
Failure: onCause,
|
|
314
|
+
Some: onSuccess,
|
|
315
|
+
None: onError,
|
|
316
|
+
Left: onError,
|
|
317
|
+
Right: onSuccess,
|
|
318
|
+
Sync: f => onSuccess(f()),
|
|
319
|
+
Otherwise: () => initializeCoreEffect(core, lock)
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
function initializeCoreAndTap(core, lock) {
|
|
323
|
+
return Effect.zipRight(initializeCore(core, lock), tapEventCore(core, core.deferredRef));
|
|
324
|
+
}
|
|
325
|
+
function setCore(core, a) {
|
|
326
|
+
const exit = Exit.succeed(a);
|
|
327
|
+
return Effect.suspend(() => {
|
|
328
|
+
if (core.deferredRef.done(exit)) {
|
|
329
|
+
// If the value changed, send an event
|
|
330
|
+
return Effect.as(sendEvent(core, exit), a);
|
|
331
|
+
} else {
|
|
332
|
+
// Otherwise, just return the current value
|
|
333
|
+
return Effect.succeed(a);
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
function onFailureCore(core, cause) {
|
|
338
|
+
const exit = Exit.failCause(cause);
|
|
339
|
+
return Effect.suspend(() => {
|
|
340
|
+
if (core.deferredRef.done(exit)) {
|
|
341
|
+
return sendEvent(core, exit);
|
|
342
|
+
} else {
|
|
343
|
+
return Effect.unit;
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
function interruptCore(core) {
|
|
348
|
+
return Effect.fiberIdWith(id => {
|
|
349
|
+
core.deferredRef.reset();
|
|
350
|
+
return Scope.close(core.scope, Exit.interrupt(id));
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
function deleteCore(core) {
|
|
354
|
+
return Effect.suspend(() => {
|
|
355
|
+
const current = core.deferredRef.current;
|
|
356
|
+
core.deferredRef.reset();
|
|
357
|
+
if (Option.isNone(current)) {
|
|
358
|
+
return Effect.succeed(Option.none());
|
|
359
|
+
}
|
|
360
|
+
return core.subject.subscriberCount.pipe(Effect.provide(core.context), Effect.flatMap(count => count > 0 && !core._fiber ? initializeCore(core, false) : Effect.unit), Effect.zipRight(Effect.asSome(current.value)));
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
function tapEventCore(core, effect) {
|
|
364
|
+
return effect.pipe(Effect.exit, Effect.tap(exit => sendEvent(core, exit)), Effect.flatten);
|
|
365
|
+
}
|
|
366
|
+
function sendEvent(core, exit) {
|
|
367
|
+
if (Exit.isSuccess(exit)) {
|
|
368
|
+
return Effect.provide(core.subject.onSuccess(exit.value), core.context);
|
|
369
|
+
} else {
|
|
370
|
+
return Effect.provide(core.subject.onFailure(exit.cause), core.context);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* @since 1.20.0
|
|
375
|
+
*/
|
|
376
|
+
const mapEffect = exports.mapEffect = /*#__PURE__*/(0, _Function.dual)(2, function mapEffect(versioned, f) {
|
|
377
|
+
return _TypeId.FilteredTypeId in versioned ? FilteredImpl.make(versioned, a => Effect.asSome(f(a))) : ComputedImpl.make(versioned, f);
|
|
378
|
+
});
|
|
379
|
+
/**
|
|
380
|
+
* @since 1.20.0
|
|
381
|
+
*/
|
|
382
|
+
const map = exports.map = /*#__PURE__*/(0, _Function.dual)(2, function map(versioned, f) {
|
|
383
|
+
return mapEffect(versioned, a => Effect.succeed(f(a)));
|
|
384
|
+
});
|
|
385
|
+
/**
|
|
386
|
+
* @since 1.20.0
|
|
387
|
+
*/
|
|
388
|
+
const filterMapEffect = exports.filterMapEffect = /*#__PURE__*/(0, _Function.dual)(2, function filterMapEffect(versioned, f) {
|
|
389
|
+
return FilteredImpl.make(versioned, f);
|
|
390
|
+
});
|
|
391
|
+
/**
|
|
392
|
+
* @since 1.20.0
|
|
393
|
+
*/
|
|
394
|
+
const filterMap = exports.filterMap = /*#__PURE__*/(0, _Function.dual)(2, function filterMap(versioned, f) {
|
|
395
|
+
return FilteredImpl.make(versioned, a => Effect.succeed(f(a)));
|
|
396
|
+
});
|
|
397
|
+
/**
|
|
398
|
+
* @since 1.20.0
|
|
399
|
+
*/
|
|
400
|
+
const compact = versioned => filterMap(versioned, _Function.identity);
|
|
401
|
+
/**
|
|
402
|
+
* @since 1.20.0
|
|
403
|
+
*/
|
|
404
|
+
exports.compact = compact;
|
|
405
|
+
const filterEffect = exports.filterEffect = /*#__PURE__*/(0, _Function.dual)(2, function filterEffect(versioned, f) {
|
|
406
|
+
return FilteredImpl.make(versioned, a => Effect.map(f(a), b => b ? Option.some(a) : Option.none()));
|
|
407
|
+
});
|
|
408
|
+
/**
|
|
409
|
+
* @since 1.20.0
|
|
410
|
+
*/
|
|
411
|
+
const filter = exports.filter = /*#__PURE__*/(0, _Function.dual)(2, function filter(versioned, f) {
|
|
412
|
+
return FilteredImpl.make(versioned, a => Effect.succeed(f(a) ? Option.some(a) : Option.none()));
|
|
413
|
+
});
|
|
414
|
+
class ComputedImpl extends Versioned.VersionedTransform {
|
|
415
|
+
input;
|
|
416
|
+
f;
|
|
417
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
418
|
+
constructor(input, f) {
|
|
419
|
+
super(input, fx => share.hold(core.mapEffect(fx, f)), Effect.flatMap(f));
|
|
420
|
+
this.input = input;
|
|
421
|
+
this.f = f;
|
|
422
|
+
}
|
|
423
|
+
static make(input, f) {
|
|
424
|
+
return new ComputedImpl(input, f);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
class FilteredImpl extends Versioned.VersionedTransform {
|
|
428
|
+
input;
|
|
429
|
+
f;
|
|
430
|
+
[_TypeId.FilteredTypeId] = _TypeId.FilteredTypeId;
|
|
431
|
+
constructor(input, f) {
|
|
432
|
+
super(input, fx => share.hold(core.filterMapEffect(fx, f)), effect => Effect.flatten(Effect.flatMap(effect, f)));
|
|
433
|
+
this.input = input;
|
|
434
|
+
this.f = f;
|
|
435
|
+
}
|
|
436
|
+
static make(input, f) {
|
|
437
|
+
return new FilteredImpl(input, f);
|
|
438
|
+
}
|
|
439
|
+
asComputed() {
|
|
440
|
+
return ComputedImpl.make(this.input, this.f);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* @since 1.20.0
|
|
445
|
+
*/
|
|
446
|
+
const skipRepeatsWith = exports.skipRepeatsWith = /*#__PURE__*/(0, _Function.dual)(2, function skipRepeatsWith(ref, eq) {
|
|
447
|
+
const versioned = Versioned.transform(ref, fx => core.skipRepeatsWith(fx, eq), _Function.identity);
|
|
448
|
+
if (_TypeId.FilteredTypeId in ref) {
|
|
449
|
+
return FilteredImpl.make(versioned, Effect.succeedSome);
|
|
450
|
+
} else {
|
|
451
|
+
return ComputedImpl.make(versioned, Effect.succeed);
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
function skipRepeats(ref) {
|
|
455
|
+
return skipRepeatsWith(ref, Equal.equals);
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* @since 1.20.0
|
|
459
|
+
*/
|
|
460
|
+
function transform(ref, from, to) {
|
|
461
|
+
return new RefSubjectTransform(ref, from, to);
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* @since 1.20.0
|
|
465
|
+
*/
|
|
466
|
+
function transformOrFail(ref, from, to) {
|
|
467
|
+
return new RefSubjectTransformEffect(ref, from, to);
|
|
468
|
+
}
|
|
469
|
+
class RefSubjectTransform extends _protos.FxEffectBase {
|
|
470
|
+
ref;
|
|
471
|
+
from;
|
|
472
|
+
to;
|
|
473
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
78
474
|
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
475
|
+
version;
|
|
476
|
+
interrupt;
|
|
477
|
+
subscriberCount;
|
|
478
|
+
constructor(ref, from, to) {
|
|
479
|
+
super();
|
|
480
|
+
this.ref = ref;
|
|
481
|
+
this.from = from;
|
|
482
|
+
this.to = to;
|
|
483
|
+
this.version = ref.version;
|
|
484
|
+
this.interrupt = ref.interrupt;
|
|
485
|
+
this.subscriberCount = ref.subscriberCount;
|
|
486
|
+
}
|
|
487
|
+
run(sink) {
|
|
488
|
+
return this.ref.run(Sink.map(sink, this.from));
|
|
489
|
+
}
|
|
490
|
+
runUpdates(run) {
|
|
491
|
+
return this.ref.runUpdates(ref => run({
|
|
492
|
+
get: Effect.map(ref.get, this.from),
|
|
493
|
+
set: b => Effect.map(ref.set(this.to(b)), this.from),
|
|
494
|
+
delete: Effect.map(ref.delete, Option.map(this.from))
|
|
495
|
+
}));
|
|
496
|
+
}
|
|
497
|
+
onFailure(cause) {
|
|
498
|
+
return this.ref.onFailure(cause);
|
|
499
|
+
}
|
|
500
|
+
onSuccess(value) {
|
|
501
|
+
return this.ref.onSuccess(this.to(value));
|
|
502
|
+
}
|
|
503
|
+
toEffect() {
|
|
504
|
+
return Effect.map(this.ref, this.from);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
class RefSubjectTransformEffect extends _protos.FxEffectBase {
|
|
508
|
+
ref;
|
|
509
|
+
from;
|
|
510
|
+
to;
|
|
79
511
|
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
512
|
+
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
80
513
|
version;
|
|
514
|
+
interrupt;
|
|
81
515
|
subscriberCount;
|
|
82
|
-
|
|
83
|
-
|
|
516
|
+
subject;
|
|
517
|
+
constructor(ref, from, to) {
|
|
518
|
+
super();
|
|
519
|
+
this.ref = ref;
|
|
520
|
+
this.from = from;
|
|
521
|
+
this.to = to;
|
|
522
|
+
this.version = ref.version;
|
|
523
|
+
this.interrupt = ref.interrupt;
|
|
524
|
+
this.subscriberCount = ref.subscriberCount;
|
|
525
|
+
this.subject = Subject.unsafeMake();
|
|
526
|
+
}
|
|
527
|
+
run(sink) {
|
|
528
|
+
return core.merge(core.mapEffect(this.ref, this.from), this.subject).run(sink);
|
|
529
|
+
}
|
|
530
|
+
runUpdates(run) {
|
|
531
|
+
return this.ref.runUpdates(ref => run({
|
|
532
|
+
get: Effect.flatMap(ref.get, this.from),
|
|
533
|
+
set: b => Effect.matchCauseEffect(Effect.flatMap(this.to(b), ref.set), {
|
|
534
|
+
onFailure: cause => Effect.as(this.subject.onFailure(cause), b),
|
|
535
|
+
onSuccess: () => Effect.as(this.subject.onSuccess(b), b)
|
|
536
|
+
}),
|
|
537
|
+
delete: Effect.flatMap(ref.delete, Option.match({
|
|
538
|
+
onNone: () => Effect.succeedNone,
|
|
539
|
+
onSome: b => Effect.asSome(this.from(b))
|
|
540
|
+
}))
|
|
541
|
+
}));
|
|
542
|
+
}
|
|
543
|
+
onFailure(cause) {
|
|
544
|
+
return this.subject.onFailure(cause);
|
|
545
|
+
}
|
|
546
|
+
onSuccess(value) {
|
|
547
|
+
return Effect.matchCauseEffect(this.to(value), {
|
|
548
|
+
onFailure: cause => this.subject.onFailure(cause),
|
|
549
|
+
onSuccess: a => this.ref.onSuccess(a)
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
toEffect() {
|
|
553
|
+
return Effect.flatMap(this.ref, this.from);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* @since 1.20.0
|
|
558
|
+
*/
|
|
559
|
+
function tuple(refs) {
|
|
560
|
+
const kind = getRefKind(refs);
|
|
561
|
+
switch (kind) {
|
|
562
|
+
case "r":
|
|
563
|
+
return makeTupleRef(refs);
|
|
564
|
+
case "c":
|
|
565
|
+
return makeTupleComputed(refs);
|
|
566
|
+
case "f":
|
|
567
|
+
return makeTupleFiltered(refs);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
const join = (a, b) => {
|
|
571
|
+
if (a === "r") return b;
|
|
572
|
+
if (b === "r") return a;
|
|
573
|
+
if (a === "f") return a;
|
|
574
|
+
if (b === "f") return b;
|
|
575
|
+
return "c";
|
|
576
|
+
};
|
|
577
|
+
function getRefKind(refs) {
|
|
578
|
+
let kind = "r";
|
|
579
|
+
for (const ref of refs) {
|
|
580
|
+
if (_TypeId.FilteredTypeId in ref) {
|
|
581
|
+
kind = "f";
|
|
582
|
+
break;
|
|
583
|
+
} else if (!(_TypeId.RefSubjectTypeId in ref)) {
|
|
584
|
+
kind = join(kind, "c");
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
return kind;
|
|
588
|
+
}
|
|
589
|
+
function makeTupleRef(refs) {
|
|
590
|
+
return new RefSubjectTuple(refs);
|
|
591
|
+
}
|
|
592
|
+
class RefSubjectTuple extends _protos.FxEffectBase {
|
|
593
|
+
refs;
|
|
594
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
595
|
+
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
596
|
+
version;
|
|
597
|
+
interrupt;
|
|
598
|
+
subscriberCount;
|
|
599
|
+
versioned;
|
|
600
|
+
getSetDelete;
|
|
601
|
+
constructor(refs) {
|
|
602
|
+
super();
|
|
603
|
+
this.refs = refs;
|
|
604
|
+
this.versioned = Versioned.tuple(refs);
|
|
605
|
+
this.version = this.versioned.version;
|
|
606
|
+
this.interrupt = Effect.all(refs.map(r => r.interrupt), UNBOUNDED);
|
|
607
|
+
this.subscriberCount = Effect.map(Effect.all(refs.map(r => r.subscriberCount), UNBOUNDED), ReadonlyArray.reduce(0, _Number.sum));
|
|
608
|
+
this.getSetDelete = {
|
|
609
|
+
get: this.versioned,
|
|
610
|
+
set: a => Effect.all(refs.map((r, i) => set(r, a[i])), UNBOUNDED),
|
|
611
|
+
delete: Effect.map(Effect.all(refs.map(r => reset(r)), UNBOUNDED), Option.all)
|
|
612
|
+
};
|
|
613
|
+
this.runUpdates = this.runUpdates.bind(this);
|
|
614
|
+
this.onFailure = this.onFailure.bind(this);
|
|
615
|
+
this.onSuccess = this.onSuccess.bind(this);
|
|
616
|
+
}
|
|
617
|
+
run(sink) {
|
|
618
|
+
return this.versioned.run(sink);
|
|
619
|
+
}
|
|
620
|
+
toEffect() {
|
|
621
|
+
return this.versioned;
|
|
622
|
+
}
|
|
623
|
+
runUpdates(run) {
|
|
624
|
+
return run(this.getSetDelete);
|
|
625
|
+
}
|
|
626
|
+
onFailure(cause) {
|
|
627
|
+
return Effect.all(this.refs.map(ref => ref.onFailure(cause)));
|
|
628
|
+
}
|
|
629
|
+
onSuccess(value) {
|
|
630
|
+
return Effect.catchAllCause(this.getSetDelete.set(value), c => this.onFailure(c));
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
function makeTupleComputed(refs) {
|
|
634
|
+
return new ComputedImpl(Versioned.tuple(refs), Effect.succeed);
|
|
635
|
+
}
|
|
636
|
+
function makeTupleFiltered(refs) {
|
|
637
|
+
return new FilteredImpl(Versioned.tuple(refs), Effect.succeedSome);
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* @since 1.20.0
|
|
641
|
+
*/
|
|
642
|
+
function struct(refs) {
|
|
643
|
+
const kind = getRefKind(Object.values(refs));
|
|
644
|
+
switch (kind) {
|
|
645
|
+
case "r":
|
|
646
|
+
return makeStructRef(refs);
|
|
647
|
+
case "c":
|
|
648
|
+
return makeStructComputed(refs);
|
|
649
|
+
case "f":
|
|
650
|
+
return makeStructFiltered(refs);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
function makeStructRef(refs) {
|
|
654
|
+
return new RefSubjectStruct(refs);
|
|
655
|
+
}
|
|
656
|
+
class RefSubjectStruct extends _protos.FxEffectBase {
|
|
657
|
+
refs;
|
|
658
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
659
|
+
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
660
|
+
version;
|
|
661
|
+
interrupt;
|
|
662
|
+
subscriberCount;
|
|
663
|
+
versioned;
|
|
664
|
+
getSetDelete;
|
|
665
|
+
constructor(refs) {
|
|
666
|
+
super();
|
|
667
|
+
this.refs = refs;
|
|
668
|
+
this.versioned = Versioned.struct(refs);
|
|
669
|
+
this.version = this.versioned.version;
|
|
670
|
+
this.interrupt = Effect.all(Object.values(refs).map(r => r.interrupt), UNBOUNDED);
|
|
671
|
+
this.subscriberCount = Effect.map(Effect.all(Object.values(refs).map(r => r.subscriberCount), UNBOUNDED), ReadonlyArray.reduce(0, _Number.sum));
|
|
672
|
+
this.getSetDelete = {
|
|
673
|
+
get: this.versioned,
|
|
674
|
+
set: a => Effect.all(Object.keys(refs).map(k => set(refs[k], a[k])), UNBOUNDED),
|
|
675
|
+
delete: Effect.map(Effect.all(Object.values(refs).map(r => reset(r)), UNBOUNDED), Option.all)
|
|
676
|
+
};
|
|
677
|
+
this.runUpdates = this.runUpdates.bind(this);
|
|
678
|
+
this.onFailure = this.onFailure.bind(this);
|
|
679
|
+
this.onSuccess = this.onSuccess.bind(this);
|
|
680
|
+
}
|
|
681
|
+
run(sink) {
|
|
682
|
+
return this.versioned.run(sink);
|
|
683
|
+
}
|
|
684
|
+
toEffect() {
|
|
685
|
+
return this.versioned;
|
|
686
|
+
}
|
|
687
|
+
runUpdates(run) {
|
|
688
|
+
return run(this.getSetDelete);
|
|
689
|
+
}
|
|
690
|
+
onFailure(cause) {
|
|
691
|
+
return Effect.all(Object.values(this.refs).map(ref => ref.onFailure(cause)));
|
|
692
|
+
}
|
|
693
|
+
onSuccess(value) {
|
|
694
|
+
return Effect.catchAllCause(this.getSetDelete.set(value), c => this.onFailure(c));
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
function makeStructComputed(refs) {
|
|
698
|
+
return new ComputedImpl(Versioned.struct(refs), Effect.succeed);
|
|
699
|
+
}
|
|
700
|
+
function makeStructFiltered(refs) {
|
|
701
|
+
return new FilteredImpl(Versioned.struct(refs), Effect.succeedSome);
|
|
702
|
+
}
|
|
703
|
+
/**
|
|
704
|
+
* @since 1.20.0
|
|
705
|
+
*/
|
|
706
|
+
function tagged(replay) {
|
|
707
|
+
return identifier => new RefSubjectTagged(C.Tagged(identifier), replay);
|
|
708
|
+
}
|
|
709
|
+
class RefSubjectTagged extends _protos.FxEffectBase {
|
|
710
|
+
tag;
|
|
711
|
+
replay;
|
|
712
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
713
|
+
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
714
|
+
version;
|
|
84
715
|
interrupt;
|
|
85
|
-
|
|
716
|
+
subscriberCount;
|
|
717
|
+
constructor(tag, replay = 0) {
|
|
86
718
|
super();
|
|
87
719
|
this.tag = tag;
|
|
88
|
-
this.
|
|
720
|
+
this.replay = replay;
|
|
89
721
|
this.version = tag.withEffect(ref => ref.version);
|
|
722
|
+
this.interrupt = tag.withEffect(ref => ref.interrupt);
|
|
90
723
|
this.subscriberCount = tag.withEffect(ref => ref.subscriberCount);
|
|
91
|
-
this.
|
|
92
|
-
this.
|
|
93
|
-
this.
|
|
724
|
+
this.runUpdates = this.runUpdates.bind(this);
|
|
725
|
+
this.onFailure = this.onFailure.bind(this);
|
|
726
|
+
this.onSuccess = this.onSuccess.bind(this);
|
|
94
727
|
}
|
|
95
|
-
|
|
96
|
-
return (
|
|
728
|
+
run(sink) {
|
|
729
|
+
return this.tag.withEffect(ref => ref.run(sink));
|
|
97
730
|
}
|
|
98
731
|
toEffect() {
|
|
99
|
-
return this.
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
onFailure = cause => this.tag.withEffect(ref => ref.onFailure(cause));
|
|
115
|
-
onSuccess = a => this.tag.withEffect(ref => ref.onSuccess(a));
|
|
116
|
-
make = (fx, eq) => this.tag.scoped(make(fx, eq || this.defaultEq));
|
|
117
|
-
of = (value, eq) => this.tag.scoped(of(value, eq));
|
|
118
|
-
provide = (fx, eq) => Effect.provide(this.make(fx, eq || this.defaultEq));
|
|
119
|
-
provideFx = (fx, eq) => (0, _core.provide)(this.make(fx, eq || this.defaultEq));
|
|
120
|
-
}
|
|
121
|
-
function makeWithExtension(fx, f, eq) {
|
|
122
|
-
return coreRefSubject.makeWithExtension(fx, f, eq);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Construct a RefSubject with an initial value and the specified subject.
|
|
126
|
-
* @since 1.18.0
|
|
127
|
-
* @category constructors
|
|
732
|
+
return this.tag.withEffect(ref => ref);
|
|
733
|
+
}
|
|
734
|
+
runUpdates(run) {
|
|
735
|
+
return this.tag.withEffect(ref => ref.runUpdates(run));
|
|
736
|
+
}
|
|
737
|
+
onFailure(cause) {
|
|
738
|
+
return this.tag.withEffect(ref => ref.onFailure(cause));
|
|
739
|
+
}
|
|
740
|
+
onSuccess(value) {
|
|
741
|
+
return this.tag.withEffect(ref => ref.onSuccess(value));
|
|
742
|
+
}
|
|
743
|
+
make = fxOrEffect => this.tag.scoped(make(fxOrEffect));
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* @since 1.20.0
|
|
128
747
|
*/
|
|
129
|
-
|
|
748
|
+
function fromTag(tag, f) {
|
|
749
|
+
return new RefSubjectFromTag(tag, f);
|
|
750
|
+
}
|
|
751
|
+
class RefSubjectFromTag extends _protos.FxEffectBase {
|
|
752
|
+
tag;
|
|
753
|
+
f;
|
|
754
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
755
|
+
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
756
|
+
version;
|
|
757
|
+
interrupt;
|
|
758
|
+
subscriberCount;
|
|
759
|
+
_get;
|
|
760
|
+
_fx;
|
|
761
|
+
constructor(tag, f) {
|
|
762
|
+
super();
|
|
763
|
+
this.tag = tag;
|
|
764
|
+
this.f = f;
|
|
765
|
+
this._get = Effect.map(tag, f);
|
|
766
|
+
this._fx = core.fromFxEffect(this._get);
|
|
767
|
+
this.version = Effect.flatMap(this._get, ref => ref.version);
|
|
768
|
+
this.interrupt = Effect.flatMap(this._get, ref => ref.interrupt);
|
|
769
|
+
this.subscriberCount = Effect.flatMap(this._get, ref => ref.subscriberCount);
|
|
770
|
+
}
|
|
771
|
+
run(sink) {
|
|
772
|
+
return this._fx.run(sink);
|
|
773
|
+
}
|
|
774
|
+
toEffect() {
|
|
775
|
+
return Effect.flatten(this._get);
|
|
776
|
+
}
|
|
777
|
+
runUpdates(run) {
|
|
778
|
+
return Effect.flatMap(this._get, ref => ref.runUpdates(run));
|
|
779
|
+
}
|
|
780
|
+
onFailure(cause) {
|
|
781
|
+
return Effect.flatMap(this._get, ref => ref.onFailure(cause));
|
|
782
|
+
}
|
|
783
|
+
onSuccess(value) {
|
|
784
|
+
return Effect.flatMap(this._get, ref => ref.onSuccess(value));
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
function isRefSubject(u) {
|
|
788
|
+
return isObjectLike(u) && _TypeId.RefSubjectTypeId in u;
|
|
789
|
+
}
|
|
790
|
+
function isComputed(u) {
|
|
791
|
+
return isObjectLike(u) && _TypeId.ComputedTypeId in u;
|
|
792
|
+
}
|
|
793
|
+
function isFiltered(u) {
|
|
794
|
+
return isObjectLike(u) && _TypeId.FilteredTypeId in u;
|
|
795
|
+
}
|
|
796
|
+
function isDerived(u) {
|
|
797
|
+
return isRefSubject(u) && "persist" in u;
|
|
798
|
+
}
|
|
799
|
+
function isObjectLike(u) {
|
|
800
|
+
if (u == null) return false;
|
|
801
|
+
const type = typeof u;
|
|
802
|
+
return type === "object" && !Array.isArray(u) || type === "function";
|
|
803
|
+
}
|
|
130
804
|
/**
|
|
131
|
-
*
|
|
132
|
-
* @since 1.18.0
|
|
133
|
-
* @category combinators
|
|
805
|
+
* @since 1.20.0
|
|
134
806
|
*/
|
|
135
|
-
|
|
807
|
+
function computedFromTag(tag, f) {
|
|
808
|
+
return new ComputedFromTag(tag, f);
|
|
809
|
+
}
|
|
810
|
+
class ComputedFromTag extends _protos.FxEffectBase {
|
|
811
|
+
tag;
|
|
812
|
+
f;
|
|
813
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
814
|
+
version;
|
|
815
|
+
_get;
|
|
816
|
+
constructor(tag, f) {
|
|
817
|
+
super();
|
|
818
|
+
this.tag = tag;
|
|
819
|
+
this.f = f;
|
|
820
|
+
this._get = Effect.map(tag, f);
|
|
821
|
+
this.version = Effect.flatMap(this._get, ref => ref.version);
|
|
822
|
+
}
|
|
823
|
+
run(sink) {
|
|
824
|
+
return Effect.flatMap(this._get, ref => ref.run(sink));
|
|
825
|
+
}
|
|
826
|
+
toEffect() {
|
|
827
|
+
return Effect.flatten(this._get);
|
|
828
|
+
}
|
|
829
|
+
}
|
|
136
830
|
/**
|
|
137
|
-
*
|
|
138
|
-
* success values separately.
|
|
139
|
-
* @since 1.18.0
|
|
140
|
-
* @category combinators
|
|
831
|
+
* @since 1.20.0
|
|
141
832
|
*/
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
833
|
+
function filteredFromTag(tag, f) {
|
|
834
|
+
return new FilteredFromTag(tag, f);
|
|
835
|
+
}
|
|
836
|
+
class FilteredFromTag extends _protos.FxEffectBase {
|
|
837
|
+
tag;
|
|
838
|
+
f;
|
|
839
|
+
[_TypeId.FilteredTypeId] = _TypeId.FilteredTypeId;
|
|
840
|
+
version;
|
|
841
|
+
_get;
|
|
842
|
+
constructor(tag, f) {
|
|
843
|
+
super();
|
|
844
|
+
this.tag = tag;
|
|
845
|
+
this.f = f;
|
|
846
|
+
this._get = Effect.map(tag, f);
|
|
847
|
+
this.version = Effect.flatMap(this._get, ref => ref.version);
|
|
848
|
+
}
|
|
849
|
+
run(sink) {
|
|
850
|
+
return Effect.flatMap(this._get, ref => ref.run(sink));
|
|
851
|
+
}
|
|
852
|
+
toEffect() {
|
|
853
|
+
return Effect.flatten(this._get);
|
|
854
|
+
}
|
|
855
|
+
asComputed() {
|
|
856
|
+
return new ComputedFromTag(this.tag, s => this.f(s).asComputed());
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
/**
|
|
860
|
+
* @since 1.20.0
|
|
161
861
|
*/
|
|
162
|
-
function
|
|
163
|
-
|
|
862
|
+
const provide = exports.provide = /*#__PURE__*/(0, _Function.dual)(2, function provide(ref, providing) {
|
|
863
|
+
const layer = Layer.isLayer(providing) ? providing : C.isContext(providing) ? Layer.succeedContext(providing) : (0, _provide.runtimeToLayer)(providing);
|
|
864
|
+
if (isComputed(ref)) {
|
|
865
|
+
return ComputedImpl.make(Versioned.provide(ref, layer), Effect.succeed);
|
|
866
|
+
} else if (isFiltered(ref)) {
|
|
867
|
+
return FilteredImpl.make(Versioned.provide(ref, layer), Effect.succeedSome);
|
|
868
|
+
} else {
|
|
869
|
+
return new RefSubjectProvide(ref, layer);
|
|
870
|
+
}
|
|
871
|
+
});
|
|
872
|
+
class RefSubjectProvide extends _protos.FxEffectBase {
|
|
873
|
+
ref;
|
|
874
|
+
layer;
|
|
875
|
+
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
876
|
+
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
877
|
+
interrupt;
|
|
878
|
+
subscriberCount;
|
|
879
|
+
constructor(ref, layer) {
|
|
880
|
+
super();
|
|
881
|
+
this.ref = ref;
|
|
882
|
+
this.layer = layer;
|
|
883
|
+
this.interrupt = Effect.provide(ref.interrupt, layer);
|
|
884
|
+
this.subscriberCount = Effect.provide(ref.subscriberCount, layer);
|
|
885
|
+
}
|
|
886
|
+
run(sink) {
|
|
887
|
+
return Effect.provide(this.ref.run(sink), this.layer);
|
|
888
|
+
}
|
|
889
|
+
toEffect() {
|
|
890
|
+
return Effect.provide(this.ref, this.layer);
|
|
891
|
+
}
|
|
164
892
|
}
|
|
165
893
|
/**
|
|
166
|
-
*
|
|
894
|
+
* Set the value to true
|
|
167
895
|
* @since 1.18.0
|
|
168
896
|
*/
|
|
169
|
-
|
|
170
|
-
return (0, _schemaRefSubject.toRefSubject)(schema);
|
|
171
|
-
}
|
|
897
|
+
const asTrue = ref => set(ref, true);
|
|
172
898
|
/**
|
|
899
|
+
* Set the value to false
|
|
173
900
|
* @since 1.18.0
|
|
174
901
|
*/
|
|
175
|
-
|
|
902
|
+
exports.asTrue = asTrue;
|
|
903
|
+
const asFalse = ref => set(ref, false);
|
|
176
904
|
/**
|
|
905
|
+
* Toggle the boolean value between true and false
|
|
177
906
|
* @since 1.18.0
|
|
178
907
|
*/
|
|
179
|
-
|
|
908
|
+
exports.asFalse = asFalse;
|
|
909
|
+
const toggle = ref => update(ref, Boolean.not);
|
|
910
|
+
exports.toggle = toggle;
|
|
911
|
+
const add = x => x + 1;
|
|
180
912
|
/**
|
|
913
|
+
* Set the value to true
|
|
181
914
|
* @since 1.18.0
|
|
182
915
|
*/
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
916
|
+
const increment = ref => update(ref, add);
|
|
917
|
+
exports.increment = increment;
|
|
918
|
+
const sub = x => x - 1;
|
|
186
919
|
/**
|
|
920
|
+
* Set the value to false
|
|
187
921
|
* @since 1.18.0
|
|
188
922
|
*/
|
|
189
|
-
const
|
|
190
|
-
|
|
923
|
+
const decrement = ref => update(ref, sub);
|
|
924
|
+
/**
|
|
925
|
+
* @since 1.20.0
|
|
926
|
+
*/
|
|
927
|
+
exports.decrement = decrement;
|
|
928
|
+
const slice = exports.slice = /*#__PURE__*/(0, _Function.dual)(3, function slice(ref, drop, take) {
|
|
929
|
+
return new RefSubjectSlice(ref, drop, take);
|
|
930
|
+
});
|
|
931
|
+
/**
|
|
932
|
+
* @since 1.20.0
|
|
933
|
+
*/
|
|
934
|
+
const drop = exports.drop = /*#__PURE__*/(0, _Function.dual)(2, function drop(ref, drop) {
|
|
935
|
+
return slice(ref, drop, Infinity);
|
|
191
936
|
});
|
|
192
|
-
|
|
937
|
+
/**
|
|
938
|
+
* @since 1.20.0
|
|
939
|
+
*/
|
|
940
|
+
const take = exports.take = /*#__PURE__*/(0, _Function.dual)(2, function take(ref, take) {
|
|
941
|
+
return slice(ref, 0, take);
|
|
942
|
+
});
|
|
943
|
+
class RefSubjectSlice extends _protos.FxEffectBase {
|
|
193
944
|
ref;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
945
|
+
drop;
|
|
946
|
+
take;
|
|
197
947
|
[_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
|
|
948
|
+
[_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
|
|
198
949
|
version;
|
|
199
|
-
subscriberCount;
|
|
200
|
-
get;
|
|
201
|
-
delete;
|
|
202
950
|
interrupt;
|
|
203
|
-
|
|
951
|
+
subscriberCount;
|
|
952
|
+
_fx;
|
|
953
|
+
constructor(ref, drop, take) {
|
|
204
954
|
super();
|
|
205
955
|
this.ref = ref;
|
|
206
|
-
this.
|
|
207
|
-
this.
|
|
956
|
+
this.drop = drop;
|
|
957
|
+
this.take = take;
|
|
208
958
|
this.version = ref.version;
|
|
209
|
-
this.subscriberCount = ref.subscriberCount;
|
|
210
|
-
this.get = Effect.map(ref.get, from);
|
|
211
|
-
this.delete = Effect.map(ref.delete, Option.map(from));
|
|
212
959
|
this.interrupt = ref.interrupt;
|
|
960
|
+
this.subscriberCount = ref.subscriberCount;
|
|
961
|
+
this._fx = share.hold(core.slice(ref, drop, take));
|
|
962
|
+
this._effect = ref;
|
|
213
963
|
}
|
|
214
|
-
|
|
215
|
-
return this.
|
|
964
|
+
run(sink) {
|
|
965
|
+
return this._fx.run(sink);
|
|
216
966
|
}
|
|
217
967
|
toEffect() {
|
|
218
|
-
return this.ref
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
mapEffect = f => (0, _Computed.Computed)(this, f);
|
|
230
|
-
map = f => this.mapEffect(b => Effect.sync(() => f(b)));
|
|
231
|
-
filterMapEffect = f => (0, _Filtered.Filtered)(this, f);
|
|
232
|
-
filterMap = f => (0, _Filtered.Filtered)(this, a => Effect.sync(() => f(a)));
|
|
233
|
-
filter = f => this.filterMap(a => f(a) ? Option.some(a) : Option.none());
|
|
234
|
-
filterEffect = f => this.filterMapEffect(a => Effect.map(f(a), b => b ? Option.some(a) : Option.none()));
|
|
235
|
-
onSuccess = b => this.ref.onSuccess(this.to(b));
|
|
236
|
-
onFailure = b => this.ref.onFailure(b);
|
|
237
|
-
skipRepeats = (eq = _Equal.equals) => (0, _Computed.Computed)(Versioned.transformFx(this, (0, _core.skipRepeatsWith)(eq)), Effect.succeed);
|
|
968
|
+
return this.ref;
|
|
969
|
+
}
|
|
970
|
+
runUpdates(run) {
|
|
971
|
+
return this.ref.runUpdates(run);
|
|
972
|
+
}
|
|
973
|
+
onFailure(cause) {
|
|
974
|
+
return this.ref.onFailure(cause);
|
|
975
|
+
}
|
|
976
|
+
onSuccess(value) {
|
|
977
|
+
return this.ref.onSuccess(value);
|
|
978
|
+
}
|
|
238
979
|
}
|
|
239
980
|
//# sourceMappingURL=RefSubject.js.map
|