From d2107d398857e607beccf499c3d09d998c4f24c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Tue, 11 May 2021 13:41:33 +0200 Subject: [PATCH 01/11] move static files to separate folder --- packages/adapter-node/index.js | 5 +++-- packages/adapter-node/src/server.js | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 238b29133bc4..5d8158c07821 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -14,8 +14,9 @@ export default function ({ out = 'build' } = {}) { async adapt(utils) { utils.log.minor('Copying assets'); - const static_directory = join(out, 'assets'); - utils.copy_client_files(static_directory); + const static_directory = join(out, 'static'); + const assets_directory = join(out, 'assets'); + utils.copy_client_files(assets_directory); utils.copy_static_files(static_directory); utils.log.minor('Copying server'); diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index 0f94fa32b3e6..2c1f21f3b873 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -1,11 +1,11 @@ +import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved +import { getRawBody } from '@sveltejs/kit/node'; // eslint-disable-line import/no-unresolved +import compression from 'compression'; import fs from 'fs'; import { dirname, join } from 'path'; -import { fileURLToPath } from 'url'; -import compression from 'compression'; import polka from 'polka'; import sirv from 'sirv'; -import { getRawBody } from '@sveltejs/kit/node'; // eslint-disable-line import/no-unresolved -import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved +import { fileURLToPath } from 'url'; // App is a dynamic file built from the application layer. @@ -13,6 +13,7 @@ const __dirname = dirname(fileURLToPath(import.meta.url)); const noop_handler = (_req, _res, next) => next(); const paths = { assets: join(__dirname, '/assets'), + static: join(__dirname, '/static'), prerendered: join(__dirname, '/prerendered') }; @@ -27,6 +28,12 @@ export function createServer({ render }) { ? mutable(paths.prerendered) : noop_handler; + const static_handler = fs.existsSync(paths.static) + ? sirv(paths.static, { + maxAge: 3600 + }) + : noop_handler; + const assets_handler = fs.existsSync(paths.assets) ? sirv(paths.assets, { maxAge: 31536000, @@ -37,6 +44,7 @@ export function createServer({ render }) { const server = polka().use( compression({ threshold: 0 }), assets_handler, + static_handler, prerendered_handler, async (req, res) => { const parsed = new URL(req.url || '', 'http://localhost'); From d758afcde23cb4520930cb20da1020cb9ef153ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Tue, 11 May 2021 14:30:42 +0200 Subject: [PATCH 02/11] added changeset --- .changeset/strong-files-obey.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/strong-files-obey.md diff --git a/.changeset/strong-files-obey.md b/.changeset/strong-files-obey.md new file mode 100644 index 000000000000..152203dc2cc9 --- /dev/null +++ b/.changeset/strong-files-obey.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +Moved 'static' to separate folder, for better cache control. From 1c31f077fa52b7b08e2d3451313d9e5764e5d963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Thu, 13 May 2021 22:13:37 +0200 Subject: [PATCH 03/11] removed static dir --- packages/adapter-node/index.js | 3 +-- packages/adapter-node/src/server.js | 8 +++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 5d8158c07821..466e80c7c9af 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -14,10 +14,9 @@ export default function ({ out = 'build' } = {}) { async adapt(utils) { utils.log.minor('Copying assets'); - const static_directory = join(out, 'static'); const assets_directory = join(out, 'assets'); utils.copy_client_files(assets_directory); - utils.copy_static_files(static_directory); + utils.copy_static_files(assets_directory); utils.log.minor('Copying server'); utils.copy_server_files(out); diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index 2c1f21f3b873..c87c31f6b893 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -36,15 +36,17 @@ export function createServer({ render }) { const assets_handler = fs.existsSync(paths.assets) ? sirv(paths.assets, { - maxAge: 31536000, - immutable: true + setHeaders: (res, pathname, stats) => { + if (pathname.startsWith('/_app/')) { + res.setHeader('cache-control', 'public, max-age=31536000, immutable'); + } + } }) : noop_handler; const server = polka().use( compression({ threshold: 0 }), assets_handler, - static_handler, prerendered_handler, async (req, res) => { const parsed = new URL(req.url || '', 'http://localhost'); From 1bb21ac1083c2d759c09e0bf15e54ef16cbd0bc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Thu, 13 May 2021 22:16:21 +0200 Subject: [PATCH 04/11] fix --- packages/adapter-node/index.js | 6 +++--- packages/adapter-node/src/server.js | 7 ------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 466e80c7c9af..238b29133bc4 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -14,9 +14,9 @@ export default function ({ out = 'build' } = {}) { async adapt(utils) { utils.log.minor('Copying assets'); - const assets_directory = join(out, 'assets'); - utils.copy_client_files(assets_directory); - utils.copy_static_files(assets_directory); + const static_directory = join(out, 'assets'); + utils.copy_client_files(static_directory); + utils.copy_static_files(static_directory); utils.log.minor('Copying server'); utils.copy_server_files(out); diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index c87c31f6b893..caedd3c6195e 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -13,7 +13,6 @@ const __dirname = dirname(fileURLToPath(import.meta.url)); const noop_handler = (_req, _res, next) => next(); const paths = { assets: join(__dirname, '/assets'), - static: join(__dirname, '/static'), prerendered: join(__dirname, '/prerendered') }; @@ -28,12 +27,6 @@ export function createServer({ render }) { ? mutable(paths.prerendered) : noop_handler; - const static_handler = fs.existsSync(paths.static) - ? sirv(paths.static, { - maxAge: 3600 - }) - : noop_handler; - const assets_handler = fs.existsSync(paths.assets) ? sirv(paths.assets, { setHeaders: (res, pathname, stats) => { From 6cd8367951b114f9555a8b3d15dcf1c4074327c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Thu, 13 May 2021 22:19:11 +0200 Subject: [PATCH 05/11] Fixed changeset --- .changeset/strong-files-obey.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/strong-files-obey.md b/.changeset/strong-files-obey.md index 152203dc2cc9..4b16244c6b9a 100644 --- a/.changeset/strong-files-obey.md +++ b/.changeset/strong-files-obey.md @@ -2,4 +2,4 @@ '@sveltejs/adapter-node': patch --- -Moved 'static' to separate folder, for better cache control. +Only cache files in /\_app/ From 319554edf810f978a420840b23bf5eef9e37edf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Fri, 11 Jun 2021 11:20:46 +0200 Subject: [PATCH 06/11] using config.kit.appDir --- packages/adapter-node/index.js | 9 ++++++--- packages/adapter-node/src/server.js | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 9ac22d0b0eca..110b9d77b68b 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -1,7 +1,7 @@ +import esbuild from 'esbuild'; import { readFileSync } from 'fs'; import { join } from 'path'; import { fileURLToPath } from 'url'; -import esbuild from 'esbuild'; /** * @param {{ @@ -13,7 +13,7 @@ export default function ({ out = 'build' } = {}) { const adapter = { name: '@sveltejs/adapter-node', - async adapt({ utils }) { + async adapt({ utils, config }) { utils.log.minor('Copying assets'); const static_directory = join(out, 'assets'); utils.copy_client_files(static_directory); @@ -28,7 +28,10 @@ export default function ({ out = 'build' } = {}) { bundle: true, external: Object.keys(JSON.parse(readFileSync('package.json', 'utf8')).dependencies || {}), format: 'esm', - platform: 'node' + platform: 'node', + define: { + esbuild_app_dir: '"' + config.kit.appDir + '"' + } }); utils.log.minor('Prerendering static pages'); diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index 57ce95653899..c6a0edfcf03b 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -30,7 +30,8 @@ export function createServer({ render }) { const assets_handler = fs.existsSync(paths.assets) ? sirv(paths.assets, { setHeaders: (res, pathname, stats) => { - if (pathname.startsWith('/_app/')) { + // eslint-disable-next-line no-undef + if (pathname.startsWith(`/${esbuild_app_dir}/`)) { res.setHeader('cache-control', 'public, max-age=31536000, immutable'); } } From 814fd124d672d4da40f713364d297e7f49ce07bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20Limell?= Date: Fri, 11 Jun 2021 11:25:50 +0200 Subject: [PATCH 07/11] Update strong-files-obey.md --- .changeset/strong-files-obey.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/strong-files-obey.md b/.changeset/strong-files-obey.md index 4b16244c6b9a..fd6e6884a8a5 100644 --- a/.changeset/strong-files-obey.md +++ b/.changeset/strong-files-obey.md @@ -2,4 +2,4 @@ '@sveltejs/adapter-node': patch --- -Only cache files in /\_app/ +Only cache files in config.kit.appDir From 289215d2986860982f339001c2d5922570fd2663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Wed, 16 Jun 2021 13:42:28 +0200 Subject: [PATCH 08/11] handle app_dir with optional leading slash, and as root --- packages/adapter-node/src/server.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index ff3ad64d29ce..e5305d050092 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -23,6 +23,19 @@ export function createServer({ render }) { maxAge: 0 }); + const immutable_path = (pathname) => { + // hard to tell if app_dir is mixed with static + // eslint-disable-next-line no-undef + if (esbuild_app_dir === '/') { + return false; + } + + return ( + // eslint-disable-next-line no-undef + pathname.startsWith(`/${esbuild_app_dir}/`) || pathname.startsWith(`${esbuild_app_dir}/`) + ); + }; + const prerendered_handler = fs.existsSync(paths.prerendered) ? mutable(paths.prerendered) : noop_handler; @@ -31,7 +44,7 @@ export function createServer({ render }) { ? sirv(paths.assets, { setHeaders: (res, pathname, stats) => { // eslint-disable-next-line no-undef - if (pathname.startsWith(`/${esbuild_app_dir}/`)) { + if (immutable_path(pathname)) { res.setHeader('cache-control', 'public, max-age=31536000, immutable'); } }, From d40b5b643243a83ceb61642843101f296a8d61a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Wed, 16 Jun 2021 13:49:39 +0200 Subject: [PATCH 09/11] clean up --- packages/adapter-node/src/server.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index e5305d050092..37af0b7aaf0b 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -43,7 +43,6 @@ export function createServer({ render }) { const assets_handler = fs.existsSync(paths.assets) ? sirv(paths.assets, { setHeaders: (res, pathname, stats) => { - // eslint-disable-next-line no-undef if (immutable_path(pathname)) { res.setHeader('cache-control', 'public, max-age=31536000, immutable'); } From 526707b5e644ce2bc67531022f75bc547d0c0240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Wed, 16 Jun 2021 14:48:23 +0200 Subject: [PATCH 10/11] check for leading and trailing slashed --- packages/adapter-node/src/server.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index 37af0b7aaf0b..697c04fc5985 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -24,16 +24,22 @@ export function createServer({ render }) { }); const immutable_path = (pathname) => { - // hard to tell if app_dir is mixed with static // eslint-disable-next-line no-undef - if (esbuild_app_dir === '/') { + let app_dir = esbuild_app_dir; + + // hard to tell when app_dir is mixed with static + if (app_dir === '/') { return false; } - return ( - // eslint-disable-next-line no-undef - pathname.startsWith(`/${esbuild_app_dir}/`) || pathname.startsWith(`${esbuild_app_dir}/`) - ); + if (app_dir.startsWith('/')) { + app_dir = app_dir.substr(1); + } + if (app_dir.endsWith('/')) { + app_dir = app_dir.substr(0, app_dir.length - 1); + } + + return pathname.startsWith(`/${app_dir}/`); }; const prerendered_handler = fs.existsSync(paths.prerendered) From 56c54536217be0b993a179d599f747e601f89607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20G=20Limell?= Date: Wed, 16 Jun 2021 14:51:46 +0200 Subject: [PATCH 11/11] using slice --- packages/adapter-node/src/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index 697c04fc5985..26c2d099d7ed 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -33,10 +33,10 @@ export function createServer({ render }) { } if (app_dir.startsWith('/')) { - app_dir = app_dir.substr(1); + app_dir = app_dir.slice(1); } if (app_dir.endsWith('/')) { - app_dir = app_dir.substr(0, app_dir.length - 1); + app_dir = app_dir.slice(0, -1); } return pathname.startsWith(`/${app_dir}/`);