From 2974931a609c2dcde2fd7f7d2f5bb9dba3afc1f5 Mon Sep 17 00:00:00 2001 From: stalkerg Date: Sun, 16 May 2021 22:22:16 +0900 Subject: [PATCH 001/129] add serverFetch hook --- packages/kit/src/core/dev/index.js | 3 +- .../kit/src/runtime/server/page/load_node.js | 8 +++- packages/kit/test/apps/basics/src/hooks.js | 13 +++++++ .../apps/basics/src/routes/load/_tests.js | 38 +++++++++++++++++++ .../apps/basics/src/routes/load/index.svelte | 1 + .../routes/load/server-fetch-request.svelte | 20 ++++++++++ packages/kit/types/hooks.d.ts | 2 + packages/kit/types/index.d.ts | 2 +- packages/kit/types/internal.d.ts | 3 +- 9 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 packages/kit/test/apps/basics/src/routes/load/server-fetch-request.svelte diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 3ec12c5c013b..8c6c3a725c41 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -187,7 +187,8 @@ class Watcher extends EventEmitter { }, hooks: { getSession: hooks.getSession || (() => ({})), - handle: hooks.handle || (({ request, render }) => render(request)) + handle: hooks.handle || (({ request, render }) => render(request)), + serverFetch: hooks.serverFetch, }, hydrate: this.config.kit.hydrate, paths: this.config.kit.paths, diff --git a/packages/kit/src/runtime/server/page/load_node.js b/packages/kit/src/runtime/server/page/load_node.js index 0c728e6df4e5..545e78f78ca7 100644 --- a/packages/kit/src/runtime/server/page/load_node.js +++ b/packages/kit/src/runtime/server/page/load_node.js @@ -98,8 +98,12 @@ export async function load_node({ let response; if (/^[a-zA-Z]+:/.test(url)) { - // external fetch - response = await fetch(url, /** @type {RequestInit} */ (opts)); + const request = new Request(url, /** @type {RequestInit} */ (opts)); + if (options.hooks && options.hooks.serverFetch) { + response = await options.hooks.serverFetch.call(null, request); + } else { + response = await fetch(request); + } } else { const [path, search] = url.split('?'); diff --git a/packages/kit/test/apps/basics/src/hooks.js b/packages/kit/test/apps/basics/src/hooks.js index ca5af57cf86f..c555c84c2ef5 100644 --- a/packages/kit/test/apps/basics/src/hooks.js +++ b/packages/kit/test/apps/basics/src/hooks.js @@ -24,3 +24,16 @@ export async function handle({ request, render }) { }; } } + +/** @type {import('@sveltejs/kit').serverFetch} */ +export async function serverFetch(request) { + let newRequest = request; + if (request.url.endsWith('/server-fetch-request.json')) { + newRequest = new Request( + request.url.replace('/server-fetch-request.json', '/server-fetch-request2.json'), + request + ); + } + + return fetch(newRequest); +} diff --git a/packages/kit/test/apps/basics/src/routes/load/_tests.js b/packages/kit/test/apps/basics/src/routes/load/_tests.js index 6c60df9382c4..8618fe534f2c 100644 --- a/packages/kit/test/apps/basics/src/routes/load/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/load/_tests.js @@ -181,6 +181,44 @@ export default function (test, is_dev) { server.close(); }); + test('handles external api', '/load', async ({ base, page }) => { + const port = await ports.find(4000); + + const files_names = ['/server-fetch-request.json', '/server-fetch-request2.json'] + + let times_responded = 0; + let expect_answer = 42; + + const server = http.createServer(async (req, res) => { + if (files_names.includes(req.url)) { + times_responded += 1; + + res.writeHead(200, { + 'Access-Control-Allow-Origin': '*', + 'content-type': 'application/json' + }); + + if (req.url === files_names[0]) { + res.end(JSON.stringify({answer: expect_answer})); + } else { + expect_answer = 43; + res.end(JSON.stringify({answer: expect_answer})); + } + } + }); + + await new Promise((fulfil) => { + server.listen(port, () => fulfil()); + }); + + await page.goto(`${base}/load/server-fetch-request?port=${port}`); + + assert.equal(times_responded, 1); + assert.equal(await page.textContent('h1'), `the answer is ${expect_answer}`); + + server.close(); + }); + test( 'makes credentialed fetches to endpoints by default', '/load', diff --git a/packages/kit/test/apps/basics/src/routes/load/index.svelte b/packages/kit/test/apps/basics/src/routes/load/index.svelte index 8565ed52a359..52a1929099b4 100644 --- a/packages/kit/test/apps/basics/src/routes/load/index.svelte +++ b/packages/kit/test/apps/basics/src/routes/load/index.svelte @@ -24,3 +24,4 @@ fetch credentialed large response raw body +server fetch request diff --git a/packages/kit/test/apps/basics/src/routes/load/server-fetch-request.svelte b/packages/kit/test/apps/basics/src/routes/load/server-fetch-request.svelte new file mode 100644 index 000000000000..5af5a9b082a1 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/load/server-fetch-request.svelte @@ -0,0 +1,20 @@ + + + + +

the answer is {answer}

diff --git a/packages/kit/types/hooks.d.ts b/packages/kit/types/hooks.d.ts index 15a12c47bed9..5d187be888e9 100644 --- a/packages/kit/types/hooks.d.ts +++ b/packages/kit/types/hooks.d.ts @@ -25,3 +25,5 @@ export type Handle> = (input: { request: ServerRequest; render: (request: ServerRequest) => ServerResponse | Promise; }) => ServerResponse | Promise; + +export type serverFetch = (req: Request) => Promise; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 832cbdb40fed..d8f0ab1e5a84 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -5,5 +5,5 @@ import './ambient-modules'; export { Adapter, AdapterUtils, Config } from './config'; export { ErrorLoad, Load, Page } from './page'; -export { Incoming, GetSession, Handle, ServerResponse as Response } from './hooks'; +export { Incoming, GetSession, Handle, ServerResponse as Response, serverFetch } from './hooks'; export { ServerRequest as Request, EndpointOutput, RequestHandler } from './endpoint'; diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index 6e8189f1c9b7..d8049e1d433f 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -1,5 +1,5 @@ import { Load } from './page'; -import { Incoming, GetSession, Handle, ServerResponse } from './hooks'; +import { Incoming, GetSession, Handle, ServerResponse, serverFetch } from './hooks'; import { RequestHandler } from './endpoint'; type PageId = string; @@ -111,6 +111,7 @@ export type SSRManifest = { export type Hooks = { getSession?: GetSession; handle?: Handle; + serverFetch?: serverFetch; }; export type SSRNode = { From 6063623a93ac71fa13a1ea89d7af5dd3374c8a98 Mon Sep 17 00:00:00 2001 From: stalkerg Date: Sun, 16 May 2021 22:29:11 +0900 Subject: [PATCH 002/129] fix small lint issues --- packages/kit/src/core/dev/index.js | 2 +- packages/kit/test/apps/basics/src/routes/load/_tests.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 8c6c3a725c41..e682c7fe1d04 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -188,7 +188,7 @@ class Watcher extends EventEmitter { hooks: { getSession: hooks.getSession || (() => ({})), handle: hooks.handle || (({ request, render }) => render(request)), - serverFetch: hooks.serverFetch, + serverFetch: hooks.serverFetch }, hydrate: this.config.kit.hydrate, paths: this.config.kit.paths, diff --git a/packages/kit/test/apps/basics/src/routes/load/_tests.js b/packages/kit/test/apps/basics/src/routes/load/_tests.js index 8618fe534f2c..af5b6d0fa44d 100644 --- a/packages/kit/test/apps/basics/src/routes/load/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/load/_tests.js @@ -199,10 +199,10 @@ export default function (test, is_dev) { }); if (req.url === files_names[0]) { - res.end(JSON.stringify({answer: expect_answer})); + res.end(JSON.stringify({ answer: expect_answer })); } else { expect_answer = 43; - res.end(JSON.stringify({answer: expect_answer})); + res.end(JSON.stringify({ answer: expect_answer })); } } }); From 9c9a88772b7e20b2bf26061387b98b891dd453f6 Mon Sep 17 00:00:00 2001 From: stalkerg Date: Sun, 16 May 2021 23:43:32 +0900 Subject: [PATCH 003/129] fix ServerFetch type name --- packages/kit/src/runtime/server/page/load_node.js | 2 +- packages/kit/test/apps/basics/src/hooks.js | 2 +- packages/kit/types/hooks.d.ts | 2 +- packages/kit/types/index.d.ts | 2 +- packages/kit/types/internal.d.ts | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/kit/src/runtime/server/page/load_node.js b/packages/kit/src/runtime/server/page/load_node.js index 545e78f78ca7..94b011a1fb13 100644 --- a/packages/kit/src/runtime/server/page/load_node.js +++ b/packages/kit/src/runtime/server/page/load_node.js @@ -99,7 +99,7 @@ export async function load_node({ if (/^[a-zA-Z]+:/.test(url)) { const request = new Request(url, /** @type {RequestInit} */ (opts)); - if (options.hooks && options.hooks.serverFetch) { + if (options.hooks.serverFetch) { response = await options.hooks.serverFetch.call(null, request); } else { response = await fetch(request); diff --git a/packages/kit/test/apps/basics/src/hooks.js b/packages/kit/test/apps/basics/src/hooks.js index c555c84c2ef5..8be5ba1eb450 100644 --- a/packages/kit/test/apps/basics/src/hooks.js +++ b/packages/kit/test/apps/basics/src/hooks.js @@ -25,7 +25,7 @@ export async function handle({ request, render }) { } } -/** @type {import('@sveltejs/kit').serverFetch} */ +/** @type {import('@sveltejs/kit').ServerFetch} */ export async function serverFetch(request) { let newRequest = request; if (request.url.endsWith('/server-fetch-request.json')) { diff --git a/packages/kit/types/hooks.d.ts b/packages/kit/types/hooks.d.ts index 5d187be888e9..e8edca67e07f 100644 --- a/packages/kit/types/hooks.d.ts +++ b/packages/kit/types/hooks.d.ts @@ -26,4 +26,4 @@ export type Handle> = (input: { render: (request: ServerRequest) => ServerResponse | Promise; }) => ServerResponse | Promise; -export type serverFetch = (req: Request) => Promise; +export type ServerFetch = (req: Request) => Promise; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index d8f0ab1e5a84..32614afc9343 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -5,5 +5,5 @@ import './ambient-modules'; export { Adapter, AdapterUtils, Config } from './config'; export { ErrorLoad, Load, Page } from './page'; -export { Incoming, GetSession, Handle, ServerResponse as Response, serverFetch } from './hooks'; +export { Incoming, GetSession, Handle, ServerResponse as Response, ServerFetch } from './hooks'; export { ServerRequest as Request, EndpointOutput, RequestHandler } from './endpoint'; diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index d8049e1d433f..f9f6b85e1416 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -1,5 +1,5 @@ import { Load } from './page'; -import { Incoming, GetSession, Handle, ServerResponse, serverFetch } from './hooks'; +import { Incoming, GetSession, Handle, ServerResponse, ServerFetch } from './hooks'; import { RequestHandler } from './endpoint'; type PageId = string; @@ -111,7 +111,7 @@ export type SSRManifest = { export type Hooks = { getSession?: GetSession; handle?: Handle; - serverFetch?: serverFetch; + serverFetch?: ServerFetch; }; export type SSRNode = { From ca6e9accdf84557f6853d8de591888adb422401b Mon Sep 17 00:00:00 2001 From: stalkerg Date: Mon, 17 May 2021 03:38:58 +0900 Subject: [PATCH 004/129] fix lint --- packages/kit/test/apps/basics/src/routes/load/_tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/test/apps/basics/src/routes/load/_tests.js b/packages/kit/test/apps/basics/src/routes/load/_tests.js index af5b6d0fa44d..5fe1543b7eb9 100644 --- a/packages/kit/test/apps/basics/src/routes/load/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/load/_tests.js @@ -184,7 +184,7 @@ export default function (test, is_dev) { test('handles external api', '/load', async ({ base, page }) => { const port = await ports.find(4000); - const files_names = ['/server-fetch-request.json', '/server-fetch-request2.json'] + const files_names = ['/server-fetch-request.json', '/server-fetch-request2.json']; let times_responded = 0; let expect_answer = 42; From 87c68c5759b719519ff2348ea3775f42644d0a8c Mon Sep 17 00:00:00 2001 From: stalkerg Date: Tue, 18 May 2021 00:35:55 +0900 Subject: [PATCH 005/129] add documentation for serverFetch --- documentation/docs/04-hooks.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/documentation/docs/04-hooks.md b/documentation/docs/04-hooks.md index cffd484a788a..91a8b1605575 100644 --- a/documentation/docs/04-hooks.md +++ b/documentation/docs/04-hooks.md @@ -85,3 +85,19 @@ export function getSession(request) { ``` > `session` must be serializable, which means it must not contain things like functions or custom classes, just built-in JavaScript data types + +### serverFetch + +This function provides possibilities to replace `fetch` on the server-side for the external API requests. It's beneficial if you want to retrieve resources differently from what it is doing on the browser. For example, if you want to change URL or headers for server-side only. + +```ts +type ServerFetch = (req: Request) => Promise; +``` + +```js +/** @type {import('@sveltejs/kit').ServerFetch} */ +export async function serverFetch(request) { + const data = await getDataMethod(request); + return data; +} +``` From e447ad7b901dc55530089a81e581b931fe90bd57 Mon Sep 17 00:00:00 2001 From: stalkerg Date: Thu, 20 May 2021 18:27:51 +0900 Subject: [PATCH 006/129] revert remove comment --- packages/kit/src/runtime/server/page/load_node.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/kit/src/runtime/server/page/load_node.js b/packages/kit/src/runtime/server/page/load_node.js index 94b011a1fb13..bdd5cd6e543a 100644 --- a/packages/kit/src/runtime/server/page/load_node.js +++ b/packages/kit/src/runtime/server/page/load_node.js @@ -98,6 +98,7 @@ export async function load_node({ let response; if (/^[a-zA-Z]+:/.test(url)) { + // external fetch const request = new Request(url, /** @type {RequestInit} */ (opts)); if (options.hooks.serverFetch) { response = await options.hooks.serverFetch.call(null, request); From bc93884781b1e86a2e627f4f2906bd3d906f10ee Mon Sep 17 00:00:00 2001 From: stalkerg Date: Thu, 20 May 2021 18:28:26 +0900 Subject: [PATCH 007/129] provide real life example --- documentation/docs/04-hooks.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/documentation/docs/04-hooks.md b/documentation/docs/04-hooks.md index 91a8b1605575..5c53c0654dd8 100644 --- a/documentation/docs/04-hooks.md +++ b/documentation/docs/04-hooks.md @@ -97,7 +97,14 @@ type ServerFetch = (req: Request) => Promise; ```js /** @type {import('@sveltejs/kit').ServerFetch} */ export async function serverFetch(request) { - const data = await getDataMethod(request); - return data; + let newRequest = request; + if (request.url.startsWith('https://my.site/api')) { + newRequest = new Request( + request.url.replace('https://my.site/api', 'http://localhost:9999/'), + request, + ); + } + + return fetch(newRequest); } ``` From d3e2abddf45bd0cc0a8f2629e1603f216625c99e Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Fri, 21 May 2021 10:52:48 +0530 Subject: [PATCH 008/129] Add favicon to skeleton template --- .../templates/skeleton/static/favicon.ico | Bin 0 -> 1150 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/create-svelte/templates/skeleton/static/favicon.ico diff --git a/packages/create-svelte/templates/skeleton/static/favicon.ico b/packages/create-svelte/templates/skeleton/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d75d248ef0b15096a95054643a4d97f5d9b60846 GIT binary patch literal 1150 zcmaKqSxA*Z7>4KMS_;~x;8i!JU{-`tpyx!I(n2NFMU)w2L{WiMS3#Lcp@vrpA*5Yp zSy6|`AkYfDD(e{`n8yX0pLf20X1@3RmKkGw`Vte3=0)aUq%ldx zm^49K+Hw0b#^`KboP)QXJOwbuVUFxlAs{RfqJ+twGylWfOp{Hc$s#253LlN1nsFVc zKa>40?h5(7PTC6ltDx)(Y&Ze2xggCq(kK? zTA`;gAfKD!+uFjpxc_A3+Ma(L28W=z4Gvs@r*ECk`;c45=S#;=oA|abt`f&j5&uJO z3Dn+&^gZ%h4JidsaTR{{!_Y8PUx(-%PosPy2gi@qIvBMMYz;e3L1{f~mrd9RdB>pZ zD}4R|sk_C`;=cT&r)c=8u>7h9)u32*SbL`xiq3(pq5C^5-sSOw;<|fv@nfXfl&U`2 z81K5ExDp;bf#DISW%IY%k&2-noShOoz-;kb(u?5RFX-ro?87j3GZdCXrFc8bTx}jd zz_n@djWnxc*TbbCjEq80FPyG}1zQwvjq7R6ZSWuQ@_#A*LN5n<3$BI?X}q%iD!B-s zdSFcNp!EgpJr6CAK?klug4>=)Tv z+F#{yt>6EK)3NU=L&y_W3UNaC?Tg=6YE0)^V;(0Mb0$WJ7>7@Lg0~+3x9d)!Pd Date: Fri, 21 May 2021 21:07:11 +0900 Subject: [PATCH 009/129] use fetch by default and change build state also --- packages/kit/src/core/build/index.js | 3 ++- packages/kit/src/core/dev/index.js | 2 +- packages/kit/src/runtime/server/page/load_node.js | 6 +----- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index 3137728009e7..c5f4c77a76f4 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -363,7 +363,8 @@ async function build_server( // named imports without triggering Rollup's missing import detection const get_hooks = hooks => ({ getSession: hooks.getSession || (() => ({})), - handle: hooks.handle || (({ request, render }) => render(request)) + handle: hooks.handle || (({ request, render }) => render(request)), + serverFetch: hooks.serverFetch || fetch }); const module_lookup = { diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index e682c7fe1d04..42936bec557a 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -188,7 +188,7 @@ class Watcher extends EventEmitter { hooks: { getSession: hooks.getSession || (() => ({})), handle: hooks.handle || (({ request, render }) => render(request)), - serverFetch: hooks.serverFetch + serverFetch: hooks.serverFetch || fetch }, hydrate: this.config.kit.hydrate, paths: this.config.kit.paths, diff --git a/packages/kit/src/runtime/server/page/load_node.js b/packages/kit/src/runtime/server/page/load_node.js index bdd5cd6e543a..17de3dcc1b84 100644 --- a/packages/kit/src/runtime/server/page/load_node.js +++ b/packages/kit/src/runtime/server/page/load_node.js @@ -100,11 +100,7 @@ export async function load_node({ if (/^[a-zA-Z]+:/.test(url)) { // external fetch const request = new Request(url, /** @type {RequestInit} */ (opts)); - if (options.hooks.serverFetch) { - response = await options.hooks.serverFetch.call(null, request); - } else { - response = await fetch(request); - } + response = await options.hooks.serverFetch.call(null, request); } else { const [path, search] = url.split('?'); From 7d2f668c0325a2b879e528c27dc3d62ea68ea471 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Sat, 22 May 2021 20:56:59 +0530 Subject: [PATCH 010/129] chore: Add changeset for favicon --- .changeset/hot-kings-confess.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/hot-kings-confess.md diff --git a/.changeset/hot-kings-confess.md b/.changeset/hot-kings-confess.md new file mode 100644 index 000000000000..c69552e75dec --- /dev/null +++ b/.changeset/hot-kings-confess.md @@ -0,0 +1,5 @@ +--- +'create-svelte': patch +--- + +Add favicon to skeleton template From 9dabbe0f21a9b3dab064fe2499219b8fa9ddb118 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Sat, 29 May 2021 18:17:25 +0530 Subject: [PATCH 011/129] Fix redirection issue #1583 --- packages/kit/src/runtime/client/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/runtime/client/router.js b/packages/kit/src/runtime/client/router.js index 45189ada92f6..9d3d9286c406 100644 --- a/packages/kit/src/runtime/client/router.js +++ b/packages/kit/src/runtime/client/router.js @@ -242,7 +242,7 @@ export class Router { if (incorrect) { info.path = has_trailing_slash ? info.path.slice(0, -1) : info.path + '/'; - history.replaceState({}, '', `${info.path}${location.search}`); + history.replaceState({}, '', `${this.base}${info.path}${location.search}`); } } From aa3cfbdd6a7469f02e6e7d6b604cbf88a4a31ea4 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Sat, 29 May 2021 18:51:01 +0530 Subject: [PATCH 012/129] Revert "Fix redirection issue #1583" This reverts commit 9dabbe0f21a9b3dab064fe2499219b8fa9ddb118. --- packages/kit/src/runtime/client/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/runtime/client/router.js b/packages/kit/src/runtime/client/router.js index 9d3d9286c406..45189ada92f6 100644 --- a/packages/kit/src/runtime/client/router.js +++ b/packages/kit/src/runtime/client/router.js @@ -242,7 +242,7 @@ export class Router { if (incorrect) { info.path = has_trailing_slash ? info.path.slice(0, -1) : info.path + '/'; - history.replaceState({}, '', `${this.base}${info.path}${location.search}`); + history.replaceState({}, '', `${info.path}${location.search}`); } } From 6aa4988491ba9080535ec19c2be244b6772d8c89 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 29 May 2021 16:47:14 -0400 Subject: [PATCH 013/129] Replace favicon (#1589) * replace favicon * changeset * compress --- .changeset/khaki-lions-sell.md | 5 +++++ .../create-svelte/templates/default/src/app.html | 2 +- .../templates/default/static/favicon.ico | Bin 1150 -> 0 bytes .../templates/default/static/favicon.png | Bin 0 -> 1571 bytes .../templates/skeleton/src/app.html | 2 +- .../templates/skeleton/static/favicon.ico | Bin 1150 -> 0 bytes .../templates/skeleton/static/favicon.png | Bin 0 -> 1571 bytes 7 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changeset/khaki-lions-sell.md delete mode 100644 packages/create-svelte/templates/default/static/favicon.ico create mode 100644 packages/create-svelte/templates/default/static/favicon.png delete mode 100644 packages/create-svelte/templates/skeleton/static/favicon.ico create mode 100644 packages/create-svelte/templates/skeleton/static/favicon.png diff --git a/.changeset/khaki-lions-sell.md b/.changeset/khaki-lions-sell.md new file mode 100644 index 000000000000..df0fa83cf2f7 --- /dev/null +++ b/.changeset/khaki-lions-sell.md @@ -0,0 +1,5 @@ +--- +'create-svelte': patch +--- + +Replace favicon diff --git a/packages/create-svelte/templates/default/src/app.html b/packages/create-svelte/templates/default/src/app.html index 83011ca64fb4..97f318d90764 100644 --- a/packages/create-svelte/templates/default/src/app.html +++ b/packages/create-svelte/templates/default/src/app.html @@ -2,7 +2,7 @@ - + %svelte.head% diff --git a/packages/create-svelte/templates/default/static/favicon.ico b/packages/create-svelte/templates/default/static/favicon.ico deleted file mode 100644 index d75d248ef0b15096a95054643a4d97f5d9b60846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmaKqSxA*Z7>4KMS_;~x;8i!JU{-`tpyx!I(n2NFMU)w2L{WiMS3#Lcp@vrpA*5Yp zSy6|`AkYfDD(e{`n8yX0pLf20X1@3RmKkGw`Vte3=0)aUq%ldx zm^49K+Hw0b#^`KboP)QXJOwbuVUFxlAs{RfqJ+twGylWfOp{Hc$s#253LlN1nsFVc zKa>40?h5(7PTC6ltDx)(Y&Ze2xggCq(kK? zTA`;gAfKD!+uFjpxc_A3+Ma(L28W=z4Gvs@r*ECk`;c45=S#;=oA|abt`f&j5&uJO z3Dn+&^gZ%h4JidsaTR{{!_Y8PUx(-%PosPy2gi@qIvBMMYz;e3L1{f~mrd9RdB>pZ zD}4R|sk_C`;=cT&r)c=8u>7h9)u32*SbL`xiq3(pq5C^5-sSOw;<|fv@nfXfl&U`2 z81K5ExDp;bf#DISW%IY%k&2-noShOoz-;kb(u?5RFX-ro?87j3GZdCXrFc8bTx}jd zz_n@djWnxc*TbbCjEq80FPyG}1zQwvjq7R6ZSWuQ@_#A*LN5n<3$BI?X}q%iD!B-s zdSFcNp!EgpJr6CAK?klug4>=)Tv z+F#{yt>6EK)3NU=L&y_W3UNaC?Tg=6YE0)^V;(0Mb0$WJ7>7@Lg0~+3x9d)!PdPx)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH - + %svelte.head% diff --git a/packages/create-svelte/templates/skeleton/static/favicon.ico b/packages/create-svelte/templates/skeleton/static/favicon.ico deleted file mode 100644 index d75d248ef0b15096a95054643a4d97f5d9b60846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmaKqSxA*Z7>4KMS_;~x;8i!JU{-`tpyx!I(n2NFMU)w2L{WiMS3#Lcp@vrpA*5Yp zSy6|`AkYfDD(e{`n8yX0pLf20X1@3RmKkGw`Vte3=0)aUq%ldx zm^49K+Hw0b#^`KboP)QXJOwbuVUFxlAs{RfqJ+twGylWfOp{Hc$s#253LlN1nsFVc zKa>40?h5(7PTC6ltDx)(Y&Ze2xggCq(kK? zTA`;gAfKD!+uFjpxc_A3+Ma(L28W=z4Gvs@r*ECk`;c45=S#;=oA|abt`f&j5&uJO z3Dn+&^gZ%h4JidsaTR{{!_Y8PUx(-%PosPy2gi@qIvBMMYz;e3L1{f~mrd9RdB>pZ zD}4R|sk_C`;=cT&r)c=8u>7h9)u32*SbL`xiq3(pq5C^5-sSOw;<|fv@nfXfl&U`2 z81K5ExDp;bf#DISW%IY%k&2-noShOoz-;kb(u?5RFX-ro?87j3GZdCXrFc8bTx}jd zz_n@djWnxc*TbbCjEq80FPyG}1zQwvjq7R6ZSWuQ@_#A*LN5n<3$BI?X}q%iD!B-s zdSFcNp!EgpJr6CAK?klug4>=)Tv z+F#{yt>6EK)3NU=L&y_W3UNaC?Tg=6YE0)^V;(0Mb0$WJ7>7@Lg0~+3x9d)!PdPx)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH Date: Sat, 29 May 2021 14:17:11 -0700 Subject: [PATCH 014/129] Rename `handle`'s `render` parameter to `resolve` (#1566) * Rename handle's render parameter to respond * Rename to resolve * Update 04-hooks.md remove reference to 'renderer', which is confusing now that we no longer use `render` Co-authored-by: Rich Harris --- .changeset/tender-buckets-turn.md | 5 +++++ documentation/docs/04-hooks.md | 10 +++++----- packages/create-svelte/templates/default/src/hooks.ts | 4 ++-- packages/kit/src/core/build/index.js | 2 +- packages/kit/src/core/dev/index.js | 2 +- packages/kit/src/runtime/server/index.js | 2 +- packages/kit/test/apps/basics/src/hooks.js | 4 ++-- packages/kit/types/hooks.d.ts | 2 +- 8 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 .changeset/tender-buckets-turn.md diff --git a/.changeset/tender-buckets-turn.md b/.changeset/tender-buckets-turn.md new file mode 100644 index 000000000000..6a97db02ecf9 --- /dev/null +++ b/.changeset/tender-buckets-turn.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Rename handle's render parameter to resolve diff --git a/documentation/docs/04-hooks.md b/documentation/docs/04-hooks.md index e8c9187ac482..397ad802c9ea 100644 --- a/documentation/docs/04-hooks.md +++ b/documentation/docs/04-hooks.md @@ -8,9 +8,9 @@ An optional `src/hooks.js` (or `src/hooks.ts`, or `src/hooks/index.js`) file exp ### handle -This function runs on every request, and determines the response. It receives the `request` object and `render` method, which calls SvelteKit's default renderer. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing endpoints programmatically, for example). +This function runs on every request, for both pages and endpoints, and determines the response. It receives the `request` object and a function called `resolve`, which invokes SvelteKit's router and generates a response accordingly. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing endpoints programmatically, for example). -If unimplemented, defaults to `({ request, render }) => render(request)`. +If unimplemented, defaults to `({ request, resolve }) => resolve(request)`. To add custom data to the request, which is passed to endpoints, populate the `request.locals` object, as shown below. @@ -37,16 +37,16 @@ type Response = { type Handle> = (input: { request: Request; - render: (request: Request) => Response | Promise; + resolve: (request: Request) => Response | Promise; }) => Response | Promise; ``` ```js /** @type {import('@sveltejs/kit').Handle} */ -export async function handle({ request, render }) { +export async function handle({ request, resolve }) { request.locals.user = await getUserInformation(request.headers.cookie); - const response = await render(request); + const response = await resolve(request); return { ...response, diff --git a/packages/create-svelte/templates/default/src/hooks.ts b/packages/create-svelte/templates/default/src/hooks.ts index 6fc783eb225d..df8b96c7a6d4 100644 --- a/packages/create-svelte/templates/default/src/hooks.ts +++ b/packages/create-svelte/templates/default/src/hooks.ts @@ -2,7 +2,7 @@ import cookie from 'cookie'; import { v4 as uuid } from '@lukeed/uuid'; import type { Handle } from '@sveltejs/kit'; -export const handle: Handle = async ({ request, render }) => { +export const handle: Handle = async ({ request, resolve }) => { const cookies = cookie.parse(request.headers.cookie || ''); request.locals.userid = cookies.userid || uuid(); @@ -11,7 +11,7 @@ export const handle: Handle = async ({ request, render }) => { request.method = request.query.get('_method').toUpperCase(); } - const response = await render(request); + const response = await resolve(request); if (!cookies.userid) { // if this is the first time the user has visited this app, diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index 3137728009e7..d4495ba213ed 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -363,7 +363,7 @@ async function build_server( // named imports without triggering Rollup's missing import detection const get_hooks = hooks => ({ getSession: hooks.getSession || (() => ({})), - handle: hooks.handle || (({ request, render }) => render(request)) + handle: hooks.handle || (({ request, resolve }) => resolve(request)) }); const module_lookup = { diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 9885b30d0e7c..3e69600b1922 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -194,7 +194,7 @@ class Watcher extends EventEmitter { }, hooks: { getSession: hooks.getSession || (() => ({})), - handle: hooks.handle || (({ request, render }) => render(request)) + handle: hooks.handle || (({ request, resolve }) => resolve(request)) }, hydrate: this.config.kit.hydrate, paths: this.config.kit.paths, diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index 4acc8179dbbc..b30642f757c7 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -41,7 +41,7 @@ export async function respond(incoming, options, state = {}) { params: null, locals: {} }, - render: async (request) => { + resolve: async (request) => { if (state.prerender && state.prerender.fallback) { return await render_response({ options, diff --git a/packages/kit/test/apps/basics/src/hooks.js b/packages/kit/test/apps/basics/src/hooks.js index ca5af57cf86f..ecd194f0a4ad 100644 --- a/packages/kit/test/apps/basics/src/hooks.js +++ b/packages/kit/test/apps/basics/src/hooks.js @@ -6,13 +6,13 @@ export function getSession(request) { } /** @type {import('@sveltejs/kit').Handle} */ -export async function handle({ request, render }) { +export async function handle({ request, resolve }) { const cookies = cookie.parse(request.headers.cookie || ''); request.locals.answer = 42; request.locals.name = cookies.name; - const response = await render(request); + const response = await resolve(request); if (response) { return { diff --git a/packages/kit/types/hooks.d.ts b/packages/kit/types/hooks.d.ts index 5e3875492611..fc5e42baf94e 100644 --- a/packages/kit/types/hooks.d.ts +++ b/packages/kit/types/hooks.d.ts @@ -29,5 +29,5 @@ export type GetSession, Session = any> = { export type Handle> = (input: { request: ServerRequest; - render: (request: ServerRequest) => ServerResponse | Promise; + resolve: (request: ServerRequest) => ServerResponse | Promise; }) => ServerResponse | Promise; From b0e62960441d0138704adf8761e5b641a111b728 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 29 May 2021 14:29:43 -0700 Subject: [PATCH 015/129] Version Packages (next) (#1590) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 3 +++ packages/create-svelte/CHANGELOG.md | 7 +++++++ packages/create-svelte/package.json | 2 +- packages/kit/CHANGELOG.md | 6 ++++++ packages/kit/package.json | 2 +- 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index edb22713568c..d7e08c921d0c 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -114,11 +114,13 @@ "heavy-lamps-explode", "heavy-papayas-smile", "hot-keys-walk", + "hot-kings-confess", "hungry-lemons-scream", "itchy-beers-burn", "itchy-birds-admire", "itchy-lobsters-tie", "khaki-ears-repeat", + "khaki-lions-sell", "khaki-socks-tan", "khaki-wolves-shout", "kind-steaks-bake", @@ -263,6 +265,7 @@ "tasty-donkeys-wait", "ten-mice-kneel", "ten-plants-sleep", + "tender-buckets-turn", "thick-meals-attend", "thin-avocados-visit", "thin-coins-move", diff --git a/packages/create-svelte/CHANGELOG.md b/packages/create-svelte/CHANGELOG.md index ee7660dbb128..6b3ae823fc3a 100644 --- a/packages/create-svelte/CHANGELOG.md +++ b/packages/create-svelte/CHANGELOG.md @@ -1,5 +1,12 @@ # create-svelte +## 2.0.0-next.73 + +### Patch Changes + +- 2d2fab1: Add favicon to skeleton template +- 6aa4988: Replace favicon + ## 2.0.0-next.72 ### Patch Changes diff --git a/packages/create-svelte/package.json b/packages/create-svelte/package.json index 99637eb4eddf..7838b462e7d2 100644 --- a/packages/create-svelte/package.json +++ b/packages/create-svelte/package.json @@ -1,6 +1,6 @@ { "name": "create-svelte", - "version": "2.0.0-next.72", + "version": "2.0.0-next.73", "bin": "./bin.js", "dependencies": { "kleur": "^4.1.4", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 063c34f6e4bc..ae5316fa4a24 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/kit +## 1.0.0-next.111 + +### Patch Changes + +- eae1b1d: Rename handle's render parameter to resolve + ## 1.0.0-next.110 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 8ca817ed096c..c98bd817a9a2 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.110", + "version": "1.0.0-next.111", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", From 1bb44caa213c0fa0ea44b4954191ebc351a49f62 Mon Sep 17 00:00:00 2001 From: pz-mxu <66033561+pz-mxu@users.noreply.github.com> Date: Sun, 30 May 2021 00:13:11 +0200 Subject: [PATCH 016/129] fix: append trailing slash in manifest (#1507) * fix: normalize trailing slash in prerender (#1486) * this is a camelCase-free zone, except for public APIs Co-authored-by: Rich Harris --- packages/kit/src/core/adapt/prerender.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/kit/src/core/adapt/prerender.js b/packages/kit/src/core/adapt/prerender.js index 831cb64b0ae2..7ac25c4c215d 100644 --- a/packages/kit/src/core/adapt/prerender.js +++ b/packages/kit/src/core/adapt/prerender.js @@ -90,11 +90,26 @@ export async function prerender({ cwd, out, log, config, build_data, fallback, a } }); + /** + * @param {string} path + */ + function normalize(path) { + if (config.kit.trailingSlash === 'always') { + return path.endsWith('/') ? path : `${path}/`; + } else if (config.kit.trailingSlash === 'never') { + return !path.endsWith('/') || path === '/' ? path : path.slice(0, -1); + } + + return path; + } + /** * @param {string} path * @param {string} parent */ async function visit(path, parent) { + path = normalize(path); + if (seen.has(path)) return; seen.add(path); From cbe029e96646f41d037e9e8d6f8240beedf57a2e Mon Sep 17 00:00:00 2001 From: thislooksfun Date: Sat, 29 May 2021 22:11:53 -0500 Subject: [PATCH 017/129] fix: ignore 'content-type' header capitalization (#1463) Fixes #1463 --- .changeset/pretty-cycles-learn.md | 5 ++++ .../src/runtime/server/parse_body/index.js | 4 ++- .../server/parse_body/parse_body.spec.js | 30 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 .changeset/pretty-cycles-learn.md create mode 100644 packages/kit/src/runtime/server/parse_body/parse_body.spec.js diff --git a/.changeset/pretty-cycles-learn.md b/.changeset/pretty-cycles-learn.md new file mode 100644 index 000000000000..79c7df4ebc2c --- /dev/null +++ b/.changeset/pretty-cycles-learn.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Allow non-lowercase 'content-type' header in ssr fetch requests diff --git a/packages/kit/src/runtime/server/parse_body/index.js b/packages/kit/src/runtime/server/parse_body/index.js index 85265de20989..525ee142a1a3 100644 --- a/packages/kit/src/runtime/server/parse_body/index.js +++ b/packages/kit/src/runtime/server/parse_body/index.js @@ -1,3 +1,4 @@ +import { lowercase_keys } from '../utils.js'; import { read_only_form_data } from './read_only_form_data.js'; /** @param {import('types/hooks').Incoming} req */ @@ -5,7 +6,8 @@ export function parse_body(req) { const raw = req.rawBody; if (!raw) return raw; - const [type, ...directives] = req.headers['content-type'].split(/;\s*/); + const headers = lowercase_keys(req.headers); + const [type, ...directives] = headers['content-type'].split(/;\s*/); if (typeof raw === 'string') { switch (type) { diff --git a/packages/kit/src/runtime/server/parse_body/parse_body.spec.js b/packages/kit/src/runtime/server/parse_body/parse_body.spec.js new file mode 100644 index 000000000000..71d5f161d1c3 --- /dev/null +++ b/packages/kit/src/runtime/server/parse_body/parse_body.spec.js @@ -0,0 +1,30 @@ +import { test } from 'uvu'; +import * as assert from 'uvu/assert'; +import { parse_body } from './index.js'; + +/** + * @param {import('types/helper').Headers} headers + * @return {import('types/hooks').Incoming} + */ +function buildRequest(headers) { + return { + host: 'localhost', + path: '/', + query: new URLSearchParams(), + method: 'GET', + rawBody: JSON.stringify('the body'), + headers + }; +} + +test('parses a body with a lowercase content-type', () => { + const req = buildRequest({ 'content-type': 'application/json' }); + assert.equal(parse_body(req), 'the body'); +}); + +test('parses a body with a non-lowercase content-type', () => { + const req = buildRequest({ 'Content-Type': 'application/json' }); + assert.equal(parse_body(req), 'the body'); +}); + +test.run(); From db36b7e7a124d050b914a5c247ccce20a253bfc0 Mon Sep 17 00:00:00 2001 From: thislooksfun Date: Sun, 30 May 2021 14:51:54 -0500 Subject: [PATCH 018/129] chore: update the PR template (#1601) The old template doesn't remind you to run `pnpm check`, but it is run by the CI pipeline and can thus cause avoidable pr check failures. --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9967a33bbc16..e1aa1dab94f1 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,7 +4,7 @@ - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests -- [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` +- [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpx changeset` and following the prompts From 0cc73ed825874c8b79414d8de7159b72409c390d Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 31 May 2021 02:21:22 +0530 Subject: [PATCH 019/129] Move custom-extensions test into options test app (#1595) --- .../test/apps/custom-extension/src/app.html | 11 -------- .../custom-extension/src/routes/_tests.js | 24 ---------------- .../apps/custom-extension/src/routes/a.svelte | 1 - .../src/routes/const.whokilledthemuffinman | 1 - .../src/routes/unsafe-replacement.svelte | 1 - .../apps/custom-extension/svelte.config.js | 6 ---- .../pages/custom-extensions}/[slug].svelte.md | 2 +- .../pages/custom-extensions}/__layout.svelte | 0 .../source/pages/custom-extensions/_tests.js | 28 +++++++++++++++++++ .../source/pages/custom-extensions/a.svelte | 1 + .../const.whokilledthemuffinman | 1 + .../index.jesuslivesineveryone | 4 +-- .../unsafe-replacement.svelte | 1 + .../kit/test/apps/options/svelte.config.js | 1 + 14 files changed, 35 insertions(+), 47 deletions(-) delete mode 100644 packages/kit/test/apps/custom-extension/src/app.html delete mode 100644 packages/kit/test/apps/custom-extension/src/routes/_tests.js delete mode 100644 packages/kit/test/apps/custom-extension/src/routes/a.svelte delete mode 100644 packages/kit/test/apps/custom-extension/src/routes/const.whokilledthemuffinman delete mode 100644 packages/kit/test/apps/custom-extension/src/routes/unsafe-replacement.svelte delete mode 100644 packages/kit/test/apps/custom-extension/svelte.config.js rename packages/kit/test/apps/{custom-extension/src/routes => options/source/pages/custom-extensions}/[slug].svelte.md (54%) rename packages/kit/test/apps/{custom-extension/src/routes => options/source/pages/custom-extensions}/__layout.svelte (100%) create mode 100644 packages/kit/test/apps/options/source/pages/custom-extensions/_tests.js create mode 100644 packages/kit/test/apps/options/source/pages/custom-extensions/a.svelte create mode 100644 packages/kit/test/apps/options/source/pages/custom-extensions/const.whokilledthemuffinman rename packages/kit/test/apps/{custom-extension/src/routes => options/source/pages/custom-extensions}/index.jesuslivesineveryone (69%) create mode 100644 packages/kit/test/apps/options/source/pages/custom-extensions/unsafe-replacement.svelte diff --git a/packages/kit/test/apps/custom-extension/src/app.html b/packages/kit/test/apps/custom-extension/src/app.html deleted file mode 100644 index 11ff812a1abc..000000000000 --- a/packages/kit/test/apps/custom-extension/src/app.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - %svelte.head% - - - %svelte.body% - - diff --git a/packages/kit/test/apps/custom-extension/src/routes/_tests.js b/packages/kit/test/apps/custom-extension/src/routes/_tests.js deleted file mode 100644 index da0221d2f213..000000000000 --- a/packages/kit/test/apps/custom-extension/src/routes/_tests.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as assert from 'uvu/assert'; - -/** @type {import('test').TestMaker} */ -export default function (test) { - test('works with arbitrary extensions', '/', async ({ page }) => { - assert.equal(await page.textContent('h1'), 'Great success!'); - }); - - test('works with other arbitrary extensions', '/const', async ({ base, page }) => { - assert.equal(await page.textContent('h1'), 'Tremendous!'); - - await page.goto(`${base}/a`); - - assert.equal(await page.textContent('h1'), 'a'); - - await page.goto(`${base}/test-slug`); - - assert.equal(await page.textContent('h1'), 'TEST-SLUG'); - - await page.goto(`${base}/unsafe-replacement`); - - assert.equal(await page.textContent('h1'), 'Bazooom!'); - }); -} diff --git a/packages/kit/test/apps/custom-extension/src/routes/a.svelte b/packages/kit/test/apps/custom-extension/src/routes/a.svelte deleted file mode 100644 index 57f9d40797b8..000000000000 --- a/packages/kit/test/apps/custom-extension/src/routes/a.svelte +++ /dev/null @@ -1 +0,0 @@ -

a

diff --git a/packages/kit/test/apps/custom-extension/src/routes/const.whokilledthemuffinman b/packages/kit/test/apps/custom-extension/src/routes/const.whokilledthemuffinman deleted file mode 100644 index d7a737bbedfb..000000000000 --- a/packages/kit/test/apps/custom-extension/src/routes/const.whokilledthemuffinman +++ /dev/null @@ -1 +0,0 @@ -

Tremendous!

diff --git a/packages/kit/test/apps/custom-extension/src/routes/unsafe-replacement.svelte b/packages/kit/test/apps/custom-extension/src/routes/unsafe-replacement.svelte deleted file mode 100644 index 7e87158f4720..000000000000 --- a/packages/kit/test/apps/custom-extension/src/routes/unsafe-replacement.svelte +++ /dev/null @@ -1 +0,0 @@ -

Bazooom!

diff --git a/packages/kit/test/apps/custom-extension/svelte.config.js b/packages/kit/test/apps/custom-extension/svelte.config.js deleted file mode 100644 index 02b844782a30..000000000000 --- a/packages/kit/test/apps/custom-extension/svelte.config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('@sveltejs/kit').Config} */ -const config = { - extensions: ['.jesuslivesineveryone', '.whokilledthemuffinman', '.svelte.md', '.svelte'] -}; - -export default config; diff --git a/packages/kit/test/apps/custom-extension/src/routes/[slug].svelte.md b/packages/kit/test/apps/options/source/pages/custom-extensions/[slug].svelte.md similarity index 54% rename from packages/kit/test/apps/custom-extension/src/routes/[slug].svelte.md rename to packages/kit/test/apps/options/source/pages/custom-extensions/[slug].svelte.md index d8387cfd55b8..31caa519d76a 100644 --- a/packages/kit/test/apps/custom-extension/src/routes/[slug].svelte.md +++ b/packages/kit/test/apps/options/source/pages/custom-extensions/[slug].svelte.md @@ -1,3 +1,3 @@ -

{$page.params.slug.toUpperCase()}

+

{$page.params.slug.toUpperCase()}

diff --git a/packages/kit/test/apps/custom-extension/src/routes/__layout.svelte b/packages/kit/test/apps/options/source/pages/custom-extensions/__layout.svelte similarity index 100% rename from packages/kit/test/apps/custom-extension/src/routes/__layout.svelte rename to packages/kit/test/apps/options/source/pages/custom-extensions/__layout.svelte diff --git a/packages/kit/test/apps/options/source/pages/custom-extensions/_tests.js b/packages/kit/test/apps/options/source/pages/custom-extensions/_tests.js new file mode 100644 index 000000000000..a784c2d6d4c7 --- /dev/null +++ b/packages/kit/test/apps/options/source/pages/custom-extensions/_tests.js @@ -0,0 +1,28 @@ +import * as assert from 'uvu/assert'; + +/** @type {import('test').TestMaker} */ +export default function (test) { + test('works with arbitrary extensions', '/custom-extensions/', async ({ page }) => { + assert.equal(await page.textContent('h2'), 'Great success!'); + }); + + test( + 'works with other arbitrary extensions', + '/custom-extensions/const', + async ({ base, page }) => { + assert.equal(await page.textContent('h2'), 'Tremendous!'); + + await page.goto(`${base}/custom-extensions/a`); + + assert.equal(await page.textContent('h2'), 'a'); + + await page.goto(`${base}/custom-extensions/test-slug`); + + assert.equal(await page.textContent('h2'), 'TEST-SLUG'); + + await page.goto(`${base}/custom-extensions/unsafe-replacement`); + + assert.equal(await page.textContent('h2'), 'Bazooom!'); + } + ); +} diff --git a/packages/kit/test/apps/options/source/pages/custom-extensions/a.svelte b/packages/kit/test/apps/options/source/pages/custom-extensions/a.svelte new file mode 100644 index 000000000000..d583cf898ad7 --- /dev/null +++ b/packages/kit/test/apps/options/source/pages/custom-extensions/a.svelte @@ -0,0 +1 @@ +

a

diff --git a/packages/kit/test/apps/options/source/pages/custom-extensions/const.whokilledthemuffinman b/packages/kit/test/apps/options/source/pages/custom-extensions/const.whokilledthemuffinman new file mode 100644 index 000000000000..8f986e9a8ab5 --- /dev/null +++ b/packages/kit/test/apps/options/source/pages/custom-extensions/const.whokilledthemuffinman @@ -0,0 +1 @@ +

Tremendous!

diff --git a/packages/kit/test/apps/custom-extension/src/routes/index.jesuslivesineveryone b/packages/kit/test/apps/options/source/pages/custom-extensions/index.jesuslivesineveryone similarity index 69% rename from packages/kit/test/apps/custom-extension/src/routes/index.jesuslivesineveryone rename to packages/kit/test/apps/options/source/pages/custom-extensions/index.jesuslivesineveryone index 0b43a120664c..95d5535103fb 100644 --- a/packages/kit/test/apps/custom-extension/src/routes/index.jesuslivesineveryone +++ b/packages/kit/test/apps/options/source/pages/custom-extensions/index.jesuslivesineveryone @@ -1,8 +1,8 @@ -

Great success!

+

Great success!

a ok ok ok -
\ No newline at end of file +
diff --git a/packages/kit/test/apps/options/source/pages/custom-extensions/unsafe-replacement.svelte b/packages/kit/test/apps/options/source/pages/custom-extensions/unsafe-replacement.svelte new file mode 100644 index 000000000000..3f548011494b --- /dev/null +++ b/packages/kit/test/apps/options/source/pages/custom-extensions/unsafe-replacement.svelte @@ -0,0 +1 @@ +

Bazooom!

diff --git a/packages/kit/test/apps/options/svelte.config.js b/packages/kit/test/apps/options/svelte.config.js index 3d191cff3de9..735bbcdf2460 100644 --- a/packages/kit/test/apps/options/svelte.config.js +++ b/packages/kit/test/apps/options/svelte.config.js @@ -1,5 +1,6 @@ /** @type {import('@sveltejs/kit').Config} */ const config = { + extensions: ['.jesuslivesineveryone', '.whokilledthemuffinman', '.svelte.md', '.svelte'], kit: { files: { assets: 'public', From babe515f9f5c816fd507920f1f16012263e7a71f Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 30 May 2021 17:15:42 -0400 Subject: [PATCH 020/129] only lowercase headers once --- packages/kit/src/runtime/server/index.js | 6 ++-- .../src/runtime/server/parse_body/index.js | 10 +++---- .../server/parse_body/parse_body.spec.js | 30 ------------------- 3 files changed, 9 insertions(+), 37 deletions(-) delete mode 100644 packages/kit/src/runtime/server/parse_body/parse_body.spec.js diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index b30642f757c7..e7b6e9601484 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -33,11 +33,13 @@ export async function respond(incoming, options, state = {}) { } try { + const headers = lowercase_keys(incoming.headers); + return await options.hooks.handle({ request: { ...incoming, - headers: lowercase_keys(incoming.headers), - body: parse_body(incoming), + headers, + body: parse_body(incoming.rawBody, headers), params: null, locals: {} }, diff --git a/packages/kit/src/runtime/server/parse_body/index.js b/packages/kit/src/runtime/server/parse_body/index.js index 525ee142a1a3..2ee7e1a97818 100644 --- a/packages/kit/src/runtime/server/parse_body/index.js +++ b/packages/kit/src/runtime/server/parse_body/index.js @@ -1,12 +1,12 @@ -import { lowercase_keys } from '../utils.js'; import { read_only_form_data } from './read_only_form_data.js'; -/** @param {import('types/hooks').Incoming} req */ -export function parse_body(req) { - const raw = req.rawBody; +/** + * @param {import('types/hooks').StrictBody} raw + * @param {import('types/helper').Headers} headers + */ +export function parse_body(raw, headers) { if (!raw) return raw; - const headers = lowercase_keys(req.headers); const [type, ...directives] = headers['content-type'].split(/;\s*/); if (typeof raw === 'string') { diff --git a/packages/kit/src/runtime/server/parse_body/parse_body.spec.js b/packages/kit/src/runtime/server/parse_body/parse_body.spec.js deleted file mode 100644 index 71d5f161d1c3..000000000000 --- a/packages/kit/src/runtime/server/parse_body/parse_body.spec.js +++ /dev/null @@ -1,30 +0,0 @@ -import { test } from 'uvu'; -import * as assert from 'uvu/assert'; -import { parse_body } from './index.js'; - -/** - * @param {import('types/helper').Headers} headers - * @return {import('types/hooks').Incoming} - */ -function buildRequest(headers) { - return { - host: 'localhost', - path: '/', - query: new URLSearchParams(), - method: 'GET', - rawBody: JSON.stringify('the body'), - headers - }; -} - -test('parses a body with a lowercase content-type', () => { - const req = buildRequest({ 'content-type': 'application/json' }); - assert.equal(parse_body(req), 'the body'); -}); - -test('parses a body with a non-lowercase content-type', () => { - const req = buildRequest({ 'Content-Type': 'application/json' }); - assert.equal(parse_body(req), 'the body'); -}); - -test.run(); From 6b186ae5b9ca04c7ed1f5b9a91c83126cbfc8b1e Mon Sep 17 00:00:00 2001 From: pngwn Date: Mon, 31 May 2021 03:23:38 +0100 Subject: [PATCH 021/129] docs: use level 3 headings (#1607) --- documentation/docs/12-packaging.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/docs/12-packaging.md b/documentation/docs/12-packaging.md index d9e33ecd5528..ed5858ede10b 100644 --- a/documentation/docs/12-packaging.md +++ b/documentation/docs/12-packaging.md @@ -25,7 +25,7 @@ import { Foo } from 'your-library'; import Foo from 'your-library/Foo.svelte'; ``` -## Publishing +### Publishing To publish the generated package: @@ -35,7 +35,7 @@ npm publish package If you configure a custom [`package.dir`](#configuration-package), change `package` accordingly. -## Caveats +### Caveats This is a relatively experimental feature and is not yet fully implemented: From 1bf1a0249caea73bbf09c2959616d09e9c2be73f Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Mon, 31 May 2021 11:20:13 +0200 Subject: [PATCH 022/129] Make it possible to type context and props for LoadInput and LoadOutput (#1447) - added generics for Context, Page Params and Props - added a helper type "MaybePromise" to not write T | Promise all the time - Make LoadInput/Output public Fixes #1442 --- .changeset/tricky-rockets-agree.md | 5 +++ packages/kit/types/endpoint.d.ts | 4 +- packages/kit/types/helper.d.ts | 9 ++++- packages/kit/types/hooks.d.ts | 8 ++-- packages/kit/types/index.d.ts | 2 +- packages/kit/types/page.d.ts | 59 ++++++++++++++++++++++++------ 6 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 .changeset/tricky-rockets-agree.md diff --git a/.changeset/tricky-rockets-agree.md b/.changeset/tricky-rockets-agree.md new file mode 100644 index 000000000000..583a23f68b7b --- /dev/null +++ b/.changeset/tricky-rockets-agree.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Make it possible to type context, page params and props for LoadInput and LoadOutput diff --git a/packages/kit/types/endpoint.d.ts b/packages/kit/types/endpoint.d.ts index 91ab6296a0f5..7eca51a34faf 100644 --- a/packages/kit/types/endpoint.d.ts +++ b/packages/kit/types/endpoint.d.ts @@ -1,5 +1,5 @@ import { ServerRequest } from './hooks'; -import { Headers } from './helper'; +import { Headers, MaybePromise } from './helper'; type JSONValue = | string @@ -18,4 +18,4 @@ export type EndpointOutput = { export type RequestHandler, Body = unknown> = ( request: ServerRequest -) => void | EndpointOutput | Promise; +) => void | MaybePromise; diff --git a/packages/kit/types/helper.d.ts b/packages/kit/types/helper.d.ts index 764dc7c9d6f5..5660a255763f 100644 --- a/packages/kit/types/helper.d.ts +++ b/packages/kit/types/helper.d.ts @@ -18,9 +18,14 @@ export type ParameterizedBody = Body extends FormData // but this can't happen until TypeScript 4.3 export type Headers = Record; -export type Location = { +export type Location = Record> = { host: string; path: string; - params: Record; + params: Params; query: URLSearchParams; }; + +export type MaybePromise = T | Promise; +export type InferValue = T extends Record + ? Val + : Default; diff --git a/packages/kit/types/hooks.d.ts b/packages/kit/types/hooks.d.ts index fc5e42baf94e..0966a8cce287 100644 --- a/packages/kit/types/hooks.d.ts +++ b/packages/kit/types/hooks.d.ts @@ -1,4 +1,4 @@ -import { Headers, Location, ParameterizedBody } from './helper'; +import { Headers, Location, MaybePromise, ParameterizedBody } from './helper'; export type StrictBody = string | Uint8Array; @@ -24,10 +24,10 @@ export type ServerResponse = { }; export type GetSession, Session = any> = { - (request: ServerRequest): Session | Promise; + (request: ServerRequest): MaybePromise; }; export type Handle> = (input: { request: ServerRequest; - resolve: (request: ServerRequest) => ServerResponse | Promise; -}) => ServerResponse | Promise; + resolve: (request: ServerRequest) => MaybePromise; +}) => MaybePromise; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index ff6d4d57ca94..2dbba49b0657 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -5,7 +5,7 @@ import './ambient-modules'; export { Adapter, AdapterUtils, Config, ValidatedConfig } from './config'; export { EndpointOutput, RequestHandler } from './endpoint'; -export { ErrorLoad, Load, Page } from './page'; +export { ErrorLoad, Load, Page, LoadInput, LoadOutput, ErrorLoadInput } from './page'; export { Incoming, GetSession, diff --git a/packages/kit/types/page.d.ts b/packages/kit/types/page.d.ts index 5b80353cb7c0..2b938b8e89e3 100644 --- a/packages/kit/types/page.d.ts +++ b/packages/kit/types/page.d.ts @@ -1,27 +1,64 @@ -import { Location as Page } from './helper'; +import { Location as Page, MaybePromise, InferValue } from './helper'; -export type LoadInput = { - page: Page; +export type LoadInput< + PageParams extends Record = Record, + Context extends Record = Record +> = { + page: Page; fetch: (info: RequestInfo, init?: RequestInit) => Promise; session: any; - context: Record; + context: Context; }; -export type ErrorLoadInput = LoadInput & { +export type ErrorLoadInput< + PageParams extends Record = Record, + Context extends Record = Record +> = LoadInput & { status: number; error: Error; }; -export type LoadOutput = { +export type LoadOutput< + Props extends Record = Record, + Context extends Record = Record +> = { status?: number; error?: string | Error; redirect?: string; - props?: Record | Promise>; - context?: Record; + props?: Props; + context?: Context; maxage?: number; }; -/* Publicized Types */ -export type Load = (input: LoadInput) => LoadOutput | Promise; -export type ErrorLoad = (input: ErrorLoadInput) => LoadOutput | Promise; +// Publicized Types +export type Load< + Input extends { context?: Record; pageParams?: Record } = {}, + Output extends { context?: Record; props?: Record } = {} +> = ( + input: LoadInput< + InferValue>, + InferValue> + > +) => MaybePromise< + LoadOutput< + InferValue>, + InferValue> + > +>; + +export type ErrorLoad< + Input extends { context?: Record; pageParams?: Record } = {}, + Output extends { context?: Record; props?: Record } = {} +> = ( + input: ErrorLoadInput< + InferValue>, + InferValue> + > +) => MaybePromise< + LoadOutput< + InferValue>, + InferValue> + > +>; + export { Page }; From fc19b6313f6e457d8fe78b251ca95d9ba3a1dcc2 Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Tue, 1 Jun 2021 00:46:16 +0700 Subject: [PATCH 023/129] types: allow void return in `LoadOutput` (#1617) - allow void return type in Load - handle asynchronous RequestHandler return type - deduplicate null in StrictBody --- packages/kit/src/core/node/index.js | 2 +- packages/kit/types/endpoint.d.ts | 2 +- packages/kit/types/hooks.d.ts | 6 +++--- packages/kit/types/page.d.ts | 10 ++++------ 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/kit/src/core/node/index.js b/packages/kit/src/core/node/index.js index 66f03aa53998..7f8e0a57012d 100644 --- a/packages/kit/src/core/node/index.js +++ b/packages/kit/src/core/node/index.js @@ -1,6 +1,6 @@ /** * @param {import('http').IncomingMessage} req - * @returns {Promise} + * @returns {Promise} */ export function getRawBody(req) { return new Promise((fulfil, reject) => { diff --git a/packages/kit/types/endpoint.d.ts b/packages/kit/types/endpoint.d.ts index 7eca51a34faf..9ec411497c70 100644 --- a/packages/kit/types/endpoint.d.ts +++ b/packages/kit/types/endpoint.d.ts @@ -18,4 +18,4 @@ export type EndpointOutput = { export type RequestHandler, Body = unknown> = ( request: ServerRequest -) => void | MaybePromise; +) => MaybePromise; diff --git a/packages/kit/types/hooks.d.ts b/packages/kit/types/hooks.d.ts index 0966a8cce287..a5dd2a57bc92 100644 --- a/packages/kit/types/hooks.d.ts +++ b/packages/kit/types/hooks.d.ts @@ -1,18 +1,18 @@ import { Headers, Location, MaybePromise, ParameterizedBody } from './helper'; -export type StrictBody = string | Uint8Array; +export type StrictBody = string | Uint8Array | null; export type Incoming = Omit & { method: string; headers: Headers; - rawBody: StrictBody | null; + rawBody: StrictBody; body?: ParameterizedBody; }; export type ServerRequest, Body = unknown> = Location & { method: string; headers: Headers; - rawBody: StrictBody | null; + rawBody: StrictBody; body: ParameterizedBody; locals: Locals; }; diff --git a/packages/kit/types/page.d.ts b/packages/kit/types/page.d.ts index 2b938b8e89e3..1e3331c7a02a 100644 --- a/packages/kit/types/page.d.ts +++ b/packages/kit/types/page.d.ts @@ -39,12 +39,10 @@ export type Load< InferValue>, InferValue> > -) => MaybePromise< - LoadOutput< - InferValue>, - InferValue> - > ->; +) => MaybePromise>, + InferValue> +>>; export type ErrorLoad< Input extends { context?: Record; pageParams?: Record } = {}, From 3b988a49f970fd3fddbf8ff9ba0dce7c6bad37f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Tue, 1 Jun 2021 18:07:40 +0200 Subject: [PATCH 024/129] Allow `_redirects` to be placed in root directory (#1586) --- .changeset/selfish-ligers-allow.md | 5 +++++ packages/adapter-netlify/index.js | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/selfish-ligers-allow.md diff --git a/.changeset/selfish-ligers-allow.md b/.changeset/selfish-ligers-allow.md new file mode 100644 index 000000000000..2493a8368adf --- /dev/null +++ b/.changeset/selfish-ligers-allow.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-netlify': patch +--- + +Allow `_redirects` to be placed in root directory diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index c5a9fb48cfa5..8beb2413a477 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -39,6 +39,7 @@ export default function () { utils.copy_client_files(publish); utils.log.minor('Writing redirects...'); + utils.copy('_redirects', `${publish}/_redirects`); appendFileSync(`${publish}/_redirects`, '\n\n/* /.netlify/functions/render 200'); } }; From 2636e68ffc5038568ebfa1a1fae7a55d98040e0f Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 1 Jun 2021 14:03:24 -0700 Subject: [PATCH 025/129] Attempt to fix peerDependencies specification (#1620) --- .changeset/lovely-mice-search.md | 10 ++++++++++ packages/adapter-begin/package.json | 2 +- packages/adapter-cloudflare-workers/package.json | 2 +- packages/adapter-netlify/package.json | 2 +- packages/adapter-node/package.json | 2 +- packages/adapter-static/package.json | 2 +- packages/adapter-vercel/package.json | 2 +- 7 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 .changeset/lovely-mice-search.md diff --git a/.changeset/lovely-mice-search.md b/.changeset/lovely-mice-search.md new file mode 100644 index 000000000000..fa6ad6df76f5 --- /dev/null +++ b/.changeset/lovely-mice-search.md @@ -0,0 +1,10 @@ +--- +'@sveltejs/adapter-begin': patch +'@sveltejs/adapter-cloudflare-workers': patch +'@sveltejs/adapter-netlify': patch +'@sveltejs/adapter-node': patch +'@sveltejs/adapter-static': patch +'@sveltejs/adapter-vercel': patch +--- + +Attempt to fix peerDependencies specification diff --git a/packages/adapter-begin/package.json b/packages/adapter-begin/package.json index f673302cc424..6becb3b4f66f 100644 --- a/packages/adapter-begin/package.json +++ b/packages/adapter-begin/package.json @@ -19,7 +19,7 @@ "@architect/parser": "^3.0.1" }, "peerDependencies": { - "@sveltejs/kit": "workspace:*" + "@sveltejs/kit": "workspace:^" }, "devDependencies": { "@sveltejs/kit": "workspace:*", diff --git a/packages/adapter-cloudflare-workers/package.json b/packages/adapter-cloudflare-workers/package.json index d2cdee4995f9..e7feb0bf35ee 100644 --- a/packages/adapter-cloudflare-workers/package.json +++ b/packages/adapter-cloudflare-workers/package.json @@ -24,6 +24,6 @@ "@sveltejs/kit": "workspace:*" }, "peerDependencies": { - "@sveltejs/kit": "workspace:*" + "@sveltejs/kit": "workspace:^" } } diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index e10521e2094a..fa093fc290bd 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -21,7 +21,7 @@ "@iarna/toml": "^2.2.5" }, "peerDependencies": { - "@sveltejs/kit": "workspace:*" + "@sveltejs/kit": "workspace:^" }, "devDependencies": { "@sveltejs/kit": "workspace:*", diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index f6f4f4c6948e..3eede1b8e5ee 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -33,6 +33,6 @@ "uvu": "^0.5.1" }, "peerDependencies": { - "@sveltejs/kit": "workspace:*" + "@sveltejs/kit": "workspace:^" } } diff --git a/packages/adapter-static/package.json b/packages/adapter-static/package.json index af4f0b25f86f..2fa65d7c5d29 100644 --- a/packages/adapter-static/package.json +++ b/packages/adapter-static/package.json @@ -15,7 +15,7 @@ "test": "uvu test test.js" }, "peerDependencies": { - "@sveltejs/kit": "workspace:*" + "@sveltejs/kit": "workspace:^" }, "devDependencies": { "@sveltejs/kit": "workspace:*", diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 5bbd6e4b70b4..a74581d90f4e 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -20,7 +20,7 @@ "esbuild": "^0.11.18" }, "peerDependencies": { - "@sveltejs/kit": "workspace:*" + "@sveltejs/kit": "workspace:^" }, "devDependencies": { "@sveltejs/kit": "workspace:*", From edc307ded8211ebc16e6e1311fdb3822b2470ad7 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 1 Jun 2021 14:28:06 -0700 Subject: [PATCH 026/129] Remove peerDependencies due to pnpm bug (#1621) --- .changeset/funny-terms-repair.md | 10 ++++++++++ packages/adapter-begin/package.json | 3 --- packages/adapter-cloudflare-workers/package.json | 3 --- packages/adapter-netlify/package.json | 3 --- packages/adapter-node/package.json | 3 --- packages/adapter-static/package.json | 3 --- packages/adapter-vercel/package.json | 3 --- 7 files changed, 10 insertions(+), 18 deletions(-) create mode 100644 .changeset/funny-terms-repair.md diff --git a/.changeset/funny-terms-repair.md b/.changeset/funny-terms-repair.md new file mode 100644 index 000000000000..5e3d3b946020 --- /dev/null +++ b/.changeset/funny-terms-repair.md @@ -0,0 +1,10 @@ +--- +'@sveltejs/adapter-begin': patch +'@sveltejs/adapter-cloudflare-workers': patch +'@sveltejs/adapter-netlify': patch +'@sveltejs/adapter-node': patch +'@sveltejs/adapter-static': patch +'@sveltejs/adapter-vercel': patch +--- + +Remove peerDependencies due to pnpm bug diff --git a/packages/adapter-begin/package.json b/packages/adapter-begin/package.json index 6becb3b4f66f..a643b7405e13 100644 --- a/packages/adapter-begin/package.json +++ b/packages/adapter-begin/package.json @@ -18,9 +18,6 @@ "dependencies": { "@architect/parser": "^3.0.1" }, - "peerDependencies": { - "@sveltejs/kit": "workspace:^" - }, "devDependencies": { "@sveltejs/kit": "workspace:*", "rollup": "^2.47.0", diff --git a/packages/adapter-cloudflare-workers/package.json b/packages/adapter-cloudflare-workers/package.json index e7feb0bf35ee..364acfedd1b1 100644 --- a/packages/adapter-cloudflare-workers/package.json +++ b/packages/adapter-cloudflare-workers/package.json @@ -22,8 +22,5 @@ }, "devDependencies": { "@sveltejs/kit": "workspace:*" - }, - "peerDependencies": { - "@sveltejs/kit": "workspace:^" } } diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index fa093fc290bd..730e0a906254 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -20,9 +20,6 @@ "esbuild": "^0.11.18", "@iarna/toml": "^2.2.5" }, - "peerDependencies": { - "@sveltejs/kit": "workspace:^" - }, "devDependencies": { "@sveltejs/kit": "workspace:*", "typescript": "^4.2.4" diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 3eede1b8e5ee..a502e02ce540 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -31,8 +31,5 @@ "sirv": "^1.0.12", "typescript": "^4.2.4", "uvu": "^0.5.1" - }, - "peerDependencies": { - "@sveltejs/kit": "workspace:^" } } diff --git a/packages/adapter-static/package.json b/packages/adapter-static/package.json index 2fa65d7c5d29..c146ca29ddb2 100644 --- a/packages/adapter-static/package.json +++ b/packages/adapter-static/package.json @@ -14,9 +14,6 @@ "check-format": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore", "test": "uvu test test.js" }, - "peerDependencies": { - "@sveltejs/kit": "workspace:^" - }, "devDependencies": { "@sveltejs/kit": "workspace:*", "playwright-chromium": "^1.10.0", diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index a74581d90f4e..1f08e6552cb2 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -19,9 +19,6 @@ "dependencies": { "esbuild": "^0.11.18" }, - "peerDependencies": { - "@sveltejs/kit": "workspace:^" - }, "devDependencies": { "@sveltejs/kit": "workspace:*", "typescript": "^4.2.4" From 0a6e3d6b7ed93ca60ec8fd3bbd15739cf3d9835e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Jun 2021 14:36:05 -0700 Subject: [PATCH 027/129] Version Packages (next) (#1603) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 5 +++++ packages/adapter-begin/CHANGELOG.md | 7 +++++++ packages/adapter-begin/package.json | 2 +- packages/adapter-cloudflare-workers/CHANGELOG.md | 7 +++++++ packages/adapter-cloudflare-workers/package.json | 2 +- packages/adapter-netlify/CHANGELOG.md | 8 ++++++++ packages/adapter-netlify/package.json | 2 +- packages/adapter-node/CHANGELOG.md | 7 +++++++ packages/adapter-node/package.json | 2 +- packages/adapter-static/CHANGELOG.md | 7 +++++++ packages/adapter-static/package.json | 2 +- packages/adapter-vercel/CHANGELOG.md | 7 +++++++ packages/adapter-vercel/package.json | 2 +- packages/kit/CHANGELOG.md | 7 +++++++ packages/kit/package.json | 2 +- 15 files changed, 62 insertions(+), 7 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index d7e08c921d0c..e8c3ea6de1e9 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -92,6 +92,7 @@ "four-pillows-give", "friendly-rivers-argue", "funny-needles-talk", + "funny-terms-repair", "fuzzy-cougars-compare", "fuzzy-ghosts-call", "fuzzy-jeans-join", @@ -144,6 +145,7 @@ "long-moles-fold", "loud-seals-remember", "lovely-apricots-fail", + "lovely-mice-search", "lucky-bottles-kick", "mean-bananas-live", "metal-nails-divide", @@ -189,6 +191,7 @@ "poor-terms-explain", "poor-years-hear", "popular-masks-cheat", + "pretty-cycles-learn", "pretty-drinks-cough", "pretty-foxes-attend", "pretty-kids-watch", @@ -212,6 +215,7 @@ "rude-olives-wink", "rude-tomatoes-thank", "selfish-avocados-develop", + "selfish-ligers-allow", "selfish-owls-own", "serious-books-push", "seven-bags-sniff", @@ -291,6 +295,7 @@ "tricky-avocados-smile", "tricky-bats-smoke", "tricky-buses-punch", + "tricky-rockets-agree", "tricky-walls-approve", "tricky-wolves-confess", "twelve-feet-deny", diff --git a/packages/adapter-begin/CHANGELOG.md b/packages/adapter-begin/CHANGELOG.md index dd0cf07a6495..a90a335d92b7 100644 --- a/packages/adapter-begin/CHANGELOG.md +++ b/packages/adapter-begin/CHANGELOG.md @@ -1,5 +1,12 @@ # @sveltejs/adapter-begin +## 1.0.0-next.11 + +### Patch Changes + +- edc307d: Remove peerDependencies due to pnpm bug +- 2636e68: Attempt to fix peerDependencies specification + ## 1.0.0-next.10 ### Patch Changes diff --git a/packages/adapter-begin/package.json b/packages/adapter-begin/package.json index a643b7405e13..1d68d0bb089d 100644 --- a/packages/adapter-begin/package.json +++ b/packages/adapter-begin/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-begin", - "version": "1.0.0-next.10", + "version": "1.0.0-next.11", "main": "index.cjs", "types": "index.d.ts", "scripts": { diff --git a/packages/adapter-cloudflare-workers/CHANGELOG.md b/packages/adapter-cloudflare-workers/CHANGELOG.md index 2e7def7898ed..bbd5a1a7594f 100644 --- a/packages/adapter-cloudflare-workers/CHANGELOG.md +++ b/packages/adapter-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # @sveltejs/adapter-cloudflare-workers +## 1.0.0-next.11 + +### Patch Changes + +- edc307d: Remove peerDependencies due to pnpm bug +- 2636e68: Attempt to fix peerDependencies specification + ## 1.0.0-next.10 ### Patch Changes diff --git a/packages/adapter-cloudflare-workers/package.json b/packages/adapter-cloudflare-workers/package.json index 364acfedd1b1..adc1f0e6bcfb 100644 --- a/packages/adapter-cloudflare-workers/package.json +++ b/packages/adapter-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-cloudflare-workers", - "version": "1.0.0-next.10", + "version": "1.0.0-next.11", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-netlify/CHANGELOG.md b/packages/adapter-netlify/CHANGELOG.md index 49363a61fc4c..19bfc5e2a046 100644 --- a/packages/adapter-netlify/CHANGELOG.md +++ b/packages/adapter-netlify/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/adapter-netlify +## 1.0.0-next.16 + +### Patch Changes + +- edc307d: Remove peerDependencies due to pnpm bug +- 2636e68: Attempt to fix peerDependencies specification +- 3b988a4: Allow `_redirects` to be placed in root directory + ## 1.0.0-next.15 ### Patch Changes diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 730e0a906254..826ed0bcd945 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-netlify", - "version": "1.0.0-next.15", + "version": "1.0.0-next.16", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index fb20d8234f68..8f3e753cb906 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @sveltejs/adapter-node +## 1.0.0-next.24 + +### Patch Changes + +- edc307d: Remove peerDependencies due to pnpm bug +- 2636e68: Attempt to fix peerDependencies specification + ## 1.0.0-next.23 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index a502e02ce540..47367355937e 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.23", + "version": "1.0.0-next.24", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-static/CHANGELOG.md b/packages/adapter-static/CHANGELOG.md index d5e5b4c705a9..78c12ba06c6b 100644 --- a/packages/adapter-static/CHANGELOG.md +++ b/packages/adapter-static/CHANGELOG.md @@ -1,5 +1,12 @@ # @sveltejs/adapter-static +## 1.0.0-next.13 + +### Patch Changes + +- edc307d: Remove peerDependencies due to pnpm bug +- 2636e68: Attempt to fix peerDependencies specification + ## 1.0.0-next.12 ### Patch Changes diff --git a/packages/adapter-static/package.json b/packages/adapter-static/package.json index c146ca29ddb2..f8da56b82ab8 100644 --- a/packages/adapter-static/package.json +++ b/packages/adapter-static/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-static", - "version": "1.0.0-next.12", + "version": "1.0.0-next.13", "type": "module", "main": "index.js", "exports": { diff --git a/packages/adapter-vercel/CHANGELOG.md b/packages/adapter-vercel/CHANGELOG.md index 583eae69c2a0..f25fb972bf99 100644 --- a/packages/adapter-vercel/CHANGELOG.md +++ b/packages/adapter-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # @sveltejs/adapter-vercel +## 1.0.0-next.21 + +### Patch Changes + +- edc307d: Remove peerDependencies due to pnpm bug +- 2636e68: Attempt to fix peerDependencies specification + ## 1.0.0-next.20 ### Patch Changes diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 1f08e6552cb2..7b864d8ab5d8 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-vercel", - "version": "1.0.0-next.20", + "version": "1.0.0-next.21", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index ae5316fa4a24..0c2ec9329a79 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,12 @@ # @sveltejs/kit +## 1.0.0-next.112 + +### Patch Changes + +- cbe029e: Allow non-lowercase 'content-type' header in ssr fetch requests +- 1bf1a02: Make it possible to type context, page params and props for LoadInput and LoadOutput + ## 1.0.0-next.111 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index c98bd817a9a2..49165ed46cc4 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.111", + "version": "1.0.0-next.112", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", From 9f6aa021a48dd2115315bddbbeed13079e4b3c0d Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 1 Jun 2021 15:45:23 -0700 Subject: [PATCH 028/129] Update FAQ about client-side libs --- documentation/faq/80-integrations.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/documentation/faq/80-integrations.md b/documentation/faq/80-integrations.md index bf158da126d3..e45e61084a79 100644 --- a/documentation/faq/80-integrations.md +++ b/documentation/faq/80-integrations.md @@ -30,18 +30,20 @@ if (browser) { } ``` -You can also run code in `onMount` if you'd like to run it after the component has been first rendered to the DOM: +You can also run code in `onMount` if you'd like to run it after the component has been first rendered to the DOM. In this case, you may still find a benefit of including a `browser` check as shown below because Vite may otherwise attempt to optimize the dependency and fail on it. [We hope to make this unnecessary in the future](https://github.com/sveltejs/svelte/issues/6372). ```html ``` From 045c45cdb1728af039d3ad854a8f749dbcd0172a Mon Sep 17 00:00:00 2001 From: Dominik G Date: Wed, 2 Jun 2021 14:47:31 +0200 Subject: [PATCH 029/129] update vite to 2.3.6 (#1625) --- .changeset/soft-students-cover.md | 5 +++++ packages/kit/package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 .changeset/soft-students-cover.md diff --git a/.changeset/soft-students-cover.md b/.changeset/soft-students-cover.md new file mode 100644 index 000000000000..522ad8fdf0fa --- /dev/null +++ b/.changeset/soft-students-cover.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +update vite to 2.3.6 diff --git a/packages/kit/package.json b/packages/kit/package.json index 49165ed46cc4..73eb95ff522a 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -6,7 +6,7 @@ "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", "cheap-watch": "^1.0.3", "sade": "^1.7.4", - "vite": "2.3.3" + "vite": "2.3.6" }, "devDependencies": { "@rollup/plugin-replace": "^2.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c3b81a3b828..08ea32c4c37e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -227,12 +227,12 @@ importers: tiny-glob: ^0.2.8 typescript: ^4.2.4 uvu: ^0.5.1 - vite: 2.3.3 + vite: 2.3.6 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_92cabc58848f43a8976d66b1396ccdc0 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_be4c24a5e2250521d961d7d752448683 cheap-watch: 1.0.3 sade: 1.7.4 - vite: 2.3.3 + vite: 2.3.6 devDependencies: '@rollup/plugin-replace': 2.4.2_rollup@2.47.0 '@types/amphtml-validator': 1.0.1 @@ -637,7 +637,7 @@ packages: rollup: 2.47.0 dev: false - /@sveltejs/vite-plugin-svelte/1.0.0-next.10_92cabc58848f43a8976d66b1396ccdc0: + /@sveltejs/vite-plugin-svelte/1.0.0-next.10_be4c24a5e2250521d961d7d752448683: resolution: {integrity: sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -653,7 +653,7 @@ packages: source-map: 0.7.3 svelte: 3.38.2 svelte-hmr: 0.14.3_svelte@3.38.2 - vite: 2.3.3 + vite: 2.3.6 transitivePeerDependencies: - rollup - supports-color @@ -1531,8 +1531,8 @@ packages: requiresBuild: true dev: false - /esbuild/0.11.23: - resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==} + /esbuild/0.12.5: + resolution: {integrity: sha512-vcuP53pA5XiwUU4FnlXM+2PnVjTfHGthM7uP1gtp+9yfheGvFFbq/KyuESThmtoHPUrfZH5JpxGVJIFDVD1Egw==} hasBin: true requiresBuild: true dev: false @@ -3740,12 +3740,12 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite/2.3.3: - resolution: {integrity: sha512-eO1iwRbn3/BfkNVMNJDeANAFCZ5NobYOFPu7IqfY7DcI7I9nFGjJIZid0EViTmLDGwwSUPmRAq3cRBbO3+DsMA==} + /vite/2.3.6: + resolution: {integrity: sha512-fsEpNKDHgh3Sn66JH06ZnUBnIgUVUtw6ucDhlOj1CEqxIkymU25yv1/kWDPlIjyYHnalr0cN6V+zzUJ+fmWHYw==} engines: {node: '>=12.0.0'} hasBin: true dependencies: - esbuild: 0.11.23 + esbuild: 0.12.5 postcss: 8.2.14 resolve: 1.20.0 rollup: 2.47.0 From c51ab7d226370cd8cac36f3d800e538b01bc3a3e Mon Sep 17 00:00:00 2001 From: Haishan Date: Wed, 2 Jun 2021 23:58:56 +0800 Subject: [PATCH 030/129] Upgrade adapters esbuild to latest (#1627) --- .changeset/bright-dolphins-try.md | 7 +++++++ .../adapter-cloudflare-workers/package.json | 4 ++-- packages/adapter-netlify/package.json | 4 ++-- packages/adapter-vercel/package.json | 2 +- pnpm-lock.yaml | 18 ++++++------------ 5 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 .changeset/bright-dolphins-try.md diff --git a/.changeset/bright-dolphins-try.md b/.changeset/bright-dolphins-try.md new file mode 100644 index 000000000000..4adc1ad8fc02 --- /dev/null +++ b/.changeset/bright-dolphins-try.md @@ -0,0 +1,7 @@ +--- +'@sveltejs/adapter-cloudflare-workers': patch +'@sveltejs/adapter-netlify': patch +'@sveltejs/adapter-vercel': patch +--- + +Upgrade esbuild to ^0.12.5 diff --git a/packages/adapter-cloudflare-workers/package.json b/packages/adapter-cloudflare-workers/package.json index adc1f0e6bcfb..3bdf2e2814db 100644 --- a/packages/adapter-cloudflare-workers/package.json +++ b/packages/adapter-cloudflare-workers/package.json @@ -17,8 +17,8 @@ "check-format": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore" }, "dependencies": { - "esbuild": "^0.11.18", - "@iarna/toml": "^2.2.5" + "@iarna/toml": "^2.2.5", + "esbuild": "^0.12.5" }, "devDependencies": { "@sveltejs/kit": "workspace:*" diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 826ed0bcd945..46f89a21cfc3 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -17,8 +17,8 @@ "check-format": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore" }, "dependencies": { - "esbuild": "^0.11.18", - "@iarna/toml": "^2.2.5" + "@iarna/toml": "^2.2.5", + "esbuild": "^0.12.5" }, "devDependencies": { "@sveltejs/kit": "workspace:*", diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 7b864d8ab5d8..a1f17d740bc2 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -17,7 +17,7 @@ "check-format": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore" }, "dependencies": { - "esbuild": "^0.11.18" + "esbuild": "^0.12.5" }, "devDependencies": { "@sveltejs/kit": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08ea32c4c37e..b60bb720ce05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,10 +69,10 @@ importers: specifiers: '@iarna/toml': ^2.2.5 '@sveltejs/kit': workspace:* - esbuild: ^0.11.18 + esbuild: ^0.12.5 dependencies: '@iarna/toml': 2.2.5 - esbuild: 0.11.18 + esbuild: 0.12.5 devDependencies: '@sveltejs/kit': link:../kit @@ -80,11 +80,11 @@ importers: specifiers: '@iarna/toml': ^2.2.5 '@sveltejs/kit': workspace:* - esbuild: ^0.11.18 + esbuild: ^0.12.5 typescript: ^4.2.4 dependencies: '@iarna/toml': 2.2.5 - esbuild: 0.11.18 + esbuild: 0.12.5 devDependencies: '@sveltejs/kit': link:../kit typescript: 4.2.4 @@ -130,10 +130,10 @@ importers: packages/adapter-vercel: specifiers: '@sveltejs/kit': workspace:* - esbuild: ^0.11.18 + esbuild: ^0.12.5 typescript: ^4.2.4 dependencies: - esbuild: 0.11.18 + esbuild: 0.12.5 devDependencies: '@sveltejs/kit': link:../kit typescript: 4.2.4 @@ -1525,12 +1525,6 @@ packages: is-symbol: 1.0.3 dev: true - /esbuild/0.11.18: - resolution: {integrity: sha512-KD7v4N9b5B8bxPUNn/3GA9r0HWo4nJk3iwjZ+2zG1ffg+r8ig+wqj7sW6zgI6Sn4/B2FnbzqWxcAokAGGM5zwQ==} - hasBin: true - requiresBuild: true - dev: false - /esbuild/0.12.5: resolution: {integrity: sha512-vcuP53pA5XiwUU4FnlXM+2PnVjTfHGthM7uP1gtp+9yfheGvFFbq/KyuESThmtoHPUrfZH5JpxGVJIFDVD1Egw==} hasBin: true From ecba0ead1db8812e5581be340f96802c12c719cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Jun 2021 09:37:43 -0700 Subject: [PATCH 031/129] Version Packages (next) (#1626) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 2 ++ packages/adapter-cloudflare-workers/CHANGELOG.md | 6 ++++++ packages/adapter-cloudflare-workers/package.json | 2 +- packages/adapter-netlify/CHANGELOG.md | 6 ++++++ packages/adapter-netlify/package.json | 2 +- packages/adapter-vercel/CHANGELOG.md | 6 ++++++ packages/adapter-vercel/package.json | 2 +- packages/kit/CHANGELOG.md | 6 ++++++ packages/kit/package.json | 2 +- 9 files changed, 30 insertions(+), 4 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index e8c3ea6de1e9..78c0de89f64e 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -37,6 +37,7 @@ "brave-turkeys-bathe", "breezy-sheep-dress", "bright-cherries-hug", + "bright-dolphins-try", "bright-sheep-promise", "brown-bugs-arrive", "brown-days-agree", @@ -248,6 +249,7 @@ "smooth-shoes-mix", "smooth-shrimps-fly", "soft-houses-pump", + "soft-students-cover", "spicy-geese-accept", "spicy-kings-perform", "spotty-dragons-wait", diff --git a/packages/adapter-cloudflare-workers/CHANGELOG.md b/packages/adapter-cloudflare-workers/CHANGELOG.md index bbd5a1a7594f..67aab6b14211 100644 --- a/packages/adapter-cloudflare-workers/CHANGELOG.md +++ b/packages/adapter-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-cloudflare-workers +## 1.0.0-next.12 + +### Patch Changes + +- c51ab7d: Upgrade esbuild to ^0.12.5 + ## 1.0.0-next.11 ### Patch Changes diff --git a/packages/adapter-cloudflare-workers/package.json b/packages/adapter-cloudflare-workers/package.json index 3bdf2e2814db..ffd40055d191 100644 --- a/packages/adapter-cloudflare-workers/package.json +++ b/packages/adapter-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-cloudflare-workers", - "version": "1.0.0-next.11", + "version": "1.0.0-next.12", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-netlify/CHANGELOG.md b/packages/adapter-netlify/CHANGELOG.md index 19bfc5e2a046..34abe987b393 100644 --- a/packages/adapter-netlify/CHANGELOG.md +++ b/packages/adapter-netlify/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-netlify +## 1.0.0-next.17 + +### Patch Changes + +- c51ab7d: Upgrade esbuild to ^0.12.5 + ## 1.0.0-next.16 ### Patch Changes diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 46f89a21cfc3..a4ba48850cd6 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-netlify", - "version": "1.0.0-next.16", + "version": "1.0.0-next.17", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-vercel/CHANGELOG.md b/packages/adapter-vercel/CHANGELOG.md index f25fb972bf99..2f69c65d65a1 100644 --- a/packages/adapter-vercel/CHANGELOG.md +++ b/packages/adapter-vercel/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-vercel +## 1.0.0-next.22 + +### Patch Changes + +- c51ab7d: Upgrade esbuild to ^0.12.5 + ## 1.0.0-next.21 ### Patch Changes diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index a1f17d740bc2..8244730899aa 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-vercel", - "version": "1.0.0-next.21", + "version": "1.0.0-next.22", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 0c2ec9329a79..278fd848fc2c 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/kit +## 1.0.0-next.113 + +### Patch Changes + +- 045c45c: update vite to 2.3.6 + ## 1.0.0-next.112 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 73eb95ff522a..25fd539e7c20 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.112", + "version": "1.0.0-next.113", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", From fbd5f8ace590cd68e1f511fb3852a3b5ecece211 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Thu, 3 Jun 2021 19:00:40 +0200 Subject: [PATCH 032/129] (feat) svelte package: transpile TS (#1633) This adds transpilation functionality for TypeScript files when using svelte-kit package. --- .changeset/twenty-dryers-hope.md | 5 ++ packages/kit/rollup.config.js | 3 +- packages/kit/src/core/make_package/index.js | 58 +++++++++++++++++++-- 3 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 .changeset/twenty-dryers-hope.md diff --git a/.changeset/twenty-dryers-hope.md b/.changeset/twenty-dryers-hope.md new file mode 100644 index 000000000000..bb00a7d7a851 --- /dev/null +++ b/.changeset/twenty-dryers-hope.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +package command can now transpile TypeScript files diff --git a/packages/kit/rollup.config.js b/packages/kit/rollup.config.js index 98094cfdb0fb..1247a69a479d 100644 --- a/packages/kit/rollup.config.js +++ b/packages/kit/rollup.config.js @@ -9,7 +9,8 @@ import pkg from './package.json'; const external = [].concat( Object.keys(pkg.dependencies || {}), Object.keys(pkg.peerDependencies || {}), - Object.keys(process.binding('natives')) + Object.keys(process.binding('natives')), + 'typescript' ); export default [ diff --git a/packages/kit/src/core/make_package/index.js b/packages/kit/src/core/make_package/index.js index c081bb5dd1f9..a5c4fbd2297f 100644 --- a/packages/kit/src/core/make_package/index.js +++ b/packages/kit/src/core/make_package/index.js @@ -63,9 +63,8 @@ export async function make_package(config, cwd = process.cwd()) { ? (await preprocess(source, config.preprocess, { filename })).code : source; } else if (ext === '.ts' && !file.endsWith('.d.ts')) { - // TODO transpile TS file and emit types - // also, we want to emit types from JSDoc annotations in .js files - throw new Error('svelte-kit package does not yet support TypeScript'); + out_file = file.slice(0, -'.ts'.length) + '.js'; + out_contents = await transpile_ts(filename, source); } else { out_file = file; out_contents = source; @@ -98,6 +97,59 @@ export async function make_package(config, cwd = process.cwd()) { } } +/** + * @param {string} filename + * @param {string} source + */ +async function transpile_ts(filename, source) { + const ts = await try_load_ts(); + return ts.transpileModule(source, { + compilerOptions: load_tsconfig(filename, ts), + fileName: filename + }).outputText; +} + +async function try_load_ts() { + try { + return (await import('typescript')).default; + } catch (e) { + throw new Error( + 'You need to install TypeScript if you want to transpile TypeScript files and/or generate type definitions' + ); + } +} + +/** + * @param {string} filename + * @param {import('typescript')} ts + */ +function load_tsconfig(filename, ts) { + const filedir = path.dirname(filename); + const tsconfig_filename = ts.findConfigFile(filedir, ts.sys.fileExists); + + if (!tsconfig_filename) { + throw new Error('Failed to locate tsconfig or jsconfig'); + } + + const { error, config } = ts.readConfigFile(tsconfig_filename, ts.sys.readFile); + + if (error) { + throw new Error('Malformed tsconfig'); + } + + // Do this so TS will not search for initial files which might take a while + config.include = []; + config.files = []; + const { options } = ts.parseJsonConfigFileContent( + config, + ts.sys, + path.dirname(tsconfig_filename), + { sourceMap: false }, + tsconfig_filename + ); + return options; +} + /** * @param {{ * include: string[]; From 5aa64ab5f7fb2a7e8b4c1a67891b565ae6d36699 Mon Sep 17 00:00:00 2001 From: Joe Busillo Date: Thu, 3 Jun 2021 12:44:12 -0500 Subject: [PATCH 033/129] #844 fix for SSL HMR websockets (#1517) Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/great-bugs-travel.md | 5 +++++ packages/kit/src/core/dev/index.js | 17 ++++++++++++++--- packages/kit/src/core/server/index.js | 18 ++++++------------ packages/kit/src/core/start/index.js | 6 +++++- packages/kit/test/types.d.ts | 2 +- 5 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 .changeset/great-bugs-travel.md diff --git a/.changeset/great-bugs-travel.md b/.changeset/great-bugs-travel.md new file mode 100644 index 000000000000..539965bc12de --- /dev/null +++ b/.changeset/great-bugs-travel.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: SSL for HMR websockets #844 diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 3e69600b1922..9f3a92c9e55e 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -79,6 +79,11 @@ class Watcher extends EventEmitter { /** @type {any} */ const user_config = (this.config.kit.vite && this.config.kit.vite()) || {}; + /** @type {(req: import("http").IncomingMessage, res: import("http").ServerResponse) => void} */ + let handler = (req, res) => {}; + + this.server = await get_server(this.https, user_config, (req, res) => handler(req, res)); + /** * @type {vite.ViteDevServer} */ @@ -104,7 +109,11 @@ class Watcher extends EventEmitter { publicDir: this.config.kit.files.assets, server: { ...user_config.server, - middlewareMode: true + middlewareMode: true, + hmr: { + ...(user_config.server && user_config.server.hmr), + ...(this.https ? { server: this.server, port: this.port } : {}) + } }, optimizeDeps: { ...user_config.optimizeDeps, @@ -131,7 +140,7 @@ class Watcher extends EventEmitter { } }; - this.server = await get_server(this.port, this.host, this.https, user_config, (req, res) => { + handler = (req, res) => { this.vite.middlewares(req, res, async () => { try { const parsed = parse(req.url); @@ -317,7 +326,9 @@ class Watcher extends EventEmitter { res.end(e.stack); } }); - }); + }; + + await this.server.listen(this.port, this.host || '0.0.0.0'); } update() { diff --git a/packages/kit/src/core/server/index.js b/packages/kit/src/core/server/index.js index 0a80eb2bdb0f..4463f840d673 100644 --- a/packages/kit/src/core/server/index.js +++ b/packages/kit/src/core/server/index.js @@ -2,14 +2,12 @@ import http from 'http'; import https from 'https'; /** * - * @param {number} port - * @param {string} host * @param {boolean} use_https * @param {any} user_config * @param {(req: http.IncomingMessage, res: http.ServerResponse) => void} handler - * @returns {Promise} + * @returns {Promise} */ -export async function get_server(port, host, use_https, user_config, handler) { +export async function get_server(use_https, user_config, handler) { /** @type {https.ServerOptions} */ const https_options = {}; @@ -27,13 +25,9 @@ export async function get_server(port, host, use_https, user_config, handler) { } } - return new Promise((fulfil) => { - const server = use_https + return Promise.resolve( + use_https ? https.createServer(/** @type {https.ServerOptions} */ (https_options), handler) - : http.createServer(handler); - - server.listen(port, host || '0.0.0.0', () => { - fulfil(server); - }); - }); + : http.createServer(handler) + ); } diff --git a/packages/kit/src/core/start/index.js b/packages/kit/src/core/start/index.js index e0682cdd8043..ff0c1d711a9e 100644 --- a/packages/kit/src/core/start/index.js +++ b/packages/kit/src/core/start/index.js @@ -48,7 +48,7 @@ export async function start({ port, host, config, https: use_https = false, cwd read: (file) => fs.readFileSync(join(config.kit.files.assets, file)) }); - return get_server(port, host, use_https, config.kit, (req, res) => { + const server = await get_server(use_https, config.kit, (req, res) => { const parsed = parse(req.url || ''); assets_handler(req, res, () => { @@ -83,4 +83,8 @@ export async function start({ port, host, config, https: use_https = false, cwd }); }); }); + + await server.listen(port, host || '0.0.0.0'); + + return Promise.resolve(server); } diff --git a/packages/kit/test/types.d.ts b/packages/kit/test/types.d.ts index f612487e9d2e..b4bdba40e239 100644 --- a/packages/kit/test/types.d.ts +++ b/packages/kit/test/types.d.ts @@ -31,7 +31,7 @@ export type TestContext = { }; watcher: any; // watcher type is not exposed - server: import('http').Server; + server: import('net').Server; reset: () => Promise; unpatch: () => void; }; From c4471a62fe943917987f6783400f05e46bd6e4aa Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 3 Jun 2021 21:02:51 -0700 Subject: [PATCH 034/129] Collect adapter version in GitHub template (#1624) --- .github/ISSUE_TEMPLATE.md | 4 ++-- .github/ISSUE_TEMPLATE/bug_report.md | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index cd90b26dc4eb..1bdb0deed847 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -18,9 +18,9 @@ change, please create an [RFC](https://github.com/sveltejs/rfcs). If you're filing an issue about a bug please include as much information as you can, including the following. -- The output of `npx envinfo --system --npmPackages svelte,@sveltejs/kit,vite --binaries --browsers` +- The output of `npx envinfo --system --npmPackages svelte,@sveltejs/kit,@sveltejs/adapter-node,@sveltejs/adapter-static,@sveltejs/adapter-begin,@sveltejs/adapter-netlify,@sveltejs/adapter-vercel vite --binaries --browsers` - Your browser -- Your adapter (e.g. Node, static, Vercel, Begin, etc...) +- If using a community adapter, the adapter and version - _Repeatable steps to reproduce the issue_ diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e372708b76ab..99118a738287 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -40,11 +40,9 @@ Stack trace goes here...
Diagnostics -- The output of `npx envinfo --system --npmPackages svelte,@sveltejs/kit,vite --binaries --browsers` - +- The output of `npx envinfo --system --npmPackages svelte,@sveltejs/kit,@sveltejs/adapter-node,@sveltejs/adapter-static,@sveltejs/adapter-begin,@sveltejs/adapter-netlify,@sveltejs/adapter-vercel vite --binaries --browsers` - Your browser - -- Your adapter (e.g. Node, static, Vercel, Begin, etc...) +- If using a community adapter, the adapter and version
**Severity** From 6cf6955c6585ed6ebb3a0422e613e8ffeb69370a Mon Sep 17 00:00:00 2001 From: Stephane Date: Fri, 4 Jun 2021 06:04:19 +0200 Subject: [PATCH 035/129] Clarify the use of svelte-kit preview and adapters (#1613) Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- documentation/docs/10-adapters.md | 2 +- documentation/docs/13-cli.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/documentation/docs/10-adapters.md b/documentation/docs/10-adapters.md index 6029b8e4db8f..96009a7ca050 100644 --- a/documentation/docs/10-adapters.md +++ b/documentation/docs/10-adapters.md @@ -2,7 +2,7 @@ title: Adapters --- -Before you can deploy your SvelteKit app, you need to _adapt_ it for your deployment target. Adapters are small plugins that take the built app as input and generate output that is optimised for a specific platform. +Before you can deploy your SvelteKit app, you need to _adapt_ it for your deployment target. Adapters are small plugins that take the built app as input and generate output for deployment. Many adapters are optimised for a specific hosting provider, and you can generally find information about deployment in your adapter's documentation. However, some adapters, like `adapter-static`, build output that can be hosted on numerous hosting providers, so it may also be helpful to reference the documentation of your hosting provider in these cases. For example, if you want to run your app as a simple Node server, you would use the `@sveltejs/adapter-node` package: diff --git a/documentation/docs/13-cli.md b/documentation/docs/13-cli.md index 4909bb1bc668..3f6f1d23b34e 100644 --- a/documentation/docs/13-cli.md +++ b/documentation/docs/13-cli.md @@ -25,9 +25,11 @@ Builds a production version of your app, and runs your adapter if you have one s - `--verbose` — log more detail +After building the app, you can reference the documentation of your chosen [adapter](#adapters) and hosting platform for specific instructions on how to serve your app. + ### svelte-kit preview -After you've built your app with `svelte-kit build`, you can start the production version (irrespective of any adapter that has been applied) locally with `svelte-kit preview`. This is intended for testing the production build locally, **not for serving your app**, for which you should always use an adapter. +After you've built your app with `svelte-kit build`, you can start the production version (irrespective of any adapter that has been applied) locally with `svelte-kit preview`. This is intended for testing the production build locally, **not for serving your app**, for which you should always use an [adapter](#adapters). Like `svelte-kit dev`, it accepts the following options: From fae75f1f03c2147c2bae4845c3a4440bb9ca6c6d Mon Sep 17 00:00:00 2001 From: lukasIO Date: Mon, 7 Jun 2021 05:41:22 +0200 Subject: [PATCH 036/129] Add initial location state to router (#1643) --- .changeset/happy-pumas-thank.md | 5 +++++ documentation/docs/05-modules.md | 2 +- packages/kit/src/runtime/client/router.js | 7 ++++--- 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 .changeset/happy-pumas-thank.md diff --git a/.changeset/happy-pumas-thank.md b/.changeset/happy-pumas-thank.md new file mode 100644 index 000000000000..dfa6285a11ea --- /dev/null +++ b/.changeset/happy-pumas-thank.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +add optional state parameter for goto function diff --git a/documentation/docs/05-modules.md b/documentation/docs/05-modules.md index 31da56aece12..25d8608c6b28 100644 --- a/documentation/docs/05-modules.md +++ b/documentation/docs/05-modules.md @@ -21,7 +21,7 @@ import { amp, browser, dev, prerendering } from '$app/env'; import { goto, invalidate, prefetch, prefetchRoutes } from '$app/navigation'; ``` -- `goto(href, { replaceState, noscroll })` returns a `Promise` that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `href`. The second argument is optional. If `replaceState` is true, a new history entry won't be created. If `noscroll` is true, the browser won't scroll to the top of the page after navigation. +- `goto(href, { replaceState, noscroll, state })` returns a `Promise` that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `href`. The second argument is optional. If `replaceState` is true, a new history entry won't be created. If `noscroll` is true, the browser won't scroll to the top of the page after navigation. If state is set, its value will be used to set the initital state of the new history entry, it defaults to `{}`. - `invalidate(href)` causes any `load` functions belonging to the currently active page to re-run if they `fetch` the resource in question. It returns a `Promise` that resolves when the page is subsequently updated. - `prefetch(href)` programmatically prefetches the given page, which means a) ensuring that the code for the page is loaded, and b) calling the page's `load` function with the appropriate options. This is the same behaviour that SvelteKit triggers when the user taps or mouses over an `` element with [sveltekit:prefetch](#anchor-options-sveltekit-prefetch). If the next navigation is to `href`, the values returned from `load` will be used, making navigation instantaneous. Returns a `Promise` that resolves when the prefetch is complete. - `prefetchRoutes(routes)` — programmatically prefetches the code for routes that haven't yet been fetched. Typically, you might call this to speed up subsequent navigation. If no argument is given, all routes will be fetched; otherwise, you can specify routes by any matching pathname such as `/about` (to match `src/routes/about.svelte`) or `/blog/*` (to match `src/routes/blog/[slug].svelte`). Unlike `prefetch`, this won't call `load` for individual pages. Returns a `Promise` that resolves when the routes have been prefetched. diff --git a/packages/kit/src/runtime/client/router.js b/packages/kit/src/runtime/client/router.js index 45189ada92f6..4f3594e176ba 100644 --- a/packages/kit/src/runtime/client/router.js +++ b/packages/kit/src/runtime/client/router.js @@ -135,6 +135,7 @@ export class Router { if (!this.owns(url)) return; const noscroll = a.hasAttribute('sveltekit:noscroll'); + history.pushState({}, '', url.href); this._navigate(url, noscroll ? scroll_state() : null, [], url.hash); event.preventDefault(); @@ -178,14 +179,14 @@ export class Router { /** * @param {string} href - * @param {{ noscroll?: boolean, replaceState?: boolean }} opts + * @param {{ noscroll?: boolean, replaceState?: boolean, state?: any }} opts * @param {string[]} chain */ - async goto(href, { noscroll = false, replaceState = false } = {}, chain) { + async goto(href, { noscroll = false, replaceState = false, state = {} } = {}, chain) { const url = new URL(href, get_base_uri(document)); if (this.enabled && this.owns(url)) { - history[replaceState ? 'replaceState' : 'pushState']({}, '', href); + history[replaceState ? 'replaceState' : 'pushState'](state, '', href); return this._navigate(url, noscroll ? scroll_state() : null, chain, url.hash); } From b1aa656205dc437d0760689b4288de53bb00a70e Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Tue, 8 Jun 2021 00:32:54 +0700 Subject: [PATCH 037/129] fix: match up ambient modules for goto (#1649) --- packages/kit/src/runtime/client/router.js | 6 ++++-- packages/kit/types/ambient-modules.d.ts | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/kit/src/runtime/client/router.js b/packages/kit/src/runtime/client/router.js index 4f3594e176ba..5cef18b494e6 100644 --- a/packages/kit/src/runtime/client/router.js +++ b/packages/kit/src/runtime/client/router.js @@ -178,8 +178,10 @@ export class Router { } /** - * @param {string} href - * @param {{ noscroll?: boolean, replaceState?: boolean, state?: any }} opts + * @typedef {Parameters} GotoParams + * + * @param {GotoParams[0]} href + * @param {GotoParams[1]} opts * @param {string[]} chain */ async goto(href, { noscroll = false, replaceState = false, state = {} } = {}, chain) { diff --git a/packages/kit/types/ambient-modules.d.ts b/packages/kit/types/ambient-modules.d.ts index 1683677b0408..ad2119153ee5 100644 --- a/packages/kit/types/ambient-modules.d.ts +++ b/packages/kit/types/ambient-modules.d.ts @@ -22,11 +22,11 @@ declare module '$app/navigation' { * Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified href. * * @param href Where to navigate to - * @param opts Optional. If `replaceState` is `true`, a new history entry won't be created. If `noscroll` is `true`, the browser won't scroll to the top of the page after navigation. + * @param opts Optional. If `replaceState` is `true`, a new history entry won't be created. If `noscroll` is `true`, the browser won't scroll to the top of the page after navigation. If state is set, its value will be used to set the initital state of the new history entry, it defaults to `{}` */ export function goto( href: string, - opts?: { replaceState?: boolean; noscroll?: boolean } + opts?: { replaceState?: boolean; noscroll?: boolean; state?: any } ): Promise; /** * Returns a Promise that resolves when SvelteKit re-runs any current `load` functions that depend on `href` From 0b780a61ef13996ac24be1aa74e5f70a447ca208 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 10 Jun 2021 09:12:26 -0400 Subject: [PATCH 038/129] Re-bundle server app in adapter-node (#1648) * prepare adapter-node runtime for bundling * add esbuild as dependency of adapter-node * bundle app as part of adapter-node's adapt phase * add changeset * add require() shim for requires not transformed by esbuild esbuild doesn't seem to transform require()s of Node builtins into imports, so define a global.require for them. --- .changeset/tiny-socks-sparkle.md | 5 +++++ packages/adapter-node/index.js | 17 ++++++++++++----- packages/adapter-node/package.json | 3 +++ packages/adapter-node/rollup.config.js | 4 ++-- packages/adapter-node/src/index.js | 7 ++++--- packages/adapter-node/src/require_shim.js | 2 ++ pnpm-lock.yaml | 3 +++ 7 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 .changeset/tiny-socks-sparkle.md create mode 100644 packages/adapter-node/src/require_shim.js diff --git a/.changeset/tiny-socks-sparkle.md b/.changeset/tiny-socks-sparkle.md new file mode 100644 index 000000000000..62f494d853b1 --- /dev/null +++ b/.changeset/tiny-socks-sparkle.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +Bundle server-side app during adapt phase diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 6b7192aa6136..9ac22d0b0eca 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -1,6 +1,7 @@ -import { copyFileSync } from 'fs'; +import { readFileSync } from 'fs'; import { join } from 'path'; import { fileURLToPath } from 'url'; +import esbuild from 'esbuild'; /** * @param {{ @@ -18,11 +19,17 @@ export default function ({ out = 'build' } = {}) { utils.copy_client_files(static_directory); utils.copy_static_files(static_directory); - utils.log.minor('Copying server'); - utils.copy_server_files(out); - + utils.log.minor('Building server'); const files = fileURLToPath(new URL('./files', import.meta.url)); - copyFileSync(`${files}/server.js`, `${out}/index.js`); + utils.copy(files, '.svelte-kit/node'); + await esbuild.build({ + entryPoints: ['.svelte-kit/node/index.js'], + outfile: join(out, 'index.js'), + bundle: true, + external: Object.keys(JSON.parse(readFileSync('package.json', 'utf8')).dependencies || {}), + format: 'esm', + platform: 'node' + }); utils.log.minor('Prerendering static pages'); await utils.prerender({ diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 47367355937e..ae47764b4d9f 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -20,6 +20,9 @@ "check-format": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore", "prepublishOnly": "npm run build" }, + "dependencies": { + "esbuild": "^0.12.5" + }, "devDependencies": { "@rollup/plugin-json": "^4.1.0", "@sveltejs/kit": "workspace:*", diff --git a/packages/adapter-node/rollup.config.js b/packages/adapter-node/rollup.config.js index dd33517bc2fc..f3e467c1f300 100644 --- a/packages/adapter-node/rollup.config.js +++ b/packages/adapter-node/rollup.config.js @@ -5,10 +5,10 @@ import json from '@rollup/plugin-json'; export default { input: 'src/index.js', output: { - file: 'files/server.js', + file: 'files/index.js', format: 'esm', sourcemap: true }, plugins: [nodeResolve(), commonjs(), json()], - external: ['./app.js', ...require('module').builtinModules] + external: ['../output/server/app.js', ...require('module').builtinModules] }; diff --git a/packages/adapter-node/src/index.js b/packages/adapter-node/src/index.js index 57f241238fc5..b678c3c978c3 100644 --- a/packages/adapter-node/src/index.js +++ b/packages/adapter-node/src/index.js @@ -1,10 +1,11 @@ +import './require_shim'; import { createServer } from './server'; -/*eslint import/no-unresolved: [2, { ignore: ['\.\/app\.js$'] }]*/ -import * as app from './app.js'; +// TODO hardcoding the relative location makes this brittle +import { render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved const { HOST = '0.0.0.0', PORT = 3000 } = process.env; -const instance = createServer({ render: app.render }).listen(PORT, HOST, () => { +const instance = createServer({ render }).listen(PORT, HOST, () => { console.log(`Listening on port ${PORT}`); }); diff --git a/packages/adapter-node/src/require_shim.js b/packages/adapter-node/src/require_shim.js new file mode 100644 index 000000000000..f335a1e3bde0 --- /dev/null +++ b/packages/adapter-node/src/require_shim.js @@ -0,0 +1,2 @@ +import { createRequire } from 'module'; +global.require = createRequire(import.meta.url); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b60bb720ce05..0e7a7226ca21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -95,12 +95,15 @@ importers: '@sveltejs/kit': workspace:* c8: ^7.7.2 compression: ^1.7.4 + esbuild: ^0.12.5 node-fetch: ^3.0.0-beta.9 polka: ^1.0.0-next.15 rollup: ^2.47.0 sirv: ^1.0.12 typescript: ^4.2.4 uvu: ^0.5.1 + dependencies: + esbuild: 0.12.5 devDependencies: '@rollup/plugin-json': 4.1.0_rollup@2.47.0 '@sveltejs/kit': link:../kit From b6763ccf057b5954e2a14568b7c3575456776f4b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Jun 2021 09:16:08 -0400 Subject: [PATCH 039/129] Version Packages (next) (#1635) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 4 ++++ packages/adapter-node/CHANGELOG.md | 6 ++++++ packages/adapter-node/package.json | 2 +- packages/kit/CHANGELOG.md | 8 ++++++++ packages/kit/package.json | 2 +- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 78c0de89f64e..bb48f7ef81d0 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -105,11 +105,13 @@ "gorgeous-radios-matter", "gorgeous-radios-tan", "gorgeous-taxis-smash", + "great-bugs-travel", "great-kangaroos-eat", "great-queens-rule", "green-spoons-count", "happy-dancers-call", "happy-nails-draw", + "happy-pumas-thank", "healthy-moons-attend", "healthy-pumpkins-bathe", "heavy-humans-check", @@ -290,6 +292,7 @@ "tiny-candles-repeat", "tiny-gorillas-whisper", "tiny-kids-sort", + "tiny-socks-sparkle", "tiny-starfishes-exist", "tough-chefs-remember", "tough-lamps-brake", @@ -303,6 +306,7 @@ "twelve-feet-deny", "twelve-goats-knock", "twelve-onions-burn", + "twenty-dryers-hope", "two-crabs-tease", "two-students-melt", "two-ties-begin", diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index 8f3e753cb906..910fe233c2f6 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-node +## 1.0.0-next.25 + +### Patch Changes + +- 0b780a6: Bundle server-side app during adapt phase + ## 1.0.0-next.24 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index ae47764b4d9f..37f63fbf941d 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.24", + "version": "1.0.0-next.25", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 278fd848fc2c..b34f34465963 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/kit +## 1.0.0-next.114 + +### Patch Changes + +- 5aa64ab: fix: SSL for HMR websockets #844 +- fae75f1: add optional state parameter for goto function +- fbd5f8a: package command can now transpile TypeScript files + ## 1.0.0-next.113 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 25fd539e7c20..a3000808f136 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.113", + "version": "1.0.0-next.114", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", From dc56d3cef4ec0aca3d074757c4a15d1f640c5c56 Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Fri, 11 Jun 2021 09:44:40 +0700 Subject: [PATCH 040/129] Fix navigation when `base` path is set and validate that option's value (#1666) Co-authored-by: Sidharth Vinod --- .changeset/soft-bikes-bake.md | 5 +++++ documentation/docs/14-configuration.md | 2 +- packages/kit/src/core/load_config/index.js | 6 ++++-- packages/kit/src/core/load_config/index.spec.js | 14 +++++++++++++- packages/kit/src/runtime/client/router.js | 2 +- 5 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 .changeset/soft-bikes-bake.md diff --git a/.changeset/soft-bikes-bake.md b/.changeset/soft-bikes-bake.md new file mode 100644 index 000000000000..aa06e7a6a307 --- /dev/null +++ b/.changeset/soft-bikes-bake.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Fix navigation when `base` path is set and validate that option's value diff --git a/documentation/docs/14-configuration.md b/documentation/docs/14-configuration.md index 87448b3a9142..598704a5d02b 100644 --- a/documentation/docs/14-configuration.md +++ b/documentation/docs/14-configuration.md @@ -116,7 +116,7 @@ Whether to [hydrate](#ssr-and-javascript-hydrate) the server-rendered HTML with An object containing zero or more of the following `string` values: - `assets` — an absolute path, or a path relative to `base`, where your app's files are served from. This is useful if your files are served from a storage bucket of some kind -- `base` — a root-relative (i.e. starts with `/`) path that specifies where your app is served from. This allows the app to live on a non-root path +- `base` — a root-relative path that must start, but not end with `/` (e.g. `/base-path`). This specifies where your app is served from and allows the app to live on a non-root path ### prerender diff --git a/packages/kit/src/core/load_config/index.js b/packages/kit/src/core/load_config/index.js index 767304d9de1a..7973a6fc8a3f 100644 --- a/packages/kit/src/core/load_config/index.js +++ b/packages/kit/src/core/load_config/index.js @@ -135,8 +135,10 @@ export function validate_config(config) { // resolve paths const { paths } = validated.kit; - if (paths.base !== '' && !paths.base.startsWith('/')) { - throw new Error('config.kit.paths.base must be a root-relative path'); + if (paths.base !== '' && (paths.base.endsWith('/') || !paths.base.startsWith('/'))) { + throw new Error( + "kit.paths.base option must be a root-relative path that starts but doesn't end with '/'. See https://kit.svelte.dev/docs#configuration-paths" + ); } paths.assets = resolve(paths.base, paths.assets); diff --git a/packages/kit/src/core/load_config/index.spec.js b/packages/kit/src/core/load_config/index.spec.js index d1138752f849..6f11b28d79c3 100644 --- a/packages/kit/src/core/load_config/index.spec.js +++ b/packages/kit/src/core/load_config/index.spec.js @@ -171,7 +171,19 @@ test('fails if paths.base is not root-relative', () => { } } }); - }, /^config\.kit\.paths\.base must be a root-relative path$/); + }, /^kit\.paths\.base option must be a root-relative path that starts but doesn't end with '\/'. See https:\/\/kit\.svelte\.dev\/docs#configuration-paths$/); +}); + +test("fails if paths.base ends with '/'", () => { + assert.throws(() => { + validate_config({ + kit: { + paths: { + base: '/github-pages/' + } + } + }); + }, /^kit\.paths\.base option must be a root-relative path that starts but doesn't end with '\/'. See https:\/\/kit\.svelte\.dev\/docs#configuration-paths$/); }); test('fails if prerender.pages are invalid', () => { diff --git a/packages/kit/src/runtime/client/router.js b/packages/kit/src/runtime/client/router.js index 5cef18b494e6..8dadc3defd42 100644 --- a/packages/kit/src/runtime/client/router.js +++ b/packages/kit/src/runtime/client/router.js @@ -245,7 +245,7 @@ export class Router { if (incorrect) { info.path = has_trailing_slash ? info.path.slice(0, -1) : info.path + '/'; - history.replaceState({}, '', `${info.path}${location.search}`); + history.replaceState({}, '', `${this.base}${info.path}${location.search}`); } } From 2f7578759c631ac944d3e6966f5ac0816894e970 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 10 Jun 2021 20:47:06 -0700 Subject: [PATCH 041/129] Update load documentation --- documentation/docs/03-loading.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/documentation/docs/03-loading.md b/documentation/docs/03-loading.md index 6b68e1578528..1b7c57d0ec10 100644 --- a/documentation/docs/03-loading.md +++ b/documentation/docs/03-loading.md @@ -59,6 +59,13 @@ type LoadOutput = { If `load` returns nothing, SvelteKit will [fall through](#routing-advanced-fallthrough-routes) to other routes until something responds, or will respond with a generic 404. > `load` only applies to components that define pages, not the components that they import. +> +> It is important to note that `load` may run on either the server or in the client browser. Code called inside `load` blocks: +> +> - should use the SvelteKit-provided [`fetch`](#loading-input-fetch) method for getting data in order to avoid duplicate network requests +> - should generally run on the same domain as any upstream API servers requiring credentials +> - should not reference `window`, `document`, or any browser-specific objects +> - should not reference any API keys or secrets directly, which will be exposed to the client, but instead call an endpoint using any required secrets ### Input @@ -91,12 +98,6 @@ So if the example above was `src/routes/blog/[slug].svelte` and the URL was `htt `context` is passed from layout components to child layouts and page components. For the root `__layout.svelte` component, it is equal to `{}`, but if that component's `load` function returns an object with a `context` property, it will be available to subsequent `load` functions. -> It is important to note that `load` may run on either the server or in the client browser. Code called inside `load` blocks: -> -> - should run on the same domain as any upstream API servers requiring credentials -> - should not reference `window`, `document` or any browser-specific objects -> - should not reference any API keys or secrets, which will be exposed to the client - ### Output If you return a Promise from `load`, SvelteKit will delay rendering until the promise resolves. The return value has several properties, all optional: From 523c3e2a8ec448d99b1d33687d93f3fd834f6236 Mon Sep 17 00:00:00 2001 From: Glen Huang Date: Fri, 11 Jun 2021 11:50:32 +0800 Subject: [PATCH 042/129] allow vite.alias to be an array (#1640) --- .changeset/long-hotels-hunt.md | 5 +++++ packages/kit/src/core/dev/index.js | 24 +++++++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 .changeset/long-hotels-hunt.md diff --git a/.changeset/long-hotels-hunt.md b/.changeset/long-hotels-hunt.md new file mode 100644 index 000000000000..afed95211d9e --- /dev/null +++ b/.changeset/long-hotels-hunt.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Allow vite.alias to be an array diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 9f3a92c9e55e..2cdd474857f4 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -84,6 +84,8 @@ class Watcher extends EventEmitter { this.server = await get_server(this.https, user_config, (req, res) => handler(req, res)); + const alias = user_config.resolve && user_config.resolve.alias; + /** * @type {vite.ViteDevServer} */ @@ -93,11 +95,23 @@ class Watcher extends EventEmitter { root: this.cwd, resolve: { ...user_config.resolve, - alias: { - ...(user_config.resolve && user_config.resolve.alias), - $app: path.resolve(`${this.dir}/runtime/app`), - $lib: this.config.kit.files.lib - } + alias: Array.isArray(alias) + ? [ + ...alias, + { + find: '$app', + replacement: path.resolve(`${this.dir}/runtime/app`) + }, + { + find: '$lib', + replacement: this.config.kit.files.lib + } + ] + : { + ...alias, + $app: path.resolve(`${this.dir}/runtime/app`), + $lib: this.config.kit.files.lib + } }, plugins: [ ...(user_config.plugins || []), From 6fd46d16dd1d2ea762eacba365fd331a98b09a5a Mon Sep 17 00:00:00 2001 From: Dominik G Date: Fri, 11 Jun 2021 16:01:28 +0200 Subject: [PATCH 043/129] Fix: update vite-plugin-svelte and vite (#1673) * fix: update vite-plugin-svelte to ^1.0.0-next.11 and use its named export * update vite to 2.3.7 * fix: run pnpm i to sync lockfile --- .changeset/shy-jeans-fly.md | 6 +++ packages/kit/package.json | 4 +- packages/kit/src/core/build/index.js | 2 +- packages/kit/src/core/dev/index.js | 2 +- pnpm-lock.yaml | 69 +++++++++++++--------------- 5 files changed, 42 insertions(+), 41 deletions(-) create mode 100644 .changeset/shy-jeans-fly.md diff --git a/.changeset/shy-jeans-fly.md b/.changeset/shy-jeans-fly.md new file mode 100644 index 000000000000..e939fb6d2f24 --- /dev/null +++ b/.changeset/shy-jeans-fly.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/kit': patch +--- + +* update vite-plugin-svelte to 1.0.0-next.11 and use its named export +* update vite to 2.3.7 diff --git a/packages/kit/package.json b/packages/kit/package.json index a3000808f136..424c49030a0b 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -3,10 +3,10 @@ "version": "1.0.0-next.114", "type": "module", "dependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", + "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", "cheap-watch": "^1.0.3", "sade": "^1.7.4", - "vite": "2.3.6" + "vite": "2.3.7" }, "devDependencies": { "@rollup/plugin-replace": "^2.4.2", diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index d4495ba213ed..e5c6f4c2ffd6 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -5,7 +5,7 @@ import create_manifest_data from '../../core/create_manifest_data/index.js'; import { copy_assets, get_no_external, posixify, resolve_entry } from '../utils.js'; import { create_app } from '../../core/create_app/index.js'; import vite from 'vite'; -import svelte from '@sveltejs/vite-plugin-svelte'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; import glob from 'tiny-glob/sync.js'; import { SVELTE_KIT } from '../constants.js'; diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 2cdd474857f4..7c1dc4953777 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -12,7 +12,7 @@ import { rimraf } from '../filesystem/index.js'; import { respond } from '../../runtime/server/index.js'; import { getRawBody } from '../node/index.js'; import { copy_assets, get_no_external, resolve_entry } from '../utils.js'; -import svelte from '@sveltejs/vite-plugin-svelte'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; import { get_server } from '../server/index.js'; import '../../install-fetch.js'; import { SVELTE_KIT } from '../constants.js'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0e7a7226ca21..693d088d4c12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,7 +200,7 @@ importers: packages/kit: specifiers: '@rollup/plugin-replace': ^2.4.2 - '@sveltejs/vite-plugin-svelte': ^1.0.0-next.10 + '@sveltejs/vite-plugin-svelte': ^1.0.0-next.11 '@types/amphtml-validator': ^1.0.1 '@types/cookie': ^0.4.0 '@types/globrex': ^0.1.0 @@ -230,12 +230,12 @@ importers: tiny-glob: ^0.2.8 typescript: ^4.2.4 uvu: ^0.5.1 - vite: 2.3.6 + vite: 2.3.7 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_be4c24a5e2250521d961d7d752448683 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.11_74e52d7dcd586025195c15edb3940938 cheap-watch: 1.0.3 sade: 1.7.4 - vite: 2.3.6 + vite: 2.3.7 devDependencies: '@rollup/plugin-replace': 2.4.2_rollup@2.47.0 '@types/amphtml-validator': 1.0.1 @@ -640,23 +640,20 @@ packages: rollup: 2.47.0 dev: false - /@sveltejs/vite-plugin-svelte/1.0.0-next.10_be4c24a5e2250521d961d7d752448683: - resolution: {integrity: sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==} - engines: {node: '>=12.0.0'} + /@sveltejs/vite-plugin-svelte/1.0.0-next.11_74e52d7dcd586025195c15edb3940938: + resolution: {integrity: sha512-EYR1I145k5rflVqhPwk3442m3bkYimTKSHM9uO5KdomXzt+GS9ZSBJQE3/wy1Di9V8OnGa3oKpckI3OZsHkTIA==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: - svelte: ^3.37.0 - vite: ^2.2.3 + svelte: ^3.38.2 + vite: ^2.3.7 dependencies: '@rollup/pluginutils': 4.1.0_rollup@2.47.0 chalk: 4.1.1 debug: 4.3.2 - hash-sum: 2.0.0 require-relative: 0.8.7 - slash: 4.0.0 - source-map: 0.7.3 svelte: 3.38.2 - svelte-hmr: 0.14.3_svelte@3.38.2 - vite: 2.3.6 + svelte-hmr: 0.14.4_svelte@3.38.2 + vite: 2.3.7 transitivePeerDependencies: - rollup - supports-color @@ -1534,6 +1531,12 @@ packages: requiresBuild: true dev: false + /esbuild/0.12.8: + resolution: {integrity: sha512-sx/LwlP/SWTGsd9G4RlOPrXnIihAJ2xwBUmzoqe2nWwbXORMQWtAGNJNYLBJJqa3e9PWvVzxdrtyFZJcr7D87g==} + hasBin: true + requiresBuild: true + dev: false + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -2022,10 +2025,6 @@ packages: dependencies: function-bind: 1.1.1 - /hash-sum/2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - dev: false - /hosted-git-info/2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -2533,8 +2532,8 @@ packages: thenify-all: 1.6.0 dev: true - /nanoid/3.1.22: - resolution: {integrity: sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==} + /nanoid/3.1.23: + resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: false @@ -2869,13 +2868,13 @@ packages: resolution: {integrity: sha512-me2dL+chJVb88zpE228MvA6wIRy1CuXxGTwI5hYe4DnSnXRbtJT+9ggRj+49kgHgs/AKMTKOt/EkTHSvQJmRXA==} dev: true - /postcss/8.2.14: - resolution: {integrity: sha512-+jD0ZijcvyCqPQo/m/CW0UcARpdFylq04of+Q7RKX6f/Tu+dvpUI/9Sp81+i6/vJThnOBX09Quw0ZLOVwpzX3w==} + /postcss/8.3.2: + resolution: {integrity: sha512-y1FK/AWdZlBF5lusS5j5l4/vF67+vQZt1SXPVJ32y1kRGDQyrs1zk32hG1cInRTu14P0V+orPz+ifwW/7rR4bg==} engines: {node: ^10 || ^12 || >=14} dependencies: colorette: 1.2.2 - nanoid: 3.1.22 - source-map: 0.6.1 + nanoid: 3.1.23 + source-map-js: 0.6.2 dev: false /preferred-pm/3.0.3: @@ -3197,11 +3196,6 @@ packages: engines: {node: '>=8'} dev: true - /slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: false - /slice-ansi/4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -3223,14 +3217,15 @@ packages: yargs: 15.4.1 dev: true - /source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + /source-map-js/0.6.2: + resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==} engines: {node: '>=0.10.0'} dev: false /source-map/0.7.3: resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} engines: {node: '>= 8'} + dev: true /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} @@ -3403,8 +3398,8 @@ packages: - sugarss dev: true - /svelte-hmr/0.14.3_svelte@3.38.2: - resolution: {integrity: sha512-N56xX405zLMw2tpGHKRx5h+kmdeZwxI21pvyC6OyBHJDCF6DlwWBm9TifdQmSD4dloWSmpDPzHWYa3CSjfopUg==} + /svelte-hmr/0.14.4_svelte@3.38.2: + resolution: {integrity: sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==} peerDependencies: svelte: '>=3.19.0' dependencies: @@ -3737,13 +3732,13 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite/2.3.6: - resolution: {integrity: sha512-fsEpNKDHgh3Sn66JH06ZnUBnIgUVUtw6ucDhlOj1CEqxIkymU25yv1/kWDPlIjyYHnalr0cN6V+zzUJ+fmWHYw==} + /vite/2.3.7: + resolution: {integrity: sha512-Y0xRz11MPYu/EAvzN94+FsOZHbSvO6FUvHv127CyG7mV6oDoay2bw+g5y9wW3Blf8OY3chaz3nc/DcRe1IQ3Nw==} engines: {node: '>=12.0.0'} hasBin: true dependencies: - esbuild: 0.12.5 - postcss: 8.2.14 + esbuild: 0.12.8 + postcss: 8.3.2 resolve: 1.20.0 rollup: 2.47.0 optionalDependencies: From 1dffefb7ded501b8c12a25617b5b68237172c784 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 11 Jun 2021 16:17:14 +0200 Subject: [PATCH 044/129] Version Packages (next) (#1668) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 3 +++ packages/kit/CHANGELOG.md | 9 +++++++++ packages/kit/package.json | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index bb48f7ef81d0..ec148e3b9817 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -145,6 +145,7 @@ "light-roses-teach", "little-shirts-happen", "long-bulldogs-invent", + "long-hotels-hunt", "long-moles-fold", "loud-seals-remember", "lovely-apricots-fail", @@ -229,6 +230,7 @@ "sharp-days-exercise", "sharp-mangos-tickle", "sharp-pigs-study", + "shy-jeans-fly", "shy-mails-share", "silver-elephants-tap", "silver-hounds-clean", @@ -250,6 +252,7 @@ "smooth-rockets-sneeze", "smooth-shoes-mix", "smooth-shrimps-fly", + "soft-bikes-bake", "soft-houses-pump", "soft-students-cover", "spicy-geese-accept", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index b34f34465963..1e78e67daff9 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,14 @@ # @sveltejs/kit +## 1.0.0-next.115 + +### Patch Changes + +- 523c3e2: Allow vite.alias to be an array +- 6fd46d1: \* update vite-plugin-svelte to 1.0.0-next.11 and use its named export + - update vite to 2.3.7 +- dc56d3c: Fix navigation when `base` path is set and validate that option's value + ## 1.0.0-next.114 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 424c49030a0b..9832eba85b3a 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.114", + "version": "1.0.0-next.115", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From 9a7195bf5c24a7b3859710296f725baecb9bbe55 Mon Sep 17 00:00:00 2001 From: Ivan Starkov Date: Fri, 11 Jun 2021 23:06:23 +0300 Subject: [PATCH 045/129] Allow sirv to looks for precompiled gzip and brotli files by default (#1672) --- .changeset/heavy-ways-agree.md | 5 +++++ packages/adapter-node/src/server.js | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/heavy-ways-agree.md diff --git a/.changeset/heavy-ways-agree.md b/.changeset/heavy-ways-agree.md new file mode 100644 index 000000000000..7f9c99c3d50a --- /dev/null +++ b/.changeset/heavy-ways-agree.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': minor +--- + +Allow sirv to looks for precompiled gzip and brotli files by default diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index 266dd10df1e0..ce8cb5f20f4c 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -30,7 +30,9 @@ export function createServer({ render }) { const assets_handler = fs.existsSync(paths.assets) ? sirv(paths.assets, { maxAge: 31536000, - immutable: true + immutable: true, + gzip: true, + brotli: true }) : noop_handler; From 53f33221b77d0afc43dff16e355f2f991cbe9c11 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Mon, 14 Jun 2021 10:35:27 -0400 Subject: [PATCH 046/129] Fix adapter-node build in presence of tsconfig.json (#1675) * target Node 12 in app output Without an explicit target value, esbuild will pick up the version from tsconfig.json, if present. This breaks the build if that specifies a target of es2019, which does not support import.meta. * add changeset --- .changeset/wild-pumas-jam.md | 5 +++++ packages/adapter-node/index.js | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/wild-pumas-jam.md diff --git a/.changeset/wild-pumas-jam.md b/.changeset/wild-pumas-jam.md new file mode 100644 index 000000000000..f687c21617b7 --- /dev/null +++ b/.changeset/wild-pumas-jam.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +Fix build when using TypeScript and there is a `tsconfig.json` with `target: 'es2019'` or earlier diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 9ac22d0b0eca..5643b87b3dce 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -28,7 +28,8 @@ export default function ({ out = 'build' } = {}) { bundle: true, external: Object.keys(JSON.parse(readFileSync('package.json', 'utf8')).dependencies || {}), format: 'esm', - platform: 'node' + platform: 'node', + target: 'node12' }); utils.log.minor('Prerendering static pages'); From e1f35acd74d2c7c3c5c87185c92a3d28990c6471 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 10:39:26 -0400 Subject: [PATCH 047/129] Version Packages (next) (#1677) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 2 ++ packages/adapter-node/CHANGELOG.md | 10 ++++++++++ packages/adapter-node/package.json | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index ec148e3b9817..382faa86b7ed 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -117,6 +117,7 @@ "heavy-humans-check", "heavy-lamps-explode", "heavy-papayas-smile", + "heavy-ways-agree", "hot-keys-walk", "hot-kings-confess", "hungry-lemons-scream", @@ -332,6 +333,7 @@ "wicked-spies-invite", "wild-beans-happen", "wild-cooks-drive", + "wild-pumas-jam", "wise-bees-juggle", "wise-bugs-run", "witty-eyes-relax", diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index 910fe233c2f6..945798e6a55a 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,15 @@ # @sveltejs/adapter-node +## 1.0.0-next.26 + +### Minor Changes + +- 9a7195b: Allow sirv to looks for precompiled gzip and brotli files by default + +### Patch Changes + +- 53f3322: Fix build when using TypeScript and there is a `tsconfig.json` with `target: 'es2019'` or earlier + ## 1.0.0-next.25 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 37f63fbf941d..73a6c004a63c 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.25", + "version": "1.0.0-next.26", "type": "module", "exports": { "import": "./index.js" From 1c78dec3b65d407db70a555ff54cc11442dcdc07 Mon Sep 17 00:00:00 2001 From: John Simons <32530010+johnnysprinkles@users.noreply.github.com> Date: Mon, 14 Jun 2021 08:42:31 -0700 Subject: [PATCH 048/129] Passing the Rollup output options through to Vite (#1572) --- packages/kit/src/cli.js | 2 +- packages/kit/src/core/build/index.js | 40 +++-- .../src/core/{load_config => config}/index.js | 74 +++++++++ .../{load_config => config}/index.spec.js | 153 +++++++++++++++++- .../core/{load_config => config}/options.js | 0 .../test/fixtures/default-cjs/src/app.html | 0 .../fixtures/default-cjs/svelte.config.cjs | 0 .../test/fixtures/default-esm/src/app.html | 0 .../fixtures/default-esm/svelte.config.js | 0 .../{load_config => config}/test/index.js | 0 .../core/{load_config => config}/types.d.ts | 0 packages/kit/src/core/dev/index.js | 23 ++- packages/kit/test/test.js | 2 +- 13 files changed, 256 insertions(+), 38 deletions(-) rename packages/kit/src/core/{load_config => config}/index.js (63%) rename packages/kit/src/core/{load_config => config}/index.spec.js (66%) rename packages/kit/src/core/{load_config => config}/options.js (100%) rename packages/kit/src/core/{load_config => config}/test/fixtures/default-cjs/src/app.html (100%) rename packages/kit/src/core/{load_config => config}/test/fixtures/default-cjs/svelte.config.cjs (100%) rename packages/kit/src/core/{load_config => config}/test/fixtures/default-esm/src/app.html (100%) rename packages/kit/src/core/{load_config => config}/test/fixtures/default-esm/svelte.config.js (100%) rename packages/kit/src/core/{load_config => config}/test/index.js (100%) rename packages/kit/src/core/{load_config => config}/types.d.ts (100%) diff --git a/packages/kit/src/cli.js b/packages/kit/src/cli.js index f80e01a461b2..e09d9711a858 100644 --- a/packages/kit/src/cli.js +++ b/packages/kit/src/cli.js @@ -2,7 +2,7 @@ import { existsSync } from 'fs'; import sade from 'sade'; import colors from 'kleur'; import * as ports from 'port-authority'; -import { load_config } from './core/load_config/index.js'; +import { load_config } from './core/config/index.js'; import { networkInterfaces, release } from 'os'; async function get_config() { diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index e5c6f4c2ffd6..8a1664b9331e 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -3,6 +3,7 @@ import path from 'path'; import { rimraf } from '../filesystem/index.js'; import create_manifest_data from '../../core/create_manifest_data/index.js'; import { copy_assets, get_no_external, posixify, resolve_entry } from '../utils.js'; +import { deep_merge, print_config_conflicts } from '../config/index.js'; import { create_app } from '../../core/create_app/index.js'; import vite from 'vite'; import { svelte } from '@sveltejs/vite-plugin-svelte'; @@ -134,19 +135,17 @@ async function build_client({ /** @type {any} */ const user_config = config.kit.vite(); - await vite.build({ - ...user_config, + /** @type {[any, string[]]} */ + const [merged_config, conflicts] = deep_merge(user_config, { configFile: false, root: cwd, base, build: { - ...user_config.build, cssCodeSplit: true, manifest: true, outDir: client_out_dir, polyfillDynamicImport: false, rollupOptions: { - ...(user_config.build && user_config.build.rollupOptions), input, output: { entryFileNames: '[name]-[hash].js', @@ -157,15 +156,12 @@ async function build_client({ } }, resolve: { - ...user_config.resolve, alias: { - ...(user_config.resolve && user_config.resolve.alias), $app: path.resolve(`${build_dir}/runtime/app`), $lib: config.kit.files.lib } }, plugins: [ - ...(user_config.plugins || []), svelte({ extensions: config.extensions, emitCss: !config.kit.amp @@ -173,6 +169,10 @@ async function build_client({ ] }); + print_config_conflicts(conflicts, 'kit.vite.', 'build_client'); + + await vite.build(merged_config); + /** @type {ClientManifest} */ const client_manifest = JSON.parse(fs.readFileSync(client_manifest_file, 'utf-8')); fs.renameSync(client_manifest_file, `${output_dir}/manifest.json`); // inspectable but not shipped @@ -395,19 +395,17 @@ async function build_server( /** @type {any} */ const user_config = config.kit.vite(); - await vite.build({ - ...user_config, + /** @type {[any, string[]]} */ + const [merged_config, conflicts] = deep_merge(user_config, { configFile: false, root: cwd, base, build: { target: 'es2018', - ...user_config.build, ssr: true, outDir: `${output_dir}/server`, polyfillDynamicImport: false, rollupOptions: { - ...(user_config.build && user_config.build.rollupOptions), input: { app: app_file }, @@ -422,15 +420,12 @@ async function build_server( } }, resolve: { - ...user_config.resolve, alias: { - ...(user_config.resolve && user_config.resolve.alias), $app: path.resolve(`${build_dir}/runtime/app`), $lib: config.kit.files.lib } }, plugins: [ - ...(user_config.plugins || []), svelte({ extensions: config.extensions }) @@ -440,7 +435,6 @@ async function build_server( // so we need to ignore the fact that it's missing // @ts-ignore ssr: { - ...user_config.ssr, // note to self: this _might_ need to be ['svelte', '@sveltejs/kit', ...get_no_external()] // but I'm honestly not sure. roll with this for now and see if it's ok noExternal: get_no_external(cwd, user_config.ssr && user_config.ssr.noExternal) @@ -449,6 +443,10 @@ async function build_server( entries: [] } }); + + print_config_conflicts(conflicts, 'kit.vite.', 'build_server'); + + await vite.build(merged_config); } /** @@ -504,20 +502,18 @@ async function build_service_worker( /** @type {any} */ const user_config = config.kit.vite(); - await vite.build({ - ...user_config, + /** @type {[any, string[]]} */ + const [merged_config, conflicts] = deep_merge(user_config, { configFile: false, root: cwd, base, build: { - ...user_config.build, lib: { entry: service_worker_entry_file, name: 'app', formats: ['es'] }, rollupOptions: { - ...(user_config.build && user_config.build.rollupOptions), output: { entryFileNames: 'service-worker.js' } @@ -526,9 +522,7 @@ async function build_service_worker( emptyOutDir: false }, resolve: { - ...user_config.resolve, alias: { - ...(user_config.resolve && user_config.resolve.alias), '$service-worker': path.resolve(`${build_dir}/runtime/service-worker`) } }, @@ -536,6 +530,10 @@ async function build_service_worker( entries: [] } }); + + print_config_conflicts(conflicts, 'kit.vite.', 'build_service_worker'); + + await vite.build(merged_config); } /** @param {string[]} array */ diff --git a/packages/kit/src/core/load_config/index.js b/packages/kit/src/core/config/index.js similarity index 63% rename from packages/kit/src/core/load_config/index.js rename to packages/kit/src/core/config/index.js index 7973a6fc8a3f..f3a0ab0f6f91 100644 --- a/packages/kit/src/core/load_config/index.js +++ b/packages/kit/src/core/config/index.js @@ -2,6 +2,7 @@ import options from './options.js'; import * as url from 'url'; import path from 'path'; import fs from 'fs'; +import { logger } from '../utils.js'; /** @typedef {import('./types').ConfigDefinition} ConfigDefinition */ @@ -145,3 +146,76 @@ export function validate_config(config) { return validated; } + +/** + * Merges b into a, recursively, mutating a. + * @param {Record} a + * @param {Record} b + * @param {string[]} conflicts array to accumulate conflicts in + * @param {string[]} path array of property names representing the current + * location in the tree + */ +function merge_into(a, b, conflicts = [], path = []) { + /** + * @param {any} x + */ + const is_object = (x) => typeof x === 'object' && !Array.isArray(x); + + for (const prop in b) { + if (is_object(b[prop])) { + if (!is_object(a[prop])) { + if (a[prop] !== undefined) { + conflicts.push([...path, prop].join('.')); + } + a[prop] = {}; + } + merge_into(a[prop], b[prop], conflicts, [...path, prop]); + } else if (Array.isArray(b[prop])) { + if (!Array.isArray(a[prop])) { + if (a[prop] !== undefined) { + conflicts.push([...path, prop].join('.')); + } + a[prop] = []; + } + a[prop].push(...b[prop]); + } else { + if (a[prop] !== undefined) { + conflicts.push([...path, prop].join('.')); + } + a[prop] = b[prop]; + } + } +} + +/** + * Takes zero or more objects and returns a new object that has all the values + * deeply merged together. None of the original objects will be mutated at any + * level, and the returned object will have no references to the original + * objects at any depth. If there's a conflict the last one wins, except for + * arrays which will be combined. + * @param {...Object} objects + * @returns {[Record, string[]]} a 2-tuple with the merged object, + * and a list of merge conflicts if there were any, in dotted notation + */ +export function deep_merge(...objects) { + const result = {}; + /** @type {string[]} */ + const conflicts = []; + objects.forEach((o) => merge_into(result, o, conflicts)); + return [result, conflicts]; +} + +/** + * @param {string[]} conflicts - array of conflicts in dotted notation + * @param {string=} pathPrefix - prepended in front of the path + * @param {string=} scope - used to prefix the whole error message + */ +export function print_config_conflicts(conflicts, pathPrefix = '', scope) { + const prefix = scope ? scope + ': ' : ''; + const log = logger({ verbose: false }); + conflicts.forEach((conflict) => { + log.error( + `${prefix}The value for ${pathPrefix}${conflict} specified in svelte.config.js has been ignored. This option is controlled by SvelteKit.` + ); + }); +} diff --git a/packages/kit/src/core/load_config/index.spec.js b/packages/kit/src/core/config/index.spec.js similarity index 66% rename from packages/kit/src/core/load_config/index.spec.js rename to packages/kit/src/core/config/index.spec.js index 6f11b28d79c3..bd53d4f6e6b2 100644 --- a/packages/kit/src/core/load_config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -1,6 +1,6 @@ -import { test } from 'uvu'; +import { test, suite } from 'uvu'; import * as assert from 'uvu/assert'; -import { validate_config } from './index.js'; +import { validate_config, deep_merge } from './index.js'; test('fills in defaults', () => { const validated = validate_config({}); @@ -298,3 +298,152 @@ validate_paths( ); test.run(); + +const deepMergeSuite = suite('deep_merge'); + +deepMergeSuite('basic test no conflicts', async () => { + const [merged, conflicts] = deep_merge( + { + version: 1, + animalSounds: { + cow: 'moo' + } + }, + { + animalSounds: { + duck: 'quack' + }, + locale: 'en_US' + } + ); + assert.equal(merged, { + version: 1, + locale: 'en_US', + animalSounds: { + cow: 'moo', + duck: 'quack' + } + }); + assert.equal(conflicts, []); +}); + +deepMergeSuite('three way merge no conflicts', async () => { + const [merged, conflicts] = deep_merge( + { + animalSounds: { + cow: 'moo' + } + }, + { + animalSounds: { + duck: 'quack' + } + }, + { + animalSounds: { + dog: { + singular: 'bark', + plural: 'barks' + } + } + } + ); + assert.equal(merged, { + animalSounds: { + cow: 'moo', + duck: 'quack', + dog: { + singular: 'bark', + plural: 'barks' + } + } + }); + assert.equal(conflicts, []); +}); + +deepMergeSuite('merge with conflicts', async () => { + const [merged, conflicts] = deep_merge( + { + person: { + firstName: 'John', + lastName: 'Doe', + address: { + line1: '123 Main St', + city: 'Seattle', + state: 'WA' + } + } + }, + { + person: { + middleInitial: 'Q', + address: '123 Main St, Seattle, WA' + } + } + ); + assert.equal(merged, { + person: { + firstName: 'John', + middleInitial: 'Q', + lastName: 'Doe', + address: '123 Main St, Seattle, WA' + } + }); + assert.equal(conflicts, ['person.address']); +}); + +deepMergeSuite('merge with arrays', async () => { + const [merged] = deep_merge( + { + paths: ['/foo', '/bar'] + }, + { + paths: ['/alpha', '/beta'] + } + ); + assert.equal(merged, { + paths: ['/foo', '/bar', '/alpha', '/beta'] + }); +}); + +deepMergeSuite('empty', async () => { + const [merged] = deep_merge(); + assert.equal(merged, {}); +}); + +deepMergeSuite('mutability safety', () => { + const input1 = { + person: { + firstName: 'John', + lastName: 'Doe', + address: { + line1: '123 Main St', + city: 'Seattle' + } + } + }; + const input2 = { + person: { + middleInitial: 'L', + lastName: 'Smith', + address: { + state: 'WA' + } + } + }; + const snapshot1 = JSON.stringify(input1); + const snapshot2 = JSON.stringify(input2); + + const [merged] = deep_merge(input1, input2); + + // Mess with the result + merged.person.middleInitial = 'Z'; + merged.person.address.zipCode = '98103'; + merged.person = {}; + + // Make sure nothing in the inputs changed + assert.snapshot(snapshot1, JSON.stringify(input1)); + assert.snapshot(snapshot2, JSON.stringify(input2)); +}); + +deepMergeSuite.run(); diff --git a/packages/kit/src/core/load_config/options.js b/packages/kit/src/core/config/options.js similarity index 100% rename from packages/kit/src/core/load_config/options.js rename to packages/kit/src/core/config/options.js diff --git a/packages/kit/src/core/load_config/test/fixtures/default-cjs/src/app.html b/packages/kit/src/core/config/test/fixtures/default-cjs/src/app.html similarity index 100% rename from packages/kit/src/core/load_config/test/fixtures/default-cjs/src/app.html rename to packages/kit/src/core/config/test/fixtures/default-cjs/src/app.html diff --git a/packages/kit/src/core/load_config/test/fixtures/default-cjs/svelte.config.cjs b/packages/kit/src/core/config/test/fixtures/default-cjs/svelte.config.cjs similarity index 100% rename from packages/kit/src/core/load_config/test/fixtures/default-cjs/svelte.config.cjs rename to packages/kit/src/core/config/test/fixtures/default-cjs/svelte.config.cjs diff --git a/packages/kit/src/core/load_config/test/fixtures/default-esm/src/app.html b/packages/kit/src/core/config/test/fixtures/default-esm/src/app.html similarity index 100% rename from packages/kit/src/core/load_config/test/fixtures/default-esm/src/app.html rename to packages/kit/src/core/config/test/fixtures/default-esm/src/app.html diff --git a/packages/kit/src/core/load_config/test/fixtures/default-esm/svelte.config.js b/packages/kit/src/core/config/test/fixtures/default-esm/svelte.config.js similarity index 100% rename from packages/kit/src/core/load_config/test/fixtures/default-esm/svelte.config.js rename to packages/kit/src/core/config/test/fixtures/default-esm/svelte.config.js diff --git a/packages/kit/src/core/load_config/test/index.js b/packages/kit/src/core/config/test/index.js similarity index 100% rename from packages/kit/src/core/load_config/test/index.js rename to packages/kit/src/core/config/test/index.js diff --git a/packages/kit/src/core/load_config/types.d.ts b/packages/kit/src/core/config/types.d.ts similarity index 100% rename from packages/kit/src/core/load_config/types.d.ts rename to packages/kit/src/core/config/types.d.ts diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 7c1dc4953777..7bbb20e7454a 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -12,6 +12,7 @@ import { rimraf } from '../filesystem/index.js'; import { respond } from '../../runtime/server/index.js'; import { getRawBody } from '../node/index.js'; import { copy_assets, get_no_external, resolve_entry } from '../utils.js'; +import { deep_merge, print_config_conflicts } from '../config/index.js'; import { svelte } from '@sveltejs/vite-plugin-svelte'; import { get_server } from '../server/index.js'; import '../../install-fetch.js'; @@ -86,18 +87,13 @@ class Watcher extends EventEmitter { const alias = user_config.resolve && user_config.resolve.alias; - /** - * @type {vite.ViteDevServer} - */ - this.vite = await vite.createServer({ - ...user_config, + /** @type {[any, string[]]} */ + const [merged_config, conflicts] = deep_merge(user_config, { configFile: false, root: this.cwd, resolve: { - ...user_config.resolve, alias: Array.isArray(alias) ? [ - ...alias, { find: '$app', replacement: path.resolve(`${this.dir}/runtime/app`) @@ -108,13 +104,11 @@ class Watcher extends EventEmitter { } ] : { - ...alias, $app: path.resolve(`${this.dir}/runtime/app`), $lib: this.config.kit.files.lib } }, plugins: [ - ...(user_config.plugins || []), svelte({ extensions: this.config.extensions, emitCss: !this.config.kit.amp @@ -122,23 +116,26 @@ class Watcher extends EventEmitter { ], publicDir: this.config.kit.files.assets, server: { - ...user_config.server, middlewareMode: true, hmr: { - ...(user_config.server && user_config.server.hmr), ...(this.https ? { server: this.server, port: this.port } : {}) } }, optimizeDeps: { - ...user_config.optimizeDeps, entries: [] }, ssr: { - ...user_config.ssr, noExternal: get_no_external(this.cwd, user_config.ssr && user_config.ssr.noExternal) } }); + print_config_conflicts(conflicts, 'kit.vite.'); + + /** + * @type {vite.ViteDevServer} + */ + this.vite = await vite.createServer(merged_config); + const validator = this.config.kit.amp && (await amp_validator.getInstance()); /** diff --git a/packages/kit/test/test.js b/packages/kit/test/test.js index 78c4a3ae62d8..b70cd5876d2e 100644 --- a/packages/kit/test/test.js +++ b/packages/kit/test/test.js @@ -6,7 +6,7 @@ import { chromium } from 'playwright-chromium'; import { dev } from '../src/core/dev/index.js'; import { build } from '../src/core/build/index.js'; import { start } from '../src/core/start/index.js'; -import { load_config } from '../src/core/load_config/index.js'; +import { load_config } from '../src/core/config/index.js'; import { fileURLToPath, pathToFileURL } from 'url'; import { format } from 'util'; From 318cdd70a97468fc13befbfc1a925b1ccf9575c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20Limell?= Date: Wed, 16 Jun 2021 15:27:30 +0200 Subject: [PATCH 049/129] Only cache content in /_app (#1416) --- .changeset/strong-files-obey.md | 5 +++++ packages/adapter-node/index.js | 9 +++++--- packages/adapter-node/src/server.js | 34 ++++++++++++++++++++++++----- 3 files changed, 39 insertions(+), 9 deletions(-) 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..fd6e6884a8a5 --- /dev/null +++ b/.changeset/strong-files-obey.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +Only cache files in config.kit.appDir diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 5643b87b3dce..3a0a36309205 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); @@ -29,7 +29,10 @@ export default function ({ out = 'build' } = {}) { external: Object.keys(JSON.parse(readFileSync('package.json', 'utf8')).dependencies || {}), format: 'esm', platform: 'node', - target: 'node12' + target: 'node12', + 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 ce8cb5f20f4c..26c2d099d7ed 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. @@ -23,14 +23,36 @@ export function createServer({ render }) { maxAge: 0 }); + const immutable_path = (pathname) => { + // eslint-disable-next-line no-undef + let app_dir = esbuild_app_dir; + + // hard to tell when app_dir is mixed with static + if (app_dir === '/') { + return false; + } + + if (app_dir.startsWith('/')) { + app_dir = app_dir.slice(1); + } + if (app_dir.endsWith('/')) { + app_dir = app_dir.slice(0, -1); + } + + return pathname.startsWith(`/${app_dir}/`); + }; + const prerendered_handler = fs.existsSync(paths.prerendered) ? mutable(paths.prerendered) : noop_handler; const assets_handler = fs.existsSync(paths.assets) ? sirv(paths.assets, { - maxAge: 31536000, - immutable: true, + setHeaders: (res, pathname, stats) => { + if (immutable_path(pathname)) { + res.setHeader('cache-control', 'public, max-age=31536000, immutable'); + } + }, gzip: true, brotli: true }) From 926481fcd60e4255e8daf35bf7e493962172fb99 Mon Sep 17 00:00:00 2001 From: Sascha Tandel <514405+sastan@users.noreply.github.com> Date: Wed, 16 Jun 2021 17:59:14 +0200 Subject: [PATCH 050/129] feat(adapter-node): precompress (gzip & brotli) assets (#1693) --- .changeset/clever-eagles-live.md | 5 +++ packages/adapter-node/README.md | 5 +++ packages/adapter-node/index.d.ts | 5 ++- packages/adapter-node/index.js | 62 +++++++++++++++++++++++++++-- packages/adapter-node/package.json | 3 +- packages/adapter-node/src/server.js | 13 +++--- pnpm-lock.yaml | 11 ++++- 7 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 .changeset/clever-eagles-live.md diff --git a/.changeset/clever-eagles-live.md b/.changeset/clever-eagles-live.md new file mode 100644 index 000000000000..63ba236f905a --- /dev/null +++ b/.changeset/clever-eagles-live.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +precompress assets and prerendered pages (html,js,json,css,svg,xml) diff --git a/packages/adapter-node/README.md b/packages/adapter-node/README.md index 05ec77ce77e7..b8e12614756a 100644 --- a/packages/adapter-node/README.md +++ b/packages/adapter-node/README.md @@ -15,6 +15,7 @@ export default { adapter: adapter({ // default options are shown out: 'build' + precompress: false, }) } }; @@ -26,6 +27,10 @@ export default { The directory to build the server to. It defaults to `build` — i.e. `node build` would start the server locally after it has been created. +### precompress + +Enables precompressing using gzip and brotli for assets and prerendered pages. It defaults to `false`. + ## Environment variables By default, the server will accept connections on `0.0.0.0` using port 3000. These can be customised with the `PORT` and `HOST` environment variables: diff --git a/packages/adapter-node/index.d.ts b/packages/adapter-node/index.d.ts index fc87605e6137..2132e79d9a73 100644 --- a/packages/adapter-node/index.d.ts +++ b/packages/adapter-node/index.d.ts @@ -1,3 +1,6 @@ -declare function plugin(options?: { out?: string }): import('@sveltejs/kit').Adapter; +declare function plugin(options?: { + out?: string; + precompress?: boolean; +}): import('@sveltejs/kit').Adapter; export = plugin; diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 3a0a36309205..095109c10572 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -1,14 +1,21 @@ -import esbuild from 'esbuild'; -import { readFileSync } from 'fs'; +import { readFileSync, statSync, createReadStream, createWriteStream } from 'fs'; import { join } from 'path'; import { fileURLToPath } from 'url'; +import { pipeline } from 'stream'; +import { promisify } from 'util'; +import zlib from 'zlib'; +import esbuild from 'esbuild'; +import glob from 'tiny-glob'; + +const pipe = promisify(pipeline); /** * @param {{ * out?: string; + * precompress?: boolean * }} options */ -export default function ({ out = 'build' } = {}) { +export default function ({ out = 'build', precompress } = {}) { /** @type {import('@sveltejs/kit').Adapter} */ const adapter = { name: '@sveltejs/adapter-node', @@ -19,6 +26,11 @@ export default function ({ out = 'build' } = {}) { utils.copy_client_files(static_directory); utils.copy_static_files(static_directory); + if (precompress) { + utils.log.minor('Compressing assets'); + await compress(static_directory); + } + utils.log.minor('Building server'); const files = fileURLToPath(new URL('./files', import.meta.url)); utils.copy(files, '.svelte-kit/node'); @@ -39,8 +51,52 @@ export default function ({ out = 'build' } = {}) { await utils.prerender({ dest: `${out}/prerendered` }); + if (precompress) { + utils.log.minor('Compressing prerendered pages'); + await compress(`${out}/prerendered`); + } } }; return adapter; } + +/** + * @param {string} directory + */ +async function compress(directory) { + const files = await glob('**/*.{html,js,json,css,svg,xml}', { + cwd: directory, + dot: true, + absolute: true, + filesOnly: true + }); + + await Promise.all( + files.map((file) => Promise.all([compress_file(file, 'gz'), compress_file(file, 'br')])) + ); +} + +/** + * @param {string} file + * @param {'gz' | 'br'} format + */ +async function compress_file(file, format = 'gz') { + const compress = + format == 'br' + ? zlib.createBrotliCompress({ + params: { + [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT, + [zlib.constants.BROTLI_PARAM_QUALITY]: zlib.constants.BROTLI_MAX_QUALITY, + [zlib.constants.BROTLI_PARAM_SIZE_HINT]: statSync(file).size + } + }) + : zlib.createGzip({ + level: zlib.constants.Z_BEST_COMPRESSION + }); + + const source = createReadStream(file); + const destination = createWriteStream(`${file}.${format}`); + + await pipe(source, compress, destination); +} diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 73a6c004a63c..a0af401eb335 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -21,7 +21,8 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "esbuild": "^0.12.5" + "esbuild": "^0.12.5", + "tiny-glob": "^0.2.9" }, "devDependencies": { "@rollup/plugin-json": "^4.1.0", diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index 26c2d099d7ed..ff35aa835a5f 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -17,12 +17,6 @@ const paths = { }; export function createServer({ render }) { - const mutable = (dir) => - sirv(dir, { - etag: true, - maxAge: 0 - }); - const immutable_path = (pathname) => { // eslint-disable-next-line no-undef let app_dir = esbuild_app_dir; @@ -43,7 +37,12 @@ export function createServer({ render }) { }; const prerendered_handler = fs.existsSync(paths.prerendered) - ? mutable(paths.prerendered) + ? sirv(paths.prerendered, { + etag: true, + maxAge: 0, + gzip: true, + brotli: true + }) : noop_handler; const assets_handler = fs.existsSync(paths.assets) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 693d088d4c12..84e87598f119 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,10 +100,12 @@ importers: polka: ^1.0.0-next.15 rollup: ^2.47.0 sirv: ^1.0.12 + tiny-glob: ^0.2.9 typescript: ^4.2.4 uvu: ^0.5.1 dependencies: esbuild: 0.12.5 + tiny-glob: 0.2.9 devDependencies: '@rollup/plugin-json': 4.1.0_rollup@2.47.0 '@sveltejs/kit': link:../kit @@ -1970,7 +1972,6 @@ packages: /globalyzer/0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true /globby/11.0.3: resolution: {integrity: sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==} @@ -1986,7 +1987,6 @@ packages: /globrex/0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true /graceful-fs/4.2.6: resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} @@ -3566,6 +3566,13 @@ packages: globrex: 0.1.2 dev: true + /tiny-glob/0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + dev: false + /tmp/0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} From aedec24cc0930186dd6be1d49d69dbf770b234ba Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Wed, 16 Jun 2021 23:01:15 +0700 Subject: [PATCH 051/129] ensure router is initialized when subscribing to session (#1691) --- .changeset/hip-elephants-judge.md | 5 +++++ packages/kit/src/runtime/client/renderer.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/hip-elephants-judge.md diff --git a/.changeset/hip-elephants-judge.md b/.changeset/hip-elephants-judge.md new file mode 100644 index 000000000000..95f303163db2 --- /dev/null +++ b/.changeset/hip-elephants-judge.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Ensure router is initialized before parsing location diff --git a/packages/kit/src/runtime/client/renderer.js b/packages/kit/src/runtime/client/renderer.js index 047671e201d1..537c2dee7619 100644 --- a/packages/kit/src/runtime/client/renderer.js +++ b/packages/kit/src/runtime/client/renderer.js @@ -109,7 +109,7 @@ export class Renderer { this.stores.session.subscribe(async (value) => { this.$session = value; - if (!ready) return; + if (!ready || !this.router) return; this.session_id += 1; const info = this.router.parse(new URL(location.href)); From b1450961b642828a26ac2d1f481a358d3551ffa2 Mon Sep 17 00:00:00 2001 From: John Simons <32530010+johnnysprinkles@users.noreply.github.com> Date: Thu, 17 Jun 2021 05:28:37 -0700 Subject: [PATCH 052/129] fix: deep_merge should stop recursing at class instances (#1698) --- packages/kit/src/core/config/index.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js index f3a0ab0f6f91..1930a71a9523 100644 --- a/packages/kit/src/core/config/index.js +++ b/packages/kit/src/core/config/index.js @@ -157,13 +157,15 @@ export function validate_config(config) { */ function merge_into(a, b, conflicts = [], path = []) { /** + * Checks for "plain old Javascript object", typically made as an object + * literal. Excludes Arrays and built-in types like Buffer. * @param {any} x */ - const is_object = (x) => typeof x === 'object' && !Array.isArray(x); + const is_plain_object = (x) => typeof x === 'object' && x.constructor === Object; for (const prop in b) { - if (is_object(b[prop])) { - if (!is_object(a[prop])) { + if (is_plain_object(b[prop])) { + if (!is_plain_object(a[prop])) { if (a[prop] !== undefined) { conflicts.push([...path, prop].join('.')); } From ea8cd54d77bd9d0d5dc88081ad98c906951a472f Mon Sep 17 00:00:00 2001 From: Luke Edwards Date: Thu, 17 Jun 2021 08:27:30 -0700 Subject: [PATCH 053/129] chore(kit): correct `engines` constraint (#1696) * chore(kit): correct `engines` constraint Maintain fix from #1470, but loosen other constraints which had no business being there. * chore: add changeset * include minor version --- .changeset/gold-trains-dream.md | 5 +++++ packages/kit/package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/gold-trains-dream.md diff --git a/.changeset/gold-trains-dream.md b/.changeset/gold-trains-dream.md new file mode 100644 index 000000000000..496685c19149 --- /dev/null +++ b/.changeset/gold-trains-dream.md @@ -0,0 +1,5 @@ +--- +"@sveltejs/kit": patch +--- + +chore(kit): correct `engines` constraint diff --git a/packages/kit/package.json b/packages/kit/package.json index 9832eba85b3a..a617b8e626cd 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -77,6 +77,6 @@ }, "types": "types/index.d.ts", "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" + "node": "^12.20 || >=14.13" } } From 19dbbcb33e4d9f704ad04fc0803423d16d1a27ef Mon Sep 17 00:00:00 2001 From: Moritz Hedtke Date: Thu, 17 Jun 2021 23:07:18 +0200 Subject: [PATCH 054/129] Implement keepfocus for goto. This allows you to navigate without loosing focus of the current element. This may be useful if you want to e.g store the current filter or sorting order of a list in the url to allow sharing it. --- documentation/docs/05-modules.md | 2 +- packages/kit/src/runtime/client/router.js | 19 +++++++++++++------ packages/kit/types/ambient-modules.d.ts | 4 ++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/documentation/docs/05-modules.md b/documentation/docs/05-modules.md index 25d8608c6b28..2b2f0359e1b5 100644 --- a/documentation/docs/05-modules.md +++ b/documentation/docs/05-modules.md @@ -21,7 +21,7 @@ import { amp, browser, dev, prerendering } from '$app/env'; import { goto, invalidate, prefetch, prefetchRoutes } from '$app/navigation'; ``` -- `goto(href, { replaceState, noscroll, state })` returns a `Promise` that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `href`. The second argument is optional. If `replaceState` is true, a new history entry won't be created. If `noscroll` is true, the browser won't scroll to the top of the page after navigation. If state is set, its value will be used to set the initital state of the new history entry, it defaults to `{}`. +- `goto(href, { replaceState, noscroll, keepfocus, state })` returns a `Promise` that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `href`. The second argument is optional. If `replaceState` is true, a new history entry won't be created. If `noscroll` is true, the browser won't scroll to the top of the page after navigation. If `keepfocus` is true, the browser won't focus the body element / unfocus the current element. If state is set, its value will be used to set the initital state of the new history entry, it defaults to `{}`. - `invalidate(href)` causes any `load` functions belonging to the currently active page to re-run if they `fetch` the resource in question. It returns a `Promise` that resolves when the page is subsequently updated. - `prefetch(href)` programmatically prefetches the given page, which means a) ensuring that the code for the page is loaded, and b) calling the page's `load` function with the appropriate options. This is the same behaviour that SvelteKit triggers when the user taps or mouses over an `` element with [sveltekit:prefetch](#anchor-options-sveltekit-prefetch). If the next navigation is to `href`, the values returned from `load` will be used, making navigation instantaneous. Returns a `Promise` that resolves when the prefetch is complete. - `prefetchRoutes(routes)` — programmatically prefetches the code for routes that haven't yet been fetched. Typically, you might call this to speed up subsequent navigation. If no argument is given, all routes will be fetched; otherwise, you can specify routes by any matching pathname such as `/about` (to match `src/routes/about.svelte`) or `/blog/*` (to match `src/routes/blog/[slug].svelte`). Unlike `prefetch`, this won't call `load` for individual pages. Returns a `Promise` that resolves when the routes have been prefetched. diff --git a/packages/kit/src/runtime/client/router.js b/packages/kit/src/runtime/client/router.js index 8dadc3defd42..2195e4652cb2 100644 --- a/packages/kit/src/runtime/client/router.js +++ b/packages/kit/src/runtime/client/router.js @@ -137,14 +137,14 @@ export class Router { const noscroll = a.hasAttribute('sveltekit:noscroll'); history.pushState({}, '', url.href); - this._navigate(url, noscroll ? scroll_state() : null, [], url.hash); + this._navigate(url, noscroll ? scroll_state() : null, false, [], url.hash); event.preventDefault(); }); addEventListener('popstate', (event) => { if (event.state && this.enabled) { const url = new URL(location.href); - this._navigate(url, event.state['sveltekit:scroll'], []); + this._navigate(url, event.state['sveltekit:scroll'], false, []); } }); @@ -184,12 +184,16 @@ export class Router { * @param {GotoParams[1]} opts * @param {string[]} chain */ - async goto(href, { noscroll = false, replaceState = false, state = {} } = {}, chain) { + async goto( + href, + { noscroll = false, replaceState = false, keepfocus = false, state = {} } = {}, + chain + ) { const url = new URL(href, get_base_uri(document)); if (this.enabled && this.owns(url)) { history[replaceState ? 'replaceState' : 'pushState'](state, '', href); - return this._navigate(url, noscroll ? scroll_state() : null, chain, url.hash); + return this._navigate(url, noscroll ? scroll_state() : null, keepfocus, chain, url.hash); } location.href = url.href; @@ -223,10 +227,11 @@ export class Router { /** * @param {URL} url * @param {{ x: number, y: number }} scroll + * @param {boolean} keepfocus * @param {string[]} chain * @param {string} [hash] */ - async _navigate(url, scroll, chain, hash) { + async _navigate(url, scroll, keepfocus, chain, hash) { const info = this.parse(url); if (!info) { @@ -256,7 +261,9 @@ export class Router { await this.renderer.update(info, chain, false); - document.body.focus(); + if (!keepfocus) { + document.body.focus(); + } const deep_linked = hash && document.getElementById(hash.slice(1)); if (scroll) { diff --git a/packages/kit/types/ambient-modules.d.ts b/packages/kit/types/ambient-modules.d.ts index ad2119153ee5..7319bcfda941 100644 --- a/packages/kit/types/ambient-modules.d.ts +++ b/packages/kit/types/ambient-modules.d.ts @@ -22,11 +22,11 @@ declare module '$app/navigation' { * Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified href. * * @param href Where to navigate to - * @param opts Optional. If `replaceState` is `true`, a new history entry won't be created. If `noscroll` is `true`, the browser won't scroll to the top of the page after navigation. If state is set, its value will be used to set the initital state of the new history entry, it defaults to `{}` + * @param opts Optional. If `replaceState` is `true`, a new history entry won't be created. If `noscroll` is `true`, the browser won't scroll to the top of the page after navigation. If `keepfocus` is `true`, the browser won't focus the body element / unfocus the current element. If state is set, its value will be used to set the initital state of the new history entry, it defaults to `{}` */ export function goto( href: string, - opts?: { replaceState?: boolean; noscroll?: boolean; state?: any } + opts?: { replaceState?: boolean; noscroll?: boolean; keepfocus?: boolean; state?: any } ): Promise; /** * Returns a Promise that resolves when SvelteKit re-runs any current `load` functions that depend on `href` From 7e49f73878ad892479bf2448d56dab6837d20510 Mon Sep 17 00:00:00 2001 From: Nick Mazuk Date: Thu, 17 Jun 2021 21:51:13 -0700 Subject: [PATCH 055/129] Remove suggestion to upgrade Vite from FAQ (#1708) --- documentation/faq/70-packages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/faq/70-packages.md b/documentation/faq/70-packages.md index 261f849564fc..c26c4369aa0d 100644 --- a/documentation/faq/70-packages.md +++ b/documentation/faq/70-packages.md @@ -12,4 +12,4 @@ Old beta versions of the SvelteKit template included the configuration value `no The second most commonly-encountered issue is having a Svelte component that imports a CommonJS library. In this case, you should try to work with the library authors to distribute an ESM version of the dependency. However, in the meantime, you can workaround this issue by adding the dependency to `vite.optimizeDeps.include` in `svelte.config.js`. -Finally, Vite has had some issues that have been fixed, so we recommend upgrading to the latest version of Vite. If you are still encountering issues we recommend searching both [the Vite issue tracker](https://github.com/vitejs/vite/issues) and the issue tracker of the library in question. Sometimes issues can be worked around by fiddling with the [`optimizeDeps`](https://vitejs.dev/config/#dep-optimization-options) or [`ssr`](https://vitejs.dev/config/#ssr-options) config values. +If you are still encountering issues we recommend searching both [the Vite issue tracker](https://github.com/vitejs/vite/issues) and the issue tracker of the library in question. Sometimes issues can be worked around by fiddling with the [`optimizeDeps`](https://vitejs.dev/config/#dep-optimization-options) or [`ssr`](https://vitejs.dev/config/#ssr-options) config values. From 6e80f5fec70d4f263816a5cc572428eaf0876653 Mon Sep 17 00:00:00 2001 From: Nick Mazuk Date: Thu, 17 Jun 2021 21:51:59 -0700 Subject: [PATCH 056/129] Remove the instructions to install vite when migrating (#1707) --- documentation/migrating/02-pkg.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/migrating/02-pkg.md b/documentation/migrating/02-pkg.md index a823318b932a..ae7fd875381f 100644 --- a/documentation/migrating/02-pkg.md +++ b/documentation/migrating/02-pkg.md @@ -12,7 +12,7 @@ Remove `polka` or `express`, if you're using one of those, and any middleware su ### devDependencies -Remove `sapper` from your `devDependencies` and replace it with `@sveltejs/kit`, `vite`, and whichever [adapter](/docs#adapters) you plan to use (see [next section](#project-files-configuration)). +Remove `sapper` from your `devDependencies` and replace it with `@sveltejs/kit` and whichever [adapter](/docs#adapters) you plan to use (see [next section](#project-files-configuration)). ### scripts From c7d5ce414567c7ac60afd346ce56969594bba764 Mon Sep 17 00:00:00 2001 From: Dominik G Date: Sat, 19 Jun 2021 22:36:00 +0200 Subject: [PATCH 057/129] unpin vite and update to ^2.3.8 (#1715) --- .changeset/serious-vans-arrive.md | 5 +++++ packages/kit/package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 .changeset/serious-vans-arrive.md diff --git a/.changeset/serious-vans-arrive.md b/.changeset/serious-vans-arrive.md new file mode 100644 index 000000000000..274466270dab --- /dev/null +++ b/.changeset/serious-vans-arrive.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +update vite to 2.3.8 and unpin diff --git a/packages/kit/package.json b/packages/kit/package.json index a617b8e626cd..0adfad8c7544 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -6,7 +6,7 @@ "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", "cheap-watch": "^1.0.3", "sade": "^1.7.4", - "vite": "2.3.7" + "vite": "^2.3.8" }, "devDependencies": { "@rollup/plugin-replace": "^2.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84e87598f119..5150d0c0650d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -232,12 +232,12 @@ importers: tiny-glob: ^0.2.8 typescript: ^4.2.4 uvu: ^0.5.1 - vite: 2.3.7 + vite: ^2.3.8 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.11_74e52d7dcd586025195c15edb3940938 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.11_263f9b0c76b2aa4f42ad7af7d509f124 cheap-watch: 1.0.3 sade: 1.7.4 - vite: 2.3.7 + vite: 2.3.8 devDependencies: '@rollup/plugin-replace': 2.4.2_rollup@2.47.0 '@types/amphtml-validator': 1.0.1 @@ -642,7 +642,7 @@ packages: rollup: 2.47.0 dev: false - /@sveltejs/vite-plugin-svelte/1.0.0-next.11_74e52d7dcd586025195c15edb3940938: + /@sveltejs/vite-plugin-svelte/1.0.0-next.11_263f9b0c76b2aa4f42ad7af7d509f124: resolution: {integrity: sha512-EYR1I145k5rflVqhPwk3442m3bkYimTKSHM9uO5KdomXzt+GS9ZSBJQE3/wy1Di9V8OnGa3oKpckI3OZsHkTIA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: @@ -655,7 +655,7 @@ packages: require-relative: 0.8.7 svelte: 3.38.2 svelte-hmr: 0.14.4_svelte@3.38.2 - vite: 2.3.7 + vite: 2.3.8 transitivePeerDependencies: - rollup - supports-color @@ -2868,8 +2868,8 @@ packages: resolution: {integrity: sha512-me2dL+chJVb88zpE228MvA6wIRy1CuXxGTwI5hYe4DnSnXRbtJT+9ggRj+49kgHgs/AKMTKOt/EkTHSvQJmRXA==} dev: true - /postcss/8.3.2: - resolution: {integrity: sha512-y1FK/AWdZlBF5lusS5j5l4/vF67+vQZt1SXPVJ32y1kRGDQyrs1zk32hG1cInRTu14P0V+orPz+ifwW/7rR4bg==} + /postcss/8.3.5: + resolution: {integrity: sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==} engines: {node: ^10 || ^12 || >=14} dependencies: colorette: 1.2.2 @@ -3739,13 +3739,13 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite/2.3.7: - resolution: {integrity: sha512-Y0xRz11MPYu/EAvzN94+FsOZHbSvO6FUvHv127CyG7mV6oDoay2bw+g5y9wW3Blf8OY3chaz3nc/DcRe1IQ3Nw==} + /vite/2.3.8: + resolution: {integrity: sha512-QiEx+iqNnJntSgSF2fWRQvRey9pORIrtNJzNyBJXwc+BdzWs83FQolX84cTBo393cfhObrtWa6180dAa4NLDiQ==} engines: {node: '>=12.0.0'} hasBin: true dependencies: esbuild: 0.12.8 - postcss: 8.3.2 + postcss: 8.3.5 resolve: 1.20.0 rollup: 2.47.0 optionalDependencies: From da3834818742cbec3f8fdd423a350c0319d6d70f Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Sun, 20 Jun 2021 03:37:52 +0700 Subject: [PATCH 058/129] add package mention in cli (#1713) --- documentation/docs/13-cli.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/documentation/docs/13-cli.md b/documentation/docs/13-cli.md index 3f6f1d23b34e..340526517179 100644 --- a/documentation/docs/13-cli.md +++ b/documentation/docs/13-cli.md @@ -29,7 +29,7 @@ After building the app, you can reference the documentation of your chosen [adap ### svelte-kit preview -After you've built your app with `svelte-kit build`, you can start the production version (irrespective of any adapter that has been applied) locally with `svelte-kit preview`. This is intended for testing the production build locally, **not for serving your app**, for which you should always use an [adapter](#adapters). +After you've built your app with `svelte-kit build`, you can start the production version (irrespective of any adapter that has been applied) locally with `svelte-kit preview`. This is intended for testing the production build locally, **not for serving your app**, for which you should always use an [adapter](#adapters). Like `svelte-kit dev`, it accepts the following options: @@ -37,3 +37,7 @@ Like `svelte-kit dev`, it accepts the following options: - `-o`/`--open` - `-h`/`--host` (note the security caveat [above](#command-line-interface-svelte-kit-dev)) - `-H`/`--https` + +### svelte-kit package + +For package authors, see [packaging](#packaging). From d259bca84add777a8269c5279a0ca86f9869e72e Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sat, 19 Jun 2021 19:29:59 -0700 Subject: [PATCH 059/129] Stricter regex for getting element attributes during prerendering (#1700) --- .changeset/seven-planes-fly.md | 5 +++++ packages/kit/src/core/adapt/prerender.js | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/seven-planes-fly.md diff --git a/.changeset/seven-planes-fly.md b/.changeset/seven-planes-fly.md new file mode 100644 index 000000000000..7b6210e83e2b --- /dev/null +++ b/.changeset/seven-planes-fly.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Stricter regex for getting element attributes during prerendering diff --git a/packages/kit/src/core/adapt/prerender.js b/packages/kit/src/core/adapt/prerender.js index 7ac25c4c215d..9ac50dc305b7 100644 --- a/packages/kit/src/core/adapt/prerender.js +++ b/packages/kit/src/core/adapt/prerender.js @@ -16,13 +16,13 @@ function clean_html(html) { /** @param {string} attrs */ function get_href(attrs) { - const match = /href\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/.exec(attrs); + const match = /[\s'"]href\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/.exec(attrs); return match && (match[1] || match[2] || match[3]); } /** @param {string} attrs */ function get_src(attrs) { - const match = /src\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/.exec(attrs); + const match = /[\s'"]src\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/.exec(attrs); return match && (match[1] || match[2] || match[3]); } @@ -30,7 +30,7 @@ function get_src(attrs) { function get_srcset_urls(attrs) { const results = []; // Note that the srcset allows any ASCII whitespace, including newlines. - const match = /srcset\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/s.exec(attrs); + const match = /[\s'"]srcset\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/s.exec(attrs); if (match) { const attr_content = match[1] || match[2] || match[3]; // Parse the content of the srcset attribute. From 2fb03862569c5505b30088655a7b43370d9f8baa Mon Sep 17 00:00:00 2001 From: Bjorn Lu <34116392+bluwy@users.noreply.github.com> Date: Sun, 20 Jun 2021 12:53:00 +0800 Subject: [PATCH 060/129] Add note about limitation in vite-plugin-svelte(#1665) --- documentation/faq/70-packages.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation/faq/70-packages.md b/documentation/faq/70-packages.md index c26c4369aa0d..b4da6f2dd404 100644 --- a/documentation/faq/70-packages.md +++ b/documentation/faq/70-packages.md @@ -12,4 +12,6 @@ Old beta versions of the SvelteKit template included the configuration value `no The second most commonly-encountered issue is having a Svelte component that imports a CommonJS library. In this case, you should try to work with the library authors to distribute an ESM version of the dependency. However, in the meantime, you can workaround this issue by adding the dependency to `vite.optimizeDeps.include` in `svelte.config.js`. +Also, some Svelte libraries doesn't work nicely with Vite's pre-bundling process, do check out `@sveltejs/vite-plugin-svelte`'s docs on its current [limitation and workaround](https://github.com/sveltejs/vite-plugin-svelte/tree/main/packages/vite-plugin-svelte#importing-third-party-svelte-libraries). + If you are still encountering issues we recommend searching both [the Vite issue tracker](https://github.com/vitejs/vite/issues) and the issue tracker of the library in question. Sometimes issues can be worked around by fiddling with the [`optimizeDeps`](https://vitejs.dev/config/#dep-optimization-options) or [`ssr`](https://vitejs.dev/config/#ssr-options) config values. From 69e9ff49461662c91e12757acee9243a0856f3d1 Mon Sep 17 00:00:00 2001 From: Saikat Das Date: Sun, 20 Jun 2021 18:08:45 +0530 Subject: [PATCH 061/129] Add missing comma to README (#1719) --- packages/adapter-node/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-node/README.md b/packages/adapter-node/README.md index b8e12614756a..e4e7e0b433f9 100644 --- a/packages/adapter-node/README.md +++ b/packages/adapter-node/README.md @@ -14,7 +14,7 @@ export default { kit: { adapter: adapter({ // default options are shown - out: 'build' + out: 'build', precompress: false, }) } From d96c3c29a65f4ccae3225c125c69c533501d93b7 Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Tue, 22 Jun 2021 01:06:23 +0700 Subject: [PATCH 062/129] fix failing lint from #1719 (#1725) --- packages/adapter-node/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-node/README.md b/packages/adapter-node/README.md index e4e7e0b433f9..ec1ec3bae1a1 100644 --- a/packages/adapter-node/README.md +++ b/packages/adapter-node/README.md @@ -15,7 +15,7 @@ export default { adapter: adapter({ // default options are shown out: 'build', - precompress: false, + precompress: false }) } }; From 8ac9dc14c97230ab5526edbe758417c709003d10 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 22 Jun 2021 06:30:40 -0700 Subject: [PATCH 063/129] Version Packages (next) (#1694) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 6 ++++++ packages/adapter-node/CHANGELOG.md | 7 +++++++ packages/adapter-node/package.json | 2 +- packages/kit/CHANGELOG.md | 9 +++++++++ packages/kit/package.json | 2 +- 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 382faa86b7ed..ad4359533a46 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -55,6 +55,7 @@ "chilly-files-greet", "chilly-flowers-design", "clever-dolls-poke", + "clever-eagles-live", "clever-lizards-grab", "clever-tools-enjoy", "cold-buttons-sell", @@ -98,6 +99,7 @@ "fuzzy-ghosts-call", "fuzzy-jeans-join", "gold-moles-hunt", + "gold-trains-dream", "good-beans-invite", "gorgeous-donkeys-admire", "gorgeous-hounds-peel", @@ -118,6 +120,7 @@ "heavy-lamps-explode", "heavy-papayas-smile", "heavy-ways-agree", + "hip-elephants-judge", "hot-keys-walk", "hot-kings-confess", "hungry-lemons-scream", @@ -223,9 +226,11 @@ "selfish-ligers-allow", "selfish-owls-own", "serious-books-push", + "serious-vans-arrive", "seven-bags-sniff", "seven-impalas-march", "seven-jars-argue", + "seven-planes-fly", "shaggy-elephants-sell", "shaggy-peaches-fry", "sharp-days-exercise", @@ -266,6 +271,7 @@ "strange-poems-design", "strong-carrots-work", "strong-cooks-turn", + "strong-files-obey", "stupid-countries-sneeze", "swift-pumpkins-pump", "tall-berries-cheer", diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index 945798e6a55a..8331139f24d7 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @sveltejs/adapter-node +## 1.0.0-next.27 + +### Patch Changes + +- 926481f: precompress assets and prerendered pages (html,js,json,css,svg,xml) +- 318cdd7: Only cache files in config.kit.appDir + ## 1.0.0-next.26 ### Minor Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index a0af401eb335..fa8a7a0f9193 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.26", + "version": "1.0.0-next.27", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 1e78e67daff9..aa9e77605d85 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,14 @@ # @sveltejs/kit +## 1.0.0-next.116 + +### Patch Changes + +- ea8cd54: chore(kit): correct `engines` constraint +- aedec24: Ensure router is initialized before parsing location +- c7d5ce4: update vite to 2.3.8 and unpin +- d259bca: Stricter regex for getting element attributes during prerendering + ## 1.0.0-next.115 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 0adfad8c7544..061c6e7a971d 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.115", + "version": "1.0.0-next.116", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From 76af4a20642b17bbaa63dae18aaaa4eff7103895 Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Wed, 23 Jun 2021 19:52:55 +0700 Subject: [PATCH 064/129] docs: clarify package publish command (#1742) --- documentation/docs/12-packaging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/docs/12-packaging.md b/documentation/docs/12-packaging.md index ed5858ede10b..1b7b92986c29 100644 --- a/documentation/docs/12-packaging.md +++ b/documentation/docs/12-packaging.md @@ -33,7 +33,7 @@ To publish the generated package: npm publish package ``` -If you configure a custom [`package.dir`](#configuration-package), change `package` accordingly. +The `package` above is referring to the directory name generated, change accordingly if you configure a custom [`package.dir`](#configuration-package). If you're having problems publishing a package that is not yours, add a trailing slash at the end (e.g. `package/`). ### Caveats From 7b4c54cbb2c317122d1c6bb12eeaec656a189c07 Mon Sep 17 00:00:00 2001 From: John Simons <32530010+johnnysprinkles@users.noreply.github.com> Date: Wed, 23 Jun 2021 20:53:21 -0700 Subject: [PATCH 065/129] fix: deep_merge shows false errors when using key names that happen to be Object prototype methods (#1739) --- packages/kit/src/core/config/index.js | 8 ++++++- packages/kit/src/core/config/index.spec.js | 27 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js index 1930a71a9523..f18caa09b2c9 100644 --- a/packages/kit/src/core/config/index.js +++ b/packages/kit/src/core/config/index.js @@ -181,7 +181,13 @@ function merge_into(a, b, conflicts = [], path = []) { } a[prop].push(...b[prop]); } else { - if (a[prop] !== undefined) { + // Since we're inside a for/in loop which loops over enumerable + // properties only, we want parity here and to check if 'a' has + // enumerable-only property 'prop'. Using 'hasOwnProperty' to + // exclude inherited properties is close enough. It is possible + // that someone uses Object.defineProperty to create a direct, + // non-enumerable property but let's not worry about that. + if (Object.prototype.hasOwnProperty.call(a, prop)) { conflicts.push([...path, prop].join('.')); } a[prop] = b[prop]; diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index bd53d4f6e6b2..1c6b7b8a1f0d 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -446,4 +446,31 @@ deepMergeSuite('mutability safety', () => { assert.snapshot(snapshot2, JSON.stringify(input2)); }); +deepMergeSuite('merge buffer', () => { + const [merged, conflicts] = deep_merge( + { + x: Buffer.from('foo', 'utf-8') + }, + { + y: 12345 + } + ); + assert.equal(Object.keys(merged), ['x', 'y']); + assert.equal(conflicts.length, 0); +}); + +deepMergeSuite('merge including toString', () => { + const [merged, conflicts] = deep_merge( + { + toString: () => '', + constructor: () => '' + }, + { + y: 12345 + } + ); + assert.equal(conflicts.length, 0); + assert.equal(Object.keys(merged), ['toString', 'constructor', 'y']); +}); + deepMergeSuite.run(); From 1c8bdba3522f31f741240765c747d7a3fb8594a9 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 24 Jun 2021 15:24:08 -0400 Subject: [PATCH 066/129] allow customisation of HOST and PORT env vars in adapter-node (#1754) --- .changeset/curvy-eggs-sip.md | 5 +++++ packages/adapter-node/README.md | 10 ++++++++-- packages/adapter-node/index.d.ts | 4 ++++ packages/adapter-node/index.js | 20 +++++++++++++++++--- packages/adapter-node/rollup.config.js | 2 +- packages/adapter-node/src/index.js | 7 +++---- 6 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 .changeset/curvy-eggs-sip.md diff --git a/.changeset/curvy-eggs-sip.md b/.changeset/curvy-eggs-sip.md new file mode 100644 index 000000000000..118b3c5b677f --- /dev/null +++ b/.changeset/curvy-eggs-sip.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +Allow the environment variables containing the host and port to serve on to be customised diff --git a/packages/adapter-node/README.md b/packages/adapter-node/README.md index ec1ec3bae1a1..587bded1e1b6 100644 --- a/packages/adapter-node/README.md +++ b/packages/adapter-node/README.md @@ -15,7 +15,11 @@ export default { adapter: adapter({ // default options are shown out: 'build', - precompress: false + precompress: false, + env: { + host: 'HOST', + port: 'PORT' + } }) } }; @@ -31,7 +35,7 @@ The directory to build the server to. It defaults to `build` — i.e. `node buil Enables precompressing using gzip and brotli for assets and prerendered pages. It defaults to `false`. -## Environment variables +### env By default, the server will accept connections on `0.0.0.0` using port 3000. These can be customised with the `PORT` and `HOST` environment variables: @@ -39,6 +43,8 @@ By default, the server will accept connections on `0.0.0.0` using port 3000. The HOST=127.0.0.1 PORT=4000 node build ``` +You can specify different environment variables if necessary using the `env` option. + ## License [MIT](LICENSE) diff --git a/packages/adapter-node/index.d.ts b/packages/adapter-node/index.d.ts index 2132e79d9a73..1c55b1d5b074 100644 --- a/packages/adapter-node/index.d.ts +++ b/packages/adapter-node/index.d.ts @@ -1,6 +1,10 @@ declare function plugin(options?: { out?: string; precompress?: boolean; + env?: { + host?: string; + port?: string; + }; }): import('@sveltejs/kit').Adapter; export = plugin; diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 095109c10572..7fd2de3773e5 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -1,4 +1,4 @@ -import { readFileSync, statSync, createReadStream, createWriteStream } from 'fs'; +import { readFileSync, statSync, createReadStream, createWriteStream, writeFileSync } from 'fs'; import { join } from 'path'; import { fileURLToPath } from 'url'; import { pipeline } from 'stream'; @@ -12,10 +12,18 @@ const pipe = promisify(pipeline); /** * @param {{ * out?: string; - * precompress?: boolean + * precompress?: boolean; + * env?: { + * host?: string; + * port?: string; + * }; * }} options */ -export default function ({ out = 'build', precompress } = {}) { +export default function ({ + out = 'build', + precompress, + env: { host: host_env = 'HOST', port: port_env = 'PORT' } = {} +} = {}) { /** @type {import('@sveltejs/kit').Adapter} */ const adapter = { name: '@sveltejs/adapter-node', @@ -34,6 +42,12 @@ export default function ({ out = 'build', precompress } = {}) { utils.log.minor('Building server'); const files = fileURLToPath(new URL('./files', import.meta.url)); utils.copy(files, '.svelte-kit/node'); + writeFileSync( + join(files, 'env.js'), + `export const host = process.env[${JSON.stringify( + host_env + )}] || '0.0.0.0';\nexport const port = process.env[${JSON.stringify(port_env)}] || 3000;` + ); await esbuild.build({ entryPoints: ['.svelte-kit/node/index.js'], outfile: join(out, 'index.js'), diff --git a/packages/adapter-node/rollup.config.js b/packages/adapter-node/rollup.config.js index f3e467c1f300..89fa8e65ea78 100644 --- a/packages/adapter-node/rollup.config.js +++ b/packages/adapter-node/rollup.config.js @@ -10,5 +10,5 @@ export default { sourcemap: true }, plugins: [nodeResolve(), commonjs(), json()], - external: ['../output/server/app.js', ...require('module').builtinModules] + external: ['../output/server/app.js', './env.js', ...require('module').builtinModules] }; diff --git a/packages/adapter-node/src/index.js b/packages/adapter-node/src/index.js index b678c3c978c3..6914d4828e70 100644 --- a/packages/adapter-node/src/index.js +++ b/packages/adapter-node/src/index.js @@ -2,11 +2,10 @@ import './require_shim'; import { createServer } from './server'; // TODO hardcoding the relative location makes this brittle import { render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved +import { host, port } from './env.js'; // eslint-disable-line import/no-unresolved -const { HOST = '0.0.0.0', PORT = 3000 } = process.env; - -const instance = createServer({ render }).listen(PORT, HOST, () => { - console.log(`Listening on port ${PORT}`); +const instance = createServer({ render }).listen(port, host, () => { + console.log(`Listening on port ${port}`); }); export { instance }; From cb9afdc37a6b1cbe546782a308880f24304e6289 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 24 Jun 2021 15:26:09 -0400 Subject: [PATCH 067/129] Version Packages (next) (#1755) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 1 + packages/adapter-node/CHANGELOG.md | 6 ++++++ packages/adapter-node/package.json | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index ad4359533a46..8b27df073ffc 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -65,6 +65,7 @@ "cold-pants-unite", "cool-hounds-divide", "cool-spoons-dress", + "curvy-eggs-sip", "curvy-sloths-brake", "cyan-roses-act", "cyan-seals-trade", diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index 8331139f24d7..62bb420827aa 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-node +## 1.0.0-next.28 + +### Patch Changes + +- 1c8bdba: Allow the environment variables containing the host and port to serve on to be customised + ## 1.0.0-next.27 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index fa8a7a0f9193..d76e0afd2373 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.27", + "version": "1.0.0-next.28", "type": "module", "exports": { "import": "./index.js" From aa5cf1580ab96205b08548f32b24b31817552ab7 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 24 Jun 2021 15:42:54 -0400 Subject: [PATCH 068/129] Fix adapter-node regression (#1756) --- .changeset/chilled-kiwis-drop.md | 5 +++++ packages/adapter-node/index.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/chilled-kiwis-drop.md diff --git a/.changeset/chilled-kiwis-drop.md b/.changeset/chilled-kiwis-drop.md new file mode 100644 index 000000000000..6253bfbefd79 --- /dev/null +++ b/.changeset/chilled-kiwis-drop.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +Fix regression caused by writing `env.js` to the wrong path diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 7fd2de3773e5..57a4a4c5b429 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -43,7 +43,7 @@ export default function ({ const files = fileURLToPath(new URL('./files', import.meta.url)); utils.copy(files, '.svelte-kit/node'); writeFileSync( - join(files, 'env.js'), + '.svelte-kit/node/env.js', `export const host = process.env[${JSON.stringify( host_env )}] || '0.0.0.0';\nexport const port = process.env[${JSON.stringify(port_env)}] || 3000;` From 2a4c53f2355d9db3b48d712c656e048e4c57f9be Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 24 Jun 2021 15:44:25 -0400 Subject: [PATCH 069/129] Version Packages (next) (#1757) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 1 + packages/adapter-node/CHANGELOG.md | 6 ++++++ packages/adapter-node/package.json | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 8b27df073ffc..6c4f7a7b67c3 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -50,6 +50,7 @@ "chatty-pumas-shake", "chatty-steaks-yell", "chilled-books-dress", + "chilled-kiwis-drop", "chilled-starfishes-jog", "chilled-zebras-check", "chilly-files-greet", diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index 62bb420827aa..fdbfa54c9dd1 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-node +## 1.0.0-next.29 + +### Patch Changes + +- aa5cf15: Fix regression caused by writing `env.js` to the wrong path + ## 1.0.0-next.28 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index d76e0afd2373..b38da3e0ed92 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.28", + "version": "1.0.0-next.29", "type": "module", "exports": { "import": "./index.js" From 828732c4675e5cd0cb1903966e89333866e32b74 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 24 Jun 2021 13:11:56 -0700 Subject: [PATCH 070/129] Specify actual Svelte version requirement (#1751) --- .changeset/rich-pumpkins-applaud.md | 5 +++++ packages/kit/package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/rich-pumpkins-applaud.md diff --git a/.changeset/rich-pumpkins-applaud.md b/.changeset/rich-pumpkins-applaud.md new file mode 100644 index 000000000000..97c54b1d67ed --- /dev/null +++ b/.changeset/rich-pumpkins-applaud.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Specify actual Svelte version requirement diff --git a/packages/kit/package.json b/packages/kit/package.json index 061c6e7a971d..c8ac6a620831 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -39,7 +39,7 @@ "uvu": "^0.5.1" }, "peerDependencies": { - "svelte": "^3.38.2" + "svelte": "^3.34.0" }, "bin": { "svelte-kit": "svelte-kit.js" From f4c84408e6709e2d8780d6abb6805c71328c31f3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 24 Jun 2021 13:15:37 -0700 Subject: [PATCH 071/129] Version Packages (next) (#1758) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 1 + packages/kit/CHANGELOG.md | 6 ++++++ packages/kit/package.json | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 6c4f7a7b67c3..2ad15ea8c5a5 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -220,6 +220,7 @@ "real-bikes-matter", "real-cherries-exercise", "rich-clocks-chew", + "rich-pumpkins-applaud", "rotten-cats-pump", "rotten-singers-taste", "rude-olives-wink", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index aa9e77605d85..4cdf134d54ad 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/kit +## 1.0.0-next.117 + +### Patch Changes + +- 828732c: Specify actual Svelte version requirement + ## 1.0.0-next.116 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index c8ac6a620831..09fec93f478a 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.116", + "version": "1.0.0-next.117", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From 5418254808fd7d10cfd74d1e8c753bae68c831cc Mon Sep 17 00:00:00 2001 From: mou-t <56465840+mou-t@users.noreply.github.com> Date: Sat, 26 Jun 2021 23:41:54 +0900 Subject: [PATCH 072/129] Fix regex for getting links to crawl during prerendering (#1743) Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/eighty-candles-grow.md | 5 +++++ packages/kit/src/core/adapt/prerender.js | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/eighty-candles-grow.md diff --git a/.changeset/eighty-candles-grow.md b/.changeset/eighty-candles-grow.md new file mode 100644 index 000000000000..96bd03c4878a --- /dev/null +++ b/.changeset/eighty-candles-grow.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Fix regex for getting links to crawl during prerendering diff --git a/packages/kit/src/core/adapt/prerender.js b/packages/kit/src/core/adapt/prerender.js index 9ac50dc305b7..43d15e7e49a8 100644 --- a/packages/kit/src/core/adapt/prerender.js +++ b/packages/kit/src/core/adapt/prerender.js @@ -16,13 +16,13 @@ function clean_html(html) { /** @param {string} attrs */ function get_href(attrs) { - const match = /[\s'"]href\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/.exec(attrs); + const match = /([\s'"]|^)href\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/.exec(attrs); return match && (match[1] || match[2] || match[3]); } /** @param {string} attrs */ function get_src(attrs) { - const match = /[\s'"]src\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/.exec(attrs); + const match = /([\s'"]|^)src\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/.exec(attrs); return match && (match[1] || match[2] || match[3]); } @@ -30,7 +30,7 @@ function get_src(attrs) { function get_srcset_urls(attrs) { const results = []; // Note that the srcset allows any ASCII whitespace, including newlines. - const match = /[\s'"]srcset\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/s.exec(attrs); + const match = /([\s'"]|^)srcset\s*=\s*(?:"(.*?)"|'(.*?)'|([^\s>]*))/s.exec(attrs); if (match) { const attr_content = match[1] || match[2] || match[3]; // Parse the content of the srcset attribute. From b556c550be1820814cfbb91151343d085fb491fd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 26 Jun 2021 07:51:28 -0700 Subject: [PATCH 073/129] Version Packages (next) (#1763) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 1 + packages/kit/CHANGELOG.md | 6 ++++++ packages/kit/package.json | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 2ad15ea8c5a5..34f4a38ea761 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -75,6 +75,7 @@ "dull-tigers-type", "early-chairs-protect", "early-wasps-obey", + "eighty-candles-grow", "eighty-carrots-heal", "famous-rules-sort", "famous-turtles-appear", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 4cdf134d54ad..e5cb1c0c75eb 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/kit +## 1.0.0-next.118 + +### Patch Changes + +- 5418254: Fix regex for getting links to crawl during prerendering + ## 1.0.0-next.117 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 09fec93f478a..264be0fa1f12 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.117", + "version": "1.0.0-next.118", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From 7292bc757eca75ffa4d56de342417aa6280877d3 Mon Sep 17 00:00:00 2001 From: Moritz Hedtke <13287984+mohe2015@users.noreply.github.com> Date: Mon, 28 Jun 2021 21:58:16 +0200 Subject: [PATCH 074/129] Add note to install test dependencies (#1704) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 32ecd0fab439..f7a15f3dce00 100644 --- a/README.md +++ b/README.md @@ -55,3 +55,5 @@ npm publish --access=public ### Testing Run `pnpm test` to run the tests from all subpackages. Browser tests live in subdirectories of `packages/kit/test` such as `packages/kit/test/apps/basics`. To run a single test, open up the file and change `test` to `test.only` for the relevant test. + +You may need to install some dependencies first e.g. with `npx playwright install-deps` (which only works on Ubuntu). From 80dbda8b32f54c07ae31cf8d3f23761f3534e873 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 16:42:28 -0400 Subject: [PATCH 075/129] make test a little easier to understand --- packages/kit/test/apps/basics/src/hooks.js | 2 +- .../apps/basics/src/routes/load/_tests.js | 27 +++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/kit/test/apps/basics/src/hooks.js b/packages/kit/test/apps/basics/src/hooks.js index 9286ae312cdb..c68de807e783 100644 --- a/packages/kit/test/apps/basics/src/hooks.js +++ b/packages/kit/test/apps/basics/src/hooks.js @@ -30,7 +30,7 @@ export async function serverFetch(request) { let newRequest = request; if (request.url.endsWith('/server-fetch-request.json')) { newRequest = new Request( - request.url.replace('/server-fetch-request.json', '/server-fetch-request2.json'), + request.url.replace('/server-fetch-request.json', '/server-fetch-request-modified.json'), request ); } diff --git a/packages/kit/test/apps/basics/src/routes/load/_tests.js b/packages/kit/test/apps/basics/src/routes/load/_tests.js index 5fe1543b7eb9..6be4beae2041 100644 --- a/packages/kit/test/apps/basics/src/routes/load/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/load/_tests.js @@ -184,26 +184,22 @@ export default function (test, is_dev) { test('handles external api', '/load', async ({ base, page }) => { const port = await ports.find(4000); - const files_names = ['/server-fetch-request.json', '/server-fetch-request2.json']; - - let times_responded = 0; - let expect_answer = 42; + /** @type {string[]} */ + const requested_urls = []; const server = http.createServer(async (req, res) => { - if (files_names.includes(req.url)) { - times_responded += 1; + requested_urls.push(req.url); + if (req.url === '/server-fetch-request-modified.json') { res.writeHead(200, { 'Access-Control-Allow-Origin': '*', 'content-type': 'application/json' }); - if (req.url === files_names[0]) { - res.end(JSON.stringify({ answer: expect_answer })); - } else { - expect_answer = 43; - res.end(JSON.stringify({ answer: expect_answer })); - } + res.end(JSON.stringify({ answer: 42 })); + } else { + res.statusCode = 404; + res.end('not found'); } }); @@ -213,8 +209,11 @@ export default function (test, is_dev) { await page.goto(`${base}/load/server-fetch-request?port=${port}`); - assert.equal(times_responded, 1); - assert.equal(await page.textContent('h1'), `the answer is ${expect_answer}`); + assert.equal(requested_urls, [ + '/server-fetch-request-modified.json' + ]); + + assert.equal(await page.textContent('h1'), 'the answer is 42'); server.close(); }); From 315ffe169300bb7a1b7e706ab50a09ef4e2ab9a1 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 17:01:21 -0400 Subject: [PATCH 076/129] edit docs --- documentation/docs/04-hooks.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/documentation/docs/04-hooks.md b/documentation/docs/04-hooks.md index 0f0e6e1352d8..1cc81424e617 100644 --- a/documentation/docs/04-hooks.md +++ b/documentation/docs/04-hooks.md @@ -90,7 +90,9 @@ export function getSession(request) { ### serverFetch -This function provides possibilities to replace `fetch` on the server-side for the external API requests. It's beneficial if you want to retrieve resources differently from what it is doing on the browser. For example, if you want to change URL or headers for server-side only. +This function allows you to modify (or replace) a `fetch` request for an **external resource** that happens inside a `load` function that runs on the server (or during pre-rendering). + +For example, your `load` function might make a request to a public URL like `https://api.yourapp.com` when the user performs a client-side navigation to the respective page, but during SSR it might make sense to hit the API directly (bypassing whatever proxies and load balancers sit between it and the public internet). ```ts type ServerFetch = (req: Request) => Promise; @@ -99,14 +101,14 @@ type ServerFetch = (req: Request) => Promise; ```js /** @type {import('@sveltejs/kit').ServerFetch} */ export async function serverFetch(request) { - let newRequest = request; - if (request.url.startsWith('https://my.site/api')) { - newRequest = new Request( - request.url.replace('https://my.site/api', 'http://localhost:9999/'), - request, + if (request.url.startsWith('https://api.yourapp.com/')) { + // clone the original request, but change the URL + request = new Request( + request.url.replace('https://api.yourapp.com/', 'http://localhost:9999/'), + request ); } - return fetch(newRequest); + return fetch(request); } ``` From 064f84841260fa4abac3f819e2d21de616d93f19 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 17:02:17 -0400 Subject: [PATCH 077/129] changeset --- .changeset/pretty-beans-wash.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/pretty-beans-wash.md diff --git a/.changeset/pretty-beans-wash.md b/.changeset/pretty-beans-wash.md new file mode 100644 index 000000000000..bbf17a48c4a3 --- /dev/null +++ b/.changeset/pretty-beans-wash.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Implement serverFetch hook From 6ace879521cff9125a5ee748103a710b8f558786 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 17:08:04 -0400 Subject: [PATCH 078/129] lint --- packages/kit/test/apps/basics/src/routes/load/_tests.js | 5 +---- packages/kit/types/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/kit/test/apps/basics/src/routes/load/_tests.js b/packages/kit/test/apps/basics/src/routes/load/_tests.js index 6be4beae2041..347ba590d75d 100644 --- a/packages/kit/test/apps/basics/src/routes/load/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/load/_tests.js @@ -209,10 +209,7 @@ export default function (test, is_dev) { await page.goto(`${base}/load/server-fetch-request?port=${port}`); - assert.equal(requested_urls, [ - '/server-fetch-request-modified.json' - ]); - + assert.equal(requested_urls, ['/server-fetch-request-modified.json']); assert.equal(await page.textContent('h1'), 'the answer is 42'); server.close(); diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 869cd5c9a525..38c707980c98 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -13,4 +13,4 @@ export { ServerRequest as Request, ServerResponse as Response, ServerFetch -} from './hooks'; \ No newline at end of file +} from './hooks'; From 43ea61d9dc7984089a4667a9e7add2fac4d03f11 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 17:49:09 -0400 Subject: [PATCH 079/129] tweak --- packages/kit/types/ambient-modules.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/types/ambient-modules.d.ts b/packages/kit/types/ambient-modules.d.ts index 7319bcfda941..c8b62d18957c 100644 --- a/packages/kit/types/ambient-modules.d.ts +++ b/packages/kit/types/ambient-modules.d.ts @@ -22,7 +22,7 @@ declare module '$app/navigation' { * Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified href. * * @param href Where to navigate to - * @param opts Optional. If `replaceState` is `true`, a new history entry won't be created. If `noscroll` is `true`, the browser won't scroll to the top of the page after navigation. If `keepfocus` is `true`, the browser won't focus the body element / unfocus the current element. If state is set, its value will be used to set the initital state of the new history entry, it defaults to `{}` + * @param opts Optional. If `replaceState` is `true`, a new history entry won't be created. If `noscroll` is `true`, the browser won't scroll to the top of the page after navigation. If `keepfocus` is `true`, the browser won't focus the body element / unfocus the current element. If state is set, its value will be used to set the initial state of the new history entry, which defaults to `{}` */ export function goto( href: string, From 81937ef6c8f9114c32d7aab4b859d8ca981d5f49 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 17:55:14 -0400 Subject: [PATCH 080/129] Update 05-modules.md --- documentation/docs/05-modules.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/documentation/docs/05-modules.md b/documentation/docs/05-modules.md index 2b2f0359e1b5..733446ef1999 100644 --- a/documentation/docs/05-modules.md +++ b/documentation/docs/05-modules.md @@ -21,7 +21,11 @@ import { amp, browser, dev, prerendering } from '$app/env'; import { goto, invalidate, prefetch, prefetchRoutes } from '$app/navigation'; ``` -- `goto(href, { replaceState, noscroll, keepfocus, state })` returns a `Promise` that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `href`. The second argument is optional. If `replaceState` is true, a new history entry won't be created. If `noscroll` is true, the browser won't scroll to the top of the page after navigation. If `keepfocus` is true, the browser won't focus the body element / unfocus the current element. If state is set, its value will be used to set the initital state of the new history entry, it defaults to `{}`. +- `goto(href, { replaceState, noscroll, keepfocus, state })` returns a `Promise` that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `href`. The second argument is optional: + - `replaceState` (boolean, default `false`) If `true`, will replace the current `history` entry rather than creating a new one with `pushState` + - `noscroll` (boolean, default `false`) If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation + - `keepfocus` (boolean, default `false`) If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body + - `state` (object, default `{}`) The state of the new/updated history entry - `invalidate(href)` causes any `load` functions belonging to the currently active page to re-run if they `fetch` the resource in question. It returns a `Promise` that resolves when the page is subsequently updated. - `prefetch(href)` programmatically prefetches the given page, which means a) ensuring that the code for the page is loaded, and b) calling the page's `load` function with the appropriate options. This is the same behaviour that SvelteKit triggers when the user taps or mouses over an `` element with [sveltekit:prefetch](#anchor-options-sveltekit-prefetch). If the next navigation is to `href`, the values returned from `load` will be used, making navigation instantaneous. Returns a `Promise` that resolves when the prefetch is complete. - `prefetchRoutes(routes)` — programmatically prefetches the code for routes that haven't yet been fetched. Typically, you might call this to speed up subsequent navigation. If no argument is given, all routes will be fetched; otherwise, you can specify routes by any matching pathname such as `/about` (to match `src/routes/about.svelte`) or `/blog/*` (to match `src/routes/blog/[slug].svelte`). Unlike `prefetch`, this won't call `load` for individual pages. Returns a `Promise` that resolves when the routes have been prefetched. From a81460f0177114f78a636b36ad80808a08e5e34b Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 18:03:28 -0400 Subject: [PATCH 081/129] tidy up definition --- packages/kit/types/ambient-modules.d.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/kit/types/ambient-modules.d.ts b/packages/kit/types/ambient-modules.d.ts index c8b62d18957c..8ba5a67d3420 100644 --- a/packages/kit/types/ambient-modules.d.ts +++ b/packages/kit/types/ambient-modules.d.ts @@ -22,9 +22,11 @@ declare module '$app/navigation' { * Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified href. * * @param href Where to navigate to - * @param opts Optional. If `replaceState` is `true`, a new history entry won't be created. If `noscroll` is `true`, the browser won't scroll to the top of the page after navigation. If `keepfocus` is `true`, the browser won't focus the body element / unfocus the current element. If state is set, its value will be used to set the initial state of the new history entry, which defaults to `{}` - */ - export function goto( + * @param opts.replaceState If `true`, will replace the current `history` entry rather than creating a new one with `pushState` + * @param opts.noscroll If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation + * @param opts.keepfocus If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body + * @param opts.state The state of the new/updated history entry + */export function goto( href: string, opts?: { replaceState?: boolean; noscroll?: boolean; keepfocus?: boolean; state?: any } ): Promise; From 41783ede6d9745d86cfdf09a0a9ebe55447cbbef Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 18:14:31 -0400 Subject: [PATCH 082/129] lint --- packages/kit/types/ambient-modules.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/kit/types/ambient-modules.d.ts b/packages/kit/types/ambient-modules.d.ts index 8ba5a67d3420..454e8d5b5348 100644 --- a/packages/kit/types/ambient-modules.d.ts +++ b/packages/kit/types/ambient-modules.d.ts @@ -26,7 +26,8 @@ declare module '$app/navigation' { * @param opts.noscroll If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation * @param opts.keepfocus If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body * @param opts.state The state of the new/updated history entry - */export function goto( + */ + export function goto( href: string, opts?: { replaceState?: boolean; noscroll?: boolean; keepfocus?: boolean; state?: any } ): Promise; From 882fb126291c21fb195f1189ad78c1d49eae8d55 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 28 Jun 2021 18:14:54 -0400 Subject: [PATCH 083/129] changeset --- .changeset/wild-clouds-hear.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/wild-clouds-hear.md diff --git a/.changeset/wild-clouds-hear.md b/.changeset/wild-clouds-hear.md new file mode 100644 index 000000000000..93d7bbaf0657 --- /dev/null +++ b/.changeset/wild-clouds-hear.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Add keepfocus option to goto From 5cea0c2e1b350d4f1794d5dd9572c940178c3478 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 28 Jun 2021 19:57:26 -0700 Subject: [PATCH 084/129] Fix broken link in migration guide --- documentation/migrating/04-pages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/migrating/04-pages.md b/documentation/migrating/04-pages.md index e17b1cb13d16..ea99610ecc92 100644 --- a/documentation/migrating/04-pages.md +++ b/documentation/migrating/04-pages.md @@ -35,7 +35,7 @@ const { preloading, page, session } = stores(); The `page` and `session` stores still exist; `preloading` has been replaced with a `navigating` store that contains `from` and `to` properties. -You access them differently in SvelteKit. `stores` is now `getStores`, but in most cases it is unnecessary since you can import `navigating`, `page` and `session` directly from [`$app/stores`](/docs#modules-app-stores). +You access them differently in SvelteKit. `stores` is now `getStores`, but in most cases it is unnecessary since you can import `navigating`, `page` and `session` directly from [`$app/stores`](/docs#modules-$app-stores). ### Routing From 5cac54e740d0da24f7e4096a53f10455fbd4a696 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 29 Jun 2021 10:47:47 -0400 Subject: [PATCH 085/129] Version Packages (next) (#1772) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 2 ++ packages/kit/CHANGELOG.md | 7 +++++++ packages/kit/package.json | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 34f4a38ea761..0ad84a63122a 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -202,6 +202,7 @@ "poor-terms-explain", "poor-years-hear", "popular-masks-cheat", + "pretty-beans-wash", "pretty-cycles-learn", "pretty-drinks-cough", "pretty-foxes-attend", @@ -342,6 +343,7 @@ "wicked-oranges-share", "wicked-spies-invite", "wild-beans-happen", + "wild-clouds-hear", "wild-cooks-drive", "wild-pumas-jam", "wise-bees-juggle", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index e5cb1c0c75eb..2672dd80a7e9 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,12 @@ # @sveltejs/kit +## 1.0.0-next.119 + +### Patch Changes + +- 064f848: Implement serverFetch hook +- 882fb12: Add keepfocus option to goto + ## 1.0.0-next.118 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 264be0fa1f12..b388f3c70fae 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.118", + "version": "1.0.0-next.119", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From 325c22354e57ebc150aef2c1622fececcbce1f29 Mon Sep 17 00:00:00 2001 From: Daniel Velasquez <42185968+dannyvelas@users.noreply.github.com> Date: Thu, 1 Jul 2021 03:35:02 -0400 Subject: [PATCH 086/129] [feat] Improve RequestHandler and EndpointOutput type declarations (#1778) Created DefaultBody type, which can be used as the default for Request or Response bodies. Added a generic parameter to `RequestHandler` and an generic parameter to `EndpointOutput`. Together, these let you specify the type of the body of the Response you want to return from a RequestHandler function. The default of both of these parameters is `DefaultBody`. --- .changeset/tall-hotels-punch.md | 5 +++++ packages/kit/types/endpoint.d.ts | 14 +++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 .changeset/tall-hotels-punch.md diff --git a/.changeset/tall-hotels-punch.md b/.changeset/tall-hotels-punch.md new file mode 100644 index 000000000000..950c067fd7d6 --- /dev/null +++ b/.changeset/tall-hotels-punch.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Improve RequestHandler and EndpointOutput type declarations. diff --git a/packages/kit/types/endpoint.d.ts b/packages/kit/types/endpoint.d.ts index 9ec411497c70..6bea8b19b1cb 100644 --- a/packages/kit/types/endpoint.d.ts +++ b/packages/kit/types/endpoint.d.ts @@ -10,12 +10,16 @@ type JSONValue = | JSONValue[] | { [key: string]: JSONValue }; -export type EndpointOutput = { +type DefaultBody = JSONValue | Uint8Array; + +export type EndpointOutput = { status?: number; headers?: Partial; - body?: JSONValue | Uint8Array; + body?: Body; }; -export type RequestHandler, Body = unknown> = ( - request: ServerRequest -) => MaybePromise; +export type RequestHandler< + Locals = Record, + Input = unknown, + Output extends DefaultBody = DefaultBody +> = (request: ServerRequest) => MaybePromise>; From 0d69e556851a02678f8694f948517fc6ec85df86 Mon Sep 17 00:00:00 2001 From: Sean Lailvaux <142589+seanlail@users.noreply.github.com> Date: Thu, 1 Jul 2021 12:23:06 +0100 Subject: [PATCH 087/129] [feat] Add generic type for session (#1791) --- .changeset/sharp-geckos-beam.md | 5 +++++ packages/kit/types/ambient-modules.d.ts | 4 ++-- packages/kit/types/page.d.ts | 28 ++++++++++++++++++------- 3 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 .changeset/sharp-geckos-beam.md diff --git a/.changeset/sharp-geckos-beam.md b/.changeset/sharp-geckos-beam.md new file mode 100644 index 000000000000..e70a69da799f --- /dev/null +++ b/.changeset/sharp-geckos-beam.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Add generic type for session diff --git a/packages/kit/types/ambient-modules.d.ts b/packages/kit/types/ambient-modules.d.ts index 454e8d5b5348..cc6041cc7bc1 100644 --- a/packages/kit/types/ambient-modules.d.ts +++ b/packages/kit/types/ambient-modules.d.ts @@ -81,10 +81,10 @@ declare module '$app/stores' { * A convenience function around `getContext` that returns `{ navigating, page, session }`. * Most of the time, you won't need to use it. */ - export function getStores(): { + export function getStores(): { navigating: Readable; page: Readable; - session: Writable; + session: Writable; }; /** * A readable store whose value reflects the object passed to load functions. diff --git a/packages/kit/types/page.d.ts b/packages/kit/types/page.d.ts index 1e3331c7a02a..cf2058d47048 100644 --- a/packages/kit/types/page.d.ts +++ b/packages/kit/types/page.d.ts @@ -2,18 +2,20 @@ import { Location as Page, MaybePromise, InferValue } from './helper'; export type LoadInput< PageParams extends Record = Record, - Context extends Record = Record + Context extends Record = Record, + Session = any > = { page: Page; fetch: (info: RequestInfo, init?: RequestInit) => Promise; - session: any; + session: Session; context: Context; }; export type ErrorLoadInput< PageParams extends Record = Record, - Context extends Record = Record -> = LoadInput & { + Context extends Record = Record, + Session = any +> = LoadInput & { status: number; error: Error; }; @@ -32,12 +34,17 @@ export type LoadOutput< // Publicized Types export type Load< - Input extends { context?: Record; pageParams?: Record } = {}, + Input extends { + context?: Record; + pageParams?: Record; + session?: any; + } = {}, Output extends { context?: Record; props?: Record } = {} > = ( input: LoadInput< InferValue>, - InferValue> + InferValue>, + InferValue > ) => MaybePromise>, @@ -45,12 +52,17 @@ export type Load< >>; export type ErrorLoad< - Input extends { context?: Record; pageParams?: Record } = {}, + Input extends { + context?: Record; + pageParams?: Record; + session?: any; + } = {}, Output extends { context?: Record; props?: Record } = {} > = ( input: ErrorLoadInput< InferValue>, - InferValue> + InferValue>, + InferValue > ) => MaybePromise< LoadOutput< From 9fd30326218efc03cd76efe9a433f9718f8eee77 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 1 Jul 2021 22:20:00 -0400 Subject: [PATCH 088/129] =?UTF-8?q?clarify=20prerendering=20=E2=80=94=20al?= =?UTF-8?q?ternative=20to=20#1508=20(#1773)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- documentation/docs/11-ssr-and-javascript.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/docs/11-ssr-and-javascript.md b/documentation/docs/11-ssr-and-javascript.md index 756ee67b4a96..22dbef0210ac 100644 --- a/documentation/docs/11-ssr-and-javascript.md +++ b/documentation/docs/11-ssr-and-javascript.md @@ -50,7 +50,7 @@ Ordinarily, SvelteKit 'hydrates' your server-rendered HTML into an interactive p ### prerender -It's likely that at least some pages of your app can be represented as a simple HTML file, since they contain no dynamic or user-specific data. These pages can be _prerendered_ by your [adapter](#adapters). +It's likely that at least some pages of your app can be represented as a simple HTML file, since they contain no dynamic or user-specific data. These pages can be _prerendered_ by your [adapter](#adapters), which typically results in better performance and lower costs (since CDNs can make assumptions about static content that they can't make about dynamically server-rendered content, unless your cache headers are expertly configured). If your entire app is suitable for prerendering, you could use [`adapter-static`](https://github.com/sveltejs/kit/tree/master/packages/adapter-static), which will generate HTML files for every page, plus additional files that are requested by `load` functions in those pages. @@ -68,7 +68,7 @@ The prerenderer will start at the root of your app and generate HTML for any pre The basic rule is this: for a page to be prerenderable, any two users hitting it directly must get the same content from the server. -> In other words, any app that involves user sessions or authentication is _not_ a candidate for `adapter-static`, even if individual pages within an app _are_ suitable for prerendering. +> In other words, any app that involves user sessions or authentication is _not_ a candidate for `adapter-static`, even if individual pages within an app _are_ suitable for prerendering. You can of course fetch personalized data in `onMount` in a prerendered page, but this may result in a poorer user experience since it will involve blank initial content or loading indicators. Note that you can still prerender pages that load data based on the page's parameters, like our `src/routes/blog/[slug].svelte` example from earlier. The prerenderer will intercept requests made inside `load`, so the data served from `src/routes/blog/[slug].json.js` will also be captured. From 9fbaeda38f848b32ccbb6dd174ff011e9ff417a1 Mon Sep 17 00:00:00 2001 From: kvn-shn <66770766+kvn-shn@users.noreply.github.com> Date: Fri, 2 Jul 2021 04:52:20 +0200 Subject: [PATCH 089/129] fix: attribute validation for generated script tag (#1768) * fix: incorrect attributes for generated script tag * tweak things a bit Co-authored-by: Kevin Schneider Co-authored-by: Rich Harris --- .changeset/olive-maps-join.md | 5 +++++ packages/kit/src/runtime/client/renderer.js | 4 ++-- packages/kit/src/runtime/server/page/render.js | 7 ++++--- packages/kit/test/apps/amp/src/routes/valid/_tests.js | 2 +- packages/kit/test/apps/basics/src/routes/load/_tests.js | 6 +++--- .../kit/test/apps/basics/src/routes/no-hydrate/_tests.js | 4 +++- 6 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 .changeset/olive-maps-join.md diff --git a/.changeset/olive-maps-join.md b/.changeset/olive-maps-join.md new file mode 100644 index 000000000000..e07003c51951 --- /dev/null +++ b/.changeset/olive-maps-join.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +fix attribute validation in generated script tag diff --git a/packages/kit/src/runtime/client/renderer.js b/packages/kit/src/runtime/client/renderer.js index 537c2dee7619..572432dbc688 100644 --- a/packages/kit/src/runtime/client/renderer.js +++ b/packages/kit/src/runtime/client/renderer.js @@ -39,10 +39,10 @@ function page_store(value) { function initial_fetch(resource, opts) { const url = typeof resource === 'string' ? resource : resource.url; - let selector = `script[type="svelte-data"][url="${url}"]`; + let selector = `script[data-type="svelte-data"][data-url="${url}"]`; if (opts && typeof opts.body === 'string') { - selector += `[body="${hash(opts.body)}"]`; + selector += `[data-body="${hash(opts.body)}"]`; } const script = document.querySelector(selector); diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index e6538758ba6c..c98f4597cf99 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -159,9 +159,10 @@ export async function render_response({ ${serialized_data .map(({ url, body, json }) => { - return body - ? `` - : ``; + let attributes = `type="application/json" data-type="svelte-data" data-url="${url}"`; + if (body) attributes += ` data-body="${hash(body)}"`; + + return ``; }) .join('\n\n\t\t\t')} `.replace(/^\t{2}/gm, ''); diff --git a/packages/kit/test/apps/amp/src/routes/valid/_tests.js b/packages/kit/test/apps/amp/src/routes/valid/_tests.js index 0224a4de49b1..44b9bc039bbf 100644 --- a/packages/kit/test/apps/amp/src/routes/valid/_tests.js +++ b/packages/kit/test/apps/amp/src/routes/valid/_tests.js @@ -11,7 +11,7 @@ export default function (test, is_dev) { assert.equal(await page.innerHTML('h2'), 'The answer is 42'); assert.equal(await page.innerHTML('p'), 'amp is true'); - const script = await page.$('script[type="svelte-data"]'); + const script = await page.$('script[data-type="svelte-data"]'); assert.ok(!script, 'Should not include serialized data'); }); diff --git a/packages/kit/test/apps/basics/src/routes/load/_tests.js b/packages/kit/test/apps/basics/src/routes/load/_tests.js index 347ba590d75d..3de7b3db7ced 100644 --- a/packages/kit/test/apps/basics/src/routes/load/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/load/_tests.js @@ -18,7 +18,7 @@ export default function (test, is_dev) { if (!js) { // by the time JS has run, hydration will have nuked these scripts - const script_contents = await page.innerHTML('script[type="svelte-data"]'); + const script_contents = await page.innerHTML('script[data-type="svelte-data"]'); assert.equal(script_contents, payload, 'Page should contain serialized data'); } @@ -46,11 +46,11 @@ export default function (test, is_dev) { if (!js) { // by the time JS has run, hydration will have nuked these scripts const script_contents_a = await page.innerHTML( - 'script[type="svelte-data"][url="/load/serialization-post.json"][body="3t25"]' + 'script[data-type="svelte-data"][data-url="/load/serialization-post.json"][data-body="3t25"]' ); const script_contents_b = await page.innerHTML( - 'script[type="svelte-data"][url="/load/serialization-post.json"][body="3t24"]' + 'script[data-type="svelte-data"][data-url="/load/serialization-post.json"][data-body="3t24"]' ); assert.equal(script_contents_a, payload_a, 'Page should contain serialized data'); diff --git a/packages/kit/test/apps/basics/src/routes/no-hydrate/_tests.js b/packages/kit/test/apps/basics/src/routes/no-hydrate/_tests.js index ce69035afeac..646b73c322de 100644 --- a/packages/kit/test/apps/basics/src/routes/no-hydrate/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/no-hydrate/_tests.js @@ -15,7 +15,9 @@ export default function (test, is_dev) { } else { // ensure data wasn't inlined assert.equal( - await page.evaluate(() => document.querySelectorAll('script[type="svelte-data"]').length), + await page.evaluate( + () => document.querySelectorAll('script[data-type="svelte-data"]').length + ), 0 ); } From ae3ef1964f1647398cbde7798510daf1b30e4a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20Limell?= Date: Fri, 2 Jul 2021 05:30:42 +0200 Subject: [PATCH 090/129] Fail if config.kit.appDir starts or ends with a slash (#1695) * kit.appDir cannot start or end with a slash * Added changeset --- .changeset/wild-poets-rescue.md | 5 ++++ documentation/docs/14-configuration.md | 2 +- packages/kit/src/core/config/index.js | 14 ++++++--- packages/kit/src/core/config/index.spec.js | 34 ++++++++++++++++++++-- 4 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 .changeset/wild-poets-rescue.md diff --git a/.changeset/wild-poets-rescue.md b/.changeset/wild-poets-rescue.md new file mode 100644 index 000000000000..d5d58a94c182 --- /dev/null +++ b/.changeset/wild-poets-rescue.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Fail if config.kit.appDir starts or ends with a slash diff --git a/documentation/docs/14-configuration.md b/documentation/docs/14-configuration.md index 598704a5d02b..e85934903e8d 100644 --- a/documentation/docs/14-configuration.md +++ b/documentation/docs/14-configuration.md @@ -63,7 +63,7 @@ Enable [AMP](#amp) mode. ### appDir -The directory relative to `paths.assets` where the built JS and CSS (and imported assets) are served from. (The filenames therein contain content-based hashes, meaning they can be cached indefinitely). +The directory relative to `paths.assets` where the built JS and CSS (and imported assets) are served from. (The filenames therein contain content-based hashes, meaning they can be cached indefinitely). Must not start or end with `/`. ### files diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js index f18caa09b2c9..8ccaad11d997 100644 --- a/packages/kit/src/core/config/index.js +++ b/packages/kit/src/core/config/index.js @@ -1,8 +1,8 @@ -import options from './options.js'; -import * as url from 'url'; -import path from 'path'; import fs from 'fs'; +import path from 'path'; +import * as url from 'url'; import { logger } from '../utils.js'; +import options from './options.js'; /** @typedef {import('./types').ConfigDefinition} ConfigDefinition */ @@ -134,7 +134,7 @@ export function validate_config(config) { const validated = validate(options, config, 'config'); // resolve paths - const { paths } = validated.kit; + const { paths, appDir } = validated.kit; if (paths.base !== '' && (paths.base.endsWith('/') || !paths.base.startsWith('/'))) { throw new Error( @@ -142,6 +142,12 @@ export function validate_config(config) { ); } + if (appDir.startsWith('/') || appDir.endsWith('/')) { + throw new Error( + "kit.appDir cannot start or end with '/'. See https://kit.svelte.dev/docs#configuration" + ); + } + paths.assets = resolve(paths.base, paths.assets); return validated; diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index 1c6b7b8a1f0d..a6d4ada2e885 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -1,6 +1,6 @@ -import { test, suite } from 'uvu'; +import { suite, test } from 'uvu'; import * as assert from 'uvu/assert'; -import { validate_config, deep_merge } from './index.js'; +import { deep_merge, validate_config } from './index.js'; test('fills in defaults', () => { const validated = validate_config({}); @@ -162,6 +162,36 @@ test('fails if kit.appDir is blank', () => { }, /^config\.kit\.appDir cannot be empty$/); }); +test('fails if kit.appDir is only slash', () => { + assert.throws(() => { + validate_config({ + kit: { + appDir: '/' + } + }); + }, /^kit\.appDir cannot start or end with '\/'. See https:\/\/kit\.svelte\.dev\/docs#configuration$/); +}); + +test('fails if kit.appDir starts with slash', () => { + assert.throws(() => { + validate_config({ + kit: { + appDir: '/_app' + } + }); + }, /^kit\.appDir cannot start or end with '\/'. See https:\/\/kit\.svelte\.dev\/docs#configuration$/); +}); + +test('fails if kit.appDir ends with slash', () => { + assert.throws(() => { + validate_config({ + kit: { + appDir: '_app/' + } + }); + }, /^kit\.appDir cannot start or end with '\/'. See https:\/\/kit\.svelte\.dev\/docs#configuration$/); +}); + test('fails if paths.base is not root-relative', () => { assert.throws(() => { validate_config({ From 8bc7c771d4fc3b8cbee21ee2ed8b4a64f7644b2d Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Fri, 2 Jul 2021 14:09:02 +0700 Subject: [PATCH 091/129] [docs] clarify `$app/stores` imports differences (#1801) Clarify why we won't need it most of the time + note the need for top-level-subscription --- documentation/docs/05-modules.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/docs/05-modules.md b/documentation/docs/05-modules.md index 733446ef1999..a2a8e81f8d11 100644 --- a/documentation/docs/05-modules.md +++ b/documentation/docs/05-modules.md @@ -49,9 +49,9 @@ Stores are _contextual_ — they are added to the [context](https://svelte.dev/t Because of that, the stores are not free-floating objects: they must be accessed during component initialisation, like anything else that would be accessed with `getContext`. -- `getStores` is a convenience function around `getContext` that returns `{ navigating, page, session }`. Most of the time, you won't need to use it. +- `getStores` is a convenience function around `getContext` that returns `{ navigating, page, session }`. This needs to be called at the top-level or synchronously during component or page initialization. -The stores themselves attach to the correct context at the point of subscription, which means you can import and use them directly in components without boilerplate. +The stores themselves attach to the correct context at the point of subscription, which means you can import and use them directly in components without boilerplate. However, it still needs to be called synchronously on component or page initialization when `$`-prefix isn't used. Use `getStores` to safely `.subscribe` asynchronously instead. - `navigating` is a [readable store](https://svelte.dev/tutorial/readable-stores). When navigating starts, its value is `{ from, to }`, where `from` and `to` both mirror the `page` store value. When navigating finishes, its value reverts to `null`. - `page` is a readable store whose value reflects the object passed to `load` functions — it contains `host`, `path`, `params` and `query`. See the [`page` section](#loading-input-page) above for more details. From 8828743a1f8442162f0146d81d5d4112d9c31239 Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Fri, 2 Jul 2021 14:10:12 +0700 Subject: [PATCH 092/129] [docs] sync updates from #1778 and #1791 (#1802) --- documentation/docs/01-routing.md | 15 ++++++++++----- documentation/docs/03-loading.md | 22 +++++++++++++++------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/documentation/docs/01-routing.md b/documentation/docs/01-routing.md index 93ebcf3fc656..8b60689931c0 100644 --- a/documentation/docs/01-routing.md +++ b/documentation/docs/01-routing.md @@ -49,6 +49,7 @@ Endpoints are modules written in `.js` (or `.ts`) files that export functions co ```ts type Headers = Record; +type DefaultBody = JSONValue | Uint8Array; type Request, Body = unknown> = { method: string; @@ -62,15 +63,19 @@ type Request, Body = unknown> = { locals: Locals; // populated by hooks handle }; -type EndpointOutput = { +type EndpointOutput = { status?: number; headers?: Headers; - body?: string | Uint8Array | JSONValue; + body?: Body; }; -type RequestHandler> = ( - request: Request -) => void | EndpointOutput | Promise; +type RequestHandler< + Locals = Record, + Input = unknown, + Output extends DefaultBody = DefaultBody +> = ( + request: Request +) => void | EndpointOutput | Promise>; ``` ```js diff --git a/documentation/docs/03-loading.md b/documentation/docs/03-loading.md index 1b7c57d0ec10..3aa7e6035855 100644 --- a/documentation/docs/03-loading.md +++ b/documentation/docs/03-loading.md @@ -7,26 +7,34 @@ A component that defines a page or a layout can export a `load` function that ru Our example blog page might contain a `load` function like the following. Note the `context="module"` — this is necessary because `load` runs before the component is rendered: ```ts -type LoadInput = { +type LoadInput< + PageParams extends Record = Record, + Context extends Record = Record, + Session = any +> = { page: { host: string; path: string; - params: Record; + params: PageParams; query: URLSearchParams; }; fetch: (info: RequestInfo, init?: RequestInit) => Promise; - session: any; - context: Record; + session: Session; + context: Context; }; -type LoadOutput = { +type LoadOutput< + Props extends Record = Record, + Context extends Record = Record +> = { status?: number; error?: string | Error; redirect?: string; - props?: Record; - context?: Record; + props?: Props; + context?: Context; maxage?: number; }; + ``` ```html From 559aad5f9dae6037a2d5fc4a63de0440634f41f2 Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Fri, 2 Jul 2021 14:46:41 +0700 Subject: [PATCH 093/129] [docs] match word spelling with existing and main docs (#1803) --- documentation/docs/05-modules.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/docs/05-modules.md b/documentation/docs/05-modules.md index a2a8e81f8d11..ce6fb92f1ab9 100644 --- a/documentation/docs/05-modules.md +++ b/documentation/docs/05-modules.md @@ -49,9 +49,9 @@ Stores are _contextual_ — they are added to the [context](https://svelte.dev/t Because of that, the stores are not free-floating objects: they must be accessed during component initialisation, like anything else that would be accessed with `getContext`. -- `getStores` is a convenience function around `getContext` that returns `{ navigating, page, session }`. This needs to be called at the top-level or synchronously during component or page initialization. +- `getStores` is a convenience function around `getContext` that returns `{ navigating, page, session }`. This needs to be called at the top-level or synchronously during component or page initialisation. -The stores themselves attach to the correct context at the point of subscription, which means you can import and use them directly in components without boilerplate. However, it still needs to be called synchronously on component or page initialization when `$`-prefix isn't used. Use `getStores` to safely `.subscribe` asynchronously instead. +The stores themselves attach to the correct context at the point of subscription, which means you can import and use them directly in components without boilerplate. However, it still needs to be called synchronously on component or page initialisation when `$`-prefix isn't used. Use `getStores` to safely `.subscribe` asynchronously instead. - `navigating` is a [readable store](https://svelte.dev/tutorial/readable-stores). When navigating starts, its value is `{ from, to }`, where `from` and `to` both mirror the `page` store value. When navigating finishes, its value reverts to `null`. - `page` is a readable store whose value reflects the object passed to `load` functions — it contains `host`, `path`, `params` and `query`. See the [`page` section](#loading-input-page) above for more details. From 72567683d0bd088dad5e0dfcc725ef55829f23e2 Mon Sep 17 00:00:00 2001 From: GrygrFlzr Date: Fri, 2 Jul 2021 20:44:33 +0700 Subject: [PATCH 094/129] fix(test): Parse quoted paths instead of blindly splitting on spaces (#1805) Fixes #1799 --- packages/adapter-static/test/utils.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/adapter-static/test/utils.js b/packages/adapter-static/test/utils.js index e96b43418bb2..456bb71d59b9 100644 --- a/packages/adapter-static/test/utils.js +++ b/packages/adapter-static/test/utils.js @@ -33,9 +33,10 @@ export function run(app, callback) { rimraf(`${cwd}/build`); - await spawn(`${process.execPath} ${cli_path} build`, { + await spawn(`"${process.execPath}" ${cli_path} build`, { cwd, - stdio: 'inherit' + stdio: 'inherit', + shell: true }); context.cwd = cwd; @@ -64,13 +65,15 @@ export function run(app, callback) { suite.run(); } +const parameterRegex = new RegExp('"[^"]+"|[\\S]+', 'g'); + /** * @param {string} str * @param {child_process.SpawnOptions} opts */ function spawn(str, opts) { return new Promise((fulfil, reject) => { - const [cmd, ...args] = str.split(' '); + const [cmd, ...args] = str.match(parameterRegex); const child = child_process.spawn(cmd, args, opts); From 9f0c54a83a7269f589bf6e62bb595ecca49d7f6a Mon Sep 17 00:00:00 2001 From: GrygrFlzr Date: Sat, 3 Jul 2021 03:18:15 +0700 Subject: [PATCH 095/129] fix: Externalize app initialization to adapters (#1804) * fix: Externalize app initialization to adapters Fixes #1784 * fix(lint) * chore: spacing changes * chore: Add todo in adapter-begin --- .changeset/polite-ducks-notice.md | 9 ++++++++ packages/adapter-begin/src/index.js | 2 ++ .../adapter-cloudflare-workers/files/entry.js | 4 +++- packages/adapter-netlify/files/entry.js | 4 +++- packages/adapter-node/src/index.js | 4 +++- packages/adapter-node/src/require_shim.js | 2 +- packages/adapter-vercel/files/entry.js | 4 +++- packages/kit/src/core/build/index.js | 6 ++--- packages/kit/src/install-fetch.js | 23 +++++++++++++++---- 9 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 .changeset/polite-ducks-notice.md diff --git a/.changeset/polite-ducks-notice.md b/.changeset/polite-ducks-notice.md new file mode 100644 index 000000000000..8aa096da4878 --- /dev/null +++ b/.changeset/polite-ducks-notice.md @@ -0,0 +1,9 @@ +--- +'@sveltejs/adapter-cloudflare-workers': patch +'@sveltejs/adapter-netlify': patch +'@sveltejs/adapter-node': patch +'@sveltejs/adapter-vercel': patch +'@sveltejs/kit': patch +--- + +Externalize app initialization to adapters diff --git a/packages/adapter-begin/src/index.js b/packages/adapter-begin/src/index.js index 9872f66d0cd3..74d6f65cd686 100644 --- a/packages/adapter-begin/src/index.js +++ b/packages/adapter-begin/src/index.js @@ -3,6 +3,8 @@ import url from 'url'; import app from '@architect/shared/app.js'; // eslint-disable-line import/no-unresolved +// TODO: run init() on the app before handling routes + async function handler(event) { const { host, rawPath: path, httpMethod, rawQueryString, headers, body } = event; diff --git a/packages/adapter-cloudflare-workers/files/entry.js b/packages/adapter-cloudflare-workers/files/entry.js index d5749d7f83cb..34e8834639b2 100644 --- a/packages/adapter-cloudflare-workers/files/entry.js +++ b/packages/adapter-cloudflare-workers/files/entry.js @@ -1,7 +1,9 @@ // TODO hardcoding the relative location makes this brittle -import { render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved +import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved import { getAssetFromKV, NotFoundError } from '@cloudflare/kv-asset-handler'; // eslint-disable-line import/no-unresolved +init(); + addEventListener('fetch', (event) => { event.respondWith(handle(event)); }); diff --git a/packages/adapter-netlify/files/entry.js b/packages/adapter-netlify/files/entry.js index c230c41d488a..be3b0b556f91 100644 --- a/packages/adapter-netlify/files/entry.js +++ b/packages/adapter-netlify/files/entry.js @@ -1,7 +1,9 @@ import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved // TODO hardcoding the relative location makes this brittle -import { render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved +import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved + +init(); export async function handler(event) { const { path, httpMethod, headers, rawQuery, body, isBase64Encoded } = event; diff --git a/packages/adapter-node/src/index.js b/packages/adapter-node/src/index.js index 6914d4828e70..59d3561d7975 100644 --- a/packages/adapter-node/src/index.js +++ b/packages/adapter-node/src/index.js @@ -1,9 +1,11 @@ import './require_shim'; import { createServer } from './server'; // TODO hardcoding the relative location makes this brittle -import { render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved +import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved import { host, port } from './env.js'; // eslint-disable-line import/no-unresolved +init(); + const instance = createServer({ render }).listen(port, host, () => { console.log(`Listening on port ${port}`); }); diff --git a/packages/adapter-node/src/require_shim.js b/packages/adapter-node/src/require_shim.js index f335a1e3bde0..2aa5259586f1 100644 --- a/packages/adapter-node/src/require_shim.js +++ b/packages/adapter-node/src/require_shim.js @@ -1,2 +1,2 @@ import { createRequire } from 'module'; -global.require = createRequire(import.meta.url); +globalThis.require = createRequire(import.meta.url); diff --git a/packages/adapter-vercel/files/entry.js b/packages/adapter-vercel/files/entry.js index 4fa041c47fee..93bfc20c91b4 100644 --- a/packages/adapter-vercel/files/entry.js +++ b/packages/adapter-vercel/files/entry.js @@ -2,7 +2,9 @@ import { getRawBody } from '@sveltejs/kit/node'; // eslint-disable-line import/n import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved // TODO hardcoding the relative location makes this brittle -import { render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved +import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved + +init(); export default async (req, res) => { const { pathname, searchParams } = new URL(req.url || '', 'http://localhost'); diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index a89c485703fe..b89a38fdd6b7 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -285,9 +285,11 @@ async function build_server( let options = null; + const default_settings = { paths: ${s(config.kit.paths)} }; + // allow paths to be overridden in svelte-kit preview // and in prerendering - export function init(settings) { + export function init(settings = default_settings) { set_paths(settings.paths); set_prerendering(settings.prerendering || false); @@ -380,8 +382,6 @@ async function build_server( }; } - init({ paths: ${s(config.kit.paths)} }); - export function render(request, { prerender } = {}) { diff --git a/packages/kit/src/install-fetch.js b/packages/kit/src/install-fetch.js index d0271ba0000e..83a9b55fe29e 100644 --- a/packages/kit/src/install-fetch.js +++ b/packages/kit/src/install-fetch.js @@ -1,7 +1,20 @@ -// @ts-nocheck import fetch, { Response, Request, Headers } from 'node-fetch'; -globalThis.fetch = fetch; -globalThis.Response = Response; -globalThis.Request = Request; -globalThis.Headers = Headers; +Object.defineProperties(globalThis, { + fetch: { + enumerable: true, + value: fetch + }, + Response: { + enumerable: true, + value: Response + }, + Request: { + enumerable: true, + value: Request + }, + Headers: { + enumerable: true, + value: Headers + } +}); From 6ef148df0eeeb9c29d863906068ecf1494056158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paquim?= Date: Fri, 2 Jul 2021 22:49:00 +0100 Subject: [PATCH 096/129] Register service worker even with no client-side router or hydration (#1724) * Register service worker even with no client-side router or hydration * Refactor service worker registration out of start.js * Add changeset * fix Co-authored-by: Rich Harris --- .changeset/three-windows-push.md | 14 ++++++++++++++ packages/kit/src/core/build/index.js | 13 +++++++++++-- packages/kit/src/runtime/client/start.js | 8 -------- packages/kit/src/runtime/server/page/render.js | 8 ++++++++ packages/kit/types/internal.d.ts | 1 + 5 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 .changeset/three-windows-push.md diff --git a/.changeset/three-windows-push.md b/.changeset/three-windows-push.md new file mode 100644 index 000000000000..d2392bce2150 --- /dev/null +++ b/.changeset/three-windows-push.md @@ -0,0 +1,14 @@ +--- +'@sveltejs/kit': patch +--- + +Generate service worker registration code even with `router` and `hydration` disabled + +Remove service worker registration code from `start.js`, and instead inject it +in the HTML ``, removing the `VITE_SVELTEKIT_SERVICE_WORKER` environment +variable definition in the process. + +Service worker registration code is now always included in the HTML response, if +the specified `config.kit.files.serviceWorker` or the default +`src/service-worker.js` file exists, and decoupled from the Rollup-generated +client-side JS bundle. diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index b89a38fdd6b7..fca26b0e95fb 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -109,7 +109,6 @@ async function build_client({ copy_assets(build_dir); process.env.VITE_SVELTEKIT_AMP = config.kit.amp ? 'true' : ''; - process.env.VITE_SVELTEKIT_SERVICE_WORKER = service_worker_entry_file ? '/service-worker.js' : ''; const client_out_dir = `${output_dir}/client/${config.kit.appDir}`; const client_manifest_file = `${client_out_dir}/manifest.json`; @@ -195,7 +194,16 @@ async function build_client({ * @param {string} runtime */ async function build_server( - { cwd, base, config, manifest, build_dir, output_dir, client_entry_file }, + { + cwd, + base, + config, + manifest, + build_dir, + output_dir, + client_entry_file, + service_worker_entry_file + }, client_manifest, runtime ) { @@ -317,6 +325,7 @@ async function build_server( paths: settings.paths, read: settings.read, root, + service_worker: ${service_worker_entry_file ? "'/service-worker.js'" : 'null'}, router: ${s(config.kit.router)}, ssr: ${s(config.kit.ssr)}, target: ${s(config.kit.target)}, diff --git a/packages/kit/src/runtime/client/start.js b/packages/kit/src/runtime/client/start.js index f835c84cb90d..f53fba4e013b 100644 --- a/packages/kit/src/runtime/client/start.js +++ b/packages/kit/src/runtime/client/start.js @@ -56,11 +56,3 @@ export async function start({ paths, target, session, host, route, spa, trailing dispatchEvent(new CustomEvent('sveltekit:start')); } - -if (import.meta.env.VITE_SVELTEKIT_SERVICE_WORKER) { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.register( - /** @type {string} */ (import.meta.env.VITE_SVELTEKIT_SERVICE_WORKER) - ); - } -} diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index c98f4597cf99..ef9c72e128f4 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -144,6 +144,14 @@ export async function render_response({ `; } + if (options.service_worker) { + init += ``; + } + const head = [ rendered.head, styles.size && !options.amp diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index f9f6b85e1416..7f4ef6f9cea4 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -144,6 +144,7 @@ export type SSRRenderOptions = { read: (file: string) => Buffer; root: SSRComponent['default']; router: boolean; + service_worker?: string; ssr: boolean; target: string; template: ({ head, body }: { head: string; body: string }) => string; From 358d790d65eee06af2c1a5574b4a1d420afb0f1d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 2 Jul 2021 18:42:20 -0400 Subject: [PATCH 097/129] Version Packages (next) (#1790) * Version Packages (next) * Update CHANGELOG.md Co-authored-by: github-actions[bot] Co-authored-by: Rich Harris --- .changeset/pre.json | 6 ++++++ packages/adapter-cloudflare-workers/CHANGELOG.md | 6 ++++++ packages/adapter-cloudflare-workers/package.json | 2 +- packages/adapter-netlify/CHANGELOG.md | 6 ++++++ packages/adapter-netlify/package.json | 2 +- packages/adapter-node/CHANGELOG.md | 6 ++++++ packages/adapter-node/package.json | 2 +- packages/adapter-vercel/CHANGELOG.md | 6 ++++++ packages/adapter-vercel/package.json | 2 +- packages/kit/CHANGELOG.md | 14 ++++++++++++++ packages/kit/package.json | 2 +- 11 files changed, 49 insertions(+), 5 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 0ad84a63122a..99164d1eaf90 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -188,11 +188,13 @@ "odd-ligers-swim", "old-files-jump", "olive-frogs-drive", + "olive-maps-join", "orange-boats-love", "pink-ducks-press", "plenty-cougars-invite", "plenty-donuts-check", "polite-apes-relax", + "polite-ducks-notice", "polite-worms-happen", "poor-apricots-juggle", "poor-bears-report", @@ -239,6 +241,7 @@ "shaggy-elephants-sell", "shaggy-peaches-fry", "sharp-days-exercise", + "sharp-geckos-beam", "sharp-mangos-tickle", "sharp-pigs-study", "shy-jeans-fly", @@ -280,6 +283,7 @@ "stupid-countries-sneeze", "swift-pumpkins-pump", "tall-berries-cheer", + "tall-hotels-punch", "tame-dodos-love", "tame-forks-happen", "tame-kangaroos-rush", @@ -300,6 +304,7 @@ "three-chicken-ring", "three-dingos-scream", "three-laws-appear", + "three-windows-push", "tidy-boats-listen", "tidy-books-reply", "tidy-turkeys-rule", @@ -345,6 +350,7 @@ "wild-beans-happen", "wild-clouds-hear", "wild-cooks-drive", + "wild-poets-rescue", "wild-pumas-jam", "wise-bees-juggle", "wise-bugs-run", diff --git a/packages/adapter-cloudflare-workers/CHANGELOG.md b/packages/adapter-cloudflare-workers/CHANGELOG.md index 67aab6b14211..0899a5feab4c 100644 --- a/packages/adapter-cloudflare-workers/CHANGELOG.md +++ b/packages/adapter-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-cloudflare-workers +## 1.0.0-next.13 + +### Patch Changes + +- 9f0c54a: Externalize app initialization to adapters + ## 1.0.0-next.12 ### Patch Changes diff --git a/packages/adapter-cloudflare-workers/package.json b/packages/adapter-cloudflare-workers/package.json index ffd40055d191..851dc32a2fc3 100644 --- a/packages/adapter-cloudflare-workers/package.json +++ b/packages/adapter-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-cloudflare-workers", - "version": "1.0.0-next.12", + "version": "1.0.0-next.13", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-netlify/CHANGELOG.md b/packages/adapter-netlify/CHANGELOG.md index 34abe987b393..b1c9cac79508 100644 --- a/packages/adapter-netlify/CHANGELOG.md +++ b/packages/adapter-netlify/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-netlify +## 1.0.0-next.18 + +### Patch Changes + +- 9f0c54a: Externalize app initialization to adapters + ## 1.0.0-next.17 ### Patch Changes diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index a4ba48850cd6..d8556044321b 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-netlify", - "version": "1.0.0-next.17", + "version": "1.0.0-next.18", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index fdbfa54c9dd1..2c5b5cfdc18d 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-node +## 1.0.0-next.30 + +### Patch Changes + +- 9f0c54a: Externalize app initialization to adapters + ## 1.0.0-next.29 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index b38da3e0ed92..1b6bd96ccff5 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.29", + "version": "1.0.0-next.30", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-vercel/CHANGELOG.md b/packages/adapter-vercel/CHANGELOG.md index 2f69c65d65a1..b04728ae068f 100644 --- a/packages/adapter-vercel/CHANGELOG.md +++ b/packages/adapter-vercel/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-vercel +## 1.0.0-next.23 + +### Patch Changes + +- 9f0c54a: Externalize app initialization to adapters + ## 1.0.0-next.22 ### Patch Changes diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 8244730899aa..87d083c5fe0d 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-vercel", - "version": "1.0.0-next.22", + "version": "1.0.0-next.23", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 2672dd80a7e9..2daa5fa35c17 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,19 @@ # @sveltejs/kit +## 1.0.0-next.120 + +### Minor Changes + +- 9fbaeda: fix attribute validation in generated script tag + +### Patch Changes + +- 9f0c54a: Externalize app initialization to adapters +- 0d69e55: Add generic type for session +- 325c223: Improve RequestHandler and EndpointOutput type declarations. +- 6ef148d: Generate service worker registration code even with `router` and `hydration` disabled +- ae3ef19: Fail if config.kit.appDir starts or ends with a slash + ## 1.0.0-next.119 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index b388f3c70fae..3f9e874d5a82 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.119", + "version": "1.0.0-next.120", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From c639586497246520bce4a57f0cd463bbdc3c5d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6n=20Limell?= Date: Sat, 3 Jul 2021 06:22:34 +0200 Subject: [PATCH 098/129] Check if '${out}/prerendered' exists, before precompressing (#1806) --- .changeset/few-suits-flash.md | 5 +++++ packages/adapter-node/index.js | 17 ++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 .changeset/few-suits-flash.md diff --git a/.changeset/few-suits-flash.md b/.changeset/few-suits-flash.md new file mode 100644 index 000000000000..f7e48a2392e3 --- /dev/null +++ b/.changeset/few-suits-flash.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +Check if '[out]/prerendered' exists, before precompressing diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 57a4a4c5b429..2d527c4d6b80 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -1,11 +1,18 @@ -import { readFileSync, statSync, createReadStream, createWriteStream, writeFileSync } from 'fs'; +import esbuild from 'esbuild'; +import { + createReadStream, + createWriteStream, + existsSync, + readFileSync, + statSync, + writeFileSync +} from 'fs'; import { join } from 'path'; -import { fileURLToPath } from 'url'; import { pipeline } from 'stream'; +import glob from 'tiny-glob'; +import { fileURLToPath } from 'url'; import { promisify } from 'util'; import zlib from 'zlib'; -import esbuild from 'esbuild'; -import glob from 'tiny-glob'; const pipe = promisify(pipeline); @@ -65,7 +72,7 @@ export default function ({ await utils.prerender({ dest: `${out}/prerendered` }); - if (precompress) { + if (precompress && existsSync(`${out}/prerendered`)) { utils.log.minor('Compressing prerendered pages'); await compress(`${out}/prerendered`); } From 939188ed062b38bd884ae799c368cac11ac74df6 Mon Sep 17 00:00:00 2001 From: Marco Buono Date: Sat, 3 Jul 2021 17:55:12 -0300 Subject: [PATCH 099/129] Include `charset=utf-8` by default in `application/json` endpoints. (#1669) --- .changeset/fuzzy-kids-turn.md | 5 +++++ packages/kit/src/runtime/server/endpoint.js | 7 +++++-- packages/kit/test/apps/basics/src/routes/encoded/_tests.js | 5 +++++ .../kit/test/apps/basics/src/routes/encoded/endpoint.js | 7 +++++++ packages/kit/test/apps/basics/src/routes/load/_tests.js | 2 +- 5 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 .changeset/fuzzy-kids-turn.md create mode 100644 packages/kit/test/apps/basics/src/routes/encoded/endpoint.js diff --git a/.changeset/fuzzy-kids-turn.md b/.changeset/fuzzy-kids-turn.md new file mode 100644 index 000000000000..46c79c5cd1e0 --- /dev/null +++ b/.changeset/fuzzy-kids-turn.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Use UTF-8 encoding for JSON endpoint responses by default diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index 155e81c182f0..0467f418413b 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -54,8 +54,11 @@ export default async function render_route(request, route) { /** @type {import('types/hooks').StrictBody} */ let normalized_body; - if (typeof body === 'object' && (!type || type === 'application/json')) { - headers = { ...headers, 'content-type': 'application/json' }; + if ( + typeof body === 'object' && + (!type || type === 'application/json' || type === 'application/json; charset=utf-8') + ) { + headers = { ...headers, 'content-type': 'application/json; charset=utf-8' }; normalized_body = JSON.stringify(body); } else { normalized_body = /** @type {import('types/hooks').StrictBody} */ (body); diff --git a/packages/kit/test/apps/basics/src/routes/encoded/_tests.js b/packages/kit/test/apps/basics/src/routes/encoded/_tests.js index 2dcf0fc9ae57..2d799cb75cbc 100644 --- a/packages/kit/test/apps/basics/src/routes/encoded/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/encoded/_tests.js @@ -27,4 +27,9 @@ export default function (test) { assert.equal(await page.innerHTML('h2'), '/encoded/苗条'); assert.equal(await page.innerHTML('h3'), '/encoded/苗条'); }); + + test('sets charset on JSON Content-Type', null, async ({ fetch }) => { + const response = await fetch('/encoded/endpoint'); + assert.equal(response.headers.get('content-type'), 'application/json; charset=utf-8'); + }); } diff --git a/packages/kit/test/apps/basics/src/routes/encoded/endpoint.js b/packages/kit/test/apps/basics/src/routes/encoded/endpoint.js new file mode 100644 index 000000000000..b133c4fe578c --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/encoded/endpoint.js @@ -0,0 +1,7 @@ +export async function get() { + return { + body: { + fruit: '🍎🍇🍌' + } + }; +} diff --git a/packages/kit/test/apps/basics/src/routes/load/_tests.js b/packages/kit/test/apps/basics/src/routes/load/_tests.js index 3de7b3db7ced..aec10e52a456 100644 --- a/packages/kit/test/apps/basics/src/routes/load/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/load/_tests.js @@ -14,7 +14,7 @@ export default function (test, is_dev) { }); const payload = - '{"status":200,"statusText":"","headers":{"content-type":"application/json"},"body":"{\\"answer\\":42}"}'; + '{"status":200,"statusText":"","headers":{"content-type":"application/json; charset=utf-8"},"body":"{\\"answer\\":42}"}'; if (!js) { // by the time JS has run, hydration will have nuked these scripts From 5b3e1e6dcb6f809b5e6d1104c7132545598b1bb7 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Sun, 4 Jul 2021 13:11:19 +0200 Subject: [PATCH 100/129] [feat] svelte-kit package: Generate type definitions (#1646) --- .changeset/odd-islands-heal.md | 5 ++ documentation/docs/12-packaging.md | 9 +-- documentation/docs/14-configuration.md | 19 +++++ packages/kit/package.json | 7 +- packages/kit/rollup.config.js | 3 +- packages/kit/src/core/config/options.js | 6 +- packages/kit/src/core/make_package/index.js | 56 ++++++++++++-- .../fixtures/javascript/expected/Test.svelte | 12 +++ .../javascript/expected/Test.svelte.d.ts | 40 ++++++++++ .../fixtures/javascript/expected/Test2.svelte | 6 ++ .../javascript/expected/Test2.svelte.d.ts | 26 +++++++ .../fixtures/javascript/expected/foo.d.ts | 1 + .../fixtures/javascript/expected/index.d.ts | 1 + .../fixtures/javascript/expected/index.js | 1 + .../fixtures/javascript/expected/package.json | 13 ++++ .../test/fixtures/javascript/jsconfig.json | 9 +++ .../test/fixtures/javascript/package.json | 5 ++ .../test/fixtures/javascript/src/app.html | 12 +++ .../fixtures/javascript/src/lib/Test.svelte | 12 +++ .../fixtures/javascript/src/lib/Test2.svelte | 6 ++ .../test/fixtures/javascript/src/lib/foo.d.ts | 1 + .../test/fixtures/javascript/src/lib/index.js | 1 + .../test/fixtures/javascript/svelte.config.js | 0 .../fixtures/typescript/expected/Test.svelte | 8 ++ .../typescript/expected/Test.svelte.d.ts | 23 ++++++ .../fixtures/typescript/expected/Test2.svelte | 3 + .../typescript/expected/Test2.svelte.d.ts | 16 ++++ .../fixtures/typescript/expected/foo.d.ts | 1 + .../fixtures/typescript/expected/index.d.ts | 1 + .../fixtures/typescript/expected/index.js | 1 + .../fixtures/typescript/expected/package.json | 13 ++++ .../test/fixtures/typescript/package.json | 5 ++ .../test/fixtures/typescript/src/app.html | 12 +++ .../fixtures/typescript/src/lib/Test.svelte | 9 +++ .../fixtures/typescript/src/lib/Test2.svelte | 4 + .../test/fixtures/typescript/src/lib/foo.d.ts | 1 + .../test/fixtures/typescript/src/lib/index.ts | 1 + .../fixtures/typescript/svelte.config.cjs | 5 ++ .../test/fixtures/typescript/tsconfig.json | 30 ++++++++ .../kit/src/core/make_package/test/index.js | 77 +++++++++++++++++++ packages/kit/src/runtime/client/router.js | 2 +- pnpm-lock.yaml | 51 +++++++++++- 42 files changed, 490 insertions(+), 24 deletions(-) create mode 100644 .changeset/odd-islands-heal.md create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test2.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test2.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/expected/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/expected/index.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/expected/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/expected/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/jsconfig.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/src/app.html create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/Test2.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript/svelte.config.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test2.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test2.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/expected/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/expected/index.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/expected/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/expected/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/src/app.html create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/Test2.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/index.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/svelte.config.cjs create mode 100644 packages/kit/src/core/make_package/test/fixtures/typescript/tsconfig.json create mode 100644 packages/kit/src/core/make_package/test/index.js diff --git a/.changeset/odd-islands-heal.md b/.changeset/odd-islands-heal.md new file mode 100644 index 000000000000..94eea9a7d209 --- /dev/null +++ b/.changeset/odd-islands-heal.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Add types generation to svelte-kit package command diff --git a/documentation/docs/12-packaging.md b/documentation/docs/12-packaging.md index 1b7b92986c29..e2644a0dfce7 100644 --- a/documentation/docs/12-packaging.md +++ b/documentation/docs/12-packaging.md @@ -10,7 +10,8 @@ A SvelteKit component library has the exact same structure as a SvelteKit app, e Running `svelte-kit package` will take the contents of `src/lib` and generate a `package` directory (which can be [configured](#configuration-package)) containing the following: -- All the files in `src/lib`, unless you [configure](#configuration-package) custom `include`/`exclude` options. Svelte components will be preprocessed (but note the [caveats](#packaging-caveats) below) +- All the files in `src/lib`, unless you [configure](#configuration-package) custom `include`/`exclude` options. Svelte components will be preprocessed, TypeScript files will be transpiled to JavaScript. +- Type definitions (`d.ts` files) which are generated for Svelte, JavaScript and TypeScript files. You need to install `typescript >= 4.0.0` and `svelte2tsx >= 0.4.1` for this. Type definitions are placed next to their implementation, hand-written `d.ts` files are copied over as is. - A `package.json` that copies the `name`, `version`, `description`, `keywords`, `homepage`, `bugs`, `license`, `author`, `contributors`, `funding`, `repository`, `dependencies`, `private` and `publishConfig` fields from the root of the project, and adds a `"type": "module"` and an `"exports"` field The `"exports"` field contains the package's entry points. By default, all files in `src/lib` will be treated as an entry point unless they start with (or live in a directory that starts with) an underscore, but you can [configure](#configuration-package) this behaviour. If you have a `src/lib/index.js` or `src/lib/index.svelte` file, it will be treated as the package root. @@ -37,8 +38,4 @@ The `package` above is referring to the directory name generated, change accordi ### Caveats -This is a relatively experimental feature and is not yet fully implemented: - -- if a preprocessor is specified, `.svelte` files are transformed (meaning they can contain TypeScript, for example), but `.d.ts` files are not generated -- `.ts` files are not currently transformed, and will cause the process to fail -- all other files are copied across as-is +This is a relatively experimental feature and is not yet fully implemented. All files except Svelte files (preprocessed) and TypeScript files (transpiled to JavaScript) are copied across as-is. diff --git a/documentation/docs/14-configuration.md b/documentation/docs/14-configuration.md index e85934903e8d..243fe2075068 100644 --- a/documentation/docs/14-configuration.md +++ b/documentation/docs/14-configuration.md @@ -43,6 +43,17 @@ const config = { ssr: true, target: null, trailingSlash: 'never', + package: { + dir: 'package', + exports: { + include: ['**'], + exclude: ['_*', '**/_*'] + }, + files: { + include: ['**'], + exclude: [] + } + }, vite: () => ({}) }, @@ -149,6 +160,14 @@ Whether to remove, append, or ignore trailing slashes when resolving URLs to rou > Ignoring trailing slashes is not recommended — the semantics of relative paths differ between the two cases (`./y` from `/x` is `/y`, but from `/x/` is `/x/y`), and `/x` and `/x/` are treated as separate URLs which is harmful to SEO. If you use this option, ensure that you implement logic for conditionally adding or removing trailing slashes from `request.path` inside your [`handle`](#hooks-handle) function. +### package + +Options related to [creating a package](#packaging). + +- `dir` - output directory +- `exports` - contains a `includes` and a `excludes` array which specifies which files to mark as exported from the `exports` field of the `package.json` +- `files` - contains a `includes` and a `excludes` array which specifies which files to process and copy over when packaging + ### vite A [Vite config object](https://vitejs.dev/config), or a function that returns one. Not all configuration options can be set, since SvelteKit depends on certain values being configured internally. diff --git a/packages/kit/package.json b/packages/kit/package.json index 3f9e874d5a82..4d10550fe7a8 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -33,7 +33,8 @@ "selfsigned": "^1.10.11", "sirv": "^1.0.12", "svelte": "^3.38.2", - "svelte-check": "^1.5.2", + "svelte2tsx": "~0.4.1", + "svelte-check": "^2.2.0", "tiny-glob": "^0.2.8", "typescript": "^4.2.4", "uvu": "^0.5.1" @@ -53,8 +54,8 @@ "scripts": { "build": "rollup -c", "dev": "rollup -cw", - "lint": "eslint --ignore-path .gitignore \"src/**/*.{ts,mjs,js,svelte}\" && npm run check-format", - "check": "tsc && svelte-check", + "lint": "eslint --ignore-path .gitignore --ignore-pattern \"src/core/make_package/test/**\" \"src/**/*.{ts,mjs,js,svelte}\" && npm run check-format", + "check": "tsc && svelte-check --ignore \"src/core/make_package/test\"", "format": "prettier --write . --config ../../.prettierrc --ignore-path .gitignore", "check-format": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore", "prepublishOnly": "npm run build", diff --git a/packages/kit/rollup.config.js b/packages/kit/rollup.config.js index 1247a69a479d..2abdbec70ff5 100644 --- a/packages/kit/rollup.config.js +++ b/packages/kit/rollup.config.js @@ -10,7 +10,8 @@ const external = [].concat( Object.keys(pkg.dependencies || {}), Object.keys(pkg.peerDependencies || {}), Object.keys(process.binding('natives')), - 'typescript' + 'typescript', + 'svelte2tsx' ); export default [ diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index c763465039e9..1cf0af97f093 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -1,4 +1,4 @@ -const noop = () => {}; +const identity = (/** @type {any} */ id) => id; /** @typedef {import('./types').ConfigDefinition} ConfigDefinition */ @@ -7,7 +7,7 @@ const options = { compilerOptions: { type: 'leaf', default: null, - validate: noop + validate: identity }, extensions: { @@ -169,7 +169,7 @@ const options = { preprocess: { type: 'leaf', default: null, - validate: noop + validate: identity } }; diff --git a/packages/kit/src/core/make_package/index.js b/packages/kit/src/core/make_package/index.js index a5c4fbd2297f..a99afa1a4a60 100644 --- a/packages/kit/src/core/make_package/index.js +++ b/packages/kit/src/core/make_package/index.js @@ -1,8 +1,9 @@ import * as fs from 'fs'; +import globrex from 'globrex'; +import { createRequire } from 'module'; import * as path from 'path'; import { preprocess } from 'svelte/compiler'; -import globrex from 'globrex'; -import { mkdirp, rimraf } from '../filesystem'; +import { mkdirp, rimraf } from '../filesystem/index.js'; /** * @param {import('types/config').ValidatedConfig} config @@ -11,8 +12,14 @@ import { mkdirp, rimraf } from '../filesystem'; export async function make_package(config, cwd = process.cwd()) { rimraf(path.join(cwd, config.kit.package.dir)); + // Generate type definitions first so hand-written types can overwrite generated ones + await emit_dts(config); + const files_filter = create_filter(config.kit.package.files); - const exports_filter = create_filter(config.kit.package.exports); + const exports_filter = create_filter({ + ...config.kit.package.exports, + exclude: [...config.kit.package.exports.exclude, '*.d.ts'] + }); const files = walk(config.kit.files.lib); @@ -57,12 +64,22 @@ export async function make_package(config, cwd = process.cwd()) { if (svelte_ext) { // it's a Svelte component - // TODO how to emit types? out_file = file.slice(0, -svelte_ext.length) + '.svelte'; out_contents = config.preprocess ? (await preprocess(source, config.preprocess, { filename })).code : source; - } else if (ext === '.ts' && !file.endsWith('.d.ts')) { + } else if (ext === '.ts' && file.endsWith('.d.ts')) { + // TypeScript's declaration emit won't copy over the d.ts files, so we do it here + out_file = file; + out_contents = source; + if (fs.existsSync(path.join(cwd, config.kit.package.dir, out_file))) { + console.warn( + 'Found already existing file from d.ts generation for ' + + out_file + + '. This file will be overwritten.' + ); + } + } else if (ext === '.ts') { out_file = file.slice(0, -'.ts'.length) + '.js'; out_contents = await transpile_ts(filename, source); } else { @@ -134,7 +151,7 @@ function load_tsconfig(filename, ts) { const { error, config } = ts.readConfigFile(tsconfig_filename, ts.sys.readFile); if (error) { - throw new Error('Malformed tsconfig'); + throw new Error('Malformed tsconfig\n' + JSON.stringify(error, null, 2)); } // Do this so TS will not search for initial files which might take a while @@ -200,3 +217,30 @@ function write(file, contents) { mkdirp(path.dirname(file)); fs.writeFileSync(file, contents); } + +/** + * @param {import('types/config').ValidatedConfig} config + */ +export async function emit_dts(config) { + const require = createRequire(import.meta.url); + const emit = await try_load_svelte2tsx(); + emit({ + libRoot: config.kit.files.lib, + svelteShimsPath: require.resolve('svelte2tsx/svelte-shims.d.ts'), + declarationDir: config.kit.package.dir + }); +} + +async function try_load_svelte2tsx() { + try { + const svelte2tsx = (await import('svelte2tsx')).emitDts; + if (!svelte2tsx) { + throw new Error('Old svelte2tsx version'); + } + return svelte2tsx; + } catch (e) { + throw new Error( + 'You need to install svelte2tsx >=0.4.1 if you want to generate type definitions' + ); + } +} diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test.svelte.d.ts new file mode 100644 index 000000000000..8cfa75e62de7 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test.svelte.d.ts @@ -0,0 +1,40 @@ +/** @typedef {typeof __propDef.props} TestProps */ +/** @typedef {typeof __propDef.events} TestEvents */ +/** @typedef {typeof __propDef.slots} TestSlots */ +export default class Test extends SvelteComponentTyped< + { + astring: string; + }, + { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }, + { + default: { + astring: string; + }; + } +> { + get astring(): string; +} +export type TestProps = typeof __propDef.props; +export type TestEvents = typeof __propDef.events; +export type TestSlots = typeof __propDef.slots; +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + astring: string; + }; + events: { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }; + slots: { + default: { + astring: string; + }; + }; +}; +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test2.svelte b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test2.svelte new file mode 100644 index 000000000000..06a5a3408e95 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test2.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test2.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test2.svelte.d.ts new file mode 100644 index 000000000000..c787a209ac12 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/Test2.svelte.d.ts @@ -0,0 +1,26 @@ +/** @typedef {typeof __propDef.props} Test2Props */ +/** @typedef {typeof __propDef.events} Test2Events */ +/** @typedef {typeof __propDef.slots} Test2Slots */ +export default class Test2 extends SvelteComponentTyped< + { + foo: boolean; + }, + { + [evt: string]: CustomEvent; + }, + {} +> {} +export type Test2Props = typeof __propDef.props; +export type Test2Events = typeof __propDef.events; +export type Test2Slots = typeof __propDef.slots; +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + foo: import('./foo').Foo; + }; + events: { + [evt: string]: CustomEvent; + }; + slots: {}; +}; +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/expected/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/expected/index.d.ts b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/index.d.ts new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/index.d.ts @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/expected/index.js b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/expected/package.json b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/package.json new file mode 100644 index 000000000000..a3a48fce0b0e --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/expected/package.json @@ -0,0 +1,13 @@ +{ + "name": "javascript", + "version": "1.0.0", + "description": "package-javascript-test", + "type": "module", + "exports": { + "./package.json": "./package.json", + "./index.js": "./index.js", + "./Test.svelte": "./Test.svelte", + "./Test2.svelte": "./Test2.svelte", + ".": "./index.js" + } +} diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/jsconfig.json b/packages/kit/src/core/make_package/test/fixtures/javascript/jsconfig.json new file mode 100644 index 000000000000..5417394ebe85 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "checkJs": true, + "paths": { + "$lib/*": ["src/lib/*"] + } + }, + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/package.json b/packages/kit/src/core/make_package/test/fixtures/javascript/package.json new file mode 100644 index 000000000000..e29e4689c6e0 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/package.json @@ -0,0 +1,5 @@ +{ + "name": "javascript", + "version": "1.0.0", + "description": "package-javascript-test" +} diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/src/app.html b/packages/kit/src/core/make_package/test/fixtures/javascript/src/app.html new file mode 100644 index 000000000000..245305c4ef5b --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/Test2.svelte b/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/Test2.svelte new file mode 100644 index 000000000000..06a5a3408e95 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/Test2.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/index.js b/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript/src/lib/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript/svelte.config.js b/packages/kit/src/core/make_package/test/fixtures/javascript/svelte.config.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test.svelte new file mode 100644 index 000000000000..b4be6a6bc321 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test.svelte @@ -0,0 +1,8 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test.svelte.d.ts new file mode 100644 index 000000000000..f3f86dd25e28 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test.svelte.d.ts @@ -0,0 +1,23 @@ +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + astring: string; + }; + events: { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }; + slots: { + default: { + astring: string; + }; + }; +}; +export declare type TestProps = typeof __propDef.props; +export declare type TestEvents = typeof __propDef.events; +export declare type TestSlots = typeof __propDef.slots; +export default class Test extends SvelteComponentTyped { + get astring(): string; +} +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test2.svelte b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test2.svelte new file mode 100644 index 000000000000..8cf672ac1374 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test2.svelte @@ -0,0 +1,3 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test2.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test2.svelte.d.ts new file mode 100644 index 000000000000..c5b3cb1befca --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/Test2.svelte.d.ts @@ -0,0 +1,16 @@ +import { SvelteComponentTyped } from 'svelte'; +import type { Foo } from './foo'; +declare const __propDef: { + props: { + foo: Foo; + }; + events: { + [evt: string]: CustomEvent; + }; + slots: {}; +}; +export declare type Test2Props = typeof __propDef.props; +export declare type Test2Events = typeof __propDef.events; +export declare type Test2Slots = typeof __propDef.slots; +export default class Test2 extends SvelteComponentTyped {} +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/index.d.ts b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/index.d.ts new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/index.d.ts @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/index.js b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/package.json b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/package.json new file mode 100644 index 000000000000..a3a48fce0b0e --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/package.json @@ -0,0 +1,13 @@ +{ + "name": "javascript", + "version": "1.0.0", + "description": "package-javascript-test", + "type": "module", + "exports": { + "./package.json": "./package.json", + "./index.js": "./index.js", + "./Test.svelte": "./Test.svelte", + "./Test2.svelte": "./Test2.svelte", + ".": "./index.js" + } +} diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/package.json b/packages/kit/src/core/make_package/test/fixtures/typescript/package.json new file mode 100644 index 000000000000..e29e4689c6e0 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/package.json @@ -0,0 +1,5 @@ +{ + "name": "javascript", + "version": "1.0.0", + "description": "package-javascript-test" +} diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/src/app.html b/packages/kit/src/core/make_package/test/fixtures/typescript/src/app.html new file mode 100644 index 000000000000..245305c4ef5b --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/Test.svelte new file mode 100644 index 000000000000..b73d6e03413d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/Test.svelte @@ -0,0 +1,9 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/Test2.svelte b/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/Test2.svelte new file mode 100644 index 000000000000..aef3fb6f6a5c --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/Test2.svelte @@ -0,0 +1,4 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/index.ts b/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/index.ts new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/src/lib/index.ts @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/svelte.config.cjs b/packages/kit/src/core/make_package/test/fixtures/typescript/svelte.config.cjs new file mode 100644 index 000000000000..d0526bbb674d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/svelte.config.cjs @@ -0,0 +1,5 @@ +const preprocess = require('svelte-preprocess'); + +module.exports = { + preprocess: preprocess() +}; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/tsconfig.json b/packages/kit/src/core/make_package/test/fixtures/typescript/tsconfig.json new file mode 100644 index 000000000000..0f54c3906f8b --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "moduleResolution": "node", + "module": "es2020", + "lib": ["es2020", "DOM"], + "target": "es2019", + /** + svelte-preprocess cannot figure out whether you have a value or a type, so tell TypeScript + to enforce using \`import type\` instead of \`import\` for Types. + */ + "importsNotUsedAsValues": "error", + "isolatedModules": true, + "resolveJsonModule": true, + /** + To have warnings/errors of the Svelte compiler at the correct position, + enable source maps by default. + */ + "sourceMap": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "baseUrl": ".", + "allowJs": true, + "checkJs": true, + "paths": { + "$lib/*": ["src/lib/*"] + } + }, + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.ts", "src/**/*.svelte"] +} diff --git a/packages/kit/src/core/make_package/test/index.js b/packages/kit/src/core/make_package/test/index.js new file mode 100644 index 000000000000..107563424844 --- /dev/null +++ b/packages/kit/src/core/make_package/test/index.js @@ -0,0 +1,77 @@ +import { join } from 'path'; +import { test } from 'uvu'; +import * as assert from 'uvu/assert'; +import { fileURLToPath } from 'url'; +import { load_config } from '../../config/index.js'; +import { make_package } from '../index.js'; +import { rimraf } from '../../filesystem/index.js'; +import { readdirSync, readFileSync } from 'fs'; +import prettier from 'prettier'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = join(__filename, '..'); + +/** + * @param {string} path + */ +async function test_make_package(path) { + const cwd = join(__dirname, 'fixtures', path); + + try { + const config = await load_config({ cwd }); + await make_package(config, cwd); + const expected_files = readdirSync(join(cwd, 'expected')); + const actual_files = readdirSync(join(cwd, 'package')); + assert.equal( + actual_files.length, + expected_files.length, + 'Contains a different number of files. Expected ' + + expected_files.join(',') + + ' , got ' + + actual_files.join(',') + ); + + for (const file of actual_files) { + assert.equal(expected_files.includes(file), true, `Did not expect ${file}`); + const expected_content = readFileSync(join(cwd, 'expected', file), 'utf-8'); + const actual_content = readFileSync(join(cwd, 'package', file), 'utf-8'); + assert.equal( + format(file, actual_content), + format(file, expected_content), + 'Expected equal file contents' + ); + } + } finally { + rimraf(join(cwd, 'package')); + } +} + +/** + * Format with Prettier in order to get expected and actual content aligned + * @param {string} file + * @param {string} content + */ +function format(file, content) { + if (file.endsWith('package.json')) { + // For some reason these are ordered differently in different test environments + const json = JSON.parse(content); + json.exports = Object.keys(json.exports) + .sort() + .map((key) => json.exports[key]); + content = JSON.stringify(json); + } + return prettier.format(content, { + parser: file.endsWith('.svelte') ? 'svelte' : file.endsWith('.json') ? 'json' : 'babel-ts', + plugins: ['prettier-plugin-svelte'] + }); +} + +test('create package (javascript)', async () => { + await test_make_package('javascript'); +}); + +test('create package (typescript)', async () => { + await test_make_package('typescript'); +}); + +test.run(); diff --git a/packages/kit/src/runtime/client/router.js b/packages/kit/src/runtime/client/router.js index 2195e4652cb2..52c144c604c5 100644 --- a/packages/kit/src/runtime/client/router.js +++ b/packages/kit/src/runtime/client/router.js @@ -121,7 +121,7 @@ export class Router { // Ignore if tag has // 1. 'download' attribute // 2. 'rel' attribute includes external - const rel = a.getAttribute('rel')?.split(/\s+/); + const rel = a.getAttribute('rel') && a.getAttribute('rel').split(/\s+/); if (a.hasAttribute('download') || (rel && rel.includes('external'))) { return; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5150d0c0650d..e7f47260d95d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,7 +228,8 @@ importers: selfsigned: ^1.10.11 sirv: ^1.0.12 svelte: ^3.38.2 - svelte-check: ^1.5.2 + svelte-check: ^2.2.0 + svelte2tsx: ~0.4.1 tiny-glob: ^0.2.8 typescript: ^4.2.4 uvu: ^0.5.1 @@ -263,7 +264,8 @@ importers: selfsigned: 1.10.11 sirv: 1.0.12 svelte: 3.38.2 - svelte-check: 1.5.2_svelte@3.38.2 + svelte-check: 2.2.0_svelte@3.38.2 + svelte2tsx: 0.4.1_svelte@3.38.2+typescript@4.2.4 tiny-glob: 0.2.8 typescript: 4.2.4 uvu: 0.5.1 @@ -1410,6 +1412,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /dedent-js/1.0.1: + resolution: {integrity: sha1-vuX7fJ5yfYXf+iRZDRDsGrElUwU=} + dev: true + /deep-is/0.1.3: resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} dev: true @@ -2393,6 +2399,12 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true + /lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.2.0 + dev: true + /lru-cache/4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -2547,6 +2559,13 @@ packages: engines: {node: '>= 0.6'} dev: true + /no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.2.0 + dev: true + /node-fetch/3.0.0-beta.9: resolution: {integrity: sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==} engines: {node: ^10.17 || >=12.3} @@ -2747,6 +2766,13 @@ packages: lines-and-columns: 1.1.6 dev: true + /pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.2.0 + dev: true + /path-exists/3.0.0: resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} engines: {node: '>=4'} @@ -3370,8 +3396,8 @@ packages: dependencies: has-flag: 4.0.0 - /svelte-check/1.5.2_svelte@3.38.2: - resolution: {integrity: sha512-x9Pc13r814TKrMXY70IyqDEmPzuFiqNSpBmsrMKrFpi995MiG+lmqYnyw8iQC+DGh7H3eUt3LIFXbNd396XIFw==} + /svelte-check/2.2.0_svelte@3.38.2: + resolution: {integrity: sha512-6Lo5h/I2LlygtKn9sl2n5hAPBZgeY99wlsz0+6f5K3qCpMwYC8rkcbrZkNpNEMwbMABQkcWOKb5cfEew6Q/Kpg==} hasBin: true peerDependencies: svelte: ^3.24.0 @@ -3381,6 +3407,7 @@ packages: glob: 7.1.6 import-fresh: 3.3.0 minimist: 1.2.5 + sade: 1.7.4 source-map: 0.7.3 svelte: 3.38.2 svelte-preprocess: 4.7.3_svelte@3.38.2+typescript@4.2.4 @@ -3508,6 +3535,18 @@ packages: engines: {node: '>= 8'} dev: true + /svelte2tsx/0.4.1_svelte@3.38.2+typescript@4.2.4: + resolution: {integrity: sha512-qqXWg+wlsYXhtolKI2NGL52rK7ACejNzEKn98qcz2T6Fd1e73+YPZMw/FNeGRSZLCdNxzGf7QJDhzIiK3MXihA==} + peerDependencies: + svelte: ^3.24 + typescript: ^4.1.2 + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 3.38.2 + typescript: 4.2.4 + dev: true + /table/6.6.0: resolution: {integrity: sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg==} engines: {node: '>=10.0.0'} @@ -3626,6 +3665,10 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true + /tslib/2.2.0: + resolution: {integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==} + dev: true + /tsutils/3.21.0_typescript@4.2.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} From 8affef2eb0183bbf2deda9f6b528795fbf95a4e0 Mon Sep 17 00:00:00 2001 From: JeanJPNM <61994401+JeanJPNM@users.noreply.github.com> Date: Tue, 6 Jul 2021 09:29:49 -0300 Subject: [PATCH 101/129] [fix] `ReadOnlyFormData` types (#1830) Fix type errors inside ReadOnlyFormData that didn't allow it to be used inside for..of loops --- .changeset/real-pens-watch.md | 5 +++++ packages/kit/types/helper.d.ts | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 .changeset/real-pens-watch.md diff --git a/.changeset/real-pens-watch.md b/.changeset/real-pens-watch.md new file mode 100644 index 000000000000..076a5e30c7d2 --- /dev/null +++ b/.changeset/real-pens-watch.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Fix type errors inside ReadOnlyFormData that didn't allow it to be used inside for..of loops diff --git a/packages/kit/types/helper.d.ts b/packages/kit/types/helper.d.ts index 5660a255763f..ee80e4dbb285 100644 --- a/packages/kit/types/helper.d.ts +++ b/packages/kit/types/helper.d.ts @@ -1,10 +1,11 @@ -interface ReadOnlyFormData extends Iterator<[string, string]> { +interface ReadOnlyFormData { get: (key: string) => string; getAll: (key: string) => string[]; has: (key: string) => boolean; - entries: () => Iterator<[string, string]>; - keys: () => Iterator; - values: () => Iterator; + entries: () => Generator<[string, string], void>; + keys: () => Generator; + values: () => Generator; + [Symbol.iterator]: () => Generator<[string, string], void>; } type BaseBody = string | Buffer | ReadOnlyFormData; From 6f6a3ff2510fb52ba99ffc94ef766685a8e084f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 6 Jul 2021 10:51:34 -0400 Subject: [PATCH 102/129] Version Packages (next) (#1814) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 4 ++++ packages/adapter-node/CHANGELOG.md | 6 ++++++ packages/adapter-node/package.json | 2 +- packages/kit/CHANGELOG.md | 8 ++++++++ packages/kit/package.json | 2 +- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 99164d1eaf90..b5ac8905ed8f 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -84,6 +84,7 @@ "few-points-taste", "few-rockets-think", "few-singers-pump", + "few-suits-flash", "fifty-turtles-joke", "five-shirts-allow", "flat-cameras-build", @@ -101,6 +102,7 @@ "fuzzy-cougars-compare", "fuzzy-ghosts-call", "fuzzy-jeans-join", + "fuzzy-kids-turn", "gold-moles-hunt", "gold-trains-dream", "good-beans-invite", @@ -185,6 +187,7 @@ "nine-starfishes-destroy", "nine-tomatoes-poke", "ninety-singers-invite", + "odd-islands-heal", "odd-ligers-swim", "old-files-jump", "olive-frogs-drive", @@ -223,6 +226,7 @@ "rare-ways-watch", "real-bikes-matter", "real-cherries-exercise", + "real-pens-watch", "rich-clocks-chew", "rich-pumpkins-applaud", "rotten-cats-pump", diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index 2c5b5cfdc18d..be814d250cc9 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-node +## 1.0.0-next.31 + +### Patch Changes + +- c639586: Check if '[out]/prerendered' exists, before precompressing + ## 1.0.0-next.30 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 1b6bd96ccff5..5e0d61119176 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.30", + "version": "1.0.0-next.31", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 2daa5fa35c17..ea06bce908cf 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/kit +## 1.0.0-next.121 + +### Patch Changes + +- 939188e: Use UTF-8 encoding for JSON endpoint responses by default +- 5b3e1e6: Add types generation to svelte-kit package command +- 8affef2: Fix type errors inside ReadOnlyFormData that didn't allow it to be used inside for..of loops + ## 1.0.0-next.120 ### Minor Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 4d10550fe7a8..607e665d7151 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.120", + "version": "1.0.0-next.121", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From 79b4fe2e50416c135b895f19b6faffd4eedf25a3 Mon Sep 17 00:00:00 2001 From: GrygrFlzr Date: Tue, 6 Jul 2021 22:06:40 +0700 Subject: [PATCH 103/129] chore: Update Vite to ^2.4.1 (#1834) --- .changeset/mighty-cherries-float.md | 5 +++ packages/kit/package.json | 4 +-- pnpm-lock.yaml | 47 +++++++++++++++++------------ 3 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 .changeset/mighty-cherries-float.md diff --git a/.changeset/mighty-cherries-float.md b/.changeset/mighty-cherries-float.md new file mode 100644 index 000000000000..dd0b9ea2d18d --- /dev/null +++ b/.changeset/mighty-cherries-float.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Update Vite to ^2.4.1 diff --git a/packages/kit/package.json b/packages/kit/package.json index 607e665d7151..fdb589484930 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -6,7 +6,7 @@ "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", "cheap-watch": "^1.0.3", "sade": "^1.7.4", - "vite": "^2.3.8" + "vite": "^2.4.1" }, "devDependencies": { "@rollup/plugin-replace": "^2.4.2", @@ -33,8 +33,8 @@ "selfsigned": "^1.10.11", "sirv": "^1.0.12", "svelte": "^3.38.2", - "svelte2tsx": "~0.4.1", "svelte-check": "^2.2.0", + "svelte2tsx": "~0.4.1", "tiny-glob": "^0.2.8", "typescript": "^4.2.4", "uvu": "^0.5.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7f47260d95d..543a0264a07e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -233,12 +233,12 @@ importers: tiny-glob: ^0.2.8 typescript: ^4.2.4 uvu: ^0.5.1 - vite: ^2.3.8 + vite: ^2.4.1 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.11_263f9b0c76b2aa4f42ad7af7d509f124 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.11_521dee33336505fa0c0cfefe092a237f cheap-watch: 1.0.3 sade: 1.7.4 - vite: 2.3.8 + vite: 2.4.1 devDependencies: '@rollup/plugin-replace': 2.4.2_rollup@2.47.0 '@types/amphtml-validator': 1.0.1 @@ -644,7 +644,7 @@ packages: rollup: 2.47.0 dev: false - /@sveltejs/vite-plugin-svelte/1.0.0-next.11_263f9b0c76b2aa4f42ad7af7d509f124: + /@sveltejs/vite-plugin-svelte/1.0.0-next.11_521dee33336505fa0c0cfefe092a237f: resolution: {integrity: sha512-EYR1I145k5rflVqhPwk3442m3bkYimTKSHM9uO5KdomXzt+GS9ZSBJQE3/wy1Di9V8OnGa3oKpckI3OZsHkTIA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: @@ -657,7 +657,7 @@ packages: require-relative: 0.8.7 svelte: 3.38.2 svelte-hmr: 0.14.4_svelte@3.38.2 - vite: 2.3.8 + vite: 2.4.1 transitivePeerDependencies: - rollup - supports-color @@ -1533,14 +1533,14 @@ packages: is-symbol: 1.0.3 dev: true - /esbuild/0.12.5: - resolution: {integrity: sha512-vcuP53pA5XiwUU4FnlXM+2PnVjTfHGthM7uP1gtp+9yfheGvFFbq/KyuESThmtoHPUrfZH5JpxGVJIFDVD1Egw==} + /esbuild/0.12.15: + resolution: {integrity: sha512-72V4JNd2+48eOVCXx49xoSWHgC3/cCy96e7mbXKY+WOWghN00cCmlGnwVLRhRHorvv0dgCyuMYBZlM2xDM5OQw==} hasBin: true requiresBuild: true dev: false - /esbuild/0.12.8: - resolution: {integrity: sha512-sx/LwlP/SWTGsd9G4RlOPrXnIihAJ2xwBUmzoqe2nWwbXORMQWtAGNJNYLBJJqa3e9PWvVzxdrtyFZJcr7D87g==} + /esbuild/0.12.5: + resolution: {integrity: sha512-vcuP53pA5XiwUU4FnlXM+2PnVjTfHGthM7uP1gtp+9yfheGvFFbq/KyuESThmtoHPUrfZH5JpxGVJIFDVD1Egw==} hasBin: true requiresBuild: true dev: false @@ -2133,8 +2133,8 @@ packages: ci-info: 2.0.0 dev: true - /is-core-module/2.3.0: - resolution: {integrity: sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==} + /is-core-module/2.4.0: + resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} dependencies: has: 1.0.3 @@ -2798,8 +2798,8 @@ packages: engines: {node: '>=8'} dev: true - /path-parse/1.0.6: - resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} /path-type/2.0.0: resolution: {integrity: sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=} @@ -3101,8 +3101,8 @@ packages: /resolve/1.20.0: resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} dependencies: - is-core-module: 2.3.0 - path-parse: 1.0.6 + is-core-module: 2.4.0 + path-parse: 1.0.7 /retry/0.12.0: resolution: {integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=} @@ -3127,6 +3127,15 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 + dev: true + + /rollup/2.52.7: + resolution: {integrity: sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: false /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3782,15 +3791,15 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite/2.3.8: - resolution: {integrity: sha512-QiEx+iqNnJntSgSF2fWRQvRey9pORIrtNJzNyBJXwc+BdzWs83FQolX84cTBo393cfhObrtWa6180dAa4NLDiQ==} + /vite/2.4.1: + resolution: {integrity: sha512-4BpKRis9uxIqPfIEcJ18LTBsamqnDFxTx45CXwagHjNltHa6PFEvf8Pe6OpgIHb0OyWT30OXOSSQvdOaX4OBiQ==} engines: {node: '>=12.0.0'} hasBin: true dependencies: - esbuild: 0.12.8 + esbuild: 0.12.15 postcss: 8.3.5 resolve: 1.20.0 - rollup: 2.47.0 + rollup: 2.52.7 optionalDependencies: fsevents: 2.3.2 dev: false From 2ac5781f63dcb78147bae5adf96dc4853e83f16a Mon Sep 17 00:00:00 2001 From: GrygrFlzr Date: Wed, 7 Jul 2021 05:35:01 +0700 Subject: [PATCH 104/129] fix: Use esbuild inject API (#1822) --- .changeset/ninety-games-flow.md | 8 +++++ packages/adapter-netlify/files/entry.js | 2 -- packages/adapter-netlify/files/shims.js | 1 + packages/adapter-netlify/index.js | 1 + packages/adapter-node/index.js | 1 + packages/adapter-node/rollup.config.js | 28 ++++++++++----- packages/adapter-node/src/index.js | 1 - packages/adapter-node/src/require_shim.js | 2 -- packages/adapter-node/src/server.js | 1 - packages/adapter-node/src/shims.js | 9 +++++ packages/adapter-vercel/files/entry.js | 1 - packages/adapter-vercel/files/shims.js | 1 + packages/adapter-vercel/index.js | 1 + packages/kit/src/core/adapt/prerender.js | 4 ++- packages/kit/src/core/dev/index.js | 4 ++- packages/kit/src/core/start/index.js | 4 ++- packages/kit/src/install-fetch.js | 42 +++++++++++++---------- 17 files changed, 74 insertions(+), 37 deletions(-) create mode 100644 .changeset/ninety-games-flow.md create mode 100644 packages/adapter-netlify/files/shims.js delete mode 100644 packages/adapter-node/src/require_shim.js create mode 100644 packages/adapter-node/src/shims.js create mode 100644 packages/adapter-vercel/files/shims.js diff --git a/.changeset/ninety-games-flow.md b/.changeset/ninety-games-flow.md new file mode 100644 index 000000000000..7870d460b21c --- /dev/null +++ b/.changeset/ninety-games-flow.md @@ -0,0 +1,8 @@ +--- +'@sveltejs/adapter-netlify': patch +'@sveltejs/adapter-node': patch +'@sveltejs/adapter-vercel': patch +'@sveltejs/kit': patch +--- + +Use esbuild inject API to insert shims diff --git a/packages/adapter-netlify/files/entry.js b/packages/adapter-netlify/files/entry.js index be3b0b556f91..57356d123d3a 100644 --- a/packages/adapter-netlify/files/entry.js +++ b/packages/adapter-netlify/files/entry.js @@ -1,5 +1,3 @@ -import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved - // TODO hardcoding the relative location makes this brittle import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved diff --git a/packages/adapter-netlify/files/shims.js b/packages/adapter-netlify/files/shims.js new file mode 100644 index 000000000000..8ef6d625bff2 --- /dev/null +++ b/packages/adapter-netlify/files/shims.js @@ -0,0 +1 @@ +export { fetch, Response, Request, Headers } from '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index 8beb2413a477..fe2f48a6f64c 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -24,6 +24,7 @@ export default function () { entryPoints: ['.svelte-kit/netlify/entry.js'], outfile: join(functions, 'render/index.js'), bundle: true, + inject: [join(files, 'shims.js')], platform: 'node' }); diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 2d527c4d6b80..5640e6804986 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -63,6 +63,7 @@ export default function ({ format: 'esm', platform: 'node', target: 'node12', + inject: [join(files, 'shims.js')], define: { esbuild_app_dir: '"' + config.kit.appDir + '"' } diff --git a/packages/adapter-node/rollup.config.js b/packages/adapter-node/rollup.config.js index 89fa8e65ea78..51c98aa0f083 100644 --- a/packages/adapter-node/rollup.config.js +++ b/packages/adapter-node/rollup.config.js @@ -2,13 +2,23 @@ import { nodeResolve } from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; import json from '@rollup/plugin-json'; -export default { - input: 'src/index.js', - output: { - file: 'files/index.js', - format: 'esm', - sourcemap: true +export default [ + { + input: 'src/index.js', + output: { + file: 'files/index.js', + format: 'esm', + sourcemap: true + }, + plugins: [nodeResolve(), commonjs(), json()], + external: ['../output/server/app.js', './env.js', ...require('module').builtinModules] }, - plugins: [nodeResolve(), commonjs(), json()], - external: ['../output/server/app.js', './env.js', ...require('module').builtinModules] -}; + { + input: 'src/shims.js', + output: { + file: 'files/shims.js', + format: 'esm' + }, + external: ['module'] + } +]; diff --git a/packages/adapter-node/src/index.js b/packages/adapter-node/src/index.js index 59d3561d7975..5cdcce9401d9 100644 --- a/packages/adapter-node/src/index.js +++ b/packages/adapter-node/src/index.js @@ -1,4 +1,3 @@ -import './require_shim'; import { createServer } from './server'; // TODO hardcoding the relative location makes this brittle import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved diff --git a/packages/adapter-node/src/require_shim.js b/packages/adapter-node/src/require_shim.js deleted file mode 100644 index 2aa5259586f1..000000000000 --- a/packages/adapter-node/src/require_shim.js +++ /dev/null @@ -1,2 +0,0 @@ -import { createRequire } from 'module'; -globalThis.require = createRequire(import.meta.url); diff --git a/packages/adapter-node/src/server.js b/packages/adapter-node/src/server.js index ff35aa835a5f..e083220b56ec 100644 --- a/packages/adapter-node/src/server.js +++ b/packages/adapter-node/src/server.js @@ -1,4 +1,3 @@ -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'; diff --git a/packages/adapter-node/src/shims.js b/packages/adapter-node/src/shims.js new file mode 100644 index 000000000000..8e96e704bd45 --- /dev/null +++ b/packages/adapter-node/src/shims.js @@ -0,0 +1,9 @@ +import { createRequire } from 'module'; +export { fetch, Response, Request, Headers } from '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved + +// esbuild automatically renames "require" +// So we still have to use Object.defineProperty here +Object.defineProperty(globalThis, 'require', { + enumerable: true, + value: createRequire(import.meta.url) +}); diff --git a/packages/adapter-vercel/files/entry.js b/packages/adapter-vercel/files/entry.js index 93bfc20c91b4..f1bb7f4d6b46 100644 --- a/packages/adapter-vercel/files/entry.js +++ b/packages/adapter-vercel/files/entry.js @@ -1,5 +1,4 @@ import { getRawBody } from '@sveltejs/kit/node'; // eslint-disable-line import/no-unresolved -import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved // TODO hardcoding the relative location makes this brittle import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved diff --git a/packages/adapter-vercel/files/shims.js b/packages/adapter-vercel/files/shims.js new file mode 100644 index 000000000000..8ef6d625bff2 --- /dev/null +++ b/packages/adapter-vercel/files/shims.js @@ -0,0 +1 @@ +export { fetch, Response, Request, Headers } from '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved diff --git a/packages/adapter-vercel/index.js b/packages/adapter-vercel/index.js index ffdedfe3ceeb..aef613d2f895 100644 --- a/packages/adapter-vercel/index.js +++ b/packages/adapter-vercel/index.js @@ -31,6 +31,7 @@ export default function () { entryPoints: ['.svelte-kit/vercel/entry.js'], outfile: join(dirs.lambda, 'index.js'), bundle: true, + inject: [join(files, 'shims.js')], platform: 'node' }); diff --git a/packages/kit/src/core/adapt/prerender.js b/packages/kit/src/core/adapt/prerender.js index 43d15e7e49a8..f06afd18f91e 100644 --- a/packages/kit/src/core/adapt/prerender.js +++ b/packages/kit/src/core/adapt/prerender.js @@ -2,7 +2,7 @@ import { readFileSync, writeFileSync } from 'fs'; import { dirname, join, resolve as resolve_path } from 'path'; import { parse, pathToFileURL, resolve } from 'url'; import { mkdirp } from '../filesystem/index.js'; -import '../../install-fetch.js'; +import { __fetch_polyfill } from '../../install-fetch.js'; import { SVELTE_KIT } from '../constants.js'; /** @param {string} html */ @@ -58,6 +58,8 @@ const REDIRECT = 3; * all: boolean; // disregard `export const prerender = true` * }} opts */ export async function prerender({ cwd, out, log, config, build_data, fallback, all }) { + __fetch_polyfill(); + const dir = resolve_path(cwd, `${SVELTE_KIT}/output`); const seen = new Set(); diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index f331d8323d78..d393e2b1096d 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -15,7 +15,7 @@ import { copy_assets, get_no_external, resolve_entry } from '../utils.js'; import { deep_merge, print_config_conflicts } from '../config/index.js'; import { svelte } from '@sveltejs/vite-plugin-svelte'; import { get_server } from '../server/index.js'; -import '../../install-fetch.js'; +import { __fetch_polyfill } from '../../install-fetch.js'; import { SVELTE_KIT } from '../constants.js'; /** @typedef {{ cwd?: string, port: number, host: string, https: boolean, config: import('types/config').ValidatedConfig }} Options */ @@ -23,6 +23,8 @@ import { SVELTE_KIT } from '../constants.js'; /** @param {Options} opts */ export function dev(opts) { + __fetch_polyfill(); + return new Watcher(opts).init(); } diff --git a/packages/kit/src/core/start/index.js b/packages/kit/src/core/start/index.js index ff0c1d711a9e..894b2980adb0 100644 --- a/packages/kit/src/core/start/index.js +++ b/packages/kit/src/core/start/index.js @@ -4,7 +4,7 @@ import sirv from 'sirv'; import { getRawBody } from '../node/index.js'; import { join, resolve } from 'path'; import { get_server } from '../server/index.js'; -import '../../install-fetch.js'; +import { __fetch_polyfill } from '../../install-fetch.js'; import { SVELTE_KIT } from '../constants.js'; /** @param {string} dir */ @@ -24,6 +24,8 @@ const mutable = (dir) => * }} opts */ export async function start({ port, host, config, https: use_https = false, cwd = process.cwd() }) { + __fetch_polyfill(); + const app_file = resolve(cwd, `${SVELTE_KIT}/output/server/app.js`); /** @type {import('types/internal').App} */ diff --git a/packages/kit/src/install-fetch.js b/packages/kit/src/install-fetch.js index 83a9b55fe29e..629e38884996 100644 --- a/packages/kit/src/install-fetch.js +++ b/packages/kit/src/install-fetch.js @@ -1,20 +1,26 @@ import fetch, { Response, Request, Headers } from 'node-fetch'; -Object.defineProperties(globalThis, { - fetch: { - enumerable: true, - value: fetch - }, - Response: { - enumerable: true, - value: Response - }, - Request: { - enumerable: true, - value: Request - }, - Headers: { - enumerable: true, - value: Headers - } -}); +// exported for dev, prerender, and preview +export function __fetch_polyfill() { + Object.defineProperties(globalThis, { + fetch: { + enumerable: true, + value: fetch + }, + Response: { + enumerable: true, + value: Response + }, + Request: { + enumerable: true, + value: Request + }, + Headers: { + enumerable: true, + value: Headers + } + }); +} + +// exported for esbuild shims in adapters +export { fetch, Response, Request, Headers }; From d09a4e1f2088574135f256c819add4b052a50be2 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 6 Jul 2021 15:35:42 -0700 Subject: [PATCH 105/129] Surface Svelte compiler errors (#1827) --- .changeset/hot-bags-jump.md | 5 +++++ examples/hn.svelte.dev/src/routes/__error.svelte | 5 ++++- packages/kit/assets/components/error.svelte | 10 +++++++--- packages/kit/src/core/build/index.js | 5 ++++- packages/kit/src/core/dev/index.js | 5 ++++- packages/kit/src/runtime/server/page/render.js | 6 +++--- 6 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 .changeset/hot-bags-jump.md diff --git a/.changeset/hot-bags-jump.md b/.changeset/hot-bags-jump.md new file mode 100644 index 000000000000..c1f6f5d76d39 --- /dev/null +++ b/.changeset/hot-bags-jump.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Surface Svelte compiler errors diff --git a/examples/hn.svelte.dev/src/routes/__error.svelte b/examples/hn.svelte.dev/src/routes/__error.svelte index a144895c0be1..fc4450d67e69 100644 --- a/examples/hn.svelte.dev/src/routes/__error.svelte +++ b/examples/hn.svelte.dev/src/routes/__error.svelte @@ -24,8 +24,11 @@

{title}

-

{message}

+
{message}
+{#if dev && error.frame} +
{error.frame}
+{/if} {#if dev && error.stack}
{error.stack}
{/if} diff --git a/packages/kit/assets/components/error.svelte b/packages/kit/assets/components/error.svelte index 02bfa098d764..8a66b8d6be52 100644 --- a/packages/kit/assets/components/error.svelte +++ b/packages/kit/assets/components/error.svelte @@ -11,15 +11,19 @@ /** @type {number} */ export let status; - /** @type {Error} */ + /** @type {Error & {frame?: string} & {loc?: object}} */ export let error;

{status}

-

{error.message}

+
{error.message}
- + + +{#if error.frame} +
{error.frame}
+{/if} {#if error.stack}
{error.stack}
{/if} diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index fca26b0e95fb..8ce8a11020f9 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -313,7 +313,10 @@ async function build_server( floc: ${config.kit.floc}, get_component_path: id => ${s(`${config.kit.paths.assets}/${config.kit.appDir}/`)} + entry_lookup[id], get_stack: error => String(error), // for security - handle_error: error => { + handle_error: /** @param {Error & {frame?: string}} error */ (error) => { + if (error.frame) { + console.error(error.frame); + } console.error(error.stack); error.stack = options.get_stack(error); }, diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index d393e2b1096d..70f6caf32622 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -209,9 +209,12 @@ class Watcher extends EventEmitter { this.vite.ssrFixStacktrace(error); return error.stack; }, - handle_error: (error) => { + handle_error: /** @param {Error & {frame?: string}} error */ (error) => { this.vite.ssrFixStacktrace(error); console.error(colors.bold().red(error.message)); + if (error.frame) { + console.error(colors.gray(error.frame)); + } console.error(colors.gray(error.stack)); }, hooks: { diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index ef9c72e128f4..6e0f10f47a31 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -210,13 +210,13 @@ function try_serialize(data, fail) { // Ensure we return something truthy so the client will not re-render the page over the error -/** @param {Error} error */ +/** @param {Error & {frame?: string} & {loc?: object}} error */ function serialize_error(error) { if (!error) return null; let serialized = try_serialize(error); if (!serialized) { - const { name, message, stack } = error; - serialized = try_serialize({ name, message, stack }); + const { name, message, stack, frame, loc } = error; + serialized = try_serialize({ name, message, stack, frame, loc }); } if (!serialized) { serialized = '{}'; From 0935c169b4594aeef166acabf5c2a0c02e557d8f Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 6 Jul 2021 16:41:41 -0700 Subject: [PATCH 106/129] Link to Changelogs from Readmes (#1839) --- packages/adapter-begin/README.md | 4 ++++ packages/adapter-cloudflare-workers/README.md | 4 ++++ packages/adapter-netlify/README.md | 4 ++++ packages/adapter-node/README.md | 4 ++++ packages/adapter-static/README.md | 4 ++++ packages/adapter-vercel/README.md | 4 ++++ packages/kit/README.md | 4 ++++ 7 files changed, 28 insertions(+) diff --git a/packages/adapter-begin/README.md b/packages/adapter-begin/README.md index 2ba5f1919f44..b21ef7100a1d 100644 --- a/packages/adapter-begin/README.md +++ b/packages/adapter-begin/README.md @@ -31,3 +31,7 @@ get / @static folder public ``` + +## Changelog + +[The Changelog for this package is available on GitHub](https://github.com/sveltejs/kit/blob/master/packages/adapter-begin/CHANGELOG.md). diff --git a/packages/adapter-cloudflare-workers/README.md b/packages/adapter-cloudflare-workers/README.md index 3b1820f4c521..a121b1ec70dc 100644 --- a/packages/adapter-cloudflare-workers/README.md +++ b/packages/adapter-cloudflare-workers/README.md @@ -25,3 +25,7 @@ entry-point = "./workers-site" It's recommended that you add the `build` and `workers-site` folders (or whichever other folders you specify) to your `.gitignore`. More info on configuring a cloudflare worker site can be found [here](https://developers.cloudflare.com/workers/platform/sites/start-from-existing) + +## Changelog + +[The Changelog for this package is available on GitHub](https://github.com/sveltejs/kit/blob/master/packages/adapter-cloudflare-workers/CHANGELOG.md). diff --git a/packages/adapter-netlify/README.md b/packages/adapter-netlify/README.md index 09c09ee15a42..15a5e05710cc 100644 --- a/packages/adapter-netlify/README.md +++ b/packages/adapter-netlify/README.md @@ -52,3 +52,7 @@ During compilation a required "catch all" redirect rule is automatically appende 1. Create your Netlify HTML form as described [here](https://docs.netlify.com/forms/setup/#html-forms), e.g. as `/routes/contact.svelte`. (Don't forget to add the hidden `form-name` input element!) 2. Netlify's build bot parses your HTML files at deploy time, which means your form must be [prerendered](https://kit.svelte.dev/docs#ssr-and-javascript-prerender) as HTML. You can either add `export const prerender = true` to your `contact.svelte` to prerender just that page or set the `kit.prerender.force: true` option to prerender all pages. 3. If your Netlify form has a [custom success message](https://docs.netlify.com/forms/setup/#success-messages) like `
` then ensure the corresponding `/routes/success.svelte` exists and is prerendered. + +## Changelog + +[The Changelog for this package is available on GitHub](https://github.com/sveltejs/kit/blob/master/packages/adapter-netlify/CHANGELOG.md). diff --git a/packages/adapter-node/README.md b/packages/adapter-node/README.md index 587bded1e1b6..2f09dc2646e0 100644 --- a/packages/adapter-node/README.md +++ b/packages/adapter-node/README.md @@ -45,6 +45,10 @@ HOST=127.0.0.1 PORT=4000 node build You can specify different environment variables if necessary using the `env` option. +## Changelog + +[The Changelog for this package is available on GitHub](https://github.com/sveltejs/kit/blob/master/packages/adapter-node/CHANGELOG.md). + ## License [MIT](LICENSE) diff --git a/packages/adapter-static/README.md b/packages/adapter-static/README.md index d6fdec925170..80cffc31840f 100644 --- a/packages/adapter-static/README.md +++ b/packages/adapter-static/README.md @@ -61,6 +61,10 @@ export default { When operating in SPA mode, only pages that have the [`prerender`](https://kit.svelte.dev/docs#ssr-and-javascript-prerender) option set will be prerendered. +## Changelog + +[The Changelog for this package is available on GitHub](https://github.com/sveltejs/kit/blob/master/packages/adapter-static/CHANGELOG.md). + ## License [MIT](LICENSE) diff --git a/packages/adapter-vercel/README.md b/packages/adapter-vercel/README.md index fb66a193ceb7..9fba0c62666f 100644 --- a/packages/adapter-vercel/README.md +++ b/packages/adapter-vercel/README.md @@ -18,3 +18,7 @@ export default { } }; ``` + +## Changelog + +[The Changelog for this package is available on GitHub](https://github.com/sveltejs/kit/blob/master/packages/adapter-vercel/CHANGELOG.md). diff --git a/packages/kit/README.md b/packages/kit/README.md index ed7731b77b1f..a88ce859b415 100644 --- a/packages/kit/README.md +++ b/packages/kit/README.md @@ -12,3 +12,7 @@ npm run dev ``` See the [documentation](https://kit.svelte.dev/docs) to learn more. + +## Changelog + +[The Changelog for this package is available on GitHub](https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md). From 2b76da57cdaeb8e5665e57a5d9afac84155685b2 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 6 Jul 2021 16:45:33 -0700 Subject: [PATCH 107/129] Cleanup CHANGELOG history (#1838) --- .changeset/fuzzy-jeans-join.md | 2 +- .changeset/heavy-ways-agree.md | 2 +- .changeset/olive-maps-join.md | 2 +- .changeset/wild-cooks-drive.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.changeset/fuzzy-jeans-join.md b/.changeset/fuzzy-jeans-join.md index 9dcd19d459ab..7e7fb2a48910 100644 --- a/.changeset/fuzzy-jeans-join.md +++ b/.changeset/fuzzy-jeans-join.md @@ -1,5 +1,5 @@ --- -'@sveltejs/adapter-node': minor +'@sveltejs/adapter-node': patch --- Make adapter node work under esm diff --git a/.changeset/heavy-ways-agree.md b/.changeset/heavy-ways-agree.md index 7f9c99c3d50a..b0ff74f82590 100644 --- a/.changeset/heavy-ways-agree.md +++ b/.changeset/heavy-ways-agree.md @@ -1,5 +1,5 @@ --- -'@sveltejs/adapter-node': minor +'@sveltejs/adapter-node': patch --- Allow sirv to looks for precompiled gzip and brotli files by default diff --git a/.changeset/olive-maps-join.md b/.changeset/olive-maps-join.md index e07003c51951..660816377adb 100644 --- a/.changeset/olive-maps-join.md +++ b/.changeset/olive-maps-join.md @@ -1,5 +1,5 @@ --- -'@sveltejs/kit': minor +'@sveltejs/kit': patch --- fix attribute validation in generated script tag diff --git a/.changeset/wild-cooks-drive.md b/.changeset/wild-cooks-drive.md index 3c9cbcd86772..8b06482bd2cb 100644 --- a/.changeset/wild-cooks-drive.md +++ b/.changeset/wild-cooks-drive.md @@ -1,5 +1,5 @@ --- -'@sveltejs/kit': minor +'@sveltejs/kit': patch --- Remove endpoints from the files built for the client From 163f527f4c3719f19b55653c6fee7ea8fce3036d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 6 Jul 2021 16:45:57 -0700 Subject: [PATCH 108/129] Version Packages (next) (#1835) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 3 +++ packages/adapter-netlify/CHANGELOG.md | 6 ++++++ packages/adapter-netlify/package.json | 2 +- packages/adapter-node/CHANGELOG.md | 6 ++++++ packages/adapter-node/package.json | 2 +- packages/adapter-vercel/CHANGELOG.md | 6 ++++++ packages/adapter-vercel/package.json | 2 +- packages/kit/CHANGELOG.md | 8 ++++++++ packages/kit/package.json | 2 +- 9 files changed, 33 insertions(+), 4 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index b5ac8905ed8f..a47befd6189f 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -126,6 +126,7 @@ "heavy-papayas-smile", "heavy-ways-agree", "hip-elephants-judge", + "hot-bags-jump", "hot-keys-walk", "hot-kings-confess", "hungry-lemons-scream", @@ -164,6 +165,7 @@ "metal-nails-divide", "metal-tigers-kiss", "mighty-carrots-switch", + "mighty-cherries-float", "mighty-garlics-pretend", "mighty-pumpkins-stare", "modern-boats-lie", @@ -186,6 +188,7 @@ "nine-rats-heal", "nine-starfishes-destroy", "nine-tomatoes-poke", + "ninety-games-flow", "ninety-singers-invite", "odd-islands-heal", "odd-ligers-swim", diff --git a/packages/adapter-netlify/CHANGELOG.md b/packages/adapter-netlify/CHANGELOG.md index b1c9cac79508..87104a0ed3b0 100644 --- a/packages/adapter-netlify/CHANGELOG.md +++ b/packages/adapter-netlify/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-netlify +## 1.0.0-next.19 + +### Patch Changes + +- 2ac5781: Use esbuild inject API to insert shims + ## 1.0.0-next.18 ### Patch Changes diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index d8556044321b..07ccb557b683 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-netlify", - "version": "1.0.0-next.18", + "version": "1.0.0-next.19", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index be814d250cc9..5ff9738c541c 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-node +## 1.0.0-next.32 + +### Patch Changes + +- 2ac5781: Use esbuild inject API to insert shims + ## 1.0.0-next.31 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 5e0d61119176..1e53915146dd 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "1.0.0-next.31", + "version": "1.0.0-next.32", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/adapter-vercel/CHANGELOG.md b/packages/adapter-vercel/CHANGELOG.md index b04728ae068f..6d62e2f6e3cb 100644 --- a/packages/adapter-vercel/CHANGELOG.md +++ b/packages/adapter-vercel/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/adapter-vercel +## 1.0.0-next.24 + +### Patch Changes + +- 2ac5781: Use esbuild inject API to insert shims + ## 1.0.0-next.23 ### Patch Changes diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 87d083c5fe0d..03fc82a84109 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-vercel", - "version": "1.0.0-next.23", + "version": "1.0.0-next.24", "type": "module", "exports": { "import": "./index.js" diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index ea06bce908cf..bea5acb611e5 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/kit +## 1.0.0-next.122 + +### Patch Changes + +- d09a4e1: Surface Svelte compiler errors +- 79b4fe2: Update Vite to ^2.4.1 +- 2ac5781: Use esbuild inject API to insert shims + ## 1.0.0-next.121 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index fdb589484930..c4d8dfdf3d9c 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.121", + "version": "1.0.0-next.122", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From 09a8eaf4d10cb093d8c1fa869edec3fbde79ae60 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 6 Jul 2021 16:50:19 -0700 Subject: [PATCH 109/129] Cleanup CHANGELOGs since they're only incrementally regenerated --- packages/adapter-node/CHANGELOG.md | 7 ++----- packages/kit/CHANGELOG.md | 10 ++-------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index 5ff9738c541c..1816886e2f5c 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -39,12 +39,9 @@ ## 1.0.0-next.26 -### Minor Changes - -- 9a7195b: Allow sirv to looks for precompiled gzip and brotli files by default - ### Patch Changes +- 9a7195b: Allow sirv to looks for precompiled gzip and brotli files by default - 53f3322: Fix build when using TypeScript and there is a `tsconfig.json` with `target: 'es2019'` or earlier ## 1.0.0-next.25 @@ -188,7 +185,7 @@ ## 1.0.0-next.4 -### Minor Changes +### Patch Changes - Make adapter node work under esm diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index bea5acb611e5..33b84ef7512e 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -18,12 +18,9 @@ ## 1.0.0-next.120 -### Minor Changes - -- 9fbaeda: fix attribute validation in generated script tag - ### Patch Changes +- 9fbaeda: fix attribute validation in generated script tag - 9f0c54a: Externalize app initialization to adapters - 0d69e55: Add generic type for session - 325c223: Improve RequestHandler and EndpointOutput type declarations. @@ -550,12 +547,9 @@ ## 1.0.0-next.45 -### Minor Changes - -- 925638a: Remove endpoints from the files built for the client - ### Patch Changes +- 925638a: Remove endpoints from the files built for the client - c3cf3f3: Bump deps - 625747d: kit: bundle @sveltejs/kit into built application - Updated dependencies [c3cf3f3] From 4b25615acc308dc25deefe52c12ad0a657c7f99e Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Wed, 7 Jul 2021 10:42:19 +0700 Subject: [PATCH 110/129] [fix] correct `ReadOnlyFormData` generator implementation (#1837) --- .changeset/blue-llamas-exist.md | 5 ++ .../server/parse_body/read_only_form_data.js | 8 +-- .../parse_body/read_only_form_data.spec.js | 59 +++++++++++++++++++ 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 .changeset/blue-llamas-exist.md create mode 100644 packages/kit/src/runtime/server/parse_body/read_only_form_data.spec.js diff --git a/.changeset/blue-llamas-exist.md b/.changeset/blue-llamas-exist.md new file mode 100644 index 000000000000..f83044e56b21 --- /dev/null +++ b/.changeset/blue-llamas-exist.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Fix ReadOnlyFormData keys and values method implementation diff --git a/packages/kit/src/runtime/server/parse_body/read_only_form_data.js b/packages/kit/src/runtime/server/parse_body/read_only_form_data.js index eced5918d1bf..3268c4ffcc5c 100644 --- a/packages/kit/src/runtime/server/parse_body/read_only_form_data.js +++ b/packages/kit/src/runtime/server/parse_body/read_only_form_data.js @@ -61,17 +61,13 @@ class ReadOnlyFormData { } *keys() { - for (const [key, value] of this.#map) { - for (let i = 0; i < value.length; i += 1) { - yield key; - } - } + for (const [key] of this.#map) yield key; } *values() { for (const [, value] of this.#map) { for (let i = 0; i < value.length; i += 1) { - yield value; + yield value[i]; } } } diff --git a/packages/kit/src/runtime/server/parse_body/read_only_form_data.spec.js b/packages/kit/src/runtime/server/parse_body/read_only_form_data.spec.js new file mode 100644 index 000000000000..a792e00967b4 --- /dev/null +++ b/packages/kit/src/runtime/server/parse_body/read_only_form_data.spec.js @@ -0,0 +1,59 @@ +import { test } from 'uvu'; +import * as assert from 'uvu/assert'; +import { read_only_form_data } from './read_only_form_data.js'; + +const { data, append } = read_only_form_data(); +append('foo', '1'), append('foo', '2'), append('foo', '3'); +append('bar', '2'), append('bar', '1'); + +test('ro-fd get returns first value', () => { + assert.equal(data.get('foo'), '1'); + assert.equal(data.get('bar'), '2'); +}); + +test('ro-fd getAll returns array', () => { + assert.equal(data.getAll('foo'), ['1', '2', '3']); + assert.equal(data.getAll('bar'), ['2', '1']); +}); + +test('ro-fd has returns boolean flag', () => { + assert.equal(data.has('foo'), true); + assert.equal(data.has('bar'), true); + assert.equal(data.has('baz'), false); +}); + +test('ro-fd iterator yields all key-value pairs', () => { + const values = []; + for (const [key, val] of data) values.push({ key, val }); + + assert.equal(values.length, 5); + assert.equal(values[0], { key: 'foo', val: '1' }); + assert.equal(values[3], { key: 'bar', val: '2' }); +}); + +test('ro-fd entries() yields all key-value pairs', () => { + const values = []; + for (const [key, val] of data.entries()) values.push({ key, val }); + + assert.equal(values.length, 5); + assert.equal(values[0], { key: 'foo', val: '1' }); + assert.equal(values[3], { key: 'bar', val: '2' }); +}); + +test('ro-fd keys() yields all unique keys', () => { + const values = []; + for (const key of data.keys()) values.push(key); + + assert.equal(values.length, 2); + assert.equal(values, ['foo', 'bar']); +}); + +test('ro-fd values() yields all nested values', () => { + const values = []; + for (const val of data.values()) values.push(val); + + assert.equal(values.length, 5); + assert.equal(values, ['1', '2', '3', '2', '1']); +}); + +test.run(); From 71480bbb75cd0bb4ef8b8a2436722879a155aa4e Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 6 Jul 2021 20:47:27 -0700 Subject: [PATCH 111/129] Improve HN example docs --- examples/hn.svelte.dev/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/examples/hn.svelte.dev/README.md b/examples/hn.svelte.dev/README.md index 46cce05b264c..6538918ad80a 100644 --- a/examples/hn.svelte.dev/README.md +++ b/examples/hn.svelte.dev/README.md @@ -4,12 +4,22 @@ Hacker News clone built with [Svelte](https://svelte.dev) and [SvelteKit](https: ## Running locally +This example uses a locally built version of SvelteKit, so you'll first need to build the SvelteKit library by running the following from the SvelteKit root directory: + +```bash +pnpm install +pnpm build +``` + +You can then build an run this example, which will be accessible at [localhost:3000](http://localhost:3000): + ```bash +cd examples/hn.svelte.dev pnpm install pnpm dev ``` -...then open [localhost:3000](http://localhost:3000). To build and start in prod mode: +To build and start in prod mode: ```bash pnpm build From 95398e45b9d8a78b8ea03d544841ee6934ad777a Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 7 Jul 2021 08:45:42 -0700 Subject: [PATCH 112/129] [docs] don't need to run pnpm install twice --- examples/hn.svelte.dev/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/hn.svelte.dev/README.md b/examples/hn.svelte.dev/README.md index 6538918ad80a..d00da6e0986c 100644 --- a/examples/hn.svelte.dev/README.md +++ b/examples/hn.svelte.dev/README.md @@ -15,7 +15,6 @@ You can then build an run this example, which will be accessible at [localhost:3 ```bash cd examples/hn.svelte.dev -pnpm install pnpm dev ``` From 7ab4fe6363bf6e57f19e92a979eba2fe9593f558 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 7 Jul 2021 09:38:11 -0700 Subject: [PATCH 113/129] Test with the latest version of Svelte (#1848) --- examples/hn.svelte.dev/package.json | 2 +- .../test/apps/prerendered/package.json | 2 +- .../adapter-static/test/apps/spa/package.json | 2 +- .../templates/default/package.json | 2 +- packages/kit/package.json | 2 +- packages/kit/test/apps/basics/package.json | 2 +- .../apps/basics/src/routes/imports/_tests.js | 5 +- pnpm-lock.yaml | 90 +++++++++++++++---- 8 files changed, 79 insertions(+), 28 deletions(-) diff --git a/examples/hn.svelte.dev/package.json b/examples/hn.svelte.dev/package.json index b73b72e60563..19b797ea0059 100644 --- a/examples/hn.svelte.dev/package.json +++ b/examples/hn.svelte.dev/package.json @@ -11,6 +11,6 @@ "devDependencies": { "@sveltejs/adapter-netlify": "workspace:*", "@sveltejs/kit": "workspace:*", - "svelte": "^3.38.2" + "svelte": "^3.38.3" } } diff --git a/packages/adapter-static/test/apps/prerendered/package.json b/packages/adapter-static/test/apps/prerendered/package.json index 27dace986fa8..720f285edf7a 100644 --- a/packages/adapter-static/test/apps/prerendered/package.json +++ b/packages/adapter-static/test/apps/prerendered/package.json @@ -8,7 +8,7 @@ }, "devDependencies": { "@sveltejs/kit": "next", - "svelte": "^3.29.0" + "svelte": "^3.38.3" }, "type": "module" } diff --git a/packages/adapter-static/test/apps/spa/package.json b/packages/adapter-static/test/apps/spa/package.json index 1995572e729e..e1dee4ef0ede 100644 --- a/packages/adapter-static/test/apps/spa/package.json +++ b/packages/adapter-static/test/apps/spa/package.json @@ -9,7 +9,7 @@ "devDependencies": { "@sveltejs/adapter-node": "next", "@sveltejs/kit": "next", - "svelte": "^3.29.0" + "svelte": "^3.38.3" }, "type": "module" } diff --git a/packages/create-svelte/templates/default/package.json b/packages/create-svelte/templates/default/package.json index 03189ad635bc..f8e8c94893da 100644 --- a/packages/create-svelte/templates/default/package.json +++ b/packages/create-svelte/templates/default/package.json @@ -11,7 +11,7 @@ "@sveltejs/adapter-netlify": "next", "@sveltejs/adapter-vercel": "next", "@sveltejs/kit": "next", - "svelte": "^3.38.2", + "svelte": "^3.34.0", "svelte-preprocess": "^4.7.3", "typescript": "^4.2.4" }, diff --git a/packages/kit/package.json b/packages/kit/package.json index c4d8dfdf3d9c..033c538fed40 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -32,7 +32,7 @@ "rollup": "^2.47.0", "selfsigned": "^1.10.11", "sirv": "^1.0.12", - "svelte": "^3.38.2", + "svelte": "^3.38.3", "svelte-check": "^2.2.0", "svelte2tsx": "~0.4.1", "tiny-glob": "^0.2.8", diff --git a/packages/kit/test/apps/basics/package.json b/packages/kit/test/apps/basics/package.json index 1b30a93482fb..e9c32e99e7f0 100644 --- a/packages/kit/test/apps/basics/package.json +++ b/packages/kit/test/apps/basics/package.json @@ -10,7 +10,7 @@ "devDependencies": { "@sveltejs/adapter-node": "workspace:*", "@sveltejs/kit": "workspace:*", - "svelte": "^3.29.0" + "svelte": "^3.38.3" }, "type": "module" } diff --git a/packages/kit/test/apps/basics/src/routes/imports/_tests.js b/packages/kit/test/apps/basics/src/routes/imports/_tests.js index 87bbd5228d16..2a2d1d247a3d 100644 --- a/packages/kit/test/apps/basics/src/routes/imports/_tests.js +++ b/packages/kit/test/apps/basics/src/routes/imports/_tests.js @@ -4,9 +4,6 @@ import * as assert from 'uvu/assert'; export default function (test) { test('imports from node_modules', '/imports', async ({ page, clicknav }) => { await clicknav('[href="/imports/markdown"]'); - assert.equal( - (await page.innerHTML('main')).trim(), - '

this is some markdown

' - ); + assert.equal((await page.innerHTML('p')).trim(), 'this is some markdown'); }); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 543a0264a07e..a2c9d6e87cd0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,11 +44,11 @@ importers: specifiers: '@sveltejs/adapter-netlify': workspace:* '@sveltejs/kit': workspace:* - svelte: ^3.38.2 + svelte: ^3.38.3 devDependencies: '@sveltejs/adapter-netlify': link:../../packages/adapter-netlify '@sveltejs/kit': link:../../packages/kit - svelte: 3.38.2 + svelte: 3.38.3 packages/adapter-begin: specifiers: @@ -183,7 +183,7 @@ importers: '@sveltejs/adapter-vercel': next '@sveltejs/kit': next cookie: ^0.4.1 - svelte: ^3.38.2 + svelte: ^3.34.0 svelte-preprocess: ^4.7.3 typescript: ^4.2.4 dependencies: @@ -227,7 +227,7 @@ importers: sade: ^1.7.4 selfsigned: ^1.10.11 sirv: ^1.0.12 - svelte: ^3.38.2 + svelte: ^3.38.3 svelte-check: ^2.2.0 svelte2tsx: ~0.4.1 tiny-glob: ^0.2.8 @@ -235,7 +235,7 @@ importers: uvu: ^0.5.1 vite: ^2.4.1 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.11_521dee33336505fa0c0cfefe092a237f + '@sveltejs/vite-plugin-svelte': 1.0.0-next.11_7f2c501a1382bf91518307aaca32f4f7 cheap-watch: 1.0.3 sade: 1.7.4 vite: 2.4.1 @@ -263,9 +263,9 @@ importers: rollup: 2.47.0 selfsigned: 1.10.11 sirv: 1.0.12 - svelte: 3.38.2 - svelte-check: 2.2.0_svelte@3.38.2 - svelte2tsx: 0.4.1_svelte@3.38.2+typescript@4.2.4 + svelte: 3.38.3 + svelte-check: 2.2.0_svelte@3.38.3 + svelte2tsx: 0.4.1_svelte@3.38.3+typescript@4.2.4 tiny-glob: 0.2.8 typescript: 4.2.4 uvu: 0.5.1 @@ -644,7 +644,7 @@ packages: rollup: 2.47.0 dev: false - /@sveltejs/vite-plugin-svelte/1.0.0-next.11_521dee33336505fa0c0cfefe092a237f: + /@sveltejs/vite-plugin-svelte/1.0.0-next.11_7f2c501a1382bf91518307aaca32f4f7: resolution: {integrity: sha512-EYR1I145k5rflVqhPwk3442m3bkYimTKSHM9uO5KdomXzt+GS9ZSBJQE3/wy1Di9V8OnGa3oKpckI3OZsHkTIA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: @@ -655,8 +655,8 @@ packages: chalk: 4.1.1 debug: 4.3.2 require-relative: 0.8.7 - svelte: 3.38.2 - svelte-hmr: 0.14.4_svelte@3.38.2 + svelte: 3.38.3 + svelte-hmr: 0.14.4_svelte@3.38.3 vite: 2.4.1 transitivePeerDependencies: - rollup @@ -3405,7 +3405,7 @@ packages: dependencies: has-flag: 4.0.0 - /svelte-check/2.2.0_svelte@3.38.2: + /svelte-check/2.2.0_svelte@3.38.3: resolution: {integrity: sha512-6Lo5h/I2LlygtKn9sl2n5hAPBZgeY99wlsz0+6f5K3qCpMwYC8rkcbrZkNpNEMwbMABQkcWOKb5cfEew6Q/Kpg==} hasBin: true peerDependencies: @@ -3418,8 +3418,8 @@ packages: minimist: 1.2.5 sade: 1.7.4 source-map: 0.7.3 - svelte: 3.38.2 - svelte-preprocess: 4.7.3_svelte@3.38.2+typescript@4.2.4 + svelte: 3.38.3 + svelte-preprocess: 4.7.3_svelte@3.38.3+typescript@4.2.4 typescript: 4.2.4 transitivePeerDependencies: - '@babel/core' @@ -3434,12 +3434,12 @@ packages: - sugarss dev: true - /svelte-hmr/0.14.4_svelte@3.38.2: + /svelte-hmr/0.14.4_svelte@3.38.3: resolution: {integrity: sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==} peerDependencies: svelte: '>=3.19.0' dependencies: - svelte: 3.38.2 + svelte: 3.38.3 dev: false /svelte-preprocess/4.7.3_svelte@3.38.2+typescript@4.2.4: @@ -3491,6 +3491,55 @@ packages: typescript: 4.2.4 dev: true + /svelte-preprocess/4.7.3_svelte@3.38.3+typescript@4.2.4: + resolution: {integrity: sha512-Zx1/xLeGOIBlZMGPRCaXtlMe4ZA0faato5Dc3CosEqwu75MIEPuOstdkH6cy+RYTUYynoxzNaDxkPX4DbrPwRA==} + engines: {node: '>= 9.11.2'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 + node-sass: '*' + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.54.7 + sugarss: ^2.0.0 + svelte: ^3.23.0 + typescript: ^3.9.5 || ^4.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + node-sass: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': 2.0.4 + '@types/sass': 1.16.0 + detect-indent: 6.0.0 + strip-indent: 3.0.0 + svelte: 3.38.3 + typescript: 4.2.4 + dev: true + /svelte-preprocess/4.7.3_typescript@4.2.4: resolution: {integrity: sha512-Zx1/xLeGOIBlZMGPRCaXtlMe4ZA0faato5Dc3CosEqwu75MIEPuOstdkH6cy+RYTUYynoxzNaDxkPX4DbrPwRA==} engines: {node: '>= 9.11.2'} @@ -3544,7 +3593,12 @@ packages: engines: {node: '>= 8'} dev: true - /svelte2tsx/0.4.1_svelte@3.38.2+typescript@4.2.4: + /svelte/3.38.3: + resolution: {integrity: sha512-N7bBZJH0iF24wsalFZF+fVYMUOigaAUQMIcEKHO3jstK/iL8VmP9xE+P0/a76+FkNcWt+TDv2Gx1taUoUscrvw==} + engines: {node: '>= 8'} + dev: true + + /svelte2tsx/0.4.1_svelte@3.38.3+typescript@4.2.4: resolution: {integrity: sha512-qqXWg+wlsYXhtolKI2NGL52rK7ACejNzEKn98qcz2T6Fd1e73+YPZMw/FNeGRSZLCdNxzGf7QJDhzIiK3MXihA==} peerDependencies: svelte: ^3.24 @@ -3552,7 +3606,7 @@ packages: dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 3.38.2 + svelte: 3.38.3 typescript: 4.2.4 dev: true From 4d2fec52c4e2eb09891738e9fcc91c7e06caad93 Mon Sep 17 00:00:00 2001 From: GrygrFlzr Date: Wed, 7 Jul 2021 23:54:12 +0700 Subject: [PATCH 114/129] chore: Enable `vite.server.fs.strict` internally by default (#1842) --- .changeset/silly-grapes-cover.md | 5 ++++ documentation/faq/90-fs-strict.md | 10 +++++++ packages/kit/src/core/build/index.js | 39 +++++++++++++++++++++++++--- packages/kit/src/core/dev/index.js | 13 +++++++++- 4 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 .changeset/silly-grapes-cover.md create mode 100644 documentation/faq/90-fs-strict.md diff --git a/.changeset/silly-grapes-cover.md b/.changeset/silly-grapes-cover.md new file mode 100644 index 000000000000..a9c7c986e125 --- /dev/null +++ b/.changeset/silly-grapes-cover.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Enable Vite's server.fs.strict by default diff --git a/documentation/faq/90-fs-strict.md b/documentation/faq/90-fs-strict.md new file mode 100644 index 000000000000..26f0f19803be --- /dev/null +++ b/documentation/faq/90-fs-strict.md @@ -0,0 +1,10 @@ +--- +question: "Internal server error: The request url [...] is outside of Vite serving allow list" +--- + +For security reasons, Vite has been configured to only allow filesystem access when the request file fulfils one of these requirements: +- Within workspace root +- Within the listed `server.fs.allow` exceptions +- Part of the dependency graph of your application code + +Refer to Vite documentation for [`server.fs.allow`](https://vitejs.dev/config/#server-fs-allow) for configuration and more details. diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index 8ce8a11020f9..da8cb87ff7f6 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -134,8 +134,19 @@ async function build_client({ /** @type {any} */ const user_config = config.kit.vite(); + const default_config = { + server: { + fs: { + strict: true + } + } + }; + + // don't warn on overriding defaults + const [modified_user_config] = deep_merge(default_config, user_config); + /** @type {[any, string[]]} */ - const [merged_config, conflicts] = deep_merge(user_config, { + const [merged_config, conflicts] = deep_merge(modified_user_config, { configFile: false, root: cwd, base, @@ -408,8 +419,19 @@ async function build_server( /** @type {any} */ const user_config = config.kit.vite(); + const default_config = { + server: { + fs: { + strict: true + } + } + }; + + // don't warn on overriding defaults + const [modified_user_config] = deep_merge(default_config, user_config); + /** @type {[any, string[]]} */ - const [merged_config, conflicts] = deep_merge(user_config, { + const [merged_config, conflicts] = deep_merge(modified_user_config, { configFile: false, root: cwd, base, @@ -515,8 +537,19 @@ async function build_service_worker( /** @type {any} */ const user_config = config.kit.vite(); + const default_config = { + server: { + fs: { + strict: true + } + } + }; + + // don't warn on overriding defaults + const [modified_user_config] = deep_merge(default_config, user_config); + /** @type {[any, string[]]} */ - const [merged_config, conflicts] = deep_merge(user_config, { + const [merged_config, conflicts] = deep_merge(modified_user_config, { configFile: false, root: cwd, base, diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 70f6caf32622..d08da148b7b2 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -82,6 +82,14 @@ class Watcher extends EventEmitter { /** @type {any} */ const user_config = (this.config.kit.vite && this.config.kit.vite()) || {}; + const default_config = { + server: { + fs: { + strict: true + } + } + }; + /** @type {(req: import("http").IncomingMessage, res: import("http").ServerResponse) => void} */ let handler = (req, res) => {}; @@ -89,8 +97,11 @@ class Watcher extends EventEmitter { const alias = user_config.resolve && user_config.resolve.alias; + // don't warn on overriding defaults + const [modified_user_config] = deep_merge(default_config, user_config); + /** @type {[any, string[]]} */ - const [merged_config, conflicts] = deep_merge(user_config, { + const [merged_config, conflicts] = deep_merge(modified_user_config, { configFile: false, root: this.cwd, resolve: { From 64f749db8ca1e9bb08c38f271d9cd44b31920b83 Mon Sep 17 00:00:00 2001 From: hariombalhara Date: Wed, 7 Jul 2021 22:38:12 +0530 Subject: [PATCH 115/129] Service worker files exclusion support (#1645) --- .changeset/pink-poets-begin.md | 5 ++ documentation/docs/05-modules.md | 2 +- documentation/docs/14-configuration.md | 9 ++++ packages/kit/src/core/config/index.spec.js | 6 +++ packages/kit/src/core/config/options.js | 6 +++ packages/kit/src/core/config/test/index.js | 3 ++ .../src/core/create_manifest_data/index.js | 52 ++++++++++++++++--- .../core/create_manifest_data/index.spec.js | 5 +- packages/kit/types/config.d.ts | 6 +++ 9 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 .changeset/pink-poets-begin.md diff --git a/.changeset/pink-poets-begin.md b/.changeset/pink-poets-begin.md new file mode 100644 index 000000000000..78fad02b937b --- /dev/null +++ b/.changeset/pink-poets-begin.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +ServiceWorker files exclusion support available through svelte.config.js diff --git a/documentation/docs/05-modules.md b/documentation/docs/05-modules.md index ce6fb92f1ab9..d1e1ad64ce4b 100644 --- a/documentation/docs/05-modules.md +++ b/documentation/docs/05-modules.md @@ -70,5 +70,5 @@ import { build, files, timestamp } from '$service-worker'; ``` - `build` is an array of URL strings representing the files generated by Vite, suitable for caching with `cache.addAll(build)` -- `files` is an array of URL strings representing the files in your `static` directory, or whatever directory is specified by [`config.kit.files.assets`](#configuration) +- `files` is an array of URL strings representing the files in your `static` directory, or whatever directory is specified by [`config.kit.files.assets`](#configuration). You can exclude certain files from `static` directory using [`config.kit.serviceWorker.exclude`](#configuration) - `timestamp` is the result of calling `Date.now()` at build time. It's useful for generating unique cache names inside your service worker, so that a later deployment of your app can invalidate old caches diff --git a/documentation/docs/14-configuration.md b/documentation/docs/14-configuration.md index 243fe2075068..effc9ffb796e 100644 --- a/documentation/docs/14-configuration.md +++ b/documentation/docs/14-configuration.md @@ -25,6 +25,9 @@ const config = { serviceWorker: 'src/service-worker', template: 'src/app.html' }, + serviceWorker: { + exclude: [] + }, floc: false, host: null, hostHeader: null, @@ -87,6 +90,12 @@ An object containing zero or more of the following `string` values: - `hooks` — the location of your hooks module (see [Hooks](#hooks)) - `template` — the location of the template for HTML responses +### serviceWorker + +An object containing zero or more of the following values: + +- `exclude` - an array of glob patterns relative to `files.assets` dir. Files matching any of these would not be available in `$service-worker.files` e.g. if `files.assets` has value `static` then ['og-tags-images/**/*'] would match all files under `static/og-tags-images` dir. + ### floc Google's [FLoC](https://github.com/WICG/floc) is a technology for targeted advertising that the [Electronic Frontier Foundation](https://www.eff.org/) has deemed [harmful](https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea) to user privacy. [Browsers other than Chrome](https://www.theverge.com/2021/4/16/22387492/google-floc-ad-tech-privacy-browsers-brave-vivaldi-edge-mozilla-chrome-safari) have declined to implement it. diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index a6d4ada2e885..4472b27f2f9f 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -38,6 +38,9 @@ test('fills in defaults', () => { exclude: [] } }, + serviceWorker: { + exclude: [] + }, paths: { base: '', assets: '/.' @@ -133,6 +136,9 @@ test('fills in partial blanks', () => { exclude: [] } }, + serviceWorker: { + exclude: [] + }, paths: { base: '', assets: '/.' diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 1cf0af97f093..567a8c2b906b 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -79,6 +79,12 @@ const options = { hostHeader: expect_string(null), hydrate: expect_boolean(true), + serviceWorker: { + type: 'branch', + children: { + exclude: expect_array_of_strings([]) + } + }, package: { type: 'branch', diff --git a/packages/kit/src/core/config/test/index.js b/packages/kit/src/core/config/test/index.js index eb41d36ad697..8a0d8e0779fd 100644 --- a/packages/kit/src/core/config/test/index.js +++ b/packages/kit/src/core/config/test/index.js @@ -48,6 +48,9 @@ async function testLoadDefaultConfig(path) { exclude: [] } }, + serviceWorker: { + exclude: [] + }, paths: { base: '', assets: '/.' }, prerender: { crawl: true, enabled: true, force: false, pages: ['*'] }, router: true, diff --git a/packages/kit/src/core/create_manifest_data/index.js b/packages/kit/src/core/create_manifest_data/index.js index e03d2223e58a..6c1c8e580d04 100644 --- a/packages/kit/src/core/create_manifest_data/index.js +++ b/packages/kit/src/core/create_manifest_data/index.js @@ -2,6 +2,7 @@ import fs from 'fs'; import path from 'path'; import mime from 'mime'; import { posixify } from '../utils.js'; +import glob from 'tiny-glob/sync.js'; /** @typedef {{ * content: string; @@ -22,6 +23,44 @@ import { posixify } from '../utils.js'; const specials = new Set(['__layout', '__layout.reset', '__error']); +/** + * + * @param {import('types/config').ValidatedConfig} config + * @returns {import('types/internal').ManifestData['assets']} + */ +function get_assets_list(config) { + const assets_dir = config.kit.files.assets; + /** + * @type {import('types/internal').Asset[]} + */ + let assets = []; + if (fs.existsSync(assets_dir)) { + /** + * @type {string[]} + */ + const exclusions = config.kit.serviceWorker.exclude || []; + + exclusions.push('**/.DS_STORE'); + + /** + * @type {string[]} + */ + let excluded_paths = []; + + exclusions.forEach((exclusion) => { + excluded_paths = [ + ...excluded_paths, + ...glob(exclusion, { + cwd: assets_dir, + dot: true + }) + ]; + }); + assets = list_files(assets_dir, '', [], excluded_paths); + } + return assets; +} + /** * @param {{ * config: import('types/config').ValidatedConfig; @@ -237,10 +276,8 @@ export default function create_manifest_data({ config, output, cwd = process.cwd walk(config.kit.files.routes, [], [], [layout], [error]); - const assets_dir = config.kit.files.assets; - return { - assets: fs.existsSync(assets_dir) ? list_files(assets_dir, '') : [], + assets: get_assets_list(config), layout, error, components, @@ -375,8 +412,9 @@ function get_pattern(segments, add_trailing_slash) { * @param {string} dir * @param {string} path * @param {import('types/internal').Asset[]} files + * @param {string[]} excluded_paths Paths relative to dir which should be excluded from files list. */ -function list_files(dir, path, files = []) { +function list_files(dir, path, files = [], excluded_paths = []) { fs.readdirSync(dir).forEach((file) => { const full = `${dir}/${file}`; @@ -384,9 +422,11 @@ function list_files(dir, path, files = []) { const joined = path ? `${path}/${file}` : file; if (stats.isDirectory()) { - list_files(full, joined, files); + list_files(full, joined, files, excluded_paths); } else { - if (file === '.DS_Store') return; + if (excluded_paths.includes(joined)) { + return; + } files.push({ file: joined, size: stats.size, diff --git a/packages/kit/src/core/create_manifest_data/index.spec.js b/packages/kit/src/core/create_manifest_data/index.spec.js index 2b543a4613e8..bd07cbc93826 100644 --- a/packages/kit/src/core/create_manifest_data/index.spec.js +++ b/packages/kit/src/core/create_manifest_data/index.spec.js @@ -21,7 +21,10 @@ const create = (dir, extensions = ['.svelte']) => { assets: path.resolve(cwd, 'static'), routes: path.resolve(cwd, dir) }, - appDir: '_app' + appDir: '_app', + serviceWorker: { + exclude: [] + } } }, cwd, diff --git a/packages/kit/types/config.d.ts b/packages/kit/types/config.d.ts index 5471b5dbdc89..48c95bf93425 100644 --- a/packages/kit/types/config.d.ts +++ b/packages/kit/types/config.d.ts @@ -44,6 +44,9 @@ export type Config = { host?: string; hostHeader?: string; hydrate?: boolean; + serviceWorker?: { + exclude?: string[]; + }; package?: { dir?: string; exports?: { @@ -94,6 +97,9 @@ export type ValidatedConfig = { host: string; hostHeader: string; hydrate: boolean; + serviceWorker: { + exclude: string[]; + }; package: { dir: string; exports: { From 1ec368a9b90d65f13a818ff348187a7160544ea7 Mon Sep 17 00:00:00 2001 From: James Hegedus Date: Thu, 8 Jul 2021 23:40:38 +1000 Subject: [PATCH 116/129] [feat] expose Vite.js `mode` from `$app/env` (#1789) Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/silly-jokes-hug.md | 5 +++++ documentation/docs/05-modules.md | 3 ++- packages/kit/src/runtime/app/env.js | 4 ++++ packages/kit/types/ambient-modules.d.ts | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .changeset/silly-jokes-hug.md diff --git a/.changeset/silly-jokes-hug.md b/.changeset/silly-jokes-hug.md new file mode 100644 index 000000000000..db3ea2730e4d --- /dev/null +++ b/.changeset/silly-jokes-hug.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Expose Vite.js mode from \$app/env diff --git a/documentation/docs/05-modules.md b/documentation/docs/05-modules.md index d1e1ad64ce4b..878cca22f6a3 100644 --- a/documentation/docs/05-modules.md +++ b/documentation/docs/05-modules.md @@ -7,12 +7,13 @@ SvelteKit makes a number of modules available to your application. ### $app/env ```js -import { amp, browser, dev, prerendering } from '$app/env'; +import { amp, browser, dev, mode, prerendering } from '$app/env'; ``` - `amp` is `true` or `false` depending on the corresponding value in your [project configuration](#configuration) - `browser` is `true` or `false` depending on whether the app is running in the browser or on the server - `dev` is `true` in development mode, `false` in production +- `mode` is the [Vite mode](https://vitejs.dev/guide/env-and-mode.html#modes), which is `development` in dev mode or `production` during build unless configured otherwise in `config.kit.vite.mode`. - `prerendering` is `true` when [prerendering](#ssr-and-javascript-prerender), `false` otherwise ### $app/navigation diff --git a/packages/kit/src/runtime/app/env.js b/packages/kit/src/runtime/app/env.js index a5f1e045c6d4..f422aa5091b3 100644 --- a/packages/kit/src/runtime/app/env.js +++ b/packages/kit/src/runtime/app/env.js @@ -6,6 +6,10 @@ export const browser = !import.meta.env.SSR; * @type {import('$app/env').dev} */ export const dev = !!import.meta.env.DEV; +/** + * @type {import('$app/env').mode} + */ +export const mode = import.meta.env.MODE; /** * @type {import('$app/env').amp} */ diff --git a/packages/kit/types/ambient-modules.d.ts b/packages/kit/types/ambient-modules.d.ts index cc6041cc7bc1..4ee4a83c6801 100644 --- a/packages/kit/types/ambient-modules.d.ts +++ b/packages/kit/types/ambient-modules.d.ts @@ -15,6 +15,12 @@ declare module '$app/env' { * `true` when prerendering, `false` otherwise. */ export const prerendering: boolean; + /** + * The Vite.js mode the app is running in. Configure in `config.kit.vite.mode`. + * Vite.js loads the dotenv file associated with the provided mode, `.env.[mode]` or `.env.[mode].local`. + * By default, `svelte-kit dev` runs with `mode=development` and `svelte-kit build` runs with `mode=production`. + */ + export const mode: string; } declare module '$app/navigation' { From 6368eeb06e5762ad09ce371dcbf7c469c5cd1969 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 8 Jul 2021 09:39:59 -0700 Subject: [PATCH 117/129] Additional documentation around pnpx changeset usage --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index e1aa1dab94f1..fcb978836c3f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -7,4 +7,4 @@ - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets -- [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpx changeset` and following the prompts +- [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpx changeset` and following the prompts. All changesets should be `patch` until SvelteKit 1.0 diff --git a/README.md b/README.md index f7a15f3dce00..6ef93058f6e7 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ git config core.hookspath .githooks ### Changelogs -For changes to be reflected in package changelogs, run `pnpx changeset` and follow the prompts. +For changes to be reflected in package changelogs, run `pnpx changeset` and follow the prompts. All changesets should be `patch` until SvelteKit 1.0 ### Releases From d2d99e09ea826fdfcb1c193252d33d7afcc78bbf Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 8 Jul 2021 10:49:03 -0700 Subject: [PATCH 118/129] Docs for writing an adapter (#1846) --- documentation/docs/10-adapters.md | 5 ++-- documentation/docs/80-adapter-api.md | 34 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 documentation/docs/80-adapter-api.md diff --git a/documentation/docs/10-adapters.md b/documentation/docs/10-adapters.md index 96009a7ca050..fcfb8bbdef15 100644 --- a/documentation/docs/10-adapters.md +++ b/documentation/docs/10-adapters.md @@ -33,14 +33,13 @@ export default { A variety of official adapters exist for serverless platforms... -- [`adapter-begin`](https://github.com/sveltejs/kit/tree/master/packages/adapter-begin) — for [Begin](https://begin.com) - [`adapter-cloudflare-workers`](https://github.com/sveltejs/kit/tree/master/packages/adapter-cloudflare-workers) — for [Cloudflare Workers](https://developers.cloudflare.com/workers/) - [`adapter-netlify`](https://github.com/sveltejs/kit/tree/master/packages/adapter-netlify) — for [Netlify](https://netlify.com) - [`adapter-vercel`](https://github.com/sveltejs/kit/tree/master/packages/adapter-vercel) — for [Vercel](https://vercel.com) -...and others: +...and traditional platforms: - [`adapter-node`](https://github.com/sveltejs/kit/tree/master/packages/adapter-node) — for creating self-contained Node apps - [`adapter-static`](https://github.com/sveltejs/kit/tree/master/packages/adapter-static) — for prerendering your entire site as a collection of static files -> The adapter API is still in flux and will likely change before 1.0. +As well as [community-provided adapters](https://github.com/sveltejs/integrations#sveltekit-adapters). You may also [write your own adapter](#writing-an-adapter). diff --git a/documentation/docs/80-adapter-api.md b/documentation/docs/80-adapter-api.md new file mode 100644 index 000000000000..410a1da26876 --- /dev/null +++ b/documentation/docs/80-adapter-api.md @@ -0,0 +1,34 @@ +--- +title: Writing an Adapter +--- + +We recommend [looking at the source for an adapter](https://github.com/sveltejs/kit/tree/master/packages) to a platform similar to yours and copying it as a starting point. + +Adapters packages must implement the following API, which creates an `Adapter`: +``` +/** + * @param {AdapterSpecificOptions} options + */ +export default function (options) { + /** @type {import('@sveltejs/kit').Adapter} */ + return { + name: '', + async adapt({ utils, config }) { + } + }; +} +``` + +The types for `Adapter` and its parameters are available in [types/config.d.ts](https://github.com/sveltejs/kit/blob/master/packages/kit/types/config.d.ts). + +Within the `adapt` method, there are a number of things that an adapter should do: +- Clear out the build directory +- Output code that: + - Calls `init` + - Converts from the patform's request to a [SvelteKit request](#hooks-handle), calls `render`, and converts from a [SvelteKit response](#hooks-handle) to the platform's + - Globally shims `fetch` to work on the target platform. SvelteKit provides a `@sveltejs/kit/install-fetch` helper for platforms that can use `node-fetch` +- Bundle the output to avoid needing to install dependencies on the target platform, if desired +- Call `utils.prerender` +- Put the user's static files and the generated JS/CSS in the correct location for the target platform + +> The adapter API may change before 1.0. From 9e8c39d3112c0b961f438d6decb36d35b9d20303 Mon Sep 17 00:00:00 2001 From: Antony Jones Date: Thu, 8 Jul 2021 19:04:13 +0100 Subject: [PATCH 119/129] Improve grammar in packages FAQ --- documentation/faq/70-packages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/faq/70-packages.md b/documentation/faq/70-packages.md index b4da6f2dd404..eeb3a7caa9a5 100644 --- a/documentation/faq/70-packages.md +++ b/documentation/faq/70-packages.md @@ -12,6 +12,6 @@ Old beta versions of the SvelteKit template included the configuration value `no The second most commonly-encountered issue is having a Svelte component that imports a CommonJS library. In this case, you should try to work with the library authors to distribute an ESM version of the dependency. However, in the meantime, you can workaround this issue by adding the dependency to `vite.optimizeDeps.include` in `svelte.config.js`. -Also, some Svelte libraries doesn't work nicely with Vite's pre-bundling process, do check out `@sveltejs/vite-plugin-svelte`'s docs on its current [limitation and workaround](https://github.com/sveltejs/vite-plugin-svelte/tree/main/packages/vite-plugin-svelte#importing-third-party-svelte-libraries). +Also, some older Svelte libraries don't work nicely with Vite's pre-bundling process, check out `@sveltejs/vite-plugin-svelte`'s docs for current [limitations and workarounds](https://github.com/sveltejs/vite-plugin-svelte/tree/main/packages/vite-plugin-svelte#importing-third-party-svelte-libraries). If you are still encountering issues we recommend searching both [the Vite issue tracker](https://github.com/vitejs/vite/issues) and the issue tracker of the library in question. Sometimes issues can be worked around by fiddling with the [`optimizeDeps`](https://vitejs.dev/config/#dep-optimization-options) or [`ssr`](https://vitejs.dev/config/#ssr-options) config values. From 6335eff357bc8235654432b296932d580e6c2245 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Jul 2021 12:20:43 -0700 Subject: [PATCH 120/129] Version Packages (next) (#1840) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 4 ++++ packages/kit/CHANGELOG.md | 9 +++++++++ packages/kit/package.json | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index a47befd6189f..77d7c65edd0a 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -30,6 +30,7 @@ "big-garlics-complain", "blue-apes-type", "blue-cats-mate", + "blue-llamas-exist", "blue-poets-jam", "blue-squids-march", "brave-avocados-relax", @@ -197,6 +198,7 @@ "olive-maps-join", "orange-boats-love", "pink-ducks-press", + "pink-poets-begin", "plenty-cougars-invite", "plenty-donuts-check", "polite-apes-relax", @@ -253,6 +255,8 @@ "sharp-pigs-study", "shy-jeans-fly", "shy-mails-share", + "silly-grapes-cover", + "silly-jokes-hug", "silver-elephants-tap", "silver-hounds-clean", "silver-lemons-fail", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 33b84ef7512e..ec52cbc4a327 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,14 @@ # @sveltejs/kit +## 1.0.0-next.123 + +### Patch Changes + +- 4b25615: Fix ReadOnlyFormData keys and values method implementation +- 64f749d: ServiceWorker files exclusion support available through svelte.config.js +- 4d2fec5: Enable Vite's server.fs.strict by default +- 1ec368a: Expose Vite.js mode from \$app/env + ## 1.0.0-next.122 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 033c538fed40..a178393476da 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.122", + "version": "1.0.0-next.123", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", From 872840a48746629a731bf612c3d97b18a41e5b50 Mon Sep 17 00:00:00 2001 From: Moritz Hedtke <13287984+mohe2015@users.noreply.github.com> Date: Thu, 8 Jul 2021 23:26:20 +0200 Subject: [PATCH 121/129] Pass along custom properties added to Error (#1821) Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/neat-walls-buy.md | 5 +++++ packages/kit/src/runtime/server/page/render.js | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changeset/neat-walls-buy.md diff --git a/.changeset/neat-walls-buy.md b/.changeset/neat-walls-buy.md new file mode 100644 index 000000000000..1c55f7e22e2b --- /dev/null +++ b/.changeset/neat-walls-buy.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Pass along custom properties added to Error diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index 6e0f10f47a31..5226a337737c 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -215,8 +215,8 @@ function serialize_error(error) { if (!error) return null; let serialized = try_serialize(error); if (!serialized) { - const { name, message, stack, frame, loc } = error; - serialized = try_serialize({ name, message, stack, frame, loc }); + const { name, message, stack } = error; + serialized = try_serialize({ ...error, name, message, stack }); } if (!serialized) { serialized = '{}'; From 4c7ccfdce264497efd1a8df17248469aa56ae7db Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 9 Jul 2021 01:33:03 -0400 Subject: [PATCH 122/129] [fix] add $lib alias to js/tsconfig (#1860) --- .changeset/metal-avocados-lie.md | 5 +++++ packages/create-svelte/shared/+typescript/tsconfig.json | 1 + packages/create-svelte/shared/-typescript/jsconfig.json | 1 + 3 files changed, 7 insertions(+) create mode 100644 .changeset/metal-avocados-lie.md diff --git a/.changeset/metal-avocados-lie.md b/.changeset/metal-avocados-lie.md new file mode 100644 index 000000000000..14f392e40179 --- /dev/null +++ b/.changeset/metal-avocados-lie.md @@ -0,0 +1,5 @@ +--- +'create-svelte': patch +--- + +Add \$lib alias to js/tsconfig diff --git a/packages/create-svelte/shared/+typescript/tsconfig.json b/packages/create-svelte/shared/+typescript/tsconfig.json index d826f6ef8b89..925722459a9e 100644 --- a/packages/create-svelte/shared/+typescript/tsconfig.json +++ b/packages/create-svelte/shared/+typescript/tsconfig.json @@ -23,6 +23,7 @@ "allowJs": true, "checkJs": true, "paths": { + "$lib": ["src/lib"], "$lib/*": ["src/lib/*"] } }, diff --git a/packages/create-svelte/shared/-typescript/jsconfig.json b/packages/create-svelte/shared/-typescript/jsconfig.json index 893781f65ca0..3757b0e28f6f 100644 --- a/packages/create-svelte/shared/-typescript/jsconfig.json +++ b/packages/create-svelte/shared/-typescript/jsconfig.json @@ -2,6 +2,7 @@ "compilerOptions": { "baseUrl": ".", "paths": { + "$lib": ["src/lib"], "$lib/*": ["src/lib/*"] } }, From c826016aabe52e36e01bc430343120b55dcf1a20 Mon Sep 17 00:00:00 2001 From: Janosh Riebesell Date: Fri, 9 Jul 2021 10:15:26 +0200 Subject: [PATCH 123/129] add config.kit.package.emitTypes option (#1852) Closes #1851 --- .changeset/happy-actors-camp.md | 5 +++++ documentation/docs/12-packaging.md | 4 ++-- documentation/docs/14-configuration.md | 4 +++- packages/kit/src/core/config/index.spec.js | 6 ++++-- packages/kit/src/core/config/options.js | 3 ++- packages/kit/src/core/config/test/index.js | 3 ++- packages/kit/src/core/make_package/index.js | 6 ++++-- .../javascript_no_types/expected/Test.svelte | 12 ++++++++++++ .../javascript_no_types/expected/Test2.svelte | 6 ++++++ .../fixtures/javascript_no_types/expected/foo.d.ts | 1 + .../fixtures/javascript_no_types/expected/index.js | 1 + .../javascript_no_types/expected/package.json | 13 +++++++++++++ .../test/fixtures/javascript_no_types/package.json | 5 +++++ .../test/fixtures/javascript_no_types/src/app.html | 12 ++++++++++++ .../javascript_no_types/src/lib/Test.svelte | 12 ++++++++++++ .../javascript_no_types/src/lib/Test2.svelte | 6 ++++++ .../fixtures/javascript_no_types/src/lib/foo.d.ts | 1 + .../fixtures/javascript_no_types/src/lib/index.js | 1 + .../fixtures/javascript_no_types/svelte.config.cjs | 7 +++++++ .../test/fixtures/typescript/expected/package.json | 4 ++-- .../test/fixtures/typescript/package.json | 4 ++-- packages/kit/src/core/make_package/test/index.js | 4 ++++ packages/kit/types/config.d.ts | 2 ++ 23 files changed, 109 insertions(+), 13 deletions(-) create mode 100644 .changeset/happy-actors-camp.md create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/Test2.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/app.html create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/Test2.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/javascript_no_types/svelte.config.cjs diff --git a/.changeset/happy-actors-camp.md b/.changeset/happy-actors-camp.md new file mode 100644 index 000000000000..ccecb6e51de4 --- /dev/null +++ b/.changeset/happy-actors-camp.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +add config.kit.package.emitTypes diff --git a/documentation/docs/12-packaging.md b/documentation/docs/12-packaging.md index e2644a0dfce7..0cdd288d02ef 100644 --- a/documentation/docs/12-packaging.md +++ b/documentation/docs/12-packaging.md @@ -11,7 +11,7 @@ A SvelteKit component library has the exact same structure as a SvelteKit app, e Running `svelte-kit package` will take the contents of `src/lib` and generate a `package` directory (which can be [configured](#configuration-package)) containing the following: - All the files in `src/lib`, unless you [configure](#configuration-package) custom `include`/`exclude` options. Svelte components will be preprocessed, TypeScript files will be transpiled to JavaScript. -- Type definitions (`d.ts` files) which are generated for Svelte, JavaScript and TypeScript files. You need to install `typescript >= 4.0.0` and `svelte2tsx >= 0.4.1` for this. Type definitions are placed next to their implementation, hand-written `d.ts` files are copied over as is. +- Type definitions (`d.ts` files) which are generated for Svelte, JavaScript and TypeScript files. You need to install `typescript >= 4.0.0` and `svelte2tsx >= 0.4.1` for this. Type definitions are placed next to their implementation, hand-written `d.ts` files are copied over as is. You can [disable generation](#configuration-package), but we strongly recommend against it. - A `package.json` that copies the `name`, `version`, `description`, `keywords`, `homepage`, `bugs`, `license`, `author`, `contributors`, `funding`, `repository`, `dependencies`, `private` and `publishConfig` fields from the root of the project, and adds a `"type": "module"` and an `"exports"` field The `"exports"` field contains the package's entry points. By default, all files in `src/lib` will be treated as an entry point unless they start with (or live in a directory that starts with) an underscore, but you can [configure](#configuration-package) this behaviour. If you have a `src/lib/index.js` or `src/lib/index.svelte` file, it will be treated as the package root. @@ -30,7 +30,7 @@ import Foo from 'your-library/Foo.svelte'; To publish the generated package: -``` +```sh npm publish package ``` diff --git a/documentation/docs/14-configuration.md b/documentation/docs/14-configuration.md index effc9ffb796e..1623136623b1 100644 --- a/documentation/docs/14-configuration.md +++ b/documentation/docs/14-configuration.md @@ -55,7 +55,8 @@ const config = { files: { include: ['**'], exclude: [] - } + }, + emitTypes: true }, vite: () => ({}) }, @@ -176,6 +177,7 @@ Options related to [creating a package](#packaging). - `dir` - output directory - `exports` - contains a `includes` and a `excludes` array which specifies which files to mark as exported from the `exports` field of the `package.json` - `files` - contains a `includes` and a `excludes` array which specifies which files to process and copy over when packaging +- `emitTypes` - by default, `svelte-kit package` will automatically generate types for your package in the form of `d.ts.` files. While generating types is configurable, we believe it is best for the ecosystem quality to generate types, always. Please make sure you have a good reason when setting it to `false` (for example when you want to provide handwritten type definitions instead). ### vite diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index 4472b27f2f9f..2906bd4eafba 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -36,7 +36,8 @@ test('fills in defaults', () => { files: { include: ['**'], exclude: [] - } + }, + emitTypes: true }, serviceWorker: { exclude: [] @@ -134,7 +135,8 @@ test('fills in partial blanks', () => { files: { include: ['**'], exclude: [] - } + }, + emitTypes: true }, serviceWorker: { exclude: [] diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 567a8c2b906b..c7d4563d7544 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -103,7 +103,8 @@ const options = { include: expect_array_of_strings(['**']), exclude: expect_array_of_strings([]) } - } + }, + emitTypes: expect_boolean(true) } }, diff --git a/packages/kit/src/core/config/test/index.js b/packages/kit/src/core/config/test/index.js index 8a0d8e0779fd..4e8eea7dc3c1 100644 --- a/packages/kit/src/core/config/test/index.js +++ b/packages/kit/src/core/config/test/index.js @@ -46,7 +46,8 @@ async function testLoadDefaultConfig(path) { files: { include: ['**'], exclude: [] - } + }, + emitTypes: true }, serviceWorker: { exclude: [] diff --git a/packages/kit/src/core/make_package/index.js b/packages/kit/src/core/make_package/index.js index a99afa1a4a60..55f77ff7624d 100644 --- a/packages/kit/src/core/make_package/index.js +++ b/packages/kit/src/core/make_package/index.js @@ -12,8 +12,10 @@ import { mkdirp, rimraf } from '../filesystem/index.js'; export async function make_package(config, cwd = process.cwd()) { rimraf(path.join(cwd, config.kit.package.dir)); - // Generate type definitions first so hand-written types can overwrite generated ones - await emit_dts(config); + if (config.kit.package.emitTypes) { + // Generate type definitions first so hand-written types can overwrite generated ones + await emit_dts(config); + } const files_filter = create_filter(config.kit.package.files); const exports_filter = create_filter({ diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/Test2.svelte b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/Test2.svelte new file mode 100644 index 000000000000..06a5a3408e95 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/Test2.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/index.js b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/package.json b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/package.json new file mode 100644 index 000000000000..3738ea1a2e3f --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/expected/package.json @@ -0,0 +1,13 @@ +{ + "name": "javascript-no-types", + "version": "1.0.0", + "description": "package-javascript-no-types-test", + "type": "module", + "exports": { + "./package.json": "./package.json", + "./index.js": "./index.js", + "./Test.svelte": "./Test.svelte", + "./Test2.svelte": "./Test2.svelte", + ".": "./index.js" + } +} diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/package.json b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/package.json new file mode 100644 index 000000000000..9f03308d46c5 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/package.json @@ -0,0 +1,5 @@ +{ + "name": "javascript-no-types", + "version": "1.0.0", + "description": "package-javascript-no-types-test" +} diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/app.html b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/app.html new file mode 100644 index 000000000000..245305c4ef5b --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/Test2.svelte b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/Test2.svelte new file mode 100644 index 000000000000..06a5a3408e95 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/Test2.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/index.js b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/src/lib/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/svelte.config.cjs b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/svelte.config.cjs new file mode 100644 index 000000000000..aa2147412aaf --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/javascript_no_types/svelte.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + kit: { + package: { + emitTypes: false + } + } +}; diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/package.json b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/package.json index a3a48fce0b0e..28cce45244fb 100644 --- a/packages/kit/src/core/make_package/test/fixtures/typescript/expected/package.json +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/expected/package.json @@ -1,7 +1,7 @@ { - "name": "javascript", + "name": "typescript", "version": "1.0.0", - "description": "package-javascript-test", + "description": "package-typescript-test", "type": "module", "exports": { "./package.json": "./package.json", diff --git a/packages/kit/src/core/make_package/test/fixtures/typescript/package.json b/packages/kit/src/core/make_package/test/fixtures/typescript/package.json index e29e4689c6e0..ef3b7e7d81e4 100644 --- a/packages/kit/src/core/make_package/test/fixtures/typescript/package.json +++ b/packages/kit/src/core/make_package/test/fixtures/typescript/package.json @@ -1,5 +1,5 @@ { - "name": "javascript", + "name": "typescript", "version": "1.0.0", - "description": "package-javascript-test" + "description": "package-typescript-test" } diff --git a/packages/kit/src/core/make_package/test/index.js b/packages/kit/src/core/make_package/test/index.js index 107563424844..942eff4241e9 100644 --- a/packages/kit/src/core/make_package/test/index.js +++ b/packages/kit/src/core/make_package/test/index.js @@ -74,4 +74,8 @@ test('create package (typescript)', async () => { await test_make_package('typescript'); }); +test('create package (javascript without types)', async () => { + await test_make_package('javascript_no_types'); +}); + test.run(); diff --git a/packages/kit/types/config.d.ts b/packages/kit/types/config.d.ts index 48c95bf93425..365cf1f741b1 100644 --- a/packages/kit/types/config.d.ts +++ b/packages/kit/types/config.d.ts @@ -57,6 +57,7 @@ export type Config = { include?: string[]; exclude?: string[]; }; + emitTypes?: boolean; }; paths?: { base?: string; @@ -110,6 +111,7 @@ export type ValidatedConfig = { include: string[]; exclude: string[]; }; + emitTypes: boolean; }; paths: { base: string; From 29ba9436fb9a50f0770d76000d3552c8d32f900b Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Fri, 9 Jul 2021 23:12:48 +0700 Subject: [PATCH 124/129] [docs] sort config alphabetically (#1867) --- documentation/docs/14-configuration.md | 62 +++++++++++++------------- documentation/docs/80-adapter-api.md | 7 ++- packages/kit/types/config.d.ts | 20 ++++----- 3 files changed, 46 insertions(+), 43 deletions(-) diff --git a/documentation/docs/14-configuration.md b/documentation/docs/14-configuration.md index 1623136623b1..43a45fd9a5f5 100644 --- a/documentation/docs/14-configuration.md +++ b/documentation/docs/14-configuration.md @@ -25,13 +25,22 @@ const config = { serviceWorker: 'src/service-worker', template: 'src/app.html' }, - serviceWorker: { - exclude: [] - }, floc: false, host: null, hostHeader: null, hydrate: true, + package: { + dir: 'package', + emitTypes: true, + exports: { + include: ['**'], + exclude: ['_*', '**/_*'] + }, + files: { + include: ['**'], + exclude: [] + } + }, paths: { assets: '', base: '' @@ -43,21 +52,12 @@ const config = { pages: ['*'] }, router: true, + serviceWorker: { + exclude: [] + }, ssr: true, target: null, trailingSlash: 'never', - package: { - dir: 'package', - exports: { - include: ['**'], - exclude: ['_*', '**/_*'] - }, - files: { - include: ['**'], - exclude: [] - }, - emitTypes: true - }, vite: () => ({}) }, @@ -85,18 +85,12 @@ The directory relative to `paths.assets` where the built JS and CSS (and importe An object containing zero or more of the following `string` values: - `assets` — a place to put static files that should have stable URLs and undergo no processing, such as `favicon.ico` or `manifest.json` +- `hooks` — the location of your hooks module (see [Hooks](#hooks)) - `lib` — your app's internal library, accessible throughout the codebase as `$lib` - `routes` — the files that define the structure of your app (see [Routing](#routing)) - `serviceWorker` — the location of your service worker's entry point (see [Service workers](#service-workers)) -- `hooks` — the location of your hooks module (see [Hooks](#hooks)) - `template` — the location of the template for HTML responses -### serviceWorker - -An object containing zero or more of the following values: - -- `exclude` - an array of glob patterns relative to `files.assets` dir. Files matching any of these would not be available in `$service-worker.files` e.g. if `files.assets` has value `static` then ['og-tags-images/**/*'] would match all files under `static/og-tags-images` dir. - ### floc Google's [FLoC](https://github.com/WICG/floc) is a technology for targeted advertising that the [Electronic Frontier Foundation](https://www.eff.org/) has deemed [harmful](https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea) to user privacy. [Browsers other than Chrome](https://www.theverge.com/2021/4/16/22387492/google-floc-ad-tech-privacy-browsers-brave-vivaldi-edge-mozilla-chrome-safari) have declined to implement it. @@ -132,6 +126,15 @@ export default { Whether to [hydrate](#ssr-and-javascript-hydrate) the server-rendered HTML with a client-side app. (It's rare that you would set this to `false` on an app-wide basis.) +### package + +Options related to [creating a package](#packaging). + +- `dir` - output directory +- `emitTypes` - by default, `svelte-kit package` will automatically generate types for your package in the form of `d.ts.` files. While generating types is configurable, we believe it is best for the ecosystem quality to generate types, always. Please make sure you have a good reason when setting it to `false` (for example when you want to provide handwritten type definitions instead). +- `exports` - contains a `includes` and a `excludes` array which specifies which files to mark as exported from the `exports` field of the `package.json` +- `files` - contains a `includes` and a `excludes` array which specifies which files to process and copy over when packaging + ### paths An object containing zero or more of the following `string` values: @@ -152,6 +155,12 @@ See [Prerendering](#ssr-and-javascript-prerender). An object containing zero or Enables or disables the client-side [router](#ssr-and-javascript-router) app-wide. +### serviceWorker + +An object containing zero or more of the following values: + +- `exclude` - an array of glob patterns relative to `files.assets` dir. Files matching any of these would not be available in `$service-worker.files` e.g. if `files.assets` has value `static` then ['og-tags-images/**/*'] would match all files under `static/og-tags-images` dir. + ### ssr Enables or disables [server-side rendering](#ssr-and-javascript-ssr) app-wide. @@ -170,15 +179,6 @@ Whether to remove, append, or ignore trailing slashes when resolving URLs to rou > Ignoring trailing slashes is not recommended — the semantics of relative paths differ between the two cases (`./y` from `/x` is `/y`, but from `/x/` is `/x/y`), and `/x` and `/x/` are treated as separate URLs which is harmful to SEO. If you use this option, ensure that you implement logic for conditionally adding or removing trailing slashes from `request.path` inside your [`handle`](#hooks-handle) function. -### package - -Options related to [creating a package](#packaging). - -- `dir` - output directory -- `exports` - contains a `includes` and a `excludes` array which specifies which files to mark as exported from the `exports` field of the `package.json` -- `files` - contains a `includes` and a `excludes` array which specifies which files to process and copy over when packaging -- `emitTypes` - by default, `svelte-kit package` will automatically generate types for your package in the form of `d.ts.` files. While generating types is configurable, we believe it is best for the ecosystem quality to generate types, always. Please make sure you have a good reason when setting it to `false` (for example when you want to provide handwritten type definitions instead). - ### vite A [Vite config object](https://vitejs.dev/config), or a function that returns one. Not all configuration options can be set, since SvelteKit depends on certain values being configured internally. diff --git a/documentation/docs/80-adapter-api.md b/documentation/docs/80-adapter-api.md index 410a1da26876..0f14a4d275b3 100644 --- a/documentation/docs/80-adapter-api.md +++ b/documentation/docs/80-adapter-api.md @@ -5,15 +5,17 @@ title: Writing an Adapter We recommend [looking at the source for an adapter](https://github.com/sveltejs/kit/tree/master/packages) to a platform similar to yours and copying it as a starting point. Adapters packages must implement the following API, which creates an `Adapter`: -``` + +```js /** * @param {AdapterSpecificOptions} options */ export default function (options) { /** @type {import('@sveltejs/kit').Adapter} */ return { - name: '', + name: 'adapter-package-name', async adapt({ utils, config }) { + // adapter implementation } }; } @@ -22,6 +24,7 @@ export default function (options) { The types for `Adapter` and its parameters are available in [types/config.d.ts](https://github.com/sveltejs/kit/blob/master/packages/kit/types/config.d.ts). Within the `adapt` method, there are a number of things that an adapter should do: + - Clear out the build directory - Output code that: - Calls `init` diff --git a/packages/kit/types/config.d.ts b/packages/kit/types/config.d.ts index 365cf1f741b1..45482dddb12f 100644 --- a/packages/kit/types/config.d.ts +++ b/packages/kit/types/config.d.ts @@ -44,11 +44,9 @@ export type Config = { host?: string; hostHeader?: string; hydrate?: boolean; - serviceWorker?: { - exclude?: string[]; - }; package?: { dir?: string; + emitTypes?: boolean; exports?: { include?: string[]; exclude?: string[]; @@ -57,11 +55,10 @@ export type Config = { include?: string[]; exclude?: string[]; }; - emitTypes?: boolean; }; paths?: { - base?: string; assets?: string; + base?: string; }; prerender?: { crawl?: boolean; @@ -70,6 +67,9 @@ export type Config = { pages?: string[]; }; router?: boolean; + serviceWorker?: { + exclude?: string[]; + }; ssr?: boolean; target?: string; trailingSlash?: TrailingSlash; @@ -98,11 +98,9 @@ export type ValidatedConfig = { host: string; hostHeader: string; hydrate: boolean; - serviceWorker: { - exclude: string[]; - }; package: { dir: string; + emitTypes: boolean; exports: { include: string[]; exclude: string[]; @@ -111,11 +109,10 @@ export type ValidatedConfig = { include: string[]; exclude: string[]; }; - emitTypes: boolean; }; paths: { - base: string; assets: string; + base: string; }; prerender: { crawl: boolean; @@ -124,6 +121,9 @@ export type ValidatedConfig = { pages: string[]; }; router: boolean; + serviceWorker: { + exclude: string[]; + }; ssr: boolean; target: string; trailingSlash: TrailingSlash; From af1aa5404803c72601b04c2063931ef971c5c48d Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Sat, 10 Jul 2021 05:26:08 +0700 Subject: [PATCH 125/129] [fix] copy essentials files from root on packaging (#1747) --- .changeset/lazy-mice-smile.md | 5 +++++ documentation/docs/12-packaging.md | 2 +- packages/kit/src/core/make_package/index.js | 17 +++++++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 .changeset/lazy-mice-smile.md diff --git a/.changeset/lazy-mice-smile.md b/.changeset/lazy-mice-smile.md new file mode 100644 index 000000000000..0735bae540df --- /dev/null +++ b/.changeset/lazy-mice-smile.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +copy essential root files on `svelte-kit package` diff --git a/documentation/docs/12-packaging.md b/documentation/docs/12-packaging.md index 0cdd288d02ef..86acf5d64bb0 100644 --- a/documentation/docs/12-packaging.md +++ b/documentation/docs/12-packaging.md @@ -12,7 +12,7 @@ Running `svelte-kit package` will take the contents of `src/lib` and generate a - All the files in `src/lib`, unless you [configure](#configuration-package) custom `include`/`exclude` options. Svelte components will be preprocessed, TypeScript files will be transpiled to JavaScript. - Type definitions (`d.ts` files) which are generated for Svelte, JavaScript and TypeScript files. You need to install `typescript >= 4.0.0` and `svelte2tsx >= 0.4.1` for this. Type definitions are placed next to their implementation, hand-written `d.ts` files are copied over as is. You can [disable generation](#configuration-package), but we strongly recommend against it. -- A `package.json` that copies the `name`, `version`, `description`, `keywords`, `homepage`, `bugs`, `license`, `author`, `contributors`, `funding`, `repository`, `dependencies`, `private` and `publishConfig` fields from the root of the project, and adds a `"type": "module"` and an `"exports"` field +- A `package.json` that copies the `name`, `version`, `description`, `keywords`, `homepage`, `bugs`, `license`, `author`, `contributors`, `funding`, `repository`, `dependencies`, `private`, `files` and `publishConfig` fields from the root of the project, and adds a `"type": "module"` and an `"exports"` field The `"exports"` field contains the package's entry points. By default, all files in `src/lib` will be treated as an entry point unless they start with (or live in a directory that starts with) an underscore, but you can [configure](#configuration-package) this behaviour. If you have a `src/lib/index.js` or `src/lib/index.svelte` file, it will be treated as the package root. diff --git a/packages/kit/src/core/make_package/index.js b/packages/kit/src/core/make_package/index.js index 55f77ff7624d..0980533e8f7e 100644 --- a/packages/kit/src/core/make_package/index.js +++ b/packages/kit/src/core/make_package/index.js @@ -5,6 +5,8 @@ import * as path from 'path'; import { preprocess } from 'svelte/compiler'; import { mkdirp, rimraf } from '../filesystem/index.js'; +const essential_files = ['README', 'LICENSE', 'CHANGELOG', '.gitignore', '.npmignore']; + /** * @param {import('types/config').ValidatedConfig} config * @param {string} cwd @@ -41,6 +43,7 @@ export async function make_package(config, cwd = process.cwd()) { repository: pkg.repository, dependencies: pkg.dependencies, private: pkg.private, + files: pkg.files, publishConfig: pkg.publishConfig, type: 'module', /** @type {Record} */ @@ -108,11 +111,17 @@ export async function make_package(config, cwd = process.cwd()) { JSON.stringify(package_pkg, null, ' ') ); - const project_readme = path.join(cwd, 'README.md'); - const package_readme = path.join(cwd, config.kit.package.dir, 'README.md'); + const whitelist = fs.readdirSync(cwd).filter((file) => { + const lowercased = file.toLowerCase(); + return essential_files.some((name) => lowercased.startsWith(name.toLowerCase())); + }); + for (const pathname of whitelist) { + const full_path = path.join(cwd, pathname); + if (fs.lstatSync(full_path).isDirectory()) continue; // just to be sure - if (fs.existsSync(project_readme) && !fs.existsSync(package_readme)) { - fs.copyFileSync(project_readme, package_readme); + const package_path = path.join(cwd, config.kit.package.dir, pathname); + if (fs.existsSync(package_path)) continue; + fs.copyFileSync(full_path, package_path); } } From 34d204913451da5c41f0561b0bc11ec9523d0978 Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Sat, 10 Jul 2021 09:12:21 +0700 Subject: [PATCH 126/129] [fix] handle undefined body on endpoint output (#1808) --- .changeset/fluffy-cheetahs-remain.md | 5 +++ packages/kit/src/runtime/server/endpoint.js | 15 ++++--- .../src/routes/endpoint-output/_tests.js | 39 +++++++++++++++++++ .../basics/src/routes/endpoint-output/body.js | 4 ++ .../src/routes/endpoint-output/empty.js | 7 ++++ .../src/routes/endpoint-output/headers.js | 8 ++++ 6 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 .changeset/fluffy-cheetahs-remain.md create mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/_tests.js create mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/body.js create mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/empty.js create mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/headers.js diff --git a/.changeset/fluffy-cheetahs-remain.md b/.changeset/fluffy-cheetahs-remain.md new file mode 100644 index 000000000000..bf4424eb6222 --- /dev/null +++ b/.changeset/fluffy-cheetahs-remain.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +handle undefined body on endpoint output diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index 0467f418413b..c3349929da08 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -25,12 +25,11 @@ export default async function render_route(request, route) { const params = route.params(match); const response = await handler({ ...request, params }); + const preface = `Invalid response from route ${request.path}`; if (response) { if (typeof response !== 'object') { - return error( - `Invalid response from route ${request.path}: expected an object, got ${typeof response}` - ); + return error(`${preface}: expected an object, got ${typeof response}`); } let { status = 200, body, headers = {} } = response; @@ -41,13 +40,13 @@ export default async function render_route(request, route) { // validation if (type === 'application/octet-stream' && !(body instanceof Uint8Array)) { return error( - `Invalid response from route ${request.path}: body must be an instance of Uint8Array if content type is application/octet-stream` + `${preface}: body must be an instance of Uint8Array if content type is application/octet-stream` ); } if (body instanceof Uint8Array && type !== 'application/octet-stream') { return error( - `Invalid response from route ${request.path}: Uint8Array body must be accompanied by content-type: application/octet-stream header` + `${preface}: Uint8Array body must be accompanied by content-type: application/octet-stream header` ); } @@ -55,11 +54,11 @@ export default async function render_route(request, route) { let normalized_body; if ( - typeof body === 'object' && - (!type || type === 'application/json' || type === 'application/json; charset=utf-8') + (typeof body === 'object' || typeof body === 'undefined') && + (!type || type.startsWith('application/json')) ) { headers = { ...headers, 'content-type': 'application/json; charset=utf-8' }; - normalized_body = JSON.stringify(body); + normalized_body = JSON.stringify(body || {}); } else { normalized_body = /** @type {import('types/hooks').StrictBody} */ (body); } diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/_tests.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/_tests.js new file mode 100644 index 000000000000..a65e96fe43b8 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/_tests.js @@ -0,0 +1,39 @@ +import * as assert from 'uvu/assert'; + +/** @type {import('test').TestMaker} */ +export default function (test) { + test('not ok on void endpoint', null, async ({ fetch }) => { + const res = await fetch('/endpoint-output/empty', { method: 'DELETE' }); + assert.equal(res.ok, false); + }); + test('200 status on empty endpoint', null, async ({ fetch }) => { + const res = await fetch('/endpoint-output/empty'); + assert.equal(res.status, 200); + assert.equal(await res.json(), {}); + }); + + test('set-cookie without body', null, async ({ fetch }) => { + const res = await fetch('/endpoint-output/headers'); + assert.equal(res.status, 200); + assert.equal(res.headers.has('set-cookie'), true); + }); + + test('200 status by default', null, async ({ fetch }) => { + const res = await fetch('/endpoint-output/body'); + assert.equal(res.status, 200); + assert.equal(await res.text(), '{}'); + }); + + test('does not throw on blob method', null, async ({ fetch }) => { + const res = await fetch('/endpoint-output/empty'); + assert.type(await res.blob(), 'object'); + }); + test('does not throw on arrayBuffer method', null, async ({ fetch }) => { + const res = await fetch('/endpoint-output/empty'); + assert.type(await res.arrayBuffer(), 'object'); + }); + test('does not throw on buffer method', null, async ({ fetch }) => { + const res = await fetch('/endpoint-output/empty'); + assert.type(await res.buffer(), 'object'); + }); +} diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/body.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/body.js new file mode 100644 index 000000000000..6cafc71b6f6f --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/body.js @@ -0,0 +1,4 @@ +/** @type {import('@sveltejs/kit').RequestHandler} */ +export function get() { + return { body: {} }; +} diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/empty.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/empty.js new file mode 100644 index 000000000000..78ba9f6fb252 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/empty.js @@ -0,0 +1,7 @@ +/** @type {import('@sveltejs/kit').RequestHandler} */ +export function get() { + return {}; +} + +/** @type {import('@sveltejs/kit').RequestHandler} */ +export function del() {} diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/headers.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/headers.js new file mode 100644 index 000000000000..481f0f882e4d --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/headers.js @@ -0,0 +1,8 @@ +/** @type {import('@sveltejs/kit').RequestHandler} */ +export function get() { + return { + headers: { + 'Set-Cookie': 'foo=bar' + } + }; +} From 868f97a09c0ea205c2937ddf9a1f4e03898d4799 Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Sat, 10 Jul 2021 20:20:38 +0700 Subject: [PATCH 127/129] [fix] preserve user defined config and files on `svelte-kit package` (#1735) --- .changeset/unlucky-planets-battle.md | 5 ++ documentation/docs/12-packaging.md | 2 +- packages/kit/src/core/make_package/index.js | 51 +++++-------- .../test/fixtures/casing/ReadMe.md | 1 + .../test/fixtures/casing/expected/ReadMe.md | 1 + .../test/fixtures/casing/expected/Test.svelte | 12 ++++ .../fixtures/casing/expected/Test.svelte.d.ts | 40 +++++++++++ .../test/fixtures/casing/expected/index.d.ts | 1 + .../test/fixtures/casing/expected/index.js | 1 + .../fixtures/casing/expected/package.json | 12 ++++ .../test/fixtures/casing/jsconfig.json | 9 +++ .../test/fixtures/casing/package.json | 5 ++ .../test/fixtures/casing/src/app.html | 12 ++++ .../test/fixtures/casing/src/lib/Test.svelte | 12 ++++ .../test/fixtures/casing/src/lib/index.js | 1 + .../test/fixtures/casing/svelte.config.js | 0 .../fixtures/exports/expected/Test.svelte | 12 ++++ .../exports/expected/Test.svelte.d.ts | 40 +++++++++++ .../test/fixtures/exports/expected/index.d.ts | 1 + .../test/fixtures/exports/expected/index.js | 1 + .../exports/expected/internal/Test.svelte | 6 ++ .../expected/internal/Test.svelte.d.ts | 26 +++++++ .../exports/expected/internal/foo.d.ts | 1 + .../fixtures/exports/expected/package.json | 12 ++++ .../test/fixtures/exports/jsconfig.json | 9 +++ .../test/fixtures/exports/package.json | 10 +++ .../test/fixtures/exports/src/app.html | 12 ++++ .../test/fixtures/exports/src/lib/Test.svelte | 12 ++++ .../test/fixtures/exports/src/lib/index.js | 1 + .../exports/src/lib/internal/Test.svelte | 6 ++ .../exports/src/lib/internal/foo.d.ts | 1 + .../test/fixtures/exports/svelte.config.js | 0 .../test/fixtures/nested/expected/Test.svelte | 12 ++++ .../fixtures/nested/expected/Test.svelte.d.ts | 40 +++++++++++ .../test/fixtures/nested/expected/index.d.ts | 2 + .../test/fixtures/nested/expected/index.js | 2 + .../nested/expected/internal/Test.svelte | 6 ++ .../nested/expected/internal/Test.svelte.d.ts | 26 +++++++ .../nested/expected/internal/foo.d.ts | 1 + .../fixtures/nested/expected/package.json | 13 ++++ .../test/fixtures/nested/jsconfig.json | 9 +++ .../test/fixtures/nested/package.json | 5 ++ .../test/fixtures/nested/src/app.html | 12 ++++ .../test/fixtures/nested/src/lib/Test.svelte | 12 ++++ .../test/fixtures/nested/src/lib/index.js | 2 + .../nested/src/lib/internal/Test.svelte | 6 ++ .../fixtures/nested/src/lib/internal/foo.d.ts | 1 + .../test/fixtures/nested/svelte.config.js | 0 .../kit/src/core/make_package/test/index.js | 72 +++++++++++++++---- 49 files changed, 487 insertions(+), 49 deletions(-) create mode 100644 .changeset/unlucky-planets-battle.md create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/ReadMe.md create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/expected/ReadMe.md create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/expected/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/expected/Test.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/expected/index.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/expected/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/expected/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/jsconfig.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/src/app.html create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/src/lib/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/src/lib/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/casing/svelte.config.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/expected/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/expected/Test.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/expected/index.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/expected/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/Test.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/expected/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/jsconfig.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/src/app.html create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/src/lib/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/src/lib/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/src/lib/internal/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/src/lib/internal/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/exports/svelte.config.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/expected/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/expected/Test.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/expected/index.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/expected/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/Test.svelte.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/expected/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/jsconfig.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/package.json create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/src/app.html create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/src/lib/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/src/lib/index.js create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/src/lib/internal/Test.svelte create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/src/lib/internal/foo.d.ts create mode 100644 packages/kit/src/core/make_package/test/fixtures/nested/svelte.config.js diff --git a/.changeset/unlucky-planets-battle.md b/.changeset/unlucky-planets-battle.md new file mode 100644 index 000000000000..974612bf6146 --- /dev/null +++ b/.changeset/unlucky-planets-battle.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Preserve README casing and package.json contents on svelte-kit package diff --git a/documentation/docs/12-packaging.md b/documentation/docs/12-packaging.md index 86acf5d64bb0..a0bc69492301 100644 --- a/documentation/docs/12-packaging.md +++ b/documentation/docs/12-packaging.md @@ -12,7 +12,7 @@ Running `svelte-kit package` will take the contents of `src/lib` and generate a - All the files in `src/lib`, unless you [configure](#configuration-package) custom `include`/`exclude` options. Svelte components will be preprocessed, TypeScript files will be transpiled to JavaScript. - Type definitions (`d.ts` files) which are generated for Svelte, JavaScript and TypeScript files. You need to install `typescript >= 4.0.0` and `svelte2tsx >= 0.4.1` for this. Type definitions are placed next to their implementation, hand-written `d.ts` files are copied over as is. You can [disable generation](#configuration-package), but we strongly recommend against it. -- A `package.json` that copies the `name`, `version`, `description`, `keywords`, `homepage`, `bugs`, `license`, `author`, `contributors`, `funding`, `repository`, `dependencies`, `private`, `files` and `publishConfig` fields from the root of the project, and adds a `"type": "module"` and an `"exports"` field +- A `package.json` copied from the project root without the `"scripts"` field and adds a `"type": "module"`. An `"exports"` field will also be added if it's not defined in the original file. The `"exports"` field contains the package's entry points. By default, all files in `src/lib` will be treated as an entry point unless they start with (or live in a directory that starts with) an underscore, but you can [configure](#configuration-package) this behaviour. If you have a `src/lib/index.js` or `src/lib/index.svelte` file, it will be treated as the package root. diff --git a/packages/kit/src/core/make_package/index.js b/packages/kit/src/core/make_package/index.js index 0980533e8f7e..772cb5236d57 100644 --- a/packages/kit/src/core/make_package/index.js +++ b/packages/kit/src/core/make_package/index.js @@ -29,28 +29,15 @@ export async function make_package(config, cwd = process.cwd()) { const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8')); - const package_pkg = { - name: pkg.name, - version: pkg.version, - description: pkg.description, - keywords: pkg.keywords, - homepage: pkg.homepage, - bugs: pkg.bugs, - license: pkg.license, - author: pkg.author, - contributors: pkg.contributors, - funding: pkg.funding, - repository: pkg.repository, - dependencies: pkg.dependencies, - private: pkg.private, - files: pkg.files, - publishConfig: pkg.publishConfig, - type: 'module', - /** @type {Record} */ - exports: { - './package.json': './package.json' - } - }; + delete pkg.scripts; + pkg.type = 'module'; // type must be 'module' + + const user_defined_exports = 'exports' in pkg; + + // We still want to always predefine some exports + // like package.json that is used by other packages + if (!pkg.exports) pkg.exports = {}; + pkg.exports['./package.json'] = './package.json'; for (const file of files) { if (!files_filter(file)) continue; @@ -94,22 +81,19 @@ export async function make_package(config, cwd = process.cwd()) { write(path.join(cwd, config.kit.package.dir, out_file), out_contents); - if (exports_filter(file)) { - const entry = `./${out_file}`; - package_pkg.exports[entry] = entry; + if (!user_defined_exports && exports_filter(file)) { + const entry = `./${out_file.replace(/\\/g, '/')}`; + pkg.exports[entry] = entry; } } - const main = package_pkg.exports['./index.js'] || package_pkg.exports['./index.svelte']; + const main = pkg.exports['./index.js'] || pkg.exports['./index.svelte']; - if (main) { - package_pkg.exports['.'] = main; + if (!user_defined_exports && main) { + pkg.exports['.'] = main; } - write( - path.join(cwd, config.kit.package.dir, 'package.json'), - JSON.stringify(package_pkg, null, ' ') - ); + write(path.join(cwd, config.kit.package.dir, 'package.json'), JSON.stringify(pkg, null, ' ')); const whitelist = fs.readdirSync(cwd).filter((file) => { const lowercased = file.toLowerCase(); @@ -120,8 +104,7 @@ export async function make_package(config, cwd = process.cwd()) { if (fs.lstatSync(full_path).isDirectory()) continue; // just to be sure const package_path = path.join(cwd, config.kit.package.dir, pathname); - if (fs.existsSync(package_path)) continue; - fs.copyFileSync(full_path, package_path); + if (!fs.existsSync(package_path)) fs.copyFileSync(full_path, package_path); } } diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/ReadMe.md b/packages/kit/src/core/make_package/test/fixtures/casing/ReadMe.md new file mode 100644 index 000000000000..e965047ad7c5 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/ReadMe.md @@ -0,0 +1 @@ +Hello diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/expected/ReadMe.md b/packages/kit/src/core/make_package/test/fixtures/casing/expected/ReadMe.md new file mode 100644 index 000000000000..e965047ad7c5 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/expected/ReadMe.md @@ -0,0 +1 @@ +Hello diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/expected/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/casing/expected/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/expected/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/expected/Test.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/casing/expected/Test.svelte.d.ts new file mode 100644 index 000000000000..8cfa75e62de7 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/expected/Test.svelte.d.ts @@ -0,0 +1,40 @@ +/** @typedef {typeof __propDef.props} TestProps */ +/** @typedef {typeof __propDef.events} TestEvents */ +/** @typedef {typeof __propDef.slots} TestSlots */ +export default class Test extends SvelteComponentTyped< + { + astring: string; + }, + { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }, + { + default: { + astring: string; + }; + } +> { + get astring(): string; +} +export type TestProps = typeof __propDef.props; +export type TestEvents = typeof __propDef.events; +export type TestSlots = typeof __propDef.slots; +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + astring: string; + }; + events: { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }; + slots: { + default: { + astring: string; + }; + }; +}; +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/expected/index.d.ts b/packages/kit/src/core/make_package/test/fixtures/casing/expected/index.d.ts new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/expected/index.d.ts @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/expected/index.js b/packages/kit/src/core/make_package/test/fixtures/casing/expected/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/expected/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/expected/package.json b/packages/kit/src/core/make_package/test/fixtures/casing/expected/package.json new file mode 100644 index 000000000000..d637970e1d6f --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/expected/package.json @@ -0,0 +1,12 @@ +{ + "name": "casing", + "version": "1.0.0", + "description": "package-casing-test", + "type": "module", + "exports": { + "./package.json": "./package.json", + "./index.js": "./index.js", + "./Test.svelte": "./Test.svelte", + ".": "./index.js" + } +} diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/jsconfig.json b/packages/kit/src/core/make_package/test/fixtures/casing/jsconfig.json new file mode 100644 index 000000000000..5417394ebe85 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "checkJs": true, + "paths": { + "$lib/*": ["src/lib/*"] + } + }, + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/package.json b/packages/kit/src/core/make_package/test/fixtures/casing/package.json new file mode 100644 index 000000000000..858292474b29 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/package.json @@ -0,0 +1,5 @@ +{ + "name": "casing", + "version": "1.0.0", + "description": "package-casing-test" +} diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/src/app.html b/packages/kit/src/core/make_package/test/fixtures/casing/src/app.html new file mode 100644 index 000000000000..245305c4ef5b --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/src/lib/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/casing/src/lib/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/src/lib/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/src/lib/index.js b/packages/kit/src/core/make_package/test/fixtures/casing/src/lib/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/casing/src/lib/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/casing/svelte.config.js b/packages/kit/src/core/make_package/test/fixtures/casing/svelte.config.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/expected/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/exports/expected/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/expected/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/expected/Test.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/exports/expected/Test.svelte.d.ts new file mode 100644 index 000000000000..8cfa75e62de7 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/expected/Test.svelte.d.ts @@ -0,0 +1,40 @@ +/** @typedef {typeof __propDef.props} TestProps */ +/** @typedef {typeof __propDef.events} TestEvents */ +/** @typedef {typeof __propDef.slots} TestSlots */ +export default class Test extends SvelteComponentTyped< + { + astring: string; + }, + { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }, + { + default: { + astring: string; + }; + } +> { + get astring(): string; +} +export type TestProps = typeof __propDef.props; +export type TestEvents = typeof __propDef.events; +export type TestSlots = typeof __propDef.slots; +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + astring: string; + }; + events: { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }; + slots: { + default: { + astring: string; + }; + }; +}; +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/expected/index.d.ts b/packages/kit/src/core/make_package/test/fixtures/exports/expected/index.d.ts new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/expected/index.d.ts @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/expected/index.js b/packages/kit/src/core/make_package/test/fixtures/exports/expected/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/expected/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/Test.svelte new file mode 100644 index 000000000000..06a5a3408e95 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/Test.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/Test.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/Test.svelte.d.ts new file mode 100644 index 000000000000..c787a209ac12 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/Test.svelte.d.ts @@ -0,0 +1,26 @@ +/** @typedef {typeof __propDef.props} Test2Props */ +/** @typedef {typeof __propDef.events} Test2Events */ +/** @typedef {typeof __propDef.slots} Test2Slots */ +export default class Test2 extends SvelteComponentTyped< + { + foo: boolean; + }, + { + [evt: string]: CustomEvent; + }, + {} +> {} +export type Test2Props = typeof __propDef.props; +export type Test2Events = typeof __propDef.events; +export type Test2Slots = typeof __propDef.slots; +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + foo: import('./foo').Foo; + }; + events: { + [evt: string]: CustomEvent; + }; + slots: {}; +}; +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/expected/internal/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/expected/package.json b/packages/kit/src/core/make_package/test/fixtures/exports/expected/package.json new file mode 100644 index 000000000000..f561f9dbe440 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/expected/package.json @@ -0,0 +1,12 @@ +{ + "name": "exports", + "version": "1.0.0", + "description": "package-exports-test", + "exports": { + ".": { + "import": "./index.js" + }, + "./package.json": "./package.json" + }, + "type": "module" +} diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/jsconfig.json b/packages/kit/src/core/make_package/test/fixtures/exports/jsconfig.json new file mode 100644 index 000000000000..5417394ebe85 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "checkJs": true, + "paths": { + "$lib/*": ["src/lib/*"] + } + }, + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/package.json b/packages/kit/src/core/make_package/test/fixtures/exports/package.json new file mode 100644 index 000000000000..7b6755bb7ce3 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/package.json @@ -0,0 +1,10 @@ +{ + "name": "exports", + "version": "1.0.0", + "description": "package-exports-test", + "exports": { + ".": { + "import": "./index.js" + } + } +} diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/src/app.html b/packages/kit/src/core/make_package/test/fixtures/exports/src/app.html new file mode 100644 index 000000000000..245305c4ef5b --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/index.js b/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/index.js new file mode 100644 index 000000000000..4c44188c3648 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/index.js @@ -0,0 +1 @@ +export { default as Test } from './Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/internal/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/internal/Test.svelte new file mode 100644 index 000000000000..06a5a3408e95 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/internal/Test.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/internal/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/internal/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/exports/src/lib/internal/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/exports/svelte.config.js b/packages/kit/src/core/make_package/test/fixtures/exports/svelte.config.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/expected/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/nested/expected/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/expected/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/expected/Test.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/nested/expected/Test.svelte.d.ts new file mode 100644 index 000000000000..8cfa75e62de7 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/expected/Test.svelte.d.ts @@ -0,0 +1,40 @@ +/** @typedef {typeof __propDef.props} TestProps */ +/** @typedef {typeof __propDef.events} TestEvents */ +/** @typedef {typeof __propDef.slots} TestSlots */ +export default class Test extends SvelteComponentTyped< + { + astring: string; + }, + { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }, + { + default: { + astring: string; + }; + } +> { + get astring(): string; +} +export type TestProps = typeof __propDef.props; +export type TestEvents = typeof __propDef.events; +export type TestSlots = typeof __propDef.slots; +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + astring: string; + }; + events: { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }; + slots: { + default: { + astring: string; + }; + }; +}; +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/expected/index.d.ts b/packages/kit/src/core/make_package/test/fixtures/nested/expected/index.d.ts new file mode 100644 index 000000000000..ed60fe04da25 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/expected/index.d.ts @@ -0,0 +1,2 @@ +export { default as Test } from './Test.svelte'; +export { default as Internal } from './internal/Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/expected/index.js b/packages/kit/src/core/make_package/test/fixtures/nested/expected/index.js new file mode 100644 index 000000000000..ed60fe04da25 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/expected/index.js @@ -0,0 +1,2 @@ +export { default as Test } from './Test.svelte'; +export { default as Internal } from './internal/Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/Test.svelte new file mode 100644 index 000000000000..06a5a3408e95 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/Test.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/Test.svelte.d.ts b/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/Test.svelte.d.ts new file mode 100644 index 000000000000..c787a209ac12 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/Test.svelte.d.ts @@ -0,0 +1,26 @@ +/** @typedef {typeof __propDef.props} Test2Props */ +/** @typedef {typeof __propDef.events} Test2Events */ +/** @typedef {typeof __propDef.slots} Test2Slots */ +export default class Test2 extends SvelteComponentTyped< + { + foo: boolean; + }, + { + [evt: string]: CustomEvent; + }, + {} +> {} +export type Test2Props = typeof __propDef.props; +export type Test2Events = typeof __propDef.events; +export type Test2Slots = typeof __propDef.slots; +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + foo: import('./foo').Foo; + }; + events: { + [evt: string]: CustomEvent; + }; + slots: {}; +}; +export {}; diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/expected/internal/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/expected/package.json b/packages/kit/src/core/make_package/test/fixtures/nested/expected/package.json new file mode 100644 index 000000000000..e42f6745dbed --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/expected/package.json @@ -0,0 +1,13 @@ +{ + "name": "nested", + "version": "1.0.0", + "description": "package-nested-test", + "type": "module", + "exports": { + "./package.json": "./package.json", + "./index.js": "./index.js", + "./internal/Test.svelte": "./internal/Test.svelte", + "./Test.svelte": "./Test.svelte", + ".": "./index.js" + } +} diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/jsconfig.json b/packages/kit/src/core/make_package/test/fixtures/nested/jsconfig.json new file mode 100644 index 000000000000..5417394ebe85 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "checkJs": true, + "paths": { + "$lib/*": ["src/lib/*"] + } + }, + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/package.json b/packages/kit/src/core/make_package/test/fixtures/nested/package.json new file mode 100644 index 000000000000..d575f11b5bef --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/package.json @@ -0,0 +1,5 @@ +{ + "name": "nested", + "version": "1.0.0", + "description": "package-nested-test" +} diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/src/app.html b/packages/kit/src/core/make_package/test/fixtures/nested/src/app.html new file mode 100644 index 000000000000..245305c4ef5b --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/index.js b/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/index.js new file mode 100644 index 000000000000..ed60fe04da25 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/index.js @@ -0,0 +1,2 @@ +export { default as Test } from './Test.svelte'; +export { default as Internal } from './internal/Test.svelte'; diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/internal/Test.svelte b/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/internal/Test.svelte new file mode 100644 index 000000000000..06a5a3408e95 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/internal/Test.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/internal/foo.d.ts b/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/internal/foo.d.ts new file mode 100644 index 000000000000..c941ad7b1ce6 --- /dev/null +++ b/packages/kit/src/core/make_package/test/fixtures/nested/src/lib/internal/foo.d.ts @@ -0,0 +1 @@ +export type Foo = boolean; diff --git a/packages/kit/src/core/make_package/test/fixtures/nested/svelte.config.js b/packages/kit/src/core/make_package/test/fixtures/nested/svelte.config.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/src/core/make_package/test/index.js b/packages/kit/src/core/make_package/test/index.js index 942eff4241e9..63ce96b9d52c 100644 --- a/packages/kit/src/core/make_package/test/index.js +++ b/packages/kit/src/core/make_package/test/index.js @@ -5,7 +5,7 @@ import { fileURLToPath } from 'url'; import { load_config } from '../../config/index.js'; import { make_package } from '../index.js'; import { rimraf } from '../../filesystem/index.js'; -import { readdirSync, readFileSync } from 'fs'; +import { lstatSync, readdirSync, readFileSync } from 'fs'; import prettier from 'prettier'; const __filename = fileURLToPath(import.meta.url); @@ -16,12 +16,30 @@ const __dirname = join(__filename, '..'); */ async function test_make_package(path) { const cwd = join(__dirname, 'fixtures', path); + const ewd = join(cwd, 'expected'); + const pwd = join(cwd, 'package'); + + /** + * @param {string} start starting pathname + * @param {string} dir absolute directory + * @returns {string[]} list of complete paths + */ + const get_complete_list = (start, dir) => { + const files = []; + for (const name of readdirSync(dir)) { + const relative = join(start, name); + const current = join(dir, name); + if (!lstatSync(current).isDirectory()) files.push(relative); + else files.concat(get_complete_list(relative, current)); + } + return files; + }; try { const config = await load_config({ cwd }); await make_package(config, cwd); - const expected_files = readdirSync(join(cwd, 'expected')); - const actual_files = readdirSync(join(cwd, 'package')); + const expected_files = get_complete_list('', ewd); + const actual_files = get_complete_list('', pwd); assert.equal( actual_files.length, expected_files.length, @@ -31,18 +49,32 @@ async function test_make_package(path) { actual_files.join(',') ); - for (const file of actual_files) { - assert.equal(expected_files.includes(file), true, `Did not expect ${file}`); - const expected_content = readFileSync(join(cwd, 'expected', file), 'utf-8'); - const actual_content = readFileSync(join(cwd, 'package', file), 'utf-8'); - assert.equal( - format(file, actual_content), - format(file, expected_content), - 'Expected equal file contents' - ); - } + /** + * @param {string[]} files relative names + * @param {string} path absolute pathnames + */ + const traverse = (files, path) => { + for (const file of files) { + const current = join(path, file); + if (lstatSync(current).isDirectory()) { + traverse(readdirSync(current), current); + } else { + assert.equal(expected_files.includes(file), true, `Did not expect ${file}`); + const expected_path = current.replace(/([/\\]test[/\\].+)package([/\\])/, '$1expected$2'); + const expected_content = readFileSync(expected_path, 'utf-8'); + const actual_content = readFileSync(current, 'utf-8'); + assert.equal( + format(file, actual_content), + format(file, expected_content), + 'Expected equal file contents' + ); + } + } + }; + + traverse(actual_files, pwd); } finally { - rimraf(join(cwd, 'package')); + rimraf(pwd); } } @@ -74,6 +106,18 @@ test('create package (typescript)', async () => { await test_make_package('typescript'); }); +test('create package (nested)', async () => { + await test_make_package('nested'); +}); + +test('create package with user defined settings (exports)', async () => { + await test_make_package('exports'); +}); + +test('create package with preserved files', async () => { + await test_make_package('casing'); +}); + test('create package (javascript without types)', async () => { await test_make_package('javascript_no_types'); }); From 8854e2ffc48cf653854828f6ac19b2ce620535a6 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sat, 10 Jul 2021 06:20:58 -0700 Subject: [PATCH 128/129] Bump vite-plugin-svelte to 1.0.0-next.12 (#1869) --- .changeset/hungry-masks-cross.md | 5 ++ packages/kit/package.json | 2 +- pnpm-lock.yaml | 85 +++++++++++++++++++++++--------- 3 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 .changeset/hungry-masks-cross.md diff --git a/.changeset/hungry-masks-cross.md b/.changeset/hungry-masks-cross.md new file mode 100644 index 000000000000..8b8d2365b5b1 --- /dev/null +++ b/.changeset/hungry-masks-cross.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Bump vite-plugin-svelte to 1.0.0-next.12 diff --git a/packages/kit/package.json b/packages/kit/package.json index a178393476da..5074fe274e66 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -3,7 +3,7 @@ "version": "1.0.0-next.123", "type": "module", "dependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.0-next.11", + "@sveltejs/vite-plugin-svelte": "^1.0.0-next.12", "cheap-watch": "^1.0.3", "sade": "^1.7.4", "vite": "^2.4.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a2c9d6e87cd0..3f48a30beeb1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -194,7 +194,7 @@ importers: '@sveltejs/adapter-cloudflare-workers': link:../../../adapter-cloudflare-workers '@sveltejs/adapter-netlify': link:../../../adapter-netlify '@sveltejs/adapter-vercel': link:../../../adapter-vercel - '@sveltejs/kit': link:../../../kit + '@sveltejs/kit': 1.0.0-next.123_rollup@2.47.0+svelte@3.38.2 svelte: 3.38.2 svelte-preprocess: 4.7.3_svelte@3.38.2+typescript@4.2.4 typescript: 4.2.4 @@ -202,7 +202,7 @@ importers: packages/kit: specifiers: '@rollup/plugin-replace': ^2.4.2 - '@sveltejs/vite-plugin-svelte': ^1.0.0-next.11 + '@sveltejs/vite-plugin-svelte': ^1.0.0-next.12 '@types/amphtml-validator': ^1.0.1 '@types/cookie': ^0.4.0 '@types/globrex': ^0.1.0 @@ -235,7 +235,7 @@ importers: uvu: ^0.5.1 vite: ^2.4.1 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.11_7f2c501a1382bf91518307aaca32f4f7 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.12_7f2c501a1382bf91518307aaca32f4f7 cheap-watch: 1.0.3 sade: 1.7.4 vite: 2.4.1 @@ -642,21 +642,58 @@ packages: estree-walker: 2.0.2 picomatch: 2.2.3 rollup: 2.47.0 - dev: false - /@sveltejs/vite-plugin-svelte/1.0.0-next.11_7f2c501a1382bf91518307aaca32f4f7: - resolution: {integrity: sha512-EYR1I145k5rflVqhPwk3442m3bkYimTKSHM9uO5KdomXzt+GS9ZSBJQE3/wy1Di9V8OnGa3oKpckI3OZsHkTIA==} + /@sveltejs/kit/1.0.0-next.123_rollup@2.47.0+svelte@3.38.2: + resolution: {integrity: sha512-C9UZ5yYdU94hjpmwTPmDpCWphPc9RsSR4TxV67JM+SqDrSCMKx65JI3+goQQzY2ZHARUGukoc1+ijaRxW48AWQ==} + engines: {node: ^12.20 || >=14.13} + hasBin: true + peerDependencies: + svelte: ^3.34.0 + dependencies: + '@sveltejs/vite-plugin-svelte': 1.0.0-next.12_521dee33336505fa0c0cfefe092a237f + cheap-watch: 1.0.3 + sade: 1.7.4 + svelte: 3.38.2 + vite: 2.4.1 + transitivePeerDependencies: + - rollup + - supports-color + dev: true + + /@sveltejs/vite-plugin-svelte/1.0.0-next.12_521dee33336505fa0c0cfefe092a237f: + resolution: {integrity: sha512-cuyNkJ6leptfv+7qL/fWQ7EpGWdguosFOUI0z93oQUmFTcX7QxJ5h+QI3NQyktBzlKL/761L8BbG2hHNkVbLIQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: - svelte: ^3.38.2 + svelte: ^3.34.0 vite: ^2.3.7 dependencies: '@rollup/pluginutils': 4.1.0_rollup@2.47.0 - chalk: 4.1.1 debug: 4.3.2 + kleur: 4.1.4 + magic-string: 0.25.7 + require-relative: 0.8.7 + svelte: 3.38.2 + svelte-hmr: 0.14.5_svelte@3.38.2 + vite: 2.4.1 + transitivePeerDependencies: + - rollup + - supports-color + dev: true + + /@sveltejs/vite-plugin-svelte/1.0.0-next.12_7f2c501a1382bf91518307aaca32f4f7: + resolution: {integrity: sha512-cuyNkJ6leptfv+7qL/fWQ7EpGWdguosFOUI0z93oQUmFTcX7QxJ5h+QI3NQyktBzlKL/761L8BbG2hHNkVbLIQ==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: ^3.34.0 + vite: ^2.3.7 + dependencies: + '@rollup/pluginutils': 4.1.0_rollup@2.47.0 + debug: 4.3.2 + kleur: 4.1.4 + magic-string: 0.25.7 require-relative: 0.8.7 svelte: 3.38.3 - svelte-hmr: 0.14.4_svelte@3.38.3 + svelte-hmr: 0.14.5_svelte@3.38.3 vite: 2.4.1 transitivePeerDependencies: - rollup @@ -991,6 +1028,7 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true /any-promise/1.3.0: resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=} @@ -1185,6 +1223,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -1193,7 +1232,6 @@ packages: /cheap-watch/1.0.3: resolution: {integrity: sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==} engines: {node: '>=8'} - dev: false /chokidar/3.5.1: resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} @@ -1251,6 +1289,7 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true /color-name/1.1.3: resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} @@ -1258,10 +1297,10 @@ packages: /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true /colorette/1.2.2: resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} - dev: false /colors/1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} @@ -1397,7 +1436,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: false /decamelize-keys/1.1.0: resolution: {integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=} @@ -1537,7 +1575,6 @@ packages: resolution: {integrity: sha512-72V4JNd2+48eOVCXx49xoSWHgC3/cCy96e7mbXKY+WOWghN00cCmlGnwVLRhRHorvv0dgCyuMYBZlM2xDM5OQw==} hasBin: true requiresBuild: true - dev: false /esbuild/0.12.5: resolution: {integrity: sha512-vcuP53pA5XiwUU4FnlXM+2PnVjTfHGthM7uP1gtp+9yfheGvFFbq/KyuESThmtoHPUrfZH5JpxGVJIFDVD1Egw==} @@ -2019,6 +2056,7 @@ packages: /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true /has-symbols/1.0.2: resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} @@ -2423,7 +2461,6 @@ packages: resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} dependencies: sourcemap-codec: 1.4.8 - dev: true /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -2548,7 +2585,6 @@ packages: resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: false /natural-compare/1.4.0: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} @@ -2901,7 +2937,6 @@ packages: colorette: 1.2.2 nanoid: 3.1.23 source-map-js: 0.6.2 - dev: false /preferred-pm/3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} @@ -3086,7 +3121,6 @@ packages: /require-relative/0.8.7: resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} - dev: false /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -3135,7 +3169,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 - dev: false /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3255,7 +3288,6 @@ packages: /source-map-js/0.6.2: resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==} engines: {node: '>=0.10.0'} - dev: false /source-map/0.7.3: resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} @@ -3264,7 +3296,6 @@ packages: /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - dev: true /spawndamnit/2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -3404,6 +3435,7 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true /svelte-check/2.2.0_svelte@3.38.3: resolution: {integrity: sha512-6Lo5h/I2LlygtKn9sl2n5hAPBZgeY99wlsz0+6f5K3qCpMwYC8rkcbrZkNpNEMwbMABQkcWOKb5cfEew6Q/Kpg==} @@ -3434,8 +3466,16 @@ packages: - sugarss dev: true - /svelte-hmr/0.14.4_svelte@3.38.3: - resolution: {integrity: sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==} + /svelte-hmr/0.14.5_svelte@3.38.2: + resolution: {integrity: sha512-3O+kkbT1XKAomKB0LRcdY8JUTzONoNZ8rSH4iEdG7piIYsw+KkXpTkbbU1Sc1yPY4onfXkmCrHElYsxr0V1Snw==} + peerDependencies: + svelte: '>=3.19.0' + dependencies: + svelte: 3.38.2 + dev: true + + /svelte-hmr/0.14.5_svelte@3.38.3: + resolution: {integrity: sha512-3O+kkbT1XKAomKB0LRcdY8JUTzONoNZ8rSH4iEdG7piIYsw+KkXpTkbbU1Sc1yPY4onfXkmCrHElYsxr0V1Snw==} peerDependencies: svelte: '>=3.19.0' dependencies: @@ -3856,7 +3896,6 @@ packages: rollup: 2.52.7 optionalDependencies: fsevents: 2.3.2 - dev: false /wcwidth/1.0.1: resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} From 06e1c25a147aeeb6d67c2daff5a4494882827bbd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 10 Jul 2021 13:24:23 -0700 Subject: [PATCH 129/129] Version Packages (next) (#1858) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 7 +++++++ packages/create-svelte/CHANGELOG.md | 6 ++++++ packages/create-svelte/package.json | 2 +- packages/kit/CHANGELOG.md | 11 +++++++++++ packages/kit/package.json | 2 +- 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 77d7c65edd0a..6f4a008b6aef 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -93,6 +93,7 @@ "flat-parrots-juggle", "flat-pillows-think", "flat-turtles-scream", + "fluffy-cheetahs-remain", "fluffy-dryers-jump", "forty-months-prove", "four-cheetahs-yawn", @@ -117,6 +118,7 @@ "great-kangaroos-eat", "great-queens-rule", "green-spoons-count", + "happy-actors-camp", "happy-dancers-call", "happy-nails-draw", "happy-pumas-thank", @@ -131,6 +133,7 @@ "hot-keys-walk", "hot-kings-confess", "hungry-lemons-scream", + "hungry-masks-cross", "itchy-beers-burn", "itchy-birds-admire", "itchy-lobsters-tie", @@ -147,6 +150,7 @@ "late-glasses-sin", "lazy-actors-add", "lazy-carpets-join", + "lazy-mice-smile", "lemon-lies-attack", "lemon-mails-hope", "lemon-taxis-juggle", @@ -163,6 +167,7 @@ "lovely-mice-search", "lucky-bottles-kick", "mean-bananas-live", + "metal-avocados-lie", "metal-nails-divide", "metal-tigers-kiss", "mighty-carrots-switch", @@ -179,6 +184,7 @@ "nasty-llamas-lay", "nasty-waves-kneel", "neat-olives-hope", + "neat-walls-buy", "neat-worms-tell", "nervous-steaks-add", "nervous-wolves-end", @@ -342,6 +348,7 @@ "two-students-melt", "two-ties-begin", "unlucky-parrots-vanish", + "unlucky-planets-battle", "unlucky-wasps-rest", "violet-goats-wave", "violet-jars-give", diff --git a/packages/create-svelte/CHANGELOG.md b/packages/create-svelte/CHANGELOG.md index 6b3ae823fc3a..c64cf6a2a96e 100644 --- a/packages/create-svelte/CHANGELOG.md +++ b/packages/create-svelte/CHANGELOG.md @@ -1,5 +1,11 @@ # create-svelte +## 2.0.0-next.74 + +### Patch Changes + +- 4c7ccfd: Add \$lib alias to js/tsconfig + ## 2.0.0-next.73 ### Patch Changes diff --git a/packages/create-svelte/package.json b/packages/create-svelte/package.json index 7838b462e7d2..df6d95cceb71 100644 --- a/packages/create-svelte/package.json +++ b/packages/create-svelte/package.json @@ -1,6 +1,6 @@ { "name": "create-svelte", - "version": "2.0.0-next.73", + "version": "2.0.0-next.74", "bin": "./bin.js", "dependencies": { "kleur": "^4.1.4", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index ec52cbc4a327..3fef14d26172 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,16 @@ # @sveltejs/kit +## 1.0.0-next.124 + +### Patch Changes + +- 34d2049: handle undefined body on endpoint output +- c826016: add config.kit.package.emitTypes +- 8854e2f: Bump vite-plugin-svelte to 1.0.0-next.12 +- af1aa54: copy essential root files on `svelte-kit package` +- 872840a: Pass along custom properties added to Error +- 868f97a: Preserve README casing and package.json contents on svelte-kit package + ## 1.0.0-next.123 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 5074fe274e66..c9b4af2b3182 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "1.0.0-next.123", + "version": "1.0.0-next.124", "type": "module", "dependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.12",