@mablock/status 0.0.1 → 0.0.2
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 +19 -0
- package/README.zh-CN.md +19 -0
- package/dist/index.cjs +23 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -14
- package/dist/index.d.ts +17 -14
- package/dist/index.js +23 -21
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -276,6 +276,25 @@ const result = statusDo(function* () {
|
|
|
276
276
|
|
|
277
277
|
The pipeline stops at the first error and closes the generator, so `finally` cleanup blocks run.
|
|
278
278
|
|
|
279
|
+
`statusDo` and `statusDoAsync` automatically infer the appropriate return type based on whether the generator yields/returns values:
|
|
280
|
+
|
|
281
|
+
- Generator returning `void` (or `Status`) -> returns `Status` (or `Promise<Status>`).
|
|
282
|
+
- Generator returning `T` (or `StatusOr<T>`) -> returns `StatusOr<T>` (or `Promise<StatusOr<T>>`).
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
// Void pipeline -> Status
|
|
286
|
+
const status: Status = statusDo(function* () {
|
|
287
|
+
yield* validatePort(8080);
|
|
288
|
+
yield* validateUser(100);
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// Value pipeline -> StatusOr<number>
|
|
292
|
+
const countOr: StatusOr<number> = statusDo(function* () {
|
|
293
|
+
const left = yield* ensureOk(parseNumber("20"));
|
|
294
|
+
return left + 1;
|
|
295
|
+
});
|
|
296
|
+
```
|
|
297
|
+
|
|
279
298
|
## Failure sentinels
|
|
280
299
|
|
|
281
300
|
`failure(status)` creates a proxy that carries the original non-OK status while keeping the function's success type as `T`. Reading business properties from an unchecked failure throws `StatusError`; use `ensureOk` in middle layers and `hasError` at boundaries.
|
package/README.zh-CN.md
CHANGED
|
@@ -276,6 +276,25 @@ const result = statusDo(function* () {
|
|
|
276
276
|
|
|
277
277
|
流水线会在第一个错误处停止并关闭 Generator,因此 `finally` 清理逻辑仍会执行。
|
|
278
278
|
|
|
279
|
+
`statusDo` 和 `statusDoAsync` 会根据 Generator 是否返回业务值自动推导返回类型:
|
|
280
|
+
|
|
281
|
+
- 返回 `void`(或 `Status`)的 Generator -> 返回 `Status`(或 `Promise<Status>`)。
|
|
282
|
+
- 返回 `T`(或 `StatusOr<T>`)的 Generator -> 返回 `StatusOr<T>`(或 `Promise<StatusOr<T>>`)。
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
// 无返回值的流水线 -> Status
|
|
286
|
+
const status: Status = statusDo(function* () {
|
|
287
|
+
yield* validatePort(8080);
|
|
288
|
+
yield* validateUser(100);
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// 返回业务值的流水线 -> StatusOr<number>
|
|
292
|
+
const countOr: StatusOr<number> = statusDo(function* () {
|
|
293
|
+
const left = yield* ensureOk(parseNumber("20"));
|
|
294
|
+
return left + 1;
|
|
295
|
+
});
|
|
296
|
+
```
|
|
297
|
+
|
|
279
298
|
## Failure sentinel
|
|
280
299
|
|
|
281
300
|
`failure(status)` 创建一个携带原始非 OK 状态的 Proxy,同时让函数的成功返回类型保持为 `T`。如果没有检查就读取失败 Proxy 的业务属性,会抛出 `StatusError`。中间层使用 `ensureOk`,顶层边界使用 `hasError`。
|
package/dist/index.cjs
CHANGED
|
@@ -285,9 +285,9 @@ var StatusOr = class _StatusOr {
|
|
|
285
285
|
if (item instanceof _StatusOr) {
|
|
286
286
|
if (!item.ok()) return _StatusOr.fromStatus(item.status());
|
|
287
287
|
results.push(item._value);
|
|
288
|
-
|
|
289
|
-
results.push(item);
|
|
288
|
+
continue;
|
|
290
289
|
}
|
|
290
|
+
results.push(item);
|
|
291
291
|
}
|
|
292
292
|
return _StatusOr.ok(
|
|
293
293
|
results
|
|
@@ -310,19 +310,24 @@ var StatusOr = class _StatusOr {
|
|
|
310
310
|
return this._value;
|
|
311
311
|
}
|
|
312
312
|
valueOr(defaultValue) {
|
|
313
|
-
|
|
313
|
+
if (this.ok()) return this._value;
|
|
314
|
+
return defaultValue;
|
|
314
315
|
}
|
|
315
316
|
valueOrCompute(computeFallback) {
|
|
316
|
-
|
|
317
|
+
if (this.ok()) return this._value;
|
|
318
|
+
return computeFallback(this._status.clone());
|
|
317
319
|
}
|
|
318
320
|
transform(fn) {
|
|
319
|
-
|
|
321
|
+
if (this.ok()) return _StatusOr.ok(fn(this._value));
|
|
322
|
+
return _StatusOr.fromStatus(this._status);
|
|
320
323
|
}
|
|
321
324
|
andThen(fn) {
|
|
322
|
-
|
|
325
|
+
if (this.ok()) return fn(this._value);
|
|
326
|
+
return _StatusOr.fromStatus(this._status);
|
|
323
327
|
}
|
|
324
328
|
match(handlers) {
|
|
325
|
-
|
|
329
|
+
if (this.ok()) return handlers.ok(this._value);
|
|
330
|
+
return handlers.err(this._status.clone());
|
|
326
331
|
}
|
|
327
332
|
*[Symbol.iterator]() {
|
|
328
333
|
if (this.ok()) return this._value;
|
|
@@ -348,7 +353,8 @@ var StatusOr = class _StatusOr {
|
|
|
348
353
|
};
|
|
349
354
|
}
|
|
350
355
|
clone() {
|
|
351
|
-
|
|
356
|
+
if (this.ok()) return _StatusOr.ok(this._value);
|
|
357
|
+
return _StatusOr.fromStatus(this._status);
|
|
352
358
|
}
|
|
353
359
|
equals(other) {
|
|
354
360
|
if (!(other instanceof _StatusOr) || this.ok() !== other.ok())
|
|
@@ -505,14 +511,14 @@ function asProxy(statusOr2) {
|
|
|
505
511
|
|
|
506
512
|
// src/do.ts
|
|
507
513
|
function* ensureOk(target) {
|
|
508
|
-
if (target instanceof Status) {
|
|
509
|
-
if (!target.ok()) yield target;
|
|
510
|
-
return void 0;
|
|
511
|
-
}
|
|
512
514
|
if (target instanceof StatusOr) {
|
|
513
515
|
if (!target.ok()) yield target.status();
|
|
514
516
|
return target.value();
|
|
515
517
|
}
|
|
518
|
+
if (target instanceof Status) {
|
|
519
|
+
if (!target.ok()) yield target;
|
|
520
|
+
return void 0;
|
|
521
|
+
}
|
|
516
522
|
if (isFailureSentinel(target)) {
|
|
517
523
|
yield target[FAILURE_SYMBOL];
|
|
518
524
|
return void 0;
|
|
@@ -534,7 +540,7 @@ function statusDo(generatorFn) {
|
|
|
534
540
|
iterator.return?.(void 0);
|
|
535
541
|
}
|
|
536
542
|
}
|
|
537
|
-
return normalizeResult(step.value
|
|
543
|
+
return normalizeResult(step.value);
|
|
538
544
|
}
|
|
539
545
|
async function statusDoAsync(generatorFn) {
|
|
540
546
|
const iterator = generatorFn();
|
|
@@ -548,19 +554,15 @@ async function statusDoAsync(generatorFn) {
|
|
|
548
554
|
await iterator.return?.(void 0);
|
|
549
555
|
}
|
|
550
556
|
}
|
|
551
|
-
return normalizeResult(step.value
|
|
557
|
+
return normalizeResult(step.value);
|
|
552
558
|
}
|
|
553
|
-
function normalizeResult(result
|
|
559
|
+
function normalizeResult(result) {
|
|
560
|
+
if (result === void 0) return OkStatus();
|
|
554
561
|
if (result instanceof StatusOr) return result;
|
|
555
562
|
if (isFailureSentinel(result))
|
|
556
563
|
return StatusOr.fromStatus(result[FAILURE_SYMBOL]);
|
|
557
564
|
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
|
-
);
|
|
565
|
+
if (result.ok()) return result;
|
|
564
566
|
return StatusOr.fromStatus(result);
|
|
565
567
|
}
|
|
566
568
|
return StatusOr.ok(result);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/status-code.ts","../src/errors.ts","../src/status.ts","../src/failure-brand.ts","../src/status-or.ts","../src/sentinel.ts","../src/do.ts","../src/predicates.ts","../src/interop.ts"],"names":["statusOr"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Canonical status error codes matching Abseil / gRPC standard error codes.\n */\nexport const StatusCode = {\n OK: \"OK\",\n CANCELLED: \"CANCELLED\",\n UNKNOWN: \"UNKNOWN\",\n INVALID_ARGUMENT: \"INVALID_ARGUMENT\",\n DEADLINE_EXCEEDED: \"DEADLINE_EXCEEDED\",\n NOT_FOUND: \"NOT_FOUND\",\n ALREADY_EXISTS: \"ALREADY_EXISTS\",\n PERMISSION_DENIED: \"PERMISSION_DENIED\",\n RESOURCE_EXHAUSTED: \"RESOURCE_EXHAUSTED\",\n FAILED_PRECONDITION: \"FAILED_PRECONDITION\",\n ABORTED: \"ABORTED\",\n OUT_OF_RANGE: \"OUT_OF_RANGE\",\n UNIMPLEMENTED: \"UNIMPLEMENTED\",\n INTERNAL: \"INTERNAL\",\n UNAVAILABLE: \"UNAVAILABLE\",\n DATA_LOSS: \"DATA_LOSS\",\n UNAUTHENTICATED: \"UNAUTHENTICATED\",\n} as const;\n\nexport type StatusCode = (typeof StatusCode)[keyof typeof StatusCode];\n","import type { Status } from \"./status.js\";\nimport type { StatusCode } from \"./status-code.js\";\n\n/** A native Error carrying a Status. */\nexport class StatusError extends Error {\n public readonly status: Status;\n\n constructor(status: Status) {\n super(status.toString());\n this.name = \"StatusError\";\n this.status = status;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n public get code(): StatusCode {\n return this.status.code();\n }\n}\n","import { StatusCode } from \"./status-code.js\";\nimport { StatusError } from \"./errors.js\";\n\nexport type PayloadValue = Uint8Array | string;\nexport type PayloadMap =\n | Readonly<Record<string, PayloadValue>>\n | ReadonlyMap<string, PayloadValue>;\n\nexport interface StatusJSON {\n ok: boolean;\n code: StatusCode;\n message: string;\n payloads?: Record<string, string> | undefined;\n}\n\nexport type StatusOk = Status & { ok(): true };\nexport type StatusFailed = Status & { ok(): false };\n\nfunction copyPayload(value: PayloadValue): PayloadValue {\n return typeof value === \"string\" ? value : value.slice();\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n let result = \"\";\n for (let i = 0; i < bytes.length; i += 3) {\n const b0 = bytes[i]!;\n const b1 = i + 1 < bytes.length ? bytes[i + 1]! : 0;\n const b2 = i + 2 < bytes.length ? bytes[i + 2]! : 0;\n result += chars[(b0 >> 2) & 0x3f];\n result += chars[((b0 & 0x03) << 4) | ((b1 >> 4) & 0x0f)];\n result +=\n i + 1 < bytes.length\n ? chars[((b1 & 0x0f) << 2) | ((b2 >> 6) & 0x03)]\n : \"=\";\n result += i + 2 < bytes.length ? chars[b2 & 0x3f] : \"=\";\n }\n return result;\n}\n\n/**\n * Represents either success or a canonical error. It never carries a\n * business value.\n */\nexport class Status {\n private _code: StatusCode;\n private _message: string;\n private _payloads: Map<string, PayloadValue> | undefined;\n\n public constructor(\n code: StatusCode = StatusCode.OK,\n message: string = \"\",\n ) {\n this._code = code;\n this._message = code === StatusCode.OK ? \"\" : message;\n }\n\n public ok(): this is StatusOk {\n return this._code === StatusCode.OK;\n }\n\n public code(): StatusCode {\n return this._code;\n }\n\n public message(): string {\n return this._message;\n }\n\n public status(): Status {\n return this;\n }\n\n public setMessage(message: string): void {\n if (!this.ok()) this._message = message;\n }\n\n public toString(): string {\n if (this.ok()) return \"OK\";\n return this._message.length === 0\n ? this._code\n : `${this._code}: ${this._message}`;\n }\n\n /** Keeps the first non-OK status, matching absl::Status::Update. */\n public update(other: Status): this {\n if (!this.ok()) return this;\n this._code = other._code;\n this._message = other._message;\n this._payloads = other.copyPayloads();\n return this;\n }\n\n public setPayload(typeUrl: string, payload: PayloadValue): void {\n if (this.ok()) return;\n this._payloads ??= new Map();\n this._payloads.set(typeUrl, copyPayload(payload));\n }\n\n public getPayload(typeUrl: string): PayloadValue | undefined {\n const payload = this._payloads?.get(typeUrl);\n return payload === undefined ? undefined : copyPayload(payload);\n }\n\n public hasPayload(typeUrl: string): boolean {\n return this._payloads?.has(typeUrl) ?? false;\n }\n\n public erasePayload(typeUrl: string): boolean {\n if (!this._payloads) return false;\n const deleted = this._payloads.delete(typeUrl);\n if (this._payloads.size === 0) this._payloads = undefined;\n return deleted;\n }\n\n public clearPayloads(): void {\n this._payloads = undefined;\n }\n\n public payloadCount(): number {\n return this._payloads?.size ?? 0;\n }\n\n public forEachPayload(\n callback: (typeUrl: string, payload: PayloadValue) => void,\n ): void {\n if (!this._payloads) return;\n for (const [key, value] of this._payloads)\n callback(key, copyPayload(value));\n }\n\n public clone(): Status {\n const cloned = new Status(this._code, this._message);\n cloned._payloads = this.copyPayloads();\n return cloned;\n }\n\n public equals(other: unknown): boolean {\n if (\n !(other instanceof Status) ||\n this._code !== other._code ||\n this._message !== other._message\n )\n return false;\n if (this.payloadCount() !== other.payloadCount()) return false;\n if (!this._payloads) return true;\n for (const [key, value] of this._payloads) {\n const otherValue = other._payloads?.get(key);\n if (\n otherValue === undefined ||\n !payloadEquals(value, otherValue)\n )\n return false;\n }\n return true;\n }\n\n public toJSON(): StatusJSON {\n const json: StatusJSON = {\n ok: this.ok(),\n code: this._code,\n message: this._message,\n };\n if (this._payloads?.size) {\n const payloads: Record<string, string> = {};\n for (const [key, value] of this._payloads)\n payloads[key] =\n typeof value === \"string\" ? value : bytesToBase64(value);\n json.payloads = payloads;\n }\n return json;\n }\n\n public toError(): StatusError {\n return new StatusError(this.clone());\n }\n\n /** Supports `yield* status` in statusDo pipelines. */\n public *[Symbol.iterator](): Generator<\n StatusFailed,\n void,\n unknown\n > {\n if (this.ok()) return;\n yield this as StatusFailed;\n }\n\n public static ok(): StatusOk {\n return new Status() as StatusOk;\n }\n\n public static fromCode(\n code: StatusCode,\n message: string = \"\",\n payloads?: PayloadMap,\n ): Status {\n const status = new Status(code, message);\n if (payloads) applyPayloads(status, payloads);\n return status;\n }\n\n private copyPayloads(): Map<string, PayloadValue> | undefined {\n if (!this._payloads?.size) return undefined;\n return new Map(\n Array.from(this._payloads, ([key, value]) => [\n key,\n copyPayload(value),\n ]),\n );\n }\n}\n\nfunction payloadEquals(\n left: PayloadValue,\n right: PayloadValue,\n): boolean {\n if (typeof left === \"string\" || typeof right === \"string\")\n return (\n typeof left === \"string\" &&\n typeof right === \"string\" &&\n left === right\n );\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nfunction applyPayloads(status: Status, payloads: PayloadMap): void {\n if (isReadonlyMap(payloads)) {\n for (const [key, value] of payloads)\n status.setPayload(key, value);\n return;\n }\n for (const [key, value] of Object.entries(payloads))\n status.setPayload(key, value);\n}\n\nfunction isReadonlyMap(\n value: PayloadMap,\n): value is ReadonlyMap<string, PayloadValue> {\n const candidate = value as ReadonlyMap<string, PayloadValue>;\n return (\n typeof candidate.entries === \"function\" &&\n typeof candidate[Symbol.iterator] === \"function\"\n );\n}\n\nexport function OkStatus(): StatusOk {\n return Status.ok();\n}\n\nfunction createErrorHelper(code: Exclude<StatusCode, \"OK\">) {\n return (\n message: string = \"\",\n payloads?: PayloadMap,\n ): StatusFailed => {\n const status = new Status(code, message);\n if (payloads) applyPayloads(status, payloads);\n return status as StatusFailed;\n };\n}\n\nexport const CancelledError = createErrorHelper(StatusCode.CANCELLED);\nexport const UnknownError = createErrorHelper(StatusCode.UNKNOWN);\nexport const InvalidArgumentError = createErrorHelper(\n StatusCode.INVALID_ARGUMENT,\n);\nexport const DeadlineExceededError = createErrorHelper(\n StatusCode.DEADLINE_EXCEEDED,\n);\nexport const NotFoundError = createErrorHelper(StatusCode.NOT_FOUND);\nexport const AlreadyExistsError = createErrorHelper(\n StatusCode.ALREADY_EXISTS,\n);\nexport const PermissionDeniedError = createErrorHelper(\n StatusCode.PERMISSION_DENIED,\n);\nexport const ResourceExhaustedError = createErrorHelper(\n StatusCode.RESOURCE_EXHAUSTED,\n);\nexport const FailedPreconditionError = createErrorHelper(\n StatusCode.FAILED_PRECONDITION,\n);\nexport const AbortedError = createErrorHelper(StatusCode.ABORTED);\nexport const OutOfRangeError = createErrorHelper(\n StatusCode.OUT_OF_RANGE,\n);\nexport const UnimplementedError = createErrorHelper(\n StatusCode.UNIMPLEMENTED,\n);\nexport const InternalError = createErrorHelper(StatusCode.INTERNAL);\nexport const UnavailableError = createErrorHelper(\n StatusCode.UNAVAILABLE,\n);\nexport const DataLossError = createErrorHelper(StatusCode.DATA_LOSS);\nexport const UnauthenticatedError = createErrorHelper(\n StatusCode.UNAUTHENTICATED,\n);\n","import { Status, type StatusFailed } from \"./status.js\";\n\n/** Shared brand for failure sentinels. */\nexport const FAILURE_SYMBOL = Symbol.for(\"absl.status.failure\");\n\nexport interface FailureBrand {\n readonly [FAILURE_SYMBOL]: StatusFailed;\n}\n\n/** Returns the failure status carried by a branded value. */\nexport function getBrandedFailureStatus(\n value: unknown,\n): StatusFailed | undefined {\n if (\n (typeof value !== \"object\" && typeof value !== \"function\") ||\n value === null\n )\n return undefined;\n try {\n if (!(FAILURE_SYMBOL in value)) return undefined;\n const status = (value as FailureBrand)[FAILURE_SYMBOL];\n return status instanceof Status && !status.ok()\n ? (status as StatusFailed)\n : undefined;\n } catch {\n return undefined;\n }\n}\n","import {\n Status,\n type StatusFailed,\n type StatusJSON,\n} from \"./status.js\";\nimport { getBrandedFailureStatus } from \"./failure-brand.js\";\n\nexport interface StatusOrJSON<T> extends StatusJSON {\n value?: T | undefined;\n}\n\nexport type StatusOrOk<T> = StatusOr<T> & { ok(): true; value(): T };\n\n/** A tagged union containing exactly one value T or one non-OK Status. */\nexport class StatusOr<T> {\n private readonly _status: Status;\n private readonly _value: T | undefined;\n\n private constructor(status: Status, value?: T) {\n this._status = status;\n this._value = value;\n }\n\n public static ok<T>(value: T): StatusOr<T> {\n const failureStatus = getBrandedFailureStatus(value);\n if (failureStatus) return StatusOr.fromStatus<T>(failureStatus);\n return new StatusOr<T>(Status.ok(), value);\n }\n\n public static fromStatus<T = never>(status: Status): StatusOr<T> {\n if (status.ok())\n throw new RangeError(\n \"StatusOr cannot be constructed from an OK Status without a value\",\n );\n return new StatusOr<T>(status.clone());\n }\n\n public static all<T extends readonly unknown[] | []>(\n values: T,\n ): StatusOr<{\n [K in keyof T]: T[K] extends StatusOr<infer V> ? V : T[K];\n }> {\n const results: unknown[] = [];\n for (const item of values) {\n const failureStatus = getBrandedFailureStatus(item);\n if (failureStatus) return StatusOr.fromStatus(failureStatus);\n if (item instanceof StatusOr) {\n if (!item.ok()) return StatusOr.fromStatus(item.status());\n results.push(item._value);\n } else {\n results.push(item);\n }\n }\n return StatusOr.ok(\n results as {\n [K in keyof T]: T[K] extends StatusOr<infer V> ? V : T[K];\n },\n );\n }\n\n public ok(): this is StatusOrOk<T> {\n return this._status.ok();\n }\n\n public code(): ReturnType<Status[\"code\"]> {\n return this._status.code();\n }\n\n public message(): string {\n return this._status.message();\n }\n\n public status(): Status {\n return this._status.clone();\n }\n\n public value(): T {\n if (!this.ok()) throw this._status.toError();\n return this._value as T;\n }\n\n public valueOr(defaultValue: T): T {\n return this.ok() ? (this._value as T) : defaultValue;\n }\n\n public valueOrCompute(\n computeFallback: (status: StatusFailed) => T,\n ): T {\n return this.ok()\n ? (this._value as T)\n : computeFallback(this._status.clone() as StatusFailed);\n }\n\n public transform<U>(fn: (value: T) => U): StatusOr<U> {\n return this.ok()\n ? StatusOr.ok(fn(this._value as T))\n : StatusOr.fromStatus(this._status);\n }\n\n public andThen<U>(fn: (value: T) => StatusOr<U>): StatusOr<U> {\n return this.ok()\n ? fn(this._value as T)\n : StatusOr.fromStatus(this._status);\n }\n\n public match<R>(handlers: {\n ok: (value: T) => R;\n err: (status: StatusFailed) => R;\n }): R {\n return this.ok()\n ? handlers.ok(this._value as T)\n : handlers.err(this._status.clone() as StatusFailed);\n }\n\n public *[Symbol.iterator](): Generator<StatusFailed, T, unknown> {\n if (this.ok()) return this._value as T;\n yield this._status.clone() as StatusFailed;\n return undefined as never;\n }\n\n public toString(): string {\n if (!this.ok()) return this._status.toString();\n if (this._value === undefined) return \"OK\";\n try {\n return `OK: ${JSON.stringify(this._value)}`;\n } catch {\n return \"OK: [unserializable value]\";\n }\n }\n\n public toJSON(): StatusOrJSON<T> {\n if (!this.ok()) return this._status.toJSON();\n return {\n ok: true,\n code: this._status.code(),\n message: \"\",\n value: this._value,\n };\n }\n\n public clone(): StatusOr<T> {\n return this.ok()\n ? StatusOr.ok(this._value as T)\n : StatusOr.fromStatus(this._status);\n }\n\n public equals(other: unknown): boolean {\n if (!(other instanceof StatusOr) || this.ok() !== other.ok())\n return false;\n if (!this.ok()) return this._status.equals(other._status);\n return Object.is(this._value, other._value);\n }\n}\n\nexport function statusOr<T>(value: T): StatusOr<T> {\n return StatusOr.ok(value);\n}\n\nexport function statusOrError<T = never>(\n status: StatusFailed,\n): StatusOr<T> {\n return StatusOr.fromStatus<T>(status);\n}\n","import { Status, type StatusFailed } from \"./status.js\";\nimport { StatusCode } from \"./status-code.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { StatusError } from \"./errors.js\";\nimport {\n FAILURE_SYMBOL,\n getBrandedFailureStatus,\n} from \"./failure-brand.js\";\n\nexport { FAILURE_SYMBOL } from \"./failure-brand.js\";\n\nexport interface FailureSentinel {\n readonly [FAILURE_SYMBOL]: StatusFailed;\n ok(): false;\n status(): StatusFailed;\n code(): StatusCode;\n message(): string;\n toString(): string;\n [Symbol.iterator](): Generator<StatusFailed, never, unknown>;\n}\n\n/** Returns whether a value is a valid failure sentinel. */\nexport function isFailureSentinel(\n value: unknown,\n): value is FailureSentinel {\n if (!getBrandedFailureStatus(value)) return false;\n try {\n const candidate = value as FailureSentinel;\n return (\n typeof candidate.ok === \"function\" &&\n typeof candidate.status === \"function\" &&\n typeof candidate.code === \"function\" &&\n typeof candidate.message === \"function\" &&\n typeof candidate.toString === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/** Returns the failure status carried by a supported result object. */\nexport function getFailureStatus(\n value: unknown,\n): StatusFailed | undefined {\n const brandedStatus = getBrandedFailureStatus(value);\n if (brandedStatus) return brandedStatus;\n if (value instanceof Status) {\n if (!value.ok()) return value as StatusFailed;\n return undefined;\n }\n if (value instanceof StatusOr) {\n if (!value.ok()) return value.status() as StatusFailed;\n return undefined;\n }\n return undefined;\n}\n\n/** Creates a failure sentinel carrying a non-OK status. */\nexport function failure<T = never>(status: Status): T {\n if (status.ok())\n throw new RangeError(\n \"Failure sentinel cannot be created from an OK Status\",\n );\n\n const base: FailureSentinel = {\n [FAILURE_SYMBOL]: status as StatusFailed,\n ok() {\n return false;\n },\n status() {\n return status as StatusFailed;\n },\n code() {\n return status.code();\n },\n message() {\n return status.message();\n },\n toString() {\n return status.toString();\n },\n *[Symbol.iterator](): Generator<StatusFailed, never, unknown> {\n return throwFailureMisuse(\n status,\n \"iterate the failed result without ensureOk()\",\n );\n },\n };\n\n return new Proxy(base, {\n get(target, prop, receiver) {\n if (prop in target || prop === FAILURE_SYMBOL)\n return Reflect.get(target, prop, receiver);\n if (prop === \"then\") return undefined;\n if (prop === Symbol.toPrimitive)\n return () =>\n throwFailureMisuse(\n status,\n \"coerce the failed result to a primitive\",\n );\n if (typeof prop === \"symbol\") return undefined;\n return throwFailureMisuse(\n status,\n `read business property ${JSON.stringify(prop)}`,\n );\n },\n set(_target, prop) {\n return throwFailureMisuse(\n status,\n `write business property ${JSON.stringify(String(prop))}`,\n );\n },\n deleteProperty(_target, prop) {\n return throwFailureMisuse(\n status,\n `delete business property ${JSON.stringify(String(prop))}`,\n );\n },\n defineProperty(_target, prop) {\n return throwFailureMisuse(\n status,\n `define business property ${JSON.stringify(String(prop))}`,\n );\n },\n has(target, prop) {\n if (prop in target) return true;\n if (prop === \"then\" || typeof prop === \"symbol\") return false;\n return throwFailureMisuse(\n status,\n `check business property ${JSON.stringify(prop)}`,\n );\n },\n ownKeys() {\n return throwFailureMisuse(\n status,\n \"enumerate or spread the failed result\",\n );\n },\n }) as unknown as T;\n}\n\nfunction throwFailureMisuse(status: Status, action: string): never {\n const error = new StatusError(status.clone());\n error.message =\n `Failure result used as a successful value: attempted to ${action}. ` +\n \"Check it with hasError() or ensureOk() first. \" +\n `Original status: ${status.toString()}`;\n throw error;\n}\n\nexport const failureSentinel = failure;\nexport const createFailure = failure;\n\n/** Proxies non-conflicting properties from a successful StatusOr value. */\nexport type StatusOrProxy<T> = StatusOr<T> &\n (T extends object ? Omit<T, keyof StatusOr<T>> : unknown);\n\nexport function asProxy<T>(statusOr: StatusOr<T>): StatusOrProxy<T> {\n return new Proxy(statusOr, {\n get(target, prop, receiver) {\n if (prop in target || typeof prop === \"symbol\") {\n const val = Reflect.get(target, prop, receiver);\n if (typeof val === \"function\") return val.bind(target);\n return val;\n }\n if (target.ok()) {\n const inner = target.value() as any;\n if (\n inner !== null &&\n inner !== undefined &&\n (typeof inner === \"object\" || typeof inner === \"function\")\n ) {\n const val = Reflect.get(inner, prop, inner);\n if (typeof val === \"function\") return val.bind(inner);\n return val;\n }\n }\n return undefined;\n },\n has(target, prop) {\n if (prop in target) return true;\n if (target.ok()) {\n const inner = target.value() as any;\n if (\n inner !== null &&\n inner !== undefined &&\n (typeof inner === \"object\" || typeof inner === \"function\")\n )\n return prop in inner;\n }\n return false;\n },\n }) as StatusOrProxy<T>;\n}\n","import {\n InternalError,\n Status,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { FAILURE_SYMBOL, isFailureSentinel } from \"./sentinel.js\";\n\ntype StatusDoResult<T> = T | StatusOr<T> | StatusFailed;\n\n/** Unwraps a successful result or yields its failure to the pipeline. */\nexport function ensureOk(\n status: Status,\n): Generator<StatusFailed, void, unknown>;\nexport function ensureOk<T>(\n statusOr: StatusOr<T>,\n): Generator<StatusFailed, T, unknown>;\nexport function ensureOk<T>(\n target: T,\n): Generator<StatusFailed, T, unknown>;\nexport function* ensureOk<T = void>(\n target: unknown,\n): Generator<StatusFailed, T, unknown> {\n if (target instanceof Status) {\n if (!target.ok()) yield target as StatusFailed;\n return undefined as T;\n }\n if (target instanceof StatusOr) {\n if (!target.ok()) yield target.status() as StatusFailed;\n return target.value() as T;\n }\n if (isFailureSentinel(target)) {\n yield target[FAILURE_SYMBOL];\n return undefined as never;\n }\n return target as T;\n}\n\nexport const EnsureOk = ensureOk;\nexport const checkStatus = ensureOk;\nexport const CheckStatus = ensureOk;\n\n/** Runs a synchronous generator pipeline and stops at the first failure. */\nexport function statusDo<T>(\n generatorFn: () => Generator<\n StatusFailed,\n StatusDoResult<T>,\n unknown\n >,\n): StatusOr<T> {\n const iterator = generatorFn();\n const step = iterator.next();\n if (!step.done) {\n try {\n if (isFailureSentinel(step.value))\n return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);\n return StatusOr.fromStatus(step.value);\n } finally {\n iterator.return?.(undefined as never);\n }\n }\n return normalizeResult(step.value, \"statusDo\");\n}\n\n/** Runs an asynchronous generator pipeline and stops at the first failure. */\nexport async function statusDoAsync<T>(\n generatorFn: () => AsyncGenerator<\n StatusFailed,\n StatusDoResult<T>,\n unknown\n >,\n): Promise<StatusOr<T>> {\n const iterator = generatorFn();\n const step = await iterator.next();\n if (!step.done) {\n try {\n if (isFailureSentinel(step.value))\n return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);\n return StatusOr.fromStatus(step.value);\n } finally {\n await iterator.return?.(undefined as never);\n }\n }\n return normalizeResult(step.value, \"statusDoAsync\");\n}\n\nfunction normalizeResult<T>(\n result: StatusDoResult<T>,\n source: string,\n): StatusOr<T> {\n if (result instanceof StatusOr) return result;\n if (isFailureSentinel(result))\n return StatusOr.fromStatus(result[FAILURE_SYMBOL]);\n if (result instanceof Status) {\n if (result.ok())\n return StatusOr.fromStatus(\n InternalError(\n `${source} cannot return an OK Status without a value`,\n ),\n );\n return StatusOr.fromStatus(result as StatusFailed);\n }\n return StatusOr.ok(result);\n}\n","import { StatusCode } from \"./status-code.js\";\nimport {\n Status,\n type StatusOk,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr, type StatusOrOk } from \"./status-or.js\";\nimport { isFailureSentinel } from \"./sentinel.js\";\n\nexport interface ErrorCarrier {\n status(): StatusFailed;\n ok(): false;\n code(): StatusCode;\n message(): string;\n toString(): string;\n}\n\nfunction extractStatusCode(target: unknown): StatusCode | undefined {\n if (target === null || target === undefined) return undefined;\n if (target instanceof Status || target instanceof StatusOr)\n return target.code();\n if (typeof (target as any).code === \"function\") {\n const res = (target as any).code();\n if (isStatusCode(res)) return res as StatusCode;\n }\n if (isStatusCode((target as any).code))\n return (target as any).code as StatusCode;\n return undefined;\n}\n\nconst statusCodes = new Set<string>(Object.values(StatusCode));\n\nfunction isStatusCode(value: unknown): value is StatusCode {\n return typeof value === \"string\" && statusCodes.has(value);\n}\n\n/** Returns whether a Status or StatusOr is OK. */\nexport function isOk(target: Status): target is StatusOk;\nexport function isOk<T>(target: StatusOr<T>): target is StatusOrOk<T>;\nexport function isOk(target: unknown): boolean;\nexport function isOk(target: unknown): boolean {\n const code = extractStatusCode(target);\n if (code === undefined) return false;\n return code === StatusCode.OK;\n}\n\n/** Returns whether a supported result object carries a failure. */\nexport function hasError(target: unknown): target is ErrorCarrier {\n if (target === null || target === undefined) return false;\n if (target instanceof Status) return !target.ok();\n if (target instanceof StatusOr) return !target.ok();\n if (isFailureSentinel(target)) return true;\n return false;\n}\n\nfunction createPredicate(expectedCode: StatusCode) {\n return (target: unknown): boolean => {\n const code = extractStatusCode(target);\n if (code === undefined) return false;\n return code === expectedCode;\n };\n}\n\nexport const isCancelled = createPredicate(StatusCode.CANCELLED);\nexport const isUnknown = createPredicate(StatusCode.UNKNOWN);\nexport const isInvalidArgument = createPredicate(\n StatusCode.INVALID_ARGUMENT,\n);\nexport const isDeadlineExceeded = createPredicate(\n StatusCode.DEADLINE_EXCEEDED,\n);\nexport const isNotFound = createPredicate(StatusCode.NOT_FOUND);\nexport const isAlreadyExists = createPredicate(\n StatusCode.ALREADY_EXISTS,\n);\nexport const isPermissionDenied = createPredicate(\n StatusCode.PERMISSION_DENIED,\n);\nexport const isResourceExhausted = createPredicate(\n StatusCode.RESOURCE_EXHAUSTED,\n);\nexport const isFailedPrecondition = createPredicate(\n StatusCode.FAILED_PRECONDITION,\n);\nexport const isAborted = createPredicate(StatusCode.ABORTED);\nexport const isOutOfRange = createPredicate(StatusCode.OUT_OF_RANGE);\nexport const isUnimplemented = createPredicate(\n StatusCode.UNIMPLEMENTED,\n);\nexport const isInternal = createPredicate(StatusCode.INTERNAL);\nexport const isUnavailable = createPredicate(StatusCode.UNAVAILABLE);\nexport const isDataLoss = createPredicate(StatusCode.DATA_LOSS);\nexport const isUnauthenticated = createPredicate(\n StatusCode.UNAUTHENTICATED,\n);\n","import {\n Status,\n InternalError,\n UnknownError,\n InvalidArgumentError,\n OutOfRangeError,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { StatusError } from \"./errors.js\";\nimport { getBrandedFailureStatus } from \"./failure-brand.js\";\n\n/** Converts a thrown JavaScript value into a non-OK Status. */\nexport function fromError(error: unknown): StatusFailed {\n const failureStatus = getBrandedFailureStatus(error);\n if (failureStatus) return failureStatus;\n if (error instanceof Status)\n return error.ok()\n ? InternalError(\"Caught an OK Status as an error\")\n : (error as StatusFailed);\n if (error instanceof StatusError)\n return error.status.ok()\n ? InternalError(\"Caught a StatusError containing an OK Status\")\n : (error.status as StatusFailed);\n if (error instanceof RangeError)\n return OutOfRangeError(error.message);\n if (error instanceof TypeError)\n return InvalidArgumentError(error.message);\n if (error instanceof Error) return UnknownError(error.message);\n if (typeof error === \"string\") return UnknownError(error);\n return UnknownError(String(error));\n}\n\n/** Runs a function and converts thrown values into a StatusOr failure. */\nexport function tryCatch<T>(\n fn: () => T,\n mapper?: (error: unknown) => Status,\n): StatusOr<T> {\n try {\n return StatusOr.ok(fn());\n } catch (err: unknown) {\n const status = mapper ? mapper(err) : fromError(err);\n return StatusOr.fromStatus(\n status.ok()\n ? InternalError(\"tryCatch mapper returned an OK Status\")\n : status,\n );\n }\n}\n\n/** Runs an async function and converts rejections into a StatusOr failure. */\nexport async function tryCatchAsync<T>(\n fn: () => Promise<T>,\n mapper?: (error: unknown) => Status,\n): Promise<StatusOr<T>> {\n try {\n return StatusOr.ok(await fn());\n } catch (err: unknown) {\n const status = mapper ? mapper(err) : fromError(err);\n return StatusOr.fromStatus(\n status.ok()\n ? InternalError(\"tryCatchAsync mapper returned an OK Status\")\n : status,\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/status-code.ts","../src/errors.ts","../src/status.ts","../src/failure-brand.ts","../src/status-or.ts","../src/sentinel.ts","../src/do.ts","../src/predicates.ts","../src/interop.ts"],"names":["statusOr"],"mappings":";;;AAGO,IAAM,UAAA,GAAa;AAAA,EACxB,EAAA,EAAI,IAAA;AAAA,EACJ,SAAA,EAAW,WAAA;AAAA,EACX,OAAA,EAAS,SAAA;AAAA,EACT,gBAAA,EAAkB,kBAAA;AAAA,EAClB,iBAAA,EAAmB,mBAAA;AAAA,EACnB,SAAA,EAAW,WAAA;AAAA,EACX,cAAA,EAAgB,gBAAA;AAAA,EAChB,iBAAA,EAAmB,mBAAA;AAAA,EACnB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,OAAA,EAAS,SAAA;AAAA,EACT,YAAA,EAAc,cAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,QAAA,EAAU,UAAA;AAAA,EACV,WAAA,EAAa,aAAA;AAAA,EACb,SAAA,EAAW,WAAA;AAAA,EACX,eAAA,EAAiB;AACnB;;;ACjBO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EACrB,MAAA;AAAA,EAEhB,YAAY,MAAA,EAAgB;AAC1B,IAAA,KAAA,CAAM,MAAA,CAAO,UAAU,CAAA;AACvB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AAAA,EAEA,IAAW,IAAA,GAAmB;AAC5B,IAAA,OAAO,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,EAC1B;AACF;;;ACCA,SAAS,YAAY,KAAA,EAAmC;AACtD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAM,KAAA,EAAM;AACzD;AAEA,SAAS,cAAc,KAAA,EAA2B;AAChD,EAAA,MAAM,KAAA,GACJ,kEAAA;AACF,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,IAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,IAAA,MAAM,EAAA,GAAK,IAAI,CAAA,GAAI,KAAA,CAAM,SAAS,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,GAAK,CAAA;AAClD,IAAA,MAAM,EAAA,GAAK,IAAI,CAAA,GAAI,KAAA,CAAM,SAAS,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,GAAK,CAAA;AAClD,IAAA,MAAA,IAAU,KAAA,CAAO,EAAA,IAAM,CAAA,GAAK,EAAI,CAAA;AAChC,IAAA,MAAA,IAAU,OAAQ,EAAA,GAAK,CAAA,KAAS,CAAA,GAAO,EAAA,IAAM,IAAK,EAAK,CAAA;AACvD,IAAA,MAAA,IACE,CAAA,GAAI,CAAA,GAAI,KAAA,CAAM,MAAA,GACV,KAAA,CAAA,CAAQ,EAAA,GAAK,EAAA,KAAS,CAAA,GAAO,EAAA,IAAM,CAAA,GAAK,CAAK,CAAA,GAC7C,GAAA;AACN,IAAA,MAAA,IAAU,IAAI,CAAA,GAAI,KAAA,CAAM,SAAS,KAAA,CAAM,EAAA,GAAK,EAAI,CAAA,GAAI,GAAA;AAAA,EACtD;AACA,EAAA,OAAO,MAAA;AACT;AAMO,IAAM,MAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EACV,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EAED,WAAA,CACL,IAAA,GAAmB,UAAA,CAAW,EAAA,EAC9B,UAAkB,EAAA,EAClB;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,KAAS,UAAA,CAAW,EAAA,GAAK,EAAA,GAAK,OAAA;AAAA,EAChD;AAAA,EAEO,EAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,UAAU,UAAA,CAAW,EAAA;AAAA,EACnC;AAAA,EAEO,IAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEO,OAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEO,MAAA,GAAiB;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,WAAW,OAAA,EAAuB;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAG,OAAQ,QAAA,GAAW,OAAA;AAAA,EAClC;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,IAAI,IAAA,CAAK,EAAA,EAAG,EAAG,OAAO,IAAA;AACtB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,GAC5B,IAAA,CAAK,KAAA,GACL,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,EACrC;AAAA;AAAA,EAGO,OAAO,KAAA,EAAqB;AACjC,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAG,EAAG,OAAO,IAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA;AACnB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,MAAM,YAAA,EAAa;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,UAAA,CAAW,SAAiB,OAAA,EAA6B;AAC9D,IAAA,IAAI,IAAA,CAAK,IAAG,EAAG;AACf,IAAA,IAAA,CAAK,SAAA,yBAAkB,GAAA,EAAI;AAC3B,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,EAClD;AAAA,EAEO,WAAW,OAAA,EAA2C;AAC3D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,OAAO,CAAA;AAC3C,IAAA,OAAO,OAAA,KAAY,MAAA,GAAY,MAAA,GAAY,WAAA,CAAY,OAAO,CAAA;AAAA,EAChE;AAAA,EAEO,WAAW,OAAA,EAA0B;AAC1C,IAAA,OAAO,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,OAAO,CAAA,IAAK,KAAA;AAAA,EACzC;AAAA,EAEO,aAAa,OAAA,EAA0B;AAC5C,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,KAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA;AAC7C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,KAAS,CAAA,OAAQ,SAAA,GAAY,MAAA;AAChD,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEO,aAAA,GAAsB;AAC3B,IAAA,IAAA,CAAK,SAAA,GAAY,MAAA;AAAA,EACnB;AAAA,EAEO,YAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,IAAQ,CAAA;AAAA,EACjC;AAAA,EAEO,eACL,QAAA,EACM;AACN,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACrB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,CAAK,SAAA;AAC9B,MAAA,QAAA,CAAS,GAAA,EAAK,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,EACpC;AAAA,EAEO,KAAA,GAAgB;AACrB,IAAA,MAAM,SAAS,IAAI,OAAA,CAAO,IAAA,CAAK,KAAA,EAAO,KAAK,QAAQ,CAAA;AACnD,IAAA,MAAA,CAAO,SAAA,GAAY,KAAK,YAAA,EAAa;AACrC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,OAAO,KAAA,EAAyB;AACrC,IAAA,IACE,EAAE,iBAAiB,OAAA,CAAA,IACnB,IAAA,CAAK,UAAU,KAAA,CAAM,KAAA,IACrB,IAAA,CAAK,QAAA,KAAa,KAAA,CAAM,QAAA;AAExB,MAAA,OAAO,KAAA;AACT,IAAA,IAAI,KAAK,YAAA,EAAa,KAAM,KAAA,CAAM,YAAA,IAAgB,OAAO,KAAA;AACzD,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,IAAA;AAC5B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,SAAA,EAAW;AACzC,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,SAAA,EAAW,GAAA,CAAI,GAAG,CAAA;AAC3C,MAAA,IACE,UAAA,KAAe,MAAA,IACf,CAAC,aAAA,CAAc,OAAO,UAAU,CAAA;AAEhC,QAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,MAAA,GAAqB;AAC1B,IAAA,MAAM,IAAA,GAAmB;AAAA,MACvB,EAAA,EAAI,KAAK,EAAA,EAAG;AAAA,MACZ,MAAM,IAAA,CAAK,KAAA;AAAA,MACX,SAAS,IAAA,CAAK;AAAA,KAChB;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,IAAA,EAAM;AACxB,MAAA,MAAM,WAAmC,EAAC;AAC1C,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,CAAK,SAAA;AAC9B,QAAA,QAAA,CAAS,GAAG,CAAA,GACV,OAAO,UAAU,QAAA,GAAW,KAAA,GAAQ,cAAc,KAAK,CAAA;AAC3D,MAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,OAAA,GAAuB;AAC5B,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,EAAS,MAAA,CAAO,QAAQ,CAAA,GAItB;AACA,IAAA,IAAI,IAAA,CAAK,IAAG,EAAG;AACf,IAAA,MAAM,IAAA;AAAA,EACR;AAAA,EAEA,OAAc,EAAA,GAAe;AAC3B,IAAA,OAAO,IAAI,OAAA,EAAO;AAAA,EACpB;AAAA,EAEA,OAAc,QAAA,CACZ,IAAA,EACA,OAAA,GAAkB,IAClB,QAAA,EACQ;AACR,IAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAO,IAAA,EAAM,OAAO,CAAA;AACvC,IAAA,IAAI,QAAA,EAAU,aAAA,CAAc,MAAA,EAAQ,QAAQ,CAAA;AAC5C,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,YAAA,GAAsD;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,IAAA,EAAM,OAAO,MAAA;AAClC,IAAA,OAAO,IAAI,GAAA;AAAA,MACT,KAAA,CAAM,KAAK,IAAA,CAAK,SAAA,EAAW,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAAA,QAC3C,GAAA;AAAA,QACA,YAAY,KAAK;AAAA,OAClB;AAAA,KACH;AAAA,EACF;AACF;AAEA,SAAS,aAAA,CACP,MACA,KAAA,EACS;AACT,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA;AAC/C,IAAA,OACE,OAAO,IAAA,KAAS,QAAA,IAChB,OAAO,KAAA,KAAU,YACjB,IAAA,KAAS,KAAA;AAEb,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AACzC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAI,KAAK,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,GAAG,OAAO,KAAA;AAAA,EACnC;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAA,CAAc,QAAgB,QAAA,EAA4B;AACjE,EAAA,IAAI,aAAA,CAAc,QAAQ,CAAA,EAAG;AAC3B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,QAAA;AACzB,MAAA,MAAA,CAAO,UAAA,CAAW,KAAK,KAAK,CAAA;AAC9B,IAAA;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,QAAQ,CAAA;AAChD,IAAA,MAAA,CAAO,UAAA,CAAW,KAAK,KAAK,CAAA;AAChC;AAEA,SAAS,cACP,KAAA,EAC4C;AAC5C,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,OACE,OAAO,UAAU,OAAA,KAAY,UAAA,IAC7B,OAAO,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,KAAM,UAAA;AAE1C;AAEO,SAAS,QAAA,GAAqB;AACnC,EAAA,OAAO,OAAO,EAAA,EAAG;AACnB;AAEA,SAAS,kBAAkB,IAAA,EAAiC;AAC1D,EAAA,OAAO,CACL,OAAA,GAAkB,EAAA,EAClB,QAAA,KACiB;AACjB,IAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;AACvC,IAAA,IAAI,QAAA,EAAU,aAAA,CAAc,MAAA,EAAQ,QAAQ,CAAA;AAC5C,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEO,IAAM,cAAA,GAAiB,iBAAA,CAAkB,UAAA,CAAW,SAAS;AAC7D,IAAM,YAAA,GAAe,iBAAA,CAAkB,UAAA,CAAW,OAAO;AACzD,IAAM,oBAAA,GAAuB,iBAAA;AAAA,EAClC,UAAA,CAAW;AACb;AACO,IAAM,qBAAA,GAAwB,iBAAA;AAAA,EACnC,UAAA,CAAW;AACb;AACO,IAAM,aAAA,GAAgB,iBAAA,CAAkB,UAAA,CAAW,SAAS;AAC5D,IAAM,kBAAA,GAAqB,iBAAA;AAAA,EAChC,UAAA,CAAW;AACb;AACO,IAAM,qBAAA,GAAwB,iBAAA;AAAA,EACnC,UAAA,CAAW;AACb;AACO,IAAM,sBAAA,GAAyB,iBAAA;AAAA,EACpC,UAAA,CAAW;AACb;AACO,IAAM,uBAAA,GAA0B,iBAAA;AAAA,EACrC,UAAA,CAAW;AACb;AACO,IAAM,YAAA,GAAe,iBAAA,CAAkB,UAAA,CAAW,OAAO;AACzD,IAAM,eAAA,GAAkB,iBAAA;AAAA,EAC7B,UAAA,CAAW;AACb;AACO,IAAM,kBAAA,GAAqB,iBAAA;AAAA,EAChC,UAAA,CAAW;AACb;AACO,IAAM,aAAA,GAAgB,iBAAA,CAAkB,UAAA,CAAW,QAAQ;AAC3D,IAAM,gBAAA,GAAmB,iBAAA;AAAA,EAC9B,UAAA,CAAW;AACb;AACO,IAAM,aAAA,GAAgB,iBAAA,CAAkB,UAAA,CAAW,SAAS;AAC5D,IAAM,oBAAA,GAAuB,iBAAA;AAAA,EAClC,UAAA,CAAW;AACb;;;ACzSO,IAAM,cAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,qBAAqB;AAOvD,SAAS,wBACd,KAAA,EAC0B;AAC1B,EAAA,IACG,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,cAC/C,KAAA,KAAU,IAAA;AAEV,IAAA,OAAO,MAAA;AACT,EAAA,IAAI;AACF,IAAA,IAAI,EAAE,cAAA,IAAkB,KAAA,CAAA,EAAQ,OAAO,KAAA,CAAA;AACvC,IAAA,MAAM,MAAA,GAAU,MAAuB,cAAc,CAAA;AACrD,IAAA,OAAO,kBAAkB,MAAA,IAAU,CAAC,MAAA,CAAO,EAAA,KACtC,MAAA,GACD,KAAA,CAAA;AAAA,EACN,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACbO,IAAM,QAAA,GAAN,MAAM,SAAA,CAAY;AAAA,EACN,OAAA;AAAA,EACA,MAAA;AAAA,EAET,WAAA,CAAY,QAAgB,KAAA,EAAW;AAC7C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EAEA,OAAc,GAAM,KAAA,EAAuB;AACzC,IAAA,MAAM,aAAA,GAAgB,wBAAwB,KAAK,CAAA;AACnD,IAAA,IAAI,aAAA,EAAe,OAAO,SAAA,CAAS,UAAA,CAAc,aAAa,CAAA;AAC9D,IAAA,OAAO,IAAI,SAAA,CAAY,MAAA,CAAO,EAAA,IAAM,KAAK,CAAA;AAAA,EAC3C;AAAA,EAEA,OAAc,WAAsB,MAAA,EAA6B;AAC/D,IAAA,IAAI,OAAO,EAAA,EAAG;AACZ,MAAA,MAAM,IAAI,UAAA;AAAA,QACR;AAAA,OACF;AACF,IAAA,OAAO,IAAI,SAAA,CAAY,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,EACvC;AAAA,EAEA,OAAc,IACZ,MAAA,EAGC;AACD,IAAA,MAAM,UAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,MAAM,aAAA,GAAgB,wBAAwB,IAAI,CAAA;AAClD,MAAA,IAAI,aAAA,EAAe,OAAO,SAAA,CAAS,UAAA,CAAW,aAAa,CAAA;AAC3D,MAAA,IAAI,gBAAgB,SAAA,EAAU;AAC5B,QAAA,IAAI,CAAC,KAAK,EAAA,EAAG,SAAU,SAAA,CAAS,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,CAAA;AACxD,QAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,MAAM,CAAA;AACxB,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,IACnB;AACA,IAAA,OAAO,SAAA,CAAS,EAAA;AAAA,MACd;AAAA,KAGF;AAAA,EACF;AAAA,EAEO,EAAA,GAA4B;AACjC,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAA,EAAG;AAAA,EACzB;AAAA,EAEO,IAAA,GAAmC;AACxC,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,EAAK;AAAA,EAC3B;AAAA,EAEO,OAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,QAAQ,OAAA,EAAQ;AAAA,EAC9B;AAAA,EAEO,MAAA,GAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,EAC5B;AAAA,EAEO,KAAA,GAAW;AAChB,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,MAAM,IAAA,CAAK,QAAQ,OAAA,EAAQ;AAC3C,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEO,QAAQ,YAAA,EAAoB;AACjC,IAAA,IAAI,IAAA,CAAK,EAAA,EAAG,EAAG,OAAO,IAAA,CAAK,MAAA;AAC3B,IAAA,OAAO,YAAA;AAAA,EACT;AAAA,EAEO,eACL,eAAA,EACG;AACH,IAAA,IAAI,IAAA,CAAK,EAAA,EAAG,EAAG,OAAO,IAAA,CAAK,MAAA;AAC3B,IAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAuB,CAAA;AAAA,EAC7D;AAAA,EAEO,UAAa,EAAA,EAAkC;AACpD,IAAA,IAAI,IAAA,CAAK,IAAG,EAAG,OAAO,UAAS,EAAA,CAAG,EAAA,CAAG,IAAA,CAAK,MAAW,CAAC,CAAA;AACtD,IAAA,OAAO,SAAA,CAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AAAA,EACzC;AAAA,EAEO,QAAW,EAAA,EAA4C;AAC5D,IAAA,IAAI,KAAK,EAAA,EAAG,EAAG,OAAO,EAAA,CAAG,KAAK,MAAW,CAAA;AACzC,IAAA,OAAO,SAAA,CAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AAAA,EACzC;AAAA,EAEO,MAAS,QAAA,EAGV;AACJ,IAAA,IAAI,KAAK,EAAA,EAAG,SAAU,QAAA,CAAS,EAAA,CAAG,KAAK,MAAW,CAAA;AAClD,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,OAAuB,CAAA;AAAA,EAC1D;AAAA,EAEA,EAAS,MAAA,CAAO,QAAQ,CAAA,GAAyC;AAC/D,IAAA,IAAI,IAAA,CAAK,EAAA,EAAG,EAAG,OAAO,IAAA,CAAK,MAAA;AAC3B,IAAA,MAAM,IAAA,CAAK,QAAQ,KAAA,EAAM;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,OAAO,IAAA,CAAK,QAAQ,QAAA,EAAS;AAC7C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,OAAO,IAAA;AACtC,IAAA,IAAI;AACF,MAAA,OAAO,CAAA,IAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,IAC3C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,4BAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEO,MAAA,GAA0B;AAC/B,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,OAAO,IAAA,CAAK,QAAQ,MAAA,EAAO;AAC3C,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK;AAAA,MACxB,OAAA,EAAS,EAAA;AAAA,MACT,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AAAA,EAEO,KAAA,GAAqB;AAC1B,IAAA,IAAI,KAAK,EAAA,EAAG,SAAU,SAAA,CAAS,EAAA,CAAG,KAAK,MAAW,CAAA;AAClD,IAAA,OAAO,SAAA,CAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AAAA,EACzC;AAAA,EAEO,OAAO,KAAA,EAAyB;AACrC,IAAA,IAAI,EAAE,KAAA,YAAiB,SAAA,CAAA,IAAa,KAAK,EAAA,EAAG,KAAM,MAAM,EAAA,EAAG;AACzD,MAAA,OAAO,KAAA;AACT,IAAA,IAAI,CAAC,KAAK,EAAA,EAAG,SAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AACxD,IAAA,OAAO,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AAAA,EAC5C;AACF;AAEO,SAAS,SAAY,KAAA,EAAuB;AACjD,EAAA,OAAO,QAAA,CAAS,GAAG,KAAK,CAAA;AAC1B;AAEO,SAAS,cACd,MAAA,EACa;AACb,EAAA,OAAO,QAAA,CAAS,WAAc,MAAM,CAAA;AACtC;;;ACxIO,SAAS,kBACd,KAAA,EAC0B;AAC1B,EAAA,IAAI,CAAC,uBAAA,CAAwB,KAAK,CAAA,EAAG,OAAO,KAAA;AAC5C,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,KAAA;AAClB,IAAA,OACE,OAAO,SAAA,CAAU,EAAA,KAAO,cACxB,OAAO,SAAA,CAAU,WAAW,UAAA,IAC5B,OAAO,SAAA,CAAU,IAAA,KAAS,cAC1B,OAAO,SAAA,CAAU,YAAY,UAAA,IAC7B,OAAO,UAAU,QAAA,KAAa,UAAA;AAAA,EAElC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGO,SAAS,iBACd,KAAA,EAC0B;AAC1B,EAAA,MAAM,aAAA,GAAgB,wBAAwB,KAAK,CAAA;AACnD,EAAA,IAAI,eAAe,OAAO,aAAA;AAC1B,EAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,IAAA,IAAI,CAAC,KAAA,CAAM,EAAA,EAAG,EAAG,OAAO,KAAA;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,KAAA,CAAM,EAAA,EAAG,EAAG,OAAO,MAAM,MAAA,EAAO;AACrC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,QAAmB,MAAA,EAAmB;AACpD,EAAA,IAAI,OAAO,EAAA,EAAG;AACZ,IAAA,MAAM,IAAI,UAAA;AAAA,MACR;AAAA,KACF;AAEF,EAAA,MAAM,IAAA,GAAwB;AAAA,IAC5B,CAAC,cAAc,GAAG,MAAA;AAAA,IAClB,EAAA,GAAK;AACH,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAA,GAAS;AACP,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,GAAO;AACL,MAAA,OAAO,OAAO,IAAA,EAAK;AAAA,IACrB,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACxB,CAAA;AAAA,IACA,QAAA,GAAW;AACT,MAAA,OAAO,OAAO,QAAA,EAAS;AAAA,IACzB,CAAA;AAAA,IACA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAA6C;AAC5D,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,OAAO,IAAI,MAAM,IAAA,EAAM;AAAA,IACrB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAA,IAAQ,UAAU,IAAA,KAAS,cAAA;AAC7B,QAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAC3C,MAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,MAAA;AAC5B,MAAA,IAAI,SAAS,MAAA,CAAO,WAAA;AAClB,QAAA,OAAO,MACL,kBAAA;AAAA,UACE,MAAA;AAAA,UACA;AAAA,SACF;AACJ,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA;AACrC,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,CAAA,uBAAA,EAA0B,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,OAChD;AAAA,IACF,CAAA;AAAA,IACA,GAAA,CAAI,SAAS,IAAA,EAAM;AACjB,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,2BAA2B,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,OACzD;AAAA,IACF,CAAA;AAAA,IACA,cAAA,CAAe,SAAS,IAAA,EAAM;AAC5B,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,4BAA4B,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,OAC1D;AAAA,IACF,CAAA;AAAA,IACA,cAAA,CAAe,SAAS,IAAA,EAAM;AAC5B,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,4BAA4B,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,OAC1D;AAAA,IACF,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,IAAI,IAAA,IAAQ,QAAQ,OAAO,IAAA;AAC3B,MAAA,IAAI,IAAA,KAAS,MAAA,IAAU,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AACxD,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,CAAA,wBAAA,EAA2B,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,OACjD;AAAA,IACF,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAEA,SAAS,kBAAA,CAAmB,QAAgB,MAAA,EAAuB;AACjE,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,UACJ,CAAA,wDAAA,EAA2D,MAAM,CAAA,iEAAA,EAE7C,MAAA,CAAO,UAAU,CAAA,CAAA;AACvC,EAAA,MAAM,KAAA;AACR;AAEO,IAAM,eAAA,GAAkB;AACxB,IAAM,aAAA,GAAgB;AAMtB,SAAS,QAAWA,SAAAA,EAAyC;AAClE,EAAA,OAAO,IAAI,MAAMA,SAAAA,EAAU;AAAA,IACzB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAA,IAAQ,MAAA,IAAU,OAAO,IAAA,KAAS,QAAA,EAAU;AAC9C,QAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAC9C,QAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,OAAO,GAAA,CAAI,KAAK,MAAM,CAAA;AACrD,QAAA,OAAO,GAAA;AAAA,MACT;AACA,MAAA,IAAI,MAAA,CAAO,IAAG,EAAG;AACf,QAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,EAAM;AAC3B,QAAA,IACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA,KACT,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,UAAA,CAAA,EAC/C;AACA,UAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,KAAK,CAAA;AAC1C,UAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,OAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AACpD,UAAA,OAAO,GAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,IAAI,IAAA,IAAQ,QAAQ,OAAO,IAAA;AAC3B,MAAA,IAAI,MAAA,CAAO,IAAG,EAAG;AACf,QAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,EAAM;AAC3B,QAAA,IACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA,KACT,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,UAAA,CAAA;AAE/C,UAAA,OAAO,IAAA,IAAQ,KAAA;AAAA,MACnB;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;;;AC9JO,UAAU,SACf,MAAA,EACqC;AACrC,EAAA,IAAI,kBAAkB,QAAA,EAAU;AAC9B,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAG,EAAG,MAAM,OAAO,MAAA,EAAO;AACtC,IAAA,OAAO,OAAO,KAAA,EAAM;AAAA,EACtB;AACA,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAG,EAAG,MAAM,MAAA;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG;AAC7B,IAAA,MAAM,OAAO,cAAc,CAAA;AAC3B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,QAAA,GAAW;AACjB,IAAM,WAAA,GAAc;AACpB,IAAM,WAAA,GAAc;AAapB,SAAS,SACd,WAAA,EAC4B;AAC5B,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAO,SAAS,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,IAAA,IAAI;AACF,MAAA,IAAI,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAC9B,QAAA,OAAO,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,cAAc,CAAC,CAAA;AACvD,MAAA,OAAO,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAAA,IACvC,CAAA,SAAE;AACA,MAAA,QAAA,CAAS,SAAS,MAAkB,CAAA;AAAA,IACtC;AAAA,EACF;AACA,EAAA,OAAO,eAAA,CAAgB,KAAK,KAAK,CAAA;AACnC;AAaA,eAAsB,cACpB,WAAA,EACqC;AACrC,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,EAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,IAAA,IAAI;AACF,MAAA,IAAI,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAC9B,QAAA,OAAO,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,cAAc,CAAC,CAAA;AACvD,MAAA,OAAO,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAAA,IACvC,CAAA,SAAE;AACA,MAAA,MAAM,QAAA,CAAS,SAAS,MAAkB,CAAA;AAAA,IAC5C;AAAA,EACF;AACA,EAAA,OAAO,eAAA,CAAgB,KAAK,KAAK,CAAA;AACnC;AAEA,SAAS,gBACP,MAAA,EAC4B;AAC5B,EAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,QAAA,EAAS;AAC1C,EAAA,IAAI,MAAA,YAAkB,UAAU,OAAO,MAAA;AACvC,EAAA,IAAI,kBAAkB,MAAM,CAAA;AAC1B,IAAA,OAAO,QAAA,CAAS,UAAA,CAAW,MAAA,CAAO,cAAc,CAAC,CAAA;AACnD,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,IAAI,MAAA,CAAO,EAAA,EAAG,EAAG,OAAO,MAAA;AACxB,IAAA,OAAO,QAAA,CAAS,WAAW,MAAsB,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,QAAA,CAAS,GAAG,MAAM,CAAA;AAC3B;;;AC5GA,SAAS,kBAAkB,MAAA,EAAyC;AAClE,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW,OAAO,MAAA;AACpD,EAAA,IAAI,MAAA,YAAkB,UAAU,MAAA,YAAkB,QAAA;AAChD,IAAA,OAAO,OAAO,IAAA,EAAK;AACrB,EAAA,IAAI,OAAQ,MAAA,CAAe,IAAA,KAAS,UAAA,EAAY;AAC9C,IAAA,MAAM,GAAA,GAAO,OAAe,IAAA,EAAK;AACjC,IAAA,IAAI,YAAA,CAAa,GAAG,CAAA,EAAG,OAAO,GAAA;AAAA,EAChC;AACA,EAAA,IAAI,YAAA,CAAc,OAAe,IAAI,CAAA;AACnC,IAAA,OAAQ,MAAA,CAAe,IAAA;AACzB,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,cAAc,IAAI,GAAA,CAAY,MAAA,CAAO,MAAA,CAAO,UAAU,CAAC,CAAA;AAE7D,SAAS,aAAa,KAAA,EAAqC;AACzD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,WAAA,CAAY,IAAI,KAAK,CAAA;AAC3D;AAMO,SAAS,KAAK,MAAA,EAA0B;AAC7C,EAAA,MAAM,IAAA,GAAO,kBAAkB,MAAM,CAAA;AACrC,EAAA,IAAI,IAAA,KAAS,QAAW,OAAO,KAAA;AAC/B,EAAA,OAAO,SAAS,UAAA,CAAW,EAAA;AAC7B;AAGO,SAAS,SAAS,MAAA,EAAyC;AAChE,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW,OAAO,KAAA;AACpD,EAAA,IAAI,MAAA,YAAkB,MAAA,EAAQ,OAAO,CAAC,OAAO,EAAA,EAAG;AAChD,EAAA,IAAI,MAAA,YAAkB,QAAA,EAAU,OAAO,CAAC,OAAO,EAAA,EAAG;AAClD,EAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG,OAAO,IAAA;AACtC,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAgB,YAAA,EAA0B;AACjD,EAAA,OAAO,CAAC,MAAA,KAA6B;AACnC,IAAA,MAAM,IAAA,GAAO,kBAAkB,MAAM,CAAA;AACrC,IAAA,IAAI,IAAA,KAAS,QAAW,OAAO,KAAA;AAC/B,IAAA,OAAO,IAAA,KAAS,YAAA;AAAA,EAClB,CAAA;AACF;AAEO,IAAM,WAAA,GAAc,eAAA,CAAgB,UAAA,CAAW,SAAS;AACxD,IAAM,SAAA,GAAY,eAAA,CAAgB,UAAA,CAAW,OAAO;AACpD,IAAM,iBAAA,GAAoB,eAAA;AAAA,EAC/B,UAAA,CAAW;AACb;AACO,IAAM,kBAAA,GAAqB,eAAA;AAAA,EAChC,UAAA,CAAW;AACb;AACO,IAAM,UAAA,GAAa,eAAA,CAAgB,UAAA,CAAW,SAAS;AACvD,IAAM,eAAA,GAAkB,eAAA;AAAA,EAC7B,UAAA,CAAW;AACb;AACO,IAAM,kBAAA,GAAqB,eAAA;AAAA,EAChC,UAAA,CAAW;AACb;AACO,IAAM,mBAAA,GAAsB,eAAA;AAAA,EACjC,UAAA,CAAW;AACb;AACO,IAAM,oBAAA,GAAuB,eAAA;AAAA,EAClC,UAAA,CAAW;AACb;AACO,IAAM,SAAA,GAAY,eAAA,CAAgB,UAAA,CAAW,OAAO;AACpD,IAAM,YAAA,GAAe,eAAA,CAAgB,UAAA,CAAW,YAAY;AAC5D,IAAM,eAAA,GAAkB,eAAA;AAAA,EAC7B,UAAA,CAAW;AACb;AACO,IAAM,UAAA,GAAa,eAAA,CAAgB,UAAA,CAAW,QAAQ;AACtD,IAAM,aAAA,GAAgB,eAAA,CAAgB,UAAA,CAAW,WAAW;AAC5D,IAAM,UAAA,GAAa,eAAA,CAAgB,UAAA,CAAW,SAAS;AACvD,IAAM,iBAAA,GAAoB,eAAA;AAAA,EAC/B,UAAA,CAAW;AACb;;;ACjFO,SAAS,UAAU,KAAA,EAA8B;AACtD,EAAA,MAAM,aAAA,GAAgB,wBAAwB,KAAK,CAAA;AACnD,EAAA,IAAI,eAAe,OAAO,aAAA;AAC1B,EAAA,IAAI,KAAA,YAAiB,MAAA;AACnB,IAAA,OAAO,KAAA,CAAM,EAAA,EAAG,GACZ,aAAA,CAAc,iCAAiC,CAAA,GAC9C,KAAA;AACP,EAAA,IAAI,KAAA,YAAiB,WAAA;AACnB,IAAA,OAAO,MAAM,MAAA,CAAO,EAAA,KAChB,aAAA,CAAc,8CAA8C,IAC3D,KAAA,CAAM,MAAA;AACb,EAAA,IAAI,KAAA,YAAiB,UAAA;AACnB,IAAA,OAAO,eAAA,CAAgB,MAAM,OAAO,CAAA;AACtC,EAAA,IAAI,KAAA,YAAiB,SAAA;AACnB,IAAA,OAAO,oBAAA,CAAqB,MAAM,OAAO,CAAA;AAC3C,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,YAAA,CAAa,MAAM,OAAO,CAAA;AAC7D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,aAAa,KAAK,CAAA;AACxD,EAAA,OAAO,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA;AACnC;AAGO,SAAS,QAAA,CACd,IACA,MAAA,EACa;AACb,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,EAAA,CAAG,EAAA,EAAI,CAAA;AAAA,EACzB,SAAS,GAAA,EAAc;AACrB,IAAA,MAAM,SAAS,MAAA,GAAS,MAAA,CAAO,GAAG,CAAA,GAAI,UAAU,GAAG,CAAA;AACnD,IAAA,OAAO,QAAA,CAAS,UAAA;AAAA,MACd,MAAA,CAAO,EAAA,EAAG,GACN,aAAA,CAAc,uCAAuC,CAAA,GACrD;AAAA,KACN;AAAA,EACF;AACF;AAGA,eAAsB,aAAA,CACpB,IACA,MAAA,EACsB;AACtB,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,EAAA,CAAG,MAAM,EAAA,EAAI,CAAA;AAAA,EAC/B,SAAS,GAAA,EAAc;AACrB,IAAA,MAAM,SAAS,MAAA,GAAS,MAAA,CAAO,GAAG,CAAA,GAAI,UAAU,GAAG,CAAA;AACnD,IAAA,OAAO,QAAA,CAAS,UAAA;AAAA,MACd,MAAA,CAAO,EAAA,EAAG,GACN,aAAA,CAAc,4CAA4C,CAAA,GAC1D;AAAA,KACN;AAAA,EACF;AACF","file":"index.cjs","sourcesContent":["/**\n * Canonical status error codes matching Abseil / gRPC standard error codes.\n */\nexport const StatusCode = {\n OK: \"OK\",\n CANCELLED: \"CANCELLED\",\n UNKNOWN: \"UNKNOWN\",\n INVALID_ARGUMENT: \"INVALID_ARGUMENT\",\n DEADLINE_EXCEEDED: \"DEADLINE_EXCEEDED\",\n NOT_FOUND: \"NOT_FOUND\",\n ALREADY_EXISTS: \"ALREADY_EXISTS\",\n PERMISSION_DENIED: \"PERMISSION_DENIED\",\n RESOURCE_EXHAUSTED: \"RESOURCE_EXHAUSTED\",\n FAILED_PRECONDITION: \"FAILED_PRECONDITION\",\n ABORTED: \"ABORTED\",\n OUT_OF_RANGE: \"OUT_OF_RANGE\",\n UNIMPLEMENTED: \"UNIMPLEMENTED\",\n INTERNAL: \"INTERNAL\",\n UNAVAILABLE: \"UNAVAILABLE\",\n DATA_LOSS: \"DATA_LOSS\",\n UNAUTHENTICATED: \"UNAUTHENTICATED\",\n} as const;\n\nexport type StatusCode = (typeof StatusCode)[keyof typeof StatusCode];\n","import type { Status } from \"./status.js\";\nimport type { StatusCode } from \"./status-code.js\";\n\n/** A native Error carrying a Status. */\nexport class StatusError extends Error {\n public readonly status: Status;\n\n constructor(status: Status) {\n super(status.toString());\n this.name = \"StatusError\";\n this.status = status;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n public get code(): StatusCode {\n return this.status.code();\n }\n}\n","import { StatusCode } from \"./status-code.js\";\nimport { StatusError } from \"./errors.js\";\n\nexport type PayloadValue = Uint8Array | string;\nexport type PayloadMap =\n | Readonly<Record<string, PayloadValue>>\n | ReadonlyMap<string, PayloadValue>;\n\nexport interface StatusJSON {\n ok: boolean;\n code: StatusCode;\n message: string;\n payloads?: Record<string, string> | undefined;\n}\n\nexport type StatusOk = Status & { ok(): true };\nexport type StatusFailed = Status & { ok(): false };\n\nfunction copyPayload(value: PayloadValue): PayloadValue {\n return typeof value === \"string\" ? value : value.slice();\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n let result = \"\";\n for (let i = 0; i < bytes.length; i += 3) {\n const b0 = bytes[i]!;\n const b1 = i + 1 < bytes.length ? bytes[i + 1]! : 0;\n const b2 = i + 2 < bytes.length ? bytes[i + 2]! : 0;\n result += chars[(b0 >> 2) & 0x3f];\n result += chars[((b0 & 0x03) << 4) | ((b1 >> 4) & 0x0f)];\n result +=\n i + 1 < bytes.length\n ? chars[((b1 & 0x0f) << 2) | ((b2 >> 6) & 0x03)]\n : \"=\";\n result += i + 2 < bytes.length ? chars[b2 & 0x3f] : \"=\";\n }\n return result;\n}\n\n/**\n * Represents either success or a canonical error. It never carries a\n * business value.\n */\nexport class Status {\n private _code: StatusCode;\n private _message: string;\n private _payloads: Map<string, PayloadValue> | undefined;\n\n public constructor(\n code: StatusCode = StatusCode.OK,\n message: string = \"\",\n ) {\n this._code = code;\n this._message = code === StatusCode.OK ? \"\" : message;\n }\n\n public ok(): this is StatusOk {\n return this._code === StatusCode.OK;\n }\n\n public code(): StatusCode {\n return this._code;\n }\n\n public message(): string {\n return this._message;\n }\n\n public status(): Status {\n return this;\n }\n\n public setMessage(message: string): void {\n if (!this.ok()) this._message = message;\n }\n\n public toString(): string {\n if (this.ok()) return \"OK\";\n return this._message.length === 0\n ? this._code\n : `${this._code}: ${this._message}`;\n }\n\n /** Keeps the first non-OK status, matching absl::Status::Update. */\n public update(other: Status): this {\n if (!this.ok()) return this;\n this._code = other._code;\n this._message = other._message;\n this._payloads = other.copyPayloads();\n return this;\n }\n\n public setPayload(typeUrl: string, payload: PayloadValue): void {\n if (this.ok()) return;\n this._payloads ??= new Map();\n this._payloads.set(typeUrl, copyPayload(payload));\n }\n\n public getPayload(typeUrl: string): PayloadValue | undefined {\n const payload = this._payloads?.get(typeUrl);\n return payload === undefined ? undefined : copyPayload(payload);\n }\n\n public hasPayload(typeUrl: string): boolean {\n return this._payloads?.has(typeUrl) ?? false;\n }\n\n public erasePayload(typeUrl: string): boolean {\n if (!this._payloads) return false;\n const deleted = this._payloads.delete(typeUrl);\n if (this._payloads.size === 0) this._payloads = undefined;\n return deleted;\n }\n\n public clearPayloads(): void {\n this._payloads = undefined;\n }\n\n public payloadCount(): number {\n return this._payloads?.size ?? 0;\n }\n\n public forEachPayload(\n callback: (typeUrl: string, payload: PayloadValue) => void,\n ): void {\n if (!this._payloads) return;\n for (const [key, value] of this._payloads)\n callback(key, copyPayload(value));\n }\n\n public clone(): Status {\n const cloned = new Status(this._code, this._message);\n cloned._payloads = this.copyPayloads();\n return cloned;\n }\n\n public equals(other: unknown): boolean {\n if (\n !(other instanceof Status) ||\n this._code !== other._code ||\n this._message !== other._message\n )\n return false;\n if (this.payloadCount() !== other.payloadCount()) return false;\n if (!this._payloads) return true;\n for (const [key, value] of this._payloads) {\n const otherValue = other._payloads?.get(key);\n if (\n otherValue === undefined ||\n !payloadEquals(value, otherValue)\n )\n return false;\n }\n return true;\n }\n\n public toJSON(): StatusJSON {\n const json: StatusJSON = {\n ok: this.ok(),\n code: this._code,\n message: this._message,\n };\n if (this._payloads?.size) {\n const payloads: Record<string, string> = {};\n for (const [key, value] of this._payloads)\n payloads[key] =\n typeof value === \"string\" ? value : bytesToBase64(value);\n json.payloads = payloads;\n }\n return json;\n }\n\n public toError(): StatusError {\n return new StatusError(this.clone());\n }\n\n /** Supports `yield* status` in statusDo pipelines. */\n public *[Symbol.iterator](): Generator<\n StatusFailed,\n void,\n unknown\n > {\n if (this.ok()) return;\n yield this as StatusFailed;\n }\n\n public static ok(): StatusOk {\n return new Status() as StatusOk;\n }\n\n public static fromCode(\n code: StatusCode,\n message: string = \"\",\n payloads?: PayloadMap,\n ): Status {\n const status = new Status(code, message);\n if (payloads) applyPayloads(status, payloads);\n return status;\n }\n\n private copyPayloads(): Map<string, PayloadValue> | undefined {\n if (!this._payloads?.size) return undefined;\n return new Map(\n Array.from(this._payloads, ([key, value]) => [\n key,\n copyPayload(value),\n ]),\n );\n }\n}\n\nfunction payloadEquals(\n left: PayloadValue,\n right: PayloadValue,\n): boolean {\n if (typeof left === \"string\" || typeof right === \"string\")\n return (\n typeof left === \"string\" &&\n typeof right === \"string\" &&\n left === right\n );\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nfunction applyPayloads(status: Status, payloads: PayloadMap): void {\n if (isReadonlyMap(payloads)) {\n for (const [key, value] of payloads)\n status.setPayload(key, value);\n return;\n }\n for (const [key, value] of Object.entries(payloads))\n status.setPayload(key, value);\n}\n\nfunction isReadonlyMap(\n value: PayloadMap,\n): value is ReadonlyMap<string, PayloadValue> {\n const candidate = value as ReadonlyMap<string, PayloadValue>;\n return (\n typeof candidate.entries === \"function\" &&\n typeof candidate[Symbol.iterator] === \"function\"\n );\n}\n\nexport function OkStatus(): StatusOk {\n return Status.ok();\n}\n\nfunction createErrorHelper(code: Exclude<StatusCode, \"OK\">) {\n return (\n message: string = \"\",\n payloads?: PayloadMap,\n ): StatusFailed => {\n const status = new Status(code, message);\n if (payloads) applyPayloads(status, payloads);\n return status as StatusFailed;\n };\n}\n\nexport const CancelledError = createErrorHelper(StatusCode.CANCELLED);\nexport const UnknownError = createErrorHelper(StatusCode.UNKNOWN);\nexport const InvalidArgumentError = createErrorHelper(\n StatusCode.INVALID_ARGUMENT,\n);\nexport const DeadlineExceededError = createErrorHelper(\n StatusCode.DEADLINE_EXCEEDED,\n);\nexport const NotFoundError = createErrorHelper(StatusCode.NOT_FOUND);\nexport const AlreadyExistsError = createErrorHelper(\n StatusCode.ALREADY_EXISTS,\n);\nexport const PermissionDeniedError = createErrorHelper(\n StatusCode.PERMISSION_DENIED,\n);\nexport const ResourceExhaustedError = createErrorHelper(\n StatusCode.RESOURCE_EXHAUSTED,\n);\nexport const FailedPreconditionError = createErrorHelper(\n StatusCode.FAILED_PRECONDITION,\n);\nexport const AbortedError = createErrorHelper(StatusCode.ABORTED);\nexport const OutOfRangeError = createErrorHelper(\n StatusCode.OUT_OF_RANGE,\n);\nexport const UnimplementedError = createErrorHelper(\n StatusCode.UNIMPLEMENTED,\n);\nexport const InternalError = createErrorHelper(StatusCode.INTERNAL);\nexport const UnavailableError = createErrorHelper(\n StatusCode.UNAVAILABLE,\n);\nexport const DataLossError = createErrorHelper(StatusCode.DATA_LOSS);\nexport const UnauthenticatedError = createErrorHelper(\n StatusCode.UNAUTHENTICATED,\n);\n","import { Status, type StatusFailed } from \"./status.js\";\n\n/** Shared brand for failure sentinels. */\nexport const FAILURE_SYMBOL = Symbol.for(\"absl.status.failure\");\n\nexport interface FailureBrand {\n readonly [FAILURE_SYMBOL]: StatusFailed;\n}\n\n/** Returns the failure status carried by a branded value. */\nexport function getBrandedFailureStatus(\n value: unknown,\n): StatusFailed | undefined {\n if (\n (typeof value !== \"object\" && typeof value !== \"function\") ||\n value === null\n )\n return undefined;\n try {\n if (!(FAILURE_SYMBOL in value)) return undefined;\n const status = (value as FailureBrand)[FAILURE_SYMBOL];\n return status instanceof Status && !status.ok()\n ? (status as StatusFailed)\n : undefined;\n } catch {\n return undefined;\n }\n}\n","import {\n Status,\n type StatusFailed,\n type StatusJSON,\n} from \"./status.js\";\nimport { getBrandedFailureStatus } from \"./failure-brand.js\";\n\nexport interface StatusOrJSON<T> extends StatusJSON {\n value?: T | undefined;\n}\n\nexport type StatusOrOk<T> = StatusOr<T> & { ok(): true; value(): T };\n\n/** A tagged union containing exactly one value T or one non-OK Status. */\nexport class StatusOr<T> {\n private readonly _status: Status;\n private readonly _value: T | undefined;\n\n private constructor(status: Status, value?: T) {\n this._status = status;\n this._value = value;\n }\n\n public static ok<T>(value: T): StatusOr<T> {\n const failureStatus = getBrandedFailureStatus(value);\n if (failureStatus) return StatusOr.fromStatus<T>(failureStatus);\n return new StatusOr<T>(Status.ok(), value);\n }\n\n public static fromStatus<T = never>(status: Status): StatusOr<T> {\n if (status.ok())\n throw new RangeError(\n \"StatusOr cannot be constructed from an OK Status without a value\",\n );\n return new StatusOr<T>(status.clone());\n }\n\n public static all<T extends readonly unknown[] | []>(\n values: T,\n ): StatusOr<{\n [K in keyof T]: T[K] extends StatusOr<infer V> ? V : T[K];\n }> {\n const results: unknown[] = [];\n for (const item of values) {\n const failureStatus = getBrandedFailureStatus(item);\n if (failureStatus) return StatusOr.fromStatus(failureStatus);\n if (item instanceof StatusOr) {\n if (!item.ok()) return StatusOr.fromStatus(item.status());\n results.push(item._value);\n continue;\n }\n results.push(item);\n }\n return StatusOr.ok(\n results as {\n [K in keyof T]: T[K] extends StatusOr<infer V> ? V : T[K];\n },\n );\n }\n\n public ok(): this is StatusOrOk<T> {\n return this._status.ok();\n }\n\n public code(): ReturnType<Status[\"code\"]> {\n return this._status.code();\n }\n\n public message(): string {\n return this._status.message();\n }\n\n public status(): Status {\n return this._status.clone();\n }\n\n public value(): T {\n if (!this.ok()) throw this._status.toError();\n return this._value as T;\n }\n\n public valueOr(defaultValue: T): T {\n if (this.ok()) return this._value as T;\n return defaultValue;\n }\n\n public valueOrCompute(\n computeFallback: (status: StatusFailed) => T,\n ): T {\n if (this.ok()) return this._value as T;\n return computeFallback(this._status.clone() as StatusFailed);\n }\n\n public transform<U>(fn: (value: T) => U): StatusOr<U> {\n if (this.ok()) return StatusOr.ok(fn(this._value as T));\n return StatusOr.fromStatus(this._status);\n }\n\n public andThen<U>(fn: (value: T) => StatusOr<U>): StatusOr<U> {\n if (this.ok()) return fn(this._value as T);\n return StatusOr.fromStatus(this._status);\n }\n\n public match<R>(handlers: {\n ok: (value: T) => R;\n err: (status: StatusFailed) => R;\n }): R {\n if (this.ok()) return handlers.ok(this._value as T);\n return handlers.err(this._status.clone() as StatusFailed);\n }\n\n public *[Symbol.iterator](): Generator<StatusFailed, T, unknown> {\n if (this.ok()) return this._value as T;\n yield this._status.clone() as StatusFailed;\n return undefined as never;\n }\n\n public toString(): string {\n if (!this.ok()) return this._status.toString();\n if (this._value === undefined) return \"OK\";\n try {\n return `OK: ${JSON.stringify(this._value)}`;\n } catch {\n return \"OK: [unserializable value]\";\n }\n }\n\n public toJSON(): StatusOrJSON<T> {\n if (!this.ok()) return this._status.toJSON();\n return {\n ok: true,\n code: this._status.code(),\n message: \"\",\n value: this._value,\n };\n }\n\n public clone(): StatusOr<T> {\n if (this.ok()) return StatusOr.ok(this._value as T);\n return StatusOr.fromStatus(this._status);\n }\n\n public equals(other: unknown): boolean {\n if (!(other instanceof StatusOr) || this.ok() !== other.ok())\n return false;\n if (!this.ok()) return this._status.equals(other._status);\n return Object.is(this._value, other._value);\n }\n}\n\nexport function statusOr<T>(value: T): StatusOr<T> {\n return StatusOr.ok(value);\n}\n\nexport function statusOrError<T = never>(\n status: StatusFailed,\n): StatusOr<T> {\n return StatusOr.fromStatus<T>(status);\n}\n","import { Status, type StatusFailed } from \"./status.js\";\nimport { StatusCode } from \"./status-code.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { StatusError } from \"./errors.js\";\nimport {\n FAILURE_SYMBOL,\n getBrandedFailureStatus,\n} from \"./failure-brand.js\";\n\nexport { FAILURE_SYMBOL } from \"./failure-brand.js\";\n\nexport interface FailureSentinel {\n readonly [FAILURE_SYMBOL]: StatusFailed;\n ok(): false;\n status(): StatusFailed;\n code(): StatusCode;\n message(): string;\n toString(): string;\n [Symbol.iterator](): Generator<StatusFailed, never, unknown>;\n}\n\n/** Returns whether a value is a valid failure sentinel. */\nexport function isFailureSentinel(\n value: unknown,\n): value is FailureSentinel {\n if (!getBrandedFailureStatus(value)) return false;\n try {\n const candidate = value as FailureSentinel;\n return (\n typeof candidate.ok === \"function\" &&\n typeof candidate.status === \"function\" &&\n typeof candidate.code === \"function\" &&\n typeof candidate.message === \"function\" &&\n typeof candidate.toString === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/** Returns the failure status carried by a supported result object. */\nexport function getFailureStatus(\n value: unknown,\n): StatusFailed | undefined {\n const brandedStatus = getBrandedFailureStatus(value);\n if (brandedStatus) return brandedStatus;\n if (value instanceof Status) {\n if (!value.ok()) return value as StatusFailed;\n return undefined;\n }\n if (value instanceof StatusOr) {\n if (!value.ok()) return value.status() as StatusFailed;\n return undefined;\n }\n return undefined;\n}\n\n/** Creates a failure sentinel carrying a non-OK status. */\nexport function failure<T = never>(status: Status): T {\n if (status.ok())\n throw new RangeError(\n \"Failure sentinel cannot be created from an OK Status\",\n );\n\n const base: FailureSentinel = {\n [FAILURE_SYMBOL]: status as StatusFailed,\n ok() {\n return false;\n },\n status() {\n return status as StatusFailed;\n },\n code() {\n return status.code();\n },\n message() {\n return status.message();\n },\n toString() {\n return status.toString();\n },\n *[Symbol.iterator](): Generator<StatusFailed, never, unknown> {\n return throwFailureMisuse(\n status,\n \"iterate the failed result without ensureOk()\",\n );\n },\n };\n\n return new Proxy(base, {\n get(target, prop, receiver) {\n if (prop in target || prop === FAILURE_SYMBOL)\n return Reflect.get(target, prop, receiver);\n if (prop === \"then\") return undefined;\n if (prop === Symbol.toPrimitive)\n return () =>\n throwFailureMisuse(\n status,\n \"coerce the failed result to a primitive\",\n );\n if (typeof prop === \"symbol\") return undefined;\n return throwFailureMisuse(\n status,\n `read business property ${JSON.stringify(prop)}`,\n );\n },\n set(_target, prop) {\n return throwFailureMisuse(\n status,\n `write business property ${JSON.stringify(String(prop))}`,\n );\n },\n deleteProperty(_target, prop) {\n return throwFailureMisuse(\n status,\n `delete business property ${JSON.stringify(String(prop))}`,\n );\n },\n defineProperty(_target, prop) {\n return throwFailureMisuse(\n status,\n `define business property ${JSON.stringify(String(prop))}`,\n );\n },\n has(target, prop) {\n if (prop in target) return true;\n if (prop === \"then\" || typeof prop === \"symbol\") return false;\n return throwFailureMisuse(\n status,\n `check business property ${JSON.stringify(prop)}`,\n );\n },\n ownKeys() {\n return throwFailureMisuse(\n status,\n \"enumerate or spread the failed result\",\n );\n },\n }) as unknown as T;\n}\n\nfunction throwFailureMisuse(status: Status, action: string): never {\n const error = new StatusError(status.clone());\n error.message =\n `Failure result used as a successful value: attempted to ${action}. ` +\n \"Check it with hasError() or ensureOk() first. \" +\n `Original status: ${status.toString()}`;\n throw error;\n}\n\nexport const failureSentinel = failure;\nexport const createFailure = failure;\n\n/** Proxies non-conflicting properties from a successful StatusOr value. */\nexport type StatusOrProxy<T> = StatusOr<T> &\n (T extends object ? Omit<T, keyof StatusOr<T>> : unknown);\n\nexport function asProxy<T>(statusOr: StatusOr<T>): StatusOrProxy<T> {\n return new Proxy(statusOr, {\n get(target, prop, receiver) {\n if (prop in target || typeof prop === \"symbol\") {\n const val = Reflect.get(target, prop, receiver);\n if (typeof val === \"function\") return val.bind(target);\n return val;\n }\n if (target.ok()) {\n const inner = target.value() as any;\n if (\n inner !== null &&\n inner !== undefined &&\n (typeof inner === \"object\" || typeof inner === \"function\")\n ) {\n const val = Reflect.get(inner, prop, inner);\n if (typeof val === \"function\") return val.bind(inner);\n return val;\n }\n }\n return undefined;\n },\n has(target, prop) {\n if (prop in target) return true;\n if (target.ok()) {\n const inner = target.value() as any;\n if (\n inner !== null &&\n inner !== undefined &&\n (typeof inner === \"object\" || typeof inner === \"function\")\n )\n return prop in inner;\n }\n return false;\n },\n }) as StatusOrProxy<T>;\n}\n","import { OkStatus, Status, type StatusFailed } from \"./status.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport {\n FAILURE_SYMBOL,\n type FailureSentinel,\n isFailureSentinel,\n} from \"./sentinel.js\";\n\nexport type StatusDoValue<T> =\n T extends StatusOr<infer U>\n ? U\n : T extends Status\n ? never\n : T extends FailureSentinel\n ? never\n : T;\n\nexport type StatusDoReturnType<R> = [StatusDoValue<R>] extends [never]\n ? Status\n : [StatusDoValue<R>] extends [void]\n ? Status\n : [StatusDoValue<R>] extends [undefined]\n ? Status\n : StatusOr<StatusDoValue<R>>;\n\n/** Unwraps a successful result or yields its failure to the pipeline. */\nexport function ensureOk(\n status: Status,\n): Generator<StatusFailed, void, unknown>;\nexport function ensureOk<T>(\n statusOr: StatusOr<T>,\n): Generator<StatusFailed, T, unknown>;\nexport function ensureOk<T>(\n target: T,\n): Generator<StatusFailed, T, unknown>;\nexport function* ensureOk<T = void>(\n target: unknown,\n): Generator<StatusFailed, T, unknown> {\n if (target instanceof StatusOr) {\n if (!target.ok()) yield target.status() as StatusFailed;\n return target.value() as T;\n }\n if (target instanceof Status) {\n if (!target.ok()) yield target as StatusFailed;\n return undefined as T;\n }\n if (isFailureSentinel(target)) {\n yield target[FAILURE_SYMBOL];\n return undefined as never;\n }\n return target as T;\n}\n\nexport const EnsureOk = ensureOk;\nexport const checkStatus = ensureOk;\nexport const CheckStatus = ensureOk;\n\n/** Runs a synchronous generator pipeline and stops at the first failure. */\nexport function statusDo(\n generatorFn: () => Generator<\n StatusFailed,\n void | Status | StatusFailed,\n unknown\n >,\n): Status;\nexport function statusDo<T>(\n generatorFn: () => Generator<StatusFailed, T, unknown>,\n): StatusDoReturnType<T>;\nexport function statusDo(\n generatorFn: () => Generator<StatusFailed, unknown, unknown>,\n): Status | StatusOr<unknown> {\n const iterator = generatorFn();\n const step = iterator.next();\n if (!step.done) {\n try {\n if (isFailureSentinel(step.value))\n return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);\n return StatusOr.fromStatus(step.value);\n } finally {\n iterator.return?.(undefined as never);\n }\n }\n return normalizeResult(step.value);\n}\n\n/** Runs an asynchronous generator pipeline and stops at the first failure. */\nexport function statusDoAsync(\n generatorFn: () => AsyncGenerator<\n StatusFailed,\n void | Status | StatusFailed,\n unknown\n >,\n): Promise<Status>;\nexport function statusDoAsync<T>(\n generatorFn: () => AsyncGenerator<StatusFailed, T, unknown>,\n): Promise<StatusDoReturnType<T>>;\nexport async function statusDoAsync(\n generatorFn: () => AsyncGenerator<StatusFailed, unknown, unknown>,\n): Promise<Status | StatusOr<unknown>> {\n const iterator = generatorFn();\n const step = await iterator.next();\n if (!step.done) {\n try {\n if (isFailureSentinel(step.value))\n return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);\n return StatusOr.fromStatus(step.value);\n } finally {\n await iterator.return?.(undefined as never);\n }\n }\n return normalizeResult(step.value);\n}\n\nfunction normalizeResult(\n result: unknown,\n): Status | StatusOr<unknown> {\n if (result === undefined) return OkStatus();\n if (result instanceof StatusOr) return result;\n if (isFailureSentinel(result))\n return StatusOr.fromStatus(result[FAILURE_SYMBOL]);\n if (result instanceof Status) {\n if (result.ok()) return result;\n return StatusOr.fromStatus(result as StatusFailed);\n }\n return StatusOr.ok(result);\n}\n","import { StatusCode } from \"./status-code.js\";\nimport {\n Status,\n type StatusOk,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr, type StatusOrOk } from \"./status-or.js\";\nimport { isFailureSentinel } from \"./sentinel.js\";\n\nexport interface ErrorCarrier {\n status(): StatusFailed;\n ok(): false;\n code(): StatusCode;\n message(): string;\n toString(): string;\n}\n\nfunction extractStatusCode(target: unknown): StatusCode | undefined {\n if (target === null || target === undefined) return undefined;\n if (target instanceof Status || target instanceof StatusOr)\n return target.code();\n if (typeof (target as any).code === \"function\") {\n const res = (target as any).code();\n if (isStatusCode(res)) return res as StatusCode;\n }\n if (isStatusCode((target as any).code))\n return (target as any).code as StatusCode;\n return undefined;\n}\n\nconst statusCodes = new Set<string>(Object.values(StatusCode));\n\nfunction isStatusCode(value: unknown): value is StatusCode {\n return typeof value === \"string\" && statusCodes.has(value);\n}\n\n/** Returns whether a Status or StatusOr is OK. */\nexport function isOk(target: Status): target is StatusOk;\nexport function isOk<T>(target: StatusOr<T>): target is StatusOrOk<T>;\nexport function isOk(target: unknown): boolean;\nexport function isOk(target: unknown): boolean {\n const code = extractStatusCode(target);\n if (code === undefined) return false;\n return code === StatusCode.OK;\n}\n\n/** Returns whether a supported result object carries a failure. */\nexport function hasError(target: unknown): target is ErrorCarrier {\n if (target === null || target === undefined) return false;\n if (target instanceof Status) return !target.ok();\n if (target instanceof StatusOr) return !target.ok();\n if (isFailureSentinel(target)) return true;\n return false;\n}\n\nfunction createPredicate(expectedCode: StatusCode) {\n return (target: unknown): boolean => {\n const code = extractStatusCode(target);\n if (code === undefined) return false;\n return code === expectedCode;\n };\n}\n\nexport const isCancelled = createPredicate(StatusCode.CANCELLED);\nexport const isUnknown = createPredicate(StatusCode.UNKNOWN);\nexport const isInvalidArgument = createPredicate(\n StatusCode.INVALID_ARGUMENT,\n);\nexport const isDeadlineExceeded = createPredicate(\n StatusCode.DEADLINE_EXCEEDED,\n);\nexport const isNotFound = createPredicate(StatusCode.NOT_FOUND);\nexport const isAlreadyExists = createPredicate(\n StatusCode.ALREADY_EXISTS,\n);\nexport const isPermissionDenied = createPredicate(\n StatusCode.PERMISSION_DENIED,\n);\nexport const isResourceExhausted = createPredicate(\n StatusCode.RESOURCE_EXHAUSTED,\n);\nexport const isFailedPrecondition = createPredicate(\n StatusCode.FAILED_PRECONDITION,\n);\nexport const isAborted = createPredicate(StatusCode.ABORTED);\nexport const isOutOfRange = createPredicate(StatusCode.OUT_OF_RANGE);\nexport const isUnimplemented = createPredicate(\n StatusCode.UNIMPLEMENTED,\n);\nexport const isInternal = createPredicate(StatusCode.INTERNAL);\nexport const isUnavailable = createPredicate(StatusCode.UNAVAILABLE);\nexport const isDataLoss = createPredicate(StatusCode.DATA_LOSS);\nexport const isUnauthenticated = createPredicate(\n StatusCode.UNAUTHENTICATED,\n);\n","import {\n Status,\n InternalError,\n UnknownError,\n InvalidArgumentError,\n OutOfRangeError,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { StatusError } from \"./errors.js\";\nimport { getBrandedFailureStatus } from \"./failure-brand.js\";\n\n/** Converts a thrown JavaScript value into a non-OK Status. */\nexport function fromError(error: unknown): StatusFailed {\n const failureStatus = getBrandedFailureStatus(error);\n if (failureStatus) return failureStatus;\n if (error instanceof Status)\n return error.ok()\n ? InternalError(\"Caught an OK Status as an error\")\n : (error as StatusFailed);\n if (error instanceof StatusError)\n return error.status.ok()\n ? InternalError(\"Caught a StatusError containing an OK Status\")\n : (error.status as StatusFailed);\n if (error instanceof RangeError)\n return OutOfRangeError(error.message);\n if (error instanceof TypeError)\n return InvalidArgumentError(error.message);\n if (error instanceof Error) return UnknownError(error.message);\n if (typeof error === \"string\") return UnknownError(error);\n return UnknownError(String(error));\n}\n\n/** Runs a function and converts thrown values into a StatusOr failure. */\nexport function tryCatch<T>(\n fn: () => T,\n mapper?: (error: unknown) => Status,\n): StatusOr<T> {\n try {\n return StatusOr.ok(fn());\n } catch (err: unknown) {\n const status = mapper ? mapper(err) : fromError(err);\n return StatusOr.fromStatus(\n status.ok()\n ? InternalError(\"tryCatch mapper returned an OK Status\")\n : status,\n );\n }\n}\n\n/** Runs an async function and converts rejections into a StatusOr failure. */\nexport async function tryCatchAsync<T>(\n fn: () => Promise<T>,\n mapper?: (error: unknown) => Status,\n): Promise<StatusOr<T>> {\n try {\n return StatusOr.ok(await fn());\n } catch (err: unknown) {\n const status = mapper ? mapper(err) : fromError(err);\n return StatusOr.fromStatus(\n status.ok()\n ? InternalError(\"tryCatchAsync mapper returned an OK Status\")\n : status,\n );\n }\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -134,19 +134,6 @@ declare class StatusOr<T> {
|
|
|
134
134
|
declare function statusOr<T>(value: T): StatusOr<T>;
|
|
135
135
|
declare function statusOrError<T = never>(status: StatusFailed): StatusOr<T>;
|
|
136
136
|
|
|
137
|
-
type StatusDoResult<T> = T | StatusOr<T> | StatusFailed;
|
|
138
|
-
/** Unwraps a successful result or yields its failure to the pipeline. */
|
|
139
|
-
declare function ensureOk(status: Status): Generator<StatusFailed, void, unknown>;
|
|
140
|
-
declare function ensureOk<T>(statusOr: StatusOr<T>): Generator<StatusFailed, T, unknown>;
|
|
141
|
-
declare function ensureOk<T>(target: T): Generator<StatusFailed, T, unknown>;
|
|
142
|
-
declare const EnsureOk: typeof ensureOk;
|
|
143
|
-
declare const checkStatus: typeof ensureOk;
|
|
144
|
-
declare const CheckStatus: typeof ensureOk;
|
|
145
|
-
/** Runs a synchronous generator pipeline and stops at the first failure. */
|
|
146
|
-
declare function statusDo<T>(generatorFn: () => Generator<StatusFailed, StatusDoResult<T>, unknown>): StatusOr<T>;
|
|
147
|
-
/** Runs an asynchronous generator pipeline and stops at the first failure. */
|
|
148
|
-
declare function statusDoAsync<T>(generatorFn: () => AsyncGenerator<StatusFailed, StatusDoResult<T>, unknown>): Promise<StatusOr<T>>;
|
|
149
|
-
|
|
150
137
|
/** Shared brand for failure sentinels. */
|
|
151
138
|
declare const FAILURE_SYMBOL: unique symbol;
|
|
152
139
|
|
|
@@ -171,6 +158,22 @@ declare const createFailure: typeof failure;
|
|
|
171
158
|
type StatusOrProxy<T> = StatusOr<T> & (T extends object ? Omit<T, keyof StatusOr<T>> : unknown);
|
|
172
159
|
declare function asProxy<T>(statusOr: StatusOr<T>): StatusOrProxy<T>;
|
|
173
160
|
|
|
161
|
+
type StatusDoValue<T> = T extends StatusOr<infer U> ? U : T extends Status ? never : T extends FailureSentinel ? never : T;
|
|
162
|
+
type StatusDoReturnType<R> = [StatusDoValue<R>] extends [never] ? Status : [StatusDoValue<R>] extends [void] ? Status : [StatusDoValue<R>] extends [undefined] ? Status : StatusOr<StatusDoValue<R>>;
|
|
163
|
+
/** Unwraps a successful result or yields its failure to the pipeline. */
|
|
164
|
+
declare function ensureOk(status: Status): Generator<StatusFailed, void, unknown>;
|
|
165
|
+
declare function ensureOk<T>(statusOr: StatusOr<T>): Generator<StatusFailed, T, unknown>;
|
|
166
|
+
declare function ensureOk<T>(target: T): Generator<StatusFailed, T, unknown>;
|
|
167
|
+
declare const EnsureOk: typeof ensureOk;
|
|
168
|
+
declare const checkStatus: typeof ensureOk;
|
|
169
|
+
declare const CheckStatus: typeof ensureOk;
|
|
170
|
+
/** Runs a synchronous generator pipeline and stops at the first failure. */
|
|
171
|
+
declare function statusDo(generatorFn: () => Generator<StatusFailed, void | Status | StatusFailed, unknown>): Status;
|
|
172
|
+
declare function statusDo<T>(generatorFn: () => Generator<StatusFailed, T, unknown>): StatusDoReturnType<T>;
|
|
173
|
+
/** Runs an asynchronous generator pipeline and stops at the first failure. */
|
|
174
|
+
declare function statusDoAsync(generatorFn: () => AsyncGenerator<StatusFailed, void | Status | StatusFailed, unknown>): Promise<Status>;
|
|
175
|
+
declare function statusDoAsync<T>(generatorFn: () => AsyncGenerator<StatusFailed, T, unknown>): Promise<StatusDoReturnType<T>>;
|
|
176
|
+
|
|
174
177
|
interface ErrorCarrier {
|
|
175
178
|
status(): StatusFailed;
|
|
176
179
|
ok(): false;
|
|
@@ -208,4 +211,4 @@ declare function tryCatch<T>(fn: () => T, mapper?: (error: unknown) => Status):
|
|
|
208
211
|
/** Runs an async function and converts rejections into a StatusOr failure. */
|
|
209
212
|
declare function tryCatchAsync<T>(fn: () => Promise<T>, mapper?: (error: unknown) => Status): Promise<StatusOr<T>>;
|
|
210
213
|
|
|
211
|
-
export { AbortedError, AlreadyExistsError, CancelledError, CheckStatus, DataLossError, DeadlineExceededError, EnsureOk, type ErrorCarrier, FAILURE_SYMBOL, FailedPreconditionError, type FailureSentinel, InternalError, InvalidArgumentError, NotFoundError, OkStatus, OutOfRangeError, type PayloadMap, type PayloadValue, PermissionDeniedError, ResourceExhaustedError, Status, StatusCode, StatusCode as StatusCodeType, StatusError, type StatusFailed, type StatusJSON, type StatusOk, StatusOr, type StatusOrJSON, type StatusOrOk, type StatusOrProxy, UnauthenticatedError, UnavailableError, UnimplementedError, UnknownError, asProxy, checkStatus, createFailure, ensureOk, failure, failureSentinel, fromError, getFailureStatus, hasError, isAborted, isAlreadyExists, isCancelled, isDataLoss, isDeadlineExceeded, isFailedPrecondition, isFailureSentinel, isInternal, isInvalidArgument, isNotFound, isOk, isOutOfRange, isPermissionDenied, isResourceExhausted, isUnauthenticated, isUnavailable, isUnimplemented, isUnknown, statusDo, statusDoAsync, statusOr, statusOrError, tryCatch, tryCatchAsync };
|
|
214
|
+
export { AbortedError, AlreadyExistsError, CancelledError, CheckStatus, DataLossError, DeadlineExceededError, EnsureOk, type ErrorCarrier, FAILURE_SYMBOL, FailedPreconditionError, type FailureSentinel, InternalError, InvalidArgumentError, NotFoundError, OkStatus, OutOfRangeError, type PayloadMap, type PayloadValue, PermissionDeniedError, ResourceExhaustedError, Status, StatusCode, StatusCode as StatusCodeType, type StatusDoReturnType, type StatusDoValue, StatusError, type StatusFailed, type StatusJSON, type StatusOk, StatusOr, type StatusOrJSON, type StatusOrOk, type StatusOrProxy, UnauthenticatedError, UnavailableError, UnimplementedError, UnknownError, asProxy, checkStatus, createFailure, ensureOk, failure, failureSentinel, fromError, getFailureStatus, hasError, isAborted, isAlreadyExists, isCancelled, isDataLoss, isDeadlineExceeded, isFailedPrecondition, isFailureSentinel, isInternal, isInvalidArgument, isNotFound, isOk, isOutOfRange, isPermissionDenied, isResourceExhausted, isUnauthenticated, isUnavailable, isUnimplemented, isUnknown, statusDo, statusDoAsync, statusOr, statusOrError, tryCatch, tryCatchAsync };
|
package/dist/index.d.ts
CHANGED
|
@@ -134,19 +134,6 @@ declare class StatusOr<T> {
|
|
|
134
134
|
declare function statusOr<T>(value: T): StatusOr<T>;
|
|
135
135
|
declare function statusOrError<T = never>(status: StatusFailed): StatusOr<T>;
|
|
136
136
|
|
|
137
|
-
type StatusDoResult<T> = T | StatusOr<T> | StatusFailed;
|
|
138
|
-
/** Unwraps a successful result or yields its failure to the pipeline. */
|
|
139
|
-
declare function ensureOk(status: Status): Generator<StatusFailed, void, unknown>;
|
|
140
|
-
declare function ensureOk<T>(statusOr: StatusOr<T>): Generator<StatusFailed, T, unknown>;
|
|
141
|
-
declare function ensureOk<T>(target: T): Generator<StatusFailed, T, unknown>;
|
|
142
|
-
declare const EnsureOk: typeof ensureOk;
|
|
143
|
-
declare const checkStatus: typeof ensureOk;
|
|
144
|
-
declare const CheckStatus: typeof ensureOk;
|
|
145
|
-
/** Runs a synchronous generator pipeline and stops at the first failure. */
|
|
146
|
-
declare function statusDo<T>(generatorFn: () => Generator<StatusFailed, StatusDoResult<T>, unknown>): StatusOr<T>;
|
|
147
|
-
/** Runs an asynchronous generator pipeline and stops at the first failure. */
|
|
148
|
-
declare function statusDoAsync<T>(generatorFn: () => AsyncGenerator<StatusFailed, StatusDoResult<T>, unknown>): Promise<StatusOr<T>>;
|
|
149
|
-
|
|
150
137
|
/** Shared brand for failure sentinels. */
|
|
151
138
|
declare const FAILURE_SYMBOL: unique symbol;
|
|
152
139
|
|
|
@@ -171,6 +158,22 @@ declare const createFailure: typeof failure;
|
|
|
171
158
|
type StatusOrProxy<T> = StatusOr<T> & (T extends object ? Omit<T, keyof StatusOr<T>> : unknown);
|
|
172
159
|
declare function asProxy<T>(statusOr: StatusOr<T>): StatusOrProxy<T>;
|
|
173
160
|
|
|
161
|
+
type StatusDoValue<T> = T extends StatusOr<infer U> ? U : T extends Status ? never : T extends FailureSentinel ? never : T;
|
|
162
|
+
type StatusDoReturnType<R> = [StatusDoValue<R>] extends [never] ? Status : [StatusDoValue<R>] extends [void] ? Status : [StatusDoValue<R>] extends [undefined] ? Status : StatusOr<StatusDoValue<R>>;
|
|
163
|
+
/** Unwraps a successful result or yields its failure to the pipeline. */
|
|
164
|
+
declare function ensureOk(status: Status): Generator<StatusFailed, void, unknown>;
|
|
165
|
+
declare function ensureOk<T>(statusOr: StatusOr<T>): Generator<StatusFailed, T, unknown>;
|
|
166
|
+
declare function ensureOk<T>(target: T): Generator<StatusFailed, T, unknown>;
|
|
167
|
+
declare const EnsureOk: typeof ensureOk;
|
|
168
|
+
declare const checkStatus: typeof ensureOk;
|
|
169
|
+
declare const CheckStatus: typeof ensureOk;
|
|
170
|
+
/** Runs a synchronous generator pipeline and stops at the first failure. */
|
|
171
|
+
declare function statusDo(generatorFn: () => Generator<StatusFailed, void | Status | StatusFailed, unknown>): Status;
|
|
172
|
+
declare function statusDo<T>(generatorFn: () => Generator<StatusFailed, T, unknown>): StatusDoReturnType<T>;
|
|
173
|
+
/** Runs an asynchronous generator pipeline and stops at the first failure. */
|
|
174
|
+
declare function statusDoAsync(generatorFn: () => AsyncGenerator<StatusFailed, void | Status | StatusFailed, unknown>): Promise<Status>;
|
|
175
|
+
declare function statusDoAsync<T>(generatorFn: () => AsyncGenerator<StatusFailed, T, unknown>): Promise<StatusDoReturnType<T>>;
|
|
176
|
+
|
|
174
177
|
interface ErrorCarrier {
|
|
175
178
|
status(): StatusFailed;
|
|
176
179
|
ok(): false;
|
|
@@ -208,4 +211,4 @@ declare function tryCatch<T>(fn: () => T, mapper?: (error: unknown) => Status):
|
|
|
208
211
|
/** Runs an async function and converts rejections into a StatusOr failure. */
|
|
209
212
|
declare function tryCatchAsync<T>(fn: () => Promise<T>, mapper?: (error: unknown) => Status): Promise<StatusOr<T>>;
|
|
210
213
|
|
|
211
|
-
export { AbortedError, AlreadyExistsError, CancelledError, CheckStatus, DataLossError, DeadlineExceededError, EnsureOk, type ErrorCarrier, FAILURE_SYMBOL, FailedPreconditionError, type FailureSentinel, InternalError, InvalidArgumentError, NotFoundError, OkStatus, OutOfRangeError, type PayloadMap, type PayloadValue, PermissionDeniedError, ResourceExhaustedError, Status, StatusCode, StatusCode as StatusCodeType, StatusError, type StatusFailed, type StatusJSON, type StatusOk, StatusOr, type StatusOrJSON, type StatusOrOk, type StatusOrProxy, UnauthenticatedError, UnavailableError, UnimplementedError, UnknownError, asProxy, checkStatus, createFailure, ensureOk, failure, failureSentinel, fromError, getFailureStatus, hasError, isAborted, isAlreadyExists, isCancelled, isDataLoss, isDeadlineExceeded, isFailedPrecondition, isFailureSentinel, isInternal, isInvalidArgument, isNotFound, isOk, isOutOfRange, isPermissionDenied, isResourceExhausted, isUnauthenticated, isUnavailable, isUnimplemented, isUnknown, statusDo, statusDoAsync, statusOr, statusOrError, tryCatch, tryCatchAsync };
|
|
214
|
+
export { AbortedError, AlreadyExistsError, CancelledError, CheckStatus, DataLossError, DeadlineExceededError, EnsureOk, type ErrorCarrier, FAILURE_SYMBOL, FailedPreconditionError, type FailureSentinel, InternalError, InvalidArgumentError, NotFoundError, OkStatus, OutOfRangeError, type PayloadMap, type PayloadValue, PermissionDeniedError, ResourceExhaustedError, Status, StatusCode, StatusCode as StatusCodeType, type StatusDoReturnType, type StatusDoValue, StatusError, type StatusFailed, type StatusJSON, type StatusOk, StatusOr, type StatusOrJSON, type StatusOrOk, type StatusOrProxy, UnauthenticatedError, UnavailableError, UnimplementedError, UnknownError, asProxy, checkStatus, createFailure, ensureOk, failure, failureSentinel, fromError, getFailureStatus, hasError, isAborted, isAlreadyExists, isCancelled, isDataLoss, isDeadlineExceeded, isFailedPrecondition, isFailureSentinel, isInternal, isInvalidArgument, isNotFound, isOk, isOutOfRange, isPermissionDenied, isResourceExhausted, isUnauthenticated, isUnavailable, isUnimplemented, isUnknown, statusDo, statusDoAsync, statusOr, statusOrError, tryCatch, tryCatchAsync };
|
package/dist/index.js
CHANGED
|
@@ -283,9 +283,9 @@ var StatusOr = class _StatusOr {
|
|
|
283
283
|
if (item instanceof _StatusOr) {
|
|
284
284
|
if (!item.ok()) return _StatusOr.fromStatus(item.status());
|
|
285
285
|
results.push(item._value);
|
|
286
|
-
|
|
287
|
-
results.push(item);
|
|
286
|
+
continue;
|
|
288
287
|
}
|
|
288
|
+
results.push(item);
|
|
289
289
|
}
|
|
290
290
|
return _StatusOr.ok(
|
|
291
291
|
results
|
|
@@ -308,19 +308,24 @@ var StatusOr = class _StatusOr {
|
|
|
308
308
|
return this._value;
|
|
309
309
|
}
|
|
310
310
|
valueOr(defaultValue) {
|
|
311
|
-
|
|
311
|
+
if (this.ok()) return this._value;
|
|
312
|
+
return defaultValue;
|
|
312
313
|
}
|
|
313
314
|
valueOrCompute(computeFallback) {
|
|
314
|
-
|
|
315
|
+
if (this.ok()) return this._value;
|
|
316
|
+
return computeFallback(this._status.clone());
|
|
315
317
|
}
|
|
316
318
|
transform(fn) {
|
|
317
|
-
|
|
319
|
+
if (this.ok()) return _StatusOr.ok(fn(this._value));
|
|
320
|
+
return _StatusOr.fromStatus(this._status);
|
|
318
321
|
}
|
|
319
322
|
andThen(fn) {
|
|
320
|
-
|
|
323
|
+
if (this.ok()) return fn(this._value);
|
|
324
|
+
return _StatusOr.fromStatus(this._status);
|
|
321
325
|
}
|
|
322
326
|
match(handlers) {
|
|
323
|
-
|
|
327
|
+
if (this.ok()) return handlers.ok(this._value);
|
|
328
|
+
return handlers.err(this._status.clone());
|
|
324
329
|
}
|
|
325
330
|
*[Symbol.iterator]() {
|
|
326
331
|
if (this.ok()) return this._value;
|
|
@@ -346,7 +351,8 @@ var StatusOr = class _StatusOr {
|
|
|
346
351
|
};
|
|
347
352
|
}
|
|
348
353
|
clone() {
|
|
349
|
-
|
|
354
|
+
if (this.ok()) return _StatusOr.ok(this._value);
|
|
355
|
+
return _StatusOr.fromStatus(this._status);
|
|
350
356
|
}
|
|
351
357
|
equals(other) {
|
|
352
358
|
if (!(other instanceof _StatusOr) || this.ok() !== other.ok())
|
|
@@ -503,14 +509,14 @@ function asProxy(statusOr2) {
|
|
|
503
509
|
|
|
504
510
|
// src/do.ts
|
|
505
511
|
function* ensureOk(target) {
|
|
506
|
-
if (target instanceof Status) {
|
|
507
|
-
if (!target.ok()) yield target;
|
|
508
|
-
return void 0;
|
|
509
|
-
}
|
|
510
512
|
if (target instanceof StatusOr) {
|
|
511
513
|
if (!target.ok()) yield target.status();
|
|
512
514
|
return target.value();
|
|
513
515
|
}
|
|
516
|
+
if (target instanceof Status) {
|
|
517
|
+
if (!target.ok()) yield target;
|
|
518
|
+
return void 0;
|
|
519
|
+
}
|
|
514
520
|
if (isFailureSentinel(target)) {
|
|
515
521
|
yield target[FAILURE_SYMBOL];
|
|
516
522
|
return void 0;
|
|
@@ -532,7 +538,7 @@ function statusDo(generatorFn) {
|
|
|
532
538
|
iterator.return?.(void 0);
|
|
533
539
|
}
|
|
534
540
|
}
|
|
535
|
-
return normalizeResult(step.value
|
|
541
|
+
return normalizeResult(step.value);
|
|
536
542
|
}
|
|
537
543
|
async function statusDoAsync(generatorFn) {
|
|
538
544
|
const iterator = generatorFn();
|
|
@@ -546,19 +552,15 @@ async function statusDoAsync(generatorFn) {
|
|
|
546
552
|
await iterator.return?.(void 0);
|
|
547
553
|
}
|
|
548
554
|
}
|
|
549
|
-
return normalizeResult(step.value
|
|
555
|
+
return normalizeResult(step.value);
|
|
550
556
|
}
|
|
551
|
-
function normalizeResult(result
|
|
557
|
+
function normalizeResult(result) {
|
|
558
|
+
if (result === void 0) return OkStatus();
|
|
552
559
|
if (result instanceof StatusOr) return result;
|
|
553
560
|
if (isFailureSentinel(result))
|
|
554
561
|
return StatusOr.fromStatus(result[FAILURE_SYMBOL]);
|
|
555
562
|
if (result instanceof Status) {
|
|
556
|
-
if (result.ok())
|
|
557
|
-
return StatusOr.fromStatus(
|
|
558
|
-
InternalError(
|
|
559
|
-
`${source} cannot return an OK Status without a value`
|
|
560
|
-
)
|
|
561
|
-
);
|
|
563
|
+
if (result.ok()) return result;
|
|
562
564
|
return StatusOr.fromStatus(result);
|
|
563
565
|
}
|
|
564
566
|
return StatusOr.ok(result);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/status-code.ts","../src/errors.ts","../src/status.ts","../src/failure-brand.ts","../src/status-or.ts","../src/sentinel.ts","../src/do.ts","../src/predicates.ts","../src/interop.ts"],"names":["statusOr"],"mappings":";AAGO,IAAM,UAAA,GAAa;AAAA,EACxB,EAAA,EAAI,IAAA;AAAA,EACJ,SAAA,EAAW,WAAA;AAAA,EACX,OAAA,EAAS,SAAA;AAAA,EACT,gBAAA,EAAkB,kBAAA;AAAA,EAClB,iBAAA,EAAmB,mBAAA;AAAA,EACnB,SAAA,EAAW,WAAA;AAAA,EACX,cAAA,EAAgB,gBAAA;AAAA,EAChB,iBAAA,EAAmB,mBAAA;AAAA,EACnB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,OAAA,EAAS,SAAA;AAAA,EACT,YAAA,EAAc,cAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,QAAA,EAAU,UAAA;AAAA,EACV,WAAA,EAAa,aAAA;AAAA,EACb,SAAA,EAAW,WAAA;AAAA,EACX,eAAA,EAAiB;AACnB;;;ACjBO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EACrB,MAAA;AAAA,EAEhB,YAAY,MAAA,EAAgB;AAC1B,IAAA,KAAA,CAAM,MAAA,CAAO,UAAU,CAAA;AACvB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AAAA,EAEA,IAAW,IAAA,GAAmB;AAC5B,IAAA,OAAO,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,EAC1B;AACF;;;ACCA,SAAS,YAAY,KAAA,EAAmC;AACtD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAM,KAAA,EAAM;AACzD;AAEA,SAAS,cAAc,KAAA,EAA2B;AAChD,EAAA,MAAM,KAAA,GACJ,kEAAA;AACF,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,IAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,IAAA,MAAM,EAAA,GAAK,IAAI,CAAA,GAAI,KAAA,CAAM,SAAS,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,GAAK,CAAA;AAClD,IAAA,MAAM,EAAA,GAAK,IAAI,CAAA,GAAI,KAAA,CAAM,SAAS,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,GAAK,CAAA;AAClD,IAAA,MAAA,IAAU,KAAA,CAAO,EAAA,IAAM,CAAA,GAAK,EAAI,CAAA;AAChC,IAAA,MAAA,IAAU,OAAQ,EAAA,GAAK,CAAA,KAAS,CAAA,GAAO,EAAA,IAAM,IAAK,EAAK,CAAA;AACvD,IAAA,MAAA,IACE,CAAA,GAAI,CAAA,GAAI,KAAA,CAAM,MAAA,GACV,KAAA,CAAA,CAAQ,EAAA,GAAK,EAAA,KAAS,CAAA,GAAO,EAAA,IAAM,CAAA,GAAK,CAAK,CAAA,GAC7C,GAAA;AACN,IAAA,MAAA,IAAU,IAAI,CAAA,GAAI,KAAA,CAAM,SAAS,KAAA,CAAM,EAAA,GAAK,EAAI,CAAA,GAAI,GAAA;AAAA,EACtD;AACA,EAAA,OAAO,MAAA;AACT;AAMO,IAAM,MAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EACV,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EAED,WAAA,CACL,IAAA,GAAmB,UAAA,CAAW,EAAA,EAC9B,UAAkB,EAAA,EAClB;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,KAAS,UAAA,CAAW,EAAA,GAAK,EAAA,GAAK,OAAA;AAAA,EAChD;AAAA,EAEO,EAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,UAAU,UAAA,CAAW,EAAA;AAAA,EACnC;AAAA,EAEO,IAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEO,OAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEO,MAAA,GAAiB;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,WAAW,OAAA,EAAuB;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAG,OAAQ,QAAA,GAAW,OAAA;AAAA,EAClC;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,IAAI,IAAA,CAAK,EAAA,EAAG,EAAG,OAAO,IAAA;AACtB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,GAC5B,IAAA,CAAK,KAAA,GACL,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,EACrC;AAAA;AAAA,EAGO,OAAO,KAAA,EAAqB;AACjC,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAG,EAAG,OAAO,IAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA;AACnB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,MAAM,YAAA,EAAa;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,UAAA,CAAW,SAAiB,OAAA,EAA6B;AAC9D,IAAA,IAAI,IAAA,CAAK,IAAG,EAAG;AACf,IAAA,IAAA,CAAK,SAAA,yBAAkB,GAAA,EAAI;AAC3B,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,EAClD;AAAA,EAEO,WAAW,OAAA,EAA2C;AAC3D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,OAAO,CAAA;AAC3C,IAAA,OAAO,OAAA,KAAY,MAAA,GAAY,MAAA,GAAY,WAAA,CAAY,OAAO,CAAA;AAAA,EAChE;AAAA,EAEO,WAAW,OAAA,EAA0B;AAC1C,IAAA,OAAO,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,OAAO,CAAA,IAAK,KAAA;AAAA,EACzC;AAAA,EAEO,aAAa,OAAA,EAA0B;AAC5C,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,KAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA;AAC7C,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,KAAS,CAAA,OAAQ,SAAA,GAAY,MAAA;AAChD,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEO,aAAA,GAAsB;AAC3B,IAAA,IAAA,CAAK,SAAA,GAAY,MAAA;AAAA,EACnB;AAAA,EAEO,YAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,IAAQ,CAAA;AAAA,EACjC;AAAA,EAEO,eACL,QAAA,EACM;AACN,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACrB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,CAAK,SAAA;AAC9B,MAAA,QAAA,CAAS,GAAA,EAAK,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,EACpC;AAAA,EAEO,KAAA,GAAgB;AACrB,IAAA,MAAM,SAAS,IAAI,OAAA,CAAO,IAAA,CAAK,KAAA,EAAO,KAAK,QAAQ,CAAA;AACnD,IAAA,MAAA,CAAO,SAAA,GAAY,KAAK,YAAA,EAAa;AACrC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,OAAO,KAAA,EAAyB;AACrC,IAAA,IACE,EAAE,iBAAiB,OAAA,CAAA,IACnB,IAAA,CAAK,UAAU,KAAA,CAAM,KAAA,IACrB,IAAA,CAAK,QAAA,KAAa,KAAA,CAAM,QAAA;AAExB,MAAA,OAAO,KAAA;AACT,IAAA,IAAI,KAAK,YAAA,EAAa,KAAM,KAAA,CAAM,YAAA,IAAgB,OAAO,KAAA;AACzD,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,IAAA;AAC5B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,SAAA,EAAW;AACzC,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,SAAA,EAAW,GAAA,CAAI,GAAG,CAAA;AAC3C,MAAA,IACE,UAAA,KAAe,MAAA,IACf,CAAC,aAAA,CAAc,OAAO,UAAU,CAAA;AAEhC,QAAA,OAAO,KAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,MAAA,GAAqB;AAC1B,IAAA,MAAM,IAAA,GAAmB;AAAA,MACvB,EAAA,EAAI,KAAK,EAAA,EAAG;AAAA,MACZ,MAAM,IAAA,CAAK,KAAA;AAAA,MACX,SAAS,IAAA,CAAK;AAAA,KAChB;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,IAAA,EAAM;AACxB,MAAA,MAAM,WAAmC,EAAC;AAC1C,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,CAAK,SAAA;AAC9B,QAAA,QAAA,CAAS,GAAG,CAAA,GACV,OAAO,UAAU,QAAA,GAAW,KAAA,GAAQ,cAAc,KAAK,CAAA;AAC3D,MAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,OAAA,GAAuB;AAC5B,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,KAAA,EAAO,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,EAAS,MAAA,CAAO,QAAQ,CAAA,GAItB;AACA,IAAA,IAAI,IAAA,CAAK,IAAG,EAAG;AACf,IAAA,MAAM,IAAA;AAAA,EACR;AAAA,EAEA,OAAc,EAAA,GAAe;AAC3B,IAAA,OAAO,IAAI,OAAA,EAAO;AAAA,EACpB;AAAA,EAEA,OAAc,QAAA,CACZ,IAAA,EACA,OAAA,GAAkB,IAClB,QAAA,EACQ;AACR,IAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAO,IAAA,EAAM,OAAO,CAAA;AACvC,IAAA,IAAI,QAAA,EAAU,aAAA,CAAc,MAAA,EAAQ,QAAQ,CAAA;AAC5C,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,YAAA,GAAsD;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,IAAA,EAAM,OAAO,MAAA;AAClC,IAAA,OAAO,IAAI,GAAA;AAAA,MACT,KAAA,CAAM,KAAK,IAAA,CAAK,SAAA,EAAW,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAAA,QAC3C,GAAA;AAAA,QACA,YAAY,KAAK;AAAA,OAClB;AAAA,KACH;AAAA,EACF;AACF;AAEA,SAAS,aAAA,CACP,MACA,KAAA,EACS;AACT,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA;AAC/C,IAAA,OACE,OAAO,IAAA,KAAS,QAAA,IAChB,OAAO,KAAA,KAAU,YACjB,IAAA,KAAS,KAAA;AAEb,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AACzC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAI,KAAK,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,GAAG,OAAO,KAAA;AAAA,EACnC;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAA,CAAc,QAAgB,QAAA,EAA4B;AACjE,EAAA,IAAI,aAAA,CAAc,QAAQ,CAAA,EAAG;AAC3B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,QAAA;AACzB,MAAA,MAAA,CAAO,UAAA,CAAW,KAAK,KAAK,CAAA;AAC9B,IAAA;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,QAAQ,CAAA;AAChD,IAAA,MAAA,CAAO,UAAA,CAAW,KAAK,KAAK,CAAA;AAChC;AAEA,SAAS,cACP,KAAA,EAC4C;AAC5C,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,OACE,OAAO,UAAU,OAAA,KAAY,UAAA,IAC7B,OAAO,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,KAAM,UAAA;AAE1C;AAEO,SAAS,QAAA,GAAqB;AACnC,EAAA,OAAO,OAAO,EAAA,EAAG;AACnB;AAEA,SAAS,kBAAkB,IAAA,EAAiC;AAC1D,EAAA,OAAO,CACL,OAAA,GAAkB,EAAA,EAClB,QAAA,KACiB;AACjB,IAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;AACvC,IAAA,IAAI,QAAA,EAAU,aAAA,CAAc,MAAA,EAAQ,QAAQ,CAAA;AAC5C,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEO,IAAM,cAAA,GAAiB,iBAAA,CAAkB,UAAA,CAAW,SAAS;AAC7D,IAAM,YAAA,GAAe,iBAAA,CAAkB,UAAA,CAAW,OAAO;AACzD,IAAM,oBAAA,GAAuB,iBAAA;AAAA,EAClC,UAAA,CAAW;AACb;AACO,IAAM,qBAAA,GAAwB,iBAAA;AAAA,EACnC,UAAA,CAAW;AACb;AACO,IAAM,aAAA,GAAgB,iBAAA,CAAkB,UAAA,CAAW,SAAS;AAC5D,IAAM,kBAAA,GAAqB,iBAAA;AAAA,EAChC,UAAA,CAAW;AACb;AACO,IAAM,qBAAA,GAAwB,iBAAA;AAAA,EACnC,UAAA,CAAW;AACb;AACO,IAAM,sBAAA,GAAyB,iBAAA;AAAA,EACpC,UAAA,CAAW;AACb;AACO,IAAM,uBAAA,GAA0B,iBAAA;AAAA,EACrC,UAAA,CAAW;AACb;AACO,IAAM,YAAA,GAAe,iBAAA,CAAkB,UAAA,CAAW,OAAO;AACzD,IAAM,eAAA,GAAkB,iBAAA;AAAA,EAC7B,UAAA,CAAW;AACb;AACO,IAAM,kBAAA,GAAqB,iBAAA;AAAA,EAChC,UAAA,CAAW;AACb;AACO,IAAM,aAAA,GAAgB,iBAAA,CAAkB,UAAA,CAAW,QAAQ;AAC3D,IAAM,gBAAA,GAAmB,iBAAA;AAAA,EAC9B,UAAA,CAAW;AACb;AACO,IAAM,aAAA,GAAgB,iBAAA,CAAkB,UAAA,CAAW,SAAS;AAC5D,IAAM,oBAAA,GAAuB,iBAAA;AAAA,EAClC,UAAA,CAAW;AACb;;;ACzSO,IAAM,cAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,qBAAqB;AAOvD,SAAS,wBACd,KAAA,EAC0B;AAC1B,EAAA,IACG,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,cAC/C,KAAA,KAAU,IAAA;AAEV,IAAA,OAAO,MAAA;AACT,EAAA,IAAI;AACF,IAAA,IAAI,EAAE,cAAA,IAAkB,KAAA,CAAA,EAAQ,OAAO,KAAA,CAAA;AACvC,IAAA,MAAM,MAAA,GAAU,MAAuB,cAAc,CAAA;AACrD,IAAA,OAAO,kBAAkB,MAAA,IAAU,CAAC,MAAA,CAAO,EAAA,KACtC,MAAA,GACD,KAAA,CAAA;AAAA,EACN,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACbO,IAAM,QAAA,GAAN,MAAM,SAAA,CAAY;AAAA,EACN,OAAA;AAAA,EACA,MAAA;AAAA,EAET,WAAA,CAAY,QAAgB,KAAA,EAAW;AAC7C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EAEA,OAAc,GAAM,KAAA,EAAuB;AACzC,IAAA,MAAM,aAAA,GAAgB,wBAAwB,KAAK,CAAA;AACnD,IAAA,IAAI,aAAA,EAAe,OAAO,SAAA,CAAS,UAAA,CAAc,aAAa,CAAA;AAC9D,IAAA,OAAO,IAAI,SAAA,CAAY,MAAA,CAAO,EAAA,IAAM,KAAK,CAAA;AAAA,EAC3C;AAAA,EAEA,OAAc,WAAsB,MAAA,EAA6B;AAC/D,IAAA,IAAI,OAAO,EAAA,EAAG;AACZ,MAAA,MAAM,IAAI,UAAA;AAAA,QACR;AAAA,OACF;AACF,IAAA,OAAO,IAAI,SAAA,CAAY,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,EACvC;AAAA,EAEA,OAAc,IACZ,MAAA,EAGC;AACD,IAAA,MAAM,UAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,MAAM,aAAA,GAAgB,wBAAwB,IAAI,CAAA;AAClD,MAAA,IAAI,aAAA,EAAe,OAAO,SAAA,CAAS,UAAA,CAAW,aAAa,CAAA;AAC3D,MAAA,IAAI,gBAAgB,SAAA,EAAU;AAC5B,QAAA,IAAI,CAAC,KAAK,EAAA,EAAG,SAAU,SAAA,CAAS,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,CAAA;AACxD,QAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,MACnB;AAAA,IACF;AACA,IAAA,OAAO,SAAA,CAAS,EAAA;AAAA,MACd;AAAA,KAGF;AAAA,EACF;AAAA,EAEO,EAAA,GAA4B;AACjC,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAA,EAAG;AAAA,EACzB;AAAA,EAEO,IAAA,GAAmC;AACxC,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,EAAK;AAAA,EAC3B;AAAA,EAEO,OAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,QAAQ,OAAA,EAAQ;AAAA,EAC9B;AAAA,EAEO,MAAA,GAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,EAC5B;AAAA,EAEO,KAAA,GAAW;AAChB,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,MAAM,IAAA,CAAK,QAAQ,OAAA,EAAQ;AAC3C,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEO,QAAQ,YAAA,EAAoB;AACjC,IAAA,OAAO,IAAA,CAAK,EAAA,EAAG,GAAK,IAAA,CAAK,MAAA,GAAe,YAAA;AAAA,EAC1C;AAAA,EAEO,eACL,eAAA,EACG;AACH,IAAA,OAAO,IAAA,CAAK,IAAG,GACV,IAAA,CAAK,SACN,eAAA,CAAgB,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAuB,CAAA;AAAA,EAC1D;AAAA,EAEO,UAAa,EAAA,EAAkC;AACpD,IAAA,OAAO,IAAA,CAAK,EAAA,EAAG,GACX,SAAA,CAAS,EAAA,CAAG,EAAA,CAAG,IAAA,CAAK,MAAW,CAAC,CAAA,GAChC,SAAA,CAAS,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,EACtC;AAAA,EAEO,QAAW,EAAA,EAA4C;AAC5D,IAAA,OAAO,IAAA,CAAK,EAAA,EAAG,GACX,EAAA,CAAG,IAAA,CAAK,MAAW,CAAA,GACnB,SAAA,CAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AAAA,EACtC;AAAA,EAEO,MAAS,QAAA,EAGV;AACJ,IAAA,OAAO,IAAA,CAAK,EAAA,EAAG,GACX,QAAA,CAAS,EAAA,CAAG,IAAA,CAAK,MAAW,CAAA,GAC5B,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,OAAuB,CAAA;AAAA,EACvD;AAAA,EAEA,EAAS,MAAA,CAAO,QAAQ,CAAA,GAAyC;AAC/D,IAAA,IAAI,IAAA,CAAK,EAAA,EAAG,EAAG,OAAO,IAAA,CAAK,MAAA;AAC3B,IAAA,MAAM,IAAA,CAAK,QAAQ,KAAA,EAAM;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,OAAO,IAAA,CAAK,QAAQ,QAAA,EAAS;AAC7C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,OAAO,IAAA;AACtC,IAAA,IAAI;AACF,MAAA,OAAO,CAAA,IAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,IAC3C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,4BAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEO,MAAA,GAA0B;AAC/B,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,OAAO,IAAA,CAAK,QAAQ,MAAA,EAAO;AAC3C,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK;AAAA,MACxB,OAAA,EAAS,EAAA;AAAA,MACT,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AAAA,EAEO,KAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,EAAA,EAAG,GACX,SAAA,CAAS,EAAA,CAAG,IAAA,CAAK,MAAW,CAAA,GAC5B,SAAA,CAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AAAA,EACtC;AAAA,EAEO,OAAO,KAAA,EAAyB;AACrC,IAAA,IAAI,EAAE,KAAA,YAAiB,SAAA,CAAA,IAAa,KAAK,EAAA,EAAG,KAAM,MAAM,EAAA,EAAG;AACzD,MAAA,OAAO,KAAA;AACT,IAAA,IAAI,CAAC,KAAK,EAAA,EAAG,SAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AACxD,IAAA,OAAO,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AAAA,EAC5C;AACF;AAEO,SAAS,SAAY,KAAA,EAAuB;AACjD,EAAA,OAAO,QAAA,CAAS,GAAG,KAAK,CAAA;AAC1B;AAEO,SAAS,cACd,MAAA,EACa;AACb,EAAA,OAAO,QAAA,CAAS,WAAc,MAAM,CAAA;AACtC;;;AC5IO,SAAS,kBACd,KAAA,EAC0B;AAC1B,EAAA,IAAI,CAAC,uBAAA,CAAwB,KAAK,CAAA,EAAG,OAAO,KAAA;AAC5C,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,KAAA;AAClB,IAAA,OACE,OAAO,SAAA,CAAU,EAAA,KAAO,cACxB,OAAO,SAAA,CAAU,WAAW,UAAA,IAC5B,OAAO,SAAA,CAAU,IAAA,KAAS,cAC1B,OAAO,SAAA,CAAU,YAAY,UAAA,IAC7B,OAAO,UAAU,QAAA,KAAa,UAAA;AAAA,EAElC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGO,SAAS,iBACd,KAAA,EAC0B;AAC1B,EAAA,MAAM,aAAA,GAAgB,wBAAwB,KAAK,CAAA;AACnD,EAAA,IAAI,eAAe,OAAO,aAAA;AAC1B,EAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,IAAA,IAAI,CAAC,KAAA,CAAM,EAAA,EAAG,EAAG,OAAO,KAAA;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,KAAA,CAAM,EAAA,EAAG,EAAG,OAAO,MAAM,MAAA,EAAO;AACrC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,QAAmB,MAAA,EAAmB;AACpD,EAAA,IAAI,OAAO,EAAA,EAAG;AACZ,IAAA,MAAM,IAAI,UAAA;AAAA,MACR;AAAA,KACF;AAEF,EAAA,MAAM,IAAA,GAAwB;AAAA,IAC5B,CAAC,cAAc,GAAG,MAAA;AAAA,IAClB,EAAA,GAAK;AACH,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAA,GAAS;AACP,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,GAAO;AACL,MAAA,OAAO,OAAO,IAAA,EAAK;AAAA,IACrB,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACxB,CAAA;AAAA,IACA,QAAA,GAAW;AACT,MAAA,OAAO,OAAO,QAAA,EAAS;AAAA,IACzB,CAAA;AAAA,IACA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAA6C;AAC5D,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,OAAO,IAAI,MAAM,IAAA,EAAM;AAAA,IACrB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAA,IAAQ,UAAU,IAAA,KAAS,cAAA;AAC7B,QAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAC3C,MAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,MAAA;AAC5B,MAAA,IAAI,SAAS,MAAA,CAAO,WAAA;AAClB,QAAA,OAAO,MACL,kBAAA;AAAA,UACE,MAAA;AAAA,UACA;AAAA,SACF;AACJ,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA;AACrC,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,CAAA,uBAAA,EAA0B,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,OAChD;AAAA,IACF,CAAA;AAAA,IACA,GAAA,CAAI,SAAS,IAAA,EAAM;AACjB,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,2BAA2B,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,OACzD;AAAA,IACF,CAAA;AAAA,IACA,cAAA,CAAe,SAAS,IAAA,EAAM;AAC5B,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,4BAA4B,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,OAC1D;AAAA,IACF,CAAA;AAAA,IACA,cAAA,CAAe,SAAS,IAAA,EAAM;AAC5B,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,4BAA4B,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,OAC1D;AAAA,IACF,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,IAAI,IAAA,IAAQ,QAAQ,OAAO,IAAA;AAC3B,MAAA,IAAI,IAAA,KAAS,MAAA,IAAU,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AACxD,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA,CAAA,wBAAA,EAA2B,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,OACjD;AAAA,IACF,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,OAAO,kBAAA;AAAA,QACL,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAEA,SAAS,kBAAA,CAAmB,QAAgB,MAAA,EAAuB;AACjE,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,UACJ,CAAA,wDAAA,EAA2D,MAAM,CAAA,iEAAA,EAE7C,MAAA,CAAO,UAAU,CAAA,CAAA;AACvC,EAAA,MAAM,KAAA;AACR;AAEO,IAAM,eAAA,GAAkB;AACxB,IAAM,aAAA,GAAgB;AAMtB,SAAS,QAAWA,SAAAA,EAAyC;AAClE,EAAA,OAAO,IAAI,MAAMA,SAAAA,EAAU;AAAA,IACzB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAA,IAAQ,MAAA,IAAU,OAAO,IAAA,KAAS,QAAA,EAAU;AAC9C,QAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAC9C,QAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,OAAO,GAAA,CAAI,KAAK,MAAM,CAAA;AACrD,QAAA,OAAO,GAAA;AAAA,MACT;AACA,MAAA,IAAI,MAAA,CAAO,IAAG,EAAG;AACf,QAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,EAAM;AAC3B,QAAA,IACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA,KACT,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,UAAA,CAAA,EAC/C;AACA,UAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,KAAK,CAAA;AAC1C,UAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,OAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AACpD,UAAA,OAAO,GAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,IAAI,IAAA,IAAQ,QAAQ,OAAO,IAAA;AAC3B,MAAA,IAAI,MAAA,CAAO,IAAG,EAAG;AACf,QAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,EAAM;AAC3B,QAAA,IACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA,KACT,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,UAAA,CAAA;AAE/C,UAAA,OAAO,IAAA,IAAQ,KAAA;AAAA,MACnB;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;;;AC7KO,UAAU,SACf,MAAA,EACqC;AACrC,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAG,EAAG,MAAM,MAAA;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,kBAAkB,QAAA,EAAU;AAC9B,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAG,EAAG,MAAM,OAAO,MAAA,EAAO;AACtC,IAAA,OAAO,OAAO,KAAA,EAAM;AAAA,EACtB;AACA,EAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG;AAC7B,IAAA,MAAM,OAAO,cAAc,CAAA;AAC3B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,QAAA,GAAW;AACjB,IAAM,WAAA,GAAc;AACpB,IAAM,WAAA,GAAc;AAGpB,SAAS,SACd,WAAA,EAKa;AACb,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAO,SAAS,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,IAAA,IAAI;AACF,MAAA,IAAI,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAC9B,QAAA,OAAO,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,cAAc,CAAC,CAAA;AACvD,MAAA,OAAO,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAAA,IACvC,CAAA,SAAE;AACA,MAAA,QAAA,CAAS,SAAS,MAAkB,CAAA;AAAA,IACtC;AAAA,EACF;AACA,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,KAAA,EAAO,UAAU,CAAA;AAC/C;AAGA,eAAsB,cACpB,WAAA,EAKsB;AACtB,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,EAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,IAAA,IAAI;AACF,MAAA,IAAI,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAC9B,QAAA,OAAO,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,cAAc,CAAC,CAAA;AACvD,MAAA,OAAO,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAAA,IACvC,CAAA,SAAE;AACA,MAAA,MAAM,QAAA,CAAS,SAAS,MAAkB,CAAA;AAAA,IAC5C;AAAA,EACF;AACA,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,KAAA,EAAO,eAAe,CAAA;AACpD;AAEA,SAAS,eAAA,CACP,QACA,MAAA,EACa;AACb,EAAA,IAAI,MAAA,YAAkB,UAAU,OAAO,MAAA;AACvC,EAAA,IAAI,kBAAkB,MAAM,CAAA;AAC1B,IAAA,OAAO,QAAA,CAAS,UAAA,CAAW,MAAA,CAAO,cAAc,CAAC,CAAA;AACnD,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,IAAI,OAAO,EAAA,EAAG;AACZ,MAAA,OAAO,QAAA,CAAS,UAAA;AAAA,QACd,aAAA;AAAA,UACE,GAAG,MAAM,CAAA,2CAAA;AAAA;AACX,OACF;AACF,IAAA,OAAO,QAAA,CAAS,WAAW,MAAsB,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,QAAA,CAAS,GAAG,MAAM,CAAA;AAC3B;;;ACtFA,SAAS,kBAAkB,MAAA,EAAyC;AAClE,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW,OAAO,MAAA;AACpD,EAAA,IAAI,MAAA,YAAkB,UAAU,MAAA,YAAkB,QAAA;AAChD,IAAA,OAAO,OAAO,IAAA,EAAK;AACrB,EAAA,IAAI,OAAQ,MAAA,CAAe,IAAA,KAAS,UAAA,EAAY;AAC9C,IAAA,MAAM,GAAA,GAAO,OAAe,IAAA,EAAK;AACjC,IAAA,IAAI,YAAA,CAAa,GAAG,CAAA,EAAG,OAAO,GAAA;AAAA,EAChC;AACA,EAAA,IAAI,YAAA,CAAc,OAAe,IAAI,CAAA;AACnC,IAAA,OAAQ,MAAA,CAAe,IAAA;AACzB,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,cAAc,IAAI,GAAA,CAAY,MAAA,CAAO,MAAA,CAAO,UAAU,CAAC,CAAA;AAE7D,SAAS,aAAa,KAAA,EAAqC;AACzD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,WAAA,CAAY,IAAI,KAAK,CAAA;AAC3D;AAMO,SAAS,KAAK,MAAA,EAA0B;AAC7C,EAAA,MAAM,IAAA,GAAO,kBAAkB,MAAM,CAAA;AACrC,EAAA,IAAI,IAAA,KAAS,QAAW,OAAO,KAAA;AAC/B,EAAA,OAAO,SAAS,UAAA,CAAW,EAAA;AAC7B;AAGO,SAAS,SAAS,MAAA,EAAyC;AAChE,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW,OAAO,KAAA;AACpD,EAAA,IAAI,MAAA,YAAkB,MAAA,EAAQ,OAAO,CAAC,OAAO,EAAA,EAAG;AAChD,EAAA,IAAI,MAAA,YAAkB,QAAA,EAAU,OAAO,CAAC,OAAO,EAAA,EAAG;AAClD,EAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG,OAAO,IAAA;AACtC,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAgB,YAAA,EAA0B;AACjD,EAAA,OAAO,CAAC,MAAA,KAA6B;AACnC,IAAA,MAAM,IAAA,GAAO,kBAAkB,MAAM,CAAA;AACrC,IAAA,IAAI,IAAA,KAAS,QAAW,OAAO,KAAA;AAC/B,IAAA,OAAO,IAAA,KAAS,YAAA;AAAA,EAClB,CAAA;AACF;AAEO,IAAM,WAAA,GAAc,eAAA,CAAgB,UAAA,CAAW,SAAS;AACxD,IAAM,SAAA,GAAY,eAAA,CAAgB,UAAA,CAAW,OAAO;AACpD,IAAM,iBAAA,GAAoB,eAAA;AAAA,EAC/B,UAAA,CAAW;AACb;AACO,IAAM,kBAAA,GAAqB,eAAA;AAAA,EAChC,UAAA,CAAW;AACb;AACO,IAAM,UAAA,GAAa,eAAA,CAAgB,UAAA,CAAW,SAAS;AACvD,IAAM,eAAA,GAAkB,eAAA;AAAA,EAC7B,UAAA,CAAW;AACb;AACO,IAAM,kBAAA,GAAqB,eAAA;AAAA,EAChC,UAAA,CAAW;AACb;AACO,IAAM,mBAAA,GAAsB,eAAA;AAAA,EACjC,UAAA,CAAW;AACb;AACO,IAAM,oBAAA,GAAuB,eAAA;AAAA,EAClC,UAAA,CAAW;AACb;AACO,IAAM,SAAA,GAAY,eAAA,CAAgB,UAAA,CAAW,OAAO;AACpD,IAAM,YAAA,GAAe,eAAA,CAAgB,UAAA,CAAW,YAAY;AAC5D,IAAM,eAAA,GAAkB,eAAA;AAAA,EAC7B,UAAA,CAAW;AACb;AACO,IAAM,UAAA,GAAa,eAAA,CAAgB,UAAA,CAAW,QAAQ;AACtD,IAAM,aAAA,GAAgB,eAAA,CAAgB,UAAA,CAAW,WAAW;AAC5D,IAAM,UAAA,GAAa,eAAA,CAAgB,UAAA,CAAW,SAAS;AACvD,IAAM,iBAAA,GAAoB,eAAA;AAAA,EAC/B,UAAA,CAAW;AACb;;;ACjFO,SAAS,UAAU,KAAA,EAA8B;AACtD,EAAA,MAAM,aAAA,GAAgB,wBAAwB,KAAK,CAAA;AACnD,EAAA,IAAI,eAAe,OAAO,aAAA;AAC1B,EAAA,IAAI,KAAA,YAAiB,MAAA;AACnB,IAAA,OAAO,KAAA,CAAM,EAAA,EAAG,GACZ,aAAA,CAAc,iCAAiC,CAAA,GAC9C,KAAA;AACP,EAAA,IAAI,KAAA,YAAiB,WAAA;AACnB,IAAA,OAAO,MAAM,MAAA,CAAO,EAAA,KAChB,aAAA,CAAc,8CAA8C,IAC3D,KAAA,CAAM,MAAA;AACb,EAAA,IAAI,KAAA,YAAiB,UAAA;AACnB,IAAA,OAAO,eAAA,CAAgB,MAAM,OAAO,CAAA;AACtC,EAAA,IAAI,KAAA,YAAiB,SAAA;AACnB,IAAA,OAAO,oBAAA,CAAqB,MAAM,OAAO,CAAA;AAC3C,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,YAAA,CAAa,MAAM,OAAO,CAAA;AAC7D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,aAAa,KAAK,CAAA;AACxD,EAAA,OAAO,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA;AACnC;AAGO,SAAS,QAAA,CACd,IACA,MAAA,EACa;AACb,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,EAAA,CAAG,EAAA,EAAI,CAAA;AAAA,EACzB,SAAS,GAAA,EAAc;AACrB,IAAA,MAAM,SAAS,MAAA,GAAS,MAAA,CAAO,GAAG,CAAA,GAAI,UAAU,GAAG,CAAA;AACnD,IAAA,OAAO,QAAA,CAAS,UAAA;AAAA,MACd,MAAA,CAAO,EAAA,EAAG,GACN,aAAA,CAAc,uCAAuC,CAAA,GACrD;AAAA,KACN;AAAA,EACF;AACF;AAGA,eAAsB,aAAA,CACpB,IACA,MAAA,EACsB;AACtB,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,EAAA,CAAG,MAAM,EAAA,EAAI,CAAA;AAAA,EAC/B,SAAS,GAAA,EAAc;AACrB,IAAA,MAAM,SAAS,MAAA,GAAS,MAAA,CAAO,GAAG,CAAA,GAAI,UAAU,GAAG,CAAA;AACnD,IAAA,OAAO,QAAA,CAAS,UAAA;AAAA,MACd,MAAA,CAAO,EAAA,EAAG,GACN,aAAA,CAAc,4CAA4C,CAAA,GAC1D;AAAA,KACN;AAAA,EACF;AACF","file":"index.js","sourcesContent":["/**\n * Canonical status error codes matching Abseil / gRPC standard error codes.\n */\nexport const StatusCode = {\n OK: \"OK\",\n CANCELLED: \"CANCELLED\",\n UNKNOWN: \"UNKNOWN\",\n INVALID_ARGUMENT: \"INVALID_ARGUMENT\",\n DEADLINE_EXCEEDED: \"DEADLINE_EXCEEDED\",\n NOT_FOUND: \"NOT_FOUND\",\n ALREADY_EXISTS: \"ALREADY_EXISTS\",\n PERMISSION_DENIED: \"PERMISSION_DENIED\",\n RESOURCE_EXHAUSTED: \"RESOURCE_EXHAUSTED\",\n FAILED_PRECONDITION: \"FAILED_PRECONDITION\",\n ABORTED: \"ABORTED\",\n OUT_OF_RANGE: \"OUT_OF_RANGE\",\n UNIMPLEMENTED: \"UNIMPLEMENTED\",\n INTERNAL: \"INTERNAL\",\n UNAVAILABLE: \"UNAVAILABLE\",\n DATA_LOSS: \"DATA_LOSS\",\n UNAUTHENTICATED: \"UNAUTHENTICATED\",\n} as const;\n\nexport type StatusCode = (typeof StatusCode)[keyof typeof StatusCode];\n","import type { Status } from \"./status.js\";\nimport type { StatusCode } from \"./status-code.js\";\n\n/** A native Error carrying a Status. */\nexport class StatusError extends Error {\n public readonly status: Status;\n\n constructor(status: Status) {\n super(status.toString());\n this.name = \"StatusError\";\n this.status = status;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n public get code(): StatusCode {\n return this.status.code();\n }\n}\n","import { StatusCode } from \"./status-code.js\";\nimport { StatusError } from \"./errors.js\";\n\nexport type PayloadValue = Uint8Array | string;\nexport type PayloadMap =\n | Readonly<Record<string, PayloadValue>>\n | ReadonlyMap<string, PayloadValue>;\n\nexport interface StatusJSON {\n ok: boolean;\n code: StatusCode;\n message: string;\n payloads?: Record<string, string> | undefined;\n}\n\nexport type StatusOk = Status & { ok(): true };\nexport type StatusFailed = Status & { ok(): false };\n\nfunction copyPayload(value: PayloadValue): PayloadValue {\n return typeof value === \"string\" ? value : value.slice();\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n let result = \"\";\n for (let i = 0; i < bytes.length; i += 3) {\n const b0 = bytes[i]!;\n const b1 = i + 1 < bytes.length ? bytes[i + 1]! : 0;\n const b2 = i + 2 < bytes.length ? bytes[i + 2]! : 0;\n result += chars[(b0 >> 2) & 0x3f];\n result += chars[((b0 & 0x03) << 4) | ((b1 >> 4) & 0x0f)];\n result +=\n i + 1 < bytes.length\n ? chars[((b1 & 0x0f) << 2) | ((b2 >> 6) & 0x03)]\n : \"=\";\n result += i + 2 < bytes.length ? chars[b2 & 0x3f] : \"=\";\n }\n return result;\n}\n\n/**\n * Represents either success or a canonical error. It never carries a\n * business value.\n */\nexport class Status {\n private _code: StatusCode;\n private _message: string;\n private _payloads: Map<string, PayloadValue> | undefined;\n\n public constructor(\n code: StatusCode = StatusCode.OK,\n message: string = \"\",\n ) {\n this._code = code;\n this._message = code === StatusCode.OK ? \"\" : message;\n }\n\n public ok(): this is StatusOk {\n return this._code === StatusCode.OK;\n }\n\n public code(): StatusCode {\n return this._code;\n }\n\n public message(): string {\n return this._message;\n }\n\n public status(): Status {\n return this;\n }\n\n public setMessage(message: string): void {\n if (!this.ok()) this._message = message;\n }\n\n public toString(): string {\n if (this.ok()) return \"OK\";\n return this._message.length === 0\n ? this._code\n : `${this._code}: ${this._message}`;\n }\n\n /** Keeps the first non-OK status, matching absl::Status::Update. */\n public update(other: Status): this {\n if (!this.ok()) return this;\n this._code = other._code;\n this._message = other._message;\n this._payloads = other.copyPayloads();\n return this;\n }\n\n public setPayload(typeUrl: string, payload: PayloadValue): void {\n if (this.ok()) return;\n this._payloads ??= new Map();\n this._payloads.set(typeUrl, copyPayload(payload));\n }\n\n public getPayload(typeUrl: string): PayloadValue | undefined {\n const payload = this._payloads?.get(typeUrl);\n return payload === undefined ? undefined : copyPayload(payload);\n }\n\n public hasPayload(typeUrl: string): boolean {\n return this._payloads?.has(typeUrl) ?? false;\n }\n\n public erasePayload(typeUrl: string): boolean {\n if (!this._payloads) return false;\n const deleted = this._payloads.delete(typeUrl);\n if (this._payloads.size === 0) this._payloads = undefined;\n return deleted;\n }\n\n public clearPayloads(): void {\n this._payloads = undefined;\n }\n\n public payloadCount(): number {\n return this._payloads?.size ?? 0;\n }\n\n public forEachPayload(\n callback: (typeUrl: string, payload: PayloadValue) => void,\n ): void {\n if (!this._payloads) return;\n for (const [key, value] of this._payloads)\n callback(key, copyPayload(value));\n }\n\n public clone(): Status {\n const cloned = new Status(this._code, this._message);\n cloned._payloads = this.copyPayloads();\n return cloned;\n }\n\n public equals(other: unknown): boolean {\n if (\n !(other instanceof Status) ||\n this._code !== other._code ||\n this._message !== other._message\n )\n return false;\n if (this.payloadCount() !== other.payloadCount()) return false;\n if (!this._payloads) return true;\n for (const [key, value] of this._payloads) {\n const otherValue = other._payloads?.get(key);\n if (\n otherValue === undefined ||\n !payloadEquals(value, otherValue)\n )\n return false;\n }\n return true;\n }\n\n public toJSON(): StatusJSON {\n const json: StatusJSON = {\n ok: this.ok(),\n code: this._code,\n message: this._message,\n };\n if (this._payloads?.size) {\n const payloads: Record<string, string> = {};\n for (const [key, value] of this._payloads)\n payloads[key] =\n typeof value === \"string\" ? value : bytesToBase64(value);\n json.payloads = payloads;\n }\n return json;\n }\n\n public toError(): StatusError {\n return new StatusError(this.clone());\n }\n\n /** Supports `yield* status` in statusDo pipelines. */\n public *[Symbol.iterator](): Generator<\n StatusFailed,\n void,\n unknown\n > {\n if (this.ok()) return;\n yield this as StatusFailed;\n }\n\n public static ok(): StatusOk {\n return new Status() as StatusOk;\n }\n\n public static fromCode(\n code: StatusCode,\n message: string = \"\",\n payloads?: PayloadMap,\n ): Status {\n const status = new Status(code, message);\n if (payloads) applyPayloads(status, payloads);\n return status;\n }\n\n private copyPayloads(): Map<string, PayloadValue> | undefined {\n if (!this._payloads?.size) return undefined;\n return new Map(\n Array.from(this._payloads, ([key, value]) => [\n key,\n copyPayload(value),\n ]),\n );\n }\n}\n\nfunction payloadEquals(\n left: PayloadValue,\n right: PayloadValue,\n): boolean {\n if (typeof left === \"string\" || typeof right === \"string\")\n return (\n typeof left === \"string\" &&\n typeof right === \"string\" &&\n left === right\n );\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nfunction applyPayloads(status: Status, payloads: PayloadMap): void {\n if (isReadonlyMap(payloads)) {\n for (const [key, value] of payloads)\n status.setPayload(key, value);\n return;\n }\n for (const [key, value] of Object.entries(payloads))\n status.setPayload(key, value);\n}\n\nfunction isReadonlyMap(\n value: PayloadMap,\n): value is ReadonlyMap<string, PayloadValue> {\n const candidate = value as ReadonlyMap<string, PayloadValue>;\n return (\n typeof candidate.entries === \"function\" &&\n typeof candidate[Symbol.iterator] === \"function\"\n );\n}\n\nexport function OkStatus(): StatusOk {\n return Status.ok();\n}\n\nfunction createErrorHelper(code: Exclude<StatusCode, \"OK\">) {\n return (\n message: string = \"\",\n payloads?: PayloadMap,\n ): StatusFailed => {\n const status = new Status(code, message);\n if (payloads) applyPayloads(status, payloads);\n return status as StatusFailed;\n };\n}\n\nexport const CancelledError = createErrorHelper(StatusCode.CANCELLED);\nexport const UnknownError = createErrorHelper(StatusCode.UNKNOWN);\nexport const InvalidArgumentError = createErrorHelper(\n StatusCode.INVALID_ARGUMENT,\n);\nexport const DeadlineExceededError = createErrorHelper(\n StatusCode.DEADLINE_EXCEEDED,\n);\nexport const NotFoundError = createErrorHelper(StatusCode.NOT_FOUND);\nexport const AlreadyExistsError = createErrorHelper(\n StatusCode.ALREADY_EXISTS,\n);\nexport const PermissionDeniedError = createErrorHelper(\n StatusCode.PERMISSION_DENIED,\n);\nexport const ResourceExhaustedError = createErrorHelper(\n StatusCode.RESOURCE_EXHAUSTED,\n);\nexport const FailedPreconditionError = createErrorHelper(\n StatusCode.FAILED_PRECONDITION,\n);\nexport const AbortedError = createErrorHelper(StatusCode.ABORTED);\nexport const OutOfRangeError = createErrorHelper(\n StatusCode.OUT_OF_RANGE,\n);\nexport const UnimplementedError = createErrorHelper(\n StatusCode.UNIMPLEMENTED,\n);\nexport const InternalError = createErrorHelper(StatusCode.INTERNAL);\nexport const UnavailableError = createErrorHelper(\n StatusCode.UNAVAILABLE,\n);\nexport const DataLossError = createErrorHelper(StatusCode.DATA_LOSS);\nexport const UnauthenticatedError = createErrorHelper(\n StatusCode.UNAUTHENTICATED,\n);\n","import { Status, type StatusFailed } from \"./status.js\";\n\n/** Shared brand for failure sentinels. */\nexport const FAILURE_SYMBOL = Symbol.for(\"absl.status.failure\");\n\nexport interface FailureBrand {\n readonly [FAILURE_SYMBOL]: StatusFailed;\n}\n\n/** Returns the failure status carried by a branded value. */\nexport function getBrandedFailureStatus(\n value: unknown,\n): StatusFailed | undefined {\n if (\n (typeof value !== \"object\" && typeof value !== \"function\") ||\n value === null\n )\n return undefined;\n try {\n if (!(FAILURE_SYMBOL in value)) return undefined;\n const status = (value as FailureBrand)[FAILURE_SYMBOL];\n return status instanceof Status && !status.ok()\n ? (status as StatusFailed)\n : undefined;\n } catch {\n return undefined;\n }\n}\n","import {\n Status,\n type StatusFailed,\n type StatusJSON,\n} from \"./status.js\";\nimport { getBrandedFailureStatus } from \"./failure-brand.js\";\n\nexport interface StatusOrJSON<T> extends StatusJSON {\n value?: T | undefined;\n}\n\nexport type StatusOrOk<T> = StatusOr<T> & { ok(): true; value(): T };\n\n/** A tagged union containing exactly one value T or one non-OK Status. */\nexport class StatusOr<T> {\n private readonly _status: Status;\n private readonly _value: T | undefined;\n\n private constructor(status: Status, value?: T) {\n this._status = status;\n this._value = value;\n }\n\n public static ok<T>(value: T): StatusOr<T> {\n const failureStatus = getBrandedFailureStatus(value);\n if (failureStatus) return StatusOr.fromStatus<T>(failureStatus);\n return new StatusOr<T>(Status.ok(), value);\n }\n\n public static fromStatus<T = never>(status: Status): StatusOr<T> {\n if (status.ok())\n throw new RangeError(\n \"StatusOr cannot be constructed from an OK Status without a value\",\n );\n return new StatusOr<T>(status.clone());\n }\n\n public static all<T extends readonly unknown[] | []>(\n values: T,\n ): StatusOr<{\n [K in keyof T]: T[K] extends StatusOr<infer V> ? V : T[K];\n }> {\n const results: unknown[] = [];\n for (const item of values) {\n const failureStatus = getBrandedFailureStatus(item);\n if (failureStatus) return StatusOr.fromStatus(failureStatus);\n if (item instanceof StatusOr) {\n if (!item.ok()) return StatusOr.fromStatus(item.status());\n results.push(item._value);\n } else {\n results.push(item);\n }\n }\n return StatusOr.ok(\n results as {\n [K in keyof T]: T[K] extends StatusOr<infer V> ? V : T[K];\n },\n );\n }\n\n public ok(): this is StatusOrOk<T> {\n return this._status.ok();\n }\n\n public code(): ReturnType<Status[\"code\"]> {\n return this._status.code();\n }\n\n public message(): string {\n return this._status.message();\n }\n\n public status(): Status {\n return this._status.clone();\n }\n\n public value(): T {\n if (!this.ok()) throw this._status.toError();\n return this._value as T;\n }\n\n public valueOr(defaultValue: T): T {\n return this.ok() ? (this._value as T) : defaultValue;\n }\n\n public valueOrCompute(\n computeFallback: (status: StatusFailed) => T,\n ): T {\n return this.ok()\n ? (this._value as T)\n : computeFallback(this._status.clone() as StatusFailed);\n }\n\n public transform<U>(fn: (value: T) => U): StatusOr<U> {\n return this.ok()\n ? StatusOr.ok(fn(this._value as T))\n : StatusOr.fromStatus(this._status);\n }\n\n public andThen<U>(fn: (value: T) => StatusOr<U>): StatusOr<U> {\n return this.ok()\n ? fn(this._value as T)\n : StatusOr.fromStatus(this._status);\n }\n\n public match<R>(handlers: {\n ok: (value: T) => R;\n err: (status: StatusFailed) => R;\n }): R {\n return this.ok()\n ? handlers.ok(this._value as T)\n : handlers.err(this._status.clone() as StatusFailed);\n }\n\n public *[Symbol.iterator](): Generator<StatusFailed, T, unknown> {\n if (this.ok()) return this._value as T;\n yield this._status.clone() as StatusFailed;\n return undefined as never;\n }\n\n public toString(): string {\n if (!this.ok()) return this._status.toString();\n if (this._value === undefined) return \"OK\";\n try {\n return `OK: ${JSON.stringify(this._value)}`;\n } catch {\n return \"OK: [unserializable value]\";\n }\n }\n\n public toJSON(): StatusOrJSON<T> {\n if (!this.ok()) return this._status.toJSON();\n return {\n ok: true,\n code: this._status.code(),\n message: \"\",\n value: this._value,\n };\n }\n\n public clone(): StatusOr<T> {\n return this.ok()\n ? StatusOr.ok(this._value as T)\n : StatusOr.fromStatus(this._status);\n }\n\n public equals(other: unknown): boolean {\n if (!(other instanceof StatusOr) || this.ok() !== other.ok())\n return false;\n if (!this.ok()) return this._status.equals(other._status);\n return Object.is(this._value, other._value);\n }\n}\n\nexport function statusOr<T>(value: T): StatusOr<T> {\n return StatusOr.ok(value);\n}\n\nexport function statusOrError<T = never>(\n status: StatusFailed,\n): StatusOr<T> {\n return StatusOr.fromStatus<T>(status);\n}\n","import { Status, type StatusFailed } from \"./status.js\";\nimport { StatusCode } from \"./status-code.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { StatusError } from \"./errors.js\";\nimport {\n FAILURE_SYMBOL,\n getBrandedFailureStatus,\n} from \"./failure-brand.js\";\n\nexport { FAILURE_SYMBOL } from \"./failure-brand.js\";\n\nexport interface FailureSentinel {\n readonly [FAILURE_SYMBOL]: StatusFailed;\n ok(): false;\n status(): StatusFailed;\n code(): StatusCode;\n message(): string;\n toString(): string;\n [Symbol.iterator](): Generator<StatusFailed, never, unknown>;\n}\n\n/** Returns whether a value is a valid failure sentinel. */\nexport function isFailureSentinel(\n value: unknown,\n): value is FailureSentinel {\n if (!getBrandedFailureStatus(value)) return false;\n try {\n const candidate = value as FailureSentinel;\n return (\n typeof candidate.ok === \"function\" &&\n typeof candidate.status === \"function\" &&\n typeof candidate.code === \"function\" &&\n typeof candidate.message === \"function\" &&\n typeof candidate.toString === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/** Returns the failure status carried by a supported result object. */\nexport function getFailureStatus(\n value: unknown,\n): StatusFailed | undefined {\n const brandedStatus = getBrandedFailureStatus(value);\n if (brandedStatus) return brandedStatus;\n if (value instanceof Status) {\n if (!value.ok()) return value as StatusFailed;\n return undefined;\n }\n if (value instanceof StatusOr) {\n if (!value.ok()) return value.status() as StatusFailed;\n return undefined;\n }\n return undefined;\n}\n\n/** Creates a failure sentinel carrying a non-OK status. */\nexport function failure<T = never>(status: Status): T {\n if (status.ok())\n throw new RangeError(\n \"Failure sentinel cannot be created from an OK Status\",\n );\n\n const base: FailureSentinel = {\n [FAILURE_SYMBOL]: status as StatusFailed,\n ok() {\n return false;\n },\n status() {\n return status as StatusFailed;\n },\n code() {\n return status.code();\n },\n message() {\n return status.message();\n },\n toString() {\n return status.toString();\n },\n *[Symbol.iterator](): Generator<StatusFailed, never, unknown> {\n return throwFailureMisuse(\n status,\n \"iterate the failed result without ensureOk()\",\n );\n },\n };\n\n return new Proxy(base, {\n get(target, prop, receiver) {\n if (prop in target || prop === FAILURE_SYMBOL)\n return Reflect.get(target, prop, receiver);\n if (prop === \"then\") return undefined;\n if (prop === Symbol.toPrimitive)\n return () =>\n throwFailureMisuse(\n status,\n \"coerce the failed result to a primitive\",\n );\n if (typeof prop === \"symbol\") return undefined;\n return throwFailureMisuse(\n status,\n `read business property ${JSON.stringify(prop)}`,\n );\n },\n set(_target, prop) {\n return throwFailureMisuse(\n status,\n `write business property ${JSON.stringify(String(prop))}`,\n );\n },\n deleteProperty(_target, prop) {\n return throwFailureMisuse(\n status,\n `delete business property ${JSON.stringify(String(prop))}`,\n );\n },\n defineProperty(_target, prop) {\n return throwFailureMisuse(\n status,\n `define business property ${JSON.stringify(String(prop))}`,\n );\n },\n has(target, prop) {\n if (prop in target) return true;\n if (prop === \"then\" || typeof prop === \"symbol\") return false;\n return throwFailureMisuse(\n status,\n `check business property ${JSON.stringify(prop)}`,\n );\n },\n ownKeys() {\n return throwFailureMisuse(\n status,\n \"enumerate or spread the failed result\",\n );\n },\n }) as unknown as T;\n}\n\nfunction throwFailureMisuse(status: Status, action: string): never {\n const error = new StatusError(status.clone());\n error.message =\n `Failure result used as a successful value: attempted to ${action}. ` +\n \"Check it with hasError() or ensureOk() first. \" +\n `Original status: ${status.toString()}`;\n throw error;\n}\n\nexport const failureSentinel = failure;\nexport const createFailure = failure;\n\n/** Proxies non-conflicting properties from a successful StatusOr value. */\nexport type StatusOrProxy<T> = StatusOr<T> &\n (T extends object ? Omit<T, keyof StatusOr<T>> : unknown);\n\nexport function asProxy<T>(statusOr: StatusOr<T>): StatusOrProxy<T> {\n return new Proxy(statusOr, {\n get(target, prop, receiver) {\n if (prop in target || typeof prop === \"symbol\") {\n const val = Reflect.get(target, prop, receiver);\n if (typeof val === \"function\") return val.bind(target);\n return val;\n }\n if (target.ok()) {\n const inner = target.value() as any;\n if (\n inner !== null &&\n inner !== undefined &&\n (typeof inner === \"object\" || typeof inner === \"function\")\n ) {\n const val = Reflect.get(inner, prop, inner);\n if (typeof val === \"function\") return val.bind(inner);\n return val;\n }\n }\n return undefined;\n },\n has(target, prop) {\n if (prop in target) return true;\n if (target.ok()) {\n const inner = target.value() as any;\n if (\n inner !== null &&\n inner !== undefined &&\n (typeof inner === \"object\" || typeof inner === \"function\")\n )\n return prop in inner;\n }\n return false;\n },\n }) as StatusOrProxy<T>;\n}\n","import {\n InternalError,\n Status,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { FAILURE_SYMBOL, isFailureSentinel } from \"./sentinel.js\";\n\ntype StatusDoResult<T> = T | StatusOr<T> | StatusFailed;\n\n/** Unwraps a successful result or yields its failure to the pipeline. */\nexport function ensureOk(\n status: Status,\n): Generator<StatusFailed, void, unknown>;\nexport function ensureOk<T>(\n statusOr: StatusOr<T>,\n): Generator<StatusFailed, T, unknown>;\nexport function ensureOk<T>(\n target: T,\n): Generator<StatusFailed, T, unknown>;\nexport function* ensureOk<T = void>(\n target: unknown,\n): Generator<StatusFailed, T, unknown> {\n if (target instanceof Status) {\n if (!target.ok()) yield target as StatusFailed;\n return undefined as T;\n }\n if (target instanceof StatusOr) {\n if (!target.ok()) yield target.status() as StatusFailed;\n return target.value() as T;\n }\n if (isFailureSentinel(target)) {\n yield target[FAILURE_SYMBOL];\n return undefined as never;\n }\n return target as T;\n}\n\nexport const EnsureOk = ensureOk;\nexport const checkStatus = ensureOk;\nexport const CheckStatus = ensureOk;\n\n/** Runs a synchronous generator pipeline and stops at the first failure. */\nexport function statusDo<T>(\n generatorFn: () => Generator<\n StatusFailed,\n StatusDoResult<T>,\n unknown\n >,\n): StatusOr<T> {\n const iterator = generatorFn();\n const step = iterator.next();\n if (!step.done) {\n try {\n if (isFailureSentinel(step.value))\n return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);\n return StatusOr.fromStatus(step.value);\n } finally {\n iterator.return?.(undefined as never);\n }\n }\n return normalizeResult(step.value, \"statusDo\");\n}\n\n/** Runs an asynchronous generator pipeline and stops at the first failure. */\nexport async function statusDoAsync<T>(\n generatorFn: () => AsyncGenerator<\n StatusFailed,\n StatusDoResult<T>,\n unknown\n >,\n): Promise<StatusOr<T>> {\n const iterator = generatorFn();\n const step = await iterator.next();\n if (!step.done) {\n try {\n if (isFailureSentinel(step.value))\n return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);\n return StatusOr.fromStatus(step.value);\n } finally {\n await iterator.return?.(undefined as never);\n }\n }\n return normalizeResult(step.value, \"statusDoAsync\");\n}\n\nfunction normalizeResult<T>(\n result: StatusDoResult<T>,\n source: string,\n): StatusOr<T> {\n if (result instanceof StatusOr) return result;\n if (isFailureSentinel(result))\n return StatusOr.fromStatus(result[FAILURE_SYMBOL]);\n if (result instanceof Status) {\n if (result.ok())\n return StatusOr.fromStatus(\n InternalError(\n `${source} cannot return an OK Status without a value`,\n ),\n );\n return StatusOr.fromStatus(result as StatusFailed);\n }\n return StatusOr.ok(result);\n}\n","import { StatusCode } from \"./status-code.js\";\nimport {\n Status,\n type StatusOk,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr, type StatusOrOk } from \"./status-or.js\";\nimport { isFailureSentinel } from \"./sentinel.js\";\n\nexport interface ErrorCarrier {\n status(): StatusFailed;\n ok(): false;\n code(): StatusCode;\n message(): string;\n toString(): string;\n}\n\nfunction extractStatusCode(target: unknown): StatusCode | undefined {\n if (target === null || target === undefined) return undefined;\n if (target instanceof Status || target instanceof StatusOr)\n return target.code();\n if (typeof (target as any).code === \"function\") {\n const res = (target as any).code();\n if (isStatusCode(res)) return res as StatusCode;\n }\n if (isStatusCode((target as any).code))\n return (target as any).code as StatusCode;\n return undefined;\n}\n\nconst statusCodes = new Set<string>(Object.values(StatusCode));\n\nfunction isStatusCode(value: unknown): value is StatusCode {\n return typeof value === \"string\" && statusCodes.has(value);\n}\n\n/** Returns whether a Status or StatusOr is OK. */\nexport function isOk(target: Status): target is StatusOk;\nexport function isOk<T>(target: StatusOr<T>): target is StatusOrOk<T>;\nexport function isOk(target: unknown): boolean;\nexport function isOk(target: unknown): boolean {\n const code = extractStatusCode(target);\n if (code === undefined) return false;\n return code === StatusCode.OK;\n}\n\n/** Returns whether a supported result object carries a failure. */\nexport function hasError(target: unknown): target is ErrorCarrier {\n if (target === null || target === undefined) return false;\n if (target instanceof Status) return !target.ok();\n if (target instanceof StatusOr) return !target.ok();\n if (isFailureSentinel(target)) return true;\n return false;\n}\n\nfunction createPredicate(expectedCode: StatusCode) {\n return (target: unknown): boolean => {\n const code = extractStatusCode(target);\n if (code === undefined) return false;\n return code === expectedCode;\n };\n}\n\nexport const isCancelled = createPredicate(StatusCode.CANCELLED);\nexport const isUnknown = createPredicate(StatusCode.UNKNOWN);\nexport const isInvalidArgument = createPredicate(\n StatusCode.INVALID_ARGUMENT,\n);\nexport const isDeadlineExceeded = createPredicate(\n StatusCode.DEADLINE_EXCEEDED,\n);\nexport const isNotFound = createPredicate(StatusCode.NOT_FOUND);\nexport const isAlreadyExists = createPredicate(\n StatusCode.ALREADY_EXISTS,\n);\nexport const isPermissionDenied = createPredicate(\n StatusCode.PERMISSION_DENIED,\n);\nexport const isResourceExhausted = createPredicate(\n StatusCode.RESOURCE_EXHAUSTED,\n);\nexport const isFailedPrecondition = createPredicate(\n StatusCode.FAILED_PRECONDITION,\n);\nexport const isAborted = createPredicate(StatusCode.ABORTED);\nexport const isOutOfRange = createPredicate(StatusCode.OUT_OF_RANGE);\nexport const isUnimplemented = createPredicate(\n StatusCode.UNIMPLEMENTED,\n);\nexport const isInternal = createPredicate(StatusCode.INTERNAL);\nexport const isUnavailable = createPredicate(StatusCode.UNAVAILABLE);\nexport const isDataLoss = createPredicate(StatusCode.DATA_LOSS);\nexport const isUnauthenticated = createPredicate(\n StatusCode.UNAUTHENTICATED,\n);\n","import {\n Status,\n InternalError,\n UnknownError,\n InvalidArgumentError,\n OutOfRangeError,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { StatusError } from \"./errors.js\";\nimport { getBrandedFailureStatus } from \"./failure-brand.js\";\n\n/** Converts a thrown JavaScript value into a non-OK Status. */\nexport function fromError(error: unknown): StatusFailed {\n const failureStatus = getBrandedFailureStatus(error);\n if (failureStatus) return failureStatus;\n if (error instanceof Status)\n return error.ok()\n ? InternalError(\"Caught an OK Status as an error\")\n : (error as StatusFailed);\n if (error instanceof StatusError)\n return error.status.ok()\n ? InternalError(\"Caught a StatusError containing an OK Status\")\n : (error.status as StatusFailed);\n if (error instanceof RangeError)\n return OutOfRangeError(error.message);\n if (error instanceof TypeError)\n return InvalidArgumentError(error.message);\n if (error instanceof Error) return UnknownError(error.message);\n if (typeof error === \"string\") return UnknownError(error);\n return UnknownError(String(error));\n}\n\n/** Runs a function and converts thrown values into a StatusOr failure. */\nexport function tryCatch<T>(\n fn: () => T,\n mapper?: (error: unknown) => Status,\n): StatusOr<T> {\n try {\n return StatusOr.ok(fn());\n } catch (err: unknown) {\n const status = mapper ? mapper(err) : fromError(err);\n return StatusOr.fromStatus(\n status.ok()\n ? InternalError(\"tryCatch mapper returned an OK Status\")\n : status,\n );\n }\n}\n\n/** Runs an async function and converts rejections into a StatusOr failure. */\nexport async function tryCatchAsync<T>(\n fn: () => Promise<T>,\n mapper?: (error: unknown) => Status,\n): Promise<StatusOr<T>> {\n try {\n return StatusOr.ok(await fn());\n } catch (err: unknown) {\n const status = mapper ? mapper(err) : fromError(err);\n return StatusOr.fromStatus(\n status.ok()\n ? InternalError(\"tryCatchAsync mapper returned an OK Status\")\n : status,\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/status-code.ts","../src/errors.ts","../src/status.ts","../src/failure-brand.ts","../src/status-or.ts","../src/sentinel.ts","../src/do.ts","../src/predicates.ts","../src/interop.ts"],"names":["statusOr"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Canonical status error codes matching Abseil / gRPC standard error codes.\n */\nexport const StatusCode = {\n OK: \"OK\",\n CANCELLED: \"CANCELLED\",\n UNKNOWN: \"UNKNOWN\",\n INVALID_ARGUMENT: \"INVALID_ARGUMENT\",\n DEADLINE_EXCEEDED: \"DEADLINE_EXCEEDED\",\n NOT_FOUND: \"NOT_FOUND\",\n ALREADY_EXISTS: \"ALREADY_EXISTS\",\n PERMISSION_DENIED: \"PERMISSION_DENIED\",\n RESOURCE_EXHAUSTED: \"RESOURCE_EXHAUSTED\",\n FAILED_PRECONDITION: \"FAILED_PRECONDITION\",\n ABORTED: \"ABORTED\",\n OUT_OF_RANGE: \"OUT_OF_RANGE\",\n UNIMPLEMENTED: \"UNIMPLEMENTED\",\n INTERNAL: \"INTERNAL\",\n UNAVAILABLE: \"UNAVAILABLE\",\n DATA_LOSS: \"DATA_LOSS\",\n UNAUTHENTICATED: \"UNAUTHENTICATED\",\n} as const;\n\nexport type StatusCode = (typeof StatusCode)[keyof typeof StatusCode];\n","import type { Status } from \"./status.js\";\nimport type { StatusCode } from \"./status-code.js\";\n\n/** A native Error carrying a Status. */\nexport class StatusError extends Error {\n public readonly status: Status;\n\n constructor(status: Status) {\n super(status.toString());\n this.name = \"StatusError\";\n this.status = status;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n public get code(): StatusCode {\n return this.status.code();\n }\n}\n","import { StatusCode } from \"./status-code.js\";\nimport { StatusError } from \"./errors.js\";\n\nexport type PayloadValue = Uint8Array | string;\nexport type PayloadMap =\n | Readonly<Record<string, PayloadValue>>\n | ReadonlyMap<string, PayloadValue>;\n\nexport interface StatusJSON {\n ok: boolean;\n code: StatusCode;\n message: string;\n payloads?: Record<string, string> | undefined;\n}\n\nexport type StatusOk = Status & { ok(): true };\nexport type StatusFailed = Status & { ok(): false };\n\nfunction copyPayload(value: PayloadValue): PayloadValue {\n return typeof value === \"string\" ? value : value.slice();\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n let result = \"\";\n for (let i = 0; i < bytes.length; i += 3) {\n const b0 = bytes[i]!;\n const b1 = i + 1 < bytes.length ? bytes[i + 1]! : 0;\n const b2 = i + 2 < bytes.length ? bytes[i + 2]! : 0;\n result += chars[(b0 >> 2) & 0x3f];\n result += chars[((b0 & 0x03) << 4) | ((b1 >> 4) & 0x0f)];\n result +=\n i + 1 < bytes.length\n ? chars[((b1 & 0x0f) << 2) | ((b2 >> 6) & 0x03)]\n : \"=\";\n result += i + 2 < bytes.length ? chars[b2 & 0x3f] : \"=\";\n }\n return result;\n}\n\n/**\n * Represents either success or a canonical error. It never carries a\n * business value.\n */\nexport class Status {\n private _code: StatusCode;\n private _message: string;\n private _payloads: Map<string, PayloadValue> | undefined;\n\n public constructor(\n code: StatusCode = StatusCode.OK,\n message: string = \"\",\n ) {\n this._code = code;\n this._message = code === StatusCode.OK ? \"\" : message;\n }\n\n public ok(): this is StatusOk {\n return this._code === StatusCode.OK;\n }\n\n public code(): StatusCode {\n return this._code;\n }\n\n public message(): string {\n return this._message;\n }\n\n public status(): Status {\n return this;\n }\n\n public setMessage(message: string): void {\n if (!this.ok()) this._message = message;\n }\n\n public toString(): string {\n if (this.ok()) return \"OK\";\n return this._message.length === 0\n ? this._code\n : `${this._code}: ${this._message}`;\n }\n\n /** Keeps the first non-OK status, matching absl::Status::Update. */\n public update(other: Status): this {\n if (!this.ok()) return this;\n this._code = other._code;\n this._message = other._message;\n this._payloads = other.copyPayloads();\n return this;\n }\n\n public setPayload(typeUrl: string, payload: PayloadValue): void {\n if (this.ok()) return;\n this._payloads ??= new Map();\n this._payloads.set(typeUrl, copyPayload(payload));\n }\n\n public getPayload(typeUrl: string): PayloadValue | undefined {\n const payload = this._payloads?.get(typeUrl);\n return payload === undefined ? undefined : copyPayload(payload);\n }\n\n public hasPayload(typeUrl: string): boolean {\n return this._payloads?.has(typeUrl) ?? false;\n }\n\n public erasePayload(typeUrl: string): boolean {\n if (!this._payloads) return false;\n const deleted = this._payloads.delete(typeUrl);\n if (this._payloads.size === 0) this._payloads = undefined;\n return deleted;\n }\n\n public clearPayloads(): void {\n this._payloads = undefined;\n }\n\n public payloadCount(): number {\n return this._payloads?.size ?? 0;\n }\n\n public forEachPayload(\n callback: (typeUrl: string, payload: PayloadValue) => void,\n ): void {\n if (!this._payloads) return;\n for (const [key, value] of this._payloads)\n callback(key, copyPayload(value));\n }\n\n public clone(): Status {\n const cloned = new Status(this._code, this._message);\n cloned._payloads = this.copyPayloads();\n return cloned;\n }\n\n public equals(other: unknown): boolean {\n if (\n !(other instanceof Status) ||\n this._code !== other._code ||\n this._message !== other._message\n )\n return false;\n if (this.payloadCount() !== other.payloadCount()) return false;\n if (!this._payloads) return true;\n for (const [key, value] of this._payloads) {\n const otherValue = other._payloads?.get(key);\n if (\n otherValue === undefined ||\n !payloadEquals(value, otherValue)\n )\n return false;\n }\n return true;\n }\n\n public toJSON(): StatusJSON {\n const json: StatusJSON = {\n ok: this.ok(),\n code: this._code,\n message: this._message,\n };\n if (this._payloads?.size) {\n const payloads: Record<string, string> = {};\n for (const [key, value] of this._payloads)\n payloads[key] =\n typeof value === \"string\" ? value : bytesToBase64(value);\n json.payloads = payloads;\n }\n return json;\n }\n\n public toError(): StatusError {\n return new StatusError(this.clone());\n }\n\n /** Supports `yield* status` in statusDo pipelines. */\n public *[Symbol.iterator](): Generator<\n StatusFailed,\n void,\n unknown\n > {\n if (this.ok()) return;\n yield this as StatusFailed;\n }\n\n public static ok(): StatusOk {\n return new Status() as StatusOk;\n }\n\n public static fromCode(\n code: StatusCode,\n message: string = \"\",\n payloads?: PayloadMap,\n ): Status {\n const status = new Status(code, message);\n if (payloads) applyPayloads(status, payloads);\n return status;\n }\n\n private copyPayloads(): Map<string, PayloadValue> | undefined {\n if (!this._payloads?.size) return undefined;\n return new Map(\n Array.from(this._payloads, ([key, value]) => [\n key,\n copyPayload(value),\n ]),\n );\n }\n}\n\nfunction payloadEquals(\n left: PayloadValue,\n right: PayloadValue,\n): boolean {\n if (typeof left === \"string\" || typeof right === \"string\")\n return (\n typeof left === \"string\" &&\n typeof right === \"string\" &&\n left === right\n );\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nfunction applyPayloads(status: Status, payloads: PayloadMap): void {\n if (isReadonlyMap(payloads)) {\n for (const [key, value] of payloads)\n status.setPayload(key, value);\n return;\n }\n for (const [key, value] of Object.entries(payloads))\n status.setPayload(key, value);\n}\n\nfunction isReadonlyMap(\n value: PayloadMap,\n): value is ReadonlyMap<string, PayloadValue> {\n const candidate = value as ReadonlyMap<string, PayloadValue>;\n return (\n typeof candidate.entries === \"function\" &&\n typeof candidate[Symbol.iterator] === \"function\"\n );\n}\n\nexport function OkStatus(): StatusOk {\n return Status.ok();\n}\n\nfunction createErrorHelper(code: Exclude<StatusCode, \"OK\">) {\n return (\n message: string = \"\",\n payloads?: PayloadMap,\n ): StatusFailed => {\n const status = new Status(code, message);\n if (payloads) applyPayloads(status, payloads);\n return status as StatusFailed;\n };\n}\n\nexport const CancelledError = createErrorHelper(StatusCode.CANCELLED);\nexport const UnknownError = createErrorHelper(StatusCode.UNKNOWN);\nexport const InvalidArgumentError = createErrorHelper(\n StatusCode.INVALID_ARGUMENT,\n);\nexport const DeadlineExceededError = createErrorHelper(\n StatusCode.DEADLINE_EXCEEDED,\n);\nexport const NotFoundError = createErrorHelper(StatusCode.NOT_FOUND);\nexport const AlreadyExistsError = createErrorHelper(\n StatusCode.ALREADY_EXISTS,\n);\nexport const PermissionDeniedError = createErrorHelper(\n StatusCode.PERMISSION_DENIED,\n);\nexport const ResourceExhaustedError = createErrorHelper(\n StatusCode.RESOURCE_EXHAUSTED,\n);\nexport const FailedPreconditionError = createErrorHelper(\n StatusCode.FAILED_PRECONDITION,\n);\nexport const AbortedError = createErrorHelper(StatusCode.ABORTED);\nexport const OutOfRangeError = createErrorHelper(\n StatusCode.OUT_OF_RANGE,\n);\nexport const UnimplementedError = createErrorHelper(\n StatusCode.UNIMPLEMENTED,\n);\nexport const InternalError = createErrorHelper(StatusCode.INTERNAL);\nexport const UnavailableError = createErrorHelper(\n StatusCode.UNAVAILABLE,\n);\nexport const DataLossError = createErrorHelper(StatusCode.DATA_LOSS);\nexport const UnauthenticatedError = createErrorHelper(\n StatusCode.UNAUTHENTICATED,\n);\n","import { Status, type StatusFailed } from \"./status.js\";\n\n/** Shared brand for failure sentinels. */\nexport const FAILURE_SYMBOL = Symbol.for(\"absl.status.failure\");\n\nexport interface FailureBrand {\n readonly [FAILURE_SYMBOL]: StatusFailed;\n}\n\n/** Returns the failure status carried by a branded value. */\nexport function getBrandedFailureStatus(\n value: unknown,\n): StatusFailed | undefined {\n if (\n (typeof value !== \"object\" && typeof value !== \"function\") ||\n value === null\n )\n return undefined;\n try {\n if (!(FAILURE_SYMBOL in value)) return undefined;\n const status = (value as FailureBrand)[FAILURE_SYMBOL];\n return status instanceof Status && !status.ok()\n ? (status as StatusFailed)\n : undefined;\n } catch {\n return undefined;\n }\n}\n","import {\n Status,\n type StatusFailed,\n type StatusJSON,\n} from \"./status.js\";\nimport { getBrandedFailureStatus } from \"./failure-brand.js\";\n\nexport interface StatusOrJSON<T> extends StatusJSON {\n value?: T | undefined;\n}\n\nexport type StatusOrOk<T> = StatusOr<T> & { ok(): true; value(): T };\n\n/** A tagged union containing exactly one value T or one non-OK Status. */\nexport class StatusOr<T> {\n private readonly _status: Status;\n private readonly _value: T | undefined;\n\n private constructor(status: Status, value?: T) {\n this._status = status;\n this._value = value;\n }\n\n public static ok<T>(value: T): StatusOr<T> {\n const failureStatus = getBrandedFailureStatus(value);\n if (failureStatus) return StatusOr.fromStatus<T>(failureStatus);\n return new StatusOr<T>(Status.ok(), value);\n }\n\n public static fromStatus<T = never>(status: Status): StatusOr<T> {\n if (status.ok())\n throw new RangeError(\n \"StatusOr cannot be constructed from an OK Status without a value\",\n );\n return new StatusOr<T>(status.clone());\n }\n\n public static all<T extends readonly unknown[] | []>(\n values: T,\n ): StatusOr<{\n [K in keyof T]: T[K] extends StatusOr<infer V> ? V : T[K];\n }> {\n const results: unknown[] = [];\n for (const item of values) {\n const failureStatus = getBrandedFailureStatus(item);\n if (failureStatus) return StatusOr.fromStatus(failureStatus);\n if (item instanceof StatusOr) {\n if (!item.ok()) return StatusOr.fromStatus(item.status());\n results.push(item._value);\n continue;\n }\n results.push(item);\n }\n return StatusOr.ok(\n results as {\n [K in keyof T]: T[K] extends StatusOr<infer V> ? V : T[K];\n },\n );\n }\n\n public ok(): this is StatusOrOk<T> {\n return this._status.ok();\n }\n\n public code(): ReturnType<Status[\"code\"]> {\n return this._status.code();\n }\n\n public message(): string {\n return this._status.message();\n }\n\n public status(): Status {\n return this._status.clone();\n }\n\n public value(): T {\n if (!this.ok()) throw this._status.toError();\n return this._value as T;\n }\n\n public valueOr(defaultValue: T): T {\n if (this.ok()) return this._value as T;\n return defaultValue;\n }\n\n public valueOrCompute(\n computeFallback: (status: StatusFailed) => T,\n ): T {\n if (this.ok()) return this._value as T;\n return computeFallback(this._status.clone() as StatusFailed);\n }\n\n public transform<U>(fn: (value: T) => U): StatusOr<U> {\n if (this.ok()) return StatusOr.ok(fn(this._value as T));\n return StatusOr.fromStatus(this._status);\n }\n\n public andThen<U>(fn: (value: T) => StatusOr<U>): StatusOr<U> {\n if (this.ok()) return fn(this._value as T);\n return StatusOr.fromStatus(this._status);\n }\n\n public match<R>(handlers: {\n ok: (value: T) => R;\n err: (status: StatusFailed) => R;\n }): R {\n if (this.ok()) return handlers.ok(this._value as T);\n return handlers.err(this._status.clone() as StatusFailed);\n }\n\n public *[Symbol.iterator](): Generator<StatusFailed, T, unknown> {\n if (this.ok()) return this._value as T;\n yield this._status.clone() as StatusFailed;\n return undefined as never;\n }\n\n public toString(): string {\n if (!this.ok()) return this._status.toString();\n if (this._value === undefined) return \"OK\";\n try {\n return `OK: ${JSON.stringify(this._value)}`;\n } catch {\n return \"OK: [unserializable value]\";\n }\n }\n\n public toJSON(): StatusOrJSON<T> {\n if (!this.ok()) return this._status.toJSON();\n return {\n ok: true,\n code: this._status.code(),\n message: \"\",\n value: this._value,\n };\n }\n\n public clone(): StatusOr<T> {\n if (this.ok()) return StatusOr.ok(this._value as T);\n return StatusOr.fromStatus(this._status);\n }\n\n public equals(other: unknown): boolean {\n if (!(other instanceof StatusOr) || this.ok() !== other.ok())\n return false;\n if (!this.ok()) return this._status.equals(other._status);\n return Object.is(this._value, other._value);\n }\n}\n\nexport function statusOr<T>(value: T): StatusOr<T> {\n return StatusOr.ok(value);\n}\n\nexport function statusOrError<T = never>(\n status: StatusFailed,\n): StatusOr<T> {\n return StatusOr.fromStatus<T>(status);\n}\n","import { Status, type StatusFailed } from \"./status.js\";\nimport { StatusCode } from \"./status-code.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { StatusError } from \"./errors.js\";\nimport {\n FAILURE_SYMBOL,\n getBrandedFailureStatus,\n} from \"./failure-brand.js\";\n\nexport { FAILURE_SYMBOL } from \"./failure-brand.js\";\n\nexport interface FailureSentinel {\n readonly [FAILURE_SYMBOL]: StatusFailed;\n ok(): false;\n status(): StatusFailed;\n code(): StatusCode;\n message(): string;\n toString(): string;\n [Symbol.iterator](): Generator<StatusFailed, never, unknown>;\n}\n\n/** Returns whether a value is a valid failure sentinel. */\nexport function isFailureSentinel(\n value: unknown,\n): value is FailureSentinel {\n if (!getBrandedFailureStatus(value)) return false;\n try {\n const candidate = value as FailureSentinel;\n return (\n typeof candidate.ok === \"function\" &&\n typeof candidate.status === \"function\" &&\n typeof candidate.code === \"function\" &&\n typeof candidate.message === \"function\" &&\n typeof candidate.toString === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/** Returns the failure status carried by a supported result object. */\nexport function getFailureStatus(\n value: unknown,\n): StatusFailed | undefined {\n const brandedStatus = getBrandedFailureStatus(value);\n if (brandedStatus) return brandedStatus;\n if (value instanceof Status) {\n if (!value.ok()) return value as StatusFailed;\n return undefined;\n }\n if (value instanceof StatusOr) {\n if (!value.ok()) return value.status() as StatusFailed;\n return undefined;\n }\n return undefined;\n}\n\n/** Creates a failure sentinel carrying a non-OK status. */\nexport function failure<T = never>(status: Status): T {\n if (status.ok())\n throw new RangeError(\n \"Failure sentinel cannot be created from an OK Status\",\n );\n\n const base: FailureSentinel = {\n [FAILURE_SYMBOL]: status as StatusFailed,\n ok() {\n return false;\n },\n status() {\n return status as StatusFailed;\n },\n code() {\n return status.code();\n },\n message() {\n return status.message();\n },\n toString() {\n return status.toString();\n },\n *[Symbol.iterator](): Generator<StatusFailed, never, unknown> {\n return throwFailureMisuse(\n status,\n \"iterate the failed result without ensureOk()\",\n );\n },\n };\n\n return new Proxy(base, {\n get(target, prop, receiver) {\n if (prop in target || prop === FAILURE_SYMBOL)\n return Reflect.get(target, prop, receiver);\n if (prop === \"then\") return undefined;\n if (prop === Symbol.toPrimitive)\n return () =>\n throwFailureMisuse(\n status,\n \"coerce the failed result to a primitive\",\n );\n if (typeof prop === \"symbol\") return undefined;\n return throwFailureMisuse(\n status,\n `read business property ${JSON.stringify(prop)}`,\n );\n },\n set(_target, prop) {\n return throwFailureMisuse(\n status,\n `write business property ${JSON.stringify(String(prop))}`,\n );\n },\n deleteProperty(_target, prop) {\n return throwFailureMisuse(\n status,\n `delete business property ${JSON.stringify(String(prop))}`,\n );\n },\n defineProperty(_target, prop) {\n return throwFailureMisuse(\n status,\n `define business property ${JSON.stringify(String(prop))}`,\n );\n },\n has(target, prop) {\n if (prop in target) return true;\n if (prop === \"then\" || typeof prop === \"symbol\") return false;\n return throwFailureMisuse(\n status,\n `check business property ${JSON.stringify(prop)}`,\n );\n },\n ownKeys() {\n return throwFailureMisuse(\n status,\n \"enumerate or spread the failed result\",\n );\n },\n }) as unknown as T;\n}\n\nfunction throwFailureMisuse(status: Status, action: string): never {\n const error = new StatusError(status.clone());\n error.message =\n `Failure result used as a successful value: attempted to ${action}. ` +\n \"Check it with hasError() or ensureOk() first. \" +\n `Original status: ${status.toString()}`;\n throw error;\n}\n\nexport const failureSentinel = failure;\nexport const createFailure = failure;\n\n/** Proxies non-conflicting properties from a successful StatusOr value. */\nexport type StatusOrProxy<T> = StatusOr<T> &\n (T extends object ? Omit<T, keyof StatusOr<T>> : unknown);\n\nexport function asProxy<T>(statusOr: StatusOr<T>): StatusOrProxy<T> {\n return new Proxy(statusOr, {\n get(target, prop, receiver) {\n if (prop in target || typeof prop === \"symbol\") {\n const val = Reflect.get(target, prop, receiver);\n if (typeof val === \"function\") return val.bind(target);\n return val;\n }\n if (target.ok()) {\n const inner = target.value() as any;\n if (\n inner !== null &&\n inner !== undefined &&\n (typeof inner === \"object\" || typeof inner === \"function\")\n ) {\n const val = Reflect.get(inner, prop, inner);\n if (typeof val === \"function\") return val.bind(inner);\n return val;\n }\n }\n return undefined;\n },\n has(target, prop) {\n if (prop in target) return true;\n if (target.ok()) {\n const inner = target.value() as any;\n if (\n inner !== null &&\n inner !== undefined &&\n (typeof inner === \"object\" || typeof inner === \"function\")\n )\n return prop in inner;\n }\n return false;\n },\n }) as StatusOrProxy<T>;\n}\n","import { OkStatus, Status, type StatusFailed } from \"./status.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport {\n FAILURE_SYMBOL,\n type FailureSentinel,\n isFailureSentinel,\n} from \"./sentinel.js\";\n\nexport type StatusDoValue<T> =\n T extends StatusOr<infer U>\n ? U\n : T extends Status\n ? never\n : T extends FailureSentinel\n ? never\n : T;\n\nexport type StatusDoReturnType<R> = [StatusDoValue<R>] extends [never]\n ? Status\n : [StatusDoValue<R>] extends [void]\n ? Status\n : [StatusDoValue<R>] extends [undefined]\n ? Status\n : StatusOr<StatusDoValue<R>>;\n\n/** Unwraps a successful result or yields its failure to the pipeline. */\nexport function ensureOk(\n status: Status,\n): Generator<StatusFailed, void, unknown>;\nexport function ensureOk<T>(\n statusOr: StatusOr<T>,\n): Generator<StatusFailed, T, unknown>;\nexport function ensureOk<T>(\n target: T,\n): Generator<StatusFailed, T, unknown>;\nexport function* ensureOk<T = void>(\n target: unknown,\n): Generator<StatusFailed, T, unknown> {\n if (target instanceof StatusOr) {\n if (!target.ok()) yield target.status() as StatusFailed;\n return target.value() as T;\n }\n if (target instanceof Status) {\n if (!target.ok()) yield target as StatusFailed;\n return undefined as T;\n }\n if (isFailureSentinel(target)) {\n yield target[FAILURE_SYMBOL];\n return undefined as never;\n }\n return target as T;\n}\n\nexport const EnsureOk = ensureOk;\nexport const checkStatus = ensureOk;\nexport const CheckStatus = ensureOk;\n\n/** Runs a synchronous generator pipeline and stops at the first failure. */\nexport function statusDo(\n generatorFn: () => Generator<\n StatusFailed,\n void | Status | StatusFailed,\n unknown\n >,\n): Status;\nexport function statusDo<T>(\n generatorFn: () => Generator<StatusFailed, T, unknown>,\n): StatusDoReturnType<T>;\nexport function statusDo(\n generatorFn: () => Generator<StatusFailed, unknown, unknown>,\n): Status | StatusOr<unknown> {\n const iterator = generatorFn();\n const step = iterator.next();\n if (!step.done) {\n try {\n if (isFailureSentinel(step.value))\n return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);\n return StatusOr.fromStatus(step.value);\n } finally {\n iterator.return?.(undefined as never);\n }\n }\n return normalizeResult(step.value);\n}\n\n/** Runs an asynchronous generator pipeline and stops at the first failure. */\nexport function statusDoAsync(\n generatorFn: () => AsyncGenerator<\n StatusFailed,\n void | Status | StatusFailed,\n unknown\n >,\n): Promise<Status>;\nexport function statusDoAsync<T>(\n generatorFn: () => AsyncGenerator<StatusFailed, T, unknown>,\n): Promise<StatusDoReturnType<T>>;\nexport async function statusDoAsync(\n generatorFn: () => AsyncGenerator<StatusFailed, unknown, unknown>,\n): Promise<Status | StatusOr<unknown>> {\n const iterator = generatorFn();\n const step = await iterator.next();\n if (!step.done) {\n try {\n if (isFailureSentinel(step.value))\n return StatusOr.fromStatus(step.value[FAILURE_SYMBOL]);\n return StatusOr.fromStatus(step.value);\n } finally {\n await iterator.return?.(undefined as never);\n }\n }\n return normalizeResult(step.value);\n}\n\nfunction normalizeResult(\n result: unknown,\n): Status | StatusOr<unknown> {\n if (result === undefined) return OkStatus();\n if (result instanceof StatusOr) return result;\n if (isFailureSentinel(result))\n return StatusOr.fromStatus(result[FAILURE_SYMBOL]);\n if (result instanceof Status) {\n if (result.ok()) return result;\n return StatusOr.fromStatus(result as StatusFailed);\n }\n return StatusOr.ok(result);\n}\n","import { StatusCode } from \"./status-code.js\";\nimport {\n Status,\n type StatusOk,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr, type StatusOrOk } from \"./status-or.js\";\nimport { isFailureSentinel } from \"./sentinel.js\";\n\nexport interface ErrorCarrier {\n status(): StatusFailed;\n ok(): false;\n code(): StatusCode;\n message(): string;\n toString(): string;\n}\n\nfunction extractStatusCode(target: unknown): StatusCode | undefined {\n if (target === null || target === undefined) return undefined;\n if (target instanceof Status || target instanceof StatusOr)\n return target.code();\n if (typeof (target as any).code === \"function\") {\n const res = (target as any).code();\n if (isStatusCode(res)) return res as StatusCode;\n }\n if (isStatusCode((target as any).code))\n return (target as any).code as StatusCode;\n return undefined;\n}\n\nconst statusCodes = new Set<string>(Object.values(StatusCode));\n\nfunction isStatusCode(value: unknown): value is StatusCode {\n return typeof value === \"string\" && statusCodes.has(value);\n}\n\n/** Returns whether a Status or StatusOr is OK. */\nexport function isOk(target: Status): target is StatusOk;\nexport function isOk<T>(target: StatusOr<T>): target is StatusOrOk<T>;\nexport function isOk(target: unknown): boolean;\nexport function isOk(target: unknown): boolean {\n const code = extractStatusCode(target);\n if (code === undefined) return false;\n return code === StatusCode.OK;\n}\n\n/** Returns whether a supported result object carries a failure. */\nexport function hasError(target: unknown): target is ErrorCarrier {\n if (target === null || target === undefined) return false;\n if (target instanceof Status) return !target.ok();\n if (target instanceof StatusOr) return !target.ok();\n if (isFailureSentinel(target)) return true;\n return false;\n}\n\nfunction createPredicate(expectedCode: StatusCode) {\n return (target: unknown): boolean => {\n const code = extractStatusCode(target);\n if (code === undefined) return false;\n return code === expectedCode;\n };\n}\n\nexport const isCancelled = createPredicate(StatusCode.CANCELLED);\nexport const isUnknown = createPredicate(StatusCode.UNKNOWN);\nexport const isInvalidArgument = createPredicate(\n StatusCode.INVALID_ARGUMENT,\n);\nexport const isDeadlineExceeded = createPredicate(\n StatusCode.DEADLINE_EXCEEDED,\n);\nexport const isNotFound = createPredicate(StatusCode.NOT_FOUND);\nexport const isAlreadyExists = createPredicate(\n StatusCode.ALREADY_EXISTS,\n);\nexport const isPermissionDenied = createPredicate(\n StatusCode.PERMISSION_DENIED,\n);\nexport const isResourceExhausted = createPredicate(\n StatusCode.RESOURCE_EXHAUSTED,\n);\nexport const isFailedPrecondition = createPredicate(\n StatusCode.FAILED_PRECONDITION,\n);\nexport const isAborted = createPredicate(StatusCode.ABORTED);\nexport const isOutOfRange = createPredicate(StatusCode.OUT_OF_RANGE);\nexport const isUnimplemented = createPredicate(\n StatusCode.UNIMPLEMENTED,\n);\nexport const isInternal = createPredicate(StatusCode.INTERNAL);\nexport const isUnavailable = createPredicate(StatusCode.UNAVAILABLE);\nexport const isDataLoss = createPredicate(StatusCode.DATA_LOSS);\nexport const isUnauthenticated = createPredicate(\n StatusCode.UNAUTHENTICATED,\n);\n","import {\n Status,\n InternalError,\n UnknownError,\n InvalidArgumentError,\n OutOfRangeError,\n type StatusFailed,\n} from \"./status.js\";\nimport { StatusOr } from \"./status-or.js\";\nimport { StatusError } from \"./errors.js\";\nimport { getBrandedFailureStatus } from \"./failure-brand.js\";\n\n/** Converts a thrown JavaScript value into a non-OK Status. */\nexport function fromError(error: unknown): StatusFailed {\n const failureStatus = getBrandedFailureStatus(error);\n if (failureStatus) return failureStatus;\n if (error instanceof Status)\n return error.ok()\n ? InternalError(\"Caught an OK Status as an error\")\n : (error as StatusFailed);\n if (error instanceof StatusError)\n return error.status.ok()\n ? InternalError(\"Caught a StatusError containing an OK Status\")\n : (error.status as StatusFailed);\n if (error instanceof RangeError)\n return OutOfRangeError(error.message);\n if (error instanceof TypeError)\n return InvalidArgumentError(error.message);\n if (error instanceof Error) return UnknownError(error.message);\n if (typeof error === \"string\") return UnknownError(error);\n return UnknownError(String(error));\n}\n\n/** Runs a function and converts thrown values into a StatusOr failure. */\nexport function tryCatch<T>(\n fn: () => T,\n mapper?: (error: unknown) => Status,\n): StatusOr<T> {\n try {\n return StatusOr.ok(fn());\n } catch (err: unknown) {\n const status = mapper ? mapper(err) : fromError(err);\n return StatusOr.fromStatus(\n status.ok()\n ? InternalError(\"tryCatch mapper returned an OK Status\")\n : status,\n );\n }\n}\n\n/** Runs an async function and converts rejections into a StatusOr failure. */\nexport async function tryCatchAsync<T>(\n fn: () => Promise<T>,\n mapper?: (error: unknown) => Status,\n): Promise<StatusOr<T>> {\n try {\n return StatusOr.ok(await fn());\n } catch (err: unknown) {\n const status = mapper ? mapper(err) : fromError(err);\n return StatusOr.fromStatus(\n status.ok()\n ? InternalError(\"tryCatchAsync mapper returned an OK Status\")\n : status,\n );\n }\n}\n"]}
|
package/package.json
CHANGED