@devp0nt/error0 1.0.0-next.52 → 1.0.0-next.53

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 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["type IsUnknown<T> = unknown extends T ? ([T] extends [unknown] ? true : false) : false\ntype NormalizeUnknownToUndefined<T> = IsUnknown<T> extends true ? undefined : T\ntype IsOnlyUndefined<T> = [Exclude<T, undefined>] extends [never] ? true : false\ntype InferFirstArg<TFn> = TFn extends (...args: infer TArgs) => unknown\n ? TArgs extends [infer TFirst, ...unknown[]]\n ? TFirst\n : undefined\n : undefined\ntype InferPluginPropInput<TProp extends ErrorPluginPropOptions<any, any, any, any>> = TProp extends {\n init: infer TInit\n}\n ? NormalizeUnknownToUndefined<InferFirstArg<TInit>>\n : undefined\ntype ErrorPluginPropInit<TInputValue, TOutputValue> = ((input: TInputValue) => TOutputValue) | (() => TOutputValue)\ntype ErrorPluginPropSerializeOptions<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n resolved: TResolveValue\n error: TError\n isPublic: boolean\n}\ntype ErrorPluginPropSerialize<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> =\n | ((options: ErrorPluginPropSerializeOptions<TOutputValue, TError, TResolveValue>) => unknown)\n | false\ntype ErrorPluginPropDeserialize<TOutputValue> =\n | ((options: { value: unknown; record: Record<string, unknown> }) => TOutputValue | undefined)\n | false\ntype ErrorPluginPropOptionsResolveOptions<TOutputValue, TError extends Error0> = {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n error: TError\n}\ntype ErrorPluginPropOptionsBase<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = {\n resolve: (options: ErrorPluginPropOptionsResolveOptions<TOutputValue, TError>) => TResolveValue\n serialize: ErrorPluginPropSerialize<TOutputValue, TError, TResolveValue>\n deserialize: ErrorPluginPropDeserialize<TOutputValue>\n}\ntype ErrorPluginPropOptionsWithInit<\n TInputValue,\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init: ErrorPluginPropInit<TInputValue, TOutputValue>\n}\ntype ErrorPluginPropOptionsWithoutInit<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init?: undefined\n}\nexport type ErrorPluginPropOptions<\n TInputValue = undefined,\n TOutputValue = unknown,\n TError extends Error0 = Error0,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> =\n | ErrorPluginPropOptionsWithInit<TInputValue, TOutputValue, TError, TResolveValue>\n | ErrorPluginPropOptionsWithoutInit<TOutputValue, TError, TResolveValue>\nexport type ErrorPluginMethodFn<TOutputValue, TArgs extends unknown[] = unknown[], TError extends Error0 = Error0> = (\n error: TError,\n ...args: TArgs\n) => TOutputValue\ntype ErrorPluginAnyMethodFn = (error: any, ...args: any[]) => any\nexport type ErrorPluginAdaptResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined\nexport type ErrorPluginAdaptFn<\n TError extends Error0 = Error0,\n TOutputProps extends Record<string, unknown> = Record<never, never>,\n> = ((error: TError) => void) | ((error: TError) => ErrorPluginAdaptResult<TOutputProps>)\nexport type ErrorPluginStackSerialize<TError extends Error0> = (options: {\n value: string | undefined\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginStack<TError extends Error0 = Error0> = { serialize: ErrorPluginStackSerialize<TError> }\nexport type ErrorPluginCauseSerialize<TError extends Error0> = (options: {\n cause: unknown\n error: TError\n isPublic: boolean\n is: (cause: unknown) => boolean\n serialize: (cause: unknown) => Record<string, unknown>\n}) => unknown\nexport type ErrorPluginCauseDeserialize = (options: {\n cause: unknown\n error: Record<string, unknown>\n isSerialized: (serializedCause: unknown) => boolean\n fromSerialized: (serializedCause: unknown) => Error0\n}) => unknown\nexport type ErrorPluginCause<TError extends Error0 = Error0> = {\n serialize: ErrorPluginCauseSerialize<TError>\n deserialize: ErrorPluginCauseDeserialize\n}\nexport type ErrorPluginMessageSerialize<TError extends Error0> = (options: {\n value: string\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginMessage<TError extends Error0 = Error0> = { serialize: ErrorPluginMessageSerialize<TError> }\ntype ErrorMethodRecord = { fn: ErrorPluginAnyMethodFn }\n\nexport type ErrorPluginProps = { [key: string]: ErrorPluginPropOptions<any, any> }\nexport type ErrorPluginMethods = { [key: string]: ErrorPluginAnyMethodFn }\n\nexport type ErrorPlugin<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> = {\n props?: TProps\n methods?: TMethods\n adapt?: Array<ErrorPluginAdaptFn<Error0, PluginOutputProps<TProps>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n}\ntype AddPropToPluginProps<\n TProps extends ErrorPluginProps,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = TProps & Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>\ntype AddMethodToPluginMethods<\n TMethods extends ErrorPluginMethods,\n TKey extends string,\n TMethod extends ErrorPluginAnyMethodFn,\n> = TMethods & Record<TKey, TMethod>\ntype PluginOutputProps<TProps extends ErrorPluginProps> = {\n [TKey in keyof TProps]: TProps[TKey] extends ErrorPluginPropOptions<any, any, any, infer TResolveValue>\n ? TResolveValue\n : never\n}\nexport type ErrorPluginsMap = {\n props: Record<string, { init: unknown; output: unknown; resolve: unknown }>\n methods: Record<string, ErrorMethodRecord>\n}\nexport type IsEmptyObject<T> = keyof T extends never ? true : false\nexport type ErrorInputBase = {\n cause?: unknown\n}\ntype ErrorInputPluginProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props'] as IsOnlyUndefined<TPluginsMap['props'][TKey]['init']> extends true\n ? never\n : TKey]?: TPluginsMap['props'][TKey]['init']\n}\nexport type ErrorInput<TPluginsMap extends ErrorPluginsMap> =\n IsEmptyObject<TPluginsMap['props']> extends true\n ? ErrorInputBase\n : ErrorInputBase & ErrorInputPluginProps<TPluginsMap>\n\ntype ErrorResolvedProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['resolve']\n}\ntype ErrorOwnProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['output'] | undefined\n}\ntype ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {\n own: {\n (): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(key: TKey) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n}\ntype ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {\n resolve: () => ErrorResolvedProps<TPluginsMap>\n}\ntype BindInstanceMethod<TMethod> = TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n (error: any, ...args: infer TArgs3): infer TOutput3\n (error: any, ...args: infer TArgs4): infer TOutput4\n}\n ? {\n (...args: TArgs1): TOutput1\n (...args: TArgs2): TOutput2\n (...args: TArgs3): TOutput3\n (...args: TArgs4): TOutput4\n }\n : TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n (error: any, ...args: infer TArgs3): infer TOutput3\n }\n ? {\n (...args: TArgs1): TOutput1\n (...args: TArgs2): TOutput2\n (...args: TArgs3): TOutput3\n }\n : TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n }\n ? {\n (...args: TArgs1): TOutput1\n (...args: TArgs2): TOutput2\n }\n : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n ? (...args: TArgs) => TOutput\n : never\ntype BindStaticMethod<TMethod> = TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n (error: any, ...args: infer TArgs3): infer TOutput3\n (error: any, ...args: infer TArgs4): infer TOutput4\n}\n ? {\n (error: unknown, ...args: TArgs1): TOutput1\n (error: unknown, ...args: TArgs2): TOutput2\n (error: unknown, ...args: TArgs3): TOutput3\n (error: unknown, ...args: TArgs4): TOutput4\n }\n : TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n (error: any, ...args: infer TArgs3): infer TOutput3\n }\n ? {\n (error: unknown, ...args: TArgs1): TOutput1\n (error: unknown, ...args: TArgs2): TOutput2\n (error: unknown, ...args: TArgs3): TOutput3\n }\n : TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n }\n ? {\n (error: unknown, ...args: TArgs1): TOutput1\n (error: unknown, ...args: TArgs2): TOutput2\n }\n : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n ? (error: unknown, ...args: TArgs) => TOutput\n : never\ntype ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: BindInstanceMethod<TPluginsMap['methods'][TKey]['fn']>\n}\nexport type ErrorResolved<TPluginsMap extends ErrorPluginsMap> = ErrorResolvedProps<TPluginsMap> &\n ErrorMethods<TPluginsMap>\n\ntype ErrorStaticMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: BindStaticMethod<TPluginsMap['methods'][TKey]['fn']>\n}\n\ntype EmptyPluginsMap = {\n props: Record<never, { init: never; output: never; resolve: never }>\n methods: Record<never, ErrorMethodRecord>\n}\n\ntype ErrorPluginResolved = {\n props: Record<string, ErrorPluginPropOptions<unknown>>\n methods: Record<string, ErrorPluginMethodFn<unknown>>\n adapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n propKeys: string[]\n propEntries: Array<[string, ErrorPluginPropOptions<unknown>]>\n methodEntries: Array<[string, ErrorPluginMethodFn<unknown>]>\n}\nconst RESERVED_STACK_PROP_ERROR = 'Error0: \"stack\" is a reserved prop key. Use .stack(...) plugin API instead'\nconst RESERVED_MESSAGE_PROP_ERROR = 'Error0: \"message\" is a reserved prop key. Use .message(...) plugin API instead'\n\ntype PluginPropsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['props']>]: NonNullable<TPlugin['props']>[TKey] extends ErrorPluginPropOptions<\n any,\n infer TOutputValue,\n any,\n infer TResolveValue\n >\n ? {\n init: InferPluginPropInput<NonNullable<TPlugin['props']>[TKey]>\n output: TOutputValue\n resolve: TResolveValue\n }\n : never\n}\ntype PluginMethodsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['methods']>]: {\n fn: NonNullable<TPlugin['methods']>[TKey] extends ErrorPluginAnyMethodFn\n ? NonNullable<TPlugin['methods']>[TKey]\n : never\n }\n}\ntype ErrorPluginsMapOfPlugin<TPlugin extends ErrorPlugin> = {\n props: PluginPropsMapOf<TPlugin>\n methods: PluginMethodsMapOf<TPlugin>\n}\ntype ExtendErrorPluginsMap<TMap extends ErrorPluginsMap, TPlugin extends ErrorPlugin> = {\n props: TMap['props'] & ErrorPluginsMapOfPlugin<TPlugin>['props']\n methods: TMap['methods'] & ErrorPluginsMapOfPlugin<TPlugin>['methods']\n}\ntype ExtendErrorPluginsMapWithProp<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = ExtendErrorPluginsMap<\n TMap,\n ErrorPlugin<Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>>\n>\ntype ExtendErrorPluginsMapWithMethod<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TMethod extends ErrorPluginAnyMethodFn,\n> = ExtendErrorPluginsMap<TMap, ErrorPlugin<Record<never, never>, Record<TKey, TMethod>>>\n\ntype PluginsMapOf<TClass> = TClass extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\ntype PluginsMapOfInstance<TInstance> = TInstance extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\n\ntype PluginsMapFromParts<\n TProps extends ErrorPluginProps,\n TMethods extends ErrorPluginMethods,\n> = ErrorPluginsMapOfPlugin<ErrorPlugin<TProps, TMethods>>\ntype ErrorInstanceOfMap<TMap extends ErrorPluginsMap> = Error0 &\n ErrorResolved<TMap> &\n ErrorOwnMethods<TMap> &\n ErrorResolveMethods<TMap> & { readonly __pluginsMap?: TMap }\ntype BuilderError0<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = Error0 &\n ErrorResolved<PluginsMapFromParts<TProps, TMethods>> &\n ErrorOwnMethods<PluginsMapFromParts<TProps, TMethods>> &\n ErrorResolveMethods<PluginsMapFromParts<TProps, TMethods>> & {\n readonly __pluginsMap?: PluginsMapFromParts<TProps, TMethods>\n }\n\ntype PluginOfBuilder<TBuilder> =\n TBuilder extends PluginError0<infer TProps, infer TMethods> ? ErrorPlugin<TProps, TMethods> : never\n\nexport class PluginError0<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> {\n private readonly _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n\n readonly Infer = undefined as unknown as {\n props: TProps\n methods: TMethods\n }\n\n constructor(plugin?: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>) {\n this._plugin = {\n props: { ...(plugin?.props ?? {}) },\n methods: { ...(plugin?.methods ?? {}) },\n adapt: [...(plugin?.adapt ?? [])],\n stack: plugin?.stack,\n cause: plugin?.cause,\n message: plugin?.message,\n }\n }\n\n prop<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods> {\n return this.use('prop', key, value)\n }\n\n method<TKey extends string, TMethod extends (error: BuilderError0<TProps, TMethods>, ...args: any[]) => any>(\n key: TKey,\n value: TMethod,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TMethod>> {\n return this.use('method', key, value)\n }\n\n adapt(\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods> {\n return this.use('adapt', value)\n }\n\n stack(value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('stack', value)\n }\n\n cause(value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('cause', value)\n }\n\n message(value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('message', value)\n }\n\n use<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods>\n use<TKey extends string, TMethod extends (error: BuilderError0<TProps, TMethods>, ...args: any[]) => any>(\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TMethod>>\n use(\n kind: 'adapt',\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods>\n use(kind: 'stack', value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'cause', value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'message', value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(\n kind: 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n keyOrValue: unknown,\n value?: ErrorPluginPropOptions<unknown, unknown, any> | ErrorPluginMethodFn<unknown, unknown[], any>,\n ): PluginError0<any, any> {\n const nextProps: ErrorPluginProps = { ...(this._plugin.props ?? {}) }\n const nextMethods: ErrorPluginMethods = { ...(this._plugin.methods ?? {}) }\n const nextAdapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>> = [...(this._plugin.adapt ?? [])]\n let nextStack: ErrorPluginStack | undefined = this._plugin.stack\n let nextCause: ErrorPluginCause | undefined = this._plugin.cause\n let nextMessage: ErrorPluginMessage | undefined = this._plugin.message\n if (kind === 'prop') {\n const key = keyOrValue as string\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n if (value === undefined) {\n throw new Error('PluginError0.use(\"prop\", key, value) requires value')\n }\n nextProps[key] = value as ErrorPluginPropOptions<any, any>\n } else if (kind === 'method') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('PluginError0.use(\"method\", key, value) requires value')\n }\n nextMethods[key] = value as ErrorPluginMethodFn<any, any[]>\n } else if (kind === 'adapt') {\n nextAdapt.push(keyOrValue as ErrorPluginAdaptFn<Error0, Record<string, unknown>>)\n } else if (kind === 'stack') {\n nextStack = keyOrValue as ErrorPluginStack\n } else if (kind === 'cause') {\n nextCause = keyOrValue as ErrorPluginCause\n } else {\n nextMessage = keyOrValue as ErrorPluginMessage\n }\n return new PluginError0({\n props: nextProps,\n methods: nextMethods,\n adapt: nextAdapt,\n stack: nextStack,\n cause: nextCause,\n message: nextMessage,\n })\n }\n}\n\nconst OWN_SYMBOL: unique symbol = Symbol('Error0.own')\ntype ErrorOwnStore = Record<string, unknown>\n\nexport type ClassError0<TPluginsMap extends ErrorPluginsMap = EmptyPluginsMap> = {\n MAX_CAUSES_DEPTH: number\n new (\n message: string,\n input?: ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n new (\n input: { message: string } & ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n readonly __pluginsMap?: TPluginsMap\n from: (\n error: unknown,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n round: (\n error: unknown,\n isPublic?: boolean,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n causes: {\n (error: unknown, instancesOnly?: false): unknown[]\n (\n error: unknown,\n instancesOnly: true,\n ): Array<Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>>\n }\n resolve: (error: unknown) => ErrorResolvedProps<TPluginsMap>\n serialize: (error: unknown, isPublic?: boolean) => Record<string, unknown>\n own: {\n (error: object): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(error: object, key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(\n error: object,\n key: TKey,\n ) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n // prop: <\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n // ) => ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n // method: <TKey extends string, TMethod extends (error: ErrorInstanceOfMap<TPluginsMap>, ...args: any[]) => any>(\n // key: TKey,\n // value: TMethod,\n // ) => ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TMethod>>\n // adapt: (\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n // ) => ClassError0<TPluginsMap>\n // stack: (value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n // cause: (value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n use: {\n <TBuilder extends PluginError0>(\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<TPluginsMap, PluginOfBuilder<TBuilder>>>\n <\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n <TKey extends string, TMethod extends (error: ErrorInstanceOfMap<TPluginsMap>, ...args: any[]) => any>(\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TMethod>>\n (\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n ): ClassError0<TPluginsMap>\n (kind: 'stack', value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'cause', value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'message', value: ErrorPluginMessage<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n }\n plugin: () => PluginError0\n} & ErrorStaticMethods<TPluginsMap>\n\nexport class Error0 extends Error {\n static readonly __pluginsMap?: EmptyPluginsMap\n readonly __pluginsMap?: EmptyPluginsMap\n static MAX_CAUSES_DEPTH = 99\n protected static _plugins: ErrorPlugin[] = []\n protected static _resolvedPlugin?: ErrorPluginResolved\n\n private static readonly _emptyPlugin: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n stack: undefined,\n cause: undefined,\n message: undefined,\n propKeys: [],\n propEntries: [],\n methodEntries: [],\n }\n\n private static _indexResolvedPlugin(\n resolved: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'>,\n ): ErrorPluginResolved {\n return {\n ...resolved,\n propKeys: Object.keys(resolved.props),\n propEntries: Object.entries(resolved.props),\n methodEntries: Object.entries(resolved.methods),\n }\n }\n\n private static _applyPlugin(\n resolved: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'>,\n plugin: ErrorPlugin,\n ): void {\n if (plugin.props && 'stack' in plugin.props) {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (plugin.props && 'message' in plugin.props) {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n Object.assign(resolved.props, plugin.props ?? this._emptyPlugin.props)\n Object.assign(resolved.methods, plugin.methods ?? this._emptyPlugin.methods)\n resolved.adapt.push(...(plugin.adapt ?? this._emptyPlugin.adapt))\n if (typeof plugin.stack !== 'undefined') {\n resolved.stack = plugin.stack\n }\n if (typeof plugin.cause !== 'undefined') {\n resolved.cause = plugin.cause\n }\n if (typeof plugin.message !== 'undefined') {\n resolved.message = plugin.message\n }\n }\n\n private static _mergeResolvedPlugin(\n this: typeof Error0,\n base: ErrorPluginResolved,\n plugin: ErrorPlugin,\n ): ErrorPluginResolved {\n const merged: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'> = {\n props: { ...base.props },\n methods: { ...base.methods },\n adapt: [...base.adapt],\n stack: base.stack,\n cause: base.cause,\n message: base.message,\n }\n this._applyPlugin(merged, plugin)\n return this._indexResolvedPlugin(merged)\n }\n\n private static _getResolvedPlugin(this: typeof Error0): ErrorPluginResolved {\n if (Object.prototype.hasOwnProperty.call(this, '_resolvedPlugin') && this._resolvedPlugin) {\n return this._resolvedPlugin\n }\n const resolved: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n propKeys: [],\n propEntries: [],\n methodEntries: [],\n }\n for (const plugin of this._plugins) {\n this._applyPlugin(resolved, plugin)\n }\n const indexed = this._indexResolvedPlugin(resolved)\n Object.defineProperty(this, '_resolvedPlugin', {\n value: indexed,\n writable: true,\n enumerable: false,\n configurable: true,\n })\n return indexed\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 const ownStore = Object.create(null) as ErrorOwnStore\n Object.defineProperty(this, OWN_SYMBOL, { value: ownStore, writable: true, enumerable: false, configurable: true })\n\n for (const [key, prop] of plugin.propEntries) {\n if (key === 'stack') {\n continue\n }\n Object.defineProperty(this, key, {\n get: () =>\n prop.resolve({\n own: ownStore[key],\n flow: this.flow(key as never),\n error: this,\n }),\n set: (value) => {\n ownStore[key] = value\n },\n enumerable: true,\n configurable: true,\n })\n if (key in input) {\n const ownValue = (input as Record<string, unknown>)[key]\n ownStore[key] = typeof prop.init === 'function' ? prop.init(ownValue) : ownValue\n }\n }\n }\n\n private static _getOwnStore(object: object): ErrorOwnStore | undefined {\n const record = object as Record<string | symbol, unknown>\n const existing = record[OWN_SYMBOL]\n if (existing && typeof existing === 'object') {\n return existing as ErrorOwnStore\n }\n return undefined\n }\n\n private static readonly isOwnProperty = (object: object, key: string): boolean => {\n const ownStore = this._getOwnStore(object)\n if (ownStore) {\n return Object.prototype.hasOwnProperty.call(ownStore, key)\n }\n return !!Object.getOwnPropertyDescriptor(object, key)\n }\n private static _ownByKey(error: object, key: string): unknown {\n const ownStore = this._getOwnStore(error)\n if (ownStore) {\n return ownStore[key]\n }\n return (error as Record<string, unknown>)[key]\n }\n private static _flowByKey(error: object, key: string): unknown[] {\n const causes = this.causes(error, true)\n const values = new Array<unknown>(causes.length)\n for (let i = 0; i < causes.length; i += 1) {\n values[i] = this._ownByKey(causes[i], key)\n }\n return values\n }\n\n static own<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorOwnProps<PluginsMapOf<TThis>>\n static own<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOf<TThis>>[TKey]\n static own(error: unknown, key?: string): unknown {\n const error0 = this.from(error)\n if (key === undefined) {\n const ownValues: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const ownKey of plugin.propKeys) {\n ownValues[ownKey] = this._ownByKey(error0, ownKey)\n }\n return ownValues\n }\n return this._ownByKey(error0, key)\n }\n own<TThis extends Error0>(this: TThis): ErrorOwnProps<PluginsMapOfInstance<TThis>>\n own<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]\n own(key?: string): unknown {\n const ctor = this.constructor as typeof Error0\n if (key === undefined) {\n return ctor.own(this)\n }\n return ctor._ownByKey(this, key)\n }\n\n static flow<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOf<TThis>>[TKey]>\n static flow(error: unknown, key: string): unknown[] {\n const error0 = this.from(error)\n return this._flowByKey(error0, key)\n }\n flow<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]>\n flow(key: string): unknown[] {\n const ctor = this.constructor as typeof Error0\n return ctor._flowByKey(this, key)\n }\n\n static _resolveByKey(error: Error0, key: string, plugin: ErrorPluginResolved): unknown {\n try {\n const options = {\n get own() {\n return error.own(key as never)\n },\n get flow() {\n return error.flow(key as never)\n },\n error,\n }\n const prop = plugin.props[key]\n const resolver = prop.resolve\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!resolver) {\n return (error as any)[key]\n }\n return resolver(options as ErrorPluginPropOptionsResolveOptions<any, any>)\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to resolve property ${key}`, error)\n return undefined\n }\n }\n\n static resolve<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorResolvedProps<PluginsMapOf<TThis>>\n static resolve(error: unknown): Record<string, unknown>\n static resolve(error: unknown): Record<string, unknown> {\n const error0 = this.from(error)\n const resolved: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const key of plugin.propKeys) {\n resolved[key] = this._resolveByKey(error0, key, plugin)\n }\n return resolved\n }\n resolve<TThis extends Error0>(this: TThis): ErrorResolvedProps<PluginsMapOfInstance<TThis>>\n resolve(): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.resolve(this)\n }\n\n static causes(error: unknown, instancesOnly?: false): unknown[]\n static causes<T extends typeof Error0>(this: T, error: unknown, instancesOnly: true): Array<InstanceType<T>>\n static causes(error: unknown, instancesOnly?: boolean): unknown[] {\n const causes: unknown[] = []\n let current: unknown = error\n const seen = new Set<unknown>()\n let depth = 0\n while (depth < this.MAX_CAUSES_DEPTH) {\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 depth += 1\n }\n return causes\n }\n causes<TThis extends Error0>(this: TThis, instancesOnly?: false): [TThis, ...unknown[]]\n causes<TThis extends Error0>(this: TThis, instancesOnly: true): [TThis, ...TThis[]]\n causes(instancesOnly?: boolean): unknown[] {\n const ctor = this.constructor as typeof Error0\n if (instancesOnly) {\n return ctor.causes(this, true)\n }\n return ctor.causes(this)\n }\n\n static is<T extends typeof Error0>(this: T, error: unknown): error is InstanceType<T> {\n return error instanceof this\n }\n\n static isSerialized(error: unknown): error is Record<string, unknown> {\n return !this.is(error) && typeof error === 'object' && error !== null && 'name' in error && error.name === 'Error0'\n }\n\n static from(error: unknown): Error0 {\n if (this.is(error)) {\n return error\n }\n if (this.isSerialized(error)) {\n return this._fromSerialized(error)\n }\n return this._fromNonError0(error)\n }\n\n static round(error: unknown, isPublic = false): Error0 {\n return this.from(this.serialize(error, isPublic))\n }\n\n private static _applyAdapt(error: Error0): Error0 {\n const plugin = this._getResolvedPlugin()\n for (const adapt of plugin.adapt) {\n const adapted = adapt(error as any)\n if (adapted && typeof adapted === 'object') {\n Object.assign(error as unknown as Record<string, unknown>, adapted)\n }\n }\n return error\n }\n\n private static _fromSerialized(error: unknown): Error0 {\n const message = this._extractMessage(error)\n if (typeof error !== 'object' || error === null) {\n return this._applyAdapt(new this(message, { cause: error }))\n }\n const errorRecord = error as Record<string, unknown>\n const recreated = new this(message)\n const plugin = this._getResolvedPlugin()\n for (const [key, prop] of plugin.propEntries) {\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], record: errorRecord })\n ;(recreated as unknown as Record<string, unknown>)[key] = value\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to deserialize property ${key}`, errorRecord)\n }\n }\n if ('stack' in errorRecord && typeof errorRecord.stack === 'string') {\n recreated.stack = errorRecord.stack\n }\n const causePlugin = plugin.cause\n if (causePlugin && 'cause' in errorRecord) {\n try {\n ;(recreated as { cause?: unknown }).cause = causePlugin.deserialize({\n cause: errorRecord.cause,\n error: errorRecord,\n isSerialized: (serializedCause) => this.isSerialized(serializedCause),\n fromSerialized: (serializedCause) => this._fromSerialized(serializedCause),\n })\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to deserialize cause', errorRecord)\n }\n }\n return recreated\n }\n\n private static _fromNonError0(error: unknown): Error0 {\n const message = this._extractMessage(error)\n return this._applyAdapt(new this(message, { cause: error }))\n }\n\n private static _extractMessage(error: unknown): string {\n return (\n (typeof error === 'string'\n ? error\n : typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string'\n ? error.message\n : undefined) || 'Unknown error'\n )\n }\n\n private static _useWithPlugin(\n this: typeof Error0,\n plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>,\n ): ClassError0 {\n const Base = this as unknown as typeof Error0\n const Error0Extended = class Error0 extends Base {}\n ;(Error0Extended as typeof Error0)._plugins = [...Base._plugins, plugin]\n const resolved = this._mergeResolvedPlugin(Base._getResolvedPlugin(), plugin)\n ;(Error0Extended as typeof Error0)._resolvedPlugin = resolved\n for (const [key, method] of resolved.methodEntries) {\n Object.defineProperty((Error0Extended as typeof Error0).prototype, key, {\n value: function (...args: unknown[]) {\n return method(this as Error0, ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n Object.defineProperty(Error0Extended, key, {\n value: function (error: unknown, ...args: unknown[]) {\n return method(this.from(error), ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n\n return Error0Extended as unknown as ClassError0\n }\n\n private static _pluginFromBuilder(plugin: PluginError0): ErrorPlugin<ErrorPluginProps, ErrorPluginMethods> {\n const pluginRecord = plugin as unknown as {\n _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n }\n return {\n props: { ...(pluginRecord._plugin.props ?? {}) },\n methods: { ...(pluginRecord._plugin.methods ?? {}) },\n adapt: [...(pluginRecord._plugin.adapt ?? [])],\n stack: pluginRecord._plugin.stack,\n cause: pluginRecord._plugin.cause,\n message: pluginRecord._plugin.message,\n }\n }\n\n // static prop<\n // TThis extends typeof Error0,\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // this: TThis,\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n // ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>> {\n // return this.use('prop', key, value)\n // }\n\n // static method<TThis extends typeof Error0, TKey extends string, TMethod extends (error: ErrorInstanceOfMap<PluginsMapOf<TThis>>, ...args: any[]) => any>(\n // this: TThis,\n // key: TKey,\n // value: TMethod,\n // ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TMethod>> {\n // return this.use('method', key, value)\n // }\n\n // static adapt<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('adapt', value)\n // }\n\n // static stack<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('stack', value)\n // }\n\n // static cause<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('cause', value)\n // }\n\n static use<TThis extends typeof Error0, TBuilder extends PluginError0>(\n this: TThis,\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<PluginsMapOf<TThis>, PluginOfBuilder<TBuilder>>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n this: TThis,\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TMethod extends (error: ErrorInstanceOfMap<PluginsMapOf<TThis>>, ...args: any[]) => any,\n >(\n this: TThis,\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TMethod>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'stack',\n value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'cause',\n value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'message',\n value: ErrorPluginMessage<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use(\n this: typeof Error0,\n first: PluginError0 | 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n key?: unknown,\n value?: ErrorPluginPropOptions<unknown> | ErrorPluginMethodFn<unknown>,\n ): ClassError0 {\n if (first instanceof PluginError0) {\n return this._useWithPlugin(this._pluginFromBuilder(first))\n }\n if (first === 'stack') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"stack\", value) requires stack plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"stack\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n stack: key as ErrorPluginStack,\n })\n }\n if (first === 'cause') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"cause\", value) requires cause plugin value')\n }\n if (\n typeof key !== 'object' ||\n key === null ||\n typeof (key as { serialize?: unknown }).serialize !== 'function' ||\n typeof (key as { deserialize?: unknown }).deserialize !== 'function'\n ) {\n throw new Error('Error0.use(\"cause\", value) expects { serialize: function, deserialize: function }')\n }\n return this._useWithPlugin({\n cause: key as ErrorPluginCause,\n })\n }\n if (first === 'message') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"message\", value) requires message plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"message\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n message: key as ErrorPluginMessage,\n })\n }\n if (first === 'adapt') {\n if (typeof key !== 'function') {\n throw new Error('Error0.use(\"adapt\", value) requires adapt function')\n }\n return this._useWithPlugin({\n adapt: [key as ErrorPluginAdaptFn<Error0, Record<string, unknown>>],\n })\n }\n if (typeof key !== 'string' || value === undefined) {\n throw new Error('Error0.use(kind, key, value) requires key and value')\n }\n\n if (first === 'prop') {\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n return this._useWithPlugin({\n props: { [key]: value as ErrorPluginPropOptions<unknown> },\n })\n }\n return this._useWithPlugin({\n methods: { [key]: value as ErrorPluginMethodFn<unknown> },\n })\n }\n\n static plugin(): PluginError0 {\n return new PluginError0()\n }\n\n static serialize(error: unknown, isPublic = true): Record<string, unknown> {\n const error0 = this.from(error)\n const plugin = this._getResolvedPlugin()\n const resolveByKey = (targetError: Error0, key: string, targetPlugin: ErrorPluginResolved): unknown =>\n this._resolveByKey(targetError, key, targetPlugin)\n const messagePlugin = plugin.message\n let serializedMessage: unknown = error0.message\n try {\n if (messagePlugin) {\n serializedMessage = messagePlugin.serialize({ value: error0.message, error: error0, isPublic })\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize message', error0)\n serializedMessage = error0.message\n }\n const json: Record<string, unknown> = {\n name: error0.name,\n }\n if (serializedMessage !== undefined) {\n json.message = serializedMessage\n }\n\n for (const [key, prop] of plugin.propEntries) {\n if (prop.serialize === false) {\n continue\n }\n try {\n const options = {\n get own() {\n return error0.own(key as never)\n },\n get flow() {\n return error0.flow(key as never)\n },\n get resolved() {\n return resolveByKey(error0, key, plugin)\n },\n error: error0,\n isPublic,\n }\n const jsonValue = prop.serialize(options as ErrorPluginPropSerializeOptions<any, any, any>)\n if (jsonValue !== undefined) {\n json[key] = jsonValue\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to serialize property ${key}`, error0)\n }\n }\n const stackPlugin = plugin.stack\n try {\n let serializedStack: unknown\n if (stackPlugin) {\n serializedStack = stackPlugin.serialize({ value: error0.stack, error: error0, isPublic })\n } else {\n serializedStack = isPublic ? undefined : error0.stack\n }\n if (serializedStack !== undefined) {\n json.stack = serializedStack\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize stack', error0)\n }\n const causePlugin = plugin.cause\n if (causePlugin?.serialize) {\n try {\n const serializedCause = causePlugin.serialize({\n cause: (error0 as { cause?: unknown }).cause,\n error: error0,\n isPublic,\n is: (cause) => this.is(cause),\n serialize: (cause) => this.serialize(cause, isPublic),\n })\n if (serializedCause !== undefined) {\n json.cause = serializedCause\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize cause', error0)\n }\n }\n return json\n }\n\n serialize(isPublic = true): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.serialize(this, isPublic)\n }\n\n round<TThis extends Error0>(this: TThis, isPublic = true): TThis {\n const ctor = this.constructor as typeof Error0\n return ctor.round(this, isPublic) as TThis\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["type IsUnknown<T> = unknown extends T ? ([T] extends [unknown] ? true : false) : false\ntype NormalizeUnknownToUndefined<T> = IsUnknown<T> extends true ? undefined : T\ntype IsOnlyUndefined<T> = [Exclude<T, undefined>] extends [never] ? true : false\ntype InferFirstArg<TFn> = TFn extends (...args: infer TArgs) => unknown\n ? TArgs extends [infer TFirst, ...unknown[]]\n ? TFirst\n : undefined\n : undefined\ntype InferPluginPropInput<TProp extends ErrorPluginPropOptions<any, any, any, any>> = TProp extends {\n init: infer TInit\n}\n ? NormalizeUnknownToUndefined<InferFirstArg<TInit>>\n : undefined\ntype ErrorPluginPropInit<TInputValue, TOutputValue> = ((input: TInputValue) => TOutputValue) | (() => TOutputValue)\ntype ErrorPluginPropSerializeOptions<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n resolved: TResolveValue\n error: TError\n isPublic: boolean\n}\ntype ErrorPluginPropSerialize<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> =\n | ((options: ErrorPluginPropSerializeOptions<TOutputValue, TError, TResolveValue>) => unknown)\n | false\ntype ErrorPluginPropDeserialize<TOutputValue> =\n | ((options: { value: unknown; record: Record<string, unknown> }) => TOutputValue | undefined)\n | false\ntype ErrorPluginPropOptionsResolveOptions<TOutputValue, TError extends Error0> = {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n error: TError\n}\ntype ErrorPluginPropOptionsBase<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = {\n resolve: (options: ErrorPluginPropOptionsResolveOptions<TOutputValue, TError>) => TResolveValue\n serialize: ErrorPluginPropSerialize<TOutputValue, TError, TResolveValue>\n deserialize: ErrorPluginPropDeserialize<TOutputValue>\n}\ntype ErrorPluginPropOptionsWithInit<\n TInputValue,\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init: ErrorPluginPropInit<TInputValue, TOutputValue>\n}\ntype ErrorPluginPropOptionsWithoutInit<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init?: undefined\n}\nexport type ErrorPluginPropOptions<\n TInputValue = undefined,\n TOutputValue = unknown,\n TError extends Error0 = Error0,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> =\n | ErrorPluginPropOptionsWithInit<TInputValue, TOutputValue, TError, TResolveValue>\n | ErrorPluginPropOptionsWithoutInit<TOutputValue, TError, TResolveValue>\nexport type ErrorPluginMethodFn<TOutputValue, TArgs extends unknown[] = unknown[], TError extends Error0 = Error0> = (\n error: TError,\n ...args: TArgs\n) => TOutputValue\ntype ErrorPluginAnyMethodFn = (error: any, ...args: any[]) => any\nexport type ErrorPluginAdaptResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined\nexport type ErrorPluginAdaptFn<\n TError extends Error0 = Error0,\n TOutputProps extends Record<string, unknown> = Record<never, never>,\n> = ((error: TError) => void) | ((error: TError) => ErrorPluginAdaptResult<TOutputProps>)\nexport type ErrorPluginStackSerialize<TError extends Error0> = (options: {\n value: string | undefined\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginStack<TError extends Error0 = Error0> = { serialize: ErrorPluginStackSerialize<TError> }\nexport type ErrorPluginCauseSerialize<TError extends Error0> = (options: {\n cause: unknown\n error: TError\n isPublic: boolean\n is: (cause: unknown) => boolean\n serialize: (cause: unknown) => Record<string, unknown>\n}) => unknown\nexport type ErrorPluginCauseDeserialize = (options: {\n cause: unknown\n error: Record<string, unknown>\n isSerialized: (serializedCause: unknown) => boolean\n fromSerialized: (serializedCause: unknown) => Error0\n}) => unknown\nexport type ErrorPluginCause<TError extends Error0 = Error0> = {\n serialize: ErrorPluginCauseSerialize<TError>\n deserialize: ErrorPluginCauseDeserialize\n}\nexport type ErrorPluginMessageSerialize<TError extends Error0> = (options: {\n value: string\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginMessage<TError extends Error0 = Error0> = { serialize: ErrorPluginMessageSerialize<TError> }\ntype ErrorMethodRecord = { fn: ErrorPluginAnyMethodFn }\n\nexport type ErrorPluginProps = { [key: string]: ErrorPluginPropOptions<any, any> }\nexport type ErrorPluginMethods = { [key: string]: ErrorPluginAnyMethodFn }\n\nexport type ErrorPlugin<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> = {\n props?: TProps\n methods?: TMethods\n adapt?: Array<ErrorPluginAdaptFn<Error0, PluginOutputProps<TProps>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n}\ntype AddPropToPluginProps<\n TProps extends ErrorPluginProps,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = TProps & Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>\ntype AddMethodToPluginMethods<\n TMethods extends ErrorPluginMethods,\n TKey extends string,\n TMethod extends ErrorPluginAnyMethodFn,\n> = TMethods & Record<TKey, TMethod>\ntype PluginOutputProps<TProps extends ErrorPluginProps> = {\n [TKey in keyof TProps]: TProps[TKey] extends ErrorPluginPropOptions<any, any, any, infer TResolveValue>\n ? TResolveValue\n : never\n}\nexport type ErrorPluginsMap = {\n props: Record<string, { init: unknown; output: unknown; resolve: unknown }>\n methods: Record<string, ErrorMethodRecord>\n}\nexport type IsEmptyObject<T> = keyof T extends never ? true : false\nexport type ErrorInputBase = {\n cause?: unknown\n}\ntype ErrorInputPluginProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props'] as IsOnlyUndefined<TPluginsMap['props'][TKey]['init']> extends true\n ? never\n : TKey]?: TPluginsMap['props'][TKey]['init']\n}\nexport type ErrorInput<TPluginsMap extends ErrorPluginsMap> =\n IsEmptyObject<TPluginsMap['props']> extends true\n ? ErrorInputBase\n : ErrorInputBase & ErrorInputPluginProps<TPluginsMap>\n\ntype ErrorResolvedProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['resolve']\n}\ntype ErrorOwnProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['output'] | undefined\n}\ntype ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {\n own: {\n (): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(key: TKey) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n}\ntype ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {\n resolve: () => ErrorResolvedProps<TPluginsMap>\n}\n// type BindInstanceMethod<TMethod> = TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// (error: any, ...args: infer TArgs3): infer TOutput3\n// (error: any, ...args: infer TArgs4): infer TOutput4\n// }\n// ? {\n// (...args: TArgs1): TOutput1\n// (...args: TArgs2): TOutput2\n// (...args: TArgs3): TOutput3\n// (...args: TArgs4): TOutput4\n// }\n// : TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// (error: any, ...args: infer TArgs3): infer TOutput3\n// }\n// ? {\n// (...args: TArgs1): TOutput1\n// (...args: TArgs2): TOutput2\n// (...args: TArgs3): TOutput3\n// }\n// : TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// }\n// ? {\n// (...args: TArgs1): TOutput1\n// (...args: TArgs2): TOutput2\n// }\n// : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n// ? (...args: TArgs) => TOutput\n// : never\n// type BindStaticMethod<TMethod> = TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// (error: any, ...args: infer TArgs3): infer TOutput3\n// (error: any, ...args: infer TArgs4): infer TOutput4\n// }\n// ? {\n// (error: unknown, ...args: TArgs1): TOutput1\n// (error: unknown, ...args: TArgs2): TOutput2\n// (error: unknown, ...args: TArgs3): TOutput3\n// (error: unknown, ...args: TArgs4): TOutput4\n// }\n// : TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// (error: any, ...args: infer TArgs3): infer TOutput3\n// }\n// ? {\n// (error: unknown, ...args: TArgs1): TOutput1\n// (error: unknown, ...args: TArgs2): TOutput2\n// (error: unknown, ...args: TArgs3): TOutput3\n// }\n// : TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// }\n// ? {\n// (error: unknown, ...args: TArgs1): TOutput1\n// (error: unknown, ...args: TArgs2): TOutput2\n// }\n// : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n// ? (error: unknown, ...args: TArgs) => TOutput\n// : never\ntype BindInstanceMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n ? (...args: TArgs) => TOutput\n : never\ntype BindStaticMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n ? (error: unknown, ...args: TArgs) => TOutput\n : never\ntype ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: BindInstanceMethod<TPluginsMap['methods'][TKey]['fn']>\n}\nexport type ErrorResolved<TPluginsMap extends ErrorPluginsMap> = ErrorResolvedProps<TPluginsMap> &\n ErrorMethods<TPluginsMap>\n\ntype ErrorStaticMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: BindStaticMethod<TPluginsMap['methods'][TKey]['fn']>\n}\n\ntype EmptyPluginsMap = {\n props: Record<never, { init: never; output: never; resolve: never }>\n methods: Record<never, ErrorMethodRecord>\n}\n\ntype ErrorPluginResolved = {\n props: Record<string, ErrorPluginPropOptions<unknown>>\n methods: Record<string, ErrorPluginMethodFn<unknown>>\n adapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n propKeys: string[]\n propEntries: Array<[string, ErrorPluginPropOptions<unknown>]>\n methodEntries: Array<[string, ErrorPluginMethodFn<unknown>]>\n}\nconst RESERVED_STACK_PROP_ERROR = 'Error0: \"stack\" is a reserved prop key. Use .stack(...) plugin API instead'\nconst RESERVED_MESSAGE_PROP_ERROR = 'Error0: \"message\" is a reserved prop key. Use .message(...) plugin API instead'\n\ntype PluginPropsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['props']>]: NonNullable<TPlugin['props']>[TKey] extends ErrorPluginPropOptions<\n any,\n infer TOutputValue,\n any,\n infer TResolveValue\n >\n ? {\n init: InferPluginPropInput<NonNullable<TPlugin['props']>[TKey]>\n output: TOutputValue\n resolve: TResolveValue\n }\n : never\n}\ntype PluginMethodsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['methods']>]: {\n fn: NonNullable<TPlugin['methods']>[TKey] extends ErrorPluginAnyMethodFn\n ? NonNullable<TPlugin['methods']>[TKey]\n : never\n }\n}\ntype ErrorPluginsMapOfPlugin<TPlugin extends ErrorPlugin> = {\n props: PluginPropsMapOf<TPlugin>\n methods: PluginMethodsMapOf<TPlugin>\n}\ntype ExtendErrorPluginsMap<TMap extends ErrorPluginsMap, TPlugin extends ErrorPlugin> = {\n props: TMap['props'] & ErrorPluginsMapOfPlugin<TPlugin>['props']\n methods: TMap['methods'] & ErrorPluginsMapOfPlugin<TPlugin>['methods']\n}\ntype ExtendErrorPluginsMapWithProp<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = ExtendErrorPluginsMap<\n TMap,\n ErrorPlugin<Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>>\n>\ntype ExtendErrorPluginsMapWithMethod<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TMethod extends ErrorPluginAnyMethodFn,\n> = ExtendErrorPluginsMap<TMap, ErrorPlugin<Record<never, never>, Record<TKey, TMethod>>>\n\ntype PluginsMapOf<TClass> = TClass extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\ntype PluginsMapOfInstance<TInstance> = TInstance extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\n\ntype PluginsMapFromParts<\n TProps extends ErrorPluginProps,\n TMethods extends ErrorPluginMethods,\n> = ErrorPluginsMapOfPlugin<ErrorPlugin<TProps, TMethods>>\ntype ErrorInstanceOfMap<TMap extends ErrorPluginsMap> = Error0 &\n ErrorResolved<TMap> &\n ErrorOwnMethods<TMap> &\n ErrorResolveMethods<TMap> & { readonly __pluginsMap?: TMap }\ntype BuilderError0<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = Error0 &\n ErrorResolved<PluginsMapFromParts<TProps, TMethods>> &\n ErrorOwnMethods<PluginsMapFromParts<TProps, TMethods>> &\n ErrorResolveMethods<PluginsMapFromParts<TProps, TMethods>> & {\n readonly __pluginsMap?: PluginsMapFromParts<TProps, TMethods>\n }\n\ntype PluginOfBuilder<TBuilder> =\n TBuilder extends PluginError0<infer TProps, infer TMethods> ? ErrorPlugin<TProps, TMethods> : never\n\nexport class PluginError0<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> {\n private readonly _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n\n readonly Infer = undefined as unknown as {\n props: TProps\n methods: TMethods\n }\n\n constructor(plugin?: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>) {\n this._plugin = {\n props: { ...(plugin?.props ?? {}) },\n methods: { ...(plugin?.methods ?? {}) },\n adapt: [...(plugin?.adapt ?? [])],\n stack: plugin?.stack,\n cause: plugin?.cause,\n message: plugin?.message,\n }\n }\n\n prop<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods> {\n return this.use('prop', key, value)\n }\n\n method<TKey extends string, TMethod extends (error: BuilderError0<TProps, TMethods>, ...args: any[]) => any>(\n key: TKey,\n value: TMethod,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TMethod>> {\n return this.use('method', key, value)\n }\n\n adapt(\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods> {\n return this.use('adapt', value)\n }\n\n stack(value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('stack', value)\n }\n\n cause(value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('cause', value)\n }\n\n message(value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('message', value)\n }\n\n use<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods>\n use<TKey extends string, TMethod extends (error: BuilderError0<TProps, TMethods>, ...args: any[]) => any>(\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TMethod>>\n use(\n kind: 'adapt',\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods>\n use(kind: 'stack', value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'cause', value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'message', value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(\n kind: 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n keyOrValue: unknown,\n value?: ErrorPluginPropOptions<unknown, unknown, any> | ErrorPluginMethodFn<unknown, unknown[], any>,\n ): PluginError0<any, any> {\n const nextProps: ErrorPluginProps = { ...(this._plugin.props ?? {}) }\n const nextMethods: ErrorPluginMethods = { ...(this._plugin.methods ?? {}) }\n const nextAdapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>> = [...(this._plugin.adapt ?? [])]\n let nextStack: ErrorPluginStack | undefined = this._plugin.stack\n let nextCause: ErrorPluginCause | undefined = this._plugin.cause\n let nextMessage: ErrorPluginMessage | undefined = this._plugin.message\n if (kind === 'prop') {\n const key = keyOrValue as string\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n if (value === undefined) {\n throw new Error('PluginError0.use(\"prop\", key, value) requires value')\n }\n nextProps[key] = value as ErrorPluginPropOptions<any, any>\n } else if (kind === 'method') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('PluginError0.use(\"method\", key, value) requires value')\n }\n nextMethods[key] = value as ErrorPluginMethodFn<any, any[]>\n } else if (kind === 'adapt') {\n nextAdapt.push(keyOrValue as ErrorPluginAdaptFn<Error0, Record<string, unknown>>)\n } else if (kind === 'stack') {\n nextStack = keyOrValue as ErrorPluginStack\n } else if (kind === 'cause') {\n nextCause = keyOrValue as ErrorPluginCause\n } else {\n nextMessage = keyOrValue as ErrorPluginMessage\n }\n return new PluginError0({\n props: nextProps,\n methods: nextMethods,\n adapt: nextAdapt,\n stack: nextStack,\n cause: nextCause,\n message: nextMessage,\n })\n }\n}\n\nconst OWN_SYMBOL: unique symbol = Symbol('Error0.own')\ntype ErrorOwnStore = Record<string, unknown>\n\nexport type ClassError0<TPluginsMap extends ErrorPluginsMap = EmptyPluginsMap> = {\n MAX_CAUSES_DEPTH: number\n new (\n message: string,\n input?: ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n new (\n input: { message: string } & ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n readonly __pluginsMap?: TPluginsMap\n from: (\n error: unknown,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n round: (\n error: unknown,\n isPublic?: boolean,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n causes: {\n (error: unknown, instancesOnly?: false): unknown[]\n (\n error: unknown,\n instancesOnly: true,\n ): Array<Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>>\n }\n resolve: (error: unknown) => ErrorResolvedProps<TPluginsMap>\n serialize: (error: unknown, isPublic?: boolean) => Record<string, unknown>\n own: {\n (error: object): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(error: object, key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(\n error: object,\n key: TKey,\n ) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n // prop: <\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n // ) => ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n // method: <TKey extends string, TMethod extends (error: ErrorInstanceOfMap<TPluginsMap>, ...args: any[]) => any>(\n // key: TKey,\n // value: TMethod,\n // ) => ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TMethod>>\n // adapt: (\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n // ) => ClassError0<TPluginsMap>\n // stack: (value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n // cause: (value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n use: {\n <TBuilder extends PluginError0>(\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<TPluginsMap, PluginOfBuilder<TBuilder>>>\n <\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n <TKey extends string, TMethod extends (error: ErrorInstanceOfMap<TPluginsMap>, ...args: any[]) => any>(\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TMethod>>\n (\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n ): ClassError0<TPluginsMap>\n (kind: 'stack', value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'cause', value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'message', value: ErrorPluginMessage<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n }\n plugin: () => PluginError0\n} & ErrorStaticMethods<TPluginsMap>\n\nexport class Error0 extends Error {\n static readonly __pluginsMap?: EmptyPluginsMap\n readonly __pluginsMap?: EmptyPluginsMap\n static MAX_CAUSES_DEPTH = 99\n protected static _plugins: ErrorPlugin[] = []\n protected static _resolvedPlugin?: ErrorPluginResolved\n\n private static readonly _emptyPlugin: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n stack: undefined,\n cause: undefined,\n message: undefined,\n propKeys: [],\n propEntries: [],\n methodEntries: [],\n }\n\n private static _indexResolvedPlugin(\n resolved: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'>,\n ): ErrorPluginResolved {\n return {\n ...resolved,\n propKeys: Object.keys(resolved.props),\n propEntries: Object.entries(resolved.props),\n methodEntries: Object.entries(resolved.methods),\n }\n }\n\n private static _applyPlugin(\n resolved: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'>,\n plugin: ErrorPlugin,\n ): void {\n if (plugin.props && 'stack' in plugin.props) {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (plugin.props && 'message' in plugin.props) {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n Object.assign(resolved.props, plugin.props ?? this._emptyPlugin.props)\n Object.assign(resolved.methods, plugin.methods ?? this._emptyPlugin.methods)\n resolved.adapt.push(...(plugin.adapt ?? this._emptyPlugin.adapt))\n if (typeof plugin.stack !== 'undefined') {\n resolved.stack = plugin.stack\n }\n if (typeof plugin.cause !== 'undefined') {\n resolved.cause = plugin.cause\n }\n if (typeof plugin.message !== 'undefined') {\n resolved.message = plugin.message\n }\n }\n\n private static _mergeResolvedPlugin(\n this: typeof Error0,\n base: ErrorPluginResolved,\n plugin: ErrorPlugin,\n ): ErrorPluginResolved {\n const merged: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'> = {\n props: { ...base.props },\n methods: { ...base.methods },\n adapt: [...base.adapt],\n stack: base.stack,\n cause: base.cause,\n message: base.message,\n }\n this._applyPlugin(merged, plugin)\n return this._indexResolvedPlugin(merged)\n }\n\n private static _getResolvedPlugin(this: typeof Error0): ErrorPluginResolved {\n if (Object.prototype.hasOwnProperty.call(this, '_resolvedPlugin') && this._resolvedPlugin) {\n return this._resolvedPlugin\n }\n const resolved: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n propKeys: [],\n propEntries: [],\n methodEntries: [],\n }\n for (const plugin of this._plugins) {\n this._applyPlugin(resolved, plugin)\n }\n const indexed = this._indexResolvedPlugin(resolved)\n Object.defineProperty(this, '_resolvedPlugin', {\n value: indexed,\n writable: true,\n enumerable: false,\n configurable: true,\n })\n return indexed\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 const ownStore = Object.create(null) as ErrorOwnStore\n Object.defineProperty(this, OWN_SYMBOL, { value: ownStore, writable: true, enumerable: false, configurable: true })\n\n for (const [key, prop] of plugin.propEntries) {\n if (key === 'stack') {\n continue\n }\n Object.defineProperty(this, key, {\n get: () =>\n prop.resolve({\n own: ownStore[key],\n flow: this.flow(key as never),\n error: this,\n }),\n set: (value) => {\n ownStore[key] = value\n },\n enumerable: true,\n configurable: true,\n })\n if (key in input) {\n const ownValue = (input as Record<string, unknown>)[key]\n ownStore[key] = typeof prop.init === 'function' ? prop.init(ownValue) : ownValue\n }\n }\n }\n\n private static _getOwnStore(object: object): ErrorOwnStore | undefined {\n const record = object as Record<string | symbol, unknown>\n const existing = record[OWN_SYMBOL]\n if (existing && typeof existing === 'object') {\n return existing as ErrorOwnStore\n }\n return undefined\n }\n\n private static readonly isOwnProperty = (object: object, key: string): boolean => {\n const ownStore = this._getOwnStore(object)\n if (ownStore) {\n return Object.prototype.hasOwnProperty.call(ownStore, key)\n }\n return !!Object.getOwnPropertyDescriptor(object, key)\n }\n private static _ownByKey(error: object, key: string): unknown {\n const ownStore = this._getOwnStore(error)\n if (ownStore) {\n return ownStore[key]\n }\n return (error as Record<string, unknown>)[key]\n }\n private static _flowByKey(error: object, key: string): unknown[] {\n const causes = this.causes(error, true)\n const values = new Array<unknown>(causes.length)\n for (let i = 0; i < causes.length; i += 1) {\n values[i] = this._ownByKey(causes[i], key)\n }\n return values\n }\n\n static own<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorOwnProps<PluginsMapOf<TThis>>\n static own<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOf<TThis>>[TKey]\n static own(error: unknown, key?: string): unknown {\n const error0 = this.from(error)\n if (key === undefined) {\n const ownValues: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const ownKey of plugin.propKeys) {\n ownValues[ownKey] = this._ownByKey(error0, ownKey)\n }\n return ownValues\n }\n return this._ownByKey(error0, key)\n }\n own<TThis extends Error0>(this: TThis): ErrorOwnProps<PluginsMapOfInstance<TThis>>\n own<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]\n own(key?: string): unknown {\n const ctor = this.constructor as typeof Error0\n if (key === undefined) {\n return ctor.own(this)\n }\n return ctor._ownByKey(this, key)\n }\n\n static flow<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOf<TThis>>[TKey]>\n static flow(error: unknown, key: string): unknown[] {\n const error0 = this.from(error)\n return this._flowByKey(error0, key)\n }\n flow<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]>\n flow(key: string): unknown[] {\n const ctor = this.constructor as typeof Error0\n return ctor._flowByKey(this, key)\n }\n\n static _resolveByKey(error: Error0, key: string, plugin: ErrorPluginResolved): unknown {\n try {\n const options = {\n get own() {\n return error.own(key as never)\n },\n get flow() {\n return error.flow(key as never)\n },\n error,\n }\n const prop = plugin.props[key]\n const resolver = prop.resolve\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!resolver) {\n return (error as any)[key]\n }\n return resolver(options as ErrorPluginPropOptionsResolveOptions<any, any>)\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to resolve property ${key}`, error)\n return undefined\n }\n }\n\n static resolve<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorResolvedProps<PluginsMapOf<TThis>>\n static resolve(error: unknown): Record<string, unknown>\n static resolve(error: unknown): Record<string, unknown> {\n const error0 = this.from(error)\n const resolved: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const key of plugin.propKeys) {\n resolved[key] = this._resolveByKey(error0, key, plugin)\n }\n return resolved\n }\n resolve<TThis extends Error0>(this: TThis): ErrorResolvedProps<PluginsMapOfInstance<TThis>>\n resolve(): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.resolve(this)\n }\n\n static causes(error: unknown, instancesOnly?: false): unknown[]\n static causes<T extends typeof Error0>(this: T, error: unknown, instancesOnly: true): Array<InstanceType<T>>\n static causes(error: unknown, instancesOnly?: boolean): unknown[] {\n const causes: unknown[] = []\n let current: unknown = error\n const seen = new Set<unknown>()\n let depth = 0\n while (depth < this.MAX_CAUSES_DEPTH) {\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 depth += 1\n }\n return causes\n }\n causes<TThis extends Error0>(this: TThis, instancesOnly?: false): [TThis, ...unknown[]]\n causes<TThis extends Error0>(this: TThis, instancesOnly: true): [TThis, ...TThis[]]\n causes(instancesOnly?: boolean): unknown[] {\n const ctor = this.constructor as typeof Error0\n if (instancesOnly) {\n return ctor.causes(this, true)\n }\n return ctor.causes(this)\n }\n\n static is<T extends typeof Error0>(this: T, error: unknown): error is InstanceType<T> {\n return error instanceof this\n }\n\n static isSerialized(error: unknown): error is Record<string, unknown> {\n return !this.is(error) && typeof error === 'object' && error !== null && 'name' in error && error.name === 'Error0'\n }\n\n static from(error: unknown): Error0 {\n if (this.is(error)) {\n return error\n }\n if (this.isSerialized(error)) {\n return this._fromSerialized(error)\n }\n return this._fromNonError0(error)\n }\n\n static round(error: unknown, isPublic = false): Error0 {\n return this.from(this.serialize(error, isPublic))\n }\n\n private static _applyAdapt(error: Error0): Error0 {\n const plugin = this._getResolvedPlugin()\n for (const adapt of plugin.adapt) {\n const adapted = adapt(error as any)\n if (adapted && typeof adapted === 'object') {\n Object.assign(error as unknown as Record<string, unknown>, adapted)\n }\n }\n return error\n }\n\n private static _fromSerialized(error: unknown): Error0 {\n const message = this._extractMessage(error)\n if (typeof error !== 'object' || error === null) {\n return this._applyAdapt(new this(message, { cause: error }))\n }\n const errorRecord = error as Record<string, unknown>\n const recreated = new this(message)\n const plugin = this._getResolvedPlugin()\n for (const [key, prop] of plugin.propEntries) {\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], record: errorRecord })\n ;(recreated as unknown as Record<string, unknown>)[key] = value\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to deserialize property ${key}`, errorRecord)\n }\n }\n if ('stack' in errorRecord && typeof errorRecord.stack === 'string') {\n recreated.stack = errorRecord.stack\n }\n const causePlugin = plugin.cause\n if (causePlugin && 'cause' in errorRecord) {\n try {\n ;(recreated as { cause?: unknown }).cause = causePlugin.deserialize({\n cause: errorRecord.cause,\n error: errorRecord,\n isSerialized: (serializedCause) => this.isSerialized(serializedCause),\n fromSerialized: (serializedCause) => this._fromSerialized(serializedCause),\n })\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to deserialize cause', errorRecord)\n }\n }\n return recreated\n }\n\n private static _fromNonError0(error: unknown): Error0 {\n const message = this._extractMessage(error)\n return this._applyAdapt(new this(message, { cause: error }))\n }\n\n private static _extractMessage(error: unknown): string {\n return (\n (typeof error === 'string'\n ? error\n : typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string'\n ? error.message\n : undefined) || 'Unknown error'\n )\n }\n\n private static _useWithPlugin(\n this: typeof Error0,\n plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>,\n ): ClassError0 {\n const Base = this as unknown as typeof Error0\n const Error0Extended = class Error0 extends Base {}\n ;(Error0Extended as typeof Error0)._plugins = [...Base._plugins, plugin]\n const resolved = this._mergeResolvedPlugin(Base._getResolvedPlugin(), plugin)\n ;(Error0Extended as typeof Error0)._resolvedPlugin = resolved\n for (const [key, method] of resolved.methodEntries) {\n Object.defineProperty((Error0Extended as typeof Error0).prototype, key, {\n value: function (...args: unknown[]) {\n return method(this as Error0, ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n Object.defineProperty(Error0Extended, key, {\n value: function (error: unknown, ...args: unknown[]) {\n return method(this.from(error), ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n\n return Error0Extended as unknown as ClassError0\n }\n\n private static _pluginFromBuilder(plugin: PluginError0): ErrorPlugin<ErrorPluginProps, ErrorPluginMethods> {\n const pluginRecord = plugin as unknown as {\n _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n }\n return {\n props: { ...(pluginRecord._plugin.props ?? {}) },\n methods: { ...(pluginRecord._plugin.methods ?? {}) },\n adapt: [...(pluginRecord._plugin.adapt ?? [])],\n stack: pluginRecord._plugin.stack,\n cause: pluginRecord._plugin.cause,\n message: pluginRecord._plugin.message,\n }\n }\n\n // static prop<\n // TThis extends typeof Error0,\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // this: TThis,\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n // ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>> {\n // return this.use('prop', key, value)\n // }\n\n // static method<TThis extends typeof Error0, TKey extends string, TMethod extends (error: ErrorInstanceOfMap<PluginsMapOf<TThis>>, ...args: any[]) => any>(\n // this: TThis,\n // key: TKey,\n // value: TMethod,\n // ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TMethod>> {\n // return this.use('method', key, value)\n // }\n\n // static adapt<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('adapt', value)\n // }\n\n // static stack<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('stack', value)\n // }\n\n // static cause<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('cause', value)\n // }\n\n static use<TThis extends typeof Error0, TBuilder extends PluginError0>(\n this: TThis,\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<PluginsMapOf<TThis>, PluginOfBuilder<TBuilder>>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n this: TThis,\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TMethod extends (error: ErrorInstanceOfMap<PluginsMapOf<TThis>>, ...args: any[]) => any,\n >(\n this: TThis,\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TMethod>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'stack',\n value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'cause',\n value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'message',\n value: ErrorPluginMessage<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use(\n this: typeof Error0,\n first: PluginError0 | 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n key?: unknown,\n value?: ErrorPluginPropOptions<unknown> | ErrorPluginMethodFn<unknown>,\n ): ClassError0 {\n if (first instanceof PluginError0) {\n return this._useWithPlugin(this._pluginFromBuilder(first))\n }\n if (first === 'stack') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"stack\", value) requires stack plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"stack\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n stack: key as ErrorPluginStack,\n })\n }\n if (first === 'cause') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"cause\", value) requires cause plugin value')\n }\n if (\n typeof key !== 'object' ||\n key === null ||\n typeof (key as { serialize?: unknown }).serialize !== 'function' ||\n typeof (key as { deserialize?: unknown }).deserialize !== 'function'\n ) {\n throw new Error('Error0.use(\"cause\", value) expects { serialize: function, deserialize: function }')\n }\n return this._useWithPlugin({\n cause: key as ErrorPluginCause,\n })\n }\n if (first === 'message') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"message\", value) requires message plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"message\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n message: key as ErrorPluginMessage,\n })\n }\n if (first === 'adapt') {\n if (typeof key !== 'function') {\n throw new Error('Error0.use(\"adapt\", value) requires adapt function')\n }\n return this._useWithPlugin({\n adapt: [key as ErrorPluginAdaptFn<Error0, Record<string, unknown>>],\n })\n }\n if (typeof key !== 'string' || value === undefined) {\n throw new Error('Error0.use(kind, key, value) requires key and value')\n }\n\n if (first === 'prop') {\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n return this._useWithPlugin({\n props: { [key]: value as ErrorPluginPropOptions<unknown> },\n })\n }\n return this._useWithPlugin({\n methods: { [key]: value as ErrorPluginMethodFn<unknown> },\n })\n }\n\n static plugin(): PluginError0 {\n return new PluginError0()\n }\n\n static serialize(error: unknown, isPublic = true): Record<string, unknown> {\n const error0 = this.from(error)\n const plugin = this._getResolvedPlugin()\n const resolveByKey = (targetError: Error0, key: string, targetPlugin: ErrorPluginResolved): unknown =>\n this._resolveByKey(targetError, key, targetPlugin)\n const messagePlugin = plugin.message\n let serializedMessage: unknown = error0.message\n try {\n if (messagePlugin) {\n serializedMessage = messagePlugin.serialize({ value: error0.message, error: error0, isPublic })\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize message', error0)\n serializedMessage = error0.message\n }\n const json: Record<string, unknown> = {\n name: error0.name,\n }\n if (serializedMessage !== undefined) {\n json.message = serializedMessage\n }\n\n for (const [key, prop] of plugin.propEntries) {\n if (prop.serialize === false) {\n continue\n }\n try {\n const options = {\n get own() {\n return error0.own(key as never)\n },\n get flow() {\n return error0.flow(key as never)\n },\n get resolved() {\n return resolveByKey(error0, key, plugin)\n },\n error: error0,\n isPublic,\n }\n const jsonValue = prop.serialize(options as ErrorPluginPropSerializeOptions<any, any, any>)\n if (jsonValue !== undefined) {\n json[key] = jsonValue\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to serialize property ${key}`, error0)\n }\n }\n const stackPlugin = plugin.stack\n try {\n let serializedStack: unknown\n if (stackPlugin) {\n serializedStack = stackPlugin.serialize({ value: error0.stack, error: error0, isPublic })\n } else {\n serializedStack = isPublic ? undefined : error0.stack\n }\n if (serializedStack !== undefined) {\n json.stack = serializedStack\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize stack', error0)\n }\n const causePlugin = plugin.cause\n if (causePlugin?.serialize) {\n try {\n const serializedCause = causePlugin.serialize({\n cause: (error0 as { cause?: unknown }).cause,\n error: error0,\n isPublic,\n is: (cause) => this.is(cause),\n serialize: (cause) => this.serialize(cause, isPublic),\n })\n if (serializedCause !== undefined) {\n json.cause = serializedCause\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize cause', error0)\n }\n }\n return json\n }\n\n serialize(isPublic = true): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.serialize(this, isPublic)\n }\n\n round<TThis extends Error0>(this: TThis, isPublic = true): TThis {\n const ctor = this.constructor as typeof Error0\n return ctor.round(this, isPublic) as TThis\n }\n}\n"],"mappings":"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","names":[]}
@@ -126,56 +126,8 @@ type ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {
126
126
  type ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {
127
127
  resolve: () => ErrorResolvedProps<TPluginsMap>;
128
128
  };
129
- type BindInstanceMethod<TMethod> = TMethod extends {
130
- (error: any, ...args: infer TArgs1): infer TOutput1;
131
- (error: any, ...args: infer TArgs2): infer TOutput2;
132
- (error: any, ...args: infer TArgs3): infer TOutput3;
133
- (error: any, ...args: infer TArgs4): infer TOutput4;
134
- } ? {
135
- (...args: TArgs1): TOutput1;
136
- (...args: TArgs2): TOutput2;
137
- (...args: TArgs3): TOutput3;
138
- (...args: TArgs4): TOutput4;
139
- } : TMethod extends {
140
- (error: any, ...args: infer TArgs1): infer TOutput1;
141
- (error: any, ...args: infer TArgs2): infer TOutput2;
142
- (error: any, ...args: infer TArgs3): infer TOutput3;
143
- } ? {
144
- (...args: TArgs1): TOutput1;
145
- (...args: TArgs2): TOutput2;
146
- (...args: TArgs3): TOutput3;
147
- } : TMethod extends {
148
- (error: any, ...args: infer TArgs1): infer TOutput1;
149
- (error: any, ...args: infer TArgs2): infer TOutput2;
150
- } ? {
151
- (...args: TArgs1): TOutput1;
152
- (...args: TArgs2): TOutput2;
153
- } : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput ? (...args: TArgs) => TOutput : never;
154
- type BindStaticMethod<TMethod> = TMethod extends {
155
- (error: any, ...args: infer TArgs1): infer TOutput1;
156
- (error: any, ...args: infer TArgs2): infer TOutput2;
157
- (error: any, ...args: infer TArgs3): infer TOutput3;
158
- (error: any, ...args: infer TArgs4): infer TOutput4;
159
- } ? {
160
- (error: unknown, ...args: TArgs1): TOutput1;
161
- (error: unknown, ...args: TArgs2): TOutput2;
162
- (error: unknown, ...args: TArgs3): TOutput3;
163
- (error: unknown, ...args: TArgs4): TOutput4;
164
- } : TMethod extends {
165
- (error: any, ...args: infer TArgs1): infer TOutput1;
166
- (error: any, ...args: infer TArgs2): infer TOutput2;
167
- (error: any, ...args: infer TArgs3): infer TOutput3;
168
- } ? {
169
- (error: unknown, ...args: TArgs1): TOutput1;
170
- (error: unknown, ...args: TArgs2): TOutput2;
171
- (error: unknown, ...args: TArgs3): TOutput3;
172
- } : TMethod extends {
173
- (error: any, ...args: infer TArgs1): infer TOutput1;
174
- (error: any, ...args: infer TArgs2): infer TOutput2;
175
- } ? {
176
- (error: unknown, ...args: TArgs1): TOutput1;
177
- (error: unknown, ...args: TArgs2): TOutput2;
178
- } : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput ? (error: unknown, ...args: TArgs) => TOutput : never;
129
+ type BindInstanceMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput ? (...args: TArgs) => TOutput : never;
130
+ type BindStaticMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput ? (error: unknown, ...args: TArgs) => TOutput : never;
179
131
  type ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {
180
132
  [TKey in keyof TPluginsMap['methods']]: BindInstanceMethod<TPluginsMap['methods'][TKey]['fn']>;
181
133
  };
@@ -27,19 +27,6 @@ const tagsPlugin = ({
27
27
  tags,
28
28
  strict = true
29
29
  } = {}) => {
30
- function hasTag(error, tag, policy) {
31
- const tags2 = error.tags;
32
- if (!tags2) {
33
- return false;
34
- }
35
- if (Array.isArray(tag)) {
36
- if (policy === "every") {
37
- return tag.every((item) => tags2.includes(item));
38
- }
39
- return tag.some((item) => tags2.includes(item));
40
- }
41
- return tags2.includes(tag);
42
- }
43
30
  const isTag = (value) => typeof value === "string" && (!tags || !strict || tags.includes(value));
44
31
  return import__.Error0.plugin().prop("tags", {
45
32
  init: (input) => input,
@@ -64,7 +51,19 @@ const tagsPlugin = ({
64
51
  }
65
52
  return value.filter((item) => isTag(item));
66
53
  }
67
- }).method("hasTag", hasTag);
54
+ }).method("hasTag", (error, tag, policy = "every") => {
55
+ const tags2 = error.tags;
56
+ if (!tags2) {
57
+ return false;
58
+ }
59
+ if (Array.isArray(tag)) {
60
+ if (policy === "every") {
61
+ return tag.every((item) => tags2.includes(item));
62
+ }
63
+ return tag.some((item) => tags2.includes(item));
64
+ }
65
+ return tags2.includes(tag);
66
+ });
68
67
  };
