@livestore/utils 0.4.0-dev.2 → 0.4.0-dev.21
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.json +1 -1
- package/dist/NoopTracer.d.ts.map +1 -1
- package/dist/NoopTracer.js +5 -1
- package/dist/NoopTracer.js.map +1 -1
- package/dist/browser/Opfs/Opfs.d.ts +51 -0
- package/dist/browser/Opfs/Opfs.d.ts.map +1 -0
- package/dist/browser/Opfs/Opfs.js +345 -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 +94 -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 +218 -0
- package/dist/browser/Opfs/utils.js.map +1 -0
- package/dist/browser/QuotaExceededError.d.ts +59 -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 +76 -0
- package/dist/browser/WebChannelBrowser.js.map +1 -0
- package/dist/browser/WebError.d.ts +425 -0
- package/dist/browser/WebError.d.ts.map +1 -0
- package/dist/browser/WebError.js +414 -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/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} +1 -1
- 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/effect/Debug.d.ts +36 -0
- package/dist/effect/Debug.d.ts.map +1 -0
- package/dist/effect/Debug.js +346 -0
- package/dist/effect/Debug.js.map +1 -0
- package/dist/effect/Effect.d.ts +9 -3
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +4 -2
- package/dist/effect/Effect.js.map +1 -1
- package/dist/effect/Error.d.ts +1 -1
- package/dist/effect/Error.js.map +1 -1
- package/dist/effect/Logger.d.ts +4 -1
- package/dist/effect/Logger.d.ts.map +1 -1
- package/dist/effect/Logger.js +12 -3
- package/dist/effect/Logger.js.map +1 -1
- package/dist/effect/OtelTracer.d.ts +5 -0
- package/dist/effect/OtelTracer.d.ts.map +1 -0
- package/dist/effect/OtelTracer.js +8 -0
- package/dist/effect/OtelTracer.js.map +1 -0
- package/dist/effect/RpcClient.d.ts +32 -0
- package/dist/effect/RpcClient.d.ts.map +1 -0
- package/dist/effect/RpcClient.js +149 -0
- package/dist/effect/RpcClient.js.map +1 -0
- package/dist/effect/Schema/debug-diff.test.js +1 -1
- package/dist/effect/Schema/debug-diff.test.js.map +1 -1
- package/dist/effect/Schema/index.d.ts +2 -2
- package/dist/effect/Schema/index.d.ts.map +1 -1
- package/dist/effect/Schema/index.js +12 -2
- package/dist/effect/Schema/index.js.map +1 -1
- package/dist/effect/Stream.d.ts +73 -2
- package/dist/effect/Stream.d.ts.map +1 -1
- package/dist/effect/Stream.js +68 -1
- package/dist/effect/Stream.js.map +1 -1
- package/dist/effect/Stream.test.d.ts +2 -0
- package/dist/effect/Stream.test.d.ts.map +1 -0
- package/dist/effect/Stream.test.js +84 -0
- package/dist/effect/Stream.test.js.map +1 -0
- package/dist/effect/SubscriptionRef.d.ts +2 -2
- package/dist/effect/SubscriptionRef.d.ts.map +1 -1
- package/dist/effect/SubscriptionRef.js +6 -1
- package/dist/effect/SubscriptionRef.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.d.ts +2 -21
- package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -1
- package/dist/effect/WebChannel/WebChannel.js +5 -81
- package/dist/effect/WebChannel/WebChannel.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.test.js +1 -1
- package/dist/effect/WebChannel/WebChannel.test.js.map +1 -1
- package/dist/effect/WebChannel/common.d.ts +1 -1
- package/dist/effect/WebChannel/common.d.ts.map +1 -1
- package/dist/effect/WebSocket.d.ts.map +1 -1
- package/dist/effect/WebSocket.js +12 -12
- package/dist/effect/WebSocket.js.map +1 -1
- package/dist/effect/mod.d.ts +32 -0
- package/dist/effect/mod.d.ts.map +1 -0
- package/dist/effect/mod.js +35 -0
- package/dist/effect/mod.js.map +1 -0
- package/dist/global.d.ts +4 -0
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js.map +1 -1
- package/dist/guards.d.ts +14 -0
- package/dist/guards.d.ts.map +1 -1
- package/dist/guards.js +14 -0
- package/dist/guards.js.map +1 -1
- package/dist/misc.js +1 -1
- package/dist/misc.js.map +1 -1
- package/dist/mod.d.ts +197 -3
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +153 -4
- package/dist/mod.js.map +1 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts.map +1 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js +66 -10
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +1 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +177 -3
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js.map +1 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts +14 -5
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts.map +1 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js +7 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js.map +1 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js +13 -3
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js.map +1 -1
- package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts +16 -0
- package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts.map +1 -1
- package/dist/node/ChildProcessRunner/ChildProcessWorker.js +98 -2
- package/dist/node/ChildProcessRunner/ChildProcessWorker.js.map +1 -1
- package/dist/node/mod.d.ts +8 -2
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +11 -3
- package/dist/node/mod.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/package.json +54 -44
- package/src/NoopTracer.ts +5 -1
- package/src/browser/Opfs/Opfs.ts +428 -0
- package/src/browser/Opfs/debug-utils.ts +151 -0
- package/src/browser/Opfs/mod.ts +3 -0
- package/src/browser/Opfs/utils.ts +286 -0
- package/src/browser/QuotaExceededError.ts +59 -0
- package/src/browser/WebChannelBrowser.ts +131 -0
- package/src/browser/WebError.test.ts +66 -0
- package/src/browser/WebError.ts +599 -0
- package/src/browser/mod.ts +8 -0
- package/src/effect/Debug.ts +452 -0
- package/src/effect/Effect.ts +31 -4
- package/src/effect/Error.ts +1 -1
- package/src/effect/Logger.ts +14 -4
- package/src/effect/OtelTracer.ts +11 -0
- package/src/effect/RpcClient.ts +212 -0
- package/src/effect/Schema/debug-diff.test.ts +2 -2
- package/src/effect/Schema/index.ts +17 -3
- package/src/effect/Stream.test.ts +127 -0
- package/src/effect/Stream.ts +111 -2
- package/src/effect/SubscriptionRef.ts +14 -2
- package/src/effect/WebChannel/WebChannel.test.ts +1 -1
- package/src/effect/WebChannel/WebChannel.ts +13 -135
- package/src/effect/WebChannel/common.ts +1 -1
- package/src/effect/WebSocket.ts +11 -10
- package/src/effect/{index.ts → mod.ts} +45 -15
- package/src/global.ts +5 -0
- package/src/guards.ts +15 -0
- package/src/misc.ts +1 -1
- package/src/mod.ts +206 -5
- package/src/node/ChildProcessRunner/ChildProcessRunner.ts +71 -10
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +258 -3
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +14 -1
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +16 -3
- package/src/node/ChildProcessRunner/ChildProcessWorker.ts +111 -3
- package/src/node/mod.ts +13 -6
- package/src/qr.ts +125 -0
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js.map +0 -1
- package/dist/effect/Schema/msgpack.d.ts +0 -3
- package/dist/effect/Schema/msgpack.d.ts.map +0 -1
- package/dist/effect/Schema/msgpack.js +0 -7
- package/dist/effect/Schema/msgpack.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 -27
- package/dist/effect/index.d.ts.map +0 -1
- package/dist/effect/index.js +0 -31
- package/dist/effect/index.js.map +0 -1
- package/src/effect/Schema/msgpack.ts +0 -8
- /package/dist/{effect → browser}/WebLock.d.ts +0 -0
- /package/dist/{effect → browser}/WebLock.js +0 -0
- /package/src/{effect → browser}/WebLock.ts +0 -0
- /package/src/{browser.ts → browser/detect.ts} +0 -0
package/dist/mod.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { default as prettyBytes } from 'pretty-bytes';
|
|
2
2
|
export * as base64 from './base64.ts';
|
|
3
3
|
export * from './binary.ts';
|
|
4
|
-
export * from './browser.ts';
|
|
5
4
|
export * from './Deferred.ts';
|
|
6
5
|
export * from './env.ts';
|
|
7
6
|
export * from './fast-deep-equal.ts';
|
|
@@ -10,74 +9,269 @@ export * from './misc.ts';
|
|
|
10
9
|
export * from './NoopTracer.ts';
|
|
11
10
|
export * from './object/index.ts';
|
|
12
11
|
export * from './promise.ts';
|
|
12
|
+
export * as QR from './qr.ts';
|
|
13
13
|
export * from './set.ts';
|
|
14
14
|
export * from './string.ts';
|
|
15
15
|
export * from './time.ts';
|
|
16
16
|
import type * as otel from '@opentelemetry/api';
|
|
17
17
|
import type { Types } from 'effect';
|
|
18
|
+
/**
|
|
19
|
+
* Recursively expands type aliases for better IDE hover display.
|
|
20
|
+
*
|
|
21
|
+
* Transforms `{ a: string } & { b: number }` into `{ a: string; b: number }`.
|
|
22
|
+
*/
|
|
18
23
|
export type Prettify<T> = T extends infer U ? {
|
|
19
24
|
[K in keyof U]: Prettify<U[K]>;
|
|
20
25
|
} : never;
|
|
26
|
+
/**
|
|
27
|
+
* Type-level equality check. Returns `true` if `A` and `B` are exactly the same type.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* type Test1 = TypeEq<string, string> // true
|
|
32
|
+
* type Test2 = TypeEq<string, number> // false
|
|
33
|
+
* type Test3 = TypeEq<{ a: 1 }, { a: 1 }> // true
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
21
36
|
export type TypeEq<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false;
|
|
22
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Type-level subtype check. Returns `true` if `A` extends `B`.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* type Test1 = IsSubtype<'foo', string> // true
|
|
43
|
+
* type Test2 = IsSubtype<string, 'foo'> // false
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
23
46
|
export type IsSubtype<A, B> = A extends B ? true : false;
|
|
47
|
+
/** Compile-time assertion that `T` is `true`. Useful for type tests. */
|
|
24
48
|
export type AssertTrue<T extends true> = T;
|
|
49
|
+
/** Removes `readonly` modifier from all properties of `T`. */
|
|
25
50
|
export type Writeable<T> = {
|
|
26
51
|
-readonly [P in keyof T]: T[P];
|
|
27
52
|
};
|
|
53
|
+
/** Recursively removes `readonly` modifier from all properties. */
|
|
28
54
|
export type DeepWriteable<T> = {
|
|
29
55
|
-readonly [P in keyof T]: DeepWriteable<T[P]>;
|
|
30
56
|
};
|
|
57
|
+
/** Makes all properties of `T` nullable (allows `null`). */
|
|
31
58
|
export type Nullable<T> = {
|
|
32
59
|
[K in keyof T]: T[K] | null;
|
|
33
60
|
};
|
|
61
|
+
/** Union of JavaScript primitive types. */
|
|
34
62
|
export type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
|
63
|
+
/**
|
|
64
|
+
* Creates a union type that allows specific literals while still accepting the base type.
|
|
65
|
+
* Useful for string/number enums with autocomplete support.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* type Status = LiteralUnion<'pending' | 'active', string>
|
|
70
|
+
* // Allows 'pending', 'active', or any other string
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
35
73
|
export type LiteralUnion<LiteralType, BaseType extends Primitive> = LiteralType | (BaseType & Record<never, never>);
|
|
74
|
+
/** Extracts the value type for key `K` from object type `T`, or `never` if key doesn't exist. */
|
|
36
75
|
export type GetValForKey<T, K> = K extends keyof T ? T[K] : never;
|
|
76
|
+
/** Accepts either a single value or a readonly array of values. */
|
|
37
77
|
export type SingleOrReadonlyArray<T> = T | ReadonlyArray<T>;
|
|
78
|
+
/** Returns a Promise that resolves after `ms` milliseconds. */
|
|
38
79
|
export declare const sleep: (ms: number) => Promise<unknown>;
|
|
80
|
+
/**
|
|
81
|
+
* Creates a mutable reference object with a `current` property.
|
|
82
|
+
* Similar to React's `useRef` but works outside of React.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* const counter = ref(0)
|
|
87
|
+
* counter.current += 1
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
39
90
|
export declare const ref: <T>(val: T) => {
|
|
40
91
|
current: T;
|
|
41
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* Calls a function `n` times with the current index.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* times(3, (i) => console.log(i)) // logs 0, 1, 2
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
42
101
|
export declare const times: (n: number, fn: (index: number) => {}) => void;
|
|
102
|
+
/**
|
|
103
|
+
* Wraps a function call in a try/catch that triggers the debugger on error.
|
|
104
|
+
* Useful for debugging exceptions during development.
|
|
105
|
+
*/
|
|
43
106
|
export declare const debugCatch: <T>(try_: () => T) => T;
|
|
107
|
+
/**
|
|
108
|
+
* Recursively removes `undefined` values from an object or array in place.
|
|
109
|
+
* Mutates the input value.
|
|
110
|
+
*/
|
|
44
111
|
export declare const recRemoveUndefinedValues: (val: any) => void;
|
|
45
112
|
/**
|
|
46
113
|
* Replace non-alphanumeric characters with a dash.
|
|
47
114
|
*/
|
|
48
115
|
export declare const sluggify: (str: string, separator?: string) => string;
|
|
116
|
+
/**
|
|
117
|
+
* Creates a property accessor function for use in pipelines.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* const users = [{ name: 'Alice' }, { name: 'Bob' }]
|
|
122
|
+
* const names = users.map(prop('name')) // ['Alice', 'Bob']
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
49
125
|
export declare const prop: <T extends {}, K extends keyof T>(key: K) => (obj: T) => T[K];
|
|
126
|
+
/** Capitalizes the first letter of a string. */
|
|
50
127
|
export declare const capitalizeFirstLetter: (str: string) => string;
|
|
128
|
+
/** Type guard that checks if a value is a readonly array. */
|
|
51
129
|
export declare const isReadonlyArray: <I, T>(value: ReadonlyArray<I> | T) => value is ReadonlyArray<I>;
|
|
52
130
|
/**
|
|
53
131
|
* Use this to make assertion at end of if-else chain that all members of a
|
|
54
132
|
* union have been accounted for.
|
|
55
133
|
*/
|
|
56
134
|
export declare function casesHandled(unexpectedCase: never): never;
|
|
135
|
+
/**
|
|
136
|
+
* Throws if the condition is false. Use for runtime assertions that should never fail.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* assertNever(user !== undefined, 'User must be loaded')
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
57
143
|
export declare const assertNever: (failIfFalse: boolean, msg?: string) => void;
|
|
144
|
+
/**
|
|
145
|
+
* Identity function that triggers the debugger. Useful for debugging pipelines.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```ts
|
|
149
|
+
* data.pipe(transform, debuggerPipe, format) // Pauses debugger here
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
58
152
|
export declare const debuggerPipe: <T>(val: T) => T;
|
|
153
|
+
/**
|
|
154
|
+
* Placeholder for unimplemented code paths. Triggers debugger and throws.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```ts
|
|
158
|
+
* const parseFormat = (format: Format) => {
|
|
159
|
+
* switch (format) {
|
|
160
|
+
* case 'json': return parseJson
|
|
161
|
+
* case 'xml': return notYetImplemented('XML parsing')
|
|
162
|
+
* }
|
|
163
|
+
* }
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
59
166
|
export declare const notYetImplemented: (msg?: string) => never;
|
|
167
|
+
/** A function that does nothing. Useful as a default callback. */
|
|
60
168
|
export declare const noop: () => void;
|
|
169
|
+
/** A function that returns a value of type `T`. */
|
|
61
170
|
export type Thunk<T> = () => T;
|
|
171
|
+
/**
|
|
172
|
+
* If the input is a function, calls it and returns the result. Otherwise returns the value directly.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```ts
|
|
176
|
+
* unwrapThunk(5) // 5
|
|
177
|
+
* unwrapThunk(() => 5) // 5
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
62
180
|
export declare const unwrapThunk: <T>(_: T | (() => T)) => T;
|
|
181
|
+
/**
|
|
182
|
+
* Transforms nullable fields (those that include `null`) into optional fields.
|
|
183
|
+
* Useful for converting database schemas to TypeScript types.
|
|
184
|
+
*/
|
|
63
185
|
export type NullableFieldsToOptional<T> = Types.Simplify<Partial<T> & {
|
|
64
186
|
[K in keyof T as null extends T[K] ? K : never]?: Exclude<T[K], null>;
|
|
65
187
|
} & {
|
|
66
188
|
[K in keyof T as null extends T[K] ? never : K]: T[K];
|
|
67
189
|
}>;
|
|
68
|
-
/**
|
|
190
|
+
/**
|
|
191
|
+
* Creates an array of numbers from `start` (inclusive) to `end` (exclusive).
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```ts
|
|
195
|
+
* range(0, 5) // [0, 1, 2, 3, 4]
|
|
196
|
+
* range(3, 7) // [3, 4, 5, 6]
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
69
199
|
export declare const range: (start: number, end: number) => number[];
|
|
200
|
+
/**
|
|
201
|
+
* Rate-limits function calls to at most once per `ms` milliseconds.
|
|
202
|
+
* Trailing calls are preserved—if called during the wait period, the function
|
|
203
|
+
* will be called again after the timeout.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```ts
|
|
207
|
+
* const throttledSave = throttle(() => saveData(), 1000)
|
|
208
|
+
* throttledSave() // Executes immediately
|
|
209
|
+
* throttledSave() // Queued, executes after 1 second
|
|
210
|
+
* throttledSave() // Ignored (already queued)
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
70
213
|
export declare const throttle: (fn: () => void, ms: number) => () => void;
|
|
214
|
+
/**
|
|
215
|
+
* Generates a W3C Trace Context `traceparent` header from an OpenTelemetry span.
|
|
216
|
+
* @see https://www.w3.org/TR/trace-context/#examples-of-http-traceparent-headers
|
|
217
|
+
*/
|
|
71
218
|
export declare const getTraceParentHeader: (parentSpan: otel.Span) => string;
|
|
219
|
+
/**
|
|
220
|
+
* Asserts that a tagged union value has a specific tag, narrowing its type.
|
|
221
|
+
* Throws if the tag doesn't match.
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* ```ts
|
|
225
|
+
* type Result = { _tag: 'ok'; value: number } | { _tag: 'error'; message: string }
|
|
226
|
+
* const result: Result = ...
|
|
227
|
+
* const ok = assertTag(result, 'ok') // Type is { _tag: 'ok'; value: number }
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
72
230
|
export declare const assertTag: <TObj extends {
|
|
73
231
|
_tag: string;
|
|
74
232
|
}, TTag extends TObj["_tag"]>(obj: TObj, tag: TTag) => Extract<TObj, {
|
|
75
233
|
_tag: TTag;
|
|
76
234
|
}>;
|
|
235
|
+
/**
|
|
236
|
+
* Memoizes a function by JSON-stringifying its arguments as the cache key.
|
|
237
|
+
* Suitable for functions with serializable arguments.
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```ts
|
|
241
|
+
* const expensiveCalc = memoizeByStringifyArgs((a: number, b: number) => {
|
|
242
|
+
* console.log('Computing...')
|
|
243
|
+
* return a + b
|
|
244
|
+
* })
|
|
245
|
+
* expensiveCalc(1, 2) // logs 'Computing...', returns 3
|
|
246
|
+
* expensiveCalc(1, 2) // returns 3 (cached, no log)
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
77
249
|
export declare const memoizeByStringifyArgs: <T extends (...args: any[]) => any>(fn: T) => T;
|
|
250
|
+
/**
|
|
251
|
+
* Memoizes a single-argument function using reference equality for cache lookup.
|
|
252
|
+
* Suitable for functions where arguments are objects that should be compared by reference.
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```ts
|
|
256
|
+
* const processUser = memoizeByRef((user: User) => expensiveTransform(user))
|
|
257
|
+
* processUser(userA) // Computes
|
|
258
|
+
* processUser(userA) // Returns cached (same reference)
|
|
259
|
+
* processUser(userB) // Computes (different reference)
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
78
262
|
export declare const memoizeByRef: <T extends (arg: any) => any>(fn: T) => T;
|
|
263
|
+
/** Type guard that checks if a value is a non-empty string. */
|
|
79
264
|
export declare const isNonEmptyString: (str: string | undefined | null) => str is string;
|
|
265
|
+
/** Type guard that checks if a value is a Promise (has a `then` method). */
|
|
80
266
|
export declare const isPromise: (value: any) => value is Promise<unknown>;
|
|
267
|
+
/** Type guard that checks if a value is iterable (has a `Symbol.iterator` method). */
|
|
81
268
|
export declare const isIterable: <T>(value: any) => value is Iterable<T>;
|
|
269
|
+
/**
|
|
270
|
+
* Type-level utility that removes `undefined` from all property types.
|
|
271
|
+
* Used for compatibility with libraries that don't type optionals as `| undefined`.
|
|
272
|
+
*
|
|
273
|
+
* Note: This is a type-level lie—the runtime value is unchanged.
|
|
274
|
+
*/
|
|
275
|
+
export declare const omitUndefineds: <T extends Record<keyof any, unknown>>(rec: T) => { [K in keyof T]: Exclude<T[K], undefined>; };
|
|
82
276
|
export { objectToString as errorToString } from './misc.ts';
|
|
83
277
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","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.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"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"}
|
package/dist/mod.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
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";
|
|
@@ -10,17 +9,41 @@ export * from "./misc.js";
|
|
|
10
9
|
export * from "./NoopTracer.js";
|
|
11
10
|
export * from "./object/index.js";
|
|
12
11
|
export * from "./promise.js";
|
|
12
|
+
export * as QR from "./qr.js";
|
|
13
13
|
export * from "./set.js";
|
|
14
14
|
export * from "./string.js";
|
|
15
15
|
export * from "./time.js";
|
|
16
16
|
import { objectToString } from "./misc.js";
|
|
17
|
+
/** Returns a Promise that resolves after `ms` milliseconds. */
|
|
17
18
|
export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
19
|
+
/**
|
|
20
|
+
* Creates a mutable reference object with a `current` property.
|
|
21
|
+
* Similar to React's `useRef` but works outside of React.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const counter = ref(0)
|
|
26
|
+
* counter.current += 1
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
18
29
|
export const ref = (val) => ({ current: val });
|
|
30
|
+
/**
|
|
31
|
+
* Calls a function `n` times with the current index.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* times(3, (i) => console.log(i)) // logs 0, 1, 2
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
19
38
|
export const times = (n, fn) => {
|
|
20
39
|
for (let i = 0; i < n; i++) {
|
|
21
40
|
fn(i);
|
|
22
41
|
}
|
|
23
42
|
};
|
|
43
|
+
/**
|
|
44
|
+
* Wraps a function call in a try/catch that triggers the debugger on error.
|
|
45
|
+
* Useful for debugging exceptions during development.
|
|
46
|
+
*/
|
|
24
47
|
export const debugCatch = (try_) => {
|
|
25
48
|
try {
|
|
26
49
|
return try_();
|
|
@@ -31,6 +54,10 @@ export const debugCatch = (try_) => {
|
|
|
31
54
|
throw e;
|
|
32
55
|
}
|
|
33
56
|
};
|
|
57
|
+
/**
|
|
58
|
+
* Recursively removes `undefined` values from an object or array in place.
|
|
59
|
+
* Mutates the input value.
|
|
60
|
+
*/
|
|
34
61
|
export const recRemoveUndefinedValues = (val) => {
|
|
35
62
|
if (Array.isArray(val)) {
|
|
36
63
|
val.forEach(recRemoveUndefinedValues);
|
|
@@ -50,8 +77,19 @@ export const recRemoveUndefinedValues = (val) => {
|
|
|
50
77
|
* Replace non-alphanumeric characters with a dash.
|
|
51
78
|
*/
|
|
52
79
|
export const sluggify = (str, separator = '-') => str.replace(/[^a-zA-Z0-9]/g, separator);
|
|
80
|
+
/**
|
|
81
|
+
* Creates a property accessor function for use in pipelines.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* const users = [{ name: 'Alice' }, { name: 'Bob' }]
|
|
86
|
+
* const names = users.map(prop('name')) // ['Alice', 'Bob']
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
53
89
|
export const prop = (key) => (obj) => obj[key];
|
|
90
|
+
/** Capitalizes the first letter of a string. */
|
|
54
91
|
export const capitalizeFirstLetter = (str) => str.charAt(0).toUpperCase() + str.slice(1);
|
|
92
|
+
/** Type guard that checks if a value is a readonly array. */
|
|
55
93
|
export const isReadonlyArray = (value) => Array.isArray(value);
|
|
56
94
|
/**
|
|
57
95
|
* Use this to make assertion at end of if-else chain that all members of a
|
|
@@ -62,6 +100,14 @@ export function casesHandled(unexpectedCase) {
|
|
|
62
100
|
debugger;
|
|
63
101
|
throw new Error(`A case was not handled for value: ${truncate(objectToString(unexpectedCase), 1000)}`);
|
|
64
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Throws if the condition is false. Use for runtime assertions that should never fail.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* assertNever(user !== undefined, 'User must be loaded')
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
65
111
|
export const assertNever = (failIfFalse, msg) => {
|
|
66
112
|
if (failIfFalse === false) {
|
|
67
113
|
// biome-ignore lint/suspicious/noDebugger: debugging
|
|
@@ -69,6 +115,14 @@ export const assertNever = (failIfFalse, msg) => {
|
|
|
69
115
|
throw new Error(`This should never happen: ${msg}`);
|
|
70
116
|
}
|
|
71
117
|
};
|
|
118
|
+
/**
|
|
119
|
+
* Identity function that triggers the debugger. Useful for debugging pipelines.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* data.pipe(transform, debuggerPipe, format) // Pauses debugger here
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
72
126
|
export const debuggerPipe = (val) => {
|
|
73
127
|
// biome-ignore lint/suspicious/noDebugger: debugging
|
|
74
128
|
debugger;
|
|
@@ -82,12 +136,35 @@ const truncate = (str, length) => {
|
|
|
82
136
|
return str;
|
|
83
137
|
}
|
|
84
138
|
};
|
|
139
|
+
/**
|
|
140
|
+
* Placeholder for unimplemented code paths. Triggers debugger and throws.
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```ts
|
|
144
|
+
* const parseFormat = (format: Format) => {
|
|
145
|
+
* switch (format) {
|
|
146
|
+
* case 'json': return parseJson
|
|
147
|
+
* case 'xml': return notYetImplemented('XML parsing')
|
|
148
|
+
* }
|
|
149
|
+
* }
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
85
152
|
export const notYetImplemented = (msg) => {
|
|
86
153
|
// biome-ignore lint/suspicious/noDebugger: debugging
|
|
87
154
|
debugger;
|
|
88
155
|
throw new Error(`Not yet implemented: ${msg}`);
|
|
89
156
|
};
|
|
157
|
+
/** A function that does nothing. Useful as a default callback. */
|
|
90
158
|
export const noop = () => { };
|
|
159
|
+
/**
|
|
160
|
+
* If the input is a function, calls it and returns the result. Otherwise returns the value directly.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* unwrapThunk(5) // 5
|
|
165
|
+
* unwrapThunk(() => 5) // 5
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
91
168
|
export const unwrapThunk = (_) => {
|
|
92
169
|
if (typeof _ === 'function') {
|
|
93
170
|
return _();
|
|
@@ -96,11 +173,32 @@ export const unwrapThunk = (_) => {
|
|
|
96
173
|
return _;
|
|
97
174
|
}
|
|
98
175
|
};
|
|
99
|
-
/**
|
|
176
|
+
/**
|
|
177
|
+
* Creates an array of numbers from `start` (inclusive) to `end` (exclusive).
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```ts
|
|
181
|
+
* range(0, 5) // [0, 1, 2, 3, 4]
|
|
182
|
+
* range(3, 7) // [3, 4, 5, 6]
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
100
185
|
export const range = (start, end) => {
|
|
101
186
|
const length = end - start;
|
|
102
187
|
return Array.from({ length }, (_, i) => start + i);
|
|
103
188
|
};
|
|
189
|
+
/**
|
|
190
|
+
* Rate-limits function calls to at most once per `ms` milliseconds.
|
|
191
|
+
* Trailing calls are preserved—if called during the wait period, the function
|
|
192
|
+
* will be called again after the timeout.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts
|
|
196
|
+
* const throttledSave = throttle(() => saveData(), 1000)
|
|
197
|
+
* throttledSave() // Executes immediately
|
|
198
|
+
* throttledSave() // Queued, executes after 1 second
|
|
199
|
+
* throttledSave() // Ignored (already queued)
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
104
202
|
export const throttle = (fn, ms) => {
|
|
105
203
|
let shouldWait = false;
|
|
106
204
|
let shouldCallAgain = false;
|
|
@@ -124,18 +222,45 @@ export const throttle = (fn, ms) => {
|
|
|
124
222
|
setTimeout(timeoutFunc, ms);
|
|
125
223
|
};
|
|
126
224
|
};
|
|
225
|
+
/**
|
|
226
|
+
* Generates a W3C Trace Context `traceparent` header from an OpenTelemetry span.
|
|
227
|
+
* @see https://www.w3.org/TR/trace-context/#examples-of-http-traceparent-headers
|
|
228
|
+
*/
|
|
127
229
|
export const getTraceParentHeader = (parentSpan) => {
|
|
128
230
|
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
231
|
return `00-${spanContext.traceId}-${spanContext.spanId}-01`;
|
|
132
232
|
};
|
|
233
|
+
/**
|
|
234
|
+
* Asserts that a tagged union value has a specific tag, narrowing its type.
|
|
235
|
+
* Throws if the tag doesn't match.
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```ts
|
|
239
|
+
* type Result = { _tag: 'ok'; value: number } | { _tag: 'error'; message: string }
|
|
240
|
+
* const result: Result = ...
|
|
241
|
+
* const ok = assertTag(result, 'ok') // Type is { _tag: 'ok'; value: number }
|
|
242
|
+
* ```
|
|
243
|
+
*/
|
|
133
244
|
export const assertTag = (obj, tag) => {
|
|
134
245
|
if (obj._tag !== tag) {
|
|
135
246
|
throw new Error(`Expected tag ${tag} but got ${obj._tag}`);
|
|
136
247
|
}
|
|
137
248
|
return obj;
|
|
138
249
|
};
|
|
250
|
+
/**
|
|
251
|
+
* Memoizes a function by JSON-stringifying its arguments as the cache key.
|
|
252
|
+
* Suitable for functions with serializable arguments.
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```ts
|
|
256
|
+
* const expensiveCalc = memoizeByStringifyArgs((a: number, b: number) => {
|
|
257
|
+
* console.log('Computing...')
|
|
258
|
+
* return a + b
|
|
259
|
+
* })
|
|
260
|
+
* expensiveCalc(1, 2) // logs 'Computing...', returns 3
|
|
261
|
+
* expensiveCalc(1, 2) // returns 3 (cached, no log)
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
139
264
|
export const memoizeByStringifyArgs = (fn) => {
|
|
140
265
|
const cache = new Map();
|
|
141
266
|
return ((...args) => {
|
|
@@ -148,6 +273,18 @@ export const memoizeByStringifyArgs = (fn) => {
|
|
|
148
273
|
return result;
|
|
149
274
|
});
|
|
150
275
|
};
|
|
276
|
+
/**
|
|
277
|
+
* Memoizes a single-argument function using reference equality for cache lookup.
|
|
278
|
+
* Suitable for functions where arguments are objects that should be compared by reference.
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* ```ts
|
|
282
|
+
* const processUser = memoizeByRef((user: User) => expensiveTransform(user))
|
|
283
|
+
* processUser(userA) // Computes
|
|
284
|
+
* processUser(userA) // Returns cached (same reference)
|
|
285
|
+
* processUser(userB) // Computes (different reference)
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
151
288
|
export const memoizeByRef = (fn) => {
|
|
152
289
|
const cache = new Map();
|
|
153
290
|
return ((arg) => {
|
|
@@ -159,10 +296,22 @@ export const memoizeByRef = (fn) => {
|
|
|
159
296
|
return result;
|
|
160
297
|
});
|
|
161
298
|
};
|
|
299
|
+
/** Type guard that checks if a value is a non-empty string. */
|
|
162
300
|
export const isNonEmptyString = (str) => {
|
|
163
301
|
return typeof str === 'string' && str.length > 0;
|
|
164
302
|
};
|
|
303
|
+
/** Type guard that checks if a value is a Promise (has a `then` method). */
|
|
165
304
|
export const isPromise = (value) => typeof value?.then === 'function';
|
|
305
|
+
/** Type guard that checks if a value is iterable (has a `Symbol.iterator` method). */
|
|
166
306
|
export const isIterable = (value) => typeof value?.[Symbol.iterator] === 'function';
|
|
307
|
+
/**
|
|
308
|
+
* Type-level utility that removes `undefined` from all property types.
|
|
309
|
+
* Used for compatibility with libraries that don't type optionals as `| undefined`.
|
|
310
|
+
*
|
|
311
|
+
* Note: This is a type-level lie—the runtime value is unchanged.
|
|
312
|
+
*/
|
|
313
|
+
export const omitUndefineds = (rec) => {
|
|
314
|
+
return rec;
|
|
315
|
+
};
|
|
167
316
|
export { objectToString as errorToString } from "./misc.js";
|
|
168
317
|
//# sourceMappingURL=mod.js.map
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChildProcessRunner.d.ts","sourceRoot":"","sources":["../../../src/node/ChildProcessRunner/ChildProcessRunner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAOvD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"ChildProcessRunner.d.ts","sourceRoot":"","sources":["../../../src/node/ChildProcessRunner/ChildProcessRunner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAOvD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AA2HrC,eAAO,MAAM,KAAK,kDAA2D,CAAA"}
|