@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/src/Versioned.ts
CHANGED
|
@@ -1,147 +1,162 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* @since 1.
|
|
2
|
+
* Versioned is a special Fx which is also an Effect, and keeps track of a version number of the
|
|
3
|
+
* current value it holds. The Fx portion is used to subscribe to changes, the Effect portion to
|
|
4
|
+
* sample the current value. The version can be utilized to avoid computing work related to this value.
|
|
5
|
+
* @since 1.0.0
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
8
|
+
import type * as Context from "@typed/context"
|
|
9
|
+
import type { Layer, Runtime, Scope } from "effect"
|
|
10
|
+
import * as Effect from "effect/Effect"
|
|
11
|
+
import { dual, flow } from "effect/Function"
|
|
11
12
|
import { sum } from "effect/Number"
|
|
12
|
-
import
|
|
13
|
+
import * as Option from "effect/Option"
|
|
14
|
+
import type { Fx } from "./Fx.js"
|
|
13
15
|
import * as core from "./internal/core.js"
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
16
|
+
import { MulticastEffect } from "./internal/helpers.js"
|
|
17
|
+
import { FxEffectBase } from "./internal/protos.js"
|
|
18
|
+
import * as coreShare from "./internal/share.js"
|
|
19
|
+
import type { Sink } from "./Sink.js"
|
|
20
|
+
|
|
21
|
+
// TODO: dualize
|
|
22
|
+
// TODO: context abstraction
|
|
23
|
+
// TODO: More operators
|
|
16
24
|
|
|
17
25
|
/**
|
|
18
|
-
*
|
|
19
|
-
* for creating Computed + Filtered types from a RefSubject which is the canonical implementation of
|
|
20
|
-
* an at type which is both an Fx and an Effect.
|
|
21
|
-
*
|
|
22
|
-
* The Fx portion naturally has representations for dealing with keeping things up-to-date and
|
|
23
|
-
* avoiding doing any work that is not necessary. The Effect, or "pull", portion utilizes the
|
|
24
|
-
* version to determine if the current value is up to date. If it is not, then the Fx portion
|
|
25
|
-
* will be run to update the value. This allows for derived types to cache values locally and
|
|
26
|
-
* avoid doing any work if the value is up to date.
|
|
27
|
-
* @since 1.18.0
|
|
28
|
-
* @category models
|
|
26
|
+
* @since 1.0.0
|
|
29
27
|
*/
|
|
30
|
-
export interface Versioned<
|
|
31
|
-
|
|
32
|
-
* The current version of this FxEffect. This is used to determine if the current value
|
|
33
|
-
* is up to date to allow localized caching of value.
|
|
34
|
-
*/
|
|
35
|
-
readonly version: Effect.Effect<R0, E0, number>
|
|
28
|
+
export interface Versioned<R1, E1, R2, E2, A2, R3, E3, A3> extends Fx<R2, E2, A2>, Effect.Effect<R3, E3, A3> {
|
|
29
|
+
readonly version: Effect.Effect<R1, E1, number>
|
|
36
30
|
}
|
|
37
31
|
|
|
38
32
|
/**
|
|
39
|
-
* @since 1.
|
|
33
|
+
* @since 1.0.0
|
|
40
34
|
*/
|
|
41
35
|
export namespace Versioned {
|
|
42
36
|
/**
|
|
43
|
-
* @
|
|
37
|
+
* @category models
|
|
38
|
+
* @since 1.0.0
|
|
39
|
+
*/
|
|
40
|
+
export type Unify<T> = T extends
|
|
41
|
+
Versioned<infer R1, infer E1, infer R2, infer E2, infer A2, infer R3, infer E3, infer A3> | infer _
|
|
42
|
+
? Versioned<R1, E1, R2, E2, A2, R3, E3, A3>
|
|
43
|
+
: never
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @since 1.0.0
|
|
44
47
|
*/
|
|
45
|
-
export type VersionContext<T> = T extends
|
|
46
|
-
Versioned<infer R0, infer _E0, infer _R, infer _E, infer _A, infer _R2, infer _E2, infer _B> ? R0 : never
|
|
48
|
+
export type VersionContext<T> = T extends Versioned<infer R, any, any, any, any, any, any, any> ? R : never
|
|
47
49
|
|
|
48
50
|
/**
|
|
49
|
-
* @since 1.
|
|
51
|
+
* @since 1.0.0
|
|
50
52
|
*/
|
|
51
|
-
export type VersionError<T> = T extends
|
|
52
|
-
Versioned<infer _R0, infer E0, infer _R, infer _E, infer _A, infer _R2, infer _E2, infer _B> ? E0 : never
|
|
53
|
+
export type VersionError<T> = T extends Versioned<any, infer E, any, any, any, any, any, any> ? E : never
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
/**
|
|
56
|
-
*
|
|
57
|
-
* @since 1.18.0
|
|
58
|
-
* @category constructors
|
|
57
|
+
* @since 1.0.0
|
|
59
58
|
*/
|
|
60
|
-
export
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
export function make<R1, E1, R2, E2, A2, R3, E3, A3>(
|
|
60
|
+
version: Effect.Effect<R1, E1, number>,
|
|
61
|
+
fx: Fx<R2, E2, A2>,
|
|
62
|
+
effect: Effect.Effect<R3, E3, A3>
|
|
63
|
+
): Versioned<R1, E1, R2, E2, A2, R3, E3, A3> {
|
|
64
|
+
return new VersionedImpl(version, fx, effect)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
class VersionedImpl<R1, E1, R2, E2, A2, R3, E3, A3> extends FxEffectBase<R2, E2, A2, R3, E3, A3>
|
|
68
|
+
implements Versioned<R1, E1, R2, E2, A2, R3, E3, A3>
|
|
69
|
+
{
|
|
70
|
+
constructor(
|
|
71
|
+
readonly version: Effect.Effect<R1, E1, number>,
|
|
72
|
+
readonly fx: Fx<R2, E2, A2>,
|
|
73
|
+
readonly effect: Effect.Effect<R3, E3, A3>
|
|
74
|
+
) {
|
|
75
|
+
super()
|
|
65
76
|
}
|
|
66
|
-
) => Versioned<R0, E0, R, E, A, R2, E2, B> = fxEffectProto.makeVersioned
|
|
67
77
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
78
|
+
run<R3>(sink: Sink<R3, E2, A2>): Effect.Effect<R2 | R3, never, unknown> {
|
|
79
|
+
return this.fx.run(sink)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
toEffect(): Effect.Effect<R3, E3, A3> {
|
|
83
|
+
return this.effect
|
|
84
|
+
}
|
|
85
|
+
}
|
|
74
86
|
|
|
75
87
|
/**
|
|
76
|
-
*
|
|
77
|
-
* @since 1.18.0
|
|
78
|
-
* @category combinators
|
|
88
|
+
* @since 1.0.0
|
|
79
89
|
*/
|
|
80
|
-
export
|
|
81
|
-
<R, E, A, R2, E2, B
|
|
82
|
-
|
|
83
|
-
transformGet: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R4, E4, D>
|
|
84
|
-
): <R0, E0>(
|
|
85
|
-
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
86
|
-
) => Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D>
|
|
87
|
-
<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
|
|
88
|
-
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
89
|
-
transformFx: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>,
|
|
90
|
-
transformGet: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R4, E4, D>
|
|
91
|
-
): Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D>
|
|
92
|
-
} = dual(3, function transform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
|
|
93
|
-
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
94
|
-
transformFx: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>,
|
|
90
|
+
export function transform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
|
|
91
|
+
input: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
92
|
+
transformFx: (fx: Fx<R, E, A>) => Fx<R3, E3, C>,
|
|
95
93
|
transformGet: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R4, E4, D>
|
|
96
94
|
): Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D> {
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
if (isVersionedTransform(input)) {
|
|
96
|
+
return new VersionedTransform(
|
|
97
|
+
input.input,
|
|
98
|
+
flow(input._transformFx, transformFx),
|
|
99
|
+
flow(input._transformEffect, transformGet)
|
|
100
|
+
)
|
|
101
|
+
} else {
|
|
102
|
+
return new VersionedTransform(input, transformFx, transformGet)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
99
105
|
|
|
100
106
|
/**
|
|
101
|
-
*
|
|
102
|
-
* @since 1.18.0
|
|
103
|
-
* @category combinators
|
|
107
|
+
* @internal
|
|
104
108
|
*/
|
|
105
|
-
export
|
|
106
|
-
<
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
export class VersionedTransform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>
|
|
110
|
+
extends FxEffectBase<R3, E3, C, R0 | R4, E0 | E4, D>
|
|
111
|
+
implements Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D>
|
|
112
|
+
{
|
|
113
|
+
protected _version = -1
|
|
114
|
+
protected _currentValue: Option.Option<D> = Option.none()
|
|
115
|
+
private _fx: Fx<R3, E3, C>
|
|
111
116
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
f: (fx: Fx.Fx<R, E, A>) => Fx.Fx<R3, E3, C>
|
|
119
|
-
): Versioned<never, never, R3, E3, C, R0 | R2, E0 | E2, B> {
|
|
120
|
-
return transform(versioned, f, identity)
|
|
121
|
-
})
|
|
117
|
+
constructor(
|
|
118
|
+
readonly input: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
119
|
+
readonly _transformFx: (fx: Fx<R, E, A>) => Fx<R3, E3, C>,
|
|
120
|
+
readonly _transformEffect: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R4, E4, D>
|
|
121
|
+
) {
|
|
122
|
+
super()
|
|
122
123
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
* @since 1.18.0
|
|
126
|
-
* @category combinators
|
|
127
|
-
*/
|
|
128
|
-
export const transformEffect: {
|
|
129
|
-
<R2, E2, B, R3, E3, C>(
|
|
130
|
-
f: (effect: Effect.Effect<R2, E2, B>) => Effect.Effect<R3, E3, C>
|
|
131
|
-
): <R0, E0, R, E, A>(
|
|
132
|
-
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
133
|
-
) => Versioned<never, never, R, E, A, R0 | R3, E0 | E3, C>
|
|
124
|
+
this._fx = _transformFx(this.input)
|
|
125
|
+
}
|
|
134
126
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
127
|
+
readonly version = Effect.sync(() => this._version)
|
|
128
|
+
|
|
129
|
+
run<R5>(sink: Sink<R5, E3, C>): Effect.Effect<R3 | R5, never, unknown> {
|
|
130
|
+
return this._fx.run(sink)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
toEffect(): Effect.Effect<R0 | R4, E0 | E4, D> {
|
|
134
|
+
const transformed = this._transformEffect(this.input as any as Effect.Effect<R2, E2, B>)
|
|
135
|
+
const update = (v: number) =>
|
|
136
|
+
Effect.tap(
|
|
137
|
+
transformed,
|
|
138
|
+
(value) =>
|
|
139
|
+
Effect.sync(() => {
|
|
140
|
+
this._currentValue = Option.some(value)
|
|
141
|
+
this._version = v
|
|
142
|
+
})
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
return new MulticastEffect(Effect.flatMap(this.input.version, (version) => {
|
|
146
|
+
if (version === this._version && Option.isSome(this._currentValue)) {
|
|
147
|
+
return Effect.succeed(this._currentValue.value)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return update(version)
|
|
151
|
+
}))
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function isVersionedTransform(
|
|
156
|
+
u: unknown
|
|
157
|
+
): u is VersionedTransform<any, any, any, any, any, any, any, any, any, any, any, any, any, any> {
|
|
158
|
+
return u instanceof VersionedTransform
|
|
159
|
+
}
|
|
145
160
|
|
|
146
161
|
/**
|
|
147
162
|
* Transform a Versioned's output value as both an Fx and Effect.
|
|
@@ -172,7 +187,7 @@ export const map: {
|
|
|
172
187
|
onEffect: (b: B) => D
|
|
173
188
|
}
|
|
174
189
|
): Versioned<never, never, R, E, C, R0 | R2, E0 | E2, D> {
|
|
175
|
-
return transform(versioned, core.map(options.onFx), Effect.map(options.onEffect))
|
|
190
|
+
return transform(versioned, (fx) => core.map(fx, options.onFx), Effect.map(options.onEffect))
|
|
176
191
|
})
|
|
177
192
|
|
|
178
193
|
/**
|
|
@@ -198,29 +213,29 @@ export const mapEffect: {
|
|
|
198
213
|
onEffect: (b: B) => Effect.Effect<R4, E4, D>
|
|
199
214
|
}
|
|
200
215
|
): Versioned<never, never, R | R3, E | E3, C, R0 | R2 | R4, E0 | E2 | E4, D> {
|
|
201
|
-
return transform(versioned, core.mapEffect(options.onFx), Effect.flatMap(options.onEffect))
|
|
216
|
+
return transform(versioned, (fx) => core.mapEffect(fx, options.onFx), Effect.flatMap(options.onEffect))
|
|
202
217
|
})
|
|
203
218
|
|
|
204
219
|
/**
|
|
205
220
|
* @since 1.0.0
|
|
206
221
|
*/
|
|
207
|
-
export function
|
|
222
|
+
export function tuple<const VS extends ReadonlyArray<Versioned<any, any, any, any, any, any, any, any>>>(
|
|
208
223
|
versioneds: VS
|
|
209
224
|
): Versioned<
|
|
210
225
|
Versioned.VersionContext<VS[number]>,
|
|
211
226
|
Versioned.VersionError<VS[number]>,
|
|
212
|
-
Fx.
|
|
213
|
-
Fx.
|
|
214
|
-
{ readonly [K in keyof VS]: Fx.
|
|
227
|
+
Fx.Context<VS[number]>,
|
|
228
|
+
Fx.Error<VS[number]>,
|
|
229
|
+
{ readonly [K in keyof VS]: Fx.Success<VS[K]> },
|
|
215
230
|
Effect.Effect.Context<VS[number]>,
|
|
216
231
|
Effect.Effect.Error<VS[number]>,
|
|
217
232
|
{ readonly [K in keyof VS]: Effect.Effect.Success<VS[K]> }
|
|
218
233
|
> {
|
|
219
|
-
return make(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
234
|
+
return make(
|
|
235
|
+
Effect.map(Effect.all(versioneds.map((v) => v.version)), (versions) => versions.reduce(sum, 0)),
|
|
236
|
+
core.tuple(versioneds),
|
|
237
|
+
Effect.all(versioneds, { concurrency: "unbounded" }) as any
|
|
238
|
+
)
|
|
224
239
|
}
|
|
225
240
|
|
|
226
241
|
/**
|
|
@@ -231,17 +246,20 @@ export function struct<const VS extends Readonly<Record<string, Versioned<any, a
|
|
|
231
246
|
): Versioned<
|
|
232
247
|
Versioned.VersionContext<VS[keyof VS]>,
|
|
233
248
|
Versioned.VersionError<VS[keyof VS]>,
|
|
234
|
-
Fx.
|
|
235
|
-
Fx.
|
|
236
|
-
{ readonly [K in keyof VS]: Fx.
|
|
249
|
+
Fx.Context<VS[keyof VS]>,
|
|
250
|
+
Fx.Error<VS[keyof VS]>,
|
|
251
|
+
{ readonly [K in keyof VS]: Fx.Success<VS[K]> },
|
|
237
252
|
Effect.Effect.Context<VS[keyof VS]>,
|
|
238
253
|
Effect.Effect.Error<VS[keyof VS]>,
|
|
239
254
|
{ readonly [K in keyof VS]: Effect.Effect.Success<VS[K]> }
|
|
240
255
|
> {
|
|
241
256
|
return map(
|
|
242
|
-
|
|
257
|
+
tuple(
|
|
243
258
|
Object.entries(versioneds).map(([k, v]) =>
|
|
244
|
-
map(v, {
|
|
259
|
+
map(v, {
|
|
260
|
+
onFx: (x) => [k, x] as const,
|
|
261
|
+
onEffect: (x) => [k, x] as const
|
|
262
|
+
})
|
|
245
263
|
)
|
|
246
264
|
),
|
|
247
265
|
{
|
|
@@ -255,48 +273,82 @@ export function struct<const VS extends Readonly<Record<string, Versioned<any, a
|
|
|
255
273
|
* @since 1.0.0
|
|
256
274
|
*/
|
|
257
275
|
export const provide: {
|
|
258
|
-
<
|
|
259
|
-
|
|
260
|
-
)
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
<
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
versioned: Versioned<R0, E0,
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
versioned
|
|
287
|
-
context
|
|
288
|
-
): Versioned<never, never, Exclude<R1, C3>, E1, A1, Exclude<R0 | R2, C3>, E0 | E2, B2>
|
|
289
|
-
} = dual(2, function provide<R0, E0, R1, E1, A1, R2, E2, B2, R3, E3, C3>(
|
|
290
|
-
versioned: Versioned<R0, E0, R1, E1, A1, R2, E2, B2>,
|
|
291
|
-
layer: Layer.Layer<R3, E3, C3>
|
|
292
|
-
): Versioned<never, never, R3 | Exclude<R1, C3>, E1 | E3, A1, R3 | Exclude<R0 | R2, C3>, E0 | E2 | E3, B2> {
|
|
293
|
-
return transform(
|
|
294
|
-
make({
|
|
295
|
-
effect: versioned,
|
|
296
|
-
fx: versioned,
|
|
297
|
-
version: Effect.provide(versioned.version, layer)
|
|
298
|
-
}),
|
|
299
|
-
core.provide(layer),
|
|
300
|
-
Effect.provide(layer)
|
|
276
|
+
<S>(ctx: Context.Context<S> | Runtime.Runtime<S>): <R0, E0, R, E, A, R2, E2, B>(
|
|
277
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
278
|
+
) => Versioned<Exclude<R0, S>, E0, Exclude<R, S>, E, A, Exclude<R2, S>, E2, B>
|
|
279
|
+
|
|
280
|
+
<R3, S>(layer: Layer.Layer<R3, never, S>): <R0, E0, R, E, A, R2, E2, B>(
|
|
281
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
282
|
+
) => Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
|
|
283
|
+
|
|
284
|
+
<R0, E0, R, E, A, R2, E2, B, S>(
|
|
285
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
286
|
+
context: Context.Context<S> | Runtime.Runtime<S>
|
|
287
|
+
): Versioned<Exclude<R0, S>, E0, Exclude<R, S>, E, A, Exclude<R2, S>, E2, B>
|
|
288
|
+
|
|
289
|
+
<R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
|
|
290
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
291
|
+
context: Layer.Layer<R3, never, S>
|
|
292
|
+
): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
|
|
293
|
+
|
|
294
|
+
<R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
|
|
295
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
296
|
+
context: Context.Context<S> | Runtime.Runtime<S> | Layer.Layer<R3, never, S>
|
|
297
|
+
): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
|
|
298
|
+
} = dual(2, function provide<R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
|
|
299
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
300
|
+
context: Context.Context<S> | Runtime.Runtime<S> | Layer.Layer<R3, never, S>
|
|
301
|
+
): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B> {
|
|
302
|
+
return make(
|
|
303
|
+
Effect.provide(versioned.version, context as Layer.Layer<R3, never, S>),
|
|
304
|
+
core.provide(versioned, context),
|
|
305
|
+
Effect.provide(versioned, context as Layer.Layer<R3, never, S>)
|
|
301
306
|
)
|
|
302
307
|
})
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* @since 1.0.0
|
|
311
|
+
*/
|
|
312
|
+
export function of<A>(value: A): Versioned<never, never, never, never, A, never, never, A> {
|
|
313
|
+
return make(Effect.succeed(1), core.succeed(value), Effect.succeed(value))
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* @since 1.0.0
|
|
318
|
+
*/
|
|
319
|
+
export function hold<R0, E0, R, E, A, R2, E2, B>(
|
|
320
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
321
|
+
): Versioned<R0, E0, R | Scope.Scope, E, A, R2, E2, B> {
|
|
322
|
+
return make(
|
|
323
|
+
versioned.version,
|
|
324
|
+
coreShare.hold(versioned),
|
|
325
|
+
versioned
|
|
326
|
+
)
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* @since 1.0.0
|
|
331
|
+
*/
|
|
332
|
+
export function multicast<R0, E0, R, E, A, R2, E2, B>(
|
|
333
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
334
|
+
): Versioned<R0, E0, R | Scope.Scope, E, A, R2, E2, B> {
|
|
335
|
+
return make(
|
|
336
|
+
versioned.version,
|
|
337
|
+
coreShare.multicast(versioned),
|
|
338
|
+
versioned
|
|
339
|
+
)
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* @since 1.0.0
|
|
344
|
+
*/
|
|
345
|
+
export function replay<R0, E0, R, E, A, R2, E2, B>(
|
|
346
|
+
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
347
|
+
bufferSize: number
|
|
348
|
+
): Versioned<R0, E0, R | Scope.Scope, E, A, R2, E2, B> {
|
|
349
|
+
return make(
|
|
350
|
+
versioned.version,
|
|
351
|
+
coreShare.replay(versioned, bufferSize),
|
|
352
|
+
versioned
|
|
353
|
+
)
|
|
354
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -10,22 +10,64 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* [
|
|
13
|
+
* [Fx documentation](https://tylors.github.io/typed/fx/Fx.ts.html)
|
|
14
14
|
* @since 1.18.0
|
|
15
15
|
*/
|
|
16
|
-
export *
|
|
16
|
+
export * from "./Fx.js"
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* [
|
|
19
|
+
* [AsyncData documentation](https://tylors.github.io/typed/fx/AsyncData.ts.html)
|
|
20
20
|
* @since 1.18.0
|
|
21
21
|
*/
|
|
22
|
-
export * as
|
|
22
|
+
export * as AsyncData from "./AsyncData.js"
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* [
|
|
25
|
+
* [Emitter documentation](https://tylors.github.io/typed/fx/Emitter.ts.html)
|
|
26
26
|
* @since 1.18.0
|
|
27
27
|
*/
|
|
28
|
-
export * from "./
|
|
28
|
+
export * as Emitter from "./Emitter.js"
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* [Form documentation](https://tylors.github.io/typed/fx/Form.ts.html)
|
|
32
|
+
* @since 1.18.0
|
|
33
|
+
*/
|
|
34
|
+
export * as Form from "./Form.js"
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* [FormEntry documentation](https://tylors.github.io/typed/fx/FormEntry.ts.html)
|
|
38
|
+
* @since 1.18.0
|
|
39
|
+
*/
|
|
40
|
+
export * as FormEntry from "./FormEntry.js"
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* [Guard documentation](https://tylors.github.io/typed/fx/Guard.ts.html)
|
|
44
|
+
* @since 1.18.0
|
|
45
|
+
*/
|
|
46
|
+
export * as Guard from "./Guard.js"
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* [Idle documentation](https://tylors.github.io/typed/fx/Idle.ts.html)
|
|
50
|
+
* @since 1.18.0
|
|
51
|
+
*/
|
|
52
|
+
export * as Idle from "./Idle.js"
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* [Match documentation](https://tylors.github.io/typed/fx/Match.ts.html)
|
|
56
|
+
* @since 1.18.0
|
|
57
|
+
*/
|
|
58
|
+
export * as Match from "./Match.js"
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* [Pull documentation](https://tylors.github.io/typed/fx/Pull.ts.html)
|
|
62
|
+
* @since 1.18.0
|
|
63
|
+
*/
|
|
64
|
+
export * as Pull from "./Pull.js"
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* [Push documentation](https://tylors.github.io/typed/fx/Push.ts.html)
|
|
68
|
+
* @since 1.18.0
|
|
69
|
+
*/
|
|
70
|
+
export * as Push from "./Push.js"
|
|
29
71
|
|
|
30
72
|
/**
|
|
31
73
|
* [RefArray documentation](https://tylors.github.io/typed/fx/RefArray.ts.html)
|
|
@@ -33,6 +75,24 @@ export * from "./Fx.js"
|
|
|
33
75
|
*/
|
|
34
76
|
export * as RefArray from "./RefArray.js"
|
|
35
77
|
|
|
78
|
+
/**
|
|
79
|
+
* [RefChunk documentation](https://tylors.github.io/typed/fx/RefChunk.ts.html)
|
|
80
|
+
* @since 1.18.0
|
|
81
|
+
*/
|
|
82
|
+
export * as RefChunk from "./RefChunk.js"
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* [RefHashMap documentation](https://tylors.github.io/typed/fx/RefHashMap.ts.html)
|
|
86
|
+
* @since 1.18.0
|
|
87
|
+
*/
|
|
88
|
+
export * as RefHashMap from "./RefHashMap.js"
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* [RefHashSet documentation](https://tylors.github.io/typed/fx/RefHashSet.ts.html)
|
|
92
|
+
* @since 1.18.0
|
|
93
|
+
*/
|
|
94
|
+
export * as RefHashSet from "./RefHashSet.js"
|
|
95
|
+
|
|
36
96
|
/**
|
|
37
97
|
* [RefSubject documentation](https://tylors.github.io/typed/fx/RefSubject.ts.html)
|
|
38
98
|
* @since 1.18.0
|
|
@@ -45,6 +105,12 @@ export * as RefSubject from "./RefSubject.js"
|
|
|
45
105
|
*/
|
|
46
106
|
export * as Sink from "./Sink.js"
|
|
47
107
|
|
|
108
|
+
/**
|
|
109
|
+
* [Stream documentation](https://tylors.github.io/typed/fx/Stream.ts.html)
|
|
110
|
+
* @since 1.18.0
|
|
111
|
+
*/
|
|
112
|
+
export * as Stream from "./Stream.js"
|
|
113
|
+
|
|
48
114
|
/**
|
|
49
115
|
* [Subject documentation](https://tylors.github.io/typed/fx/Subject.ts.html)
|
|
50
116
|
* @since 1.18.0
|
|
@@ -62,3 +128,9 @@ export * as Typeclass from "./Typeclass.js"
|
|
|
62
128
|
* @since 1.18.0
|
|
63
129
|
*/
|
|
64
130
|
export * from "./TypeId.js"
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* [Versioned documentation](https://tylors.github.io/typed/fx/Versioned.ts.html)
|
|
134
|
+
* @since 1.18.0
|
|
135
|
+
*/
|
|
136
|
+
export * as Versioned from "./Versioned.js"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Equivalence, FiberId } from "effect"
|
|
2
|
+
import * as Deferred from "effect/Deferred"
|
|
3
|
+
import * as Effect from "effect/Effect"
|
|
4
|
+
import * as Exit from "effect/Exit"
|
|
5
|
+
import * as Option from "effect/Option"
|
|
6
|
+
import { EffectBase } from "./protos.js"
|
|
7
|
+
|
|
8
|
+
export class DeferredRef<E, A> extends EffectBase<never, E, A> {
|
|
9
|
+
// Keep track of the latest value emitted by the stream
|
|
10
|
+
public current!: Option.Option<Exit.Exit<E, A>>
|
|
11
|
+
public version!: number
|
|
12
|
+
public deferred!: Deferred.Deferred<E, A>
|
|
13
|
+
|
|
14
|
+
constructor(private id: FiberId.FiberId, private eq: Equivalence.Equivalence<Exit.Exit<E, A>>) {
|
|
15
|
+
super()
|
|
16
|
+
this.reset()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
toEffect() {
|
|
20
|
+
return Effect.suspend(() => {
|
|
21
|
+
if (Option.isNone(this.current)) {
|
|
22
|
+
return Deferred.await(this.deferred)
|
|
23
|
+
} else {
|
|
24
|
+
return this.current.value
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
done(exit: Exit.Exit<E, A>) {
|
|
30
|
+
const current = this.current
|
|
31
|
+
|
|
32
|
+
this.current = Option.some(exit)
|
|
33
|
+
|
|
34
|
+
if (Option.isSome(current) && this.eq(current.value, exit)) {
|
|
35
|
+
return false
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
Deferred.unsafeDone(this.deferred, exit)
|
|
39
|
+
this.version += 1
|
|
40
|
+
|
|
41
|
+
return true
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
reset() {
|
|
45
|
+
this.current = Option.none()
|
|
46
|
+
this.version = 0
|
|
47
|
+
|
|
48
|
+
if (this.deferred) {
|
|
49
|
+
Deferred.unsafeDone(this.deferred, Exit.interrupt(this.id))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
this.deferred = Deferred.unsafeMake(this.id)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function make<E, A>(eq: Equivalence.Equivalence<Exit.Exit<E, A>>) {
|
|
57
|
+
return Effect.map(Effect.fiberId, (id) => new DeferredRef(id, eq))
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function unsafeMake<E, A>(id: FiberId.FiberId, eq: Equivalence.Equivalence<Exit.Exit<E, A>>) {
|
|
61
|
+
return new DeferredRef(id, eq)
|
|
62
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type Contra<T> = T extends any ? (arg: T) => void
|
|
2
|
+
: never
|
|
3
|
+
|
|
4
|
+
type InferContra<T> = [T] extends [(arg: infer I) => void] ? I
|
|
5
|
+
: never
|
|
6
|
+
|
|
7
|
+
type PickOne<T> = InferContra<InferContra<Contra<Contra<T>>>>
|
|
8
|
+
|
|
9
|
+
export type UnionToTuple<T> = PickOne<T> extends infer U ? Exclude<T, U> extends never ? [T]
|
|
10
|
+
: [...UnionToTuple<Exclude<T, U>>, U]
|
|
11
|
+
: never
|