69
68
  // Annotate the CommonJS export names for ESM import in node:
70
69
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/tags.ts"],"sourcesContent":["import { Error0 } from '../index.js'\n\nexport const tagsPlugin = <TTag extends string>({\n isPublic = false,\n tags,\n strict = true,\n}: { isPublic?: boolean; tags?: TTag[] | readonly TTag[]; strict?: boolean } = {}) => {\n function hasTag(error: Error0, tag: TTag): boolean\n function hasTag(error: Error0, tag: TTag[], policy: 'every' | 'some'): boolean\n function hasTag(error: Error0, tag: TTag | TTag[], policy?: 'every' | 'some'): boolean {\n const tags = (error as any).tags as string[] | undefined\n if (!tags) {\n return false\n }\n if (Array.isArray(tag)) {\n if (policy === 'every') {\n return tag.every((item) => tags.includes(item))\n }\n return tag.some((item) => tags.includes(item))\n }\n return tags.includes(tag)\n }\n const isTag = (value: unknown): value is TTag =>\n typeof value === 'string' && (!tags || !strict || tags.includes(value as TTag))\n return Error0.plugin()\n .prop('tags', {\n init: (input: string[]) => input,\n resolve: ({ flow }) => {\n const merged: string[] = []\n for (const value of flow) {\n if (Array.isArray(value)) {\n merged.push(...value)\n }\n }\n return merged.length > 0 ? Array.from(new Set(merged)) : undefined\n },\n serialize: ({ resolved, isPublic: _isPublic }) => {\n if (!isPublic && _isPublic) {\n return undefined\n }\n return resolved\n },\n deserialize: ({ value }) => {\n if (!Array.isArray(value)) {\n return undefined\n }\n return value.filter((item) => isTag(item))\n },\n })\n .method('hasTag', hasTag)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAuB;AAEhB,MAAM,aAAa,CAAsB;AAAA,EAC9C,WAAW;AAAA,EACX;AAAA,EACA,SAAS;AACX,IAA+E,CAAC,MAAM;AAGpF,WAAS,OAAO,OAAe,KAAoB,QAAoC;AACrF,UAAMA,QAAQ,MAAc;AAC5B,QAAI,CAACA,OAAM;AACT,aAAO;AAAA,IACT;AACA,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,UAAI,WAAW,SAAS;AACtB,eAAO,IAAI,MAAM,CAAC,SAASA,MAAK,SAAS,IAAI,CAAC;AAAA,MAChD;AACA,aAAO,IAAI,KAAK,CAAC,SAASA,MAAK,SAAS,IAAI,CAAC;AAAA,IAC/C;AACA,WAAOA,MAAK,SAAS,GAAG;AAAA,EAC1B;AACA,QAAM,QAAQ,CAAC,UACb,OAAO,UAAU,aAAa,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,KAAa;AAC/E,SAAO,gBAAO,OAAO,EAClB,KAAK,QAAQ;AAAA,IACZ,MAAM,CAAC,UAAoB;AAAA,IAC3B,SAAS,CAAC,EAAE,KAAK,MAAM;AACrB,YAAM,SAAmB,CAAC;AAC1B,iBAAW,SAAS,MAAM;AACxB,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAO,KAAK,GAAG,KAAK;AAAA,QACtB;AAAA,MACF;AACA,aAAO,OAAO,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IAC3D;AAAA,IACA,WAAW,CAAC,EAAE,UAAU,UAAU,UAAU,MAAM;AAChD,UAAI,CAAC,YAAY,WAAW;AAC1B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,aAAa,CAAC,EAAE,MAAM,MAAM;AAC1B,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,eAAO;AAAA,MACT;AACA,aAAO,MAAM,OAAO,CAAC,SAAS,MAAM,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF,CAAC,EACA,OAAO,UAAU,MAAM;AAC5B;","names":["tags"]}
1
+ {"version":3,"sources":["../../../src/plugins/tags.ts"],"sourcesContent":["import { Error0 } from '../index.js'\n\nexport const tagsPlugin = <TTag extends string>({\n isPublic = false,\n tags,\n strict = true,\n}: { isPublic?: boolean; tags?: TTag[] | readonly TTag[]; strict?: boolean } = {}) => {\n // function hasTag(error: Error0, tag: TTag): boolean\n // function hasTag(error: Error0, tag: TTag[], policy: 'every' | 'some'): boolean\n // function hasTag(error: Error0, tag: TTag | TTag[], policy?: 'every' | 'some'): boolean {\n // const tags = (error as any).tags as string[] | undefined\n // if (!tags) {\n // return false\n // }\n // if (Array.isArray(tag)) {\n // if (policy === 'every') {\n // return tag.every((item) => tags.includes(item))\n // }\n // return tag.some((item) => tags.includes(item))\n // }\n // return tags.includes(tag)\n // }\n const isTag = (value: unknown): value is TTag =>\n typeof value === 'string' && (!tags || !strict || tags.includes(value as TTag))\n return Error0.plugin()\n .prop('tags', {\n init: (input: string[]) => input,\n resolve: ({ flow }) => {\n const merged: string[] = []\n for (const value of flow) {\n if (Array.isArray(value)) {\n merged.push(...value)\n }\n }\n return merged.length > 0 ? Array.from(new Set(merged)) : undefined\n },\n serialize: ({ resolved, isPublic: _isPublic }) => {\n if (!isPublic && _isPublic) {\n return undefined\n }\n return resolved\n },\n deserialize: ({ value }) => {\n if (!Array.isArray(value)) {\n return undefined\n }\n return value.filter((item) => isTag(item))\n },\n })\n .method('hasTag', (error, tag: TTag | TTag[], policy: 'every' | 'some' = 'every'): boolean => {\n const tags = error.tags\n if (!tags) {\n return false\n }\n if (Array.isArray(tag)) {\n if (policy === 'every') {\n return tag.every((item) => tags.includes(item))\n }\n return tag.some((item) => tags.includes(item))\n }\n return tags.includes(tag)\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAuB;AAEhB,MAAM,aAAa,CAAsB;AAAA,EAC9C,WAAW;AAAA,EACX;AAAA,EACA,SAAS;AACX,IAA+E,CAAC,MAAM;AAgBpF,QAAM,QAAQ,CAAC,UACb,OAAO,UAAU,aAAa,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,KAAa;AAC/E,SAAO,gBAAO,OAAO,EAClB,KAAK,QAAQ;AAAA,IACZ,MAAM,CAAC,UAAoB;AAAA,IAC3B,SAAS,CAAC,EAAE,KAAK,MAAM;AACrB,YAAM,SAAmB,CAAC;AAC1B,iBAAW,SAAS,MAAM;AACxB,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAO,KAAK,GAAG,KAAK;AAAA,QACtB;AAAA,MACF;AACA,aAAO,OAAO,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IAC3D;AAAA,IACA,WAAW,CAAC,EAAE,UAAU,UAAU,UAAU,MAAM;AAChD,UAAI,CAAC,YAAY,WAAW;AAC1B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,aAAa,CAAC,EAAE,MAAM,MAAM;AAC1B,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,eAAO;AAAA,MACT;AACA,aAAO,MAAM,OAAO,CAAC,SAAS,MAAM,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF,CAAC,EACA,OAAO,UAAU,CAAC,OAAO,KAAoB,SAA2B,YAAqB;AAC5F,UAAMA,QAAO,MAAM;AACnB,QAAI,CAACA,OAAM;AACT,aAAO;AAAA,IACT;AACA,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,UAAI,WAAW,SAAS;AACtB,eAAO,IAAI,MAAM,CAAC,SAASA,MAAK,SAAS,IAAI,CAAC;AAAA,MAChD;AACA,aAAO,IAAI,KAAK,CAAC,SAASA,MAAK,SAAS,IAAI,CAAC;AAAA,IAC/C;AACA,WAAOA,MAAK,SAAS,GAAG;AAAA,EAC1B,CAAC;AACL;","names":["tags"]}
@@ -4,9 +4,35 @@ declare const tagsPlugin: <TTag extends string>({ isPublic, tags, strict, }?: {
4
4
  isPublic?: boolean;
5
5
  tags?: TTag[] | readonly TTag[];
6
6
  strict?: boolean;
7
- }) => PluginError0<Record<never, never> & Record<"tags", ErrorPluginPropOptions<string[], string[], Error0, string[] | undefined>>, Record<never, never> & Record<"hasTag", {
8
- (error: Error0, tag: TTag): boolean;
9
- (error: Error0, tag: TTag[], policy: "every" | "some"): boolean;
10
- }>>;
7
+ }) => PluginError0<Record<never, never> & Record<"tags", ErrorPluginPropOptions<string[], string[], Error0, string[] | undefined>>, Record<never, never> & Record<"hasTag", (error: Error0 & {
8
+ tags: string[] | undefined;
9
+ } & {} & {
10
+ own: {
11
+ (): {
12
+ tags: string[] | undefined;
13
+ };
14
+ <TKey extends "tags">(key: TKey): {
15
+ tags: string[] | undefined;
16
+ }[TKey];
17
+ };
18
+ flow: <TKey extends "tags">(key: TKey) => {
19
+ tags: string[] | undefined;
20
+ }[TKey][];
21
+ } & {
22
+ resolve: () => {
23
+ tags: string[] | undefined;
24
+ };
25
+ } & {
26
+ readonly __pluginsMap?: {
27
+ props: {
28
+ tags: {
29
+ init: string[] | undefined;
30
+ output: string[];
31
+ resolve: string[] | undefined;
32
+ };
33
+ };
34
+ methods: {};
35
+ } | undefined;
36
+ }, tag: TTag | TTag[], policy?: "every" | "some") => boolean>>;
11
37
 
