17 lines
		
	
	
		
			651 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			17 lines
		
	
	
		
			651 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import * as XRegExp from 'xregexp'; | ||
|  | import { FirebaseGlob } from './FirebaseGlob'; | ||
|  | 
 | ||
|  | export class FirebaseRedirect { | ||
|  |   glob = new FirebaseGlob(this.source); | ||
|  |   constructor(public source: string, public destination: string) {} | ||
|  | 
 | ||
|  |   replace(url: string) { | ||
|  |     const match = this.glob.match(url); | ||
|  |     if (match) { | ||
|  |       const paramReplacers = Object.keys(this.glob.namedParams).map(name => [ XRegExp(`:${name}`, 'g'), match[name] ]); | ||
|  |       const restReplacers = Object.keys(this.glob.restParams).map(name => [ XRegExp(`:${name}\\*`, 'g'), match[name] ]); | ||
|  |       return XRegExp.replaceEach(this.destination, [...paramReplacers, ...restReplacers]); | ||
|  |     } | ||
|  |   } | ||
|  | } |