@livestore/utils 0.4.0-dev.9 → 0.5.0-dev.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/.tsbuildinfo +1 -0
- package/dist/NoopTracer.d.ts +7 -8
- package/dist/NoopTracer.d.ts.map +1 -1
- package/dist/NoopTracer.js +13 -15
- package/dist/NoopTracer.js.map +1 -1
- package/dist/NoopTracer.test.d.ts +2 -0
- package/dist/NoopTracer.test.d.ts.map +1 -0
- package/dist/NoopTracer.test.js +17 -0
- package/dist/NoopTracer.test.js.map +1 -0
- package/dist/binary.js +1 -1
- package/dist/binary.js.map +1 -1
- package/dist/browser/Opfs/Opfs.d.ts +201 -0
- package/dist/browser/Opfs/Opfs.d.ts.map +1 -0
- package/dist/browser/Opfs/Opfs.js +170 -0
- package/dist/browser/Opfs/Opfs.js.map +1 -0
- package/dist/browser/Opfs/debug-utils.d.ts +20 -0
- package/dist/browser/Opfs/debug-utils.d.ts.map +1 -0
- package/dist/browser/Opfs/debug-utils.js +95 -0
- package/dist/browser/Opfs/debug-utils.js.map +1 -0
- package/dist/browser/Opfs/mod.d.ts +4 -0
- package/dist/browser/Opfs/mod.d.ts.map +1 -0
- package/dist/browser/Opfs/mod.js +4 -0
- package/dist/browser/Opfs/mod.js.map +1 -0
- package/dist/browser/Opfs/utils.d.ts +71 -0
- package/dist/browser/Opfs/utils.d.ts.map +1 -0
- package/dist/browser/Opfs/utils.js +227 -0
- package/dist/browser/Opfs/utils.js.map +1 -0
- package/dist/browser/QuotaExceededError.d.ts +60 -0
- package/dist/browser/QuotaExceededError.d.ts.map +1 -0
- package/dist/browser/QuotaExceededError.js +2 -0
- package/dist/browser/QuotaExceededError.js.map +1 -0
- package/dist/browser/WebChannelBrowser.d.ts +22 -0
- package/dist/browser/WebChannelBrowser.d.ts.map +1 -0
- package/dist/browser/WebChannelBrowser.js +87 -0
- package/dist/browser/WebChannelBrowser.js.map +1 -0
- package/dist/browser/WebError.d.ts +389 -0
- package/dist/browser/WebError.d.ts.map +1 -0
- package/dist/browser/WebError.js +423 -0
- package/dist/browser/WebError.js.map +1 -0
- package/dist/browser/WebError.test.d.ts +2 -0
- package/dist/browser/WebError.test.d.ts.map +1 -0
- package/dist/browser/WebError.test.js +46 -0
- package/dist/browser/WebError.test.js.map +1 -0
- package/dist/browser/WebLock.d.ts.map +1 -0
- package/dist/{effect → browser}/WebLock.js +21 -21
- package/dist/browser/WebLock.js.map +1 -0
- package/dist/{browser.d.ts → browser/detect.d.ts} +1 -1
- package/dist/browser/detect.d.ts.map +1 -0
- package/dist/{browser.js → browser/detect.js} +7 -7
- package/dist/browser/detect.js.map +1 -0
- package/dist/browser/mod.d.ts +8 -0
- package/dist/browser/mod.d.ts.map +1 -0
- package/dist/browser/mod.js +8 -0
- package/dist/browser/mod.js.map +1 -0
- package/dist/cuid/cuid.browser.js +1 -1
- package/dist/cuid/cuid.browser.js.map +1 -1
- package/dist/cuid/cuid.node.js +1 -1
- package/dist/cuid/cuid.node.js.map +1 -1
- package/dist/effect/Debug.d.ts +38 -0
- package/dist/effect/Debug.d.ts.map +1 -0
- package/dist/effect/Debug.js +350 -0
- package/dist/effect/Debug.js.map +1 -0
- package/dist/effect/Effect.d.ts +91 -22
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +126 -38
- package/dist/effect/Effect.js.map +1 -1
- package/dist/effect/Effect.test.d.ts +2 -0
- package/dist/effect/Effect.test.d.ts.map +1 -0
- package/dist/effect/Effect.test.js +72 -0
- package/dist/effect/Effect.test.js.map +1 -0
- package/dist/effect/Error.d.ts +4 -6
- package/dist/effect/Error.d.ts.map +1 -1
- package/dist/effect/Error.js +1 -1
- package/dist/effect/Error.js.map +1 -1
- package/dist/effect/Logger.d.ts +0 -6
- package/dist/effect/Logger.d.ts.map +1 -1
- package/dist/effect/Logger.js +0 -32
- package/dist/effect/Logger.js.map +1 -1
- package/dist/effect/OtelTracer.d.ts +1 -1
- package/dist/effect/OtelTracer.d.ts.map +1 -1
- package/dist/effect/OtelTracer.js +2 -3
- package/dist/effect/OtelTracer.js.map +1 -1
- package/dist/effect/RpcClient.d.ts +7 -7
- package/dist/effect/RpcClient.d.ts.map +1 -1
- package/dist/effect/RpcClient.js +74 -54
- package/dist/effect/RpcClient.js.map +1 -1
- package/dist/effect/Schedule.d.ts +1 -1
- package/dist/effect/Schedule.d.ts.map +1 -1
- package/dist/effect/Schedule.js +2 -2
- package/dist/effect/Schedule.js.map +1 -1
- package/dist/effect/Schema/debug-diff.d.ts +1 -1
- package/dist/effect/Schema/debug-diff.d.ts.map +1 -1
- package/dist/effect/Schema/debug-diff.js +9 -10
- package/dist/effect/Schema/debug-diff.js.map +1 -1
- package/dist/effect/Schema/debug-diff.test.js +7 -4
- package/dist/effect/Schema/debug-diff.test.js.map +1 -1
- package/dist/effect/Schema/index.d.ts +28 -18
- package/dist/effect/Schema/index.d.ts.map +1 -1
- package/dist/effect/Schema/index.js +55 -28
- package/dist/effect/Schema/index.js.map +1 -1
- package/dist/effect/Stream.d.ts +13 -5
- package/dist/effect/Stream.d.ts.map +1 -1
- package/dist/effect/Stream.js +19 -12
- package/dist/effect/Stream.js.map +1 -1
- package/dist/effect/Stream.test.js +12 -12
- package/dist/effect/Stream.test.js.map +1 -1
- package/dist/effect/Subscribable.d.ts +9 -3
- package/dist/effect/Subscribable.d.ts.map +1 -1
- package/dist/effect/Subscribable.js +20 -35
- package/dist/effect/Subscribable.js.map +1 -1
- package/dist/effect/SubscriptionRef.d.ts +5 -6
- package/dist/effect/SubscriptionRef.d.ts.map +1 -1
- package/dist/effect/SubscriptionRef.js +2 -3
- package/dist/effect/SubscriptionRef.js.map +1 -1
- package/dist/effect/TaskTracing.d.ts +1 -1
- package/dist/effect/TaskTracing.d.ts.map +1 -1
- package/dist/effect/TaskTracing.js +12 -16
- package/dist/effect/TaskTracing.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.d.ts +11 -30
- package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -1
- package/dist/effect/WebChannel/WebChannel.js +70 -125
- package/dist/effect/WebChannel/WebChannel.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.test.js +16 -16
- package/dist/effect/WebChannel/WebChannel.test.js.map +1 -1
- package/dist/effect/WebChannel/broadcastChannelWithAck.d.ts.map +1 -1
- package/dist/effect/WebChannel/broadcastChannelWithAck.js +20 -13
- package/dist/effect/WebChannel/broadcastChannelWithAck.js.map +1 -1
- package/dist/effect/WebChannel/common.d.ts +17 -18
- package/dist/effect/WebChannel/common.d.ts.map +1 -1
- package/dist/effect/WebChannel/common.js +7 -7
- package/dist/effect/WebChannel/common.js.map +1 -1
- package/dist/effect/WebSocket.d.ts +4 -6
- package/dist/effect/WebSocket.d.ts.map +1 -1
- package/dist/effect/WebSocket.js +17 -17
- package/dist/effect/WebSocket.js.map +1 -1
- package/dist/effect/WebSocket.test.js +2 -2
- package/dist/effect/WebSocket.test.js.map +1 -1
- package/dist/effect/mod.browser-build.test.d.ts +2 -0
- package/dist/effect/mod.browser-build.test.d.ts.map +1 -0
- package/dist/effect/mod.browser-build.test.js +18 -0
- package/dist/effect/mod.browser-build.test.js.map +1 -0
- package/dist/effect/mod.d.ts +30 -0
- package/dist/effect/mod.d.ts.map +1 -0
- package/dist/effect/mod.js +30 -0
- package/dist/effect/mod.js.map +1 -0
- package/dist/effect/spanEvent.d.ts +12 -0
- package/dist/effect/spanEvent.d.ts.map +1 -0
- package/dist/effect/spanEvent.js +12 -0
- package/dist/effect/spanEvent.js.map +1 -0
- package/dist/effect/spanEvent.test.d.ts +2 -0
- package/dist/effect/spanEvent.test.d.ts.map +1 -0
- package/dist/effect/spanEvent.test.js +79 -0
- package/dist/effect/spanEvent.test.js.map +1 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +1 -1
- package/dist/env.js.map +1 -1
- package/dist/fast-deep-equal.d.ts.map +1 -1
- package/dist/fast-deep-equal.js +9 -10
- package/dist/fast-deep-equal.js.map +1 -1
- package/dist/global.d.ts +3 -0
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js.map +1 -1
- package/dist/misc.d.ts +9 -1
- package/dist/misc.d.ts.map +1 -1
- package/dist/misc.js +12 -4
- package/dist/misc.js.map +1 -1
- package/dist/mod.d.ts +177 -20
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +159 -22
- package/dist/mod.js.map +1 -1
- package/dist/node/mod.d.ts +45 -6
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +51 -9
- package/dist/node/mod.js.map +1 -1
- package/dist/object/index.d.ts +0 -9
- package/dist/object/index.d.ts.map +1 -1
- package/dist/object/index.js +0 -9
- package/dist/object/index.js.map +1 -1
- package/dist/object/stringify-object.js +2 -2
- package/dist/object/stringify-object.js.map +1 -1
- package/dist/object/stringify-object.test.js.map +1 -1
- package/dist/qr.d.ts +38 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +109 -0
- package/dist/qr.js.map +1 -0
- package/dist/set.js +1 -1
- package/dist/set.js.map +1 -1
- package/dist/string.d.ts +0 -2
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +0 -2
- package/dist/string.js.map +1 -1
- package/package.json +61 -55
- package/src/NoopTracer.test.ts +20 -0
- package/src/NoopTracer.ts +28 -37
- package/src/binary.ts +1 -1
- package/src/browser/Opfs/Opfs.ts +463 -0
- package/src/browser/Opfs/debug-utils.ts +154 -0
- package/src/browser/Opfs/mod.ts +3 -0
- package/src/browser/Opfs/utils.ts +297 -0
- package/src/browser/QuotaExceededError.ts +60 -0
- package/src/browser/WebChannelBrowser.ts +145 -0
- package/src/browser/WebError.test.ts +66 -0
- package/src/browser/WebError.ts +587 -0
- package/src/{effect → browser}/WebLock.ts +27 -28
- package/src/{browser.ts → browser/detect.ts} +6 -6
- package/src/browser/mod.ts +8 -0
- package/src/cuid/cuid.browser.ts +1 -1
- package/src/cuid/cuid.node.ts +1 -1
- package/src/effect/Debug.ts +477 -0
- package/src/effect/Effect.test.ts +117 -0
- package/src/effect/Effect.ts +174 -79
- package/src/effect/Error.ts +1 -1
- package/src/effect/Logger.ts +0 -48
- package/src/effect/OtelTracer.ts +2 -3
- package/src/effect/RpcClient.ts +85 -65
- package/src/effect/Schedule.ts +4 -5
- package/src/effect/Schema/debug-diff.test.ts +7 -7
- package/src/effect/Schema/debug-diff.ts +11 -12
- package/src/effect/Schema/index.ts +121 -57
- package/src/effect/Stream.test.ts +14 -13
- package/src/effect/Stream.ts +23 -16
- package/src/effect/Subscribable.ts +31 -42
- package/src/effect/SubscriptionRef.ts +9 -13
- package/src/effect/TaskTracing.ts +13 -16
- package/src/effect/WebChannel/WebChannel.test.ts +24 -24
- package/src/effect/WebChannel/WebChannel.ts +102 -192
- package/src/effect/WebChannel/broadcastChannelWithAck.ts +25 -15
- package/src/effect/WebChannel/common.ts +16 -17
- package/src/effect/WebSocket.test.ts +2 -2
- package/src/effect/WebSocket.ts +20 -16
- package/src/effect/mod.browser-build.test.ts +19 -0
- package/src/effect/{index.ts → mod.ts} +43 -69
- package/src/effect/spanEvent.test.ts +92 -0
- package/src/effect/spanEvent.ts +17 -0
- package/src/env.ts +2 -1
- package/src/fast-deep-equal.ts +9 -10
- package/src/global.ts +4 -2
- package/src/misc.ts +13 -5
- package/src/mod.ts +188 -32
- package/src/node/mod.ts +57 -12
- package/src/object/index.ts +0 -24
- package/src/object/stringify-object.test.ts +1 -0
- package/src/object/stringify-object.ts +2 -2
- package/src/qr.ts +125 -0
- package/src/set.ts +1 -1
- package/src/string.ts +0 -3
- package/dist/.tsbuildinfo.json +0 -1
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js.map +0 -1
- package/dist/effect/BucketQueue.d.ts +0 -20
- package/dist/effect/BucketQueue.d.ts.map +0 -1
- package/dist/effect/BucketQueue.js +0 -34
- package/dist/effect/BucketQueue.js.map +0 -1
- package/dist/effect/Scheduler.d.ts +0 -4
- package/dist/effect/Scheduler.d.ts.map +0 -1
- package/dist/effect/Scheduler.js +0 -9
- package/dist/effect/Scheduler.js.map +0 -1
- package/dist/effect/ServiceContext.d.ts +0 -37
- package/dist/effect/ServiceContext.d.ts.map +0 -1
- package/dist/effect/ServiceContext.js +0 -55
- package/dist/effect/ServiceContext.js.map +0 -1
- package/dist/effect/WebLock.d.ts.map +0 -1
- package/dist/effect/WebLock.js.map +0 -1
- package/dist/effect/index.d.ts +0 -32
- package/dist/effect/index.d.ts.map +0 -1
- package/dist/effect/index.js +0 -35
- package/dist/effect/index.js.map +0 -1
- package/dist/guards.d.ts +0 -6
- package/dist/guards.d.ts.map +0 -1
- package/dist/guards.js +0 -6
- package/dist/guards.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts +0 -4
- package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js +0 -122
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts +0 -2
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +0 -218
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts +0 -84
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js +0 -68
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts +0 -2
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js +0 -52
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts +0 -23
- package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessWorker.js +0 -138
- package/dist/node/ChildProcessRunner/ChildProcessWorker.js.map +0 -1
- package/dist/object/omit.d.ts +0 -3
- package/dist/object/omit.d.ts.map +0 -1
- package/dist/object/omit.js +0 -14
- package/dist/object/omit.js.map +0 -1
- package/dist/object/pick.d.ts +0 -14
- package/dist/object/pick.d.ts.map +0 -1
- package/dist/object/pick.js +0 -17
- package/dist/object/pick.js.map +0 -1
- package/dist/time.d.ts +0 -12
- package/dist/time.d.ts.map +0 -1
- package/dist/time.js +0 -22
- package/dist/time.js.map +0 -1
- package/src/effect/BucketQueue.ts +0 -49
- package/src/effect/Scheduler.ts +0 -13
- package/src/effect/ServiceContext.ts +0 -108
- package/src/guards.ts +0 -8
- package/src/node/ChildProcessRunner/ChildProcessRunner.ts +0 -135
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +0 -302
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +0 -78
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +0 -66
- package/src/node/ChildProcessRunner/ChildProcessWorker.ts +0 -168
- package/src/object/omit.ts +0 -17
- package/src/object/pick.ts +0 -27
- package/src/time.ts +0 -25
- /package/dist/{effect → browser}/WebLock.d.ts +0 -0
package/dist/mod.js
CHANGED
|
@@ -1,38 +1,63 @@
|
|
|
1
1
|
export { default as prettyBytes } from 'pretty-bytes';
|
|
2
2
|
export * as base64 from "./base64.js";
|
|
3
3
|
export * from "./binary.js";
|
|
4
|
-
export * from "./browser.js";
|
|
5
4
|
export * from "./Deferred.js";
|
|
6
5
|
export * from "./env.js";
|
|
7
6
|
export * from "./fast-deep-equal.js";
|
|
8
|
-
export * from "./guards.js";
|
|
9
7
|
export * from "./misc.js";
|
|
10
8
|
export * from "./NoopTracer.js";
|
|
11
9
|
export * from "./object/index.js";
|
|
12
10
|
export * from "./promise.js";
|
|
11
|
+
export * as QR from "./qr.js";
|
|
13
12
|
export * from "./set.js";
|
|
14
13
|
export * from "./string.js";
|
|
15
|
-
export * from "./time.js";
|
|
16
14
|
import { objectToString } from "./misc.js";
|
|
15
|
+
/** Returns a Promise that resolves after `ms` milliseconds. */
|
|
17
16
|
export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
17
|
+
/**
|
|
18
|
+
* Creates a mutable reference object with a `current` property.
|
|
19
|
+
* Similar to React's `useRef` but works outside of React.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const counter = ref(0)
|
|
24
|
+
* counter.current += 1
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
18
27
|
export const ref = (val) => ({ current: val });
|
|
28
|
+
/**
|
|
29
|
+
* Calls a function `n` times with the current index.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* times(3, (i) => console.log(i)) // logs 0, 1, 2
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
19
36
|
export const times = (n, fn) => {
|
|
20
37
|
for (let i = 0; i < n; i++) {
|
|
21
38
|
fn(i);
|
|
22
39
|
}
|
|
23
40
|
};
|
|
41
|
+
/**
|
|
42
|
+
* Wraps a function call in a try/catch that triggers the debugger on error.
|
|
43
|
+
* Useful for debugging exceptions during development.
|
|
44
|
+
*/
|
|
24
45
|
export const debugCatch = (try_) => {
|
|
25
46
|
try {
|
|
26
47
|
return try_();
|
|
27
48
|
}
|
|
28
49
|
catch (e) {
|
|
29
|
-
//
|
|
50
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for debugging exceptions
|
|
30
51
|
debugger;
|
|
31
52
|
throw e;
|
|
32
53
|
}
|
|
33
54
|
};
|
|
55
|
+
/**
|
|
56
|
+
* Recursively removes `undefined` values from an object or array in place.
|
|
57
|
+
* Mutates the input value.
|
|
58
|
+
*/
|
|
34
59
|
export const recRemoveUndefinedValues = (val) => {
|
|
35
|
-
if (Array.isArray(val)) {
|
|
60
|
+
if (Array.isArray(val) === true) {
|
|
36
61
|
val.forEach(recRemoveUndefinedValues);
|
|
37
62
|
}
|
|
38
63
|
else if (typeof val === 'object') {
|
|
@@ -50,27 +75,52 @@ export const recRemoveUndefinedValues = (val) => {
|
|
|
50
75
|
* Replace non-alphanumeric characters with a dash.
|
|
51
76
|
*/
|
|
52
77
|
export const sluggify = (str, separator = '-') => str.replace(/[^a-zA-Z0-9]/g, separator);
|
|
78
|
+
/**
|
|
79
|
+
* Creates a property accessor function for use in pipelines.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* const users = [{ name: 'Alice' }, { name: 'Bob' }]
|
|
84
|
+
* const names = users.map(prop('name')) // ['Alice', 'Bob']
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
53
87
|
export const prop = (key) => (obj) => obj[key];
|
|
88
|
+
/** Capitalizes the first letter of a string. */
|
|
54
89
|
export const capitalizeFirstLetter = (str) => str.charAt(0).toUpperCase() + str.slice(1);
|
|
55
|
-
export const isReadonlyArray = (value) => Array.isArray(value);
|
|
56
90
|
/**
|
|
57
91
|
* Use this to make assertion at end of if-else chain that all members of a
|
|
58
92
|
* union have been accounted for.
|
|
59
93
|
*/
|
|
60
|
-
export
|
|
61
|
-
//
|
|
94
|
+
export const casesHandled = (unexpectedCase) => {
|
|
95
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for unhandled cases
|
|
62
96
|
debugger;
|
|
63
97
|
throw new Error(`A case was not handled for value: ${truncate(objectToString(unexpectedCase), 1000)}`);
|
|
64
|
-
}
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Throws if the condition is false. Use for runtime assertions that should never fail.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```ts
|
|
104
|
+
* assertNever(user !== undefined, 'User must be loaded')
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
65
107
|
export const assertNever = (failIfFalse, msg) => {
|
|
66
108
|
if (failIfFalse === false) {
|
|
67
|
-
//
|
|
109
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for impossible states
|
|
68
110
|
debugger;
|
|
69
111
|
throw new Error(`This should never happen: ${msg}`);
|
|
70
112
|
}
|
|
71
113
|
};
|
|
114
|
+
/**
|
|
115
|
+
* Identity function that triggers the debugger. Useful for debugging pipelines.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* data.pipe(transform, debuggerPipe, format) // Pauses debugger here
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
72
122
|
export const debuggerPipe = (val) => {
|
|
73
|
-
//
|
|
123
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional: this function's purpose is to trigger debugger
|
|
74
124
|
debugger;
|
|
75
125
|
return val;
|
|
76
126
|
};
|
|
@@ -82,12 +132,35 @@ const truncate = (str, length) => {
|
|
|
82
132
|
return str;
|
|
83
133
|
}
|
|
84
134
|
};
|
|
135
|
+
/**
|
|
136
|
+
* Placeholder for unimplemented code paths. Triggers debugger and throws.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* const parseFormat = (format: Format) => {
|
|
141
|
+
* switch (format) {
|
|
142
|
+
* case 'json': return parseJson
|
|
143
|
+
* case 'xml': return notYetImplemented('XML parsing')
|
|
144
|
+
* }
|
|
145
|
+
* }
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
85
148
|
export const notYetImplemented = (msg) => {
|
|
86
|
-
//
|
|
149
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for unimplemented code paths
|
|
87
150
|
debugger;
|
|
88
151
|
throw new Error(`Not yet implemented: ${msg}`);
|
|
89
152
|
};
|
|
153
|
+
/** A function that does nothing. Useful as a default callback. */
|
|
90
154
|
export const noop = () => { };
|
|
155
|
+
/**
|
|
156
|
+
* If the input is a function, calls it and returns the result. Otherwise returns the value directly.
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```ts
|
|
160
|
+
* unwrapThunk(5) // 5
|
|
161
|
+
* unwrapThunk(() => 5) // 5
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
91
164
|
export const unwrapThunk = (_) => {
|
|
92
165
|
if (typeof _ === 'function') {
|
|
93
166
|
return _();
|
|
@@ -96,16 +169,37 @@ export const unwrapThunk = (_) => {
|
|
|
96
169
|
return _;
|
|
97
170
|
}
|
|
98
171
|
};
|
|
99
|
-
/**
|
|
172
|
+
/**
|
|
173
|
+
* Creates an array of numbers from `start` (inclusive) to `end` (exclusive).
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```ts
|
|
177
|
+
* range(0, 5) // [0, 1, 2, 3, 4]
|
|
178
|
+
* range(3, 7) // [3, 4, 5, 6]
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
100
181
|
export const range = (start, end) => {
|
|
101
182
|
const length = end - start;
|
|
102
183
|
return Array.from({ length }, (_, i) => start + i);
|
|
103
184
|
};
|
|
185
|
+
/**
|
|
186
|
+
* Rate-limits function calls to at most once per `ms` milliseconds.
|
|
187
|
+
* Trailing calls are preserved—if called during the wait period, the function
|
|
188
|
+
* will be called again after the timeout.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* const throttledSave = throttle(() => saveData(), 1000)
|
|
193
|
+
* throttledSave() // Executes immediately
|
|
194
|
+
* throttledSave() // Queued, executes after 1 second
|
|
195
|
+
* throttledSave() // Ignored (already queued)
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
104
198
|
export const throttle = (fn, ms) => {
|
|
105
199
|
let shouldWait = false;
|
|
106
200
|
let shouldCallAgain = false;
|
|
107
201
|
const timeoutFunc = () => {
|
|
108
|
-
if (shouldCallAgain) {
|
|
202
|
+
if (shouldCallAgain === true) {
|
|
109
203
|
fn();
|
|
110
204
|
shouldCallAgain = false;
|
|
111
205
|
setTimeout(timeoutFunc, ms);
|
|
@@ -115,7 +209,7 @@ export const throttle = (fn, ms) => {
|
|
|
115
209
|
}
|
|
116
210
|
};
|
|
117
211
|
return () => {
|
|
118
|
-
if (shouldWait) {
|
|
212
|
+
if (shouldWait === true) {
|
|
119
213
|
shouldCallAgain = true;
|
|
120
214
|
return;
|
|
121
215
|
}
|
|
@@ -124,23 +218,50 @@ export const throttle = (fn, ms) => {
|
|
|
124
218
|
setTimeout(timeoutFunc, ms);
|
|
125
219
|
};
|
|
126
220
|
};
|
|
221
|
+
/**
|
|
222
|
+
* Generates a W3C Trace Context `traceparent` header from an OpenTelemetry span.
|
|
223
|
+
* @see https://www.w3.org/TR/trace-context/#examples-of-http-traceparent-headers
|
|
224
|
+
*/
|
|
127
225
|
export const getTraceParentHeader = (parentSpan) => {
|
|
128
226
|
const spanContext = parentSpan.spanContext();
|
|
129
|
-
// Format: {version}-{trace_id}-{span_id}-{trace_flags}
|
|
130
|
-
// https://www.w3.org/TR/trace-context/#examples-of-http-traceparent-headers
|
|
131
227
|
return `00-${spanContext.traceId}-${spanContext.spanId}-01`;
|
|
132
228
|
};
|
|
229
|
+
/**
|
|
230
|
+
* Asserts that a tagged union value has a specific tag, narrowing its type.
|
|
231
|
+
* Throws if the tag doesn't match.
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```ts
|
|
235
|
+
* type Result = { _tag: 'ok'; value: number } | { _tag: 'error'; message: string }
|
|
236
|
+
* const result: Result = ...
|
|
237
|
+
* const ok = assertTag(result, 'ok') // Type is { _tag: 'ok'; value: number }
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
133
240
|
export const assertTag = (obj, tag) => {
|
|
134
241
|
if (obj._tag !== tag) {
|
|
135
242
|
throw new Error(`Expected tag ${tag} but got ${obj._tag}`);
|
|
136
243
|
}
|
|
137
244
|
return obj;
|
|
138
245
|
};
|
|
246
|
+
/**
|
|
247
|
+
* Memoizes a function by JSON-stringifying its arguments as the cache key.
|
|
248
|
+
* Suitable for functions with serializable arguments.
|
|
249
|
+
*
|
|
250
|
+
* @example
|
|
251
|
+
* ```ts
|
|
252
|
+
* const expensiveCalc = memoizeByStringifyArgs((a: number, b: number) => {
|
|
253
|
+
* console.log('Computing...')
|
|
254
|
+
* return a + b
|
|
255
|
+
* })
|
|
256
|
+
* expensiveCalc(1, 2) // logs 'Computing...', returns 3
|
|
257
|
+
* expensiveCalc(1, 2) // returns 3 (cached, no log)
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
139
260
|
export const memoizeByStringifyArgs = (fn) => {
|
|
140
261
|
const cache = new Map();
|
|
141
262
|
return ((...args) => {
|
|
142
263
|
const key = JSON.stringify(args);
|
|
143
|
-
if (cache.has(key)) {
|
|
264
|
+
if (cache.has(key) === true) {
|
|
144
265
|
return cache.get(key);
|
|
145
266
|
}
|
|
146
267
|
const result = fn(...args);
|
|
@@ -148,10 +269,22 @@ export const memoizeByStringifyArgs = (fn) => {
|
|
|
148
269
|
return result;
|
|
149
270
|
});
|
|
150
271
|
};
|
|
272
|
+
/**
|
|
273
|
+
* Memoizes a single-argument function using reference equality for cache lookup.
|
|
274
|
+
* Suitable for functions where arguments are objects that should be compared by reference.
|
|
275
|
+
*
|
|
276
|
+
* @example
|
|
277
|
+
* ```ts
|
|
278
|
+
* const processUser = memoizeByRef((user: User) => expensiveTransform(user))
|
|
279
|
+
* processUser(userA) // Computes
|
|
280
|
+
* processUser(userA) // Returns cached (same reference)
|
|
281
|
+
* processUser(userB) // Computes (different reference)
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
151
284
|
export const memoizeByRef = (fn) => {
|
|
152
285
|
const cache = new Map();
|
|
153
286
|
return ((arg) => {
|
|
154
|
-
if (cache.has(arg)) {
|
|
287
|
+
if (cache.has(arg) === true) {
|
|
155
288
|
return cache.get(arg);
|
|
156
289
|
}
|
|
157
290
|
const result = fn(arg);
|
|
@@ -159,12 +292,16 @@ export const memoizeByRef = (fn) => {
|
|
|
159
292
|
return result;
|
|
160
293
|
});
|
|
161
294
|
};
|
|
295
|
+
/** Type guard that checks if a value is a non-empty string. */
|
|
162
296
|
export const isNonEmptyString = (str) => {
|
|
163
297
|
return typeof str === 'string' && str.length > 0;
|
|
164
298
|
};
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
299
|
+
/**
|
|
300
|
+
* Type-level utility that removes `undefined` from all property types.
|
|
301
|
+
* Used for compatibility with libraries that don't type optionals as `| undefined`.
|
|
302
|
+
*
|
|
303
|
+
* Note: This is a type-level lie—the runtime value is unchanged.
|
|
304
|
+
*/
|
|
168
305
|
export const omitUndefineds = (rec) => {
|
|
169
306
|
return rec;
|
|
170
307
|
};
|
package/dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,cAAc,aAAa,CAAA;AAC3B,cAAc,
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAK3B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAwC1C,+DAA+D;AAC/D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAEtF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAI,GAAM,EAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;AAEpE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAyB,EAAQ,EAAE;IAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,EAAE,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,IAAa,EAAK,EAAE;IAChD,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAA;IACf,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,kGAAkG;QAClG,QAAQ,CAAA;QACR,MAAM,CAAC,CAAA;IACT,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAQ,EAAQ,EAAE;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACvC,CAAC;SAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YACpC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,SAAS,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,CAAA;AAEjG;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,IAAI,GACf,CAAkC,GAAM,EAAE,EAAE,CAC5C,CAAC,GAAM,EAAQ,EAAE,CACf,GAAG,CAAC,GAAG,CAAC,CAAA;AAEZ,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAExG;;;GAGG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,cAAqB,EAAS,EAAE;IAC3D,6FAA6F;IAC7F,QAAQ,CAAA;IACR,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;AACxG,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAoB,EAAE,GAAY,EAAQ,EAAE;IACtE,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;QAC1B,+FAA+F;QAC/F,QAAQ,CAAA;QACR,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,GAAM,EAAK,EAAE;IAC3C,8GAA8G;IAC9G,QAAQ,CAAA;IACR,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,MAAc,EAAU,EAAE;IACvD,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAA;IACrC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAY,EAAS,EAAE;IACvD,sGAAsG;IACtG,QAAQ,CAAA;IACR,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,kEAAkE;AAClE,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAK5B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,CAAgB,EAAK,EAAE;IACpD,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAQ,CAAS,EAAE,CAAA;IACrB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC,CAAA;AAcD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAY,EAAE;IAC5D,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAA;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAc,EAAE,EAAU,EAAE,EAAE;IACrD,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,EAAE,EAAE,CAAA;YACJ,eAAe,GAAG,KAAK,CAAA;YACvB,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,KAAK,CAAA;QACpB,CAAC;IACH,CAAC,CAAA;IAED,OAAO,GAAG,EAAE;QACV,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,eAAe,GAAG,IAAI,CAAA;YACtB,OAAM;QACR,CAAC;QAED,EAAE,EAAE,CAAA;QACJ,UAAU,GAAG,IAAI,CAAA;QACjB,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAqB,EAAE,EAAE;IAC5D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;IAC5C,OAAO,MAAM,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,CAAA;AAC7D,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,GAAS,EACT,GAAS,EACsB,EAAE;IACjC,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,OAAO,GAAU,CAAA;AACnB,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAoC,EAAK,EAAK,EAAE;IACpF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE9C,OAAO,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACvB,CAAC;QAED,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;QAC1B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACtB,OAAO,MAAM,CAAA;IACf,CAAC,CAAQ,CAAA;AACX,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAA8B,EAAK,EAAK,EAAE;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmC,CAAA;IAExD,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE;QACnB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACvB,CAAC;QAED,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QACtB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACtB,OAAO,MAAM,CAAA;IACf,CAAC,CAAQ,CAAA;AACX,CAAC,CAAA;AAED,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAA8B,EAAiB,EAAE;IAChF,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;AAClD,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,GAAM,EAGN,EAAE;IACF,OAAO,GAAY,CAAA;AACrB,CAAC,CAAA;AAED,OAAO,EAAE,cAAc,IAAI,aAAa,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/node/mod.d.ts
CHANGED
|
@@ -1,10 +1,49 @@
|
|
|
1
|
-
import { Effect, Layer } from 'effect';
|
|
2
|
-
import { OtelTracer, UnknownError } from '../effect/
|
|
3
|
-
export * as Cli from '
|
|
4
|
-
export * as SocketServer from '
|
|
1
|
+
import { Effect, FileSystem, Layer } from 'effect';
|
|
2
|
+
import { OtelTracer, UnknownError } from '../effect/mod.ts';
|
|
3
|
+
export * as Cli from 'effect/unstable/cli';
|
|
4
|
+
export * as SocketServer from 'effect/unstable/socket/SocketServer';
|
|
5
5
|
export * as PlatformNode from '@effect/platform-node';
|
|
6
|
-
export * as ChildProcessRunner from './ChildProcessRunner/ChildProcessRunner.ts';
|
|
7
|
-
export * as ChildProcessWorker from './ChildProcessRunner/ChildProcessWorker.ts';
|
|
8
6
|
export declare const getFreePort: Effect.Effect<number, UnknownError>;
|
|
9
7
|
export declare const OtelLiveDummy: Layer.Layer<OtelTracer.OtelTracer>;
|
|
8
|
+
/**
|
|
9
|
+
* Compatibility layer for the old Effect v3 @parcel/watcher backend.
|
|
10
|
+
*
|
|
11
|
+
* Effect v4 removed `@effect/platform-node/NodeFileSystem/ParcelWatcher`; its
|
|
12
|
+
* NodeFileSystem layer now performs recursive watching through Node's native
|
|
13
|
+
* `fs.watch(path, { recursive: true })` fallback. This layer deliberately
|
|
14
|
+
* registers no custom backend so existing `NodeRecursiveWatchLayer` consumers
|
|
15
|
+
* continue to compile while the v4 NodeFileSystem implementation handles watch
|
|
16
|
+
* events.
|
|
17
|
+
*
|
|
18
|
+
* This layer alone does NOT provide FileSystem - it only provides the watch backend.
|
|
19
|
+
*
|
|
20
|
+
* IMPORTANT: Layer ordering matters! When composing with NodeFileSystem.layer, use
|
|
21
|
+
* `NodeFileSystemWithWatch` instead, or ensure WatchBackend is available when FileSystem
|
|
22
|
+
* is constructed by using `Layer.provideMerge`:
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* // ✅ CORRECT: Use the pre-composed layer
|
|
26
|
+
* Effect.provide(NodeFileSystemWithWatch)
|
|
27
|
+
*
|
|
28
|
+
* // ✅ CORRECT: Manual composition with Layer.provideMerge
|
|
29
|
+
* const layer = PlatformNode.NodeFileSystem.layer.pipe(Layer.provideMerge(NodeRecursiveWatchLayer))
|
|
30
|
+
* Effect.provide(layer)
|
|
31
|
+
*
|
|
32
|
+
* // ❌ WRONG: Chained Effect.provide - WatchBackend won't be used!
|
|
33
|
+
* Effect.provide(NodeRecursiveWatchLayer).pipe(Effect.provide(PlatformNode.NodeFileSystem.layer))
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @see https://github.com/Effect-TS/effect/issues/5913
|
|
37
|
+
*/
|
|
38
|
+
export declare const NodeRecursiveWatchLayer: Layer.Layer<FileSystem.WatchBackend>;
|
|
39
|
+
/**
|
|
40
|
+
* Pre-composed layer providing FileSystem with recursive file watching.
|
|
41
|
+
* This is the recommended way to get a FileSystem that supports recursive watching.
|
|
42
|
+
*
|
|
43
|
+
* Use this layer when you need to watch files recursively (e.g., watching nested directories).
|
|
44
|
+
* Effect v4's NodeFileSystem uses Node.js's native recursive `fs.watch` support
|
|
45
|
+
* instead of the removed ParcelWatcher backend from Effect v3.
|
|
46
|
+
*/
|
|
47
|
+
export { NodeFileSystem } from '@effect/platform-node';
|
|
48
|
+
export declare const NodeFileSystemWithWatch: Layer.Layer<FileSystem.WatchBackend | FileSystem.FileSystem, never, never>;
|
|
10
49
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/node/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAU,MAAM,QAAQ,CAAA;AAE1D,OAAO,EAAE,UAAU,EAAU,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGnE,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,YAAY,MAAM,qCAAqC,CAAA;AACnE,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AAOrD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAuB1D,CAAA;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAM3D,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAKxE,CAAA;AAED;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,eAAO,MAAM,uBAAuB,4EAAyE,CAAA"}
|
package/dist/node/mod.js
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import * as http from 'node:http';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { NodeFileSystem } from '@effect/platform-node';
|
|
3
|
+
import { Effect, FileSystem, Layer, Option } from 'effect';
|
|
4
|
+
import { OtelTracer, Tracer, UnknownError } from "../effect/mod.js";
|
|
4
5
|
import { makeNoopTracer } from "../NoopTracer.js";
|
|
5
|
-
export * as Cli from '
|
|
6
|
-
export * as SocketServer from '
|
|
6
|
+
export * as Cli from 'effect/unstable/cli';
|
|
7
|
+
export * as SocketServer from 'effect/unstable/socket/SocketServer';
|
|
7
8
|
export * as PlatformNode from '@effect/platform-node';
|
|
8
|
-
export * as ChildProcessRunner from "./ChildProcessRunner/ChildProcessRunner.js";
|
|
9
|
-
export * as ChildProcessWorker from "./ChildProcessRunner/ChildProcessWorker.js";
|
|
10
9
|
// Enable debug logging for OpenTelemetry
|
|
11
10
|
// otel.diag.setLogger(new otel.DiagConsoleLogger(), otel.DiagLogLevel.ERROR)
|
|
12
11
|
// export const OtelLiveHttp = (args: any): Layer.Layer<never> => Layer.empty
|
|
13
|
-
export const getFreePort = Effect.
|
|
12
|
+
export const getFreePort = Effect.callback((cb, signal) => {
|
|
14
13
|
const server = http.createServer();
|
|
15
14
|
signal.addEventListener('abort', () => {
|
|
16
15
|
server.close();
|
|
@@ -18,7 +17,7 @@ export const getFreePort = Effect.async((cb, signal) => {
|
|
|
18
17
|
// Listen on port 0 to get an available port
|
|
19
18
|
server.listen(0, () => {
|
|
20
19
|
const address = server.address();
|
|
21
|
-
if (address && typeof address === 'object') {
|
|
20
|
+
if (address !== null && typeof address === 'object') {
|
|
22
21
|
const port = address.port;
|
|
23
22
|
server.close(() => cb(Effect.succeed(port)));
|
|
24
23
|
}
|
|
@@ -33,7 +32,50 @@ export const getFreePort = Effect.async((cb, signal) => {
|
|
|
33
32
|
});
|
|
34
33
|
export const OtelLiveDummy = Layer.suspend(() => {
|
|
35
34
|
const OtelTracerLive = Layer.succeed(OtelTracer.OtelTracer, makeNoopTracer());
|
|
36
|
-
const TracingLive =
|
|
35
|
+
const TracingLive = OtelTracer.layerWithoutOtelTracer.pipe(Layer.provideMerge(OtelTracerLive));
|
|
37
36
|
return TracingLive;
|
|
38
37
|
});
|
|
38
|
+
/**
|
|
39
|
+
* Compatibility layer for the old Effect v3 @parcel/watcher backend.
|
|
40
|
+
*
|
|
41
|
+
* Effect v4 removed `@effect/platform-node/NodeFileSystem/ParcelWatcher`; its
|
|
42
|
+
* NodeFileSystem layer now performs recursive watching through Node's native
|
|
43
|
+
* `fs.watch(path, { recursive: true })` fallback. This layer deliberately
|
|
44
|
+
* registers no custom backend so existing `NodeRecursiveWatchLayer` consumers
|
|
45
|
+
* continue to compile while the v4 NodeFileSystem implementation handles watch
|
|
46
|
+
* events.
|
|
47
|
+
*
|
|
48
|
+
* This layer alone does NOT provide FileSystem - it only provides the watch backend.
|
|
49
|
+
*
|
|
50
|
+
* IMPORTANT: Layer ordering matters! When composing with NodeFileSystem.layer, use
|
|
51
|
+
* `NodeFileSystemWithWatch` instead, or ensure WatchBackend is available when FileSystem
|
|
52
|
+
* is constructed by using `Layer.provideMerge`:
|
|
53
|
+
*
|
|
54
|
+
* ```ts
|
|
55
|
+
* // ✅ CORRECT: Use the pre-composed layer
|
|
56
|
+
* Effect.provide(NodeFileSystemWithWatch)
|
|
57
|
+
*
|
|
58
|
+
* // ✅ CORRECT: Manual composition with Layer.provideMerge
|
|
59
|
+
* const layer = PlatformNode.NodeFileSystem.layer.pipe(Layer.provideMerge(NodeRecursiveWatchLayer))
|
|
60
|
+
* Effect.provide(layer)
|
|
61
|
+
*
|
|
62
|
+
* // ❌ WRONG: Chained Effect.provide - WatchBackend won't be used!
|
|
63
|
+
* Effect.provide(NodeRecursiveWatchLayer).pipe(Effect.provide(PlatformNode.NodeFileSystem.layer))
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @see https://github.com/Effect-TS/effect/issues/5913
|
|
67
|
+
*/
|
|
68
|
+
export const NodeRecursiveWatchLayer = Layer.succeed(FileSystem.WatchBackend, FileSystem.WatchBackend.of({
|
|
69
|
+
register: () => Option.none(),
|
|
70
|
+
}));
|
|
71
|
+
/**
|
|
72
|
+
* Pre-composed layer providing FileSystem with recursive file watching.
|
|
73
|
+
* This is the recommended way to get a FileSystem that supports recursive watching.
|
|
74
|
+
*
|
|
75
|
+
* Use this layer when you need to watch files recursively (e.g., watching nested directories).
|
|
76
|
+
* Effect v4's NodeFileSystem uses Node.js's native recursive `fs.watch` support
|
|
77
|
+
* instead of the removed ParcelWatcher backend from Effect v3.
|
|
78
|
+
*/
|
|
79
|
+
export { NodeFileSystem } from '@effect/platform-node';
|
|
80
|
+
export const NodeFileSystemWithWatch = NodeFileSystem.layer.pipe(Layer.provideMerge(NodeRecursiveWatchLayer));
|
|
39
81
|
//# sourceMappingURL=mod.js.map
|
package/dist/node/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"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"}
|
package/dist/object/index.d.ts
CHANGED
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
export * from './omit.ts';
|
|
2
|
-
export * from './pick.ts';
|
|
3
1
|
export * from './stringify-object.ts';
|
|
4
|
-
type ValueOfRecord<R extends Record<any, any>> = R extends Record<any, infer V> ? V : never;
|
|
5
|
-
export declare const mapObjectValues: <O_In extends Record<string, any>, V_Out>(obj: O_In, mapValue: (key: keyof O_In, val: ValueOfRecord<O_In>) => V_Out) => { [K in keyof O_In]: V_Out; };
|
|
6
|
-
export type Entries<T> = {
|
|
7
|
-
[K in keyof T]: [K, T[K]];
|
|
8
|
-
}[keyof T][];
|
|
9
|
-
export declare const objectEntries: <T extends Record<string, any>>(obj: T) => Entries<T>;
|
|
10
|
-
export declare const keyObjectFromObject: <TObj extends Record<string, any>>(obj: TObj) => { [K in keyof TObj]: K; };
|
|
11
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
|
package/dist/object/index.js
CHANGED
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
import { pipe } from 'effect';
|
|
2
|
-
export * from "./omit.js";
|
|
3
|
-
export * from "./pick.js";
|
|
4
1
|
export * from "./stringify-object.js";
|
|
5
|
-
export const mapObjectValues = (obj, mapValue) => {
|
|
6
|
-
const mappedEntries = Object.entries(obj).map(([key, val]) => [key, mapValue(key, val)]);
|
|
7
|
-
return Object.fromEntries(mappedEntries);
|
|
8
|
-
};
|
|
9
|
-
export const objectEntries = (obj) => Object.entries(obj);
|
|
10
|
-
export const keyObjectFromObject = (obj) => pipe(objectEntries(obj).map(([k]) => [k, k]), Object.fromEntries);
|
|
11
2
|
//# sourceMappingURL=index.js.map
|
package/dist/object/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
|
|
@@ -9,11 +9,11 @@ export const stringifyObject = (obj, prefix = '') => {
|
|
|
9
9
|
const entries = [];
|
|
10
10
|
for (const [key, value] of Object.entries(obj)) {
|
|
11
11
|
const fullKey = prefix !== '' ? `${prefix}.${key}` : key;
|
|
12
|
-
if (typeof value === 'object' && value !== null &&
|
|
12
|
+
if (typeof value === 'object' && value !== null && Array.isArray(value) === false) {
|
|
13
13
|
// Recursively stringify nested objects with dot notation
|
|
14
14
|
entries.push(stringifyObject(value, fullKey));
|
|
15
15
|
}
|
|
16
|
-
else if (Array.isArray(value)) {
|
|
16
|
+
else if (Array.isArray(value) === true) {
|
|
17
17
|
// Arrays get converted to comma-separated values
|
|
18
18
|
entries.push(`${fullKey}=${value.join(',')}`);
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringify-object.js","sourceRoot":"","sources":["../../src/object/stringify-object.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE,EAAU,EAAE;IAClE,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAExD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"stringify-object.js","sourceRoot":"","sources":["../../src/object/stringify-object.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE,EAAU,EAAE;IAClE,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAExD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YAClF,yDAAyD;YACzD,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;QAC/C,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACzC,iDAAiD;YACjD,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/C,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringify-object.test.js","sourceRoot":"","sources":["../../src/object/stringify-object.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"stringify-object.test.js","sourceRoot":"","sources":["../../src/object/stringify-object.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAA;QACxC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAA;QACzC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAA;QACpC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QAC3C,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAA;QACzC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG;YACV,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACd,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;aAC5B;YACD,IAAI,EAAE,MAAM;SACb,CAAA;QACD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IAC/F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/qr.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export { default as QR } from 'qrcode-generator';
|
|
2
|
+
export type QRErrorCorrectionLevel = 'L' | 'M' | 'Q' | 'H';
|
|
3
|
+
export type PrintQrTerminalOptions = {
|
|
4
|
+
errorCorrectionLevel?: QRErrorCorrectionLevel;
|
|
5
|
+
/** number of white-cell rows/cols around the QR (default 2) */
|
|
6
|
+
margin?: number;
|
|
7
|
+
/** Swap dark/light rendering (default false) */
|
|
8
|
+
invert?: boolean;
|
|
9
|
+
/** Use ANSI colors for compact half-block rendering. Default: auto (true on TTY) */
|
|
10
|
+
useAnsi?: boolean;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Print a QR code to the terminal using Unicode block characters.
|
|
14
|
+
*
|
|
15
|
+
* Notes
|
|
16
|
+
* - Uses `qrcode-generator` under the hood. `typeNumber` is set to `0` which means
|
|
17
|
+
* “auto-select the smallest QR version (1..40) that fits the data”. Larger versions
|
|
18
|
+
* create larger matrices (each version adds 4 modules per side). See the library:
|
|
19
|
+
* - Types (TypeNumber, ErrorCorrectionLevel):
|
|
20
|
+
* https://unpkg.com/qrcode-generator@2.0.4/dist/qrcode.d.ts
|
|
21
|
+
* - Repository / README:
|
|
22
|
+
* https://github.com/kazuhikoarase/qrcode-generator
|
|
23
|
+
* - Error correction level (ECL) controls how much damage/occlusion can be
|
|
24
|
+
* tolerated by adding redundancy. Higher ECL means bigger codes and lower
|
|
25
|
+
* payload capacity:
|
|
26
|
+
* - L ≈ 7% recovery (highest capacity, lowest redundancy)
|
|
27
|
+
* - M ≈ 15% recovery (balanced, common default)
|
|
28
|
+
* - Q ≈ 25% recovery (more robust in noisy/low-contrast prints)
|
|
29
|
+
* - H ≈ 30% recovery (most robust; largest symbols)
|
|
30
|
+
* Reference: https://www.qrcode.com/en/about/error_correction.html
|
|
31
|
+
* - `small` mode compresses two QR rows into one terminal row using the half-block
|
|
32
|
+
* character `▀` and optional ANSI colors (foreground=top, background=bottom).
|
|
33
|
+
* This roughly halves the height while keeping readability in modern terminals.
|
|
34
|
+
* - The QR “quiet zone” (margin) is important for scanners. If scanning is unreliable,
|
|
35
|
+
* consider increasing `margin` to 2–4.
|
|
36
|
+
*/
|
|
37
|
+
export declare const printQrTerminal: (text: string, options?: PrintQrTerminalOptions) => void;
|
|
38
|
+
//# sourceMappingURL=qr.d.ts.map
|
package/dist/qr.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../src/qr.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAEhD,MAAM,MAAM,sBAAsB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAE1D,MAAM,MAAM,sBAAsB,GAAG;IACnC,oBAAoB,CAAC,EAAE,sBAAsB,CAAA;IAC7C,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,UAAU,sBAAsB,KAAG,IAmFhF,CAAA"}
|