{"version":3,"sources":["../../src/serializer/error/SerializerError.ts","../../src/serializer/typeguard/isBaseHttpException.ts","../../src/serializer/typeguard/isNativeError.ts","../../src/serializer/mapper/convertToSerializable.ts","../../src/serializer/mapper/createFromSerializable.ts","../../src/serializer/json/fromJson.ts","../../src/serializer/json/toJson.ts"],"names":["SerializerError","_SerializerError","message","params","cause","supportsErrorCause","baseExceptionMap","HttpClientException","HttpException","HttpServerException","isBaseHttpException","name","nativeErrorMap","nativeErrors","isNativeError","error","e","convertToSerializable","includeStack","c","stack","common","isHttpException","HttpUnprocessableEntity","createCustomError","serializable","cls","createFromSerializable","createHttpExceptionError","statusCode","code","errorId","method","url","issues","exceptionParams","createHttpException","payload","fromJson","json","v","toJson","exception"],"mappings":"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","file":"index.cjs","sourcesContent":["import { supportsErrorCause } from '../../support/supportsErrorCause';\n\nexport class SerializerError extends Error {\n  constructor(\n    message: string,\n    params?: {\n      cause?: Error | undefined;\n    }\n  ) {\n    const { cause } = params ?? {};\n    super(message);\n    if (supportsErrorCause() && cause instanceof Error) {\n      this.cause = cause;\n    }\n    Object.setPrototypeOf(this, SerializerError.prototype);\n    this.name = 'SerializerError';\n  }\n}\n","import { HttpClientException } from '../../base/HttpClientException';\nimport { HttpException } from '../../base/HttpException';\nimport { HttpServerException } from '../../base/HttpServerException';\n\nexport const baseExceptionMap = {\n  HttpClientException: HttpClientException,\n  HttpException: HttpException,\n  HttpServerException: HttpServerException,\n};\n\n/**\n * Whether the provided name is one of HttpException, HttpClientException, HttpServerException\n */\nexport const isBaseHttpException = (\n  name: string\n): name is keyof typeof baseExceptionMap => {\n  return Object.keys(baseExceptionMap).includes(name);\n};\n","/**\n * Native ecmascript errors\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#error_types\n * @see https://262.ecma-international.org/12.0/#sec-well-known-intrinsic-objects\n */\nimport type { NativeError } from '../types';\n\nexport const nativeErrorMap = {\n  Error: Error,\n  EvalError: EvalError,\n  RangeError: RangeError,\n  ReferenceError: ReferenceError,\n  SyntaxError: SyntaxError,\n  TypeError: TypeError,\n  UriError: URIError,\n};\n\nexport const nativeErrors = Object.values(nativeErrorMap);\n\nexport const isNativeError = (error: Error): error is NativeError => {\n  if (!((error as unknown) instanceof Error)) {\n    return false;\n  }\n  for (const e of nativeErrors) {\n    if (error.name === e.name) {\n      return true;\n    }\n  }\n  return false;\n};\n","import type { HttpException } from '../../base';\nimport { HttpUnprocessableEntity } from '../../client/HttpUnprocessableEntity';\nimport { isHttpException } from '../../typeguards/isHttpException';\nimport { isNativeError } from '../typeguard';\nimport type { NativeError, Serializable, SerializerParams } from '../types';\n\n/**\n * Convert an Error, NativeError or any HttpException to\n * an object suitable for serialization (a serializable version).\n *\n * @see {createFromSerializable}\n */\nexport const convertToSerializable = (\n  e: Error | HttpException | NativeError,\n  params?: SerializerParams\n  // eslint-disable-next-line sonarjs/cognitive-complexity\n): Serializable => {\n  const { includeStack = false } = params ?? {};\n  const {\n    cause: c = null,\n    message,\n    name,\n    stack = null,\n  } = (\n    (e as unknown) instanceof Error\n      ? e\n      : {\n          message:\n            typeof (e as unknown) === 'string'\n              ? e\n              : `Can't serialize error at runtime. Received '${typeof e}'`,\n          name: 'Error',\n        }\n  ) as Error;\n  const cause = c instanceof Error ? convertToSerializable(c) : null;\n  const common = {\n    message,\n    name,\n    ...(includeStack && stack ? { stack } : {}),\n    ...(cause ? { cause } : {}),\n  };\n  if (isHttpException(e)) {\n    return {\n      __type: 'HttpException',\n      ...common,\n      statusCode: e.statusCode,\n      ...(e.url ? { url: e.url } : {}),\n      ...(e.code ? { code: e.code } : {}),\n      ...(e.method ? { method: e.method } : {}),\n      ...(e.errorId ? { errorId: e.errorId } : {}),\n      ...(e instanceof HttpUnprocessableEntity ? { issues: e.issues } : {}),\n    };\n  }\n  return {\n    __type: isNativeError(e) ? 'NativeError' : 'NonNativeError',\n    ...common,\n  };\n};\n","import type { HttpException } from '../../base';\nimport { createHttpException } from '../../factory/createHttpException';\nimport type { HttpExceptionParamsWithIssues } from '../../types/HttpExceptionParamsWithIssues';\nimport {\n  baseExceptionMap,\n  isBaseHttpException,\n  nativeErrorMap,\n} from '../typeguard';\nimport type {\n  NativeError,\n  Serializable,\n  SerializableError,\n  SerializableHttpException,\n  SerializableNonNativeError,\n  SerializerParams,\n} from '../types';\n\ntype MaskedUndefinedAsStringTillLibEs5SupportsExactTypes = string;\n\nconst createCustomError = (\n  serializable: Omit<SerializableError | SerializableNonNativeError, '__type'>,\n  params?: SerializerParams\n): Error | NativeError => {\n  const { includeStack = false } = params ?? {};\n  const { cause, message, name, stack } = serializable;\n  const cls = nativeErrorMap[name as keyof typeof nativeErrorMap] ?? Error;\n  const e: Error | NativeError = cause\n    ? new cls(message, {\n        cause: createFromSerializable(cause, params),\n      })\n    : new cls(message);\n  if (!includeStack) {\n    e.stack =\n      undefined as unknown as MaskedUndefinedAsStringTillLibEs5SupportsExactTypes;\n  } else if (stack !== undefined) {\n    e.stack = stack;\n  }\n  return e;\n};\n\nconst createHttpExceptionError = (\n  serializable: SerializableHttpException,\n  params?: SerializerParams\n): Error | HttpException => {\n  const { includeStack = false } = params ?? {};\n  const {\n    cause,\n    name,\n    stack,\n    statusCode,\n    code,\n    errorId,\n    message,\n    method,\n    url,\n    issues,\n  } = serializable;\n  const exceptionParams = {\n    cause: cause\n      ? createFromSerializable(cause, {\n          includeStack,\n        })\n      : undefined,\n    code: code,\n    errorId: errorId,\n    message: message,\n    method: method,\n    url: url,\n    ...(issues ? { issues } : {}),\n  } satisfies HttpExceptionParamsWithIssues;\n  let e: HttpException;\n  try {\n    e = isBaseHttpException(name)\n      ? new baseExceptionMap[name](statusCode, exceptionParams)\n      : createHttpException(statusCode, exceptionParams);\n  } catch {\n    return createCustomError(\n      {\n        ...(cause ? { cause } : {}),\n        message: exceptionParams.message,\n        name,\n        ...(includeStack ? { stack } : {}),\n      },\n      {\n        includeStack,\n      }\n    );\n  }\n  if (!includeStack) {\n    e.stack =\n      undefined as unknown as MaskedUndefinedAsStringTillLibEs5SupportsExactTypes;\n  } else if (stack !== undefined) {\n    e.stack = stack;\n  }\n  return e;\n};\n\n/**\n * create an Error, NativeError or any HttpException from a\n * serializable representation\n *\n * @see {convertToSerializable}\n */\nexport const createFromSerializable = (\n  payload: Serializable,\n  params?: SerializerParams\n): Error | HttpException | NativeError => {\n  let e: Error | HttpException | NativeError;\n  switch (payload.__type) {\n    case 'HttpException': {\n      e = createHttpExceptionError(payload, params);\n      break;\n    }\n    case 'NativeError':\n    case 'NonNativeError': {\n      e = createCustomError(payload, params);\n      break;\n    }\n    default: {\n      throw new Error(\n        `Can't unserialize from unknown error (${\n          (payload as Serializable).name\n        })`\n      );\n    }\n  }\n  return e;\n};\n","import type { HttpException } from '../../base';\nimport { SerializerError } from '../error/SerializerError';\nimport { createFromSerializable } from '../mapper';\nimport type { SerializableError, SerializerParams } from '../types';\n\nexport const fromJson = (\n  json: string,\n  params?: SerializerParams\n): Error | HttpException | SerializerError => {\n  let v: SerializableError;\n  try {\n    v = JSON.parse(json ?? '') as unknown as SerializableError;\n  } catch (e) {\n    return new SerializerError(`Can't parse json`, {\n      ...(e instanceof Error ? { cause: e } : {}),\n    });\n  }\n  return createFromSerializable(v, params);\n};\n","import type { HttpException } from '../../base';\nimport { SerializerError } from '../error/SerializerError';\nimport { convertToSerializable } from '../mapper';\nimport type { NativeError, SerializerParams } from '../types';\n\nexport const toJson = (\n  exception: Error | HttpException | NativeError,\n  params?: SerializerParams\n): string => {\n  const serializable = convertToSerializable(exception, params);\n  let v: string;\n  try {\n    v = JSON.stringify(serializable);\n  } catch (e) {\n    throw new SerializerError(`Can't encode into json`, {\n      ...(e instanceof Error ? { cause: e } : {}),\n    });\n  }\n  return v;\n};\n"]}