@clayroach/effect 3.19.14-source-capture.7 → 3.19.14-source-capture.8
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/Utils.js +1 -1
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/internal/clock.js +1 -1
- package/dist/cjs/internal/clock.js.map +1 -1
- package/dist/esm/Utils.js +1 -1
- package/dist/esm/Utils.js.map +1 -1
- package/dist/esm/internal/clock.js +1 -1
- package/dist/esm/internal/clock.js.map +1 -1
- package/package.json +1 -1
- package/src/Arbitrary.ts +0 -1101
- package/src/Array.ts +0 -3589
- package/src/BigDecimal.ts +0 -1349
- package/src/BigInt.ts +0 -643
- package/src/Boolean.ts +0 -287
- package/src/Brand.ts +0 -360
- package/src/Cache.ts +0 -281
- package/src/Cause.ts +0 -1555
- package/src/Channel.ts +0 -2355
- package/src/ChildExecutorDecision.ts +0 -146
- package/src/Chunk.ts +0 -1495
- package/src/Clock.ts +0 -111
- package/src/Config.ts +0 -542
- package/src/ConfigError.ts +0 -270
- package/src/ConfigProvider.ts +0 -333
- package/src/ConfigProviderPathPatch.ts +0 -100
- package/src/Console.ts +0 -226
- package/src/Context.ts +0 -585
- package/src/Cron.ts +0 -706
- package/src/Data.ts +0 -596
- package/src/DateTime.ts +0 -1686
- package/src/DefaultServices.ts +0 -34
- package/src/Deferred.ts +0 -301
- package/src/Differ.ts +0 -450
- package/src/Duration.ts +0 -1000
- package/src/Effect.ts +0 -14839
- package/src/Effectable.ts +0 -107
- package/src/Either.ts +0 -1040
- package/src/Encoding.ts +0 -195
- package/src/Equal.ts +0 -98
- package/src/Equivalence.ts +0 -235
- package/src/ExecutionPlan.ts +0 -308
- package/src/ExecutionStrategy.ts +0 -119
- package/src/Exit.ts +0 -467
- package/src/FastCheck.ts +0 -9
- package/src/Fiber.ts +0 -744
- package/src/FiberHandle.ts +0 -540
- package/src/FiberId.ts +0 -195
- package/src/FiberMap.ts +0 -656
- package/src/FiberRef.ts +0 -431
- package/src/FiberRefs.ts +0 -204
- package/src/FiberRefsPatch.ts +0 -105
- package/src/FiberSet.ts +0 -491
- package/src/FiberStatus.ts +0 -108
- package/src/Function.ts +0 -1222
- package/src/GlobalValue.ts +0 -53
- package/src/Graph.ts +0 -3732
- package/src/GroupBy.ts +0 -103
- package/src/HKT.ts +0 -45
- package/src/Hash.ts +0 -195
- package/src/HashMap.ts +0 -519
- package/src/HashRing.ts +0 -317
- package/src/HashSet.ts +0 -2346
- package/src/Inspectable.ts +0 -287
- package/src/Iterable.ts +0 -1119
- package/src/JSONSchema.ts +0 -1044
- package/src/KeyedPool.ts +0 -167
- package/src/Layer.ts +0 -1251
- package/src/LayerMap.ts +0 -436
- package/src/List.ts +0 -977
- package/src/LogLevel.ts +0 -285
- package/src/LogSpan.ts +0 -25
- package/src/Logger.ts +0 -702
- package/src/Mailbox.ts +0 -268
- package/src/ManagedRuntime.ts +0 -180
- package/src/Match.ts +0 -1477
- package/src/MergeDecision.ts +0 -95
- package/src/MergeState.ts +0 -172
- package/src/MergeStrategy.ts +0 -107
- package/src/Metric.ts +0 -780
- package/src/MetricBoundaries.ts +0 -69
- package/src/MetricHook.ts +0 -151
- package/src/MetricKey.ts +0 -224
- package/src/MetricKeyType.ts +0 -262
- package/src/MetricLabel.ts +0 -47
- package/src/MetricPair.ts +0 -71
- package/src/MetricPolling.ts +0 -148
- package/src/MetricRegistry.ts +0 -48
- package/src/MetricState.ts +0 -257
- package/src/Micro.ts +0 -4405
- package/src/ModuleVersion.ts +0 -18
- package/src/MutableHashMap.ts +0 -411
- package/src/MutableHashSet.ts +0 -706
- package/src/MutableList.ts +0 -297
- package/src/MutableQueue.ts +0 -227
- package/src/MutableRef.ts +0 -202
- package/src/NonEmptyIterable.ts +0 -32
- package/src/Number.ts +0 -1071
- package/src/Option.ts +0 -2170
- package/src/Order.ts +0 -373
- package/src/Ordering.ts +0 -111
- package/src/ParseResult.ts +0 -2031
- package/src/PartitionedSemaphore.ts +0 -200
- package/src/Pipeable.ts +0 -566
- package/src/Pool.ts +0 -204
- package/src/Predicate.ts +0 -1405
- package/src/Pretty.ts +0 -205
- package/src/PrimaryKey.ts +0 -23
- package/src/PubSub.ts +0 -182
- package/src/Queue.ts +0 -644
- package/src/Random.ts +0 -204
- package/src/RateLimiter.ts +0 -138
- package/src/RcMap.ts +0 -141
- package/src/RcRef.ts +0 -122
- package/src/Readable.ts +0 -93
- package/src/Record.ts +0 -1274
- package/src/RedBlackTree.ts +0 -421
- package/src/Redacted.ts +0 -144
- package/src/Ref.ts +0 -180
- package/src/RegExp.ts +0 -38
- package/src/Reloadable.ts +0 -127
- package/src/Request.ts +0 -347
- package/src/RequestBlock.ts +0 -118
- package/src/RequestResolver.ts +0 -366
- package/src/Resource.ts +0 -119
- package/src/Runtime.ts +0 -383
- package/src/RuntimeFlags.ts +0 -368
- package/src/RuntimeFlagsPatch.ts +0 -183
- package/src/STM.ts +0 -2045
- package/src/Schedule.ts +0 -2219
- package/src/ScheduleDecision.ts +0 -62
- package/src/ScheduleInterval.ts +0 -151
- package/src/ScheduleIntervals.ts +0 -122
- package/src/Scheduler.ts +0 -353
- package/src/Schema.ts +0 -10914
- package/src/SchemaAST.ts +0 -3043
- package/src/Scope.ts +0 -204
- package/src/ScopedCache.ts +0 -151
- package/src/ScopedRef.ts +0 -117
- package/src/Secret.ts +0 -88
- package/src/SingleProducerAsyncInput.ts +0 -67
- package/src/Sink.ts +0 -1461
- package/src/SortedMap.ts +0 -287
- package/src/SortedSet.ts +0 -390
- package/src/Stream.ts +0 -6468
- package/src/StreamEmit.ts +0 -136
- package/src/StreamHaltStrategy.ts +0 -123
- package/src/Streamable.ts +0 -45
- package/src/String.ts +0 -778
- package/src/Struct.ts +0 -243
- package/src/Subscribable.ts +0 -100
- package/src/SubscriptionRef.ts +0 -298
- package/src/Supervisor.ts +0 -240
- package/src/Symbol.ts +0 -29
- package/src/SynchronizedRef.ts +0 -270
- package/src/TArray.ts +0 -495
- package/src/TDeferred.ts +0 -100
- package/src/TMap.ts +0 -515
- package/src/TPriorityQueue.ts +0 -223
- package/src/TPubSub.ts +0 -200
- package/src/TQueue.ts +0 -432
- package/src/TRandom.ts +0 -129
- package/src/TReentrantLock.ts +0 -224
- package/src/TRef.ts +0 -178
- package/src/TSemaphore.ts +0 -129
- package/src/TSet.ts +0 -365
- package/src/TSubscriptionRef.ts +0 -192
- package/src/Take.ts +0 -258
- package/src/TestAnnotation.ts +0 -158
- package/src/TestAnnotationMap.ts +0 -119
- package/src/TestAnnotations.ts +0 -117
- package/src/TestClock.ts +0 -556
- package/src/TestConfig.ts +0 -47
- package/src/TestContext.ts +0 -36
- package/src/TestLive.ts +0 -53
- package/src/TestServices.ts +0 -390
- package/src/TestSized.ts +0 -55
- package/src/Tracer.ts +0 -198
- package/src/Trie.ts +0 -840
- package/src/Tuple.ts +0 -305
- package/src/Types.ts +0 -353
- package/src/Unify.ts +0 -113
- package/src/UpstreamPullRequest.ts +0 -117
- package/src/UpstreamPullStrategy.ts +0 -121
- package/src/Utils.ts +0 -809
- package/src/index.ts +0 -1561
- package/src/internal/array.ts +0 -8
- package/src/internal/blockedRequests.ts +0 -520
- package/src/internal/cache.ts +0 -733
- package/src/internal/cause.ts +0 -1050
- package/src/internal/channel/channelExecutor.ts +0 -1200
- package/src/internal/channel/channelState.ts +0 -134
- package/src/internal/channel/childExecutorDecision.ts +0 -96
- package/src/internal/channel/continuation.ts +0 -200
- package/src/internal/channel/mergeDecision.ts +0 -113
- package/src/internal/channel/mergeState.ts +0 -120
- package/src/internal/channel/mergeStrategy.ts +0 -72
- package/src/internal/channel/singleProducerAsyncInput.ts +0 -259
- package/src/internal/channel/subexecutor.ts +0 -229
- package/src/internal/channel/upstreamPullRequest.ts +0 -84
- package/src/internal/channel/upstreamPullStrategy.ts +0 -87
- package/src/internal/channel.ts +0 -2603
- package/src/internal/clock.ts +0 -95
- package/src/internal/completedRequestMap.ts +0 -9
- package/src/internal/concurrency.ts +0 -54
- package/src/internal/config.ts +0 -716
- package/src/internal/configError.ts +0 -304
- package/src/internal/configProvider/pathPatch.ts +0 -97
- package/src/internal/configProvider.ts +0 -799
- package/src/internal/console.ts +0 -153
- package/src/internal/context.ts +0 -337
- package/src/internal/core-effect.ts +0 -2293
- package/src/internal/core-stream.ts +0 -998
- package/src/internal/core.ts +0 -3273
- package/src/internal/data.ts +0 -36
- package/src/internal/dataSource.ts +0 -327
- package/src/internal/dateTime.ts +0 -1277
- package/src/internal/defaultServices/console.ts +0 -100
- package/src/internal/defaultServices.ts +0 -163
- package/src/internal/deferred.ts +0 -46
- package/src/internal/differ/chunkPatch.ts +0 -211
- package/src/internal/differ/contextPatch.ts +0 -232
- package/src/internal/differ/hashMapPatch.ts +0 -220
- package/src/internal/differ/hashSetPatch.ts +0 -176
- package/src/internal/differ/orPatch.ts +0 -311
- package/src/internal/differ/readonlyArrayPatch.ts +0 -210
- package/src/internal/differ.ts +0 -200
- package/src/internal/doNotation.ts +0 -80
- package/src/internal/effect/circular.ts +0 -905
- package/src/internal/effectable.ts +0 -131
- package/src/internal/either.ts +0 -110
- package/src/internal/encoding/base64.ts +0 -286
- package/src/internal/encoding/base64Url.ts +0 -29
- package/src/internal/encoding/common.ts +0 -51
- package/src/internal/encoding/hex.ts +0 -315
- package/src/internal/errors.ts +0 -7
- package/src/internal/executionPlan.ts +0 -114
- package/src/internal/executionStrategy.ts +0 -74
- package/src/internal/fiber.ts +0 -388
- package/src/internal/fiberId.ts +0 -267
- package/src/internal/fiberMessage.ts +0 -82
- package/src/internal/fiberRefs/patch.ts +0 -144
- package/src/internal/fiberRefs.ts +0 -297
- package/src/internal/fiberRuntime.ts +0 -3915
- package/src/internal/fiberScope.ts +0 -71
- package/src/internal/fiberStatus.ts +0 -119
- package/src/internal/groupBy.ts +0 -530
- package/src/internal/hashMap/array.ts +0 -49
- package/src/internal/hashMap/bitwise.ts +0 -32
- package/src/internal/hashMap/config.ts +0 -14
- package/src/internal/hashMap/keySet.ts +0 -8
- package/src/internal/hashMap/node.ts +0 -391
- package/src/internal/hashMap.ts +0 -586
- package/src/internal/hashSet.ts +0 -323
- package/src/internal/keyedPool.ts +0 -244
- package/src/internal/layer/circular.ts +0 -228
- package/src/internal/layer.ts +0 -1487
- package/src/internal/logSpan.ts +0 -20
- package/src/internal/logger-circular.ts +0 -24
- package/src/internal/logger.ts +0 -485
- package/src/internal/mailbox.ts +0 -561
- package/src/internal/managedRuntime/circular.ts +0 -6
- package/src/internal/managedRuntime.ts +0 -134
- package/src/internal/matcher.ts +0 -652
- package/src/internal/metric/boundaries.ts +0 -75
- package/src/internal/metric/hook.ts +0 -483
- package/src/internal/metric/key.ts +0 -167
- package/src/internal/metric/keyType.ts +0 -238
- package/src/internal/metric/label.ts +0 -41
- package/src/internal/metric/pair.ts +0 -48
- package/src/internal/metric/polling.ts +0 -149
- package/src/internal/metric/registry.ts +0 -187
- package/src/internal/metric/state.ts +0 -290
- package/src/internal/metric.ts +0 -577
- package/src/internal/opCodes/cause.ts +0 -35
- package/src/internal/opCodes/channel.ts +0 -83
- package/src/internal/opCodes/channelChildExecutorDecision.ts +0 -17
- package/src/internal/opCodes/channelMergeDecision.ts +0 -11
- package/src/internal/opCodes/channelMergeState.ts +0 -17
- package/src/internal/opCodes/channelMergeStrategy.ts +0 -11
- package/src/internal/opCodes/channelState.ts +0 -23
- package/src/internal/opCodes/channelUpstreamPullRequest.ts +0 -11
- package/src/internal/opCodes/channelUpstreamPullStrategy.ts +0 -11
- package/src/internal/opCodes/config.ts +0 -65
- package/src/internal/opCodes/configError.ts +0 -35
- package/src/internal/opCodes/continuation.ts +0 -11
- package/src/internal/opCodes/deferred.ts +0 -11
- package/src/internal/opCodes/effect.ts +0 -89
- package/src/internal/opCodes/layer.ts +0 -59
- package/src/internal/opCodes/streamHaltStrategy.ts +0 -23
- package/src/internal/option.ts +0 -80
- package/src/internal/pool.ts +0 -432
- package/src/internal/pubsub.ts +0 -1762
- package/src/internal/query.ts +0 -204
- package/src/internal/queue.ts +0 -766
- package/src/internal/random.ts +0 -161
- package/src/internal/rateLimiter.ts +0 -93
- package/src/internal/rcMap.ts +0 -285
- package/src/internal/rcRef.ts +0 -192
- package/src/internal/redBlackTree/iterator.ts +0 -200
- package/src/internal/redBlackTree/node.ts +0 -68
- package/src/internal/redBlackTree.ts +0 -1245
- package/src/internal/redacted.ts +0 -73
- package/src/internal/ref.ts +0 -171
- package/src/internal/reloadable.ts +0 -140
- package/src/internal/request.ts +0 -177
- package/src/internal/resource.ts +0 -76
- package/src/internal/ringBuffer.ts +0 -68
- package/src/internal/runtime.ts +0 -558
- package/src/internal/runtimeFlags.ts +0 -188
- package/src/internal/runtimeFlagsPatch.ts +0 -103
- package/src/internal/schedule/decision.ts +0 -47
- package/src/internal/schedule/interval.ts +0 -101
- package/src/internal/schedule/intervals.ts +0 -180
- package/src/internal/schedule.ts +0 -2199
- package/src/internal/schema/errors.ts +0 -191
- package/src/internal/schema/schemaId.ts +0 -106
- package/src/internal/schema/util.ts +0 -50
- package/src/internal/scopedCache.ts +0 -644
- package/src/internal/scopedRef.ts +0 -118
- package/src/internal/secret.ts +0 -89
- package/src/internal/singleShotGen.ts +0 -35
- package/src/internal/sink.ts +0 -2120
- package/src/internal/stack.ts +0 -10
- package/src/internal/stm/core.ts +0 -817
- package/src/internal/stm/entry.ts +0 -59
- package/src/internal/stm/journal.ts +0 -123
- package/src/internal/stm/opCodes/stm.ts +0 -71
- package/src/internal/stm/opCodes/stmState.ts +0 -17
- package/src/internal/stm/opCodes/strategy.ts +0 -17
- package/src/internal/stm/opCodes/tExit.ts +0 -29
- package/src/internal/stm/opCodes/tryCommit.ts +0 -11
- package/src/internal/stm/stm.ts +0 -1453
- package/src/internal/stm/stmState.ts +0 -136
- package/src/internal/stm/tArray.ts +0 -550
- package/src/internal/stm/tDeferred.ts +0 -81
- package/src/internal/stm/tExit.ts +0 -190
- package/src/internal/stm/tMap.ts +0 -824
- package/src/internal/stm/tPriorityQueue.ts +0 -267
- package/src/internal/stm/tPubSub.ts +0 -551
- package/src/internal/stm/tQueue.ts +0 -393
- package/src/internal/stm/tRandom.ts +0 -140
- package/src/internal/stm/tReentrantLock.ts +0 -352
- package/src/internal/stm/tRef.ts +0 -195
- package/src/internal/stm/tSemaphore.ts +0 -113
- package/src/internal/stm/tSet.ts +0 -259
- package/src/internal/stm/tSubscriptionRef.ts +0 -286
- package/src/internal/stm/tryCommit.ts +0 -34
- package/src/internal/stm/txnId.ts +0 -14
- package/src/internal/stm/versioned.ts +0 -4
- package/src/internal/stream/debounceState.ts +0 -57
- package/src/internal/stream/emit.ts +0 -123
- package/src/internal/stream/haltStrategy.ts +0 -94
- package/src/internal/stream/handoff.ts +0 -187
- package/src/internal/stream/handoffSignal.ts +0 -59
- package/src/internal/stream/pull.ts +0 -34
- package/src/internal/stream/sinkEndReason.ts +0 -30
- package/src/internal/stream/zipAllState.ts +0 -88
- package/src/internal/stream/zipChunksState.ts +0 -56
- package/src/internal/stream.ts +0 -8801
- package/src/internal/string-utils.ts +0 -107
- package/src/internal/subscriptionRef.ts +0 -138
- package/src/internal/supervisor/patch.ts +0 -190
- package/src/internal/supervisor.ts +0 -303
- package/src/internal/synchronizedRef.ts +0 -114
- package/src/internal/take.ts +0 -199
- package/src/internal/testing/sleep.ts +0 -27
- package/src/internal/testing/suspendedWarningData.ts +0 -85
- package/src/internal/testing/warningData.ts +0 -94
- package/src/internal/tracer.ts +0 -293
- package/src/internal/trie.ts +0 -722
- package/src/internal/version.ts +0 -7
package/src/BigInt.ts
DELETED
|
@@ -1,643 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This module provides utility functions and type class instances for working with the `bigint` type in TypeScript.
|
|
3
|
-
* It includes functions for basic arithmetic operations, as well as type class instances for
|
|
4
|
-
* `Equivalence` and `Order`.
|
|
5
|
-
*
|
|
6
|
-
* @module BigInt
|
|
7
|
-
* @since 2.0.0
|
|
8
|
-
* @see {@link module:BigDecimal} for more similar operations on `BigDecimal` types
|
|
9
|
-
* @see {@link module:Number} for more similar operations on `number` types
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import * as equivalence from "./Equivalence.js"
|
|
13
|
-
import { dual } from "./Function.js"
|
|
14
|
-
import * as Option from "./Option.js"
|
|
15
|
-
import * as order from "./Order.js"
|
|
16
|
-
import type { Ordering } from "./Ordering.js"
|
|
17
|
-
import * as predicate from "./Predicate.js"
|
|
18
|
-
|
|
19
|
-
const bigint0 = BigInt(0)
|
|
20
|
-
const bigint1 = BigInt(1)
|
|
21
|
-
const bigint2 = BigInt(2)
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Tests if a value is a `bigint`.
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```ts
|
|
28
|
-
* import * as assert from "node:assert"
|
|
29
|
-
* import { isBigInt } from "effect/BigInt"
|
|
30
|
-
*
|
|
31
|
-
* assert.deepStrictEqual(isBigInt(1n), true)
|
|
32
|
-
* assert.deepStrictEqual(isBigInt(1), false)
|
|
33
|
-
* ```
|
|
34
|
-
*
|
|
35
|
-
* @category guards
|
|
36
|
-
* @since 2.0.0
|
|
37
|
-
*/
|
|
38
|
-
export const isBigInt: (u: unknown) => u is bigint = predicate.isBigInt
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Provides an addition operation on `bigint`s.
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```ts
|
|
45
|
-
* import * as assert from "node:assert"
|
|
46
|
-
* import { sum } from "effect/BigInt"
|
|
47
|
-
*
|
|
48
|
-
* assert.deepStrictEqual(sum(2n, 3n), 5n)
|
|
49
|
-
* ```
|
|
50
|
-
*
|
|
51
|
-
* @category math
|
|
52
|
-
* @since 2.0.0
|
|
53
|
-
*/
|
|
54
|
-
export const sum: {
|
|
55
|
-
(that: bigint): (self: bigint) => bigint
|
|
56
|
-
(self: bigint, that: bigint): bigint
|
|
57
|
-
} = dual(2, (self: bigint, that: bigint): bigint => self + that)
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Provides a multiplication operation on `bigint`s.
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```ts
|
|
64
|
-
* import * as assert from "node:assert"
|
|
65
|
-
* import { multiply } from "effect/BigInt"
|
|
66
|
-
*
|
|
67
|
-
* assert.deepStrictEqual(multiply(2n, 3n), 6n)
|
|
68
|
-
* ```
|
|
69
|
-
*
|
|
70
|
-
* @category math
|
|
71
|
-
* @since 2.0.0
|
|
72
|
-
*/
|
|
73
|
-
export const multiply: {
|
|
74
|
-
(that: bigint): (self: bigint) => bigint
|
|
75
|
-
(self: bigint, that: bigint): bigint
|
|
76
|
-
} = dual(2, (self: bigint, that: bigint): bigint => self * that)
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Provides a subtraction operation on `bigint`s.
|
|
80
|
-
*
|
|
81
|
-
* @example
|
|
82
|
-
* ```ts
|
|
83
|
-
* import * as assert from "node:assert"
|
|
84
|
-
* import { subtract } from "effect/BigInt"
|
|
85
|
-
*
|
|
86
|
-
* assert.deepStrictEqual(subtract(2n, 3n), -1n)
|
|
87
|
-
* ```
|
|
88
|
-
*
|
|
89
|
-
* @category math
|
|
90
|
-
* @since 2.0.0
|
|
91
|
-
*/
|
|
92
|
-
export const subtract: {
|
|
93
|
-
(that: bigint): (self: bigint) => bigint
|
|
94
|
-
(self: bigint, that: bigint): bigint
|
|
95
|
-
} = dual(2, (self: bigint, that: bigint): bigint => self - that)
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Provides a division operation on `bigint`s.
|
|
99
|
-
*
|
|
100
|
-
* If the dividend is not a multiple of the divisor the result will be a `bigint` value
|
|
101
|
-
* which represents the integer division rounded down to the nearest integer.
|
|
102
|
-
*
|
|
103
|
-
* Returns `None` if the divisor is `0n`.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```ts
|
|
107
|
-
* import * as assert from "node:assert"
|
|
108
|
-
* import { BigInt, Option } from "effect"
|
|
109
|
-
*
|
|
110
|
-
* assert.deepStrictEqual(BigInt.divide(6n, 3n), Option.some(2n))
|
|
111
|
-
* assert.deepStrictEqual(BigInt.divide(6n, 0n), Option.none())
|
|
112
|
-
* ```
|
|
113
|
-
*
|
|
114
|
-
* @category math
|
|
115
|
-
* @since 2.0.0
|
|
116
|
-
*/
|
|
117
|
-
export const divide: {
|
|
118
|
-
(that: bigint): (self: bigint) => Option.Option<bigint>
|
|
119
|
-
(self: bigint, that: bigint): Option.Option<bigint>
|
|
120
|
-
} = dual(
|
|
121
|
-
2,
|
|
122
|
-
(self: bigint, that: bigint): Option.Option<bigint> => that === bigint0 ? Option.none() : Option.some(self / that)
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Provides a division operation on `bigint`s.
|
|
127
|
-
*
|
|
128
|
-
* If the dividend is not a multiple of the divisor the result will be a `bigint` value
|
|
129
|
-
* which represents the integer division rounded down to the nearest integer.
|
|
130
|
-
*
|
|
131
|
-
* Throws a `RangeError` if the divisor is `0n`.
|
|
132
|
-
*
|
|
133
|
-
* @example
|
|
134
|
-
* ```ts
|
|
135
|
-
* import * as assert from "node:assert"
|
|
136
|
-
* import { unsafeDivide } from "effect/BigInt"
|
|
137
|
-
*
|
|
138
|
-
* assert.deepStrictEqual(unsafeDivide(6n, 3n), 2n)
|
|
139
|
-
* assert.deepStrictEqual(unsafeDivide(6n, 4n), 1n)
|
|
140
|
-
* ```
|
|
141
|
-
*
|
|
142
|
-
* @category math
|
|
143
|
-
* @since 2.0.0
|
|
144
|
-
*/
|
|
145
|
-
export const unsafeDivide: {
|
|
146
|
-
(that: bigint): (self: bigint) => bigint
|
|
147
|
-
(self: bigint, that: bigint): bigint
|
|
148
|
-
} = dual(2, (self: bigint, that: bigint): bigint => self / that)
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Returns the result of adding `1n` to a given number.
|
|
152
|
-
*
|
|
153
|
-
* @example
|
|
154
|
-
* ```ts
|
|
155
|
-
* import * as assert from "node:assert"
|
|
156
|
-
* import { increment } from "effect/BigInt"
|
|
157
|
-
*
|
|
158
|
-
* assert.deepStrictEqual(increment(2n), 3n)
|
|
159
|
-
* ```
|
|
160
|
-
*
|
|
161
|
-
* @category math
|
|
162
|
-
* @since 2.0.0
|
|
163
|
-
*/
|
|
164
|
-
export const increment = (n: bigint): bigint => n + bigint1
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Decrements a number by `1n`.
|
|
168
|
-
*
|
|
169
|
-
* @example
|
|
170
|
-
* ```ts
|
|
171
|
-
* import * as assert from "node:assert"
|
|
172
|
-
* import { decrement } from "effect/BigInt"
|
|
173
|
-
*
|
|
174
|
-
* assert.deepStrictEqual(decrement(3n), 2n)
|
|
175
|
-
* ```
|
|
176
|
-
*
|
|
177
|
-
* @category math
|
|
178
|
-
* @since 2.0.0
|
|
179
|
-
*/
|
|
180
|
-
export const decrement = (n: bigint): bigint => n - bigint1
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* @category instances
|
|
184
|
-
* @since 2.0.0
|
|
185
|
-
*/
|
|
186
|
-
export const Equivalence: equivalence.Equivalence<bigint> = equivalence.bigint
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* @category instances
|
|
190
|
-
* @since 2.0.0
|
|
191
|
-
*/
|
|
192
|
-
export const Order: order.Order<bigint> = order.bigint
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Returns `true` if the first argument is less than the second, otherwise `false`.
|
|
196
|
-
*
|
|
197
|
-
* @example
|
|
198
|
-
* ```ts
|
|
199
|
-
* import * as assert from "node:assert"
|
|
200
|
-
* import { lessThan } from "effect/BigInt"
|
|
201
|
-
*
|
|
202
|
-
* assert.deepStrictEqual(lessThan(2n, 3n), true)
|
|
203
|
-
* assert.deepStrictEqual(lessThan(3n, 3n), false)
|
|
204
|
-
* assert.deepStrictEqual(lessThan(4n, 3n), false)
|
|
205
|
-
* ```
|
|
206
|
-
*
|
|
207
|
-
* @category predicates
|
|
208
|
-
* @since 2.0.0
|
|
209
|
-
*/
|
|
210
|
-
export const lessThan: {
|
|
211
|
-
(that: bigint): (self: bigint) => boolean
|
|
212
|
-
(self: bigint, that: bigint): boolean
|
|
213
|
-
} = order.lessThan(Order)
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Returns a function that checks if a given `bigint` is less than or equal to the provided one.
|
|
217
|
-
*
|
|
218
|
-
* @example
|
|
219
|
-
* ```ts
|
|
220
|
-
* import * as assert from "node:assert"
|
|
221
|
-
* import { lessThanOrEqualTo } from "effect/BigInt"
|
|
222
|
-
*
|
|
223
|
-
* assert.deepStrictEqual(lessThanOrEqualTo(2n, 3n), true)
|
|
224
|
-
* assert.deepStrictEqual(lessThanOrEqualTo(3n, 3n), true)
|
|
225
|
-
* assert.deepStrictEqual(lessThanOrEqualTo(4n, 3n), false)
|
|
226
|
-
* ```
|
|
227
|
-
*
|
|
228
|
-
* @category predicates
|
|
229
|
-
* @since 2.0.0
|
|
230
|
-
*/
|
|
231
|
-
export const lessThanOrEqualTo: {
|
|
232
|
-
(that: bigint): (self: bigint) => boolean
|
|
233
|
-
(self: bigint, that: bigint): boolean
|
|
234
|
-
} = order.lessThanOrEqualTo(Order)
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Returns `true` if the first argument is greater than the second, otherwise `false`.
|
|
238
|
-
*
|
|
239
|
-
* @example
|
|
240
|
-
* ```ts
|
|
241
|
-
* import * as assert from "node:assert"
|
|
242
|
-
* import { greaterThan } from "effect/BigInt"
|
|
243
|
-
*
|
|
244
|
-
* assert.deepStrictEqual(greaterThan(2n, 3n), false)
|
|
245
|
-
* assert.deepStrictEqual(greaterThan(3n, 3n), false)
|
|
246
|
-
* assert.deepStrictEqual(greaterThan(4n, 3n), true)
|
|
247
|
-
* ```
|
|
248
|
-
*
|
|
249
|
-
* @category predicates
|
|
250
|
-
* @since 2.0.0
|
|
251
|
-
*/
|
|
252
|
-
export const greaterThan: {
|
|
253
|
-
(that: bigint): (self: bigint) => boolean
|
|
254
|
-
(self: bigint, that: bigint): boolean
|
|
255
|
-
} = order.greaterThan(Order)
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Returns a function that checks if a given `bigint` is greater than or equal to the provided one.
|
|
259
|
-
*
|
|
260
|
-
* @example
|
|
261
|
-
* ```ts
|
|
262
|
-
* import * as assert from "node:assert"
|
|
263
|
-
* import { greaterThanOrEqualTo } from "effect/BigInt"
|
|
264
|
-
*
|
|
265
|
-
* assert.deepStrictEqual(greaterThanOrEqualTo(2n, 3n), false)
|
|
266
|
-
* assert.deepStrictEqual(greaterThanOrEqualTo(3n, 3n), true)
|
|
267
|
-
* assert.deepStrictEqual(greaterThanOrEqualTo(4n, 3n), true)
|
|
268
|
-
* ```
|
|
269
|
-
*
|
|
270
|
-
* @category predicates
|
|
271
|
-
* @since 2.0.0
|
|
272
|
-
*/
|
|
273
|
-
export const greaterThanOrEqualTo: {
|
|
274
|
-
(that: bigint): (self: bigint) => boolean
|
|
275
|
-
(self: bigint, that: bigint): boolean
|
|
276
|
-
} = order.greaterThanOrEqualTo(Order)
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* Checks if a `bigint` is between a `minimum` and `maximum` value (inclusive).
|
|
280
|
-
*
|
|
281
|
-
* @example
|
|
282
|
-
* ```ts
|
|
283
|
-
* import * as assert from "node:assert"
|
|
284
|
-
* import { BigInt } from "effect"
|
|
285
|
-
*
|
|
286
|
-
* const between = BigInt.between({ minimum: 0n, maximum: 5n })
|
|
287
|
-
*
|
|
288
|
-
* assert.deepStrictEqual(between(3n), true)
|
|
289
|
-
* assert.deepStrictEqual(between(-1n), false)
|
|
290
|
-
* assert.deepStrictEqual(between(6n), false)
|
|
291
|
-
* ```
|
|
292
|
-
*
|
|
293
|
-
* @category predicates
|
|
294
|
-
* @since 2.0.0
|
|
295
|
-
*/
|
|
296
|
-
export const between: {
|
|
297
|
-
(options: {
|
|
298
|
-
minimum: bigint
|
|
299
|
-
maximum: bigint
|
|
300
|
-
}): (self: bigint) => boolean
|
|
301
|
-
(self: bigint, options: {
|
|
302
|
-
minimum: bigint
|
|
303
|
-
maximum: bigint
|
|
304
|
-
}): boolean
|
|
305
|
-
} = order.between(Order)
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* Restricts the given `bigint` to be within the range specified by the `minimum` and `maximum` values.
|
|
309
|
-
*
|
|
310
|
-
* - If the `bigint` is less than the `minimum` value, the function returns the `minimum` value.
|
|
311
|
-
* - If the `bigint` is greater than the `maximum` value, the function returns the `maximum` value.
|
|
312
|
-
* - Otherwise, it returns the original `bigint`.
|
|
313
|
-
*
|
|
314
|
-
* @example
|
|
315
|
-
* ```ts
|
|
316
|
-
* import * as assert from "node:assert"
|
|
317
|
-
* import { BigInt } from "effect"
|
|
318
|
-
*
|
|
319
|
-
* const clamp = BigInt.clamp({ minimum: 1n, maximum: 5n })
|
|
320
|
-
*
|
|
321
|
-
* assert.equal(clamp(3n), 3n)
|
|
322
|
-
* assert.equal(clamp(0n), 1n)
|
|
323
|
-
* assert.equal(clamp(6n), 5n)
|
|
324
|
-
* ```
|
|
325
|
-
*
|
|
326
|
-
* @since 2.0.0
|
|
327
|
-
*/
|
|
328
|
-
export const clamp: {
|
|
329
|
-
(options: {
|
|
330
|
-
minimum: bigint
|
|
331
|
-
maximum: bigint
|
|
332
|
-
}): (self: bigint) => bigint
|
|
333
|
-
(self: bigint, options: {
|
|
334
|
-
minimum: bigint
|
|
335
|
-
maximum: bigint
|
|
336
|
-
}): bigint
|
|
337
|
-
} = order.clamp(Order)
|
|
338
|
-
|
|
339
|
-
/**
|
|
340
|
-
* Returns the minimum between two `bigint`s.
|
|
341
|
-
*
|
|
342
|
-
* @example
|
|
343
|
-
* ```ts
|
|
344
|
-
* import * as assert from "node:assert"
|
|
345
|
-
* import { min } from "effect/BigInt"
|
|
346
|
-
*
|
|
347
|
-
* assert.deepStrictEqual(min(2n, 3n), 2n)
|
|
348
|
-
* ```
|
|
349
|
-
*
|
|
350
|
-
* @since 2.0.0
|
|
351
|
-
*/
|
|
352
|
-
export const min: {
|
|
353
|
-
(that: bigint): (self: bigint) => bigint
|
|
354
|
-
(self: bigint, that: bigint): bigint
|
|
355
|
-
} = order.min(Order)
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Returns the maximum between two `bigint`s.
|
|
359
|
-
*
|
|
360
|
-
* @example
|
|
361
|
-
* ```ts
|
|
362
|
-
* import * as assert from "node:assert"
|
|
363
|
-
* import { max } from "effect/BigInt"
|
|
364
|
-
*
|
|
365
|
-
* assert.deepStrictEqual(max(2n, 3n), 3n)
|
|
366
|
-
* ```
|
|
367
|
-
*
|
|
368
|
-
* @since 2.0.0
|
|
369
|
-
*/
|
|
370
|
-
export const max: {
|
|
371
|
-
(that: bigint): (self: bigint) => bigint
|
|
372
|
-
(self: bigint, that: bigint): bigint
|
|
373
|
-
} = order.max(Order)
|
|
374
|
-
|
|
375
|
-
/**
|
|
376
|
-
* Determines the sign of a given `bigint`.
|
|
377
|
-
*
|
|
378
|
-
* @example
|
|
379
|
-
* ```ts
|
|
380
|
-
* import * as assert from "node:assert"
|
|
381
|
-
* import { sign } from "effect/BigInt"
|
|
382
|
-
*
|
|
383
|
-
* assert.deepStrictEqual(sign(-5n), -1)
|
|
384
|
-
* assert.deepStrictEqual(sign(0n), 0)
|
|
385
|
-
* assert.deepStrictEqual(sign(5n), 1)
|
|
386
|
-
* ```
|
|
387
|
-
*
|
|
388
|
-
* @category math
|
|
389
|
-
* @since 2.0.0
|
|
390
|
-
*/
|
|
391
|
-
export const sign = (n: bigint): Ordering => Order(n, bigint0)
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Determines the absolute value of a given `bigint`.
|
|
395
|
-
*
|
|
396
|
-
* @example
|
|
397
|
-
* ```ts
|
|
398
|
-
* import * as assert from "node:assert"
|
|
399
|
-
* import { abs } from "effect/BigInt"
|
|
400
|
-
*
|
|
401
|
-
* assert.deepStrictEqual(abs(-5n), 5n)
|
|
402
|
-
* assert.deepStrictEqual(abs(0n), 0n)
|
|
403
|
-
* assert.deepStrictEqual(abs(5n), 5n)
|
|
404
|
-
* ```
|
|
405
|
-
*
|
|
406
|
-
* @category math
|
|
407
|
-
* @since 2.0.0
|
|
408
|
-
*/
|
|
409
|
-
export const abs = (n: bigint): bigint => (n < bigint0 ? -n : n)
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
* Determines the greatest common divisor of two `bigint`s.
|
|
413
|
-
*
|
|
414
|
-
* @example
|
|
415
|
-
* ```ts
|
|
416
|
-
* import * as assert from "node:assert"
|
|
417
|
-
* import { gcd } from "effect/BigInt"
|
|
418
|
-
*
|
|
419
|
-
* assert.deepStrictEqual(gcd(2n, 3n), 1n)
|
|
420
|
-
* assert.deepStrictEqual(gcd(2n, 4n), 2n)
|
|
421
|
-
* assert.deepStrictEqual(gcd(16n, 24n), 8n)
|
|
422
|
-
* ```
|
|
423
|
-
*
|
|
424
|
-
* @category math
|
|
425
|
-
* @since 2.0.0
|
|
426
|
-
*/
|
|
427
|
-
export const gcd: {
|
|
428
|
-
(that: bigint): (self: bigint) => bigint
|
|
429
|
-
(self: bigint, that: bigint): bigint
|
|
430
|
-
} = dual(2, (self: bigint, that: bigint): bigint => {
|
|
431
|
-
while (that !== bigint0) {
|
|
432
|
-
const t = that
|
|
433
|
-
that = self % that
|
|
434
|
-
self = t
|
|
435
|
-
}
|
|
436
|
-
return self
|
|
437
|
-
})
|
|
438
|
-
|
|
439
|
-
/**
|
|
440
|
-
* Determines the least common multiple of two `bigint`s.
|
|
441
|
-
*
|
|
442
|
-
* @example
|
|
443
|
-
* ```ts
|
|
444
|
-
* import * as assert from "node:assert"
|
|
445
|
-
* import { lcm } from "effect/BigInt"
|
|
446
|
-
*
|
|
447
|
-
* assert.deepStrictEqual(lcm(2n, 3n), 6n)
|
|
448
|
-
* assert.deepStrictEqual(lcm(2n, 4n), 4n)
|
|
449
|
-
* assert.deepStrictEqual(lcm(16n, 24n), 48n)
|
|
450
|
-
* ```
|
|
451
|
-
*
|
|
452
|
-
* @category math
|
|
453
|
-
* @since 2.0.0
|
|
454
|
-
*/
|
|
455
|
-
export const lcm: {
|
|
456
|
-
(that: bigint): (self: bigint) => bigint
|
|
457
|
-
(self: bigint, that: bigint): bigint
|
|
458
|
-
} = dual(2, (self: bigint, that: bigint): bigint => (self * that) / gcd(self, that))
|
|
459
|
-
|
|
460
|
-
/**
|
|
461
|
-
* Determines the square root of a given `bigint` unsafely. Throws if the given `bigint` is negative.
|
|
462
|
-
*
|
|
463
|
-
* @example
|
|
464
|
-
* ```ts
|
|
465
|
-
* import * as assert from "node:assert"
|
|
466
|
-
* import { unsafeSqrt } from "effect/BigInt"
|
|
467
|
-
*
|
|
468
|
-
* assert.deepStrictEqual(unsafeSqrt(4n), 2n)
|
|
469
|
-
* assert.deepStrictEqual(unsafeSqrt(9n), 3n)
|
|
470
|
-
* assert.deepStrictEqual(unsafeSqrt(16n), 4n)
|
|
471
|
-
* ```
|
|
472
|
-
*
|
|
473
|
-
* @category math
|
|
474
|
-
* @since 2.0.0
|
|
475
|
-
*/
|
|
476
|
-
export const unsafeSqrt = (n: bigint): bigint => {
|
|
477
|
-
if (n < bigint0) {
|
|
478
|
-
throw new RangeError("Cannot take the square root of a negative number")
|
|
479
|
-
}
|
|
480
|
-
if (n < bigint2) {
|
|
481
|
-
return n
|
|
482
|
-
}
|
|
483
|
-
let x = n / bigint2
|
|
484
|
-
while (x * x > n) {
|
|
485
|
-
x = ((n / x) + x) / bigint2
|
|
486
|
-
}
|
|
487
|
-
return x
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
/**
|
|
491
|
-
* Determines the square root of a given `bigint` safely. Returns `none` if the given `bigint` is negative.
|
|
492
|
-
*
|
|
493
|
-
* @example
|
|
494
|
-
* ```ts
|
|
495
|
-
* import * as assert from "node:assert"
|
|
496
|
-
* import { BigInt, Option } from "effect"
|
|
497
|
-
*
|
|
498
|
-
* assert.deepStrictEqual(BigInt.sqrt(4n), Option.some(2n))
|
|
499
|
-
* assert.deepStrictEqual(BigInt.sqrt(9n), Option.some(3n))
|
|
500
|
-
* assert.deepStrictEqual(BigInt.sqrt(16n), Option.some(4n))
|
|
501
|
-
* assert.deepStrictEqual(BigInt.sqrt(-1n), Option.none())
|
|
502
|
-
* ```
|
|
503
|
-
*
|
|
504
|
-
* @category math
|
|
505
|
-
* @since 2.0.0
|
|
506
|
-
*/
|
|
507
|
-
export const sqrt = (n: bigint): Option.Option<bigint> =>
|
|
508
|
-
greaterThanOrEqualTo(n, bigint0) ? Option.some(unsafeSqrt(n)) : Option.none<bigint>()
|
|
509
|
-
|
|
510
|
-
/**
|
|
511
|
-
* Takes an `Iterable` of `bigint`s and returns their sum as a single `bigint
|
|
512
|
-
*
|
|
513
|
-
* @example
|
|
514
|
-
* ```ts
|
|
515
|
-
* import * as assert from "node:assert"
|
|
516
|
-
* import { sumAll } from "effect/BigInt"
|
|
517
|
-
*
|
|
518
|
-
* assert.deepStrictEqual(sumAll([2n, 3n, 4n]), 9n)
|
|
519
|
-
* ```
|
|
520
|
-
*
|
|
521
|
-
* @category math
|
|
522
|
-
* @since 2.0.0
|
|
523
|
-
*/
|
|
524
|
-
export const sumAll = (collection: Iterable<bigint>): bigint => {
|
|
525
|
-
let out = bigint0
|
|
526
|
-
for (const n of collection) {
|
|
527
|
-
out += n
|
|
528
|
-
}
|
|
529
|
-
return out
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
/**
|
|
533
|
-
* Takes an `Iterable` of `bigint`s and returns their multiplication as a single `number`.
|
|
534
|
-
*
|
|
535
|
-
* @example
|
|
536
|
-
* ```ts
|
|
537
|
-
* import * as assert from "node:assert"
|
|
538
|
-
* import { multiplyAll } from "effect/BigInt"
|
|
539
|
-
*
|
|
540
|
-
* assert.deepStrictEqual(multiplyAll([2n, 3n, 4n]), 24n)
|
|
541
|
-
* ```
|
|
542
|
-
*
|
|
543
|
-
* @category math
|
|
544
|
-
* @since 2.0.0
|
|
545
|
-
*/
|
|
546
|
-
export const multiplyAll = (collection: Iterable<bigint>): bigint => {
|
|
547
|
-
let out = bigint1
|
|
548
|
-
for (const n of collection) {
|
|
549
|
-
if (n === bigint0) {
|
|
550
|
-
return bigint0
|
|
551
|
-
}
|
|
552
|
-
out *= n
|
|
553
|
-
}
|
|
554
|
-
return out
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
/**
|
|
558
|
-
* Takes a `bigint` and returns an `Option` of `number`.
|
|
559
|
-
*
|
|
560
|
-
* If the `bigint` is outside the safe integer range for JavaScript (`Number.MAX_SAFE_INTEGER`
|
|
561
|
-
* and `Number.MIN_SAFE_INTEGER`), it returns `Option.none()`. Otherwise, it converts the `bigint`
|
|
562
|
-
* to a number and returns `Option.some(number)`.
|
|
563
|
-
*
|
|
564
|
-
* @example
|
|
565
|
-
* ```ts
|
|
566
|
-
* import * as assert from "node:assert"
|
|
567
|
-
* import { BigInt as BI, Option } from "effect"
|
|
568
|
-
*
|
|
569
|
-
* assert.deepStrictEqual(BI.toNumber(BigInt(42)), Option.some(42))
|
|
570
|
-
* assert.deepStrictEqual(BI.toNumber(BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1)), Option.none())
|
|
571
|
-
* assert.deepStrictEqual(BI.toNumber(BigInt(Number.MIN_SAFE_INTEGER) - BigInt(1)), Option.none())
|
|
572
|
-
* ```
|
|
573
|
-
*
|
|
574
|
-
* @category conversions
|
|
575
|
-
* @since 2.0.0
|
|
576
|
-
*/
|
|
577
|
-
export const toNumber = (b: bigint): Option.Option<number> => {
|
|
578
|
-
if (b > BigInt(Number.MAX_SAFE_INTEGER) || b < BigInt(Number.MIN_SAFE_INTEGER)) {
|
|
579
|
-
return Option.none()
|
|
580
|
-
}
|
|
581
|
-
return Option.some(Number(b))
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
/**
|
|
585
|
-
* Takes a string and returns an `Option` of `bigint`.
|
|
586
|
-
*
|
|
587
|
-
* If the string is empty or contains characters that cannot be converted into a `bigint`,
|
|
588
|
-
* it returns `Option.none()`, otherwise, it returns `Option.some(bigint)`.
|
|
589
|
-
*
|
|
590
|
-
* @example
|
|
591
|
-
* ```ts
|
|
592
|
-
* import * as assert from "node:assert"
|
|
593
|
-
* import { BigInt as BI, Option } from "effect"
|
|
594
|
-
*
|
|
595
|
-
* assert.deepStrictEqual(BI.fromString("42"), Option.some(BigInt(42)))
|
|
596
|
-
* assert.deepStrictEqual(BI.fromString(" "), Option.none())
|
|
597
|
-
* assert.deepStrictEqual(BI.fromString("a"), Option.none())
|
|
598
|
-
* ```
|
|
599
|
-
*
|
|
600
|
-
* @category conversions
|
|
601
|
-
* @since 2.4.12
|
|
602
|
-
*/
|
|
603
|
-
export const fromString = (s: string): Option.Option<bigint> => {
|
|
604
|
-
try {
|
|
605
|
-
return s.trim() === ""
|
|
606
|
-
? Option.none()
|
|
607
|
-
: Option.some(BigInt(s))
|
|
608
|
-
} catch {
|
|
609
|
-
return Option.none()
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
/**
|
|
614
|
-
* Takes a number and returns an `Option` of `bigint`.
|
|
615
|
-
*
|
|
616
|
-
* If the number is outside the safe integer range for JavaScript (`Number.MAX_SAFE_INTEGER`
|
|
617
|
-
* and `Number.MIN_SAFE_INTEGER`), it returns `Option.none()`. Otherwise, it attempts to
|
|
618
|
-
* convert the number to a `bigint` and returns `Option.some(bigint)`.
|
|
619
|
-
*
|
|
620
|
-
* @example
|
|
621
|
-
* ```ts
|
|
622
|
-
* import * as assert from "node:assert"
|
|
623
|
-
* import { BigInt as BI, Option } from "effect"
|
|
624
|
-
*
|
|
625
|
-
* assert.deepStrictEqual(BI.fromNumber(42), Option.some(BigInt(42)))
|
|
626
|
-
* assert.deepStrictEqual(BI.fromNumber(Number.MAX_SAFE_INTEGER + 1), Option.none())
|
|
627
|
-
* assert.deepStrictEqual(BI.fromNumber(Number.MIN_SAFE_INTEGER - 1), Option.none())
|
|
628
|
-
* ```
|
|
629
|
-
*
|
|
630
|
-
* @category conversions
|
|
631
|
-
* @since 2.4.12
|
|
632
|
-
*/
|
|
633
|
-
export const fromNumber = (n: number): Option.Option<bigint> => {
|
|
634
|
-
if (n > Number.MAX_SAFE_INTEGER || n < Number.MIN_SAFE_INTEGER) {
|
|
635
|
-
return Option.none()
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
try {
|
|
639
|
-
return Option.some(BigInt(n))
|
|
640
|
-
} catch {
|
|
641
|
-
return Option.none()
|
|
642
|
-
}
|
|
643
|
-
}
|