{"version":3,"file":"ngx-route-manager.mjs","sources":["../../../projects/ngx-route-manager/src/lib/functions/listenForRouteChange.ts","../../../projects/ngx-route-manager/src/app.module.ts","../../../projects/ngx-route-manager/src/lib/functions/createUrlFunction.ts","../../../projects/ngx-route-manager/src/lib/models/ngx-param.ts","../../../projects/ngx-route-manager/src/lib/functions/convertUrlTo.ts","../../../projects/ngx-route-manager/src/lib/models/ngx-route.ts","../../../projects/ngx-route-manager/src/lib/functions/convertUrlToSegment.ts","../../../projects/ngx-route-manager/src/lib/models/ngx-query-params.ts","../../../projects/ngx-route-manager/src/lib/functions/convertStringArrayTo.ts","../../../projects/ngx-route-manager/src/lib/functions/generate-path.ts","../../../projects/ngx-route-manager/src/public-api.ts","../../../projects/ngx-route-manager/src/ngx-route-manager.ts"],"sourcesContent":["import { Router, ActivatedRoute, NavigationEnd } from \"@angular/router\";\r\nimport { filter } from \"rxjs\";\r\nimport { signal } from \"@angular/core\";\r\n\r\nexport const internalSignalRoute = signal<ActivatedRoute | undefined>(undefined);\r\n\r\n// Factory function to initialize the service\r\nexport function listenForRouteChange(router: Router, route: ActivatedRoute) {\r\n  return () => {\r\n        internalSignalRoute.set(route);\r\n        const subscription = router.events.pipe(\r\n          filter(event => event instanceof NavigationEnd),\r\n        ).subscribe(() => {\r\n          // Traverse to the most deeply activated route\r\n          let route = router.routerState.root;\r\n          while (route.firstChild) {\r\n            route = route.firstChild;\r\n          }\r\n          internalSignalRoute.set(route);\r\n        });\r\n\r\n        return () => subscription.unsubscribe();\r\n  };\r\n}","import { NgModule, ModuleWithProviders, InjectionToken, APP_INITIALIZER } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { listenForRouteChange } from './lib/functions/listenForRouteChange';\r\n\r\nexport const NGX_ROUTE_MANAGER_CONFIG = new InjectionToken<any>('NGX_ROUTE_MANAGER_CONFIG');\r\n\r\n@NgModule({})\r\nexport class NgxRouteManagerModule {\r\n  static forRoot(config: any): ModuleWithProviders<NgxRouteManagerModule> {\r\n    return {\r\n      ngModule: NgxRouteManagerModule,\r\n      providers: [\r\n        {\r\n          provide: NGX_ROUTE_MANAGER_CONFIG,\r\n          useValue: config\r\n        },\r\n        {\r\n          provide: APP_INITIALIZER,\r\n          useFactory: listenForRouteChange,\r\n          deps: [Router, ActivatedRoute],\r\n          multi: true\r\n        }\r\n      ]\r\n    };\r\n  }\r\n}\r\n","type ExtractParams<T extends string> =\r\n  T extends `${infer _Start}:${infer Param}/${infer Rest}`\r\n    ? Param | ExtractParams<Rest>\r\n    : T extends `${infer _Start}:${infer Param}`\r\n    ? Param\r\n    : never;\r\n\r\ntype HasParams<T extends string> = ExtractParams<T> extends never\r\n  ? false\r\n  : true;\r\n\r\nexport type ParamsToFunction<\r\n  T extends string,\r\n  Q extends string\r\n> = HasParams<T> extends true\r\n  ? (\r\n      args: Record<ExtractParams<T>, string>,\r\n      queryParams?: Partial<Record<Q, string>>\r\n    ) => string\r\n  : (args?: undefined, queryParams?: Partial<Record<Q, string>>) => string;\r\n\r\nexport interface NgxParseUrl {\r\n  route: string[];\r\n  extras: {\r\n    queryParams: {\r\n      [k: string]: string;\r\n    };\r\n  };\r\n}\r\n\r\nexport function createUrlFunction<T extends string, Q extends string>(\r\n  template: T,\r\n  queryParamsKeys?: Q\r\n): ParamsToFunction<T, Q> {\r\n  return ((\r\n    args?: Record<string, string>,\r\n    queryParams?: Record<string, string>\r\n  ) => {\r\n    if (!args && template.includes(':')) {\r\n      throw new Error('Arguments are required for this template');\r\n    }\r\n    if (args && !template.includes(':')) {\r\n      throw new Error('This template does not accept any arguments');\r\n    }\r\n\r\n    let path = template.replace(/:([a-zA-Z]+)/g, (_, key) => {\r\n      const value = args?.[key];\r\n      if (value === undefined)\r\n        throw new Error(`Missing value for parameter: ${key}`);\r\n      return value;\r\n    });\r\n\r\n    if (queryParams && Object.keys(queryParams).length > 0) {\r\n      const searchParams = new URLSearchParams(queryParams).toString();\r\n      path += `?${searchParams}`;\r\n    }\r\n\r\n    return path;\r\n  }) as ParamsToFunction<T, Q>;\r\n}\r\n\r\nexport type ParamsToUrlFunction<\r\n  T extends string,\r\n  Q extends string\r\n> = HasParams<T> extends true\r\n  ? (\r\n      args: Record<ExtractParams<T>, string>,\r\n      queryParams?: Partial<Record<Q, string>>\r\n    ) => NgxParseUrl\r\n  : (args?: undefined, queryParams?: Partial<Record<Q, string>>) => NgxParseUrl;\r\n\r\nexport function createUrlFunctionV2<T extends string, Q extends string>(\r\n  template: T,\r\n  queryParamsKeys?: Q\r\n): ParamsToUrlFunction<T, Q> {\r\n  return ((\r\n    args?: Record<string, string>,\r\n    queryParams?: Record<string, string>\r\n  ) => {\r\n    if (!args && template.includes(':')) {\r\n      throw new Error('Arguments are required for this template');\r\n    }\r\n    if (args && !template.includes(':')) {\r\n      throw new Error('This template does not accept any arguments');\r\n    }\r\n\r\n    let path = template.replace(/:([a-zA-Z]+)/g, (_, key) => {\r\n      const value = args?.[key];\r\n      if (value === undefined)\r\n        throw new Error(`Missing value for parameter: ${key}`);\r\n      return value;\r\n    });\r\n\r\n    if (queryParams && Object.keys(queryParams).length > 0) {\r\n      const searchParams = new URLSearchParams(queryParams).toString();\r\n      path += `?${searchParams}`;\r\n    }\r\n\r\n    return parseUrl(path);\r\n  }) as ParamsToUrlFunction<T, Q>;\r\n}\r\n\r\nexport function parseUrl(url: string): NgxParseUrl {\r\n  const [path, queryString] = url.split('?');\r\n  const params = new URLSearchParams(queryString || '');\r\n  const queryParams: Record<string, string> = {};\r\n  params.forEach((value, key) => {\r\n    queryParams[key] = value;\r\n  });\r\n\r\n  return {\r\n    route: [path],\r\n    extras: { queryParams },\r\n  };\r\n}\r\n","import { filter, map, of } from \"rxjs\";\r\nimport { computed } from \"@angular/core\";\r\nimport { internalSignalRoute } from \"../functions/listenForRouteChange\";\r\n\r\nexport class NgxParam {\r\n\r\n  /**\r\n   * Name of the param\r\n   */\r\n  private readonly _name: string = '';\r\n  public get name(): string {\r\n    return this._name;\r\n  }\r\n\r\n  /**\r\n   * Returns the current snapshoot of the value in the url route\r\n   */\r\n  readonly snapshotValue = computed(() => {\r\n    if (!internalSignalRoute()) { return '' }\r\n    else {\r\n      return internalSignalRoute()?.snapshot.paramMap.get(this.name) || ''\r\n    }\r\n  })\r\n\r\n  /**\r\n   * Listens for change on param in the route\r\n   */\r\n  readonly listenForValue = computed(() => {\r\n    if (!internalSignalRoute()) { \r\n      console.log(internalSignalRoute());\r\n      return of('') \r\n    }\r\n    else {\r\n      return internalSignalRoute()?.paramMap\r\n      .pipe(\r\n        filter(paramMap => paramMap.has(this.name)),\r\n        map(paramMap => paramMap.get(this.name) || '')\r\n      )\r\n    }\r\n  })\r\n\r\n  constructor(name: string) {\r\n    this._name = name;\r\n  }\r\n}\r\n","import { NgxParam } from '../models/ngx-param';\r\n\r\nexport type RouteParams<T extends string> = {\r\n  [K in ExtractRouteParams<T>]: NgxParam;\r\n};\r\n\r\nexport type ExtractRouteParams<T extends string> =\r\n  T extends `${infer _}:${infer Param}/${infer Rest}`\r\n    ? Param | ExtractRouteParams<Rest>\r\n    : T extends `${infer _}:${infer Param}`\r\n    ? Param\r\n    : never;\r\n\r\nexport function urlToNgxParam<T extends string>(route: T): RouteParams<T> {\r\n  const segments = route.split('/');\r\n  const params: any = {};\r\n\r\n  segments.forEach((segment) => {\r\n    if (segment.startsWith(':')) {\r\n      const param = segment.slice(1);\r\n\r\n      if (!/^[A-Za-z]+$/.test(param)) {\r\n        throw new Error(`${param} must contain only alphabets in ${route}`);\r\n      }\r\n\r\n      params[param] = new NgxParam(param);\r\n    }\r\n  });\r\n\r\n  return params;\r\n}\r\n","import { RouteQueryParams } from '../functions/convertStringArrayTo';\r\nimport { RouteParams } from '../functions/convertUrlTo';\r\nimport {\r\n  ExtractStaticSegments,\r\n  SegmentObject,\r\n} from '../functions/convertUrlToSegment';\r\nimport {\r\n  ParamsToFunction,\r\n  ParamsToUrlFunction,\r\n} from '../functions/createUrlFunction';\r\n\r\nexport class NgxRoute<T extends string, Q extends string> {\r\n  /**\r\n   * The url path\r\n   */\r\n  readonly path: string = '';\r\n\r\n  /**\r\n   * Function to generate the url, requiring the right params\r\n   */\r\n  readonly fn: ParamsToFunction<T, Q> = {} as ParamsToFunction<T, Q>;\r\n\r\n  /**\r\n   * Function to generate the url, requiring the right params\r\n   */\r\n  readonly url: ParamsToUrlFunction<T, Q> = {} as ParamsToUrlFunction<T, Q>;\r\n\r\n  /**\r\n   * Stores all the params as\r\n   */\r\n  private _params: RouteParams<T> = {} as RouteParams<T>;\r\n\r\n  /**\r\n   * Stores all the params as\r\n   */\r\n  private _queryParams: RouteQueryParams<Q> = {} as RouteQueryParams<Q>;\r\n\r\n  /**\r\n   * Stores all the segments as\r\n   */\r\n  private _segments: SegmentObject<ExtractStaticSegments<T>> =\r\n    {} as SegmentObject<ExtractStaticSegments<T>>;\r\n\r\n  constructor(\r\n    path: string,\r\n    fn: ParamsToFunction<T, Q>,\r\n    url: ParamsToUrlFunction<T, Q>,\r\n    params: RouteParams<T>,\r\n    segments: SegmentObject<ExtractStaticSegments<T>>,\r\n    queryParams: RouteQueryParams<Q>\r\n  ) {\r\n    this.path = path;\r\n    this.fn = fn;\r\n    this.url = url;\r\n    this._params = params;\r\n    this._segments = segments;\r\n    this._queryParams = queryParams;\r\n  }\r\n\r\n  /**\r\n   * All params store as an object\r\n   */\r\n  get params(): RouteParams<T> {\r\n    return this._params;\r\n  }\r\n\r\n  /**\r\n   * All query params store as an object\r\n   */\r\n  get queryParams(): RouteQueryParams<Q> {\r\n    return this._queryParams;\r\n  }\r\n\r\n  /**\r\n   * All segments store as an object\r\n   */\r\n  get segments(): SegmentObject<ExtractStaticSegments<T>> {\r\n    return this._segments;\r\n  }\r\n}\r\n","\r\n// Type to extract static segments from a URL pattern\r\nexport type ExtractStaticSegments<T extends string> = T extends `${infer First}/${infer Rest}`\r\n  ? First extends `:${string}`\r\n    ? ExtractStaticSegments<Rest>\r\n    : First | ExtractStaticSegments<Rest>\r\n  : T extends `:${string}`\r\n    ? never\r\n    : T;\r\n\r\n// Type to create an object type from union of strings\r\nexport type SegmentObject<T extends string> = {\r\n  [K in T]: K;\r\n};\r\n\r\n\r\n/**\r\n * Extracts static segments from a URL pattern and returns them as a typed object\r\n * Types are automatically inferred from the URL pattern\r\n * @param url - The URL pattern to parse\r\n * @returns Object with extracted segments with automatic type inference\r\n */\r\nexport function urlToSegments<T extends string>(url: T): SegmentObject<ExtractStaticSegments<T>> {\r\n  // Remove leading and trailing slashes\r\n  const cleanUrl = url.replace(/^\\/+|\\/+$/g, '');\r\n  \r\n  // Split the URL into segments\r\n  const segments = cleanUrl.split('/');\r\n  \r\n  // Initialize result object\r\n  const result = {} as SegmentObject<ExtractStaticSegments<T>>;\r\n  \r\n  // Process each segment\r\n  segments.forEach(segment => {\r\n    // Skip dynamic segments (those starting with ':')\r\n    if (segment.startsWith(':') || segment.trim().length == 0) {\r\n      return;\r\n    }\r\n\r\n    if (!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(segment)) { throw new Error(`Segment '${segment}' must start with a letter and contain only letters, numbers, hyphens, or underscores in ${url}`) }\r\n    \r\n    // Add valid segments to result object\r\n    (result as any)[segment] = segment;\r\n  });\r\n  \r\n  return result;\r\n}","import { computed } from '@angular/core';\r\nimport { internalSignalRoute } from '../functions/listenForRouteChange';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { of, filter, map } from 'rxjs';\r\n\r\nexport class NgxQueryParam {\r\n  /**\r\n   * Name of the param\r\n   */\r\n  private readonly _name: string = '';\r\n  public get name(): string {\r\n    return this._name;\r\n  }\r\n\r\n  /**\r\n   * Returns the current snapshot of the value in the query url route\r\n   */\r\n  readonly snapshotValue = computed(() => {\r\n    if (!internalSignalRoute()) {\r\n      return '';\r\n    } else {\r\n      return internalSignalRoute()?.snapshot.queryParamMap.get(this.name) || '';\r\n    }\r\n  });\r\n\r\n  /**\r\n   * Listens for change on param in the query route\r\n   */\r\n  readonly listenForValue = computed(() => {\r\n    if (!internalSignalRoute()) {\r\n      return of('');\r\n    } else {\r\n      const route: ActivatedRoute =\r\n        internalSignalRoute() || ({} as ActivatedRoute);\r\n      return route.queryParamMap.pipe(\r\n        filter((queryParamMap) => queryParamMap.has(this.name)),\r\n        map((queryParamMap) => queryParamMap.get(this.name) || '')\r\n      );\r\n    }\r\n  });\r\n\r\n  constructor(name: string) {\r\n    this._name = name;\r\n  }\r\n}\r\n","import { NgxQueryParam } from '../models/ngx-query-params';\r\n\r\nexport type RouteQueryParams<T extends string> = {\r\n  [K in T]: NgxQueryParam;\r\n};\r\n\r\nexport function urlToNgxQueryParam<T extends string>(\r\n  route: T[]\r\n): RouteQueryParams<T> {\r\n  return route.reduce((a, b) => {\r\n    if (!/^[A-Za-z_]+$/.test(b)) {\r\n      throw new Error(`${b} must contain only alphabets and underscore`);\r\n    }\r\n\r\n    a[b] = new NgxQueryParam(b);\r\n    return a;\r\n  }, {} as RouteQueryParams<T>);\r\n}\r\n","import { createUrlFunction, createUrlFunctionV2 } from './createUrlFunction';\r\nimport { urlToNgxParam } from './convertUrlTo';\r\nimport { NgxRoute } from '../models/ngx-route';\r\nimport { urlToSegments } from './convertUrlToSegment';\r\nimport { urlToNgxQueryParam } from './convertStringArrayTo';\r\n\r\nexport function generateNgxRoute<T extends string, Q extends string>(\r\n  urlPattern?: T,\r\n  queryParamsKeys: Q[] = []\r\n): NgxRoute<T, Q> {\r\n  const pattern = urlPattern ? urlPattern : '';\r\n  const ngxRoute = new NgxRoute(\r\n    pattern,\r\n    createUrlFunction(pattern),\r\n    createUrlFunctionV2(pattern),\r\n    urlToNgxParam(pattern),\r\n    urlToSegments(pattern),\r\n    urlToNgxQueryParam(queryParamsKeys)\r\n  );\r\n  return ngxRoute;\r\n}\r\n","/*\r\n * Public API Surface of ngx-route-manager\r\n */\r\n\r\nexport { NgxRouteManagerModule } from './app.module';\r\nexport { generateNgxRoute } from './lib/functions/generate-path';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}