{"version":3,"file":"analogjs-router.mjs","sources":["../../../../packages/router/src/lib/meta-tags.ts","../../../../packages/router/src/lib/endpoints.ts","../../../../packages/router/src/lib/inject-route-endpoint-url.ts","../../../../packages/router/src/lib/route-config.ts","../../../../packages/router/src/lib/markdown-helpers.ts","../../../../packages/router/src/lib/constants.ts","../../../../packages/router/src/lib/routes.ts","../../../../packages/router/src/lib/define-route.ts","../../../../packages/router/src/lib/cookie-interceptor.ts","../../../../packages/router/src/lib/provide-file-router.ts","../../../../packages/router/src/lib/inject-load.ts","../../../../packages/router/src/lib/get-load-resolver.ts","../../../../packages/router/src/lib/cache-key.ts","../../../../packages/router/src/lib/request-context.ts","../../../../packages/router/src/lib/form-action.directive.ts","../../../../packages/router/src/lib/debug/routes.ts","../../../../packages/router/src/lib/debug/index.ts","../../../../packages/router/src/lib/server.component.ts","../../../../packages/router/src/analogjs-router.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { Meta, MetaDefinition as NgMetaTag } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\nexport const ROUTE_META_TAGS_KEY = Symbol(\n  '@analogjs/router Route Meta Tags Key',\n);\n\nconst CHARSET_KEY = 'charset';\nconst HTTP_EQUIV_KEY = 'httpEquiv';\n// httpEquiv selector key needs to be in kebab case format\nconst HTTP_EQUIV_SELECTOR_KEY = 'http-equiv';\nconst NAME_KEY = 'name';\nconst PROPERTY_KEY = 'property';\nconst CONTENT_KEY = 'content';\nconst ITEMPROP_KEY = 'itemprop';\n\nexport type MetaTag =\n  | (CharsetMetaTag & ExcludeRestMetaTagKeys<typeof CHARSET_KEY>)\n  | (HttpEquivMetaTag & ExcludeRestMetaTagKeys<typeof HTTP_EQUIV_KEY>)\n  | (NameMetaTag & ExcludeRestMetaTagKeys<typeof NAME_KEY>)\n  | (PropertyMetaTag & ExcludeRestMetaTagKeys<typeof PROPERTY_KEY>)\n  | (ItempropMetaTag & ExcludeRestMetaTagKeys<typeof ITEMPROP_KEY>);\n\ntype CharsetMetaTag = { [CHARSET_KEY]: string };\ntype HttpEquivMetaTag = { [HTTP_EQUIV_KEY]: string; [CONTENT_KEY]: string };\ntype NameMetaTag = { [NAME_KEY]: string; [CONTENT_KEY]: string };\ntype PropertyMetaTag = { [PROPERTY_KEY]: string; [CONTENT_KEY]: string };\ntype ItempropMetaTag = { [ITEMPROP_KEY]: string; [CONTENT_KEY]: string };\n\ntype MetaTagKey =\n  | typeof CHARSET_KEY\n  | typeof HTTP_EQUIV_KEY\n  | typeof NAME_KEY\n  | typeof PROPERTY_KEY\n  | typeof ITEMPROP_KEY;\ntype ExcludeRestMetaTagKeys<Key extends MetaTagKey> = {\n  [K in Exclude<MetaTagKey, Key>]?: never;\n};\n\ntype MetaTagSelector =\n  | typeof CHARSET_KEY\n  | `${\n      | typeof HTTP_EQUIV_SELECTOR_KEY\n      | typeof NAME_KEY\n      | typeof PROPERTY_KEY\n      | typeof ITEMPROP_KEY}=\"${string}\"`;\ntype MetaTagMap = Record<MetaTagSelector, MetaTag>;\n\nexport function updateMetaTagsOnRouteChange(): void {\n  const router = inject(Router);\n  const metaService = inject(Meta);\n\n  router.events\n    .pipe(filter((event) => event instanceof NavigationEnd))\n    .subscribe(() => {\n      const metaTagMap = getMetaTagMap(router.routerState.snapshot.root);\n\n      for (const metaTagSelector in metaTagMap) {\n        const metaTag = metaTagMap[\n          metaTagSelector as MetaTagSelector\n        ] as NgMetaTag;\n        metaService.updateTag(metaTag, metaTagSelector);\n      }\n    });\n}\n\nfunction getMetaTagMap(route: ActivatedRouteSnapshot): MetaTagMap {\n  const metaTagMap = {} as MetaTagMap;\n  let currentRoute: ActivatedRouteSnapshot | null = route;\n\n  while (currentRoute) {\n    const metaTags: MetaTag[] = currentRoute.data[ROUTE_META_TAGS_KEY] ?? [];\n    for (const metaTag of metaTags) {\n      metaTagMap[getMetaTagSelector(metaTag)] = metaTag;\n    }\n\n    currentRoute = currentRoute.firstChild;\n  }\n\n  return metaTagMap;\n}\n\nfunction getMetaTagSelector(metaTag: MetaTag): MetaTagSelector {\n  if (metaTag.name) {\n    return `${NAME_KEY}=\"${metaTag.name}\"`;\n  }\n\n  if (metaTag.property) {\n    return `${PROPERTY_KEY}=\"${metaTag.property}\"`;\n  }\n\n  if (metaTag.httpEquiv) {\n    return `${HTTP_EQUIV_SELECTOR_KEY}=\"${metaTag.httpEquiv}\"`;\n  }\n\n  if (metaTag.itemprop) {\n    return `${ITEMPROP_KEY}=\"${metaTag.itemprop}\"`;\n  }\n\n  return CHARSET_KEY;\n}\n","export const ANALOG_META_KEY = Symbol(\n  '@analogjs/router Analog Route Metadata Key',\n);\n\n/**\n * This variable reference is replaced with a glob of all route endpoints.\n */\nexport let ANALOG_PAGE_ENDPOINTS: any = {};\n","import type { ActivatedRouteSnapshot, Route } from '@angular/router';\nimport { injectBaseURL, injectAPIPrefix } from '@analogjs/router/tokens';\n\nimport { ANALOG_META_KEY } from './endpoints';\n\nexport function injectRouteEndpointURL(route: ActivatedRouteSnapshot) {\n  const routeConfig = route.routeConfig as Route & {\n    [ANALOG_META_KEY]: { endpoint: string; endpointKey: string };\n  };\n\n  const apiPrefix = injectAPIPrefix();\n  const baseUrl = injectBaseURL();\n  const { queryParams, fragment: hash, params, parent } = route;\n  const segment = parent?.url.map((segment) => segment.path).join('/') || '';\n  const url = new URL(\n    '',\n    import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] ||\n      baseUrl ||\n      (typeof window !== 'undefined' && window.location.origin\n        ? window.location.origin\n        : ''),\n  );\n  url.pathname = `${\n    url.pathname.endsWith('/') ? url.pathname : url.pathname + '/'\n  }${apiPrefix}/_analog${routeConfig[ANALOG_META_KEY].endpoint}`;\n  url.search = `${new URLSearchParams(queryParams).toString()}`;\n  url.hash = hash ?? '';\n\n  Object.keys(params).forEach((param) => {\n    url.pathname = url.pathname.replace(`[${param}]`, params[param]);\n  });\n  url.pathname = url.pathname.replace('**', segment);\n\n  return url;\n}\n","import { inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport type { Route } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { RedirectRouteMeta, RouteConfig, RouteMeta } from './models';\nimport { ROUTE_META_TAGS_KEY } from './meta-tags';\nimport { ANALOG_PAGE_ENDPOINTS, ANALOG_META_KEY } from './endpoints';\nimport { injectRouteEndpointURL } from './inject-route-endpoint-url';\n\nexport function toRouteConfig(routeMeta: RouteMeta | undefined): RouteConfig {\n  if (routeMeta && isRedirectRouteMeta(routeMeta)) {\n    return routeMeta;\n  }\n\n  let { meta, ...routeConfig } = routeMeta ?? {};\n\n  if (Array.isArray(meta)) {\n    routeConfig.data = { ...routeConfig.data, [ROUTE_META_TAGS_KEY]: meta };\n  } else if (typeof meta === 'function') {\n    routeConfig.resolve = {\n      ...routeConfig.resolve,\n      [ROUTE_META_TAGS_KEY]: meta,\n    };\n  }\n\n  if (!routeConfig) {\n    routeConfig = {};\n  }\n\n  routeConfig.runGuardsAndResolvers =\n    routeConfig.runGuardsAndResolvers ?? 'paramsOrQueryParamsChange';\n  routeConfig.resolve = {\n    ...routeConfig.resolve,\n    load: async (route) => {\n      const routeConfig = route.routeConfig as Route & {\n        [ANALOG_META_KEY]: { endpoint: string; endpointKey: string };\n      };\n\n      if (ANALOG_PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {\n        const http = inject(HttpClient);\n        const url = injectRouteEndpointURL(route);\n\n        if (\n          !!import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] &&\n          (globalThis as any).$fetch\n        ) {\n          return (globalThis as any).$fetch(url.pathname);\n        }\n\n        return firstValueFrom(http.get(`${url.href}`));\n      }\n\n      return {};\n    },\n  };\n\n  return routeConfig;\n}\n\nfunction isRedirectRouteMeta(\n  routeMeta: RouteMeta,\n): routeMeta is RedirectRouteMeta {\n  return !!routeMeta.redirectTo;\n}\n","import { inject } from '@angular/core';\nimport { RouteExport } from './models';\n\ndeclare const Zone: any;\ntype RenderResult = string | { content: string };\ntype ContentRendererLike = {\n  render: (content: string) => Promise<RenderResult>;\n};\n\n// The Zone is currently enabled by default, so we wouldn't need this check.\n// However, leaving this open space will be useful if zone.js becomes optional\n// in the future. This means we won't have to modify the current code, and it will\n// continue to work seamlessly.\nconst isNgZoneEnabled = typeof Zone !== 'undefined' && !!Zone.root;\n\nexport function toMarkdownModule(\n  markdownFileFactory: () => Promise<string>,\n): () => Promise<RouteExport> {\n  return async () => {\n    const createLoader = () =>\n      Promise.all([import('@analogjs/content'), markdownFileFactory()]);\n\n    const [\n      { parseRawContentFile, MarkdownRouteComponent, ContentRenderer },\n      markdownFile,\n    ]: [typeof import('@analogjs/content'), string] = await (isNgZoneEnabled\n      ? // We are not able to use `runOutsideAngular` because we are not inside\n        // an injection context to retrieve the `NgZone` instance.\n        // The `Zone.root.run` is required when the code is running in the\n        // browser since asynchronous tasks being scheduled in the current context\n        // are a reason for unnecessary change detection cycles.\n        Zone.root.run(createLoader)\n      : createLoader());\n\n    const { content, attributes } = parseRawContentFile(markdownFile);\n    const { title, meta } = attributes;\n\n    return {\n      default: MarkdownRouteComponent,\n      routeMeta: {\n        data: { _analogContent: content },\n        title,\n        meta,\n        resolve: {\n          renderedAnalogContent: async () => {\n            const contentRenderer = inject<any>(\n              ContentRenderer as any,\n            ) as ContentRendererLike;\n            const rendered = await contentRenderer.render(content);\n            return typeof rendered === 'string'\n              ? rendered\n              : (rendered as any).content;\n          },\n        },\n      },\n    };\n  };\n}\n","export const ENDPOINT_EXTENSION = '.server.ts';\nexport const APP_DIR = 'src/app';\n","import { UrlSegment } from '@angular/router';\nimport type { Route } from '@angular/router';\nimport type { UrlMatcher } from '@angular/router';\n\nimport type { RouteExport, RouteMeta } from './models';\nimport { toRouteConfig } from './route-config';\nimport { toMarkdownModule } from './markdown-helpers';\nimport { ENDPOINT_EXTENSION } from './constants';\nimport { ANALOG_META_KEY } from './endpoints';\n\n/**\n * This variable reference is replaced with a glob of all page routes.\n */\nexport let ANALOG_ROUTE_FILES = {};\n\n/**\n * This variable reference is replaced with a glob of all content routes.\n */\nexport let ANALOG_CONTENT_ROUTE_FILES = {};\n\nexport type Files = Record<string, () => Promise<RouteExport | string>>;\n\ntype RawRoute = {\n  filename: string | null;\n  rawSegment: string;\n  ancestorRawSegments: string[];\n  segment: string;\n  level: number;\n  children: RawRoute[];\n};\n\ntype RawRouteMap = Record<string, RawRoute>;\n\ntype RawRouteByLevelMap = Record<number, RawRouteMap>;\n\n/**\n * A function used to parse list of files and create configuration of routes.\n *\n * @param files\n * @returns Array of routes\n */\nexport function createRoutes(files: Files, debug = false): Route[] {\n  const filenames = Object.keys(files);\n\n  if (filenames.length === 0) {\n    return [];\n  }\n\n  // map filenames to raw routes and group them by level\n  const rawRoutesByLevelMap = filenames.reduce((acc, filename) => {\n    const rawPath = toRawPath(filename);\n    const rawSegments = rawPath.split('/');\n    // nesting level starts at 0\n    // rawPath: /products => level: 0\n    // rawPath: /products/:id => level: 1\n    const level = rawSegments.length - 1;\n    const rawSegment = rawSegments[level];\n    const ancestorRawSegments = rawSegments.slice(0, level);\n\n    return {\n      ...acc,\n      [level]: {\n        ...acc[level],\n        [rawPath]: {\n          filename,\n          rawSegment,\n          ancestorRawSegments,\n          segment: toSegment(rawSegment),\n          level,\n          children: [],\n        },\n      },\n    };\n  }, {} as RawRouteByLevelMap);\n\n  const allLevels = Object.keys(rawRoutesByLevelMap).map(Number);\n  const maxLevel = Math.max(...allLevels);\n\n  // add each raw route to its parent's children array\n  for (let level = maxLevel; level > 0; level--) {\n    const rawRoutesMap = rawRoutesByLevelMap[level];\n    const rawPaths = Object.keys(rawRoutesMap);\n\n    for (const rawPath of rawPaths) {\n      const rawRoute = rawRoutesMap[rawPath];\n      const parentRawPath = rawRoute.ancestorRawSegments.join('/');\n      const parentRawSegmentIndex = rawRoute.ancestorRawSegments.length - 1;\n      const parentRawSegment =\n        rawRoute.ancestorRawSegments[parentRawSegmentIndex];\n\n      // create the parent level and/or raw route if it does not exist\n      // parent route won't exist for nested routes that don't have a layout route\n      rawRoutesByLevelMap[level - 1] ||= {};\n      rawRoutesByLevelMap[level - 1][parentRawPath] ||= {\n        filename: null,\n        rawSegment: parentRawSegment,\n        ancestorRawSegments: rawRoute.ancestorRawSegments.slice(\n          0,\n          parentRawSegmentIndex,\n        ),\n        segment: toSegment(parentRawSegment),\n        level: level - 1,\n        children: [],\n      };\n\n      rawRoutesByLevelMap[level - 1][parentRawPath].children.push(rawRoute);\n    }\n  }\n\n  // only take raw routes from the root level\n  // since they already contain nested routes as their children\n  const rootRawRoutesMap = rawRoutesByLevelMap[0];\n  const rawRoutes = Object.keys(rootRawRoutesMap).map(\n    (segment) => rootRawRoutesMap[segment],\n  );\n  sortRawRoutes(rawRoutes);\n\n  return toRoutes(rawRoutes, files, debug);\n}\n\nfunction toRawPath(filename: string): string {\n  return (\n    filename\n      .replace(\n        // convert to relative path and remove file extension\n        /^(?:[a-zA-Z]:[\\\\/])?(.*?)[\\\\/](?:routes|pages)[\\\\/]|(?:[\\\\/](?:app[\\\\/](?:routes|pages)|src[\\\\/]content)[\\\\/])|(\\.page\\.(js|ts|analog|ag)$)|(\\.(ts|md|analog|ag)$)/g,\n        '',\n      )\n      // [[...slug]] => placeholder (named empty) which is stripped by toSegment\n      .replace(/\\[\\[\\.\\.\\.([^\\]]+)\\]\\]/g, '(opt-$1)')\n      .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n      .replace(/\\[([^\\]]+)\\]/g, ':$1')\n  ); // [id] => :id\n}\n\nfunction toSegment(rawSegment: string): string {\n  return rawSegment\n    .replace(/index|\\(.*?\\)/g, '') // replace named empty segments\n    .replace(/\\.|\\/+/g, '/') // replace dots with slashes and remove redundant slashes\n    .replace(/^\\/+|\\/+$/g, ''); // remove trailing slashes\n}\n\nfunction createOptionalCatchAllMatcher(paramName: string): UrlMatcher {\n  return (segments) => {\n    if (segments.length === 0) {\n      return null;\n    }\n    const joined = segments.map((s) => s.path).join('/');\n    return {\n      consumed: segments,\n      posParams: { [paramName]: new UrlSegment(joined, {}) },\n    };\n  };\n}\n\nfunction toRoutes(rawRoutes: RawRoute[], files: Files, debug = false): Route[] {\n  const routes: Route[] = [];\n\n  for (const rawRoute of rawRoutes) {\n    const children: Route[] | undefined =\n      rawRoute.children.length > 0\n        ? toRoutes(rawRoute.children, files, debug)\n        : undefined;\n    let module: (() => Promise<RouteExport>) | undefined = undefined;\n    let analogMeta: { endpoint: string; endpointKey: string } | undefined =\n      undefined;\n\n    if (rawRoute.filename) {\n      const isMarkdownFile = rawRoute.filename.endsWith('.md');\n\n      if (!debug) {\n        module = isMarkdownFile\n          ? toMarkdownModule(files[rawRoute.filename] as () => Promise<string>)\n          : (files[rawRoute.filename] as () => Promise<RouteExport>);\n      }\n\n      const endpointKey = rawRoute.filename.replace(\n        /\\.page\\.(ts|analog|ag)$/,\n        ENDPOINT_EXTENSION,\n      );\n\n      // get endpoint path\n      const rawEndpoint = rawRoute.filename\n        .replace(/\\.page\\.(ts|analog|ag)$/, '')\n        .replace(/\\[\\[\\.\\.\\..+\\]\\]/, '**')\n        .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n        .replace(/^(.*?)\\/pages/, '/pages');\n\n      // replace periods, remove (index) paths\n      const endpoint = (rawEndpoint || '')\n        .replace(/\\./g, '/')\n        .replace(/\\/\\((.*?)\\)$/, '/-$1-');\n\n      analogMeta = {\n        endpoint,\n        endpointKey,\n      };\n    }\n\n    // Detect Next.js-style optional catch-all at this node: [[...param]]\n    const optCatchAllMatch = rawRoute.filename?.match(/\\[\\[\\.\\.\\.([^\\]]+)\\]\\]/);\n    const optCatchAllParam = optCatchAllMatch ? optCatchAllMatch[1] : null;\n\n    type DebugRoute = Route & {\n      filename?: string | null | undefined;\n      isLayout?: boolean;\n    };\n\n    const route: Route & { meta?: typeof analogMeta } & DebugRoute = module\n      ? {\n          path: rawRoute.segment,\n          loadChildren: () =>\n            module!().then((m) => {\n              if (import.meta.env.DEV) {\n                const hasModuleDefault = !!m.default;\n                const hasRedirect = !!m.routeMeta?.redirectTo;\n\n                if (!hasModuleDefault && !hasRedirect) {\n                  console.warn(\n                    `[Analog] Missing default export at ${rawRoute.filename}`,\n                  );\n                }\n              }\n\n              const baseChild = {\n                path: '',\n                component: m.default,\n                ...toRouteConfig(m.routeMeta as RouteMeta | undefined),\n                children,\n                [ANALOG_META_KEY]: analogMeta,\n              };\n\n              // Base route first so static matches win, then optional catch-all matcher\n              return [\n                {\n                  ...baseChild,\n                },\n                ...(optCatchAllParam\n                  ? [\n                      {\n                        matcher:\n                          createOptionalCatchAllMatcher(optCatchAllParam),\n                        component: m.default,\n                        ...toRouteConfig(m.routeMeta as RouteMeta | undefined),\n                        [ANALOG_META_KEY]: analogMeta,\n                      },\n                    ]\n                  : []),\n              ];\n            }),\n        }\n      : {\n          path: rawRoute.segment,\n          ...(debug\n            ? {\n                filename: rawRoute.filename ? rawRoute.filename : undefined,\n                isLayout: children && children.length > 0 ? true : false,\n              }\n            : {}),\n          children,\n        };\n\n    routes.push(route);\n  }\n\n  return routes;\n}\n\nfunction sortRawRoutes(rawRoutes: RawRoute[]): void {\n  rawRoutes.sort((a, b) => {\n    let segmentA = deprioritizeSegment(a.segment);\n    let segmentB = deprioritizeSegment(b.segment);\n\n    // prioritize routes with fewer children\n    if (a.children.length > b.children.length) {\n      segmentA = `~${segmentA}`;\n    } else if (a.children.length < b.children.length) {\n      segmentB = `~${segmentB}`;\n    }\n\n    return segmentA > segmentB ? 1 : -1;\n  });\n\n  for (const rawRoute of rawRoutes) {\n    sortRawRoutes(rawRoute.children);\n  }\n}\n\nfunction deprioritizeSegment(segment: string): string {\n  // deprioritize param and wildcard segments\n  return segment.replace(':', '~~').replace('**', '~~~~');\n}\n\nexport const routes: Route[] = createRoutes({\n  ...ANALOG_ROUTE_FILES,\n  ...ANALOG_CONTENT_ROUTE_FILES,\n});\n","import { inject } from '@angular/core';\nimport { Route as NgRoute, Router } from '@angular/router';\nimport { ActivatedRoute } from '@angular/router';\n\ntype RouteOmitted =\n  | 'component'\n  | 'loadComponent'\n  | 'loadChildren'\n  | 'path'\n  | 'pathMatch';\n\ntype RestrictedRoute = Omit<NgRoute, RouteOmitted>;\n\n/**\n * @deprecated Use `RouteMeta` type instead.\n * For more info see: https://github.com/analogjs/analog/issues/223\n *\n * Defines additional route config metadata. This\n * object is merged into the route config with\n * the predefined file-based route.\n *\n * @usageNotes\n *\n * ```\n * import { Component } from '@angular/core';\n * import { defineRouteMeta } from '@analogjs/router';\n *\n *  export const routeMeta = defineRouteMeta({\n *    title: 'Welcome'\n *  });\n *\n * @Component({\n *   template: `Home`,\n *   standalone: true,\n * })\n * export default class HomeComponent {}\n * ```\n *\n * @param route\n * @returns\n */\nexport const defineRouteMeta = (route: RestrictedRoute) => {\n  return route;\n};\n\n/**\n * Returns the instance of Angular Router\n *\n * @returns The router\n */\nexport const injectRouter = () => {\n  return inject(Router);\n};\n\n/**\n * Returns the instance of the Activate Route for the component\n *\n * @returns The activated route\n */\nexport const injectActivatedRoute = () => {\n  return inject(ActivatedRoute);\n};\n","import { isPlatformServer } from '@angular/common';\nimport { HttpHandlerFn, HttpHeaders, HttpRequest } from '@angular/common/http';\nimport { PLATFORM_ID, inject } from '@angular/core';\nimport { injectRequest } from '@analogjs/router/tokens';\n\nexport function cookieInterceptor(\n  req: HttpRequest<unknown>,\n  next: HttpHandlerFn,\n  location = inject(PLATFORM_ID),\n  serverRequest = injectRequest(),\n) {\n  if (isPlatformServer(location) && req.url.includes('/_analog/')) {\n    let headers = new HttpHeaders();\n    const cookies = serverRequest?.headers.cookie;\n    headers = headers.set('cookie', cookies ?? '');\n\n    const cookiedRequest = req.clone({\n      headers,\n    });\n\n    return next(cookiedRequest);\n  } else {\n    return next(req);\n  }\n}\n","import {\n  ENVIRONMENT_INITIALIZER,\n  EnvironmentProviders,\n  makeEnvironmentProviders,\n} from '@angular/core';\nimport { provideRouter, RouterFeatures, ROUTES, Routes } from '@angular/router';\nimport { API_PREFIX } from '@analogjs/router/tokens';\nimport { ɵHTTP_ROOT_INTERCEPTOR_FNS as HTTP_ROOT_INTERCEPTOR_FNS } from '@angular/common/http';\n\nimport { routes } from './routes';\nimport { updateMetaTagsOnRouteChange } from './meta-tags';\nimport { cookieInterceptor } from './cookie-interceptor';\n\ndeclare const ANALOG_API_PREFIX: string;\n\n/**\n * Sets up providers for the Angular router, and registers\n * file-based routes. Additional features can be provided\n * to further configure the behavior of the router.\n *\n * @param features\n * @returns Providers and features to configure the router with routes\n */\nexport function provideFileRouter(\n  ...features: RouterFeatures[]\n): EnvironmentProviders {\n  const extraRoutesFeature = features.filter((feat) => feat.ɵkind >= 100);\n  const routerFeatures = features.filter((feat) => feat.ɵkind < 100);\n\n  return makeEnvironmentProviders([\n    extraRoutesFeature.map((erf) => erf.ɵproviders),\n    provideRouter(routes, ...routerFeatures),\n    {\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useValue: () => updateMetaTagsOnRouteChange(),\n    },\n    {\n      provide: HTTP_ROOT_INTERCEPTOR_FNS,\n      multi: true,\n      useValue: cookieInterceptor,\n    },\n    {\n      provide: API_PREFIX,\n      useFactory() {\n        return typeof ANALOG_API_PREFIX !== 'undefined'\n          ? ANALOG_API_PREFIX\n          : 'api';\n      },\n    },\n  ]);\n}\n\n/**\n * Provides extra custom routes in addition to the routes\n * discovered from the filesystem-based routing. These routes are\n * inserted before the filesystem-based routes, and take priority in\n * route matching.\n */\nexport function withExtraRoutes(routes: Routes): RouterFeatures {\n  return {\n    ɵkind: 100 as number,\n    ɵproviders: [{ provide: ROUTES, useValue: routes, multi: true }],\n  };\n}\n","import { Injector, inject } from '@angular/core';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, map } from 'rxjs';\n\nimport { PageServerLoad } from './route-types';\n\nexport function injectLoad<\n  T extends (pageServerLoad: PageServerLoad) => Promise<any>,\n>(options?: { injector?: Injector }): Observable<Awaited<ReturnType<T>>> {\n  const injector = options?.injector ?? inject(Injector);\n  const route = injector.get(ActivatedRoute);\n\n  return route.data.pipe(\n    map<Data, Awaited<ReturnType<T>>>((data) => data['load']),\n  );\n}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\n/**\n * Get server load resolver data for the route\n *\n * @param route Provides the route to get server load resolver\n * @returns Returns server load resolver data for the route\n */\nexport async function getLoadResolver<T>(\n  route: ActivatedRouteSnapshot,\n): Promise<T> {\n  return route.routeConfig?.resolve?.['load']?.(route);\n}\n","import { HttpParams, HttpRequest } from '@angular/common/http';\nimport { StateKey, makeStateKey } from '@angular/core';\n\nfunction sortAndConcatParams(params: HttpParams | URLSearchParams): string {\n  return [...params.keys()]\n    .sort()\n    .map((k) => `${k}=${params.getAll(k)}`)\n    .join('&');\n}\n\nexport function makeCacheKey(\n  request: HttpRequest<any>,\n  mappedRequestUrl: string,\n): StateKey<unknown> {\n  // make the params encoded same as a url so it's easy to identify\n  const { params, method, responseType } = request;\n  const encodedParams = sortAndConcatParams(params);\n\n  let serializedBody = request.serializeBody();\n  if (serializedBody instanceof URLSearchParams) {\n    serializedBody = sortAndConcatParams(serializedBody);\n  } else if (typeof serializedBody !== 'string') {\n    serializedBody = '';\n  }\n\n  const key = [\n    method,\n    responseType,\n    mappedRequestUrl,\n    serializedBody,\n    encodedParams,\n  ].join('|');\n\n  const hash = generateHash(key);\n\n  return makeStateKey(hash);\n}\n\nfunction generateHash(str: string) {\n  let hash = 0;\n  for (let i = 0, len = str.length; i < len; i++) {\n    let chr = str.charCodeAt(i);\n    hash = (hash << 5) - hash + chr;\n    hash |= 0; // Convert to 32bit integer\n  }\n  return `${hash}`;\n}\n","import { TransferState, inject, makeStateKey } from '@angular/core';\nimport {\n  HttpHandlerFn,\n  HttpHeaders,\n  HttpRequest,\n  HttpResponse,\n} from '@angular/common/http';\n\nimport { from, of } from 'rxjs';\n\nimport { injectBaseURL, injectAPIPrefix } from '@analogjs/router/tokens';\n\nimport { makeCacheKey } from './cache-key';\n\n/**\n * Interceptor that is server-aware when making HttpClient requests.\n * Server-side requests use the full URL\n * Prerendering uses the internal Nitro $fetch function, along with state transfer\n * Client-side requests use the window.location.origin\n *\n * @param req HttpRequest<unknown>\n * @param next HttpHandlerFn\n * @returns\n */\nexport function requestContextInterceptor(\n  req: HttpRequest<unknown>,\n  next: HttpHandlerFn,\n) {\n  const apiPrefix = injectAPIPrefix();\n  const baseUrl = injectBaseURL();\n  const transferState = inject(TransferState);\n\n  // during prerendering with Nitro\n  if (\n    typeof global !== 'undefined' &&\n    global.$fetch &&\n    baseUrl &&\n    (req.url.startsWith('/') ||\n      req.url.startsWith(baseUrl) ||\n      req.url.startsWith(`/${apiPrefix}`))\n  ) {\n    const requestUrl = new URL(req.url, baseUrl);\n    const cacheKey = makeCacheKey(req, new URL(requestUrl).pathname);\n    const storeKey = makeStateKey<unknown>(`analog_${cacheKey}`);\n    const fetchUrl = requestUrl.pathname;\n\n    const responseType =\n      req.responseType === 'arraybuffer' ? 'arrayBuffer' : req.responseType;\n\n    return from(\n      global.$fetch\n        .raw(fetchUrl, {\n          method: req.method as any,\n          body: req.body ? req.body : undefined,\n          params: requestUrl.searchParams,\n          responseType,\n          headers: req.headers.keys().reduce((hdrs, current) => {\n            return {\n              ...hdrs,\n              [current]: req.headers.get(current),\n            };\n          }, {}),\n        })\n        .then((res) => {\n          const cacheResponse = {\n            body: res._data,\n            headers: new HttpHeaders(res.headers),\n            status: 200,\n            statusText: 'OK',\n            url: fetchUrl,\n          };\n          const transferResponse = new HttpResponse(cacheResponse);\n\n          transferState.set(storeKey, cacheResponse);\n          return transferResponse;\n        }),\n    );\n  }\n\n  // on the client\n  if (\n    !import.meta.env.SSR &&\n    (req.url.startsWith('/') || req.url.includes('/_analog/'))\n  ) {\n    // /_analog/ requests are full URLs\n    const requestUrl = req.url.includes('/_analog/')\n      ? req.url\n      : `${window.location.origin}${req.url}`;\n    const cacheKey = makeCacheKey(req, new URL(requestUrl).pathname);\n    const storeKey = makeStateKey<unknown>(`analog_${cacheKey}`);\n    const cacheRestoreResponse = transferState.get(storeKey, null);\n\n    if (cacheRestoreResponse) {\n      transferState.remove(storeKey);\n      return of(new HttpResponse(cacheRestoreResponse));\n    }\n\n    return next(\n      req.clone({\n        url: requestUrl,\n      }),\n    );\n  }\n\n  // on the server\n  if (baseUrl && (req.url.startsWith('/') || req.url.startsWith(baseUrl))) {\n    const requestUrl =\n      req.url.startsWith(baseUrl) && !req.url.startsWith('/')\n        ? req.url\n        : `${baseUrl}${req.url}`;\n\n    return next(\n      req.clone({\n        url: requestUrl,\n      }),\n    );\n  }\n\n  return next(req);\n}\n","import { Directive, inject, input, output } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\n\nimport { injectRouteEndpointURL } from './inject-route-endpoint-url';\n\n@Directive({\n  selector: 'form[action],form[method]',\n  host: {\n    '(submit)': `submitted($event)`,\n  },\n  standalone: true,\n})\nexport class FormAction {\n  action = input<string>('');\n  onSuccess = output<unknown>();\n  onError = output<unknown>();\n  state = output<\n    'submitting' | 'error' | 'redirect' | 'success' | 'navigate'\n  >();\n  private router = inject(Router);\n  private route = inject(ActivatedRoute);\n  private path = this._getPath();\n\n  submitted($event: any) {\n    $event.preventDefault();\n\n    this.state.emit('submitting');\n    const body = new FormData($event.target);\n\n    if ($event.target.method.toUpperCase() === 'GET') {\n      this._handleGet(body, this.router.url);\n    } else {\n      this._handlePost(body, this.path, $event);\n    }\n  }\n\n  private _handleGet(body: FormData, path: string) {\n    const params: Params = {};\n    body.forEach((formVal, formKey) => (params[formKey] = formVal));\n\n    this.state.emit('navigate');\n    const url = path.split('?')[0];\n    this.router.navigate([url], {\n      queryParams: params,\n      onSameUrlNavigation: 'reload',\n    });\n  }\n\n  private _handlePost(\n    body: FormData,\n    path: string,\n    $event: { target: HTMLFormElement } & Event,\n  ) {\n    fetch(path, {\n      method: $event.target.method,\n      body,\n    })\n      .then((res) => {\n        if (res.ok) {\n          if (res.redirected) {\n            const redirectUrl = new URL(res.url).pathname;\n            this.state.emit('redirect');\n            this.router.navigate([redirectUrl]);\n          } else if (this._isJSON(res.headers.get('Content-type'))) {\n            res.json().then((result) => {\n              this.onSuccess.emit(result);\n              this.state.emit('success');\n            });\n          } else {\n            res.text().then((result) => {\n              this.onSuccess.emit(result);\n              this.state.emit('success');\n            });\n          }\n        } else {\n          if (res.headers.get('X-Analog-Errors')) {\n            res.json().then((errors: unknown) => {\n              this.onError.emit(errors);\n              this.state.emit('error');\n            });\n          } else {\n            this.state.emit('error');\n          }\n        }\n      })\n      .catch((_) => {\n        this.state.emit('error');\n      });\n  }\n\n  private _getPath() {\n    if (this.route) {\n      return injectRouteEndpointURL(this.route.snapshot).pathname;\n    }\n\n    return `/api/_analog/pages${window.location.pathname}`;\n  }\n\n  private _isJSON(contentType: string | null): boolean {\n    const mime = contentType ? contentType.split(';') : [];\n    const essence = mime[0];\n\n    return essence === 'application/json';\n  }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nimport {\n  ANALOG_CONTENT_ROUTE_FILES,\n  ANALOG_ROUTE_FILES,\n  createRoutes,\n} from '../routes';\n\nexport const DEBUG_ROUTES = new InjectionToken(\n  '@analogjs/router debug routes',\n  {\n    providedIn: 'root',\n    factory() {\n      const debugRoutes = createRoutes(\n        {\n          ...ANALOG_ROUTE_FILES,\n          ...ANALOG_CONTENT_ROUTE_FILES,\n        },\n        true,\n      );\n\n      return debugRoutes as (Route & DebugRoute)[];\n    },\n  },\n);\n\nexport type DebugRoute = {\n  path: string;\n  filename: string;\n  isLayout: boolean;\n  children?: DebugRoute[];\n};\n\nexport function injectDebugRoutes() {\n  return inject(DEBUG_ROUTES);\n}\n","import { ROUTES } from '@angular/router';\n\n/**\n * Provides routes that provide additional\n * pages for displaying and debugging\n * routes.\n */\nexport function withDebugRoutes() {\n  const routes = [\n    {\n      path: '__analog/routes',\n      loadComponent: () => import('./debug.page'),\n    },\n  ];\n\n  return {\n    ɵkind: 101 as number,\n    ɵproviders: [{ provide: ROUTES, useValue: routes, multi: true }],\n  };\n}\n","import {\n  HttpClient,\n  HttpHeaders,\n  HttpRequest,\n  HttpResponse,\n} from '@angular/common/http';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  effect,\n  inject,\n  input,\n  makeStateKey,\n  output,\n  signal,\n  TransferState,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { injectBaseURL } from '@analogjs/router/tokens';\nimport { catchError, map, of, throwError } from 'rxjs';\n\nimport { makeCacheKey } from './cache-key';\n\ntype ServerProps = Record<string, any>;\ntype ServerOutputs = Record<string, any>;\n\n/**\n * @description\n * Component that defines the bridge between the client and server-only\n * components. The component passes the component ID and props to the server\n * and retrieves the rendered HTML and outputs from the server-only component.\n *\n * Status: experimental\n */\n@Component({\n  selector: 'server-only,ServerOnly,Server',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: ` <div [innerHTML]=\"content()\"></div> `,\n})\nexport class ServerOnly {\n  component = input.required<string>();\n  props = input<ServerProps>();\n  outputs = output<ServerOutputs>();\n  private http = inject(HttpClient);\n  private sanitizer = inject(DomSanitizer);\n  protected content = signal<SafeHtml>('');\n  private route = inject(ActivatedRoute, { optional: true });\n  private baseURL = injectBaseURL();\n  private transferState = inject(TransferState);\n\n  constructor() {\n    effect(() => {\n      const routeComponentId: string | undefined =\n        this.route?.snapshot.data['component'];\n      const props = this.props() || {};\n      const componentId = routeComponentId || this.component();\n\n      const headers = new HttpHeaders(\n        new Headers({\n          'Content-type': 'application/json',\n          'X-Analog-Component': componentId,\n        }),\n      );\n\n      const componentUrl = this.getComponentUrl(componentId);\n      const httpRequest = new HttpRequest('POST', componentUrl, props, {\n        headers,\n      });\n      const cacheKey = makeCacheKey(\n        httpRequest,\n        new URL(componentUrl).pathname,\n      );\n      const storeKey = makeStateKey<{ html: string; outputs: ServerOutputs }>(\n        cacheKey,\n      );\n      const componentState = this.transferState.get<{\n        html: string;\n        outputs: ServerOutputs;\n      } | null>(storeKey, null);\n\n      if (componentState) {\n        this.updateContent(componentState);\n        this.transferState.remove(storeKey);\n      } else {\n        this.http\n          .request(httpRequest)\n          .pipe(\n            map((response) => {\n              if (response instanceof HttpResponse) {\n                if (import.meta.env.SSR) {\n                  this.transferState.set(storeKey, response.body);\n                }\n\n                return response.body as {\n                  html: string;\n                  outputs: ServerOutputs;\n                };\n              }\n              return throwError(\n                () => ({}) as { html: string; outputs: ServerOutputs },\n              );\n            }),\n            catchError((error: unknown) => {\n              console.log(error);\n              return of({\n                html: '',\n                outputs: {} as ServerOutputs,\n              });\n            }),\n          )\n          .subscribe((content) =>\n            this.updateContent(\n              content as { html: string; outputs: ServerOutputs },\n            ),\n          );\n      }\n    });\n  }\n\n  updateContent(content: { html: string; outputs: ServerOutputs }) {\n    this.content.set(this.sanitizer.bypassSecurityTrustHtml(content.html));\n    this.outputs.emit(content.outputs);\n  }\n\n  getComponentUrl(componentId: string) {\n    let baseURL = this.baseURL;\n\n    if (!baseURL && typeof window !== 'undefined') {\n      baseURL = window.location.origin;\n    }\n\n    return `${baseURL}/_analog/components/${componentId}`;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["HTTP_ROOT_INTERCEPTOR_FNS"],"mappings":"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"}