@devp0nt/error0 1.0.0-next.41 → 1.0.0-next.43

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.
@@ -1,44 +1,60 @@
1
- type ErrorExtensionPropOptions<TInputValue, TOutputValue, TError extends Error0 = Error0> = {
2
- init: (input: TInputValue) => TOutputValue;
1
+ type IsUnknown<T> = unknown extends T ? ([T] extends [unknown] ? true : false) : false;
2
+ type NormalizeUnknownToUndefined<T> = IsUnknown<T> extends true ? undefined : T;
3
+ type IsOnlyUndefined<T> = [Exclude<T, undefined>] extends [never] ? true : false;
4
+ type InferFirstArg<TFn> = TFn extends (...args: infer TArgs) => unknown ? TArgs extends [infer TFirst, ...unknown[]] ? TFirst : undefined : undefined;
5
+ type InferPluginPropInput<TProp extends ErrorPluginPropOptions<any, any, any, any>> = TProp extends {
6
+ init: infer TInit;
7
+ } ? NormalizeUnknownToUndefined<InferFirstArg<TInit>> : undefined;
8
+ type ErrorPluginPropInit<TInputValue, TOutputValue> = ((input: TInputValue) => TOutputValue) | (() => TOutputValue);
9
+ type ErrorPluginPropSerialize<TOutputValue, TError extends Error0> = ((options: {
10
+ value: TOutputValue;
11
+ error: TError;
12
+ isPublic: boolean;
13
+ }) => unknown) | false;
14
+ type ErrorPluginPropDeserialize<TOutputValue> = ((options: {
15
+ value: unknown;
16
+ serialized: Record<string, unknown>;
17
+ }) => TOutputValue | undefined) | false;
18
+ type ErrorPluginPropOptionsBase<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = {
3
19
  resolve: (options: {
4
20
  value: TOutputValue | undefined;
5
21
  flow: Array<TOutputValue | undefined>;
6
22
  error: TError;
7
- }) => TOutputValue | undefined;
8
- serialize: (options: {
9
- value: TOutputValue;
10
- error: TError;
11
- isPublic: boolean;
12
- }) => unknown;
13
- deserialize: (options: {
14
- value: unknown;
15
- serialized: Record<string, unknown>;
16
- }) => TOutputValue | undefined;
17
- };
18
- type ErrorExtensionMethodFn<TOutputValue, TArgs extends unknown[] = unknown[], TError extends Error0 = Error0> = (error: TError, ...args: TArgs) => TOutputValue;
19
- type ErrorExtensionRefineResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined;
20
- type ErrorExtensionRefineFn<TError extends Error0 = Error0, TOutputProps extends Record<string, unknown> = Record<never, never>> = ((error: TError) => void) | ((error: TError) => ErrorExtensionRefineResult<TOutputProps>);
23
+ }) => TResolveValue;
24
+ serialize: ErrorPluginPropSerialize<TResolveValue, TError>;
25
+ deserialize: ErrorPluginPropDeserialize<TOutputValue>;
26
+ };
27
+ type ErrorPluginPropOptionsWithInit<TInputValue, TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {
28
+ init: ErrorPluginPropInit<TInputValue, TOutputValue>;
29
+ };
30
+ type ErrorPluginPropOptionsWithoutInit<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {
31
+ init?: undefined;
32
+ };
33
+ type ErrorPluginPropOptions<TInputValue = undefined, TOutputValue = unknown, TError extends Error0 = Error0, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined> = ErrorPluginPropOptionsWithInit<TInputValue, TOutputValue, TError, TResolveValue> | ErrorPluginPropOptionsWithoutInit<TOutputValue, TError, TResolveValue>;
34
+ type ErrorPluginMethodFn<TOutputValue, TArgs extends unknown[] = unknown[], TError extends Error0 = Error0> = (error: TError, ...args: TArgs) => TOutputValue;
35
+ type ErrorPluginAdaptResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined;
36
+ type ErrorPluginAdaptFn<TError extends Error0 = Error0, TOutputProps extends Record<string, unknown> = Record<never, never>> = ((error: TError) => void) | ((error: TError) => ErrorPluginAdaptResult<TOutputProps>);
21
37
  type ErrorMethodRecord = {
22
38
  args: unknown[];
23
39
  output: unknown;
24
40
  };
