{"version":3,"file":"index.cjs","sources":["../src/utils/is.ts","../src/utils/options.ts","../src/module.ts"],"sourcesContent":["export function isObject(item: unknown) : item is Record<string, any> {\n    return (!!item && typeof item === 'object' && !Array.isArray(item));\n}\n","import {\n    isObject,\n} from './is';\nimport type { Input, Options } from '../types';\n\ntype CheckFn<T> = (input: unknown) => input is T;\nexport function createExtractOptionsFn<T extends Options>(fn: CheckFn<T>) {\n    return (...input: Input[]) : T => {\n        const output : T = {} as T;\n        for (let i = 0; i < input.length; i++) {\n            const element = input[i];\n\n            if (typeof element === 'string') {\n                output.message = element;\n                continue;\n            }\n\n            // message,stack & cause are not enumerable\n            if (element instanceof Error) {\n                output.message = element.message;\n                output.stack = element.stack;\n                output.cause = element;\n            }\n\n            // if element prototype is not of instance Error,\n            // then message, stack & cause get extracted here.\n            if (fn(element)) {\n                const keys = Object.keys(element);\n                for (let i = 0; i < keys.length; i++) {\n                    output[keys[i] as keyof T] = element[keys[i] as keyof T];\n                }\n            }\n        }\n\n        return output;\n    };\n}\n\nexport function isOptions(input: unknown) : input is Options {\n    if (!isObject(input)) {\n        return false;\n    }\n\n    if (\n        typeof input.message !== 'undefined' &&\n        typeof input.message !== 'string'\n    ) {\n        return false;\n    }\n\n    if (\n        typeof input.stack !== 'undefined' &&\n        typeof input.stack !== 'string'\n    ) {\n        return false;\n    }\n\n    if (\n        typeof input.code !== 'undefined' &&\n        typeof input.code !== 'number' &&\n        typeof input.code !== 'string' &&\n        input.code !== null\n    ) {\n        return false;\n    }\n\n    if (\n        typeof input.expose !== 'undefined' &&\n        typeof input.expose !== 'boolean'\n    ) {\n        return false;\n    }\n\n    if (\n        typeof input.logMessage !== 'undefined' &&\n        typeof input.logMessage !== 'boolean'\n    ) {\n        return false;\n    }\n\n    return typeof input.logLevel === 'undefined' ||\n        typeof input.logLevel === 'number' ||\n        typeof input.logLevel === 'string';\n}\n\nconst check = createExtractOptionsFn(isOptions);\nexport function extractOptions(...input: Input[]) {\n    return check(...input);\n}\n","import type { Input } from './types';\nimport {\n    extractOptions,\n    isOptions,\n} from './utils';\n\nexport class BaseError extends Error {\n    /**\n     * A unique identifier for the error,\n     * which can be a short uppercase string or a numeric code.\n     */\n    code?: string | number | null;\n\n    /**\n     * Additional data associated with the error. This property can hold\n     * unstructured information or supplementary details that provide context\n     * to the error.\n     */\n    data?: unknown;\n\n    /**\n     * Determines whether the error message can be safely exposed externally.\n     */\n    expose?: boolean;\n\n    /**\n     * Indicates whether the error should be logged in the application's logs.\n     */\n    logMessage?: boolean;\n\n    /**\n     * Specifies the log level at which this error should be recorded.\n     */\n    logLevel?: string | number;\n\n    /**\n     * Represents the underlying cause or source of the error.\n     */\n    override cause?: unknown;\n\n    //--------------------------------------------------------------------\n\n    constructor(...input: Input[]) {\n        const options = extractOptions(...input);\n\n        super(options.message, { cause: options.cause });\n\n        if (typeof this.name === 'undefined' || this.name === 'Error') {\n            Object.defineProperty(this, 'name', {\n                configurable: true,\n                enumerable: false,\n                value: this.constructor.name,\n                writable: true,\n            });\n        }\n\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        }\n\n        // override existing stack\n        if (options.stack) {\n            this.stack = options.stack;\n        }\n\n        this.code = options.code;\n        this.expose = options.expose;\n        this.logMessage = options.logMessage;\n        this.logLevel = options.logLevel;\n        this.data = options.data;\n    }\n}\n\nexport function isBaseError(\n    input: unknown,\n): input is BaseError {\n    if (!isOptions(input)) {\n        return false;\n    }\n\n    return typeof input.message === 'string';\n}\n"],"names":["isObject","item","Array","isArray","createExtractOptionsFn","fn","input","output","i","length","element","message","Error","stack","cause","keys","Object","isOptions","code","expose","logMessage","logLevel","check","extractOptions","BaseError","constructor","options","name","defineProperty","configurable","enumerable","value","writable","captureStackTrace","data","isBaseError"],"mappings":"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"}