|
|
|
|
|
|
|
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 = new Set([ |
|
'load', |
|
'prerender', |
|
'csr', |
|
'ssr', |
|
'trailingSlash', |
|
'config' |
|
]); |
|
const valid_page_exports = new Set([...valid_layout_exports, 'entries']); |
|
const valid_layout_server_exports = new Set([...valid_layout_exports]); |
|
const valid_page_server_exports = new Set([...valid_layout_server_exports, 'actions', 'entries']); |
|
const valid_server_exports = new Set([ |
|
'GET', |
|
'POST', |
|
'PATCH', |
|
'PUT', |
|
'DELETE', |
|
'OPTIONS', |
|
'HEAD', |
|
'fallback', |
|
'prerender', |
|
'trailingSlash', |
|
'config', |
|
'entries' |
|
]); |
|
|
|
export const validate_layout_exports = validator(valid_layout_exports); |
|
export const validate_page_exports = validator(valid_page_exports); |
|
export const validate_layout_server_exports = validator(valid_layout_server_exports); |
|
export const validate_page_server_exports = validator(valid_page_server_exports); |
|
export const validate_server_exports = validator(valid_server_exports); |
|
|