effect 3.10.18 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Array.js +206 -0
- package/dist/cjs/Array.js.map +1 -1
- package/dist/cjs/BigDecimal.js +181 -24
- package/dist/cjs/BigDecimal.js.map +1 -1
- package/dist/cjs/BigInt.js +54 -0
- package/dist/cjs/BigInt.js.map +1 -1
- package/dist/cjs/Boolean.js +24 -0
- package/dist/cjs/Boolean.js.map +1 -1
- package/dist/cjs/Brand.js +4 -0
- package/dist/cjs/Brand.js.map +1 -1
- package/dist/cjs/Channel.js +44 -4
- package/dist/cjs/Channel.js.map +1 -1
- package/dist/cjs/Chunk.js +8 -0
- package/dist/cjs/Chunk.js.map +1 -1
- package/dist/cjs/Config.js +10 -1
- package/dist/cjs/Config.js.map +1 -1
- package/dist/cjs/Context.js +50 -1
- package/dist/cjs/Context.js.map +1 -1
- package/dist/cjs/Cron.js +81 -67
- package/dist/cjs/Cron.js.map +1 -1
- package/dist/cjs/Data.js +14 -0
- package/dist/cjs/Data.js.map +1 -1
- package/dist/cjs/DateTime.js +178 -664
- package/dist/cjs/DateTime.js.map +1 -1
- package/dist/cjs/Duration.js +2 -0
- package/dist/cjs/Duration.js.map +1 -1
- package/dist/cjs/Effect.js +296 -4
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/Either.js +38 -2
- package/dist/cjs/Either.js.map +1 -1
- package/dist/cjs/FiberHandle.js +6 -0
- package/dist/cjs/FiberHandle.js.map +1 -1
- package/dist/cjs/FiberMap.js +6 -0
- package/dist/cjs/FiberMap.js.map +1 -1
- package/dist/cjs/FiberSet.js +6 -0
- package/dist/cjs/FiberSet.js.map +1 -1
- package/dist/cjs/Function.js +34 -0
- package/dist/cjs/Function.js.map +1 -1
- package/dist/cjs/GlobalValue.js +2 -0
- package/dist/cjs/GlobalValue.js.map +1 -1
- package/dist/cjs/HashMap.js.map +1 -1
- package/dist/cjs/Inspectable.js +8 -4
- package/dist/cjs/Inspectable.js.map +1 -1
- package/dist/cjs/Iterable.js +18 -0
- package/dist/cjs/Iterable.js.map +1 -1
- package/dist/cjs/JSONSchema.js.map +1 -1
- package/dist/cjs/List.js +4 -0
- package/dist/cjs/List.js.map +1 -1
- package/dist/cjs/Logger.js +26 -0
- package/dist/cjs/Logger.js.map +1 -1
- package/dist/cjs/Mailbox.js +2 -0
- package/dist/cjs/Mailbox.js.map +1 -1
- package/dist/cjs/ManagedRuntime.js +2 -0
- package/dist/cjs/ManagedRuntime.js.map +1 -1
- package/dist/cjs/Metric.js +10 -0
- package/dist/cjs/Metric.js.map +1 -1
- package/dist/cjs/Micro.js +1104 -1069
- package/dist/cjs/Micro.js.map +1 -1
- package/dist/cjs/Number.js +44 -0
- package/dist/cjs/Number.js.map +1 -1
- package/dist/cjs/Option.js +70 -0
- package/dist/cjs/Option.js.map +1 -1
- package/dist/cjs/Order.js +2 -0
- package/dist/cjs/Order.js.map +1 -1
- package/dist/cjs/Ordering.js +4 -0
- package/dist/cjs/Ordering.js.map +1 -1
- package/dist/cjs/Predicate.js +68 -0
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/Random.js +4 -0
- package/dist/cjs/Random.js.map +1 -1
- package/dist/cjs/RateLimiter.js +4 -0
- package/dist/cjs/RateLimiter.js.map +1 -1
- package/dist/cjs/RcMap.js +2 -0
- package/dist/cjs/RcMap.js.map +1 -1
- package/dist/cjs/RcRef.js +2 -0
- package/dist/cjs/RcRef.js.map +1 -1
- package/dist/cjs/Record.js +56 -0
- package/dist/cjs/Record.js.map +1 -1
- package/dist/cjs/Redacted.js +8 -0
- package/dist/cjs/Redacted.js.map +1 -1
- package/dist/cjs/RegExp.js +4 -0
- package/dist/cjs/RegExp.js.map +1 -1
- package/dist/cjs/Request.js +4 -0
- package/dist/cjs/Request.js.map +1 -1
- package/dist/cjs/RequestResolver.js +2 -0
- package/dist/cjs/RequestResolver.js.map +1 -1
- package/dist/cjs/Runtime.js +6 -0
- package/dist/cjs/Runtime.js.map +1 -1
- package/dist/cjs/STM.js.map +1 -1
- package/dist/cjs/Schema.js +91 -8
- package/dist/cjs/Schema.js.map +1 -1
- package/dist/cjs/Sink.js +9 -1
- package/dist/cjs/Sink.js.map +1 -1
- package/dist/cjs/Stream.js +179 -7
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/String.js +62 -0
- package/dist/cjs/String.js.map +1 -1
- package/dist/cjs/Struct.js +12 -0
- package/dist/cjs/Struct.js.map +1 -1
- package/dist/cjs/Symbol.js +2 -0
- package/dist/cjs/Symbol.js.map +1 -1
- package/dist/cjs/Trie.js +56 -0
- package/dist/cjs/Trie.js.map +1 -1
- package/dist/cjs/Tuple.js +18 -0
- package/dist/cjs/Tuple.js.map +1 -1
- package/dist/cjs/Utils.js +7 -1
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/internal/channel/channelExecutor.js +5 -9
- package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
- package/dist/cjs/internal/channel.js +156 -130
- package/dist/cjs/internal/channel.js.map +1 -1
- package/dist/cjs/internal/config.js +13 -4
- package/dist/cjs/internal/config.js.map +1 -1
- package/dist/cjs/internal/context.js +46 -3
- package/dist/cjs/internal/context.js.map +1 -1
- package/dist/cjs/internal/dateTime.js +747 -0
- package/dist/cjs/internal/dateTime.js.map +1 -0
- package/dist/cjs/internal/fiberRuntime.js +34 -11
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/groupBy.js +9 -3
- package/dist/cjs/internal/groupBy.js.map +1 -1
- package/dist/cjs/internal/layer.js +1 -1
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/mailbox.js +1 -1
- package/dist/cjs/internal/mailbox.js.map +1 -1
- package/dist/cjs/internal/sink.js +25 -21
- package/dist/cjs/internal/sink.js.map +1 -1
- package/dist/cjs/internal/stream.js +70 -71
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/cjs/internal/version.js.map +1 -1
- package/dist/dts/Array.d.ts +534 -0
- package/dist/dts/Array.d.ts.map +1 -1
- package/dist/dts/BigDecimal.d.ts +172 -1
- package/dist/dts/BigDecimal.d.ts.map +1 -1
- package/dist/dts/BigInt.d.ts +114 -0
- package/dist/dts/BigInt.d.ts.map +1 -1
- package/dist/dts/Boolean.d.ts +56 -0
- package/dist/dts/Boolean.d.ts.map +1 -1
- package/dist/dts/Brand.d.ts +6 -0
- package/dist/dts/Brand.d.ts.map +1 -1
- package/dist/dts/Channel.d.ts +66 -5
- package/dist/dts/Channel.d.ts.map +1 -1
- package/dist/dts/Chunk.d.ts +30 -0
- package/dist/dts/Chunk.d.ts.map +1 -1
- package/dist/dts/Config.d.ts +25 -1
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Context.d.ts +155 -0
- package/dist/dts/Context.d.ts.map +1 -1
- package/dist/dts/Cron.d.ts +21 -6
- package/dist/dts/Cron.d.ts.map +1 -1
- package/dist/dts/Data.d.ts +26 -0
- package/dist/dts/Data.d.ts.map +1 -1
- package/dist/dts/DateTime.d.ts +192 -49
- package/dist/dts/DateTime.d.ts.map +1 -1
- package/dist/dts/Duration.d.ts +2 -0
- package/dist/dts/Duration.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +658 -1
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/Either.d.ts +84 -2
- package/dist/dts/Either.d.ts.map +1 -1
- package/dist/dts/FiberHandle.d.ts +6 -0
- package/dist/dts/FiberHandle.d.ts.map +1 -1
- package/dist/dts/FiberMap.d.ts +6 -0
- package/dist/dts/FiberMap.d.ts.map +1 -1
- package/dist/dts/FiberSet.d.ts +6 -0
- package/dist/dts/FiberSet.d.ts.map +1 -1
- package/dist/dts/Function.d.ts +50 -0
- package/dist/dts/Function.d.ts.map +1 -1
- package/dist/dts/GlobalValue.d.ts +2 -0
- package/dist/dts/GlobalValue.d.ts.map +1 -1
- package/dist/dts/HashMap.d.ts +6 -0
- package/dist/dts/HashMap.d.ts.map +1 -1
- package/dist/dts/Inspectable.d.ts.map +1 -1
- package/dist/dts/Iterable.d.ts +26 -0
- package/dist/dts/Iterable.d.ts.map +1 -1
- package/dist/dts/JSONSchema.d.ts +1 -0
- package/dist/dts/JSONSchema.d.ts.map +1 -1
- package/dist/dts/List.d.ts +20 -0
- package/dist/dts/List.d.ts.map +1 -1
- package/dist/dts/Logger.d.ts +34 -0
- package/dist/dts/Logger.d.ts.map +1 -1
- package/dist/dts/Mailbox.d.ts +2 -0
- package/dist/dts/Mailbox.d.ts.map +1 -1
- package/dist/dts/ManagedRuntime.d.ts +2 -0
- package/dist/dts/ManagedRuntime.d.ts.map +1 -1
- package/dist/dts/Metric.d.ts +18 -0
- package/dist/dts/Metric.d.ts.map +1 -1
- package/dist/dts/Micro.d.ts +880 -863
- package/dist/dts/Micro.d.ts.map +1 -1
- package/dist/dts/Number.d.ts +104 -0
- package/dist/dts/Number.d.ts.map +1 -1
- package/dist/dts/Option.d.ts +142 -0
- package/dist/dts/Option.d.ts.map +1 -1
- package/dist/dts/Order.d.ts +2 -0
- package/dist/dts/Order.d.ts.map +1 -1
- package/dist/dts/Ordering.d.ts +8 -0
- package/dist/dts/Ordering.d.ts.map +1 -1
- package/dist/dts/Predicate.d.ts +104 -0
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/Random.d.ts +4 -0
- package/dist/dts/Random.d.ts.map +1 -1
- package/dist/dts/RateLimiter.d.ts +4 -0
- package/dist/dts/RateLimiter.d.ts.map +1 -1
- package/dist/dts/RcMap.d.ts +6 -0
- package/dist/dts/RcMap.d.ts.map +1 -1
- package/dist/dts/RcRef.d.ts +2 -0
- package/dist/dts/RcRef.d.ts.map +1 -1
- package/dist/dts/Record.d.ts +136 -0
- package/dist/dts/Record.d.ts.map +1 -1
- package/dist/dts/Redacted.d.ts +8 -0
- package/dist/dts/Redacted.d.ts.map +1 -1
- package/dist/dts/RegExp.d.ts +4 -0
- package/dist/dts/RegExp.d.ts.map +1 -1
- package/dist/dts/Request.d.ts +4 -0
- package/dist/dts/Request.d.ts.map +1 -1
- package/dist/dts/RequestResolver.d.ts +6 -0
- package/dist/dts/RequestResolver.d.ts.map +1 -1
- package/dist/dts/Runtime.d.ts +18 -0
- package/dist/dts/Runtime.d.ts.map +1 -1
- package/dist/dts/STM.d.ts +2 -0
- package/dist/dts/STM.d.ts.map +1 -1
- package/dist/dts/Schema.d.ts +90 -0
- package/dist/dts/Schema.d.ts.map +1 -1
- package/dist/dts/Sink.d.ts +8 -0
- package/dist/dts/Sink.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +394 -32
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/String.d.ts +94 -0
- package/dist/dts/String.d.ts.map +1 -1
- package/dist/dts/Struct.d.ts +24 -0
- package/dist/dts/Struct.d.ts.map +1 -1
- package/dist/dts/Symbol.d.ts +2 -0
- package/dist/dts/Symbol.d.ts.map +1 -1
- package/dist/dts/Trie.d.ts +132 -0
- package/dist/dts/Trie.d.ts.map +1 -1
- package/dist/dts/Tuple.d.ts +42 -0
- package/dist/dts/Tuple.d.ts.map +1 -1
- package/dist/dts/Types.d.ts +24 -0
- package/dist/dts/Types.d.ts.map +1 -1
- package/dist/dts/Utils.d.ts +4 -0
- package/dist/dts/Utils.d.ts.map +1 -1
- package/dist/dts/internal/context.d.ts +1 -1
- package/dist/dts/internal/context.d.ts.map +1 -1
- package/dist/dts/internal/dateTime.d.ts +2 -0
- package/dist/dts/internal/dateTime.d.ts.map +1 -0
- package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
- package/dist/dts/internal/stream.d.ts.map +1 -1
- package/dist/esm/Array.js +208 -0
- package/dist/esm/Array.js.map +1 -1
- package/dist/esm/BigDecimal.js +175 -20
- package/dist/esm/BigDecimal.js.map +1 -1
- package/dist/esm/BigInt.js +54 -0
- package/dist/esm/BigInt.js.map +1 -1
- package/dist/esm/Boolean.js +24 -0
- package/dist/esm/Boolean.js.map +1 -1
- package/dist/esm/Brand.js +4 -0
- package/dist/esm/Brand.js.map +1 -1
- package/dist/esm/Channel.js +42 -2
- package/dist/esm/Channel.js.map +1 -1
- package/dist/esm/Chunk.js +8 -0
- package/dist/esm/Chunk.js.map +1 -1
- package/dist/esm/Config.js +9 -0
- package/dist/esm/Config.js.map +1 -1
- package/dist/esm/Context.js +49 -0
- package/dist/esm/Context.js.map +1 -1
- package/dist/esm/Cron.js +81 -67
- package/dist/esm/Cron.js.map +1 -1
- package/dist/esm/Data.js +16 -0
- package/dist/esm/Data.js.map +1 -1
- package/dist/esm/DateTime.js +176 -627
- package/dist/esm/DateTime.js.map +1 -1
- package/dist/esm/Duration.js +2 -0
- package/dist/esm/Duration.js.map +1 -1
- package/dist/esm/Effect.js +297 -0
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/Either.js +40 -2
- package/dist/esm/Either.js.map +1 -1
- package/dist/esm/FiberHandle.js +6 -0
- package/dist/esm/FiberHandle.js.map +1 -1
- package/dist/esm/FiberMap.js +6 -0
- package/dist/esm/FiberMap.js.map +1 -1
- package/dist/esm/FiberSet.js +6 -0
- package/dist/esm/FiberSet.js.map +1 -1
- package/dist/esm/Function.js +34 -0
- package/dist/esm/Function.js.map +1 -1
- package/dist/esm/GlobalValue.js +2 -0
- package/dist/esm/GlobalValue.js.map +1 -1
- package/dist/esm/HashMap.js.map +1 -1
- package/dist/esm/Inspectable.js +8 -4
- package/dist/esm/Inspectable.js.map +1 -1
- package/dist/esm/Iterable.js +18 -0
- package/dist/esm/Iterable.js.map +1 -1
- package/dist/esm/JSONSchema.js.map +1 -1
- package/dist/esm/List.js +4 -0
- package/dist/esm/List.js.map +1 -1
- package/dist/esm/Logger.js +26 -0
- package/dist/esm/Logger.js.map +1 -1
- package/dist/esm/Mailbox.js +2 -0
- package/dist/esm/Mailbox.js.map +1 -1
- package/dist/esm/ManagedRuntime.js +2 -0
- package/dist/esm/ManagedRuntime.js.map +1 -1
- package/dist/esm/Metric.js +10 -0
- package/dist/esm/Metric.js.map +1 -1
- package/dist/esm/Micro.js +1077 -1037
- package/dist/esm/Micro.js.map +1 -1
- package/dist/esm/Number.js +44 -0
- package/dist/esm/Number.js.map +1 -1
- package/dist/esm/Option.js +72 -0
- package/dist/esm/Option.js.map +1 -1
- package/dist/esm/Order.js +2 -0
- package/dist/esm/Order.js.map +1 -1
- package/dist/esm/Ordering.js +4 -0
- package/dist/esm/Ordering.js.map +1 -1
- package/dist/esm/Predicate.js +68 -0
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/Random.js +4 -0
- package/dist/esm/Random.js.map +1 -1
- package/dist/esm/RateLimiter.js +4 -0
- package/dist/esm/RateLimiter.js.map +1 -1
- package/dist/esm/RcMap.js +2 -0
- package/dist/esm/RcMap.js.map +1 -1
- package/dist/esm/RcRef.js +2 -0
- package/dist/esm/RcRef.js.map +1 -1
- package/dist/esm/Record.js +56 -0
- package/dist/esm/Record.js.map +1 -1
- package/dist/esm/Redacted.js +8 -0
- package/dist/esm/Redacted.js.map +1 -1
- package/dist/esm/RegExp.js +4 -0
- package/dist/esm/RegExp.js.map +1 -1
- package/dist/esm/Request.js +4 -0
- package/dist/esm/Request.js.map +1 -1
- package/dist/esm/RequestResolver.js +2 -0
- package/dist/esm/RequestResolver.js.map +1 -1
- package/dist/esm/Runtime.js +6 -0
- package/dist/esm/Runtime.js.map +1 -1
- package/dist/esm/STM.js.map +1 -1
- package/dist/esm/Schema.js +88 -0
- package/dist/esm/Schema.js.map +1 -1
- package/dist/esm/Sink.js +8 -0
- package/dist/esm/Sink.js.map +1 -1
- package/dist/esm/Stream.js +183 -5
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/String.js +62 -0
- package/dist/esm/String.js.map +1 -1
- package/dist/esm/Struct.js +12 -0
- package/dist/esm/Struct.js.map +1 -1
- package/dist/esm/Symbol.js +2 -0
- package/dist/esm/Symbol.js.map +1 -1
- package/dist/esm/Trie.js +56 -0
- package/dist/esm/Trie.js.map +1 -1
- package/dist/esm/Tuple.js +22 -0
- package/dist/esm/Tuple.js.map +1 -1
- package/dist/esm/Utils.js +5 -0
- package/dist/esm/Utils.js.map +1 -1
- package/dist/esm/internal/channel/channelExecutor.js +5 -7
- package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
- package/dist/esm/internal/channel.js +152 -129
- package/dist/esm/internal/channel.js.map +1 -1
- package/dist/esm/internal/config.js +11 -3
- package/dist/esm/internal/config.js.map +1 -1
- package/dist/esm/internal/context.js +42 -2
- package/dist/esm/internal/context.js.map +1 -1
- package/dist/esm/internal/dateTime.js +704 -0
- package/dist/esm/internal/dateTime.js.map +1 -0
- package/dist/esm/internal/fiberRuntime.js +31 -9
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/groupBy.js +9 -3
- package/dist/esm/internal/groupBy.js.map +1 -1
- package/dist/esm/internal/layer.js +1 -1
- package/dist/esm/internal/layer.js.map +1 -1
- package/dist/esm/internal/mailbox.js +1 -1
- package/dist/esm/internal/mailbox.js.map +1 -1
- package/dist/esm/internal/sink.js +23 -20
- package/dist/esm/internal/sink.js.map +1 -1
- package/dist/esm/internal/stream.js +66 -69
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/dist/esm/internal/version.js.map +1 -1
- package/package.json +1 -1
- package/src/Array.ts +534 -0
- package/src/BigDecimal.ts +247 -21
- package/src/BigInt.ts +114 -0
- package/src/Boolean.ts +56 -0
- package/src/Brand.ts +6 -0
- package/src/Channel.ts +81 -5
- package/src/Chunk.ts +32 -0
- package/src/Config.ts +26 -1
- package/src/Context.ts +163 -0
- package/src/Cron.ts +91 -68
- package/src/Data.ts +26 -0
- package/src/DateTime.ts +307 -757
- package/src/Duration.ts +2 -0
- package/src/Effect.ts +910 -1
- package/src/Either.ts +84 -2
- package/src/FiberHandle.ts +6 -0
- package/src/FiberMap.ts +6 -0
- package/src/FiberSet.ts +6 -0
- package/src/Function.ts +50 -0
- package/src/GlobalValue.ts +2 -0
- package/src/HashMap.ts +6 -0
- package/src/Inspectable.ts +11 -7
- package/src/Iterable.ts +26 -0
- package/src/JSONSchema.ts +1 -0
- package/src/List.ts +24 -0
- package/src/Logger.ts +34 -0
- package/src/Mailbox.ts +2 -0
- package/src/ManagedRuntime.ts +2 -0
- package/src/Metric.ts +18 -0
- package/src/Micro.ts +2007 -1745
- package/src/Number.ts +104 -0
- package/src/Option.ts +142 -0
- package/src/Order.ts +2 -0
- package/src/Ordering.ts +8 -0
- package/src/Predicate.ts +104 -0
- package/src/Random.ts +4 -0
- package/src/RateLimiter.ts +4 -0
- package/src/RcMap.ts +6 -0
- package/src/RcRef.ts +2 -0
- package/src/Record.ts +136 -0
- package/src/Redacted.ts +8 -0
- package/src/RegExp.ts +4 -0
- package/src/Request.ts +4 -0
- package/src/RequestResolver.ts +6 -0
- package/src/Runtime.ts +18 -0
- package/src/STM.ts +2 -0
- package/src/Schema.ts +124 -0
- package/src/Sink.ts +11 -0
- package/src/Stream.ts +399 -44
- package/src/String.ts +94 -0
- package/src/Struct.ts +24 -0
- package/src/Symbol.ts +2 -0
- package/src/Trie.ts +132 -0
- package/src/Tuple.ts +42 -0
- package/src/Types.ts +24 -0
- package/src/Utils.ts +8 -0
- package/src/internal/channel/channelExecutor.ts +37 -33
- package/src/internal/channel.ts +504 -467
- package/src/internal/config.ts +18 -6
- package/src/internal/context.ts +56 -4
- package/src/internal/dateTime.ts +1126 -0
- package/src/internal/fiberRuntime.ts +35 -16
- package/src/internal/groupBy.ts +13 -22
- package/src/internal/layer.ts +5 -8
- package/src/internal/mailbox.ts +6 -4
- package/src/internal/sink.ts +55 -35
- package/src/internal/stream.ts +299 -299
- package/src/internal/version.ts +1 -1
package/src/BigDecimal.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { type Pipeable, pipeArguments } from "./Pipeable.js"
|
|
|
26
26
|
import { hasProperty } from "./Predicate.js"
|
|
27
27
|
|
|
28
28
|
const DEFAULT_PRECISION = 100
|
|
29
|
+
const FINITE_INT_REGEX = /^[+-]?\d+$/
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* @since 2.0.0
|
|
@@ -134,10 +135,12 @@ const zero = unsafeMakeNormalized(bigint0, 0)
|
|
|
134
135
|
* @param self - The `BigDecimal` to normalize.
|
|
135
136
|
*
|
|
136
137
|
* @example
|
|
138
|
+
* ```ts
|
|
137
139
|
* import { normalize, make, unsafeFromString } from "effect/BigDecimal"
|
|
138
140
|
*
|
|
139
141
|
* assert.deepStrictEqual(normalize(unsafeFromString("123.00000")), normalize(make(123n, 0)))
|
|
140
142
|
* assert.deepStrictEqual(normalize(unsafeFromString("12300000")), normalize(make(123n, -5)))
|
|
143
|
+
* ```
|
|
141
144
|
*
|
|
142
145
|
* @since 2.0.0
|
|
143
146
|
* @category scaling
|
|
@@ -229,9 +232,11 @@ export const scale: {
|
|
|
229
232
|
* @param that - The second operand.
|
|
230
233
|
*
|
|
231
234
|
* @example
|
|
235
|
+
* ```ts
|
|
232
236
|
* import { sum, unsafeFromString } from "effect/BigDecimal"
|
|
233
237
|
*
|
|
234
238
|
* assert.deepStrictEqual(sum(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("5"))
|
|
239
|
+
* ```
|
|
235
240
|
*
|
|
236
241
|
* @since 2.0.0
|
|
237
242
|
* @category math
|
|
@@ -244,9 +249,11 @@ export const sum: {
|
|
|
244
249
|
* @param that - The second operand.
|
|
245
250
|
*
|
|
246
251
|
* @example
|
|
252
|
+
* ```ts
|
|
247
253
|
* import { sum, unsafeFromString } from "effect/BigDecimal"
|
|
248
254
|
*
|
|
249
255
|
* assert.deepStrictEqual(sum(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("5"))
|
|
256
|
+
* ```
|
|
250
257
|
*
|
|
251
258
|
* @since 2.0.0
|
|
252
259
|
* @category math
|
|
@@ -259,9 +266,11 @@ export const sum: {
|
|
|
259
266
|
* @param that - The second operand.
|
|
260
267
|
*
|
|
261
268
|
* @example
|
|
269
|
+
* ```ts
|
|
262
270
|
* import { sum, unsafeFromString } from "effect/BigDecimal"
|
|
263
271
|
*
|
|
264
272
|
* assert.deepStrictEqual(sum(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("5"))
|
|
273
|
+
* ```
|
|
265
274
|
*
|
|
266
275
|
* @since 2.0.0
|
|
267
276
|
* @category math
|
|
@@ -294,9 +303,11 @@ export const sum: {
|
|
|
294
303
|
* @param that - The second operand.
|
|
295
304
|
*
|
|
296
305
|
* @example
|
|
306
|
+
* ```ts
|
|
297
307
|
* import { multiply, unsafeFromString } from "effect/BigDecimal"
|
|
298
308
|
*
|
|
299
309
|
* assert.deepStrictEqual(multiply(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("6"))
|
|
310
|
+
* ```
|
|
300
311
|
*
|
|
301
312
|
* @since 2.0.0
|
|
302
313
|
* @category math
|
|
@@ -309,9 +320,11 @@ export const multiply: {
|
|
|
309
320
|
* @param that - The second operand.
|
|
310
321
|
*
|
|
311
322
|
* @example
|
|
323
|
+
* ```ts
|
|
312
324
|
* import { multiply, unsafeFromString } from "effect/BigDecimal"
|
|
313
325
|
*
|
|
314
326
|
* assert.deepStrictEqual(multiply(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("6"))
|
|
327
|
+
* ```
|
|
315
328
|
*
|
|
316
329
|
* @since 2.0.0
|
|
317
330
|
* @category math
|
|
@@ -324,9 +337,11 @@ export const multiply: {
|
|
|
324
337
|
* @param that - The second operand.
|
|
325
338
|
*
|
|
326
339
|
* @example
|
|
340
|
+
* ```ts
|
|
327
341
|
* import { multiply, unsafeFromString } from "effect/BigDecimal"
|
|
328
342
|
*
|
|
329
343
|
* assert.deepStrictEqual(multiply(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("6"))
|
|
344
|
+
* ```
|
|
330
345
|
*
|
|
331
346
|
* @since 2.0.0
|
|
332
347
|
* @category math
|
|
@@ -347,9 +362,11 @@ export const multiply: {
|
|
|
347
362
|
* @param that - The second operand.
|
|
348
363
|
*
|
|
349
364
|
* @example
|
|
365
|
+
* ```ts
|
|
350
366
|
* import { subtract, unsafeFromString } from "effect/BigDecimal"
|
|
351
367
|
*
|
|
352
368
|
* assert.deepStrictEqual(subtract(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("-1"))
|
|
369
|
+
* ```
|
|
353
370
|
*
|
|
354
371
|
* @since 2.0.0
|
|
355
372
|
* @category math
|
|
@@ -362,9 +379,11 @@ export const subtract: {
|
|
|
362
379
|
* @param that - The second operand.
|
|
363
380
|
*
|
|
364
381
|
* @example
|
|
382
|
+
* ```ts
|
|
365
383
|
* import { subtract, unsafeFromString } from "effect/BigDecimal"
|
|
366
384
|
*
|
|
367
385
|
* assert.deepStrictEqual(subtract(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("-1"))
|
|
386
|
+
* ```
|
|
368
387
|
*
|
|
369
388
|
* @since 2.0.0
|
|
370
389
|
* @category math
|
|
@@ -377,9 +396,11 @@ export const subtract: {
|
|
|
377
396
|
* @param that - The second operand.
|
|
378
397
|
*
|
|
379
398
|
* @example
|
|
399
|
+
* ```ts
|
|
380
400
|
* import { subtract, unsafeFromString } from "effect/BigDecimal"
|
|
381
401
|
*
|
|
382
402
|
* assert.deepStrictEqual(subtract(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("-1"))
|
|
403
|
+
* ```
|
|
383
404
|
*
|
|
384
405
|
* @since 2.0.0
|
|
385
406
|
* @category math
|
|
@@ -485,11 +506,13 @@ export const roundTerminal = (n: bigint): bigint => {
|
|
|
485
506
|
* @param that - The divisor operand.
|
|
486
507
|
*
|
|
487
508
|
* @example
|
|
509
|
+
* ```ts
|
|
488
510
|
* import { BigDecimal, Option } from "effect"
|
|
489
511
|
*
|
|
490
512
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("3")), Option.some(BigDecimal.unsafeFromString("2")))
|
|
491
513
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("4")), Option.some(BigDecimal.unsafeFromString("1.5")))
|
|
492
514
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("0")), Option.none())
|
|
515
|
+
* ```
|
|
493
516
|
*
|
|
494
517
|
* @since 2.0.0
|
|
495
518
|
* @category math
|
|
@@ -507,11 +530,13 @@ export const divide: {
|
|
|
507
530
|
* @param that - The divisor operand.
|
|
508
531
|
*
|
|
509
532
|
* @example
|
|
533
|
+
* ```ts
|
|
510
534
|
* import { BigDecimal, Option } from "effect"
|
|
511
535
|
*
|
|
512
536
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("3")), Option.some(BigDecimal.unsafeFromString("2")))
|
|
513
537
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("4")), Option.some(BigDecimal.unsafeFromString("1.5")))
|
|
514
538
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("0")), Option.none())
|
|
539
|
+
* ```
|
|
515
540
|
*
|
|
516
541
|
* @since 2.0.0
|
|
517
542
|
* @category math
|
|
@@ -529,11 +554,13 @@ export const divide: {
|
|
|
529
554
|
* @param that - The divisor operand.
|
|
530
555
|
*
|
|
531
556
|
* @example
|
|
557
|
+
* ```ts
|
|
532
558
|
* import { BigDecimal, Option } from "effect"
|
|
533
559
|
*
|
|
534
560
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("3")), Option.some(BigDecimal.unsafeFromString("2")))
|
|
535
561
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("4")), Option.some(BigDecimal.unsafeFromString("1.5")))
|
|
536
562
|
* assert.deepStrictEqual(BigDecimal.divide(BigDecimal.unsafeFromString("6"), BigDecimal.unsafeFromString("0")), Option.none())
|
|
563
|
+
* ```
|
|
537
564
|
*
|
|
538
565
|
* @since 2.0.0
|
|
539
566
|
* @category math
|
|
@@ -568,10 +595,12 @@ export const divide: {
|
|
|
568
595
|
* @param that - The divisor operand.as
|
|
569
596
|
*
|
|
570
597
|
* @example
|
|
598
|
+
* ```ts
|
|
571
599
|
* import { unsafeDivide, unsafeFromString } from "effect/BigDecimal"
|
|
572
600
|
*
|
|
573
601
|
* assert.deepStrictEqual(unsafeDivide(unsafeFromString("6"), unsafeFromString("3")), unsafeFromString("2"))
|
|
574
602
|
* assert.deepStrictEqual(unsafeDivide(unsafeFromString("6"), unsafeFromString("4")), unsafeFromString("1.5"))
|
|
603
|
+
* ```
|
|
575
604
|
*
|
|
576
605
|
* @since 2.0.0
|
|
577
606
|
* @category math
|
|
@@ -589,10 +618,12 @@ export const unsafeDivide: {
|
|
|
589
618
|
* @param that - The divisor operand.as
|
|
590
619
|
*
|
|
591
620
|
* @example
|
|
621
|
+
* ```ts
|
|
592
622
|
* import { unsafeDivide, unsafeFromString } from "effect/BigDecimal"
|
|
593
623
|
*
|
|
594
624
|
* assert.deepStrictEqual(unsafeDivide(unsafeFromString("6"), unsafeFromString("3")), unsafeFromString("2"))
|
|
595
625
|
* assert.deepStrictEqual(unsafeDivide(unsafeFromString("6"), unsafeFromString("4")), unsafeFromString("1.5"))
|
|
626
|
+
* ```
|
|
596
627
|
*
|
|
597
628
|
* @since 2.0.0
|
|
598
629
|
* @category math
|
|
@@ -610,10 +641,12 @@ export const unsafeDivide: {
|
|
|
610
641
|
* @param that - The divisor operand.as
|
|
611
642
|
*
|
|
612
643
|
* @example
|
|
644
|
+
* ```ts
|
|
613
645
|
* import { unsafeDivide, unsafeFromString } from "effect/BigDecimal"
|
|
614
646
|
*
|
|
615
647
|
* assert.deepStrictEqual(unsafeDivide(unsafeFromString("6"), unsafeFromString("3")), unsafeFromString("2"))
|
|
616
648
|
* assert.deepStrictEqual(unsafeDivide(unsafeFromString("6"), unsafeFromString("4")), unsafeFromString("1.5"))
|
|
649
|
+
* ```
|
|
617
650
|
*
|
|
618
651
|
* @since 2.0.0
|
|
619
652
|
* @category math
|
|
@@ -663,11 +696,13 @@ export const Order: order.Order<BigDecimal> = order.make((self, that) => {
|
|
|
663
696
|
* @param that - The second argument.
|
|
664
697
|
*
|
|
665
698
|
* @example
|
|
699
|
+
* ```ts
|
|
666
700
|
* import { lessThan, unsafeFromString } from "effect/BigDecimal"
|
|
667
701
|
*
|
|
668
702
|
* assert.deepStrictEqual(lessThan(unsafeFromString("2"), unsafeFromString("3")), true)
|
|
669
703
|
* assert.deepStrictEqual(lessThan(unsafeFromString("3"), unsafeFromString("3")), false)
|
|
670
704
|
* assert.deepStrictEqual(lessThan(unsafeFromString("4"), unsafeFromString("3")), false)
|
|
705
|
+
* ```
|
|
671
706
|
*
|
|
672
707
|
* @since 2.0.0
|
|
673
708
|
* @category predicates
|
|
@@ -680,11 +715,13 @@ export const lessThan: {
|
|
|
680
715
|
* @param that - The second argument.
|
|
681
716
|
*
|
|
682
717
|
* @example
|
|
718
|
+
* ```ts
|
|
683
719
|
* import { lessThan, unsafeFromString } from "effect/BigDecimal"
|
|
684
720
|
*
|
|
685
721
|
* assert.deepStrictEqual(lessThan(unsafeFromString("2"), unsafeFromString("3")), true)
|
|
686
722
|
* assert.deepStrictEqual(lessThan(unsafeFromString("3"), unsafeFromString("3")), false)
|
|
687
723
|
* assert.deepStrictEqual(lessThan(unsafeFromString("4"), unsafeFromString("3")), false)
|
|
724
|
+
* ```
|
|
688
725
|
*
|
|
689
726
|
* @since 2.0.0
|
|
690
727
|
* @category predicates
|
|
@@ -697,11 +734,13 @@ export const lessThan: {
|
|
|
697
734
|
* @param that - The second argument.
|
|
698
735
|
*
|
|
699
736
|
* @example
|
|
737
|
+
* ```ts
|
|
700
738
|
* import { lessThan, unsafeFromString } from "effect/BigDecimal"
|
|
701
739
|
*
|
|
702
740
|
* assert.deepStrictEqual(lessThan(unsafeFromString("2"), unsafeFromString("3")), true)
|
|
703
741
|
* assert.deepStrictEqual(lessThan(unsafeFromString("3"), unsafeFromString("3")), false)
|
|
704
742
|
* assert.deepStrictEqual(lessThan(unsafeFromString("4"), unsafeFromString("3")), false)
|
|
743
|
+
* ```
|
|
705
744
|
*
|
|
706
745
|
* @since 2.0.0
|
|
707
746
|
* @category predicates
|
|
@@ -716,11 +755,13 @@ export const lessThan: {
|
|
|
716
755
|
* @param that - The second `BigDecimal` to compare with.
|
|
717
756
|
*
|
|
718
757
|
* @example
|
|
758
|
+
* ```ts
|
|
719
759
|
* import { lessThanOrEqualTo, unsafeFromString } from "effect/BigDecimal"
|
|
720
760
|
*
|
|
721
761
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("2"), unsafeFromString("3")), true)
|
|
722
762
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("3"), unsafeFromString("3")), true)
|
|
723
763
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("4"), unsafeFromString("3")), false)
|
|
764
|
+
* ```
|
|
724
765
|
*
|
|
725
766
|
* @since 2.0.0
|
|
726
767
|
* @category predicates
|
|
@@ -733,11 +774,13 @@ export const lessThanOrEqualTo: {
|
|
|
733
774
|
* @param that - The second `BigDecimal` to compare with.
|
|
734
775
|
*
|
|
735
776
|
* @example
|
|
777
|
+
* ```ts
|
|
736
778
|
* import { lessThanOrEqualTo, unsafeFromString } from "effect/BigDecimal"
|
|
737
779
|
*
|
|
738
780
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("2"), unsafeFromString("3")), true)
|
|
739
781
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("3"), unsafeFromString("3")), true)
|
|
740
782
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("4"), unsafeFromString("3")), false)
|
|
783
|
+
* ```
|
|
741
784
|
*
|
|
742
785
|
* @since 2.0.0
|
|
743
786
|
* @category predicates
|
|
@@ -750,11 +793,13 @@ export const lessThanOrEqualTo: {
|
|
|
750
793
|
* @param that - The second `BigDecimal` to compare with.
|
|
751
794
|
*
|
|
752
795
|
* @example
|
|
796
|
+
* ```ts
|
|
753
797
|
* import { lessThanOrEqualTo, unsafeFromString } from "effect/BigDecimal"
|
|
754
798
|
*
|
|
755
799
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("2"), unsafeFromString("3")), true)
|
|
756
800
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("3"), unsafeFromString("3")), true)
|
|
757
801
|
* assert.deepStrictEqual(lessThanOrEqualTo(unsafeFromString("4"), unsafeFromString("3")), false)
|
|
802
|
+
* ```
|
|
758
803
|
*
|
|
759
804
|
* @since 2.0.0
|
|
760
805
|
* @category predicates
|
|
@@ -769,11 +814,13 @@ export const lessThanOrEqualTo: {
|
|
|
769
814
|
* @param that - The second argument.
|
|
770
815
|
*
|
|
771
816
|
* @example
|
|
817
|
+
* ```ts
|
|
772
818
|
* import { greaterThan, unsafeFromString } from "effect/BigDecimal"
|
|
773
819
|
*
|
|
774
820
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("2"), unsafeFromString("3")), false)
|
|
775
821
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("3"), unsafeFromString("3")), false)
|
|
776
822
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("4"), unsafeFromString("3")), true)
|
|
823
|
+
* ```
|
|
777
824
|
*
|
|
778
825
|
* @since 2.0.0
|
|
779
826
|
* @category predicates
|
|
@@ -786,11 +833,13 @@ export const greaterThan: {
|
|
|
786
833
|
* @param that - The second argument.
|
|
787
834
|
*
|
|
788
835
|
* @example
|
|
836
|
+
* ```ts
|
|
789
837
|
* import { greaterThan, unsafeFromString } from "effect/BigDecimal"
|
|
790
838
|
*
|
|
791
839
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("2"), unsafeFromString("3")), false)
|
|
792
840
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("3"), unsafeFromString("3")), false)
|
|
793
841
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("4"), unsafeFromString("3")), true)
|
|
842
|
+
* ```
|
|
794
843
|
*
|
|
795
844
|
* @since 2.0.0
|
|
796
845
|
* @category predicates
|
|
@@ -803,11 +852,13 @@ export const greaterThan: {
|
|
|
803
852
|
* @param that - The second argument.
|
|
804
853
|
*
|
|
805
854
|
* @example
|
|
855
|
+
* ```ts
|
|
806
856
|
* import { greaterThan, unsafeFromString } from "effect/BigDecimal"
|
|
807
857
|
*
|
|
808
858
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("2"), unsafeFromString("3")), false)
|
|
809
859
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("3"), unsafeFromString("3")), false)
|
|
810
860
|
* assert.deepStrictEqual(greaterThan(unsafeFromString("4"), unsafeFromString("3")), true)
|
|
861
|
+
* ```
|
|
811
862
|
*
|
|
812
863
|
* @since 2.0.0
|
|
813
864
|
* @category predicates
|
|
@@ -822,11 +873,13 @@ export const greaterThan: {
|
|
|
822
873
|
* @param that - The second `BigDecimal` to compare with.
|
|
823
874
|
*
|
|
824
875
|
* @example
|
|
876
|
+
* ```ts
|
|
825
877
|
* import { greaterThanOrEqualTo, unsafeFromString } from "effect/BigDecimal"
|
|
826
878
|
*
|
|
827
879
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("2"), unsafeFromString("3")), false)
|
|
828
880
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("3"), unsafeFromString("3")), true)
|
|
829
881
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("4"), unsafeFromString("3")), true)
|
|
882
|
+
* ```
|
|
830
883
|
*
|
|
831
884
|
* @since 2.0.0
|
|
832
885
|
* @category predicates
|
|
@@ -839,11 +892,13 @@ export const greaterThanOrEqualTo: {
|
|
|
839
892
|
* @param that - The second `BigDecimal` to compare with.
|
|
840
893
|
*
|
|
841
894
|
* @example
|
|
895
|
+
* ```ts
|
|
842
896
|
* import { greaterThanOrEqualTo, unsafeFromString } from "effect/BigDecimal"
|
|
843
897
|
*
|
|
844
898
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("2"), unsafeFromString("3")), false)
|
|
845
899
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("3"), unsafeFromString("3")), true)
|
|
846
900
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("4"), unsafeFromString("3")), true)
|
|
901
|
+
* ```
|
|
847
902
|
*
|
|
848
903
|
* @since 2.0.0
|
|
849
904
|
* @category predicates
|
|
@@ -856,11 +911,13 @@ export const greaterThanOrEqualTo: {
|
|
|
856
911
|
* @param that - The second `BigDecimal` to compare with.
|
|
857
912
|
*
|
|
858
913
|
* @example
|
|
914
|
+
* ```ts
|
|
859
915
|
* import { greaterThanOrEqualTo, unsafeFromString } from "effect/BigDecimal"
|
|
860
916
|
*
|
|
861
917
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("2"), unsafeFromString("3")), false)
|
|
862
918
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("3"), unsafeFromString("3")), true)
|
|
863
919
|
* assert.deepStrictEqual(greaterThanOrEqualTo(unsafeFromString("4"), unsafeFromString("3")), true)
|
|
920
|
+
* ```
|
|
864
921
|
*
|
|
865
922
|
* @since 2.0.0
|
|
866
923
|
* @category predicates
|
|
@@ -876,6 +933,7 @@ export const greaterThanOrEqualTo: {
|
|
|
876
933
|
* @param maximum - The `maximum` value to check.
|
|
877
934
|
*
|
|
878
935
|
* @example
|
|
936
|
+
* ```ts
|
|
879
937
|
* import { BigDecimal } from "effect"
|
|
880
938
|
*
|
|
881
939
|
* const between = BigDecimal.between({
|
|
@@ -886,6 +944,7 @@ export const greaterThanOrEqualTo: {
|
|
|
886
944
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("3")), true)
|
|
887
945
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("0")), false)
|
|
888
946
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("6")), false)
|
|
947
|
+
* ```
|
|
889
948
|
*
|
|
890
949
|
* @since 2.0.0
|
|
891
950
|
* @category predicates
|
|
@@ -899,6 +958,7 @@ export const between: {
|
|
|
899
958
|
* @param maximum - The `maximum` value to check.
|
|
900
959
|
*
|
|
901
960
|
* @example
|
|
961
|
+
* ```ts
|
|
902
962
|
* import { BigDecimal } from "effect"
|
|
903
963
|
*
|
|
904
964
|
* const between = BigDecimal.between({
|
|
@@ -909,6 +969,7 @@ export const between: {
|
|
|
909
969
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("3")), true)
|
|
910
970
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("0")), false)
|
|
911
971
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("6")), false)
|
|
972
|
+
* ```
|
|
912
973
|
*
|
|
913
974
|
* @since 2.0.0
|
|
914
975
|
* @category predicates
|
|
@@ -927,6 +988,7 @@ export const between: {
|
|
|
927
988
|
* @param maximum - The `maximum` value to check.
|
|
928
989
|
*
|
|
929
990
|
* @example
|
|
991
|
+
* ```ts
|
|
930
992
|
* import { BigDecimal } from "effect"
|
|
931
993
|
*
|
|
932
994
|
* const between = BigDecimal.between({
|
|
@@ -937,6 +999,7 @@ export const between: {
|
|
|
937
999
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("3")), true)
|
|
938
1000
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("0")), false)
|
|
939
1001
|
* assert.deepStrictEqual(between(BigDecimal.unsafeFromString("6")), false)
|
|
1002
|
+
* ```
|
|
940
1003
|
*
|
|
941
1004
|
* @since 2.0.0
|
|
942
1005
|
* @category predicates
|
|
@@ -962,6 +1025,7 @@ export const between: {
|
|
|
962
1025
|
* @param maximum - The upper end of the range.
|
|
963
1026
|
*
|
|
964
1027
|
* @example
|
|
1028
|
+
* ```ts
|
|
965
1029
|
* import { BigDecimal } from "effect"
|
|
966
1030
|
*
|
|
967
1031
|
* const clamp = BigDecimal.clamp({
|
|
@@ -972,6 +1036,7 @@ export const between: {
|
|
|
972
1036
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("3")), BigDecimal.unsafeFromString("3"))
|
|
973
1037
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("0")), BigDecimal.unsafeFromString("1"))
|
|
974
1038
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("6")), BigDecimal.unsafeFromString("5"))
|
|
1039
|
+
* ```
|
|
975
1040
|
*
|
|
976
1041
|
* @since 2.0.0
|
|
977
1042
|
* @category math
|
|
@@ -989,6 +1054,7 @@ export const clamp: {
|
|
|
989
1054
|
* @param maximum - The upper end of the range.
|
|
990
1055
|
*
|
|
991
1056
|
* @example
|
|
1057
|
+
* ```ts
|
|
992
1058
|
* import { BigDecimal } from "effect"
|
|
993
1059
|
*
|
|
994
1060
|
* const clamp = BigDecimal.clamp({
|
|
@@ -999,6 +1065,7 @@ export const clamp: {
|
|
|
999
1065
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("3")), BigDecimal.unsafeFromString("3"))
|
|
1000
1066
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("0")), BigDecimal.unsafeFromString("1"))
|
|
1001
1067
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("6")), BigDecimal.unsafeFromString("5"))
|
|
1068
|
+
* ```
|
|
1002
1069
|
*
|
|
1003
1070
|
* @since 2.0.0
|
|
1004
1071
|
* @category math
|
|
@@ -1021,6 +1088,7 @@ export const clamp: {
|
|
|
1021
1088
|
* @param maximum - The upper end of the range.
|
|
1022
1089
|
*
|
|
1023
1090
|
* @example
|
|
1091
|
+
* ```ts
|
|
1024
1092
|
* import { BigDecimal } from "effect"
|
|
1025
1093
|
*
|
|
1026
1094
|
* const clamp = BigDecimal.clamp({
|
|
@@ -1031,6 +1099,7 @@ export const clamp: {
|
|
|
1031
1099
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("3")), BigDecimal.unsafeFromString("3"))
|
|
1032
1100
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("0")), BigDecimal.unsafeFromString("1"))
|
|
1033
1101
|
* assert.deepStrictEqual(clamp(BigDecimal.unsafeFromString("6")), BigDecimal.unsafeFromString("5"))
|
|
1102
|
+
* ```
|
|
1034
1103
|
*
|
|
1035
1104
|
* @since 2.0.0
|
|
1036
1105
|
* @category math
|
|
@@ -1051,9 +1120,11 @@ export const clamp: {
|
|
|
1051
1120
|
* @param that - The second `BigDecimal`.
|
|
1052
1121
|
*
|
|
1053
1122
|
* @example
|
|
1123
|
+
* ```ts
|
|
1054
1124
|
* import { min, unsafeFromString } from "effect/BigDecimal"
|
|
1055
1125
|
*
|
|
1056
1126
|
* assert.deepStrictEqual(min(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("2"))
|
|
1127
|
+
* ```
|
|
1057
1128
|
*
|
|
1058
1129
|
* @since 2.0.0
|
|
1059
1130
|
* @category math
|
|
@@ -1066,9 +1137,11 @@ export const min: {
|
|
|
1066
1137
|
* @param that - The second `BigDecimal`.
|
|
1067
1138
|
*
|
|
1068
1139
|
* @example
|
|
1140
|
+
* ```ts
|
|
1069
1141
|
* import { min, unsafeFromString } from "effect/BigDecimal"
|
|
1070
1142
|
*
|
|
1071
1143
|
* assert.deepStrictEqual(min(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("2"))
|
|
1144
|
+
* ```
|
|
1072
1145
|
*
|
|
1073
1146
|
* @since 2.0.0
|
|
1074
1147
|
* @category math
|
|
@@ -1081,9 +1154,11 @@ export const min: {
|
|
|
1081
1154
|
* @param that - The second `BigDecimal`.
|
|
1082
1155
|
*
|
|
1083
1156
|
* @example
|
|
1157
|
+
* ```ts
|
|
1084
1158
|
* import { min, unsafeFromString } from "effect/BigDecimal"
|
|
1085
1159
|
*
|
|
1086
1160
|
* assert.deepStrictEqual(min(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("2"))
|
|
1161
|
+
* ```
|
|
1087
1162
|
*
|
|
1088
1163
|
* @since 2.0.0
|
|
1089
1164
|
* @category math
|
|
@@ -1098,9 +1173,11 @@ export const min: {
|
|
|
1098
1173
|
* @param that - The second `BigDecimal`.
|
|
1099
1174
|
*
|
|
1100
1175
|
* @example
|
|
1176
|
+
* ```ts
|
|
1101
1177
|
* import { max, unsafeFromString } from "effect/BigDecimal"
|
|
1102
1178
|
*
|
|
1103
1179
|
* assert.deepStrictEqual(max(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("3"))
|
|
1180
|
+
* ```
|
|
1104
1181
|
*
|
|
1105
1182
|
* @since 2.0.0
|
|
1106
1183
|
* @category math
|
|
@@ -1113,9 +1190,11 @@ export const max: {
|
|
|
1113
1190
|
* @param that - The second `BigDecimal`.
|
|
1114
1191
|
*
|
|
1115
1192
|
* @example
|
|
1193
|
+
* ```ts
|
|
1116
1194
|
* import { max, unsafeFromString } from "effect/BigDecimal"
|
|
1117
1195
|
*
|
|
1118
1196
|
* assert.deepStrictEqual(max(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("3"))
|
|
1197
|
+
* ```
|
|
1119
1198
|
*
|
|
1120
1199
|
* @since 2.0.0
|
|
1121
1200
|
* @category math
|
|
@@ -1128,9 +1207,11 @@ export const max: {
|
|
|
1128
1207
|
* @param that - The second `BigDecimal`.
|
|
1129
1208
|
*
|
|
1130
1209
|
* @example
|
|
1210
|
+
* ```ts
|
|
1131
1211
|
* import { max, unsafeFromString } from "effect/BigDecimal"
|
|
1132
1212
|
*
|
|
1133
1213
|
* assert.deepStrictEqual(max(unsafeFromString("2"), unsafeFromString("3")), unsafeFromString("3"))
|
|
1214
|
+
* ```
|
|
1134
1215
|
*
|
|
1135
1216
|
* @since 2.0.0
|
|
1136
1217
|
* @category math
|
|
@@ -1144,11 +1225,13 @@ export const max: {
|
|
|
1144
1225
|
* @param n - The `BigDecimal` to determine the sign of.
|
|
1145
1226
|
*
|
|
1146
1227
|
* @example
|
|
1228
|
+
* ```ts
|
|
1147
1229
|
* import { sign, unsafeFromString } from "effect/BigDecimal"
|
|
1148
1230
|
*
|
|
1149
1231
|
* assert.deepStrictEqual(sign(unsafeFromString("-5")), -1)
|
|
1150
1232
|
* assert.deepStrictEqual(sign(unsafeFromString("0")), 0)
|
|
1151
1233
|
* assert.deepStrictEqual(sign(unsafeFromString("5")), 1)
|
|
1234
|
+
* ```
|
|
1152
1235
|
*
|
|
1153
1236
|
* @since 2.0.0
|
|
1154
1237
|
* @category math
|
|
@@ -1161,11 +1244,13 @@ export const sign = (n: BigDecimal): Ordering => n.value === bigint0 ? 0 : n.val
|
|
|
1161
1244
|
* @param n - The `BigDecimal` to determine the absolute value of.
|
|
1162
1245
|
*
|
|
1163
1246
|
* @example
|
|
1247
|
+
* ```ts
|
|
1164
1248
|
* import { abs, unsafeFromString } from "effect/BigDecimal"
|
|
1165
1249
|
*
|
|
1166
1250
|
* assert.deepStrictEqual(abs(unsafeFromString("-5")), unsafeFromString("5"))
|
|
1167
1251
|
* assert.deepStrictEqual(abs(unsafeFromString("0")), unsafeFromString("0"))
|
|
1168
1252
|
* assert.deepStrictEqual(abs(unsafeFromString("5")), unsafeFromString("5"))
|
|
1253
|
+
* ```
|
|
1169
1254
|
*
|
|
1170
1255
|
* @since 2.0.0
|
|
1171
1256
|
* @category math
|
|
@@ -1178,10 +1263,12 @@ export const abs = (n: BigDecimal): BigDecimal => n.value < bigint0 ? make(-n.va
|
|
|
1178
1263
|
* @param n - The `BigDecimal` to negate.
|
|
1179
1264
|
*
|
|
1180
1265
|
* @example
|
|
1266
|
+
* ```ts
|
|
1181
1267
|
* import { negate, unsafeFromString } from "effect/BigDecimal"
|
|
1182
1268
|
*
|
|
1183
1269
|
* assert.deepStrictEqual(negate(unsafeFromString("3")), unsafeFromString("-3"))
|
|
1184
1270
|
* assert.deepStrictEqual(negate(unsafeFromString("-6")), unsafeFromString("6"))
|
|
1271
|
+
* ```
|
|
1185
1272
|
*
|
|
1186
1273
|
* @since 2.0.0
|
|
1187
1274
|
* @category math
|
|
@@ -1197,11 +1284,13 @@ export const negate = (n: BigDecimal): BigDecimal => make(-n.value, n.scale)
|
|
|
1197
1284
|
* @param divisor - The divisor.
|
|
1198
1285
|
*
|
|
1199
1286
|
* @example
|
|
1287
|
+
* ```ts
|
|
1200
1288
|
* import { BigDecimal, Option } from "effect"
|
|
1201
1289
|
*
|
|
1202
1290
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("2"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("0")))
|
|
1203
1291
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("3"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("1")))
|
|
1204
1292
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("-4"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("0")))
|
|
1293
|
+
* ```
|
|
1205
1294
|
*
|
|
1206
1295
|
* @since 2.0.0
|
|
1207
1296
|
* @category math
|
|
@@ -1216,11 +1305,13 @@ export const remainder: {
|
|
|
1216
1305
|
* @param divisor - The divisor.
|
|
1217
1306
|
*
|
|
1218
1307
|
* @example
|
|
1308
|
+
* ```ts
|
|
1219
1309
|
* import { BigDecimal, Option } from "effect"
|
|
1220
1310
|
*
|
|
1221
1311
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("2"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("0")))
|
|
1222
1312
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("3"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("1")))
|
|
1223
1313
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("-4"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("0")))
|
|
1314
|
+
* ```
|
|
1224
1315
|
*
|
|
1225
1316
|
* @since 2.0.0
|
|
1226
1317
|
* @category math
|
|
@@ -1235,11 +1326,13 @@ export const remainder: {
|
|
|
1235
1326
|
* @param divisor - The divisor.
|
|
1236
1327
|
*
|
|
1237
1328
|
* @example
|
|
1329
|
+
* ```ts
|
|
1238
1330
|
* import { BigDecimal, Option } from "effect"
|
|
1239
1331
|
*
|
|
1240
1332
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("2"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("0")))
|
|
1241
1333
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("3"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("1")))
|
|
1242
1334
|
* assert.deepStrictEqual(BigDecimal.remainder(BigDecimal.unsafeFromString("-4"), BigDecimal.unsafeFromString("2")), Option.some(BigDecimal.unsafeFromString("0")))
|
|
1335
|
+
* ```
|
|
1243
1336
|
*
|
|
1244
1337
|
* @since 2.0.0
|
|
1245
1338
|
* @category math
|
|
@@ -1263,11 +1356,13 @@ export const remainder: {
|
|
|
1263
1356
|
* @param divisor - The divisor.
|
|
1264
1357
|
*
|
|
1265
1358
|
* @example
|
|
1359
|
+
* ```ts
|
|
1266
1360
|
* import { unsafeRemainder, unsafeFromString } from "effect/BigDecimal"
|
|
1267
1361
|
*
|
|
1268
1362
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("2"), unsafeFromString("2")), unsafeFromString("0"))
|
|
1269
1363
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("3"), unsafeFromString("2")), unsafeFromString("1"))
|
|
1270
1364
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("-4"), unsafeFromString("2")), unsafeFromString("0"))
|
|
1365
|
+
* ```
|
|
1271
1366
|
*
|
|
1272
1367
|
* @since 2.0.0
|
|
1273
1368
|
* @category math
|
|
@@ -1282,11 +1377,13 @@ export const unsafeRemainder: {
|
|
|
1282
1377
|
* @param divisor - The divisor.
|
|
1283
1378
|
*
|
|
1284
1379
|
* @example
|
|
1380
|
+
* ```ts
|
|
1285
1381
|
* import { unsafeRemainder, unsafeFromString } from "effect/BigDecimal"
|
|
1286
1382
|
*
|
|
1287
1383
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("2"), unsafeFromString("2")), unsafeFromString("0"))
|
|
1288
1384
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("3"), unsafeFromString("2")), unsafeFromString("1"))
|
|
1289
1385
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("-4"), unsafeFromString("2")), unsafeFromString("0"))
|
|
1386
|
+
* ```
|
|
1290
1387
|
*
|
|
1291
1388
|
* @since 2.0.0
|
|
1292
1389
|
* @category math
|
|
@@ -1301,11 +1398,13 @@ export const unsafeRemainder: {
|
|
|
1301
1398
|
* @param divisor - The divisor.
|
|
1302
1399
|
*
|
|
1303
1400
|
* @example
|
|
1401
|
+
* ```ts
|
|
1304
1402
|
* import { unsafeRemainder, unsafeFromString } from "effect/BigDecimal"
|
|
1305
1403
|
*
|
|
1306
1404
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("2"), unsafeFromString("2")), unsafeFromString("0"))
|
|
1307
1405
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("3"), unsafeFromString("2")), unsafeFromString("1"))
|
|
1308
1406
|
* assert.deepStrictEqual(unsafeRemainder(unsafeFromString("-4"), unsafeFromString("2")), unsafeFromString("0"))
|
|
1407
|
+
* ```
|
|
1309
1408
|
*
|
|
1310
1409
|
* @since 2.0.0
|
|
1311
1410
|
* @category math
|
|
@@ -1375,20 +1474,73 @@ export const fromBigInt = (n: bigint): BigDecimal => make(n, 0)
|
|
|
1375
1474
|
* It is not recommended to convert a floating point number to a decimal directly,
|
|
1376
1475
|
* as the floating point representation may be unexpected.
|
|
1377
1476
|
*
|
|
1477
|
+
* Throws a `RangeError` if the number is not finite (`NaN`, `+Infinity` or `-Infinity`).
|
|
1478
|
+
*
|
|
1378
1479
|
* @param value - The `number` value to create a `BigDecimal` from.
|
|
1379
1480
|
*
|
|
1380
1481
|
* @example
|
|
1482
|
+
* ```ts
|
|
1381
1483
|
* import { fromNumber, make } from "effect/BigDecimal"
|
|
1382
1484
|
*
|
|
1383
1485
|
* assert.deepStrictEqual(fromNumber(123), make(123n, 0))
|
|
1384
1486
|
* assert.deepStrictEqual(fromNumber(123.456), make(123456n, 3))
|
|
1487
|
+
* ```
|
|
1488
|
+
*
|
|
1489
|
+
* @since 3.11.0
|
|
1490
|
+
* @category constructors
|
|
1491
|
+
*/
|
|
1492
|
+
export const unsafeFromNumber = (n: number): BigDecimal =>
|
|
1493
|
+
Option.getOrThrowWith(safeFromNumber(n), () => new RangeError(`Number must be finite, got ${n}`))
|
|
1494
|
+
|
|
1495
|
+
/**
|
|
1496
|
+
* Creates a `BigDecimal` from a `number` value.
|
|
1497
|
+
*
|
|
1498
|
+
* It is not recommended to convert a floating point number to a decimal directly,
|
|
1499
|
+
* as the floating point representation may be unexpected.
|
|
1500
|
+
*
|
|
1501
|
+
* Throws a `RangeError` if the number is not finite (`NaN`, `+Infinity` or `-Infinity`).
|
|
1502
|
+
*
|
|
1503
|
+
* @param value - The `number` value to create a `BigDecimal` from.
|
|
1385
1504
|
*
|
|
1386
1505
|
* @since 2.0.0
|
|
1387
1506
|
* @category constructors
|
|
1507
|
+
* @deprecated Use {@link unsafeFromNumber} instead.
|
|
1388
1508
|
*/
|
|
1389
|
-
export const fromNumber
|
|
1390
|
-
|
|
1391
|
-
|
|
1509
|
+
export const fromNumber: (n: number) => BigDecimal = unsafeFromNumber
|
|
1510
|
+
|
|
1511
|
+
/**
|
|
1512
|
+
* Creates a `BigDecimal` from a `number` value.
|
|
1513
|
+
*
|
|
1514
|
+
* It is not recommended to convert a floating point number to a decimal directly,
|
|
1515
|
+
* as the floating point representation may be unexpected.
|
|
1516
|
+
*
|
|
1517
|
+
* Returns `None` if the number is not finite (`NaN`, `+Infinity` or `-Infinity`).
|
|
1518
|
+
*
|
|
1519
|
+
* @param n - The `number` value to create a `BigDecimal` from.
|
|
1520
|
+
*
|
|
1521
|
+
* @example
|
|
1522
|
+
* import { BigDecimal, Option } from "effect"
|
|
1523
|
+
*
|
|
1524
|
+
* assert.deepStrictEqual(BigDecimal.safeFromNumber(123), Option.some(BigDecimal.make(123n, 0)))
|
|
1525
|
+
* assert.deepStrictEqual(BigDecimal.safeFromNumber(123.456), Option.some(BigDecimal.make(123456n, 3)))
|
|
1526
|
+
* assert.deepStrictEqual(BigDecimal.safeFromNumber(Infinity), Option.none())
|
|
1527
|
+
*
|
|
1528
|
+
* @since 3.11.0
|
|
1529
|
+
* @category constructors
|
|
1530
|
+
*/
|
|
1531
|
+
export const safeFromNumber = (n: number): Option.Option<BigDecimal> => {
|
|
1532
|
+
// TODO: Rename this to `fromNumber` after removing the current, unsafe implementation of `fromNumber`.
|
|
1533
|
+
if (!Number.isFinite(n)) {
|
|
1534
|
+
return Option.none()
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
const string = `${n}`
|
|
1538
|
+
if (string.includes("e")) {
|
|
1539
|
+
return fromString(string)
|
|
1540
|
+
}
|
|
1541
|
+
|
|
1542
|
+
const [lead, trail = ""] = string.split(".")
|
|
1543
|
+
return Option.some(make(BigInt(`${lead}${trail}`), trail.length))
|
|
1392
1544
|
}
|
|
1393
1545
|
|
|
1394
1546
|
/**
|
|
@@ -1397,36 +1549,56 @@ export const fromNumber = (n: number): BigDecimal => {
|
|
|
1397
1549
|
* @param s - The `string` to parse.
|
|
1398
1550
|
*
|
|
1399
1551
|
* @example
|
|
1552
|
+
* ```ts
|
|
1400
1553
|
* import { BigDecimal, Option } from "effect"
|
|
1401
1554
|
*
|
|
1402
1555
|
* assert.deepStrictEqual(BigDecimal.fromString("123"), Option.some(BigDecimal.make(123n, 0)))
|
|
1403
1556
|
* assert.deepStrictEqual(BigDecimal.fromString("123.456"), Option.some(BigDecimal.make(123456n, 3)))
|
|
1404
1557
|
* assert.deepStrictEqual(BigDecimal.fromString("123.abc"), Option.none())
|
|
1558
|
+
* ```
|
|
1405
1559
|
*
|
|
1406
1560
|
* @since 2.0.0
|
|
1407
1561
|
* @category constructors
|
|
1408
1562
|
*/
|
|
1409
1563
|
export const fromString = (s: string): Option.Option<BigDecimal> => {
|
|
1410
|
-
|
|
1411
|
-
|
|
1564
|
+
if (s === "") {
|
|
1565
|
+
return Option.some(zero)
|
|
1566
|
+
}
|
|
1412
1567
|
|
|
1413
|
-
|
|
1568
|
+
let base: string
|
|
1569
|
+
let exp: number
|
|
1570
|
+
const seperator = s.search(/[eE]/)
|
|
1571
|
+
if (seperator !== -1) {
|
|
1572
|
+
const trail = s.slice(seperator + 1)
|
|
1573
|
+
base = s.slice(0, seperator)
|
|
1574
|
+
exp = Number(trail)
|
|
1575
|
+
if (base === "" || !Number.isSafeInteger(exp) || !FINITE_INT_REGEX.test(trail)) {
|
|
1576
|
+
return Option.none()
|
|
1577
|
+
}
|
|
1578
|
+
} else {
|
|
1579
|
+
base = s
|
|
1580
|
+
exp = 0
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
let digits: string
|
|
1584
|
+
let offset: number
|
|
1585
|
+
const dot = base.search(/\./)
|
|
1414
1586
|
if (dot !== -1) {
|
|
1415
|
-
const lead =
|
|
1416
|
-
const trail =
|
|
1587
|
+
const lead = base.slice(0, dot)
|
|
1588
|
+
const trail = base.slice(dot + 1)
|
|
1417
1589
|
digits = `${lead}${trail}`
|
|
1418
|
-
|
|
1590
|
+
offset = trail.length
|
|
1419
1591
|
} else {
|
|
1420
|
-
digits =
|
|
1421
|
-
|
|
1592
|
+
digits = base
|
|
1593
|
+
offset = 0
|
|
1422
1594
|
}
|
|
1423
1595
|
|
|
1424
|
-
if (digits
|
|
1425
|
-
|
|
1426
|
-
return Option.some(zero)
|
|
1596
|
+
if (!FINITE_INT_REGEX.test(digits)) {
|
|
1597
|
+
return Option.none()
|
|
1427
1598
|
}
|
|
1428
1599
|
|
|
1429
|
-
|
|
1600
|
+
const scale = offset - exp
|
|
1601
|
+
if (!Number.isSafeInteger(scale)) {
|
|
1430
1602
|
return Option.none()
|
|
1431
1603
|
}
|
|
1432
1604
|
|
|
@@ -1439,11 +1611,13 @@ export const fromString = (s: string): Option.Option<BigDecimal> => {
|
|
|
1439
1611
|
* @param s - The `string` to parse.
|
|
1440
1612
|
*
|
|
1441
1613
|
* @example
|
|
1614
|
+
* ```ts
|
|
1442
1615
|
* import { unsafeFromString, make } from "effect/BigDecimal"
|
|
1443
1616
|
*
|
|
1444
1617
|
* assert.deepStrictEqual(unsafeFromString("123"), make(123n, 0))
|
|
1445
1618
|
* assert.deepStrictEqual(unsafeFromString("123.456"), make(123456n, 3))
|
|
1446
1619
|
* assert.throws(() => unsafeFromString("123.abc"))
|
|
1620
|
+
* ```
|
|
1447
1621
|
*
|
|
1448
1622
|
* @since 2.0.0
|
|
1449
1623
|
* @category constructors
|
|
@@ -1454,30 +1628,40 @@ export const unsafeFromString = (s: string): BigDecimal =>
|
|
|
1454
1628
|
/**
|
|
1455
1629
|
* Formats a given `BigDecimal` as a `string`.
|
|
1456
1630
|
*
|
|
1457
|
-
*
|
|
1631
|
+
* If the scale of the `BigDecimal` is greater than or equal to 16, the `BigDecimal` will
|
|
1632
|
+
* be formatted in scientific notation.
|
|
1633
|
+
*
|
|
1634
|
+
* @param n - The `BigDecimal` to format.
|
|
1458
1635
|
*
|
|
1459
1636
|
* @example
|
|
1637
|
+
* ```ts
|
|
1460
1638
|
* import { format, unsafeFromString } from "effect/BigDecimal"
|
|
1461
1639
|
*
|
|
1462
1640
|
* assert.deepStrictEqual(format(unsafeFromString("-5")), "-5")
|
|
1463
1641
|
* assert.deepStrictEqual(format(unsafeFromString("123.456")), "123.456")
|
|
1464
1642
|
* assert.deepStrictEqual(format(unsafeFromString("-0.00000123")), "-0.00000123")
|
|
1643
|
+
* ```
|
|
1465
1644
|
*
|
|
1466
1645
|
* @since 2.0.0
|
|
1467
1646
|
* @category conversions
|
|
1468
1647
|
*/
|
|
1469
1648
|
export const format = (n: BigDecimal): string => {
|
|
1470
|
-
const
|
|
1471
|
-
|
|
1649
|
+
const normalized = normalize(n)
|
|
1650
|
+
if (Math.abs(normalized.scale) >= 16) {
|
|
1651
|
+
return toExponential(normalized)
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1654
|
+
const negative = normalized.value < bigint0
|
|
1655
|
+
const absolute = negative ? `${normalized.value}`.substring(1) : `${normalized.value}`
|
|
1472
1656
|
|
|
1473
1657
|
let before: string
|
|
1474
1658
|
let after: string
|
|
1475
1659
|
|
|
1476
|
-
if (
|
|
1660
|
+
if (normalized.scale >= absolute.length) {
|
|
1477
1661
|
before = "0"
|
|
1478
|
-
after = "0".repeat(
|
|
1662
|
+
after = "0".repeat(normalized.scale - absolute.length) + absolute
|
|
1479
1663
|
} else {
|
|
1480
|
-
const location = absolute.length -
|
|
1664
|
+
const location = absolute.length - normalized.scale
|
|
1481
1665
|
if (location > absolute.length) {
|
|
1482
1666
|
const zeros = location - absolute.length
|
|
1483
1667
|
before = `${absolute}${"0".repeat(zeros)}`
|
|
@@ -1492,6 +1676,38 @@ export const format = (n: BigDecimal): string => {
|
|
|
1492
1676
|
return negative ? `-${complete}` : complete
|
|
1493
1677
|
}
|
|
1494
1678
|
|
|
1679
|
+
/**
|
|
1680
|
+
* Formats a given `BigDecimal` as a `string` in scientific notation.
|
|
1681
|
+
*
|
|
1682
|
+
* @param n - The `BigDecimal` to format.
|
|
1683
|
+
*
|
|
1684
|
+
* @example
|
|
1685
|
+
* import { toExponential, make } from "effect/BigDecimal"
|
|
1686
|
+
*
|
|
1687
|
+
* assert.deepStrictEqual(toExponential(make(123456n, -5)), "1.23456e+10")
|
|
1688
|
+
*
|
|
1689
|
+
* @since 3.11.0
|
|
1690
|
+
* @category conversions
|
|
1691
|
+
*/
|
|
1692
|
+
export const toExponential = (n: BigDecimal): string => {
|
|
1693
|
+
if (isZero(n)) {
|
|
1694
|
+
return "0e+0"
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
const normalized = normalize(n)
|
|
1698
|
+
const digits = `${abs(normalized).value}`
|
|
1699
|
+
const head = digits.slice(0, 1)
|
|
1700
|
+
const tail = digits.slice(1)
|
|
1701
|
+
|
|
1702
|
+
let output = `${isNegative(normalized) ? "-" : ""}${head}`
|
|
1703
|
+
if (tail !== "") {
|
|
1704
|
+
output += `.${tail}`
|
|
1705
|
+
}
|
|
1706
|
+
|
|
1707
|
+
const exp = tail.length - normalized.scale
|
|
1708
|
+
return `${output}e${exp >= 0 ? "+" : ""}${exp}`
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1495
1711
|
/**
|
|
1496
1712
|
* Converts a `BigDecimal` to a `number`.
|
|
1497
1713
|
*
|
|
@@ -1500,9 +1716,11 @@ export const format = (n: BigDecimal): string => {
|
|
|
1500
1716
|
* @param n - The `BigDecimal` to convert.
|
|
1501
1717
|
*
|
|
1502
1718
|
* @example
|
|
1719
|
+
* ```ts
|
|
1503
1720
|
* import { unsafeToNumber, unsafeFromString } from "effect/BigDecimal"
|
|
1504
1721
|
*
|
|
1505
1722
|
* assert.deepStrictEqual(unsafeToNumber(unsafeFromString("123.456")), 123.456)
|
|
1723
|
+
* ```
|
|
1506
1724
|
*
|
|
1507
1725
|
* @since 2.0.0
|
|
1508
1726
|
* @category conversions
|
|
@@ -1515,11 +1733,13 @@ export const unsafeToNumber = (n: BigDecimal): number => Number(format(n))
|
|
|
1515
1733
|
* @param n - The `BigDecimal` to check.
|
|
1516
1734
|
*
|
|
1517
1735
|
* @example
|
|
1736
|
+
* ```ts
|
|
1518
1737
|
* import { isInteger, unsafeFromString } from "effect/BigDecimal"
|
|
1519
1738
|
*
|
|
1520
1739
|
* assert.deepStrictEqual(isInteger(unsafeFromString("0")), true)
|
|
1521
1740
|
* assert.deepStrictEqual(isInteger(unsafeFromString("1")), true)
|
|
1522
1741
|
* assert.deepStrictEqual(isInteger(unsafeFromString("1.1")), false)
|
|
1742
|
+
* ```
|
|
1523
1743
|
*
|
|
1524
1744
|
* @since 2.0.0
|
|
1525
1745
|
* @category predicates
|
|
@@ -1532,10 +1752,12 @@ export const isInteger = (n: BigDecimal): boolean => normalize(n).scale <= 0
|
|
|
1532
1752
|
* @param n - The `BigDecimal` to check.
|
|
1533
1753
|
*
|
|
1534
1754
|
* @example
|
|
1755
|
+
* ```ts
|
|
1535
1756
|
* import { isZero, unsafeFromString } from "effect/BigDecimal"
|
|
1536
1757
|
*
|
|
1537
1758
|
* assert.deepStrictEqual(isZero(unsafeFromString("0")), true)
|
|
1538
1759
|
* assert.deepStrictEqual(isZero(unsafeFromString("1")), false)
|
|
1760
|
+
* ```
|
|
1539
1761
|
*
|
|
1540
1762
|
* @since 2.0.0
|
|
1541
1763
|
* @category predicates
|
|
@@ -1548,11 +1770,13 @@ export const isZero = (n: BigDecimal): boolean => n.value === bigint0
|
|
|
1548
1770
|
* @param n - The `BigDecimal` to check.
|
|
1549
1771
|
*
|
|
1550
1772
|
* @example
|
|
1773
|
+
* ```ts
|
|
1551
1774
|
* import { isNegative, unsafeFromString } from "effect/BigDecimal"
|
|
1552
1775
|
*
|
|
1553
1776
|
* assert.deepStrictEqual(isNegative(unsafeFromString("-1")), true)
|
|
1554
1777
|
* assert.deepStrictEqual(isNegative(unsafeFromString("0")), false)
|
|
1555
1778
|
* assert.deepStrictEqual(isNegative(unsafeFromString("1")), false)
|
|
1779
|
+
* ```
|
|
1556
1780
|
*
|
|
1557
1781
|
* @since 2.0.0
|
|
1558
1782
|
* @category predicates
|
|
@@ -1565,11 +1789,13 @@ export const isNegative = (n: BigDecimal): boolean => n.value < bigint0
|
|
|
1565
1789
|
* @param n - The `BigDecimal` to check.
|
|
1566
1790
|
*
|
|
1567
1791
|
* @example
|
|
1792
|
+
* ```ts
|
|
1568
1793
|
* import { isPositive, unsafeFromString } from "effect/BigDecimal"
|
|
1569
1794
|
*
|
|
1570
1795
|
* assert.deepStrictEqual(isPositive(unsafeFromString("-1")), false)
|
|
1571
1796
|
* assert.deepStrictEqual(isPositive(unsafeFromString("0")), false)
|
|
1572
1797
|
* assert.deepStrictEqual(isPositive(unsafeFromString("1")), true)
|
|
1798
|
+
* ```
|
|
1573
1799
|
*
|
|
1574
1800
|
* @since 2.0.0
|
|
1575
1801
|
* @category predicates
|