@devp0nt/error0 1.0.0-next.40 → 1.0.0-next.42
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 +131 -164
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +130 -125
- package/dist/esm/index.d.ts +130 -125
- package/dist/esm/index.js +130 -163
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.test.ts +130 -118
- package/src/index.ts +344 -398
package/dist/esm/index.js
CHANGED
|
@@ -1,83 +1,66 @@
|
|
|
1
|
-
class
|
|
2
|
-
|
|
1
|
+
class PluginError0 {
|
|
2
|
+
_plugin;
|
|
3
3
|
Infer = void 0;
|
|
4
|
-
constructor(
|
|
5
|
-
this.
|
|
6
|
-
props: { ...
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
refine: [...extension?.refine ?? []]
|
|
4
|
+
constructor(plugin) {
|
|
5
|
+
this._plugin = {
|
|
6
|
+
props: { ...plugin?.props ?? {} },
|
|
7
|
+
methods: { ...plugin?.methods ?? {} },
|
|
8
|
+
adapt: [...plugin?.adapt ?? []]
|
|
10
9
|
};
|
|
11
10
|
}
|
|
12
11
|
prop(key, value) {
|
|
13
|
-
return this.
|
|
14
|
-
}
|
|
15
|
-
computed(key, value) {
|
|
16
|
-
return this.extend("computed", key, value);
|
|
12
|
+
return this.use("prop", key, value);
|
|
17
13
|
}
|
|
18
14
|
method(key, value) {
|
|
19
|
-
return this.
|
|
15
|
+
return this.use("method", key, value);
|
|
20
16
|
}
|
|
21
|
-
|
|
22
|
-
return this.
|
|
17
|
+
adapt(value) {
|
|
18
|
+
return this.use("adapt", value);
|
|
23
19
|
}
|
|
24
|
-
|
|
25
|
-
const nextProps = { ...this.
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const nextRefine = [
|
|
29
|
-
...this._extension.refine ?? []
|
|
30
|
-
];
|
|
20
|
+
use(kind, keyOrValue, value) {
|
|
21
|
+
const nextProps = { ...this._plugin.props ?? {} };
|
|
22
|
+
const nextMethods = { ...this._plugin.methods ?? {} };
|
|
23
|
+
const nextAdapt = [...this._plugin.adapt ?? []];
|
|
31
24
|
if (kind === "prop") {
|
|
32
25
|
const key = keyOrValue;
|
|
33
26
|
if (value === void 0) {
|
|
34
|
-
throw new Error('
|
|
27
|
+
throw new Error('PluginError0.use("prop", key, value) requires value');
|
|
35
28
|
}
|
|
36
29
|
nextProps[key] = value;
|
|
37
|
-
} else if (kind === "computed") {
|
|
38
|
-
const key = keyOrValue;
|
|
39
|
-
if (value === void 0) {
|
|
40
|
-
throw new Error('ExtensionError0.extend("computed", key, value) requires value');
|
|
41
|
-
}
|
|
42
|
-
nextComputed[key] = value;
|
|
43
30
|
} else if (kind === "method") {
|
|
44
31
|
const key = keyOrValue;
|
|
45
32
|
if (value === void 0) {
|
|
46
|
-
throw new Error('
|
|
33
|
+
throw new Error('PluginError0.use("method", key, value) requires value');
|
|
47
34
|
}
|
|
48
35
|
nextMethods[key] = value;
|
|
49
36
|
} else {
|
|
50
|
-
|
|
37
|
+
nextAdapt.push(keyOrValue);
|
|
51
38
|
}
|
|
52
|
-
return new
|
|
39
|
+
return new PluginError0({
|
|
53
40
|
props: nextProps,
|
|
54
|
-
computed: nextComputed,
|
|
55
41
|
methods: nextMethods,
|
|
56
|
-
|
|
42
|
+
adapt: nextAdapt
|
|
57
43
|
});
|
|
58
44
|
}
|
|
59
45
|
}
|
|
60
46
|
class Error0 extends Error {
|
|
61
|
-
static
|
|
62
|
-
static
|
|
63
|
-
static
|
|
47
|
+
static __pluginsMap;
|
|
48
|
+
static _plugins = [];
|
|
49
|
+
static _emptyPlugin = {
|
|
64
50
|
props: {},
|
|
65
|
-
computed: {},
|
|
66
51
|
methods: {},
|
|
67
|
-
|
|
52
|
+
adapt: []
|
|
68
53
|
};
|
|
69
|
-
static
|
|
54
|
+
static _getResolvedPlugin() {
|
|
70
55
|
const resolved = {
|
|
71
56
|
props: {},
|
|
72
|
-
computed: {},
|
|
73
57
|
methods: {},
|
|
74
|
-
|
|
58
|
+
adapt: []
|
|
75
59
|
};
|
|
76
|
-
for (const
|
|
77
|
-
Object.assign(resolved.props,
|
|
78
|
-
Object.assign(resolved.
|
|
79
|
-
|
|
80
|
-
resolved.refine.push(...extension.refine ?? this._emptyExtension.refine);
|
|
60
|
+
for (const plugin of this._plugins) {
|
|
61
|
+
Object.assign(resolved.props, plugin.props ?? this._emptyPlugin.props);
|
|
62
|
+
Object.assign(resolved.methods, plugin.methods ?? this._emptyPlugin.methods);
|
|
63
|
+
resolved.adapt.push(...plugin.adapt ?? this._emptyPlugin.adapt);
|
|
81
64
|
}
|
|
82
65
|
return resolved;
|
|
83
66
|
}
|
|
@@ -87,14 +70,14 @@ class Error0 extends Error {
|
|
|
87
70
|
super(input.message, { cause: input.cause });
|
|
88
71
|
this.name = "Error0";
|
|
89
72
|
const ctor = this.constructor;
|
|
90
|
-
const
|
|
91
|
-
for (const [key, prop] of Object.entries(
|
|
73
|
+
const plugin = ctor._getResolvedPlugin();
|
|
74
|
+
for (const [key, prop] of Object.entries(plugin.props)) {
|
|
92
75
|
if (key in input) {
|
|
93
76
|
const ownValue = input[key];
|
|
94
|
-
this[key] = prop.
|
|
77
|
+
this[key] = prop.init(ownValue);
|
|
95
78
|
} else {
|
|
96
79
|
Object.defineProperty(this, key, {
|
|
97
|
-
get: () => prop.
|
|
80
|
+
get: () => prop.resolve({ value: void 0, flow: this.flow(key), error: this }),
|
|
98
81
|
set: (value) => {
|
|
99
82
|
Object.defineProperty(this, key, {
|
|
100
83
|
value,
|
|
@@ -108,21 +91,6 @@ class Error0 extends Error {
|
|
|
108
91
|
});
|
|
109
92
|
}
|
|
110
93
|
}
|
|
111
|
-
for (const [key, computed] of Object.entries(extension.computed)) {
|
|
112
|
-
Object.defineProperty(this, key, {
|
|
113
|
-
get: () => computed(this),
|
|
114
|
-
set: (value) => {
|
|
115
|
-
Object.defineProperty(this, key, {
|
|
116
|
-
value,
|
|
117
|
-
writable: true,
|
|
118
|
-
enumerable: true,
|
|
119
|
-
configurable: true
|
|
120
|
-
});
|
|
121
|
-
},
|
|
122
|
-
enumerable: true,
|
|
123
|
-
configurable: true
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
94
|
}
|
|
127
95
|
static isSelfProperty = (object, key) => {
|
|
128
96
|
const d = Object.getOwnPropertyDescriptor(object, key);
|
|
@@ -146,118 +114,108 @@ class Error0 extends Error {
|
|
|
146
114
|
const ctor = this.constructor;
|
|
147
115
|
return ctor.own(this, key);
|
|
148
116
|
}
|
|
149
|
-
static flow(error, key
|
|
150
|
-
return this.causes(error,
|
|
151
|
-
|
|
152
|
-
if (this.isSelfProperty(causeRecord, key)) {
|
|
153
|
-
return causeRecord[key];
|
|
154
|
-
}
|
|
155
|
-
return void 0;
|
|
117
|
+
static flow(error, key) {
|
|
118
|
+
return this.causes(error, true).map((cause) => {
|
|
119
|
+
return this.own(cause, key);
|
|
156
120
|
});
|
|
157
121
|
}
|
|
158
|
-
flow(key
|
|
122
|
+
flow(key) {
|
|
159
123
|
const ctor = this.constructor;
|
|
160
|
-
return ctor.flow(this, key
|
|
124
|
+
return ctor.flow(this, key);
|
|
161
125
|
}
|
|
162
|
-
static causes(error,
|
|
126
|
+
static causes(error, instancesOnly) {
|
|
163
127
|
const causes = [];
|
|
164
128
|
let current = error;
|
|
165
129
|
const maxDepth = 99;
|
|
166
130
|
const seen = /* @__PURE__ */ new Set();
|
|
167
131
|
for (let depth = 0; depth < maxDepth; depth += 1) {
|
|
168
|
-
if (!current || typeof current !== "object") {
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
132
|
if (seen.has(current)) {
|
|
172
133
|
break;
|
|
173
134
|
}
|
|
174
|
-
if (policy === "instance") {
|
|
175
|
-
if (!this.is(current)) {
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
} else if (policy === "error0") {
|
|
179
|
-
if (!this.isError0(current)) {
|
|
180
|
-
break;
|
|
181
|
-
}
|
|
182
|
-
} else if (policy === "likeError0") {
|
|
183
|
-
if (!this.isLikeError0(current)) {
|
|
184
|
-
break;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
135
|
seen.add(current);
|
|
188
|
-
|
|
136
|
+
if (!instancesOnly || this.is(current)) {
|
|
137
|
+
causes.push(current);
|
|
138
|
+
}
|
|
139
|
+
if (!current || typeof current !== "object") {
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
189
142
|
current = current.cause;
|
|
190
143
|
}
|
|
191
144
|
return causes;
|
|
192
145
|
}
|
|
193
|
-
causes(
|
|
146
|
+
causes(instancesOnly) {
|
|
194
147
|
const ctor = this.constructor;
|
|
195
|
-
|
|
148
|
+
if (instancesOnly) {
|
|
149
|
+
return ctor.causes(this, true);
|
|
150
|
+
}
|
|
151
|
+
return ctor.causes(this);
|
|
196
152
|
}
|
|
197
153
|
static is(error) {
|
|
198
154
|
return error instanceof this;
|
|
199
155
|
}
|
|
200
|
-
static
|
|
201
|
-
return error
|
|
202
|
-
}
|
|
203
|
-
static isLikeError0(error) {
|
|
204
|
-
return error instanceof Error0 || typeof error === "object" && error !== null && "name" in error && error.name === "Error0";
|
|
156
|
+
static isSerialized(error) {
|
|
157
|
+
return !this.is(error) && typeof error === "object" && error !== null && "name" in error && error.name === "Error0";
|
|
205
158
|
}
|
|
206
159
|
static from(error) {
|
|
207
160
|
if (this.is(error)) {
|
|
208
161
|
return error;
|
|
209
162
|
}
|
|
210
|
-
if (this.
|
|
211
|
-
return this.
|
|
163
|
+
if (this.isSerialized(error)) {
|
|
164
|
+
return this._fromSerialized(error);
|
|
212
165
|
}
|
|
213
166
|
return this._fromNonError0(error);
|
|
214
167
|
}
|
|
215
|
-
static
|
|
216
|
-
const
|
|
217
|
-
for (const
|
|
218
|
-
const
|
|
219
|
-
if (
|
|
220
|
-
Object.assign(error,
|
|
168
|
+
static _applyAdapt(error) {
|
|
169
|
+
const plugin = this._getResolvedPlugin();
|
|
170
|
+
for (const adapt of plugin.adapt) {
|
|
171
|
+
const adapted = adapt(error);
|
|
172
|
+
if (adapted && typeof adapted === "object") {
|
|
173
|
+
Object.assign(error, adapted);
|
|
221
174
|
}
|
|
222
175
|
}
|
|
223
176
|
return error;
|
|
224
177
|
}
|
|
225
|
-
static
|
|
178
|
+
static _fromSerialized(error) {
|
|
226
179
|
const message = this._extractMessage(error);
|
|
227
180
|
if (typeof error !== "object" || error === null) {
|
|
228
|
-
return this.
|
|
181
|
+
return this._applyAdapt(new this(message, { cause: error }));
|
|
229
182
|
}
|
|
230
183
|
const errorRecord = error;
|
|
231
184
|
const recreated = new this(message);
|
|
232
|
-
const
|
|
233
|
-
const
|
|
234
|
-
for (const [key, prop] of
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
185
|
+
const plugin = this._getResolvedPlugin();
|
|
186
|
+
const propsEntries = Object.entries(plugin.props);
|
|
187
|
+
for (const [key, prop] of propsEntries) {
|
|
188
|
+
if (prop.deserialize === false) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (!(key in errorRecord)) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
const value = prop.deserialize({ value: errorRecord[key], serialized: errorRecord });
|
|
238
196
|
recreated[key] = value;
|
|
197
|
+
} catch {
|
|
239
198
|
}
|
|
240
199
|
}
|
|
241
|
-
;
|
|
242
|
-
|
|
243
|
-
if (typeof errorRecord.stack === "string") {
|
|
200
|
+
const isStackInProps = propsEntries.some(([key]) => key === "stack");
|
|
201
|
+
if (typeof errorRecord.stack === "string" && !isStackInProps) {
|
|
244
202
|
recreated.stack = errorRecord.stack;
|
|
245
203
|
}
|
|
246
|
-
return
|
|
204
|
+
return recreated;
|
|
247
205
|
}
|
|
248
206
|
static _fromNonError0(error) {
|
|
249
207
|
const message = this._extractMessage(error);
|
|
250
|
-
return this.
|
|
208
|
+
return this._applyAdapt(new this(message, { cause: error }));
|
|
251
209
|
}
|
|
252
210
|
static _extractMessage(error) {
|
|
253
211
|
return (typeof error === "string" ? error : typeof error === "object" && error !== null && "message" in error && typeof error.message === "string" ? error.message : void 0) || "Unknown error";
|
|
254
212
|
}
|
|
255
|
-
static
|
|
213
|
+
static _useWithPlugin(plugin) {
|
|
256
214
|
const Base = this;
|
|
257
215
|
const Error0Extended = class Error0 extends Base {
|
|
258
216
|
};
|
|
259
|
-
Error0Extended.
|
|
260
|
-
const resolved = Error0Extended.
|
|
217
|
+
Error0Extended._plugins = [...Base._plugins, plugin];
|
|
218
|
+
const resolved = Error0Extended._getResolvedPlugin();
|
|
261
219
|
for (const [key, method] of Object.entries(resolved.methods)) {
|
|
262
220
|
Object.defineProperty(Error0Extended.prototype, key, {
|
|
263
221
|
value: function(...args) {
|
|
@@ -278,69 +236,78 @@ class Error0 extends Error {
|
|
|
278
236
|
}
|
|
279
237
|
return Error0Extended;
|
|
280
238
|
}
|
|
281
|
-
static
|
|
282
|
-
const
|
|
239
|
+
static _pluginFromBuilder(plugin) {
|
|
240
|
+
const pluginRecord = plugin;
|
|
283
241
|
return {
|
|
284
|
-
props: { ...
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
refine: [...extensionRecord._extension.refine ?? []]
|
|
242
|
+
props: { ...pluginRecord._plugin.props ?? {} },
|
|
243
|
+
methods: { ...pluginRecord._plugin.methods ?? {} },
|
|
244
|
+
adapt: [...pluginRecord._plugin.adapt ?? []]
|
|
288
245
|
};
|
|
289
246
|
}
|
|
290
|
-
static
|
|
291
|
-
|
|
292
|
-
|
|
247
|
+
static prop(key, value) {
|
|
248
|
+
return this.use("prop", key, value);
|
|
249
|
+
}
|
|
250
|
+
static method(key, value) {
|
|
251
|
+
return this.use("method", key, value);
|
|
252
|
+
}
|
|
253
|
+
static adapt(value) {
|
|
254
|
+
return this.use("adapt", value);
|
|
255
|
+
}
|
|
256
|
+
static use(first, key, value) {
|
|
257
|
+
if (first instanceof PluginError0) {
|
|
258
|
+
return this._useWithPlugin(this._pluginFromBuilder(first));
|
|
293
259
|
}
|
|
294
|
-
if (first === "
|
|
260
|
+
if (first === "adapt") {
|
|
295
261
|
if (typeof key !== "function") {
|
|
296
|
-
throw new Error('Error0.
|
|
262
|
+
throw new Error('Error0.use("adapt", value) requires adapt function');
|
|
297
263
|
}
|
|
298
|
-
return this.
|
|
299
|
-
|
|
264
|
+
return this._useWithPlugin({
|
|
265
|
+
adapt: [key]
|
|
300
266
|
});
|
|
301
267
|
}
|
|
302
268
|
if (typeof key !== "string" || value === void 0) {
|
|
303
|
-
throw new Error("Error0.
|
|
269
|
+
throw new Error("Error0.use(kind, key, value) requires key and value");
|
|
304
270
|
}
|
|
305
271
|
if (first === "prop") {
|
|
306
|
-
return this.
|
|
272
|
+
return this._useWithPlugin({
|
|
307
273
|
props: { [key]: value }
|
|
308
274
|
});
|
|
309
275
|
}
|
|
310
|
-
|
|
311
|
-
return this._extendWithExtension({
|
|
312
|
-
computed: { [key]: value }
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
return this._extendWithExtension({
|
|
276
|
+
return this._useWithPlugin({
|
|
316
277
|
methods: { [key]: value }
|
|
317
278
|
});
|
|
318
279
|
}
|
|
319
|
-
static
|
|
320
|
-
return new
|
|
280
|
+
static plugin() {
|
|
281
|
+
return new PluginError0();
|
|
321
282
|
}
|
|
322
283
|
static serialize(error, isPublic = true) {
|
|
323
284
|
const error0 = this.from(error);
|
|
324
|
-
const
|
|
285
|
+
const json = {
|
|
325
286
|
name: error0.name,
|
|
326
|
-
message: error0.message
|
|
327
|
-
|
|
328
|
-
|
|
287
|
+
message: error0.message
|
|
288
|
+
// we do not serialize causes, it is enough that we have floated props and adapt helper
|
|
289
|
+
// cause: error0.cause,
|
|
329
290
|
};
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
291
|
+
const plugin = this._getResolvedPlugin();
|
|
292
|
+
const propsEntries = Object.entries(plugin.props);
|
|
293
|
+
for (const [key, prop] of propsEntries) {
|
|
294
|
+
if (prop.serialize === false) {
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
try {
|
|
298
|
+
const value = prop.resolve({ value: error0.own(key), flow: error0.flow(key), error: error0 });
|
|
299
|
+
const jsonValue = prop.serialize({ value, error: error0, isPublic });
|
|
300
|
+
if (jsonValue !== void 0) {
|
|
301
|
+
json[key] = jsonValue;
|
|
340
302
|
}
|
|
303
|
+
} catch {
|
|
341
304
|
}
|
|
342
305
|
}
|
|
343
|
-
|
|
306
|
+
const isStackInProps = propsEntries.some(([key]) => key === "stack");
|
|
307
|
+
if (!isStackInProps && typeof error0.stack === "string") {
|
|
308
|
+
json.stack = error0.stack;
|
|
309
|
+
}
|
|
310
|
+
return Object.fromEntries(Object.entries(json).filter(([, value]) => value !== void 0));
|
|
344
311
|
}
|
|
345
312
|
serialize(isPublic = true) {
|
|
346
313
|
const ctor = this.constructor;
|
|
@@ -349,6 +316,6 @@ class Error0 extends Error {
|
|
|
349
316
|
}
|
|
350
317
|
export {
|
|
351
318
|
Error0,
|
|
352
|
-
|
|
319
|
+
PluginError0
|
|
353
320
|
};
|
|
354
321
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export type ErrorExtensionPropOptions<TInputValue, TOutputValue, TError extends Error0 = Error0> = {\n input: (value: TInputValue) => TOutputValue\n output: (error: TError) => TOutputValue\n serialize: (value: TOutputValue, error: TError, isPublic: boolean) => unknown\n}\nexport type ErrorExtensionCopmputedFn<TOutputValue, TError extends Error0 = Error0> = (error: TError) => TOutputValue\nexport type ErrorExtensionMethodFn<\n TOutputValue,\n TArgs extends unknown[] = unknown[],\n TError extends Error0 = Error0,\n> = (error: TError, ...args: TArgs) => TOutputValue\nexport type ErrorExtensionRefineResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined\nexport type ErrorExtensionRefineFn<\n TError extends Error0 = Error0,\n TOutputProps extends Record<string, unknown> = Record<never, never>,\n> = ((error: TError) => void) | ((error: TError) => ErrorExtensionRefineResult<TOutputProps>)\ntype ErrorMethodRecord = {\n args: unknown[]\n output: unknown\n}\n\nexport type ErrorExtensionProps = { [key: string]: ErrorExtensionPropOptions<any, any> }\nexport type ErrorExtensionComputed = { [key: string]: ErrorExtensionCopmputedFn<any> }\nexport type ErrorExtensionMethods = { [key: string]: ErrorExtensionMethodFn<any, any[]> }\n\nexport type ErrorExtension<\n TProps extends ErrorExtensionProps = Record<never, never>,\n TComputed extends ErrorExtensionComputed = Record<never, never>,\n TMethods extends ErrorExtensionMethods = Record<never, never>,\n> = {\n props?: TProps\n computed?: TComputed\n methods?: TMethods\n refine?: Array<ErrorExtensionRefineFn<Error0, ExtensionOutputProps<TProps>>>\n}\ntype AddPropToExtensionProps<\n TProps extends ErrorExtensionProps,\n TKey extends string,\n TInputValue,\n TOutputValue,\n> = TProps & Record<TKey, ErrorExtensionPropOptions<TInputValue, TOutputValue>>\ntype AddComputedToExtensionComputed<\n TComputed extends ErrorExtensionComputed,\n TKey extends string,\n TOutputValue,\n> = TComputed & Record<TKey, ErrorExtensionCopmputedFn<TOutputValue>>\ntype AddMethodToExtensionMethods<\n TMethods extends ErrorExtensionMethods,\n TKey extends string,\n TArgs extends unknown[],\n TOutputValue,\n> = TMethods & Record<TKey, ErrorExtensionMethodFn<TOutputValue, TArgs>>\ntype ExtensionOutputProps<TProps extends ErrorExtensionProps> = {\n [TKey in keyof TProps]: TProps[TKey] extends ErrorExtensionPropOptions<any, infer TOutputValue> ? TOutputValue : never\n}\nexport type ErrorExtensionsMap = {\n props: Record<string, { input: unknown; output: unknown }>\n computed: Record<string, unknown>\n methods: Record<string, ErrorMethodRecord>\n}\nexport type IsEmptyObject<T> = keyof T extends never ? true : false\nexport type ErrorInputBase = {\n cause?: unknown\n}\nexport type ErrorInput<TExtensionsMap extends ErrorExtensionsMap> =\n IsEmptyObject<TExtensionsMap['props']> extends true\n ? ErrorInputBase\n : ErrorInputBase &\n Partial<{\n [TKey in keyof TExtensionsMap['props']]: TExtensionsMap['props'][TKey]['input']\n }>\n\ntype ErrorOutputProps<TExtensionsMap extends ErrorExtensionsMap> = {\n [TKey in keyof TExtensionsMap['props']]: TExtensionsMap['props'][TKey]['output']\n}\ntype ErrorOutputComputed<TExtensionsMap extends ErrorExtensionsMap> = {\n [TKey in keyof TExtensionsMap['computed']]: TExtensionsMap['computed'][TKey]\n}\ntype ErrorOutputMethods<TExtensionsMap extends ErrorExtensionsMap> = {\n [TKey in keyof TExtensionsMap['methods']]: TExtensionsMap['methods'][TKey] extends {\n args: infer TArgs extends unknown[]\n output: infer TOutput\n }\n ? (...args: TArgs) => TOutput\n : never\n}\nexport type ErrorOutput<TExtensionsMap extends ErrorExtensionsMap> = ErrorOutputProps<TExtensionsMap> &\n ErrorOutputComputed<TExtensionsMap> &\n ErrorOutputMethods<TExtensionsMap>\n\ntype ErrorStaticMethods<TExtensionsMap extends ErrorExtensionsMap> = {\n [TKey in keyof TExtensionsMap['methods']]: TExtensionsMap['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 EmptyExtensionsMap = {\n props: Record<never, { input: never; output: never }>\n computed: Record<never, never>\n methods: Record<never, ErrorMethodRecord>\n}\n\ntype ErrorExtensionResolved = {\n props: Record<string, ErrorExtensionPropOptions<unknown, unknown>>\n computed: Record<string, ErrorExtensionCopmputedFn<unknown>>\n methods: Record<string, ErrorExtensionMethodFn<unknown>>\n refine: Array<ErrorExtensionRefineFn<Error0, Record<string, unknown>>>\n}\n\ntype ExtensionPropsMapOf<TExtension extends ErrorExtension> = {\n [TKey in keyof NonNullable<TExtension['props']>]: NonNullable<\n TExtension['props']\n >[TKey] extends ErrorExtensionPropOptions<infer TInputValue, infer TOutputValue>\n ? { input: TInputValue; output: TOutputValue }\n : never\n}\ntype ExtensionComputedMapOf<TExtension extends ErrorExtension> = {\n [TKey in keyof NonNullable<TExtension['computed']>]: NonNullable<\n TExtension['computed']\n >[TKey] extends ErrorExtensionCopmputedFn<infer TOutputValue>\n ? TOutputValue\n : never\n}\ntype ExtensionMethodsMapOf<TExtension extends ErrorExtension> = {\n [TKey in keyof NonNullable<TExtension['methods']>]: NonNullable<TExtension['methods']>[TKey] extends (\n error: Error0,\n ...args: infer TArgs extends unknown[]\n ) => infer TOutput\n ? { args: TArgs; output: TOutput }\n : never\n}\ntype ErrorExtensionsMapOfExtension<TExtension extends ErrorExtension> = {\n props: ExtensionPropsMapOf<TExtension>\n computed: ExtensionComputedMapOf<TExtension>\n methods: ExtensionMethodsMapOf<TExtension>\n}\ntype ExtendErrorExtensionsMap<TMap extends ErrorExtensionsMap, TExtension extends ErrorExtension> = {\n props: TMap['props'] & ErrorExtensionsMapOfExtension<TExtension>['props']\n computed: TMap['computed'] & ErrorExtensionsMapOfExtension<TExtension>['computed']\n methods: TMap['methods'] & ErrorExtensionsMapOfExtension<TExtension>['methods']\n}\ntype ExtendErrorExtensionsMapWithProp<\n TMap extends ErrorExtensionsMap,\n TKey extends string,\n TInputValue,\n TOutputValue,\n> = ExtendErrorExtensionsMap<TMap, ErrorExtension<Record<TKey, ErrorExtensionPropOptions<TInputValue, TOutputValue>>>>\ntype ExtendErrorExtensionsMapWithComputed<\n TMap extends ErrorExtensionsMap,\n TKey extends string,\n TOutputValue,\n> = ExtendErrorExtensionsMap<\n TMap,\n ErrorExtension<Record<never, never>, Record<TKey, ErrorExtensionCopmputedFn<TOutputValue>>>\n>\ntype ExtendErrorExtensionsMapWithMethod<\n TMap extends ErrorExtensionsMap,\n TKey extends string,\n TArgs extends unknown[],\n TOutputValue,\n> = ExtendErrorExtensionsMap<\n TMap,\n ErrorExtension<Record<never, never>, Record<never, never>, Record<TKey, ErrorExtensionMethodFn<TOutputValue, TArgs>>>\n>\n\ntype ExtensionsMapOf<TClass> = TClass extends { __extensionsMap?: infer TExtensionsMap }\n ? TExtensionsMap extends ErrorExtensionsMap\n ? TExtensionsMap\n : EmptyExtensionsMap\n : EmptyExtensionsMap\n\ntype ExtensionsMapFromParts<\n TProps extends ErrorExtensionProps,\n TComputed extends ErrorExtensionComputed,\n TMethods extends ErrorExtensionMethods,\n> = ErrorExtensionsMapOfExtension<ErrorExtension<TProps, TComputed, TMethods>>\ntype ErrorInstanceOfMap<TMap extends ErrorExtensionsMap> = Error0 & ErrorOutput<TMap>\ntype BuilderError0<\n TProps extends ErrorExtensionProps,\n TComputed extends ErrorExtensionComputed,\n TMethods extends ErrorExtensionMethods,\n> = Error0 & ErrorOutput<ExtensionsMapFromParts<TProps, TComputed, TMethods>>\n\ntype ExtensionOfBuilder<TBuilder> =\n TBuilder extends ExtensionError0<infer TProps, infer TComputed, infer TMethods>\n ? ErrorExtension<TProps, TComputed, TMethods>\n : never\n\nexport type ErrorFlowPolicy = 'instance' | 'error0' | 'likeError0' | 'all'\n\nexport class ExtensionError0<\n TProps extends ErrorExtensionProps = Record<never, never>,\n TComputed extends ErrorExtensionComputed = Record<never, never>,\n TMethods extends ErrorExtensionMethods = Record<never, never>,\n> {\n private readonly _extension: ErrorExtension<ErrorExtensionProps, ErrorExtensionComputed, ErrorExtensionMethods>\n\n readonly Infer = undefined as unknown as {\n props: TProps\n computed: TComputed\n methods: TMethods\n }\n\n constructor(extension?: ErrorExtension<ErrorExtensionProps, ErrorExtensionComputed, ErrorExtensionMethods>) {\n this._extension = {\n props: { ...(extension?.props ?? {}) },\n computed: { ...(extension?.computed ?? {}) },\n methods: { ...(extension?.methods ?? {}) },\n refine: [...(extension?.refine ?? [])],\n }\n }\n\n prop<TKey extends string, TInputValue, TOutputValue>(\n key: TKey,\n value: ErrorExtensionPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TComputed, TMethods>>,\n ): ExtensionError0<AddPropToExtensionProps<TProps, TKey, TInputValue, TOutputValue>, TComputed, TMethods> {\n return this.extend('prop', key, value)\n }\n\n computed<TKey extends string, TOutputValue>(\n key: TKey,\n value: ErrorExtensionCopmputedFn<TOutputValue, BuilderError0<TProps, TComputed, TMethods>>,\n ): ExtensionError0<TProps, AddComputedToExtensionComputed<TComputed, TKey, TOutputValue>, TMethods> {\n return this.extend('computed', key, value)\n }\n\n method<TKey extends string, TArgs extends unknown[], TOutputValue>(\n key: TKey,\n value: ErrorExtensionMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TComputed, TMethods>>,\n ): ExtensionError0<TProps, TComputed, AddMethodToExtensionMethods<TMethods, TKey, TArgs, TOutputValue>> {\n return this.extend('method', key, value)\n }\n\n refine(\n value: ErrorExtensionRefineFn<BuilderError0<TProps, TComputed, TMethods>, ExtensionOutputProps<TProps>>,\n ): ExtensionError0<TProps, TComputed, TMethods> {\n return this.extend('refine', value)\n }\n\n extend<TKey extends string, TInputValue, TOutputValue>(\n kind: 'prop',\n key: TKey,\n value: ErrorExtensionPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TComputed, TMethods>>,\n ): ExtensionError0<AddPropToExtensionProps<TProps, TKey, TInputValue, TOutputValue>, TComputed, TMethods>\n extend<TKey extends string, TOutputValue>(\n kind: 'computed',\n key: TKey,\n value: ErrorExtensionCopmputedFn<TOutputValue, BuilderError0<TProps, TComputed, TMethods>>,\n ): ExtensionError0<TProps, AddComputedToExtensionComputed<TComputed, TKey, TOutputValue>, TMethods>\n extend<TKey extends string, TArgs extends unknown[], TOutputValue>(\n kind: 'method',\n key: TKey,\n value: ErrorExtensionMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TComputed, TMethods>>,\n ): ExtensionError0<TProps, TComputed, AddMethodToExtensionMethods<TMethods, TKey, TArgs, TOutputValue>>\n extend(\n kind: 'refine',\n value: ErrorExtensionRefineFn<BuilderError0<TProps, TComputed, TMethods>, ExtensionOutputProps<TProps>>,\n ): ExtensionError0<TProps, TComputed, TMethods>\n extend(\n kind: 'prop' | 'computed' | 'method' | 'refine',\n keyOrValue: string | ErrorExtensionRefineFn<any, any>,\n value?:\n | ErrorExtensionPropOptions<unknown, unknown, any>\n | ErrorExtensionCopmputedFn<unknown, any>\n | ErrorExtensionMethodFn<unknown, unknown[], any>,\n ): ExtensionError0<any, any, any> {\n const nextProps: ErrorExtensionProps = { ...(this._extension.props ?? {}) }\n const nextComputed: ErrorExtensionComputed = { ...(this._extension.computed ?? {}) }\n const nextMethods: ErrorExtensionMethods = { ...(this._extension.methods ?? {}) }\n const nextRefine: Array<ErrorExtensionRefineFn<Error0, Record<string, unknown>>> = [\n ...(this._extension.refine ?? []),\n ]\n if (kind === 'prop') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('ExtensionError0.extend(\"prop\", key, value) requires value')\n }\n nextProps[key] = value as ErrorExtensionPropOptions<any, any>\n } else if (kind === 'computed') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('ExtensionError0.extend(\"computed\", key, value) requires value')\n }\n nextComputed[key] = value as ErrorExtensionCopmputedFn<any>\n } else if (kind === 'method') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('ExtensionError0.extend(\"method\", key, value) requires value')\n }\n nextMethods[key] = value as ErrorExtensionMethodFn<any, any[]>\n } else {\n nextRefine.push(keyOrValue as ErrorExtensionRefineFn<Error0, Record<string, unknown>>)\n }\n return new ExtensionError0({\n props: nextProps,\n computed: nextComputed,\n methods: nextMethods,\n refine: nextRefine,\n })\n }\n}\n\nexport type ClassError0<TExtensionsMap extends ErrorExtensionsMap = EmptyExtensionsMap> = {\n new (message: string, input?: ErrorInput<TExtensionsMap>): Error0 & ErrorOutput<TExtensionsMap>\n new (input: { message: string } & ErrorInput<TExtensionsMap>): Error0 & ErrorOutput<TExtensionsMap>\n readonly __extensionsMap?: TExtensionsMap\n from: (error: unknown) => Error0 & ErrorOutput<TExtensionsMap>\n serialize: (error: unknown, isPublic?: boolean) => object\n extend: {\n <TBuilder extends ExtensionError0>(\n extension: TBuilder,\n ): ClassError0<ExtendErrorExtensionsMap<TExtensionsMap, ExtensionOfBuilder<TBuilder>>>\n <TKey extends string, TInputValue, TOutputValue>(\n kind: 'prop',\n key: TKey,\n value: ErrorExtensionPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TExtensionsMap>>,\n ): ClassError0<ExtendErrorExtensionsMapWithProp<TExtensionsMap, TKey, TInputValue, TOutputValue>>\n <TKey extends string, TOutputValue>(\n kind: 'computed',\n key: TKey,\n value: ErrorExtensionCopmputedFn<TOutputValue, ErrorInstanceOfMap<TExtensionsMap>>,\n ): ClassError0<ExtendErrorExtensionsMapWithComputed<TExtensionsMap, TKey, TOutputValue>>\n <TKey extends string, TArgs extends unknown[], TOutputValue>(\n kind: 'method',\n key: TKey,\n value: ErrorExtensionMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TExtensionsMap>>,\n ): ClassError0<ExtendErrorExtensionsMapWithMethod<TExtensionsMap, TKey, TArgs, TOutputValue>>\n (\n kind: 'refine',\n value: ErrorExtensionRefineFn<ErrorInstanceOfMap<TExtensionsMap>, ErrorOutputProps<TExtensionsMap>>,\n ): ClassError0<TExtensionsMap>\n }\n extension: () => ExtensionError0\n} & ErrorStaticMethods<TExtensionsMap>\n\nexport class Error0 extends Error {\n static readonly __extensionsMap?: EmptyExtensionsMap\n protected static _extensions: ErrorExtension[] = []\n\n private static readonly _emptyExtension: ErrorExtensionResolved = {\n props: {},\n computed: {},\n methods: {},\n refine: [],\n }\n\n private static _getResolvedExtension(this: typeof Error0): ErrorExtensionResolved {\n const resolved: ErrorExtensionResolved = {\n props: {},\n computed: {},\n methods: {},\n refine: [],\n }\n for (const extension of this._extensions) {\n Object.assign(resolved.props, extension.props ?? this._emptyExtension.props)\n Object.assign(resolved.computed, extension.computed ?? this._emptyExtension.computed)\n Object.assign(resolved.methods, extension.methods ?? this._emptyExtension.methods)\n resolved.refine.push(...(extension.refine ?? this._emptyExtension.refine))\n }\n return resolved\n }\n\n constructor(message: string, input?: ErrorInput<EmptyExtensionsMap>)\n constructor(input: { message: string } & ErrorInput<EmptyExtensionsMap>)\n constructor(\n ...args:\n | [message: string, input?: ErrorInput<EmptyExtensionsMap>]\n | [{ message: string } & ErrorInput<EmptyExtensionsMap>]\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 extension = ctor._getResolvedExtension()\n\n for (const [key, prop] of Object.entries(extension.props)) {\n if (key in input) {\n const ownValue = (input as Record<string, unknown>)[key]\n ;(this as Record<string, unknown>)[key] = prop.input(ownValue)\n } else {\n Object.defineProperty(this, key, {\n get: () => prop.output(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 for (const [key, computed] of Object.entries(extension.computed)) {\n Object.defineProperty(this, key, {\n get: () => computed(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 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\n static own(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 own(key: string): unknown {\n const ctor = this.constructor as typeof Error0\n return ctor.own(this, key)\n }\n\n static flow(error: object, key: string, policy: ErrorFlowPolicy = 'likeError0'): unknown[] {\n return this.causes(error, policy).map((cause) => {\n const causeRecord = cause as Record<string, unknown>\n if (this.isSelfProperty(causeRecord, key)) {\n return causeRecord[key]\n }\n return undefined\n })\n }\n flow(key: string, policy: ErrorFlowPolicy = 'likeError0'): unknown[] {\n const ctor = this.constructor as typeof Error0\n return ctor.flow(this, key, policy)\n }\n\n static causes(error: object, policy: ErrorFlowPolicy = 'all'): object[] {\n const causes: object[] = []\n let current: unknown = error\n const maxDepth = 99\n const seen = new Set<unknown>()\n\n for (let depth = 0; depth < maxDepth; depth += 1) {\n if (!current || typeof current !== 'object') {\n break\n }\n if (seen.has(current)) {\n break\n }\n if (policy === 'instance') {\n if (!this.is(current)) {\n break\n }\n } else if (policy === 'error0') {\n if (!this.isError0(current)) {\n break\n }\n } else if (policy === 'likeError0') {\n if (!this.isLikeError0(current)) {\n break\n }\n }\n seen.add(current)\n causes.push(current)\n current = (current as { cause?: unknown }).cause\n }\n\n return causes\n }\n causes(policy: ErrorFlowPolicy = 'all'): object[] {\n const ctor = this.constructor as typeof Error0\n return ctor.causes(this, policy)\n }\n\n static is(error: unknown): error is Error0 {\n return error instanceof this\n }\n\n static isError0(error: unknown): error is Error0 {\n return error instanceof Error0\n }\n\n static isLikeError0(error: unknown): error is Error0 | object {\n return (\n error instanceof Error0 ||\n (typeof error === 'object' && error !== null && 'name' in error && error.name === 'Error0')\n )\n }\n\n static from(error: unknown): Error0 {\n if (this.is(error)) {\n return error\n }\n if (this.isLikeError0(error)) {\n return this._fromLikeError0(error)\n }\n return this._fromNonError0(error)\n }\n\n private static _applyRefine(error: Error0): Error0 {\n const extension = this._getResolvedExtension()\n for (const refine of extension.refine) {\n const refined = refine(error as any)\n if (refined && typeof refined === 'object') {\n Object.assign(error as unknown as Record<string, unknown>, refined)\n }\n }\n return error\n }\n\n private static _fromLikeError0(error: unknown): Error0 {\n const message = this._extractMessage(error)\n if (typeof error !== 'object' || error === null) {\n return this._applyRefine(new this(message, { cause: error }))\n }\n\n const errorRecord = error as Record<string, unknown>\n const recreated = new this(message)\n const temp = new this(message, { cause: errorRecord })\n const extension = this._getResolvedExtension()\n for (const [key, prop] of Object.entries(extension.props)) {\n const value = prop.output(temp)\n if (value !== undefined) {\n ;(recreated as unknown as Record<string, unknown>)[key] = value\n }\n }\n ;(recreated as unknown as { cause?: unknown }).cause = errorRecord.cause\n if (typeof errorRecord.stack === 'string') {\n recreated.stack = errorRecord.stack\n }\n return this._applyRefine(recreated)\n }\n\n private static _fromNonError0(error: unknown): Error0 {\n const message = this._extractMessage(error)\n return this._applyRefine(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 _extendWithExtension(\n this: typeof Error0,\n extension: ErrorExtension<ErrorExtensionProps, ErrorExtensionComputed, ErrorExtensionMethods>,\n ): ClassError0 {\n const Base = this as unknown as typeof Error0\n const Error0Extended = class Error0 extends Base {}\n ;(Error0Extended as typeof Error0)._extensions = [...Base._extensions, extension]\n\n const resolved = (Error0Extended as typeof Error0)._getResolvedExtension()\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 _extensionFromBuilder(\n extension: ExtensionError0,\n ): ErrorExtension<ErrorExtensionProps, ErrorExtensionComputed, ErrorExtensionMethods> {\n const extensionRecord = extension as unknown as {\n _extension: ErrorExtension<ErrorExtensionProps, ErrorExtensionComputed, ErrorExtensionMethods>\n }\n return {\n props: { ...(extensionRecord._extension.props ?? {}) },\n computed: { ...(extensionRecord._extension.computed ?? {}) },\n methods: { ...(extensionRecord._extension.methods ?? {}) },\n refine: [...(extensionRecord._extension.refine ?? [])],\n }\n }\n\n static extend<TThis extends typeof Error0, TBuilder extends ExtensionError0>(\n this: TThis,\n extension: TBuilder,\n ): ClassError0<ExtendErrorExtensionsMap<ExtensionsMapOf<TThis>, ExtensionOfBuilder<TBuilder>>>\n static extend<TThis extends typeof Error0, TKey extends string, TInputValue, TOutputValue>(\n this: TThis,\n kind: 'prop',\n key: TKey,\n value: ErrorExtensionPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<ExtensionsMapOf<TThis>>>,\n ): ClassError0<ExtendErrorExtensionsMapWithProp<ExtensionsMapOf<TThis>, TKey, TInputValue, TOutputValue>>\n static extend<TThis extends typeof Error0, TKey extends string, TOutputValue>(\n this: TThis,\n kind: 'computed',\n key: TKey,\n value: ErrorExtensionCopmputedFn<TOutputValue, ErrorInstanceOfMap<ExtensionsMapOf<TThis>>>,\n ): ClassError0<ExtendErrorExtensionsMapWithComputed<ExtensionsMapOf<TThis>, TKey, TOutputValue>>\n static extend<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(\n this: TThis,\n kind: 'method',\n key: TKey,\n value: ErrorExtensionMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<ExtensionsMapOf<TThis>>>,\n ): ClassError0<ExtendErrorExtensionsMapWithMethod<ExtensionsMapOf<TThis>, TKey, TArgs, TOutputValue>>\n static extend<TThis extends typeof Error0>(\n this: TThis,\n kind: 'refine',\n value: ErrorExtensionRefineFn<ErrorInstanceOfMap<ExtensionsMapOf<TThis>>, ErrorOutputProps<ExtensionsMapOf<TThis>>>,\n ): ClassError0<ExtensionsMapOf<TThis>>\n static extend(\n this: typeof Error0,\n first: ExtensionError0 | 'prop' | 'computed' | 'method' | 'refine',\n key?: string | ErrorExtensionRefineFn<any, any>,\n value?:\n | ErrorExtensionPropOptions<unknown, unknown>\n | ErrorExtensionCopmputedFn<unknown>\n | ErrorExtensionMethodFn<unknown>,\n ): ClassError0 {\n if (first instanceof ExtensionError0) {\n return this._extendWithExtension(this._extensionFromBuilder(first))\n }\n if (first === 'refine') {\n if (typeof key !== 'function') {\n throw new Error('Error0.extend(\"refine\", value) requires refine function')\n }\n return this._extendWithExtension({\n refine: [key],\n })\n }\n if (typeof key !== 'string' || value === undefined) {\n throw new Error('Error0.extend(kind, key, value) requires key and value')\n }\n\n if (first === 'prop') {\n return this._extendWithExtension({\n props: { [key]: value as ErrorExtensionPropOptions<unknown, unknown> },\n })\n }\n if (first === 'computed') {\n return this._extendWithExtension({\n computed: { [key]: value as ErrorExtensionCopmputedFn<unknown> },\n })\n }\n return this._extendWithExtension({\n methods: { [key]: value as ErrorExtensionMethodFn<unknown> },\n })\n }\n\n static extension(): ExtensionError0 {\n return new ExtensionError0()\n }\n\n static serialize(error: unknown, isPublic = true): object {\n const error0 = this.from(error)\n const jsonWithUndefined: Record<string, unknown> = {\n name: error0.name,\n message: error0.message,\n cause: error0.cause,\n stack: error0.stack,\n }\n\n const extension = this._getResolvedExtension()\n for (const [key, prop] of Object.entries(extension.props)) {\n const value = prop.output(error0)\n const jsonValue = prop.serialize(value, error0, isPublic)\n if (jsonValue !== undefined) {\n jsonWithUndefined[key] = jsonValue\n } else {\n try {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete jsonWithUndefined[key]\n } catch {\n // ignore\n }\n }\n }\n return Object.fromEntries(Object.entries(jsonWithUndefined).filter(([, value]) => value !== undefined)) as object\n }\n\n serialize(isPublic = true): object {\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>> = NormalizeUnknownToUndefined<\n InferFirstArg<TProp['init']>\n>\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\n\nexport type ErrorPluginPropOptions<TInputValue, TOutputValue, TError extends Error0 = Error0> = {\n init: ErrorPluginPropInit<TInputValue, TOutputValue>\n resolve: (options: {\n value: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n error: TError\n }) => TOutputValue | undefined\n serialize: ErrorPluginPropSerialize<TOutputValue, TError>\n deserialize: ErrorPluginPropDeserialize<TOutputValue>\n}\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>)\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}\ntype AddPropToPluginProps<TProps extends ErrorPluginProps, TKey extends string, TInputValue, TOutputValue> = TProps &\n Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue>>\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, infer TOutputValue> ? TOutputValue : never\n}\nexport type ErrorPluginsMap = {\n props: Record<string, { init: 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 ErrorOutputProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['resolve'] | undefined\n}\ntype ErrorOutputMethods<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 ErrorOutput<TPluginsMap extends ErrorPluginsMap> = ErrorOutputProps<TPluginsMap> &\n ErrorOutputMethods<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; resolve: never }>\n methods: Record<never, ErrorMethodRecord>\n}\n\ntype ErrorPluginResolved = {\n props: Record<string, ErrorPluginPropOptions<unknown, unknown>>\n methods: Record<string, ErrorPluginMethodFn<unknown>>\n adapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>>\n}\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 >\n ? { init: InferPluginPropInput<NonNullable<TPlugin['props']>[TKey]>; resolve: TOutputValue }\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> = ExtendErrorPluginsMap<TMap, ErrorPlugin<Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue>>>>\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\n\ntype PluginsMapFromParts<\n TProps extends ErrorPluginProps,\n TMethods extends ErrorPluginMethods,\n> = ErrorPluginsMapOfPlugin<ErrorPlugin<TProps, TMethods>>\ntype ErrorInstanceOfMap<TMap extends ErrorPluginsMap> = Error0 & ErrorOutput<TMap>\ntype BuilderError0<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = Error0 &\n ErrorOutput<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 }\n }\n\n prop<TKey extends string, TInputValue, TOutputValue>(\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue>, 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 use<TKey extends string, TInputValue, TOutputValue>(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue>, 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(\n kind: 'prop' | 'method' | 'adapt',\n keyOrValue: string | ErrorPluginAdaptFn<any, any>,\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 if (kind === 'prop') {\n const key = keyOrValue as string\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 {\n nextAdapt.push(keyOrValue as ErrorPluginAdaptFn<Error0, Record<string, unknown>>)\n }\n return new PluginError0({\n props: nextProps,\n methods: nextMethods,\n adapt: nextAdapt,\n })\n }\n}\n\nexport type ClassError0<TPluginsMap extends ErrorPluginsMap = EmptyPluginsMap> = {\n new (message: string, input?: ErrorInput<TPluginsMap>): Error0 & ErrorOutput<TPluginsMap>\n new (input: { message: string } & ErrorInput<TPluginsMap>): Error0 & ErrorOutput<TPluginsMap>\n readonly __pluginsMap?: TPluginsMap\n from: (error: unknown) => Error0 & ErrorOutput<TPluginsMap>\n serialize: (error: unknown, isPublic?: boolean) => Record<string, unknown>\n prop: <TKey extends string, TInputValue, TOutputValue>(\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>>,\n ) => ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue>>\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>, ErrorOutputProps<TPluginsMap>>,\n ) => ClassError0<TPluginsMap>\n use: {\n <TBuilder extends PluginError0>(\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<TPluginsMap, PluginOfBuilder<TBuilder>>>\n <TKey extends string, TInputValue, TOutputValue>(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue>>\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>, ErrorOutputProps<TPluginsMap>>,\n ): 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 }\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 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 }\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 in input) {\n const ownValue = (input as Record<string, unknown>)[key]\n ;(this as Record<string, unknown>)[key] = prop.init(ownValue)\n } else {\n Object.defineProperty(this, key, {\n get: () => prop.resolve({ value: 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\n static own(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 own(key: string): unknown {\n const ctor = this.constructor as typeof Error0\n return ctor.own(this, key)\n }\n\n static flow(error: object, key: string): unknown[] {\n return this.causes(error, true).map((cause) => {\n return this.own(cause, key)\n })\n }\n flow(key: string): unknown[] {\n const ctor = this.constructor as typeof Error0\n return ctor.flow(this, key)\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<T extends typeof Error0>(this: T, instancesOnly?: false): [InstanceType<T>, ...unknown[]]\n causes<T extends typeof Error0>(this: T, instancesOnly: true): [InstanceType<T>, ...Array<InstanceType<T>>]\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 // ignore\n }\n }\n // we do not serialize causes\n // ;(recreated as unknown as { cause?: unknown }).cause = errorRecord.cause\n const isStackInProps = propsEntries.some(([key]) => key === 'stack')\n if (typeof errorRecord.stack === 'string' && !isStackInProps) {\n recreated.stack = errorRecord.stack\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 }\n }\n\n static prop<TThis extends typeof Error0, TKey extends string, TInputValue, TOutputValue>(\n this: TThis,\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue>> {\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>>, ErrorOutputProps<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>> {\n return this.use('adapt', 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<TThis extends typeof Error0, TKey extends string, TInputValue, TOutputValue>(\n this: TThis,\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue>>\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>>, ErrorOutputProps<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use(\n this: typeof Error0,\n first: PluginError0 | 'prop' | 'method' | 'adapt',\n key?: string | ErrorPluginAdaptFn<any, any>,\n value?: ErrorPluginPropOptions<unknown, unknown> | ErrorPluginMethodFn<unknown>,\n ): ClassError0 {\n if (first instanceof PluginError0) {\n return this._useWithPlugin(this._pluginFromBuilder(first))\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],\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 return this._useWithPlugin({\n props: { [key]: value as ErrorPluginPropOptions<unknown, 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 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 = prop.resolve({ value: error0.own(key), flow: error0.flow(key), error: error0 })\n const jsonValue = prop.serialize({ value, error: error0, isPublic })\n if (jsonValue !== undefined) {\n json[key] = jsonValue\n }\n } catch {\n // ignore\n }\n }\n const isStackInProps = propsEntries.some(([key]) => key === 'stack')\n if (!isStackInProps && typeof error0.stack === 'string') {\n json.stack = error0.stack\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): object {\n const ctor = this.constructor as typeof Error0\n return ctor.serialize(this, isPublic)\n }\n}\n"],"mappings":"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","names":[]}
|