From c29f731dcd8981dbb3b0f5f7590aa159145e6326 Mon Sep 17 00:00:00 2001 From: Mike Nikles Date: Mon, 16 May 2022 19:20:58 +0000 Subject: [PATCH 1/5] [fix] Process sym-linked routes --- .changeset/few-cobras-switch.md | 5 +++ .../core/sync/create_manifest_data/index.js | 2 +- .../sync/create_manifest_data/index.spec.js | 31 +++++++++++++++++++ .../test/samples/sym-link/bar/index.svelte | 0 .../test/samples/sym-link/routes/foo | 1 + .../test/samples/sym-link/routes/index.svelte | 0 .../prerendering/paths-base/svelte.config.js | 2 +- 7 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 .changeset/few-cobras-switch.md create mode 100644 packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/bar/index.svelte create mode 120000 packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/foo create mode 100644 packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/index.svelte diff --git a/.changeset/few-cobras-switch.md b/.changeset/few-cobras-switch.md new file mode 100644 index 000000000000..5b57d9a648f7 --- /dev/null +++ b/.changeset/few-cobras-switch.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Allow sym-linked routes 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 c55dce642b70..91f6d2e24809 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.js @@ -444,7 +444,7 @@ function list_files(dir, path = '', files = []) { .forEach((file) => { const joined = path ? `${path}/${file.name}` : file.name; - if (file.isDirectory()) { + if (file.isDirectory() || file.isSymbolicLink()) { list_files(`${dir}/${file.name}`, joined, files); } else { files.push(joined); diff --git a/packages/kit/src/core/sync/create_manifest_data/index.spec.js b/packages/kit/src/core/sync/create_manifest_data/index.spec.js index 022b7e4e7d41..f92cacb611a9 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.spec.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.spec.js @@ -95,6 +95,37 @@ test('creates routes', () => { ]); }); +test('creates sym-linked routes', () => { + const { components, routes } = create('samples/sym-link/routes'); + + const index = 'samples/sym-link/routes/index.svelte'; + const symlinked_index = 'samples/sym-link/routes/foo/index.svelte'; + + assert.equal(components, [default_layout, default_error, symlinked_index, index]); + + assert.equal(routes, [ + { + type: 'page', + id: '', + pattern: /^\/$/, + path: '/', + shadow: null, + a: [default_layout, index], + b: [default_error] + }, + + { + type: 'page', + id: 'foo', + pattern: /^\/foo\/?$/, + path: '/foo', + shadow: null, + a: [default_layout, symlinked_index], + b: [default_error] + } + ]); +}); + test('creates routes with layout', () => { const { components, routes } = create('samples/basic-layout'); diff --git a/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/bar/index.svelte b/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/bar/index.svelte new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/foo b/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/foo new file mode 120000 index 000000000000..aad1092972f0 --- /dev/null +++ b/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/foo @@ -0,0 +1 @@ +../bar/ \ No newline at end of file diff --git a/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/index.svelte b/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/index.svelte new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/test/prerendering/paths-base/svelte.config.js b/packages/kit/test/prerendering/paths-base/svelte.config.js index 416a7be5e562..4e1535a7684e 100644 --- a/packages/kit/test/prerendering/paths-base/svelte.config.js +++ b/packages/kit/test/prerendering/paths-base/svelte.config.js @@ -7,7 +7,7 @@ const config = { adapter: adapter(), paths: { - base: '/path-base', + base: '/path-base' }, prerender: { From 801bd67f46aa43f54b5b183d6392ab4568c193d3 Mon Sep 17 00:00:00 2001 From: Mike Nikles Date: Wed, 18 May 2022 04:04:42 +0000 Subject: [PATCH 2/5] Revert to fs.statSync --- .../kit/src/core/sync/create_manifest_data/index.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 91f6d2e24809..353ff4f25812 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.js @@ -424,8 +424,8 @@ function count_occurrences(needle, haystack) { * @param {string[]} [files] */ function list_files(dir, path = '', files = []) { - fs.readdirSync(dir, { withFileTypes: true }) - .sort(({ name: a }, { name: b }) => { + fs.readdirSync(dir) + .sort((a, b) => { // sort each directory in (__layout, __error, everything else) order // so that we can trace layouts/errors immediately @@ -442,10 +442,12 @@ function list_files(dir, path = '', files = []) { return a < b ? -1 : 1; }) .forEach((file) => { - const joined = path ? `${path}/${file.name}` : file.name; + const full = `${dir}/${file}`; + const stats = fs.statSync(full); + const joined = path ? `${path}/${file}` : file; - if (file.isDirectory() || file.isSymbolicLink()) { - list_files(`${dir}/${file.name}`, joined, files); + if (stats.isDirectory()) { + list_files(`${dir}/${file}`, joined, files); } else { files.push(joined); } From f4b6979d8b7037e8b52a422b75e0593ab5539098 Mon Sep 17 00:00:00 2001 From: Mike Nikles <788827+mikenikles@users.noreply.github.com> Date: Wed, 18 May 2022 16:58:23 -0400 Subject: [PATCH 3/5] Update packages/kit/src/core/sync/create_manifest_data/index.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: MaurĂ­cio Kishi --- packages/kit/src/core/sync/create_manifest_data/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 353ff4f25812..171284e2bdfd 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.js @@ -447,7 +447,7 @@ function list_files(dir, path = '', files = []) { const joined = path ? `${path}/${file}` : file; if (stats.isDirectory()) { - list_files(`${dir}/${file}`, joined, files); + list_files(full, joined, files); } else { files.push(joined); } From a3d336a7f851095ecfcba8de6c58e3407c30e3a2 Mon Sep 17 00:00:00 2001 From: mrkishi Date: Sun, 22 May 2022 07:55:24 -0300 Subject: [PATCH 4/5] reword sym-linked to symlinked --- .changeset/few-cobras-switch.md | 2 +- .../kit/src/core/sync/create_manifest_data/index.spec.js | 8 ++++---- .../create_manifest_data/test/samples/sym-link/routes/foo | 1 - .../test/samples/{sym-link => symlinks}/bar/index.svelte | 0 .../create_manifest_data/test/samples/symlinks/routes/foo | 1 + .../samples/{sym-link => symlinks}/routes/index.svelte | 0 6 files changed, 6 insertions(+), 6 deletions(-) delete mode 120000 packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/foo rename packages/kit/src/core/sync/create_manifest_data/test/samples/{sym-link => symlinks}/bar/index.svelte (100%) create mode 120000 packages/kit/src/core/sync/create_manifest_data/test/samples/symlinks/routes/foo rename packages/kit/src/core/sync/create_manifest_data/test/samples/{sym-link => symlinks}/routes/index.svelte (100%) diff --git a/.changeset/few-cobras-switch.md b/.changeset/few-cobras-switch.md index 5b57d9a648f7..c619a06410cf 100644 --- a/.changeset/few-cobras-switch.md +++ b/.changeset/few-cobras-switch.md @@ -2,4 +2,4 @@ '@sveltejs/kit': patch --- -Allow sym-linked routes +Allow symlinked directories in the routes folder diff --git a/packages/kit/src/core/sync/create_manifest_data/index.spec.js b/packages/kit/src/core/sync/create_manifest_data/index.spec.js index f92cacb611a9..d93d0ac6fe38 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.spec.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.spec.js @@ -95,11 +95,11 @@ test('creates routes', () => { ]); }); -test('creates sym-linked routes', () => { - const { components, routes } = create('samples/sym-link/routes'); +test('creates symlinked routes', () => { + const { components, routes } = create('samples/symlinks/routes'); - const index = 'samples/sym-link/routes/index.svelte'; - const symlinked_index = 'samples/sym-link/routes/foo/index.svelte'; + const index = 'samples/symlinks/routes/index.svelte'; + const symlinked_index = 'samples/symlinks/routes/foo/index.svelte'; assert.equal(components, [default_layout, default_error, symlinked_index, index]); diff --git a/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/foo b/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/foo deleted file mode 120000 index aad1092972f0..000000000000 --- a/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/foo +++ /dev/null @@ -1 +0,0 @@ -../bar/ \ No newline at end of file diff --git a/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/bar/index.svelte b/packages/kit/src/core/sync/create_manifest_data/test/samples/symlinks/bar/index.svelte similarity index 100% rename from packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/bar/index.svelte rename to packages/kit/src/core/sync/create_manifest_data/test/samples/symlinks/bar/index.svelte diff --git a/packages/kit/src/core/sync/create_manifest_data/test/samples/symlinks/routes/foo b/packages/kit/src/core/sync/create_manifest_data/test/samples/symlinks/routes/foo new file mode 120000 index 000000000000..79264abecd10 --- /dev/null +++ b/packages/kit/src/core/sync/create_manifest_data/test/samples/symlinks/routes/foo @@ -0,0 +1 @@ +../bar \ No newline at end of file diff --git a/packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/index.svelte b/packages/kit/src/core/sync/create_manifest_data/test/samples/symlinks/routes/index.svelte similarity index 100% rename from packages/kit/src/core/sync/create_manifest_data/test/samples/sym-link/routes/index.svelte rename to packages/kit/src/core/sync/create_manifest_data/test/samples/symlinks/routes/index.svelte From 3980e3c8658808db1ceddabd5cb8b497b919160a Mon Sep 17 00:00:00 2001 From: mrkishi Date: Sun, 22 May 2022 07:58:40 -0300 Subject: [PATCH 5/5] skip symlinks tests when unsupported --- .../kit/src/core/sync/create_manifest_data/index.spec.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/core/sync/create_manifest_data/index.spec.js b/packages/kit/src/core/sync/create_manifest_data/index.spec.js index d93d0ac6fe38..09edf3cb7c55 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.spec.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.spec.js @@ -1,3 +1,4 @@ +import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; import { test } from 'uvu'; @@ -95,7 +96,13 @@ test('creates routes', () => { ]); }); -test('creates symlinked routes', () => { +const symlink_survived_git = fs + .statSync(path.join(cwd, 'samples/symlinks/routes/foo')) + .isSymbolicLink(); + +const test_symlinks = symlink_survived_git ? test : test.skip; + +test_symlinks('creates symlinked routes', () => { const { components, routes } = create('samples/symlinks/routes'); const index = 'samples/symlinks/routes/index.svelte';