{"version":3,"sources":["../src/core/adapter-registry.ts","../src/adapters/axios.ts","../src/adapters/inertia.ts","../src/adapters/index.ts"],"names":["_a","axios"],"mappings":"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","file":"adapters.mjs","sourcesContent":["// src/core/adapter-registry.ts\n\nimport { AdapterKey, AdapterOk, NamedAdapterFactory } from \"@/schema/adapter\";\n\n/**\n * Internal registry of adapter factories.\n *\n * We keep it simple: a plain JS object keyed by AdapterKey.\n */\nconst registry: Partial<\n    Record<AdapterKey, NamedAdapterFactory<AdapterKey, any>>\n> = {};\n\n/**\n * Built-in 'local' adapter.\n *\n * Semantics:\n * - send(options?) resolves to `{ data: Body }`\n * - submit/run do nothing by default (no side effects)\n *\n * The core will typically call onSubmitted with the result of send().\n */\nexport const localAdapter: NamedAdapterFactory<\"local\", any> = (config) => {\n    return {\n        submit() {\n            // no-op; core is responsible for calling onSubmitted\n            // using send() if it chooses to.\n        },\n        async send() {\n            const result: AdapterOk<\"local\"> = { data: config.data };\n\n            if (config.callbacks?.onSuccess) {\n                config.callbacks.onSuccess(result);\n            }\n\n            if (config.callbacks?.onFinish) {\n                config.callbacks.onFinish();\n            }\n\n            return result;\n        },\n        run() {\n            // By default, run behaves like submit (no-op),\n            // but hosts can choose to always call send() instead.\n            this.submit();\n        },\n    };\n};\n\n/**\n * Initialise registry with the built-in 'local' adapter.\n */\nregistry.local = localAdapter as NamedAdapterFactory<AdapterKey, any>;\n\n/**\n * Register or override an adapter factory for a given key.\n *\n * Hosts can call this at bootstrap time, e.g.:\n *\n *   registerAdapter<'axios'>('axios', axiosAdapter);\n */\nexport function registerAdapter<K extends AdapterKey, Body = any>(\n    key: K,\n    factory: NamedAdapterFactory<K, Body>\n): void {\n    registry[key] = factory as NamedAdapterFactory<AdapterKey, any>;\n}\n\n/**\n * Lookup an adapter factory by key.\n *\n * If no adapter is found for the given key, this returns undefined.\n */\nexport function getAdapter<K extends AdapterKey>(\n    key: K\n): NamedAdapterFactory<K, any> | undefined {\n    const factory = registry[key];\n    return factory as NamedAdapterFactory<K, any> | undefined;\n}\n\n/**\n * Check whether an adapter is registered for the given key.\n */\nexport function hasAdapter(key: AdapterKey): boolean {\n    return typeof registry[key] === \"function\";\n}\n","// src/adapters/axios.ts\nimport axios, {\n    type AxiosError,\n    type AxiosRequestConfig,\n    type AxiosResponse,\n} from \"axios\";\nimport type {\n    NamedAdapterFactory,\n    AdapterResult,\n    AdapterOk,\n    AdapterError,\n} from \"@/schema/adapter\";\n\n// (Adapters augmentation is above in the same file)\n\nexport const createAxiosAdapter: NamedAdapterFactory<\"axios\"> = (\n    config\n): AdapterResult<AdapterOk<\"axios\">> => {\n    const { method, url, data, callbacks, errorBag } = config;\n\n    function buildRequestConfig(options?: unknown): AxiosRequestConfig<any> {\n        return {\n            method,\n            url,\n            data,\n            ...(options as AxiosRequestConfig<any> | undefined),\n            headers: {\n                ...((options as AxiosRequestConfig)?.headers ?? {}),\n                \"X-Inertia-Error-Bag\": errorBag,\n            },\n        };\n    }\n\n    function submit(options?: unknown): void {\n        let finished = false;\n        const finish = () => {\n            if (finished) return;\n            finished = true;\n            callbacks?.onFinish?.();\n        };\n\n        axios\n            .request(buildRequestConfig(options))\n            .then((response: AxiosResponse<unknown>) => {\n                callbacks?.onSuccess?.(response as AdapterOk<\"axios\">);\n            })\n            .catch((error: AxiosError | unknown) => {\n                const axiosErr = error as AxiosError<unknown>;\n                // Prefer response.data; this is usually where Laravel\n                // puts `{ errors: {...} }` for validation failures.\n                const payload = axiosErr?.response?.data ?? error;\n\n                callbacks?.onError?.(payload as AdapterError<\"axios\">);\n            })\n            .finally(() => {\n                finish();\n            });\n    }\n\n    function send(options?: unknown): Promise<AdapterOk<\"axios\">> {\n        return new Promise((resolve, reject) => {\n            let finished = false;\n            const finish = () => {\n                if (finished) return;\n                finished = true;\n                callbacks?.onFinish?.();\n            };\n\n            axios\n                .request(buildRequestConfig(options))\n                .then((response: AxiosResponse<unknown>) => {\n                    callbacks?.onSuccess?.(response as AdapterOk<\"axios\">);\n                    resolve(response as AdapterOk<\"axios\">);\n                })\n                .catch((error: AxiosError | unknown) => {\n                    const axiosErr = error as AxiosError<unknown>;\n                    const payload = axiosErr?.response?.data ?? error;\n\n                    callbacks?.onError?.(payload as AdapterError<\"axios\">);\n                    reject(payload as AdapterError<\"axios\">);\n                })\n                .finally(() => {\n                    finish();\n                });\n        });\n    }\n\n    function run(options?: unknown): Promise<AdapterOk<\"axios\">> {\n        // \"Smart\" default: same as send(), so you can `await run()`.\n        return send(options);\n    }\n\n    return {\n        submit,\n        send,\n        run,\n    };\n};\n","import { Page, VisitOptions } from \"@inertiajs/core\";\n// src/adapters/inertia.ts\nimport type {\n    AdapterError,\n    AdapterOk,\n    AdapterResult,\n    NamedAdapterConfig,\n    NamedAdapterFactory,\n} from \"@/schema/adapter\";\n\n// (Adapters augmentation is above in the same file)\n\n/**\n * Lazy-load the Inertia router from '@inertiajs/react'.\n *\n * This keeps '@inertiajs/react' out of the main bundle until an\n * Inertia adapter is actually used.\n */\nasync function loadInertiaRouter() {\n    const mod: any = await import(\"@inertiajs/react\");\n    const router = mod?.router ?? mod?.Inertia;\n\n    if (!router || typeof router.visit !== \"function\") {\n        throw new Error(\n            \"[form-palette] Inertia router not found in @inertiajs/react\"\n        );\n    }\n\n    return router as {\n        visit: (url: string, options?: VisitOptions) => void;\n    };\n}\n\n/**\n * Shape raw Inertia errors into something with `.errors`\n * so Form Palette's autoErr branch can pick them up.\n */\nfunction normalizeInertiaError(\n    raw: unknown\n): { errors: Record<string, string | string[]> } | unknown {\n    if (\n        raw &&\n        typeof raw === \"object\" &&\n        \"errors\" in (raw as any) &&\n        typeof (raw as any).errors === \"object\"\n    ) {\n        // Already in { errors: {...} } shape\n        return raw as any;\n    }\n\n    if (raw && typeof raw === \"object\" && !(\"errors\" in (raw as any))) {\n        // Inertia usually passes the error bag directly to onError.\n        return { errors: raw as Record<string, string | string[]> };\n    }\n\n    return raw;\n}\n\nexport const createInertiaAdapter: NamedAdapterFactory<\"inertia\"> = (\n    config: NamedAdapterConfig<\"inertia\">\n): AdapterResult<AdapterOk<\"inertia\">> => {\n    const { method = \"post\", url, data, callbacks, errorBag } = config;\n\n    const upperMethod = method.toUpperCase() as VisitOptions[\"method\"];\n\n    /**\n     * Build VisitOptions with callbacks wired to AdapterCallbacks\n     * + optional Promise resolve/reject.\n     */\n    function buildOptions(\n        resolve?: (value: AdapterOk<\"inertia\">) => void,\n        reject?: (reason: AdapterError<\"inertia\">) => void,\n        extraOptions?: unknown\n    ): VisitOptions {\n        const user = (extraOptions as VisitOptions | undefined) ?? {};\n        return {\n            ...user, // user first\n            errorBag,\n            method: upperMethod as any,\n            // @ts-ignore\n            data,\n            preserveState: \"errors\",\n            onSuccess: (page: Page) => {\n                user.onSuccess?.(page);\n\n                callbacks?.onSuccess?.(page as AdapterOk<\"inertia\">);\n                resolve?.(page as AdapterOk<\"inertia\">);\n            },\n\n            onError: (rawErrors: any) => {\n                user.onError?.(rawErrors);\n\n                const payload = normalizeInertiaError(rawErrors);\n\n                callbacks?.onError?.(payload as AdapterError<\"inertia\">);\n                reject?.(payload as AdapterError<\"inertia\">);\n            },\n\n            onFinish: (params) => {\n                user.onFinish?.(params);\n                callbacks?.onFinish?.();\n            },\n        };\n    }\n\n    function submit(options?: unknown): void {\n        // Fire-and-forget; we still propagate callbacks and finish.\n        (async () => {\n            let finished = false;\n            const finish = () => {\n                if (finished) return;\n                finished = true;\n                callbacks?.onFinish?.();\n            };\n\n            try {\n                const router = await loadInertiaRouter();\n                const visitOptions = buildOptions(\n                    undefined,\n                    undefined,\n                    options\n                );\n                // NOTE: buildOptions already wires onFinish, so we\n                // call finish() only if the lazy import itself fails.\n                router.visit(url, visitOptions);\n            } catch (error) {\n                const payload = normalizeInertiaError(error);\n                callbacks?.onError?.(payload as AdapterError<\"inertia\">);\n                finish();\n            }\n        })();\n    }\n\n    function send(options?: unknown): Promise<AdapterOk<\"inertia\">> {\n        return new Promise(async (resolve, reject) => {\n            let finished = false;\n            const finish = () => {\n                if (finished) return;\n                finished = true;\n                callbacks?.onFinish?.();\n            };\n\n            try {\n                const router = await loadInertiaRouter();\n                const visitOptions = buildOptions(\n                    (page) => {\n                        // buildOptions' onFinish will call onFinish();\n                        resolve(page);\n                    },\n                    (err) => {\n                        reject(err);\n                    },\n                    options\n                );\n                router.visit(url, visitOptions);\n            } catch (error) {\n                const payload = normalizeInertiaError(error);\n                callbacks?.onError?.(payload as AdapterError<\"inertia\">);\n                finish();\n                reject(payload as AdapterError<\"inertia\">);\n            }\n        });\n    }\n\n    function run(options?: unknown): Promise<AdapterOk<\"inertia\">> {\n        // Same as send(), so the core can safely `await adapter.run()`\n        // if it wants, or ignore the promise if it doesn't care.\n        return send(options);\n    }\n\n    return {\n        submit,\n        send,\n        run,\n    };\n};\n","// src/adapters/index.ts\n\nimport axios from \"axios\";\nimport { registerAdapter } from \"@/core/adapter-registry\";\nimport type { AdapterKey } from \"@/schema/adapter\";\n\nimport { createAxiosAdapter } from \"./axios\";\nimport { createInertiaAdapter } from \"./inertia\";\n\n// Re-export core adapter types + helpers so hosts can import from a single place.\nexport * from \"@/schema/adapter\";\nexport * from \"@/core/adapter-registry\";\n\n// Re-export the concrete factories for hosts that want manual wiring.\nexport { createAxiosAdapter, createInertiaAdapter };\n\n/**\n * Register the Axios adapter under the \"axios\" key.\n *\n * This performs a basic runtime check to make sure Axios is present.\n * If Axios isn't available or doesn't look like a proper Axios instance,\n * an error is thrown.\n */\nexport function registerAxiosAdapter(): void {\n    // Basic sanity check – if this fails, something is wrong with the axios import.\n    if (!axios || typeof axios.request !== \"function\") {\n        throw new Error(\n            \"[form-palette] Axios does not appear to be available. \" +\n                \"Make sure 'axios' is installed and resolvable before calling registerAxiosAdapter().\"\n        );\n    }\n\n    registerAdapter<\"axios\">(\"axios\", createAxiosAdapter);\n}\n\n/**\n * Register the Inertia adapter under the \"inertia\" key.\n *\n * This explicitly tests that '@inertiajs/react' can be imported and that\n * it exposes a router with a .visit() method. If not, an error is thrown.\n *\n * Note:\n * - This function is async because it uses dynamic import.\n * - Call it at bootstrap time and await it:\n *\n *     await registerInertiaAdapter();\n */\nexport async function registerInertiaAdapter(): Promise<void> {\n    try {\n        const mod: any = await import(\"@inertiajs/react\");\n        const router = mod?.router ?? mod?.Inertia;\n\n        if (!router || typeof router.visit !== \"function\") {\n            throw new Error(\n                \"[form-palette] '@inertiajs/react' was imported, \" +\n                    \"but no router with a .visit() method was found.\"\n            );\n        }\n    } catch (error) {\n        throw new Error(\n            \"[form-palette] Failed to import '@inertiajs/react'. \" +\n                \"Cannot register the 'inertia' adapter. \" +\n                \"Make sure '@inertiajs/react' is installed and resolvable.\"\n        );\n    }\n\n    registerAdapter<\"inertia\">(\"inertia\", createInertiaAdapter);\n}\n\n/**\n * Optional helper: convenience registration for known adapter keys.\n *\n * This is purely ergonomic; you can also call registerAxiosAdapter /\n * registerInertiaAdapter directly.\n */\nexport async function registerKnownAdapter(key: AdapterKey): Promise<void> {\n    switch (key) {\n        case \"axios\":\n            registerAxiosAdapter();\n            return;\n        case \"inertia\":\n            await registerInertiaAdapter();\n            return;\n        default:\n            // For now, we only special-case axios/inertia here.\n            // Other adapters can be registered by calling registerAdapter() directly.\n            throw new Error(\n                `[form-palette] registerKnownAdapter: adapter \"${key}\" is not handled here.`\n            );\n    }\n}\n\n/**\n * Convenience helper: register all known adapters.\n **/\nexport function registerAllAdapters(): void {\n    registerAxiosAdapter();\n    registerInertiaAdapter();\n}\n"]}