effect 2.0.0-next.50 → 2.0.0-next.51
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/BigDecimal/dist/effect-BigDecimal.cjs.d.mts +2 -0
- package/BigDecimal/dist/effect-BigDecimal.cjs.d.mts.map +1 -0
- package/BigDecimal/dist/effect-BigDecimal.cjs.d.ts +2 -0
- package/BigDecimal/dist/effect-BigDecimal.cjs.d.ts.map +1 -0
- package/BigDecimal/dist/effect-BigDecimal.cjs.dev.js +914 -0
- package/BigDecimal/dist/effect-BigDecimal.cjs.js +7 -0
- package/BigDecimal/dist/effect-BigDecimal.cjs.mjs +38 -0
- package/BigDecimal/dist/effect-BigDecimal.cjs.prod.js +914 -0
- package/BigDecimal/dist/effect-BigDecimal.esm.js +869 -0
- package/BigDecimal/package.json +4 -0
- package/Cache/dist/effect-Cache.cjs.dev.js +21 -21
- package/Cache/dist/effect-Cache.cjs.prod.js +21 -21
- package/Cause/dist/effect-Cause.cjs.dev.js +4 -4
- package/Cause/dist/effect-Cause.cjs.prod.js +4 -4
- package/Channel/dist/effect-Channel.cjs.dev.js +33 -33
- package/Channel/dist/effect-Channel.cjs.prod.js +33 -33
- package/ChannelSingleProducerAsyncInput/dist/effect-ChannelSingleProducerAsyncInput.cjs.dev.js +28 -28
- package/ChannelSingleProducerAsyncInput/dist/effect-ChannelSingleProducerAsyncInput.cjs.prod.js +28 -28
- package/Chunk/dist/effect-Chunk.cjs.dev.js +2 -7
- package/Chunk/dist/effect-Chunk.cjs.mjs +0 -1
- package/Chunk/dist/effect-Chunk.cjs.prod.js +2 -7
- package/Chunk/dist/effect-Chunk.esm.js +3 -7
- package/Clock/dist/effect-Clock.cjs.dev.js +10 -10
- package/Clock/dist/effect-Clock.cjs.prod.js +10 -10
- package/Config/dist/effect-Config.cjs.dev.js +7 -7
- package/Config/dist/effect-Config.cjs.prod.js +7 -7
- package/ConfigError/dist/effect-ConfigError.cjs.dev.js +1 -1
- package/ConfigError/dist/effect-ConfigError.cjs.prod.js +1 -1
- package/ConfigProvider/dist/effect-ConfigProvider.cjs.dev.js +9 -9
- package/ConfigProvider/dist/effect-ConfigProvider.cjs.prod.js +9 -9
- package/ConfigProviderPathPatch/dist/effect-ConfigProviderPathPatch.cjs.dev.js +2 -2
- package/ConfigProviderPathPatch/dist/effect-ConfigProviderPathPatch.cjs.prod.js +2 -2
- package/ConfigSecret/dist/effect-ConfigSecret.cjs.dev.js +1 -1
- package/ConfigSecret/dist/effect-ConfigSecret.cjs.prod.js +1 -1
- package/Console/dist/effect-Console.cjs.dev.js +25 -25
- package/Console/dist/effect-Console.cjs.prod.js +25 -25
- package/Data/dist/effect-Data.cjs.dev.js +148 -58
- package/Data/dist/effect-Data.cjs.prod.js +148 -58
- package/Data/dist/effect-Data.esm.js +121 -31
- package/DefaultServices/dist/effect-DefaultServices.cjs.dev.js +10 -10
- package/DefaultServices/dist/effect-DefaultServices.cjs.prod.js +10 -10
- package/Deferred/dist/effect-Deferred.cjs.dev.js +4 -4
- package/Deferred/dist/effect-Deferred.cjs.prod.js +4 -4
- package/Differ/dist/effect-Differ.cjs.dev.js +1 -1
- package/Differ/dist/effect-Differ.cjs.prod.js +1 -1
- package/Effect/dist/effect-Effect.cjs.dev.js +27 -27
- package/Effect/dist/effect-Effect.cjs.prod.js +27 -27
- package/Exit/dist/effect-Exit.cjs.dev.js +4 -4
- package/Exit/dist/effect-Exit.cjs.prod.js +4 -4
- package/Fiber/dist/effect-Fiber.cjs.dev.js +22 -22
- package/Fiber/dist/effect-Fiber.cjs.prod.js +22 -22
- package/FiberId/dist/effect-FiberId.cjs.dev.js +2 -2
- package/FiberId/dist/effect-FiberId.cjs.prod.js +2 -2
- package/FiberRef/dist/effect-FiberRef.cjs.dev.js +22 -22
- package/FiberRef/dist/effect-FiberRef.cjs.prod.js +22 -22
- package/FiberRefs/dist/effect-FiberRefs.cjs.dev.js +5 -5
- package/FiberRefs/dist/effect-FiberRefs.cjs.prod.js +5 -5
- package/FiberRefsPatch/dist/effect-FiberRefsPatch.cjs.dev.js +6 -6
- package/FiberRefsPatch/dist/effect-FiberRefsPatch.cjs.prod.js +6 -6
- package/GroupBy/dist/effect-GroupBy.cjs.dev.js +34 -34
- package/GroupBy/dist/effect-GroupBy.cjs.prod.js +34 -34
- package/HashMap/dist/effect-HashMap.cjs.dev.js +1 -1
- package/HashMap/dist/effect-HashMap.cjs.prod.js +1 -1
- package/HashSet/dist/effect-HashSet.cjs.dev.js +1 -1
- package/HashSet/dist/effect-HashSet.cjs.prod.js +1 -1
- package/KeyedPool/dist/effect-KeyedPool.cjs.dev.js +22 -22
- package/KeyedPool/dist/effect-KeyedPool.cjs.prod.js +22 -22
- package/Layer/dist/effect-Layer.cjs.dev.js +28 -28
- package/Layer/dist/effect-Layer.cjs.prod.js +28 -28
- package/List/dist/effect-List.cjs.dev.js +4 -7
- package/List/dist/effect-List.cjs.mjs +0 -1
- package/List/dist/effect-List.cjs.prod.js +4 -7
- package/List/dist/effect-List.esm.js +5 -7
- package/LogLevel/dist/effect-LogLevel.cjs.dev.js +4 -4
- package/LogLevel/dist/effect-LogLevel.cjs.prod.js +4 -4
- package/Logger/dist/effect-Logger.cjs.dev.js +26 -26
- package/Logger/dist/effect-Logger.cjs.prod.js +26 -26
- package/Match/dist/effect-Match.cjs.dev.js +1 -1
- package/Match/dist/effect-Match.cjs.prod.js +1 -1
- package/Match/dist/effect-Match.esm.js +1 -1
- package/Metric/dist/effect-Metric.cjs.dev.js +20 -20
- package/Metric/dist/effect-Metric.cjs.prod.js +20 -20
- package/MetricBoundaries/dist/effect-MetricBoundaries.cjs.dev.js +1 -1
- package/MetricBoundaries/dist/effect-MetricBoundaries.cjs.prod.js +1 -1
- package/MetricHook/dist/effect-MetricHook.cjs.dev.js +2 -2
- package/MetricHook/dist/effect-MetricHook.cjs.prod.js +2 -2
- package/MetricKey/dist/effect-MetricKey.cjs.dev.js +2 -2
- package/MetricKey/dist/effect-MetricKey.cjs.prod.js +2 -2
- package/MetricPolling/dist/effect-MetricPolling.cjs.dev.js +22 -22
- package/MetricPolling/dist/effect-MetricPolling.cjs.prod.js +22 -22
- package/MetricRegistry/dist/effect-MetricRegistry.cjs.dev.js +3 -3
- package/MetricRegistry/dist/effect-MetricRegistry.cjs.prod.js +3 -3
- package/MutableHashMap/dist/effect-MutableHashMap.cjs.dev.js +1 -1
- package/MutableHashMap/dist/effect-MutableHashMap.cjs.prod.js +1 -1
- package/MutableHashSet/dist/effect-MutableHashSet.cjs.dev.js +1 -1
- package/MutableHashSet/dist/effect-MutableHashSet.cjs.prod.js +1 -1
- package/Pool/dist/effect-Pool.cjs.dev.js +22 -22
- package/Pool/dist/effect-Pool.cjs.prod.js +22 -22
- package/PubSub/dist/effect-PubSub.cjs.dev.js +21 -21
- package/PubSub/dist/effect-PubSub.cjs.prod.js +21 -21
- package/Queue/dist/effect-Queue.cjs.dev.js +21 -21
- package/Queue/dist/effect-Queue.cjs.prod.js +21 -21
- package/Random/dist/effect-Random.cjs.dev.js +10 -10
- package/Random/dist/effect-Random.cjs.prod.js +10 -10
- package/ReadonlyArray/dist/effect-ReadonlyArray.cjs.dev.js +1 -4
- package/ReadonlyArray/dist/effect-ReadonlyArray.cjs.mjs +0 -1
- package/ReadonlyArray/dist/effect-ReadonlyArray.cjs.prod.js +1 -4
- package/ReadonlyArray/dist/effect-ReadonlyArray.esm.js +2 -4
- package/Ref/dist/effect-Ref.cjs.dev.js +5 -5
- package/Ref/dist/effect-Ref.cjs.prod.js +5 -5
- package/Reloadable/dist/effect-Reloadable.cjs.dev.js +26 -26
- package/Reloadable/dist/effect-Reloadable.cjs.prod.js +26 -26
- package/Request/dist/effect-Request.cjs.dev.js +21 -21
- package/Request/dist/effect-Request.cjs.prod.js +21 -21
- package/RequestBlock/dist/effect-RequestBlock.cjs.dev.js +28 -28
- package/RequestBlock/dist/effect-RequestBlock.cjs.prod.js +28 -28
- package/RequestResolver/dist/effect-RequestResolver.cjs.dev.js +28 -28
- package/RequestResolver/dist/effect-RequestResolver.cjs.prod.js +28 -28
- package/Resource/dist/effect-Resource.cjs.dev.js +24 -24
- package/Resource/dist/effect-Resource.cjs.prod.js +24 -24
- package/Runtime/dist/effect-Runtime.cjs.dev.js +23 -23
- package/Runtime/dist/effect-Runtime.cjs.prod.js +23 -23
- package/RuntimeFlags/dist/effect-RuntimeFlags.cjs.dev.js +26 -26
- package/RuntimeFlags/dist/effect-RuntimeFlags.cjs.prod.js +26 -26
- package/RuntimeFlagsPatch/dist/effect-RuntimeFlagsPatch.cjs.dev.js +2 -2
- package/RuntimeFlagsPatch/dist/effect-RuntimeFlagsPatch.cjs.prod.js +2 -2
- package/STM/dist/effect-STM.cjs.dev.js +36 -36
- package/STM/dist/effect-STM.cjs.prod.js +36 -36
- package/Schedule/dist/effect-Schedule.cjs.dev.js +15 -15
- package/Schedule/dist/effect-Schedule.cjs.prod.js +15 -15
- package/Scheduler/dist/effect-Scheduler.cjs.dev.js +4 -4
- package/Scheduler/dist/effect-Scheduler.cjs.prod.js +4 -4
- package/Scope/dist/effect-Scope.cjs.dev.js +20 -20
- package/Scope/dist/effect-Scope.cjs.prod.js +20 -20
- package/ScopedCache/dist/effect-ScopedCache.cjs.dev.js +27 -27
- package/ScopedCache/dist/effect-ScopedCache.cjs.prod.js +27 -27
- package/ScopedRef/dist/effect-ScopedRef.cjs.dev.js +24 -24
- package/ScopedRef/dist/effect-ScopedRef.cjs.prod.js +24 -24
- package/Sink/dist/effect-Sink.cjs.dev.js +31 -31
- package/Sink/dist/effect-Sink.cjs.prod.js +31 -31
- package/Stream/dist/effect-Stream.cjs.dev.js +34 -34
- package/Stream/dist/effect-Stream.cjs.prod.js +34 -34
- package/Streamable/dist/effect-Streamable.cjs.dev.js +34 -34
- package/Streamable/dist/effect-Streamable.cjs.prod.js +34 -34
- package/Struct/dist/effect-Struct.cjs.dev.js +0 -1
- package/Struct/dist/effect-Struct.cjs.prod.js +0 -1
- package/Struct/dist/effect-Struct.esm.js +0 -1
- package/SubscriptionRef/dist/effect-SubscriptionRef.cjs.dev.js +33 -33
- package/SubscriptionRef/dist/effect-SubscriptionRef.cjs.prod.js +33 -33
- package/Supervisor/dist/effect-Supervisor.cjs.dev.js +26 -26
- package/Supervisor/dist/effect-Supervisor.cjs.prod.js +26 -26
- package/SynchronizedRef/dist/effect-SynchronizedRef.cjs.dev.js +23 -23
- package/SynchronizedRef/dist/effect-SynchronizedRef.cjs.prod.js +23 -23
- package/TArray/dist/effect-TArray.cjs.dev.js +38 -38
- package/TArray/dist/effect-TArray.cjs.prod.js +38 -38
- package/TDeferred/dist/effect-TDeferred.cjs.dev.js +37 -37
- package/TDeferred/dist/effect-TDeferred.cjs.prod.js +37 -37
- package/TMap/dist/effect-TMap.cjs.dev.js +39 -39
- package/TMap/dist/effect-TMap.cjs.prod.js +39 -39
- package/TPriorityQueue/dist/effect-TPriorityQueue.cjs.dev.js +36 -36
- package/TPriorityQueue/dist/effect-TPriorityQueue.cjs.prod.js +36 -36
- package/TPubSub/dist/effect-TPubSub.cjs.dev.js +38 -38
- package/TPubSub/dist/effect-TPubSub.cjs.prod.js +38 -38
- package/TQueue/dist/effect-TQueue.cjs.dev.js +38 -38
- package/TQueue/dist/effect-TQueue.cjs.prod.js +38 -38
- package/TRandom/dist/effect-TRandom.cjs.dev.js +38 -38
- package/TRandom/dist/effect-TRandom.cjs.prod.js +38 -38
- package/TReentrantLock/dist/effect-TReentrantLock.cjs.dev.js +36 -36
- package/TReentrantLock/dist/effect-TReentrantLock.cjs.prod.js +36 -36
- package/TRef/dist/effect-TRef.cjs.dev.js +36 -36
- package/TRef/dist/effect-TRef.cjs.prod.js +36 -36
- package/TSemaphore/dist/effect-TSemaphore.cjs.dev.js +37 -37
- package/TSemaphore/dist/effect-TSemaphore.cjs.prod.js +37 -37
- package/TSet/dist/effect-TSet.cjs.dev.js +39 -39
- package/TSet/dist/effect-TSet.cjs.prod.js +39 -39
- package/Take/dist/effect-Take.cjs.dev.js +28 -28
- package/Take/dist/effect-Take.cjs.prod.js +28 -28
- package/TestAnnotation/dist/effect-TestAnnotation.cjs.dev.js +1 -1
- package/TestAnnotation/dist/effect-TestAnnotation.cjs.prod.js +1 -1
- package/TestAnnotations/dist/effect-TestAnnotations.cjs.dev.js +15 -15
- package/TestAnnotations/dist/effect-TestAnnotations.cjs.prod.js +15 -15
- package/TestClock/dist/effect-TestClock.cjs.dev.js +25 -25
- package/TestClock/dist/effect-TestClock.cjs.prod.js +25 -25
- package/TestContext/dist/effect-TestContext.cjs.dev.js +27 -27
- package/TestContext/dist/effect-TestContext.cjs.prod.js +27 -27
- package/TestLive/dist/effect-TestLive.cjs.dev.js +10 -10
- package/TestLive/dist/effect-TestLive.cjs.prod.js +10 -10
- package/TestServices/dist/effect-TestServices.cjs.dev.js +27 -27
- package/TestServices/dist/effect-TestServices.cjs.prod.js +27 -27
- package/TestSized/dist/effect-TestSized.cjs.dev.js +4 -4
- package/TestSized/dist/effect-TestSized.cjs.prod.js +4 -4
- package/Tracer/dist/effect-Tracer.cjs.dev.js +10 -10
- package/Tracer/dist/effect-Tracer.cjs.prod.js +10 -10
- package/dist/{HashSet-251c8294.cjs.prod.js → HashSet-09ade044.cjs.prod.js} +1 -1
- package/dist/{HashSet-c12c037b.cjs.dev.js → HashSet-e9659fd4.cjs.dev.js} +1 -1
- package/dist/{Ref-00103de4.cjs.prod.js → Ref-50f14c13.cjs.prod.js} +1 -1
- package/dist/{Ref-f990026b.cjs.dev.js → Ref-d3a3826b.cjs.dev.js} +1 -1
- package/dist/{cache-d709d5cb.cjs.dev.js → cache-2a5d8381.cjs.dev.js} +4 -4
- package/dist/{cache-0b148e42.cjs.prod.js → cache-8f0c08cb.cjs.prod.js} +4 -4
- package/dist/{circular-6d2bb353.cjs.dev.js → circular-2effda94.cjs.dev.js} +4 -4
- package/dist/{circular-aa705e70.cjs.dev.js → circular-39e86dc8.cjs.dev.js} +7 -7
- package/dist/{circular-5b6f6504.cjs.prod.js → circular-4f03acf3.cjs.prod.js} +4 -4
- package/dist/{circular-952618e5.cjs.prod.js → circular-acb40239.cjs.prod.js} +7 -7
- package/dist/{config-f0bd27af.cjs.prod.js → config-00e6170c.cjs.prod.js} +3 -3
- package/dist/{config-8a7bf1ae.cjs.dev.js → config-beaa306c.cjs.dev.js} +3 -3
- package/dist/{configProvider-ae007b10.cjs.prod.js → configProvider-290d13e7.cjs.prod.js} +4 -4
- package/dist/{configProvider-3d85d4ef.cjs.dev.js → configProvider-aef50f41.cjs.dev.js} +4 -4
- package/dist/{core-d3f4e713.cjs.prod.js → core-279496f0.cjs.prod.js} +2 -2
- package/dist/{core-473934ce.cjs.prod.js → core-35439f06.cjs.prod.js} +2 -2
- package/dist/{core-dd1edd7a.cjs.dev.js → core-7445bfd4.cjs.dev.js} +2 -2
- package/dist/{core-b4bf44d3.cjs.dev.js → core-a0828fef.cjs.dev.js} +2 -2
- package/dist/{core-effect-f4b1aad8.cjs.dev.js → core-effect-02a7f1d7.cjs.dev.js} +6 -6
- package/dist/{core-effect-6666f2dc.cjs.prod.js → core-effect-460f968a.cjs.prod.js} +6 -6
- package/dist/{dataSource-d5d7f338.cjs.prod.js → dataSource-94fb44f9.cjs.prod.js} +2 -2
- package/dist/{dataSource-9f78e828.cjs.dev.js → dataSource-da4a602c.cjs.dev.js} +2 -2
- package/dist/declarations/src/BigDecimal.d.ts +622 -0
- package/dist/declarations/src/BigDecimal.d.ts.map +1 -0
- package/dist/declarations/src/Chunk.d.ts +14 -11
- package/dist/declarations/src/Chunk.d.ts.map +1 -1
- package/dist/declarations/src/Data.d.ts +192 -45
- package/dist/declarations/src/Data.d.ts.map +1 -1
- package/dist/declarations/src/List.d.ts +15 -10
- package/dist/declarations/src/List.d.ts.map +1 -1
- package/dist/declarations/src/Match.d.ts.map +1 -1
- package/dist/declarations/src/ReadonlyArray.d.ts +13 -8
- package/dist/declarations/src/ReadonlyArray.d.ts.map +1 -1
- package/dist/declarations/src/Struct.d.ts +3 -2
- package/dist/declarations/src/Struct.d.ts.map +1 -1
- package/dist/declarations/src/index.d.ts +16 -0
- package/dist/declarations/src/index.d.ts.map +1 -1
- package/dist/{defaultServices-8ea5e664.cjs.prod.js → defaultServices-61911fd4.cjs.prod.js} +2 -2
- package/dist/{defaultServices-6a9a2d2b.cjs.dev.js → defaultServices-f3f93337.cjs.dev.js} +2 -2
- package/dist/effect.cjs.dev.js +3 -0
- package/dist/effect.cjs.mjs +1 -0
- package/dist/effect.cjs.prod.js +3 -0
- package/dist/effect.esm.js +2 -0
- package/dist/{fiber-3d944398.cjs.dev.js → fiber-cac583ce.cjs.dev.js} +3 -3
- package/dist/{fiber-cbd0613f.cjs.prod.js → fiber-f67dca7d.cjs.prod.js} +3 -3
- package/dist/{fiberRefs-99808a27.cjs.prod.js → fiberRefs-59b59378.cjs.prod.js} +1 -1
- package/dist/{fiberRefs-ccc37f30.cjs.dev.js → fiberRefs-6bd9745e.cjs.dev.js} +1 -1
- package/dist/{fiberRuntime-f1e80ca7.cjs.prod.js → fiberRuntime-26f406c3.cjs.prod.js} +27 -23
- package/dist/{fiberRuntime-0c1e7478.cjs.dev.js → fiberRuntime-976a3e6f.cjs.dev.js} +27 -23
- package/dist/{groupBy-8ae74e3b.cjs.dev.js → groupBy-7fc93bc9.cjs.dev.js} +4 -4
- package/dist/{groupBy-30f6e9ba.cjs.prod.js → groupBy-8977b420.cjs.prod.js} +4 -4
- package/dist/{layer-bfb9802a.cjs.prod.js → layer-abbc91aa.cjs.prod.js} +8 -8
- package/dist/{layer-c284cf0d.cjs.dev.js → layer-c197624f.cjs.dev.js} +8 -8
- package/dist/{patch-cda9b6c8.cjs.dev.js → patch-2d425849.cjs.dev.js} +1 -1
- package/dist/{patch-256bc574.cjs.prod.js → patch-b7689042.cjs.prod.js} +1 -1
- package/dist/{pathPatch-31ce8101.cjs.dev.js → pathPatch-18fa425e.cjs.dev.js} +1 -1
- package/dist/{pathPatch-40b92af6.cjs.prod.js → pathPatch-b6020485.cjs.prod.js} +1 -1
- package/dist/{pool-f6ca2038.cjs.dev.js → pool-810c2214.cjs.dev.js} +5 -5
- package/dist/{pool-122f0fad.cjs.prod.js → pool-868dfa39.cjs.prod.js} +5 -5
- package/dist/{query-5cc0ddf8.cjs.prod.js → query-927b504e.cjs.prod.js} +5 -5
- package/dist/{query-7bffa3c3.cjs.dev.js → query-c6684e39.cjs.dev.js} +5 -5
- package/dist/{queue-e326fd89.cjs.prod.js → queue-062806c7.cjs.prod.js} +2 -2
- package/dist/{queue-4166cfdb.cjs.dev.js → queue-a0fc274d.cjs.dev.js} +2 -2
- package/dist/{registry-081e18a3.cjs.prod.js → registry-9268ec7c.cjs.prod.js} +1 -1
- package/dist/{registry-377855a9.cjs.dev.js → registry-e5ad2d74.cjs.dev.js} +1 -1
- package/dist/{runtime-d4514ab5.cjs.dev.js → runtime-340bd70b.cjs.dev.js} +5 -5
- package/dist/{runtime-4078f059.cjs.prod.js → runtime-ce0ad0ed.cjs.prod.js} +5 -5
- package/dist/{schedule-f036b254.cjs.prod.js → schedule-04b40c50.cjs.prod.js} +3 -3
- package/dist/{schedule-31e38871.cjs.dev.js → schedule-74c6207a.cjs.dev.js} +3 -3
- package/dist/{scopedRef-5ecf6468.cjs.dev.js → scopedRef-4f0dd122.cjs.dev.js} +6 -6
- package/dist/{scopedRef-8ce21228.cjs.prod.js → scopedRef-d429ec83.cjs.prod.js} +6 -6
- package/dist/{singleProducerAsyncInput-8879d87c.cjs.prod.js → singleProducerAsyncInput-06a9076a.cjs.prod.js} +1 -1
- package/dist/{singleProducerAsyncInput-ece7387b.cjs.dev.js → singleProducerAsyncInput-72c05452.cjs.dev.js} +1 -1
- package/dist/{sink-1794329b.cjs.dev.js → sink-301d2bb4.cjs.dev.js} +3 -3
- package/dist/{sink-9208df8d.cjs.prod.js → sink-46df55d3.cjs.prod.js} +3 -3
- package/dist/{stm-b080be31.cjs.dev.js → stm-0b50e3c1.cjs.dev.js} +3 -3
- package/dist/{stm-6ad7b384.cjs.prod.js → stm-c0489b43.cjs.prod.js} +3 -3
- package/dist/{stream-e19805ca.cjs.prod.js → stream-0c3160ef.cjs.prod.js} +4 -4
- package/dist/{stream-09aeeac3.cjs.dev.js → stream-44cdd7cb.cjs.dev.js} +4 -4
- package/dist/{synchronizedRef-cc04ecbd.cjs.prod.js → synchronizedRef-2f71b820.cjs.prod.js} +1 -1
- package/dist/{synchronizedRef-8fa16866.cjs.dev.js → synchronizedRef-78797507.cjs.dev.js} +1 -1
- package/dist/{tArray-5e42c290.cjs.prod.js → tArray-006f45b0.cjs.prod.js} +3 -3
- package/dist/{tArray-7d470ed7.cjs.dev.js → tArray-556355cd.cjs.dev.js} +3 -3
- package/dist/{tMap-f0df0ea0.cjs.dev.js → tMap-52d00ffb.cjs.dev.js} +4 -4
- package/dist/{tMap-a2cfde88.cjs.prod.js → tMap-9680b82b.cjs.prod.js} +4 -4
- package/dist/{tQueue-b80e940e.cjs.prod.js → tQueue-51cf109e.cjs.prod.js} +3 -3
- package/dist/{tQueue-085f70b5.cjs.dev.js → tQueue-ca56a2a8.cjs.dev.js} +3 -3
- package/dist/{tRef-42a212cb.cjs.prod.js → tRef-4a2a9689.cjs.prod.js} +1 -1
- package/dist/{tRef-2e495254.cjs.dev.js → tRef-b98e2e2a.cjs.dev.js} +1 -1
- package/internal/HashMap/node.esm.js +1 -1
- package/internal/fiberRuntime.esm.js +9 -8
- package/internal/query.esm.js +2 -2
- package/internal/supervisor/patch.esm.js +3 -3
- package/internal/supervisor.esm.js +5 -1
- package/package.json +10 -5
- package/src/BigDecimal.ts +977 -0
- package/src/Chunk.ts +17 -13
- package/src/Data.ts +219 -92
- package/src/List.ts +17 -11
- package/src/Match.ts +2 -2
- package/src/ReadonlyArray.ts +18 -9
- package/src/Struct.ts +3 -2
- package/src/index.ts +17 -0
- package/src/internal/HashMap/node.ts +1 -1
- package/src/internal/fiberRuntime.ts +56 -45
- package/src/internal/query.ts +12 -8
- package/src/internal/supervisor/patch.ts +2 -2
- package/src/internal/supervisor.ts +5 -0
- package/src/tsconfig.json +0 -1
- /package/dist/{FiberId-0f0b7779.cjs.prod.js → FiberId-88cc0067.cjs.prod.js} +0 -0
- /package/dist/{FiberId-6595cf4c.cjs.dev.js → FiberId-f329d0e3.cjs.dev.js} +0 -0
- /package/dist/{RuntimeFlagsPatch-7d62915d.cjs.dev.js → RuntimeFlagsPatch-063c5864.cjs.dev.js} +0 -0
- /package/dist/{RuntimeFlagsPatch-3890e860.cjs.prod.js → RuntimeFlagsPatch-233ac7d7.cjs.prod.js} +0 -0
- /package/dist/{boundaries-ebe66d32.cjs.prod.js → boundaries-0e5ddf7b.cjs.prod.js} +0 -0
- /package/dist/{boundaries-8dfe50cb.cjs.dev.js → boundaries-ce70e4e4.cjs.dev.js} +0 -0
- /package/dist/{configError-9021016b.cjs.prod.js → configError-72f57cd6.cjs.prod.js} +0 -0
- /package/dist/{configError-0c09b93c.cjs.dev.js → configError-834bedc1.cjs.dev.js} +0 -0
- /package/dist/{configSecret-0bdfadd8.cjs.prod.js → configSecret-80d3e36b.cjs.prod.js} +0 -0
- /package/dist/{configSecret-938818ad.cjs.dev.js → configSecret-abf643d8.cjs.dev.js} +0 -0
- /package/dist/{hook-ad5af092.cjs.dev.js → hook-13f4db1e.cjs.dev.js} +0 -0
- /package/dist/{hook-cab99f9e.cjs.prod.js → hook-8a020c3f.cjs.prod.js} +0 -0
- /package/dist/{key-9c7368c8.cjs.prod.js → key-2cf383a2.cjs.prod.js} +0 -0
- /package/dist/{key-e3189bbd.cjs.dev.js → key-4b5f6a7d.cjs.dev.js} +0 -0
- /package/dist/{take-114476e5.cjs.prod.js → take-07165139.cjs.prod.js} +0 -0
- /package/dist/{take-d4fa1beb.cjs.dev.js → take-689a29d5.cjs.dev.js} +0 -0
|
@@ -0,0 +1,914 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var Equal_dist_effectEqual = require('../../Equal/dist/effect-Equal.cjs.dev.js');
|
|
6
|
+
var Equivalence_dist_effectEquivalence = require('../../Equivalence/dist/effect-Equivalence.cjs.dev.js');
|
|
7
|
+
var Function_dist_effectFunction = require('../../Function/dist/effect-Function.cjs.dev.js');
|
|
8
|
+
var Hash_dist_effectHash = require('../../Hash/dist/effect-Hash.cjs.dev.js');
|
|
9
|
+
var Inspectable_dist_effectInspectable = require('../../Inspectable/dist/effect-Inspectable.cjs.dev.js');
|
|
10
|
+
var Option_dist_effectOption = require('../../Option/dist/effect-Option.cjs.dev.js');
|
|
11
|
+
var Order_dist_effectOrder = require('../../Order/dist/effect-Order.cjs.dev.js');
|
|
12
|
+
var Pipeable_dist_effectPipeable = require('../../Pipeable/dist/effect-Pipeable.cjs.dev.js');
|
|
13
|
+
require('../../GlobalValue/dist/effect-GlobalValue.cjs.dev.js');
|
|
14
|
+
require('../../Utils/dist/effect-Utils.cjs.dev.js');
|
|
15
|
+
require('../../Predicate/dist/effect-Predicate.cjs.dev.js');
|
|
16
|
+
require('../../dist/Either-e7500e90.cjs.dev.js');
|
|
17
|
+
require('../../dist/Option-01caa9d4.cjs.dev.js');
|
|
18
|
+
require('../../dist/Effectable-71c10ab9.cjs.dev.js');
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* This module provides utility functions and type class instances for working with the `BigDecimal` type in TypeScript.
|
|
22
|
+
* It includes functions for basic arithmetic operations, as well as type class instances for `Equivalence` and `Order`.
|
|
23
|
+
*
|
|
24
|
+
* A `BigDecimal` allows storing any real number to arbitrary precision; which avoids common floating point errors
|
|
25
|
+
* (such as 0.1 + 0.2 ≠ 0.3) at the cost of complexity.
|
|
26
|
+
*
|
|
27
|
+
* Internally, `BigDecimal` uses a `BigInt` object, paired with a 64-bit integer which determines the position of the
|
|
28
|
+
* decimal point. Therefore, the precision *is not* actually arbitrary, but limited to 2<sup>63</sup> decimal places.
|
|
29
|
+
*
|
|
30
|
+
* It is not recommended to convert a floating point number to a decimal directly, as the floating point representation
|
|
31
|
+
* may be unexpected.
|
|
32
|
+
*
|
|
33
|
+
* @since 2.0.0
|
|
34
|
+
*/
|
|
35
|
+
const DEFAULT_PRECISION = 100;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @since 2.0.0
|
|
39
|
+
* @category symbols
|
|
40
|
+
*/
|
|
41
|
+
const TypeId = /*#__PURE__*/Symbol.for("effect/BigDecimal");
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @since 2.0.0
|
|
45
|
+
* @category symbol
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @since 2.0.0
|
|
50
|
+
* @category models
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
const BigDecimalProto = {
|
|
54
|
+
[TypeId]: TypeId,
|
|
55
|
+
[Hash_dist_effectHash.symbol]() {
|
|
56
|
+
const normalized = normalize(this);
|
|
57
|
+
return Function_dist_effectFunction.pipe(Hash_dist_effectHash.hash(normalized.value), Hash_dist_effectHash.combine(Hash_dist_effectHash.number(normalized.scale)));
|
|
58
|
+
},
|
|
59
|
+
[Equal_dist_effectEqual.symbol](that) {
|
|
60
|
+
return isBigDecimal(that) && equals(this, that);
|
|
61
|
+
},
|
|
62
|
+
toString() {
|
|
63
|
+
return toString(this);
|
|
64
|
+
},
|
|
65
|
+
toJSON() {
|
|
66
|
+
return toString(this);
|
|
67
|
+
},
|
|
68
|
+
[Inspectable_dist_effectInspectable.NodeInspectSymbol]() {
|
|
69
|
+
return toString(this);
|
|
70
|
+
},
|
|
71
|
+
pipe() {
|
|
72
|
+
return Pipeable_dist_effectPipeable.pipeArguments(this, arguments);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Checks if a given value is a `BigDecimal`.
|
|
78
|
+
*
|
|
79
|
+
* @param u - The value to check.
|
|
80
|
+
*
|
|
81
|
+
* @since 2.0.0
|
|
82
|
+
* @category guards
|
|
83
|
+
*/
|
|
84
|
+
const isBigDecimal = u => typeof u === "object" && u !== null && TypeId in u;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Creates a `BigDecimal` from a `bigint` value and a scale.
|
|
88
|
+
*
|
|
89
|
+
* @param value - The `bigint` value to create a `BigDecimal` from.
|
|
90
|
+
* @param scale - The scale of the `BigDecimal`.
|
|
91
|
+
*
|
|
92
|
+
* @since 2.0.0
|
|
93
|
+
* @category constructors
|
|
94
|
+
*/
|
|
95
|
+
const make = (value, scale) => {
|
|
96
|
+
const o = Object.create(BigDecimalProto);
|
|
97
|
+
o.value = value;
|
|
98
|
+
o.scale = scale;
|
|
99
|
+
return o;
|
|
100
|
+
};
|
|
101
|
+
const bigint0 = /*#__PURE__*/BigInt(0);
|
|
102
|
+
const bigint1 = /*#__PURE__*/BigInt(1);
|
|
103
|
+
const bigint10 = /*#__PURE__*/BigInt(10);
|
|
104
|
+
const zero = /*#__PURE__*/make(bigint0, 0);
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Normalizes a given `BigDecimal` by removing trailing zeros.
|
|
108
|
+
*
|
|
109
|
+
* @param self - The `BigDecimal` to normalize.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* import { normalize, make, unsafeFromString } from "effect/BigDecimal"
|
|
113
|
+
*
|
|
114
|
+
* assert.deepStrictEqual(normalize(unsafeFromString("123.00000")), make(123n, 0))
|
|
115
|
+
* assert.deepStrictEqual(normalize(unsafeFromString("12300000")), make(123n, -5))
|
|
116
|
+
*
|
|
117
|
+
* @since 2.0.0
|
|
118
|
+
* @category scaling
|
|
119
|
+
*/
|
|
120
|
+
const normalize = self => {
|
|
121
|
+
if (self.normalized === undefined) {
|
|
122
|
+
if (self.value === bigint0) {
|
|
123
|
+
self.normalized = zero;
|
|
124
|
+
} else {
|
|
125
|
+
const digits = `${self.value}`;
|
|
126
|
+
let trail = 0;
|
|
127
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
128
|
+
if (digits[i] === "0") {
|
|
129
|
+
trail++;
|
|
130
|
+
} else {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (trail === 0) {
|
|
135
|
+
self.normalized = self;
|
|
136
|
+
}
|
|
137
|
+
const value = BigInt(digits.substring(0, digits.length - trail));
|
|
138
|
+
const scale = self.scale - trail;
|
|
139
|
+
self.normalized = make(value, scale);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return self.normalized;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Scales a given `BigDecimal` to the specified scale.
|
|
147
|
+
*
|
|
148
|
+
* If the given scale is smaller than the current scale, the value will be rounded down to
|
|
149
|
+
* the nearest integer.
|
|
150
|
+
*
|
|
151
|
+
* @param self - The `BigDecimal` to scale.
|
|
152
|
+
* @param scale - The scale to scale to.
|
|
153
|
+
*
|
|
154
|
+
* @since 2.0.0
|
|
155
|
+
* @category scaling
|
|
156
|
+
*/
|
|
157
|
+
const scale = (self, scale) => {
|
|
158
|
+
if (scale > self.scale) {
|
|
159
|
+
return make(self.value * bigint10 ** BigInt(scale - self.scale), scale);
|
|
160
|
+
}
|
|
161
|
+
if (scale < self.scale) {
|
|
162
|
+
return make(self.value / bigint10 ** BigInt(self.scale - scale), scale);
|
|
163
|
+
}
|
|
164
|
+
return self;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Provides an addition operation on `BigDecimal`s.
|
|
169
|
+
*
|
|
170
|
+
* @param self - The first operand.
|
|
171
|
+
* @param that - The second operand.
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* import { sum, unsafeFromString } from "effect/BigDecimal"
|
|
175
|
+
*
|
|
176
|
+
* assert.deepStrictEqual(sum(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("5"))
|
|
177
|
+
*
|
|
178
|
+
* @since 2.0.0
|
|
179
|
+
* @category math
|
|
180
|
+
*/
|
|
181
|
+
const sum = /*#__PURE__*/Function_dist_effectFunction.dual(2, (self, that) => {
|
|
182
|
+
if (that.value === bigint0) {
|
|
183
|
+
return self;
|
|
184
|
+
}
|
|
185
|
+
if (self.value === bigint0) {
|
|
186
|
+
return that;
|
|
187
|
+
}
|
|
188
|
+
if (self.scale > that.scale) {
|
|
189
|
+
return make(scale(that, self.scale).value + self.value, self.scale);
|
|
190
|
+
}
|
|
191
|
+
if (self.scale < that.scale) {
|
|
192
|
+
return make(scale(self, that.scale).value + that.value, that.scale);
|
|
193
|
+
}
|
|
194
|
+
return make(self.value + that.value, self.scale);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Provides a multiplication operation on `BigDecimal`s.
|
|
199
|
+
*
|
|
200
|
+
* @param self - The first operand.
|
|
201
|
+
* @param that - The second operand.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* import { multiply, unsafeFromString } from "effect/BigDecimal"
|
|
205
|
+
*
|
|
206
|
+
* assert.deepStrictEqual(multiply(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("6"))
|
|
207
|
+
*
|
|
208
|
+
* @since 2.0.0
|
|
209
|
+
* @category math
|
|
210
|
+
*/
|
|
211
|
+
const multiply = /*#__PURE__*/Function_dist_effectFunction.dual(2, (self, that) => {
|
|
212
|
+
if (that.value === bigint0 || self.value === bigint0) {
|
|
213
|
+
return zero;
|
|
214
|
+
}
|
|
215
|
+
return make(self.value * that.value, self.scale + that.scale);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Provides a subtraction operation on `BigDecimal`s.
|
|
220
|
+
*
|
|
221
|
+
* @param self - The first operand.
|
|
222
|
+
* @param that - The second operand.
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* import { subtract, unsafeFromString } from "effect/BigDecimal"
|
|
226
|
+
*
|
|
227
|
+
* assert.deepStrictEqual(subtract(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("-1"))
|
|
228
|
+
*
|
|
229
|
+
* @since 2.0.0
|
|
230
|
+
* @category math
|
|
231
|
+
*/
|
|
232
|
+
const subtract = /*#__PURE__*/Function_dist_effectFunction.dual(2, (self, that) => {
|
|
233
|
+
if (that.value === bigint0) {
|
|
234
|
+
return self;
|
|
235
|
+
}
|
|
236
|
+
if (self.value === bigint0) {
|
|
237
|
+
return make(-that.value, that.scale);
|
|
238
|
+
}
|
|
239
|
+
if (self.scale > that.scale) {
|
|
240
|
+
return make(self.value - scale(that, self.scale).value, self.scale);
|
|
241
|
+
}
|
|
242
|
+
if (self.scale < that.scale) {
|
|
243
|
+
return make(scale(self, that.scale).value - that.value, that.scale);
|
|
244
|
+
}
|
|
245
|
+
return make(self.value - that.value, self.scale);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Internal function used for arbitrary precision division.
|
|
250
|
+
*/
|
|
251
|
+
const divideWithPrecision = (num, den, scale, precision) => {
|
|
252
|
+
if (num === bigint0) {
|
|
253
|
+
return zero;
|
|
254
|
+
}
|
|
255
|
+
const numNegative = num < bigint0;
|
|
256
|
+
const denNegative = den < bigint0;
|
|
257
|
+
const negateResult = numNegative !== denNegative;
|
|
258
|
+
num = numNegative ? -num : num;
|
|
259
|
+
den = denNegative ? -den : den;
|
|
260
|
+
|
|
261
|
+
// Shift digits until numerator is larger than denominator (set scale appropriately).
|
|
262
|
+
while (num < den) {
|
|
263
|
+
num *= bigint10;
|
|
264
|
+
scale++;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// First division.
|
|
268
|
+
let quotient = num / den;
|
|
269
|
+
let remainder = num % den;
|
|
270
|
+
if (remainder === bigint0) {
|
|
271
|
+
// No remainder, return immediately.
|
|
272
|
+
return make(negateResult ? -quotient : quotient, scale);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// The quotient is guaranteed to be non-negative at this point. No need to consider sign.
|
|
276
|
+
let count = `${quotient}`.length;
|
|
277
|
+
|
|
278
|
+
// Shift the remainder by 1 decimal; The quotient will be 1 digit upon next division.
|
|
279
|
+
remainder *= bigint10;
|
|
280
|
+
while (remainder !== bigint0 && count < precision) {
|
|
281
|
+
const q = remainder / den;
|
|
282
|
+
const r = remainder % den;
|
|
283
|
+
quotient = quotient * bigint10 + q;
|
|
284
|
+
remainder = r * bigint10;
|
|
285
|
+
count++;
|
|
286
|
+
scale++;
|
|
287
|
+
}
|
|
288
|
+
if (remainder !== bigint0) {
|
|
289
|
+
// Round final number with remainder.
|
|
290
|
+
quotient += roundTerminal(remainder / den);
|
|
291
|
+
}
|
|
292
|
+
return make(negateResult ? -quotient : quotient, scale);
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Internal function used for rounding.
|
|
297
|
+
*
|
|
298
|
+
* Returns 1 if the most significant digit is >= 5, otherwise 0.
|
|
299
|
+
*
|
|
300
|
+
* This is used after dividing a number by a power of ten and rounding the last digit.
|
|
301
|
+
*/
|
|
302
|
+
const roundTerminal = n => {
|
|
303
|
+
if (n === bigint0) {
|
|
304
|
+
return bigint0;
|
|
305
|
+
}
|
|
306
|
+
const pos = n > bigint0 ? 0 : 1;
|
|
307
|
+
return Number(`${n}`[pos]) < 5 ? bigint0 : bigint1;
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Provides a division operation on `BigDecimal`s.
|
|
312
|
+
*
|
|
313
|
+
* If the dividend is not a multiple of the divisor the result will be a `BigDecimal` value
|
|
314
|
+
* which represents the integer division rounded down to the nearest integer.
|
|
315
|
+
*
|
|
316
|
+
* If the divisor is `0`, the result will be `None`.
|
|
317
|
+
*
|
|
318
|
+
* @param self - The dividend operand.
|
|
319
|
+
* @param that - The divisor operand.
|
|
320
|
+
*
|
|
321
|
+
* @example
|
|
322
|
+
* import { divide, unsafeFromString } from "effect/BigDecimal"
|
|
323
|
+
* import { some, none } from "effect/Option"
|
|
324
|
+
*
|
|
325
|
+
* assert.deepStrictEqual(divide(unsafeFromString("6"), unsafeFromString("3")), some(unsafeFromString("2")))
|
|
326
|
+
* assert.deepStrictEqual(divide(unsafeFromString("6"), unsafeFromString("4")), some(unsafeFromString("1.5")))
|
|
327
|
+
* assert.deepStrictEqual(divide(unsafeFromString("6"), unsafeFromString("0")), none())
|
|
328
|
+
*
|
|
329
|
+
* @since 2.0.0
|
|
330
|
+
* @category math
|
|
331
|
+
*/
|
|
332
|
+
const divide = /*#__PURE__*/Function_dist_effectFunction.dual(2, (self, that) => {
|
|
333
|
+
if (that.value === bigint0) {
|
|
334
|
+
return Option_dist_effectOption.none();
|
|
335
|
+
}
|
|
336
|
+
if (self.value === bigint0) {
|
|
337
|
+
return Option_dist_effectOption.some(zero);
|
|
338
|
+
}
|
|
339
|
+
const scale = self.scale - that.scale;
|
|
340
|
+
if (self.value === that.value) {
|
|
341
|
+
return Option_dist_effectOption.some(make(bigint1, scale));
|
|
342
|
+
}
|
|
343
|
+
return Option_dist_effectOption.some(divideWithPrecision(self.value, that.value, scale, DEFAULT_PRECISION));
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Provides an unsafe division operation on `BigDecimal`s.
|
|
348
|
+
*
|
|
349
|
+
* If the dividend is not a multiple of the divisor the result will be a `BigDecimal` value
|
|
350
|
+
* which represents the integer division rounded down to the nearest integer.
|
|
351
|
+
*
|
|
352
|
+
* Throws a `RangeError` if the divisor is `0`.
|
|
353
|
+
*
|
|
354
|
+
* @param self - The dividend operand.
|
|
355
|
+
* @param that - The divisor operand.as
|
|
356
|
+
*
|
|
357
|
+
* @example
|
|
358
|
+
* import { unsafeDivide, unsafeFromString } from "effect/BigDecimal"
|
|
359
|
+
*
|
|
360
|
+
* assert.deepStrictEqual(unsafeDivide(unsafeFromString("6"), unsafeFromString("3")), unsafeFromString("2"))
|
|
361
|
+
* assert.deepStrictEqual(unsafeDivide(unsafeFromString("6"), unsafeFromString("4")), unsafeFromString("1.5"))
|
|
362
|
+
*
|
|
363
|
+
* @since 2.0.0
|
|
364
|
+
* @category math
|
|
365
|
+
*/
|
|
366
|
+
const unsafeDivide = /*#__PURE__*/Function_dist_effectFunction.dual(2, (self, that) => {
|
|
367
|
+
if (that.value === bigint0) {
|
|
368
|
+
throw new RangeError("Division by zero");
|
|
369
|
+
}
|
|
370
|
+
if (self.value === bigint0) {
|
|
371
|
+
return zero;
|
|
372
|
+
}
|
|
373
|
+
const scale = self.scale - that.scale;
|
|
374
|
+
if (self.value === that.value) {
|
|
375
|
+
return make(bigint1, scale);
|
|
376
|
+
}
|
|
377
|
+
return divideWithPrecision(self.value, that.value, scale, DEFAULT_PRECISION);
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* @since 2.0.0
|
|
382
|
+
* @category instances
|
|
383
|
+
*/
|
|
384
|
+
const Order = /*#__PURE__*/Order_dist_effectOrder.make((self, that) => {
|
|
385
|
+
const scmp = Order_dist_effectOrder.number(sign(self), sign(that));
|
|
386
|
+
if (scmp !== 0) {
|
|
387
|
+
return scmp;
|
|
388
|
+
}
|
|
389
|
+
if (self.scale > that.scale) {
|
|
390
|
+
return Order_dist_effectOrder.bigint(self.value, scale(that, self.scale).value);
|
|
391
|
+
}
|
|
392
|
+
if (self.scale < that.scale) {
|
|
393
|
+
return Order_dist_effectOrder.bigint(scale(self, that.scale).value, that.value);
|
|
394
|
+
}
|
|
395
|
+
return Order_dist_effectOrder.bigint(self.value, that.value);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Returns `true` if the first argument is less than the second, otherwise `false`.
|
|
400
|
+
*
|
|
401
|
+
* @param self - The first argument.
|
|
402
|
+
* @param that - The second argument.
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* import { lessThan, unsafeFromString } from "effect/BigDecimal"
|
|
406
|
+
*
|
|
407
|
+
* assert.deepStrictEqual(lessThan(unsafeFromString("2"), unsafeFromString("3")), true)
|
|
408
|
+
* assert.deepStrictEqual(lessThan(unsafeFromString("3"), unsafeFromString("3")), false)
|
|
409
|
+
* assert.deepStrictEqual(lessThan(unsafeFromString("4"), unsafeFromString("3")), false)
|
|
410
|
+
*
|
|
411
|
+
* @since 2.0.0
|
|
412
|
+
* @category predicates
|
|
413
|
+
*/
|
|
414
|
+
const lessThan = /*#__PURE__*/Order_dist_effectOrder.lessThan(Order);
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Checks if a given `BigDecimal` is less than or equal to the provided one.
|
|
418
|
+
*
|
|
419
|
+
* @param self - The first `BigDecimal` to compare with.
|
|
420
|
+
* @param that - The second `BigDecimal` to compare with.
|
|
421
|
+
*
|
|
422
|
+
* @example
|
|
423
|
+
* import { lessThanOrEqualTo, unsafeFromString } from "effect/BigDecimal"
|
|
424
|
+
*
|
|
425
|
+
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("2"), unsafeFromString("3")), true)
|
|
426
|
+
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("3"), unsafeFromString("3")), true)
|
|
427
|
+
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("4"), unsafeFromString("3")), false)
|
|
428
|
+
*
|
|
429
|
+
* @since 2.0.0
|
|
430
|
+
* @category predicates
|
|
431
|
+
*/
|
|
432
|
+
const lessThanOrEqualTo = /*#__PURE__*/Order_dist_effectOrder.lessThanOrEqualTo(Order);
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Returns `true` if the first argument is greater than the second, otherwise `false`.
|
|
436
|
+
*
|
|
437
|
+
* @param self - The first argument.
|
|
438
|
+
* @param that - The second argument.
|
|
439
|
+
*
|
|
440
|
+
* @example
|
|
441
|
+
* import { greaterThan, unsafeFromString } from "effect/BigDecimal"
|
|
442
|
+
*
|
|
443
|
+
* assert.deepStrictEqual(greaterThan(unsafeFromString("2"), unsafeFromString("3")), false)
|
|
444
|
+
* assert.deepStrictEqual(greaterThan(unsafeFromString("3"), unsafeFromString("3")), false)
|
|
445
|
+
* assert.deepStrictEqual(greaterThan(unsafeFromString("4"), unsafeFromString("3")), true)
|
|
446
|
+
*
|
|
447
|
+
* @since 2.0.0
|
|
448
|
+
* @category predicates
|
|
449
|
+
*/
|
|
450
|
+
const greaterThan = /*#__PURE__*/Order_dist_effectOrder.greaterThan(Order);
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Checks if a given `BigDecimal` is greater than or equal to the provided one.
|
|
454
|
+
*
|
|
455
|
+
* @param self - The first `BigDecimal` to compare with.
|
|
456
|
+
* @param that - The second `BigDecimal` to compare with.
|
|
457
|
+
*
|
|
458
|
+
* @example
|
|
459
|
+
* import { greaterThanOrEqualTo, unsafeFromString } from "effect/BigDecimal"
|
|
460
|
+
*
|
|
461
|
+
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("2"), unsafeFromString("3")), false)
|
|
462
|
+
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("3"), unsafeFromString("3")), true)
|
|
463
|
+
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("4"), unsafeFromString("3")), true)
|
|
464
|
+
*
|
|
465
|
+
* @since 2.0.0
|
|
466
|
+
* @category predicates
|
|
467
|
+
*/
|
|
468
|
+
const greaterThanOrEqualTo = /*#__PURE__*/Order_dist_effectOrder.greaterThanOrEqualTo(Order);
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Checks if a `BigDecimal` is between a `minimum` and `maximum` value (inclusive).
|
|
472
|
+
*
|
|
473
|
+
* @param self - The `number` to check.
|
|
474
|
+
* @param minimum - The `minimum` value to check.
|
|
475
|
+
* @param maximum - The `maximum` value to check.
|
|
476
|
+
*
|
|
477
|
+
* @example
|
|
478
|
+
* import { between, unsafeFromString } from "effect/BigDecimal"
|
|
479
|
+
*
|
|
480
|
+
* assert.deepStrictEqual(between(unsafeFromString("0"), unsafeFromString("5"))(unsafeFromString("3")), true)
|
|
481
|
+
* assert.deepStrictEqual(between(unsafeFromString("0"), unsafeFromString("5"))(unsafeFromString("-1")), false)
|
|
482
|
+
* assert.deepStrictEqual(between(unsafeFromString("0"), unsafeFromString("5"))(unsafeFromString("6")), false)
|
|
483
|
+
*
|
|
484
|
+
* @since 2.0.0
|
|
485
|
+
* @category predicates
|
|
486
|
+
*/
|
|
487
|
+
const between = /*#__PURE__*/Order_dist_effectOrder.between(Order);
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Restricts the given `BigDecimal` to be within the range specified by the `minimum` and `maximum` values.
|
|
491
|
+
*
|
|
492
|
+
* - If the `BigDecimal` is less than the `minimum` value, the function returns the `minimum` value.
|
|
493
|
+
* - If the `BigDecimal` is greater than the `maximum` value, the function returns the `maximum` value.
|
|
494
|
+
* - Otherwise, it returns the original `BigDecimal`.
|
|
495
|
+
*
|
|
496
|
+
* @param self - The `BigDecimal` to be clamped.
|
|
497
|
+
* @param minimum - The lower end of the range.
|
|
498
|
+
* @param maximum - The upper end of the range.
|
|
499
|
+
*
|
|
500
|
+
* @example
|
|
501
|
+
* import { clamp, unsafeFromString } from "effect/BigDecimal"
|
|
502
|
+
*
|
|
503
|
+
* assert.deepStrictEqual(clamp(unsafeFromString("0"), unsafeFromString("5"))(unsafeFromString("3")), unsafeFromString("3"))
|
|
504
|
+
* assert.deepStrictEqual(clamp(unsafeFromString("0"), unsafeFromString("5"))(unsafeFromString("-1")), unsafeFromString("0"))
|
|
505
|
+
* assert.deepStrictEqual(clamp(unsafeFromString("0"), unsafeFromString("5"))(unsafeFromString("6")), unsafeFromString("5"))
|
|
506
|
+
*
|
|
507
|
+
* @since 2.0.0
|
|
508
|
+
* @category math
|
|
509
|
+
*/
|
|
510
|
+
const clamp = /*#__PURE__*/Order_dist_effectOrder.clamp(Order);
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Returns the minimum between two `BigDecimal`s.
|
|
514
|
+
*
|
|
515
|
+
* @param self - The first `BigDecimal`.
|
|
516
|
+
* @param that - The second `BigDecimal`.
|
|
517
|
+
*
|
|
518
|
+
* @example
|
|
519
|
+
* import { min, unsafeFromString } from "effect/BigDecimal"
|
|
520
|
+
*
|
|
521
|
+
* assert.deepStrictEqual(min(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("2"))
|
|
522
|
+
*
|
|
523
|
+
* @since 2.0.0
|
|
524
|
+
* @category math
|
|
525
|
+
*/
|
|
526
|
+
const min = /*#__PURE__*/Order_dist_effectOrder.min(Order);
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* Returns the maximum between two `BigDecimal`s.
|
|
530
|
+
*
|
|
531
|
+
* @param self - The first `BigDecimal`.
|
|
532
|
+
* @param that - The second `BigDecimal`.
|
|
533
|
+
*
|
|
534
|
+
* @example
|
|
535
|
+
* import { max, unsafeFromString } from "effect/BigDecimal"
|
|
536
|
+
*
|
|
537
|
+
* assert.deepStrictEqual(max(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("3"))
|
|
538
|
+
*
|
|
539
|
+
* @since 2.0.0
|
|
540
|
+
* @category math
|
|
541
|
+
*/
|
|
542
|
+
const max = /*#__PURE__*/Order_dist_effectOrder.max(Order);
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* Determines the sign of a given `BigDecimal`.
|
|
546
|
+
*
|
|
547
|
+
* @param n - The `BigDecimal` to determine the sign of.
|
|
548
|
+
*
|
|
549
|
+
* @example
|
|
550
|
+
* import { sign, unsafeFromString } from "effect/BigDecimal"
|
|
551
|
+
*
|
|
552
|
+
* assert.deepStrictEqual(sign(unsafeFromString("-5")), -1)
|
|
553
|
+
* assert.deepStrictEqual(sign(unsafeFromString("0")), 0)
|
|
554
|
+
* assert.deepStrictEqual(sign(unsafeFromString("5")), 1)
|
|
555
|
+
*
|
|
556
|
+
* @since 2.0.0
|
|
557
|
+
* @category math
|
|
558
|
+
*/
|
|
559
|
+
const sign = n => n.value === bigint0 ? 0 : n.value < bigint0 ? -1 : 1;
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Determines the absolute value of a given `BigDecimal`.
|
|
563
|
+
*
|
|
564
|
+
* @param n - The `BigDecimal` to determine the absolute value of.
|
|
565
|
+
*
|
|
566
|
+
* @example
|
|
567
|
+
* import { abs, unsafeFromString } from "effect/BigDecimal"
|
|
568
|
+
*
|
|
569
|
+
* assert.deepStrictEqual(abs(unsafeFromString("-5")), unsafeFromString("5"))
|
|
570
|
+
* assert.deepStrictEqual(abs(unsafeFromString("0")), unsafeFromString("0"))
|
|
571
|
+
* assert.deepStrictEqual(abs(unsafeFromString("5")), unsafeFromString("5"))
|
|
572
|
+
*
|
|
573
|
+
* @since 2.0.0
|
|
574
|
+
* @category math
|
|
575
|
+
*/
|
|
576
|
+
const abs = n => n.value < bigint0 ? make(-n.value, n.scale) : n;
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Provides a negate operation on `BigDecimal`s.
|
|
580
|
+
*
|
|
581
|
+
* @param n - The `BigDecimal` to negate.
|
|
582
|
+
*
|
|
583
|
+
* @example
|
|
584
|
+
* import { negate, unsafeFromString } from "effect/BigDecimal"
|
|
585
|
+
*
|
|
586
|
+
* assert.deepStrictEqual(negate(unsafeFromString("3")), unsafeFromString("-3"))
|
|
587
|
+
* assert.deepStrictEqual(negate(unsafeFromString("-6")), unsafeFromString("6"))
|
|
588
|
+
*
|
|
589
|
+
* @since 2.0.0
|
|
590
|
+
* @category math
|
|
591
|
+
*/
|
|
592
|
+
const negate = n => make(-n.value, n.scale);
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Returns the remainder left over when one operand is divided by a second operand.
|
|
596
|
+
*
|
|
597
|
+
* If the divisor is `0`, the result will be `None`.
|
|
598
|
+
*
|
|
599
|
+
* @param self - The dividend.
|
|
600
|
+
* @param divisor - The divisor.
|
|
601
|
+
*
|
|
602
|
+
* @example
|
|
603
|
+
* import { remainder, unsafeFromString } from "effect/BigDecimal"
|
|
604
|
+
* import { some, none } from "effect/Option"
|
|
605
|
+
*
|
|
606
|
+
* assert.deepStrictEqual(remainder(unsafeFromString("2"), unsafeFromString("2")), some(unsafeFromString("0")))
|
|
607
|
+
* assert.deepStrictEqual(remainder(unsafeFromString("3"), unsafeFromString("2")), some(unsafeFromString("1")))
|
|
608
|
+
* assert.deepStrictEqual(remainder(unsafeFromString("-4"), unsafeFromString("2")), some(unsafeFromString("0")))
|
|
609
|
+
*
|
|
610
|
+
* @since 2.0.0
|
|
611
|
+
* @category math
|
|
612
|
+
*/
|
|
613
|
+
const remainder = /*#__PURE__*/Function_dist_effectFunction.dual(2, (self, divisor) => {
|
|
614
|
+
if (divisor.value === bigint0) {
|
|
615
|
+
return Option_dist_effectOption.none();
|
|
616
|
+
}
|
|
617
|
+
const max = Math.max(self.scale, divisor.scale);
|
|
618
|
+
return Option_dist_effectOption.some(make(scale(self, max).value % scale(divisor, max).value, max));
|
|
619
|
+
});
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* Returns the remainder left over when one operand is divided by a second operand.
|
|
623
|
+
*
|
|
624
|
+
* Throws a `RangeError` if the divisor is `0`.
|
|
625
|
+
*
|
|
626
|
+
* @param self - The dividend.
|
|
627
|
+
* @param divisor - The divisor.
|
|
628
|
+
*
|
|
629
|
+
* @example
|
|
630
|
+
* import { unsafeRemainder, unsafeFromString } from "effect/BigDecimal"
|
|
631
|
+
*
|
|
632
|
+
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("2"), unsafeFromString("2")), unsafeFromString("0"))
|
|
633
|
+
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("3"), unsafeFromString("2")), unsafeFromString("1"))
|
|
634
|
+
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("-4"), unsafeFromString("2")), unsafeFromString("0"))
|
|
635
|
+
*
|
|
636
|
+
* @since 2.0.0
|
|
637
|
+
* @category math
|
|
638
|
+
*/
|
|
639
|
+
const unsafeRemainder = /*#__PURE__*/Function_dist_effectFunction.dual(2, (self, divisor) => {
|
|
640
|
+
if (divisor.value === bigint0) {
|
|
641
|
+
throw new RangeError("Division by zero");
|
|
642
|
+
}
|
|
643
|
+
const max = Math.max(self.scale, divisor.scale);
|
|
644
|
+
return make(scale(self, max).value % scale(divisor, max).value, max);
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
/**
|
|
648
|
+
* @category instances
|
|
649
|
+
* @since 2.0.0
|
|
650
|
+
*/
|
|
651
|
+
const Equivalence = /*#__PURE__*/Equivalence_dist_effectEquivalence.make((self, that) => {
|
|
652
|
+
if (self.scale > that.scale) {
|
|
653
|
+
return scale(that, self.scale).value === self.value;
|
|
654
|
+
}
|
|
655
|
+
if (self.scale < that.scale) {
|
|
656
|
+
return scale(self, that.scale).value === that.value;
|
|
657
|
+
}
|
|
658
|
+
return self.value === that.value;
|
|
659
|
+
});
|
|
660
|
+
|
|
661
|
+
/**
|
|
662
|
+
* Checks if two `BigDecimal`s are equal.
|
|
663
|
+
*
|
|
664
|
+
* @since 2.0.0
|
|
665
|
+
* @category predicates
|
|
666
|
+
*/
|
|
667
|
+
const equals = /*#__PURE__*/Function_dist_effectFunction.dual(2, (self, that) => Equivalence(self, that));
|
|
668
|
+
|
|
669
|
+
/**
|
|
670
|
+
* Creates a `BigDecimal` from a `bigint` value.
|
|
671
|
+
*
|
|
672
|
+
* @param value - The `bigint` value to create a `BigDecimal` from.
|
|
673
|
+
*
|
|
674
|
+
* @since 2.0.0
|
|
675
|
+
* @category constructors
|
|
676
|
+
*/
|
|
677
|
+
const fromBigInt = n => make(n, 0);
|
|
678
|
+
|
|
679
|
+
/**
|
|
680
|
+
* Creates a `BigDecimal` from a `number` value.
|
|
681
|
+
*
|
|
682
|
+
* It is not recommended to convert a floating point number to a decimal directly,
|
|
683
|
+
* as the floating point representation may be unexpected.
|
|
684
|
+
*
|
|
685
|
+
* @param value - The `number` value to create a `BigDecimal` from.
|
|
686
|
+
*
|
|
687
|
+
* @example
|
|
688
|
+
* import { fromNumber, make } from "effect/BigDecimal"
|
|
689
|
+
*
|
|
690
|
+
* assert.deepStrictEqual(fromNumber(123), make(123n, 0))
|
|
691
|
+
* assert.deepStrictEqual(fromNumber(123.456), make(123456n, 3))
|
|
692
|
+
*
|
|
693
|
+
* @since 2.0.0
|
|
694
|
+
* @category constructors
|
|
695
|
+
*/
|
|
696
|
+
const fromNumber = n => {
|
|
697
|
+
const [lead, trail = ""] = `${n}`.split(".");
|
|
698
|
+
return make(BigInt(`${lead}${trail}`), trail.length);
|
|
699
|
+
};
|
|
700
|
+
|
|
701
|
+
/**
|
|
702
|
+
* Parses a numerical `string` into a `BigDecimal`.
|
|
703
|
+
*
|
|
704
|
+
* @param s - The `string` to parse.
|
|
705
|
+
*
|
|
706
|
+
* @example
|
|
707
|
+
* import { fromString, make } from "effect/BigDecimal"
|
|
708
|
+
* import { some, none } from "effect/Option"
|
|
709
|
+
*
|
|
710
|
+
* assert.deepStrictEqual(fromString("123"), some(make(123n, 0)))
|
|
711
|
+
* assert.deepStrictEqual(fromString("123.456"), some(make(123456n, 3)))
|
|
712
|
+
* assert.deepStrictEqual(fromString("123.abc"), none())
|
|
713
|
+
*
|
|
714
|
+
* @since 2.0.0
|
|
715
|
+
* @category constructors
|
|
716
|
+
*/
|
|
717
|
+
const fromString = s => {
|
|
718
|
+
let digits;
|
|
719
|
+
let scale;
|
|
720
|
+
const dot = s.search(/\./);
|
|
721
|
+
if (dot !== -1) {
|
|
722
|
+
const lead = s.slice(0, dot);
|
|
723
|
+
const trail = s.slice(dot + 1);
|
|
724
|
+
digits = `${lead}${trail}`;
|
|
725
|
+
scale = trail.length;
|
|
726
|
+
} else {
|
|
727
|
+
digits = s;
|
|
728
|
+
scale = 0;
|
|
729
|
+
}
|
|
730
|
+
if (digits === "") {
|
|
731
|
+
// TODO: This mimics the BigInt constructor behavior. Should this be `Option.none()`?
|
|
732
|
+
return Option_dist_effectOption.some(zero);
|
|
733
|
+
}
|
|
734
|
+
if (!/^(?:\+|-)?\d+$/.test(digits)) {
|
|
735
|
+
return Option_dist_effectOption.none();
|
|
736
|
+
}
|
|
737
|
+
return Option_dist_effectOption.some(make(BigInt(digits), scale));
|
|
738
|
+
};
|
|
739
|
+
|
|
740
|
+
/**
|
|
741
|
+
* Parses a numerical `string` into a `BigDecimal`.
|
|
742
|
+
*
|
|
743
|
+
* @param s - The `string` to parse.
|
|
744
|
+
*
|
|
745
|
+
* @example
|
|
746
|
+
* import { unsafeFromString, make } from "effect/BigDecimal"
|
|
747
|
+
*
|
|
748
|
+
* assert.deepStrictEqual(unsafeFromString("123"), make(123n, 0))
|
|
749
|
+
* assert.deepStrictEqual(unsafeFromString("123.456"), make(123456n, 3))
|
|
750
|
+
* assert.throws(() => unsafeFromString("123.abc"))
|
|
751
|
+
*
|
|
752
|
+
* @since 2.0.0
|
|
753
|
+
* @category constructors
|
|
754
|
+
*/
|
|
755
|
+
const unsafeFromString = s => Option_dist_effectOption.getOrThrowWith(fromString(s), () => new Error("Invalid numerical string"));
|
|
756
|
+
|
|
757
|
+
/**
|
|
758
|
+
* Formats a given `BigDecimal` as a `string`.
|
|
759
|
+
*
|
|
760
|
+
* @param normalized - The `BigDecimal` to format.
|
|
761
|
+
*
|
|
762
|
+
* @example
|
|
763
|
+
* import { toString, unsafeFromString } from "effect/BigDecimal"
|
|
764
|
+
*
|
|
765
|
+
* assert.deepStrictEqual(toString(unsafeFromString("-5")), "-5")
|
|
766
|
+
* assert.deepStrictEqual(toString(unsafeFromString("123.456")), "123.456")
|
|
767
|
+
* assert.deepStrictEqual(toString(unsafeFromString("-0.00000123")), "-0.00000123")
|
|
768
|
+
*
|
|
769
|
+
* @since 2.0.0
|
|
770
|
+
* @category conversions
|
|
771
|
+
*/
|
|
772
|
+
const toString = n => {
|
|
773
|
+
const negative = n.value < bigint0;
|
|
774
|
+
const absolute = negative ? `${n.value}`.substring(1) : `${n.value}`;
|
|
775
|
+
let before;
|
|
776
|
+
let after;
|
|
777
|
+
if (n.scale >= absolute.length) {
|
|
778
|
+
before = "0";
|
|
779
|
+
after = "0".repeat(n.scale - absolute.length) + absolute;
|
|
780
|
+
} else {
|
|
781
|
+
const location = absolute.length - n.scale;
|
|
782
|
+
if (location > absolute.length) {
|
|
783
|
+
const zeros = location - absolute.length;
|
|
784
|
+
before = `${absolute}${"0".repeat(zeros)}`;
|
|
785
|
+
after = "";
|
|
786
|
+
} else {
|
|
787
|
+
after = absolute.slice(location);
|
|
788
|
+
before = absolute.slice(0, location);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
const complete = after === "" ? before : `${before}.${after}`;
|
|
792
|
+
return negative ? `-${complete}` : complete;
|
|
793
|
+
};
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* Converts a `BigDecimal` to a `number`.
|
|
797
|
+
*
|
|
798
|
+
* This function will produce incorrect results if the `BigDecimal` exceeds the 64-bit range of a `number`.
|
|
799
|
+
*
|
|
800
|
+
* @param n - The `BigDecimal` to convert.
|
|
801
|
+
*
|
|
802
|
+
* @example
|
|
803
|
+
* import { unsafeToNumber, unsafeFromString } from "effect/BigDecimal"
|
|
804
|
+
*
|
|
805
|
+
* assert.deepStrictEqual(unsafeToNumber(unsafeFromString("123.456")), 123.456)
|
|
806
|
+
*
|
|
807
|
+
* @since 2.0.0
|
|
808
|
+
* @category conversions
|
|
809
|
+
*/
|
|
810
|
+
const unsafeToNumber = n => Number(toString(n));
|
|
811
|
+
|
|
812
|
+
/**
|
|
813
|
+
* Checks if a given `BigDecimal` is an integer.
|
|
814
|
+
*
|
|
815
|
+
* @param n - The `BigDecimal` to check.
|
|
816
|
+
*
|
|
817
|
+
* @example
|
|
818
|
+
* import { isInteger, unsafeFromString } from "effect/BigDecimal"
|
|
819
|
+
*
|
|
820
|
+
* assert.deepStrictEqual(isInteger(unsafeFromString("0")), true)
|
|
821
|
+
* assert.deepStrictEqual(isInteger(unsafeFromString("1")), true)
|
|
822
|
+
* assert.deepStrictEqual(isInteger(unsafeFromString("1.1")), false)
|
|
823
|
+
*
|
|
824
|
+
* @since 2.0.0
|
|
825
|
+
* @category predicates
|
|
826
|
+
*/
|
|
827
|
+
const isInteger = n => normalize(n).scale <= 0;
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* Checks if a given `BigDecimal` is `0`.
|
|
831
|
+
*
|
|
832
|
+
* @param n - The `BigDecimal` to check.
|
|
833
|
+
*
|
|
834
|
+
* @example
|
|
835
|
+
* import { isZero, unsafeFromString } from "effect/BigDecimal"
|
|
836
|
+
*
|
|
837
|
+
* assert.deepStrictEqual(isZero(unsafeFromString("0")), true)
|
|
838
|
+
* assert.deepStrictEqual(isZero(unsafeFromString("1")), false)
|
|
839
|
+
*
|
|
840
|
+
* @since 2.0.0
|
|
841
|
+
* @category predicates
|
|
842
|
+
*/
|
|
843
|
+
const isZero = n => n.value === bigint0;
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* Checks if a given `BigDecimal` is negative.
|
|
847
|
+
*
|
|
848
|
+
* @param n - The `BigDecimal` to check.
|
|
849
|
+
*
|
|
850
|
+
* @example
|
|
851
|
+
* import { isNegative, unsafeFromString } from "effect/BigDecimal"
|
|
852
|
+
*
|
|
853
|
+
* assert.deepStrictEqual(isNegative(unsafeFromString("-1")), true)
|
|
854
|
+
* assert.deepStrictEqual(isNegative(unsafeFromString("0")), false)
|
|
855
|
+
* assert.deepStrictEqual(isNegative(unsafeFromString("1")), false)
|
|
856
|
+
*
|
|
857
|
+
* @since 2.0.0
|
|
858
|
+
* @category predicates
|
|
859
|
+
*/
|
|
860
|
+
const isNegative = n => n.value < bigint0;
|
|
861
|
+
|
|
862
|
+
/**
|
|
863
|
+
* Checks if a given `BigDecimal` is positive.
|
|
864
|
+
*
|
|
865
|
+
* @param n - The `BigDecimal` to check.
|
|
866
|
+
*
|
|
867
|
+
* @example
|
|
868
|
+
* import { isPositive, unsafeFromString } from "effect/BigDecimal"
|
|
869
|
+
*
|
|
870
|
+
* assert.deepStrictEqual(isPositive(unsafeFromString("-1")), false)
|
|
871
|
+
* assert.deepStrictEqual(isPositive(unsafeFromString("0")), false)
|
|
872
|
+
* assert.deepStrictEqual(isPositive(unsafeFromString("1")), true)
|
|
873
|
+
*
|
|
874
|
+
* @since 2.0.0
|
|
875
|
+
* @category predicates
|
|
876
|
+
*/
|
|
877
|
+
const isPositive = n => n.value > bigint0;
|
|
878
|
+
|
|
879
|
+
exports.Equivalence = Equivalence;
|
|
880
|
+
exports.Order = Order;
|
|
881
|
+
exports.TypeId = TypeId;
|
|
882
|
+
exports.abs = abs;
|
|
883
|
+
exports.between = between;
|
|
884
|
+
exports.clamp = clamp;
|
|
885
|
+
exports.divide = divide;
|
|
886
|
+
exports.equals = equals;
|
|
887
|
+
exports.fromBigInt = fromBigInt;
|
|
888
|
+
exports.fromNumber = fromNumber;
|
|
889
|
+
exports.fromString = fromString;
|
|
890
|
+
exports.greaterThan = greaterThan;
|
|
891
|
+
exports.greaterThanOrEqualTo = greaterThanOrEqualTo;
|
|
892
|
+
exports.isBigDecimal = isBigDecimal;
|
|
893
|
+
exports.isInteger = isInteger;
|
|
894
|
+
exports.isNegative = isNegative;
|
|
895
|
+
exports.isPositive = isPositive;
|
|
896
|
+
exports.isZero = isZero;
|
|
897
|
+
exports.lessThan = lessThan;
|
|
898
|
+
exports.lessThanOrEqualTo = lessThanOrEqualTo;
|
|
899
|
+
exports.make = make;
|
|
900
|
+
exports.max = max;
|
|
901
|
+
exports.min = min;
|
|
902
|
+
exports.multiply = multiply;
|
|
903
|
+
exports.negate = negate;
|
|
904
|
+
exports.normalize = normalize;
|
|
905
|
+
exports.remainder = remainder;
|
|
906
|
+
exports.scale = scale;
|
|
907
|
+
exports.sign = sign;
|
|
908
|
+
exports.subtract = subtract;
|
|
909
|
+
exports.sum = sum;
|
|
910
|
+
exports.toString = toString;
|
|
911
|
+
exports.unsafeDivide = unsafeDivide;
|
|
912
|
+
exports.unsafeFromString = unsafeFromString;
|
|
913
|
+
exports.unsafeRemainder = unsafeRemainder;
|
|
914
|
+
exports.unsafeToNumber = unsafeToNumber;
|