@orpc/shared 0.0.0-next.347f023 → 0.0.0-next.34c9217

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.mts CHANGED
@@ -30,7 +30,7 @@ type OmitChainMethodDeep<T extends object, K extends keyof any> = {
30
30
 
31
31
  declare const ORPC_NAME = "orpc";
32
32
  declare const ORPC_SHARED_PACKAGE_NAME = "@orpc/shared";
33
- declare const ORPC_SHARED_PACKAGE_VERSION = "0.0.0-next.347f023";
33
+ declare const ORPC_SHARED_PACKAGE_VERSION = "0.0.0-next.34c9217";
34
34
 
35
35
  /**
36
36
  * Error thrown when an operation is aborted.
@@ -60,7 +60,7 @@ interface EventPublisherSubscribeIteratorOptions extends EventPublisherOptions {
60
60
  /**
61
61
  * Aborts the async iterator. Throws if aborted before or during pulling.
62
62
  */
63
- signal?: AbortSignal;
63
+ signal?: AbortSignal | undefined;
64
64
  }
65
65
  declare class EventPublisher<T extends Record<PropertyKey, any>> {
66
66
  #private;
@@ -263,6 +263,11 @@ declare function findDeepMatches(check: (value: unknown) => boolean, payload: un
263
263
  maps: Segment[][];
264
264
  values: unknown[];
265
265
  };
266
+ /**
267
+ * Get constructor of the value
268
+ *
269
+ */
270
+ declare function getConstructor(value: unknown): Function | null | undefined;
266
271
  /**
267
272
  * Check if the value is an object even it created by `Object.create(null)` or more tricky way.
268
273
  */
@@ -312,5 +317,5 @@ declare function tryDecodeURIComponent(value: string): string;
312
317
  type Value<T, TArgs extends any[] = []> = T | ((...args: TArgs) => T);
313
318
  declare function value<T, TArgs extends any[]>(value: Value<T, TArgs>, ...args: NoInfer<TArgs>): T extends Value<infer U, any> ? U : never;
314
319
 
315
- export { AbortError, AsyncIdQueue, AsyncIteratorClass, EventPublisher, NullProtoObj, ORPC_NAME, ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, SequentialIdGenerator, asyncIteratorToStream, asyncIteratorWithSpan, clone, defer, findDeepMatches, get, getGlobalOtelConfig, intercept, isAsyncIteratorObject, isObject, isPropertyKey, isTypescriptObject, onError, onFinish, onStart, onSuccess, once, parseEmptyableJSON, preventNativeAwait, readAsBuffer, replicateAsyncIterator, resolveMaybeOptionalOptions, runInSpanContext, runWithSpan, sequential, setGlobalOtelConfig, setSpanAttribute, setSpanError, splitInHalf, startSpan, streamToAsyncIteratorClass, stringifyJSON, toArray, toOtelException, toSpanAttributeValue, tryDecodeURIComponent, value };
320
+ export { AbortError, AsyncIdQueue, AsyncIteratorClass, EventPublisher, NullProtoObj, ORPC_NAME, ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, SequentialIdGenerator, asyncIteratorToStream, asyncIteratorWithSpan, clone, defer, findDeepMatches, get, getConstructor, getGlobalOtelConfig, intercept, isAsyncIteratorObject, isObject, isPropertyKey, isTypescriptObject, onError, onFinish, onStart, onSuccess, once, parseEmptyableJSON, preventNativeAwait, readAsBuffer, replicateAsyncIterator, resolveMaybeOptionalOptions, runInSpanContext, runWithSpan, sequential, setGlobalOtelConfig, setSpanAttribute, setSpanError, splitInHalf, startSpan, streamToAsyncIteratorClass, stringifyJSON, toArray, toOtelException, toSpanAttributeValue, tryDecodeURIComponent, value };
316
321
  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 };
package/dist/index.d.ts CHANGED
@@ -30,7 +30,7 @@ type OmitChainMethodDeep<T extends object, K extends keyof any> = {
30
30
 
31
31
  declare const ORPC_NAME = "orpc";
32
32
  declare const ORPC_SHARED_PACKAGE_NAME = "@orpc/shared";
33
- declare const ORPC_SHARED_PACKAGE_VERSION = "0.0.0-next.347f023";
33
+ declare const ORPC_SHARED_PACKAGE_VERSION = "0.0.0-next.34c9217";
34
34
 
35
35
  /**
36
36
  * Error thrown when an operation is aborted.
@@ -60,7 +60,7 @@ interface EventPublisherSubscribeIteratorOptions extends EventPublisherOptions {
60
60
  /**
61
61
  * Aborts the async iterator. Throws if aborted before or during pulling.
62
62
  */
63
- signal?: AbortSignal;
63
+ signal?: AbortSignal | undefined;
64
64
  }
