{"version":3,"file":"manifest.cjs","names":[],"sources":["../../src/manifest.ts"],"sourcesContent":["export type AssetCrossOrigin = 'anonymous' | 'use-credentials'\nexport type ScriptFormat = 'module' | 'iife'\n\nexport const DEV_STYLES_ATTR = 'data-tanstack-router-dev-styles'\n\nexport type AssetCrossOriginConfig =\n  | AssetCrossOrigin\n  | Partial<Record<'script' | 'stylesheet', AssetCrossOrigin>>\n\nexport type ManifestAssetLink =\n  | string\n  | {\n      href: string\n      crossOrigin?: AssetCrossOrigin\n    }\n\nexport function getAssetCrossOrigin(\n  assetCrossOrigin: AssetCrossOriginConfig | undefined,\n  kind: 'script' | 'stylesheet',\n): AssetCrossOrigin | undefined {\n  if (!assetCrossOrigin) {\n    return undefined\n  }\n\n  if (typeof assetCrossOrigin === 'string') {\n    return assetCrossOrigin\n  }\n\n  return assetCrossOrigin[kind]\n}\n\nexport function getManifestScriptFormat(\n  manifest: { scriptFormat?: ScriptFormat } | undefined,\n): ScriptFormat {\n  return manifest?.scriptFormat ?? 'module'\n}\n\nexport function getScriptPreloadAttrs(\n  manifest: { scriptFormat?: ScriptFormat } | undefined,\n  link: ManifestAssetLink,\n  assetCrossOrigin?: AssetCrossOriginConfig,\n): {\n  rel: 'modulepreload' | 'preload'\n  as?: 'script'\n  href: string\n  crossOrigin?: AssetCrossOrigin\n} {\n  const preloadLink = resolveManifestAssetLink(link)\n  const crossOrigin =\n    getAssetCrossOrigin(assetCrossOrigin, 'script') ?? preloadLink.crossOrigin\n\n  return {\n    ...(getManifestScriptFormat(manifest) === 'iife'\n      ? { rel: 'preload', as: 'script' }\n      : { rel: 'modulepreload' }),\n    href: preloadLink.href,\n    ...(crossOrigin ? { crossOrigin } : {}),\n  }\n}\n\nexport function resolveManifestAssetLink(link: ManifestAssetLink) {\n  if (typeof link === 'string') {\n    return { href: link, crossOrigin: undefined }\n  }\n\n  return link\n}\n\nexport type Manifest = {\n  scriptFormat?: ScriptFormat\n  inlineStyle?: ManifestInlineCss\n  routes: Record<string, ManifestRoute>\n}\n\nexport type ServerManifest = {\n  scriptFormat?: ScriptFormat\n  inlineCss?: ServerManifestInlineCss\n  routes: Record<string, ServerManifestRoute>\n}\n\nexport type ServerManifestInlineCss = {\n  styles: Record<string, string>\n  templates?: Record<string, InlineCssTemplate>\n}\n\nexport type InlineCssTemplate = {\n  strings: Array<string>\n  urls: Array<string>\n}\n\nexport type ManifestRoute = {\n  filePath?: string\n  preloads?: Array<ManifestAssetLink>\n  scripts?: Array<ManifestScript>\n  css?: Array<ManifestCssLink>\n}\n\nexport type ServerManifestRoute = ManifestRoute\n\nexport type ManifestRouteAssets = Pick<\n  ManifestRoute,\n  'preloads' | 'scripts' | 'css'\n>\n\nexport type RouterManagedTitleTag = {\n  tag: 'title'\n  attrs?: Record<string, any>\n  children: string\n}\n\nexport type RouterManagedMetaTag = {\n  tag: 'meta'\n  attrs?: Record<string, any>\n  children?: never\n}\n\nexport type RouterManagedLinkTag = {\n  tag: 'link'\n  attrs?: Record<string, any>\n  children?: never\n}\n\nexport type RouterManagedScriptTag = {\n  tag: 'script'\n  attrs?: Record<string, any>\n  children?: string\n}\n\nexport type ManifestScript = Omit<RouterManagedScriptTag, 'tag'>\n\nexport type RouterManagedStyleTag = {\n  tag: 'style'\n  attrs?: Record<string, any>\n  children?: string\n  inlineCss?: true\n}\n\nexport type RouterManagedTag =\n  | RouterManagedTitleTag\n  | RouterManagedMetaTag\n  | RouterManagedLinkTag\n  | RouterManagedScriptTag\n  | RouterManagedStyleTag\n\nexport function appendUniqueUserTags(\n  target: Array<RouterManagedTag>,\n  tags: Array<RouterManagedTag>,\n) {\n  if (tags.length === 0) {\n    return\n  }\n\n  if (tags.length === 1) {\n    target.push(tags[0]!)\n    return\n  }\n\n  const seen = new Set<string>()\n  for (const tag of tags) {\n    const key = JSON.stringify(tag)\n    if (seen.has(key)) {\n      continue\n    }\n    seen.add(key)\n    target.push(tag)\n  }\n}\n\nexport type ManifestCssLink =\n  | string\n  | {\n      href: string\n      crossOrigin?: AssetCrossOrigin\n      [DEV_STYLES_ATTR]?: true\n    }\n\nexport type ManifestInlineCss = {\n  attrs?: Record<string, any>\n  children?: string\n}\n\nexport type RouterManagedInlineCssTag = RouterManagedStyleTag & {\n  inlineCss: true\n}\n\nexport function getStylesheetHref(asset: ManifestCssLink) {\n  return resolveManifestCssLink(asset).href\n}\n\nexport function resolveManifestCssLink(link: ManifestCssLink) {\n  if (typeof link === 'string') {\n    return { href: link, crossOrigin: undefined }\n  }\n\n  return link\n}\n\nexport function createInlineCssStyleAsset(css: string): ManifestInlineCss {\n  return {\n    attrs: {\n      suppressHydrationWarning: true,\n    },\n    children: css,\n  }\n}\n\nexport function createInlineCssPlaceholderAsset(): ManifestInlineCss {\n  return {\n    attrs: {\n      suppressHydrationWarning: true,\n    },\n  }\n}\n"],"mappings":";AAGA,MAAa,kBAAkB;AAa/B,SAAgB,oBACd,kBACA,MAC8B;CAC9B,IAAI,CAAC,kBACH;CAGF,IAAI,OAAO,qBAAqB,UAC9B,OAAO;CAGT,OAAO,iBAAiB;AAC1B;AAEA,SAAgB,wBACd,UACc;CACd,OAAO,UAAU,gBAAgB;AACnC;AAEA,SAAgB,sBACd,UACA,MACA,kBAMA;CACA,MAAM,cAAc,yBAAyB,IAAI;CACjD,MAAM,cACJ,oBAAoB,kBAAkB,QAAQ,KAAK,YAAY;CAEjE,OAAO;EACL,GAAI,wBAAwB,QAAQ,MAAM,SACtC;GAAE,KAAK;GAAW,IAAI;EAAS,IAC/B,EAAE,KAAK,gBAAgB;EAC3B,MAAM,YAAY;EAClB,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;CACvC;AACF;AAEA,SAAgB,yBAAyB,MAAyB;CAChE,IAAI,OAAO,SAAS,UAClB,OAAO;EAAE,MAAM;EAAM,aAAa,KAAA;CAAU;CAG9C,OAAO;AACT;AA8EA,SAAgB,qBACd,QACA,MACA;CACA,IAAI,KAAK,WAAW,GAClB;CAGF,IAAI,KAAK,WAAW,GAAG;EACrB,OAAO,KAAK,KAAK,EAAG;EACpB;CACF;CAEA,MAAM,uBAAO,IAAI,IAAY;CAC7B,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,MAAM,KAAK,UAAU,GAAG;EAC9B,IAAI,KAAK,IAAI,GAAG,GACd;EAEF,KAAK,IAAI,GAAG;EACZ,OAAO,KAAK,GAAG;CACjB;AACF;AAmBA,SAAgB,kBAAkB,OAAwB;CACxD,OAAO,uBAAuB,KAAK,EAAE;AACvC;AAEA,SAAgB,uBAAuB,MAAuB;CAC5D,IAAI,OAAO,SAAS,UAClB,OAAO;EAAE,MAAM;EAAM,aAAa,KAAA;CAAU;CAG9C,OAAO;AACT;AAEA,SAAgB,0BAA0B,KAAgC;CACxE,OAAO;EACL,OAAO,EACL,0BAA0B,KAC5B;EACA,UAAU;CACZ;AACF;AAEA,SAAgB,kCAAqD;CACnE,OAAO,EACL,OAAO,EACL,0BAA0B,KAC5B,EACF;AACF"}