@orpc/shared 1.14.9 → 1.14.11

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/index.d.ts CHANGED
@@ -1,108 +1,48 @@
1
- import { Promisable } from 'type-fest';
2
- export { IsEqual, IsNever, JsonValue, PartialDeep, Promisable } from 'type-fest';
1
+ import { Arrayable, Promisable } from 'type-fest';
2
+ export { Arrayable, IsEqual, PartialDeep, Promisable, Writable } from 'type-fest';
3
3
  import { Tracer, TraceAPI, ContextAPI, PropagationAPI, SpanOptions, Context, Span, AttributeValue, Exception } from '@opentelemetry/api';
4
- export { group, guard, mapEntries, mapValues, omit, retry, sleep } from 'radash';
4
+ import { AsyncIteratorClass } from '@standardserver/shared';
5
+ export { AbortError, AsyncCleanupFn, AsyncIteratorClass, AsyncIteratorClassNextFn, SequentialIdGenerator, getOrBind, isAsyncIteratorObject, isTypescriptObject, parseEmptyableJSON, sequential, sleep, stringifyJSON, toArray } from '@standardserver/shared';
5
6
 
6
- type MaybeOptionalOptions<TOptions> = Record<never, never> extends TOptions ? [options?: TOptions] : [options: TOptions];
7
+ type MaybeOptionalOptions<TOptions> = object extends TOptions ? [options?: TOptions] : [options: TOptions];
7
8
  declare function resolveMaybeOptionalOptions<T>(rest: MaybeOptionalOptions<T>): T;
8
9
 
9
- declare function toArray<T>(value: T): T extends readonly any[] ? T : Exclude<T, undefined | null>[];
10
10
  declare function splitInHalf<T>(arr: readonly T[]): [T[], T[]];
11
11
 
12
12
  /**
13
- * Converts Request/Response/Blob/File/.. to a buffer (ArrayBuffer or Uint8Array).
13
+ * Load Request/Response/Blob/File/.. to a buffer (Uint8Array<ArrayBuffer>).
14
14
  *
15
15
  * Prefers the newer `.bytes` method when available as it more efficient but not widely supported yet.
16
16
  */
17
- declare function readAsBuffer(source: Pick<Blob, 'arrayBuffer' | 'bytes'>): Promise<ArrayBuffer | Uint8Array>;
18
-
19
- type AnyFunction = (...args: any[]) => any;
20
- declare function once<T extends () => any>(fn: T): () => ReturnType<T>;
21
- declare function sequential<A extends any[], R>(fn: (...args: A) => Promise<R>): (...args: A) => Promise<R>;
17
+ declare function loadBytes(source: Pick<Blob, 'arrayBuffer' | 'bytes'>): ReturnType<Blob['bytes']>;
22
18
  /**
23
- * Executes the callback function after the current call stack has been cleared.
19
+ * Normalize text or binary-like inputs to either:
20
+ * - the original string value, or
21
+ * - a Uint8Array view over the source bytes.
24
22
  */
25
- declare function defer(callback: () => void): void;
23
+ declare function toStringOrBytes(source: Arrayable<string | ArrayBuffer | Pick<Uint8Array<ArrayBuffer>, 'buffer' | 'byteOffset' | 'byteLength'>>): string | Awaited<ReturnType<Blob['bytes']>>;
26
24
 
27
- type OmitChainMethodDeep<T extends object, K extends keyof any> = {
28
- [P in keyof Omit<T, K>]: T[P] extends AnyFunction ? ((...args: Parameters<T[P]>) => OmitChainMethodDeep<ReturnType<T[P]>, K>) : T[P];
29
- };
25
+ declare function isDeepEqual(a: unknown, b: unknown): boolean;
30
26
 
31
27
  declare const ORPC_NAME = "orpc";
32
- declare const ORPC_SHARED_PACKAGE_NAME = "@orpc/shared";
33
- declare const ORPC_SHARED_PACKAGE_VERSION = "1.14.9";
34
28
 
29
+ declare function isAbortError(error: unknown): error is Error;
30
+
31
+ type AnyFunction = (...args: any[]) => any;
32
+ declare function once<T>(fn: () => T): () => T;
35
33
  /**
36
- * Error thrown when an operation is aborted.
37
- * Uses the standardized 'AbortError' name for consistency with JavaScript APIs.
34
+ * Executes the callback function after the current call stack has been cleared.
38
35
  */
39
- declare class AbortError extends Error {
40
- constructor(...rest: ConstructorParameters<typeof Error>);
41
- }
36
+ declare function defer(callback: () => void): void;
37
+ declare function tryOrUndefined<T>(fn: () => T): undefined | T;
42
38
 
