From e8a72810b060442d3282dba42f7e98fa24186e55 Mon Sep 17 00:00:00 2001 From: Joe Busillo Date: Wed, 9 Jun 2021 22:41:07 -0500 Subject: [PATCH 1/5] Use vite options for Preview SSL cert/key --- .changeset/itchy-readers-search.md | 5 +++++ packages/kit/src/core/server/index.js | 1 + packages/kit/src/core/start/index.js | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/itchy-readers-search.md diff --git a/.changeset/itchy-readers-search.md b/.changeset/itchy-readers-search.md new file mode 100644 index 000000000000..bfb0abb18d5d --- /dev/null +++ b/.changeset/itchy-readers-search.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Align Dev and Preview key/cert options diff --git a/packages/kit/src/core/server/index.js b/packages/kit/src/core/server/index.js index 4463f840d673..b729f827ffbc 100644 --- a/packages/kit/src/core/server/index.js +++ b/packages/kit/src/core/server/index.js @@ -13,6 +13,7 @@ export async function get_server(use_https, user_config, handler) { if (use_https) { if ( + user_config && user_config.server && user_config.server.https && user_config.server.https.key && diff --git a/packages/kit/src/core/start/index.js b/packages/kit/src/core/start/index.js index ff0c1d711a9e..1e5984f792c0 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)) }); - const server = await get_server(use_https, config.kit, (req, res) => { + const server = await get_server(use_https, config.kit.vite, (req, res) => { const parsed = parse(req.url || ''); assets_handler(req, res, () => { From d2658d82189371057a040746f05301ac96057b0c Mon Sep 17 00:00:00 2001 From: Joe Busillo Date: Wed, 16 Jun 2021 16:53:20 -0500 Subject: [PATCH 2/5] Rename user_config to vite_config, use types --- packages/kit/src/core/dev/index.js | 14 ++++++++------ packages/kit/src/core/server/index.js | 23 +++++++++++------------ packages/kit/types/config.d.ts | 2 ++ 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 7bbb20e7454a..728c5bd3c1a3 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -77,18 +77,19 @@ class Watcher extends EventEmitter { } async init_server() { - /** @type {any} */ - const user_config = (this.config.kit.vite && this.config.kit.vite()) || {}; + const vite_config = + /** @type {import('types/config').ViteConfig} ViteConfig */ + (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)); + this.server = await get_server(this.https, vite_config, (req, res) => handler(req, res)); - const alias = user_config.resolve && user_config.resolve.alias; + const alias = vite_config.resolve && vite_config.resolve.alias; /** @type {[any, string[]]} */ - const [merged_config, conflicts] = deep_merge(user_config, { + const [merged_config, conflicts] = deep_merge(vite_config, { configFile: false, root: this.cwd, resolve: { @@ -125,7 +126,8 @@ class Watcher extends EventEmitter { entries: [] }, ssr: { - noExternal: get_no_external(this.cwd, user_config.ssr && user_config.ssr.noExternal) + // @ts-ignore // ssr not defined in vite config.ts + noExternal: get_no_external(this.cwd, vite_config.ssr && vite_config.ssr.noExternal) } }); diff --git a/packages/kit/src/core/server/index.js b/packages/kit/src/core/server/index.js index b729f827ffbc..52c19ae77d9d 100644 --- a/packages/kit/src/core/server/index.js +++ b/packages/kit/src/core/server/index.js @@ -1,26 +1,25 @@ import http from 'http'; import https from 'https'; +//import config from '../../../test/apps/amp/svelte.config'; /** * * @param {boolean} use_https - * @param {any} user_config + * @param {import('types/config').ViteConfig} vite_config * @param {(req: http.IncomingMessage, res: http.ServerResponse) => void} handler * @returns {Promise} */ -export async function get_server(use_https, user_config, handler) { +export async function get_server(use_https, vite_config, handler) { /** @type {https.ServerOptions} */ - const https_options = {}; + const https_options = + vite_config && vite_config.server && vite_config.server.https === 'object' + ? vite_config.server.https + : {}; + const { key, cert } = https_options; if (use_https) { - if ( - user_config && - user_config.server && - user_config.server.https && - user_config.server.https.key && - user_config.server.https.cert - ) { - https_options.key = user_config.server.https.key.toString(); - https_options.cert = user_config.server.https.cert.toString(); + if (key && cert) { + https_options.key = key; + https_options.cert = cert; } else { https_options.key = https_options.cert = (await import('./cert')).createCertificate(); } diff --git a/packages/kit/types/config.d.ts b/packages/kit/types/config.d.ts index 5471b5dbdc89..09581f3d17c8 100644 --- a/packages/kit/types/config.d.ts +++ b/packages/kit/types/config.d.ts @@ -123,3 +123,5 @@ export type ValidatedConfig = { }; preprocess: any; }; + +export type { ViteConfig }; From 80d43a647013d63f09a292ec9a60a80b56d5a7ec Mon Sep 17 00:00:00 2001 From: Joe Busillo Date: Wed, 16 Jun 2021 22:33:09 -0500 Subject: [PATCH 3/5] fix lint error, add typeof --- packages/kit/src/core/dev/index.js | 5 ++--- packages/kit/src/core/server/index.js | 2 +- packages/kit/src/core/start/index.js | 5 ++++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 728c5bd3c1a3..91c6f81321b6 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -77,9 +77,8 @@ class Watcher extends EventEmitter { } async init_server() { - const vite_config = - /** @type {import('types/config').ViteConfig} ViteConfig */ - (this.config.kit.vite && this.config.kit.vite()) || {}; + /** @type {import('types/config').ViteConfig} ViteConfig */ + const vite_config = (this.config.kit.vite && this.config.kit.vite()) || {}; /** @type {(req: import("http").IncomingMessage, res: import("http").ServerResponse) => void} */ let handler = (req, res) => {}; diff --git a/packages/kit/src/core/server/index.js b/packages/kit/src/core/server/index.js index 52c19ae77d9d..b0969efb869c 100644 --- a/packages/kit/src/core/server/index.js +++ b/packages/kit/src/core/server/index.js @@ -11,7 +11,7 @@ import https from 'https'; export async function get_server(use_https, vite_config, handler) { /** @type {https.ServerOptions} */ const https_options = - vite_config && vite_config.server && vite_config.server.https === 'object' + vite_config && vite_config.server && typeof vite_config.server.https === 'object' ? vite_config.server.https : {}; const { key, cert } = https_options; diff --git a/packages/kit/src/core/start/index.js b/packages/kit/src/core/start/index.js index 1e5984f792c0..a2b05cf7d5b8 100644 --- a/packages/kit/src/core/start/index.js +++ b/packages/kit/src/core/start/index.js @@ -48,7 +48,10 @@ export async function start({ port, host, config, https: use_https = false, cwd read: (file) => fs.readFileSync(join(config.kit.files.assets, file)) }); - const server = await get_server(use_https, config.kit.vite, (req, res) => { + /** @type {import('types/config').ViteConfig} ViteConfig */ + const vite_config = (this.config.kit.vite && this.config.kit.vite()) || {}; + + const server = await get_server(use_https, vite_config, (req, res) => { const parsed = parse(req.url || ''); assets_handler(req, res, () => { From 0f21dd1061d23d1641884f01f23474707714393c Mon Sep 17 00:00:00 2001 From: Joe Busillo Date: Wed, 16 Jun 2021 22:45:00 -0500 Subject: [PATCH 4/5] fix start config reference --- packages/kit/src/core/start/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/core/start/index.js b/packages/kit/src/core/start/index.js index a2b05cf7d5b8..5fb438c6b889 100644 --- a/packages/kit/src/core/start/index.js +++ b/packages/kit/src/core/start/index.js @@ -48,8 +48,9 @@ export async function start({ port, host, config, https: use_https = false, cwd read: (file) => fs.readFileSync(join(config.kit.files.assets, file)) }); - /** @type {import('types/config').ViteConfig} ViteConfig */ - const vite_config = (this.config.kit.vite && this.config.kit.vite()) || {}; + const vite_config = + /** @type {import('types/config').ViteConfig} ViteConfig */ + (config.kit.vite && config.kit.vite()) || {}; const server = await get_server(use_https, vite_config, (req, res) => { const parsed = parse(req.url || ''); From 1076db3f7910b0bd50e2bdab1fca76bf6cd177fe Mon Sep 17 00:00:00 2001 From: Joe Busillo Date: Mon, 26 Jul 2021 22:16:56 -0500 Subject: [PATCH 5/5] Commit Staged Changes --- packages/kit/src/core/server/index.js | 53 +++++++++++++++++++++------ 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/packages/kit/src/core/server/index.js b/packages/kit/src/core/server/index.js index b0969efb869c..9faef59c4aaf 100644 --- a/packages/kit/src/core/server/index.js +++ b/packages/kit/src/core/server/index.js @@ -1,6 +1,7 @@ import http from 'http'; import https from 'https'; -//import config from '../../../test/apps/amp/svelte.config'; +import fs from 'fs'; +import path from 'path'; /** * * @param {boolean} use_https @@ -10,24 +11,52 @@ import https from 'https'; */ export async function get_server(use_https, vite_config, handler) { /** @type {https.ServerOptions} */ - const https_options = - vite_config && vite_config.server && typeof vite_config.server.https === 'object' - ? vite_config.server.https - : {}; - const { key, cert } = https_options; + let https_options; if (use_https) { - if (key && cert) { - https_options.key = key; - https_options.cert = cert; - } else { - https_options.key = https_options.cert = (await import('./cert')).createCertificate(); + https_options = + vite_config && vite_config.server && typeof vite_config.server.https === 'object' + ? vite_config.server.https + : {}; + + if (https_options.ca) https_options.ca = readFileIfExists(https_options.ca); + if (https_options.cert) https_options.cert = readFileIfExists(https_options.cert); + if (https_options.key) https_options.key = readFileIfExists(https_options.key); + if (https_options.pfx) { + https_options.pfx = readFileIfExists(https_options.pfx); + delete https_options.cert; + delete https_options.key; + } + + if (!https_options.pfx && (!https_options.key || !https_options.cert)) { + https_options.cert = https_options.key = (await import('./cert')).createCertificate(); + } + } else { + if (vite_config && vite_config.server) { + delete vite_config.server.https; } } return Promise.resolve( use_https - ? https.createServer(/** @type {https.ServerOptions} */ (https_options), handler) + ? https.createServer(/** @type {https.ServerOptions} */(https_options), handler) : http.createServer(handler) ); } + +/** + * + * @param {string | Buffer | any[]} value + * @returns {string | Buffer | Buffer[]} value + */ +function readFileIfExists(value) { + if (typeof value === 'string') { + try { + return fs.readFileSync(path.resolve(value)); + // return fs.readFileSync(path.resolve(value), { encoding: 'utf-8' }); + } catch (e) { + return value; + } + } + return value; +}