@mablock/status 0.0.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/dist/index.cjs ADDED
@@ -0,0 +1,733 @@
1
+ 'use strict';
2
+
3
+ // src/status-code.ts
4
+ var StatusCode = {
5
+ OK: "OK",
6
+ CANCELLED: "CANCELLED",
7
+ UNKNOWN: "UNKNOWN",
8
+ INVALID_ARGUMENT: "INVALID_ARGUMENT",
9
+ DEADLINE_EXCEEDED: "DEADLINE_EXCEEDED",
10
+ NOT_FOUND: "NOT_FOUND",
11
+ ALREADY_EXISTS: "ALREADY_EXISTS",
12
+ PERMISSION_DENIED: "PERMISSION_DENIED",
13
+ RESOURCE_EXHAUSTED: "RESOURCE_EXHAUSTED",
14
+ FAILED_PRECONDITION: "FAILED_PRECONDITION",
15
+ ABORTED: "ABORTED",
16
+ OUT_OF_RANGE: "OUT_OF_RANGE",
17
+ UNIMPLEMENTED: "UNIMPLEMENTED",
18
+ INTERNAL: "INTERNAL",
19
+ UNAVAILABLE: "UNAVAILABLE",
20
+ DATA_LOSS: "DATA_LOSS",
21
+ UNAUTHENTICATED: "UNAUTHENTICATED"
22
+ };
23
+
24
+ // src/errors.ts
25
+ var StatusError = class extends Error {
26
+ status;
27
+ constructor(status) {
28
+ super(status.toString());
29
+ this.name = "StatusError";
30
+ this.status = status;
31
+ Object.setPrototypeOf(this, new.target.prototype);
32
+ }
33
+ get code() {
34
+ return this.status.code();
35
+ }
36
+ };
37
+
38
+ // src/status.ts
39
+ function copyPayload(value) {
40
+ return typeof value === "string" ? value : value.slice();
41
+ }
42
+ function bytesToBase64(bytes) {
43
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
44
+ let result = "";
45
+ for (let i = 0; i < bytes.length; i += 3) {
46
+ const b0 = bytes[i];
47
+ const b1 = i + 1 < bytes.length ? bytes[i + 1] : 0;
48
+ const b2 = i + 2 < bytes.length ? bytes[i + 2] : 0;
49
+ result += chars[b0 >> 2 & 63];
50
+ result += chars[(b0 & 3) << 4 | b1 >> 4 & 15];
51
+ result += i + 1 < bytes.length ? chars[(b1 & 15) << 2 | b2 >> 6 & 3] : "=";
52
+ result += i + 2 < bytes.length ? chars[b2 & 63] : "=";
53
+ }
54
+ return result;
55
+ }
56
+ var Status = class _Status {
57
+ _code;
58
+ _message;
59
+ _payloads;
60
+ constructor(code = StatusCode.OK, message = "") {
61
+ this._code = code;
62
+ this._message = code === StatusCode.OK ? "" : message;
63
+ }
64
+ ok() {
65
+ return this._code === StatusCode.OK;
66
+ }
67
+ code() {
68
+ return this._code;
69
+ }
70
+ message() {
71
+ return this._message;
72
+ }
73
+ status() {
74
+ return this;
75
+ }
76
+ setMessage(message) {
77
+ if (!this.ok()) this._message = message;
78
+ }
79
+ toString() {
80
+ if (this.ok()) return "OK";
81
+ return this._message.length === 0 ? this._code : `${this._code}: ${this._message}`;
82
+ }
83
+ /** Keeps the first non-OK status, matching absl::Status::Update. */
84
+ update(other) {
85
+ if (!this.ok()) return this;
86
+ this._code = other._code;
87
+ this._message = other._message;
88
+ this._payloads = other.copyPayloads();
89
+ return this;
90
+ }
91
+ setPayload(typeUrl, payload) {
92
+ if (this.ok()) return;
93
+ this._payloads ??= /* @__PURE__ */ new Map();
94
+ this._payloads.set(typeUrl, copyPayload(payload));
95
+ }
96
+ getPayload(typeUrl) {
97
+ const payload = this._payloads?.get(typeUrl);
98
+ return payload === void 0 ? void 0 : copyPayload(payload);
99
+ }
100
+ hasPayload(typeUrl) {
101
+ return this._payloads?.has(typeUrl) ?? false;
102
+ }
103
+ erasePayload(typeUrl) {
104
+ if (!this._payloads) return false;
105
+ const deleted = this._payloads.delete(typeUrl);
106
+ if (this._payloads.size === 0) this._payloads = void 0;
107
+ return deleted;
108
+ }
109
+ clearPayloads() {
110
+ this._payloads = void 0;
111
+ }
112
+ payloadCount() {
113
+ return this._payloads?.size ?? 0;
114
+ }
115
+ forEachPayload(callback) {
116
+ if (!this._payloads) return;
117
+ for (const [key, value] of this._payloads)
118
+ callback(key, copyPayload(value));
119
+ }
120
+ clone() {
121
+ const cloned = new _Status(this._code, this._message);
122
+ cloned._payloads = this.copyPayloads();
123
+ return cloned;
124
+ }
125
+ equals(other) {
126
+ if (!(other instanceof _Status) || this._code !== other._code || this._message !== other._message)
127
+ return false;
128
+ if (this.payloadCount() !== other.payloadCount()) return false;
129
+ if (!this._payloads) return true;
130
+ for (const [key, value] of this._payloads) {
131
+ const otherValue = other._payloads?.get(key);
132
+ if (otherValue === void 0 || !payloadEquals(value, otherValue))
133
+ return false;
134
+ }
135
+ return true;
136
+ }
137
+ toJSON() {
138
+ const json = {
139
+ ok: this.ok(),
140
+ code: this._code,
141
+ message: this._message
142
+ };
143
+ if (this._payloads?.size) {
144
+ const payloads = {};
145
+ for (const [key, value] of this._payloads)
146
+ payloads[key] = typeof value === "string" ? value : bytesToBase64(value);
147
+ json.payloads = payloads;
148
+ }
149
+ return json;
150
+ }
151
+ toError() {
152
+ return new StatusError(this.clone());
153
+ }
154
+ /** Supports `yield* status` in statusDo pipelines. */
155
+ *[Symbol.iterator]() {
156
+ if (this.ok()) return;
157
+ yield this;
158
+ }
159
+ static ok() {
160
+ return new _Status();
161
+ }
162
+ static fromCode(code, message = "", payloads) {
163
+ const status = new _Status(code, message);
164
+ if (payloads) applyPayloads(status, payloads);
165
+ return status;
166
+ }
167
+ copyPayloads() {
168
+ if (!this._payloads?.size) return void 0;
169
+ return new Map(
170
+ Array.from(this._payloads, ([key, value]) => [
171
+ key,
172
+ copyPayload(value)
173
+ ])
174
+ );
175
+ }
176
+ };
177
+ function payloadEquals(left, right) {
178
+ if (typeof left === "string" || typeof right === "string")
179
+ return typeof left === "string" && typeof right === "string" && left === right;
180
+ if (left.length !== right.length) return false;
181
+ for (let i = 0; i < left.length; i++) {
182
+ if (left[i] !== right[i]) return false;
183
+ }
184
+ return true;
185
+ }
186
+ function applyPayloads(status, payloads) {
187
+ if (isReadonlyMap(payloads)) {
188
+ for (const [key, value] of payloads)
189
+ status.setPayload(key, value);
190
+ return;
191
+ }
192
+ for (const [key, value] of Object.entries(payloads))
193
+ status.setPayload(key, value);
194
+ }
195
+ function isReadonlyMap(value) {
196
+ const candidate = value;
197
+ return typeof candidate.entries === "function" && typeof candidate[Symbol.iterator] === "function";
198
+ }
199
+ function OkStatus() {
200
+ return Status.ok();
201
+ }
202
+ function createErrorHelper(code) {
203
+ return (message = "", payloads) => {
204
+ const status = new Status(code, message);
205
+ if (payloads) applyPayloads(status, payloads);
206
+ return status;
207
+ };
208
+ }
209
+ var CancelledError = createErrorHelper(StatusCode.CANCELLED);
210
+ var UnknownError = createErrorHelper(StatusCode.UNKNOWN);
211
+ var InvalidArgumentError = createErrorHelper(
212
+ StatusCode.INVALID_ARGUMENT
213
+ );
214
+ var DeadlineExceededError = createErrorHelper(
215
+ StatusCode.DEADLINE_EXCEEDED
216
+ );
217
+ var NotFoundError = createErrorHelper(StatusCode.NOT_FOUND);
218
+ var AlreadyExistsError = createErrorHelper(
219
+ StatusCode.ALREADY_EXISTS
220
+ );
221
+ var PermissionDeniedError = createErrorHelper(
222
+ StatusCode.PERMISSION_DENIED
223
+ );
224
+ var ResourceExhaustedError = createErrorHelper(
225
+ StatusCode.RESOURCE_EXHAUSTED
226
+ );
227
+ var FailedPreconditionError = createErrorHelper(
228
+ StatusCode.FAILED_PRECONDITION
229
+ );
230
+ var AbortedError = createErrorHelper(StatusCode.ABORTED);
231
+ var OutOfRangeError = createErrorHelper(
232
+ StatusCode.OUT_OF_RANGE
233
+ );
234
+ var UnimplementedError = createErrorHelper(
235
+ StatusCode.UNIMPLEMENTED
236
+ );
237
+ var InternalError = createErrorHelper(StatusCode.INTERNAL);
238
+ var UnavailableError = createErrorHelper(
239
+ StatusCode.UNAVAILABLE
240
+ );
241
+ var DataLossError = createErrorHelper(StatusCode.DATA_LOSS);
242
+ var UnauthenticatedError = createErrorHelper(
243
+ StatusCode.UNAUTHENTICATED
244
+ );
245
+
246
+ // src/failure-brand.ts
247
+ var FAILURE_SYMBOL = /* @__PURE__ */ Symbol.for("absl.status.failure");
248
+ function getBrandedFailureStatus(value) {
249
+ if (typeof value !== "object" && typeof value !== "function" || value === null)
250
+ return void 0;
251
+ try {
252
+ if (!(FAILURE_SYMBOL in value)) return void 0;
253
+ const status = value[FAILURE_SYMBOL];
254
+ return status instanceof Status && !status.ok() ? status : void 0;
255
+ } catch {
256
+ return void 0;
257
+ }
258
+ }
259
+
260
+ // src/status-or.ts
261
+ var StatusOr = class _StatusOr {
262
+ _status;
263
+ _value;
264
+ constructor(status, value) {
265
+ this._status = status;
266
+ this._value = value;
267
+ }
268
+ static ok(value) {
269
+ const failureStatus = getBrandedFailureStatus(value);
270
+ if (failureStatus) return _StatusOr.fromStatus(failureStatus);
271
+ return new _StatusOr(Status.ok(), value);
272
+ }
273
+ static fromStatus(status) {
274
+ if (status.ok())
275
+ throw new RangeError(
276
+ "StatusOr cannot be constructed from an OK Status without a value"
277
+ );
278
+ return new _StatusOr(status.clone());
279
+ }
280
+ static all(values) {
281
+ const results = [];
282
+ for (const item of values) {
283
+ const failureStatus = getBrandedFailureStatus(item);
284
+ if (failureStatus) return _StatusOr.fromStatus(failureStatus);
285
+ if (item instanceof _StatusOr) {
286
+ if (!item.ok()) return _StatusOr.fromStatus(item.status());
287
+ results.push(item._value);
288
+ } else {
289
+ results.push(item);
290
+ }
291
+ }
292
+ return _StatusOr.ok(
293
+ results
294
+ );
295
+ }
296
+ ok() {
297
+ return this._status.ok();
298
+ }
299
+ code() {
300
+ return this._status.code();
301
+ }
302
+ message() {
303
+ return this._status.message();
304
+ }
305
+ status() {
306
+ return this._status.clone();
307
+ }
308
+ value() {
309
+ if (!this.ok()) throw this._status.toError();
310
+ return this._value;
311
+ }
312
+ valueOr(defaultValue) {
313
+ return this.ok() ? this._value : defaultValue;
314
+ }
315
+ valueOrCompute(computeFallback) {
316
+ return this.ok() ? this._value : computeFallback(this._status.clone());
317
+ }
318
+ transform(fn) {
319
+ return this.ok() ? _StatusOr.ok(fn(this._value)) : _StatusOr.fromStatus(this._status);
320
+ }
321
+ andThen(fn) {
322
+ return this.ok() ? fn(this._value) : _StatusOr.fromStatus(this._status);
323
+ }
324
+ match(handlers) {
325
+ return this.ok() ? handlers.ok(this._value) : handlers.err(this._status.clone());
326
+ }
327
+ *[Symbol.iterator]() {
328
+ if (this.ok()) return this._value;
329
+ yield this._status.clone();
330
+ return void 0;
331
+ }
332
+ toString() {
333
+ if (!this.ok()) return this._status.toString();
334
+ if (this._value === void 0) return "OK";
335
+ try {
336
+ return `OK: ${JSON.stringify(this._value)}`;
337
+ } catch {
338
+ return "OK: [unserializable value]";
339
+ }
340
+ }
341
+ toJSON() {
342
+ if (!this.ok()) return this._status.toJSON();
343
+ return {
344
+ ok: true,
345
+ code: this._status.code(),
346
+ message: "",
347
+ value: this._value
348
+ };
349
+ }
350
+ clone() {
351
+ return this.ok() ? _StatusOr.ok(this._value) : _StatusOr.fromStatus(this._status);
352
+ }
353
+ equals(other) {
354
+ if (!(other instanceof _StatusOr) || this.ok() !== other.ok())
355
+ return false;
356
+ if (!this.ok()) return this._status.equals(other._status);
357
+ return Object.is(this._value, other._value);
358
+ }
359
+ };
360
+ function statusOr(value) {
361
+ return StatusOr.ok(value);
362
+ }
363
+ function statusOrError(status) {
364
+ return StatusOr.fromStatus(status);
365
+ }
366
+
367
+ // src/sentinel.ts
368
+ function isFailureSentinel(value) {
369
+ if (!getBrandedFailureStatus(value)) return false;
370
+ try {
371
+ const candidate = value;
372
+ return typeof candidate.ok === "function" && typeof candidate.status === "function" && typeof candidate.code === "function" && typeof candidate.message === "function" && typeof candidate.toString === "function";
373
+ } catch {
374
+ return false;
375
+ }
376
+ }
377
+ function getFailureStatus(value) {
378
+ const brandedStatus = getBrandedFailureStatus(value);
379
+ if (brandedStatus) return brandedStatus;
380
+ if (value instanceof Status) {
381
+ if (!value.ok()) return value;
382
+ return void 0;
383
+ }
384
+ if (value instanceof StatusOr) {
385
+ if (!value.ok()) return value.status();
386
+ return void 0;
387
+ }
388
+ return void 0;
389
+ }
390
+ function failure(status) {
391
+ if (status.ok())
392
+ throw new RangeError(
393
+ "Failure sentinel cannot be created from an OK Status"
394
+ );
395
+ const base = {
396
+ [FAILURE_SYMBOL]: status,
397
+ ok() {
398
+ return false;
399
+ },
400
+ status() {
401
+ return status;
402
+ },
403
+ code() {
404
+ return status.code();
405
+ },
406
+ message() {
407
+ return status.message();
408
+ },
409
+ toString() {
410
+ return status.toString();
411
+ },
412
+ *[Symbol.iterator]() {
413
+ return throwFailureMisuse(
414
+ status,
415
+ "iterate the failed result without ensureOk()"
416
+ );
417
+ }
418
+ };
419
+ return new Proxy(base, {
420
+ get(target, prop, receiver) {
421
+ if (prop in target || prop === FAILURE_SYMBOL)
422
+ return Reflect.get(target, prop, receiver);
423
+ if (prop === "then") return void 0;
424
+ if (prop === Symbol.toPrimitive)
425
+ return () => throwFailureMisuse(
426
+ status,
427
+ "coerce the failed result to a primitive"
428
+ );
429
+ if (typeof prop === "symbol") return void 0;
430
+ return throwFailureMisuse(
431
+ status,
432
+ `read business property ${JSON.stringify(prop)}`
433
+ );
434
+ },
435
+ set(_target, prop) {
436
+ return throwFailureMisuse(
437
+ status,
438
+ `write business property ${JSON.stringify(String(prop))}`
439
+ );
440
+ },
441
+ deleteProperty(_target, prop) {
442
+ return throwFailureMisuse(
443
+ status,
444
+ `delete business property ${JSON.stringify(String(prop))}`
445
+ );
446
+ },
447
+ defineProperty(_target, prop) {
448
+ return throwFailureMisuse(
449
+ status,
450
+ `define business property ${JSON.stringify(String(prop))}`
451
+ );
452
+ },
453
+ has(target, prop) {
454
+ if (prop in target) return true;
455
+ if (prop === "then" || typeof prop === "symbol") return false;
456
+ return throwFailureMisuse(
457
+ status,
458
+ `check business property ${JSON.stringify(prop)}`
459
+ );
460
+ },
461
+ ownKeys() {
462
+ return throwFailureMisuse(
463
+ status,
464
+ "enumerate or spread the failed result"
465
+ );
466
+ }
467
+ });
468
+ }
469
+ function throwFailureMisuse(status, action) {
470
+ const error = new StatusError(status.clone());
471
+ error.message = `Failure result used as a successful value: attempted to ${action}. Check it with hasError() or ensureOk() first. Original status: ${status.toString()}`;
472
+ throw error;
473
+ }
474
+ var failureSentinel = failure;
475
+ var createFailure = failure;
476
+ function asProxy(statusOr2) {
477
+ return new Proxy(statusOr2, {
478
+ get(target, prop, receiver) {
479
+ if (prop in target || typeof prop === "symbol") {
480
+ const val = Reflect.get(target, prop, receiver);
481
+ if (typeof val === "function") return val.bind(target);
482
+ return val;
483
+ }
484
+ if (target.ok()) {
485
+ const inner = target.value();
486
+ if (inner !== null && inner !== void 0 && (typeof inner === "object" || typeof inner === "function")) {
487
+ const val = Reflect.get(inner, prop, inner);
488
+ if (typeof val === "function") return val.bind(inner);
489
+ return val;
490
+ }
491
+ }
492
+ return void 0;
493
+ },
494
+ has(target, prop) {
495
+ if (prop in target) return true;
496
+ if (target.ok()) {
497
+ const inner = target.value();
498
+ if (inner !== null && inner !== void 0 && (typeof inner === "object" || typeof inner === "function"))
499
+ return prop in inner;
500
+ }
501
+ return false;
502
+ }
503
+ });
504
+ }
505
+
506
+ // src/do.ts
507
+ function* ensureOk(target) {
508
+ if (target instanceof Status) {
509
+ if (!target.ok()) yield target;
510
+ return void 0;
511
+ }
512
+ if (target instanceof StatusOr) {
513
+ if (!target.ok()) yield target.status();
514
+ return target.value();
515
+ }
516
+ if (isFailureSentinel(target)) {
517
+ yield target[FAILURE_SYMBOL];
518
+ return void 0;
519
+ }
520
+ return target;
521
+ }
522
+ var EnsureOk = ensureOk;
523
+ var checkStatus = ensureOk;
524
+ var CheckStatus = ensureOk;
525
+ function statusDo(generatorFn) {
526
+ const iterator = generatorFn();
527
+ const step = iterator.next();
528
+ if (!step.done) {
529
+ try {
530
+ if (isFailureSentinel(step.value))
531
+ return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);
532
+ return StatusOr.fromStatus(step.value);
533
+ } finally {
534
+ iterator.return?.(void 0);
535
+ }
536
+ }
537
+ return normalizeResult(step.value, "statusDo");
538
+ }
539
+ async function statusDoAsync(generatorFn) {
540
+ const iterator = generatorFn();
541
+ const step = await iterator.next();
542
+ if (!step.done) {
543
+ try {
544
+ if (isFailureSentinel(step.value))
545
+ return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);
546
+ return StatusOr.fromStatus(step.value);
547
+ } finally {
548
+ await iterator.return?.(void 0);
549
+ }
550
+ }
551
+ return normalizeResult(step.value, "statusDoAsync");
552
+ }
553
+ function normalizeResult(result, source) {
554
+ if (result instanceof StatusOr) return result;
555
+ if (isFailureSentinel(result))
556
+ return StatusOr.fromStatus(result[FAILURE_SYMBOL]);
557
+ if (result instanceof Status) {
558
+ if (result.ok())
559
+ return StatusOr.fromStatus(
560
+ InternalError(
561
+ `${source} cannot return an OK Status without a value`
562
+ )
563
+ );
564
+ return StatusOr.fromStatus(result);
565
+ }
566
+ return StatusOr.ok(result);
567
+ }
568
+
569
+ // src/predicates.ts
570
+ function extractStatusCode(target) {
571
+ if (target === null || target === void 0) return void 0;
572
+ if (target instanceof Status || target instanceof StatusOr)
573
+ return target.code();
574
+ if (typeof target.code === "function") {
575
+ const res = target.code();
576
+ if (isStatusCode(res)) return res;
577
+ }
578
+ if (isStatusCode(target.code))
579
+ return target.code;
580
+ return void 0;
581
+ }
582
+ var statusCodes = new Set(Object.values(StatusCode));
583
+ function isStatusCode(value) {
584
+ return typeof value === "string" && statusCodes.has(value);
585
+ }
586
+ function isOk(target) {
587
+ const code = extractStatusCode(target);
588
+ if (code === void 0) return false;
589
+ return code === StatusCode.OK;
590
+ }
591
+ function hasError(target) {
592
+ if (target === null || target === void 0) return false;
593
+ if (target instanceof Status) return !target.ok();
594
+ if (target instanceof StatusOr) return !target.ok();
595
+ if (isFailureSentinel(target)) return true;
596
+ return false;
597
+ }
598
+ function createPredicate(expectedCode) {
599
+ return (target) => {
600
+ const code = extractStatusCode(target);
601
+ if (code === void 0) return false;
602
+ return code === expectedCode;
603
+ };
604
+ }
605
+ var isCancelled = createPredicate(StatusCode.CANCELLED);
606
+ var isUnknown = createPredicate(StatusCode.UNKNOWN);
607
+ var isInvalidArgument = createPredicate(
608
+ StatusCode.INVALID_ARGUMENT
609
+ );
610
+ var isDeadlineExceeded = createPredicate(
611
+ StatusCode.DEADLINE_EXCEEDED
612
+ );
613
+ var isNotFound = createPredicate(StatusCode.NOT_FOUND);
614
+ var isAlreadyExists = createPredicate(
615
+ StatusCode.ALREADY_EXISTS
616
+ );
617
+ var isPermissionDenied = createPredicate(
618
+ StatusCode.PERMISSION_DENIED
619
+ );
620
+ var isResourceExhausted = createPredicate(
621
+ StatusCode.RESOURCE_EXHAUSTED
622
+ );
623
+ var isFailedPrecondition = createPredicate(
624
+ StatusCode.FAILED_PRECONDITION
625
+ );
626
+ var isAborted = createPredicate(StatusCode.ABORTED);
627
+ var isOutOfRange = createPredicate(StatusCode.OUT_OF_RANGE);
628
+ var isUnimplemented = createPredicate(
629
+ StatusCode.UNIMPLEMENTED
630
+ );
631
+ var isInternal = createPredicate(StatusCode.INTERNAL);
632
+ var isUnavailable = createPredicate(StatusCode.UNAVAILABLE);
633
+ var isDataLoss = createPredicate(StatusCode.DATA_LOSS);
634
+ var isUnauthenticated = createPredicate(
635
+ StatusCode.UNAUTHENTICATED
636
+ );
637
+
638
+ // src/interop.ts
639
+ function fromError(error) {
640
+ const failureStatus = getBrandedFailureStatus(error);
641
+ if (failureStatus) return failureStatus;
642
+ if (error instanceof Status)
643
+ return error.ok() ? InternalError("Caught an OK Status as an error") : error;
644
+ if (error instanceof StatusError)
645
+ return error.status.ok() ? InternalError("Caught a StatusError containing an OK Status") : error.status;
646
+ if (error instanceof RangeError)
647
+ return OutOfRangeError(error.message);
648
+ if (error instanceof TypeError)
649
+ return InvalidArgumentError(error.message);
650
+ if (error instanceof Error) return UnknownError(error.message);
651
+ if (typeof error === "string") return UnknownError(error);
652
+ return UnknownError(String(error));
653
+ }
654
+ function tryCatch(fn, mapper) {
655
+ try {
656
+ return StatusOr.ok(fn());
657
+ } catch (err) {
658
+ const status = mapper ? mapper(err) : fromError(err);
659
+ return StatusOr.fromStatus(
660
+ status.ok() ? InternalError("tryCatch mapper returned an OK Status") : status
661
+ );
662
+ }
663
+ }
664
+ async function tryCatchAsync(fn, mapper) {
665
+ try {
666
+ return StatusOr.ok(await fn());
667
+ } catch (err) {
668
+ const status = mapper ? mapper(err) : fromError(err);
669
+ return StatusOr.fromStatus(
670
+ status.ok() ? InternalError("tryCatchAsync mapper returned an OK Status") : status
671
+ );
672
+ }
673
+ }
674
+
675
+ exports.AbortedError = AbortedError;
676
+ exports.AlreadyExistsError = AlreadyExistsError;
677
+ exports.CancelledError = CancelledError;
678
+ exports.CheckStatus = CheckStatus;
679
+ exports.DataLossError = DataLossError;
680
+ exports.DeadlineExceededError = DeadlineExceededError;
681
+ exports.EnsureOk = EnsureOk;
682
+ exports.FAILURE_SYMBOL = FAILURE_SYMBOL;
683
+ exports.FailedPreconditionError = FailedPreconditionError;
684
+ exports.InternalError = InternalError;
685
+ exports.InvalidArgumentError = InvalidArgumentError;
686
+ exports.NotFoundError = NotFoundError;
687
+ exports.OkStatus = OkStatus;
688
+ exports.OutOfRangeError = OutOfRangeError;
689
+ exports.PermissionDeniedError = PermissionDeniedError;
690
+ exports.ResourceExhaustedError = ResourceExhaustedError;
691
+ exports.Status = Status;
692
+ exports.StatusCode = StatusCode;
693
+ exports.StatusError = StatusError;
694
+ exports.StatusOr = StatusOr;
695
+ exports.UnauthenticatedError = UnauthenticatedError;
696
+ exports.UnavailableError = UnavailableError;
697
+ exports.UnimplementedError = UnimplementedError;
698
+ exports.UnknownError = UnknownError;
699
+ exports.asProxy = asProxy;
700
+ exports.checkStatus = checkStatus;
701
+ exports.createFailure = createFailure;
702
+ exports.ensureOk = ensureOk;
703
+ exports.failure = failure;
704
+ exports.failureSentinel = failureSentinel;
705
+ exports.fromError = fromError;
706
+ exports.getFailureStatus = getFailureStatus;
707
+ exports.hasError = hasError;
708
+ exports.isAborted = isAborted;
709
+ exports.isAlreadyExists = isAlreadyExists;
710
+ exports.isCancelled = isCancelled;
711
+ exports.isDataLoss = isDataLoss;
712
+ exports.isDeadlineExceeded = isDeadlineExceeded;
713
+ exports.isFailedPrecondition = isFailedPrecondition;
714
+ exports.isFailureSentinel = isFailureSentinel;
715
+ exports.isInternal = isInternal;
716
+ exports.isInvalidArgument = isInvalidArgument;
717
+ exports.isNotFound = isNotFound;
718
+ exports.isOk = isOk;
719
+ exports.isOutOfRange = isOutOfRange;
720
+ exports.isPermissionDenied = isPermissionDenied;
721
+ exports.isResourceExhausted = isResourceExhausted;
722
+ exports.isUnauthenticated = isUnauthenticated;
723
+ exports.isUnavailable = isUnavailable;
724
+ exports.isUnimplemented = isUnimplemented;
725
+ exports.isUnknown = isUnknown;
726
+ exports.statusDo = statusDo;
727
+ exports.statusDoAsync = statusDoAsync;
728
+ exports.statusOr = statusOr;
729
+ exports.statusOrError = statusOrError;
730
+ exports.tryCatch = tryCatch;
731
+ exports.tryCatchAsync = tryCatchAsync;
732
+ //# sourceMappingURL=index.cjs.map
733
+ //# sourceMappingURL=index.cjs.map