|
Packit Service |
0246ed |
/**
|
|
Packit Service |
0246ed |
* React Static Boilerplate
|
|
Packit Service |
0246ed |
* https://github.com/kriasoft/react-static-boilerplate
|
|
Packit Service |
0246ed |
*
|
|
Packit Service |
0246ed |
* Copyright © 2015-present Kriasoft, LLC. All rights reserved.
|
|
Packit Service |
0246ed |
*
|
|
Packit Service |
0246ed |
* This source code is licensed under the MIT license found in the
|
|
Packit Service |
0246ed |
* LICENSE.txt file in the root directory of this source tree.
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
const toRegExp = require("path-to-regexp");
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
function escape(text) {
|
|
Packit Service |
0246ed |
return text.replace("'", "\\'").replace("\\", "\\\\");
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
/**
|
|
Packit Service |
0246ed |
* Converts application routes from JSON to JavaScript. For example, a route like
|
|
Packit Service |
0246ed |
*
|
|
Packit Service |
0246ed |
* {
|
|
Packit Service |
0246ed |
* "path": "/about",
|
|
Packit Service |
0246ed |
* "page": "./pages/about"
|
|
Packit Service |
0246ed |
* }
|
|
Packit Service |
0246ed |
*
|
|
Packit Service |
0246ed |
* becomes
|
|
Packit Service |
0246ed |
*
|
|
Packit Service |
0246ed |
* {
|
|
Packit Service |
0246ed |
* path: '/about',
|
|
Packit Service |
0246ed |
* pattern: /^\\/about(?:\/(?=$))?$/i,
|
|
Packit Service |
0246ed |
* keys: [],
|
|
Packit Service |
0246ed |
* page: './pages/about',
|
|
Packit Service |
0246ed |
* load: function () { return new Promise(resolve => require(['./pages/about'], resolve)); }
|
|
Packit Service |
0246ed |
* }
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
module.exports = function routesLoader(source) {
|
|
Packit Service |
0246ed |
this.cacheable();
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
const output = ["[\n"];
|
|
Packit Service |
0246ed |
const routes = JSON.parse(source);
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
for (const route of routes) {
|
|
Packit Service |
0246ed |
const keys = [];
|
|
Packit Service |
0246ed |
const pattern = toRegExp(route.path, keys);
|
|
Packit Service |
0246ed |
const required =
|
|
Packit Service |
0246ed |
route.chunk && route.chunk === "main"
|
|
Packit Service |
0246ed |
? (module) => `Promise.resolve(require('${escape(module)}').default)`
|
|
Packit Service |
0246ed |
: (module) => `new Promise(function (resolve, reject) {
|
|
Packit Service |
0246ed |
try {
|
|
Packit Service |
0246ed |
require.ensure(['${escape(module)}'], function (require) {
|
|
Packit Service |
0246ed |
resolve(require('${escape(module)}').default);
|
|
Packit Service |
0246ed |
}${typeof route.chunk === "string" ? `, '${escape(route.chunk)}'` : ""});
|
|
Packit Service |
0246ed |
} catch (err) {
|
|
Packit Service |
0246ed |
reject(err);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
})`;
|
|
Packit Service |
0246ed |
output.push(" {\n");
|
|
Packit Service |
0246ed |
output.push(` path: '${escape(route.path)}',\n`);
|
|
Packit Service |
0246ed |
output.push(` pattern: ${pattern.toString()},\n`);
|
|
Packit Service |
0246ed |
output.push(` keys: ${JSON.stringify(keys)},\n`);
|
|
Packit Service |
0246ed |
output.push(` page: '${escape(route.page)}',\n`);
|
|
Packit Service |
0246ed |
if (route.data) {
|
|
Packit Service |
0246ed |
output.push(` data: ${JSON.stringify(route.data)},\n`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
output.push(` load() {\n return ${required(route.page)};\n },\n`);
|
|
Packit Service |
0246ed |
output.push(" },\n");
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
output.push("]");
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
return `module.exports = ${output.join("")};`;
|
|
Packit Service |
0246ed |
};
|