{"version":3,"sources":["../src/adapters/zod.ts","../../../node_modules/.pnpm/deepmerge-ts@7.1.0/node_modules/deepmerge-ts/dist/node/index.mjs","../src/action-builder.ts","../src/utils.ts","../src/validation-errors.ts","../src/safe-action-client.ts","../src/middleware.ts","../src/open-api/router.ts","../src/open-api/spec.ts","../src/open-api/utils.ts","../src/index.ts"],"sourcesContent":["// Code based on https://github.com/decs/typeschema/blob/main/packages/zod/src/validation.ts\n\n// MIT License\n\n// Copyright (c) 2023 André Costa\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { z } from \"zod\";\nimport type { IfInstalled, Infer, ValidationAdapter } from \"./types\";\n\nclass ZodAdapter implements ValidationAdapter {\n\tasync validate<S extends IfInstalled<z.ZodType>>(schema: S, data: unknown) {\n\t\tconst result = await schema.safeParseAsync(data);\n\n\t\tif (result.success) {\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tdata: result.data as Infer<S>,\n\t\t\t} as const;\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\tissues: result.error.issues.map(({ message, path }) => ({ message, path })),\n\t\t} as const;\n\t}\n}\n\nexport function zodAdapter() {\n\treturn new ZodAdapter();\n}\n","/**\n * Special values that tell deepmerge to perform a certain action.\n */\nconst actions = {\n    defaultMerge: Symbol(\"deepmerge-ts: default merge\"),\n    skip: Symbol(\"deepmerge-ts: skip\"),\n};\n/**\n * Special values that tell deepmergeInto to perform a certain action.\n */\nconst actionsInto = {\n    defaultMerge: actions.defaultMerge,\n};\n\n/**\n * The default function to update meta data.\n *\n * It doesn't update the meta data.\n */\nfunction defaultMetaDataUpdater(previousMeta, metaMeta) {\n    return metaMeta;\n}\n/**\n * The default function to filter values.\n *\n * It filters out undefined values.\n */\nfunction defaultFilterValues(values, meta) {\n    return values.filter((value) => value !== undefined);\n}\n\n/**\n * The different types of objects deepmerge-ts support.\n */\nvar ObjectType;\n(function (ObjectType) {\n    ObjectType[ObjectType[\"NOT\"] = 0] = \"NOT\";\n    ObjectType[ObjectType[\"RECORD\"] = 1] = \"RECORD\";\n    ObjectType[ObjectType[\"ARRAY\"] = 2] = \"ARRAY\";\n    ObjectType[ObjectType[\"SET\"] = 3] = \"SET\";\n    ObjectType[ObjectType[\"MAP\"] = 4] = \"MAP\";\n    ObjectType[ObjectType[\"OTHER\"] = 5] = \"OTHER\";\n})(ObjectType || (ObjectType = {}));\n/**\n * Get the type of the given object.\n *\n * @param object - The object to get the type of.\n * @returns The type of the given object.\n */\nfunction getObjectType(object) {\n    if (typeof object !== \"object\" || object === null) {\n        return 0 /* ObjectType.NOT */;\n    }\n    if (Array.isArray(object)) {\n        return 2 /* ObjectType.ARRAY */;\n    }\n    if (isRecord(object)) {\n        return 1 /* ObjectType.RECORD */;\n    }\n    if (object instanceof Set) {\n        return 3 /* ObjectType.SET */;\n    }\n    if (object instanceof Map) {\n        return 4 /* ObjectType.MAP */;\n    }\n    return 5 /* ObjectType.OTHER */;\n}\n/**\n * Get the keys of the given objects including symbol keys.\n *\n * Note: Only keys to enumerable properties are returned.\n *\n * @param objects - An array of objects to get the keys of.\n * @returns A set containing all the keys of all the given objects.\n */\nfunction getKeys(objects) {\n    const keys = new Set();\n    for (const object of objects) {\n        for (const key of [\n            ...Object.keys(object),\n            ...Object.getOwnPropertySymbols(object),\n        ]) {\n            keys.add(key);\n        }\n    }\n    return keys;\n}\n/**\n * Does the given object have the given property.\n *\n * @param object - The object to test.\n * @param property - The property to test.\n * @returns Whether the object has the property.\n */\nfunction objectHasProperty(object, property) {\n    return (typeof object === \"object\" &&\n        Object.prototype.propertyIsEnumerable.call(object, property));\n}\n/**\n * Get an iterable object that iterates over the given iterables.\n */\nfunction getIterableOfIterables(iterables) {\n    return {\n        *[Symbol.iterator]() {\n            for (const iterable of iterables) {\n                for (const value of iterable) {\n                    yield value;\n                }\n            }\n        },\n    };\n}\nconst validRecordToStringValues = new Set([\n    \"[object Object]\",\n    \"[object Module]\",\n]);\n/**\n * Does the given object appear to be a record.\n */\nfunction isRecord(value) {\n    // All records are objects.\n    if (!validRecordToStringValues.has(Object.prototype.toString.call(value))) {\n        return false;\n    }\n    const { constructor } = value;\n    // If has modified constructor.\n    // eslint-disable-next-line ts/no-unnecessary-condition\n    if (constructor === undefined) {\n        return true;\n    }\n    const prototype = constructor.prototype;\n    // If has modified prototype.\n    if (prototype === null ||\n        typeof prototype !== \"object\" ||\n        !validRecordToStringValues.has(Object.prototype.toString.call(prototype))) {\n        return false;\n    }\n    // If constructor does not have an Object-specific method.\n    // eslint-disable-next-line sonar/prefer-single-boolean-return, no-prototype-builtins\n    if (!prototype.hasOwnProperty(\"isPrototypeOf\")) {\n        return false;\n    }\n    // Most likely a record.\n    return true;\n}\n\n/**\n * The default strategy to merge records.\n *\n * @param values - The records.\n */\nfunction mergeRecords$1(values, utils, meta) {\n    const result = {};\n    for (const key of getKeys(values)) {\n        const propValues = [];\n        for (const value of values) {\n            if (objectHasProperty(value, key)) {\n                propValues.push(value[key]);\n            }\n        }\n        if (propValues.length === 0) {\n            continue;\n        }\n        const updatedMeta = utils.metaDataUpdater(meta, {\n            key,\n            parents: values,\n        });\n        const propertyResult = mergeUnknowns(propValues, utils, updatedMeta);\n        if (propertyResult === actions.skip) {\n            continue;\n        }\n        if (key === \"__proto__\") {\n            Object.defineProperty(result, key, {\n                value: propertyResult,\n                configurable: true,\n                enumerable: true,\n                writable: true,\n            });\n        }\n        else {\n            result[key] = propertyResult;\n        }\n    }\n    return result;\n}\n/**\n * The default strategy to merge arrays.\n *\n * @param values - The arrays.\n */\nfunction mergeArrays$1(values) {\n    return values.flat();\n}\n/**\n * The default strategy to merge sets.\n *\n * @param values - The sets.\n */\nfunction mergeSets$1(values) {\n    return new Set(getIterableOfIterables(values));\n}\n/**\n * The default strategy to merge maps.\n *\n * @param values - The maps.\n */\nfunction mergeMaps$1(values) {\n    return new Map(getIterableOfIterables(values));\n}\n/**\n * Get the last non-undefined value in the given array.\n */\nfunction mergeOthers$1(values) {\n    return values.at(-1);\n}\n/**\n * The merge functions.\n */\nconst mergeFunctions = {\n    mergeRecords: mergeRecords$1,\n    mergeArrays: mergeArrays$1,\n    mergeSets: mergeSets$1,\n    mergeMaps: mergeMaps$1,\n    mergeOthers: mergeOthers$1,\n};\n\n/**\n * Deeply merge objects.\n *\n * @param objects - The objects to merge.\n */\nfunction deepmerge(...objects) {\n    return deepmergeCustom({})(...objects);\n}\nfunction deepmergeCustom(options, rootMetaData) {\n    const utils = getUtils(options, customizedDeepmerge);\n    /**\n     * The customized deepmerge function.\n     */\n    function customizedDeepmerge(...objects) {\n        return mergeUnknowns(objects, utils, rootMetaData);\n    }\n    return customizedDeepmerge;\n}\n/**\n * The the utils that are available to the merge functions.\n *\n * @param options - The options the user specified\n */\nfunction getUtils(options, customizedDeepmerge) {\n    return {\n        defaultMergeFunctions: mergeFunctions,\n        mergeFunctions: {\n            ...mergeFunctions,\n            ...Object.fromEntries(Object.entries(options)\n                .filter(([key, option]) => Object.hasOwn(mergeFunctions, key))\n                .map(([key, option]) => option === false\n                ? [key, mergeFunctions.mergeOthers]\n                : [key, option])),\n        },\n        metaDataUpdater: (options.metaDataUpdater ??\n            defaultMetaDataUpdater),\n        deepmerge: customizedDeepmerge,\n        useImplicitDefaultMerging: options.enableImplicitDefaultMerging ?? false,\n        filterValues: options.filterValues === false\n            ? undefined\n            : options.filterValues ?? defaultFilterValues,\n        actions,\n    };\n}\n/**\n * Merge unknown things.\n *\n * @param values - The values.\n */\nfunction mergeUnknowns(values, utils, meta) {\n    const filteredValues = utils.filterValues?.(values, meta) ?? values;\n    if (filteredValues.length === 0) {\n        return undefined;\n    }\n    if (filteredValues.length === 1) {\n        return mergeOthers(filteredValues, utils, meta);\n    }\n    const type = getObjectType(filteredValues[0]);\n    if (type !== 0 /* ObjectType.NOT */ && type !== 5 /* ObjectType.OTHER */) {\n        for (let m_index = 1; m_index < filteredValues.length; m_index++) {\n            if (getObjectType(filteredValues[m_index]) === type) {\n                continue;\n            }\n            return mergeOthers(filteredValues, utils, meta);\n        }\n    }\n    switch (type) {\n        case 1 /* ObjectType.RECORD */: {\n            return mergeRecords(filteredValues, utils, meta);\n        }\n        case 2 /* ObjectType.ARRAY */: {\n            return mergeArrays(filteredValues, utils, meta);\n        }\n        case 3 /* ObjectType.SET */: {\n            return mergeSets(filteredValues, utils, meta);\n        }\n        case 4 /* ObjectType.MAP */: {\n            return mergeMaps(filteredValues, utils, meta);\n        }\n        default: {\n            return mergeOthers(filteredValues, utils, meta);\n        }\n    }\n}\n/**\n * Merge records.\n *\n * @param values - The records.\n */\nfunction mergeRecords(values, utils, meta) {\n    const result = utils.mergeFunctions.mergeRecords(values, utils, meta);\n    if (result === actions.defaultMerge ||\n        (utils.useImplicitDefaultMerging &&\n            result === undefined &&\n            utils.mergeFunctions.mergeRecords !==\n                utils.defaultMergeFunctions.mergeRecords)) {\n        return utils.defaultMergeFunctions.mergeRecords(values, utils, meta);\n    }\n    return result;\n}\n/**\n * Merge arrays.\n *\n * @param values - The arrays.\n */\nfunction mergeArrays(values, utils, meta) {\n    const result = utils.mergeFunctions.mergeArrays(values, utils, meta);\n    if (result === actions.defaultMerge ||\n        (utils.useImplicitDefaultMerging &&\n            result === undefined &&\n            utils.mergeFunctions.mergeArrays !==\n                utils.defaultMergeFunctions.mergeArrays)) {\n        return utils.defaultMergeFunctions.mergeArrays(values);\n    }\n    return result;\n}\n/**\n * Merge sets.\n *\n * @param values - The sets.\n */\nfunction mergeSets(values, utils, meta) {\n    const result = utils.mergeFunctions.mergeSets(values, utils, meta);\n    if (result === actions.defaultMerge ||\n        (utils.useImplicitDefaultMerging &&\n            result === undefined &&\n            utils.mergeFunctions.mergeSets !== utils.defaultMergeFunctions.mergeSets)) {\n        return utils.defaultMergeFunctions.mergeSets(values);\n    }\n    return result;\n}\n/**\n * Merge maps.\n *\n * @param values - The maps.\n */\nfunction mergeMaps(values, utils, meta) {\n    const result = utils.mergeFunctions.mergeMaps(values, utils, meta);\n    if (result === actions.defaultMerge ||\n        (utils.useImplicitDefaultMerging &&\n            result === undefined &&\n            utils.mergeFunctions.mergeMaps !== utils.defaultMergeFunctions.mergeMaps)) {\n        return utils.defaultMergeFunctions.mergeMaps(values);\n    }\n    return result;\n}\n/**\n * Merge other things.\n *\n * @param values - The other things.\n */\nfunction mergeOthers(values, utils, meta) {\n    const result = utils.mergeFunctions.mergeOthers(values, utils, meta);\n    if (result === actions.defaultMerge ||\n        (utils.useImplicitDefaultMerging &&\n            result === undefined &&\n            utils.mergeFunctions.mergeOthers !==\n                utils.defaultMergeFunctions.mergeOthers)) {\n        return utils.defaultMergeFunctions.mergeOthers(values);\n    }\n    return result;\n}\n\n/**\n * The default strategy to merge records into a target record.\n *\n * @param m_target - The result will be mutated into this record\n * @param values - The records (including the target's value if there is one).\n */\nfunction mergeRecordsInto$1(m_target, values, utils, meta) {\n    for (const key of getKeys(values)) {\n        const propValues = [];\n        for (const value of values) {\n            if (objectHasProperty(value, key)) {\n                propValues.push(value[key]);\n            }\n        }\n        if (propValues.length === 0) {\n            continue;\n        }\n        const updatedMeta = utils.metaDataUpdater(meta, {\n            key,\n            parents: values,\n        });\n        const propertyTarget = { value: propValues[0] };\n        mergeUnknownsInto(propertyTarget, propValues, utils, updatedMeta);\n        if (key === \"__proto__\") {\n            Object.defineProperty(m_target.value, key, {\n                value: propertyTarget.value,\n                configurable: true,\n                enumerable: true,\n                writable: true,\n            });\n        }\n        else {\n            m_target.value[key] = propertyTarget.value;\n        }\n    }\n}\n/**\n * The default strategy to merge arrays into a target array.\n *\n * @param m_target - The result will be mutated into this array\n * @param values - The arrays (including the target's value if there is one).\n */\nfunction mergeArraysInto$1(m_target, values) {\n    m_target.value.push(...values.slice(1).flat());\n}\n/**\n * The default strategy to merge sets into a target set.\n *\n * @param m_target - The result will be mutated into this set\n * @param values - The sets (including the target's value if there is one).\n */\nfunction mergeSetsInto$1(m_target, values) {\n    for (const value of getIterableOfIterables(values.slice(1))) {\n        m_target.value.add(value);\n    }\n}\n/**\n * The default strategy to merge maps into a target map.\n *\n * @param m_target - The result will be mutated into this map\n * @param values - The maps (including the target's value if there is one).\n */\nfunction mergeMapsInto$1(m_target, values) {\n    for (const [key, value] of getIterableOfIterables(values.slice(1))) {\n        m_target.value.set(key, value);\n    }\n}\n/**\n * Set the target to the last non-undefined value.\n */\nfunction mergeOthersInto$1(m_target, values) {\n    m_target.value = values.at(-1);\n}\n/**\n * The merge functions.\n */\nconst mergeIntoFunctions = {\n    mergeRecords: mergeRecordsInto$1,\n    mergeArrays: mergeArraysInto$1,\n    mergeSets: mergeSetsInto$1,\n    mergeMaps: mergeMapsInto$1,\n    mergeOthers: mergeOthersInto$1,\n};\n\nfunction deepmergeInto(target, ...objects) {\n    return void deepmergeIntoCustom({})(target, ...objects);\n}\nfunction deepmergeIntoCustom(options, rootMetaData) {\n    const utils = getIntoUtils(options, customizedDeepmergeInto);\n    /**\n     * The customized deepmerge function.\n     */\n    function customizedDeepmergeInto(target, ...objects) {\n        mergeUnknownsInto({ value: target }, [target, ...objects], utils, rootMetaData);\n    }\n    return customizedDeepmergeInto;\n}\n/**\n * The the utils that are available to the merge functions.\n *\n * @param options - The options the user specified\n */\nfunction getIntoUtils(options, customizedDeepmergeInto) {\n    return {\n        defaultMergeFunctions: mergeIntoFunctions,\n        mergeFunctions: {\n            ...mergeIntoFunctions,\n            ...Object.fromEntries(Object.entries(options)\n                .filter(([key, option]) => Object.hasOwn(mergeIntoFunctions, key))\n                .map(([key, option]) => option === false\n                ? [key, mergeIntoFunctions.mergeOthers]\n                : [key, option])),\n        },\n        metaDataUpdater: (options.metaDataUpdater ??\n            defaultMetaDataUpdater),\n        deepmergeInto: customizedDeepmergeInto,\n        filterValues: options.filterValues === false\n            ? undefined\n            : options.filterValues ?? defaultFilterValues,\n        actions: actionsInto,\n    };\n}\n/**\n * Merge unknown things into a target.\n *\n * @param m_target - The target to merge into.\n * @param values - The values.\n */\nfunction mergeUnknownsInto(m_target, values, utils, meta) {\n    const filteredValues = utils.filterValues?.(values, meta) ?? values;\n    if (filteredValues.length === 0) {\n        return;\n    }\n    if (filteredValues.length === 1) {\n        return void mergeOthersInto(m_target, filteredValues, utils, meta);\n    }\n    const type = getObjectType(m_target.value);\n    if (type !== 0 /* ObjectType.NOT */ && type !== 5 /* ObjectType.OTHER */) {\n        for (let m_index = 1; m_index < filteredValues.length; m_index++) {\n            if (getObjectType(filteredValues[m_index]) === type) {\n                continue;\n            }\n            return void mergeOthersInto(m_target, filteredValues, utils, meta);\n        }\n    }\n    switch (type) {\n        case 1 /* ObjectType.RECORD */: {\n            return void mergeRecordsInto(m_target, filteredValues, utils, meta);\n        }\n        case 2 /* ObjectType.ARRAY */: {\n            return void mergeArraysInto(m_target, filteredValues, utils, meta);\n        }\n        case 3 /* ObjectType.SET */: {\n            return void mergeSetsInto(m_target, filteredValues, utils, meta);\n        }\n        case 4 /* ObjectType.MAP */: {\n            return void mergeMapsInto(m_target, filteredValues, utils, meta);\n        }\n        default: {\n            return void mergeOthersInto(m_target, filteredValues, utils, meta);\n        }\n    }\n}\n/**\n * Merge records into a target record.\n *\n * @param m_target - The target to merge into.\n * @param values - The records.\n */\nfunction mergeRecordsInto(m_target, values, utils, meta) {\n    const action = utils.mergeFunctions.mergeRecords(m_target, values, utils, meta);\n    if (action === actionsInto.defaultMerge) {\n        utils.defaultMergeFunctions.mergeRecords(m_target, values, utils, meta);\n    }\n}\n/**\n * Merge arrays into a target array.\n *\n * @param m_target - The target to merge into.\n * @param values - The arrays.\n */\nfunction mergeArraysInto(m_target, values, utils, meta) {\n    const action = utils.mergeFunctions.mergeArrays(m_target, values, utils, meta);\n    if (action === actionsInto.defaultMerge) {\n        utils.defaultMergeFunctions.mergeArrays(m_target, values);\n    }\n}\n/**\n * Merge sets into a target set.\n *\n * @param m_target - The target to merge into.\n * @param values - The sets.\n */\nfunction mergeSetsInto(m_target, values, utils, meta) {\n    const action = utils.mergeFunctions.mergeSets(m_target, values, utils, meta);\n    if (action === actionsInto.defaultMerge) {\n        utils.defaultMergeFunctions.mergeSets(m_target, values);\n    }\n}\n/**\n * Merge maps into a target map.\n *\n * @param m_target - The target to merge into.\n * @param values - The maps.\n */\nfunction mergeMapsInto(m_target, values, utils, meta) {\n    const action = utils.mergeFunctions.mergeMaps(m_target, values, utils, meta);\n    if (action === actionsInto.defaultMerge) {\n        utils.defaultMergeFunctions.mergeMaps(m_target, values);\n    }\n}\n/**\n * Merge other things into a target.\n *\n * @param m_target - The target to merge into.\n * @param values - The other things.\n */\nfunction mergeOthersInto(m_target, values, utils, meta) {\n    const action = utils.mergeFunctions.mergeOthers(m_target, values, utils, meta);\n    if (action === actionsInto.defaultMerge ||\n        m_target.value === actionsInto.defaultMerge) {\n        utils.defaultMergeFunctions.mergeOthers(m_target, values);\n    }\n}\n\nexport { deepmerge, deepmergeCustom, deepmergeInto, deepmergeIntoCustom, getKeys, getObjectType, objectHasProperty };\n","import { deepmerge } from \"deepmerge-ts\";\nimport { isNotFoundError } from \"next/dist/client/components/not-found.js\";\nimport { isRedirectError } from \"next/dist/client/components/redirect.js\";\nimport type {} from \"zod\";\nimport type { Infer, InferArray, InferIn, InferInArray, Schema, ValidationAdapter } from \"./adapters/types\";\nimport type {\n\tMiddlewareFn,\n\tMiddlewareResult,\n\tSafeActionClientOpts,\n\tSafeActionFn,\n\tSafeActionResult,\n\tSafeActionUtils,\n\tSafeStateActionFn,\n\tServerCodeFn,\n\tStateServerCodeFn,\n} from \"./index.types\";\nimport { DEFAULT_SERVER_ERROR_MESSAGE, isError } from \"./utils\";\nimport type { MaybePromise } from \"./utils.types\";\nimport {\n\tActionMetadataValidationError,\n\tActionOutputDataValidationError,\n\tActionServerValidationError,\n\tActionValidationError,\n\tbuildValidationErrors,\n} from \"./validation-errors\";\nimport type {\n\tBindArgsValidationErrors,\n\tHandleBindArgsValidationErrorsShapeFn,\n\tHandleValidationErrorsShapeFn,\n\tValidationErrors,\n} from \"./validation-errors.types\";\n\nexport function actionBuilder<\n\tServerError,\n\tMetadataSchema extends Schema | undefined = undefined,\n\tMD = MetadataSchema extends Schema ? Infer<Schema> : undefined, // metadata type (inferred from metadata schema)\n\t// eslint-disable-next-line @typescript-eslint/no-empty-object-type\n\tCtx extends object = {},\n\tISF extends (() => Promise<Schema>) | undefined = undefined, // input schema function\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n\tIS extends Schema | undefined = ISF extends Function ? Awaited<ReturnType<ISF>> : undefined, // input schema\n\tOS extends Schema | undefined = undefined, // output schema\n\tconst BAS extends readonly Schema[] = [],\n\tCVE = undefined,\n\tCBAVE = undefined,\n>(args: {\n\tinputSchemaFn?: ISF;\n\tbindArgsSchemas?: BAS;\n\toutputSchema?: OS;\n\tvalidationAdapter: ValidationAdapter;\n\thandleValidationErrorsShape: HandleValidationErrorsShapeFn<IS, BAS, MD, Ctx, CVE>;\n\thandleBindArgsValidationErrorsShape: HandleBindArgsValidationErrorsShapeFn<IS, BAS, MD, Ctx, CBAVE>;\n\tmetadataSchema: MetadataSchema;\n\tmetadata: MD;\n\thandleServerError: NonNullable<SafeActionClientOpts<ServerError, MetadataSchema, any>[\"handleServerError\"]>;\n\tmiddlewareFns: MiddlewareFn<ServerError, any, any, any>[];\n\tctxType: Ctx;\n\tthrowValidationErrors: boolean;\n}) {\n\tconst bindArgsSchemas = (args.bindArgsSchemas ?? []) as BAS;\n\n\tfunction buildAction({ withState }: { withState: false }): {\n\t\taction: <Data extends OS extends Schema ? Infer<OS> : any>(\n\t\t\tserverCodeFn: ServerCodeFn<MD, Ctx, IS, BAS, Data>,\n\t\t\tutils?: SafeActionUtils<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>\n\t\t) => SafeActionFn<ServerError, IS, BAS, CVE, CBAVE, Data>;\n\t};\n\tfunction buildAction({ withState }: { withState: true }): {\n\t\taction: <Data extends OS extends Schema ? Infer<OS> : any>(\n\t\t\tserverCodeFn: StateServerCodeFn<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>,\n\t\t\tutils?: SafeActionUtils<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>\n\t\t) => SafeStateActionFn<ServerError, IS, BAS, CVE, CBAVE, Data>;\n\t};\n\tfunction buildAction({ withState }: { withState: boolean }) {\n\t\treturn {\n\t\t\taction: <Data extends OS extends Schema ? Infer<OS> : any>(\n\t\t\t\tserverCodeFn:\n\t\t\t\t\t| ServerCodeFn<MD, Ctx, IS, BAS, Data>\n\t\t\t\t\t| StateServerCodeFn<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>,\n\t\t\t\tutils?: SafeActionUtils<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>\n\t\t\t) => {\n\t\t\t\treturn async (...clientInputs: unknown[]) => {\n\t\t\t\t\tlet currentCtx: object = {};\n\t\t\t\t\tconst middlewareResult: MiddlewareResult<ServerError, object> = { success: false };\n\t\t\t\t\ttype PrevResult = SafeActionResult<ServerError, IS, BAS, CVE, CBAVE, Data> | undefined;\n\t\t\t\t\tlet prevResult: PrevResult | undefined = undefined;\n\t\t\t\t\tconst parsedInputDatas: any[] = [];\n\t\t\t\t\tlet frameworkError: Error | null = null;\n\n\t\t\t\t\tif (withState) {\n\t\t\t\t\t\t// Previous state is placed between bind args and main arg inputs, so it's always at the index of\n\t\t\t\t\t\t// the bind args schemas + 1. Get it and remove it from the client inputs array.\n\t\t\t\t\t\tprevResult = clientInputs.splice(bindArgsSchemas.length, 1)[0] as PrevResult;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the number of bind args schemas + 1 (which is the optional main arg schema) is greater\n\t\t\t\t\t// than the number of provided client inputs, it means that the main argument is missing.\n\t\t\t\t\t// This happens when the main schema is missing (since it's optional), or if a void main schema\n\t\t\t\t\t// is provided along with bind args schemas.\n\t\t\t\t\tif (bindArgsSchemas.length + 1 > clientInputs.length) {\n\t\t\t\t\t\tclientInputs.push(undefined);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Execute the middleware stack.\n\t\t\t\t\tconst executeMiddlewareStack = async (idx = 0) => {\n\t\t\t\t\t\tif (frameworkError) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst middlewareFn = args.middlewareFns[idx];\n\t\t\t\t\t\tmiddlewareResult.ctx = currentCtx;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (idx === 0) {\n\t\t\t\t\t\t\t\tif (args.metadataSchema) {\n\t\t\t\t\t\t\t\t\t// Validate metadata input.\n\t\t\t\t\t\t\t\t\tconst parsedMd = await args.validationAdapter.validate(args.metadataSchema, args.metadata);\n\n\t\t\t\t\t\t\t\t\tif (!parsedMd.success) {\n\t\t\t\t\t\t\t\t\t\tthrow new ActionMetadataValidationError<MetadataSchema>(buildValidationErrors(parsedMd.issues));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Middleware function.\n\t\t\t\t\t\t\tif (middlewareFn) {\n\t\t\t\t\t\t\t\tawait middlewareFn({\n\t\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1), // pass raw client input\n\t\t\t\t\t\t\t\t\tbindArgsClientInputs: bindArgsSchemas.length ? clientInputs.slice(0, -1) : [],\n\t\t\t\t\t\t\t\t\tctx: currentCtx,\n\t\t\t\t\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\t\t\t\t\tnext: async (nextOpts) => {\n\t\t\t\t\t\t\t\t\t\tcurrentCtx = deepmerge(currentCtx, nextOpts?.ctx ?? {});\n\t\t\t\t\t\t\t\t\t\tawait executeMiddlewareStack(idx + 1);\n\t\t\t\t\t\t\t\t\t\treturn middlewareResult;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t// Action function.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Validate the client inputs in parallel.\n\t\t\t\t\t\t\t\tconst parsedInputs = await Promise.all(\n\t\t\t\t\t\t\t\t\tclientInputs.map(async (input, i) => {\n\t\t\t\t\t\t\t\t\t\t// Last client input in the array, main argument (no bind arg).\n\t\t\t\t\t\t\t\t\t\tif (i === clientInputs.length - 1) {\n\t\t\t\t\t\t\t\t\t\t\t// If schema is undefined, set parsed data to undefined.\n\t\t\t\t\t\t\t\t\t\t\tif (typeof args.inputSchemaFn === \"undefined\") {\n\t\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata: undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t} as const;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Otherwise, parse input with the schema.\n\t\t\t\t\t\t\t\t\t\t\treturn args.validationAdapter.validate(await args.inputSchemaFn(), input);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, we're processing bind args client inputs.\n\t\t\t\t\t\t\t\t\t\treturn args.validationAdapter.validate(bindArgsSchemas[i]!, input);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tlet hasBindValidationErrors = false;\n\n\t\t\t\t\t\t\t\t// Initialize the bind args validation errors array with null values.\n\t\t\t\t\t\t\t\t// It has the same length as the number of bind arguments (parsedInputs - 1).\n\t\t\t\t\t\t\t\tconst bindArgsValidationErrors = Array(parsedInputs.length - 1).fill({});\n\n\t\t\t\t\t\t\t\tfor (let i = 0; i < parsedInputs.length; i++) {\n\t\t\t\t\t\t\t\t\tconst parsedInput = parsedInputs[i]!;\n\n\t\t\t\t\t\t\t\t\tif (parsedInput.success) {\n\t\t\t\t\t\t\t\t\t\tparsedInputDatas.push(parsedInput.data);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// If we're processing a bind argument and there are validation errors for this one,\n\t\t\t\t\t\t\t\t\t\t// we need to store them in the bind args validation errors array at this index.\n\t\t\t\t\t\t\t\t\t\tif (i < parsedInputs.length - 1) {\n\t\t\t\t\t\t\t\t\t\t\tbindArgsValidationErrors[i] = buildValidationErrors<BAS[number]>(parsedInput.issues);\n\t\t\t\t\t\t\t\t\t\t\thasBindValidationErrors = true;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t// Otherwise, we're processing the non-bind argument (the last one) in the array.\n\t\t\t\t\t\t\t\t\t\t\tconst validationErrors = buildValidationErrors<IS>(parsedInput.issues);\n\n\t\t\t\t\t\t\t\t\t\t\tmiddlewareResult.validationErrors = await Promise.resolve(\n\t\t\t\t\t\t\t\t\t\t\t\targs.handleValidationErrorsShape(validationErrors, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1) as IS extends Schema ? InferIn<IS> : undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\tbindArgsClientInputs: (bindArgsSchemas.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? clientInputs.slice(0, -1)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: []) as InferInArray<BAS>,\n\t\t\t\t\t\t\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\t\t\t\t\t\t\tmetadata: args.metadata as MetadataSchema extends Schema ? Infer<MetadataSchema> : undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If there are bind args validation errors, format them and store them in the middleware result.\n\t\t\t\t\t\t\t\tif (hasBindValidationErrors) {\n\t\t\t\t\t\t\t\t\tmiddlewareResult.bindArgsValidationErrors = await Promise.resolve(\n\t\t\t\t\t\t\t\t\t\targs.handleBindArgsValidationErrorsShape(\n\t\t\t\t\t\t\t\t\t\t\tbindArgsValidationErrors as BindArgsValidationErrors<BAS>,\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1) as IS extends Schema ? InferIn<IS> : undefined,\n\t\t\t\t\t\t\t\t\t\t\t\tbindArgsClientInputs: (bindArgsSchemas.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t? clientInputs.slice(0, -1)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: []) as InferInArray<BAS>,\n\t\t\t\t\t\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\t\t\t\t\t\tmetadata: args.metadata as MetadataSchema extends Schema ? Infer<MetadataSchema> : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (middlewareResult.validationErrors || middlewareResult.bindArgsValidationErrors) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\t\tconst scfArgs: Parameters<StateServerCodeFn<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>> = [];\n\n\t\t\t\t\t\t\t\t// Server code function always has this object as the first argument.\n\t\t\t\t\t\t\t\tscfArgs[0] = {\n\t\t\t\t\t\t\t\t\tparsedInput: parsedInputDatas.at(-1) as IS extends Schema ? Infer<IS> : undefined,\n\t\t\t\t\t\t\t\t\tbindArgsParsedInputs: parsedInputDatas.slice(0, -1) as InferArray<BAS>,\n\t\t\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// If this action is stateful, server code function also has a `prevResult` property inside the second\n\t\t\t\t\t\t\t\t// argument object.\n\t\t\t\t\t\t\t\tif (withState) {\n\t\t\t\t\t\t\t\t\tscfArgs[1] = { prevResult: structuredClone(prevResult!) };\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst data = await serverCodeFn(...scfArgs);\n\n\t\t\t\t\t\t\t\t// If a `outputSchema` is passed, validate the action return value.\n\t\t\t\t\t\t\t\tif (typeof args.outputSchema !== \"undefined\") {\n\t\t\t\t\t\t\t\t\tconst parsedData = await args.validationAdapter.validate(args.outputSchema, data);\n\n\t\t\t\t\t\t\t\t\tif (!parsedData.success) {\n\t\t\t\t\t\t\t\t\t\tthrow new ActionOutputDataValidationError<OS>(buildValidationErrors(parsedData.issues));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmiddlewareResult.success = true;\n\t\t\t\t\t\t\t\tmiddlewareResult.data = data;\n\t\t\t\t\t\t\t\tmiddlewareResult.parsedInput = parsedInputDatas.at(-1);\n\t\t\t\t\t\t\t\tmiddlewareResult.bindArgsParsedInputs = parsedInputDatas.slice(0, -1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\t\t// next/navigation functions work by throwing an error that will be\n\t\t\t\t\t\t\t// processed internally by Next.js.\n\t\t\t\t\t\t\tif (isRedirectError(e) || isNotFoundError(e)) {\n\t\t\t\t\t\t\t\tmiddlewareResult.success = true;\n\t\t\t\t\t\t\t\tframeworkError = e;\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// If error is `ActionServerValidationError`, return `validationErrors` as if schema validation would fail.\n\t\t\t\t\t\t\tif (e instanceof ActionServerValidationError) {\n\t\t\t\t\t\t\t\tconst ve = e.validationErrors as ValidationErrors<IS>;\n\t\t\t\t\t\t\t\tmiddlewareResult.validationErrors = await Promise.resolve(\n\t\t\t\t\t\t\t\t\targs.handleValidationErrorsShape(ve, {\n\t\t\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1) as IS extends Schema ? InferIn<IS> : undefined,\n\t\t\t\t\t\t\t\t\t\tbindArgsClientInputs: (bindArgsSchemas.length\n\t\t\t\t\t\t\t\t\t\t\t? clientInputs.slice(0, -1)\n\t\t\t\t\t\t\t\t\t\t\t: []) as InferInArray<BAS>,\n\t\t\t\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\t\t\t\tmetadata: args.metadata as MetadataSchema extends Schema ? Infer<MetadataSchema> : undefined,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// If error is not an instance of Error, wrap it in an Error object with\n\t\t\t\t\t\t\t\t// the default message.\n\t\t\t\t\t\t\t\tconst error = isError(e) ? e : new Error(DEFAULT_SERVER_ERROR_MESSAGE);\n\t\t\t\t\t\t\t\tconst returnedError = await Promise.resolve(\n\t\t\t\t\t\t\t\t\targs.handleServerError(error, {\n\t\t\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1), // pass raw client input\n\t\t\t\t\t\t\t\t\t\tbindArgsClientInputs: bindArgsSchemas.length ? clientInputs.slice(0, -1) : [],\n\t\t\t\t\t\t\t\t\t\tctx: currentCtx,\n\t\t\t\t\t\t\t\t\t\tmetadata: args.metadata as MetadataSchema extends Schema ? Infer<MetadataSchema> : undefined,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tmiddlewareResult.serverError = returnedError;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Execute middleware chain + action function.\n\t\t\t\t\tawait executeMiddlewareStack();\n\n\t\t\t\t\tconst callbacksToExecute: MaybePromise<void>[] = [];\n\n\t\t\t\t\t// If an internal framework error occurred, throw it, so it will be processed by Next.js.\n\t\t\t\t\tif (frameworkError) {\n\t\t\t\t\t\tcallbacksToExecute.push(\n\t\t\t\t\t\t\tutils?.onSuccess?.({\n\t\t\t\t\t\t\t\tdata: undefined,\n\t\t\t\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1) as IS extends Schema ? InferIn<IS> : undefined,\n\t\t\t\t\t\t\t\tbindArgsClientInputs: (bindArgsSchemas.length ? clientInputs.slice(0, -1) : []) as InferInArray<BAS>,\n\t\t\t\t\t\t\t\tparsedInput: parsedInputDatas.at(-1) as IS extends Schema ? Infer<IS> : undefined,\n\t\t\t\t\t\t\t\tbindArgsParsedInputs: parsedInputDatas.slice(0, -1) as InferArray<BAS>,\n\t\t\t\t\t\t\t\thasRedirected: isRedirectError(frameworkError),\n\t\t\t\t\t\t\t\thasNotFound: isNotFoundError(frameworkError),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tcallbacksToExecute.push(\n\t\t\t\t\t\t\tutils?.onSettled?.({\n\t\t\t\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1) as IS extends Schema ? InferIn<IS> : undefined,\n\t\t\t\t\t\t\t\tbindArgsClientInputs: (bindArgsSchemas.length ? clientInputs.slice(0, -1) : []) as InferInArray<BAS>,\n\t\t\t\t\t\t\t\tresult: {},\n\t\t\t\t\t\t\t\thasRedirected: isRedirectError(frameworkError),\n\t\t\t\t\t\t\t\thasNotFound: isNotFoundError(frameworkError),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tawait Promise.all(callbacksToExecute);\n\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/only-throw-error\n\t\t\t\t\t\tthrow frameworkError;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst actionResult: SafeActionResult<ServerError, IS, BAS, CVE, CBAVE, Data> = {};\n\n\t\t\t\t\tif (typeof middlewareResult.validationErrors !== \"undefined\") {\n\t\t\t\t\t\t// Throw validation errors if either `throwValidationErrors` property at the action or instance level is `true`.\n\t\t\t\t\t\t// If `throwValidationErrors` property at the action is `false`, do not throw validation errors, since it\n\t\t\t\t\t\t// has a higher priority than the instance one.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(utils?.throwValidationErrors || args.throwValidationErrors) &&\n\t\t\t\t\t\t\tutils?.throwValidationErrors !== false\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new ActionValidationError(middlewareResult.validationErrors as CVE);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tactionResult.validationErrors = middlewareResult.validationErrors as CVE;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof middlewareResult.bindArgsValidationErrors !== \"undefined\") {\n\t\t\t\t\t\tactionResult.bindArgsValidationErrors = middlewareResult.bindArgsValidationErrors as CBAVE;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof middlewareResult.serverError !== \"undefined\") {\n\t\t\t\t\t\tif (utils?.throwServerError) {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/only-throw-error\n\t\t\t\t\t\t\tthrow middlewareResult.serverError;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tactionResult.serverError = middlewareResult.serverError;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (middlewareResult.success) {\n\t\t\t\t\t\tif (typeof middlewareResult.data !== \"undefined\") {\n\t\t\t\t\t\t\tactionResult.data = middlewareResult.data as Data;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcallbacksToExecute.push(\n\t\t\t\t\t\t\tutils?.onSuccess?.({\n\t\t\t\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\t\tdata: actionResult.data as Data,\n\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1) as IS extends Schema ? InferIn<IS> : undefined,\n\t\t\t\t\t\t\t\tbindArgsClientInputs: (bindArgsSchemas.length ? clientInputs.slice(0, -1) : []) as InferInArray<BAS>,\n\t\t\t\t\t\t\t\tparsedInput: parsedInputDatas.at(-1) as IS extends Schema ? Infer<IS> : undefined,\n\t\t\t\t\t\t\t\tbindArgsParsedInputs: parsedInputDatas.slice(0, -1) as InferArray<BAS>,\n\t\t\t\t\t\t\t\thasRedirected: false,\n\t\t\t\t\t\t\t\thasNotFound: false,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallbacksToExecute.push(\n\t\t\t\t\t\t\tutils?.onError?.({\n\t\t\t\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\t\tclientInput: clientInputs.at(-1) as IS extends Schema ? InferIn<IS> : undefined,\n\t\t\t\t\t\t\t\tbindArgsClientInputs: (bindArgsSchemas.length ? clientInputs.slice(0, -1) : []) as InferInArray<BAS>,\n\t\t\t\t\t\t\t\terror: actionResult,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// onSettled, if provided, is always executed.\n\t\t\t\t\tcallbacksToExecute.push(\n\t\t\t\t\t\tutils?.onSettled?.({\n\t\t\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\t\t\tclientInput: clientInputs.at(-1) as IS extends Schema ? InferIn<IS> : undefined,\n\t\t\t\t\t\t\tbindArgsClientInputs: (bindArgsSchemas.length ? clientInputs.slice(0, -1) : []) as InferInArray<BAS>,\n\t\t\t\t\t\t\tresult: actionResult,\n\t\t\t\t\t\t\thasRedirected: false,\n\t\t\t\t\t\t\thasNotFound: false,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tawait Promise.all(callbacksToExecute);\n\n\t\t\t\t\treturn actionResult;\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Define the action.\n\t\t * @param serverCodeFn Code that will be executed on the **server side**\n\t\t *\n\t\t * {@link https://next-safe-action.dev/docs/define-actions/instance-methods#action--stateaction See docs for more information}\n\t\t */\n\t\taction: buildAction({ withState: false }).action,\n\n\t\t/**\n\t\t * Define the stateful action. To be used with the [`useStateAction`](https://next-safe-action.dev/docs/execute-actions/hooks/usestateaction) hook.\n\t\t * @param serverCodeFn Code that will be executed on the **server side**\n\t\t *\n\t\t * {@link https://next-safe-action.dev/docs/define-actions/instance-methods#action--stateaction See docs for more information}\n\t\t */\n\t\tstateAction: buildAction({ withState: true }).action,\n\t};\n}\n","export const DEFAULT_SERVER_ERROR_MESSAGE = \"Something went wrong while executing the operation.\";\n\nexport const isError = (error: unknown): error is Error => error instanceof Error;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment */\n\nimport type { Schema, ValidationIssue } from \"./adapters/types\";\nimport type {\n\tFlattenedBindArgsValidationErrors,\n\tFlattenedValidationErrors,\n\tValidationErrors,\n} from \"./validation-errors.types\";\n\n// This function is used internally to build the validation errors object from a list of validation issues.\nexport const buildValidationErrors = <S extends Schema | undefined>(issues: ValidationIssue[]) => {\n\tconst ve: any = {};\n\n\tfor (const issue of issues) {\n\t\tconst { path, message } = issue;\n\n\t\t// When path is undefined or empty, set root errors.\n\t\tif (!path || path.length === 0) {\n\t\t\tve._errors = ve._errors ? [...ve._errors, message] : [message];\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Reference to errors object.\n\t\tlet ref = ve;\n\n\t\t// Set object for the path, if it doesn't exist.\n\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\tconst k = path[i]!;\n\n\t\t\tif (!ref[k]) {\n\t\t\t\tref[k] = {};\n\t\t\t}\n\n\t\t\tref = ref[k];\n\t\t}\n\n\t\t// Key is always the last element of the path.\n\t\tconst key = path[path.length - 1]!;\n\n\t\t// Set error for the current path. If `_errors` array exists, add the message to it.\n\t\tref[key] = ref[key]?._errors\n\t\t\t? {\n\t\t\t\t\t...structuredClone(ref[key]),\n\t\t\t\t\t_errors: [...ref[key]._errors, message],\n\t\t\t\t}\n\t\t\t: { ...structuredClone(ref[key]), _errors: [message] };\n\t}\n\n\treturn ve as ValidationErrors<S>;\n};\n\n// This class is internally used to throw validation errors in action's server code function, using\n// `returnValidationErrors`.\nexport class ActionServerValidationError<S extends Schema> extends Error {\n\tpublic validationErrors: ValidationErrors<S>;\n\tconstructor(validationErrors: ValidationErrors<S>) {\n\t\tsuper(\"Server Action server validation error(s) occurred\");\n\t\tthis.validationErrors = validationErrors;\n\t}\n}\n\n// This class is internally used to throw validation errors in action's server code function, using\n// `returnValidationErrors`.\nexport class ActionValidationError<CVE> extends Error {\n\tpublic validationErrors: CVE;\n\tconstructor(validationErrors: CVE) {\n\t\tsuper(\"Server Action validation error(s) occurred\");\n\t\tthis.validationErrors = validationErrors;\n\t}\n}\n\n/**\n * Return custom validation errors to the client from the action's server code function.\n * Code declared after this function invocation will not be executed.\n * @param schema Input schema\n * @param validationErrors Validation errors object\n *\n * {@link https://next-safe-action.dev/docs/define-actions/validation-errors#returnvalidationerrors See docs for more information}\n */\nexport function returnValidationErrors<\n\tS extends Schema | (() => Promise<Schema>),\n\tAS extends Schema = S extends () => Promise<Schema> ? Awaited<ReturnType<S>> : S, // actual schema\n>(schema: S, validationErrors: ValidationErrors<AS>): never {\n\tthrow new ActionServerValidationError<AS>(validationErrors);\n}\n\n/**\n * Default validation errors format.\n * Emulation of `zod`'s [`format`](https://zod.dev/ERROR_HANDLING?id=formatting-errors) function.\n */\nexport function formatValidationErrors<VE extends ValidationErrors<any>>(validationErrors: VE) {\n\treturn validationErrors;\n}\n\n/**\n * Default bind args validation errors format.\n * Emulation of `zod`'s [`format`](https://zod.dev/ERROR_HANDLING?id=formatting-errors) function.\n */\nexport function formatBindArgsValidationErrors<BAVE extends readonly ValidationErrors<any>[]>(\n\tbindArgsValidationErrors: BAVE\n) {\n\treturn bindArgsValidationErrors;\n}\n\n/**\n * Transform default formatted validation errors into flattened structure.\n * `formErrors` contains global errors, and `fieldErrors` contains errors for each field,\n * one level deep. It discards errors for nested fields.\n * Emulation of `zod`'s [`flatten`](https://zod.dev/ERROR_HANDLING?id=flattening-errors) function.\n * @param {ValidationErrors} [validationErrors] Validation errors object\n *\n * {@link https://next-safe-action.dev/docs/define-actions/validation-errors#flattenvalidationerrors-and-flattenbindargsvalidationerrors-utility-functions See docs for more information}\n */\nexport function flattenValidationErrors<VE extends ValidationErrors<any>>(validationErrors: VE) {\n\tconst flattened: FlattenedValidationErrors<VE> = {\n\t\tformErrors: [],\n\t\tfieldErrors: {},\n\t};\n\n\tfor (const [key, value] of Object.entries<string[] | { _errors: string[] }>(validationErrors ?? {})) {\n\t\tif (key === \"_errors\" && Array.isArray(value)) {\n\t\t\tflattened.formErrors = [...value];\n\t\t} else {\n\t\t\tif (\"_errors\" in value) {\n\t\t\t\tflattened.fieldErrors[key as keyof Omit<VE, \"_errors\">] = [...value._errors];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn flattened;\n}\n\n/**\n * Transform default formatted bind arguments validation errors into flattened structure.\n * `formErrors` contains global errors, and `fieldErrors` contains errors for each field,\n * one level deep. It discards errors for nested fields.\n * Emulation of `zod`'s [`flatten`](https://zod.dev/ERROR_HANDLING?id=flattening-errors) function.\n * @param {ValidationErrors[]} [bindArgsValidationErrors] Bind arguments validation errors object\n *\n * {@link https://next-safe-action.dev/docs/define-actions/validation-errors#flattenvalidationerrors-and-flattenbindargsvalidationerrors-utility-functions See docs for more information}\n */\nexport function flattenBindArgsValidationErrors<BAVE extends readonly ValidationErrors<any>[]>(\n\tbindArgsValidationErrors: BAVE\n) {\n\treturn bindArgsValidationErrors.map((ve) => flattenValidationErrors(ve)) as FlattenedBindArgsValidationErrors<BAVE>;\n}\n\n/**\n * This error is thrown when an action metadata is invalid, i.e. when there's a mismatch between the\n * type of the metadata schema returned from `defineMetadataSchema` and the actual data passed.\n */\nexport class ActionMetadataValidationError<MDS extends Schema | undefined> extends Error {\n\tpublic validationErrors: ValidationErrors<MDS>;\n\n\tconstructor(validationErrors: ValidationErrors<MDS>) {\n\t\tsuper(\"Invalid metadata input. Please be sure to pass metadata via `metadata` method before defining the action.\");\n\t\tthis.name = \"ActionMetadataError\";\n\t\tthis.validationErrors = validationErrors;\n\t}\n}\n\n/**\n * This error is thrown when an action's data (output) is invalid, i.e. when there's a mismatch between the\n * type of the data schema passed to `dataSchema` method and the actual return of the action.\n */\nexport class ActionOutputDataValidationError<DS extends Schema | undefined> extends Error {\n\tpublic validationErrors: ValidationErrors<DS>;\n\n\tconstructor(validationErrors: ValidationErrors<DS>) {\n\t\tsuper(\n\t\t\t\"Invalid action data (output). Please be sure to return data following the shape of the schema passed to `dataSchema` method.\"\n\t\t);\n\t\tthis.name = \"ActionOutputDataError\";\n\t\tthis.validationErrors = validationErrors;\n\t}\n}\n","import type {} from \"zod\";\nimport { actionBuilder } from \"./action-builder\";\nimport type { Infer, Schema, ValidationAdapter } from \"./adapters/types\";\nimport type {\n\tDVES,\n\tMiddlewareFn,\n\tSafeActionClientOpts,\n\tSafeActionUtils,\n\tServerCodeFn,\n\tStateServerCodeFn,\n} from \"./index.types\";\nimport type {\n\tBindArgsValidationErrors,\n\tFlattenedBindArgsValidationErrors,\n\tFlattenedValidationErrors,\n\tHandleBindArgsValidationErrorsShapeFn,\n\tHandleValidationErrorsShapeFn,\n\tValidationErrors,\n} from \"./validation-errors.types\";\n\nexport class SafeActionClient<\n\tServerError,\n\tODVES extends DVES | undefined, // override default validation errors shape\n\tMetadataSchema extends Schema | undefined = undefined,\n\tMD = MetadataSchema extends Schema ? Infer<MetadataSchema> : undefined, // metadata type (inferred from metadata schema)\n\t// eslint-disable-next-line @typescript-eslint/no-empty-object-type\n\tCtx extends object = {},\n\tISF extends (() => Promise<Schema>) | undefined = undefined, // input schema function\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n\tIS extends Schema | undefined = ISF extends Function ? Awaited<ReturnType<ISF>> : undefined, // input schema\n\tOS extends Schema | undefined = undefined, // output schema\n\tconst BAS extends readonly Schema[] = [],\n\tCVE = undefined,\n\tconst CBAVE = undefined,\n> {\n\treadonly #handleServerError: NonNullable<\n\t\tSafeActionClientOpts<ServerError, MetadataSchema, ODVES>[\"handleServerError\"]\n\t>;\n\treadonly #middlewareFns: MiddlewareFn<ServerError, any, any, any>[];\n\treadonly #metadataSchema: MetadataSchema;\n\treadonly #metadata: MD;\n\treadonly #inputSchemaFn: ISF;\n\treadonly #outputSchema: OS;\n\treadonly #ctxType: Ctx;\n\treadonly #bindArgsSchemas: BAS;\n\treadonly #validationAdapter: ValidationAdapter;\n\treadonly #handleValidationErrorsShape: HandleValidationErrorsShapeFn<IS, BAS, MD, Ctx, CVE>;\n\treadonly #handleBindArgsValidationErrorsShape: HandleBindArgsValidationErrorsShapeFn<IS, BAS, MD, Ctx, CBAVE>;\n\treadonly #defaultValidationErrorsShape: ODVES;\n\treadonly #throwValidationErrors: boolean;\n\n\tconstructor(\n\t\topts: {\n\t\t\tmiddlewareFns: MiddlewareFn<ServerError, any, any, any>[];\n\t\t\tmetadataSchema: MetadataSchema;\n\t\t\tmetadata: MD;\n\t\t\tinputSchemaFn: ISF;\n\t\t\toutputSchema: OS;\n\t\t\tbindArgsSchemas: BAS;\n\t\t\tvalidationAdapter: ValidationAdapter;\n\t\t\thandleValidationErrorsShape: HandleValidationErrorsShapeFn<IS, BAS, MD, Ctx, CVE>;\n\t\t\thandleBindArgsValidationErrorsShape: HandleBindArgsValidationErrorsShapeFn<IS, BAS, MD, Ctx, CBAVE>;\n\t\t\tctxType: Ctx;\n\t\t} & Required<\n\t\t\tPick<\n\t\t\t\tSafeActionClientOpts<ServerError, MetadataSchema, ODVES>,\n\t\t\t\t\"handleServerError\" | \"defaultValidationErrorsShape\" | \"throwValidationErrors\"\n\t\t\t>\n\t\t>\n\t) {\n\t\tthis.#middlewareFns = opts.middlewareFns;\n\t\tthis.#handleServerError = opts.handleServerError;\n\t\tthis.#metadataSchema = opts.metadataSchema;\n\t\tthis.#metadata = opts.metadata;\n\t\tthis.#inputSchemaFn = (opts.inputSchemaFn ?? undefined) as ISF;\n\t\tthis.#outputSchema = opts.outputSchema;\n\t\tthis.#bindArgsSchemas = opts.bindArgsSchemas ?? [];\n\t\tthis.#validationAdapter = opts.validationAdapter;\n\t\tthis.#ctxType = opts.ctxType as unknown as Ctx;\n\t\tthis.#handleValidationErrorsShape = opts.handleValidationErrorsShape;\n\t\tthis.#handleBindArgsValidationErrorsShape = opts.handleBindArgsValidationErrorsShape;\n\t\tthis.#defaultValidationErrorsShape = opts.defaultValidationErrorsShape;\n\t\tthis.#throwValidationErrors = opts.throwValidationErrors;\n\t}\n\n\t/**\n\t * Use a middleware function.\n\t * @param middlewareFn Middleware function\n\t *\n\t * {@link https://next-safe-action.dev/docs/define-actions/instance-methods#use See docs for more information}\n\t */\n\tuse<NextCtx extends object>(middlewareFn: MiddlewareFn<ServerError, MD, Ctx, Ctx & NextCtx>) {\n\t\treturn new SafeActionClient({\n\t\t\tmiddlewareFns: [...this.#middlewareFns, middlewareFn],\n\t\t\thandleServerError: this.#handleServerError,\n\t\t\tmetadataSchema: this.#metadataSchema,\n\t\t\tmetadata: this.#metadata,\n\t\t\tinputSchemaFn: this.#inputSchemaFn,\n\t\t\toutputSchema: this.#outputSchema,\n\t\t\tbindArgsSchemas: this.#bindArgsSchemas,\n\t\t\tvalidationAdapter: this.#validationAdapter,\n\t\t\thandleValidationErrorsShape: this.#handleValidationErrorsShape,\n\t\t\thandleBindArgsValidationErrorsShape: this.#handleBindArgsValidationErrorsShape,\n\t\t\tctxType: {} as Ctx & NextCtx,\n\t\t\tdefaultValidationErrorsShape: this.#defaultValidationErrorsShape,\n\t\t\tthrowValidationErrors: this.#throwValidationErrors,\n\t\t});\n\t}\n\n\t/**\n\t * Define metadata for the action.\n\t * @param data Metadata with the same type as the return value of the [`defineMetadataSchema`](https://next-safe-action.dev/docs/define-actions/create-the-client#definemetadataschema) optional initialization function\n\t *\n\t * {@link https://next-safe-action.dev/docs/define-actions/instance-methods#metadata See docs for more information}\n\t */\n\tmetadata(data: MD) {\n\t\treturn new SafeActionClient({\n\t\t\tmiddlewareFns: this.#middlewareFns,\n\t\t\thandleServerError: this.#handleServerError,\n\t\t\tmetadataSchema: this.#metadataSchema,\n\t\t\tmetadata: data,\n\t\t\tinputSchemaFn: this.#inputSchemaFn,\n\t\t\tbindArgsSchemas: this.#bindArgsSchemas,\n\t\t\toutputSchema: this.#outputSchema,\n\t\t\tvalidationAdapter: this.#validationAdapter,\n\t\t\thandleValidationErrorsShape: this.#handleValidationErrorsShape,\n\t\t\thandleBindArgsValidationErrorsShape: this.#handleBindArgsValidationErrorsShape,\n\t\t\tctxType: {} as Ctx,\n\t\t\tdefaultValidationErrorsShape: this.#defaultValidationErrorsShape,\n\t\t\tthrowValidationErrors: this.#throwValidationErrors,\n\t\t});\n\t}\n\n\t/**\n\t * Define the input validation schema for the action.\n\t * @param inputSchema Input validation schema\n\t * @param utils Optional utils object\n\t *\n\t * {@link https://next-safe-action.dev/docs/define-actions/create-the-client#inputschema See docs for more information}\n\t */\n\tschema<\n\t\tOIS extends Schema | ((prevSchema: IS) => Promise<Schema>), // override input schema\n\t\tAIS extends Schema = OIS extends (prevSchema: IS) => Promise<Schema> ? Awaited<ReturnType<OIS>> : OIS, // actual input schema\n\t\tOCVE = ODVES extends \"flattened\" ? FlattenedValidationErrors<ValidationErrors<AIS>> : ValidationErrors<AIS>,\n\t>(\n\t\tinputSchema: OIS,\n\t\tutils?: {\n\t\t\thandleValidationErrorsShape?: HandleValidationErrorsShapeFn<AIS, BAS, MD, Ctx, OCVE>;\n\t\t}\n\t) {\n\t\treturn new SafeActionClient({\n\t\t\tmiddlewareFns: this.#middlewareFns,\n\t\t\thandleServerError: this.#handleServerError,\n\t\t\tmetadataSchema: this.#metadataSchema,\n\t\t\tmetadata: this.#metadata,\n\t\t\t// @ts-expect-error\n\t\t\tinputSchemaFn: (inputSchema[Symbol.toStringTag] === \"AsyncFunction\"\n\t\t\t\t? async () => {\n\t\t\t\t\t\tconst prevSchema = await this.#inputSchemaFn?.();\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\treturn inputSchema(prevSchema as IS) as AIS;\n\t\t\t\t\t}\n\t\t\t\t: async () => inputSchema) as ISF,\n\t\t\tbindArgsSchemas: this.#bindArgsSchemas,\n\t\t\toutputSchema: this.#outputSchema,\n\t\t\tvalidationAdapter: this.#validationAdapter,\n\t\t\thandleValidationErrorsShape: (utils?.handleValidationErrorsShape ??\n\t\t\t\tthis.#handleValidationErrorsShape) as HandleValidationErrorsShapeFn<AIS, BAS, MD, Ctx, OCVE>,\n\t\t\thandleBindArgsValidationErrorsShape: this\n\t\t\t\t.#handleBindArgsValidationErrorsShape as HandleBindArgsValidationErrorsShapeFn<AIS, BAS, MD, Ctx, CBAVE>,\n\t\t\tctxType: {} as Ctx,\n\t\t\tdefaultValidationErrorsShape: this.#defaultValidationErrorsShape,\n\t\t\tthrowValidationErrors: this.#throwValidationErrors,\n\t\t});\n\t}\n\n\t/**\n\t * Define the bind args input validation schema for the action.\n\t * @param bindArgsSchemas Bind args input validation schemas\n\t * @param utils Optional utils object\n\t *\n\t * {@link https://next-safe-action.dev/docs/define-actions/instance-methods#bindargsschemas See docs for more information}\n\t */\n\tbindArgsSchemas<\n\t\tconst OBAS extends readonly Schema[],\n\t\tOCBAVE = ODVES extends \"flattened\"\n\t\t\t? FlattenedBindArgsValidationErrors<BindArgsValidationErrors<OBAS>>\n\t\t\t: BindArgsValidationErrors<OBAS>,\n\t>(\n\t\tbindArgsSchemas: OBAS,\n\t\tutils?: { handleBindArgsValidationErrorsShape?: HandleBindArgsValidationErrorsShapeFn<IS, OBAS, MD, Ctx, OCBAVE> }\n\t) {\n\t\treturn new SafeActionClient({\n\t\t\tmiddlewareFns: this.#middlewareFns,\n\t\t\thandleServerError: this.#handleServerError,\n\t\t\tmetadataSchema: this.#metadataSchema,\n\t\t\tmetadata: this.#metadata,\n\t\t\tinputSchemaFn: this.#inputSchemaFn,\n\t\t\tbindArgsSchemas,\n\t\t\toutputSchema: this.#outputSchema,\n\t\t\tvalidationAdapter: this.#validationAdapter,\n\t\t\thandleValidationErrorsShape: this.#handleValidationErrorsShape as unknown as HandleValidationErrorsShapeFn<\n\t\t\t\tIS,\n\t\t\t\tOBAS,\n\t\t\t\tMD,\n\t\t\t\tCtx,\n\t\t\t\tCVE\n\t\t\t>,\n\t\t\thandleBindArgsValidationErrorsShape: (utils?.handleBindArgsValidationErrorsShape ??\n\t\t\t\tthis.#handleBindArgsValidationErrorsShape) as HandleBindArgsValidationErrorsShapeFn<IS, OBAS, MD, Ctx, OCBAVE>,\n\t\t\tctxType: {} as Ctx,\n\t\t\tdefaultValidationErrorsShape: this.#defaultValidationErrorsShape,\n\t\t\tthrowValidationErrors: this.#throwValidationErrors,\n\t\t});\n\t}\n\n\t/**\n\t * Define the output data validation schema for the action.\n\t * @param schema Output data validation schema\n\t *\n\t * {@link https://next-safe-action.dev/docs/define-actions/create-the-client#outputschema See docs for more information}\n\t */\n\toutputSchema<OOS extends Schema>(dataSchema: OOS) {\n\t\treturn new SafeActionClient({\n\t\t\tmiddlewareFns: this.#middlewareFns,\n\t\t\thandleServerError: this.#handleServerError,\n\t\t\tmetadataSchema: this.#metadataSchema,\n\t\t\tmetadata: this.#metadata,\n\t\t\tinputSchemaFn: this.#inputSchemaFn,\n\t\t\tbindArgsSchemas: this.#bindArgsSchemas,\n\t\t\toutputSchema: dataSchema,\n\t\t\tvalidationAdapter: this.#validationAdapter,\n\t\t\thandleValidationErrorsShape: this.#handleValidationErrorsShape,\n\t\t\thandleBindArgsValidationErrorsShape: this.#handleBindArgsValidationErrorsShape,\n\t\t\tctxType: {} as Ctx,\n\t\t\tdefaultValidationErrorsShape: this.#defaultValidationErrorsShape,\n\t\t\tthrowValidationErrors: this.#throwValidationErrors,\n\t\t});\n\t}\n\n\t/**\n\t * Define the action.\n\t * @param serverCodeFn Code that will be executed on the **server side**\n\t * @param [cb] Optional callbacks that will be called after action execution, on the server.\n\t *\n\t * {@link https://next-safe-action.dev/docs/define-actions/instance-methods#action--stateaction See docs for more information}\n\t */\n\taction<Data extends OS extends Schema ? Infer<OS> : any>(\n\t\tserverCodeFn: ServerCodeFn<MD, Ctx, IS, BAS, Data>,\n\t\tutils?: SafeActionUtils<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>\n\t) {\n\t\treturn actionBuilder({\n\t\t\thandleServerError: this.#handleServerError,\n\t\t\tmiddlewareFns: this.#middlewareFns,\n\t\t\tctxType: this.#ctxType,\n\t\t\tmetadataSchema: this.#metadataSchema,\n\t\t\tmetadata: this.#metadata,\n\t\t\tinputSchemaFn: this.#inputSchemaFn,\n\t\t\tbindArgsSchemas: this.#bindArgsSchemas,\n\t\t\toutputSchema: this.#outputSchema,\n\t\t\tvalidationAdapter: this.#validationAdapter,\n\t\t\thandleValidationErrorsShape: this.#handleValidationErrorsShape,\n\t\t\thandleBindArgsValidationErrorsShape: this.#handleBindArgsValidationErrorsShape,\n\t\t\tthrowValidationErrors: this.#throwValidationErrors,\n\t\t}).action(serverCodeFn, utils);\n\t}\n\n\t/**\n\t * Define the stateful action.\n\t * To be used with the [`useStateAction`](https://next-safe-action.dev/docs/execute-actions/hooks/usestateaction) hook.\n\t * @param serverCodeFn Code that will be executed on the **server side**\n\t * @param [cb] Optional callbacks that will be called after action execution, on the server.\n\t *\n\t * {@link https://next-safe-action.dev/docs/define-actions/instance-methods#action--stateaction See docs for more information}\n\t */\n\tstateAction<Data extends OS extends Schema ? Infer<OS> : any>(\n\t\tserverCodeFn: StateServerCodeFn<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>,\n\t\tutils?: SafeActionUtils<ServerError, MD, Ctx, IS, BAS, CVE, CBAVE, Data>\n\t) {\n\t\treturn actionBuilder({\n\t\t\thandleServerError: this.#handleServerError,\n\t\t\tmiddlewareFns: this.#middlewareFns,\n\t\t\tctxType: this.#ctxType,\n\t\t\tmetadataSchema: this.#metadataSchema,\n\t\t\tmetadata: this.#metadata,\n\t\t\tinputSchemaFn: this.#inputSchemaFn,\n\t\t\tbindArgsSchemas: this.#bindArgsSchemas,\n\t\t\toutputSchema: this.#outputSchema,\n\t\t\tvalidationAdapter: this.#validationAdapter,\n\t\t\thandleValidationErrorsShape: this.#handleValidationErrorsShape,\n\t\t\thandleBindArgsValidationErrorsShape: this.#handleBindArgsValidationErrorsShape,\n\t\t\tthrowValidationErrors: this.#throwValidationErrors,\n\t\t}).stateAction(serverCodeFn, utils);\n\t}\n\n\tasync schemas() {\n\t\tconst inputSchema = (await this.#inputSchemaFn?.()) as IS;\n\t\treturn {\n\t\t\tmetadata: this.#metadata,\n\t\t\tinputSchema: inputSchema,\n\t\t\toutputSchema: this.#outputSchema,\n\t\t};\n\t}\n}\n","import type { MiddlewareFn } from \"./index.types\";\n\n/**\n * Creates a standalone middleware function. It accepts a generic object with optional `serverError`, `ctx` and `metadata`\n * properties, if you need one or all of them to be typed. The type for each property that is passed as generic is the\n * **minimum** shape required to define the middleware function, but it can also be larger than that.\n *\n * {@link https://next-safe-action.dev/docs/define-actions/middleware#create-standalone-middleware-with-createmiddleware See docs for more information}\n */\nexport const createMiddleware = <BaseData extends { serverError?: any; ctx?: object; metadata?: any }>() => {\n\treturn {\n\t\tdefine: <NextCtx extends object>(\n\t\t\tmiddlewareFn: MiddlewareFn<\n\t\t\t\tBaseData extends { serverError: infer SE } ? SE : any,\n\t\t\t\tBaseData extends { metadata: infer MD } ? MD : any,\n\t\t\t\tBaseData extends { ctx: infer Ctx extends object } ? Ctx : object,\n\t\t\t\tNextCtx\n\t\t\t>\n\t\t) => middlewareFn,\n\t};\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-function-type */\nimport { NextResponse } from \"next/server\";\nimport type { SafeActionResult } from \"..\";\n\ntype RouteConfig = {\n\thandler: Function;\n\tclient: any;\n};\n\ntype RouteMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n\ntype Routes = {\n\t[path: string]: {\n\t\t[method in RouteMethod]?: RouteConfig;\n\t};\n};\n\nfunction matchRoute(pathname: string, routePath: string) {\n\tconst pathParts = pathname.split(\"/\");\n\tconst routeParts = routePath.split(\"/\");\n\n\tif (pathParts.length !== routeParts.length) return false;\n\n\tconst pathParams: Record<string, string> = {};\n\tfor (let i = 0; i < routeParts.length; i++) {\n\t\tconst routePart = routeParts[i];\n\t\tconst pathPart = pathParts[i];\n\n\t\tif (routePart?.startsWith(\"{\") && routePart.endsWith(\"}\")) {\n\t\t\t// Dynamic segment (e.g., '{postId}')\n\t\t\tconst paramName = routePart.slice(1, -1); // Get the name inside the brackets\n\t\t\tif (pathPart) {\n\t\t\t\tpathParams[paramName] = pathPart;\n\t\t\t}\n\t\t} else if (routePart !== pathPart) {\n\t\t\t// If the static parts don't match, it's not the right route\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn pathParams;\n}\n\nexport const createOpenApiServerActionRouter = ({ pathPrefix = \"\" }) => {\n\tconst routes: Routes = {};\n\n\tconst router = {\n\t\tget(path: string, handler: Function, client: any) {\n\t\t\troutes[pathPrefix + path] = {\n\t\t\t\t...routes[pathPrefix + path],\n\t\t\t\tGET: { handler, client },\n\t\t\t};\n\t\t\treturn router;\n\t\t},\n\t\tpost(path: string, handler: Function, client: any) {\n\t\t\troutes[pathPrefix + path] = {\n\t\t\t\t...routes[pathPrefix + path],\n\t\t\t\tPOST: { handler, client },\n\t\t\t};\n\t\t\treturn router;\n\t\t},\n\t\tput(path: string, handler: Function, client: any) {\n\t\t\troutes[pathPrefix + path] = {\n\t\t\t\t...routes[pathPrefix + path],\n\t\t\t\tPUT: { handler, client },\n\t\t\t};\n\t\t\treturn router;\n\t\t},\n\t\tdelete(path: string, handler: Function, client: any) {\n\t\t\troutes[pathPrefix + path] = {\n\t\t\t\t...routes[pathPrefix + path],\n\t\t\t\tDELETE: { handler, client },\n\t\t\t};\n\t\t\treturn router;\n\t\t},\n\t\tgetRoutes() {\n\t\t\treturn routes;\n\t\t},\n\t};\n\n\treturn router;\n};\n\nfunction handleResult(result: SafeActionResult<any, undefined, []>) {\n\tif (result.data) {\n\t\treturn NextResponse.json(result.data, { status: 200 });\n\t}\n\n\tif (result.serverError) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tconst code = typeof result.serverError === \"object\" ? result.serverError?.code || 500 : 500;\n\n\t\tconst responseBody = typeof result.serverError === \"object\" ? result.serverError : { message: result.serverError };\n\n\t\treturn NextResponse.json(responseBody, { status: code });\n\t}\n\n\treturn NextResponse.json({ message: \"Unknown error\" }, { status: 500 });\n}\n\nexport function createRouteHandlers(router: ReturnType<typeof createOpenApiServerActionRouter>) {\n\tconst routes = router.getRoutes();\n\n\tconst findRoute = (pathname: string, method: RouteMethod) => {\n\t\tfor (const routePath in routes) {\n\t\t\tconst pathParams = matchRoute(pathname, routePath);\n\t\t\tif (pathParams && routes[routePath]?.[method]) {\n\t\t\t\treturn { handler: routes[routePath][method].handler, pathParams };\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\treturn {\n\t\tasync GET(req: Request) {\n\t\t\tconst url = new URL(req.url);\n\t\t\tconst route = findRoute(url.pathname, \"GET\");\n\t\t\tif (route) {\n\t\t\t\tconst queryParams = Object.fromEntries(url.searchParams.entries());\n\n\t\t\t\tconst result = (await route.handler({\n\t\t\t\t\t...route.pathParams,\n\t\t\t\t\t...queryParams,\n\t\t\t\t})) as SafeActionResult<any, undefined, []>;\n\n\t\t\t\treturn handleResult(result);\n\t\t\t}\n\n\t\t\treturn NextResponse.json({ message: \"Route not found\" }, { status: 404 });\n\t\t},\n\t\tasync POST(req: Request) {\n\t\t\tconst url = new URL(req.url);\n\n\t\t\tconst route = findRoute(url.pathname, \"POST\");\n\t\t\tif (route) {\n\t\t\t\tconst queryParams = Object.fromEntries(url.searchParams.entries());\n\t\t\t\tconst body = (await req.json()) as Record<string, unknown>;\n\n\t\t\t\tconst result = (await route.handler({\n\t\t\t\t\t...route.pathParams,\n\t\t\t\t\t...queryParams,\n\t\t\t\t\t...body,\n\t\t\t\t})) as SafeActionResult<any, undefined, []>;\n\n\t\t\t\treturn handleResult(result);\n\t\t\t}\n\n\t\t\treturn NextResponse.json({ message: \"Route not found\" }, { status: 404 });\n\t\t},\n\t\tasync PUT(req: Request) {\n\t\t\tconst url = new URL(req.url);\n\t\t\tconst route = findRoute(url.pathname, \"PUT\");\n\n\t\t\tif (route) {\n\t\t\t\tconst queryParams = Object.fromEntries(url.searchParams.entries());\n\t\t\t\tconst body = (await req.json()) as Record<string, unknown>;\n\n\t\t\t\tconst result = (await route.handler({\n\t\t\t\t\t...route.pathParams,\n\t\t\t\t\t...queryParams,\n\t\t\t\t\t...body,\n\t\t\t\t})) as SafeActionResult<any, undefined, []>;\n\n\t\t\t\treturn handleResult(result);\n\t\t\t}\n\n\t\t\treturn NextResponse.json({ message: \"Route not found\" }, { status: 404 });\n\t\t},\n\t\tasync DELETE(req: Request) {\n\t\t\tconst url = new URL(req.url);\n\t\t\tconst route = findRoute(url.pathname, \"DELETE\");\n\n\t\t\tif (route) {\n\t\t\t\tconst queryParams = Object.fromEntries(url.searchParams.entries());\n\t\t\t\tconst result = (await route.handler({\n\t\t\t\t\t...route.pathParams,\n\t\t\t\t\t...queryParams,\n\t\t\t\t})) as SafeActionResult<any, undefined, []>;\n\n\t\t\t\treturn handleResult(result);\n\t\t\t}\n\n\t\t\treturn NextResponse.json({ message: \"Route not found\" }, { status: 404 });\n\t\t},\n\t};\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport type { OpenAPIV3 } from \"openapi-types\";\nimport { z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport type { createOpenApiServerActionRouter } from \"./router\";\nimport type { OpenApiContentType } from \"./utils\";\nimport {\n\tgetPathParameters,\n\tinstanceofZodTypeCoercible,\n\tinstanceofZodTypeLikeString,\n\tinstanceofZodTypeLikeVoid,\n\tinstanceofZodTypeObject,\n\tinstanceofZodTypeOptional,\n\tunwrapZodType,\n\tzodSupportsCoerce,\n} from \"./utils\";\n\n// Constants\nconst securitySchemes = {\n\tAuthorization: {\n\t\ttype: \"http\",\n\t\tscheme: \"bearer\",\n\t},\n};\n\n// Helper functions\nconst zodSchemaToOpenApiSchemaObject = (zodSchema: z.ZodType): OpenAPIV3.SchemaObject => {\n\treturn zodToJsonSchema(zodSchema, {\n\t\ttarget: \"openApi3\",\n\t\t$refStrategy: \"none\",\n\t}) as OpenAPIV3.SchemaObject;\n};\n\nconst instanceofZodType = (type: any): type is z.ZodTypeAny => {\n\treturn !!type?._def?.typeName;\n};\n\ntype OpenApiInfo = {\n\ttitle: string;\n\tdescription: string;\n\tversion: string;\n\turls: string[];\n};\n\n// Main function\nexport async function generateOpenApiInfo(\n\trouter: ReturnType<typeof createOpenApiServerActionRouter>,\n\t{ title, description, version, urls }: OpenApiInfo\n) {\n\tconst routes = router.getRoutes();\n\tconst paths: Record<string, any> = {};\n\n\tfor (const route in routes) {\n\t\tconst routeConfig = routes[route];\n\t\tif (!routeConfig) continue;\n\n\t\tpaths[route] = {};\n\n\t\t// Handle GET, POST, PUT, DELETE methods\n\t\tconst methods = [\"GET\", \"POST\", \"PUT\", \"DELETE\"] as const;\n\t\tfor (const method of methods) {\n\t\t\tif (routeConfig[method]) {\n\t\t\t\tpaths[route][method.toLowerCase()] = await generateMethodSpec(method, route, routeConfig[method]);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\topenapi: \"3.0.1\",\n\t\tinfo: {\n\t\t\ttitle,\n\t\t\tversion,\n\t\t\tdescription,\n\t\t},\n\t\tservers: urls.map((url) => ({ url })),\n\t\tcomponents: {\n\t\t\tsecuritySchemes,\n\t\t\tresponses: { error: errorResponseObject },\n\t\t},\n\t\tpaths,\n\t};\n}\n\n// Helper functions for generating method specifications\nasync function generateMethodSpec(method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\", route: string, config: any) {\n\tconst schemas = await config.client.schemas();\n\tconst pathParams = getPathParameters(route);\n\n\tconst baseSpec = {\n\t\toperationId: route.replace(/\\./g, \"-\"),\n\t\tsummary: schemas.metadata?.name || \"Name Metadata missing\",\n\t\tdescription: schemas.metadata?.description || \"Description Metadata missing\",\n\t\tsecurity: Object.keys(securitySchemes).map((name) => ({ [name]: [] })),\n\t\ttags: schemas.metadata?.tags || [],\n\t\tresponses: getResponsesObject(schemas.outputSchema),\n\t};\n\n\tif (method === \"GET\") {\n\t\treturn {\n\t\t\t...baseSpec,\n\t\t\tparameters: getParameterObjects(schemas.inputSchema, pathParams, \"all\"),\n\t\t};\n\t} else if (method === \"POST\" || method === \"PUT\") {\n\t\treturn {\n\t\t\t...baseSpec,\n\t\t\trequestBody: getRequestBodyObject(schemas.inputSchema, pathParams, [\"application/json\"]),\n\t\t\tparameters:\n\t\t\t\tmethod === \"POST\"\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"a\",\n\t\t\t\t\t\t\t\tin: \"path\",\n\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\tschema: zodSchemaToOpenApiSchemaObject(z.string()),\n\t\t\t\t\t\t\t\tdescription: \"test\",\n\t\t\t\t\t\t\t\texample: \"test\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t: undefined,\n\t\t};\n\t} else {\n\t\treturn baseSpec;\n\t}\n}\n\nconst errorResponseObject: OpenAPIV3.ResponseObject = {\n\tdescription: \"Error response\",\n\tcontent: {\n\t\t\"application/json\": {\n\t\t\tschema: zodSchemaToOpenApiSchemaObject(\n\t\t\t\tz.object({\n\t\t\t\t\tmessage: z.string(),\n\t\t\t\t\tcode: z.string(),\n\t\t\t\t})\n\t\t\t),\n\t\t},\n\t},\n};\n\nconst getRequestBodyObject = (\n\tschema: unknown,\n\tpathParameters: string[],\n\tcontentTypes: OpenApiContentType[]\n): OpenAPIV3.RequestBodyObject | undefined => {\n\tif (!instanceofZodType(schema)) {\n\t\tthrow new Error(\"Input parser expects a Zod validator (request body)\");\n\t}\n\n\tconst isRequired = !schema.isOptional();\n\tconst unwrappedSchema = unwrapZodType(schema, true);\n\n\tif (pathParameters.length === 0 && instanceofZodTypeLikeVoid(unwrappedSchema)) {\n\t\treturn undefined;\n\t}\n\n\t// if all keys are path parameters\n\tif (pathParameters.length > 0 && Object.keys(unwrappedSchema).length === 0) {\n\t\treturn undefined;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\tconst openApiSchemaObject = zodSchemaToOpenApiSchemaObject(unwrappedSchema);\n\tconst content: OpenAPIV3.RequestBodyObject[\"content\"] = {};\n\tfor (const contentType of contentTypes) {\n\t\tcontent[contentType] = {\n\t\t\tschema: openApiSchemaObject,\n\t\t};\n\t}\n\n\treturn {\n\t\trequired: isRequired,\n\t\tcontent,\n\t};\n};\n\nconst getResponsesObject = (\n\tschema: unknown,\n\texample?: Record<string, any>,\n\theaders?: Record<string, OpenAPIV3.HeaderObject | OpenAPIV3.ReferenceObject>\n): OpenAPIV3.ResponsesObject => {\n\tif (schema !== undefined && !instanceofZodType(schema)) {\n\t\tthrow new Error(\"Output parser must be a ZodObject\");\n\t}\n\n\tconst successResponseObject: OpenAPIV3.ResponseObject = {\n\t\tdescription: \"Successful response\",\n\t\theaders: headers,\n\t\tcontent: {\n\t\t\t\"application/json\": {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tschema: zodSchemaToOpenApiSchemaObject(schema || z.unknown()),\n\t\t\t\texample,\n\t\t\t},\n\t\t},\n\t};\n\n\treturn {\n\t\t200: successResponseObject,\n\t\t500: {\n\t\t\t$ref: \"#/components/responses/error\",\n\t\t},\n\t};\n};\n\nconst getParameterObjects = (\n\tschema: unknown,\n\tpathParameters: string[],\n\tinType: \"all\" | \"path\" | \"query\"\n): OpenAPIV3.ParameterObject[] | undefined => {\n\tif (!instanceofZodType(schema)) {\n\t\tthrow new Error(\"Input parser expects a Zod validator\");\n\t}\n\n\tconst isRequired = !schema.isOptional();\n\tconst unwrappedSchema = unwrapZodType(schema, true);\n\n\tif (pathParameters.length === 0 && instanceofZodTypeLikeVoid(unwrappedSchema)) {\n\t\treturn undefined;\n\t}\n\n\tif (!instanceofZodTypeObject(unwrappedSchema)) {\n\t\tthrow new Error(\"Input parser must be a ZodObject\");\n\t}\n\n\tconst shape = unwrappedSchema.shape;\n\tconst shapeKeys = Object.keys(shape);\n\n\tfor (const pathParameter of pathParameters) {\n\t\tif (!shapeKeys.includes(pathParameter)) {\n\t\t\tthrow new Error(`Input parser expects key from path: \"${pathParameter}\"`);\n\t\t}\n\t}\n\n\treturn shapeKeys\n\t\t.filter((shapeKey) => {\n\t\t\tconst isPathParameter = pathParameters.includes(shapeKey);\n\t\t\tif (inType === \"path\") {\n\t\t\t\treturn isPathParameter;\n\t\t\t} else if (inType === \"query\") {\n\t\t\t\treturn !isPathParameter;\n\t\t\t}\n\t\t\treturn true;\n\t\t})\n\t\t.map((shapeKey) => {\n\t\t\tlet shapeSchema = shape[shapeKey]!;\n\t\t\tconst isShapeRequired = !shapeSchema.isOptional();\n\t\t\tconst isPathParameter = pathParameters.includes(shapeKey);\n\n\t\t\tif (!instanceofZodTypeLikeString(shapeSchema)) {\n\t\t\t\tif (zodSupportsCoerce) {\n\t\t\t\t\tif (!instanceofZodTypeCoercible(shapeSchema)) {\n\t\t\t\t\t\tthrow new Error(`Input parser key: \"${shapeKey}\" must be ZodString`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`Input parser key: \"${shapeKey}\" must be ZodString`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (instanceofZodTypeOptional(shapeSchema)) {\n\t\t\t\tif (isPathParameter) {\n\t\t\t\t\tthrow new Error(`Path parameter: \"${shapeKey}\" must not be optional`);\n\t\t\t\t}\n\t\t\t\tshapeSchema = shapeSchema.unwrap();\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tconst { description, ...openApiSchemaObject } = zodSchemaToOpenApiSchemaObject(shapeSchema);\n\n\t\t\treturn {\n\t\t\t\tname: shapeKey,\n\t\t\t\tin: isPathParameter ? \"path\" : \"query\",\n\t\t\t\trequired: isPathParameter || (isRequired && isShapeRequired),\n\t\t\t\tschema: openApiSchemaObject,\n\t\t\t\tdescription: description,\n\t\t\t\t// example: example?.[shapeKey]\n\t\t\t};\n\t\t});\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { z } from \"zod\";\n\nexport const acceptsRequestBody = (method: string) => {\n\tif (method === \"GET\" || method === \"DELETE\") {\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nexport const normalizePath = (path: string) => {\n\treturn `/${path.replace(/^\\/|\\/$/g, \"\")}`;\n};\n\nexport const getPathParameters = (path: string) => {\n\treturn Array.from(path.matchAll(/\\{(.+?)\\}/g)).map(([_, key]) => key!);\n};\n\nexport const preparePathForMatching = (path: string) => {\n\treturn path.replace(/\\{/g, \":\").replace(/\\}/g, \"\");\n};\n\nexport const getPathRegExp = (path: string) => {\n\tconst groupedExp = path.replace(/\\{(.+?)\\}/g, (_, key: string) => `(?<${key}>[^/]+)`);\n\treturn new RegExp(`^${groupedExp}$`, \"i\");\n};\n\nconst FORM_DATA_CONTENT_TYPE = \"application/x-www-form-urlencoded\";\nconst MULTI_PART_CONTENT_TYPE = \"multipart/form-data\";\nconst JSON_CONTENT_TYPE = \"application/json\";\nconst TEXT_PLAIN = \"text/plain\";\n\nexport type OpenApiContentType =\n\t| typeof FORM_DATA_CONTENT_TYPE\n\t| typeof JSON_CONTENT_TYPE\n\t| typeof MULTI_PART_CONTENT_TYPE\n\t| typeof TEXT_PLAIN\n\t| (string & {});\n\nexport const instanceofZodTypeObject = (type: z.ZodTypeAny): type is z.ZodObject<z.ZodRawShape> => {\n\treturn instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodObject);\n};\n\nexport const instanceofZodTypeKind = <Z extends z.ZodFirstPartyTypeKind>(\n\ttype: z.ZodTypeAny,\n\tzodTypeKind: Z\n): type is InstanceType<(typeof z)[Z]> => {\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\treturn type?._def?.typeName === zodTypeKind;\n};\n\nexport const unwrapZodType = (type: z.ZodTypeAny, unwrapPreprocess: boolean): z.ZodTypeAny => {\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodOptional)) {\n\t\treturn unwrapZodType(type.unwrap(), unwrapPreprocess);\n\t}\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodDefault)) {\n\t\treturn unwrapZodType(type.removeDefault(), unwrapPreprocess);\n\t}\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodLazy)) {\n\t\treturn unwrapZodType(type._def.getter(), unwrapPreprocess);\n\t}\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodEffects)) {\n\t\tif (type._def.effect.type === \"refinement\") {\n\t\t\treturn unwrapZodType(type._def.schema, unwrapPreprocess);\n\t\t}\n\t\tif (type._def.effect.type === \"transform\") {\n\t\t\treturn unwrapZodType(type._def.schema, unwrapPreprocess);\n\t\t}\n\t\tif (unwrapPreprocess && type._def.effect.type === \"preprocess\") {\n\t\t\treturn unwrapZodType(type._def.schema, unwrapPreprocess);\n\t\t}\n\t}\n\n\treturn type;\n};\n\nexport type ZodTypeLikeVoid = z.ZodVoid | z.ZodUndefined | z.ZodNever;\n\nexport const instanceofZodTypeLikeVoid = (type: z.ZodTypeAny): type is ZodTypeLikeVoid => {\n\treturn (\n\t\tinstanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodVoid) ||\n\t\tinstanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodUndefined) ||\n\t\tinstanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodNever)\n\t);\n};\n\ntype NativeEnumType = {\n\t[k: string]: string | number;\n\t[nu: number]: string;\n};\n\nexport type ZodTypeLikeString =\n\t| z.ZodString\n\t| z.ZodOptional<ZodTypeLikeString>\n\t| z.ZodDefault<ZodTypeLikeString>\n\t| z.ZodEffects<ZodTypeLikeString, unknown, unknown>\n\t| z.ZodUnion<[ZodTypeLikeString, ...ZodTypeLikeString[]]>\n\t| z.ZodIntersection<ZodTypeLikeString, ZodTypeLikeString>\n\t| z.ZodLazy<ZodTypeLikeString>\n\t| z.ZodLiteral<string>\n\t| z.ZodEnum<[string, ...string[]]>\n\t| z.ZodNativeEnum<NativeEnumType>;\n\nexport const instanceofZodTypeLikeString = (_type: z.ZodTypeAny): _type is ZodTypeLikeString => {\n\tconst type = unwrapZodType(_type, false);\n\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodEffects)) {\n\t\tif (type._def.effect.type === \"preprocess\") {\n\t\t\treturn true;\n\t\t}\n\t}\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodUnion)) {\n\t\treturn !type._def.options.some((option) => !instanceofZodTypeLikeString(option));\n\t}\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodIntersection)) {\n\t\treturn instanceofZodTypeLikeString(type._def.left) && instanceofZodTypeLikeString(type._def.right);\n\t}\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodLiteral)) {\n\t\treturn typeof type._def.value === \"string\";\n\t}\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodEnum)) {\n\t\treturn true;\n\t}\n\tif (instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodNativeEnum)) {\n\t\treturn !Object.values(type._def.values).some((value) => typeof value === \"number\");\n\t}\n\treturn instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodString);\n};\n\nexport const zodSupportsCoerce = \"coerce\" in z;\n\nexport type ZodTypeCoercible = z.ZodNumber | z.ZodBoolean | z.ZodBigInt | z.ZodDate;\n\nexport const instanceofZodTypeCoercible = (_type: z.ZodTypeAny): _type is ZodTypeCoercible => {\n\tconst type = unwrapZodType(_type, false);\n\treturn (\n\t\tinstanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodNumber) ||\n\t\tinstanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodBoolean) ||\n\t\tinstanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodBigInt) ||\n\t\tinstanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodDate)\n\t);\n};\n\nexport const instanceofZodTypeOptional = (type: z.ZodTypeAny): type is z.ZodOptional<z.ZodTypeAny> => {\n\treturn instanceofZodTypeKind(type, z.ZodFirstPartyTypeKind.ZodOptional);\n};\n","import type { Infer, Schema } from \"./adapters/types\";\nimport { zodAdapter } from \"./adapters/zod\";\nimport type { DVES, SafeActionClientOpts } from \"./index.types\";\nimport { SafeActionClient } from \"./safe-action-client\";\nimport { DEFAULT_SERVER_ERROR_MESSAGE } from \"./utils\";\nimport {\n\tflattenBindArgsValidationErrors,\n\tflattenValidationErrors,\n\tformatBindArgsValidationErrors,\n\tformatValidationErrors,\n} from \"./validation-errors\";\n\nexport { createMiddleware } from \"./middleware\";\nexport { DEFAULT_SERVER_ERROR_MESSAGE } from \"./utils\";\nexport {\n\tActionMetadataValidationError,\n\tActionOutputDataValidationError,\n\tActionValidationError,\n\tflattenBindArgsValidationErrors,\n\tflattenValidationErrors,\n\tformatBindArgsValidationErrors,\n\tformatValidationErrors,\n\treturnValidationErrors,\n} from \"./validation-errors\";\n\nexport type * from \"./index.types\";\nexport { createOpenApiServerActionRouter, createRouteHandlers } from \"./open-api/router\";\nexport { generateOpenApiInfo } from \"./open-api/spec\";\nexport type * from \"./validation-errors.types\";\n\n/**\n * Create a new safe action client.\n * Note: this client only works with Zod as the validation library.\n * @param createOpts Initialization options\n *\n * {@link https://next-safe-action.dev/docs/define-actions/create-the-client#initialization-options See docs for more information}\n */\nexport const createSafeActionClient = <\n\tODVES extends DVES | undefined = undefined,\n\tServerError = string,\n\tMetadataSchema extends Schema | undefined = undefined,\n>(\n\tcreateOpts?: SafeActionClientOpts<ServerError, MetadataSchema, ODVES>\n) => {\n\t// If `handleServerError` is provided, use it, otherwise default to log to console and generic error message.\n\tconst handleServerError: NonNullable<SafeActionClientOpts<ServerError, MetadataSchema, ODVES>[\"handleServerError\"]> =\n\t\tcreateOpts?.handleServerError ||\n\t\t((e) => {\n\t\t\tconsole.error(\"Action error:\", e.message);\n\t\t\treturn DEFAULT_SERVER_ERROR_MESSAGE as ServerError;\n\t\t});\n\n\treturn new SafeActionClient({\n\t\tmiddlewareFns: [async ({ next }) => next({ ctx: {} })],\n\t\thandleServerError,\n\t\tinputSchemaFn: undefined,\n\t\tbindArgsSchemas: [],\n\t\toutputSchema: undefined,\n\t\tvalidationAdapter: createOpts?.validationAdapter ?? zodAdapter(), // use zod adapter by default\n\t\tctxType: {},\n\t\tmetadataSchema: (createOpts?.defineMetadataSchema?.() ?? undefined) as MetadataSchema,\n\t\tmetadata: undefined as MetadataSchema extends Schema ? Infer<MetadataSchema> : undefined,\n\t\tdefaultValidationErrorsShape: (createOpts?.defaultValidationErrorsShape ?? \"formatted\") as ODVES,\n\t\tthrowValidationErrors: Boolean(createOpts?.throwValidationErrors),\n\t\thandleValidationErrorsShape:\n\t\t\tcreateOpts?.defaultValidationErrorsShape === \"flattened\" ? flattenValidationErrors : formatValidationErrors,\n\t\thandleBindArgsValidationErrorsShape:\n\t\t\tcreateOpts?.defaultValidationErrorsShape === \"flattened\"\n\t\t\t\t? flattenBindArgsValidationErrors\n\t\t\t\t: formatBindArgsValidationErrors,\n\t});\n};\n"],"mappings":"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","names":["ObjectType","z","z"]}