{"version":3,"file":"template.cjs","names":[],"sources":["../../src/template.ts"],"sourcesContent":["import { format } from './utils'\nimport type { Config } from './config'\n\ntype TemplateTag = 'tsrImports' | 'tsrPath' | 'tsrExportStart' | 'tsrExportEnd'\n\nexport function fillTemplate(\n  config: Config,\n  template: string,\n  values: Record<TemplateTag, string>,\n) {\n  const replaced = template.replace(\n    /%%(\\w+)%%/g,\n    (_, key) => values[key as TemplateTag] || '',\n  )\n  return format(replaced, config)\n}\n\nexport type TargetTemplate = {\n  fullPkg: string\n  subPkg: string\n  rootRoute: {\n    template: () => string\n    imports: {\n      tsrImports: () => string\n      tsrExportStart: () => string\n      tsrExportEnd: () => string\n    }\n  }\n  route: {\n    template: () => string\n    imports: {\n      tsrImports: () => string\n      tsrExportStart: (routePath: string) => string\n      tsrExportEnd: () => string\n    }\n  }\n  lazyRoute: {\n    template: () => string\n    imports: {\n      tsrImports: () => string\n      tsrExportStart: (routePath: string) => string\n      tsrExportEnd: () => string\n    }\n  }\n}\n\nfunction serializeRoutePath(routePath: string) {\n  return JSON.stringify(routePath)\n}\n\nexport function getTargetTemplate(config: Config): TargetTemplate {\n  const target = config.target\n  switch (target) {\n    case 'react':\n      return {\n        fullPkg: '@tanstack/react-router',\n        subPkg: 'react-router',\n        rootRoute: {\n          template: () =>\n            [\n              'import * as React from \"react\"\\n',\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RootComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RootComponent() { return (<React.Fragment><div>Hello \"%%tsrPath%%\"!</div><Outlet /></React.Fragment>) };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { Outlet, createRootRoute } from '@tanstack/react-router';\",\n            tsrExportStart: () => 'export const Route = createRootRoute(',\n            tsrExportEnd: () => ');',\n          },\n        },\n        route: {\n          template: () =>\n            [\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RouteComponent() { return <div>Hello \"%%tsrPath%%\"!</div> };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { createFileRoute } from '@tanstack/react-router';\",\n            tsrExportStart: (routePath) =>\n              `export const Route = createFileRoute(${serializeRoutePath(routePath)})(`,\n            tsrExportEnd: () => ');',\n          },\n        },\n        lazyRoute: {\n          template: () =>\n            [\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RouteComponent() { return <div>Hello \"%%tsrPath%%\"!</div> };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { createLazyFileRoute } from '@tanstack/react-router';\",\n            tsrExportStart: (routePath) =>\n              `export const Route = createLazyFileRoute(${serializeRoutePath(routePath)})(`,\n            tsrExportEnd: () => ');',\n          },\n        },\n      }\n    case 'solid':\n      return {\n        fullPkg: '@tanstack/solid-router',\n        subPkg: 'solid-router',\n        rootRoute: {\n          template: () =>\n            [\n              'import * as Solid from \"solid-js\"\\n',\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RootComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RootComponent() { return (<><div>Hello \"%%tsrPath%%\"!</div><Outlet /></>) };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { Outlet, createRootRoute } from '@tanstack/solid-router';\",\n            tsrExportStart: () => 'export const Route = createRootRoute(',\n            tsrExportEnd: () => ');',\n          },\n        },\n        route: {\n          template: () =>\n            [\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RouteComponent() { return <div>Hello \"%%tsrPath%%\"!</div> };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { createFileRoute } from '@tanstack/solid-router';\",\n            tsrExportStart: (routePath) =>\n              `export const Route = createFileRoute(${serializeRoutePath(routePath)})(`,\n            tsrExportEnd: () => ');',\n          },\n        },\n        lazyRoute: {\n          template: () =>\n            [\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RouteComponent() { return <div>Hello \"%%tsrPath%%\"!</div> };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { createLazyFileRoute } from '@tanstack/solid-router';\",\n\n            tsrExportStart: (routePath) =>\n              `export const Route = createLazyFileRoute(${serializeRoutePath(routePath)})(`,\n\n            tsrExportEnd: () => ');',\n          },\n        },\n      }\n    case 'vue':\n      return {\n        fullPkg: '@tanstack/vue-router',\n        subPkg: 'vue-router',\n        rootRoute: {\n          template: () =>\n            [\n              'import { h } from \"vue\"\\n',\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RootComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RootComponent() { return h(\"div\", {}, [\"Hello \\\\\"%%tsrPath%%\\\\\"!\", h(Outlet)]) };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { Outlet, createRootRoute } from '@tanstack/vue-router';\",\n            tsrExportStart: () => 'export const Route = createRootRoute(',\n            tsrExportEnd: () => ');',\n          },\n        },\n        route: {\n          template: () =>\n            [\n              'import { h } from \"vue\"\\n',\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RouteComponent() { return h(\"div\", {}, \"Hello \\\\\"%%tsrPath%%\\\\\"!\") };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { createFileRoute } from '@tanstack/vue-router';\",\n            tsrExportStart: (routePath) =>\n              `export const Route = createFileRoute(${serializeRoutePath(routePath)})(`,\n            tsrExportEnd: () => ');',\n          },\n        },\n        lazyRoute: {\n          template: () =>\n            [\n              'import { h } from \"vue\"\\n',\n              '%%tsrImports%%',\n              '\\n\\n',\n              '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n              'function RouteComponent() { return h(\"div\", {}, \"Hello \\\\\"%%tsrPath%%\\\\\"!\") };\\n',\n            ].join(''),\n          imports: {\n            tsrImports: () =>\n              \"import { createLazyFileRoute } from '@tanstack/vue-router';\",\n\n            tsrExportStart: (routePath) =>\n              `export const Route = createLazyFileRoute(${serializeRoutePath(routePath)})(`,\n\n            tsrExportEnd: () => ');',\n          },\n        },\n      }\n    default:\n      throw new Error(`router-generator: Unknown target type: ${target}`)\n  }\n}\n"],"mappings":";;AAKA,SAAgB,aACd,QACA,UACA,QACA;CAKA,OAAO,cAAA,OAJU,SAAS,QACxB,eACC,GAAG,QAAQ,OAAO,QAAuB,EAE9B,GAAU,MAAM;AAChC;AA+BA,SAAS,mBAAmB,WAAmB;CAC7C,OAAO,KAAK,UAAU,SAAS;AACjC;AAEA,SAAgB,kBAAkB,QAAgC;CAChE,MAAM,SAAS,OAAO;CACtB,QAAQ,QAAR;EACE,KAAK,SACH,OAAO;GACL,SAAS;GACT,QAAQ;GACR,WAAW;IACT,gBACE;KACE;KACA;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KACF,sBAAsB;KACtB,oBAAoB;IACtB;GACF;GACA,OAAO;IACL,gBACE;KACE;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KACF,iBAAiB,cACf,wCAAwC,mBAAmB,SAAS,EAAE;KACxE,oBAAoB;IACtB;GACF;GACA,WAAW;IACT,gBACE;KACE;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KACF,iBAAiB,cACf,4CAA4C,mBAAmB,SAAS,EAAE;KAC5E,oBAAoB;IACtB;GACF;EACF;EACF,KAAK,SACH,OAAO;GACL,SAAS;GACT,QAAQ;GACR,WAAW;IACT,gBACE;KACE;KACA;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KACF,sBAAsB;KACtB,oBAAoB;IACtB;GACF;GACA,OAAO;IACL,gBACE;KACE;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KACF,iBAAiB,cACf,wCAAwC,mBAAmB,SAAS,EAAE;KACxE,oBAAoB;IACtB;GACF;GACA,WAAW;IACT,gBACE;KACE;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KAEF,iBAAiB,cACf,4CAA4C,mBAAmB,SAAS,EAAE;KAE5E,oBAAoB;IACtB;GACF;EACF;EACF,KAAK,OACH,OAAO;GACL,SAAS;GACT,QAAQ;GACR,WAAW;IACT,gBACE;KACE;KACA;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KACF,sBAAsB;KACtB,oBAAoB;IACtB;GACF;GACA,OAAO;IACL,gBACE;KACE;KACA;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KACF,iBAAiB,cACf,wCAAwC,mBAAmB,SAAS,EAAE;KACxE,oBAAoB;IACtB;GACF;GACA,WAAW;IACT,gBACE;KACE;KACA;KACA;KACA;KACA;IACF,EAAE,KAAK,EAAE;IACX,SAAS;KACP,kBACE;KAEF,iBAAiB,cACf,4CAA4C,mBAAmB,SAAS,EAAE;KAE5E,oBAAoB;IACtB;GACF;EACF;EACF,SACE,MAAM,IAAI,MAAM,0CAA0C,QAAQ;CACtE;AACF"}