{"version":3,"file":"create-vite-config.cjs","names":[],"sources":["../../src/vite/create-vite-config.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { defineConfig } from \"vite\";\nimport type { ProxyOptions, UserConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\n\nimport { tempestIcons, type TempestIconsOptions } from \"./tempest-icons\";\n\n/**\n * A Vite proxy entry: either a target URL string (expanded to\n * `{ target, changeOrigin: true }`) or a raw Vite `ProxyOptions` object.\n */\nexport type ProxyEntry = string | Record<string, unknown>;\n\nexport interface CreateViteConfigOptions {\n    /**\n     * Source directory aliased to `@`, relative to the project root.\n     * Default: `\"src\"` (so `@/components/Button` → `<root>/src/components/Button`).\n     */\n    srcDir?: string;\n    /** Dev server port. Default: `5173`. */\n    port?: number;\n    /** Dev server host. Default: `\"127.0.0.1\"`. */\n    host?: string | boolean;\n    /** Open the browser on `dev` start. Default: `false`. */\n    open?: boolean;\n    /**\n     * Dev proxy table. String values are expanded to\n     * `{ target, changeOrigin: true }`; objects are passed through untouched.\n     *\n     * @example { \"/api\": \"http://127.0.0.1:8000\" }\n     */\n    proxy?: Record<string, ProxyEntry>;\n    /** Extra path aliases merged on top of the default `@` → src alias. */\n    alias?: Record<string, string>;\n    /** Vite plugins appended after `@vitejs/plugin-react`. */\n    plugins?: unknown[];\n    /**\n     * The `tempestIcons()` plugin, which generates `virtual:tempest-icons` from the\n     * icon slugs your source mentions. On by default — it only ever removes\n     * requests. Pass `false` to leave it out, or an options object to configure the\n     * scan.\n     */\n    icons?: boolean | TempestIconsOptions;\n    /**\n     * Arbitrary Vite config (a `UserConfig` object) deep-merged last, for\n     * escape-hatch overrides (build target, define, extra `server` keys, …).\n     */\n    overrides?: Record<string, unknown>;\n}\n\n/**\n * The resulting Vite config object. Typed loosely so the SDK's published\n * declarations stay free of `vite`'s internal types; assign it straight to a\n * `vite.config.ts` default export.\n */\nexport type TempestViteConfig = Record<string, unknown>;\n\nfunction normalizeProxy(proxy: Record<string, ProxyEntry>): Record<string, ProxyOptions> {\n    const out: Record<string, ProxyOptions> = {};\n    for (const [path, value] of Object.entries(proxy)) {\n        out[path] =\n            typeof value === \"string\"\n                ? { target: value, changeOrigin: true }\n                : (value as ProxyOptions);\n    }\n    return out;\n}\n\n/**\n * Build a Tempest-flavored Vite config for a React app: the `@vitejs/plugin-react`\n * plugin, the `@` → `src` import alias, and sane dev-server defaults — so a\n * consuming app's `vite.config.ts` is a single call instead of repeated\n * boilerplate. Everything is overridable.\n *\n * Import it from the dedicated Node entry point:\n *\n * @example\n * // vite.config.ts\n * import { createViteConfig } from \"tempest-react-sdk/vite\";\n *\n * export default createViteConfig({\n *     proxy: { \"/api\": \"http://127.0.0.1:8000\" },\n * });\n */\nexport function createViteConfig(options: CreateViteConfigOptions = {}): TempestViteConfig {\n    const {\n        srcDir = \"src\",\n        port = 5173,\n        host = \"127.0.0.1\",\n        open = false,\n        proxy,\n        alias = {},\n        plugins = [],\n        icons = true,\n        overrides = {},\n    } = options;\n\n    const overridesConfig = overrides as UserConfig;\n    const iconsPlugin = icons\n        ? [tempestIcons({ dir: srcDir, ...(typeof icons === \"object\" ? icons : {}) })]\n        : [];\n\n    const base: UserConfig = {\n        plugins: [react(), ...iconsPlugin, ...plugins] as UserConfig[\"plugins\"],\n        resolve: {\n            alias: {\n                \"@\": resolve(process.cwd(), srcDir),\n                ...alias,\n            },\n        },\n        server: {\n            port,\n            host,\n            open,\n            ...(proxy ? { proxy: normalizeProxy(proxy) } : {}),\n        },\n    };\n\n    const merged: UserConfig = {\n        ...base,\n        ...overridesConfig,\n        plugins: [...(base.plugins ?? []), ...(overridesConfig.plugins ?? [])],\n        resolve: { ...base.resolve, ...overridesConfig.resolve },\n        server: { ...base.server, ...overridesConfig.server },\n    };\n\n    return defineConfig(merged) as TempestViteConfig;\n}\n"],"mappings":"sLAyDA,SAAS,EAAe,EAAiE,CACrF,IAAM,EAAoC,CAAC,EAC3C,IAAK,GAAM,CAAC,EAAM,KAAU,OAAO,QAAQ,CAAK,EAC5C,EAAI,GACA,OAAO,GAAU,SACX,CAAE,OAAQ,EAAO,aAAc,EAAK,EACnC,EAEf,OAAO,CACX,CAkBA,SAAgB,EAAiB,EAAmC,CAAC,EAAsB,CACvF,GAAM,CACF,SAAS,MACT,OAAO,KACP,OAAO,YACP,OAAO,GACP,QACA,QAAQ,CAAC,EACT,UAAU,CAAC,EACX,QAAQ,GACR,YAAY,CAAC,GACb,EAEE,EAAkB,EAClB,EAAc,EACd,CAAC,EAAA,aAAa,CAAE,IAAK,EAAQ,GAAI,OAAO,GAAU,SAAW,EAAQ,CAAC,CAAG,CAAC,CAAC,EAC3E,CAAC,EAED,EAAmB,CACrB,QAAS,EAAC,EAAA,EAAA,QAAA,CAAM,EAAG,GAAG,EAAa,GAAG,CAAO,EAC7C,QAAS,CACL,MAAO,CACH,KAAA,EAAK,EAAA,QAAA,CAAQ,QAAQ,IAAI,EAAG,CAAM,EAClC,GAAG,CACP,CACJ,EACA,OAAQ,CACJ,OACA,OACA,OACA,GAAI,EAAQ,CAAE,MAAO,EAAe,CAAK,CAAE,EAAI,CAAC,CACpD,CACJ,EAEM,EAAqB,CACvB,GAAG,EACH,GAAG,EACH,QAAS,CAAC,GAAI,EAAK,SAAW,CAAC,EAAI,GAAI,EAAgB,SAAW,CAAC,CAAE,EACrE,QAAS,CAAE,GAAG,EAAK,QAAS,GAAG,EAAgB,OAAQ,EACvD,OAAQ,CAAE,GAAG,EAAK,OAAQ,GAAG,EAAgB,MAAO,CACxD,EAEA,OAAA,EAAO,EAAA,aAAA,CAAa,CAAM,CAC9B"}