71 lines
2.3 KiB
JavaScript
71 lines
2.3 KiB
JavaScript
function validator(expected) {
|
|
function validate(module, file) {
|
|
if (!module) return;
|
|
for (const key in module) {
|
|
if (key[0] === "_" || expected.has(key)) continue;
|
|
const values = [...expected.values()];
|
|
const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf("."))) ?? `valid exports are ${values.join(", ")}, or anything with a '_' prefix`;
|
|
throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : ""} (${hint})`);
|
|
}
|
|
}
|
|
return validate;
|
|
}
|
|
function hint_for_supported_files(key, ext = ".js") {
|
|
const supported_files = [];
|
|
if (valid_layout_exports.has(key)) {
|
|
supported_files.push(`+layout${ext}`);
|
|
}
|
|
if (valid_page_exports.has(key)) {
|
|
supported_files.push(`+page${ext}`);
|
|
}
|
|
if (valid_layout_server_exports.has(key)) {
|
|
supported_files.push(`+layout.server${ext}`);
|
|
}
|
|
if (valid_page_server_exports.has(key)) {
|
|
supported_files.push(`+page.server${ext}`);
|
|
}
|
|
if (valid_server_exports.has(key)) {
|
|
supported_files.push(`+server${ext}`);
|
|
}
|
|
if (supported_files.length > 0) {
|
|
return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(", ")}${supported_files.length > 1 ? " or " : ""}${supported_files.at(-1)}`;
|
|
}
|
|
}
|
|
const valid_layout_exports = /* @__PURE__ */ new Set([
|
|
"load",
|
|
"prerender",
|
|
"csr",
|
|
"ssr",
|
|
"trailingSlash",
|
|
"config"
|
|
]);
|
|
const valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, "entries"]);
|
|
const valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]);
|
|
const valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, "actions", "entries"]);
|
|
const valid_server_exports = /* @__PURE__ */ new Set([
|
|
"GET",
|
|
"POST",
|
|
"PATCH",
|
|
"PUT",
|
|
"DELETE",
|
|
"OPTIONS",
|
|
"HEAD",
|
|
"fallback",
|
|
"prerender",
|
|
"trailingSlash",
|
|
"config",
|
|
"entries"
|
|
]);
|
|
const validate_layout_exports = validator(valid_layout_exports);
|
|
const validate_page_exports = validator(valid_page_exports);
|
|
const validate_layout_server_exports = validator(valid_layout_server_exports);
|
|
const validate_page_server_exports = validator(valid_page_server_exports);
|
|
const validate_server_exports = validator(valid_server_exports);
|
|
export {
|
|
validate_layout_exports as a,
|
|
validate_page_server_exports as b,
|
|
validate_page_exports as c,
|
|
validate_server_exports as d,
|
|
validate_layout_server_exports as v
|
|
};
|