{"version":3,"file":"ngx-router-meta.mjs","sources":["../../../projects/ngx-router-meta/src/lib/router-meta.ts","../../../projects/ngx-router-meta/src/lib/util.ts","../../../projects/ngx-router-meta/src/lib/router-meta-context.service.ts","../../../projects/ngx-router-meta/src/lib/router-meta.service.ts","../../../projects/ngx-router-meta/src/lib/router-meta.module.ts","../../../projects/ngx-router-meta/src/public-api.ts","../../../projects/ngx-router-meta/src/ngx-router-meta.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { MetaDefinition } from '@angular/platform-browser';\nimport { Data, Route, Routes } from '@angular/router';\nimport {\n  catchError,\n  EMPTY,\n  map,\n  Observable,\n  OperatorFunction,\n  scan,\n  startWith,\n  switchAll,\n  switchMapTo,\n} from 'rxjs';\n\nimport { Indexable, InferArray, UnionToIntersection } from './types';\n\n/**\n * Specifies identifiers of interpolations in meta strings\n */\nexport interface RouterMetaInterpolation {\n  start: string;\n  end: string;\n}\n\n/**\n * Configuration of {@link RouterMetaModule}\n */\nexport interface RouterMetaConfig {\n  defaultMeta?: RouteMeta;\n  interpolation?: RouterMetaInterpolation;\n}\n\n/**\n * Context for rendering meta tags\n */\nexport interface MetaContext extends Indexable<any> {}\n\n/**\n * Template strings for rendering meta tags\n *\n * Every key must match a tag name it's applied to\n */\nexport interface RouteMetaTemplates extends Indexable<string> {}\n\n/**\n * Meta tags of the {@link Route} with templates\n */\nexport interface RouteMeta\n  extends Indexable<string | MetaDefinition | undefined> {\n  _templates_?: RouteMetaTemplates;\n  title?: string;\n  description?: string | MetaDefinition;\n}\n\n/**\n * Describes {@link Route#data} with {@link RouteMeta}\n */\nexport interface DataWithMeta extends Data {\n  meta?: RouteMeta;\n}\n\n/**\n * Describes {@link Route} with {@link DataWithMeta}\n */\nexport interface RouteWithMeta extends Route {\n  data?: DataWithMeta;\n}\n\n/**\n * Describes {@link Routes} as array of {@link RouteWithMeta}\n */\nexport type RoutesWithMeta = RouteWithMeta[];\n\n/**\n * Useful helper to combine different route definitions into single one\n *\n * For example, you want to use {@link RoutesWithMeta} and some other {@link RoutesWithSomething}\n * then you can combine them like so:\n * ```ts\n * const routes: MergeRoutes<RoutesWithMeta | RoutesWithSomething>;\n * // routes[].data will be union of {meta:...} and {something:...}\n * ```\n */\nexport type MergeRoutes<T extends Routes> = UnionToIntersection<\n  InferArray<T>\n>[];\n\n/** @internal */\nexport const ROUTE_META_CONFIG = new InjectionToken<RouterMetaConfig>(\n  'ROUTE_META_CONFIG',\n);\n\n/**\n * Check if {@link Route#data} contains {@link RouteMeta} object\n */\nexport function isDataWithMeta(data: Data): data is Required<DataWithMeta> {\n  return !!data.meta;\n}\n\n/**\n * Allows to accumulate many context objects streams into one stream\n * while merging all context objects together\n * and running any transformation function\n */\nexport function unfoldContext<R>(\n  ctx$$: Observable<Observable<MetaContext>>,\n  mapFn: (ctx: MetaContext) => R,\n): OperatorFunction<any, R> {\n  return (o$) =>\n    o$.pipe(\n      switchMapTo(\n        ctx$$.pipe(\n          switchAll(),\n          catchError(() => EMPTY),\n          map((ctx) => mapFn(ctx)),\n          scan((acc, ctx) => ({ ...acc, ...ctx })), // Merge contexts\n          startWith({} as R),\n        ),\n      ),\n    );\n}\n","import { Event, NavigationEnd } from '@angular/router';\n\nexport function isNavigationEndEvent(event: Event): event is NavigationEnd {\n  return event instanceof NavigationEnd;\n}\n\nexport interface SafeRegexString extends String {\n  __safe: true;\n}\n\nexport function escapeRegExp(str: string): SafeRegexString {\n  return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') as any; // $& means the whole matched string\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n  combineLatest,\n  filter,\n  isObservable,\n  map,\n  merge,\n  Observable,\n  of,\n  shareReplay,\n  startWith,\n  Subject,\n} from 'rxjs';\n\nimport {\n  MetaContext,\n  RouteMetaTemplates,\n  RouterMetaConfig,\n  RouterMetaInterpolation,\n  ROUTE_META_CONFIG,\n  unfoldContext,\n} from './router-meta';\nimport { Indexable } from './types';\nimport { escapeRegExp, isNavigationEndEvent } from './util';\n\n/** @internal */\nexport interface MetaInfo {\n  replace: RegExp;\n  value: any;\n}\n\n/** @internal */\nexport interface ProcessedMetaContext extends Indexable<MetaInfo> {}\n\n/**\n * Service to provide context for meta tags\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class RouterMetaContextService {\n  private static interpolation: RouterMetaInterpolation = {\n    start: '{',\n    end: '}',\n  };\n\n  private ctxNameCache: Indexable<RegExp> = {};\n\n  private interpolation =\n    this.config.interpolation || RouterMetaContextService.interpolation;\n  private interpolationStart = escapeRegExp(this.interpolation.start);\n  private interpolationEnd = escapeRegExp(this.interpolation.end);\n\n  private navigationEnd$ = this.router.events.pipe(\n    filter(isNavigationEndEvent),\n  );\n\n  private metaDefaultContext$$ = new Subject<Observable<MetaContext>>();\n  private metaContext$$ = new Subject<Observable<MetaContext>>();\n  private clearDefaultContext$ = new Subject<void>();\n  private clearContext$ = new Subject<void>();\n\n  private metaDefaultContext$: Observable<ProcessedMetaContext> =\n    this.clearDefaultContext$.pipe(\n      startWith(null),\n      unfoldContext(this.metaDefaultContext$$, (ctx) =>\n        this._processContext(ctx),\n      ),\n    );\n\n  private metaContext$: Observable<ProcessedMetaContext> = merge(\n    this.clearContext$,\n    this.navigationEnd$, // Start fresh after every navigation\n  ).pipe(\n    startWith(null),\n    unfoldContext(this.metaContext$$, (ctx) => this._processContext(ctx)),\n  );\n\n  private context$ = combineLatest(\n    this.metaDefaultContext$,\n    this.metaContext$,\n  ).pipe(\n    map(([defaultCtx, ctx]) => ({ ...defaultCtx, ...ctx })),\n    shareReplay(),\n  );\n\n  constructor(\n    @Inject(ROUTE_META_CONFIG) private config: RouterMetaConfig,\n    private router: Router,\n  ) {}\n\n  /**\n   * Provided context will be available between router navigations\n   *\n   * Multiple contexts will be merged together\n   */\n  provideDefaultContext(ctx: MetaContext | Observable<MetaContext>) {\n    this.metaDefaultContext$$.next(isObservable(ctx) ? ctx : of(ctx));\n  }\n\n  /**\n   * Provided context will be available ONLY until next router navigation\n   *\n   * Multiple contexts will be merged together\n   *\n   * If you want to persist context between navigations -\n   * use {@link RouterMetaContextService#provideDefaultContext()}\n   */\n  provideContext(ctx: MetaContext | Observable<MetaContext>) {\n    this.metaContext$$.next(isObservable(ctx) ? ctx : of(ctx));\n  }\n\n  /**\n   * Clear default context provided by\n   * {@link RouterMetaContextService#provideDefaultContext()}\n   */\n  clearDefaultContext() {\n    this.clearDefaultContext$.next();\n  }\n\n  /**\n   * Clear context provided by\n   * {@link RouterMetaContextService#provideContext()}\n   */\n  clearContext() {\n    this.clearContext$.next();\n  }\n\n  /**\n   * Observable of computed context for meta tags\n   */\n  getContext() {\n    return this.context$;\n  }\n\n  /** @internal */\n  _templateStr(\n    str?: string,\n    data?: ProcessedMetaContext,\n    extras?: {\n      name?: string;\n      templates?: RouteMetaTemplates;\n      meta?: ProcessedMetaContext;\n    },\n  ) {\n    if (!str || !data) {\n      return str || '';\n    }\n\n    let template = str;\n    let ctx = data;\n\n    if (extras) {\n      template =\n        extras.templates && extras.name\n          ? extras.templates[extras.name] || template\n          : template;\n      ctx = { ...this.prepareContext(extras.meta, ctx), ...ctx };\n\n      // Recover lost `str` value under provided `extras.name` key in context\n      if (extras.name && extras.name in ctx === false) {\n        const nameCtx = this._processContext({ [extras.name]: str });\n        ctx = { ...ctx, ...this.prepareContext(nameCtx, ctx) };\n      }\n    }\n\n    return this.templateReplace(template, ctx);\n  }\n\n  /** @internal */\n  _processContext(ctx: MetaContext): ProcessedMetaContext {\n    return Object.keys(ctx).reduce(\n      (acc, key) => ({\n        ...acc,\n        [key]: {\n          replace: this.getContextReplace(key),\n          value: ctx[key],\n        },\n      }),\n      {} as ProcessedMetaContext,\n    );\n  }\n\n  private prepareContext(\n    ctx?: ProcessedMetaContext,\n    data?: ProcessedMetaContext,\n  ): ProcessedMetaContext | undefined {\n    if (!ctx || !data) {\n      return ctx;\n    }\n\n    return Object.keys(ctx).reduce((c, key) => {\n      c[key] = {\n        ...ctx[key],\n        value: this.templateReplace(ctx[key].value, data),\n      };\n      return c;\n    }, {} as ProcessedMetaContext);\n  }\n\n  private templateReplace(tpl: string, ctx: ProcessedMetaContext) {\n    return Object.keys(ctx).reduce(\n      (s, key) => s.replace(ctx[key].replace, ctx[key].value),\n      tpl,\n    );\n  }\n\n  private getContextReplace(name: string) {\n    return name in this.ctxNameCache\n      ? this.ctxNameCache[name]\n      : (this.ctxNameCache[name] = new RegExp(\n          `${this.interpolationStart}${escapeRegExp(name)}${\n            this.interpolationEnd\n          }`,\n          'g',\n        ));\n  }\n}\n","import { isPlatformServer } from '@angular/common';\nimport {\n  Inject,\n  Injectable,\n  OnDestroy,\n  Optional,\n  PLATFORM_ID,\n} from '@angular/core';\nimport {\n  makeStateKey,\n  Meta,\n  MetaDefinition,\n  Title,\n  TransferState,\n} from '@angular/platform-browser';\nimport { ActivatedRoute, Data, Router } from '@angular/router';\nimport {\n  combineLatest,\n  filter,\n  map,\n  Subject,\n  switchMap,\n  takeUntil,\n} from 'rxjs';\n\nimport {\n  isDataWithMeta,\n  MetaContext,\n  RouteMeta,\n  RouteMetaTemplates,\n  RouterMetaConfig,\n  ROUTE_META_CONFIG,\n} from './router-meta';\nimport {\n  ProcessedMetaContext,\n  RouterMetaContextService,\n} from './router-meta-context.service';\nimport { Indexable } from './types';\nimport { isNavigationEndEvent } from './util';\n\nconst TITLE_STATE = makeStateKey<string>('RouterMetaTitle');\n\n/**\n * Service responsible for updating meta tags based on router configuration\n *\n * To provide context - use {@link RouterMetaContextService}\n */\n@Injectable({ providedIn: 'root' })\nexport class RouterMetaService implements OnDestroy {\n  private initialized = false;\n  private metaTags: Indexable<boolean> = {};\n\n  private defaultMeta = this.config.defaultMeta || {};\n\n  private originalTitle = this.transferState\n    ? this.transferState.get(TITLE_STATE, this.title.getTitle())\n    : this.title.getTitle();\n\n  private destroyed$ = new Subject<void>();\n\n  private navigationEnd$ = this.router.events.pipe(\n    filter(isNavigationEndEvent),\n  );\n\n  private routeData$ = this.navigationEnd$.pipe(\n    map(() => this.router.routerState.root),\n    map((route) => this.getLastRoute(route)),\n    filter((route) => route.outlet === 'primary'),\n    switchMap((route) => route.data),\n  );\n\n  constructor(\n    @Inject(PLATFORM_ID) private platformId: any,\n    @Inject(ROUTE_META_CONFIG) private config: RouterMetaConfig,\n    private router: Router,\n    private title: Title,\n    private meta: Meta,\n    private contextService: RouterMetaContextService,\n    @Optional() private transferState?: TransferState,\n  ) {}\n\n  /**\n   * Returns original title of index page.\n   *\n   * If SSR was used with {@link StateTransfer} -\n   * then original title will be preserved between server and client states\n   */\n  getOriginalTitle() {\n    return this.originalTitle;\n  }\n\n  /** @internal */\n  ngOnDestroy(): void {\n    this.destroyed$.next();\n  }\n\n  /** @internal */\n  _setup() {\n    if (this.initialized) {\n      return;\n    }\n    this.initialized = true;\n\n    if (this.transferState && isPlatformServer(this.platformId)) {\n      this.transferState.set(TITLE_STATE, this.originalTitle);\n    }\n\n    combineLatest(this.routeData$, this.contextService.getContext())\n      .pipe(takeUntil(this.destroyed$))\n      .subscribe(([data, ctx]) => this.updateAllMeta(data, ctx));\n  }\n\n  private updateAllMeta(data: Data, ctx: ProcessedMetaContext = {}) {\n    const { _templates_: defaultTemplates, ...defaultAllMeta } =\n      this.defaultMeta;\n\n    if (!isDataWithMeta(data)) {\n      this.resetAllMeta(ctx, defaultAllMeta);\n      return;\n    }\n\n    const { meta } = data;\n    const { _templates_, ...allMeta } = meta;\n    const { title, ...otherMeta } = allMeta;\n    const { title: _, ...defaultOtherMeta } = defaultAllMeta;\n\n    const allMetaDefaulted = { ...defaultAllMeta, ...allMeta };\n    const otherMetaDefaulted = { ...defaultOtherMeta, ...otherMeta };\n    const templates = {\n      ...defaultTemplates,\n      ..._templates_,\n    } as RouteMetaTemplates;\n\n    const processedMeta = this.contextService._processContext(allMetaDefaulted);\n\n    this.updateTitle(title, ctx, templates, processedMeta);\n\n    Object.keys(otherMetaDefaulted).forEach((name) =>\n      this.updateMeta(\n        name,\n        otherMetaDefaulted[name],\n        ctx,\n        templates,\n        processedMeta,\n      ),\n    );\n\n    // Cleanup leftover meta tags\n    Object.keys(this.metaTags)\n      .filter((name) => name in otherMetaDefaulted === false)\n      .forEach((name) => this.resetMeta(name, ctx, templates, processedMeta));\n  }\n\n  private resetAllMeta(ctx: ProcessedMetaContext, defaultMeta: RouteMeta) {\n    const { title, ...defaultOtherMeta } = defaultMeta;\n    const metaDefaulted = { ...defaultOtherMeta, ...this.metaTags };\n    const meta = this.contextService._processContext(defaultMeta);\n\n    this.resetTitle(ctx, this.defaultMeta._templates_, meta);\n\n    Object.keys(metaDefaulted).forEach((name) =>\n      this.resetMeta(name, ctx, this.defaultMeta._templates_, meta),\n    );\n  }\n\n  private updateTitle(\n    title?: string,\n    ctx?: ProcessedMetaContext,\n    templates?: RouteMetaTemplates,\n    meta?: ProcessedMetaContext,\n  ) {\n    if (title) {\n      this.title.setTitle(\n        this.contextService._templateStr(title, ctx, {\n          name: 'title',\n          templates,\n          meta,\n        }),\n      );\n    } else {\n      this.resetTitle(ctx, templates, meta);\n    }\n  }\n\n  private resetTitle(\n    ctx?: ProcessedMetaContext,\n    templates?: RouteMetaTemplates,\n    meta?: ProcessedMetaContext,\n  ) {\n    this.title.setTitle(\n      this.contextService._templateStr(\n        this.defaultMeta.title || this.originalTitle,\n        ctx,\n        {\n          name: 'title',\n          meta,\n          templates,\n        },\n      ),\n    );\n  }\n\n  private updateMeta(\n    name: string,\n    content?: string | MetaDefinition,\n    ctx?: ProcessedMetaContext,\n    templates?: RouteMetaTemplates,\n    meta?: ProcessedMetaContext,\n  ) {\n    if (content) {\n      const metaDef: MetaDefinition =\n        typeof content === 'string' ? { name, content } : content;\n\n      metaDef.content = this.contextService._templateStr(metaDef.content, ctx, {\n        name,\n        meta,\n        templates,\n      });\n\n      this.meta.updateTag(metaDef);\n      this.metaTags[name] = true;\n    } else {\n      this.resetMeta(name, ctx, templates, meta);\n    }\n  }\n\n  private resetMeta(\n    name: string,\n    ctx?: MetaContext,\n    templates?: RouteMetaTemplates,\n    meta?: ProcessedMetaContext,\n  ) {\n    const defaultMeta = this.defaultMeta[name];\n\n    if (defaultMeta) {\n      this.updateMeta(name, defaultMeta, ctx, templates, meta);\n    } else {\n      this.meta.removeTag(`name=\"${name}\"`);\n      delete this.metaTags[name];\n    }\n  }\n\n  private getLastRoute(route: ActivatedRoute) {\n    while (route.firstChild) {\n      route = route.firstChild;\n    }\n    return route;\n  }\n}\n","import {\n  ModuleWithProviders,\n  NgModule,\n  Optional,\n  Provider,\n  SkipSelf,\n} from '@angular/core';\n\nimport { RouterMetaConfig, ROUTE_META_CONFIG } from './router-meta';\nimport { RouterMetaService } from './router-meta.service';\n\nexport type ConfigProvider = Provider;\n\nexport interface RouterMetaModuleConfig {\n  config?: RouterMetaConfig;\n  configProvider?: ConfigProvider;\n}\n\n@NgModule({})\nexport class RouterMetaModule {\n  constructor(\n    @Optional() @SkipSelf() parentModule: RouterMetaModule,\n    routerMetaService: RouterMetaService,\n  ) {\n    if (!parentModule) {\n      routerMetaService._setup();\n    }\n  }\n\n  static forRoot(\n    config: RouterMetaModuleConfig = {} as any,\n  ): ModuleWithProviders<RouterMetaModule> {\n    return {\n      ngModule: RouterMetaModule,\n      providers: [\n        config.configProvider || {\n          provide: ROUTE_META_CONFIG,\n          useValue: config.config,\n        },\n      ],\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-router-meta\n */\n\nexport * from './lib/router-meta';\nexport { RouterMetaService } from './lib/router-meta.service';\nexport { RouterMetaContextService } from './lib/router-meta-context.service';\nexport * from './lib/router-meta.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.RouterMetaContextService","i1.RouterMetaService"],"mappings":"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"}