{"version":3,"sources":["../../src/config-vite/config-vite.ts"],"sourcesContent":["import { mergeConfig } from 'vite';\nimport type { UserConfig } from 'vite';\n\nexport const UNIREND_VITE_DEDUPE_PACKAGES = [\n  'react',\n  'react-dom',\n  'react-router',\n] as const;\n\nexport const UNIREND_VITE_NO_EXTERNAL_PACKAGES = ['unirend'] as const;\n\ntype DedupeConfig = NonNullable<UserConfig['resolve']>['dedupe'];\ntype NoExternalConfig = NonNullable<UserConfig['ssr']>['noExternal'];\n\nfunction mergeDedupeConfig(dedupe: DedupeConfig): string[] {\n  // mergeConfig() combines arrays, so the Unirend defaults may already be\n  // present here. Normalize to one stable dedupe list so the final config is\n  // easy to inspect and user-added entries stay appended.\n  return Array.from(\n    new Set([...UNIREND_VITE_DEDUPE_PACKAGES, ...(dedupe ?? [])]),\n  );\n}\n\nfunction mergeNoExternalConfig(noExternal: NoExternalConfig): NoExternalConfig {\n  if (noExternal === true) {\n    return true;\n  }\n\n  const userNoExternal = Array.isArray(noExternal)\n    ? noExternal\n    : noExternal\n      ? [noExternal]\n      : [];\n\n  // Like dedupe, mergeConfig() can leave duplicated defaults here. Keep one\n  // stable list while preserving user-added entries.\n  return Array.from(\n    new Set([...UNIREND_VITE_NO_EXTERNAL_PACKAGES, ...userNoExternal]),\n  );\n}\n\n/**\n * Apply the Vite config defaults unirend expects for React SSR/SSG projects.\n *\n * These defaults configure Vite to avoid externalizing Unirend during SSR and\n * dedupe React, React DOM, and React Router so SSR/SSG rendering uses the same\n * package instances and avoids split router contexts.\n */\nexport function withUnirendViteConfig(config: UserConfig = {}): UserConfig {\n  const mergedConfig: UserConfig = mergeConfig(\n    {\n      resolve: {\n        dedupe: [...UNIREND_VITE_DEDUPE_PACKAGES],\n      },\n      ssr: {\n        noExternal: [...UNIREND_VITE_NO_EXTERNAL_PACKAGES],\n      },\n    },\n    config,\n  );\n\n  const dedupe = mergeDedupeConfig(mergedConfig.resolve?.dedupe);\n  const noExternal = mergeNoExternalConfig(mergedConfig.ssr?.noExternal);\n\n  return {\n    ...mergedConfig,\n    resolve: {\n      ...mergedConfig.resolve,\n      dedupe,\n    },\n    ssr: {\n      ...mergedConfig.ssr,\n      noExternal,\n    },\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4B;AAGrB,IAAM,+BAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,oCAAoC,CAAC,SAAS;AAK3D,SAAS,kBAAkB,QAAgC;AAIzD,SAAO,MAAM;AAAA,IACX,oBAAI,IAAI,CAAC,GAAG,8BAA8B,GAAI,UAAU,CAAC,CAAE,CAAC;AAAA,EAC9D;AACF;AAEA,SAAS,sBAAsB,YAAgD;AAC7E,MAAI,eAAe,MAAM;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,MAAM,QAAQ,UAAU,IAC3C,aACA,aACE,CAAC,UAAU,IACX,CAAC;AAIP,SAAO,MAAM;AAAA,IACX,oBAAI,IAAI,CAAC,GAAG,mCAAmC,GAAG,cAAc,CAAC;AAAA,EACnE;AACF;AASO,SAAS,sBAAsB,SAAqB,CAAC,GAAe;AACzE,QAAM,mBAA2B;AAAA,IAC/B;AAAA,MACE,SAAS;AAAA,QACP,QAAQ,CAAC,GAAG,4BAA4B;AAAA,MAC1C;AAAA,MACA,KAAK;AAAA,QACH,YAAY,CAAC,GAAG,iCAAiC;AAAA,MACnD;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAEA,QAAM,SAAS,kBAAkB,aAAa,SAAS,MAAM;AAC7D,QAAM,aAAa,sBAAsB,aAAa,KAAK,UAAU;AAErE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAG,aAAa;AAAA,MAChB;AAAA,IACF;AAAA,IACA,KAAK;AAAA,MACH,GAAG,aAAa;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;","names":[]}