go-go-try 7.4.0 → 7.4.1

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/README.md CHANGED
@@ -408,15 +408,50 @@ const [errors, results] = await goTryAll([
408
408
  // - Limit expensive computation resources
409
409
  ```
410
410
 
411
- ### `goTryAllRaw<T>(items, options?)`
411
+ ### `goTryAllRaw<T, E>(items, options?)`
412
412
 
413
413
  Like `goTryAll`, but returns raw Error objects instead of error messages.
414
+ Non-tagged errors are wrapped in `UnknownError` by default (consistent with `goTryRaw`).
415
+ Tagged errors pass through unchanged.
416
+
417
+ Supports the same `errorClass` and `systemErrorClass` options as `goTryRaw`, plus `concurrency` control.
414
418
 
415
419
  ```ts
416
- function goTryAllRaw<T extends readonly unknown[]>(
420
+ interface GoTryAllRawOptions<E> {
421
+ concurrency?: number
422
+ // errorClass and systemErrorClass are mutually exclusive
423
+ errorClass?: ErrorConstructor<E> // Wrap ALL errors
424
+ systemErrorClass?: ErrorConstructor<E> // Only wrap non-tagged errors
425
+ }
426
+
427
+ function goTryAllRaw<T extends readonly unknown[], E = UnknownError>(
417
428
  items: { [K in keyof T]: Promise<T[K]> | (() => Promise<T[K]>) },
418
- options?: GoTryAllOptions
419
- ): Promise<[{ [K in keyof T]: Error | undefined }, { [K in keyof T]: T[K] | undefined }]>
429
+ options?: GoTryAllRawOptions<E>
430
+ ): Promise<[{ [K in keyof T]: E | undefined }, { [K in keyof T]: T[K] | undefined }]>
431
+ ```
432
+
433
+ **Example:**
434
+ ```ts
435
+ const DatabaseError = taggedError('DatabaseError')
436
+
437
+ // Default behavior - non-tagged errors wrapped in UnknownError
438
+ const [errors1] = await goTryAllRaw([
439
+ fetchUser(1),
440
+ fetchUser(2),
441
+ ])
442
+
443
+ // Wrap all errors in DatabaseError
444
+ const [errors2] = await goTryAllRaw([
445
+ fetchUser(1),
446
+ fetchUser(2),
447
+ ], { errorClass: DatabaseError })
448
+
449
+ // Combine concurrency control with errorClass
450
+ const [errors3] = await goTryAllRaw([
451
+ () => fetchUser(1),
452
+ () => fetchUser(2),
453
+ () => fetchUser(3),
454
+ ], { concurrency: 2, errorClass: DatabaseError })
420
455
  ```
421
456
 
422
457
  ### `goTryOr<T>(value, defaultValue)`
@@ -591,6 +626,12 @@ type GoTryRawOptions<E> =
591
626
  | { errorClass: ErrorConstructor<E>; systemErrorClass?: never }
592
627
  | { errorClass?: never; systemErrorClass: ErrorConstructor<E> }
593
628
  | { errorClass?: never; systemErrorClass?: never }
629
+
630
+ // Options for goTryAllRaw (includes concurrency + error class options)
631
+ type GoTryAllRawOptions<E> =
632
+ | { concurrency?: number; errorClass: ErrorConstructor<E>; systemErrorClass?: never }
633
+ | { concurrency?: number; errorClass?: never; systemErrorClass: ErrorConstructor<E> }
634
+ | { concurrency?: number; errorClass?: never; systemErrorClass?: never }
594
635
  ```
595
636
 
596
637
  ## License
package/dist/index.cjs CHANGED
@@ -63,7 +63,7 @@ function taggedError(tag) {
63
63
 
64
64
  const UnknownError = taggedError("UnknownError");
65
65
 
66
- function isTaggedError(err) {
66
+ function isTaggedError$1(err) {
67
67
  return isError(err) && "_tag" in err && typeof err._tag === "string";
68
68
  }
69
69
  function goTryRaw(value, options) {
@@ -80,7 +80,7 @@ function goTryRaw(value, options) {
80
80
  return new errorClass(String(err));
81
81
  }
82
82
  if (actualSystemErrorClass) {
83
- if (isTaggedError(err)) {
83
+ if (isTaggedError$1(err)) {
84
84
  return err;
85
85
  }
86
86
  if (err === void 0) {
@@ -119,6 +119,31 @@ function goTryOr(value, defaultValue) {
119
119
  }
120
120
  }
121
121
 
122
+ function isTaggedError(err) {
123
+ return isError(err) && "_tag" in err && typeof err._tag === "string";
124
+ }
125
+ function wrapError(err, errorClass, systemErrorClass) {
126
+ if (errorClass) {
127
+ if (err === void 0) {
128
+ return new errorClass("undefined");
129
+ }
130
+ if (isError(err)) {
131
+ return new errorClass(err.message, { cause: err });
132
+ }
133
+ return new errorClass(String(err));
134
+ }
135
+ const actualSystemErrorClass = systemErrorClass ?? UnknownError;
136
+ if (isTaggedError(err)) {
137
+ return err;
138
+ }
139
+ if (err === void 0) {
140
+ return new actualSystemErrorClass("undefined");
141
+ }
142
+ if (isError(err)) {
143
+ return new actualSystemErrorClass(err.message, { cause: err });
144
+ }
145
+ return new actualSystemErrorClass(String(err));
146
+ }
122
147
  async function runWithConcurrency(items, concurrency) {
123
148
  if (items.length === 0) {
124
149
  return [];
@@ -166,6 +191,7 @@ async function goTryAll(items, options) {
166
191
  return [errors, results];
167
192
  }
168
193
  async function goTryAllRaw(items, options) {
194
+ const { errorClass, systemErrorClass } = options || {};
169
195
  const settled = await runWithConcurrency(items, options?.concurrency ?? 0);
170
196
  const errors = [];
171
197
  const results = [];
@@ -176,7 +202,7 @@ async function goTryAllRaw(items, options) {
176
202
  results[i] = item.value;
177
203
  } else {
178
204
  const reason = item.reason;
179
- errors[i] = isError(reason) ? reason : new Error(String(reason));
205
+ errors[i] = wrapError(reason, errorClass, systemErrorClass);
180
206
  results[i] = void 0;
181
207
  }
182
208
  }
package/dist/index.d.cts CHANGED
@@ -42,6 +42,24 @@ type GoTryRawOptions<E = Error> = {
42
42
  errorClass?: never;
43
43
  systemErrorClass?: never;
44
44
  };
45
+ /**
46
+ * Options for goTryAllRaw function.
47
+ * Includes concurrency control and error class options.
48
+ * errorClass and systemErrorClass are mutually exclusive.
49
+ */
50
+ type GoTryAllRawOptions<E = Error> = {
51
+ concurrency?: number;
52
+ errorClass: ErrorConstructor<E>;
53
+ systemErrorClass?: never;
54
+ } | {
55
+ concurrency?: number;
56
+ errorClass?: never;
57
+ systemErrorClass: ErrorConstructor<E>;
58
+ } | {
59
+ concurrency?: number;
60
+ errorClass?: never;
61
+ systemErrorClass?: never;
62
+ };
45
63
  /**
46
64
  * Creates a union type from multiple tagged error classes.
47
65
  *
@@ -227,18 +245,25 @@ declare function goTryAll<T extends readonly unknown[]>(items: {
227
245
  }]>;
228
246
  /**
229
247
  * Like `goTryAll`, but returns raw Error objects instead of error messages.
248
+ * Non-tagged errors are wrapped in `UnknownError` by default (consistent with `goTryRaw`).
249
+ * Tagged errors pass through unchanged.
250
+ *
251
+ * Supports `errorClass` and `systemErrorClass` options (mutually exclusive):
252
+ * - `errorClass`: Wrap ALL errors in the specified class
253
+ * - `systemErrorClass`: Only wrap non-tagged errors (defaults to UnknownError)
230
254
  *
231
255
  * @template T The tuple type of all promise results
256
+ * @template E The type of the error
232
257
  * @param {readonly [...{ [K in keyof T]: Promise<T[K]> | (() => Promise<T[K]>) }]} items - Array of promises or factories
233
- * @param {GoTryAllOptions} options - Optional configuration
234
- * @returns {Promise<[{ [K in keyof T]: Error | undefined }, { [K in keyof T]: T[K] | undefined }]>}
258
+ * @param {GoTryAllRawOptions<E>} options - Optional configuration
259
+ * @returns {Promise<[{ [K in keyof T]: E | undefined }, { [K in keyof T]: T[K] | undefined }]>}
235
260
  * A tuple where the first element is a tuple of Error objects (or undefined) and
236
261
  * the second element is a tuple of results (or undefined), preserving input order
237
262
  */
238
- declare function goTryAllRaw<T extends readonly unknown[]>(items: {
263
+ declare function goTryAllRaw<T extends readonly unknown[], E = InstanceType<typeof UnknownError>>(items: {
239
264
  [K in keyof T]: Promise<T[K]> | (() => Promise<T[K]>);
240
- }, options?: GoTryAllOptions): Promise<[{
241
- [K in keyof T]: Error | undefined;
265
+ }, options?: GoTryAllRawOptions<E>): Promise<[{
266
+ [K in keyof T]: E | undefined;
242
267
  }, {
243
268
  [K in keyof T]: T[K] | undefined;
244
269
  }]>;
@@ -351,5 +376,5 @@ declare function failure<E>(error: E): Failure<E>;
351
376
  declare function assertNever(value: never): never;
352
377
 
353
378
  export { UnknownError, assert, assertNever, failure, goTry, goTryAll, goTryAllRaw, goTryOr, goTryRaw, isFailure, isSuccess, success, taggedError };
354
- export type { ErrorConstructor, Failure, GoTryAllOptions, GoTryRawOptions, MaybePromise, Result, ResultWithDefault, Success, TaggedError, TaggedUnion };
379
+ export type { ErrorConstructor, Failure, GoTryAllOptions, GoTryAllRawOptions, GoTryRawOptions, MaybePromise, Result, ResultWithDefault, Success, TaggedError, TaggedUnion };
355
380
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sources":["../src/types.ts","../src/goTry.ts","../src/unknown-error.ts","../src/goTryRaw.ts","../src/goTryOr.ts","../src/goTryAll.ts","../src/tagged-error.ts","../src/assert.ts","../src/result-helpers.ts"],"mappings":"AAAA;;;AAIM,KAAM,OAAO;AACb,KAAM,OAAO;AACb,KAAM,MAAM,SAAS,OAAO,MAAM,OAAO;AAEzC,KAAM,iBAAiB;AAEvB,KAAM,YAAY,UAAU,OAAO;AAEzC;;;;AAIM,UAAW,WAAW;;;;;AAMtB,UAAW,eAAe;;;;;;;AAQhC;;;AAGM,KAAM,gBAAgB;;;AAO5B;;;;AAIM,KAAM,eAAe,KAAK,KAAK;gBACnB,gBAAgB;;;;sBACU,gBAAgB;;;;;AAG5D;;;;;;;;;;;;;AAaM,KAAM,WAAW,oBAAoB,gBAAgB;iCAC1B,gBAAgB;;;AC3DjD;;;;;;;;;;;;;;;;;;;;AAoBA,iBAAgB,KAAK,sBAAsB,MAAM;AACjD,iBAAgB,KAAK,cAAc,OAAO,MAAM,OAAO,CAAC,MAAM;AAC9D,iBAAgB,KAAK,aAAa,OAAO,MAAM,OAAO,CAAC,MAAM;AAC7D,iBAAgB,KAAK,kBAAkB,MAAM;AAC7C,iBAAgB,KAAK,eAAe,MAAM;;AC1B1C;;;;;;;;;;;;;;;;;AAiBA,cAAa,YAAY;;;;;;;;;;;;;ACPzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,iBAAgB,QAAQ,sBAAsB,MAAM,CAAC,KAAK;AAC1D,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,6BAA6B,eAAe,MAAM,MAAM;AACxH,iBAAgB,QAAQ,cACZ,OAAO,MAChB,OAAO,CAAC,MAAM,CAAC,KAAK;AACvB,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,aACpD,OAAO,cACR,eAAe,MACvB,OAAO,CAAC,MAAM;AACjB,iBAAgB,QAAQ,aACb,OAAO,MACf,OAAO,CAAC,MAAM,CAAC,KAAK;AACvB,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,YACrD,OAAO,cACP,eAAe,MACvB,OAAO,CAAC,MAAM;AACjB,iBAAgB,QAAQ,kBAAkB,MAAM,CAAC,KAAK;AACtD,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,yBAAyB,eAAe,MAAM,MAAM;AACpH,iBAAgB,QAAQ,eAAe,MAAM,CAAC,KAAK;AACnD,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,sBAAsB,eAAe,MAAM,MAAM;;AC5DjH;;;;;;;;;;;;;;;;;;;;;AAqBA,iBAAgB,OAAO,mDAAmD,iBAAiB;AAC3F,iBAAgB,OAAO,cACX,OAAO,mCAEhB,OAAO,CAAC,iBAAiB;AAC5B,iBAAgB,OAAO,aACZ,OAAO,mCAEf,OAAO,CAAC,iBAAiB;AAC5B,iBAAgB,OAAO,+CAA+C,iBAAiB;AACvF,iBAAgB,OAAO,4CAA4C,iBAAiB;;ACgBpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,iBAAsB,QAAQ;oBACH,OAAO,gBAAgB,OAAO;aAC7C,eAAe,GACxB,OAAO;;;;;AAoBV;;;;;;;;;;AAUA,iBAAsB,WAAW;oBACN,OAAO,gBAAgB,OAAO;aAC7C,eAAe,GACxB,OAAO;oBAAoB,KAAK;;;;;ACrHnC;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,iBAAgB,WAAW;;;;;;;;;;;;;AC1B3B;;;;;;;;;;;;;;;;;;;;;;AAsBA,iBAAgB,MAAM,4BAA4B,KAAK;AAEvD;;;;;;;;;;;;;;AAcA,iBAAgB,MAAM,WAAW,KAAK;;ACpCtC,iBAAgB,SAAS,eAAe,MAAM,mBAAmB,OAAO;AAIxE,iBAAgB,SAAS,eAAe,MAAM,mBAAmB,OAAO;AAIxE,iBAAgB,OAAO,eAAe,OAAO;AAI7C,iBAAgB,OAAO,eAAe,OAAO;AAI7C;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,iBAAgB,WAAW","names":[]}
1
+ {"version":3,"file":"index.d.cts","sources":["../src/types.ts","../src/goTry.ts","../src/unknown-error.ts","../src/goTryRaw.ts","../src/goTryOr.ts","../src/goTryAll.ts","../src/tagged-error.ts","../src/assert.ts","../src/result-helpers.ts"],"mappings":"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","names":[]}
package/dist/index.d.mts CHANGED
@@ -42,6 +42,24 @@ type GoTryRawOptions<E = Error> = {
42
42
  errorClass?: never;
43
43
  systemErrorClass?: never;
44
44
  };
45
+ /**
46
+ * Options for goTryAllRaw function.
47
+ * Includes concurrency control and error class options.
48
+ * errorClass and systemErrorClass are mutually exclusive.
49
+ */
50
+ type GoTryAllRawOptions<E = Error> = {
51
+ concurrency?: number;
52
+ errorClass: ErrorConstructor<E>;
53
+ systemErrorClass?: never;
54
+ } | {
55
+ concurrency?: number;
56
+ errorClass?: never;
57
+ systemErrorClass: ErrorConstructor<E>;
58
+ } | {
59
+ concurrency?: number;
60
+ errorClass?: never;
61
+ systemErrorClass?: never;
62
+ };
45
63
  /**
46
64
  * Creates a union type from multiple tagged error classes.
47
65
  *
@@ -227,18 +245,25 @@ declare function goTryAll<T extends readonly unknown[]>(items: {
227
245
  }]>;
228
246
  /**
229
247
  * Like `goTryAll`, but returns raw Error objects instead of error messages.
248
+ * Non-tagged errors are wrapped in `UnknownError` by default (consistent with `goTryRaw`).
249
+ * Tagged errors pass through unchanged.
250
+ *
251
+ * Supports `errorClass` and `systemErrorClass` options (mutually exclusive):
252
+ * - `errorClass`: Wrap ALL errors in the specified class
253
+ * - `systemErrorClass`: Only wrap non-tagged errors (defaults to UnknownError)
230
254
  *
231
255
  * @template T The tuple type of all promise results
256
+ * @template E The type of the error
232
257
  * @param {readonly [...{ [K in keyof T]: Promise<T[K]> | (() => Promise<T[K]>) }]} items - Array of promises or factories
233
- * @param {GoTryAllOptions} options - Optional configuration
234
- * @returns {Promise<[{ [K in keyof T]: Error | undefined }, { [K in keyof T]: T[K] | undefined }]>}
258
+ * @param {GoTryAllRawOptions<E>} options - Optional configuration
259
+ * @returns {Promise<[{ [K in keyof T]: E | undefined }, { [K in keyof T]: T[K] | undefined }]>}
235
260
  * A tuple where the first element is a tuple of Error objects (or undefined) and
236
261
  * the second element is a tuple of results (or undefined), preserving input order
237
262
  */
238
- declare function goTryAllRaw<T extends readonly unknown[]>(items: {
263
+ declare function goTryAllRaw<T extends readonly unknown[], E = InstanceType<typeof UnknownError>>(items: {
239
264
  [K in keyof T]: Promise<T[K]> | (() => Promise<T[K]>);
240
- }, options?: GoTryAllOptions): Promise<[{
241
- [K in keyof T]: Error | undefined;
265
+ }, options?: GoTryAllRawOptions<E>): Promise<[{
266
+ [K in keyof T]: E | undefined;
242
267
  }, {
243
268
  [K in keyof T]: T[K] | undefined;
244
269
  }]>;
@@ -351,5 +376,5 @@ declare function failure<E>(error: E): Failure<E>;
351
376
  declare function assertNever(value: never): never;
352
377
 
353
378
  export { UnknownError, assert, assertNever, failure, goTry, goTryAll, goTryAllRaw, goTryOr, goTryRaw, isFailure, isSuccess, success, taggedError };
354
- export type { ErrorConstructor, Failure, GoTryAllOptions, GoTryRawOptions, MaybePromise, Result, ResultWithDefault, Success, TaggedError, TaggedUnion };
379
+ export type { ErrorConstructor, Failure, GoTryAllOptions, GoTryAllRawOptions, GoTryRawOptions, MaybePromise, Result, ResultWithDefault, Success, TaggedError, TaggedUnion };
355
380
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sources":["../src/types.ts","../src/goTry.ts","../src/unknown-error.ts","../src/goTryRaw.ts","../src/goTryOr.ts","../src/goTryAll.ts","../src/tagged-error.ts","../src/assert.ts","../src/result-helpers.ts"],"mappings":"AAAA;;;AAIM,KAAM,OAAO;AACb,KAAM,OAAO;AACb,KAAM,MAAM,SAAS,OAAO,MAAM,OAAO;AAEzC,KAAM,iBAAiB;AAEvB,KAAM,YAAY,UAAU,OAAO;AAEzC;;;;AAIM,UAAW,WAAW;;;;;AAMtB,UAAW,eAAe;;;;;;;AAQhC;;;AAGM,KAAM,gBAAgB;;;AAO5B;;;;AAIM,KAAM,eAAe,KAAK,KAAK;gBACnB,gBAAgB;;;;sBACU,gBAAgB;;;;;AAG5D;;;;;;;;;;;;;AAaM,KAAM,WAAW,oBAAoB,gBAAgB;iCAC1B,gBAAgB;;;AC3DjD;;;;;;;;;;;;;;;;;;;;AAoBA,iBAAgB,KAAK,sBAAsB,MAAM;AACjD,iBAAgB,KAAK,cAAc,OAAO,MAAM,OAAO,CAAC,MAAM;AAC9D,iBAAgB,KAAK,aAAa,OAAO,MAAM,OAAO,CAAC,MAAM;AAC7D,iBAAgB,KAAK,kBAAkB,MAAM;AAC7C,iBAAgB,KAAK,eAAe,MAAM;;AC1B1C;;;;;;;;;;;;;;;;;AAiBA,cAAa,YAAY;;;;;;;;;;;;;ACPzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,iBAAgB,QAAQ,sBAAsB,MAAM,CAAC,KAAK;AAC1D,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,6BAA6B,eAAe,MAAM,MAAM;AACxH,iBAAgB,QAAQ,cACZ,OAAO,MAChB,OAAO,CAAC,MAAM,CAAC,KAAK;AACvB,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,aACpD,OAAO,cACR,eAAe,MACvB,OAAO,CAAC,MAAM;AACjB,iBAAgB,QAAQ,aACb,OAAO,MACf,OAAO,CAAC,MAAM,CAAC,KAAK;AACvB,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,YACrD,OAAO,cACP,eAAe,MACvB,OAAO,CAAC,MAAM;AACjB,iBAAgB,QAAQ,kBAAkB,MAAM,CAAC,KAAK;AACtD,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,yBAAyB,eAAe,MAAM,MAAM;AACpH,iBAAgB,QAAQ,eAAe,MAAM,CAAC,KAAK;AACnD,iBAAgB,QAAQ,QAAQ,YAAY,QAAQ,YAAY,sBAAsB,eAAe,MAAM,MAAM;;AC5DjH;;;;;;;;;;;;;;;;;;;;;AAqBA,iBAAgB,OAAO,mDAAmD,iBAAiB;AAC3F,iBAAgB,OAAO,cACX,OAAO,mCAEhB,OAAO,CAAC,iBAAiB;AAC5B,iBAAgB,OAAO,aACZ,OAAO,mCAEf,OAAO,CAAC,iBAAiB;AAC5B,iBAAgB,OAAO,+CAA+C,iBAAiB;AACvF,iBAAgB,OAAO,4CAA4C,iBAAiB;;ACgBpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,iBAAsB,QAAQ;oBACH,OAAO,gBAAgB,OAAO;aAC7C,eAAe,GACxB,OAAO;;;;;AAoBV;;;;;;;;;;AAUA,iBAAsB,WAAW;oBACN,OAAO,gBAAgB,OAAO;aAC7C,eAAe,GACxB,OAAO;oBAAoB,KAAK;;;;;ACrHnC;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,iBAAgB,WAAW;;;;;;;;;;;;;AC1B3B;;;;;;;;;;;;;;;;;;;;;;AAsBA,iBAAgB,MAAM,4BAA4B,KAAK;AAEvD;;;;;;;;;;;;;;AAcA,iBAAgB,MAAM,WAAW,KAAK;;ACpCtC,iBAAgB,SAAS,eAAe,MAAM,mBAAmB,OAAO;AAIxE,iBAAgB,SAAS,eAAe,MAAM,mBAAmB,OAAO;AAIxE,iBAAgB,OAAO,eAAe,OAAO;AAI7C,iBAAgB,OAAO,eAAe,OAAO;AAI7C;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,iBAAgB,WAAW","names":[]}
1
+ {"version":3,"file":"index.d.mts","sources":["../src/types.ts","../src/goTry.ts","../src/unknown-error.ts","../src/goTryRaw.ts","../src/goTryOr.ts","../src/goTryAll.ts","../src/tagged-error.ts","../src/assert.ts","../src/result-helpers.ts"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -61,7 +61,7 @@ function taggedError(tag) {
61
61
 
62
62
  const UnknownError = taggedError("UnknownError");
63
63
 
64
- function isTaggedError(err) {
64
+ function isTaggedError$1(err) {
65
65
  return isError(err) && "_tag" in err && typeof err._tag === "string";
66
66
  }
67
67
  function goTryRaw(value, options) {
@@ -78,7 +78,7 @@ function goTryRaw(value, options) {
78
78
  return new errorClass(String(err));
79
79
  }
80
80
  if (actualSystemErrorClass) {
81
- if (isTaggedError(err)) {
81
+ if (isTaggedError$1(err)) {
82
82
  return err;
83
83
  }
84
84
  if (err === void 0) {
@@ -117,6 +117,31 @@ function goTryOr(value, defaultValue) {
117
117
  }
118
118
  }
119
119
 
120
+ function isTaggedError(err) {
121
+ return isError(err) && "_tag" in err && typeof err._tag === "string";
122
+ }
123
+ function wrapError(err, errorClass, systemErrorClass) {
124
+ if (errorClass) {
125
+ if (err === void 0) {
126
+ return new errorClass("undefined");
127
+ }
128
+ if (isError(err)) {
129
+ return new errorClass(err.message, { cause: err });
130
+ }
131
+ return new errorClass(String(err));
132
+ }
133
+ const actualSystemErrorClass = systemErrorClass ?? UnknownError;
134
+ if (isTaggedError(err)) {
135
+ return err;
136
+ }
137
+ if (err === void 0) {
138
+ return new actualSystemErrorClass("undefined");
139
+ }
140
+ if (isError(err)) {
141
+ return new actualSystemErrorClass(err.message, { cause: err });
142
+ }
143
+ return new actualSystemErrorClass(String(err));
144
+ }
120
145
  async function runWithConcurrency(items, concurrency) {
121
146
  if (items.length === 0) {
122
147
  return [];
@@ -164,6 +189,7 @@ async function goTryAll(items, options) {
164
189
  return [errors, results];
165
190
  }
166
191
  async function goTryAllRaw(items, options) {
192
+ const { errorClass, systemErrorClass } = options || {};
167
193
  const settled = await runWithConcurrency(items, options?.concurrency ?? 0);
168
194
  const errors = [];
169
195
  const results = [];
@@ -174,7 +200,7 @@ async function goTryAllRaw(items, options) {
174
200
  results[i] = item.value;
175
201
  } else {
176
202
  const reason = item.reason;
177
- errors[i] = isError(reason) ? reason : new Error(String(reason));
203
+ errors[i] = wrapError(reason, errorClass, systemErrorClass);
178
204
  results[i] = void 0;
179
205
  }
180
206
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "go-go-try",
3
- "version": "7.4.0",
3
+ "version": "7.4.1",
4
4
  "description": "Tries to execute a sync/async function, returns a result tuple",
5
5
  "license": "MIT",
6
6
  "repository": "thelinuxlich/go-go-try",
package/src/goTryAll.ts CHANGED
@@ -1,5 +1,43 @@
1
- import type { GoTryAllOptions } from './types.js'
1
+ import type { GoTryAllOptions, GoTryAllRawOptions, ErrorConstructor } from './types.js'
2
2
  import { isError, getErrorMessage, type PromiseFactory } from './internals.js'
3
+ import { UnknownError } from './unknown-error.js'
4
+
5
+ /**
6
+ * Checks if a value is a tagged error (has a _tag property).
7
+ */
8
+ function isTaggedError(err: unknown): err is { _tag: string } {
9
+ return isError(err) && '_tag' in err && typeof (err as { _tag?: unknown })._tag === 'string'
10
+ }
11
+
12
+ /**
13
+ * Wraps an error based on the provided options (errorClass/systemErrorClass).
14
+ * Consistent with goTryRaw behavior.
15
+ */
16
+ function wrapError<E>(err: unknown, errorClass: ErrorConstructor<E> | undefined, systemErrorClass: ErrorConstructor<E> | undefined): E {
17
+ // If errorClass is specified, wrap all errors with it
18
+ if (errorClass) {
19
+ if (err === undefined) {
20
+ return new errorClass('undefined')
21
+ }
22
+ if (isError(err)) {
23
+ return new errorClass(err.message, { cause: err })
24
+ }
25
+ return new errorClass(String(err))
26
+ }
27
+
28
+ // If systemErrorClass is specified (or defaulted to UnknownError), only wrap non-tagged errors
29
+ const actualSystemErrorClass = systemErrorClass ?? UnknownError
30
+ if (isTaggedError(err)) {
31
+ return err as unknown as E
32
+ }
33
+ if (err === undefined) {
34
+ return new actualSystemErrorClass('undefined') as unknown as E
35
+ }
36
+ if (isError(err)) {
37
+ return new actualSystemErrorClass(err.message, { cause: err }) as unknown as E
38
+ }
39
+ return new actualSystemErrorClass(String(err)) as unknown as E
40
+ }
3
41
 
4
42
  async function runWithConcurrency<T extends readonly unknown[]>(
5
43
  items: { [K in keyof T]: Promise<T[K]> | PromiseFactory<T[K]> },
@@ -106,33 +144,39 @@ export async function goTryAll<T extends readonly unknown[]>(
106
144
 
107
145
  /**
108
146
  * Like `goTryAll`, but returns raw Error objects instead of error messages.
147
+ * Non-tagged errors are wrapped in `UnknownError` by default (consistent with `goTryRaw`).
148
+ * Tagged errors pass through unchanged.
149
+ *
150
+ * Supports `errorClass` and `systemErrorClass` options (mutually exclusive):
151
+ * - `errorClass`: Wrap ALL errors in the specified class
152
+ * - `systemErrorClass`: Only wrap non-tagged errors (defaults to UnknownError)
109
153
  *
110
154
  * @template T The tuple type of all promise results
155
+ * @template E The type of the error
111
156
  * @param {readonly [...{ [K in keyof T]: Promise<T[K]> | (() => Promise<T[K]>) }]} items - Array of promises or factories
112
- * @param {GoTryAllOptions} options - Optional configuration
113
- * @returns {Promise<[{ [K in keyof T]: Error | undefined }, { [K in keyof T]: T[K] | undefined }]>}
157
+ * @param {GoTryAllRawOptions<E>} options - Optional configuration
158
+ * @returns {Promise<[{ [K in keyof T]: E | undefined }, { [K in keyof T]: T[K] | undefined }]>}
114
159
  * A tuple where the first element is a tuple of Error objects (or undefined) and
115
160
  * the second element is a tuple of results (or undefined), preserving input order
116
161
  */
117
- export async function goTryAllRaw<T extends readonly unknown[]>(
162
+ export async function goTryAllRaw<T extends readonly unknown[], E = InstanceType<typeof UnknownError>>(
118
163
  items: { [K in keyof T]: Promise<T[K]> | (() => Promise<T[K]>) },
119
- options?: GoTryAllOptions,
120
- ): Promise<[{ [K in keyof T]: Error | undefined }, { [K in keyof T]: T[K] | undefined }]> {
164
+ options?: GoTryAllRawOptions<E>,
165
+ ): Promise<[{ [K in keyof T]: E | undefined }, { [K in keyof T]: T[K] | undefined }]> {
166
+ const { errorClass, systemErrorClass } = options || {}
121
167
  const settled = await runWithConcurrency(items, options?.concurrency ?? 0)
122
168
 
123
- const errors = [] as { [K in keyof T]: Error | undefined }
169
+ const errors = [] as { [K in keyof T]: E | undefined }
124
170
  const results = [] as { [K in keyof T]: T[K] | undefined }
125
171
 
126
172
  for (let i = 0; i < settled.length; i++) {
127
173
  const item = settled[i]!
128
174
  if (item.status === 'fulfilled') {
129
- ;(errors as (Error | undefined)[])[i] = undefined
175
+ ;(errors as (E | undefined)[])[i] = undefined
130
176
  ;(results as unknown[])[i] = (item as PromiseFulfilledResult<T[number]>).value
131
177
  } else {
132
178
  const reason = (item as PromiseRejectedResult).reason
133
- ;(errors as (Error | undefined)[])[i] = isError(reason)
134
- ? reason
135
- : new Error(String(reason))
179
+ ;(errors as (E | undefined)[])[i] = wrapError(reason, errorClass, systemErrorClass)
136
180
  ;(results as unknown[])[i] = undefined
137
181
  }
138
182
  }
package/src/index.test.ts CHANGED
@@ -1107,7 +1107,7 @@ describe('goTryAllRaw', () => {
1107
1107
  assert.deepEqual(results, ['a', 42, true])
1108
1108
  })
1109
1109
 
1110
- test('returns Error objects for failed promises', async () => {
1110
+ test('wraps non-tagged errors in UnknownError', async () => {
1111
1111
  const [errors, results] = await goTryAllRaw([
1112
1112
  Promise.resolve('success'),
1113
1113
  Promise.reject(new Error('fail1')),
@@ -1115,6 +1115,8 @@ describe('goTryAllRaw', () => {
1115
1115
  ])
1116
1116
 
1117
1117
  assert.equal(errors[0], undefined)
1118
+ assert.ok(errors[1] instanceof UnknownError)
1119
+ assert.equal(errors[1]?._tag, 'UnknownError')
1118
1120
  assert.equal(errors[1]?.message, 'fail1')
1119
1121
  assert.equal(errors[2], undefined)
1120
1122
 
@@ -1123,15 +1125,44 @@ describe('goTryAllRaw', () => {
1123
1125
  assert.equal(results[2], 42)
1124
1126
  })
1125
1127
 
1126
- test('converts non-Error rejections to Error objects', async () => {
1128
+ test('tagged errors pass through unchanged', async () => {
1129
+ const DatabaseError = taggedError('DatabaseError')
1130
+ const NetworkError = taggedError('NetworkError')
1131
+
1132
+ const [errors] = await goTryAllRaw([
1133
+ Promise.reject(new DatabaseError('db failed')),
1134
+ Promise.reject(new NetworkError('network timeout')),
1135
+ Promise.reject(new Error('plain error')),
1136
+ ])
1137
+
1138
+ // Tagged errors pass through
1139
+ assert.ok(errors[0] instanceof DatabaseError)
1140
+ assert.equal(errors[0]?._tag, 'DatabaseError')
1141
+ assert.equal(errors[0]?.message, 'db failed')
1142
+ assert.ok(errors[1] instanceof NetworkError)
1143
+ assert.equal(errors[1]?._tag, 'NetworkError')
1144
+ assert.equal(errors[1]?.message, 'network timeout')
1145
+ // Non-tagged errors get wrapped in UnknownError
1146
+ assert.ok(errors[2] instanceof UnknownError)
1147
+ assert.equal(errors[2]?._tag, 'UnknownError')
1148
+ assert.equal(errors[2]?.message, 'plain error')
1149
+ })
1150
+
1151
+ test('converts non-Error rejections to UnknownError objects', async () => {
1127
1152
  const [errors] = await goTryAllRaw([
1128
1153
  Promise.reject('string error'),
1129
1154
  Promise.reject(42),
1130
1155
  Promise.reject(undefined),
1131
1156
  ])
1132
1157
 
1158
+ assert.ok(errors[0] instanceof UnknownError)
1159
+ assert.equal(errors[0]?._tag, 'UnknownError')
1133
1160
  assert.equal(errors[0]?.message, 'string error')
1161
+ assert.ok(errors[1] instanceof UnknownError)
1162
+ assert.equal(errors[1]?._tag, 'UnknownError')
1134
1163
  assert.equal(errors[1]?.message, '42')
1164
+ assert.ok(errors[2] instanceof UnknownError)
1165
+ assert.equal(errors[2]?._tag, 'UnknownError')
1135
1166
  assert.equal(errors[2]?.message, 'undefined')
1136
1167
  })
1137
1168
 
@@ -1141,6 +1172,60 @@ describe('goTryAllRaw', () => {
1141
1172
  assert.deepEqual(errors, [])
1142
1173
  assert.deepEqual(results, [])
1143
1174
  })
1175
+
1176
+ test('errorClass wraps all errors', async () => {
1177
+ const DatabaseError = taggedError('DatabaseError')
1178
+ const NetworkError = taggedError('NetworkError')
1179
+
1180
+ const [errors] = await goTryAllRaw([
1181
+ Promise.reject(new DatabaseError('db error')),
1182
+ Promise.reject(new NetworkError('network error')),
1183
+ Promise.reject(new Error('plain error')),
1184
+ ], { errorClass: DatabaseError })
1185
+
1186
+ // All errors should be wrapped in DatabaseError
1187
+ assert.ok(errors[0] instanceof DatabaseError)
1188
+ assert.equal(errors[0]?._tag, 'DatabaseError')
1189
+ assert.ok(errors[1] instanceof DatabaseError)
1190
+ assert.equal(errors[1]?._tag, 'DatabaseError')
1191
+ assert.ok(errors[2] instanceof DatabaseError)
1192
+ assert.equal(errors[2]?._tag, 'DatabaseError')
1193
+ })
1194
+
1195
+ test('systemErrorClass only wraps non-tagged errors', async () => {
1196
+ const DatabaseError = taggedError('DatabaseError')
1197
+ const NetworkError = taggedError('NetworkError')
1198
+ const SystemError = taggedError('SystemError')
1199
+
1200
+ const [errors] = await goTryAllRaw([
1201
+ Promise.reject(new DatabaseError('db error')),
1202
+ Promise.reject(new NetworkError('network error')),
1203
+ Promise.reject(new Error('plain error')),
1204
+ ], { systemErrorClass: SystemError })
1205
+
1206
+ // Tagged errors pass through
1207
+ assert.ok(errors[0] instanceof DatabaseError)
1208
+ assert.equal(errors[0]?._tag, 'DatabaseError')
1209
+ assert.ok(errors[1] instanceof NetworkError)
1210
+ assert.equal(errors[1]?._tag, 'NetworkError')
1211
+ // Non-tagged error wrapped in SystemError
1212
+ assert.ok(errors[2] instanceof SystemError)
1213
+ assert.equal(errors[2]?._tag, 'SystemError')
1214
+ })
1215
+
1216
+ test('concurrency option works with errorClass', async () => {
1217
+ const DatabaseError = taggedError('DatabaseError')
1218
+
1219
+ const [errors] = await goTryAllRaw([
1220
+ Promise.reject(new Error('error 1')),
1221
+ Promise.reject(new Error('error 2')),
1222
+ Promise.reject(new Error('error 3')),
1223
+ ], { concurrency: 2, errorClass: DatabaseError })
1224
+
1225
+ assert.ok(errors[0] instanceof DatabaseError)
1226
+ assert.ok(errors[1] instanceof DatabaseError)
1227
+ assert.ok(errors[2] instanceof DatabaseError)
1228
+ })
1144
1229
  })
1145
1230
 
1146
1231
 
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ export type {
10
10
  ErrorConstructor,
11
11
  TaggedUnion,
12
12
  GoTryRawOptions,
13
+ GoTryAllRawOptions,
13
14
  } from './types.js'
14
15
 
15
16
  // Export core functions
package/src/types.ts CHANGED
@@ -47,6 +47,16 @@ export type GoTryRawOptions<E = Error> =
47
47
  | { errorClass?: never; systemErrorClass: ErrorConstructor<E> }
48
48
  | { errorClass?: never; systemErrorClass?: never }
49
49
 
50
+ /**
51
+ * Options for goTryAllRaw function.
52
+ * Includes concurrency control and error class options.
53
+ * errorClass and systemErrorClass are mutually exclusive.
54
+ */
55
+ export type GoTryAllRawOptions<E = Error> =
56
+ | { concurrency?: number; errorClass: ErrorConstructor<E>; systemErrorClass?: never }
57
+ | { concurrency?: number; errorClass?: never; systemErrorClass: ErrorConstructor<E> }
58
+ | { concurrency?: number; errorClass?: never; systemErrorClass?: never }
59
+
50
60
  /**
51
61
  * Creates a union type from multiple tagged error classes.
52
62
  *