{"version":3,"file":"index.mjs","names":["#args"],"sources":["../src/standard-schema.ts","../src/utils.ts","../src/validation-errors.ts","../src/action-builder.ts","../src/safe-action-client.ts","../src/middleware.ts","../src/index.ts"],"sourcesContent":["/** The Standard Schema interface. */\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n\t/** The Standard Schema properties. */\n\treadonly \"~standard\": StandardSchemaV1.Props<Input, Output>;\n}\n\n// oxlint-disable-next-line typescript/no-namespace\nexport declare namespace StandardSchemaV1 {\n\t/** The Standard Schema properties interface. */\n\texport interface Props<Input = unknown, Output = Input> {\n\t\t/** The version number of the standard. */\n\t\treadonly version: 1;\n\t\t/** The vendor name of the schema library. */\n\t\treadonly vendor: string;\n\t\t/** Validates unknown input values. */\n\t\treadonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;\n\t\t/** Inferred types associated with the schema. */\n\t\treadonly types?: Types<Input, Output> | undefined;\n\t}\n\n\t/** The result interface of the validate function. */\n\texport type Result<Output> = SuccessResult<Output> | FailureResult;\n\n\t/** The result interface if validation succeeds. */\n\texport interface SuccessResult<Output> {\n\t\t/** The typed output value. */\n\t\treadonly value: Output;\n\t\t/** The non-existent issues. */\n\t\treadonly issues?: undefined;\n\t}\n\n\t/** The result interface if validation fails. */\n\texport interface FailureResult {\n\t\t/** The issues of failed validation. */\n\t\treadonly issues: ReadonlyArray<Issue>;\n\t}\n\n\t/** The issue interface of the failure output. */\n\texport interface Issue {\n\t\t/** The error message of the issue. */\n\t\treadonly message: string;\n\t\t/** The path of the issue, if any. */\n\t\treadonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n\t}\n\n\t/** The path segment interface of the issue. */\n\texport interface PathSegment {\n\t\t/** The key representing a path segment. */\n\t\treadonly key: PropertyKey;\n\t}\n\n\t/** The Standard Schema types interface. */\n\texport interface Types<Input = unknown, Output = Input> {\n\t\t/** The input type of the schema. */\n\t\treadonly input: Input;\n\t\t/** The output type of the schema. */\n\t\treadonly output: Output;\n\t}\n\n\t/** Infers the input type of a Standard Schema. */\n\texport type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\n\n\t/** Infers the output type of a Standard Schema. */\n\texport type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\n}\n\n// custom helpers\n\n/** Infer the input type of an array of Standard Schemas. */\nexport type InferInputArray<Schemas extends readonly StandardSchemaV1[]> = {\n\t[K in keyof Schemas]: StandardSchemaV1.InferInput<Schemas[K]>;\n};\n\n/** Infer the output type of an array of Standard Schemas. */\nexport type InferOutputArray<Schemas extends readonly StandardSchemaV1[]> = {\n\t[K in keyof Schemas]: StandardSchemaV1.InferOutput<Schemas[K]>;\n};\n\n/** Infer the input type of a Standard Schema, or a default type if the schema is undefined. */\nexport type InferInputOrDefault<MaybeSchema, Default> = MaybeSchema extends StandardSchemaV1\n\t? StandardSchemaV1.InferInput<MaybeSchema>\n\t: Default;\n\n/** Infer the output type of a Standard Schema, or a default type if the schema is undefined. */\nexport type InferOutputOrDefault<MaybeSchema, Default> = MaybeSchema extends StandardSchemaV1\n\t? StandardSchemaV1.InferOutput<MaybeSchema>\n\t: Default;\n\nexport function isStandardSchema(value: unknown): value is StandardSchemaV1 {\n\tif (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) {\n\t\treturn false;\n\t}\n\n\tconst standardProps = (value as { [\"~standard\"]?: unknown })[\"~standard\"];\n\n\tif (standardProps === null || typeof standardProps !== \"object\") {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\t(standardProps as { version?: unknown }).version === 1 &&\n\t\ttypeof (standardProps as { validate?: unknown }).validate === \"function\"\n\t);\n}\n\nexport async function standardParse<Output>(schema: StandardSchemaV1<unknown, Output>, value: unknown) {\n\treturn schema[\"~standard\"].validate(value);\n}\n","export const DEFAULT_SERVER_ERROR_MESSAGE = \"Something went wrong while executing the operation.\";\n\n/**\n * Checks if passed argument is an instance of Error.\n */\nexport const isError = (error: unknown): error is Error => error instanceof Error;\n\n/**\n * Checks what the winning boolean value is from a series of values, from lowest to highest priority.\n * `null` and `undefined` values are skipped.\n */\nexport const winningBoolean = (...args: (boolean | undefined | null)[]) => {\n\treturn args.reduce((acc, v) => (typeof v === \"boolean\" ? v : acc), false) as boolean;\n};\n","/* oxlint-disable typescript/no-unsafe-member-access, typescript/no-unsafe-assignment */\nimport type { StandardSchemaV1 } from \"./standard-schema\";\nimport type { FlattenedValidationErrors, IssueWithUnionErrors, ValidationErrors } from \"./validation-errors.types\";\n\nconst getKey = (segment: PropertyKey | StandardSchemaV1.PathSegment) =>\n\ttypeof segment === \"object\" ? segment.key : segment;\n\nconst getIssueMessage = (issue: IssueWithUnionErrors): string[] => {\n\tif (issue.unionErrors) {\n\t\treturn issue.unionErrors.flatMap((u) => u.issues.map((i) => i.message));\n\t}\n\treturn [issue.message];\n};\n\n// This function is used internally to build the validation errors object from a list of validation issues.\nexport const buildValidationErrors = <Schema extends StandardSchemaV1 | undefined>(\n\tissues: readonly IssueWithUnionErrors[]\n) => {\n\t// Using `any` because validation errors are dynamically-shaped nested objects\n\t// built from schema paths with PropertyKey keys (string | number | symbol).\n\tconst ve: any = {};\n\n\tfor (const issue of issues) {\n\t\tconst { path } = issue;\n\n\t\t// When path is undefined or empty, set root errors.\n\t\tif (!path || path.length === 0) {\n\t\t\tconst issueMessages = getIssueMessage(issue);\n\t\t\tve._errors = ve._errors ? [...ve._errors, ...issueMessages] : [...issueMessages];\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 = getKey(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 = getKey(path[path.length - 1]!);\n\n\t\tconst issueMessage = getIssueMessage(issue);\n\n\t\t// Set error for the current path. If `_errors` array exists, add the message to it.\n\t\tconst existing = ref[key] ? structuredClone(ref[key]) : {};\n\t\tref[key] = existing._errors\n\t\t\t? { ...existing, _errors: [...existing._errors, ...issueMessage] }\n\t\t\t: { ...existing, _errors: [...issueMessage] };\n\t}\n\n\treturn ve as ValidationErrors<Schema>;\n};\n\n// This class is internally used to throw validation errors in action's server code function, using\n// `returnValidationErrors`.\nexport class ActionServerValidationError<Schema extends StandardSchemaV1> extends Error {\n\tpublic validationErrors: ValidationErrors<Schema>;\n\tconstructor(validationErrors: ValidationErrors<Schema>) {\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<ShapedErrors> extends Error {\n\tpublic validationErrors: ShapedErrors;\n\tconstructor(validationErrors: ShapedErrors, overriddenErrorMessage?: string) {\n\t\tsuper(overriddenErrorMessage ?? \"Server Action 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 ActionBindArgsValidationError extends Error {\n\tpublic validationErrors: unknown[];\n\tconstructor(validationErrors: unknown[]) {\n\t\tsuper(\"Server Action bind args 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\tSchema extends StandardSchemaV1 | (() => Promise<StandardSchemaV1>),\n\tAS extends StandardSchemaV1 = Schema extends () => Promise<StandardSchemaV1> ? Awaited<ReturnType<Schema>> : Schema, // actual schema\n>(schema: Schema, 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 * 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#flattenvalidationerrorsutility-function 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 * 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 StandardSchemaV1 | 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 StandardSchemaV1 | 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 { deepmerge } from \"deepmerge-ts\";\nimport type {} from \"zod\";\nimport type {\n\tValidationErrorsFormat,\n\tMiddlewareResult,\n\tSafeActionClientArgs,\n\tSafeActionFn,\n\tSafeActionResult,\n\tActionCallbacks,\n\tSafeStateActionFn,\n\tServerCodeFn,\n\tStatefulServerCodeFn,\n} from \"./index.types\";\nimport { FrameworkErrorHandler } from \"./next/errors\";\nimport type {\n\tInferInputArray,\n\tInferInputOrDefault,\n\tInferOutputArray,\n\tInferOutputOrDefault,\n\tStandardSchemaV1,\n} from \"./standard-schema\";\nimport { standardParse } from \"./standard-schema\";\nimport { DEFAULT_SERVER_ERROR_MESSAGE, isError, winningBoolean } from \"./utils\";\nimport {\n\tActionBindArgsValidationError,\n\tActionMetadataValidationError,\n\tActionOutputDataValidationError,\n\tActionServerValidationError,\n\tActionValidationError,\n\tbuildValidationErrors,\n} from \"./validation-errors\";\nimport type { ValidationErrors } from \"./validation-errors.types\";\n\nexport function actionBuilder<\n\tServerError,\n\tErrorsFormat extends ValidationErrorsFormat | undefined, // override default validation errors shape\n\tMetadataSchema extends StandardSchemaV1 | undefined = undefined,\n\tMetadata = InferOutputOrDefault<MetadataSchema, undefined>, // metadata type (inferred from metadata schema)\n\tCtx extends object = {},\n\tInputSchemaFn extends ((clientInput?: unknown) => Promise<StandardSchemaV1>) | undefined = undefined, // input schema function\n\tInputSchema extends StandardSchemaV1 | undefined = InputSchemaFn extends Function\n\t\t? Awaited<ReturnType<InputSchemaFn>>\n\t\t: undefined, // input schema\n\tOutputSchema extends StandardSchemaV1 | undefined = undefined, // output schema\n\tconst BindArgsSchemas extends readonly StandardSchemaV1[] = [],\n\tShapedErrors = undefined,\n\tThrowsValidationErrors extends boolean = false,\n\tHasValidatedMiddleware extends boolean = false,\n\tPreValidationCtx extends object = Ctx,\n>(\n\targs: SafeActionClientArgs<\n\t\tServerError,\n\t\tErrorsFormat,\n\t\tMetadataSchema,\n\t\tMetadata,\n\t\ttrue,\n\t\tCtx,\n\t\tInputSchemaFn,\n\t\tInputSchema,\n\t\tOutputSchema,\n\t\tBindArgsSchemas,\n\t\tShapedErrors,\n\t\tThrowsValidationErrors,\n\t\tHasValidatedMiddleware,\n\t\tPreValidationCtx\n\t>\n) {\n\tconst bindArgsSchemas = args.bindArgsSchemas ?? [];\n\n\t// ─── Validate metadata schema ────────────────────────────────────────\n\n\tasync function validateMetadata() {\n\t\tif (!args.metadataSchema) return;\n\n\t\tconst parsedMd = await standardParse(args.metadataSchema, args.metadata);\n\n\t\tif (parsedMd.issues) {\n\t\t\tthrow new ActionMetadataValidationError<MetadataSchema>(buildValidationErrors(parsedMd.issues));\n\t\t}\n\t}\n\n\t// ─── Validate bind args and main input ───────────────────────────────\n\t// Returns parsed inputs on success, or null if validation errors were set on middlewareResult.\n\n\tasync function validateInputs(\n\t\tmainClientInput: InferInputOrDefault<InputSchema, undefined>,\n\t\tbindArgsClientInputs: InferInputArray<BindArgsSchemas>,\n\t\tcurrentCtx: object,\n\t\tmiddlewareResult: MiddlewareResult<ServerError, object>\n\t): Promise<{ parsedMainInput: unknown; parsedBindArgsInputs: unknown[] } | null> {\n\t\tconst parsedBindArgsResults = await Promise.all(\n\t\t\tbindArgsSchemas.map((schema, i) => standardParse(schema, bindArgsClientInputs[i]))\n\t\t);\n\n\t\tconst parsedMainInputResult =\n\t\t\ttypeof args.inputSchemaFn === \"undefined\"\n\t\t\t\t? ({ value: undefined } as const satisfies StandardSchemaV1.Result<undefined>)\n\t\t\t\t: await standardParse(await args.inputSchemaFn(mainClientInput), mainClientInput);\n\n\t\t// Process bind args validation results.\n\t\tlet hasBindValidationErrors = false;\n\t\tconst bindArgsValidationErrors = Array(bindArgsSchemas.length).fill({});\n\t\tconst parsedBindArgsInputs: unknown[] = [];\n\n\t\tfor (let i = 0; i < parsedBindArgsResults.length; i++) {\n\t\t\tconst parsedInput = parsedBindArgsResults[i]!;\n\n\t\t\tif (!parsedInput.issues) {\n\t\t\t\tparsedBindArgsInputs.push(parsedInput.value);\n\t\t\t} else {\n\t\t\t\tbindArgsValidationErrors[i] = buildValidationErrors<BindArgsSchemas[number]>(parsedInput.issues);\n\t\t\t\thasBindValidationErrors = true;\n\t\t\t}\n\t\t}\n\n\t\t// Process main input validation result.\n\t\tlet parsedMainInput: unknown = undefined;\n\n\t\tif (!parsedMainInputResult.issues) {\n\t\t\tparsedMainInput = parsedMainInputResult.value;\n\t\t} else {\n\t\t\tconst validationErrors = buildValidationErrors<InputSchema>(parsedMainInputResult.issues);\n\n\t\t\tmiddlewareResult.validationErrors = await Promise.resolve(\n\t\t\t\targs.handleValidationErrorsShape(validationErrors, {\n\t\t\t\t\tclientInput: mainClientInput,\n\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Bind args errors are thrown (caught by the middleware stack's error handler).\n\t\tif (hasBindValidationErrors) {\n\t\t\tthrow new ActionBindArgsValidationError(bindArgsValidationErrors);\n\t\t}\n\n\t\t// Main input validation errors cause early return (no server code execution).\n\t\tif (middlewareResult.validationErrors) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { parsedMainInput, parsedBindArgsInputs };\n\t}\n\n\t// ─── Run server code with output validation (no input validation) ────\n\n\tasync function runServerCode(\n\t\tserverCodeFn:\n\t\t\t| ServerCodeFn<Metadata, Ctx, InputSchema, BindArgsSchemas, any>\n\t\t\t| StatefulServerCodeFn<ServerError, Metadata, Ctx, InputSchema, BindArgsSchemas, ShapedErrors, any>,\n\t\tparsedMainInput: unknown,\n\t\tparsedBindArgsInputs: unknown[],\n\t\tmainClientInput: InferInputOrDefault<InputSchema, undefined>,\n\t\tbindArgsClientInputs: InferInputArray<BindArgsSchemas>,\n\t\tcurrentCtx: object,\n\t\tmiddlewareResult: MiddlewareResult<ServerError, object>,\n\t\tframeworkErrorHandler: FrameworkErrorHandler,\n\t\twithState: boolean,\n\t\tprevResult: SafeActionResult<ServerError, InputSchema, ShapedErrors, any>\n\t) {\n\t\t// Build server code function arguments.\n\t\tconst serverCodeArgs: unknown[] = [\n\t\t\t{\n\t\t\t\tparsedInput: parsedMainInput as InferOutputOrDefault<InputSchema, undefined>,\n\t\t\t\tbindArgsParsedInputs: parsedBindArgsInputs as InferOutputArray<BindArgsSchemas>,\n\t\t\t\tclientInput: mainClientInput,\n\t\t\t\tbindArgsClientInputs,\n\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\tmetadata: args.metadata,\n\t\t\t},\n\t\t];\n\n\t\tif (withState) {\n\t\t\tserverCodeArgs.push({ prevResult: structuredClone(prevResult) });\n\t\t}\n\n\t\tconst data = await (serverCodeFn as (...a: unknown[]) => Promise<unknown>)(...serverCodeArgs).catch((e) =>\n\t\t\tframeworkErrorHandler.handleError(e)\n\t\t);\n\n\t\t// Validate output schema if provided.\n\t\tif (typeof args.outputSchema !== \"undefined\" && !frameworkErrorHandler.error) {\n\t\t\tconst parsedData = await standardParse(args.outputSchema, data);\n\n\t\t\tif (parsedData.issues) {\n\t\t\t\tthrow new ActionOutputDataValidationError<OutputSchema>(buildValidationErrors(parsedData.issues));\n\t\t\t}\n\t\t}\n\n\t\t// Update middleware result based on execution outcome.\n\t\tif (frameworkErrorHandler.error) {\n\t\t\tmiddlewareResult.success = false;\n\t\t\tmiddlewareResult.navigationKind = FrameworkErrorHandler.getNavigationKind(frameworkErrorHandler.error);\n\t\t} else {\n\t\t\tmiddlewareResult.success = true;\n\t\t\tmiddlewareResult.data = data;\n\t\t}\n\n\t\tmiddlewareResult.parsedInput = parsedMainInput;\n\t\tmiddlewareResult.bindArgsParsedInputs = parsedBindArgsInputs;\n\t}\n\n\t// ─── Handle errors from middleware/action execution ──────────────────\n\n\tasync function handleExecutionError(\n\t\te: unknown,\n\t\tmainClientInput: InferInputOrDefault<InputSchema, undefined>,\n\t\tbindArgsClientInputs: InferInputArray<BindArgsSchemas>,\n\t\tcurrentCtx: object,\n\t\tmiddlewareResult: MiddlewareResult<ServerError, object>,\n\t\tserverErrorHandled: { value: boolean }\n\t) {\n\t\t// ActionServerValidationError: treat as if schema validation failed.\n\t\t// This check must come before the serverErrorHandled guard so middleware catch blocks\n\t\t// using `returnValidationErrors` work even when handleServerError is configured to rethrow.\n\t\tif (e instanceof ActionServerValidationError) {\n\t\t\tconst ve = e.validationErrors as ValidationErrors<InputSchema>;\n\n\t\t\tmiddlewareResult.validationErrors = await Promise.resolve(\n\t\t\t\targs.handleValidationErrorsShape(ve, {\n\t\t\t\t\tclientInput: mainClientInput,\n\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t})\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Only handle server errors once. If already handled, rethrow to bubble up.\n\t\tif (serverErrorHandled.value) {\n\t\t\tthrow e;\n\t\t}\n\t\tserverErrorHandled.value = true;\n\n\t\tconst error = isError(e) ? e : new Error(DEFAULT_SERVER_ERROR_MESSAGE);\n\t\tconst returnedError = await Promise.resolve(\n\t\t\targs.handleServerError(error, {\n\t\t\t\tclientInput: mainClientInput as unknown, // pass raw client input\n\t\t\t\tbindArgsClientInputs: bindArgsClientInputs as unknown[],\n\t\t\t\tctx: currentCtx,\n\t\t\t\tmetadata: args.metadata as InferOutputOrDefault<MetadataSchema, undefined>,\n\t\t\t})\n\t\t);\n\n\t\tmiddlewareResult.serverError = returnedError;\n\t}\n\n\t// ─── Build action result and run callbacks ───────────────────────────\n\n\tasync function buildResultAndRunCallbacks<Data>(\n\t\tmiddlewareResult: MiddlewareResult<ServerError, object>,\n\t\tframeworkErrorHandler: FrameworkErrorHandler,\n\t\tmainClientInput: InferInputOrDefault<InputSchema, undefined>,\n\t\tbindArgsClientInputs: InferInputArray<BindArgsSchemas>,\n\t\tcurrentCtx: object,\n\t\tutils?: ActionCallbacks<\n\t\t\tServerError,\n\t\t\tMetadata,\n\t\t\tCtx,\n\t\t\tInputSchema,\n\t\t\tBindArgsSchemas,\n\t\t\tShapedErrors,\n\t\t\tData,\n\t\t\tPreValidationCtx\n\t\t>\n\t): Promise<SafeActionResult<ServerError, InputSchema, ShapedErrors, Data>> {\n\t\tconst callbackPromises: (Promise<unknown> | undefined)[] = [];\n\n\t\t// If a navigation framework error occurred, run navigation callbacks then rethrow\n\t\t// so Next.js can process it.\n\t\tif (frameworkErrorHandler.error) {\n\t\t\tconst navigationKind = FrameworkErrorHandler.getNavigationKind(frameworkErrorHandler.error);\n\n\t\t\tcallbackPromises.push(\n\t\t\t\tutils?.onNavigation?.({\n\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\tctx: currentCtx as unknown as PreValidationCtx & Partial<Ctx>,\n\t\t\t\t\tclientInput: mainClientInput,\n\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\tnavigationKind,\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tcallbackPromises.push(\n\t\t\t\tutils?.onSettled?.({\n\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\tctx: currentCtx as unknown as PreValidationCtx & Partial<Ctx>,\n\t\t\t\t\tclientInput: mainClientInput,\n\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\tresult: {},\n\t\t\t\t\tnavigationKind,\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tawait Promise.all(callbackPromises.filter((p) => typeof p !== \"undefined\"));\n\t\t\tthrow frameworkErrorHandler.error;\n\t\t}\n\n\t\t// Handle error throws first. `throwValidationErrors` has higher priority\n\t\t// since it's set at the action level and overrides the client setting.\n\t\t// `throwServerError` is gated on the absence of `validationErrors` so that\n\t\t// the advertised precedence (validationErrors > serverError > data) is\n\t\t// honored even when a compound state reaches this point — e.g. invalid\n\t\t// bind args (wrapped as `serverError`) combined with invalid main input\n\t\t// (`validationErrors`). In that case we must not throw the wrapped bind\n\t\t// args server error and lose the actionable field errors.\n\t\tif (typeof middlewareResult.validationErrors !== \"undefined\") {\n\t\t\tif (\n\t\t\t\twinningBoolean(\n\t\t\t\t\targs.throwValidationErrors,\n\t\t\t\t\ttypeof utils?.throwValidationErrors === \"undefined\" ? undefined : Boolean(utils.throwValidationErrors)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tconst overrideErrorMessageFn =\n\t\t\t\t\ttypeof utils?.throwValidationErrors === \"object\" && utils?.throwValidationErrors.overrideErrorMessage\n\t\t\t\t\t\t? utils?.throwValidationErrors.overrideErrorMessage\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tthrow new ActionValidationError(\n\t\t\t\t\tmiddlewareResult.validationErrors as ShapedErrors,\n\t\t\t\t\tawait overrideErrorMessageFn?.(middlewareResult.validationErrors as ShapedErrors)\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (typeof middlewareResult.serverError !== \"undefined\" && utils?.throwServerError) {\n\t\t\tthrow middlewareResult.serverError;\n\t\t}\n\n\t\t// The result is a discriminated union: exactly one of `validationErrors`,\n\t\t// `serverError`, or `data` is populated, or the result is idle `{}`.\n\t\t// In compound-error scenarios where the runtime could otherwise produce\n\t\t// multiple populated fields (e.g. `next()` called twice after the action\n\t\t// had already succeeded, or invalid bind args combined with invalid main\n\t\t// input), we apply a fixed precedence: validation errors beat server\n\t\t// errors beat success data. The higher-priority state fully describes\n\t\t// the outcome and lower-priority state is discarded.\n\t\tconst hasValidationError = typeof middlewareResult.validationErrors !== \"undefined\";\n\t\tconst hasServerError = typeof middlewareResult.serverError !== \"undefined\";\n\t\tconst treatAsSuccess = middlewareResult.success && !hasValidationError && !hasServerError;\n\n\t\tlet actionResult: SafeActionResult<ServerError, InputSchema, ShapedErrors, Data>;\n\n\t\tif (hasValidationError) {\n\t\t\tactionResult = { validationErrors: middlewareResult.validationErrors as ShapedErrors };\n\t\t} else if (hasServerError) {\n\t\t\tactionResult = { serverError: middlewareResult.serverError as ServerError };\n\t\t} else if (treatAsSuccess && typeof middlewareResult.data !== \"undefined\") {\n\t\t\tactionResult = { data: middlewareResult.data as Data };\n\t\t} else {\n\t\t\tactionResult = {};\n\t\t}\n\n\t\tif (treatAsSuccess) {\n\t\t\tcallbackPromises.push(\n\t\t\t\tutils?.onSuccess?.({\n\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\tctx: currentCtx as Ctx,\n\t\t\t\t\tdata: middlewareResult.data as Data,\n\t\t\t\t\tclientInput: mainClientInput,\n\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\tparsedInput: middlewareResult.parsedInput as InferOutputOrDefault<InputSchema, undefined>,\n\t\t\t\t\tbindArgsParsedInputs: middlewareResult.bindArgsParsedInputs as InferOutputArray<BindArgsSchemas>,\n\t\t\t\t})\n\t\t\t);\n\t\t} else {\n\t\t\tcallbackPromises.push(\n\t\t\t\tutils?.onError?.({\n\t\t\t\t\tmetadata: args.metadata,\n\t\t\t\t\tctx: currentCtx as unknown as PreValidationCtx & Partial<Ctx>,\n\t\t\t\t\tclientInput: mainClientInput,\n\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\terror: actionResult,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// onSettled, if provided, is always executed.\n\t\tcallbackPromises.push(\n\t\t\tutils?.onSettled?.({\n\t\t\t\tmetadata: args.metadata,\n\t\t\t\tctx: currentCtx as unknown as PreValidationCtx & Partial<Ctx>,\n\t\t\t\tclientInput: mainClientInput,\n\t\t\t\tbindArgsClientInputs,\n\t\t\t\tresult: actionResult,\n\t\t\t})\n\t\t);\n\n\t\tawait Promise.all(callbackPromises.filter((p) => typeof p !== \"undefined\"));\n\n\t\treturn actionResult;\n\t}\n\n\t// ─── Action builder ──────────────────────────────────────────────────\n\n\tfunction buildAction({ withState }: { withState: false }): {\n\t\taction: <Data extends InferOutputOrDefault<OutputSchema, any>>(\n\t\t\tserverCodeFn: ServerCodeFn<Metadata, Ctx, InputSchema, BindArgsSchemas, Data>,\n\t\t\tutils?: ActionCallbacks<\n\t\t\t\tServerError,\n\t\t\t\tMetadata,\n\t\t\t\tCtx,\n\t\t\t\tInputSchema,\n\t\t\t\tBindArgsSchemas,\n\t\t\t\tShapedErrors,\n\t\t\t\tData,\n\t\t\t\tPreValidationCtx\n\t\t\t>\n\t\t) => SafeActionFn<ServerError, InputSchema, BindArgsSchemas, ShapedErrors, Data>;\n\t};\n\tfunction buildAction({ withState }: { withState: true }): {\n\t\taction: <Data extends InferOutputOrDefault<OutputSchema, any>>(\n\t\t\tserverCodeFn: StatefulServerCodeFn<ServerError, Metadata, Ctx, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n\t\t\tutils?: ActionCallbacks<\n\t\t\t\tServerError,\n\t\t\t\tMetadata,\n\t\t\t\tCtx,\n\t\t\t\tInputSchema,\n\t\t\t\tBindArgsSchemas,\n\t\t\t\tShapedErrors,\n\t\t\t\tData,\n\t\t\t\tPreValidationCtx\n\t\t\t>\n\t\t) => SafeStateActionFn<ServerError, InputSchema, BindArgsSchemas, ShapedErrors, Data>;\n\t};\n\tfunction buildAction({ withState }: { withState: boolean }) {\n\t\treturn {\n\t\t\taction: <Data extends InferOutputOrDefault<OutputSchema, any>>(\n\t\t\t\tserverCodeFn:\n\t\t\t\t\t| ServerCodeFn<Metadata, Ctx, InputSchema, BindArgsSchemas, Data>\n\t\t\t\t\t| StatefulServerCodeFn<ServerError, Metadata, Ctx, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n\t\t\t\tutils?: ActionCallbacks<\n\t\t\t\t\tServerError,\n\t\t\t\t\tMetadata,\n\t\t\t\t\tCtx,\n\t\t\t\t\tInputSchema,\n\t\t\t\t\tBindArgsSchemas,\n\t\t\t\t\tShapedErrors,\n\t\t\t\t\tData,\n\t\t\t\t\tPreValidationCtx\n\t\t\t\t>\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, InputSchema, ShapedErrors, Data>;\n\t\t\t\t\tlet prevResult: PrevResult = {};\n\t\t\t\t\tconst frameworkErrorHandler = new FrameworkErrorHandler();\n\t\t\t\t\tconst serverErrorHandled = { value: false };\n\t\t\t\t\tlet chainCompleted = false;\n\n\t\t\t\t\t// Extract prevResult for stateful actions.\n\t\t\t\t\tif (withState) {\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// Extract structured inputs based on schema definitions rather than iterating over\n\t\t\t\t\t// clientInputs, so that excess arguments from external callers are silently ignored.\n\t\t\t\t\tconst mainClientInput = clientInputs[bindArgsSchemas.length] as InferInputOrDefault<InputSchema, undefined>;\n\t\t\t\t\tconst bindArgsClientInputs = clientInputs.slice(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tbindArgsSchemas.length\n\t\t\t\t\t) as InferInputArray<BindArgsSchemas>;\n\n\t\t\t\t\t// Validate metadata once, before running the middleware stack.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait validateMetadata();\n\t\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\t\tawait handleExecutionError(\n\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\tmainClientInput,\n\t\t\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\t\tmiddlewareResult,\n\t\t\t\t\t\t\tserverErrorHandled\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn buildResultAndRunCallbacks<Data>(\n\t\t\t\t\t\t\tmiddlewareResult,\n\t\t\t\t\t\t\tframeworkErrorHandler,\n\t\t\t\t\t\t\tmainClientInput,\n\t\t\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\t\tutils\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// ─── Validated middleware stack (post-validation) ─────────\n\n\t\t\t\t\tconst executeValidatedMiddlewareStack = async (\n\t\t\t\t\t\tidx: number,\n\t\t\t\t\t\tparsedMainInput: unknown,\n\t\t\t\t\t\tparsedBindArgsInputs: unknown[]\n\t\t\t\t\t) => {\n\t\t\t\t\t\tif (frameworkErrorHandler.error) return;\n\n\t\t\t\t\t\tconst validatedMiddlewareFn = args.validatedMiddlewareFns[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 (validatedMiddlewareFn) {\n\t\t\t\t\t\t\t\tlet nextCalled = false;\n\n\t\t\t\t\t\t\t\tawait validatedMiddlewareFn({\n\t\t\t\t\t\t\t\t\tparsedInput: parsedMainInput,\n\t\t\t\t\t\t\t\t\tclientInput: mainClientInput,\n\t\t\t\t\t\t\t\t\tbindArgsParsedInputs: parsedBindArgsInputs as readonly unknown[],\n\t\t\t\t\t\t\t\t\tbindArgsClientInputs: bindArgsClientInputs as readonly unknown[],\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\tif (chainCompleted) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\t\t\"next() called after the middleware chain has already completed. Do not store and call next() asynchronously after the action has returned.\"\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\tif (nextCalled) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\t\t\"next() called multiple times in middleware. Each middleware must call next() at most once.\"\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\tnextCalled = true;\n\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 executeValidatedMiddlewareStack(idx + 1, parsedMainInput, parsedBindArgsInputs);\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}).catch((e) => {\n\t\t\t\t\t\t\t\t\tframeworkErrorHandler.handleError(e);\n\t\t\t\t\t\t\t\t\tif (frameworkErrorHandler.error) {\n\t\t\t\t\t\t\t\t\t\tmiddlewareResult.success = false;\n\t\t\t\t\t\t\t\t\t\tmiddlewareResult.navigationKind = FrameworkErrorHandler.getNavigationKind(\n\t\t\t\t\t\t\t\t\t\t\tframeworkErrorHandler.error\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\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Terminal case: execute server code (input already validated).\n\t\t\t\t\t\t\t\tawait runServerCode(\n\t\t\t\t\t\t\t\t\tserverCodeFn,\n\t\t\t\t\t\t\t\t\tparsedMainInput,\n\t\t\t\t\t\t\t\t\tparsedBindArgsInputs,\n\t\t\t\t\t\t\t\t\tmainClientInput,\n\t\t\t\t\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\t\t\t\tmiddlewareResult,\n\t\t\t\t\t\t\t\t\tframeworkErrorHandler,\n\t\t\t\t\t\t\t\t\twithState,\n\t\t\t\t\t\t\t\t\tprevResult\n\t\t\t\t\t\t\t\t);\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\tawait handleExecutionError(\n\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\tmainClientInput,\n\t\t\t\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\t\t\tmiddlewareResult,\n\t\t\t\t\t\t\t\tserverErrorHandled\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// ─── Pre-validation middleware stack ──────────────────────\n\n\t\t\t\t\tconst executeMiddlewareStack = async (idx = 0) => {\n\t\t\t\t\t\tif (frameworkErrorHandler.error) return;\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 (middlewareFn) {\n\t\t\t\t\t\t\t\tlet nextCalled = false;\n\n\t\t\t\t\t\t\t\tawait middlewareFn({\n\t\t\t\t\t\t\t\t\tclientInput: mainClientInput as unknown, // pass raw client input\n\t\t\t\t\t\t\t\t\tbindArgsClientInputs: bindArgsClientInputs as unknown[],\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\tif (chainCompleted) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\t\t\"next() called after the middleware chain has already completed. Do not store and call next() asynchronously after the action has returned.\"\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\tif (nextCalled) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\t\t\"next() called multiple times in middleware. Each middleware must call next() at most once.\"\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\tnextCalled = true;\n\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}).catch((e) => {\n\t\t\t\t\t\t\t\t\tframeworkErrorHandler.handleError(e);\n\t\t\t\t\t\t\t\t\tif (frameworkErrorHandler.error) {\n\t\t\t\t\t\t\t\t\t\tmiddlewareResult.success = false;\n\t\t\t\t\t\t\t\t\t\tmiddlewareResult.navigationKind = FrameworkErrorHandler.getNavigationKind(\n\t\t\t\t\t\t\t\t\t\t\tframeworkErrorHandler.error\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\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Terminal case: validate inputs, then run validated middleware + server code.\n\t\t\t\t\t\t\t\tconst validated = await validateInputs(\n\t\t\t\t\t\t\t\t\tmainClientInput,\n\t\t\t\t\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\t\t\t\tmiddlewareResult\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Validation errors were set, skip server code execution.\n\t\t\t\t\t\t\t\tif (!validated) return;\n\n\t\t\t\t\t\t\t\tconst { parsedMainInput, parsedBindArgsInputs } = validated;\n\n\t\t\t\t\t\t\t\t// Run the validated middleware stack (terminates at server code).\n\t\t\t\t\t\t\t\tawait executeValidatedMiddlewareStack(0, parsedMainInput, parsedBindArgsInputs);\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\tawait handleExecutionError(\n\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\tmainClientInput,\n\t\t\t\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\t\t\tmiddlewareResult,\n\t\t\t\t\t\t\t\tserverErrorHandled\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\t\t\t\t\tchainCompleted = true;\n\n\t\t\t\t\treturn buildResultAndRunCallbacks<Data>(\n\t\t\t\t\t\tmiddlewareResult,\n\t\t\t\t\t\tframeworkErrorHandler,\n\t\t\t\t\t\tmainClientInput,\n\t\t\t\t\t\tbindArgsClientInputs,\n\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\tutils\n\t\t\t\t\t);\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","import { actionBuilder } from \"./action-builder\";\nimport type {\n\tValidationErrorsFormat,\n\tEffectiveThrows,\n\tInputSchemaFactoryFn,\n\tMaybeBrandThrows,\n\tMiddlewareFn,\n\tValidatedMiddlewareFn,\n\tSafeActionClientArgs,\n\tSafeActionFn,\n\tSafeStateActionFn,\n\tActionCallbacks,\n\tServerCodeFn,\n\tStatefulServerCodeFn,\n} from \"./index.types\";\nimport type {\n\tInferInputOrDefault,\n\tInferInputArray,\n\tInferOutputOrDefault,\n\tInferOutputArray,\n\tStandardSchemaV1,\n} from \"./standard-schema\";\nimport { isStandardSchema } from \"./standard-schema\";\nimport type {\n\tFlattenedValidationErrors,\n\tHandleValidationErrorsShapeFn,\n\tValidationErrors,\n} from \"./validation-errors.types\";\n\nexport class SafeActionClient<\n\tServerError,\n\tErrorsFormat extends ValidationErrorsFormat | undefined, // override default validation errors shape\n\tMetadataSchema extends StandardSchemaV1 | undefined = undefined,\n\tMetadata = InferOutputOrDefault<MetadataSchema, undefined>, // metadata type (inferred from metadata schema)\n\tHasMetadata extends boolean = MetadataSchema extends undefined ? true : false,\n\tCtx extends object = {},\n\tInputSchemaFn extends ((clientInput?: unknown) => Promise<StandardSchemaV1>) | undefined = undefined, // input schema function\n\tInputSchema extends StandardSchemaV1 | undefined = InputSchemaFn extends Function\n\t\t? Awaited<ReturnType<InputSchemaFn>>\n\t\t: undefined, // input schema\n\tOutputSchema extends StandardSchemaV1 | undefined = undefined, // output schema\n\tconst BindArgsSchemas extends readonly StandardSchemaV1[] = [],\n\tShapedErrors = undefined,\n\tThrowsValidationErrors extends boolean = false,\n\tHasValidatedMiddleware extends boolean = false,\n\tPreValidationCtx extends object = Ctx,\n> {\n\treadonly #args: SafeActionClientArgs<\n\t\tServerError,\n\t\tErrorsFormat,\n\t\tMetadataSchema,\n\t\tMetadata,\n\t\tHasMetadata,\n\t\tCtx,\n\t\tInputSchemaFn,\n\t\tInputSchema,\n\t\tOutputSchema,\n\t\tBindArgsSchemas,\n\t\tShapedErrors,\n\t\tThrowsValidationErrors,\n\t\tHasValidatedMiddleware,\n\t\tPreValidationCtx\n\t>;\n\n\tconstructor(\n\t\targs: SafeActionClientArgs<\n\t\t\tServerError,\n\t\t\tErrorsFormat,\n\t\t\tMetadataSchema,\n\t\t\tMetadata,\n\t\t\tHasMetadata,\n\t\t\tCtx,\n\t\t\tInputSchemaFn,\n\t\t\tInputSchema,\n\t\t\tOutputSchema,\n\t\t\tBindArgsSchemas,\n\t\t\tShapedErrors,\n\t\t\tThrowsValidationErrors,\n\t\t\tHasValidatedMiddleware,\n\t\t\tPreValidationCtx\n\t\t>\n\t) {\n\t\tthis.#args = args;\n\t}\n\n\t/**\n\t * Use a middleware function. Middleware added via `use()` always runs **before** input validation.\n\t * Cannot be called after `useValidated()`.\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>(\n\t\tthis: HasValidatedMiddleware extends false\n\t\t\t? SafeActionClient<\n\t\t\t\t\tServerError,\n\t\t\t\t\tErrorsFormat,\n\t\t\t\t\tMetadataSchema,\n\t\t\t\t\tMetadata,\n\t\t\t\t\tHasMetadata,\n\t\t\t\t\tCtx,\n\t\t\t\t\tInputSchemaFn,\n\t\t\t\t\tInputSchema,\n\t\t\t\t\tOutputSchema,\n\t\t\t\t\tBindArgsSchemas,\n\t\t\t\t\tShapedErrors,\n\t\t\t\t\tThrowsValidationErrors,\n\t\t\t\t\tHasValidatedMiddleware,\n\t\t\t\t\tPreValidationCtx\n\t\t\t\t>\n\t\t\t: never,\n\t\tmiddlewareFn: MiddlewareFn<ServerError, Metadata, Ctx, Ctx & NextCtx>\n\t) {\n\t\tif (this.#args.hasValidatedMiddleware) {\n\t\t\tthrow new Error(\"use() cannot be called after useValidated(). Move all use() calls before useValidated().\");\n\t\t}\n\n\t\treturn new SafeActionClient({\n\t\t\t...this.#args,\n\t\t\tmiddlewareFns: [...this.#args.middlewareFns, middlewareFn],\n\t\t\tctxType: {} as Ctx & NextCtx,\n\t\t\tpreValidationCtxType: {} as PreValidationCtx & NextCtx,\n\t\t});\n\t}\n\n\t/**\n\t * Use a validated middleware function. Middleware added via `useValidated()` runs **after** input\n\t * validation and receives typed `parsedInput` and `bindArgsParsedInputs`. Follows the onion model:\n\t * code before `next()` runs pre-action, code after `next()` runs post-action with access to the result.\n\t *\n\t * Requires `inputSchema()` or `bindArgsSchemas()` to be called before. After calling `useValidated()`,\n\t * `inputSchema()`, `bindArgsSchemas()`, and `use()` can no longer be called.\n\t *\n\t * @example\n\t * ```ts\n\t * authClient\n\t *   .inputSchema(z.object({ postId: z.string() }))\n\t *   .useValidated(async ({ parsedInput, ctx, next }) => {\n\t *     const post = await db.post.findUnique({ where: { id: parsedInput.postId } });\n\t *     if (post?.authorId !== ctx.user.id) throw new Error(\"Forbidden\");\n\t *     return next({ ctx: { post } });\n\t *   })\n\t * ```\n\t *\n\t * @param middlewareFn Validated middleware function\n\t *\n\t * {@link https://next-safe-action.dev/docs/define-actions/instance-methods#usevalidated See docs for more information}\n\t */\n\tuseValidated<NextCtx extends object>(\n\t\tthis: [InputSchema, BindArgsSchemas] extends [undefined, readonly []]\n\t\t\t? never\n\t\t\t: SafeActionClient<\n\t\t\t\t\tServerError,\n\t\t\t\t\tErrorsFormat,\n\t\t\t\t\tMetadataSchema,\n\t\t\t\t\tMetadata,\n\t\t\t\t\tHasMetadata,\n\t\t\t\t\tCtx,\n\t\t\t\t\tInputSchemaFn,\n\t\t\t\t\tInputSchema,\n\t\t\t\t\tOutputSchema,\n\t\t\t\t\tBindArgsSchemas,\n\t\t\t\t\tShapedErrors,\n\t\t\t\t\tThrowsValidationErrors,\n\t\t\t\t\tHasValidatedMiddleware,\n\t\t\t\t\tPreValidationCtx\n\t\t\t\t>,\n\t\tmiddlewareFn: ValidatedMiddlewareFn<\n\t\t\tServerError,\n\t\t\tMetadata,\n\t\t\tCtx,\n\t\t\tCtx & NextCtx,\n\t\t\tInferOutputOrDefault<InputSchema, undefined>,\n\t\t\tInferInputOrDefault<InputSchema, undefined>,\n\t\t\tInferOutputArray<BindArgsSchemas>,\n\t\t\tInferInputArray<BindArgsSchemas>\n\t\t>\n\t) {\n\t\treturn new SafeActionClient({\n\t\t\t...this.#args,\n\t\t\tvalidatedMiddlewareFns: [...this.#args.validatedMiddlewareFns, middlewareFn],\n\t\t\tctxType: {} as Ctx & NextCtx,\n\t\t\tpreValidationCtxType: {} as PreValidationCtx,\n\t\t\thasValidatedMiddleware: true as const,\n\t\t\thandleValidationErrorsShape: this.#args.handleValidationErrorsShape as unknown as HandleValidationErrorsShapeFn<\n\t\t\t\tInputSchema,\n\t\t\t\tBindArgsSchemas,\n\t\t\t\tMetadata,\n\t\t\t\tCtx & NextCtx,\n\t\t\t\tShapedErrors\n\t\t\t>,\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: Metadata) {\n\t\treturn new SafeActionClient({\n\t\t\t...this.#args,\n\t\t\tmetadata: data,\n\t\t\tmetadataProvided: true,\n\t\t});\n\t}\n\n\t/**\n\t * Define the input validation schema for the action.\n\t * Cannot be called after `useValidated()`.\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\tinputSchema<\n\t\tOIS extends StandardSchemaV1 | InputSchemaFactoryFn<InputSchema>, // override input schema\n\t\tAIS extends StandardSchemaV1 = OIS extends InputSchemaFactoryFn<InputSchema, infer NextSchema> // actual input schema\n\t\t\t? NextSchema\n\t\t\t: OIS,\n\t\t// override custom validation errors shape\n\t\tOShapedErrors = ErrorsFormat extends \"flattened\"\n\t\t\t? FlattenedValidationErrors<ValidationErrors<AIS>>\n\t\t\t: ValidationErrors<AIS>,\n\t>(\n\t\tthis: HasValidatedMiddleware extends false\n\t\t\t? SafeActionClient<\n\t\t\t\t\tServerError,\n\t\t\t\t\tErrorsFormat,\n\t\t\t\t\tMetadataSchema,\n\t\t\t\t\tMetadata,\n\t\t\t\t\tHasMetadata,\n\t\t\t\t\tCtx,\n\t\t\t\t\tInputSchemaFn,\n\t\t\t\t\tInputSchema,\n\t\t\t\t\tOutputSchema,\n\t\t\t\t\tBindArgsSchemas,\n\t\t\t\t\tShapedErrors,\n\t\t\t\t\tThrowsValidationErrors,\n\t\t\t\t\tHasValidatedMiddleware,\n\t\t\t\t\tPreValidationCtx\n\t\t\t\t>\n\t\t\t: never,\n\t\tinputSchema: OIS,\n\t\tutils?: {\n\t\t\thandleValidationErrorsShape?: HandleValidationErrorsShapeFn<AIS, BindArgsSchemas, Metadata, Ctx, OShapedErrors>;\n\t\t}\n\t) {\n\t\tconst isDirectStandardSchema = isStandardSchema(inputSchema);\n\t\tconst isInputSchemaFactoryFn =\n\t\t\t!isDirectStandardSchema &&\n\t\t\ttypeof inputSchema === \"function\" &&\n\t\t\tObject.prototype.toString.call(inputSchema) === \"[object AsyncFunction]\";\n\n\t\tif (!isDirectStandardSchema && typeof inputSchema === \"function\" && !isInputSchemaFactoryFn) {\n\t\t\tthrow new TypeError(\n\t\t\t\t\"`inputSchema()` received a function that is not a Standard Schema validator. Pass a Standard Schema validator (`~standard.validate`) directly, or use an async function to build/extend the schema.\"\n\t\t\t);\n\t\t}\n\n\t\treturn new SafeActionClient({\n\t\t\t...this.#args,\n\t\t\tinputSchemaFn: (isInputSchemaFactoryFn\n\t\t\t\t? async (clientInput?: unknown) => {\n\t\t\t\t\t\tconst prevSchema = await this.#args.inputSchemaFn?.(clientInput);\n\n\t\t\t\t\t\treturn (inputSchema as unknown as InputSchemaFactoryFn<InputSchema, AIS>)(prevSchema as InputSchema, {\n\t\t\t\t\t\t\tclientInput,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t: async () => inputSchema) as unknown as InputSchemaFn,\n\t\t\thandleValidationErrorsShape: (utils?.handleValidationErrorsShape ??\n\t\t\t\tthis.#args.handleValidationErrorsShape) as HandleValidationErrorsShapeFn<\n\t\t\t\tAIS,\n\t\t\t\tBindArgsSchemas,\n\t\t\t\tMetadata,\n\t\t\t\tCtx,\n\t\t\t\tOShapedErrors\n\t\t\t>,\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated Alias for `inputSchema` method. Use that instead.\n\t */\n\t// oxlint-disable-next-line typescript/unbound-method\n\tschema = this.inputSchema;\n\n\t/**\n\t * Define the bind args input validation schema for the action.\n\t * Cannot be called after `useValidated()`.\n\t * @param bindArgsSchemas Bind args input validation schemas\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<const OBindArgsSchemas extends readonly StandardSchemaV1[]>(\n\t\tthis: HasValidatedMiddleware extends false\n\t\t\t? SafeActionClient<\n\t\t\t\t\tServerError,\n\t\t\t\t\tErrorsFormat,\n\t\t\t\t\tMetadataSchema,\n\t\t\t\t\tMetadata,\n\t\t\t\t\tHasMetadata,\n\t\t\t\t\tCtx,\n\t\t\t\t\tInputSchemaFn,\n\t\t\t\t\tInputSchema,\n\t\t\t\t\tOutputSchema,\n\t\t\t\t\tBindArgsSchemas,\n\t\t\t\t\tShapedErrors,\n\t\t\t\t\tThrowsValidationErrors,\n\t\t\t\t\tHasValidatedMiddleware,\n\t\t\t\t\tPreValidationCtx\n\t\t\t\t>\n\t\t\t: never,\n\t\tbindArgsSchemas: OBindArgsSchemas\n\t) {\n\t\treturn new SafeActionClient({\n\t\t\t...this.#args,\n\t\t\tbindArgsSchemas,\n\t\t\thandleValidationErrorsShape: this.#args.handleValidationErrorsShape as unknown as HandleValidationErrorsShapeFn<\n\t\t\t\tInputSchema,\n\t\t\t\tOBindArgsSchemas,\n\t\t\t\tMetadata,\n\t\t\t\tCtx,\n\t\t\t\tShapedErrors\n\t\t\t>,\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 StandardSchemaV1>(dataSchema: OOS) {\n\t\treturn new SafeActionClient({\n\t\t\t...this.#args,\n\t\t\toutputSchema: dataSchema,\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<\n\t\tData extends InferOutputOrDefault<OutputSchema, any>,\n\t\tUtils extends ActionCallbacks<\n\t\t\tServerError,\n\t\t\tMetadata,\n\t\t\tCtx,\n\t\t\tInputSchema,\n\t\t\tBindArgsSchemas,\n\t\t\tShapedErrors,\n\t\t\tData,\n\t\t\tPreValidationCtx\n\t\t> = ActionCallbacks<ServerError, Metadata, Ctx, InputSchema, BindArgsSchemas, ShapedErrors, Data, PreValidationCtx>,\n\t>(\n\t\tthis: HasMetadata extends true\n\t\t\t? SafeActionClient<\n\t\t\t\t\tServerError,\n\t\t\t\t\tErrorsFormat,\n\t\t\t\t\tMetadataSchema,\n\t\t\t\t\tMetadata,\n\t\t\t\t\tHasMetadata,\n\t\t\t\t\tCtx,\n\t\t\t\t\tInputSchemaFn,\n\t\t\t\t\tInputSchema,\n\t\t\t\t\tOutputSchema,\n\t\t\t\t\tBindArgsSchemas,\n\t\t\t\t\tShapedErrors,\n\t\t\t\t\tThrowsValidationErrors,\n\t\t\t\t\tHasValidatedMiddleware,\n\t\t\t\t\tPreValidationCtx\n\t\t\t\t>\n\t\t\t: never,\n\t\tserverCodeFn: ServerCodeFn<Metadata, Ctx, InputSchema, BindArgsSchemas, Data>,\n\t\tutils?: Utils\n\t): MaybeBrandThrows<\n\t\tSafeActionFn<ServerError, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n\t\tEffectiveThrows<ThrowsValidationErrors, Utils>\n\t> {\n\t\treturn actionBuilder(this.#args).action(serverCodeFn, utils) as MaybeBrandThrows<\n\t\t\tSafeActionFn<ServerError, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n\t\t\tEffectiveThrows<ThrowsValidationErrors, Utils>\n\t\t>;\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<\n\t\tData extends InferOutputOrDefault<OutputSchema, any>,\n\t\tUtils extends ActionCallbacks<\n\t\t\tServerError,\n\t\t\tMetadata,\n\t\t\tCtx,\n\t\t\tInputSchema,\n\t\t\tBindArgsSchemas,\n\t\t\tShapedErrors,\n\t\t\tData,\n\t\t\tPreValidationCtx\n\t\t> = ActionCallbacks<ServerError, Metadata, Ctx, InputSchema, BindArgsSchemas, ShapedErrors, Data, PreValidationCtx>,\n\t>(\n\t\tthis: HasMetadata extends true\n\t\t\t? SafeActionClient<\n\t\t\t\t\tServerError,\n\t\t\t\t\tErrorsFormat,\n\t\t\t\t\tMetadataSchema,\n\t\t\t\t\tMetadata,\n\t\t\t\t\tHasMetadata,\n\t\t\t\t\tCtx,\n\t\t\t\t\tInputSchemaFn,\n\t\t\t\t\tInputSchema,\n\t\t\t\t\tOutputSchema,\n\t\t\t\t\tBindArgsSchemas,\n\t\t\t\t\tShapedErrors,\n\t\t\t\t\tThrowsValidationErrors,\n\t\t\t\t\tHasValidatedMiddleware,\n\t\t\t\t\tPreValidationCtx\n\t\t\t\t>\n\t\t\t: never,\n\t\tserverCodeFn: StatefulServerCodeFn<ServerError, Metadata, Ctx, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n\t\tutils?: Utils\n\t): MaybeBrandThrows<\n\t\tSafeStateActionFn<ServerError, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n\t\tEffectiveThrows<ThrowsValidationErrors, Utils>\n\t> {\n\t\treturn actionBuilder(this.#args).stateAction(serverCodeFn, utils) as MaybeBrandThrows<\n\t\t\tSafeStateActionFn<ServerError, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n\t\t\tEffectiveThrows<ThrowsValidationErrors, Utils>\n\t\t>;\n\t}\n}\n","import type { MiddlewareFn, ValidatedMiddlewareFn } 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 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 Metadata } ? Metadata : 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\n/**\n * Creates a standalone validated middleware function. It accepts a generic object with optional `serverError`, `ctx`,\n * `metadata`, `parsedInput`, `clientInput`, `bindArgsParsedInputs`, and `bindArgsClientInputs` properties, if you need\n * one or all of them to be typed. The type for each property that is passed as generic is the **minimum** shape required\n * to define the validated middleware function, but it can also be larger than that.\n *\n * Validated middleware runs after input validation and receives typed parsed inputs.\n *\n * {@link https://next-safe-action.dev/docs/define-actions/middleware#create-standalone-validated-middleware See docs for more information}\n */\nexport const createValidatedMiddleware = <\n\tBaseData extends {\n\t\tserverError?: any;\n\t\tctx?: object;\n\t\tmetadata?: any;\n\t\tparsedInput?: unknown;\n\t\tclientInput?: unknown;\n\t\tbindArgsParsedInputs?: readonly unknown[];\n\t\tbindArgsClientInputs?: readonly unknown[];\n\t},\n>() => {\n\treturn {\n\t\tdefine: <NextCtx extends object>(\n\t\t\tmiddlewareFn: ValidatedMiddlewareFn<\n\t\t\t\tBaseData extends { serverError: infer SE } ? SE : any,\n\t\t\t\tBaseData extends { metadata: infer Metadata } ? Metadata : any,\n\t\t\t\tBaseData extends { ctx: infer Ctx extends object } ? Ctx : object,\n\t\t\t\tNextCtx,\n\t\t\t\tBaseData extends { parsedInput: infer PI } ? PI : unknown,\n\t\t\t\tBaseData extends { clientInput: infer CI } ? CI : unknown,\n\t\t\t\tBaseData extends { bindArgsParsedInputs: infer BAPI extends readonly unknown[] } ? BAPI : readonly unknown[],\n\t\t\t\tBaseData extends { bindArgsClientInputs: infer BACI extends readonly unknown[] } ? BACI : readonly unknown[]\n\t\t\t>\n\t\t) => middlewareFn,\n\t};\n};\n","import type { CreateClientOpts, ValidationErrorsFormat, HandleServerErrorFn } from \"./index.types\";\nimport { FrameworkErrorHandler } from \"./next/errors\";\nimport { SafeActionClient } from \"./safe-action-client\";\nimport type { InferOutputOrDefault, StandardSchemaV1 } from \"./standard-schema\";\nimport { DEFAULT_SERVER_ERROR_MESSAGE } from \"./utils\";\nimport { flattenValidationErrors, formatValidationErrors } from \"./validation-errors\";\n\nexport { createMiddleware, createValidatedMiddleware } from \"./middleware\";\nexport { DEFAULT_SERVER_ERROR_MESSAGE } from \"./utils\";\n\n/**\n * Detect Next.js navigation/framework errors (redirect, notFound, forbidden, unauthorized, etc.)\n * that must be re-thrown to let the framework handle them.\n */\nexport function isNavigationError(error: unknown): error is Error {\n\treturn FrameworkErrorHandler.isNavigationError(error);\n}\nexport {\n\tActionBindArgsValidationError,\n\tActionMetadataValidationError,\n\tActionOutputDataValidationError,\n\tActionValidationError,\n\tflattenValidationErrors,\n\tformatValidationErrors,\n\treturnValidationErrors,\n} from \"./validation-errors\";\n\nexport type * from \"./index.types\";\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\tErrorsFormat extends ValidationErrorsFormat | undefined = undefined,\n\tServerError = string,\n\tMetadataSchema extends StandardSchemaV1 | undefined = undefined,\n\tThrowsValidationErrors extends boolean = false,\n>(\n\tcreateOpts?: CreateClientOpts<ErrorsFormat, ServerError, MetadataSchema, ThrowsValidationErrors>\n) => {\n\t// If `handleServerError` is provided, use it, otherwise default to log to console and generic error message.\n\tconst handleServerError: HandleServerErrorFn<ServerError, MetadataSchema> =\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\tvalidatedMiddlewareFns: [],\n\t\thandleServerError,\n\t\tinputSchemaFn: undefined,\n\t\tbindArgsSchemas: [],\n\t\toutputSchema: undefined,\n\t\tctxType: {},\n\t\tpreValidationCtxType: {},\n\t\tmetadataSchema: (createOpts?.defineMetadataSchema?.() ?? undefined) as MetadataSchema,\n\t\tmetadata: undefined as InferOutputOrDefault<MetadataSchema, undefined>,\n\t\tdefaultValidationErrorsShape: (createOpts?.defaultValidationErrorsShape ?? \"formatted\") as ErrorsFormat,\n\t\tthrowValidationErrors: (createOpts?.throwValidationErrors ?? false) as ThrowsValidationErrors,\n\t\thandleValidationErrorsShape: async (ve) =>\n\t\t\tcreateOpts?.defaultValidationErrorsShape === \"flattened\"\n\t\t\t\t? flattenValidationErrors(ve)\n\t\t\t\t: formatValidationErrors(ve),\n\t});\n};\n"],"mappings":"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"}