169 lines
9.0 KiB
JavaScript
Executable File
169 lines
9.0 KiB
JavaScript
Executable File
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "buildPagesStaticPaths", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return buildPagesStaticPaths;
|
|
}
|
|
});
|
|
const _normalizelocalepath = require("../../shared/lib/i18n/normalize-locale-path");
|
|
const _fallback = require("../../lib/fallback");
|
|
const _escapepathdelimiters = /*#__PURE__*/ _interop_require_default(require("../../shared/lib/router/utils/escape-path-delimiters"));
|
|
const _removetrailingslash = require("../../shared/lib/router/utils/remove-trailing-slash");
|
|
const _routematcher = require("../../shared/lib/router/utils/route-matcher");
|
|
const _routeregex = require("../../shared/lib/router/utils/route-regex");
|
|
const _utils = require("./utils");
|
|
function _interop_require_default(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
async function buildPagesStaticPaths({ page, getStaticPaths, configFileName, locales, defaultLocale }) {
|
|
const prerenderedRoutesByPathname = new Map();
|
|
const _routeRegex = (0, _routeregex.getRouteRegex)(page);
|
|
const _routeMatcher = (0, _routematcher.getRouteMatcher)(_routeRegex);
|
|
// Get the default list of allowed params.
|
|
const routeParameterKeys = Object.keys(_routeMatcher(page));
|
|
const staticPathsResult = await getStaticPaths({
|
|
// We create a copy here to avoid having the types of `getStaticPaths`
|
|
// change. This ensures that users can't mutate this array and have it
|
|
// poison the reference.
|
|
locales: [
|
|
...locales ?? []
|
|
],
|
|
defaultLocale
|
|
});
|
|
const expectedReturnVal = `Expected: { paths: [], fallback: boolean }\n` + `See here for more info: https://nextjs.org/docs/messages/invalid-getstaticpaths-value`;
|
|
if (!staticPathsResult || typeof staticPathsResult !== 'object' || Array.isArray(staticPathsResult)) {
|
|
throw Object.defineProperty(new Error(`Invalid value returned from getStaticPaths in ${page}. Received ${typeof staticPathsResult} ${expectedReturnVal}`), "__NEXT_ERROR_CODE", {
|
|
value: "E241",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const invalidStaticPathKeys = Object.keys(staticPathsResult).filter((key)=>!(key === 'paths' || key === 'fallback'));
|
|
if (invalidStaticPathKeys.length > 0) {
|
|
throw Object.defineProperty(new Error(`Extra keys returned from getStaticPaths in ${page} (${invalidStaticPathKeys.join(', ')}) ${expectedReturnVal}`), "__NEXT_ERROR_CODE", {
|
|
value: "E38",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
if (!(typeof staticPathsResult.fallback === 'boolean' || staticPathsResult.fallback === 'blocking')) {
|
|
throw Object.defineProperty(new Error(`The \`fallback\` key must be returned from getStaticPaths in ${page}.\n` + expectedReturnVal), "__NEXT_ERROR_CODE", {
|
|
value: "E243",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const toPrerender = staticPathsResult.paths;
|
|
if (!Array.isArray(toPrerender)) {
|
|
throw Object.defineProperty(new Error(`Invalid \`paths\` value returned from getStaticPaths in ${page}.\n` + `\`paths\` must be an array of strings or objects of shape { params: [key: string]: string }`), "__NEXT_ERROR_CODE", {
|
|
value: "E83",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
toPrerender.forEach((entry)=>{
|
|
// For a string-provided path, we must make sure it matches the dynamic
|
|
// route.
|
|
if (typeof entry === 'string') {
|
|
entry = (0, _removetrailingslash.removeTrailingSlash)(entry);
|
|
const localePathResult = (0, _normalizelocalepath.normalizeLocalePath)(entry, locales);
|
|
let cleanedEntry = entry;
|
|
if (localePathResult.detectedLocale) {
|
|
cleanedEntry = entry.slice(localePathResult.detectedLocale.length + 1);
|
|
} else if (defaultLocale) {
|
|
entry = `/${defaultLocale}${entry}`;
|
|
}
|
|
const params = _routeMatcher(cleanedEntry);
|
|
if (!params) {
|
|
throw Object.defineProperty(new Error(`The provided path \`${cleanedEntry}\` does not match the page: \`${page}\`.`), "__NEXT_ERROR_CODE", {
|
|
value: "E481",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
// If leveraging the string paths variant the entry should already be
|
|
// encoded so we decode the segments ensuring we only escape path
|
|
// delimiters
|
|
const pathname = entry.split('/').map((segment)=>(0, _escapepathdelimiters.default)(decodeURIComponent(segment), true)).join('/');
|
|
if (!prerenderedRoutesByPathname.has(pathname)) {
|
|
prerenderedRoutesByPathname.set(pathname, {
|
|
params,
|
|
pathname,
|
|
encodedPathname: entry,
|
|
fallbackRouteParams: undefined,
|
|
fallbackMode: (0, _fallback.parseStaticPathsResult)(staticPathsResult.fallback),
|
|
fallbackRootParams: undefined,
|
|
throwOnEmptyStaticShell: undefined
|
|
});
|
|
}
|
|
} else {
|
|
const invalidKeys = Object.keys(entry).filter((key)=>key !== 'params' && key !== 'locale');
|
|
if (invalidKeys.length) {
|
|
throw Object.defineProperty(new Error(`Additional keys were returned from \`getStaticPaths\` in page "${page}". ` + `URL Parameters intended for this dynamic route must be nested under the \`params\` key, i.e.:` + `\n\n\treturn { params: { ${routeParameterKeys.map((k)=>`${k}: ...`).join(', ')} } }` + `\n\nKeys that need to be moved: ${invalidKeys.join(', ')}.\n`), "__NEXT_ERROR_CODE", {
|
|
value: "E322",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const { params = {} } = entry;
|
|
let builtPage = page;
|
|
let encodedBuiltPage = page;
|
|
routeParameterKeys.forEach((validParamKey)=>{
|
|
const { repeat, optional } = _routeRegex.groups[validParamKey];
|
|
let paramValue = params[validParamKey];
|
|
if (optional && params.hasOwnProperty(validParamKey) && (paramValue === null || paramValue === undefined || paramValue === false)) {
|
|
paramValue = [];
|
|
}
|
|
if (repeat && !Array.isArray(paramValue) || !repeat && typeof paramValue !== 'string' || typeof paramValue === 'undefined') {
|
|
throw Object.defineProperty(new Error(`A required parameter (${validParamKey}) was not provided as ${repeat ? 'an array' : 'a string'} received ${typeof paramValue} in getStaticPaths for ${page}`), "__NEXT_ERROR_CODE", {
|
|
value: "E620",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
let replaced = `[${repeat ? '...' : ''}${validParamKey}]`;
|
|
if (optional) {
|
|
replaced = `[${replaced}]`;
|
|
}
|
|
builtPage = builtPage.replace(replaced, (0, _utils.encodeParam)(paramValue, (value)=>(0, _escapepathdelimiters.default)(value, true)));
|
|
encodedBuiltPage = encodedBuiltPage.replace(replaced, (0, _utils.encodeParam)(paramValue, encodeURIComponent));
|
|
});
|
|
if (!builtPage && !encodedBuiltPage) {
|
|
return;
|
|
}
|
|
if (entry.locale && !(locales == null ? void 0 : locales.includes(entry.locale))) {
|
|
throw Object.defineProperty(new Error(`Invalid locale returned from getStaticPaths for ${page}, the locale ${entry.locale} is not specified in ${configFileName}`), "__NEXT_ERROR_CODE", {
|
|
value: "E358",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const curLocale = entry.locale || defaultLocale || '';
|
|
const pathname = (0, _utils.normalizePathname)(`${curLocale ? `/${curLocale}` : ''}${curLocale && builtPage === '/' ? '' : builtPage}`);
|
|
if (!prerenderedRoutesByPathname.has(pathname)) {
|
|
prerenderedRoutesByPathname.set(pathname, {
|
|
params,
|
|
pathname,
|
|
encodedPathname: (0, _utils.normalizePathname)(`${curLocale ? `/${curLocale}` : ''}${curLocale && encodedBuiltPage === '/' ? '' : encodedBuiltPage}`),
|
|
fallbackRouteParams: undefined,
|
|
fallbackMode: (0, _fallback.parseStaticPathsResult)(staticPathsResult.fallback),
|
|
fallbackRootParams: undefined,
|
|
throwOnEmptyStaticShell: undefined
|
|
});
|
|
}
|
|
}
|
|
});
|
|
return {
|
|
fallbackMode: (0, _fallback.parseStaticPathsResult)(staticPathsResult.fallback),
|
|
prerenderedRoutes: [
|
|
...prerenderedRoutesByPathname.values()
|
|
]
|
|
};
|
|
}
|
|
|
|
//# sourceMappingURL=pages.js.map
|