12
38
  export { tagsPlugin };
@@ -126,56 +126,8 @@ type ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {
126
126
  type ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {
127
127
  resolve: () => ErrorResolvedProps<TPluginsMap>;
128
128
  };
129
- type BindInstanceMethod<TMethod> = TMethod extends {
130
- (error: any, ...args: infer TArgs1): infer TOutput1;
131
- (error: any, ...args: infer TArgs2): infer TOutput2;
132
- (error: any, ...args: infer TArgs3): infer TOutput3;
133
- (error: any, ...args: infer TArgs4): infer TOutput4;
134
- } ? {
135
- (...args: TArgs1): TOutput1;
136
- (...args: TArgs2): TOutput2;
137
- (...args: TArgs3): TOutput3;
138
- (...args: TArgs4): TOutput4;
139
- } : TMethod extends {
140
- (error: any, ...args: infer TArgs1): infer TOutput1;
141
- (error: any, ...args: infer TArgs2): infer TOutput2;
142
- (error: any, ...args: infer TArgs3): infer TOutput3;
143
- } ? {
144
- (...args: TArgs1): TOutput1;
145
- (...args: TArgs2): TOutput2;
146
- (...args: TArgs3): TOutput3;
147
- } : TMethod extends {
148
- (error: any, ...args: infer TArgs1): infer TOutput1;
149
- (error: any, ...args: infer TArgs2): infer TOutput2;
150
- } ? {
151
- (...args: TArgs1): TOutput1;
152
- (...args: TArgs2): TOutput2;
153
- } : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput ? (...args: TArgs) => TOutput : never;
154
- type BindStaticMethod<TMethod> = TMethod extends {
155
- (error: any, ...args: infer TArgs1): infer TOutput1;
156
- (error: any, ...args: infer TArgs2): infer TOutput2;
157
- (error: any, ...args: infer TArgs3): infer TOutput3;
158
- (error: any, ...args: infer TArgs4): infer TOutput4;
159
- } ? {
160
- (error: unknown, ...args: TArgs1): TOutput1;
161
- (error: unknown, ...args: TArgs2): TOutput2;
162
- (error: unknown, ...args: TArgs3): TOutput3;
163
- (error: unknown, ...args: TArgs4): TOutput4;
164
- } : TMethod extends {
165
- (error: any, ...args: infer TArgs1): infer TOutput1;
166
- (error: any, ...args: infer TArgs2): infer TOutput2;
167
- (error: any, ...args: infer TArgs3): infer TOutput3;
168
- } ? {
169
- (error: unknown, ...args: TArgs1): TOutput1;
170
- (error: unknown, ...args: TArgs2): TOutput2;
171
- (error: unknown, ...args: TArgs3): TOutput3;
172
- } : TMethod extends {
173
- (error: any, ...args: infer TArgs1): infer TOutput1;
174
- (error: any, ...args: infer TArgs2): infer TOutput2;
175
- } ? {
176
- (error: unknown, ...args: TArgs1): TOutput1;
177
- (error: unknown, ...args: TArgs2): TOutput2;
178
- } : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput ? (error: unknown, ...args: TArgs) => TOutput : never;
129
+ type BindInstanceMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput ? (...args: TArgs) => TOutput : never;
130
+ type BindStaticMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput ? (error: unknown, ...args: TArgs) => TOutput : never;
179
131
  type ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {
180
132
  [TKey in keyof TPluginsMap['methods']]: BindInstanceMethod<TPluginsMap['methods'][TKey]['fn']>;
181
133
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["type IsUnknown<T> = unknown extends T ? ([T] extends [unknown] ? true : false) : false\ntype NormalizeUnknownToUndefined<T> = IsUnknown<T> extends true ? undefined : T\ntype IsOnlyUndefined<T> = [Exclude<T, undefined>] extends [never] ? true : false\ntype InferFirstArg<TFn> = TFn extends (...args: infer TArgs) => unknown\n ? TArgs extends [infer TFirst, ...unknown[]]\n ? TFirst\n : undefined\n : undefined\ntype InferPluginPropInput<TProp extends ErrorPluginPropOptions<any, any, any, any>> = TProp extends {\n init: infer TInit\n}\n ? NormalizeUnknownToUndefined<InferFirstArg<TInit>>\n : undefined\ntype ErrorPluginPropInit<TInputValue, TOutputValue> = ((input: TInputValue) => TOutputValue) | (() => TOutputValue)\ntype ErrorPluginPropSerializeOptions<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n resolved: TResolveValue\n error: TError\n isPublic: boolean\n}\ntype ErrorPluginPropSerialize<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> =\n | ((options: ErrorPluginPropSerializeOptions<TOutputValue, TError, TResolveValue>) => unknown)\n | false\ntype ErrorPluginPropDeserialize<TOutputValue> =\n | ((options: { value: unknown; record: Record<string, unknown> }) => TOutputValue | undefined)\n | false\ntype ErrorPluginPropOptionsResolveOptions<TOutputValue, TError extends Error0> = {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n error: TError\n}\ntype ErrorPluginPropOptionsBase<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = {\n resolve: (options: ErrorPluginPropOptionsResolveOptions<TOutputValue, TError>) => TResolveValue\n serialize: ErrorPluginPropSerialize<TOutputValue, TError, TResolveValue>\n deserialize: ErrorPluginPropDeserialize<TOutputValue>\n}\ntype ErrorPluginPropOptionsWithInit<\n TInputValue,\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init: ErrorPluginPropInit<TInputValue, TOutputValue>\n}\ntype ErrorPluginPropOptionsWithoutInit<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init?: undefined\n}\nexport type ErrorPluginPropOptions<\n TInputValue = undefined,\n TOutputValue = unknown,\n TError extends Error0 = Error0,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> =\n | ErrorPluginPropOptionsWithInit<TInputValue, TOutputValue, TError, TResolveValue>\n | ErrorPluginPropOptionsWithoutInit<TOutputValue, TError, TResolveValue>\nexport type ErrorPluginMethodFn<TOutputValue, TArgs extends unknown[] = unknown[], TError extends Error0 = Error0> = (\n error: TError,\n ...args: TArgs\n) => TOutputValue\ntype ErrorPluginAnyMethodFn = (error: any, ...args: any[]) => any\nexport type ErrorPluginAdaptResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined\nexport type ErrorPluginAdaptFn<\n TError extends Error0 = Error0,\n TOutputProps extends Record<string, unknown> = Record<never, never>,\n> = ((error: TError) => void) | ((error: TError) => ErrorPluginAdaptResult<TOutputProps>)\nexport type ErrorPluginStackSerialize<TError extends Error0> = (options: {\n value: string | undefined\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginStack<TError extends Error0 = Error0> = { serialize: ErrorPluginStackSerialize<TError> }\nexport type ErrorPluginCauseSerialize<TError extends Error0> = (options: {\n cause: unknown\n error: TError\n isPublic: boolean\n is: (cause: unknown) => boolean\n serialize: (cause: unknown) => Record<string, unknown>\n}) => unknown\nexport type ErrorPluginCauseDeserialize = (options: {\n cause: unknown\n error: Record<string, unknown>\n isSerialized: (serializedCause: unknown) => boolean\n fromSerialized: (serializedCause: unknown) => Error0\n}) => unknown\nexport type ErrorPluginCause<TError extends Error0 = Error0> = {\n serialize: ErrorPluginCauseSerialize<TError>\n deserialize: ErrorPluginCauseDeserialize\n}\nexport type ErrorPluginMessageSerialize<TError extends Error0> = (options: {\n value: string\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginMessage<TError extends Error0 = Error0> = { serialize: ErrorPluginMessageSerialize<TError> }\ntype ErrorMethodRecord = { fn: ErrorPluginAnyMethodFn }\n\nexport type ErrorPluginProps = { [key: string]: ErrorPluginPropOptions<any, any> }\nexport type ErrorPluginMethods = { [key: string]: ErrorPluginAnyMethodFn }\n\nexport type ErrorPlugin<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> = {\n props?: TProps\n methods?: TMethods\n adapt?: Array<ErrorPluginAdaptFn<Error0, PluginOutputProps<TProps>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n}\ntype AddPropToPluginProps<\n TProps extends ErrorPluginProps,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = TProps & Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>\ntype AddMethodToPluginMethods<\n TMethods extends ErrorPluginMethods,\n TKey extends string,\n TMethod extends ErrorPluginAnyMethodFn,\n> = TMethods & Record<TKey, TMethod>\ntype PluginOutputProps<TProps extends ErrorPluginProps> = {\n [TKey in keyof TProps]: TProps[TKey] extends ErrorPluginPropOptions<any, any, any, infer TResolveValue>\n ? TResolveValue\n : never\n}\nexport type ErrorPluginsMap = {\n props: Record<string, { init: unknown; output: unknown; resolve: unknown }>\n methods: Record<string, ErrorMethodRecord>\n}\nexport type IsEmptyObject<T> = keyof T extends never ? true : false\nexport type ErrorInputBase = {\n cause?: unknown\n}\ntype ErrorInputPluginProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props'] as IsOnlyUndefined<TPluginsMap['props'][TKey]['init']> extends true\n ? never\n : TKey]?: TPluginsMap['props'][TKey]['init']\n}\nexport type ErrorInput<TPluginsMap extends ErrorPluginsMap> =\n IsEmptyObject<TPluginsMap['props']> extends true\n ? ErrorInputBase\n : ErrorInputBase & ErrorInputPluginProps<TPluginsMap>\n\ntype ErrorResolvedProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['resolve']\n}\ntype ErrorOwnProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['output'] | undefined\n}\ntype ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {\n own: {\n (): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(key: TKey) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n}\ntype ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {\n resolve: () => ErrorResolvedProps<TPluginsMap>\n}\ntype BindInstanceMethod<TMethod> = TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n (error: any, ...args: infer TArgs3): infer TOutput3\n (error: any, ...args: infer TArgs4): infer TOutput4\n}\n ? {\n (...args: TArgs1): TOutput1\n (...args: TArgs2): TOutput2\n (...args: TArgs3): TOutput3\n (...args: TArgs4): TOutput4\n }\n : TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n (error: any, ...args: infer TArgs3): infer TOutput3\n }\n ? {\n (...args: TArgs1): TOutput1\n (...args: TArgs2): TOutput2\n (...args: TArgs3): TOutput3\n }\n : TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n }\n ? {\n (...args: TArgs1): TOutput1\n (...args: TArgs2): TOutput2\n }\n : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n ? (...args: TArgs) => TOutput\n : never\ntype BindStaticMethod<TMethod> = TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n (error: any, ...args: infer TArgs3): infer TOutput3\n (error: any, ...args: infer TArgs4): infer TOutput4\n}\n ? {\n (error: unknown, ...args: TArgs1): TOutput1\n (error: unknown, ...args: TArgs2): TOutput2\n (error: unknown, ...args: TArgs3): TOutput3\n (error: unknown, ...args: TArgs4): TOutput4\n }\n : TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n (error: any, ...args: infer TArgs3): infer TOutput3\n }\n ? {\n (error: unknown, ...args: TArgs1): TOutput1\n (error: unknown, ...args: TArgs2): TOutput2\n (error: unknown, ...args: TArgs3): TOutput3\n }\n : TMethod extends {\n (error: any, ...args: infer TArgs1): infer TOutput1\n (error: any, ...args: infer TArgs2): infer TOutput2\n }\n ? {\n (error: unknown, ...args: TArgs1): TOutput1\n (error: unknown, ...args: TArgs2): TOutput2\n }\n : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n ? (error: unknown, ...args: TArgs) => TOutput\n : never\ntype ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: BindInstanceMethod<TPluginsMap['methods'][TKey]['fn']>\n}\nexport type ErrorResolved<TPluginsMap extends ErrorPluginsMap> = ErrorResolvedProps<TPluginsMap> &\n ErrorMethods<TPluginsMap>\n\ntype ErrorStaticMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: BindStaticMethod<TPluginsMap['methods'][TKey]['fn']>\n}\n\ntype EmptyPluginsMap = {\n props: Record<never, { init: never; output: never; resolve: never }>\n methods: Record<never, ErrorMethodRecord>\n}\n\ntype ErrorPluginResolved = {\n props: Record<string, ErrorPluginPropOptions<unknown>>\n methods: Record<string, ErrorPluginMethodFn<unknown>>\n adapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n propKeys: string[]\n propEntries: Array<[string, ErrorPluginPropOptions<unknown>]>\n methodEntries: Array<[string, ErrorPluginMethodFn<unknown>]>\n}\nconst RESERVED_STACK_PROP_ERROR = 'Error0: \"stack\" is a reserved prop key. Use .stack(...) plugin API instead'\nconst RESERVED_MESSAGE_PROP_ERROR = 'Error0: \"message\" is a reserved prop key. Use .message(...) plugin API instead'\n\ntype PluginPropsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['props']>]: NonNullable<TPlugin['props']>[TKey] extends ErrorPluginPropOptions<\n any,\n infer TOutputValue,\n any,\n infer TResolveValue\n >\n ? {\n init: InferPluginPropInput<NonNullable<TPlugin['props']>[TKey]>\n output: TOutputValue\n resolve: TResolveValue\n }\n : never\n}\ntype PluginMethodsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['methods']>]: {\n fn: NonNullable<TPlugin['methods']>[TKey] extends ErrorPluginAnyMethodFn\n ? NonNullable<TPlugin['methods']>[TKey]\n : never\n }\n}\ntype ErrorPluginsMapOfPlugin<TPlugin extends ErrorPlugin> = {\n props: PluginPropsMapOf<TPlugin>\n methods: PluginMethodsMapOf<TPlugin>\n}\ntype ExtendErrorPluginsMap<TMap extends ErrorPluginsMap, TPlugin extends ErrorPlugin> = {\n props: TMap['props'] & ErrorPluginsMapOfPlugin<TPlugin>['props']\n methods: TMap['methods'] & ErrorPluginsMapOfPlugin<TPlugin>['methods']\n}\ntype ExtendErrorPluginsMapWithProp<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = ExtendErrorPluginsMap<\n TMap,\n ErrorPlugin<Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>>\n>\ntype ExtendErrorPluginsMapWithMethod<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TMethod extends ErrorPluginAnyMethodFn,\n> = ExtendErrorPluginsMap<TMap, ErrorPlugin<Record<never, never>, Record<TKey, TMethod>>>\n\ntype PluginsMapOf<TClass> = TClass extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\ntype PluginsMapOfInstance<TInstance> = TInstance extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\n\ntype PluginsMapFromParts<\n TProps extends ErrorPluginProps,\n TMethods extends ErrorPluginMethods,\n> = ErrorPluginsMapOfPlugin<ErrorPlugin<TProps, TMethods>>\ntype ErrorInstanceOfMap<TMap extends ErrorPluginsMap> = Error0 &\n ErrorResolved<TMap> &\n ErrorOwnMethods<TMap> &\n ErrorResolveMethods<TMap> & { readonly __pluginsMap?: TMap }\ntype BuilderError0<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = Error0 &\n ErrorResolved<PluginsMapFromParts<TProps, TMethods>> &\n ErrorOwnMethods<PluginsMapFromParts<TProps, TMethods>> &\n ErrorResolveMethods<PluginsMapFromParts<TProps, TMethods>> & {\n readonly __pluginsMap?: PluginsMapFromParts<TProps, TMethods>\n }\n\ntype PluginOfBuilder<TBuilder> =\n TBuilder extends PluginError0<infer TProps, infer TMethods> ? ErrorPlugin<TProps, TMethods> : never\n\nexport class PluginError0<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> {\n private readonly _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n\n readonly Infer = undefined as unknown as {\n props: TProps\n methods: TMethods\n }\n\n constructor(plugin?: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>) {\n this._plugin = {\n props: { ...(plugin?.props ?? {}) },\n methods: { ...(plugin?.methods ?? {}) },\n adapt: [...(plugin?.adapt ?? [])],\n stack: plugin?.stack,\n cause: plugin?.cause,\n message: plugin?.message,\n }\n }\n\n prop<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods> {\n return this.use('prop', key, value)\n }\n\n method<TKey extends string, TMethod extends (error: BuilderError0<TProps, TMethods>, ...args: any[]) => any>(\n key: TKey,\n value: TMethod,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TMethod>> {\n return this.use('method', key, value)\n }\n\n adapt(\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods> {\n return this.use('adapt', value)\n }\n\n stack(value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('stack', value)\n }\n\n cause(value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('cause', value)\n }\n\n message(value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('message', value)\n }\n\n use<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods>\n use<TKey extends string, TMethod extends (error: BuilderError0<TProps, TMethods>, ...args: any[]) => any>(\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TMethod>>\n use(\n kind: 'adapt',\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods>\n use(kind: 'stack', value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'cause', value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'message', value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(\n kind: 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n keyOrValue: unknown,\n value?: ErrorPluginPropOptions<unknown, unknown, any> | ErrorPluginMethodFn<unknown, unknown[], any>,\n ): PluginError0<any, any> {\n const nextProps: ErrorPluginProps = { ...(this._plugin.props ?? {}) }\n const nextMethods: ErrorPluginMethods = { ...(this._plugin.methods ?? {}) }\n const nextAdapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>> = [...(this._plugin.adapt ?? [])]\n let nextStack: ErrorPluginStack | undefined = this._plugin.stack\n let nextCause: ErrorPluginCause | undefined = this._plugin.cause\n let nextMessage: ErrorPluginMessage | undefined = this._plugin.message\n if (kind === 'prop') {\n const key = keyOrValue as string\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n if (value === undefined) {\n throw new Error('PluginError0.use(\"prop\", key, value) requires value')\n }\n nextProps[key] = value as ErrorPluginPropOptions<any, any>\n } else if (kind === 'method') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('PluginError0.use(\"method\", key, value) requires value')\n }\n nextMethods[key] = value as ErrorPluginMethodFn<any, any[]>\n } else if (kind === 'adapt') {\n nextAdapt.push(keyOrValue as ErrorPluginAdaptFn<Error0, Record<string, unknown>>)\n } else if (kind === 'stack') {\n nextStack = keyOrValue as ErrorPluginStack\n } else if (kind === 'cause') {\n nextCause = keyOrValue as ErrorPluginCause\n } else {\n nextMessage = keyOrValue as ErrorPluginMessage\n }\n return new PluginError0({\n props: nextProps,\n methods: nextMethods,\n adapt: nextAdapt,\n stack: nextStack,\n cause: nextCause,\n message: nextMessage,\n })\n }\n}\n\nconst OWN_SYMBOL: unique symbol = Symbol('Error0.own')\ntype ErrorOwnStore = Record<string, unknown>\n\nexport type ClassError0<TPluginsMap extends ErrorPluginsMap = EmptyPluginsMap> = {\n MAX_CAUSES_DEPTH: number\n new (\n message: string,\n input?: ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n new (\n input: { message: string } & ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n readonly __pluginsMap?: TPluginsMap\n from: (\n error: unknown,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n round: (\n error: unknown,\n isPublic?: boolean,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n causes: {\n (error: unknown, instancesOnly?: false): unknown[]\n (\n error: unknown,\n instancesOnly: true,\n ): Array<Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>>\n }\n resolve: (error: unknown) => ErrorResolvedProps<TPluginsMap>\n serialize: (error: unknown, isPublic?: boolean) => Record<string, unknown>\n own: {\n (error: object): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(error: object, key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(\n error: object,\n key: TKey,\n ) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n // prop: <\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n // ) => ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n // method: <TKey extends string, TMethod extends (error: ErrorInstanceOfMap<TPluginsMap>, ...args: any[]) => any>(\n // key: TKey,\n // value: TMethod,\n // ) => ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TMethod>>\n // adapt: (\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n // ) => ClassError0<TPluginsMap>\n // stack: (value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n // cause: (value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n use: {\n <TBuilder extends PluginError0>(\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<TPluginsMap, PluginOfBuilder<TBuilder>>>\n <\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n <TKey extends string, TMethod extends (error: ErrorInstanceOfMap<TPluginsMap>, ...args: any[]) => any>(\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TMethod>>\n (\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n ): ClassError0<TPluginsMap>\n (kind: 'stack', value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'cause', value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'message', value: ErrorPluginMessage<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n }\n plugin: () => PluginError0\n} & ErrorStaticMethods<TPluginsMap>\n\nexport class Error0 extends Error {\n static readonly __pluginsMap?: EmptyPluginsMap\n readonly __pluginsMap?: EmptyPluginsMap\n static MAX_CAUSES_DEPTH = 99\n protected static _plugins: ErrorPlugin[] = []\n protected static _resolvedPlugin?: ErrorPluginResolved\n\n private static readonly _emptyPlugin: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n stack: undefined,\n cause: undefined,\n message: undefined,\n propKeys: [],\n propEntries: [],\n methodEntries: [],\n }\n\n private static _indexResolvedPlugin(\n resolved: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'>,\n ): ErrorPluginResolved {\n return {\n ...resolved,\n propKeys: Object.keys(resolved.props),\n propEntries: Object.entries(resolved.props),\n methodEntries: Object.entries(resolved.methods),\n }\n }\n\n private static _applyPlugin(\n resolved: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'>,\n plugin: ErrorPlugin,\n ): void {\n if (plugin.props && 'stack' in plugin.props) {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (plugin.props && 'message' in plugin.props) {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n Object.assign(resolved.props, plugin.props ?? this._emptyPlugin.props)\n Object.assign(resolved.methods, plugin.methods ?? this._emptyPlugin.methods)\n resolved.adapt.push(...(plugin.adapt ?? this._emptyPlugin.adapt))\n if (typeof plugin.stack !== 'undefined') {\n resolved.stack = plugin.stack\n }\n if (typeof plugin.cause !== 'undefined') {\n resolved.cause = plugin.cause\n }\n if (typeof plugin.message !== 'undefined') {\n resolved.message = plugin.message\n }\n }\n\n private static _mergeResolvedPlugin(\n this: typeof Error0,\n base: ErrorPluginResolved,\n plugin: ErrorPlugin,\n ): ErrorPluginResolved {\n const merged: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'> = {\n props: { ...base.props },\n methods: { ...base.methods },\n adapt: [...base.adapt],\n stack: base.stack,\n cause: base.cause,\n message: base.message,\n }\n this._applyPlugin(merged, plugin)\n return this._indexResolvedPlugin(merged)\n }\n\n private static _getResolvedPlugin(this: typeof Error0): ErrorPluginResolved {\n if (Object.prototype.hasOwnProperty.call(this, '_resolvedPlugin') && this._resolvedPlugin) {\n return this._resolvedPlugin\n }\n const resolved: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n propKeys: [],\n propEntries: [],\n methodEntries: [],\n }\n for (const plugin of this._plugins) {\n this._applyPlugin(resolved, plugin)\n }\n const indexed = this._indexResolvedPlugin(resolved)\n Object.defineProperty(this, '_resolvedPlugin', {\n value: indexed,\n writable: true,\n enumerable: false,\n configurable: true,\n })\n return indexed\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 const ownStore = Object.create(null) as ErrorOwnStore\n Object.defineProperty(this, OWN_SYMBOL, { value: ownStore, writable: true, enumerable: false, configurable: true })\n\n for (const [key, prop] of plugin.propEntries) {\n if (key === 'stack') {\n continue\n }\n Object.defineProperty(this, key, {\n get: () =>\n prop.resolve({\n own: ownStore[key],\n flow: this.flow(key as never),\n error: this,\n }),\n set: (value) => {\n ownStore[key] = value\n },\n enumerable: true,\n configurable: true,\n })\n if (key in input) {\n const ownValue = (input as Record<string, unknown>)[key]\n ownStore[key] = typeof prop.init === 'function' ? prop.init(ownValue) : ownValue\n }\n }\n }\n\n private static _getOwnStore(object: object): ErrorOwnStore | undefined {\n const record = object as Record<string | symbol, unknown>\n const existing = record[OWN_SYMBOL]\n if (existing && typeof existing === 'object') {\n return existing as ErrorOwnStore\n }\n return undefined\n }\n\n private static readonly isOwnProperty = (object: object, key: string): boolean => {\n const ownStore = this._getOwnStore(object)\n if (ownStore) {\n return Object.prototype.hasOwnProperty.call(ownStore, key)\n }\n return !!Object.getOwnPropertyDescriptor(object, key)\n }\n private static _ownByKey(error: object, key: string): unknown {\n const ownStore = this._getOwnStore(error)\n if (ownStore) {\n return ownStore[key]\n }\n return (error as Record<string, unknown>)[key]\n }\n private static _flowByKey(error: object, key: string): unknown[] {\n const causes = this.causes(error, true)\n const values = new Array<unknown>(causes.length)\n for (let i = 0; i < causes.length; i += 1) {\n values[i] = this._ownByKey(causes[i], key)\n }\n return values\n }\n\n static own<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorOwnProps<PluginsMapOf<TThis>>\n static own<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOf<TThis>>[TKey]\n static own(error: unknown, key?: string): unknown {\n const error0 = this.from(error)\n if (key === undefined) {\n const ownValues: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const ownKey of plugin.propKeys) {\n ownValues[ownKey] = this._ownByKey(error0, ownKey)\n }\n return ownValues\n }\n return this._ownByKey(error0, key)\n }\n own<TThis extends Error0>(this: TThis): ErrorOwnProps<PluginsMapOfInstance<TThis>>\n own<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]\n own(key?: string): unknown {\n const ctor = this.constructor as typeof Error0\n if (key === undefined) {\n return ctor.own(this)\n }\n return ctor._ownByKey(this, key)\n }\n\n static flow<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOf<TThis>>[TKey]>\n static flow(error: unknown, key: string): unknown[] {\n const error0 = this.from(error)\n return this._flowByKey(error0, key)\n }\n flow<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]>\n flow(key: string): unknown[] {\n const ctor = this.constructor as typeof Error0\n return ctor._flowByKey(this, key)\n }\n\n static _resolveByKey(error: Error0, key: string, plugin: ErrorPluginResolved): unknown {\n try {\n const options = {\n get own() {\n return error.own(key as never)\n },\n get flow() {\n return error.flow(key as never)\n },\n error,\n }\n const prop = plugin.props[key]\n const resolver = prop.resolve\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!resolver) {\n return (error as any)[key]\n }\n return resolver(options as ErrorPluginPropOptionsResolveOptions<any, any>)\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to resolve property ${key}`, error)\n return undefined\n }\n }\n\n static resolve<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorResolvedProps<PluginsMapOf<TThis>>\n static resolve(error: unknown): Record<string, unknown>\n static resolve(error: unknown): Record<string, unknown> {\n const error0 = this.from(error)\n const resolved: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const key of plugin.propKeys) {\n resolved[key] = this._resolveByKey(error0, key, plugin)\n }\n return resolved\n }\n resolve<TThis extends Error0>(this: TThis): ErrorResolvedProps<PluginsMapOfInstance<TThis>>\n resolve(): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.resolve(this)\n }\n\n static causes(error: unknown, instancesOnly?: false): unknown[]\n static causes<T extends typeof Error0>(this: T, error: unknown, instancesOnly: true): Array<InstanceType<T>>\n static causes(error: unknown, instancesOnly?: boolean): unknown[] {\n const causes: unknown[] = []\n let current: unknown = error\n const seen = new Set<unknown>()\n let depth = 0\n while (depth < this.MAX_CAUSES_DEPTH) {\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 depth += 1\n }\n return causes\n }\n causes<TThis extends Error0>(this: TThis, instancesOnly?: false): [TThis, ...unknown[]]\n causes<TThis extends Error0>(this: TThis, instancesOnly: true): [TThis, ...TThis[]]\n causes(instancesOnly?: boolean): unknown[] {\n const ctor = this.constructor as typeof Error0\n if (instancesOnly) {\n return ctor.causes(this, true)\n }\n return ctor.causes(this)\n }\n\n static is<T extends typeof Error0>(this: T, error: unknown): error is InstanceType<T> {\n return error instanceof this\n }\n\n static isSerialized(error: unknown): error is Record<string, unknown> {\n return !this.is(error) && typeof error === 'object' && error !== null && 'name' in error && error.name === 'Error0'\n }\n\n static from(error: unknown): Error0 {\n if (this.is(error)) {\n return error\n }\n if (this.isSerialized(error)) {\n return this._fromSerialized(error)\n }\n return this._fromNonError0(error)\n }\n\n static round(error: unknown, isPublic = false): Error0 {\n return this.from(this.serialize(error, isPublic))\n }\n\n private static _applyAdapt(error: Error0): Error0 {\n const plugin = this._getResolvedPlugin()\n for (const adapt of plugin.adapt) {\n const adapted = adapt(error as any)\n if (adapted && typeof adapted === 'object') {\n Object.assign(error as unknown as Record<string, unknown>, adapted)\n }\n }\n return error\n }\n\n private static _fromSerialized(error: unknown): Error0 {\n const message = this._extractMessage(error)\n if (typeof error !== 'object' || error === null) {\n return this._applyAdapt(new this(message, { cause: error }))\n }\n const errorRecord = error as Record<string, unknown>\n const recreated = new this(message)\n const plugin = this._getResolvedPlugin()\n for (const [key, prop] of plugin.propEntries) {\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], record: errorRecord })\n ;(recreated as unknown as Record<string, unknown>)[key] = value\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to deserialize property ${key}`, errorRecord)\n }\n }\n if ('stack' in errorRecord && typeof errorRecord.stack === 'string') {\n recreated.stack = errorRecord.stack\n }\n const causePlugin = plugin.cause\n if (causePlugin && 'cause' in errorRecord) {\n try {\n ;(recreated as { cause?: unknown }).cause = causePlugin.deserialize({\n cause: errorRecord.cause,\n error: errorRecord,\n isSerialized: (serializedCause) => this.isSerialized(serializedCause),\n fromSerialized: (serializedCause) => this._fromSerialized(serializedCause),\n })\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to deserialize cause', errorRecord)\n }\n }\n return recreated\n }\n\n private static _fromNonError0(error: unknown): Error0 {\n const message = this._extractMessage(error)\n return this._applyAdapt(new this(message, { cause: error }))\n }\n\n private static _extractMessage(error: unknown): string {\n return (\n (typeof error === 'string'\n ? error\n : typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string'\n ? error.message\n : undefined) || 'Unknown error'\n )\n }\n\n private static _useWithPlugin(\n this: typeof Error0,\n plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>,\n ): ClassError0 {\n const Base = this as unknown as typeof Error0\n const Error0Extended = class Error0 extends Base {}\n ;(Error0Extended as typeof Error0)._plugins = [...Base._plugins, plugin]\n const resolved = this._mergeResolvedPlugin(Base._getResolvedPlugin(), plugin)\n ;(Error0Extended as typeof Error0)._resolvedPlugin = resolved\n for (const [key, method] of resolved.methodEntries) {\n Object.defineProperty((Error0Extended as typeof Error0).prototype, key, {\n value: function (...args: unknown[]) {\n return method(this as Error0, ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n Object.defineProperty(Error0Extended, key, {\n value: function (error: unknown, ...args: unknown[]) {\n return method(this.from(error), ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n\n return Error0Extended as unknown as ClassError0\n }\n\n private static _pluginFromBuilder(plugin: PluginError0): ErrorPlugin<ErrorPluginProps, ErrorPluginMethods> {\n const pluginRecord = plugin as unknown as {\n _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n }\n return {\n props: { ...(pluginRecord._plugin.props ?? {}) },\n methods: { ...(pluginRecord._plugin.methods ?? {}) },\n adapt: [...(pluginRecord._plugin.adapt ?? [])],\n stack: pluginRecord._plugin.stack,\n cause: pluginRecord._plugin.cause,\n message: pluginRecord._plugin.message,\n }\n }\n\n // static prop<\n // TThis extends typeof Error0,\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // this: TThis,\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n // ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>> {\n // return this.use('prop', key, value)\n // }\n\n // static method<TThis extends typeof Error0, TKey extends string, TMethod extends (error: ErrorInstanceOfMap<PluginsMapOf<TThis>>, ...args: any[]) => any>(\n // this: TThis,\n // key: TKey,\n // value: TMethod,\n // ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TMethod>> {\n // return this.use('method', key, value)\n // }\n\n // static adapt<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('adapt', value)\n // }\n\n // static stack<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('stack', value)\n // }\n\n // static cause<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('cause', value)\n // }\n\n static use<TThis extends typeof Error0, TBuilder extends PluginError0>(\n this: TThis,\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<PluginsMapOf<TThis>, PluginOfBuilder<TBuilder>>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n this: TThis,\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TMethod extends (error: ErrorInstanceOfMap<PluginsMapOf<TThis>>, ...args: any[]) => any,\n >(\n this: TThis,\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TMethod>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'stack',\n value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'cause',\n value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'message',\n value: ErrorPluginMessage<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use(\n this: typeof Error0,\n first: PluginError0 | 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n key?: unknown,\n value?: ErrorPluginPropOptions<unknown> | ErrorPluginMethodFn<unknown>,\n ): ClassError0 {\n if (first instanceof PluginError0) {\n return this._useWithPlugin(this._pluginFromBuilder(first))\n }\n if (first === 'stack') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"stack\", value) requires stack plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"stack\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n stack: key as ErrorPluginStack,\n })\n }\n if (first === 'cause') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"cause\", value) requires cause plugin value')\n }\n if (\n typeof key !== 'object' ||\n key === null ||\n typeof (key as { serialize?: unknown }).serialize !== 'function' ||\n typeof (key as { deserialize?: unknown }).deserialize !== 'function'\n ) {\n throw new Error('Error0.use(\"cause\", value) expects { serialize: function, deserialize: function }')\n }\n return this._useWithPlugin({\n cause: key as ErrorPluginCause,\n })\n }\n if (first === 'message') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"message\", value) requires message plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"message\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n message: key as ErrorPluginMessage,\n })\n }\n if (first === 'adapt') {\n if (typeof key !== 'function') {\n throw new Error('Error0.use(\"adapt\", value) requires adapt function')\n }\n return this._useWithPlugin({\n adapt: [key as ErrorPluginAdaptFn<Error0, Record<string, unknown>>],\n })\n }\n if (typeof key !== 'string' || value === undefined) {\n throw new Error('Error0.use(kind, key, value) requires key and value')\n }\n\n if (first === 'prop') {\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n return this._useWithPlugin({\n props: { [key]: value as ErrorPluginPropOptions<unknown> },\n })\n }\n return this._useWithPlugin({\n methods: { [key]: value as ErrorPluginMethodFn<unknown> },\n })\n }\n\n static plugin(): PluginError0 {\n return new PluginError0()\n }\n\n static serialize(error: unknown, isPublic = true): Record<string, unknown> {\n const error0 = this.from(error)\n const plugin = this._getResolvedPlugin()\n const resolveByKey = (targetError: Error0, key: string, targetPlugin: ErrorPluginResolved): unknown =>\n this._resolveByKey(targetError, key, targetPlugin)\n const messagePlugin = plugin.message\n let serializedMessage: unknown = error0.message\n try {\n if (messagePlugin) {\n serializedMessage = messagePlugin.serialize({ value: error0.message, error: error0, isPublic })\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize message', error0)\n serializedMessage = error0.message\n }\n const json: Record<string, unknown> = {\n name: error0.name,\n }\n if (serializedMessage !== undefined) {\n json.message = serializedMessage\n }\n\n for (const [key, prop] of plugin.propEntries) {\n if (prop.serialize === false) {\n continue\n }\n try {\n const options = {\n get own() {\n return error0.own(key as never)\n },\n get flow() {\n return error0.flow(key as never)\n },\n get resolved() {\n return resolveByKey(error0, key, plugin)\n },\n error: error0,\n isPublic,\n }\n const jsonValue = prop.serialize(options as ErrorPluginPropSerializeOptions<any, any, any>)\n if (jsonValue !== undefined) {\n json[key] = jsonValue\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to serialize property ${key}`, error0)\n }\n }\n const stackPlugin = plugin.stack\n try {\n let serializedStack: unknown\n if (stackPlugin) {\n serializedStack = stackPlugin.serialize({ value: error0.stack, error: error0, isPublic })\n } else {\n serializedStack = isPublic ? undefined : error0.stack\n }\n if (serializedStack !== undefined) {\n json.stack = serializedStack\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize stack', error0)\n }\n const causePlugin = plugin.cause\n if (causePlugin?.serialize) {\n try {\n const serializedCause = causePlugin.serialize({\n cause: (error0 as { cause?: unknown }).cause,\n error: error0,\n isPublic,\n is: (cause) => this.is(cause),\n serialize: (cause) => this.serialize(cause, isPublic),\n })\n if (serializedCause !== undefined) {\n json.cause = serializedCause\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize cause', error0)\n }\n }\n return json\n }\n\n serialize(isPublic = true): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.serialize(this, isPublic)\n }\n\n round<TThis extends Error0>(this: TThis, isPublic = true): TThis {\n const ctor = this.constructor as typeof Error0\n return ctor.round(this, isPublic) as TThis\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["type IsUnknown<T> = unknown extends T ? ([T] extends [unknown] ? true : false) : false\ntype NormalizeUnknownToUndefined<T> = IsUnknown<T> extends true ? undefined : T\ntype IsOnlyUndefined<T> = [Exclude<T, undefined>] extends [never] ? true : false\ntype InferFirstArg<TFn> = TFn extends (...args: infer TArgs) => unknown\n ? TArgs extends [infer TFirst, ...unknown[]]\n ? TFirst\n : undefined\n : undefined\ntype InferPluginPropInput<TProp extends ErrorPluginPropOptions<any, any, any, any>> = TProp extends {\n init: infer TInit\n}\n ? NormalizeUnknownToUndefined<InferFirstArg<TInit>>\n : undefined\ntype ErrorPluginPropInit<TInputValue, TOutputValue> = ((input: TInputValue) => TOutputValue) | (() => TOutputValue)\ntype ErrorPluginPropSerializeOptions<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n resolved: TResolveValue\n error: TError\n isPublic: boolean\n}\ntype ErrorPluginPropSerialize<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> =\n | ((options: ErrorPluginPropSerializeOptions<TOutputValue, TError, TResolveValue>) => unknown)\n | false\ntype ErrorPluginPropDeserialize<TOutputValue> =\n | ((options: { value: unknown; record: Record<string, unknown> }) => TOutputValue | undefined)\n | false\ntype ErrorPluginPropOptionsResolveOptions<TOutputValue, TError extends Error0> = {\n own: TOutputValue | undefined\n flow: Array<TOutputValue | undefined>\n error: TError\n}\ntype ErrorPluginPropOptionsBase<TOutputValue, TError extends Error0, TResolveValue extends TOutputValue | undefined> = {\n resolve: (options: ErrorPluginPropOptionsResolveOptions<TOutputValue, TError>) => TResolveValue\n serialize: ErrorPluginPropSerialize<TOutputValue, TError, TResolveValue>\n deserialize: ErrorPluginPropDeserialize<TOutputValue>\n}\ntype ErrorPluginPropOptionsWithInit<\n TInputValue,\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init: ErrorPluginPropInit<TInputValue, TOutputValue>\n}\ntype ErrorPluginPropOptionsWithoutInit<\n TOutputValue,\n TError extends Error0,\n TResolveValue extends TOutputValue | undefined,\n> = ErrorPluginPropOptionsBase<TOutputValue, TError, TResolveValue> & {\n init?: undefined\n}\nexport type ErrorPluginPropOptions<\n TInputValue = undefined,\n TOutputValue = unknown,\n TError extends Error0 = Error0,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> =\n | ErrorPluginPropOptionsWithInit<TInputValue, TOutputValue, TError, TResolveValue>\n | ErrorPluginPropOptionsWithoutInit<TOutputValue, TError, TResolveValue>\nexport type ErrorPluginMethodFn<TOutputValue, TArgs extends unknown[] = unknown[], TError extends Error0 = Error0> = (\n error: TError,\n ...args: TArgs\n) => TOutputValue\ntype ErrorPluginAnyMethodFn = (error: any, ...args: any[]) => any\nexport type ErrorPluginAdaptResult<TOutputProps extends Record<string, unknown>> = Partial<TOutputProps> | undefined\nexport type ErrorPluginAdaptFn<\n TError extends Error0 = Error0,\n TOutputProps extends Record<string, unknown> = Record<never, never>,\n> = ((error: TError) => void) | ((error: TError) => ErrorPluginAdaptResult<TOutputProps>)\nexport type ErrorPluginStackSerialize<TError extends Error0> = (options: {\n value: string | undefined\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginStack<TError extends Error0 = Error0> = { serialize: ErrorPluginStackSerialize<TError> }\nexport type ErrorPluginCauseSerialize<TError extends Error0> = (options: {\n cause: unknown\n error: TError\n isPublic: boolean\n is: (cause: unknown) => boolean\n serialize: (cause: unknown) => Record<string, unknown>\n}) => unknown\nexport type ErrorPluginCauseDeserialize = (options: {\n cause: unknown\n error: Record<string, unknown>\n isSerialized: (serializedCause: unknown) => boolean\n fromSerialized: (serializedCause: unknown) => Error0\n}) => unknown\nexport type ErrorPluginCause<TError extends Error0 = Error0> = {\n serialize: ErrorPluginCauseSerialize<TError>\n deserialize: ErrorPluginCauseDeserialize\n}\nexport type ErrorPluginMessageSerialize<TError extends Error0> = (options: {\n value: string\n error: TError\n isPublic: boolean\n}) => unknown\nexport type ErrorPluginMessage<TError extends Error0 = Error0> = { serialize: ErrorPluginMessageSerialize<TError> }\ntype ErrorMethodRecord = { fn: ErrorPluginAnyMethodFn }\n\nexport type ErrorPluginProps = { [key: string]: ErrorPluginPropOptions<any, any> }\nexport type ErrorPluginMethods = { [key: string]: ErrorPluginAnyMethodFn }\n\nexport type ErrorPlugin<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> = {\n props?: TProps\n methods?: TMethods\n adapt?: Array<ErrorPluginAdaptFn<Error0, PluginOutputProps<TProps>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n}\ntype AddPropToPluginProps<\n TProps extends ErrorPluginProps,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = TProps & Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>\ntype AddMethodToPluginMethods<\n TMethods extends ErrorPluginMethods,\n TKey extends string,\n TMethod extends ErrorPluginAnyMethodFn,\n> = TMethods & Record<TKey, TMethod>\ntype PluginOutputProps<TProps extends ErrorPluginProps> = {\n [TKey in keyof TProps]: TProps[TKey] extends ErrorPluginPropOptions<any, any, any, infer TResolveValue>\n ? TResolveValue\n : never\n}\nexport type ErrorPluginsMap = {\n props: Record<string, { init: unknown; output: unknown; resolve: unknown }>\n methods: Record<string, ErrorMethodRecord>\n}\nexport type IsEmptyObject<T> = keyof T extends never ? true : false\nexport type ErrorInputBase = {\n cause?: unknown\n}\ntype ErrorInputPluginProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props'] as IsOnlyUndefined<TPluginsMap['props'][TKey]['init']> extends true\n ? never\n : TKey]?: TPluginsMap['props'][TKey]['init']\n}\nexport type ErrorInput<TPluginsMap extends ErrorPluginsMap> =\n IsEmptyObject<TPluginsMap['props']> extends true\n ? ErrorInputBase\n : ErrorInputBase & ErrorInputPluginProps<TPluginsMap>\n\ntype ErrorResolvedProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['resolve']\n}\ntype ErrorOwnProps<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['props']]: TPluginsMap['props'][TKey]['output'] | undefined\n}\ntype ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {\n own: {\n (): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(key: TKey) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n}\ntype ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {\n resolve: () => ErrorResolvedProps<TPluginsMap>\n}\n// type BindInstanceMethod<TMethod> = TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// (error: any, ...args: infer TArgs3): infer TOutput3\n// (error: any, ...args: infer TArgs4): infer TOutput4\n// }\n// ? {\n// (...args: TArgs1): TOutput1\n// (...args: TArgs2): TOutput2\n// (...args: TArgs3): TOutput3\n// (...args: TArgs4): TOutput4\n// }\n// : TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// (error: any, ...args: infer TArgs3): infer TOutput3\n// }\n// ? {\n// (...args: TArgs1): TOutput1\n// (...args: TArgs2): TOutput2\n// (...args: TArgs3): TOutput3\n// }\n// : TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// }\n// ? {\n// (...args: TArgs1): TOutput1\n// (...args: TArgs2): TOutput2\n// }\n// : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n// ? (...args: TArgs) => TOutput\n// : never\n// type BindStaticMethod<TMethod> = TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// (error: any, ...args: infer TArgs3): infer TOutput3\n// (error: any, ...args: infer TArgs4): infer TOutput4\n// }\n// ? {\n// (error: unknown, ...args: TArgs1): TOutput1\n// (error: unknown, ...args: TArgs2): TOutput2\n// (error: unknown, ...args: TArgs3): TOutput3\n// (error: unknown, ...args: TArgs4): TOutput4\n// }\n// : TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// (error: any, ...args: infer TArgs3): infer TOutput3\n// }\n// ? {\n// (error: unknown, ...args: TArgs1): TOutput1\n// (error: unknown, ...args: TArgs2): TOutput2\n// (error: unknown, ...args: TArgs3): TOutput3\n// }\n// : TMethod extends {\n// (error: any, ...args: infer TArgs1): infer TOutput1\n// (error: any, ...args: infer TArgs2): infer TOutput2\n// }\n// ? {\n// (error: unknown, ...args: TArgs1): TOutput1\n// (error: unknown, ...args: TArgs2): TOutput2\n// }\n// : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n// ? (error: unknown, ...args: TArgs) => TOutput\n// : never\ntype BindInstanceMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n ? (...args: TArgs) => TOutput\n : never\ntype BindStaticMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput\n ? (error: unknown, ...args: TArgs) => TOutput\n : never\ntype ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: BindInstanceMethod<TPluginsMap['methods'][TKey]['fn']>\n}\nexport type ErrorResolved<TPluginsMap extends ErrorPluginsMap> = ErrorResolvedProps<TPluginsMap> &\n ErrorMethods<TPluginsMap>\n\ntype ErrorStaticMethods<TPluginsMap extends ErrorPluginsMap> = {\n [TKey in keyof TPluginsMap['methods']]: BindStaticMethod<TPluginsMap['methods'][TKey]['fn']>\n}\n\ntype EmptyPluginsMap = {\n props: Record<never, { init: never; output: never; resolve: never }>\n methods: Record<never, ErrorMethodRecord>\n}\n\ntype ErrorPluginResolved = {\n props: Record<string, ErrorPluginPropOptions<unknown>>\n methods: Record<string, ErrorPluginMethodFn<unknown>>\n adapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>>\n stack?: ErrorPluginStack\n cause?: ErrorPluginCause\n message?: ErrorPluginMessage\n propKeys: string[]\n propEntries: Array<[string, ErrorPluginPropOptions<unknown>]>\n methodEntries: Array<[string, ErrorPluginMethodFn<unknown>]>\n}\nconst RESERVED_STACK_PROP_ERROR = 'Error0: \"stack\" is a reserved prop key. Use .stack(...) plugin API instead'\nconst RESERVED_MESSAGE_PROP_ERROR = 'Error0: \"message\" is a reserved prop key. Use .message(...) plugin API instead'\n\ntype PluginPropsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['props']>]: NonNullable<TPlugin['props']>[TKey] extends ErrorPluginPropOptions<\n any,\n infer TOutputValue,\n any,\n infer TResolveValue\n >\n ? {\n init: InferPluginPropInput<NonNullable<TPlugin['props']>[TKey]>\n output: TOutputValue\n resolve: TResolveValue\n }\n : never\n}\ntype PluginMethodsMapOf<TPlugin extends ErrorPlugin> = {\n [TKey in keyof NonNullable<TPlugin['methods']>]: {\n fn: NonNullable<TPlugin['methods']>[TKey] extends ErrorPluginAnyMethodFn\n ? NonNullable<TPlugin['methods']>[TKey]\n : never\n }\n}\ntype ErrorPluginsMapOfPlugin<TPlugin extends ErrorPlugin> = {\n props: PluginPropsMapOf<TPlugin>\n methods: PluginMethodsMapOf<TPlugin>\n}\ntype ExtendErrorPluginsMap<TMap extends ErrorPluginsMap, TPlugin extends ErrorPlugin> = {\n props: TMap['props'] & ErrorPluginsMapOfPlugin<TPlugin>['props']\n methods: TMap['methods'] & ErrorPluginsMapOfPlugin<TPlugin>['methods']\n}\ntype ExtendErrorPluginsMapWithProp<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TInputValue,\n TOutputValue,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n> = ExtendErrorPluginsMap<\n TMap,\n ErrorPlugin<Record<TKey, ErrorPluginPropOptions<TInputValue, TOutputValue, Error0, TResolveValue>>>\n>\ntype ExtendErrorPluginsMapWithMethod<\n TMap extends ErrorPluginsMap,\n TKey extends string,\n TMethod extends ErrorPluginAnyMethodFn,\n> = ExtendErrorPluginsMap<TMap, ErrorPlugin<Record<never, never>, Record<TKey, TMethod>>>\n\ntype PluginsMapOf<TClass> = TClass extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\ntype PluginsMapOfInstance<TInstance> = TInstance extends { __pluginsMap?: infer TPluginsMap }\n ? TPluginsMap extends ErrorPluginsMap\n ? TPluginsMap\n : EmptyPluginsMap\n : EmptyPluginsMap\n\ntype PluginsMapFromParts<\n TProps extends ErrorPluginProps,\n TMethods extends ErrorPluginMethods,\n> = ErrorPluginsMapOfPlugin<ErrorPlugin<TProps, TMethods>>\ntype ErrorInstanceOfMap<TMap extends ErrorPluginsMap> = Error0 &\n ErrorResolved<TMap> &\n ErrorOwnMethods<TMap> &\n ErrorResolveMethods<TMap> & { readonly __pluginsMap?: TMap }\ntype BuilderError0<TProps extends ErrorPluginProps, TMethods extends ErrorPluginMethods> = Error0 &\n ErrorResolved<PluginsMapFromParts<TProps, TMethods>> &\n ErrorOwnMethods<PluginsMapFromParts<TProps, TMethods>> &\n ErrorResolveMethods<PluginsMapFromParts<TProps, TMethods>> & {\n readonly __pluginsMap?: PluginsMapFromParts<TProps, TMethods>\n }\n\ntype PluginOfBuilder<TBuilder> =\n TBuilder extends PluginError0<infer TProps, infer TMethods> ? ErrorPlugin<TProps, TMethods> : never\n\nexport class PluginError0<\n TProps extends ErrorPluginProps = Record<never, never>,\n TMethods extends ErrorPluginMethods = Record<never, never>,\n> {\n private readonly _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n\n readonly Infer = undefined as unknown as {\n props: TProps\n methods: TMethods\n }\n\n constructor(plugin?: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>) {\n this._plugin = {\n props: { ...(plugin?.props ?? {}) },\n methods: { ...(plugin?.methods ?? {}) },\n adapt: [...(plugin?.adapt ?? [])],\n stack: plugin?.stack,\n cause: plugin?.cause,\n message: plugin?.message,\n }\n }\n\n prop<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods> {\n return this.use('prop', key, value)\n }\n\n method<TKey extends string, TMethod extends (error: BuilderError0<TProps, TMethods>, ...args: any[]) => any>(\n key: TKey,\n value: TMethod,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TMethod>> {\n return this.use('method', key, value)\n }\n\n adapt(\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods> {\n return this.use('adapt', value)\n }\n\n stack(value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('stack', value)\n }\n\n cause(value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('cause', value)\n }\n\n message(value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods> {\n return this.use('message', value)\n }\n\n use<\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, BuilderError0<TProps, TMethods>, TResolveValue>,\n ): PluginError0<AddPropToPluginProps<TProps, TKey, TInputValue, TOutputValue, TResolveValue>, TMethods>\n use<TKey extends string, TMethod extends (error: BuilderError0<TProps, TMethods>, ...args: any[]) => any>(\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): PluginError0<TProps, AddMethodToPluginMethods<TMethods, TKey, TMethod>>\n use(\n kind: 'adapt',\n value: ErrorPluginAdaptFn<BuilderError0<TProps, TMethods>, PluginOutputProps<TProps>>,\n ): PluginError0<TProps, TMethods>\n use(kind: 'stack', value: ErrorPluginStack<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'cause', value: ErrorPluginCause<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(kind: 'message', value: ErrorPluginMessage<BuilderError0<TProps, TMethods>>): PluginError0<TProps, TMethods>\n use(\n kind: 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n keyOrValue: unknown,\n value?: ErrorPluginPropOptions<unknown, unknown, any> | ErrorPluginMethodFn<unknown, unknown[], any>,\n ): PluginError0<any, any> {\n const nextProps: ErrorPluginProps = { ...(this._plugin.props ?? {}) }\n const nextMethods: ErrorPluginMethods = { ...(this._plugin.methods ?? {}) }\n const nextAdapt: Array<ErrorPluginAdaptFn<Error0, Record<string, unknown>>> = [...(this._plugin.adapt ?? [])]\n let nextStack: ErrorPluginStack | undefined = this._plugin.stack\n let nextCause: ErrorPluginCause | undefined = this._plugin.cause\n let nextMessage: ErrorPluginMessage | undefined = this._plugin.message\n if (kind === 'prop') {\n const key = keyOrValue as string\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n if (value === undefined) {\n throw new Error('PluginError0.use(\"prop\", key, value) requires value')\n }\n nextProps[key] = value as ErrorPluginPropOptions<any, any>\n } else if (kind === 'method') {\n const key = keyOrValue as string\n if (value === undefined) {\n throw new Error('PluginError0.use(\"method\", key, value) requires value')\n }\n nextMethods[key] = value as ErrorPluginMethodFn<any, any[]>\n } else if (kind === 'adapt') {\n nextAdapt.push(keyOrValue as ErrorPluginAdaptFn<Error0, Record<string, unknown>>)\n } else if (kind === 'stack') {\n nextStack = keyOrValue as ErrorPluginStack\n } else if (kind === 'cause') {\n nextCause = keyOrValue as ErrorPluginCause\n } else {\n nextMessage = keyOrValue as ErrorPluginMessage\n }\n return new PluginError0({\n props: nextProps,\n methods: nextMethods,\n adapt: nextAdapt,\n stack: nextStack,\n cause: nextCause,\n message: nextMessage,\n })\n }\n}\n\nconst OWN_SYMBOL: unique symbol = Symbol('Error0.own')\ntype ErrorOwnStore = Record<string, unknown>\n\nexport type ClassError0<TPluginsMap extends ErrorPluginsMap = EmptyPluginsMap> = {\n MAX_CAUSES_DEPTH: number\n new (\n message: string,\n input?: ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n new (\n input: { message: string } & ErrorInput<TPluginsMap>,\n ): Error0 &\n ErrorResolved<TPluginsMap> &\n ErrorOwnMethods<TPluginsMap> &\n ErrorResolveMethods<TPluginsMap> & { readonly __pluginsMap?: TPluginsMap }\n readonly __pluginsMap?: TPluginsMap\n from: (\n error: unknown,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n round: (\n error: unknown,\n isPublic?: boolean,\n ) => Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>\n causes: {\n (error: unknown, instancesOnly?: false): unknown[]\n (\n error: unknown,\n instancesOnly: true,\n ): Array<Error0 & ErrorResolved<TPluginsMap> & ErrorOwnMethods<TPluginsMap> & ErrorResolveMethods<TPluginsMap>>\n }\n resolve: (error: unknown) => ErrorResolvedProps<TPluginsMap>\n serialize: (error: unknown, isPublic?: boolean) => Record<string, unknown>\n own: {\n (error: object): ErrorOwnProps<TPluginsMap>\n <TKey extends keyof TPluginsMap['props'] & string>(error: object, key: TKey): ErrorOwnProps<TPluginsMap>[TKey]\n }\n flow: <TKey extends keyof TPluginsMap['props'] & string>(\n error: object,\n key: TKey,\n ) => Array<ErrorOwnProps<TPluginsMap>[TKey]>\n // prop: <\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n // ) => ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n // method: <TKey extends string, TMethod extends (error: ErrorInstanceOfMap<TPluginsMap>, ...args: any[]) => any>(\n // key: TKey,\n // value: TMethod,\n // ) => ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TMethod>>\n // adapt: (\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n // ) => ClassError0<TPluginsMap>\n // stack: (value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n // cause: (value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>) => ClassError0<TPluginsMap>\n use: {\n <TBuilder extends PluginError0>(\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<TPluginsMap, PluginOfBuilder<TBuilder>>>\n <\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<TPluginsMap>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<TPluginsMap, TKey, TInputValue, TOutputValue, TResolveValue>>\n <TKey extends string, TMethod extends (error: ErrorInstanceOfMap<TPluginsMap>, ...args: any[]) => any>(\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<TPluginsMap, TKey, TMethod>>\n (\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<TPluginsMap>, ErrorResolvedProps<TPluginsMap>>,\n ): ClassError0<TPluginsMap>\n (kind: 'stack', value: ErrorPluginStack<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'cause', value: ErrorPluginCause<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n (kind: 'message', value: ErrorPluginMessage<ErrorInstanceOfMap<TPluginsMap>>): ClassError0<TPluginsMap>\n }\n plugin: () => PluginError0\n} & ErrorStaticMethods<TPluginsMap>\n\nexport class Error0 extends Error {\n static readonly __pluginsMap?: EmptyPluginsMap\n readonly __pluginsMap?: EmptyPluginsMap\n static MAX_CAUSES_DEPTH = 99\n protected static _plugins: ErrorPlugin[] = []\n protected static _resolvedPlugin?: ErrorPluginResolved\n\n private static readonly _emptyPlugin: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n stack: undefined,\n cause: undefined,\n message: undefined,\n propKeys: [],\n propEntries: [],\n methodEntries: [],\n }\n\n private static _indexResolvedPlugin(\n resolved: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'>,\n ): ErrorPluginResolved {\n return {\n ...resolved,\n propKeys: Object.keys(resolved.props),\n propEntries: Object.entries(resolved.props),\n methodEntries: Object.entries(resolved.methods),\n }\n }\n\n private static _applyPlugin(\n resolved: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'>,\n plugin: ErrorPlugin,\n ): void {\n if (plugin.props && 'stack' in plugin.props) {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (plugin.props && 'message' in plugin.props) {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n Object.assign(resolved.props, plugin.props ?? this._emptyPlugin.props)\n Object.assign(resolved.methods, plugin.methods ?? this._emptyPlugin.methods)\n resolved.adapt.push(...(plugin.adapt ?? this._emptyPlugin.adapt))\n if (typeof plugin.stack !== 'undefined') {\n resolved.stack = plugin.stack\n }\n if (typeof plugin.cause !== 'undefined') {\n resolved.cause = plugin.cause\n }\n if (typeof plugin.message !== 'undefined') {\n resolved.message = plugin.message\n }\n }\n\n private static _mergeResolvedPlugin(\n this: typeof Error0,\n base: ErrorPluginResolved,\n plugin: ErrorPlugin,\n ): ErrorPluginResolved {\n const merged: Omit<ErrorPluginResolved, 'propKeys' | 'propEntries' | 'methodEntries'> = {\n props: { ...base.props },\n methods: { ...base.methods },\n adapt: [...base.adapt],\n stack: base.stack,\n cause: base.cause,\n message: base.message,\n }\n this._applyPlugin(merged, plugin)\n return this._indexResolvedPlugin(merged)\n }\n\n private static _getResolvedPlugin(this: typeof Error0): ErrorPluginResolved {\n if (Object.prototype.hasOwnProperty.call(this, '_resolvedPlugin') && this._resolvedPlugin) {\n return this._resolvedPlugin\n }\n const resolved: ErrorPluginResolved = {\n props: {},\n methods: {},\n adapt: [],\n propKeys: [],\n propEntries: [],\n methodEntries: [],\n }\n for (const plugin of this._plugins) {\n this._applyPlugin(resolved, plugin)\n }\n const indexed = this._indexResolvedPlugin(resolved)\n Object.defineProperty(this, '_resolvedPlugin', {\n value: indexed,\n writable: true,\n enumerable: false,\n configurable: true,\n })\n return indexed\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 const ownStore = Object.create(null) as ErrorOwnStore\n Object.defineProperty(this, OWN_SYMBOL, { value: ownStore, writable: true, enumerable: false, configurable: true })\n\n for (const [key, prop] of plugin.propEntries) {\n if (key === 'stack') {\n continue\n }\n Object.defineProperty(this, key, {\n get: () =>\n prop.resolve({\n own: ownStore[key],\n flow: this.flow(key as never),\n error: this,\n }),\n set: (value) => {\n ownStore[key] = value\n },\n enumerable: true,\n configurable: true,\n })\n if (key in input) {\n const ownValue = (input as Record<string, unknown>)[key]\n ownStore[key] = typeof prop.init === 'function' ? prop.init(ownValue) : ownValue\n }\n }\n }\n\n private static _getOwnStore(object: object): ErrorOwnStore | undefined {\n const record = object as Record<string | symbol, unknown>\n const existing = record[OWN_SYMBOL]\n if (existing && typeof existing === 'object') {\n return existing as ErrorOwnStore\n }\n return undefined\n }\n\n private static readonly isOwnProperty = (object: object, key: string): boolean => {\n const ownStore = this._getOwnStore(object)\n if (ownStore) {\n return Object.prototype.hasOwnProperty.call(ownStore, key)\n }\n return !!Object.getOwnPropertyDescriptor(object, key)\n }\n private static _ownByKey(error: object, key: string): unknown {\n const ownStore = this._getOwnStore(error)\n if (ownStore) {\n return ownStore[key]\n }\n return (error as Record<string, unknown>)[key]\n }\n private static _flowByKey(error: object, key: string): unknown[] {\n const causes = this.causes(error, true)\n const values = new Array<unknown>(causes.length)\n for (let i = 0; i < causes.length; i += 1) {\n values[i] = this._ownByKey(causes[i], key)\n }\n return values\n }\n\n static own<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorOwnProps<PluginsMapOf<TThis>>\n static own<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOf<TThis>>[TKey]\n static own(error: unknown, key?: string): unknown {\n const error0 = this.from(error)\n if (key === undefined) {\n const ownValues: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const ownKey of plugin.propKeys) {\n ownValues[ownKey] = this._ownByKey(error0, ownKey)\n }\n return ownValues\n }\n return this._ownByKey(error0, key)\n }\n own<TThis extends Error0>(this: TThis): ErrorOwnProps<PluginsMapOfInstance<TThis>>\n own<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]\n own(key?: string): unknown {\n const ctor = this.constructor as typeof Error0\n if (key === undefined) {\n return ctor.own(this)\n }\n return ctor._ownByKey(this, key)\n }\n\n static flow<TThis extends typeof Error0, TKey extends keyof PluginsMapOf<TThis>['props'] & string>(\n this: TThis,\n error: unknown,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOf<TThis>>[TKey]>\n static flow(error: unknown, key: string): unknown[] {\n const error0 = this.from(error)\n return this._flowByKey(error0, key)\n }\n flow<TThis extends Error0, TKey extends keyof PluginsMapOfInstance<TThis>['props'] & string>(\n this: TThis,\n key: TKey,\n ): Array<ErrorOwnProps<PluginsMapOfInstance<TThis>>[TKey]>\n flow(key: string): unknown[] {\n const ctor = this.constructor as typeof Error0\n return ctor._flowByKey(this, key)\n }\n\n static _resolveByKey(error: Error0, key: string, plugin: ErrorPluginResolved): unknown {\n try {\n const options = {\n get own() {\n return error.own(key as never)\n },\n get flow() {\n return error.flow(key as never)\n },\n error,\n }\n const prop = plugin.props[key]\n const resolver = prop.resolve\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!resolver) {\n return (error as any)[key]\n }\n return resolver(options as ErrorPluginPropOptionsResolveOptions<any, any>)\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to resolve property ${key}`, error)\n return undefined\n }\n }\n\n static resolve<TThis extends typeof Error0>(this: TThis, error: unknown): ErrorResolvedProps<PluginsMapOf<TThis>>\n static resolve(error: unknown): Record<string, unknown>\n static resolve(error: unknown): Record<string, unknown> {\n const error0 = this.from(error)\n const resolved: Record<string, unknown> = {}\n const plugin = this._getResolvedPlugin()\n for (const key of plugin.propKeys) {\n resolved[key] = this._resolveByKey(error0, key, plugin)\n }\n return resolved\n }\n resolve<TThis extends Error0>(this: TThis): ErrorResolvedProps<PluginsMapOfInstance<TThis>>\n resolve(): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.resolve(this)\n }\n\n static causes(error: unknown, instancesOnly?: false): unknown[]\n static causes<T extends typeof Error0>(this: T, error: unknown, instancesOnly: true): Array<InstanceType<T>>\n static causes(error: unknown, instancesOnly?: boolean): unknown[] {\n const causes: unknown[] = []\n let current: unknown = error\n const seen = new Set<unknown>()\n let depth = 0\n while (depth < this.MAX_CAUSES_DEPTH) {\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 depth += 1\n }\n return causes\n }\n causes<TThis extends Error0>(this: TThis, instancesOnly?: false): [TThis, ...unknown[]]\n causes<TThis extends Error0>(this: TThis, instancesOnly: true): [TThis, ...TThis[]]\n causes(instancesOnly?: boolean): unknown[] {\n const ctor = this.constructor as typeof Error0\n if (instancesOnly) {\n return ctor.causes(this, true)\n }\n return ctor.causes(this)\n }\n\n static is<T extends typeof Error0>(this: T, error: unknown): error is InstanceType<T> {\n return error instanceof this\n }\n\n static isSerialized(error: unknown): error is Record<string, unknown> {\n return !this.is(error) && typeof error === 'object' && error !== null && 'name' in error && error.name === 'Error0'\n }\n\n static from(error: unknown): Error0 {\n if (this.is(error)) {\n return error\n }\n if (this.isSerialized(error)) {\n return this._fromSerialized(error)\n }\n return this._fromNonError0(error)\n }\n\n static round(error: unknown, isPublic = false): Error0 {\n return this.from(this.serialize(error, isPublic))\n }\n\n private static _applyAdapt(error: Error0): Error0 {\n const plugin = this._getResolvedPlugin()\n for (const adapt of plugin.adapt) {\n const adapted = adapt(error as any)\n if (adapted && typeof adapted === 'object') {\n Object.assign(error as unknown as Record<string, unknown>, adapted)\n }\n }\n return error\n }\n\n private static _fromSerialized(error: unknown): Error0 {\n const message = this._extractMessage(error)\n if (typeof error !== 'object' || error === null) {\n return this._applyAdapt(new this(message, { cause: error }))\n }\n const errorRecord = error as Record<string, unknown>\n const recreated = new this(message)\n const plugin = this._getResolvedPlugin()\n for (const [key, prop] of plugin.propEntries) {\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], record: errorRecord })\n ;(recreated as unknown as Record<string, unknown>)[key] = value\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to deserialize property ${key}`, errorRecord)\n }\n }\n if ('stack' in errorRecord && typeof errorRecord.stack === 'string') {\n recreated.stack = errorRecord.stack\n }\n const causePlugin = plugin.cause\n if (causePlugin && 'cause' in errorRecord) {\n try {\n ;(recreated as { cause?: unknown }).cause = causePlugin.deserialize({\n cause: errorRecord.cause,\n error: errorRecord,\n isSerialized: (serializedCause) => this.isSerialized(serializedCause),\n fromSerialized: (serializedCause) => this._fromSerialized(serializedCause),\n })\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to deserialize cause', errorRecord)\n }\n }\n return recreated\n }\n\n private static _fromNonError0(error: unknown): Error0 {\n const message = this._extractMessage(error)\n return this._applyAdapt(new this(message, { cause: error }))\n }\n\n private static _extractMessage(error: unknown): string {\n return (\n (typeof error === 'string'\n ? error\n : typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string'\n ? error.message\n : undefined) || 'Unknown error'\n )\n }\n\n private static _useWithPlugin(\n this: typeof Error0,\n plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>,\n ): ClassError0 {\n const Base = this as unknown as typeof Error0\n const Error0Extended = class Error0 extends Base {}\n ;(Error0Extended as typeof Error0)._plugins = [...Base._plugins, plugin]\n const resolved = this._mergeResolvedPlugin(Base._getResolvedPlugin(), plugin)\n ;(Error0Extended as typeof Error0)._resolvedPlugin = resolved\n for (const [key, method] of resolved.methodEntries) {\n Object.defineProperty((Error0Extended as typeof Error0).prototype, key, {\n value: function (...args: unknown[]) {\n return method(this as Error0, ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n Object.defineProperty(Error0Extended, key, {\n value: function (error: unknown, ...args: unknown[]) {\n return method(this.from(error), ...args)\n },\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n\n return Error0Extended as unknown as ClassError0\n }\n\n private static _pluginFromBuilder(plugin: PluginError0): ErrorPlugin<ErrorPluginProps, ErrorPluginMethods> {\n const pluginRecord = plugin as unknown as {\n _plugin: ErrorPlugin<ErrorPluginProps, ErrorPluginMethods>\n }\n return {\n props: { ...(pluginRecord._plugin.props ?? {}) },\n methods: { ...(pluginRecord._plugin.methods ?? {}) },\n adapt: [...(pluginRecord._plugin.adapt ?? [])],\n stack: pluginRecord._plugin.stack,\n cause: pluginRecord._plugin.cause,\n message: pluginRecord._plugin.message,\n }\n }\n\n // static prop<\n // TThis extends typeof Error0,\n // TKey extends string,\n // TInputValue = undefined,\n // TOutputValue = unknown,\n // TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n // >(\n // this: TThis,\n // key: TKey,\n // value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n // ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>> {\n // return this.use('prop', key, value)\n // }\n\n // static method<TThis extends typeof Error0, TKey extends string, TMethod extends (error: ErrorInstanceOfMap<PluginsMapOf<TThis>>, ...args: any[]) => any>(\n // this: TThis,\n // key: TKey,\n // value: TMethod,\n // ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TMethod>> {\n // return this.use('method', key, value)\n // }\n\n // static adapt<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('adapt', value)\n // }\n\n // static stack<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('stack', value)\n // }\n\n // static cause<TThis extends typeof Error0>(\n // this: TThis,\n // value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n // ): ClassError0<PluginsMapOf<TThis>> {\n // return this.use('cause', value)\n // }\n\n static use<TThis extends typeof Error0, TBuilder extends PluginError0>(\n this: TThis,\n plugin: TBuilder,\n ): ClassError0<ExtendErrorPluginsMap<PluginsMapOf<TThis>, PluginOfBuilder<TBuilder>>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TInputValue = undefined,\n TOutputValue = unknown,\n TResolveValue extends TOutputValue | undefined = TOutputValue | undefined,\n >(\n this: TThis,\n kind: 'prop',\n key: TKey,\n value: ErrorPluginPropOptions<TInputValue, TOutputValue, ErrorInstanceOfMap<PluginsMapOf<TThis>>, TResolveValue>,\n ): ClassError0<ExtendErrorPluginsMapWithProp<PluginsMapOf<TThis>, TKey, TInputValue, TOutputValue, TResolveValue>>\n static use<\n TThis extends typeof Error0,\n TKey extends string,\n TMethod extends (error: ErrorInstanceOfMap<PluginsMapOf<TThis>>, ...args: any[]) => any,\n >(\n this: TThis,\n kind: 'method',\n key: TKey,\n value: TMethod,\n ): ClassError0<ExtendErrorPluginsMapWithMethod<PluginsMapOf<TThis>, TKey, TMethod>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'adapt',\n value: ErrorPluginAdaptFn<ErrorInstanceOfMap<PluginsMapOf<TThis>>, ErrorResolvedProps<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'stack',\n value: ErrorPluginStack<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'cause',\n value: ErrorPluginCause<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use<TThis extends typeof Error0>(\n this: TThis,\n kind: 'message',\n value: ErrorPluginMessage<ErrorInstanceOfMap<PluginsMapOf<TThis>>>,\n ): ClassError0<PluginsMapOf<TThis>>\n static use(\n this: typeof Error0,\n first: PluginError0 | 'prop' | 'method' | 'adapt' | 'stack' | 'cause' | 'message',\n key?: unknown,\n value?: ErrorPluginPropOptions<unknown> | ErrorPluginMethodFn<unknown>,\n ): ClassError0 {\n if (first instanceof PluginError0) {\n return this._useWithPlugin(this._pluginFromBuilder(first))\n }\n if (first === 'stack') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"stack\", value) requires stack plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"stack\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n stack: key as ErrorPluginStack,\n })\n }\n if (first === 'cause') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"cause\", value) requires cause plugin value')\n }\n if (\n typeof key !== 'object' ||\n key === null ||\n typeof (key as { serialize?: unknown }).serialize !== 'function' ||\n typeof (key as { deserialize?: unknown }).deserialize !== 'function'\n ) {\n throw new Error('Error0.use(\"cause\", value) expects { serialize: function, deserialize: function }')\n }\n return this._useWithPlugin({\n cause: key as ErrorPluginCause,\n })\n }\n if (first === 'message') {\n if (typeof key === 'undefined') {\n throw new Error('Error0.use(\"message\", value) requires message plugin value')\n }\n if (typeof key !== 'object' || key === null || typeof (key as { serialize?: unknown }).serialize !== 'function') {\n throw new Error('Error0.use(\"message\", value) expects { serialize: function }')\n }\n return this._useWithPlugin({\n message: key as ErrorPluginMessage,\n })\n }\n if (first === 'adapt') {\n if (typeof key !== 'function') {\n throw new Error('Error0.use(\"adapt\", value) requires adapt function')\n }\n return this._useWithPlugin({\n adapt: [key as ErrorPluginAdaptFn<Error0, Record<string, unknown>>],\n })\n }\n if (typeof key !== 'string' || value === undefined) {\n throw new Error('Error0.use(kind, key, value) requires key and value')\n }\n\n if (first === 'prop') {\n if (key === 'stack') {\n throw new Error(RESERVED_STACK_PROP_ERROR)\n }\n if (key === 'message') {\n throw new Error(RESERVED_MESSAGE_PROP_ERROR)\n }\n return this._useWithPlugin({\n props: { [key]: value as ErrorPluginPropOptions<unknown> },\n })\n }\n return this._useWithPlugin({\n methods: { [key]: value as ErrorPluginMethodFn<unknown> },\n })\n }\n\n static plugin(): PluginError0 {\n return new PluginError0()\n }\n\n static serialize(error: unknown, isPublic = true): Record<string, unknown> {\n const error0 = this.from(error)\n const plugin = this._getResolvedPlugin()\n const resolveByKey = (targetError: Error0, key: string, targetPlugin: ErrorPluginResolved): unknown =>\n this._resolveByKey(targetError, key, targetPlugin)\n const messagePlugin = plugin.message\n let serializedMessage: unknown = error0.message\n try {\n if (messagePlugin) {\n serializedMessage = messagePlugin.serialize({ value: error0.message, error: error0, isPublic })\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize message', error0)\n serializedMessage = error0.message\n }\n const json: Record<string, unknown> = {\n name: error0.name,\n }\n if (serializedMessage !== undefined) {\n json.message = serializedMessage\n }\n\n for (const [key, prop] of plugin.propEntries) {\n if (prop.serialize === false) {\n continue\n }\n try {\n const options = {\n get own() {\n return error0.own(key as never)\n },\n get flow() {\n return error0.flow(key as never)\n },\n get resolved() {\n return resolveByKey(error0, key, plugin)\n },\n error: error0,\n isPublic,\n }\n const jsonValue = prop.serialize(options as ErrorPluginPropSerializeOptions<any, any, any>)\n if (jsonValue !== undefined) {\n json[key] = jsonValue\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Error0: failed to serialize property ${key}`, error0)\n }\n }\n const stackPlugin = plugin.stack\n try {\n let serializedStack: unknown\n if (stackPlugin) {\n serializedStack = stackPlugin.serialize({ value: error0.stack, error: error0, isPublic })\n } else {\n serializedStack = isPublic ? undefined : error0.stack\n }\n if (serializedStack !== undefined) {\n json.stack = serializedStack\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize stack', error0)\n }\n const causePlugin = plugin.cause\n if (causePlugin?.serialize) {\n try {\n const serializedCause = causePlugin.serialize({\n cause: (error0 as { cause?: unknown }).cause,\n error: error0,\n isPublic,\n is: (cause) => this.is(cause),\n serialize: (cause) => this.serialize(cause, isPublic),\n })\n if (serializedCause !== undefined) {\n json.cause = serializedCause\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error('Error0: failed to serialize cause', error0)\n }\n }\n return json\n }\n\n serialize(isPublic = true): Record<string, unknown> {\n const ctor = this.constructor as typeof Error0\n return ctor.serialize(this, isPublic)\n }\n\n round<TThis extends Error0>(this: TThis, isPublic = true): TThis {\n const ctor = this.constructor as typeof Error0\n return ctor.round(this, isPublic) as TThis\n }\n}\n"],"mappings":"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","names":[]}
@@ -4,9 +4,35 @@ declare const tagsPlugin: <TTag extends string>({ isPublic, tags, strict, }?: {
4
4
  isPublic?: boolean;
5
5
  tags?: TTag[] | readonly TTag[];
6
6
  strict?: boolean;
7
- }) => PluginError0<Record<never, never> & Record<"tags", ErrorPluginPropOptions<string[], string[], Error0, string[] | undefined>>, Record<never, never> & Record<"hasTag", {
8
- (error: Error0, tag: TTag): boolean;
9
- (error: Error0, tag: TTag[], policy: "every" | "some"): boolean;
10
- }>>;
7
+ }) => PluginError0<Record<never, never> & Record<"tags", ErrorPluginPropOptions<string[], string[], Error0, string[] | undefined>>, Record<never, never> & Record<"hasTag", (error: Error0 & {
8
+ tags: string[] | undefined;
9
+ } & {} & {
10
+ own: {
11
+ (): {
12
+ tags: string[] | undefined;
13
+ };
14
+ <TKey extends "tags">(key: TKey): {
15
+ tags: string[] | undefined;
16
+ }[TKey];
17
+ };
18
+ flow: <TKey extends "tags">(key: TKey) => {
19
+ tags: string[] | undefined;
20
+ }[TKey][];
21
+ } & {
22
+ resolve: () => {
23
+ tags: string[] | undefined;
24
+ };
25
+ } & {
26
+ readonly __pluginsMap?: {
27
+ props: {
28
+ tags: {
29
+ init: string[] | undefined;
30
+ output: string[];
31
+ resolve: string[] | undefined;
32
+ };
33
+ };
34
+ methods: {};
35
+ } | undefined;
36
+ }, tag: TTag | TTag[], policy?: "every" | "some") => boolean>>;
11
37
 
