UNPKG

ngx-route-manager

Version:
1 lines 22.1 kB
{"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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"}