{"version":3,"file":"index.cjs","sources":["../src/isErrorOfKind.ts","../src/errorClass.ts","../src/errorClassWithData.ts"],"sourcesContent":["export type IsErrorOfKindFn<Err> = (value: unknown) => value is Err;\r\n\r\n/**\r\n * Creates a predicate function returning true if the passed value is an instance of the\r\n * specified class.\r\n * @param ErrorClass\r\n * @param type\r\n */\r\nexport function isErrorOfKind<Err extends { type: symbol }>(\r\n  ErrorClass: { new(...args: any[]): Err },\r\n  type: symbol,\r\n): IsErrorOfKindFn<Err> {\r\n  return (value): value is Err => {\r\n    return value instanceof ErrorClass && value.type === type;\r\n  };\r\n}","import { isErrorOfKind, type IsErrorOfKindFn } from './isErrorOfKind.js';\r\n\r\nexport type ToSuperFn<ConstructorArgs extends any[]> =\r\n  (...args: ConstructorArgs) => Parameters<ErrorConstructor>;\r\n\r\nexport type ToSuperType<ConstructorArgs extends any[]> =\r\n  | ToSuperFn<ConstructorArgs>\r\n  | string\r\n  | Parameters<ErrorConstructor>;\r\n\r\nexport interface CustomErrorWithoutData extends Error {\r\n  type: symbol;\r\n}\r\n\r\nexport interface ErrorClass<ConstructorArgs extends any[]> {\r\n  name: string;\r\n  new(...args: ConstructorArgs): CustomErrorWithoutData;\r\n}\r\n\r\n/**\r\n * @return A new error class with a predefined name.\r\n * @param name - error class name\r\n * @param toSuper - a function converting passed arguments to a list of arguments passed to\r\n * the `Error` constructor. It can also be a message or a list of arguments passed to the\r\n * super constructor.\r\n */\r\nexport function errorClass<ConstructorArgs extends any[] = []>(\r\n  name: string,\r\n  toSuper?: ToSuperType<ConstructorArgs>,\r\n): [\r\n  ErrorClass: ErrorClass<ConstructorArgs>,\r\n  isInstanceOfErrorClass: IsErrorOfKindFn<CustomErrorWithoutData>,\r\n] {\r\n  toSuper ||= [];\r\n  const type = Symbol(name);\r\n\r\n  class CustomError extends Error implements CustomErrorWithoutData {\r\n    type = type;\r\n\r\n    constructor(...args: ConstructorArgs) {\r\n      const params = typeof toSuper === 'function'\r\n        ? toSuper(...args)\r\n        : typeof toSuper === 'string'\r\n          ? [toSuper] as [string]\r\n          : toSuper || [];\r\n      super(...params);\r\n      this.name = name;\r\n    }\r\n  }\r\n\r\n  Object.defineProperty(CustomError, 'name', { value: name });\r\n\r\n  return [CustomError, isErrorOfKind(CustomError, type)];\r\n}\r\n","import { errorClass, type ToSuperType } from './errorClass.js';\r\nimport { isErrorOfKind, type IsErrorOfKindFn } from './isErrorOfKind.js';\r\n\r\nexport type ToDataFn<ConstructorArgs extends any[], Data> = (...args: ConstructorArgs) => Data;\r\n\r\nexport interface CustomErrorWithData<Data> extends Error {\r\n  type: symbol;\r\n  data: Data;\r\n}\r\n\r\nexport interface ErrorClassWithData<Data, ConstructorArgs extends any[]> {\r\n  name: string;\r\n  new(...args: ConstructorArgs): CustomErrorWithData<Data>;\r\n}\r\n\r\n/**\r\n * @returns A new error class with a predefined name and data type.\r\n * @param name - error name\r\n * @param toData - function converting constructor arguments to data\r\n * @param toSuper - a function converting passed arguments to a list of arguments passed to\r\n * the `Error` constructor. It can also be a message or a list of arguments passed to the\r\n * super constructor.\r\n */\r\nexport function errorClassWithData<Data, ConstructorArgs extends any[] = []>(\r\n  name: string,\r\n  toData: ToDataFn<ConstructorArgs, Data>,\r\n  toSuper?: ToSuperType<ConstructorArgs>,\r\n): [\r\n  ErrorClass: ErrorClassWithData<Data, ConstructorArgs>,\r\n  isInstanceOfErrorClass: IsErrorOfKindFn<CustomErrorWithData<Data>>,\r\n] {\r\n  const type = Symbol(name);\r\n\r\n  class CustomError extends errorClass(name, toSuper)[0] {\r\n    data: Data;\r\n    type = type;\r\n\r\n    constructor(...args: ConstructorArgs) {\r\n      super(...args);\r\n      this.data = toData(...args);\r\n    }\r\n  }\r\n\r\n  Object.defineProperty(CustomError, 'name', { value: name });\r\n\r\n  return [CustomError, isErrorOfKind(CustomError, type)];\r\n}\r\n"],"names":["isErrorOfKind","ErrorClass","type","value","errorClass","name","toSuper","CustomError","args","params","__publicField","errorClassWithData","toData"],"mappings":"oPAQgB,SAAAA,EACdC,EACAC,EACsB,CACtB,OAAQC,GACCA,aAAiBF,GAAcE,EAAM,OAASD,CAEzD,CCWgB,SAAAE,EACdC,EACAC,EAIA,CACAA,MAAY,CAAA,GACN,MAAAJ,EAAO,OAAOG,CAAI,EAExB,MAAME,UAAoB,KAAwC,CAGhE,eAAeC,EAAuB,CACpC,MAAMC,EAAS,OAAOH,GAAY,WAC9BA,EAAQ,GAAGE,CAAI,EACf,OAAOF,GAAY,SACjB,CAACA,CAAO,EACRA,GAAW,CAAA,EACjB,MAAM,GAAGG,CAAM,EARjBC,EAAA,YAAOR,GASL,KAAK,KAAOG,CACd,CACF,CAEA,cAAO,eAAeE,EAAa,OAAQ,CAAE,MAAOF,EAAM,EAEnD,CAACE,EAAaP,EAAcO,EAAaL,CAAI,CAAC,CACvD,CC9BgB,SAAAS,EACdN,EACAO,EACAN,EAIA,CACM,MAAAJ,EAAO,OAAOG,CAAI,EAExB,MAAME,UAAoBH,EAAWC,EAAMC,CAAO,EAAE,CAAC,CAAE,CAIrD,eAAeE,EAAuB,CACpC,MAAM,GAAGA,CAAI,EAJfE,EAAA,aACAA,EAAA,YAAOR,GAIA,KAAA,KAAOU,EAAO,GAAGJ,CAAI,CAC5B,CACF,CAEA,cAAO,eAAeD,EAAa,OAAQ,CAAE,MAAOF,EAAM,EAEnD,CAACE,EAAaP,EAAcO,EAAaL,CAAI,CAAC,CACvD"}