12
38
  export { tagsPlugin };
@@ -4,19 +4,6 @@ const tagsPlugin = ({
4
4
  tags,
5
5
  strict = true
6
6
  } = {}) => {
7
- function hasTag(error, tag, policy) {
8
- const tags2 = error.tags;
9
- if (!tags2) {
10
- return false;
11
- }
12
- if (Array.isArray(tag)) {
13
- if (policy === "every") {
14
- return tag.every((item) => tags2.includes(item));
15
- }
16
- return tag.some((item) => tags2.includes(item));
17
- }
18
- return tags2.includes(tag);
19
- }
20
7
  const isTag = (value) => typeof value === "string" && (!tags || !strict || tags.includes(value));
21
8
  return Error0.plugin().prop("tags", {
22
9
  init: (input) => input,
@@ -41,7 +28,19 @@ const tagsPlugin = ({
41
28
  }
42
29
  return value.filter((item) => isTag(item));
43
30
  }
44
- }).method("hasTag", hasTag);
31
+ }).method("hasTag", (error, tag, policy = "every") => {
32
+ const tags2 = error.tags;
33
+ if (!tags2) {
34
+ return false;
35
+ }
36
+ if (Array.isArray(tag)) {
37
+ if (policy === "every") {
38
+ return tag.every((item) => tags2.includes(item));
39
+ }
40
+ return tag.some((item) => tags2.includes(item));
41
+ }
42
+ return tags2.includes(tag);
43
+ });
45
44
  };
