@clayroach/effect 3.19.14-source-capture.6 → 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/Trie.ts
DELETED
|
@@ -1,840 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A `Trie` is used for locating specific `string` keys from within a set.
|
|
3
|
-
*
|
|
4
|
-
* It works similar to `HashMap`, but with keys required to be `string`.
|
|
5
|
-
* This constraint unlocks some performance optimizations and new methods to get string prefixes (e.g. `keysWithPrefix`, `longestPrefixOf`).
|
|
6
|
-
*
|
|
7
|
-
* Prefix search is also the main feature that makes a `Trie` more suited than `HashMap` for certain usecases.
|
|
8
|
-
*
|
|
9
|
-
* A `Trie` is often used to store a dictionary (list of words) that can be searched
|
|
10
|
-
* in a manner that allows for efficient generation of completion lists
|
|
11
|
-
* (e.g. predict the rest of a word a user is typing).
|
|
12
|
-
*
|
|
13
|
-
* A `Trie` has O(n) lookup time where `n` is the size of the key,
|
|
14
|
-
* or even less than `n` on search misses.
|
|
15
|
-
*
|
|
16
|
-
* @since 2.0.0
|
|
17
|
-
*/
|
|
18
|
-
import type { Equal } from "./Equal.js"
|
|
19
|
-
import type { Inspectable } from "./Inspectable.js"
|
|
20
|
-
import * as TR from "./internal/trie.js"
|
|
21
|
-
import type { Option } from "./Option.js"
|
|
22
|
-
import type { Pipeable } from "./Pipeable.js"
|
|
23
|
-
import type { Covariant, NoInfer } from "./Types.js"
|
|
24
|
-
|
|
25
|
-
const TypeId: unique symbol = TR.TrieTypeId as TypeId
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @since 2.0.0
|
|
29
|
-
* @category symbol
|
|
30
|
-
*/
|
|
31
|
-
export type TypeId = typeof TypeId
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* @since 2.0.0
|
|
35
|
-
* @category models
|
|
36
|
-
*/
|
|
37
|
-
export interface Trie<out Value> extends Iterable<[string, Value]>, Equal, Pipeable, Inspectable {
|
|
38
|
-
readonly [TypeId]: {
|
|
39
|
-
readonly _Value: Covariant<Value>
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Creates an empty `Trie`.
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* ```ts
|
|
48
|
-
* import * as assert from "node:assert"
|
|
49
|
-
* import { Trie, Equal } from "effect"
|
|
50
|
-
*
|
|
51
|
-
* const trie = Trie.empty<string>()
|
|
52
|
-
*
|
|
53
|
-
* assert.equal(Trie.size(trie), 0)
|
|
54
|
-
* assert.deepStrictEqual(Array.from(trie), [])
|
|
55
|
-
* ```
|
|
56
|
-
*
|
|
57
|
-
* @since 2.0.0
|
|
58
|
-
* @category constructors
|
|
59
|
-
*/
|
|
60
|
-
export const empty: <V = never>() => Trie<V> = TR.empty
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Creates a new `Trie` from an iterable collection of key/value pairs (e.g. `Array<[string, V]>`).
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* ```ts
|
|
67
|
-
* import * as assert from "node:assert"
|
|
68
|
-
* import { Trie, Equal } from "effect"
|
|
69
|
-
*
|
|
70
|
-
* const iterable: Array<readonly [string, number]> = [["call", 0], ["me", 1], ["mind", 2], ["mid", 3]]
|
|
71
|
-
* const trie = Trie.fromIterable(iterable)
|
|
72
|
-
*
|
|
73
|
-
* // The entries in the `Trie` are extracted in alphabetical order, regardless of the insertion order
|
|
74
|
-
* assert.deepStrictEqual(Array.from(trie), [["call", 0], ["me", 1], ["mid", 3], ["mind", 2]])
|
|
75
|
-
* assert.equal(Equal.equals(Trie.make(["call", 0], ["me", 1], ["mind", 2], ["mid", 3]), trie), true)
|
|
76
|
-
* ```
|
|
77
|
-
*
|
|
78
|
-
* @since 2.0.0
|
|
79
|
-
* @category constructors
|
|
80
|
-
*/
|
|
81
|
-
export const fromIterable: <V>(entries: Iterable<readonly [string, V]>) => Trie<V> = TR.fromIterable
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Constructs a new `Trie` from the specified entries (`[string, V]`).
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* ```ts
|
|
88
|
-
* import * as assert from "node:assert"
|
|
89
|
-
* import { Trie, Equal } from "effect"
|
|
90
|
-
*
|
|
91
|
-
* const trie = Trie.make(["ca", 0], ["me", 1])
|
|
92
|
-
*
|
|
93
|
-
* assert.deepStrictEqual(Array.from(trie), [["ca", 0], ["me", 1]])
|
|
94
|
-
* assert.equal(Equal.equals(Trie.fromIterable([["ca", 0], ["me", 1]]), trie), true)
|
|
95
|
-
* ```
|
|
96
|
-
*
|
|
97
|
-
* @since 2.0.0
|
|
98
|
-
* @category constructors
|
|
99
|
-
*/
|
|
100
|
-
export const make: <Entries extends Array<readonly [string, any]>>(
|
|
101
|
-
...entries: Entries
|
|
102
|
-
) => Trie<Entries[number] extends readonly [any, infer V] ? V : never> = TR.make
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Insert a new entry in the `Trie`.
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* ```ts
|
|
109
|
-
* import * as assert from "node:assert"
|
|
110
|
-
* import { Trie } from "effect"
|
|
111
|
-
*
|
|
112
|
-
* const trie1 = Trie.empty<number>().pipe(
|
|
113
|
-
* Trie.insert("call", 0)
|
|
114
|
-
* )
|
|
115
|
-
* const trie2 = trie1.pipe(Trie.insert("me", 1))
|
|
116
|
-
* const trie3 = trie2.pipe(Trie.insert("mind", 2))
|
|
117
|
-
* const trie4 = trie3.pipe(Trie.insert("mid", 3))
|
|
118
|
-
*
|
|
119
|
-
* assert.deepStrictEqual(Array.from(trie1), [["call", 0]])
|
|
120
|
-
* assert.deepStrictEqual(Array.from(trie2), [["call", 0], ["me", 1]])
|
|
121
|
-
* assert.deepStrictEqual(Array.from(trie3), [["call", 0], ["me", 1], ["mind", 2]])
|
|
122
|
-
* assert.deepStrictEqual(Array.from(trie4), [["call", 0], ["me", 1], ["mid", 3], ["mind", 2]])
|
|
123
|
-
* ```
|
|
124
|
-
*
|
|
125
|
-
* @since 2.0.0
|
|
126
|
-
* @category mutations
|
|
127
|
-
*/
|
|
128
|
-
export const insert: {
|
|
129
|
-
<V1>(key: string, value: V1): <V>(self: Trie<V>) => Trie<V | V1>
|
|
130
|
-
<V1, V>(self: Trie<V>, key: string, value: V1): Trie<V | V1>
|
|
131
|
-
} = TR.insert
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Returns an `IterableIterator` of the keys within the `Trie`.
|
|
135
|
-
*
|
|
136
|
-
* The keys are returned in alphabetical order, regardless of insertion order.
|
|
137
|
-
*
|
|
138
|
-
* @example
|
|
139
|
-
* ```ts
|
|
140
|
-
* import * as assert from "node:assert"
|
|
141
|
-
* import { Trie } from "effect"
|
|
142
|
-
*
|
|
143
|
-
* const trie = Trie.empty<number>().pipe(
|
|
144
|
-
* Trie.insert("cab", 0),
|
|
145
|
-
* Trie.insert("abc", 1),
|
|
146
|
-
* Trie.insert("bca", 2)
|
|
147
|
-
* )
|
|
148
|
-
*
|
|
149
|
-
* const result = Array.from(Trie.keys(trie))
|
|
150
|
-
* assert.deepStrictEqual(result, ["abc", "bca", "cab"])
|
|
151
|
-
* ```
|
|
152
|
-
*
|
|
153
|
-
* @since 2.0.0
|
|
154
|
-
* @category getters
|
|
155
|
-
*/
|
|
156
|
-
export const keys: <V>(self: Trie<V>) => IterableIterator<string> = TR.keys
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Returns an `IterableIterator` of the values within the `Trie`.
|
|
160
|
-
*
|
|
161
|
-
* Values are ordered based on their key in alphabetical order, regardless of insertion order.
|
|
162
|
-
*
|
|
163
|
-
* @example
|
|
164
|
-
* ```ts
|
|
165
|
-
* import * as assert from "node:assert"
|
|
166
|
-
* import { Trie } from "effect"
|
|
167
|
-
*
|
|
168
|
-
* const trie = Trie.empty<number>().pipe(
|
|
169
|
-
* Trie.insert("call", 0),
|
|
170
|
-
* Trie.insert("me", 1),
|
|
171
|
-
* Trie.insert("and", 2)
|
|
172
|
-
* )
|
|
173
|
-
*
|
|
174
|
-
* const result = Array.from(Trie.values(trie))
|
|
175
|
-
* assert.deepStrictEqual(result, [2, 0, 1])
|
|
176
|
-
* ```
|
|
177
|
-
*
|
|
178
|
-
* @since 2.0.0
|
|
179
|
-
* @category getters
|
|
180
|
-
*/
|
|
181
|
-
export const values: <V>(self: Trie<V>) => IterableIterator<V> = TR.values
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Returns an `IterableIterator` of the entries within the `Trie`.
|
|
185
|
-
*
|
|
186
|
-
* The entries are returned by keys in alphabetical order, regardless of insertion order.
|
|
187
|
-
*
|
|
188
|
-
* @example
|
|
189
|
-
* ```ts
|
|
190
|
-
* import * as assert from "node:assert"
|
|
191
|
-
* import { Trie } from "effect"
|
|
192
|
-
*
|
|
193
|
-
* const trie = Trie.empty<number>().pipe(
|
|
194
|
-
* Trie.insert("call", 0),
|
|
195
|
-
* Trie.insert("me", 1)
|
|
196
|
-
* )
|
|
197
|
-
*
|
|
198
|
-
* const result = Array.from(Trie.entries(trie))
|
|
199
|
-
* assert.deepStrictEqual(result, [["call", 0], ["me", 1]])
|
|
200
|
-
* ```
|
|
201
|
-
*
|
|
202
|
-
* @since 2.0.0
|
|
203
|
-
* @category getters
|
|
204
|
-
*/
|
|
205
|
-
export const entries: <V>(self: Trie<V>) => IterableIterator<[string, V]> = TR.entries
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Returns an `Array<[K, V]>` of the entries within the `Trie`.
|
|
209
|
-
*
|
|
210
|
-
* Equivalent to `Array.from(Trie.entries(trie))`.
|
|
211
|
-
*
|
|
212
|
-
* @example
|
|
213
|
-
* ```ts
|
|
214
|
-
* import * as assert from "node:assert"
|
|
215
|
-
* import { Trie } from "effect"
|
|
216
|
-
*
|
|
217
|
-
* const trie = Trie.empty<number>().pipe(
|
|
218
|
-
* Trie.insert("call", 0),
|
|
219
|
-
* Trie.insert("me", 1)
|
|
220
|
-
* )
|
|
221
|
-
* const result = Trie.toEntries(trie)
|
|
222
|
-
*
|
|
223
|
-
* assert.deepStrictEqual(result, [["call", 0], ["me", 1]])
|
|
224
|
-
* ```
|
|
225
|
-
*
|
|
226
|
-
* @since 2.0.0
|
|
227
|
-
* @category getters
|
|
228
|
-
*/
|
|
229
|
-
export const toEntries = <V>(self: Trie<V>): Array<[string, V]> => Array.from(entries(self))
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Returns an `IterableIterator` of the keys within the `Trie`
|
|
233
|
-
* that have `prefix` as prefix (`prefix` included if it exists).
|
|
234
|
-
*
|
|
235
|
-
* @example
|
|
236
|
-
* ```ts
|
|
237
|
-
* import * as assert from "node:assert"
|
|
238
|
-
* import { Trie } from "effect"
|
|
239
|
-
*
|
|
240
|
-
* const trie = Trie.empty<number>().pipe(
|
|
241
|
-
* Trie.insert("she", 0),
|
|
242
|
-
* Trie.insert("shells", 1),
|
|
243
|
-
* Trie.insert("sea", 2),
|
|
244
|
-
* Trie.insert("shore", 3)
|
|
245
|
-
* )
|
|
246
|
-
*
|
|
247
|
-
* const result = Array.from(Trie.keysWithPrefix(trie, "she"))
|
|
248
|
-
* assert.deepStrictEqual(result, ["she", "shells"])
|
|
249
|
-
* ```
|
|
250
|
-
*
|
|
251
|
-
* @since 2.0.0
|
|
252
|
-
* @category getters
|
|
253
|
-
*/
|
|
254
|
-
export const keysWithPrefix: {
|
|
255
|
-
(prefix: string): <V>(self: Trie<V>) => IterableIterator<string>
|
|
256
|
-
<V>(self: Trie<V>, prefix: string): IterableIterator<string>
|
|
257
|
-
} = TR.keysWithPrefix
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Returns an `IterableIterator` of the values within the `Trie`
|
|
261
|
-
* that have `prefix` as prefix (`prefix` included if it exists).
|
|
262
|
-
*
|
|
263
|
-
* @example
|
|
264
|
-
* ```ts
|
|
265
|
-
* import * as assert from "node:assert"
|
|
266
|
-
* import { Trie } from "effect"
|
|
267
|
-
*
|
|
268
|
-
* const trie = Trie.empty<number>().pipe(
|
|
269
|
-
* Trie.insert("she", 0),
|
|
270
|
-
* Trie.insert("shells", 1),
|
|
271
|
-
* Trie.insert("sea", 2),
|
|
272
|
-
* Trie.insert("shore", 3)
|
|
273
|
-
* )
|
|
274
|
-
*
|
|
275
|
-
* const result = Array.from(Trie.valuesWithPrefix(trie, "she"))
|
|
276
|
-
*
|
|
277
|
-
* // 0: "she", 1: "shells"
|
|
278
|
-
* assert.deepStrictEqual(result, [0, 1])
|
|
279
|
-
* ```
|
|
280
|
-
*
|
|
281
|
-
* @since 2.0.0
|
|
282
|
-
* @category getters
|
|
283
|
-
*/
|
|
284
|
-
export const valuesWithPrefix: {
|
|
285
|
-
(prefix: string): <V>(self: Trie<V>) => IterableIterator<V>
|
|
286
|
-
<V>(self: Trie<V>, prefix: string): IterableIterator<V>
|
|
287
|
-
} = TR.valuesWithPrefix
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Returns an `IterableIterator` of the entries within the `Trie`
|
|
291
|
-
* that have `prefix` as prefix (`prefix` included if it exists).
|
|
292
|
-
*
|
|
293
|
-
* @example
|
|
294
|
-
* ```ts
|
|
295
|
-
* import * as assert from "node:assert"
|
|
296
|
-
* import { Trie } from "effect"
|
|
297
|
-
*
|
|
298
|
-
* const trie = Trie.empty<number>().pipe(
|
|
299
|
-
* Trie.insert("she", 0),
|
|
300
|
-
* Trie.insert("shells", 1),
|
|
301
|
-
* Trie.insert("sea", 2),
|
|
302
|
-
* Trie.insert("shore", 3)
|
|
303
|
-
* )
|
|
304
|
-
*
|
|
305
|
-
* const result = Array.from(Trie.entriesWithPrefix(trie, "she"))
|
|
306
|
-
* assert.deepStrictEqual(result, [["she", 0], ["shells", 1]])
|
|
307
|
-
* ```
|
|
308
|
-
*
|
|
309
|
-
* @since 2.0.0
|
|
310
|
-
* @category getters
|
|
311
|
-
*/
|
|
312
|
-
export const entriesWithPrefix: {
|
|
313
|
-
(prefix: string): <V>(self: Trie<V>) => IterableIterator<[string, V]>
|
|
314
|
-
<V>(self: Trie<V>, prefix: string): IterableIterator<[string, V]>
|
|
315
|
-
} = TR.entriesWithPrefix
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Returns `Array<[K, V]>` of the entries within the `Trie`
|
|
319
|
-
* that have `prefix` as prefix (`prefix` included if it exists).
|
|
320
|
-
*
|
|
321
|
-
* @example
|
|
322
|
-
* ```ts
|
|
323
|
-
* import * as assert from "node:assert"
|
|
324
|
-
* import { Trie } from "effect"
|
|
325
|
-
*
|
|
326
|
-
* const trie = Trie.empty<number>().pipe(
|
|
327
|
-
* Trie.insert("shells", 0),
|
|
328
|
-
* Trie.insert("sells", 1),
|
|
329
|
-
* Trie.insert("sea", 2),
|
|
330
|
-
* Trie.insert("she", 3)
|
|
331
|
-
* )
|
|
332
|
-
*
|
|
333
|
-
* const result = Trie.toEntriesWithPrefix(trie, "she")
|
|
334
|
-
* assert.deepStrictEqual(result, [["she", 3], ["shells", 0]])
|
|
335
|
-
* ```
|
|
336
|
-
*
|
|
337
|
-
* @since 2.0.0
|
|
338
|
-
* @category getters
|
|
339
|
-
*/
|
|
340
|
-
export const toEntriesWithPrefix: {
|
|
341
|
-
(prefix: string): <V>(self: Trie<V>) => Array<[string, V]>
|
|
342
|
-
<V>(self: Trie<V>, prefix: string): Array<[string, V]>
|
|
343
|
-
} = TR.toEntriesWithPrefix
|
|
344
|
-
|
|
345
|
-
/**
|
|
346
|
-
* Returns the longest key/value in the `Trie`
|
|
347
|
-
* that is a prefix of that `key` if it exists, `None` otherwise.
|
|
348
|
-
*
|
|
349
|
-
* @example
|
|
350
|
-
* ```ts
|
|
351
|
-
* import * as assert from "node:assert"
|
|
352
|
-
* import { Trie, Option } from "effect"
|
|
353
|
-
*
|
|
354
|
-
* const trie = Trie.empty<number>().pipe(
|
|
355
|
-
* Trie.insert("shells", 0),
|
|
356
|
-
* Trie.insert("sells", 1),
|
|
357
|
-
* Trie.insert("she", 2)
|
|
358
|
-
* )
|
|
359
|
-
*
|
|
360
|
-
* assert.deepStrictEqual(Trie.longestPrefixOf(trie, "sell"), Option.none())
|
|
361
|
-
* assert.deepStrictEqual(Trie.longestPrefixOf(trie, "sells"), Option.some(["sells", 1]))
|
|
362
|
-
* assert.deepStrictEqual(Trie.longestPrefixOf(trie, "shell"), Option.some(["she", 2]))
|
|
363
|
-
* assert.deepStrictEqual(Trie.longestPrefixOf(trie, "shellsort"), Option.some(["shells", 0]))
|
|
364
|
-
* ```
|
|
365
|
-
*
|
|
366
|
-
* @since 2.0.0
|
|
367
|
-
* @category getters
|
|
368
|
-
*/
|
|
369
|
-
export const longestPrefixOf: {
|
|
370
|
-
(key: string): <V>(self: Trie<V>) => Option<[string, V]>
|
|
371
|
-
<V>(self: Trie<V>, key: string): Option<[string, V]>
|
|
372
|
-
} = TR.longestPrefixOf
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Returns the size of the `Trie` (number of entries in the `Trie`).
|
|
376
|
-
*
|
|
377
|
-
* @example
|
|
378
|
-
* ```ts
|
|
379
|
-
* import * as assert from "node:assert"
|
|
380
|
-
* import { Trie } from "effect"
|
|
381
|
-
*
|
|
382
|
-
* const trie = Trie.empty<number>().pipe(
|
|
383
|
-
* Trie.insert("a", 0),
|
|
384
|
-
* Trie.insert("b", 1)
|
|
385
|
-
* )
|
|
386
|
-
*
|
|
387
|
-
* assert.equal(Trie.size(trie), 2)
|
|
388
|
-
* ```
|
|
389
|
-
*
|
|
390
|
-
* @since 2.0.0
|
|
391
|
-
* @category getters
|
|
392
|
-
*/
|
|
393
|
-
export const size: <V>(self: Trie<V>) => number = TR.size
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Safely lookup the value for the specified key in the `Trie`.
|
|
397
|
-
*
|
|
398
|
-
* @example
|
|
399
|
-
* ```ts
|
|
400
|
-
* import * as assert from "node:assert"
|
|
401
|
-
* import { Trie, Option } from "effect"
|
|
402
|
-
*
|
|
403
|
-
* const trie = Trie.empty<number>().pipe(
|
|
404
|
-
* Trie.insert("call", 0),
|
|
405
|
-
* Trie.insert("me", 1),
|
|
406
|
-
* Trie.insert("mind", 2),
|
|
407
|
-
* Trie.insert("mid", 3)
|
|
408
|
-
* )
|
|
409
|
-
*
|
|
410
|
-
* assert.deepStrictEqual(Trie.get(trie, "call"), Option.some(0))
|
|
411
|
-
* assert.deepStrictEqual(Trie.get(trie, "me"), Option.some(1))
|
|
412
|
-
* assert.deepStrictEqual(Trie.get(trie, "mind"), Option.some(2))
|
|
413
|
-
* assert.deepStrictEqual(Trie.get(trie, "mid"), Option.some(3))
|
|
414
|
-
* assert.deepStrictEqual(Trie.get(trie, "cale"), Option.none())
|
|
415
|
-
* assert.deepStrictEqual(Trie.get(trie, "ma"), Option.none())
|
|
416
|
-
* assert.deepStrictEqual(Trie.get(trie, "midn"), Option.none())
|
|
417
|
-
* assert.deepStrictEqual(Trie.get(trie, "mea"), Option.none())
|
|
418
|
-
* ```
|
|
419
|
-
*
|
|
420
|
-
* @since 2.0.0
|
|
421
|
-
* @category elements
|
|
422
|
-
*/
|
|
423
|
-
export const get: {
|
|
424
|
-
(key: string): <V>(self: Trie<V>) => Option<V>
|
|
425
|
-
<V>(self: Trie<V>, key: string): Option<V>
|
|
426
|
-
} = TR.get
|
|
427
|
-
|
|
428
|
-
/**
|
|
429
|
-
* Check if the given key exists in the `Trie`.
|
|
430
|
-
*
|
|
431
|
-
* @example
|
|
432
|
-
* ```ts
|
|
433
|
-
* import * as assert from "node:assert"
|
|
434
|
-
* import { Trie } from "effect"
|
|
435
|
-
*
|
|
436
|
-
* const trie = Trie.empty<number>().pipe(
|
|
437
|
-
* Trie.insert("call", 0),
|
|
438
|
-
* Trie.insert("me", 1),
|
|
439
|
-
* Trie.insert("mind", 2),
|
|
440
|
-
* Trie.insert("mid", 3)
|
|
441
|
-
* )
|
|
442
|
-
*
|
|
443
|
-
* assert.equal(Trie.has(trie, "call"), true)
|
|
444
|
-
* assert.equal(Trie.has(trie, "me"), true)
|
|
445
|
-
* assert.equal(Trie.has(trie, "mind"), true)
|
|
446
|
-
* assert.equal(Trie.has(trie, "mid"), true)
|
|
447
|
-
* assert.equal(Trie.has(trie, "cale"), false)
|
|
448
|
-
* assert.equal(Trie.has(trie, "ma"), false)
|
|
449
|
-
* assert.equal(Trie.has(trie, "midn"), false)
|
|
450
|
-
* assert.equal(Trie.has(trie, "mea"), false)
|
|
451
|
-
* ```
|
|
452
|
-
*
|
|
453
|
-
* @since 2.0.0
|
|
454
|
-
* @category elements
|
|
455
|
-
*/
|
|
456
|
-
export const has: {
|
|
457
|
-
(key: string): <V>(self: Trie<V>) => boolean
|
|
458
|
-
<V>(self: Trie<V>, key: string): boolean
|
|
459
|
-
} = TR.has
|
|
460
|
-
|
|
461
|
-
/**
|
|
462
|
-
* Checks if the `Trie` contains any entries.
|
|
463
|
-
*
|
|
464
|
-
* @example
|
|
465
|
-
* ```ts
|
|
466
|
-
* import * as assert from "node:assert"
|
|
467
|
-
* import { Trie } from "effect"
|
|
468
|
-
*
|
|
469
|
-
* const trie = Trie.empty<number>()
|
|
470
|
-
* const trie1 = trie.pipe(Trie.insert("ma", 0))
|
|
471
|
-
*
|
|
472
|
-
* assert.equal(Trie.isEmpty(trie), true)
|
|
473
|
-
* assert.equal(Trie.isEmpty(trie1), false)
|
|
474
|
-
* ```
|
|
475
|
-
*
|
|
476
|
-
* @since 2.0.0
|
|
477
|
-
* @category elements
|
|
478
|
-
*/
|
|
479
|
-
export const isEmpty: <V>(self: Trie<V>) => boolean = TR.isEmpty
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* Unsafely lookup the value for the specified key in the `Trie`.
|
|
483
|
-
*
|
|
484
|
-
* `unsafeGet` will throw if the key is not found. Use `get` instead to safely
|
|
485
|
-
* get a value from the `Trie`.
|
|
486
|
-
*
|
|
487
|
-
* @example
|
|
488
|
-
* ```ts
|
|
489
|
-
* import * as assert from "node:assert"
|
|
490
|
-
* import { Trie } from "effect"
|
|
491
|
-
*
|
|
492
|
-
* const trie = Trie.empty<number>().pipe(
|
|
493
|
-
* Trie.insert("call", 0),
|
|
494
|
-
* Trie.insert("me", 1)
|
|
495
|
-
* )
|
|
496
|
-
*
|
|
497
|
-
* assert.throws(() => Trie.unsafeGet(trie, "mae"))
|
|
498
|
-
* ```
|
|
499
|
-
*
|
|
500
|
-
* @since 2.0.0
|
|
501
|
-
* @category unsafe
|
|
502
|
-
*/
|
|
503
|
-
export const unsafeGet: {
|
|
504
|
-
(key: string): <V>(self: Trie<V>) => V
|
|
505
|
-
<V>(self: Trie<V>, key: string): V
|
|
506
|
-
} = TR.unsafeGet
|
|
507
|
-
|
|
508
|
-
/**
|
|
509
|
-
* Remove the entry for the specified key in the `Trie`.
|
|
510
|
-
*
|
|
511
|
-
* @example
|
|
512
|
-
* ```ts
|
|
513
|
-
* import * as assert from "node:assert"
|
|
514
|
-
* import { Trie, Option } from "effect"
|
|
515
|
-
*
|
|
516
|
-
* const trie = Trie.empty<number>().pipe(
|
|
517
|
-
* Trie.insert("call", 0),
|
|
518
|
-
* Trie.insert("me", 1),
|
|
519
|
-
* Trie.insert("mind", 2),
|
|
520
|
-
* Trie.insert("mid", 3)
|
|
521
|
-
* )
|
|
522
|
-
*
|
|
523
|
-
* const trie1 = trie.pipe(Trie.remove("call"))
|
|
524
|
-
* const trie2 = trie1.pipe(Trie.remove("mea"))
|
|
525
|
-
*
|
|
526
|
-
* assert.deepStrictEqual(Trie.get(trie, "call"), Option.some(0))
|
|
527
|
-
* assert.deepStrictEqual(Trie.get(trie1, "call"), Option.none())
|
|
528
|
-
* assert.deepStrictEqual(Trie.get(trie2, "call"), Option.none())
|
|
529
|
-
* ```
|
|
530
|
-
*
|
|
531
|
-
* @since 2.0.0
|
|
532
|
-
* @category mutations
|
|
533
|
-
*/
|
|
534
|
-
export const remove: {
|
|
535
|
-
(key: string): <V>(self: Trie<V>) => Trie<V>
|
|
536
|
-
<V>(self: Trie<V>, key: string): Trie<V>
|
|
537
|
-
} = TR.remove
|
|
538
|
-
|
|
539
|
-
/**
|
|
540
|
-
* Reduce a state over the entries of the `Trie`.
|
|
541
|
-
*
|
|
542
|
-
* @example
|
|
543
|
-
* ```ts
|
|
544
|
-
* import * as assert from "node:assert"
|
|
545
|
-
* import { Trie } from "effect"
|
|
546
|
-
*
|
|
547
|
-
* const trie = Trie.empty<number>().pipe(
|
|
548
|
-
* Trie.insert("shells", 0),
|
|
549
|
-
* Trie.insert("sells", 1),
|
|
550
|
-
* Trie.insert("she", 2)
|
|
551
|
-
* )
|
|
552
|
-
*
|
|
553
|
-
* assert.equal(
|
|
554
|
-
* trie.pipe(
|
|
555
|
-
* Trie.reduce(0, (acc, n) => acc + n)
|
|
556
|
-
* ),
|
|
557
|
-
* 3
|
|
558
|
-
* )
|
|
559
|
-
* assert.equal(
|
|
560
|
-
* trie.pipe(
|
|
561
|
-
* Trie.reduce(10, (acc, n) => acc + n)
|
|
562
|
-
* ),
|
|
563
|
-
* 13
|
|
564
|
-
* )
|
|
565
|
-
* assert.equal(
|
|
566
|
-
* trie.pipe(
|
|
567
|
-
* Trie.reduce("", (acc, _, key) => acc + key)
|
|
568
|
-
* ),
|
|
569
|
-
* "sellssheshells"
|
|
570
|
-
* )
|
|
571
|
-
* ```
|
|
572
|
-
*
|
|
573
|
-
* @since 2.0.0
|
|
574
|
-
* @category folding
|
|
575
|
-
*/
|
|
576
|
-
export const reduce: {
|
|
577
|
-
<Z, V>(zero: Z, f: (accumulator: Z, value: V, key: string) => Z): (self: Trie<V>) => Z
|
|
578
|
-
<Z, V>(self: Trie<V>, zero: Z, f: (accumulator: Z, value: V, key: string) => Z): Z
|
|
579
|
-
} = TR.reduce
|
|
580
|
-
|
|
581
|
-
/**
|
|
582
|
-
* Maps over the entries of the `Trie` using the specified function.
|
|
583
|
-
*
|
|
584
|
-
* @example
|
|
585
|
-
* ```ts
|
|
586
|
-
* import * as assert from "node:assert"
|
|
587
|
-
* import { Trie, Equal } from "effect"
|
|
588
|
-
*
|
|
589
|
-
* const trie = Trie.empty<number>().pipe(
|
|
590
|
-
* Trie.insert("shells", 0),
|
|
591
|
-
* Trie.insert("sells", 1),
|
|
592
|
-
* Trie.insert("she", 2)
|
|
593
|
-
* )
|
|
594
|
-
*
|
|
595
|
-
* const trieMapV = Trie.empty<number>().pipe(
|
|
596
|
-
* Trie.insert("shells", 1),
|
|
597
|
-
* Trie.insert("sells", 2),
|
|
598
|
-
* Trie.insert("she", 3)
|
|
599
|
-
* )
|
|
600
|
-
*
|
|
601
|
-
* const trieMapK = Trie.empty<number>().pipe(
|
|
602
|
-
* Trie.insert("shells", 6),
|
|
603
|
-
* Trie.insert("sells", 5),
|
|
604
|
-
* Trie.insert("she", 3)
|
|
605
|
-
* )
|
|
606
|
-
*
|
|
607
|
-
* assert.equal(Equal.equals(Trie.map(trie, (v) => v + 1), trieMapV), true)
|
|
608
|
-
* assert.equal(Equal.equals(Trie.map(trie, (_, k) => k.length), trieMapK), true)
|
|
609
|
-
* ```
|
|
610
|
-
*
|
|
611
|
-
* @since 2.0.0
|
|
612
|
-
* @category folding
|
|
613
|
-
*/
|
|
614
|
-
export const map: {
|
|
615
|
-
<A, V>(f: (value: V, key: string) => A): (self: Trie<V>) => Trie<A>
|
|
616
|
-
<V, A>(self: Trie<V>, f: (value: V, key: string) => A): Trie<A>
|
|
617
|
-
} = TR.map
|
|
618
|
-
|
|
619
|
-
/**
|
|
620
|
-
* Filters entries out of a `Trie` using the specified predicate.
|
|
621
|
-
*
|
|
622
|
-
* @example
|
|
623
|
-
* ```ts
|
|
624
|
-
* import * as assert from "node:assert"
|
|
625
|
-
* import { Trie, Equal } from "effect"
|
|
626
|
-
*
|
|
627
|
-
* const trie = Trie.empty<number>().pipe(
|
|
628
|
-
* Trie.insert("shells", 0),
|
|
629
|
-
* Trie.insert("sells", 1),
|
|
630
|
-
* Trie.insert("she", 2)
|
|
631
|
-
* )
|
|
632
|
-
*
|
|
633
|
-
* const trieMapV = Trie.empty<number>().pipe(
|
|
634
|
-
* Trie.insert("she", 2)
|
|
635
|
-
* )
|
|
636
|
-
*
|
|
637
|
-
* const trieMapK = Trie.empty<number>().pipe(
|
|
638
|
-
* Trie.insert("shells", 0),
|
|
639
|
-
* Trie.insert("sells", 1)
|
|
640
|
-
* )
|
|
641
|
-
*
|
|
642
|
-
* assert.equal(Equal.equals(Trie.filter(trie, (v) => v > 1), trieMapV), true)
|
|
643
|
-
* assert.equal(Equal.equals(Trie.filter(trie, (_, k) => k.length > 3), trieMapK), true)
|
|
644
|
-
* ```
|
|
645
|
-
*
|
|
646
|
-
* @since 2.0.0
|
|
647
|
-
* @category filtering
|
|
648
|
-
*/
|
|
649
|
-
export const filter: {
|
|
650
|
-
<A, B extends A>(f: (a: NoInfer<A>, k: string) => a is B): (self: Trie<A>) => Trie<B>
|
|
651
|
-
<A>(f: (a: NoInfer<A>, k: string) => boolean): (self: Trie<A>) => Trie<A>
|
|
652
|
-
<A, B extends A>(self: Trie<A>, f: (a: A, k: string) => a is B): Trie<B>
|
|
653
|
-
<A>(self: Trie<A>, f: (a: A, k: string) => boolean): Trie<A>
|
|
654
|
-
} = TR.filter
|
|
655
|
-
|
|
656
|
-
/**
|
|
657
|
-
* Maps over the entries of the `Trie` using the specified partial function
|
|
658
|
-
* and filters out `None` values.
|
|
659
|
-
*
|
|
660
|
-
* @example
|
|
661
|
-
* ```ts
|
|
662
|
-
* import * as assert from "node:assert"
|
|
663
|
-
* import { Trie, Equal, Option } from "effect"
|
|
664
|
-
*
|
|
665
|
-
* const trie = Trie.empty<number>().pipe(
|
|
666
|
-
* Trie.insert("shells", 0),
|
|
667
|
-
* Trie.insert("sells", 1),
|
|
668
|
-
* Trie.insert("she", 2)
|
|
669
|
-
* )
|
|
670
|
-
*
|
|
671
|
-
* const trieMapV = Trie.empty<number>().pipe(
|
|
672
|
-
* Trie.insert("she", 2)
|
|
673
|
-
* )
|
|
674
|
-
*
|
|
675
|
-
* const trieMapK = Trie.empty<number>().pipe(
|
|
676
|
-
* Trie.insert("shells", 0),
|
|
677
|
-
* Trie.insert("sells", 1)
|
|
678
|
-
* )
|
|
679
|
-
*
|
|
680
|
-
* assert.equal(Equal.equals(Trie.filterMap(trie, (v) => v > 1 ? Option.some(v) : Option.none()), trieMapV), true)
|
|
681
|
-
* assert.equal(
|
|
682
|
-
* Equal.equals(Trie.filterMap(trie, (v, k) => k.length > 3 ? Option.some(v) : Option.none()), trieMapK),
|
|
683
|
-
* true
|
|
684
|
-
* )
|
|
685
|
-
* ```
|
|
686
|
-
*
|
|
687
|
-
* @since 2.0.0
|
|
688
|
-
* @category filtering
|
|
689
|
-
*/
|
|
690
|
-
export const filterMap: {
|
|
691
|
-
<A, B>(f: (value: A, key: string) => Option<B>): (self: Trie<A>) => Trie<B>
|
|
692
|
-
<A, B>(self: Trie<A>, f: (value: A, key: string) => Option<B>): Trie<B>
|
|
693
|
-
} = TR.filterMap
|
|
694
|
-
|
|
695
|
-
/**
|
|
696
|
-
* Filters out `None` values from a `Trie` of `Options`s.
|
|
697
|
-
*
|
|
698
|
-
* @example
|
|
699
|
-
* ```ts
|
|
700
|
-
* import * as assert from "node:assert"
|
|
701
|
-
* import { Trie, Equal, Option } from "effect"
|
|
702
|
-
*
|
|
703
|
-
* const trie = Trie.empty<Option.Option<number>>().pipe(
|
|
704
|
-
* Trie.insert("shells", Option.some(0)),
|
|
705
|
-
* Trie.insert("sells", Option.none()),
|
|
706
|
-
* Trie.insert("she", Option.some(2))
|
|
707
|
-
* )
|
|
708
|
-
*
|
|
709
|
-
* const trieMapV = Trie.empty<number>().pipe(
|
|
710
|
-
* Trie.insert("shells", 0),
|
|
711
|
-
* Trie.insert("she", 2)
|
|
712
|
-
* )
|
|
713
|
-
*
|
|
714
|
-
* assert.equal(Equal.equals(Trie.compact(trie), trieMapV), true)
|
|
715
|
-
* ```
|
|
716
|
-
*
|
|
717
|
-
* @since 2.0.0
|
|
718
|
-
* @category filtering
|
|
719
|
-
*/
|
|
720
|
-
export const compact: <A>(self: Trie<Option<A>>) => Trie<A> = TR.compact
|
|
721
|
-
|
|
722
|
-
/**
|
|
723
|
-
* Applies the specified function to the entries of the `Trie`.
|
|
724
|
-
*
|
|
725
|
-
* @example
|
|
726
|
-
* ```ts
|
|
727
|
-
* import * as assert from "node:assert"
|
|
728
|
-
* import { Trie } from "effect"
|
|
729
|
-
*
|
|
730
|
-
* let value = 0
|
|
731
|
-
*
|
|
732
|
-
* Trie.empty<number>().pipe(
|
|
733
|
-
* Trie.insert("shells", 0),
|
|
734
|
-
* Trie.insert("sells", 1),
|
|
735
|
-
* Trie.insert("she", 2),
|
|
736
|
-
* Trie.forEach((n, key) => {
|
|
737
|
-
* value += n + key.length
|
|
738
|
-
* })
|
|
739
|
-
* )
|
|
740
|
-
*
|
|
741
|
-
* assert.equal(value, 17)
|
|
742
|
-
* ```
|
|
743
|
-
*
|
|
744
|
-
* @since 2.0.0
|
|
745
|
-
* @category traversing
|
|
746
|
-
*/
|
|
747
|
-
export const forEach: {
|
|
748
|
-
<V>(f: (value: V, key: string) => void): (self: Trie<V>) => void
|
|
749
|
-
<V>(self: Trie<V>, f: (value: V, key: string) => void): void
|
|
750
|
-
} = TR.forEach
|
|
751
|
-
|
|
752
|
-
/**
|
|
753
|
-
* Updates the value of the specified key within the `Trie` if it exists.
|
|
754
|
-
*
|
|
755
|
-
* @example
|
|
756
|
-
* ```ts
|
|
757
|
-
* import * as assert from "node:assert"
|
|
758
|
-
* import { Trie, Equal, Option } from "effect"
|
|
759
|
-
*
|
|
760
|
-
* const trie = Trie.empty<number>().pipe(
|
|
761
|
-
* Trie.insert("shells", 0),
|
|
762
|
-
* Trie.insert("sells", 1),
|
|
763
|
-
* Trie.insert("she", 2)
|
|
764
|
-
* )
|
|
765
|
-
*
|
|
766
|
-
* assert.deepStrictEqual(trie.pipe(Trie.modify("she", (v) => v + 10), Trie.get("she")), Option.some(12))
|
|
767
|
-
*
|
|
768
|
-
* assert.equal(Equal.equals(trie.pipe(Trie.modify("me", (v) => v)), trie), true)
|
|
769
|
-
* ```
|
|
770
|
-
*
|
|
771
|
-
* @since 2.0.0
|
|
772
|
-
* @category mutations
|
|
773
|
-
*/
|
|
774
|
-
export const modify: {
|
|
775
|
-
<V1, V>(key: string, f: (v: V) => V1): (self: Trie<V>) => Trie<V1 | V>
|
|
776
|
-
<V1, V>(self: Trie<V>, key: string, f: (v: V) => V1): Trie<V | V1>
|
|
777
|
-
} = TR.modify
|
|
778
|
-
|
|
779
|
-
/**
|
|
780
|
-
* Removes all entries in the `Trie` which have the specified keys.
|
|
781
|
-
*
|
|
782
|
-
* @example
|
|
783
|
-
* ```ts
|
|
784
|
-
* import * as assert from "node:assert"
|
|
785
|
-
* import { Trie, Equal } from "effect"
|
|
786
|
-
*
|
|
787
|
-
* const trie = Trie.empty<number>().pipe(
|
|
788
|
-
* Trie.insert("shells", 0),
|
|
789
|
-
* Trie.insert("sells", 1),
|
|
790
|
-
* Trie.insert("she", 2)
|
|
791
|
-
* )
|
|
792
|
-
*
|
|
793
|
-
* assert.equal(
|
|
794
|
-
* Equal.equals(trie.pipe(Trie.removeMany(["she", "sells"])), Trie.empty<number>().pipe(Trie.insert("shells", 0))),
|
|
795
|
-
* true
|
|
796
|
-
* )
|
|
797
|
-
* ```
|
|
798
|
-
*
|
|
799
|
-
* @since 2.0.0
|
|
800
|
-
* @category mutations
|
|
801
|
-
*/
|
|
802
|
-
export const removeMany: {
|
|
803
|
-
(keys: Iterable<string>): <V>(self: Trie<V>) => Trie<V>
|
|
804
|
-
<V>(self: Trie<V>, keys: Iterable<string>): Trie<V>
|
|
805
|
-
} = TR.removeMany
|
|
806
|
-
|
|
807
|
-
/**
|
|
808
|
-
* Insert multiple entries in the `Trie` at once.
|
|
809
|
-
*
|
|
810
|
-
* @example
|
|
811
|
-
* ```ts
|
|
812
|
-
* import * as assert from "node:assert"
|
|
813
|
-
* import { Trie, Equal } from "effect"
|
|
814
|
-
*
|
|
815
|
-
* const trie = Trie.empty<number>().pipe(
|
|
816
|
-
* Trie.insert("shells", 0),
|
|
817
|
-
* Trie.insert("sells", 1),
|
|
818
|
-
* Trie.insert("she", 2)
|
|
819
|
-
* )
|
|
820
|
-
*
|
|
821
|
-
* const trieInsert = Trie.empty<number>().pipe(
|
|
822
|
-
* Trie.insert("shells", 0),
|
|
823
|
-
* Trie.insertMany(
|
|
824
|
-
* [["sells", 1], ["she", 2]]
|
|
825
|
-
* )
|
|
826
|
-
* )
|
|
827
|
-
*
|
|
828
|
-
* assert.equal(
|
|
829
|
-
* Equal.equals(trie, trieInsert),
|
|
830
|
-
* true
|
|
831
|
-
* )
|
|
832
|
-
* ```
|
|
833
|
-
*
|
|
834
|
-
* @since 2.0.0
|
|
835
|
-
* @category mutations
|
|
836
|
-
*/
|
|
837
|
-
export const insertMany: {
|
|
838
|
-
<V1>(iter: Iterable<[string, V1]>): <V>(self: Trie<V>) => Trie<V | V1>
|
|
839
|
-
<V1, V>(self: Trie<V>, iter: Iterable<[string, V1]>): Trie<V | V1>
|
|
840
|
-
} = TR.insertMany
|