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]);
 | |
|     }
 | |
|   }
 | |
| }
 |