25
- type ErrorExtensionProps = {
26
- [key: string]: ErrorExtensionPropOptions<any, any>;
41
+ type ErrorPluginProps = {
42
+ [key: string]: ErrorPluginPropOptions<any, any>;
27
43
  };
28
- type ErrorExtensionMethods = {
29
- [key: string]: ErrorExtensionMethodFn<any, any[]>;
44
+ type ErrorPluginMethods = {
45
+ [key: string]: ErrorPluginMethodFn<any, any[]>;
30
46
  };
31
- type ErrorExtension<TProps extends ErrorExtensionProps = Record<never, never>, TMethods extends ErrorExtensionMethods = Record<never, never>> = {
47
+ type ErrorPlugin<TProps extends ErrorPluginProps = Record<never, never>, TMethods extends ErrorPluginMethods = Record<never, never>> = {
32
48
  props?: TProps;
33
49
  methods?: TMethods;
34
- refine?: Array<ErrorExtensionRefineFn<Error0, ExtensionOutputProps<TProps>>>;
50
+ adapt?: Array<ErrorPluginAdaptFn<Error0, PluginOutputProps<TProps>>>;
35
51
  };
36
- type AddPropToExtensionProps<TProps extends ErrorExtensionProps, TKey extends string, TInputValue, TOutputValue> = TProps & Record<TKey, ErrorExtensionPropOptions<TInputValue, TOutputValue>>;
37
- type AddMethodToExtensionMethods<TMethods extends ErrorExtensionMethods, TKey extends string, TArgs extends unknown[], TOutputValue> = TMethods & Record<TKey, ErrorExtensionMethodFn<TOutputValue, TArgs>>;
38
- type ExtensionOutputProps<TProps extends ErrorExtensionProps> = {
39
- [TKey in keyof TProps]: TProps[TKey] extends ErrorExtensionPropOptions<any, infer TOutputValue> ? TOutputValue : never;
52
+ type AddPropToPluginProps<TProps extends ErrorPluginProps, TKey extends string, TInputValue, TOutputValue, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined> = TProps & Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>;
53
+ type AddMethodToPluginMethods<TMethods extends ErrorPluginMethods, TKey extends string, TArgs extends unknown[], TOutputValue> = TMethods & Record<TKey, ErrorPluginMethodFn<TOutputValue, TArgs>>;
54
+ type PluginOutputProps<TProps extends ErrorPluginProps> = {
55
+ [TKey in keyof TProps]: TProps[TKey] extends ErrorPluginPropOptions<any, any, any, infer TResolveValue> ? TResolveValue : never;
40
56
  };
41
- type ErrorExtensionsMap = {
57
+ type ErrorPluginsMap = {
42
58
  props: Record<string, {
43
59
  init: unknown;
44
60
  resolve: unknown;
@@ -49,103 +65,104 @@ type IsEmptyObject<T> = keyof T extends never ? true : false;
49
65
  type ErrorInputBase = {
50
66
  cause?: unknown;
51
67
  };
52
- type ErrorInput<TExtensionsMap extends ErrorExtensionsMap> = IsEmptyObject<TExtensionsMap['props']> extends true ? ErrorInputBase : ErrorInputBase & Partial<{
53
- [TKey in keyof TExtensionsMap['props']]: TExtensionsMap['props'][TKey]['init'];
54
- }>;
55
- type ErrorOutputProps<TExtensionsMap extends ErrorExtensionsMap> = {
56
- [TKey in keyof TExtensionsMap['props']]?: TExtensionsMap['props'][TKey]['resolve'];
68
+ type ErrorInputPluginProps<TPluginsMap extends ErrorPluginsMap> = {
69
+ [TKey in keyof TPluginsMap['props'] as IsOnlyUndefined<TPluginsMap['props'][TKey]['init']> extends true ? never : TKey]?: TPluginsMap['props'][TKey]['init'];
70
+ };
71
+ type ErrorInput<TPluginsMap extends ErrorPluginsMap> = IsEmptyObject<TPluginsMap['props']> extends true ? ErrorInputBase : ErrorInputBase & ErrorInputPluginProps<TPluginsMap>;
72
+ type ErrorResolvedProps<TPluginsMap extends ErrorPluginsMap> = {
73
+ [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['resolve'];
57
74
  };
58
- type ErrorOutputMethods<TExtensionsMap extends ErrorExtensionsMap> = {
59
- [TKey in keyof TExtensionsMap['methods']]: TExtensionsMap['methods'][TKey] extends {
75
+ type ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {
76
+ [TKey in keyof TPluginsMap['methods']]: TPluginsMap['methods'][TKey] extends {
60
77
  args: infer TArgs extends unknown[];
61
78
  output: infer TOutput;
62
79
  } ? (...args: TArgs) => TOutput : never;
63
80
  };
64
- type ErrorOutput<TExtensionsMap extends ErrorExtensionsMap> = ErrorOutputProps<TExtensionsMap> & ErrorOutputMethods<TExtensionsMap>;
65
- type ErrorStaticMethods<TExtensionsMap extends ErrorExtensionsMap> = {
66
- [TKey in keyof TExtensionsMap['methods']]: TExtensionsMap['methods'][TKey] extends {
81
+ type ErrorResolved<TPluginsMap extends ErrorPluginsMap> = ErrorResolvedProps<TPluginsMap> & ErrorMethods<TPluginsMap>;
82
+ type ErrorStaticMethods<TPluginsMap extends ErrorPluginsMap> = {
83
+ [TKey in keyof TPluginsMap['methods']]: TPluginsMap['methods'][TKey] extends {
67
84
  args: infer TArgs extends unknown[];
68
85
  output: infer TOutput;
69
86
  } ? (error: unknown, ...args: TArgs) => TOutput : never;
70
87
  };
71
- type EmptyExtensionsMap = {
88
+ type EmptyPluginsMap = {
72
89
  props: Record<never, {
73
90
  init: never;
74
91
  resolve: never;
75
92
  }>;
76
93
  methods: Record<never, ErrorMethodRecord>;
77
94
  };
78
- type ExtensionPropsMapOf<TExtension extends ErrorExtension> = {
79
- [TKey in keyof NonNullable<TExtension['props']>]: NonNullable<TExtension['props']>[TKey] extends ErrorExtensionPropOptions<infer TInputValue, infer TOutputValue> ? {
80
- init: TInputValue;
81
- resolve: TOutputValue;
95
+ type PluginPropsMapOf<TPlugin extends ErrorPlugin> = {
96
+ [TKey in keyof NonNullable<TPlugin['props']>]: NonNullable<TPlugin['props']>[TKey] extends ErrorPluginPropOptions<any, any, any, infer TResolveValue> ? {
97
+ init: InferPluginPropInput<NonNullable<TPlugin['props']>[TKey]>;
98
+ resolve: TResolveValue;
82
99
  } : never;
83
100
  };
84
- type ExtensionMethodsMapOf<TExtension extends ErrorExtension> = {
85
- [TKey in keyof NonNullable<TExtension['methods']>]: NonNullable<TExtension['methods']>[TKey] extends (error: Error0, ...args: infer TArgs extends unknown[]) => infer TOutput ? {
101
+ type PluginMethodsMapOf<TPlugin extends ErrorPlugin> = {
102
+ [TKey in keyof NonNullable<TPlugin['methods']>]: NonNullable<TPlugin['methods']>[TKey] extends (error: Error0, ...args: infer TArgs extends unknown[]) => infer TOutput ? {
86
103
  args: TArgs;
87
104
  output: TOutput;
88
105
  } : never;
89
106
  };
90
- type ErrorExtensionsMapOfExtension<TExtension extends ErrorExtension> = {
91
- props: ExtensionPropsMapOf<TExtension>;
92
- methods: ExtensionMethodsMapOf<TExtension>;
93
- };
94
- type ExtendErrorExtensionsMap<TMap extends ErrorExtensionsMap, TExtension extends ErrorExtension> = {
95
- props: TMap['props'] & ErrorExtensionsMapOfExtension<TExtension>['props'];
96
- methods: TMap['methods'] & ErrorExtensionsMapOfExtension<TExtension>['methods'];
97
- };
98
- type ExtendErrorExtensionsMapWithProp<TMap extends ErrorExtensionsMap, TKey extends string, TInputValue, TOutputValue> = ExtendErrorExtensionsMap<TMap, ErrorExtension<Record<TKey, ErrorExtensionPropOptions<TInputValue, TOutputValue>>>>;
99
- type ExtendErrorExtensionsMapWithMethod<TMap extends ErrorExtensionsMap, TKey extends string, TArgs extends unknown[], TOutputValue> = ExtendErrorExtensionsMap<TMap, ErrorExtension<Record<never, never>, Record<TKey, ErrorExtensionMethodFn<TOutputValue, TArgs>>>>;
100
- type ExtensionsMapOf<TClass> = TClass extends {
101
- __extensionsMap?: infer TExtensionsMap;
102
- } ? TExtensionsMap extends ErrorExtensionsMap ? TExtensionsMap : EmptyExtensionsMap : EmptyExtensionsMap;
103
- type ExtensionsMapFromParts<TProps extends ErrorExtensionProps, TMethods extends ErrorExtensionMethods> = ErrorExtensionsMapOfExtension<ErrorExtension<TProps, TMethods>>;
104
- type ErrorInstanceOfMap<TMap extends ErrorExtensionsMap> = Error0 & ErrorOutput<TMap>;
105
- type BuilderError0<TProps extends ErrorExtensionProps, TMethods extends ErrorExtensionMethods> = Error0 & ErrorOutput<ExtensionsMapFromParts<TProps, TMethods>>;
106
- type ExtensionOfBuilder<TBuilder> = TBuilder extends ExtensionError0<infer TProps, infer TMethods> ? ErrorExtension<TProps, TMethods> : never;
107
- declare class ExtensionError0<TProps extends ErrorExtensionProps = Record<never, never>, TMethods extends ErrorExtensionMethods = Record<never, never>> {
108
- private readonly _extension;
107
+ type ErrorPluginsMapOfPlugin<TPlugin extends ErrorPlugin> = {
108
+ props: PluginPropsMapOf<TPlugin>;
109
+ methods: PluginMethodsMapOf<TPlugin>;
110
+ };
111
+ type ExtendErrorPluginsMap<TMap extends ErrorPluginsMap, TPlugin extends ErrorPlugin> = {
112
+ props: TMap['props'] & ErrorPluginsMapOfPlugin<TPlugin>['props'];
113
+ methods: TMap['methods'] & ErrorPluginsMapOfPlugin<TPlugin>['methods'];
114
+ };
115
+ type ExtendErrorPluginsMapWithProp<TMap extends ErrorPluginsMap, TKey extends string, TInputValue, TOutputValue, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined> = ExtendErrorPluginsMap<TMap, ErrorPlugin<Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>>>;
116
+ type ExtendErrorPluginsMapWithMethod<TMap extends ErrorPluginsMap, TKey extends string, TArgs extends unknown[], TOutputValue> = ExtendErrorPluginsMap<TMap, ErrorPlugin<Record<never, never>, Record<TKey, ErrorPluginMethodFn<TOutputValue, TArgs>>>>;
117
+ type PluginsMapOf<TClass> = TClass extends {
118
+ __pluginsMap?: infer TPluginsMap;
119
+ } ? TPluginsMap extends ErrorPluginsMap ? TPluginsMap : EmptyPluginsMap : EmptyPluginsMap;
120
+ type PluginsMapFromParts<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = ErrorPluginsMapOfPlugin<ErrorPlugin<TProps, TMethods>>;
121
+ type ErrorInstanceOfMap<TMap extends ErrorPluginsMap> = Error0 & ErrorResolved<TMap>;
122
+ type BuilderError0<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = Error0 & ErrorResolved<PluginsMapFromParts<TProps, TMethods>>;
123
+ type PluginOfBuilder<TBuilder> = TBuilder extends PluginError0<infer TProps, infer TMethods> ? ErrorPlugin<TProps, TMethods> : never;
124
+ declare class PluginError0<TProps extends ErrorPluginProps = Record<never, never>, TMethods extends ErrorPluginMethods = Record<never, never>> {
125
+ private readonly _plugin;
109
126
  readonly Infer: {
110
127
  props: TProps;
111
128
  methods: TMethods;
112
129
  };
113
- constructor(extension?: ErrorExtension<ErrorExtensionProps, ErrorExtensionMethods>);
114
- prop<TKey extends string, TInputValue, TOutputValue>(key: TKey, value: ErrorExtensionPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>>): ExtensionError0<AddPropToExtensionProps<TProps, TKey, TInputValue, TOutputValue>, TMethods>;
115
- method<TKey extends string, TArgs extends unknown[], TOutputValue>(key: TKey, value: ErrorExtensionMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TMethods>>): ExtensionError0<TProps, AddMethodToExtensionMethods<TMethods, TKey, TArgs, TOutputValue>>;
116
- refine(value: ErrorExtensionRefineFn<BuilderError0<TProps, TMethods>, ExtensionOutputProps<TProps>>): ExtensionError0<TProps, TMethods>;
117
- extend<TKey extends string, TInputValue, TOutputValue>(kind: 'prop', key: TKey, value: ErrorExtensionPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>>): ExtensionError0<AddPropToExtensionProps<TProps, TKey, TInputValue, TOutputValue>, TMethods>;
118
- extend<TKey extends string, TArgs extends unknown[], TOutputValue>(kind: 'method', key: TKey, value: ErrorExtensionMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TMethods>>): ExtensionError0<TProps, AddMethodToExtensionMethods<TMethods, TKey, TArgs, TOutputValue>>;
119
- extend(kind: 'refine', value: ErrorExtensionRefineFn<BuilderError0<TProps, TMethods>, ExtensionOutputProps<TProps>>): ExtensionError0<TProps, TMethods>;
130
+ constructor(plugin?: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>);
131
+ prop<TKey extends string, TInputValue = undefined, TOutputValue = unknown, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined>(key: TKey, value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods>;
132
+ method<TKey extends string, TArgs extends unknown[], TOutputValue>(key: TKey, value: ErrorPluginMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TMethods>>): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TArgs, TOutputValue>>;
133
+ adapt(value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>): PluginError0<TProps, TMethods>;
134
+ use<TKey extends string, TInputValue = undefined, TOutputValue = unknown, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined>(kind: 'prop', key: TKey, value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods>;
135
+ use<TKey extends string, TArgs extends unknown[], TOutputValue>(kind: 'method', key: TKey, value: ErrorPluginMethodFn<TOutputValue, TArgs, BuilderError0<TProps, TMethods>>): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TArgs, TOutputValue>>;
136
+ use(kind: 'adapt', value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>): PluginError0<TProps, TMethods>;
120
137
  }
121
- type ClassError0<TExtensionsMap extends ErrorExtensionsMap = EmptyExtensionsMap> = {
122
- new (message: string, input?: ErrorInput<TExtensionsMap>): Error0 & ErrorOutput<TExtensionsMap>;
138
+ type ClassError0<TPluginsMap extends ErrorPluginsMap = EmptyPluginsMap> = {
139
+ new (message: string, input?: ErrorInput<TPluginsMap>): Error0 & ErrorResolved<TPluginsMap>;
123
140
  new (input: {
124
141
  message: string;
125
- } & ErrorInput<TExtensionsMap>): Error0 & ErrorOutput<TExtensionsMap>;
126
- readonly __extensionsMap?: TExtensionsMap;
127
- from: (error: unknown) => Error0 & ErrorOutput<TExtensionsMap>;
142
+ } & ErrorInput<TPluginsMap>): Error0 & ErrorResolved<TPluginsMap>;
143
+ readonly __pluginsMap?: TPluginsMap;
144
+ from: (error: unknown) => Error0 & ErrorResolved<TPluginsMap>;
128
145
  serialize: (error: unknown, isPublic?: boolean) => Record<string, unknown>;
129
- prop: <TKey extends string, TInputValue, TOutputValue>(key: TKey, value: ErrorExtensionPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TExtensionsMap>>) => ClassError0<ExtendErrorExtensionsMapWithProp<TExtensionsMap, TKey, TInputValue, TOutputValue>>;
130
- method: <TKey extends string, TArgs extends unknown[], TOutputValue>(key: TKey, value: ErrorExtensionMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TExtensionsMap>>) => ClassError0<ExtendErrorExtensionsMapWithMethod<TExtensionsMap, TKey, TArgs, TOutputValue>>;
131
- refine: (value: ErrorExtensionRefineFn<ErrorInstanceOfMap<TExtensionsMap>, ErrorOutputProps<TExtensionsMap>>) => ClassError0<TExtensionsMap>;
132
- extend: {
133
- <TBuilder extends ExtensionError0>(extension: TBuilder): ClassError0<ExtendErrorExtensionsMap<TExtensionsMap, ExtensionOfBuilder<TBuilder>>>;
134
- <TKey extends string, TInputValue, TOutputValue>(kind: 'prop', key: TKey, value: ErrorExtensionPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TExtensionsMap>>): ClassError0<ExtendErrorExtensionsMapWithProp<TExtensionsMap, TKey, TInputValue, TOutputValue>>;
135
- <TKey extends string, TArgs extends unknown[], TOutputValue>(kind: 'method', key: TKey, value: ErrorExtensionMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TExtensionsMap>>): ClassError0<ExtendErrorExtensionsMapWithMethod<TExtensionsMap, TKey, TArgs, TOutputValue>>;
136
- (kind: 'refine', value: ErrorExtensionRefineFn<ErrorInstanceOfMap<TExtensionsMap>, ErrorOutputProps<TExtensionsMap>>): ClassError0<TExtensionsMap>;
146
+ prop: <TKey extends string, TInputValue = undefined, TOutputValue = unknown, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined>(key: TKey, value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>) => ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>;
147
+ method: <TKey extends string, TArgs extends unknown[], TOutputValue>(key: TKey, value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TArgs, TOutputValue>>;
148
+ adapt: (value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>) => ClassError0<TPluginsMap>;
149
+ use: {
150
+ <TBuilder extends PluginError0>(plugin: TBuilder): ClassError0<ExtendErrorPluginsMap<TPluginsMap, PluginOfBuilder<TBuilder>>>;
151
+ <TKey extends string, TInputValue = undefined, TOutputValue = unknown, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined>(kind: 'prop', key: TKey, value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>): ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>;
152
+ <TKey extends string, TArgs extends unknown[], TOutputValue>(kind: 'method', key: TKey, value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<TPluginsMap>>): ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TArgs, TOutputValue>>;
153
+ (kind: 'adapt', value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>): ClassError0<TPluginsMap>;
137
154
  };
138
- extension: () => ExtensionError0;
139
- } & ErrorStaticMethods<TExtensionsMap>;
155
+ plugin: () => PluginError0;
156
+ } & ErrorStaticMethods<TPluginsMap>;
140
157
  declare class Error0 extends Error {
141
- static readonly __extensionsMap?: EmptyExtensionsMap;
142
- protected static _extensions: ErrorExtension[];
143
- private static readonly _emptyExtension;
144
- private static _getResolvedExtension;
145
- constructor(message: string, input?: ErrorInput<EmptyExtensionsMap>);
158
+ static readonly __pluginsMap?: EmptyPluginsMap;
159
+ protected static _plugins: ErrorPlugin[];
160
+ private static readonly _emptyPlugin;
161
+ private static _getResolvedPlugin;
162
+ constructor(message: string, input?: ErrorInput<EmptyPluginsMap>);
146
163
  constructor(input: {
147
164
  message: string;
148
- } & ErrorInput<EmptyExtensionsMap>);
165
+ } & ErrorInput<EmptyPluginsMap>);
149
166
  private static readonly isSelfProperty;
150
167
  static own(error: object, key: string): unknown;
151
168
  own(key: string): unknown;
@@ -158,22 +175,22 @@ declare class Error0 extends Error {
158
175
  static is<T extends typeof Error0>(this: T, error: unknown): error is InstanceType<T>;
159
176
  static isSerialized(error: unknown): error is Record<string, unknown>;
160
177
  static from(error: unknown): Error0;
161
- private static _applyRefine;
178
+ private static _applyAdapt;
162
179
  private static _fromSerialized;
163
180
  private static _fromNonError0;
164
181
  private static _extractMessage;
165
- private static _extendWithExtension;
166
- private static _extensionFromBuilder;
167
- static prop<TThis extends typeof Error0, TKey extends string, TInputValue, TOutputValue>(this: TThis, key: TKey, value: ErrorExtensionPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<ExtensionsMapOf<TThis>>>): ClassError0<ExtendErrorExtensionsMapWithProp<ExtensionsMapOf<TThis>, TKey, TInputValue, TOutputValue>>;
168
- static method<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(this: TThis, key: TKey, value: ErrorExtensionMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<ExtensionsMapOf<TThis>>>): ClassError0<ExtendErrorExtensionsMapWithMethod<ExtensionsMapOf<TThis>, TKey, TArgs, TOutputValue>>;
169
- static refine<TThis extends typeof Error0>(this: TThis, value: ErrorExtensionRefineFn<ErrorInstanceOfMap<ExtensionsMapOf<TThis>>, ErrorOutputProps<ExtensionsMapOf<TThis>>>): ClassError0<ExtensionsMapOf<TThis>>;
170
- static extend<TThis extends typeof Error0, TBuilder extends ExtensionError0>(this: TThis, extension: TBuilder): ClassError0<ExtendErrorExtensionsMap<ExtensionsMapOf<TThis>, ExtensionOfBuilder<TBuilder>>>;
171
- static extend<TThis extends typeof Error0, TKey extends string, TInputValue, TOutputValue>(this: TThis, kind: 'prop', key: TKey, value: ErrorExtensionPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<ExtensionsMapOf<TThis>>>): ClassError0<ExtendErrorExtensionsMapWithProp<ExtensionsMapOf<TThis>, TKey, TInputValue, TOutputValue>>;
172
- static extend<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(this: TThis, kind: 'method', key: TKey, value: ErrorExtensionMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<ExtensionsMapOf<TThis>>>): ClassError0<ExtendErrorExtensionsMapWithMethod<ExtensionsMapOf<TThis>, TKey, TArgs, TOutputValue>>;
173
- static extend<TThis extends typeof Error0>(this: TThis, kind: 'refine', value: ErrorExtensionRefineFn<ErrorInstanceOfMap<ExtensionsMapOf<TThis>>, ErrorOutputProps<ExtensionsMapOf<TThis>>>): ClassError0<ExtensionsMapOf<TThis>>;
174
- static extension(): ExtensionError0;
182
+ private static _useWithPlugin;
183
+ private static _pluginFromBuilder;
184
+ static prop<TThis extends typeof Error0, TKey extends string, TInputValue = undefined, TOutputValue = unknown, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined>(this: TThis, key: TKey, value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>>;
185
+ static method<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(this: TThis, key: TKey, value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<PluginsMapOf<TThis>>>): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TArgs, TOutputValue>>;
186
+ static adapt<TThis extends typeof Error0>(this: TThis, value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>): ClassError0<PluginsMapOf<TThis>>;
187
+ static use<TThis extends typeof Error0, TBuilder extends PluginError0>(this: TThis, plugin: TBuilder): ClassError0<ExtendErrorPluginsMap<PluginsMapOf<TThis>, PluginOfBuilder<TBuilder>>>;
188
+ static use<TThis extends typeof Error0, TKey extends string, TInputValue = undefined, TOutputValue = unknown, TResolveValue extends TOutputValue | undefined = TOutputValue | undefined>(this: TThis, kind: 'prop', key: TKey, value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>>;
189
+ static use<TThis extends typeof Error0, TKey extends string, TArgs extends unknown[], TOutputValue>(this: TThis, kind: 'method', key: TKey, value: ErrorPluginMethodFn<TOutputValue, TArgs, ErrorInstanceOfMap<PluginsMapOf<TThis>>>): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TArgs, TOutputValue>>;
190
+ static use<TThis extends typeof Error0>(this: TThis, kind: 'adapt', value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>): ClassError0<PluginsMapOf<TThis>>;
191
+ static plugin(): PluginError0;
175
192
  static serialize(error: unknown, isPublic?: boolean): Record<string, unknown>;
176
193
  serialize(isPublic?: boolean): object;
177
194
  }
178
195
 
179
- export { type ClassError0, Error0, type ErrorExtension, type ErrorExtensionMethodFn, type ErrorExtensionMethods, type ErrorExtensionPropOptions, type ErrorExtensionProps, type ErrorExtensionRefineFn, type ErrorExtensionRefineResult, type ErrorExtensionsMap, type ErrorInput, type ErrorInputBase, type ErrorOutput, ExtensionError0, type IsEmptyObject };
196
+ export { type ClassError0, Error0, type ErrorInput, type ErrorInputBase, type ErrorPlugin, type ErrorPluginAdaptFn, type ErrorPluginAdaptResult, type ErrorPluginMethodFn, type ErrorPluginMethods, type ErrorPluginPropOptions, type ErrorPluginProps, type ErrorPluginsMap, type ErrorResolved, type IsEmptyObject, PluginError0 };
package/dist/esm/index.js CHANGED
@@ -1,68 +1,66 @@
1
- class ExtensionError0 {
2
- _extension;
1
+ class PluginError0 {
2
+ _plugin;
3
3
  Infer = void 0;
4
- constructor(extension) {
5
- this._extension = {
6
- props: { ...extension?.props ?? {} },
7
- methods: { ...extension?.methods ?? {} },
8
- refine: [...extension?.refine ?? []]
4
+ constructor(plugin) {
5
+ this._plugin = {
6
+ props: { ...plugin?.props ?? {} },
7
+ methods: { ...plugin?.methods ?? {} },
8
+ adapt: [...plugin?.adapt ?? []]
9
9
  };
10
10
  }
11
11
  prop(key, value) {
12
- return this.extend("prop", key, value);
12
+ return this.use("prop", key, value);
13
13
  }
14
14
  method(key, value) {
15
- return this.extend("method", key, value);
15
+ return this.use("method", key, value);
16
16
  }
17
- refine(value) {
18
- return this.extend("refine", value);
17
+ adapt(value) {
18
+ return this.use("adapt", value);
19
19
  }
20
- extend(kind, keyOrValue, value) {
21
- const nextProps = { ...this._extension.props ?? {} };
22
- const nextMethods = { ...this._extension.methods ?? {} };
23
- const nextRefine = [
24
- ...this._extension.refine ?? []
25
- ];
20
+ use(kind, keyOrValue, value) {
21
+ const nextProps = { ...this._plugin.props ?? {} };
22
+ const nextMethods = { ...this._plugin.methods ?? {} };
23
+ const nextAdapt = [...this._plugin.adapt ?? []];
26
24
  if (kind === "prop") {
27
25
  const key = keyOrValue;
28
26
  if (value === void 0) {
29
- throw new Error('ExtensionError0.extend("prop", key, value) requires value');
27
+ throw new Error('PluginError0.use("prop", key, value) requires value');
30
28
  }
31
29
  nextProps[key] = value;
32
30
  } else if (kind === "method") {
33
31
  const key = keyOrValue;
34
32
  if (value === void 0) {
35
- throw new Error('ExtensionError0.extend("method", key, value) requires value');
33
+ throw new Error('PluginError0.use("method", key, value) requires value');
36
34
  }
37
35
  nextMethods[key] = value;
38
36
  } else {
39
- nextRefine.push(keyOrValue);
37
+ nextAdapt.push(keyOrValue);
40
38
  }
41
- return new ExtensionError0({
39
+ return new PluginError0({
42
40
  props: nextProps,
43
41
  methods: nextMethods,
44
- refine: nextRefine
42
+ adapt: nextAdapt
45
43
  });
46
44
  }
47
45
  }
48
46
  class Error0 extends Error {
49
- static __extensionsMap;
50
- static _extensions = [];
51
- static _emptyExtension = {
47
+ static __pluginsMap;
48
+ static _plugins = [];
49
+ static _emptyPlugin = {
52
50
  props: {},
53
51
  methods: {},
54
- refine: []
52
+ adapt: []
55
53
  };
56
- static _getResolvedExtension() {
54
+ static _getResolvedPlugin() {
57
55
  const resolved = {
58
56
  props: {},
59
57
  methods: {},
60
- refine: []
58
+ adapt: []
61
59
  };
62
- for (const extension of this._extensions) {
63
- Object.assign(resolved.props, extension.props ?? this._emptyExtension.props);
64
- Object.assign(resolved.methods, extension.methods ?? this._emptyExtension.methods);
65
- 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);
66
64
  }
67
65
  return resolved;
68
66
  }
@@ -72,11 +70,17 @@ class Error0 extends Error {
72
70
  super(input.message, { cause: input.cause });
73
71
  this.name = "Error0";
74
72
  const ctor = this.constructor;
75
- const extension = ctor._getResolvedExtension();
76
- for (const [key, prop] of Object.entries(extension.props)) {
73
+ const plugin = ctor._getResolvedPlugin();
74
+ for (const [key, prop] of Object.entries(plugin.props)) {
77
75
  if (key in input) {
78
76
  const ownValue = input[key];
79
- this[key] = prop.init(ownValue);
77
+ if (typeof prop.init === "function") {
78
+ ;
79
+ this[key] = prop.init(ownValue);
80
+ } else {
81
+ ;
82
+ this[key] = ownValue;
83
+ }
80
84
  } else {
81
85
  Object.defineProperty(this, key, {
82
86
  get: () => prop.resolve({ value: void 0, flow: this.flow(key), error: this }),
@@ -167,12 +171,12 @@ class Error0 extends Error {
167
171
  }
168
172
  return this._fromNonError0(error);
169
173
  }
170
- static _applyRefine(error) {
171
- const extension = this._getResolvedExtension();
172
- for (const refine of extension.refine) {
173
- const refined = refine(error);
174
- if (refined && typeof refined === "object") {
175
- Object.assign(error, refined);
174
+ static _applyAdapt(error) {
175
+ const plugin = this._getResolvedPlugin();
176
+ for (const adapt of plugin.adapt) {
177
+ const adapted = adapt(error);
178
+ if (adapted && typeof adapted === "object") {
179
+ Object.assign(error, adapted);
176
180
  }
177
181
  }
178
182
  return error;
@@ -180,13 +184,16 @@ class Error0 extends Error {
180
184
  static _fromSerialized(error) {
181
185
  const message = this._extractMessage(error);
182
186
  if (typeof error !== "object" || error === null) {
183
- return this._applyRefine(new this(message, { cause: error }));
187
+ return this._applyAdapt(new this(message, { cause: error }));
184
188
  }
185
189
  const errorRecord = error;
186
190
  const recreated = new this(message);
187
- const extension = this._getResolvedExtension();
188
- const propsEntries = Object.entries(extension.props);
191
+ const plugin = this._getResolvedPlugin();
192
+ const propsEntries = Object.entries(plugin.props);
189
193
  for (const [key, prop] of propsEntries) {
194
+ if (prop.deserialize === false) {
195
+ continue;
196
+ }
190
197
  if (!(key in errorRecord)) {
191
198
  continue;
192
199
  }
@@ -204,17 +211,17 @@ class Error0 extends Error {
204
211
  }
205
212
  static _fromNonError0(error) {
206
213
  const message = this._extractMessage(error);
207
- return this._applyRefine(new this(message, { cause: error }));
214
+ return this._applyAdapt(new this(message, { cause: error }));
208
215
  }
209
216
  static _extractMessage(error) {
210
217
  return (typeof error === "string" ? error : typeof error === "object" && error !== null && "message" in error && typeof error.message === "string" ? error.message : void 0) || "Unknown error";
211
218
  }
212
- static _extendWithExtension(extension) {
219
+ static _useWithPlugin(plugin) {
213
220
  const Base = this;
214
221
  const Error0Extended = class Error0 extends Base {
215
222
  };
216
- Error0Extended._extensions = [...Base._extensions, extension];
217
- const resolved = Error0Extended._getResolvedExtension();
223
+ Error0Extended._plugins = [...Base._plugins, plugin];
224
+ const resolved = Error0Extended._getResolvedPlugin();
218
225
  for (const [key, method] of Object.entries(resolved.methods)) {
219
226
  Object.defineProperty(Error0Extended.prototype, key, {
220
227
  value: function(...args) {
@@ -235,61 +242,64 @@ class Error0 extends Error {
235
242
  }
236
243
  return Error0Extended;
237
244
  }
238
- static _extensionFromBuilder(extension) {
239
- const extensionRecord = extension;
245
+ static _pluginFromBuilder(plugin) {
246
+ const pluginRecord = plugin;
240
247
  return {
241
- props: { ...extensionRecord._extension.props ?? {} },
242
- methods: { ...extensionRecord._extension.methods ?? {} },
243
- refine: [...extensionRecord._extension.refine ?? []]
248
+ props: { ...pluginRecord._plugin.props ?? {} },
249
+ methods: { ...pluginRecord._plugin.methods ?? {} },
250
+ adapt: [...pluginRecord._plugin.adapt ?? []]
244
251
  };
245
252
  }
246
253
  static prop(key, value) {
247
- return this.extend("prop", key, value);
254
+ return this.use("prop", key, value);
248
255
  }
249
256
  static method(key, value) {
250
- return this.extend("method", key, value);
257
+ return this.use("method", key, value);
251
258
  }
252
- static refine(value) {
253
- return this.extend("refine", value);
259
+ static adapt(value) {
260
+ return this.use("adapt", value);
254
261
  }
255
- static extend(first, key, value) {
256
- if (first instanceof ExtensionError0) {
257
- return this._extendWithExtension(this._extensionFromBuilder(first));
262
+ static use(first, key, value) {
263
+ if (first instanceof PluginError0) {
264
+ return this._useWithPlugin(this._pluginFromBuilder(first));
258
265
  }
259
- if (first === "refine") {
266
+ if (first === "adapt") {
260
267
  if (typeof key !== "function") {
261
- throw new Error('Error0.extend("refine", value) requires refine function');
268
+ throw new Error('Error0.use("adapt", value) requires adapt function');
262
269
  }
263
- return this._extendWithExtension({
264
- refine: [key]
270
+ return this._useWithPlugin({
271
+ adapt: [key]
265
272
  });
266
273
  }
267
274
  if (typeof key !== "string" || value === void 0) {
268
- throw new Error("Error0.extend(kind, key, value) requires key and value");
275
+ throw new Error("Error0.use(kind, key, value) requires key and value");
269
276
  }
270
277
  if (first === "prop") {
271
- return this._extendWithExtension({
278
+ return this._useWithPlugin({
272
279
  props: { [key]: value }
273
280
  });
274
281
  }
275
- return this._extendWithExtension({
282
+ return this._useWithPlugin({
276
283
  methods: { [key]: value }
277
284
  });
278
285
  }
279
- static extension() {
280
- return new ExtensionError0();
286
+ static plugin() {
287
+ return new PluginError0();
281
288
  }
282
289
  static serialize(error, isPublic = true) {
283
290
  const error0 = this.from(error);
284
291
  const json = {
285
292
  name: error0.name,
286
293
  message: error0.message
287
- // we do not serialize causes, it is enough that we have floated props and refine helper
294
+ // we do not serialize causes, it is enough that we have floated props and adapt helper
288
295
  // cause: error0.cause,
289
296
  };
290
- const extension = this._getResolvedExtension();
291
- const propsEntries = Object.entries(extension.props);
297
+ const plugin = this._getResolvedPlugin();
298
+ const propsEntries = Object.entries(plugin.props);
292
299
  for (const [key, prop] of propsEntries) {
300
+ if (prop.serialize === false) {
301
+ continue;
302
+ }
293
303
  try {
294
304
  const value = prop.resolve({ value: error0.own(key), flow: error0.flow(key), error: error0 });
295
305
  const jsonValue = prop.serialize({ value, error: error0, isPublic });
@@ -312,6 +322,6 @@ class Error0 extends Error {
312
322
  }
313
323
  export {
314
324
  Error0,
315
- ExtensionError0
325
+ PluginError0
316
326
  };
317
327
  //# sourceMappingURL=index.js.map