46
45
  export {
47
46
  tagsPlugin
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/tags.ts"],"sourcesContent":["import { Error0 } from '../index.js'\n\nexport const tagsPlugin = <TTag extends string>({\n isPublic = false,\n tags,\n strict = true,\n}: { isPublic?: boolean; tags?: TTag[] | readonly TTag[]; strict?: boolean } = {}) => {\n function hasTag(error: Error0, tag: TTag): boolean\n function hasTag(error: Error0, tag: TTag[], policy: 'every' | 'some'): boolean\n function hasTag(error: Error0, tag: TTag | TTag[], policy?: 'every' | 'some'): boolean {\n const tags = (error as any).tags as string[] | undefined\n if (!tags) {\n return false\n }\n if (Array.isArray(tag)) {\n if (policy === 'every') {\n return tag.every((item) => tags.includes(item))\n }\n return tag.some((item) => tags.includes(item))\n }\n return tags.includes(tag)\n }\n const isTag = (value: unknown): value is TTag =>\n typeof value === 'string' && (!tags || !strict || tags.includes(value as TTag))\n return Error0.plugin()\n .prop('tags', {\n init: (input: string[]) => input,\n resolve: ({ flow }) => {\n const merged: string[] = []\n for (const value of flow) {\n if (Array.isArray(value)) {\n merged.push(...value)\n }\n }\n return merged.length > 0 ? Array.from(new Set(merged)) : undefined\n },\n serialize: ({ resolved, isPublic: _isPublic }) => {\n if (!isPublic && _isPublic) {\n return undefined\n }\n return resolved\n },\n deserialize: ({ value }) => {\n if (!Array.isArray(value)) {\n return undefined\n }\n return value.filter((item) => isTag(item))\n },\n })\n .method('hasTag', hasTag)\n}\n"],"mappings":"AAAA,SAAS,cAAc;AAEhB,MAAM,aAAa,CAAsB;AAAA,EAC9C,WAAW;AAAA,EACX;AAAA,EACA,SAAS;AACX,IAA+E,CAAC,MAAM;AAGpF,WAAS,OAAO,OAAe,KAAoB,QAAoC;AACrF,UAAMA,QAAQ,MAAc;AAC5B,QAAI,CAACA,OAAM;AACT,aAAO;AAAA,IACT;AACA,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,UAAI,WAAW,SAAS;AACtB,eAAO,IAAI,MAAM,CAAC,SAASA,MAAK,SAAS,IAAI,CAAC;AAAA,MAChD;AACA,aAAO,IAAI,KAAK,CAAC,SAASA,MAAK,SAAS,IAAI,CAAC;AAAA,IAC/C;AACA,WAAOA,MAAK,SAAS,GAAG;AAAA,EAC1B;AACA,QAAM,QAAQ,CAAC,UACb,OAAO,UAAU,aAAa,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,KAAa;AAC/E,SAAO,OAAO,OAAO,EAClB,KAAK,QAAQ;AAAA,IACZ,MAAM,CAAC,UAAoB;AAAA,IAC3B,SAAS,CAAC,EAAE,KAAK,MAAM;AACrB,YAAM,SAAmB,CAAC;AAC1B,iBAAW,SAAS,MAAM;AACxB,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAO,KAAK,GAAG,KAAK;AAAA,QACtB;AAAA,MACF;AACA,aAAO,OAAO,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IAC3D;AAAA,IACA,WAAW,CAAC,EAAE,UAAU,UAAU,UAAU,MAAM;AAChD,UAAI,CAAC,YAAY,WAAW;AAC1B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,aAAa,CAAC,EAAE,MAAM,MAAM;AAC1B,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,eAAO;AAAA,MACT;AACA,aAAO,MAAM,OAAO,CAAC,SAAS,MAAM,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF,CAAC,EACA,OAAO,UAAU,MAAM;AAC5B;","names":["tags"]}
1
+ {"version":3,"sources":["../../../src/plugins/tags.ts"],"sourcesContent":["import { Error0 } from '../index.js'\n\nexport const tagsPlugin = <TTag extends string>({\n isPublic = false,\n tags,\n strict = true,\n}: { isPublic?: boolean; tags?: TTag[] | readonly TTag[]; strict?: boolean } = {}) => {\n // function hasTag(error: Error0, tag: TTag): boolean\n // function hasTag(error: Error0, tag: TTag[], policy: 'every' | 'some'): boolean\n // function hasTag(error: Error0, tag: TTag | TTag[], policy?: 'every' | 'some'): boolean {\n // const tags = (error as any).tags as string[] | undefined\n // if (!tags) {\n // return false\n // }\n // if (Array.isArray(tag)) {\n // if (policy === 'every') {\n // return tag.every((item) => tags.includes(item))\n // }\n // return tag.some((item) => tags.includes(item))\n // }\n // return tags.includes(tag)\n // }\n const isTag = (value: unknown): value is TTag =>\n typeof value === 'string' && (!tags || !strict || tags.includes(value as TTag))\n return Error0.plugin()\n .prop('tags', {\n init: (input: string[]) => input,\n resolve: ({ flow }) => {\n const merged: string[] = []\n for (const value of flow) {\n if (Array.isArray(value)) {\n merged.push(...value)\n }\n }\n return merged.length > 0 ? Array.from(new Set(merged)) : undefined\n },\n serialize: ({ resolved, isPublic: _isPublic }) => {\n if (!isPublic && _isPublic) {\n return undefined\n }\n return resolved\n },\n deserialize: ({ value }) => {\n if (!Array.isArray(value)) {\n return undefined\n }\n return value.filter((item) => isTag(item))\n },\n })\n .method('hasTag', (error, tag: TTag | TTag[], policy: 'every' | 'some' = 'every'): boolean => {\n const tags = error.tags\n if (!tags) {\n return false\n }\n if (Array.isArray(tag)) {\n if (policy === 'every') {\n return tag.every((item) => tags.includes(item))\n }\n return tag.some((item) => tags.includes(item))\n }\n return tags.includes(tag)\n })\n}\n"],"mappings":"AAAA,SAAS,cAAc;AAEhB,MAAM,aAAa,CAAsB;AAAA,EAC9C,WAAW;AAAA,EACX;AAAA,EACA,SAAS;AACX,IAA+E,CAAC,MAAM;AAgBpF,QAAM,QAAQ,CAAC,UACb,OAAO,UAAU,aAAa,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,KAAa;AAC/E,SAAO,OAAO,OAAO,EAClB,KAAK,QAAQ;AAAA,IACZ,MAAM,CAAC,UAAoB;AAAA,IAC3B,SAAS,CAAC,EAAE,KAAK,MAAM;AACrB,YAAM,SAAmB,CAAC;AAC1B,iBAAW,SAAS,MAAM;AACxB,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAO,KAAK,GAAG,KAAK;AAAA,QACtB;AAAA,MACF;AACA,aAAO,OAAO,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IAC3D;AAAA,IACA,WAAW,CAAC,EAAE,UAAU,UAAU,UAAU,MAAM;AAChD,UAAI,CAAC,YAAY,WAAW;AAC1B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,aAAa,CAAC,EAAE,MAAM,MAAM;AAC1B,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,eAAO;AAAA,MACT;AACA,aAAO,MAAM,OAAO,CAAC,SAAS,MAAM,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF,CAAC,EACA,OAAO,UAAU,CAAC,OAAO,KAAoB,SAA2B,YAAqB;AAC5F,UAAMA,QAAO,MAAM;AACnB,QAAI,CAACA,OAAM;AACT,aAAO;AAAA,IACT;AACA,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,UAAI,WAAW,SAAS;AACtB,eAAO,IAAI,MAAM,CAAC,SAASA,MAAK,SAAS,IAAI,CAAC;AAAA,MAChD;AACA,aAAO,IAAI,KAAK,CAAC,SAASA,MAAK,SAAS,IAAI,CAAC;AAAA,IAC/C;AACA,WAAOA,MAAK,SAAS,GAAG;AAAA,EAC1B,CAAC;AACL;","names":["tags"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devp0nt/error0",
3
- "version": "1.0.0-next.52",
3
+ "version": "1.0.0-next.53",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "Sergei Dmitriev",
package/src/index.ts CHANGED
@@ -168,72 +168,78 @@ type ErrorOwnMethods<TPluginsMap extends ErrorPluginsMap> = {
168
168
  type ErrorResolveMethods<TPluginsMap extends ErrorPluginsMap> = {
169
169
  resolve: () => ErrorResolvedProps<TPluginsMap>
170
170
  }
171
- type BindInstanceMethod<TMethod> = TMethod extends {
172
- (error: any, ...args: infer TArgs1): infer TOutput1
173
- (error: any, ...args: infer TArgs2): infer TOutput2
174
- (error: any, ...args: infer TArgs3): infer TOutput3
175
- (error: any, ...args: infer TArgs4): infer TOutput4
176
- }
177
- ? {
178
- (...args: TArgs1): TOutput1
179
- (...args: TArgs2): TOutput2
180
- (...args: TArgs3): TOutput3
181
- (...args: TArgs4): TOutput4
182
- }
183
- : TMethod extends {
184
- (error: any, ...args: infer TArgs1): infer TOutput1
185
- (error: any, ...args: infer TArgs2): infer TOutput2
186
- (error: any, ...args: infer TArgs3): infer TOutput3
187
- }
188
- ? {
189
- (...args: TArgs1): TOutput1
190
- (...args: TArgs2): TOutput2
191
- (...args: TArgs3): TOutput3
192
- }
193
- : TMethod extends {
194
- (error: any, ...args: infer TArgs1): infer TOutput1
195
- (error: any, ...args: infer TArgs2): infer TOutput2
196
- }
197
- ? {
198
- (...args: TArgs1): TOutput1
199
- (...args: TArgs2): TOutput2
200
- }
201
- : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput
202
- ? (...args: TArgs) => TOutput
203
- : never
204
- type BindStaticMethod<TMethod> = TMethod extends {
205
- (error: any, ...args: infer TArgs1): infer TOutput1
206
- (error: any, ...args: infer TArgs2): infer TOutput2
207
- (error: any, ...args: infer TArgs3): infer TOutput3
208
- (error: any, ...args: infer TArgs4): infer TOutput4
209
- }
210
- ? {
211
- (error: unknown, ...args: TArgs1): TOutput1
212
- (error: unknown, ...args: TArgs2): TOutput2
213
- (error: unknown, ...args: TArgs3): TOutput3
214
- (error: unknown, ...args: TArgs4): TOutput4
215
- }
216
- : TMethod extends {
217
- (error: any, ...args: infer TArgs1): infer TOutput1
218
- (error: any, ...args: infer TArgs2): infer TOutput2
219
- (error: any, ...args: infer TArgs3): infer TOutput3
220
- }
221
- ? {
222
- (error: unknown, ...args: TArgs1): TOutput1
223
- (error: unknown, ...args: TArgs2): TOutput2
224
- (error: unknown, ...args: TArgs3): TOutput3
225
- }
226
- : TMethod extends {
227
- (error: any, ...args: infer TArgs1): infer TOutput1
228
- (error: any, ...args: infer TArgs2): infer TOutput2
229
- }
230
- ? {
231
- (error: unknown, ...args: TArgs1): TOutput1
232
- (error: unknown, ...args: TArgs2): TOutput2
233
- }
234
- : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput
235
- ? (error: unknown, ...args: TArgs) => TOutput
236
- : never
171
+ // type BindInstanceMethod<TMethod> = TMethod extends {
172
+ // (error: any, ...args: infer TArgs1): infer TOutput1
173
+ // (error: any, ...args: infer TArgs2): infer TOutput2
174
+ // (error: any, ...args: infer TArgs3): infer TOutput3
175
+ // (error: any, ...args: infer TArgs4): infer TOutput4
176
+ // }
177
+ // ? {
178
+ // (...args: TArgs1): TOutput1
179
+ // (...args: TArgs2): TOutput2
180
+ // (...args: TArgs3): TOutput3
181
+ // (...args: TArgs4): TOutput4
182
+ // }
183
+ // : TMethod extends {
184
+ // (error: any, ...args: infer TArgs1): infer TOutput1
185
+ // (error: any, ...args: infer TArgs2): infer TOutput2
186
+ // (error: any, ...args: infer TArgs3): infer TOutput3
187
+ // }
188
+ // ? {
189
+ // (...args: TArgs1): TOutput1
190
+ // (...args: TArgs2): TOutput2
191
+ // (...args: TArgs3): TOutput3
192
+ // }
193
+ // : TMethod extends {
194
+ // (error: any, ...args: infer TArgs1): infer TOutput1
195
+ // (error: any, ...args: infer TArgs2): infer TOutput2
196
+ // }
197
+ // ? {
198
+ // (...args: TArgs1): TOutput1
199
+ // (...args: TArgs2): TOutput2
200
+ // }
201
+ // : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput
202
+ // ? (...args: TArgs) => TOutput
203
+ // : never
204
+ // type BindStaticMethod<TMethod> = TMethod extends {
205
+ // (error: any, ...args: infer TArgs1): infer TOutput1
206
+ // (error: any, ...args: infer TArgs2): infer TOutput2
207
+ // (error: any, ...args: infer TArgs3): infer TOutput3
208
+ // (error: any, ...args: infer TArgs4): infer TOutput4
209
+ // }
210
+ // ? {
211
+ // (error: unknown, ...args: TArgs1): TOutput1
212
+ // (error: unknown, ...args: TArgs2): TOutput2
213
+ // (error: unknown, ...args: TArgs3): TOutput3
214
+ // (error: unknown, ...args: TArgs4): TOutput4
215
+ // }
216
+ // : TMethod extends {
217
+ // (error: any, ...args: infer TArgs1): infer TOutput1
218
+ // (error: any, ...args: infer TArgs2): infer TOutput2
219
+ // (error: any, ...args: infer TArgs3): infer TOutput3
220
+ // }
221
+ // ? {
222
+ // (error: unknown, ...args: TArgs1): TOutput1
223
+ // (error: unknown, ...args: TArgs2): TOutput2
224
+ // (error: unknown, ...args: TArgs3): TOutput3
225
+ // }
226
+ // : TMethod extends {
227
+ // (error: any, ...args: infer TArgs1): infer TOutput1
228
+ // (error: any, ...args: infer TArgs2): infer TOutput2
229
+ // }
230
+ // ? {
231
+ // (error: unknown, ...args: TArgs1): TOutput1
232
+ // (error: unknown, ...args: TArgs2): TOutput2
233
+ // }
234
+ // : TMethod extends (error: any, ...args: infer TArgs) => infer TOutput
235
+ // ? (error: unknown, ...args: TArgs) => TOutput
236
+ // : never
237
+ type BindInstanceMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput
238
+ ? (...args: TArgs) => TOutput
239
+ : never
240
+ type BindStaticMethod<TMethod> = TMethod extends (error: any, ...args: infer TArgs) => infer TOutput
241
+ ? (error: unknown, ...args: TArgs) => TOutput
242
+ : never
237
243
  type ErrorMethods<TPluginsMap extends ErrorPluginsMap> = {
238
244
  [TKey in keyof TPluginsMap['methods']]: BindInstanceMethod<TPluginsMap['methods'][TKey]['fn']>
239
245
  }
@@ -66,8 +66,6 @@ describe('tagsPlugin', () => {
66
66
 
67
67
  // @ts-expect-error - unknown tag is not part of allow-list
68
68
  error.hasTag('custom')
69
- // @ts-expect-error - array checks require policy argument
70
- error.hasTag(['api', 'db'])
71
69
  // @ts-expect-error - unsupported policy
72
70
  error.hasTag(['api', 'db'], 'all')
73
71
  })
@@ -5,21 +5,21 @@ export const tagsPlugin = <TTag extends string>({
5
5
  tags,
6
6
  strict = true,
7
7
  }: { isPublic?: boolean; tags?: TTag[] | readonly TTag[]; strict?: boolean } = {}) => {
8
- function hasTag(error: Error0, tag: TTag): boolean
9
- function hasTag(error: Error0, tag: TTag[], policy: 'every' | 'some'): boolean
10
- function hasTag(error: Error0, tag: TTag | TTag[], policy?: 'every' | 'some'): boolean {
11
- const tags = (error as any).tags as string[] | undefined
12
- if (!tags) {
13
- return false
14
- }
15
- if (Array.isArray(tag)) {
16
- if (policy === 'every') {
17
- return tag.every((item) => tags.includes(item))
18
- }
19
- return tag.some((item) => tags.includes(item))
20
- }
21
- return tags.includes(tag)
22
- }
8
+ // function hasTag(error: Error0, tag: TTag): boolean
9
+ // function hasTag(error: Error0, tag: TTag[], policy: 'every' | 'some'): boolean
10
+ // function hasTag(error: Error0, tag: TTag | TTag[], policy?: 'every' | 'some'): boolean {
11
+ // const tags = (error as any).tags as string[] | undefined
12
+ // if (!tags) {
13
+ // return false
14
+ // }
15
+ // if (Array.isArray(tag)) {
16
+ // if (policy === 'every') {
17
+ // return tag.every((item) => tags.includes(item))
18
+ // }
19
+ // return tag.some((item) => tags.includes(item))
20
+ // }
21
+ // return tags.includes(tag)
22
+ // }
23
23
  const isTag = (value: unknown): value is TTag =>
24
24
  typeof value === 'string' && (!tags || !strict || tags.includes(value as TTag))
25
25
  return Error0.plugin()
@@ -47,5 +47,17 @@ export const tagsPlugin = <TTag extends string>({
47
47
  return value.filter((item) => isTag(item))
48
48
  },
49
49
  })
50
- .method('hasTag', hasTag)
50
+ .method('hasTag', (error, tag: TTag | TTag[], policy: 'every' | 'some' = 'every'): boolean => {
51
+ const tags = error.tags
52
+ if (!tags) {
53
+ return false
54
+ }
55
+ if (Array.isArray(tag)) {
56
+ if (policy === 'every') {
57
+ return tag.every((item) => tags.includes(item))
58
+ }
59
+ return tag.some((item) => tags.includes(item))
60
+ }
61
+ return tags.includes(tag)
62
+ })
51
63
  }