@devp0nt/error0 1.0.0-next.46 → 1.0.0-next.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +87 -49
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +35 -12
- package/dist/cjs/plugins/cause-serialize.cjs +38 -0
- package/dist/cjs/plugins/cause-serialize.cjs.map +1 -0
- package/dist/cjs/plugins/cause-serialize.d.cts +5 -0
- package/dist/cjs/plugins/expected.cjs +49 -0
- package/dist/cjs/plugins/expected.cjs.map +1 -0
- package/dist/cjs/plugins/expected.d.cts +5 -0
- package/dist/cjs/plugins/message-merge.cjs +36 -0
- package/dist/cjs/plugins/message-merge.cjs.map +1 -0
- package/dist/cjs/plugins/message-merge.d.cts +5 -0
- package/dist/cjs/plugins/meta.cjs +73 -0
- package/dist/cjs/plugins/meta.cjs.map +1 -0
- package/dist/cjs/plugins/meta.d.cts +5 -0
- package/dist/cjs/plugins/stack-merge.cjs +39 -0
- package/dist/cjs/plugins/stack-merge.cjs.map +1 -0
- package/dist/cjs/plugins/stack-merge.d.cts +5 -0
- package/dist/cjs/plugins/tags.cjs +48 -0
- package/dist/cjs/plugins/tags.cjs.map +1 -0
- package/dist/cjs/plugins/tags.d.cts +5 -0
- package/dist/esm/index.d.ts +35 -12
- package/dist/esm/index.js +87 -49
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/plugins/cause-serialize.d.ts +5 -0
- package/dist/esm/plugins/cause-serialize.js +14 -0
- package/dist/esm/plugins/cause-serialize.js.map +1 -0
- package/dist/esm/plugins/expected.d.ts +5 -0
- package/dist/esm/plugins/expected.js +25 -0
- package/dist/esm/plugins/expected.js.map +1 -0
- package/dist/esm/plugins/message-merge.d.ts +5 -0
- package/dist/esm/plugins/message-merge.js +12 -0
- package/dist/esm/plugins/message-merge.js.map +1 -0
- package/dist/esm/plugins/meta.d.ts +5 -0
- package/dist/esm/plugins/meta.js +49 -0
- package/dist/esm/plugins/meta.js.map +1 -0
- package/dist/esm/plugins/stack-merge.d.ts +5 -0
- package/dist/esm/plugins/stack-merge.js +15 -0
- package/dist/esm/plugins/stack-merge.js.map +1 -0
- package/dist/esm/plugins/tags.d.ts +5 -0
- package/dist/esm/plugins/tags.js +24 -0
- package/dist/esm/plugins/tags.js.map +1 -0
- package/package.json +9 -1
- package/src/index.test.ts +74 -82
- package/src/index.ts +130 -64
- package/src/plugins/cause-serialize.test.ts +51 -0
- package/src/plugins/cause-serialize.ts +11 -0
- package/src/plugins/expected.test.ts +47 -0
- package/src/plugins/expected.ts +25 -0
- package/src/plugins/message-merge.test.ts +32 -0
- package/src/plugins/message-merge.ts +15 -0
- package/src/plugins/meta.test.ts +32 -0
- package/src/plugins/meta.ts +53 -0
- package/src/plugins/stack-merge.test.ts +64 -0
- package/src/plugins/stack-merge.ts +16 -0
- package/src/plugins/tags.test.ts +22 -0
- package/src/plugins/tags.ts +21 -0
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const RESERVED_STACK_PROP_ERROR = 'Error0: "stack" is a reserved prop key. Use .stack(...) plugin API instead';
|
|
2
|
+
const RESERVED_MESSAGE_PROP_ERROR = 'Error0: "message" is a reserved prop key. Use .message(...) plugin API instead';
|
|
2
3
|
class PluginError0 {
|
|
3
4
|
_plugin;
|
|
4
5
|
Infer = void 0;
|
|
@@ -8,7 +9,8 @@ class PluginError0 {
|
|
|
8
9
|
methods: { ...plugin?.methods ?? {} },
|
|
9
10
|
adapt: [...plugin?.adapt ?? []],
|
|
10
11
|
stack: plugin?.stack,
|
|
11
|
-
cause: plugin?.cause
|
|
12
|
+
cause: plugin?.cause,
|
|
13
|
+
message: plugin?.message
|
|
12
14
|
};
|
|
13
15
|
}
|
|
14
16
|
prop(key, value) {
|
|
@@ -26,17 +28,24 @@ class PluginError0 {
|
|
|
26
28
|
cause(value) {
|
|
27
29
|
return this.use("cause", value);
|
|
28
30
|
}
|
|
31
|
+
message(value) {
|
|
32
|
+
return this.use("message", value);
|
|
33
|
+
}
|
|
29
34
|
use(kind, keyOrValue, value) {
|
|
30
35
|
const nextProps = { ...this._plugin.props ?? {} };
|
|
31
36
|
const nextMethods = { ...this._plugin.methods ?? {} };
|
|
32
37
|
const nextAdapt = [...this._plugin.adapt ?? []];
|
|
33
38
|
let nextStack = this._plugin.stack;
|
|
34
39
|
let nextCause = this._plugin.cause;
|
|
40
|
+
let nextMessage = this._plugin.message;
|
|
35
41
|
if (kind === "prop") {
|
|
36
42
|
const key = keyOrValue;
|
|
37
43
|
if (key === "stack") {
|
|
38
44
|
throw new Error(RESERVED_STACK_PROP_ERROR);
|
|
39
45
|
}
|
|
46
|
+
if (key === "message") {
|
|
47
|
+
throw new Error(RESERVED_MESSAGE_PROP_ERROR);
|
|
48
|
+
}
|
|
40
49
|
if (value === void 0) {
|
|
41
50
|
throw new Error('PluginError0.use("prop", key, value) requires value');
|
|
42
51
|
}
|
|
@@ -51,27 +60,32 @@ class PluginError0 {
|
|
|
51
60
|
nextAdapt.push(keyOrValue);
|
|
52
61
|
} else if (kind === "stack") {
|
|
53
62
|
nextStack = keyOrValue;
|
|
54
|
-
} else {
|
|
63
|
+
} else if (kind === "cause") {
|
|
55
64
|
nextCause = keyOrValue;
|
|
65
|
+
} else {
|
|
66
|
+
nextMessage = keyOrValue;
|
|
56
67
|
}
|
|
57
68
|
return new PluginError0({
|
|
58
69
|
props: nextProps,
|
|
59
70
|
methods: nextMethods,
|
|
60
71
|
adapt: nextAdapt,
|
|
61
72
|
stack: nextStack,
|
|
62
|
-
cause: nextCause
|
|
73
|
+
cause: nextCause,
|
|
74
|
+
message: nextMessage
|
|
63
75
|
});
|
|
64
76
|
}
|
|
65
77
|
}
|
|
66
78
|
class Error0 extends Error {
|
|
67
79
|
static __pluginsMap;
|
|
80
|
+
__pluginsMap;
|
|
68
81
|
static _plugins = [];
|
|
69
82
|
static _emptyPlugin = {
|
|
70
83
|
props: {},
|
|
71
84
|
methods: {},
|
|
72
85
|
adapt: [],
|
|
73
86
|
stack: void 0,
|
|
74
|
-
cause: void 0
|
|
87
|
+
cause: void 0,
|
|
88
|
+
message: void 0
|
|
75
89
|
};
|
|
76
90
|
static _getResolvedPlugin() {
|
|
77
91
|
const resolved = {
|
|
@@ -83,6 +97,9 @@ class Error0 extends Error {
|
|
|
83
97
|
if (plugin.props && "stack" in plugin.props) {
|
|
84
98
|
throw new Error(RESERVED_STACK_PROP_ERROR);
|
|
85
99
|
}
|
|
100
|
+
if (plugin.props && "message" in plugin.props) {
|
|
101
|
+
throw new Error(RESERVED_MESSAGE_PROP_ERROR);
|
|
102
|
+
}
|
|
86
103
|
Object.assign(resolved.props, plugin.props ?? this._emptyPlugin.props);
|
|
87
104
|
Object.assign(resolved.methods, plugin.methods ?? this._emptyPlugin.methods);
|
|
88
105
|
resolved.adapt.push(...plugin.adapt ?? this._emptyPlugin.adapt);
|
|
@@ -92,6 +109,9 @@ class Error0 extends Error {
|
|
|
92
109
|
if (typeof plugin.cause !== "undefined") {
|
|
93
110
|
resolved.cause = plugin.cause;
|
|
94
111
|
}
|
|
112
|
+
if (typeof plugin.message !== "undefined") {
|
|
113
|
+
resolved.message = plugin.message;
|
|
114
|
+
}
|
|
95
115
|
}
|
|
96
116
|
return resolved;
|
|
97
117
|
}
|
|
@@ -254,6 +274,9 @@ class Error0 extends Error {
|
|
|
254
274
|
}
|
|
255
275
|
return this._fromNonError0(error);
|
|
256
276
|
}
|
|
277
|
+
static round(error, isPublic = false) {
|
|
278
|
+
return this.from(this.serialize(error, isPublic));
|
|
279
|
+
}
|
|
257
280
|
static _applyAdapt(error) {
|
|
258
281
|
const plugin = this._getResolvedPlugin();
|
|
259
282
|
for (const adapt of plugin.adapt) {
|
|
@@ -287,8 +310,7 @@ class Error0 extends Error {
|
|
|
287
310
|
console.error(`Error0: failed to deserialize property ${key}`, errorRecord);
|
|
288
311
|
}
|
|
289
312
|
}
|
|
290
|
-
|
|
291
|
-
if (stackPlugin !== false && "stack" in errorRecord) {
|
|
313
|
+
if ("stack" in errorRecord) {
|
|
292
314
|
try {
|
|
293
315
|
if (typeof errorRecord.stack === "string") {
|
|
294
316
|
recreated.stack = errorRecord.stack;
|
|
@@ -297,8 +319,8 @@ class Error0 extends Error {
|
|
|
297
319
|
console.error("Error0: failed to deserialize stack", errorRecord);
|
|
298
320
|
}
|
|
299
321
|
}
|
|
300
|
-
const causePlugin = plugin.cause
|
|
301
|
-
if (causePlugin && "cause" in errorRecord) {
|
|
322
|
+
const causePlugin = plugin.cause;
|
|
323
|
+
if (causePlugin?.serialize && "cause" in errorRecord) {
|
|
302
324
|
try {
|
|
303
325
|
if (this.isSerialized(errorRecord.cause)) {
|
|
304
326
|
;
|
|
@@ -353,7 +375,8 @@ class Error0 extends Error {
|
|
|
353
375
|
methods: { ...pluginRecord._plugin.methods ?? {} },
|
|
354
376
|
adapt: [...pluginRecord._plugin.adapt ?? []],
|
|
355
377
|
stack: pluginRecord._plugin.stack,
|
|
356
|
-
cause: pluginRecord._plugin.cause
|
|
378
|
+
cause: pluginRecord._plugin.cause,
|
|
379
|
+
message: pluginRecord._plugin.message
|
|
357
380
|
};
|
|
358
381
|
}
|
|
359
382
|
static use(first, key, value) {
|
|
@@ -364,8 +387,8 @@ class Error0 extends Error {
|
|
|
364
387
|
if (typeof key === "undefined") {
|
|
365
388
|
throw new Error('Error0.use("stack", value) requires stack plugin value');
|
|
366
389
|
}
|
|
367
|
-
if (key !== "
|
|
368
|
-
throw new Error('Error0.use("stack", value) expects
|
|
390
|
+
if (typeof key !== "object" || key === null || typeof key.serialize !== "function") {
|
|
391
|
+
throw new Error('Error0.use("stack", value) expects { serialize: function }');
|
|
369
392
|
}
|
|
370
393
|
return this._useWithPlugin({
|
|
371
394
|
stack: key
|
|
@@ -375,13 +398,24 @@ class Error0 extends Error {
|
|
|
375
398
|
if (typeof key === "undefined") {
|
|
376
399
|
throw new Error('Error0.use("cause", value) requires cause plugin value');
|
|
377
400
|
}
|
|
378
|
-
if (typeof key !== "
|
|
379
|
-
throw new Error('Error0.use("cause", value) expects function
|
|
401
|
+
if (typeof key !== "object" || key === null || typeof key.serialize !== "function") {
|
|
402
|
+
throw new Error('Error0.use("cause", value) expects { serialize: function }');
|
|
380
403
|
}
|
|
381
404
|
return this._useWithPlugin({
|
|
382
405
|
cause: key
|
|
383
406
|
});
|
|
384
407
|
}
|
|
408
|
+
if (first === "message") {
|
|
409
|
+
if (typeof key === "undefined") {
|
|
410
|
+
throw new Error('Error0.use("message", value) requires message plugin value');
|
|
411
|
+
}
|
|
412
|
+
if (typeof key !== "object" || key === null || typeof key.serialize !== "function") {
|
|
413
|
+
throw new Error('Error0.use("message", value) expects { serialize: function }');
|
|
414
|
+
}
|
|
415
|
+
return this._useWithPlugin({
|
|
416
|
+
message: key
|
|
417
|
+
});
|
|
418
|
+
}
|
|
385
419
|
if (first === "adapt") {
|
|
386
420
|
if (typeof key !== "function") {
|
|
387
421
|
throw new Error('Error0.use("adapt", value) requires adapt function');
|
|
@@ -397,6 +431,9 @@ class Error0 extends Error {
|
|
|
397
431
|
if (key === "stack") {
|
|
398
432
|
throw new Error(RESERVED_STACK_PROP_ERROR);
|
|
399
433
|
}
|
|
434
|
+
if (key === "message") {
|
|
435
|
+
throw new Error(RESERVED_MESSAGE_PROP_ERROR);
|
|
436
|
+
}
|
|
400
437
|
return this._useWithPlugin({
|
|
401
438
|
props: { [key]: value }
|
|
402
439
|
});
|
|
@@ -412,13 +449,23 @@ class Error0 extends Error {
|
|
|
412
449
|
const error0 = this.from(error);
|
|
413
450
|
const resolvedProps = this.resolve(error0);
|
|
414
451
|
const resolvedRecord = resolvedProps;
|
|
452
|
+
const plugin = this._getResolvedPlugin();
|
|
453
|
+
const messagePlugin = plugin.message;
|
|
454
|
+
let serializedMessage = error0.message;
|
|
455
|
+
try {
|
|
456
|
+
if (messagePlugin) {
|
|
457
|
+
serializedMessage = messagePlugin.serialize({ value: error0.message, error: error0, isPublic });
|
|
458
|
+
}
|
|
459
|
+
} catch {
|
|
460
|
+
console.error("Error0: failed to serialize message", error0);
|
|
461
|
+
serializedMessage = error0.message;
|
|
462
|
+
}
|
|
415
463
|
const json = {
|
|
416
464
|
name: error0.name,
|
|
417
|
-
message:
|
|
465
|
+
message: serializedMessage
|
|
418
466
|
// we do not serialize causes, it is enough that we have floated props and adapt helper
|
|
419
467
|
// cause: error0.cause,
|
|
420
468
|
};
|
|
421
|
-
const plugin = this._getResolvedPlugin();
|
|
422
469
|
const propsEntries = Object.entries(plugin.props);
|
|
423
470
|
for (const [key, prop] of propsEntries) {
|
|
424
471
|
if (prop.serialize === false) {
|
|
@@ -434,43 +481,30 @@ class Error0 extends Error {
|
|
|
434
481
|
console.error(`Error0: failed to serialize property ${key}`, resolvedRecord);
|
|
435
482
|
}
|
|
436
483
|
}
|
|
437
|
-
const
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
} else {
|
|
448
|
-
serializedStack = error0.stack;
|
|
449
|
-
}
|
|
450
|
-
if (serializedStack !== void 0) {
|
|
451
|
-
json.stack = serializedStack;
|
|
452
|
-
}
|
|
453
|
-
} catch {
|
|
454
|
-
console.error("Error0: failed to serialize stack", error0);
|
|
484
|
+
const stackPlugin = plugin.stack;
|
|
485
|
+
try {
|
|
486
|
+
let serializedStack;
|
|
487
|
+
if (stackPlugin) {
|
|
488
|
+
serializedStack = stackPlugin.serialize({ value: error0.stack, error: error0, isPublic });
|
|
489
|
+
} else {
|
|
490
|
+
serializedStack = error0.stack;
|
|
491
|
+
}
|
|
492
|
+
if (serializedStack !== void 0) {
|
|
493
|
+
json.stack = serializedStack;
|
|
455
494
|
}
|
|
495
|
+
} catch {
|
|
496
|
+
console.error("Error0: failed to serialize stack", error0);
|
|
456
497
|
}
|
|
457
|
-
const
|
|
458
|
-
if (
|
|
498
|
+
const causePlugin = plugin.cause;
|
|
499
|
+
if (causePlugin?.serialize) {
|
|
459
500
|
try {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
value: error0.cause,
|
|
468
|
-
error: error0,
|
|
469
|
-
isPublic
|
|
470
|
-
});
|
|
471
|
-
if (serializedCause !== void 0) {
|
|
472
|
-
json.cause = serializedCause;
|
|
473
|
-
}
|
|
501
|
+
const serializedCause = causePlugin.serialize({
|
|
502
|
+
value: error0.cause,
|
|
503
|
+
error: error0,
|
|
504
|
+
isPublic
|
|
505
|
+
});
|
|
506
|
+
if (serializedCause !== void 0) {
|
|
507
|
+
json.cause = serializedCause;
|
|
474
508
|
}
|
|
475
509
|
} catch {
|
|
476
510
|
console.error("Error0: failed to serialize cause", error0);
|
|
@@ -482,6 +516,10 @@ class Error0 extends Error {
|
|
|
482
516
|
const ctor = this.constructor;
|
|
483
517
|
return ctor.serialize(this, isPublic);
|
|
484
518
|
}
|
|
519
|
+
round(isPublic = true) {
|
|
520
|
+
const ctor = this.constructor;
|
|
521
|
+
return ctor.round(this, isPublic);
|
|
522
|
+
}
|
|
485
523
|
}
|
|
486
524
|
export {
|
|
487
525
|
Error0,
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["type IsUnknown<T> = unknown extends T ? ([T] extends [unknown] ? true : false) : false\ntype NormalizeUnknownToUndefined<T> = IsUnknown<T> extends true ? undefined : T\ntype IsOnlyUndefined<T> = [Exclude<T, undefined>] extends [never] ? true : false\ntype InferFirstArg<TFn> = TFn extends (...args: infer TArgs) => unknown\n ? TArgs extends [infer TFirst, ...unknown[]]\n ? TFirst\n : undefined\n : undefined\ntype InferPluginPropInput<TProp extends ErrorPluginPropOptions<any, any, any, any>> = TProp extends {\n init: infer TInit\n}\n ? NormalizeUnknownToUndefined<InferFirstArg<TInit>>\n : undefined\ntype ErrorPluginPropInit<TInputValue, TOutputValue> = ((input: TInputValue) => TOutputValue) | (() => TOutputValue)\ntype ErrorPluginPropSerialize<TOutputValue, TError extends Error0> =\n | ((options: { value: TOutputValue; error: TError; isPublic: boolean }) => unknown)\n | false\ntype ErrorPluginPropDeserialize<TOutputValue> =\n | ((options: { value: unknown; serialized: Record<string, unknown> }) => TOutputValue | undefined)\n | false\ntype ErrorPluginPropOptionsBase<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = {\n resolve: (options: {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n error: TError\n }) => TResolveValue\n serialize: ErrorPluginPropSerialize<TResolveValue, TError>\n deserialize: ErrorPluginPropDeserialize<TOutputValue>\n}\ntype ErrorPluginPropOptionsWithInit<\n TInputValue,\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init: ErrorPluginPropInit<TInputValue, TOutputValue>\n}\ntype ErrorPluginPropOptionsWithoutInit<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init?: undefined\n}\nexport type ErrorPluginPropOptions<\n TInputValue = undefined,\n TOutputValue = unknown,\n TError extends Error0 = Error0,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> =\n | ErrorPluginPropOptionsWithInit<TInputValue, TOutputValue, TError, TResolveValue>\n | ErrorPluginPropOptionsWithoutInit<TOutputValue, TError, TResolveValue>\nexport type ErrorPluginMethodFn<TOutputValue, TArgs extends unknown[] = unknown[], TError extends Error0 = Error0> = (\n error: TError,\n ...args: TArgs\n) => TOutputValue\nexport type ErrorPluginAdaptResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined\nexport type ErrorPluginAdaptFn<\n TError extends Error0 = Error0,\n TOutputProps extends Record<string, unknown> = Record<never, never>,\n> = ((error: TError) => void) | ((error: TError) => ErrorPluginAdaptResult<TOutputProps>)\nexport type ErrorPluginStackSerialize<TError extends Error0> =\n | ((options: { value: string | undefined; error: TError; isPublic: boolean }) => unknown)\n | boolean\n | 'merge'\nexport type ErrorPluginStack<TError extends Error0 = Error0> = ErrorPluginStackSerialize<TError>\nexport type ErrorPluginCauseSerialize<TError extends Error0> =\n | ((options: { value: unknown; error: TError; isPublic: boolean }) => unknown)\n | boolean\nexport type ErrorPluginCause<TError extends Error0 = Error0> = ErrorPluginCauseSerialize<TError>\ntype ErrorMethodRecord = {\n args: unknown[]\n output: unknown\n}\n\nexport type ErrorPluginProps = { [key: string]: ErrorPluginPropOptions<any, any> }\nexport type ErrorPluginMethods = { [key: string]: ErrorPluginMethodFn<any, any[]> }\n\nexport type ErrorPlugin<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> = {\n props?: TProps\n methods?: TMethods\n adapt?: Array<ErrorPluginAdaptFn<Error0, PluginOutputProps<TProps>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n}\ntype AddPropToPluginProps<\n TProps extends ErrorPluginProps,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = TProps & Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>\ntype AddMethodToPluginMethods<\n TMethods extends ErrorPluginMethods,\n TKey extends string,\n TArgs extends unknown[],\n TOutputValue,\n> = TMethods & Record<TKey, ErrorPluginMethodFn<TOutputValue, TArgs>>\ntype PluginOutputProps<TProps extends ErrorPluginProps> = {\n [TKey in keyof TProps]: TProps[TKey] extends ErrorPluginPropOptions<any, any, any, infer TResolveValue>\n ? TResolveValue\n : never\n}\nexport type ErrorPluginsMap = {\n props: Record<string, { init: unknown; output: unknown; resolve: unknown }>\n methods: Record<string, ErrorMethodRecord>\n}\nexport type IsEmptyObject<T> = keyof T extends never ? true : false\nexport type ErrorInputBase = {\n cause?: unknown\n}\ntype ErrorInputPluginProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props'] as IsOnlyUndefined<TPluginsMap['props'][TKey]['init']> extends true\n ? never\n : TKey]?: TPluginsMap['props'][TKey]['init']\n}\nexport type ErrorInput<TPluginsMap extends ErrorPluginsMap> =\n IsEmptyObject<TPluginsMap['props']> extends true\n ? ErrorInputBase\n : ErrorInputBase & ErrorInputPluginProps<TPluginsMap>\n\ntype ErrorResolvedProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['resolve']\n}\ntype ErrorOwnProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['output'] | undefined\n}\ntype ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {\n own: {\n (): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(key: TKey) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n}\ntype ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {\n resolve: () => ErrorResolvedProps<TPluginsMap>\n}\ntype ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: TPluginsMap['methods'][TKey] extends {\n args: infer TArgs extends unknown[]\n output: infer TOutput\n }\n ? (...args: TArgs) => TOutput\n : never\n}\nexport type ErrorResolved<TPluginsMap extends ErrorPluginsMap> = ErrorResolvedProps<TPluginsMap> &\n ErrorMethods<TPluginsMap>\n\ntype ErrorStaticMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: TPluginsMap['methods'][TKey] extends {\n args: infer TArgs extends unknown[]\n output: infer TOutput\n }\n ? (error: unknown, ...args: TArgs) => TOutput\n : never\n}\n\ntype EmptyPluginsMap = {\n props: Record<never, { init: never; output: never; resolve: never }>\n methods: Record<never, ErrorMethodRecord>\n}\n\ntype ErrorPluginResolved = {\n props: Record<string, ErrorPluginPropOptions<unknown>>\n methods: Record<string, ErrorPluginMethodFn<unknown>>\n adapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n}\nconst RESERVED_STACK_PROP_ERROR = 'Error0: \"stack\" is a reserved prop key. Use .stack(...) plugin API instead'\n\ntype PluginPropsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['props']>]: NonNullable<TPlugin['props']>[TKey] extends ErrorPluginPropOptions<\n any,\n infer TOutputValue,\n any,\n infer TResolveValue\n >\n ? {\n init: InferPluginPropInput<NonNullable<TPlugin['props']>[TKey]>\n output: TOutputValue\n resolve: TResolveValue\n }\n : never\n}\ntype PluginMethodsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['methods']>]: NonNullable<TPlugin['methods']>[TKey] extends (\n error: Error0,\n ...args: infer TArgs extends unknown[]\n ) => infer TOutput\n ? { args: TArgs; output: TOutput }\n : never\n}\ntype ErrorPluginsMapOfPlugin<TPlugin extends ErrorPlugin> = {\n props: PluginPropsMapOf<TPlugin>\n methods: PluginMethodsMapOf<TPlugin>\n}\ntype ExtendErrorPluginsMap<TMap extends ErrorPluginsMap, TPlugin extends ErrorPlugin> = {\n props: TMap['props'] & ErrorPluginsMapOfPlugin<TPlugin>['props']\n methods: TMap['methods'] & ErrorPluginsMapOfPlugin<TPlugin>['methods']\n}\ntype ExtendErrorPluginsMapWithProp<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = ExtendErrorPluginsMap<\n TMap,\n ErrorPlugin<Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>>\n>\ntype ExtendErrorPluginsMapWithMethod<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TArgs extends unknown[],\n TOutputValue,\n> = ExtendErrorPluginsMap<\n TMap,\n ErrorPlugin<Record<never, never>, Record<TKey, ErrorPluginMethodFn<TOutputValue, TArgs>>>\n>\n\ntype PluginsMapOf<TClass> = TClass extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\ntype PluginsMapOfInstance<TInstance> = TInstance extends { constructor: { __pluginsMap?: infer TPluginsMap } }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\n\ntype PluginsMapFromParts<\n TProps extends ErrorPluginProps,\n TMethods extends ErrorPluginMethods,\n> = ErrorPluginsMapOfPlugin<ErrorPlugin<TProps, TMethods>>\ntype ErrorInstanceOfMap<TMap extends ErrorPluginsMap> = Error0 & ErrorResolved<TMap>\ntype BuilderError0<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = Error0 &\n ErrorResolved<PluginsMapFromParts<TProps, TMethods>>\n\ntype PluginOfBuilder<TBuilder> =\n TBuilder extends PluginError0<infer TProps, infer TMethods> ? ErrorPlugin<TProps, TMethods> : never\n\nexport class PluginError0<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> {\n private readonly _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n\n readonly Infer = undefined as unknown as {\n props: TProps\n methods: TMethods\n }\n\n constructor(plugin?: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>) {\n this._plugin = {\n props: { ...(plugin?.props ?? {}) },\n methods: { ...(plugin?.methods ?? {}) },\n adapt: [...(plugin?.adapt ?? [])],\n stack: plugin?.stack,\n cause: plugin?.cause,\n }\n }\n\n prop<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods> {\n return this.use('prop', key, value)\n }\n\n method<TKey extends string, TArgs extends unknown[], TOutputValue>(\n key: TKey,\n value: ErrorPluginMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TMethods>>,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TArgs, TOutputValue>> {\n return this.use('method', key, value)\n }\n\n adapt(\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods> {\n return this.use('adapt', value)\n }\n\n stack(value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('stack', value)\n }\n\n cause(value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('cause', value)\n }\n\n use<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods>\n use<TKey extends string, TArgs extends unknown[], TOutputValue>(\n kind: 'method',\n key: TKey,\n value: ErrorPluginMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TMethods>>,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TArgs, TOutputValue>>\n use(\n kind: 'adapt',\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods>\n use(kind: 'stack', value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'cause', value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(\n kind: 'prop' | 'method' | 'adapt' | 'stack' | 'cause',\n keyOrValue: unknown,\n value?: ErrorPluginPropOptions<unknown, unknown, any> | ErrorPluginMethodFn<unknown, unknown[], any>,\n ): PluginError0<any, any> {\n const nextProps: ErrorPluginProps = { ...(this._plugin.props ?? {}) }\n const nextMethods: ErrorPluginMethods = { ...(this._plugin.methods ?? {}) }\n const nextAdapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>> = [...(this._plugin.adapt ?? [])]\n let nextStack: ErrorPluginStack | undefined = this._plugin.stack\n let nextCause: ErrorPluginCause | undefined = this._plugin.cause\n if (kind === 'prop') {\n const key = keyOrValue as string\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (value === undefined) {\n throw new Error('PluginError0.use(\"prop\", key, value) requires value')\n }\n nextProps[key] = value as ErrorPluginPropOptions<any, any>\n } else if (kind === 'method') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('PluginError0.use(\"method\", key, value) requires value')\n }\n nextMethods[key] = value as ErrorPluginMethodFn<any, any[]>\n } else if (kind === 'adapt') {\n nextAdapt.push(keyOrValue as ErrorPluginAdaptFn<Error0, Record<string, unknown>>)\n } else if (kind === 'stack') {\n nextStack = keyOrValue as ErrorPluginStack\n } else {\n nextCause = keyOrValue as ErrorPluginCause\n }\n return new PluginError0({\n props: nextProps,\n methods: nextMethods,\n adapt: nextAdapt,\n stack: nextStack,\n cause: nextCause,\n })\n }\n}\n\nexport type ClassError0<TPluginsMap extends ErrorPluginsMap = EmptyPluginsMap> = {\n new (\n message: string,\n input?: ErrorInput<TPluginsMap>,\n ): Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n new (\n input: { message: string } & ErrorInput<TPluginsMap>,\n ): Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n readonly __pluginsMap?: TPluginsMap\n from: (\n error: unknown,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n resolve: (error: unknown) => ErrorResolvedProps<TPluginsMap>\n serialize: (error: unknown, isPublic?: boolean) => Record<string, unknown>\n own: {\n (error: object): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(error: object, key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(\n error: object,\n key: TKey,\n ) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n // prop: <\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n // ) => ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n // method: <TKey extends string, TArgs extends unknown[], TOutputValue>(\n // key: TKey,\n // value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TPluginsMap>>,\n // ) => ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TArgs, TOutputValue>>\n // adapt: (\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n // ) => ClassError0<TPluginsMap>\n // stack: (value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n // cause: (value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n use: {\n <TBuilder extends PluginError0>(\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<TPluginsMap, PluginOfBuilder<TBuilder>>>\n <\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n <TKey extends string, TArgs extends unknown[], TOutputValue>(\n kind: 'method',\n key: TKey,\n value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TPluginsMap>>,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TArgs, TOutputValue>>\n (\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n ): ClassError0<TPluginsMap>\n (kind: 'stack', value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'cause', value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n }\n plugin: () => PluginError0\n} & ErrorStaticMethods<TPluginsMap>\n\nexport class Error0 extends Error {\n static readonly __pluginsMap?: EmptyPluginsMap\n protected static _plugins: ErrorPlugin[] = []\n\n private static readonly _emptyPlugin: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n stack: undefined,\n cause: undefined,\n }\n\n private static _getResolvedPlugin(this: typeof Error0): ErrorPluginResolved {\n const resolved: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n }\n for (const plugin of this._plugins) {\n if (plugin.props && 'stack' in plugin.props) {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n Object.assign(resolved.props, plugin.props ?? this._emptyPlugin.props)\n Object.assign(resolved.methods, plugin.methods ?? this._emptyPlugin.methods)\n resolved.adapt.push(...(plugin.adapt ?? this._emptyPlugin.adapt))\n if (typeof plugin.stack !== 'undefined') {\n resolved.stack = plugin.stack\n }\n if (typeof plugin.cause !== 'undefined') {\n resolved.cause = plugin.cause\n }\n }\n return resolved\n }\n\n constructor(message: string, input?: ErrorInput<EmptyPluginsMap>)\n constructor(input: { message: string } & ErrorInput<EmptyPluginsMap>)\n constructor(\n ...args:\n | [message: string, input?: ErrorInput<EmptyPluginsMap>]\n | [{ message: string } & ErrorInput<EmptyPluginsMap>]\n ) {\n const [first, second] = args\n const input = typeof first === 'string' ? { message: first, ...(second ?? {}) } : first\n\n super(input.message, { cause: input.cause })\n this.name = 'Error0'\n\n const ctor = this.constructor as typeof Error0\n const plugin = ctor._getResolvedPlugin()\n\n for (const [key, prop] of Object.entries(plugin.props)) {\n if (key === 'stack') {\n continue\n }\n if (key in input) {\n const ownValue = (input as Record<string, unknown>)[key]\n if (typeof prop.init === 'function') {\n ;(this as Record<string, unknown>)[key] = prop.init(ownValue)\n } else {\n ;(this as Record<string, unknown>)[key] = ownValue\n }\n } else {\n Object.defineProperty(this, key, {\n get: () => prop.resolve({ own: undefined, flow: this.flow(key), error: this }),\n set: (value) => {\n Object.defineProperty(this, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n },\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n\n private static readonly isSelfProperty = (object: object, key: string): boolean => {\n const d = Object.getOwnPropertyDescriptor(object, key)\n if (!d) return false\n if (typeof d.get === 'function' || typeof d.set === 'function') {\n if ('name' in object && object.name === 'Error0') {\n return false\n } else {\n return true\n }\n }\n return true\n }\n private static _ownByKey(error: object, key: string): unknown {\n if (this.isSelfProperty(error, key)) {\n return (error as Record<string, unknown>)[key]\n }\n return undefined\n }\n private static _flowByKey(error: object, key: string): unknown[] {\n return this.causes(error, true).map((cause) => {\n return this._ownByKey(cause, key)\n })\n }\n\n static own<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorOwnProps<PluginsMapOf<TThis>>\n static own<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOf<TThis>>[TKey]\n static own(error: unknown, key?: string): unknown {\n const error0 = this.from(error)\n if (key === undefined) {\n const ownValues: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const ownKey of Object.keys(plugin.props)) {\n ownValues[ownKey] = this._ownByKey(error0, ownKey)\n }\n return ownValues\n }\n return this._ownByKey(error0, key)\n }\n own<TThis extends Error0>(this: TThis): ErrorOwnProps<PluginsMapOfInstance<TThis>>\n own<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]\n own(key?: string): unknown {\n const ctor = this.constructor as typeof Error0\n if (key === undefined) {\n return ctor.own(this)\n }\n return ctor._ownByKey(this, key)\n }\n\n static flow<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOf<TThis>>[TKey]>\n static flow(error: unknown, key: string): unknown[]\n static flow(error: unknown, key: string): unknown[] {\n const error0 = this.from(error)\n return this._flowByKey(error0, key)\n }\n flow<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]>\n flow(key: string): unknown[]\n flow(key: string): unknown[] {\n const ctor = this.constructor as typeof Error0\n return ctor._flowByKey(this, key)\n }\n\n static resolve<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorResolvedProps<PluginsMapOf<TThis>>\n static resolve(error: unknown): Record<string, unknown>\n static resolve(error: unknown): Record<string, unknown> {\n const error0 = this.from(error)\n const resolved: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const [key, prop] of Object.entries(plugin.props)) {\n try {\n // resolved[key] = (error0 as unknown as Record<string, unknown>)[key]\n const options = Object.defineProperties(\n {\n error: error0,\n },\n {\n own: {\n get: () => error0.own(key as never),\n },\n flow: {\n get: () => error0.flow(key),\n },\n },\n )\n resolved[key] = prop.resolve(options as never)\n // resolved[key] = prop.resolve({ own: error0.own(key as never), flow: error0.flow(key), error: error0 })\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to resolve property ${key}`, error0)\n }\n }\n return resolved\n }\n resolve<TThis extends Error0>(this: TThis): ErrorResolvedProps<PluginsMapOfInstance<TThis>>\n resolve(): Record<string, unknown>\n resolve(): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.resolve(this)\n }\n\n static causes(error: unknown, instancesOnly?: false): unknown[]\n static causes<T extends typeof Error0>(this: T, error: unknown, instancesOnly: true): Array<InstanceType<T>>\n static causes(error: unknown, instancesOnly?: boolean): unknown[] {\n const causes: unknown[] = []\n let current: unknown = error\n const maxDepth = 99\n const seen = new Set<unknown>()\n for (let depth = 0; depth < maxDepth; depth += 1) {\n if (seen.has(current)) {\n break\n }\n seen.add(current)\n if (!instancesOnly || this.is(current)) {\n causes.push(current)\n }\n if (!current || typeof current !== 'object') {\n break\n }\n current = (current as { cause?: unknown }).cause\n }\n return causes\n }\n causes<TThis extends Error0>(this: TThis, instancesOnly?: false): [TThis, ...unknown[]]\n causes<TThis extends Error0>(this: TThis, instancesOnly: true): [TThis, ...TThis[]]\n causes(instancesOnly?: boolean): unknown[] {\n const ctor = this.constructor as typeof Error0\n if (instancesOnly) {\n return ctor.causes(this, true)\n }\n return ctor.causes(this)\n }\n\n static is<T extends typeof Error0>(this: T, error: unknown): error is InstanceType<T> {\n return error instanceof this\n }\n\n static isSerialized(error: unknown): error is Record<string, unknown> {\n return !this.is(error) && typeof error === 'object' && error !== null && 'name' in error && error.name === 'Error0'\n }\n\n static from(error: unknown): Error0 {\n if (this.is(error)) {\n return error\n }\n if (this.isSerialized(error)) {\n return this._fromSerialized(error)\n }\n return this._fromNonError0(error)\n }\n\n private static _applyAdapt(error: Error0): Error0 {\n const plugin = this._getResolvedPlugin()\n for (const adapt of plugin.adapt) {\n const adapted = adapt(error as any)\n if (adapted && typeof adapted === 'object') {\n Object.assign(error as unknown as Record<string, unknown>, adapted)\n }\n }\n return error\n }\n\n private static _fromSerialized(error: unknown): Error0 {\n const message = this._extractMessage(error)\n if (typeof error !== 'object' || error === null) {\n return this._applyAdapt(new this(message, { cause: error }))\n }\n const errorRecord = error as Record<string, unknown>\n const recreated = new this(message)\n const plugin = this._getResolvedPlugin()\n const propsEntries = Object.entries(plugin.props)\n for (const [key, prop] of propsEntries) {\n if (prop.deserialize === false) {\n continue\n }\n if (!(key in errorRecord)) {\n continue\n }\n try {\n const value = prop.deserialize({ value: errorRecord[key], serialized: errorRecord })\n ;(recreated as unknown as Record<string, unknown>)[key] = value\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to deserialize property ${key}`, errorRecord)\n }\n }\n // we do not serialize causes\n // ;(recreated as unknown as { cause?: unknown }).cause = errorRecord.cause\n const stackPlugin = plugin.stack\n if (stackPlugin !== false && 'stack' in errorRecord) {\n try {\n if (typeof errorRecord.stack === 'string') {\n recreated.stack = errorRecord.stack\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to deserialize stack', errorRecord)\n }\n }\n const causePlugin = plugin.cause ?? false\n if (causePlugin && 'cause' in errorRecord) {\n try {\n if (this.isSerialized(errorRecord.cause)) {\n ;(recreated as { cause?: unknown }).cause = this._fromSerialized(errorRecord.cause)\n } else {\n ;(recreated as { cause?: unknown }).cause = errorRecord.cause\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to deserialize cause', errorRecord)\n }\n }\n return recreated\n }\n\n private static _fromNonError0(error: unknown): Error0 {\n const message = this._extractMessage(error)\n return this._applyAdapt(new this(message, { cause: error }))\n }\n\n private static _extractMessage(error: unknown): string {\n return (\n (typeof error === 'string'\n ? error\n : typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string'\n ? error.message\n : undefined) || 'Unknown error'\n )\n }\n\n private static _useWithPlugin(\n this: typeof Error0,\n plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>,\n ): ClassError0 {\n const Base = this as unknown as typeof Error0\n const Error0Extended = class Error0 extends Base {}\n ;(Error0Extended as typeof Error0)._plugins = [...Base._plugins, plugin]\n\n const resolved = (Error0Extended as typeof Error0)._getResolvedPlugin()\n for (const [key, method] of Object.entries(resolved.methods)) {\n Object.defineProperty((Error0Extended as typeof Error0).prototype, key, {\n value: function (...args: unknown[]) {\n return method(this as Error0, ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n Object.defineProperty(Error0Extended, key, {\n value: function (error: unknown, ...args: unknown[]) {\n return method(this.from(error), ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n\n return Error0Extended as unknown as ClassError0\n }\n\n private static _pluginFromBuilder(plugin: PluginError0): ErrorPlugin<ErrorPluginProps, ErrorPluginMethods> {\n const pluginRecord = plugin as unknown as {\n _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n }\n return {\n props: { ...(pluginRecord._plugin.props ?? {}) },\n methods: { ...(pluginRecord._plugin.methods ?? {}) },\n adapt: [...(pluginRecord._plugin.adapt ?? [])],\n stack: pluginRecord._plugin.stack,\n cause: pluginRecord._plugin.cause,\n }\n }\n\n // static prop<\n // TThis extends typeof Error0,\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // this: TThis,\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n // ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>> {\n // return this.use('prop', key, value)\n // }\n\n // static method<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(\n // this: TThis,\n // key: TKey,\n // value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TArgs, TOutputValue>> {\n // return this.use('method', key, value)\n // }\n\n // static adapt<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('adapt', value)\n // }\n\n // static stack<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('stack', value)\n // }\n\n // static cause<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('cause', value)\n // }\n\n static use<TThis extends typeof Error0, TBuilder extends PluginError0>(\n this: TThis,\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<PluginsMapOf<TThis>, PluginOfBuilder<TBuilder>>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n this: TThis,\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>>\n static use<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(\n this: TThis,\n kind: 'method',\n key: TKey,\n value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TArgs, TOutputValue>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'stack',\n value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'cause',\n value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use(\n this: typeof Error0,\n first: PluginError0 | 'prop' | 'method' | 'adapt' | 'stack' | 'cause',\n key?: unknown,\n value?: ErrorPluginPropOptions<unknown> | ErrorPluginMethodFn<unknown>,\n ): ClassError0 {\n if (first instanceof PluginError0) {\n return this._useWithPlugin(this._pluginFromBuilder(first))\n }\n if (first === 'stack') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"stack\", value) requires stack plugin value')\n }\n if (key !== 'merge' && typeof key !== 'boolean' && typeof key !== 'function') {\n throw new Error('Error0.use(\"stack\", value) expects function | boolean | \"merge\"')\n }\n return this._useWithPlugin({\n stack: key as ErrorPluginStack,\n })\n }\n if (first === 'cause') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"cause\", value) requires cause plugin value')\n }\n if (typeof key !== 'boolean' && typeof key !== 'function') {\n throw new Error('Error0.use(\"cause\", value) expects function | boolean')\n }\n return this._useWithPlugin({\n cause: key as ErrorPluginCause,\n })\n }\n if (first === 'adapt') {\n if (typeof key !== 'function') {\n throw new Error('Error0.use(\"adapt\", value) requires adapt function')\n }\n return this._useWithPlugin({\n adapt: [key as ErrorPluginAdaptFn<Error0, Record<string, unknown>>],\n })\n }\n if (typeof key !== 'string' || value === undefined) {\n throw new Error('Error0.use(kind, key, value) requires key and value')\n }\n\n if (first === 'prop') {\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n return this._useWithPlugin({\n props: { [key]: value as ErrorPluginPropOptions<unknown> },\n })\n }\n return this._useWithPlugin({\n methods: { [key]: value as ErrorPluginMethodFn<unknown> },\n })\n }\n\n static plugin(): PluginError0 {\n return new PluginError0()\n }\n\n static serialize(error: unknown, isPublic = true): Record<string, unknown> {\n const error0 = this.from(error)\n const resolvedProps = this.resolve(error0)\n const resolvedRecord = resolvedProps as Record<string, unknown>\n const json: Record<string, unknown> = {\n name: error0.name,\n message: error0.message,\n // we do not serialize causes, it is enough that we have floated props and adapt helper\n // cause: error0.cause,\n }\n\n const plugin = this._getResolvedPlugin()\n const propsEntries = Object.entries(plugin.props)\n for (const [key, prop] of propsEntries) {\n if (prop.serialize === false) {\n continue\n }\n try {\n const value = resolvedRecord[key]\n const jsonValue = prop.serialize({ value, error: error0, isPublic })\n if (jsonValue !== undefined) {\n json[key] = jsonValue\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to serialize property ${key}`, resolvedRecord)\n }\n }\n const stackSerialize = plugin.stack\n if (stackSerialize !== false) {\n try {\n let serializedStack: unknown\n if (stackSerialize === 'merge') {\n serializedStack = error0\n .causes()\n .map((cause) => {\n return cause instanceof Error ? cause.stack : undefined\n })\n .filter((value): value is string => typeof value === 'string')\n .join('\\n')\n } else if (typeof stackSerialize === 'function') {\n serializedStack = stackSerialize({ value: error0.stack, error: error0, isPublic })\n } else {\n serializedStack = error0.stack\n }\n if (serializedStack !== undefined) {\n json.stack = serializedStack\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize stack', error0)\n }\n }\n const causeSerialize = plugin.cause ?? false\n if (causeSerialize) {\n try {\n if (causeSerialize === true) {\n const causeValue = (error0 as { cause?: unknown }).cause\n if (this.is(causeValue)) {\n json.cause = this.serialize(causeValue, isPublic)\n }\n } else {\n const serializedCause = causeSerialize({\n value: (error0 as { cause?: unknown }).cause,\n error: error0,\n isPublic,\n })\n if (serializedCause !== undefined) {\n json.cause = serializedCause\n }\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize cause', error0)\n }\n }\n return Object.fromEntries(Object.entries(json).filter(([, value]) => value !== undefined)) as Record<\n string,\n unknown\n >\n }\n\n serialize(isPublic = true): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.serialize(this, isPublic)\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["type IsUnknown<T> = unknown extends T ? ([T] extends [unknown] ? true : false) : false\ntype NormalizeUnknownToUndefined<T> = IsUnknown<T> extends true ? undefined : T\ntype IsOnlyUndefined<T> = [Exclude<T, undefined>] extends [never] ? true : false\ntype InferFirstArg<TFn> = TFn extends (...args: infer TArgs) => unknown\n ? TArgs extends [infer TFirst, ...unknown[]]\n ? TFirst\n : undefined\n : undefined\ntype InferPluginPropInput<TProp extends ErrorPluginPropOptions<any, any, any, any>> = TProp extends {\n init: infer TInit\n}\n ? NormalizeUnknownToUndefined<InferFirstArg<TInit>>\n : undefined\ntype ErrorPluginPropInit<TInputValue, TOutputValue> = ((input: TInputValue) => TOutputValue) | (() => TOutputValue)\ntype ErrorPluginPropSerialize<TOutputValue, TError extends Error0> =\n | ((options: { value: TOutputValue; error: TError; isPublic: boolean }) => unknown)\n | false\ntype ErrorPluginPropDeserialize<TOutputValue> =\n | ((options: { value: unknown; serialized: Record<string, unknown> }) => TOutputValue | undefined)\n | false\ntype ErrorPluginPropOptionsBase<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = {\n resolve: (options: {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n error: TError\n }) => TResolveValue\n serialize: ErrorPluginPropSerialize<TResolveValue, TError>\n deserialize: ErrorPluginPropDeserialize<TOutputValue>\n}\ntype ErrorPluginPropOptionsWithInit<\n TInputValue,\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init: ErrorPluginPropInit<TInputValue, TOutputValue>\n}\ntype ErrorPluginPropOptionsWithoutInit<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init?: undefined\n}\nexport type ErrorPluginPropOptions<\n TInputValue = undefined,\n TOutputValue = unknown,\n TError extends Error0 = Error0,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> =\n | ErrorPluginPropOptionsWithInit<TInputValue, TOutputValue, TError, TResolveValue>\n | ErrorPluginPropOptionsWithoutInit<TOutputValue, TError, TResolveValue>\nexport type ErrorPluginMethodFn<TOutputValue, TArgs extends unknown[] = unknown[], TError extends Error0 = Error0> = (\n error: TError,\n ...args: TArgs\n) => TOutputValue\nexport type ErrorPluginAdaptResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined\nexport type ErrorPluginAdaptFn<\n TError extends Error0 = Error0,\n TOutputProps extends Record<string, unknown> = Record<never, never>,\n> = ((error: TError) => void) | ((error: TError) => ErrorPluginAdaptResult<TOutputProps>)\nexport type ErrorPluginStackSerialize<TError extends Error0> = (options: {\n value: string | undefined\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginStack<TError extends Error0 = Error0> = { serialize: ErrorPluginStackSerialize<TError> }\nexport type ErrorPluginCauseSerialize<TError extends Error0> = (options: {\n value: unknown\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginCause<TError extends Error0 = Error0> = { serialize: ErrorPluginCauseSerialize<TError> }\nexport type ErrorPluginMessageSerialize<TError extends Error0> = (options: {\n value: string\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginMessage<TError extends Error0 = Error0> = { serialize: ErrorPluginMessageSerialize<TError> }\ntype ErrorMethodRecord = {\n args: unknown[]\n output: unknown\n}\n\nexport type ErrorPluginProps = { [key: string]: ErrorPluginPropOptions<any, any> }\nexport type ErrorPluginMethods = { [key: string]: ErrorPluginMethodFn<any, any[]> }\n\nexport type ErrorPlugin<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> = {\n props?: TProps\n methods?: TMethods\n adapt?: Array<ErrorPluginAdaptFn<Error0, PluginOutputProps<TProps>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n}\ntype AddPropToPluginProps<\n TProps extends ErrorPluginProps,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = TProps & Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>\ntype AddMethodToPluginMethods<\n TMethods extends ErrorPluginMethods,\n TKey extends string,\n TArgs extends unknown[],\n TOutputValue,\n> = TMethods & Record<TKey, ErrorPluginMethodFn<TOutputValue, TArgs>>\ntype PluginOutputProps<TProps extends ErrorPluginProps> = {\n [TKey in keyof TProps]: TProps[TKey] extends ErrorPluginPropOptions<any, any, any, infer TResolveValue>\n ? TResolveValue\n : never\n}\nexport type ErrorPluginsMap = {\n props: Record<string, { init: unknown; output: unknown; resolve: unknown }>\n methods: Record<string, ErrorMethodRecord>\n}\nexport type IsEmptyObject<T> = keyof T extends never ? true : false\nexport type ErrorInputBase = {\n cause?: unknown\n}\ntype ErrorInputPluginProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props'] as IsOnlyUndefined<TPluginsMap['props'][TKey]['init']> extends true\n ? never\n : TKey]?: TPluginsMap['props'][TKey]['init']\n}\nexport type ErrorInput<TPluginsMap extends ErrorPluginsMap> =\n IsEmptyObject<TPluginsMap['props']> extends true\n ? ErrorInputBase\n : ErrorInputBase & ErrorInputPluginProps<TPluginsMap>\n\ntype ErrorResolvedProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['resolve']\n}\ntype ErrorOwnProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['output'] | undefined\n}\ntype ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {\n own: {\n (): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(key: TKey) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n}\ntype ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {\n resolve: () => ErrorResolvedProps<TPluginsMap>\n}\ntype ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: TPluginsMap['methods'][TKey] extends {\n args: infer TArgs extends unknown[]\n output: infer TOutput\n }\n ? (...args: TArgs) => TOutput\n : never\n}\nexport type ErrorResolved<TPluginsMap extends ErrorPluginsMap> = ErrorResolvedProps<TPluginsMap> &\n ErrorMethods<TPluginsMap>\n\ntype ErrorStaticMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: TPluginsMap['methods'][TKey] extends {\n args: infer TArgs extends unknown[]\n output: infer TOutput\n }\n ? (error: unknown, ...args: TArgs) => TOutput\n : never\n}\n\ntype EmptyPluginsMap = {\n props: Record<never, { init: never; output: never; resolve: never }>\n methods: Record<never, ErrorMethodRecord>\n}\n\ntype ErrorPluginResolved = {\n props: Record<string, ErrorPluginPropOptions<unknown>>\n methods: Record<string, ErrorPluginMethodFn<unknown>>\n adapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n}\nconst RESERVED_STACK_PROP_ERROR = 'Error0: \"stack\" is a reserved prop key. Use .stack(...) plugin API instead'\nconst RESERVED_MESSAGE_PROP_ERROR = 'Error0: \"message\" is a reserved prop key. Use .message(...) plugin API instead'\n\ntype PluginPropsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['props']>]: NonNullable<TPlugin['props']>[TKey] extends ErrorPluginPropOptions<\n any,\n infer TOutputValue,\n any,\n infer TResolveValue\n >\n ? {\n init: InferPluginPropInput<NonNullable<TPlugin['props']>[TKey]>\n output: TOutputValue\n resolve: TResolveValue\n }\n : never\n}\ntype PluginMethodsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['methods']>]: NonNullable<TPlugin['methods']>[TKey] extends (\n error: Error0,\n ...args: infer TArgs extends unknown[]\n ) => infer TOutput\n ? { args: TArgs; output: TOutput }\n : never\n}\ntype ErrorPluginsMapOfPlugin<TPlugin extends ErrorPlugin> = {\n props: PluginPropsMapOf<TPlugin>\n methods: PluginMethodsMapOf<TPlugin>\n}\ntype ExtendErrorPluginsMap<TMap extends ErrorPluginsMap, TPlugin extends ErrorPlugin> = {\n props: TMap['props'] & ErrorPluginsMapOfPlugin<TPlugin>['props']\n methods: TMap['methods'] & ErrorPluginsMapOfPlugin<TPlugin>['methods']\n}\ntype ExtendErrorPluginsMapWithProp<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = ExtendErrorPluginsMap<\n TMap,\n ErrorPlugin<Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>>\n>\ntype ExtendErrorPluginsMapWithMethod<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TArgs extends unknown[],\n TOutputValue,\n> = ExtendErrorPluginsMap<\n TMap,\n ErrorPlugin<Record<never, never>, Record<TKey, ErrorPluginMethodFn<TOutputValue, TArgs>>>\n>\n\ntype PluginsMapOf<TClass> = TClass extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\ntype PluginsMapOfInstance<TInstance> = TInstance extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\n\ntype PluginsMapFromParts<\n TProps extends ErrorPluginProps,\n TMethods extends ErrorPluginMethods,\n> = ErrorPluginsMapOfPlugin<ErrorPlugin<TProps, TMethods>>\ntype ErrorInstanceOfMap<TMap extends ErrorPluginsMap> = Error0 & ErrorResolved<TMap>\ntype BuilderError0<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = Error0 &\n ErrorResolved<PluginsMapFromParts<TProps, TMethods>>\n\ntype PluginOfBuilder<TBuilder> =\n TBuilder extends PluginError0<infer TProps, infer TMethods> ? ErrorPlugin<TProps, TMethods> : never\n\nexport class PluginError0<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> {\n private readonly _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n\n readonly Infer = undefined as unknown as {\n props: TProps\n methods: TMethods\n }\n\n constructor(plugin?: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>) {\n this._plugin = {\n props: { ...(plugin?.props ?? {}) },\n methods: { ...(plugin?.methods ?? {}) },\n adapt: [...(plugin?.adapt ?? [])],\n stack: plugin?.stack,\n cause: plugin?.cause,\n message: plugin?.message,\n }\n }\n\n prop<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods> {\n return this.use('prop', key, value)\n }\n\n method<TKey extends string, TArgs extends unknown[], TOutputValue>(\n key: TKey,\n value: ErrorPluginMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TMethods>>,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TArgs, TOutputValue>> {\n return this.use('method', key, value)\n }\n\n adapt(\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods> {\n return this.use('adapt', value)\n }\n\n stack(value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('stack', value)\n }\n\n cause(value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('cause', value)\n }\n\n message(value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('message', value)\n }\n\n use<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods>\n use<TKey extends string, TArgs extends unknown[], TOutputValue>(\n kind: 'method',\n key: TKey,\n value: ErrorPluginMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TMethods>>,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TArgs, TOutputValue>>\n use(\n kind: 'adapt',\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods>\n use(kind: 'stack', value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'cause', value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'message', value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(\n kind: 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n keyOrValue: unknown,\n value?: ErrorPluginPropOptions<unknown, unknown, any> | ErrorPluginMethodFn<unknown, unknown[], any>,\n ): PluginError0<any, any> {\n const nextProps: ErrorPluginProps = { ...(this._plugin.props ?? {}) }\n const nextMethods: ErrorPluginMethods = { ...(this._plugin.methods ?? {}) }\n const nextAdapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>> = [...(this._plugin.adapt ?? [])]\n let nextStack: ErrorPluginStack | undefined = this._plugin.stack\n let nextCause: ErrorPluginCause | undefined = this._plugin.cause\n let nextMessage: ErrorPluginMessage | undefined = this._plugin.message\n if (kind === 'prop') {\n const key = keyOrValue as string\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n if (value === undefined) {\n throw new Error('PluginError0.use(\"prop\", key, value) requires value')\n }\n nextProps[key] = value as ErrorPluginPropOptions<any, any>\n } else if (kind === 'method') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('PluginError0.use(\"method\", key, value) requires value')\n }\n nextMethods[key] = value as ErrorPluginMethodFn<any, any[]>\n } else if (kind === 'adapt') {\n nextAdapt.push(keyOrValue as ErrorPluginAdaptFn<Error0, Record<string, unknown>>)\n } else if (kind === 'stack') {\n nextStack = keyOrValue as ErrorPluginStack\n } else if (kind === 'cause') {\n nextCause = keyOrValue as ErrorPluginCause\n } else {\n nextMessage = keyOrValue as ErrorPluginMessage\n }\n return new PluginError0({\n props: nextProps,\n methods: nextMethods,\n adapt: nextAdapt,\n stack: nextStack,\n cause: nextCause,\n message: nextMessage,\n })\n }\n}\n\nexport type ClassError0<TPluginsMap extends ErrorPluginsMap = EmptyPluginsMap> = {\n new (\n message: string,\n input?: ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n new (\n input: { message: string } & ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n readonly __pluginsMap?: TPluginsMap\n from: (\n error: unknown,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n round: (\n error: unknown,\n isPublic?: boolean,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n resolve: (error: unknown) => ErrorResolvedProps<TPluginsMap>\n serialize: (error: unknown, isPublic?: boolean) => Record<string, unknown>\n own: {\n (error: object): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(error: object, key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(\n error: object,\n key: TKey,\n ) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n // prop: <\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n // ) => ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n // method: <TKey extends string, TArgs extends unknown[], TOutputValue>(\n // key: TKey,\n // value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TPluginsMap>>,\n // ) => ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TArgs, TOutputValue>>\n // adapt: (\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n // ) => ClassError0<TPluginsMap>\n // stack: (value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n // cause: (value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n use: {\n <TBuilder extends PluginError0>(\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<TPluginsMap, PluginOfBuilder<TBuilder>>>\n <\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n <TKey extends string, TArgs extends unknown[], TOutputValue>(\n kind: 'method',\n key: TKey,\n value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TPluginsMap>>,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TArgs, TOutputValue>>\n (\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n ): ClassError0<TPluginsMap>\n (kind: 'stack', value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'cause', value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'message', value: ErrorPluginMessage<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n }\n plugin: () => PluginError0\n} & ErrorStaticMethods<TPluginsMap>\n\nexport class Error0 extends Error {\n static readonly __pluginsMap?: EmptyPluginsMap\n readonly __pluginsMap?: EmptyPluginsMap\n protected static _plugins: ErrorPlugin[] = []\n\n private static readonly _emptyPlugin: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n stack: undefined,\n cause: undefined,\n message: undefined,\n }\n\n private static _getResolvedPlugin(this: typeof Error0): ErrorPluginResolved {\n const resolved: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n }\n for (const plugin of this._plugins) {\n if (plugin.props && 'stack' in plugin.props) {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (plugin.props && 'message' in plugin.props) {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n Object.assign(resolved.props, plugin.props ?? this._emptyPlugin.props)\n Object.assign(resolved.methods, plugin.methods ?? this._emptyPlugin.methods)\n resolved.adapt.push(...(plugin.adapt ?? this._emptyPlugin.adapt))\n if (typeof plugin.stack !== 'undefined') {\n resolved.stack = plugin.stack\n }\n if (typeof plugin.cause !== 'undefined') {\n resolved.cause = plugin.cause\n }\n if (typeof plugin.message !== 'undefined') {\n resolved.message = plugin.message\n }\n }\n return resolved\n }\n\n constructor(message: string, input?: ErrorInput<EmptyPluginsMap>)\n constructor(input: { message: string } & ErrorInput<EmptyPluginsMap>)\n constructor(\n ...args:\n | [message: string, input?: ErrorInput<EmptyPluginsMap>]\n | [{ message: string } & ErrorInput<EmptyPluginsMap>]\n ) {\n const [first, second] = args\n const input = typeof first === 'string' ? { message: first, ...(second ?? {}) } : first\n\n super(input.message, { cause: input.cause })\n this.name = 'Error0'\n\n const ctor = this.constructor as typeof Error0\n const plugin = ctor._getResolvedPlugin()\n\n for (const [key, prop] of Object.entries(plugin.props)) {\n if (key === 'stack') {\n continue\n }\n if (key in input) {\n const ownValue = (input as Record<string, unknown>)[key]\n if (typeof prop.init === 'function') {\n ;(this as Record<string, unknown>)[key] = prop.init(ownValue)\n } else {\n ;(this as Record<string, unknown>)[key] = ownValue\n }\n } else {\n Object.defineProperty(this, key, {\n get: () => prop.resolve({ own: undefined, flow: this.flow(key), error: this }),\n set: (value) => {\n Object.defineProperty(this, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n },\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n\n private static readonly isSelfProperty = (object: object, key: string): boolean => {\n const d = Object.getOwnPropertyDescriptor(object, key)\n if (!d) return false\n if (typeof d.get === 'function' || typeof d.set === 'function') {\n if ('name' in object && object.name === 'Error0') {\n return false\n } else {\n return true\n }\n }\n return true\n }\n private static _ownByKey(error: object, key: string): unknown {\n if (this.isSelfProperty(error, key)) {\n return (error as Record<string, unknown>)[key]\n }\n return undefined\n }\n private static _flowByKey(error: object, key: string): unknown[] {\n return this.causes(error, true).map((cause) => {\n return this._ownByKey(cause, key)\n })\n }\n\n static own<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorOwnProps<PluginsMapOf<TThis>>\n static own<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOf<TThis>>[TKey]\n static own(error: unknown, key?: string): unknown {\n const error0 = this.from(error)\n if (key === undefined) {\n const ownValues: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const ownKey of Object.keys(plugin.props)) {\n ownValues[ownKey] = this._ownByKey(error0, ownKey)\n }\n return ownValues\n }\n return this._ownByKey(error0, key)\n }\n own<TThis extends Error0>(this: TThis): ErrorOwnProps<PluginsMapOfInstance<TThis>>\n own<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]\n own(key?: string): unknown {\n const ctor = this.constructor as typeof Error0\n if (key === undefined) {\n return ctor.own(this)\n }\n return ctor._ownByKey(this, key)\n }\n\n static flow<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOf<TThis>>[TKey]>\n static flow(error: unknown, key: string): unknown[]\n static flow(error: unknown, key: string): unknown[] {\n const error0 = this.from(error)\n return this._flowByKey(error0, key)\n }\n flow<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]>\n flow(key: string): unknown[]\n flow(key: string): unknown[] {\n const ctor = this.constructor as typeof Error0\n return ctor._flowByKey(this, key)\n }\n\n static resolve<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorResolvedProps<PluginsMapOf<TThis>>\n static resolve(error: unknown): Record<string, unknown>\n static resolve(error: unknown): Record<string, unknown> {\n const error0 = this.from(error)\n const resolved: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const [key, prop] of Object.entries(plugin.props)) {\n try {\n // resolved[key] = (error0 as unknown as Record<string, unknown>)[key]\n const options = Object.defineProperties(\n {\n error: error0,\n },\n {\n own: {\n get: () => error0.own(key as never),\n },\n flow: {\n get: () => error0.flow(key),\n },\n },\n )\n resolved[key] = prop.resolve(options as never)\n // resolved[key] = prop.resolve({ own: error0.own(key as never), flow: error0.flow(key), error: error0 })\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to resolve property ${key}`, error0)\n }\n }\n return resolved\n }\n resolve<TThis extends Error0>(this: TThis): ErrorResolvedProps<PluginsMapOfInstance<TThis>>\n resolve(): Record<string, unknown>\n resolve(): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.resolve(this)\n }\n\n static causes(error: unknown, instancesOnly?: false): unknown[]\n static causes<T extends typeof Error0>(this: T, error: unknown, instancesOnly: true): Array<InstanceType<T>>\n static causes(error: unknown, instancesOnly?: boolean): unknown[] {\n const causes: unknown[] = []\n let current: unknown = error\n const maxDepth = 99\n const seen = new Set<unknown>()\n for (let depth = 0; depth < maxDepth; depth += 1) {\n if (seen.has(current)) {\n break\n }\n seen.add(current)\n if (!instancesOnly || this.is(current)) {\n causes.push(current)\n }\n if (!current || typeof current !== 'object') {\n break\n }\n current = (current as { cause?: unknown }).cause\n }\n return causes\n }\n causes<TThis extends Error0>(this: TThis, instancesOnly?: false): [TThis, ...unknown[]]\n causes<TThis extends Error0>(this: TThis, instancesOnly: true): [TThis, ...TThis[]]\n causes(instancesOnly?: boolean): unknown[] {\n const ctor = this.constructor as typeof Error0\n if (instancesOnly) {\n return ctor.causes(this, true)\n }\n return ctor.causes(this)\n }\n\n static is<T extends typeof Error0>(this: T, error: unknown): error is InstanceType<T> {\n return error instanceof this\n }\n\n static isSerialized(error: unknown): error is Record<string, unknown> {\n return !this.is(error) && typeof error === 'object' && error !== null && 'name' in error && error.name === 'Error0'\n }\n\n static from(error: unknown): Error0 {\n if (this.is(error)) {\n return error\n }\n if (this.isSerialized(error)) {\n return this._fromSerialized(error)\n }\n return this._fromNonError0(error)\n }\n\n static round(error: unknown, isPublic = false): Error0 {\n return this.from(this.serialize(error, isPublic))\n }\n\n private static _applyAdapt(error: Error0): Error0 {\n const plugin = this._getResolvedPlugin()\n for (const adapt of plugin.adapt) {\n const adapted = adapt(error as any)\n if (adapted && typeof adapted === 'object') {\n Object.assign(error as unknown as Record<string, unknown>, adapted)\n }\n }\n return error\n }\n\n private static _fromSerialized(error: unknown): Error0 {\n const message = this._extractMessage(error)\n if (typeof error !== 'object' || error === null) {\n return this._applyAdapt(new this(message, { cause: error }))\n }\n const errorRecord = error as Record<string, unknown>\n const recreated = new this(message)\n const plugin = this._getResolvedPlugin()\n const propsEntries = Object.entries(plugin.props)\n for (const [key, prop] of propsEntries) {\n if (prop.deserialize === false) {\n continue\n }\n if (!(key in errorRecord)) {\n continue\n }\n try {\n const value = prop.deserialize({ value: errorRecord[key], serialized: errorRecord })\n ;(recreated as unknown as Record<string, unknown>)[key] = value\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to deserialize property ${key}`, errorRecord)\n }\n }\n // we do not serialize causes\n // ;(recreated as unknown as { cause?: unknown }).cause = errorRecord.cause\n if ('stack' in errorRecord) {\n try {\n if (typeof errorRecord.stack === 'string') {\n recreated.stack = errorRecord.stack\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to deserialize stack', errorRecord)\n }\n }\n const causePlugin = plugin.cause\n if (causePlugin?.serialize && 'cause' in errorRecord) {\n try {\n if (this.isSerialized(errorRecord.cause)) {\n ;(recreated as { cause?: unknown }).cause = this._fromSerialized(errorRecord.cause)\n } else {\n ;(recreated as { cause?: unknown }).cause = errorRecord.cause\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to deserialize cause', errorRecord)\n }\n }\n return recreated\n }\n\n private static _fromNonError0(error: unknown): Error0 {\n const message = this._extractMessage(error)\n return this._applyAdapt(new this(message, { cause: error }))\n }\n\n private static _extractMessage(error: unknown): string {\n return (\n (typeof error === 'string'\n ? error\n : typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string'\n ? error.message\n : undefined) || 'Unknown error'\n )\n }\n\n private static _useWithPlugin(\n this: typeof Error0,\n plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>,\n ): ClassError0 {\n const Base = this as unknown as typeof Error0\n const Error0Extended = class Error0 extends Base {}\n ;(Error0Extended as typeof Error0)._plugins = [...Base._plugins, plugin]\n\n const resolved = (Error0Extended as typeof Error0)._getResolvedPlugin()\n for (const [key, method] of Object.entries(resolved.methods)) {\n Object.defineProperty((Error0Extended as typeof Error0).prototype, key, {\n value: function (...args: unknown[]) {\n return method(this as Error0, ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n Object.defineProperty(Error0Extended, key, {\n value: function (error: unknown, ...args: unknown[]) {\n return method(this.from(error), ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n\n return Error0Extended as unknown as ClassError0\n }\n\n private static _pluginFromBuilder(plugin: PluginError0): ErrorPlugin<ErrorPluginProps, ErrorPluginMethods> {\n const pluginRecord = plugin as unknown as {\n _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n }\n return {\n props: { ...(pluginRecord._plugin.props ?? {}) },\n methods: { ...(pluginRecord._plugin.methods ?? {}) },\n adapt: [...(pluginRecord._plugin.adapt ?? [])],\n stack: pluginRecord._plugin.stack,\n cause: pluginRecord._plugin.cause,\n message: pluginRecord._plugin.message,\n }\n }\n\n // static prop<\n // TThis extends typeof Error0,\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // this: TThis,\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n // ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>> {\n // return this.use('prop', key, value)\n // }\n\n // static method<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(\n // this: TThis,\n // key: TKey,\n // value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TArgs, TOutputValue>> {\n // return this.use('method', key, value)\n // }\n\n // static adapt<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('adapt', value)\n // }\n\n // static stack<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('stack', value)\n // }\n\n // static cause<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('cause', value)\n // }\n\n static use<TThis extends typeof Error0, TBuilder extends PluginError0>(\n this: TThis,\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<PluginsMapOf<TThis>, PluginOfBuilder<TBuilder>>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n this: TThis,\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>>\n static use<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(\n this: TThis,\n kind: 'method',\n key: TKey,\n value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TArgs, TOutputValue>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'stack',\n value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'cause',\n value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'message',\n value: ErrorPluginMessage<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use(\n this: typeof Error0,\n first: PluginError0 | 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n key?: unknown,\n value?: ErrorPluginPropOptions<unknown> | ErrorPluginMethodFn<unknown>,\n ): ClassError0 {\n if (first instanceof PluginError0) {\n return this._useWithPlugin(this._pluginFromBuilder(first))\n }\n if (first === 'stack') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"stack\", value) requires stack plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"stack\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n stack: key as ErrorPluginStack,\n })\n }\n if (first === 'cause') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"cause\", value) requires cause plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"cause\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n cause: key as ErrorPluginCause,\n })\n }\n if (first === 'message') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"message\", value) requires message plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"message\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n message: key as ErrorPluginMessage,\n })\n }\n if (first === 'adapt') {\n if (typeof key !== 'function') {\n throw new Error('Error0.use(\"adapt\", value) requires adapt function')\n }\n return this._useWithPlugin({\n adapt: [key as ErrorPluginAdaptFn<Error0, Record<string, unknown>>],\n })\n }\n if (typeof key !== 'string' || value === undefined) {\n throw new Error('Error0.use(kind, key, value) requires key and value')\n }\n\n if (first === 'prop') {\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n return this._useWithPlugin({\n props: { [key]: value as ErrorPluginPropOptions<unknown> },\n })\n }\n return this._useWithPlugin({\n methods: { [key]: value as ErrorPluginMethodFn<unknown> },\n })\n }\n\n static plugin(): PluginError0 {\n return new PluginError0()\n }\n\n static serialize(error: unknown, isPublic = true): Record<string, unknown> {\n const error0 = this.from(error)\n const resolvedProps = this.resolve(error0)\n const resolvedRecord = resolvedProps as Record<string, unknown>\n const plugin = this._getResolvedPlugin()\n const messagePlugin = plugin.message\n let serializedMessage: unknown = error0.message\n try {\n if (messagePlugin) {\n serializedMessage = messagePlugin.serialize({ value: error0.message, error: error0, isPublic })\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize message', error0)\n serializedMessage = error0.message\n }\n const json: Record<string, unknown> = {\n name: error0.name,\n message: serializedMessage,\n // we do not serialize causes, it is enough that we have floated props and adapt helper\n // cause: error0.cause,\n }\n\n const propsEntries = Object.entries(plugin.props)\n for (const [key, prop] of propsEntries) {\n if (prop.serialize === false) {\n continue\n }\n try {\n const value = resolvedRecord[key]\n const jsonValue = prop.serialize({ value, error: error0, isPublic })\n if (jsonValue !== undefined) {\n json[key] = jsonValue\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to serialize property ${key}`, resolvedRecord)\n }\n }\n const stackPlugin = plugin.stack\n try {\n let serializedStack: unknown\n if (stackPlugin) {\n serializedStack = stackPlugin.serialize({ value: error0.stack, error: error0, isPublic })\n } else {\n serializedStack = error0.stack\n }\n if (serializedStack !== undefined) {\n json.stack = serializedStack\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize stack', error0)\n }\n const causePlugin = plugin.cause\n if (causePlugin?.serialize) {\n try {\n const serializedCause = causePlugin.serialize({\n value: (error0 as { cause?: unknown }).cause,\n error: error0,\n isPublic,\n })\n if (serializedCause !== undefined) {\n json.cause = serializedCause\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize cause', error0)\n }\n }\n return Object.fromEntries(Object.entries(json).filter(([, value]) => value !== undefined)) as Record<\n string,\n unknown\n >\n }\n\n serialize(isPublic = true): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.serialize(this, isPublic)\n }\n\n round<TThis extends Error0>(this: TThis, isPublic = true): TThis {\n const ctor = this.constructor as typeof Error0\n return ctor.round(this, isPublic) as TThis\n }\n}\n"],"mappings":"AAuLA,MAAM,4BAA4B;AAClC,MAAM,8BAA8B;AA0E7B,MAAM,aAGX;AAAA,EACiB;AAAA,EAER,QAAQ;AAAA,EAKjB,YAAY,QAA4D;AACtE,SAAK,UAAU;AAAA,MACb,OAAO,EAAE,GAAI,QAAQ,SAAS,CAAC,EAAG;AAAA,MAClC,SAAS,EAAE,GAAI,QAAQ,WAAW,CAAC,EAAG;AAAA,MACtC,OAAO,CAAC,GAAI,QAAQ,SAAS,CAAC,CAAE;AAAA,MAChC,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,MACf,SAAS,QAAQ;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,KAME,KACA,OACsG;AACtG,WAAO,KAAK,IAAI,QAAQ,KAAK,KAAK;AAAA,EACpC;AAAA,EAEA,OACE,KACA,OACqF;AACrF,WAAO,KAAK,IAAI,UAAU,KAAK,KAAK;AAAA,EACtC;AAAA,EAEA,MACE,OACgC;AAChC,WAAO,KAAK,IAAI,SAAS,KAAK;AAAA,EAChC;AAAA,EAEA,MAAM,OAA0F;AAC9F,WAAO,KAAK,IAAI,SAAS,KAAK;AAAA,EAChC;AAAA,EAEA,MAAM,OAA0F;AAC9F,WAAO,KAAK,IAAI,SAAS,KAAK;AAAA,EAChC;AAAA,EAEA,QAAQ,OAA4F;AAClG,WAAO,KAAK,IAAI,WAAW,KAAK;AAAA,EAClC;AAAA,EAwBA,IACE,MACA,YACA,OACwB;AACxB,UAAM,YAA8B,EAAE,GAAI,KAAK,QAAQ,SAAS,CAAC,EAAG;AACpE,UAAM,cAAkC,EAAE,GAAI,KAAK,QAAQ,WAAW,CAAC,EAAG;AAC1E,UAAM,YAAwE,CAAC,GAAI,KAAK,QAAQ,SAAS,CAAC,CAAE;AAC5G,QAAI,YAA0C,KAAK,QAAQ;AAC3D,QAAI,YAA0C,KAAK,QAAQ;AAC3D,QAAI,cAA8C,KAAK,QAAQ;AAC/D,QAAI,SAAS,QAAQ;AACnB,YAAM,MAAM;AACZ,UAAI,QAAQ,SAAS;AACnB,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AACA,UAAI,QAAQ,WAAW;AACrB,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AACA,UAAI,UAAU,QAAW;AACvB,cAAM,IAAI,MAAM,qDAAqD;AAAA,MACvE;AACA,gBAAU,GAAG,IAAI;AAAA,IACnB,WAAW,SAAS,UAAU;AAC5B,YAAM,MAAM;AACZ,UAAI,UAAU,QAAW;AACvB,cAAM,IAAI,MAAM,uDAAuD;AAAA,MACzE;AACA,kBAAY,GAAG,IAAI;AAAA,IACrB,WAAW,SAAS,SAAS;AAC3B,gBAAU,KAAK,UAAiE;AAAA,IAClF,WAAW,SAAS,SAAS;AAC3B,kBAAY;AAAA,IACd,WAAW,SAAS,SAAS;AAC3B,kBAAY;AAAA,IACd,OAAO;AACL,oBAAc;AAAA,IAChB;AACA,WAAO,IAAI,aAAa;AAAA,MACtB,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAkFO,MAAM,eAAe,MAAM;AAAA,EAChC,OAAgB;AAAA,EACP;AAAA,EACT,OAAiB,WAA0B,CAAC;AAAA,EAE5C,OAAwB,eAAoC;AAAA,IAC1D,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,IACV,OAAO,CAAC;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EAEA,OAAe,qBAA6D;AAC1E,UAAM,WAAgC;AAAA,MACpC,OAAO,CAAC;AAAA,MACR,SAAS,CAAC;AAAA,MACV,OAAO,CAAC;AAAA,IACV;AACA,eAAW,UAAU,KAAK,UAAU;AAClC,UAAI,OAAO,SAAS,WAAW,OAAO,OAAO;AAC3C,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AACA,UAAI,OAAO,SAAS,aAAa,OAAO,OAAO;AAC7C,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AACA,aAAO,OAAO,SAAS,OAAO,OAAO,SAAS,KAAK,aAAa,KAAK;AACrE,aAAO,OAAO,SAAS,SAAS,OAAO,WAAW,KAAK,aAAa,OAAO;AAC3E,eAAS,MAAM,KAAK,GAAI,OAAO,SAAS,KAAK,aAAa,KAAM;AAChE,UAAI,OAAO,OAAO,UAAU,aAAa;AACvC,iBAAS,QAAQ,OAAO;AAAA,MAC1B;AACA,UAAI,OAAO,OAAO,UAAU,aAAa;AACvC,iBAAS,QAAQ,OAAO;AAAA,MAC1B;AACA,UAAI,OAAO,OAAO,YAAY,aAAa;AACzC,iBAAS,UAAU,OAAO;AAAA,MAC5B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAIA,eACK,MAGH;AACA,UAAM,CAAC,OAAO,MAAM,IAAI;AACxB,UAAM,QAAQ,OAAO,UAAU,WAAW,EAAE,SAAS,OAAO,GAAI,UAAU,CAAC,EAAG,IAAI;AAElF,UAAM,MAAM,SAAS,EAAE,OAAO,MAAM,MAAM,CAAC;AAC3C,SAAK,OAAO;AAEZ,UAAM,OAAO,KAAK;AAClB,UAAM,SAAS,KAAK,mBAAmB;AAEvC,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG;AACtD,UAAI,QAAQ,SAAS;AACnB;AAAA,MACF;AACA,UAAI,OAAO,OAAO;AAChB,cAAM,WAAY,MAAkC,GAAG;AACvD,YAAI,OAAO,KAAK,SAAS,YAAY;AACnC;AAAC,UAAC,KAAiC,GAAG,IAAI,KAAK,KAAK,QAAQ;AAAA,QAC9D,OAAO;AACL;AAAC,UAAC,KAAiC,GAAG,IAAI;AAAA,QAC5C;AAAA,MACF,OAAO;AACL,eAAO,eAAe,MAAM,KAAK;AAAA,UAC/B,KAAK,MAAM,KAAK,QAAQ,EAAE,KAAK,QAAW,MAAM,KAAK,KAAK,GAAG,GAAG,OAAO,KAAK,CAAC;AAAA,UAC7E,KAAK,CAAC,UAAU;AACd,mBAAO,eAAe,MAAM,KAAK;AAAA,cAC/B;AAAA,cACA,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,cAAc;AAAA,YAChB,CAAC;AAAA,UACH;AAAA,UACA,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAwB,iBAAiB,CAAC,QAAgB,QAAyB;AACjF,UAAM,IAAI,OAAO,yBAAyB,QAAQ,GAAG;AACrD,QAAI,CAAC,EAAG,QAAO;AACf,QAAI,OAAO,EAAE,QAAQ,cAAc,OAAO,EAAE,QAAQ,YAAY;AAC9D,UAAI,UAAU,UAAU,OAAO,SAAS,UAAU;AAChD,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,OAAe,UAAU,OAAe,KAAsB;AAC5D,QAAI,KAAK,eAAe,OAAO,GAAG,GAAG;AACnC,aAAQ,MAAkC,GAAG;AAAA,IAC/C;AACA,WAAO;AAAA,EACT;AAAA,EACA,OAAe,WAAW,OAAe,KAAwB;AAC/D,WAAO,KAAK,OAAO,OAAO,IAAI,EAAE,IAAI,CAAC,UAAU;AAC7C,aAAO,KAAK,UAAU,OAAO,GAAG;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAQA,OAAO,IAAI,OAAgB,KAAuB;AAChD,UAAM,SAAS,KAAK,KAAK,KAAK;AAC9B,QAAI,QAAQ,QAAW;AACrB,YAAM,YAAqC,CAAC;AAC5C,YAAM,SAAS,KAAK,mBAAmB;AACvC,iBAAW,UAAU,OAAO,KAAK,OAAO,KAAK,GAAG;AAC9C,kBAAU,MAAM,IAAI,KAAK,UAAU,QAAQ,MAAM;AAAA,MACnD;AACA,aAAO;AAAA,IACT;AACA,WAAO,KAAK,UAAU,QAAQ,GAAG;AAAA,EACnC;AAAA,EAMA,IAAI,KAAuB;AACzB,UAAM,OAAO,KAAK;AAClB,QAAI,QAAQ,QAAW;AACrB,aAAO,KAAK,IAAI,IAAI;AAAA,IACtB;AACA,WAAO,KAAK,UAAU,MAAM,GAAG;AAAA,EACjC;AAAA,EAQA,OAAO,KAAK,OAAgB,KAAwB;AAClD,UAAM,SAAS,KAAK,KAAK,KAAK;AAC9B,WAAO,KAAK,WAAW,QAAQ,GAAG;AAAA,EACpC;AAAA,EAMA,KAAK,KAAwB;AAC3B,UAAM,OAAO,KAAK;AAClB,WAAO,KAAK,WAAW,MAAM,GAAG;AAAA,EAClC;AAAA,EAIA,OAAO,QAAQ,OAAyC;AACtD,UAAM,SAAS,KAAK,KAAK,KAAK;AAC9B,UAAM,WAAoC,CAAC;AAC3C,UAAM,SAAS,KAAK,mBAAmB;AACvC,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG;AACtD,UAAI;AAEF,cAAM,UAAU,OAAO;AAAA,UACrB;AAAA,YACE,OAAO;AAAA,UACT;AAAA,UACA;AAAA,YACE,KAAK;AAAA,cACH,KAAK,MAAM,OAAO,IAAI,GAAY;AAAA,YACpC;AAAA,YACA,MAAM;AAAA,cACJ,KAAK,MAAM,OAAO,KAAK,GAAG;AAAA,YAC5B;AAAA,UACF;AAAA,QACF;AACA,iBAAS,GAAG,IAAI,KAAK,QAAQ,OAAgB;AAAA,MAE/C,QAAQ;AAEN,gBAAQ,MAAM,sCAAsC,GAAG,IAAI,MAAM;AAAA,MACnE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAGA,UAAmC;AACjC,UAAM,OAAO,KAAK;AAClB,WAAO,KAAK,QAAQ,IAAI;AAAA,EAC1B;AAAA,EAIA,OAAO,OAAO,OAAgB,eAAoC;AAChE,UAAM,SAAoB,CAAC;AAC3B,QAAI,UAAmB;AACvB,UAAM,WAAW;AACjB,UAAM,OAAO,oBAAI,IAAa;AAC9B,aAAS,QAAQ,GAAG,QAAQ,UAAU,SAAS,GAAG;AAChD,UAAI,KAAK,IAAI,OAAO,GAAG;AACrB;AAAA,MACF;AACA,WAAK,IAAI,OAAO;AAChB,UAAI,CAAC,iBAAiB,KAAK,GAAG,OAAO,GAAG;AACtC,eAAO,KAAK,OAAO;AAAA,MACrB;AACA,UAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C;AAAA,MACF;AACA,gBAAW,QAAgC;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAAA,EAGA,OAAO,eAAoC;AACzC,UAAM,OAAO,KAAK;AAClB,QAAI,eAAe;AACjB,aAAO,KAAK,OAAO,MAAM,IAAI;AAAA,IAC/B;AACA,WAAO,KAAK,OAAO,IAAI;AAAA,EACzB;AAAA,EAEA,OAAO,GAAqC,OAA0C;AACpF,WAAO,iBAAiB;AAAA,EAC1B;AAAA,EAEA,OAAO,aAAa,OAAkD;AACpE,WAAO,CAAC,KAAK,GAAG,KAAK,KAAK,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,MAAM,SAAS;AAAA,EAC7G;AAAA,EAEA,OAAO,KAAK,OAAwB;AAClC,QAAI,KAAK,GAAG,KAAK,GAAG;AAClB,aAAO;AAAA,IACT;AACA,QAAI,KAAK,aAAa,KAAK,GAAG;AAC5B,aAAO,KAAK,gBAAgB,KAAK;AAAA,IACnC;AACA,WAAO,KAAK,eAAe,KAAK;AAAA,EAClC;AAAA,EAEA,OAAO,MAAM,OAAgB,WAAW,OAAe;AACrD,WAAO,KAAK,KAAK,KAAK,UAAU,OAAO,QAAQ,CAAC;AAAA,EAClD;AAAA,EAEA,OAAe,YAAY,OAAuB;AAChD,UAAM,SAAS,KAAK,mBAAmB;AACvC,eAAW,SAAS,OAAO,OAAO;AAChC,YAAM,UAAU,MAAM,KAAY;AAClC,UAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,eAAO,OAAO,OAA6C,OAAO;AAAA,MACpE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAe,gBAAgB,OAAwB;AACrD,UAAM,UAAU,KAAK,gBAAgB,KAAK;AAC1C,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,aAAO,KAAK,YAAY,IAAI,KAAK,SAAS,EAAE,OAAO,MAAM,CAAC,CAAC;AAAA,IAC7D;AACA,UAAM,cAAc;AACpB,UAAM,YAAY,IAAI,KAAK,OAAO;AAClC,UAAM,SAAS,KAAK,mBAAmB;AACvC,UAAM,eAAe,OAAO,QAAQ,OAAO,KAAK;AAChD,eAAW,CAAC,KAAK,IAAI,KAAK,cAAc;AACtC,UAAI,KAAK,gBAAgB,OAAO;AAC9B;AAAA,MACF;AACA,UAAI,EAAE,OAAO,cAAc;AACzB;AAAA,MACF;AACA,UAAI;AACF,cAAM,QAAQ,KAAK,YAAY,EAAE,OAAO,YAAY,GAAG,GAAG,YAAY,YAAY,CAAC;AAClF,QAAC,UAAiD,GAAG,IAAI;AAAA,MAC5D,QAAQ;AAEN,gBAAQ,MAAM,0CAA0C,GAAG,IAAI,WAAW;AAAA,MAC5E;AAAA,IACF;AAGA,QAAI,WAAW,aAAa;AAC1B,UAAI;AACF,YAAI,OAAO,YAAY,UAAU,UAAU;AACzC,oBAAU,QAAQ,YAAY;AAAA,QAChC;AAAA,MACF,QAAQ;AAEN,gBAAQ,MAAM,uCAAuC,WAAW;AAAA,MAClE;AAAA,IACF;AACA,UAAM,cAAc,OAAO;AAC3B,QAAI,aAAa,aAAa,WAAW,aAAa;AACpD,UAAI;AACF,YAAI,KAAK,aAAa,YAAY,KAAK,GAAG;AACxC;AAAC,UAAC,UAAkC,QAAQ,KAAK,gBAAgB,YAAY,KAAK;AAAA,QACpF,OAAO;AACL;AAAC,UAAC,UAAkC,QAAQ,YAAY;AAAA,QAC1D;AAAA,MACF,QAAQ;AAEN,gBAAQ,MAAM,uCAAuC,WAAW;AAAA,MAClE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAe,eAAe,OAAwB;AACpD,UAAM,UAAU,KAAK,gBAAgB,KAAK;AAC1C,WAAO,KAAK,YAAY,IAAI,KAAK,SAAS,EAAE,OAAO,MAAM,CAAC,CAAC;AAAA,EAC7D;AAAA,EAEA,OAAe,gBAAgB,OAAwB;AACrD,YACG,OAAO,UAAU,WACd,QACA,OAAO,UAAU,YAAY,UAAU,QAAQ,aAAa,SAAS,OAAO,MAAM,YAAY,WAC5F,MAAM,UACN,WAAc;AAAA,EAExB;AAAA,EAEA,OAAe,eAEb,QACa;AACb,UAAM,OAAO;AACb,UAAM,iBAAiB,MAAM,eAAe,KAAK;AAAA,IAAC;AACjD,IAAC,eAAiC,WAAW,CAAC,GAAG,KAAK,UAAU,MAAM;AAEvE,UAAM,WAAY,eAAiC,mBAAmB;AACtE,eAAW,CAAC,KAAK,MAAM,KAAK,OAAO,QAAQ,SAAS,OAAO,GAAG;AAC5D,aAAO,eAAgB,eAAiC,WAAW,KAAK;AAAA,QACtE,OAAO,YAAa,MAAiB;AACnC,iBAAO,OAAO,MAAgB,GAAG,IAAI;AAAA,QACvC;AAAA,QACA,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AACD,aAAO,eAAe,gBAAgB,KAAK;AAAA,QACzC,OAAO,SAAU,UAAmB,MAAiB;AACnD,iBAAO,OAAO,KAAK,KAAK,KAAK,GAAG,GAAG,IAAI;AAAA,QACzC;AAAA,QACA,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAe,mBAAmB,QAAyE;AACzG,UAAM,eAAe;AAGrB,WAAO;AAAA,MACL,OAAO,EAAE,GAAI,aAAa,QAAQ,SAAS,CAAC,EAAG;AAAA,MAC/C,SAAS,EAAE,GAAI,aAAa,QAAQ,WAAW,CAAC,EAAG;AAAA,MACnD,OAAO,CAAC,GAAI,aAAa,QAAQ,SAAS,CAAC,CAAE;AAAA,MAC7C,OAAO,aAAa,QAAQ;AAAA,MAC5B,OAAO,aAAa,QAAQ;AAAA,MAC5B,SAAS,aAAa,QAAQ;AAAA,IAChC;AAAA,EACF;AAAA,EAuFA,OAAO,IAEL,OACA,KACA,OACa;AACb,QAAI,iBAAiB,cAAc;AACjC,aAAO,KAAK,eAAe,KAAK,mBAAmB,KAAK,CAAC;AAAA,IAC3D;AACA,QAAI,UAAU,SAAS;AACrB,UAAI,OAAO,QAAQ,aAAa;AAC9B,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC1E;AACA,UAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,OAAQ,IAAgC,cAAc,YAAY;AAC/G,cAAM,IAAI,MAAM,4DAA4D;AAAA,MAC9E;AACA,aAAO,KAAK,eAAe;AAAA,QACzB,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,QAAI,UAAU,SAAS;AACrB,UAAI,OAAO,QAAQ,aAAa;AAC9B,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC1E;AACA,UAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,OAAQ,IAAgC,cAAc,YAAY;AAC/G,cAAM,IAAI,MAAM,4DAA4D;AAAA,MAC9E;AACA,aAAO,KAAK,eAAe;AAAA,QACzB,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,QAAI,UAAU,WAAW;AACvB,UAAI,OAAO,QAAQ,aAAa;AAC9B,cAAM,IAAI,MAAM,4DAA4D;AAAA,MAC9E;AACA,UAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,OAAQ,IAAgC,cAAc,YAAY;AAC/G,cAAM,IAAI,MAAM,8DAA8D;AAAA,MAChF;AACA,aAAO,KAAK,eAAe;AAAA,QACzB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,UAAU,SAAS;AACrB,UAAI,OAAO,QAAQ,YAAY;AAC7B,cAAM,IAAI,MAAM,oDAAoD;AAAA,MACtE;AACA,aAAO,KAAK,eAAe;AAAA,QACzB,OAAO,CAAC,GAA0D;AAAA,MACpE,CAAC;AAAA,IACH;AACA,QAAI,OAAO,QAAQ,YAAY,UAAU,QAAW;AAClD,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAEA,QAAI,UAAU,QAAQ;AACpB,UAAI,QAAQ,SAAS;AACnB,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AACA,UAAI,QAAQ,WAAW;AACrB,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AACA,aAAO,KAAK,eAAe;AAAA,QACzB,OAAO,EAAE,CAAC,GAAG,GAAG,MAAyC;AAAA,MAC3D,CAAC;AAAA,IACH;AACA,WAAO,KAAK,eAAe;AAAA,MACzB,SAAS,EAAE,CAAC,GAAG,GAAG,MAAsC;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,SAAuB;AAC5B,WAAO,IAAI,aAAa;AAAA,EAC1B;AAAA,EAEA,OAAO,UAAU,OAAgB,WAAW,MAA+B;AACzE,UAAM,SAAS,KAAK,KAAK,KAAK;AAC9B,UAAM,gBAAgB,KAAK,QAAQ,MAAM;AACzC,UAAM,iBAAiB;AACvB,UAAM,SAAS,KAAK,mBAAmB;AACvC,UAAM,gBAAgB,OAAO;AAC7B,QAAI,oBAA6B,OAAO;AACxC,QAAI;AACF,UAAI,eAAe;AACjB,4BAAoB,cAAc,UAAU,EAAE,OAAO,OAAO,SAAS,OAAO,QAAQ,SAAS,CAAC;AAAA,MAChG;AAAA,IACF,QAAQ;AAEN,cAAQ,MAAM,uCAAuC,MAAM;AAC3D,0BAAoB,OAAO;AAAA,IAC7B;AACA,UAAM,OAAgC;AAAA,MACpC,MAAM,OAAO;AAAA,MACb,SAAS;AAAA;AAAA;AAAA,IAGX;AAEA,UAAM,eAAe,OAAO,QAAQ,OAAO,KAAK;AAChD,eAAW,CAAC,KAAK,IAAI,KAAK,cAAc;AACtC,UAAI,KAAK,cAAc,OAAO;AAC5B;AAAA,MACF;AACA,UAAI;AACF,cAAM,QAAQ,eAAe,GAAG;AAChC,cAAM,YAAY,KAAK,UAAU,EAAE,OAAO,OAAO,QAAQ,SAAS,CAAC;AACnE,YAAI,cAAc,QAAW;AAC3B,eAAK,GAAG,IAAI;AAAA,QACd;AAAA,MACF,QAAQ;AAEN,gBAAQ,MAAM,wCAAwC,GAAG,IAAI,cAAc;AAAA,MAC7E;AAAA,IACF;AACA,UAAM,cAAc,OAAO;AAC3B,QAAI;AACF,UAAI;AACJ,UAAI,aAAa;AACf,0BAAkB,YAAY,UAAU,EAAE,OAAO,OAAO,OAAO,OAAO,QAAQ,SAAS,CAAC;AAAA,MAC1F,OAAO;AACL,0BAAkB,OAAO;AAAA,MAC3B;AACA,UAAI,oBAAoB,QAAW;AACjC,aAAK,QAAQ;AAAA,MACf;AAAA,IACF,QAAQ;AAEN,cAAQ,MAAM,qCAAqC,MAAM;AAAA,IAC3D;AACA,UAAM,cAAc,OAAO;AAC3B,QAAI,aAAa,WAAW;AAC1B,UAAI;AACF,cAAM,kBAAkB,YAAY,UAAU;AAAA,UAC5C,OAAQ,OAA+B;AAAA,UACvC,OAAO;AAAA,UACP;AAAA,QACF,CAAC;AACD,YAAI,oBAAoB,QAAW;AACjC,eAAK,QAAQ;AAAA,QACf;AAAA,MACF,QAAQ;AAEN,gBAAQ,MAAM,qCAAqC,MAAM;AAAA,MAC3D;AAAA,IACF;AACA,WAAO,OAAO,YAAY,OAAO,QAAQ,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,CAAC;AAAA,EAI3F;AAAA,EAEA,UAAU,WAAW,MAA+B;AAClD,UAAM,OAAO,KAAK;AAClB,WAAO,KAAK,UAAU,MAAM,QAAQ;AAAA,EACtC;AAAA,EAEA,MAAyC,WAAW,MAAa;AAC/D,UAAM,OAAO,KAAK;AAClB,WAAO,KAAK,MAAM,MAAM,QAAQ;AAAA,EAClC;AACF;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Error0 } from "../index.js";
|
|
2
|
+
const causeSerializePlugin = Error0.plugin().use("cause", {
|
|
3
|
+
serialize: ({ value, error, isPublic }) => {
|
|
4
|
+
const ctor = error.constructor;
|
|
5
|
+
if (ctor.is(value)) {
|
|
6
|
+
return ctor.serialize(value, isPublic);
|
|
7
|
+
}
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export {
|
|
12
|
+
causeSerializePlugin
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=cause-serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/cause-serialize.ts"],"sourcesContent":["import { Error0 } from '../index.js'\n\nexport const causeSerializePlugin = Error0.plugin().use('cause', {\n serialize: ({ value, error, isPublic }) => {\n const ctor = error.constructor as typeof Error0\n if (ctor.is(value)) {\n return ctor.serialize(value, isPublic)\n }\n return undefined\n },\n})\n"],"mappings":"AAAA,SAAS,cAAc;AAEhB,MAAM,uBAAuB,OAAO,OAAO,EAAE,IAAI,SAAS;AAAA,EAC/D,WAAW,CAAC,EAAE,OAAO,OAAO,SAAS,MAAM;AACzC,UAAM,OAAO,MAAM;AACnB,QAAI,KAAK,GAAG,KAAK,GAAG;AAClB,aAAO,KAAK,UAAU,OAAO,QAAQ;AAAA,IACvC;AACA,WAAO;AAAA,EACT;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PluginError0, ErrorPluginPropOptions, Error0, ErrorPluginMethodFn } from '../index.js';
|
|
2
|
+
|
|
3
|
+
declare const expectedPlugin: PluginError0<Record<never, never> & Record<"expected", ErrorPluginPropOptions<boolean, boolean, Error0, boolean>>, Record<never, never> & Record<"isExpected", ErrorPluginMethodFn<boolean, [], Error0>>>;
|
|
4
|
+
|
|
5
|
+
export { expectedPlugin };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Error0 } from "../index.js";
|
|
2
|
+
const isExpected = (flow) => {
|
|
3
|
+
let expected = false;
|
|
4
|
+
for (const value of flow) {
|
|
5
|
+
if (value === false) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
if (value === true) {
|
|
9
|
+
expected = true;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return expected;
|
|
13
|
+
};
|
|
14
|
+
const expectedPlugin = Error0.plugin().use("prop", "expected", {
|
|
15
|
+
init: (input) => input,
|
|
16
|
+
resolve: ({ flow }) => isExpected(flow),
|
|
17
|
+
serialize: ({ value }) => value,
|
|
18
|
+
deserialize: ({ value }) => typeof value === "boolean" ? value : void 0
|
|
19
|
+
}).use("method", "isExpected", (error) => {
|
|
20
|
+
return isExpected(error.flow("expected"));
|
|
21
|
+
});
|
|
22
|
+
export {
|
|
23
|
+
expectedPlugin
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=expected.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/expected.ts"],"sourcesContent":["import { Error0 } from '../index.js'\n\nconst isExpected = (flow: unknown[]) => {\n let expected = false\n for (const value of flow) {\n if (value === false) {\n return false\n }\n if (value === true) {\n expected = true\n }\n }\n return expected\n}\n\nexport const expectedPlugin = Error0.plugin()\n .use('prop', 'expected', {\n init: (input: boolean) => input,\n resolve: ({ flow }) => isExpected(flow),\n serialize: ({ value }) => value,\n deserialize: ({ value }) => (typeof value === 'boolean' ? value : undefined),\n })\n .use('method', 'isExpected', (error) => {\n return isExpected(error.flow('expected'))\n })\n"],"mappings":"AAAA,SAAS,cAAc;AAEvB,MAAM,aAAa,CAAC,SAAoB;AACtC,MAAI,WAAW;AACf,aAAW,SAAS,MAAM;AACxB,QAAI,UAAU,OAAO;AACnB,aAAO;AAAA,IACT;AACA,QAAI,UAAU,MAAM;AAClB,iBAAW;AAAA,IACb;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,iBAAiB,OAAO,OAAO,EACzC,IAAI,QAAQ,YAAY;AAAA,EACvB,MAAM,CAAC,UAAmB;AAAA,EAC1B,SAAS,CAAC,EAAE,KAAK,MAAM,WAAW,IAAI;AAAA,EACtC,WAAW,CAAC,EAAE,MAAM,MAAM;AAAA,EAC1B,aAAa,CAAC,EAAE,MAAM,MAAO,OAAO,UAAU,YAAY,QAAQ;AACpE,CAAC,EACA,IAAI,UAAU,cAAc,CAAC,UAAU;AACtC,SAAO,WAAW,MAAM,KAAK,UAAU,CAAC;AAC1C,CAAC;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Error0 } from "../index.js";
|
|
2
|
+
const messageMergePlugin = Error0.plugin().use("message", {
|
|
3
|
+
serialize: ({ error }) => {
|
|
4
|
+
return error.causes().map((cause) => {
|
|
5
|
+
return cause instanceof Error ? cause.message : void 0;
|
|
6
|
+
}).filter((value) => typeof value === "string").join(": ") || "Unknown error";
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export {
|
|
10
|
+
messageMergePlugin
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=message-merge.js.map
|