65
65
  declare class EventPublisher<T extends Record<PropertyKey, any>> {
66
66
  #private;
@@ -263,6 +263,11 @@ declare function findDeepMatches(check: (value: unknown) => boolean, payload: un
263
263
  maps: Segment[][];
264
264
  values: unknown[];
265
265
  };
266
+ /**
267
+ * Get constructor of the value
268
+ *
269
+ */
270
+ declare function getConstructor(value: unknown): Function | null | undefined;
266
271
  /**
267
272
  * Check if the value is an object even it created by `Object.create(null)` or more tricky way.
268
273
  */
@@ -312,5 +317,5 @@ declare function tryDecodeURIComponent(value: string): string;
312
317
  type Value<T, TArgs extends any[] = []> = T | ((...args: TArgs) => T);
313
318
  declare function value<T, TArgs extends any[]>(value: Value<T, TArgs>, ...args: NoInfer<TArgs>): T extends Value<infer U, any> ? U : never;
314
319
 
315
- export { AbortError, AsyncIdQueue, AsyncIteratorClass, EventPublisher, NullProtoObj, ORPC_NAME, ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, SequentialIdGenerator, asyncIteratorToStream, asyncIteratorWithSpan, clone, defer, findDeepMatches, get, getGlobalOtelConfig, intercept, isAsyncIteratorObject, isObject, isPropertyKey, isTypescriptObject, onError, onFinish, onStart, onSuccess, once, parseEmptyableJSON, preventNativeAwait, readAsBuffer, replicateAsyncIterator, resolveMaybeOptionalOptions, runInSpanContext, runWithSpan, sequential, setGlobalOtelConfig, setSpanAttribute, setSpanError, splitInHalf, startSpan, streamToAsyncIteratorClass, stringifyJSON, toArray, toOtelException, toSpanAttributeValue, tryDecodeURIComponent, value };
320
+ export { AbortError, AsyncIdQueue, AsyncIteratorClass, EventPublisher, NullProtoObj, ORPC_NAME, ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, SequentialIdGenerator, asyncIteratorToStream, asyncIteratorWithSpan, clone, defer, findDeepMatches, get, getConstructor, getGlobalOtelConfig, intercept, isAsyncIteratorObject, isObject, isPropertyKey, isTypescriptObject, onError, onFinish, onStart, onSuccess, once, parseEmptyableJSON, preventNativeAwait, readAsBuffer, replicateAsyncIterator, resolveMaybeOptionalOptions, runInSpanContext, runWithSpan, sequential, setGlobalOtelConfig, setSpanAttribute, setSpanError, splitInHalf, startSpan, streamToAsyncIteratorClass, stringifyJSON, toArray, toOtelException, toSpanAttributeValue, tryDecodeURIComponent, value };
316
321
  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 };
