From 28294269658ecd158b456485ed0c05d796becd33 Mon Sep 17 00:00:00 2001 From: hiroki yagi Date: Thu, 30 Jun 2022 06:57:44 +0900 Subject: [PATCH] Check extensions for param matcher files (#5085) * Check file extensions in create_manifest_data * fix break to continue * use endpointExtensions instead `['.js', '.ts']` * rename endpointExtensions to moduleExtensions * fix doc * changeset * error on encountering endpointExtensions * add TODO comment * oops, update tests Co-authored-by: Rich Harris --- .changeset/many-suns-push.md | 5 +++++ documentation/docs/14-configuration.md | 6 +++--- packages/kit/src/core/config/index.spec.js | 3 ++- packages/kit/src/core/config/options.js | 7 ++++++- packages/kit/src/core/sync/create_manifest_data/index.js | 3 ++- packages/kit/src/core/sync/write_types.js | 2 +- packages/kit/types/index.d.ts | 2 +- 7 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 .changeset/many-suns-push.md diff --git a/.changeset/many-suns-push.md b/.changeset/many-suns-push.md new file mode 100644 index 000000000000..f6bebb2ed068 --- /dev/null +++ b/.changeset/many-suns-push.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +[breaking] change endpointExtensions to moduleExtensions, and use to filter param matchers diff --git a/documentation/docs/14-configuration.md b/documentation/docs/14-configuration.md index 123eb37b9539..498f3b95bb2d 100644 --- a/documentation/docs/14-configuration.md +++ b/documentation/docs/14-configuration.md @@ -29,7 +29,7 @@ const config = { // ... } }, - endpointExtensions: ['.js', '.ts'], + moduleExtensions: ['.js', '.ts'], files: { assets: 'static', hooks: 'src/hooks', @@ -155,9 +155,9 @@ When pages are prerendered, the CSP header is added via a `` ta > When `mode` is `'auto'`, SvelteKit will use nonces for dynamically rendered pages and hashes for prerendered pages. Using nonces with prerendered pages is insecure and therefore forbidden. -### endpointExtensions +### moduleExtensions -An array of file extensions that SvelteKit will treat as endpoints. Files with extensions that match neither `config.extensions` nor `config.kit.endpointExtensions` will be ignored by the router. +An array of file extensions that SvelteKit will treat as modules. Files with extensions that match neither `config.extensions` nor `config.kit.moduleExtensions` will be ignored by the router. ### files diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index 6106d4ff3c25..7e59cf7379fd 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -69,7 +69,7 @@ const get_defaults = (prefix = '') => ({ referrer: undefined } }, - endpointExtensions: ['.js', '.ts'], + endpointExtensions: undefined, files: { assets: join(prefix, 'static'), hooks: join(prefix, 'src/hooks'), @@ -88,6 +88,7 @@ const get_defaults = (prefix = '') => ({ parameter: '_method', allowed: [] }, + moduleExtensions: ['.js', '.ts'], outDir: join(prefix, '.svelte-kit'), package: { dir: 'package', diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 9d7405deb2fd..ac78e3fcced1 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -115,7 +115,10 @@ const options = object( }) }), - endpointExtensions: string_array(['.js', '.ts']), + // TODO: remove this for the 1.0 release + endpointExtensions: error( + (keypath) => `${keypath} has been renamed to config.kit.moduleExtensions` + ), files: object({ assets: string('static'), @@ -161,6 +164,8 @@ const options = object( }) }), + moduleExtensions: string_array(['.js', '.ts']), + outDir: string('.svelte-kit'), package: object({ diff --git a/packages/kit/src/core/sync/create_manifest_data/index.js b/packages/kit/src/core/sync/create_manifest_data/index.js index a9ac61096080..9081e651da24 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.js @@ -82,7 +82,7 @@ export default function create_manifest_data({ }); const routes_base = posixify(path.relative(cwd, config.kit.files.routes)); - const valid_extensions = [...config.extensions, ...config.kit.endpointExtensions]; + const valid_extensions = [...config.extensions, ...config.kit.moduleExtensions]; if (fs.existsSync(config.kit.files.routes)) { list_files(config.kit.files.routes).forEach((file) => { @@ -267,6 +267,7 @@ export default function create_manifest_data({ if (fs.existsSync(config.kit.files.params)) { for (const file of fs.readdirSync(config.kit.files.params)) { const ext = path.extname(file); + if (!config.kit.moduleExtensions.includes(ext)) continue; const type = file.slice(0, -ext.length); if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(type)) { diff --git a/packages/kit/src/core/sync/write_types.js b/packages/kit/src/core/sync/write_types.js index 9327020add85..a543cc2047d0 100644 --- a/packages/kit/src/core/sync/write_types.js +++ b/packages/kit/src/core/sync/write_types.js @@ -33,7 +33,7 @@ export function write_types(config, manifest_data) { if (file) { const ext = /** @type {string} */ ( - config.kit.endpointExtensions.find((ext) => file.endsWith(ext)) + config.kit.moduleExtensions.find((ext) => file.endsWith(ext)) ); const key = file.slice(0, -ext.length); shadow_types.set(key, { diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index eb5cd2092fd0..1aeed48b82ae 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -107,7 +107,7 @@ export interface KitConfig { mode?: 'hash' | 'nonce' | 'auto'; directives?: CspDirectives; }; - endpointExtensions?: string[]; + moduleExtensions?: string[]; files?: { assets?: string; hooks?: string;