https://github.com/angular/angular
Raw File
Tip revision: 3d71d9ddd9ffa138af4e5f4230132b7632070ba3 authored by Alex Rickabaugh on 16 March 2023, 19:01:11 UTC
release: cut the v15.2.3 release
Tip revision: 3d71d9d
FirebaseRedirect.ts
import XRegExp from 'xregexp';

import {FirebaseRedirectConfig} from './FirebaseRedirector';
import {FirebaseRedirectSource} from './FirebaseRedirectSource';

export class FirebaseRedirect {
  source: FirebaseRedirectSource;
  destination: string;

  constructor(readonly rawConfig: FirebaseRedirectConfig) {
    this.source = (rawConfig.regex === undefined) ?
        FirebaseRedirectSource.fromGlobPattern(rawConfig.source) :
        FirebaseRedirectSource.fromRegexPattern(rawConfig.regex);
    this.destination = rawConfig.destination;
  }

  replace(url: string): string|undefined {
    const match = this.source.match(url);

    if (!match) {
      return undefined;
    }

    const namedReplacers = this.source.namedGroups.map<[RegExp, string]>(
        (name) =>
            [XRegExp(`:${name}`, 'g'),
             match[name],
    ]);
    const restReplacers = this.source.restNamedGroups.map<[RegExp, string]>(
        (name) =>
            [XRegExp(`:${name}\\*`, 'g'),
             match[name],
    ]);
    return XRegExp.replaceEach(this.destination, [...namedReplacers, ...restReplacers]);
  }
}
back to top