package/dist/index.mjs CHANGED
@@ -21,7 +21,7 @@ function readAsBuffer(source) {
21
21
 
22
22
  const ORPC_NAME = "orpc";
23
23
  const ORPC_SHARED_PACKAGE_NAME = "@orpc/shared";
24
- const ORPC_SHARED_PACKAGE_VERSION = "0.0.0-next.347f023";
24
+ const ORPC_SHARED_PACKAGE_VERSION = "0.0.0-next.34c9217";
25
25
 
26
26
  class AbortError extends Error {
27
27
  constructor(...rest) {
@@ -210,18 +210,16 @@ class AsyncIdQueue {
210
210
  close({ id, reason } = {}) {
211
211
  if (id === void 0) {
212
212
  this.waiters.forEach((pendingPulls, id2) => {
213
- pendingPulls.forEach(([, reject]) => {
214
- reject(reason ?? new Error(`[AsyncIdQueue] Queue[${id2}] was closed or aborted while waiting for pulling.`));
215
- });
213
+ const error2 = reason ?? new AbortError(`[AsyncIdQueue] Queue[${id2}] was closed or aborted while waiting for pulling.`);
214
+ pendingPulls.forEach(([, reject]) => reject(error2));
216
215
  });
217
216
  this.waiters.clear();
218
217
  this.openIds.clear();
219
218
  this.queues.clear();
220
219
  return;
221
220
  }
222
- this.waiters.get(id)?.forEach(([, reject]) => {
223
- reject(reason ?? new Error(`[AsyncIdQueue] Queue[${id}] was closed or aborted while waiting for pulling.`));
224
- });
221
+ const error = reason ?? new AbortError(`[AsyncIdQueue] Queue[${id}] was closed or aborted while waiting for pulling.`);
222
+ this.waiters.get(id)?.forEach(([, reject]) => reject(error));
225
223
  this.waiters.delete(id);
226
224
  this.openIds.delete(id);
227
225
  this.queues.delete(id);
@@ -304,53 +302,51 @@ class AsyncIteratorClass {
304
302
  }
305
303
  function replicateAsyncIterator(source, count) {
306
304
  const queue = new AsyncIdQueue();
307
- const replicated = [];
308
- let error;
305
+ const ids = Array.from({ length: count }, (_, i) => i.toString());
306
+ let isSourceFinished = false;
309
307
  const start = once(async () => {
310
308
  try {
311
309
  while (true) {
312
310
  const item = await source.next();
313
- for (let i = 0; i < count; i++) {
314
- const id = i.toString();
311
+ ids.forEach((id) => {
315
312
  if (queue.isOpen(id)) {
316
- queue.push(id, item);
313
+ queue.push(id, { next: item });
317
314
  }
318
- }
315
+ });
319
316
  if (item.done) {
320
317
  break;
321
318
  }
322
319
  }
323
- } catch (reason) {
324
- error = { value: reason };
325
- queue.waiterIds.forEach((id) => {
326
- queue.close({ id, reason });
320
+ } catch (error) {
321
+ ids.forEach((id) => {
322
+ if (queue.isOpen(id)) {
323
+ queue.push(id, { error });
324
+ }
327
325
  });
326
+ } finally {
327
+ isSourceFinished = true;
328
328
  }
329
329
  });
330
- for (let i = 0; i < count; i++) {
331
- const id = i.toString();
330
+ const replicated = ids.map((id) => {
332
331
  queue.open(id);
333
- replicated.push(new AsyncIteratorClass(
334
- () => {
332
+ return new AsyncIteratorClass(
333
+ async () => {
335
334
  start();
336
- return new Promise((resolve, reject) => {
337
- if (!error || queue.hasBufferedItems(id)) {
338
- queue.pull(id).then(resolve).catch(reject);
339
- } else {
340
- reject(error.value);
341
- }
342
- });
335
+ const item = await queue.pull(id);
336
+ if (item.next) {
337
+ return item.next;
338
+ }
339
+ throw item.error;
343
340
  },
344
341
  async (reason) => {
345
342
  queue.close({ id });
346
- if (reason !== "next") {
347
- if (!queue.length) {
348
- await source?.return?.();
349
- }
343
+ if (reason !== "next" && !queue.length && !isSourceFinished) {
344
+ isSourceFinished = true;
345
+ await source?.return?.();
350
346
  }
351
347
  }
352
- ));
353
- }
348
+ );
349
+ });
354
350
  return replicated;
355
351
  }
356
352
  function asyncIteratorWithSpan({ name, ...options }, iterator) {
@@ -546,6 +542,12 @@ function findDeepMatches(check, payload, segments = [], maps = [], values = [])
546
542
  }
547
543
  return { maps, values };
548
544
  }
545
+ function getConstructor(value) {
546
+ if (!isTypescriptObject(value)) {
547
+ return null;
548
+ }
549
+ return Object.getPrototypeOf(value)?.constructor;
550
+ }
549
551
  function isObject(value) {
550
552
  if (!value || typeof value !== "object") {
551
553
  return false;
@@ -665,4 +667,4 @@ function value(value2, ...args) {
665
667
  return value2;
666
668
  }
667
669
 
668
- export { AbortError, AsyncIdQueue, AsyncIteratorClass, EventPublisher, NullProtoObj, ORPC_NAME, ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, SequentialIdGenerator, asyncIteratorToStream, asyncIteratorWithSpan, clone, defer, findDeepMatches, get, getGlobalOtelConfig, intercept, isAsyncIteratorObject, isObject, isPropertyKey, isTypescriptObject, onError, onFinish, onStart, onSuccess, once, parseEmptyableJSON, preventNativeAwait, readAsBuffer, replicateAsyncIterator, resolveMaybeOptionalOptions, runInSpanContext, runWithSpan, sequential, setGlobalOtelConfig, setSpanAttribute, setSpanError, splitInHalf, startSpan, streamToAsyncIteratorClass, stringifyJSON, toArray, toOtelException, toSpanAttributeValue, tryDecodeURIComponent, value };
670
+ export { AbortError, AsyncIdQueue, AsyncIteratorClass, EventPublisher, NullProtoObj, ORPC_NAME, ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, SequentialIdGenerator, asyncIteratorToStream, asyncIteratorWithSpan, clone, defer, findDeepMatches, get, getConstructor, getGlobalOtelConfig, intercept, isAsyncIteratorObject, isObject, isPropertyKey, isTypescriptObject, onError, onFinish, onStart, onSuccess, once, parseEmptyableJSON, preventNativeAwait, readAsBuffer, replicateAsyncIterator, resolveMaybeOptionalOptions, runInSpanContext, runWithSpan, sequential, setGlobalOtelConfig, setSpanAttribute, setSpanError, splitInHalf, startSpan, streamToAsyncIteratorClass, stringifyJSON, toArray, toOtelException, toSpanAttributeValue, tryDecodeURIComponent, value };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/shared",
3
3
  "type": "module",
4
- "version": "0.0.0-next.347f023",
4
+ "version": "0.0.0-next.34c9217",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -37,9 +37,9 @@
37
37
  },
38
38
  "devDependencies": {
39
39
  "@opentelemetry/api": "^1.9.0",
40
- "arktype": "2.1.20",
40
+ "arktype": "2.1.21",
41
41
  "valibot": "^1.1.0",
42
- "zod": "^4.1.1"
42
+ "zod": "^4.1.5"
43
43
  },
44
44
  "scripts": {
45
45
  "build": "unbuild",