2018-02-27 18:14:28 -05:00
|
|
|
import { resolve } from 'canonical-path';
|
|
|
|
import { load as loadJson } from 'cjson';
|
|
|
|
import { readFileSync } from 'fs';
|
2018-01-25 05:13:30 -05:00
|
|
|
|
2018-02-27 18:14:28 -05:00
|
|
|
import { FirebaseRedirector, FirebaseRedirectConfig } from '../../../tools/firebase-test-utils/FirebaseRedirector';
|
|
|
|
|
|
|
|
|
|
|
|
const AIO_DIR = resolve(__dirname, '../../..');
|
2018-01-25 05:13:30 -05:00
|
|
|
|
|
|
|
export function getRedirector() {
|
|
|
|
return new FirebaseRedirector(loadRedirects());
|
|
|
|
}
|
|
|
|
|
|
|
|
export function loadRedirects(): FirebaseRedirectConfig[] {
|
2018-02-27 18:14:28 -05:00
|
|
|
const pathToFirebaseJSON = `${AIO_DIR}/firebase.json`;
|
|
|
|
const contents = loadJson(pathToFirebaseJSON);
|
2018-01-25 05:13:30 -05:00
|
|
|
return contents.hosting.redirects;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function loadSitemapUrls() {
|
2018-02-27 18:14:28 -05:00
|
|
|
const pathToSiteMap = `${AIO_DIR}/src/generated/sitemap.xml`;
|
2018-01-25 05:13:30 -05:00
|
|
|
const xml = readFileSync(pathToSiteMap, 'utf8');
|
|
|
|
const urls: string[] = [];
|
|
|
|
xml.replace(/<loc>([^<]+)<\/loc>/g, (_, loc) => urls.push(loc.replace('%%DEPLOYMENT_HOST%%', '')));
|
|
|
|
return urls;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function loadLegacyUrls() {
|
2018-02-27 18:14:28 -05:00
|
|
|
const pathToLegacyUrls = `${__dirname}/URLS_TO_REDIRECT.txt`;
|
2018-01-25 05:13:30 -05:00
|
|
|
const urls = readFileSync(pathToLegacyUrls, 'utf8').split('\n').map(line => line.split('\t'));
|
|
|
|
return urls;
|
|
|
|
}
|
2018-01-25 15:19:32 -05:00
|
|
|
|
|
|
|
export function loadSWRoutes() {
|
2018-02-27 18:14:28 -05:00
|
|
|
const pathToSWManifest = `${AIO_DIR}/ngsw-manifest.json`;
|
|
|
|
const contents = loadJson(pathToSWManifest);
|
2018-01-25 15:19:32 -05:00
|
|
|
const routes = contents.routing.routes;
|
|
|
|
return Object.keys(routes).map(route => {
|
|
|
|
const routeConfig = routes[route];
|
|
|
|
switch (routeConfig.match) {
|
|
|
|
case 'exact':
|
|
|
|
return (url) => url === route;
|
|
|
|
case 'prefix':
|
|
|
|
return (url) => url.startsWith(route);
|
|
|
|
case 'regex':
|
|
|
|
const regex = new RegExp(route);
|
|
|
|
return (url) => regex.test(url);
|
|
|
|
default:
|
|
|
|
throw new Error(`unknown route config: ${route} - ${routeConfig.match}`);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|