43
- interface EventPublisherOptions {
44
- /**
45
- * Maximum number of events to buffer for async iterator subscribers.
46
- *
47
- * If the buffer exceeds this limit, the oldest event is dropped.
48
- * This prevents unbounded memory growth if consumers process events slowly.
49
- *
50
- * Set to:
51
- * - `0`: Disable buffering. Events must be consumed before the next one arrives.
52
- * - `1`: Only keep the latest event. Useful for real-time updates where only the most recent value matters.
53
- * - `Infinity`: Keep all events. Ensures no data loss, but may lead to high memory usage.
54
- *
55
- * @default 100
56
- */
57
- maxBufferedEvents?: number;
58
- }
59
- interface EventPublisherSubscribeIteratorOptions extends EventPublisherOptions {
60
- /**
61
- * Aborts the async iterator. Throws if aborted before or during pulling.
62
- */
63
- signal?: AbortSignal | undefined;
64
- }
65
- declare class EventPublisher<T extends Record<PropertyKey, any>> {
66
- #private;
67
- constructor(options?: EventPublisherOptions);
68
- get size(): number;
69
- /**
70
- * Emits an event and delivers the payload to all subscribed listeners.
71
- */
72
- publish<K extends keyof T>(event: K, payload: T[K]): void;
73
- /**
74
- * Subscribes to a specific event using a callback function.
75
- * Returns an unsubscribe function to remove the listener.
76
- *
77
- * @example
78
- * ```ts
79
- * const unsubscribe = publisher.subscribe('event', (payload) => {
80
- * console.log(payload)
81
- * })
82
- *
83
- * // Later
84
- * unsubscribe()
85
- * ```
86
- */
87
- subscribe<K extends keyof T>(event: K, listener: (payload: T[K]) => void): () => void;
88
- /**
89
- * Subscribes to a specific event using an async iterator.
90
- * Useful for `for await...of` loops with optional buffering and abort support.
91
- *
92
- * @example
93
- * ```ts
94
- * for await (const payload of publisher.subscribe('event', { signal })) {
95
- * console.log(payload)
96
- * }
97
- * ```
98
- */
99
- subscribe<K extends keyof T>(event: K, options?: EventPublisherSubscribeIteratorOptions): AsyncGenerator<T[K]> & AsyncIteratorObject<T[K]>;
100
- }
39
+ declare function pathToHttpPath(path: readonly string[]): `/${string}`;
40
+ declare function normalizeHttpPath(path: string): `/${string}`;
41
+ declare function mergeHttpPath(a: `/${string}`, b: `/${string}`): `/${string}`;
42
+ declare function matchesHttpPathPrefix(url: `/${string}`, prefix: `/${string}`): boolean;
43
+ declare function matchesHttpPath(url: `/${string}`, path: `/${string}`): boolean;
44
+ declare function isCompressibleContentType(contentType: string | null | undefined): boolean;
101
45
 
102
- declare class SequentialIdGenerator {
103
- private index;
104
- generate(): string;
105
- }
106
46
  /**
107
47
  * Compares two sequential IDs.
108
48
  * Returns:
@@ -112,8 +52,11 @@ declare class SequentialIdGenerator {
112
52
  */
113
53
  declare function compareSequentialIds(a: string, b: string): number;
114
54
 
115
- type SetOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
116
55
  type IntersectPick<T, U> = Pick<T, keyof T & keyof U>;
56
+ /**
57
+ * Remove protected/private properties/methods
58
+ */
59
+ type Public<T> = Pick<T, keyof T>;
117
60
  type PromiseWithError<T, TError> = Promise<T> & {
118
61
  __error?: {
119
62
  type: TError;
@@ -122,14 +65,13 @@ type PromiseWithError<T, TError> = Promise<T> & {
122
65
  /**
123
66
  * The place where you can config the orpc types.
124
67
  *
125
- * - `throwableError` the error type that represent throwable errors should be `Error` or `null | undefined | {}` if you want more strict.
68
+ * - `ThrowableError` the error type that represent throwable errors should be `Error` or `null | undefined | {}` if you want more strict.
126
69
  */
127
70
  interface Registry {
128
71
  }
129
72
  type ThrowableError = Registry extends {
130
- throwableError: infer T;
73
+ ThrowableError: infer T;
131
74
  } ? T : Error;
132
- type InferAsyncIterableYield<T> = T extends AsyncIterable<infer U> ? U : never;
133
75
 
134
76
  type InterceptableOptions = Record<string, any>;
135
77
  type InterceptorOptions<TOptions extends InterceptableOptions, TResult> = Omit<TOptions, 'next'> & {
@@ -137,136 +79,138 @@ type InterceptorOptions<TOptions extends InterceptableOptions, TResult> = Omit<T
137
79
  };
138
80
  type Interceptor<TOptions extends InterceptableOptions, TResult> = (options: InterceptorOptions<TOptions, TResult>) => TResult;
139
81
  /**
140
- * Can be used for interceptors or middlewares
82
+ * Can used for interceptors or middlewares
141
83
  */
142
84
  declare function onStart<T, TOptions extends {
143
- next(): any;
85
+ next: () => any;
144
86
  }, TRest extends any[]>(callback: NoInfer<(options: TOptions, ...rest: TRest) => Promisable<void>>): (options: TOptions, ...rest: TRest) => T | Promise<Awaited<ReturnType<TOptions['next']>>>;
145
87
  /**
146
- * Can be used for interceptors or middlewares
88
+ * Can used for interceptors or middlewares
147
89
  */
148
90
  declare function onSuccess<T, TOptions extends {
149
- next(): any;
91
+ next: () => any;
150
92
  }, TRest extends any[]>(callback: NoInfer<(result: Awaited<ReturnType<TOptions['next']>>, options: TOptions, ...rest: TRest) => Promisable<void>>): (options: TOptions, ...rest: TRest) => T | Promise<Awaited<ReturnType<TOptions['next']>>>;
151
93
  /**
152
- * Can be used for interceptors or middlewares
94
+ * Can used for interceptors or middlewares
153
95
  */
154
96
  declare function onError<T, TOptions extends {
155
- next(): any;
97
+ next: () => any;
156
98
  }, TRest extends any[]>(callback: NoInfer<(error: ReturnType<TOptions['next']> extends PromiseWithError<any, infer E> ? E : ThrowableError, options: TOptions, ...rest: TRest) => Promisable<void>>): (options: TOptions, ...rest: TRest) => T | Promise<Awaited<ReturnType<TOptions['next']>>>;
157
99
  type OnFinishState<TResult, TError> = [error: TError, data: undefined, isSuccess: false] | [error: null, data: TResult, isSuccess: true];
158
100
  /**
159
- * Can be used for interceptors or middlewares
101
+ * Can used for interceptors or middlewares
160
102
  */
161
103
  declare function onFinish<T, TOptions extends {
162
- next(): any;
104
+ next: () => any;
163
105
  }, TRest extends any[]>(callback: NoInfer<(state: OnFinishState<Awaited<ReturnType<TOptions['next']>>, ReturnType<TOptions['next']> extends PromiseWithError<any, infer E> ? E : ThrowableError>, options: TOptions, ...rest: TRest) => Promisable<void>>): (options: TOptions, ...rest: TRest) => T | Promise<Awaited<ReturnType<TOptions['next']>>>;
164
- declare function intercept<TOptions extends InterceptableOptions, TResult>(interceptors: Interceptor<TOptions, TResult>[], options: NoInfer<TOptions>, main: NoInfer<(options: TOptions) => TResult>): TResult;
106
+ /**
107
+ * Creates a middleware or interceptor that invokes a callback when the returned async
108
+ * iterator object throws an error while being consumed.
109
+ *
110
+ * This does not replace the `onError`. `onError` only fires on the
111
+ * initial call (before the interceptor returns the iterator), whereas this
112
+ * callback only fires while consuming the iterator. Use both together to
113
+ * catch all possible errors.
114
+ */
115
+ declare function onAsyncIteratorObjectError<T, TOptions extends {
116
+ next: () => any;
117
+ }, TRest extends any[]>(callback: NoInfer<(error: ThrowableError | (ReturnType<TOptions['next']> extends PromiseWithError<any, infer E> ? E : ThrowableError), options: TOptions, ...rest: TRest) => Promisable<void>>): (options: TOptions, ...rest: TRest) => T | Promise<Awaited<ReturnType<TOptions['next']>>>;
118
+ /**
119
+ * Creates an interceptor that invokes a callback when the returned readable
120
+ * stream errors while being consumed.
121
+ *
122
+ * This does not replace the `onError`. `onError` only fires on the
123
+ * initial call (before the interceptor returns the stream), whereas this
124
+ * callback only fires while consuming the stream. Use both together to catch
125
+ * all possible errors.
126
+ */
127
+ declare function onReadableStreamError<T, TOptions extends {
128
+ next: () => any;
129
+ }, TRest extends any[]>(callback: NoInfer<(error: ThrowableError | (ReturnType<TOptions['next']> extends PromiseWithError<any, infer E> ? E : ThrowableError), options: TOptions, ...rest: TRest) => Promisable<void>>): (options: TOptions, ...rest: TRest) => T | Promise<Awaited<ReturnType<TOptions['next']>>>;
130
+ declare function intercept<TOptions extends InterceptableOptions, TResult>(interceptors: undefined | Interceptor<TOptions, TResult>[], options: NoInfer<TOptions>, main: NoInfer<(options: TOptions) => TResult>): TResult;
165
131
 
166
132
  /**
167
133
  * Only import types from @opentelemetry/api to avoid runtime dependencies.
168
134
  */
169
135
 
170
- interface OtelConfig {
136
+ interface OpenTelemetryConfig {
171
137
  tracer: Tracer;
172
138
  trace: TraceAPI;
173
139
  context: ContextAPI;
174
- propagation: PropagationAPI;
175
- }
176
- /**
177
- * Sets the global OpenTelemetry config.
178
- * Call this once at app startup. Use `undefined` to disable tracing.
179
- */
180
- declare function setGlobalOtelConfig(config: OtelConfig | undefined): void;
181
- /**
182
- * Gets the global OpenTelemetry config.
183
- * Returns `undefined` if OpenTelemetry is not configured, initialized, or enabled.
184
- */
185
- declare function getGlobalOtelConfig(): OtelConfig | undefined;
186
- /**
187
- * Starts a new OpenTelemetry span with the given name and options.
188
- *
189
- * @returns The new span, or `undefined` if no tracer is set.
190
- */
191
- declare function startSpan(name: string, options?: SpanOptions, context?: Context): Span | undefined;
192
- interface SetSpanErrorOptions {
193
140
  /**
194
- * Span error status is not set if error is due to cancellation by the signal.
141
+ * propagation is optional, can reduce bundle size in some cases.
195
142
  */
196
- signal?: AbortSignal;
143
+ propagation?: PropagationAPI | undefined;
197
144
  }
198
- /**
199
- * Records and sets the error status on the given span.
200
- * If the span is `undefined`, it does nothing.
201
- */
202
- declare function setSpanError(span: Span | undefined, error: unknown, options?: SetSpanErrorOptions): void;
203
- declare function setSpanAttribute(span: Span | undefined, key: string, value: AttributeValue | undefined): void;
204
- /**
205
- * Converts an error to an OpenTelemetry Exception.
206
- */
207
- declare function toOtelException(error: unknown): Exclude<Exception, string>;
208
- /**
209
- * Converts a value to a string suitable for OpenTelemetry span attributes.
210
- */
211
- declare function toSpanAttributeValue(data: unknown): string;
212
- interface RunWithSpanOptions extends SpanOptions, SetSpanErrorOptions {
145
+ declare function setOpenTelemetryConfig(config: OpenTelemetryConfig | undefined): void;
146
+ declare function getOpenTelemetryConfig(): OpenTelemetryConfig | undefined;
147
+ interface StartSpanOptions extends SpanOptions {
213
148
  /**
214
149
  * The name of the span to create.
215
150
  */
216
151
  name: string;
217
152
  /**
218
- * Context to use for the span.
153
+ * Context to use for the created span.
219
154
  */
220
155
  context?: Context;
221
156
  }
222
- /**
223
- * Runs a function within the context of a new OpenTelemetry span.
224
- * The span is ended automatically, and errors are recorded to the span.
225
- */
226
- declare function runWithSpan<T>({ name, context, ...options }: RunWithSpanOptions, fn: (span?: Span) => Promisable<T>): Promise<T>;
227
- /**
228
- * Runs a function within the context of an existing OpenTelemetry span.
229
- */
157
+ declare function startSpan(options: StartSpanOptions | string): Span | undefined;
158
+ declare function recordSpanError(span: Span | undefined, error: unknown): void;
159
+ declare function setSpanAttributeIfDefined(span: Span | undefined, key: string, value: AttributeValue | undefined): void;
160
+ declare function toOtelException(error: unknown): Exclude<Exception, string>;
161
+ declare function toSpanAttributeValue(data: unknown): string;
162
+ interface RunWithSpanOptions extends StartSpanOptions {
163
+ }
164
+ declare function runWithSpan<T>(options: string | RunWithSpanOptions, fn: (span?: Span) => Promisable<T>): Promise<T>;
230
165
  declare function runInSpanContext<T>(span: Span | undefined, fn: () => Promisable<T>): Promise<T>;
231
166
 
232
- declare function isAsyncIteratorObject(maybe: unknown): maybe is AsyncIteratorObject<any, any, any>;
233
- interface AsyncIteratorClassNextFn<T, TReturn> {
234
- (): Promise<IteratorResult<T, TReturn>>;
235
- }
236
- interface AsyncIteratorClassCleanupFn {
237
- (reason: 'return' | 'throw' | 'next' | 'dispose'): Promise<void>;
238
- }
239
- declare const fallbackAsyncDisposeSymbol: unique symbol;
240
- declare const asyncDisposeSymbol: typeof Symbol extends {
241
- asyncDispose: infer T;
242
- } ? T : typeof fallbackAsyncDisposeSymbol;
243
- declare class AsyncIteratorClass<T, TReturn = unknown, TNext = unknown> implements AsyncIteratorObject<T, TReturn, TNext>, AsyncGenerator<T, TReturn, TNext> {
244
- #private;
245
- constructor(next: AsyncIteratorClassNextFn<T, TReturn>, cleanup: AsyncIteratorClassCleanupFn);
246
- next(): Promise<IteratorResult<T, TReturn>>;
247
- return(value?: any): Promise<IteratorResult<T, TReturn>>;
248
- throw(err: any): Promise<IteratorResult<T, TReturn>>;
167
+ interface WrapAsyncIteratorOptions<TYield, TReturn, TMappedYield, TMappedReturn> {
249
168
  /**
250
- * asyncDispose symbol only available in esnext, we should fallback to Symbol.for('asyncDispose')
169
+ * Any call to the original iterator will be executed inside this function.
170
+ * Useful when you want execution to happen within a specific context,
171
+ * such as AsyncLocalStorage.
251
172
  */
252
- [asyncDisposeSymbol](): Promise<void>;
253
- [Symbol.asyncIterator](): this;
173
+ runWith?: <T>(run: () => Promise<T>) => Promise<T>;
174
+ mapResult?: (result: IteratorResult<TYield, TReturn>) => Promisable<IteratorResult<TMappedYield, TMappedReturn>>;
175
+ mapError?: (error: ThrowableError) => Promisable<ThrowableError>;
176
+ onError?: (error: ThrowableError) => Promisable<void>;
177
+ /**
178
+ * Execute after the stream finishes or is cancelled.
179
+ */
180
+ onFinish?: () => Promisable<void>;
254
181
  }
182
+ declare function wrapAsyncIterator<TYield, TReturn, TMappedYield = TYield, TMappedReturn = TReturn>(iterator: AsyncIterator<TYield, TReturn>, { runWith, mapResult, mapError, onError, onFinish }: WrapAsyncIteratorOptions<TYield, TReturn, TMappedYield, TMappedReturn>): NoInfer<AsyncIteratorClass<TMappedYield, TMappedReturn>>;
183
+ declare function traceAsyncIterator<T, TReturn, TNext>(options: StartSpanOptions | string, iterator: AsyncIterator<T, TReturn, TNext>): AsyncIteratorClass<T, TReturn, TNext>;
255
184
  declare function replicateAsyncIterator<T, TReturn, TNext>(source: AsyncIterator<T, TReturn, TNext>, count: number): (AsyncIteratorClass<T, TReturn, TNext>)[];
256
- interface AsyncIteratorWithSpanOptions extends SetSpanErrorOptions {
185
+ interface ConsumeAsyncIteratorOptions<T, TReturn, TError> {
257
186
  /**
258
- * The name of the span to create.
187
+ * Called on each event
259
188
  */
260
- name: string;
189
+ onEvent: (event: T) => void;
190
+ /**
191
+ * Called once error happens
192
+ */
193
+ onError?: (error: TError) => void;
194
+ /**
195
+ * Called once AsyncIteratorObject is done
196
+ *
197
+ * @info If iterator is canceled, `undefined` can be passed on success
198
+ */
199
+ onSuccess?: (value: TReturn | undefined) => void;
200
+ /**
201
+ * Called once after onError or onSuccess
202
+ *
203
+ * @info If iterator is canceled, `undefined` can be passed on success
204
+ */
205
+ onFinish?: (state: [error: TError, data: undefined, isSuccess: false] | [error: null, data: TReturn | undefined, isSuccess: true]) => void;
261
206
  }
262
- declare function asyncIteratorWithSpan<T, TReturn, TNext>({ name, ...options }: AsyncIteratorWithSpanOptions, iterator: AsyncIterator<T, TReturn, TNext>): AsyncIteratorClass<T, TReturn, TNext>;
263
-
264
- declare function parseEmptyableJSON(text: string | null | undefined): unknown;
265
- declare function stringifyJSON<T>(value: T | {
266
- toJSON(): T;
267
- }): undefined extends T ? undefined | string : string;
268
-
269
- declare function logError(error: unknown): void;
207
+ /**
208
+ * Consumes an AsyncIteratorObject with lifecycle callbacks
209
+ *
210
+ * @warning If no `onError` or `onFinish` is provided, error will be thrown into unhandled rejection channel.
211
+ * @return unsubscribe callback
212
+ */
213
+ declare function consumeAsyncIterator<T, TReturn, TError = ThrowableError>(iterator: AsyncIterator<T, TReturn> | PromiseWithError<AsyncIterator<T, TReturn>, TError>, options: ConsumeAsyncIteratorOptions<T, TReturn, TError | ThrowableError>): () => Promise<void>;
270
214
 
271
215
  type Segment = string | number;
272
216
  declare function findDeepMatches(check: (value: unknown) => boolean, payload: unknown, segments?: Segment[], maps?: Segment[][], values?: unknown[]): {
@@ -279,43 +223,72 @@ declare function findDeepMatches(check: (value: unknown) => boolean, payload: un
279
223
  */
280
224
  declare function getConstructor(value: unknown): Function | null | undefined;
281
225
  /**
282
- * Check if the value is an object even it created by `Object.create(null)` or more tricky way.
226
+ * Checks whether a value is a plain object, including objects created with
227
+ * `Object.create(null)`.
283
228
  */
284
- declare function isObject(value: unknown): value is Record<PropertyKey, unknown>;
229
+ declare function isPlainObject(value: unknown): value is Record<PropertyKey, unknown>;
230
+ declare function get(object: unknown, path: readonly PropertyKey[]): unknown;
285
231
  /**
286
- * Check if the value satisfy a `object` type in typescript
232
+ * Sets a value at the given path, creating plain objects for intermediate keys as needed.
287
233
  */
288
- declare function isTypescriptObject(value: unknown): value is object & Record<PropertyKey, unknown>;
234
+ declare function set(root: object, path: [PropertyKey, ...PropertyKey[]] | [...PropertyKey[], PropertyKey], value: unknown): void;
235
+ declare function omit<T extends object, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K>;
289
236
  declare function clone<T>(value: T): T;
290
- declare function get(object: unknown, path: readonly PropertyKey[]): unknown;
291
237
  declare function isPropertyKey(value: unknown): value is PropertyKey;
292
238
  declare const NullProtoObj: ({
293
239
  new <T extends Record<PropertyKey, unknown>>(): T;
294
240
  });
241
+ /**
242
+ * Returns an object containing all methods of the given object, with each
243
+ * method bound to the original object instance.
244
+ *
245
+ * Methods are collected from both the object itself and its prototype chain
246
+ * (excluding `Object.prototype` and the `constructor` property).
247
+ */
248
+ declare function bindMethods<T extends object>(obj: T): Pick<T, {
249
+ [K in keyof T]: T[K] extends AnyFunction ? K : never;
250
+ }[keyof T]>;
295
251
 
296
- type Value<T, TArgs extends any[] = []> = T | ((...args: TArgs) => T);
297
- declare function value<T, TArgs extends any[]>(value: Value<T, TArgs>, ...args: NoInfer<TArgs>): T extends Value<infer U, any> ? U : never;
252
+ interface OrderablePlugin {
253
+ /** Unique name of the plugin, used for ordering and identification. */
254
+ name: string;
255
+ /** Plugins this plugin should execute before. */
256
+ before?: string[] | undefined;
257
+ /** Plugins this plugin should execute after. */
258
+ after?: string[] | undefined;
259
+ }
298
260
  /**
299
- * Returns the value if it is defined, otherwise returns the fallback
261
+ * Sorts plugins based on their `before` and `after` dependencies.
300
262
  */
301
- declare function fallback<T>(value: T | undefined, fallback: T): T;
263
+ declare function sortPlugins<T extends OrderablePlugin>(plugins: T[]): T[];
302
264
 
303
265
  /**
304
- * Prevents objects from being awaitable by intercepting the `then` method
305
- * when called by the native await mechanism. This is useful for preventing
306
- * accidental awaiting of objects that aren't meant to be promises.
266
+ * Creates a promise together with its associated `resolve` and `reject`
267
+ * functions.
268
+ *
269
+ * Equivalent to `Promise.withResolvers()`, but works in environments
270
+ * where that API is not yet available.
307
271
  */
308
- declare function preventNativeAwait<T extends object>(target: T): T;
272
+ declare function promiseWithResolvers<T>(): {
273
+ promise: Promise<T>;
274
+ resolve: (v: T) => void;
275
+ reject: (reason: unknown) => void;
276
+ };
277
+
278
+ type Value<T, TArgs extends any[] = []> = T | ((...args: TArgs) => T);
279
+ declare function value<T, TArgs extends any[]>(value: Value<T, TArgs>, ...args: NoInfer<TArgs>): T extends Value<infer U, any> ? U : never;
280
+
309
281
  /**
310
- * Create a proxy that overlays one object (`overlay`) on top of another (`target`).
282
+ * Creates a proxy that overlays a `partial` object on top of a `target`.
311
283
  *
312
- * - Properties from `overlay` take precedence.
313
- * - Properties not in `overlay` fall back to `target`.
314
- * - Methods from either object are bound to `overlay` so `this` is consistent.
284
+ * - Properties from `partial` take precedence.
285
+ * - Properties not present in `partial` fall back to the resolved `target`.
286
+ * - Methods are bound to the proxy to ensure a consistent `this` context.
315
287
  *
316
- * Useful when you want to override or extend behavior without fully copying/merging objects.
288
+ * Useful for overriding specific properties of an object while delegating
289
+ * all other access to the original target without needing to know its full structure.
317
290
  */
318
- declare function overlayProxy<T extends object, U extends object>(target: Value<T>, partial: U): U & Omit<T, keyof U>;
291
+ declare function override<T extends object, U extends object>(target: Value<T>, partial: U): U & Omit<T, keyof U>;
319
292
 
320
293
  interface AsyncIdQueueCloseOptions {
321
294
  id?: string;
@@ -325,21 +298,57 @@ declare class AsyncIdQueue<T> {
325
298
  private readonly openIds;
326
299
  private readonly queues;
327
300
  private readonly waiters;
328
- get length(): number;
329
- get waiterIds(): string[];
330
- hasBufferedItems(id: string): boolean;
301
+ get size(): number;
331
302
  open(id: string): void;
332
303
  isOpen(id: string): boolean;
333
304
  push(id: string, item: T): void;
334
305
  pull(id: string): Promise<T>;
335
306
  close({ id, reason }?: AsyncIdQueueCloseOptions): void;
336
- assertOpen(id: string): void;
307
+ private assertOpen;
337
308
  }
338
309
 
339
310
  /**
340
- * Converts a `ReadableStream` into an `AsyncIteratorClass`.
311
+ * Returns a signal that aborts only after all provided signals are aborted.
312
+ */
313
+ declare function allAbortSignal(signals: readonly (AbortSignal | undefined)[]): AbortSignal | undefined;
314
+ /**
315
+ * Returns a signal that aborts as soon as any of the provided signals aborts,
316
+ * with the same abort reason.
317
+ */
318
+ declare function anyAbortSignal(signals: readonly (AbortSignal | undefined)[]): AbortSignal | undefined;
319
+ declare function runWithSignal<T>(signal: AbortSignal | undefined, fn: () => Promise<T>): Promise<T>;
320
+
321
+ declare function replicateReadableStream<T>(stream: ReadableStream<T>, count: number): ReadableStream<T>[];
322
+ type ReadableStreamReadResult<T> = {
323
+ done: false;
324
+ value: T;
325
+ } | {
326
+ done: true;
327
+ value?: undefined | T;
328
+ };
329
+ interface WrapReadableStreamOptions<T, TMapped> {
330
+ /**
331
+ * Any call to the original stream reader will be executed inside this function.
332
+ * Useful when you want execution to happen within a specific context,
333
+ * such as AsyncLocalStorage.
334
+ */
335
+ runWith?: <T>(run: () => Promise<T>) => Promise<T>;
336
+ mapResult?: (result: ReadableStreamReadResult<T>) => Promisable<ReadableStreamReadResult<TMapped>>;
337
+ mapError?: (error: ThrowableError) => Promisable<ThrowableError>;
338
+ onError?: (error: ThrowableError) => Promisable<void>;
339
+ /**
340
+ * Guaranteed to execute exactly once after the stream finishes or is cancelled.
341
+ */
342
+ onFinish?: () => Promisable<void>;
343
+ }
344
+ declare function wrapReadableStream<T, TMapped = T>(stream: ReadableStream<T>, { runWith, mapResult, mapError, onError, onFinish }: WrapReadableStreamOptions<T, TMapped>): NoInfer<ReadableStream<TMapped>>;
345
+ declare function traceReadableStream<T>(options: StartSpanOptions | string, stream: ReadableStream<T>): ReadableStream<T>;
346
+ /**
347
+ * Converts a {@link ReadableStream} into an {@link AsyncIteratorClass}.
341
348
  */
342
- declare function streamToAsyncIteratorClass<T>(stream: ReadableStream<T>): AsyncIteratorClass<T>;
349
+ declare function streamToAsyncIteratorObject<T>(stream: ReadableStream<T>, { signal }?: {
350
+ signal?: undefined | AbortSignal;
351
+ }): AsyncIteratorClass<T>;
343
352
  /**
344
353
  * Converts an `AsyncIterator` into a `ReadableStream`.
345
354
  */
@@ -352,5 +361,5 @@ declare function asyncIteratorToUnproxiedDataStream<T>(iterator: AsyncIterator<T
352
361
 
353
362
  declare function tryDecodeURIComponent(value: string): string;
354
363
 
355
- export { AbortError, AsyncIdQueue, AsyncIteratorClass, EventPublisher, NullProtoObj, ORPC_NAME, ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, SequentialIdGenerator, asyncIteratorToStream, asyncIteratorToUnproxiedDataStream, asyncIteratorWithSpan, clone, compareSequentialIds, defer, fallback, findDeepMatches, get, getConstructor, getGlobalOtelConfig, intercept, isAsyncIteratorObject, isObject, isPropertyKey, isTypescriptObject, logError, onError, onFinish, onStart, onSuccess, once, overlayProxy, parseEmptyableJSON, preventNativeAwait, readAsBuffer, replicateAsyncIterator, resolveMaybeOptionalOptions, runInSpanContext, runWithSpan, sequential, setGlobalOtelConfig, setSpanAttribute, setSpanError, splitInHalf, startSpan, streamToAsyncIteratorClass, stringifyJSON, toArray, toOtelException, toSpanAttributeValue, tryDecodeURIComponent, value };
356
- export type { AnyFunction, AsyncIdQueueCloseOptions, AsyncIteratorClassCleanupFn, AsyncIteratorClassNextFn, AsyncIteratorWithSpanOptions, EventPublisherOptions, EventPublisherSubscribeIteratorOptions, InferAsyncIterableYield, InterceptableOptions, Interceptor, InterceptorOptions, IntersectPick, MaybeOptionalOptions, OmitChainMethodDeep, OnFinishState, OtelConfig, PromiseWithError, Registry, RunWithSpanOptions, Segment, SetOptional, SetSpanErrorOptions, ThrowableError, Value };
364
+ export { AsyncIdQueue, NullProtoObj, ORPC_NAME, allAbortSignal, anyAbortSignal, asyncIteratorToStream, asyncIteratorToUnproxiedDataStream, bindMethods, clone, compareSequentialIds, consumeAsyncIterator, defer, findDeepMatches, get, getConstructor, getOpenTelemetryConfig, intercept, isAbortError, isCompressibleContentType, isDeepEqual, isPlainObject, isPropertyKey, loadBytes, matchesHttpPath, matchesHttpPathPrefix, mergeHttpPath, normalizeHttpPath, omit, onAsyncIteratorObjectError, onError, onFinish, onReadableStreamError, onStart, onSuccess, once, override, pathToHttpPath, promiseWithResolvers, recordSpanError, replicateAsyncIterator, replicateReadableStream, resolveMaybeOptionalOptions, runInSpanContext, runWithSignal, runWithSpan, set, setOpenTelemetryConfig, setSpanAttributeIfDefined, sortPlugins, splitInHalf, startSpan, streamToAsyncIteratorObject, toOtelException, toSpanAttributeValue, toStringOrBytes, traceAsyncIterator, traceReadableStream, tryDecodeURIComponent, tryOrUndefined, value, wrapAsyncIterator, wrapReadableStream };
365
+ export type { AnyFunction, AsyncIdQueueCloseOptions, ConsumeAsyncIteratorOptions, InterceptableOptions, Interceptor, InterceptorOptions, IntersectPick, MaybeOptionalOptions, OnFinishState, OpenTelemetryConfig, OrderablePlugin, PromiseWithError, Public, ReadableStreamReadResult, Registry, RunWithSpanOptions, Segment, StartSpanOptions, ThrowableError, Value, WrapAsyncIteratorOptions, WrapReadableStreamOptions };