From b5edf0edd558d1ce06938311acf425fe392b9910 Mon Sep 17 00:00:00 2001 From: halfnelson Date: Mon, 4 Mar 2019 20:21:30 +1000 Subject: [PATCH 1/4] Fix export race condition (#585) * Await all items in the export queue before killing server --- src/api/export.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/api/export.ts b/src/api/export.ts index 793a102..ba6a9db 100644 --- a/src/api/export.ts +++ b/src/api/export.ts @@ -163,7 +163,6 @@ async function _export({ const cleaned = clean_html(body); const q = yootils.queue(8); - let promise; const base_match = //m.exec(cleaned); const base_href = base_match && get_href(base_match[1]); @@ -180,12 +179,12 @@ async function _export({ const url = resolve(base.href, href); if (url.protocol === protocol && url.host === host) { - promise = q.add(() => handle(url)); + q.add(() => handle(url)); } } } - await promise; + await q.close(); } } } From 9540383796daebcbfde5650d2142097406794279 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 4 Mar 2019 19:44:22 -0500 Subject: [PATCH 2/4] bump alpha version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 895dbed..b6916e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sapper", - "version": "0.26.0-alpha.9", + "version": "0.26.0-alpha.10", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ffbb4f2..c3ab70d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sapper", - "version": "0.26.0-alpha.9", + "version": "0.26.0-alpha.11", "description": "Military-grade apps, engineered by Svelte", "bin": { "sapper": "./sapper" From 9e9bd103338dc33251caf6c4da4e134cda214cc1 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 7 Mar 2019 13:18:40 -0500 Subject: [PATCH 3/4] various lost changes and fixes from 0.26.0-alpha.10 --- src/api/dev.ts | 11 ++++++----- src/cli.ts | 12 ++++++++++-- src/core/create_compilers/extract_css.ts | 2 +- src/interfaces.ts | 2 +- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/api/dev.ts b/src/api/dev.ts index fb356c8..adfd73a 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -199,9 +199,10 @@ class Watcher extends EventEmitter { }); manifest_data = new_manifest_data; - } catch (err) { + } catch (error) { this.emit('error', { - message: err.message + type: 'manifest', + error }); } } @@ -408,11 +409,11 @@ class Watcher extends EventEmitter { }) { compiler.oninvalid(invalid); - compiler.watch((err?: Error, result?: CompileResult) => { - if (err) { + compiler.watch((error?: Error, result?: CompileResult) => { + if (error) { this.emit('error', { type: name, - message: err.message + error }); } else { this.emit('build', { diff --git a/src/cli.ts b/src/cli.ts index 64b3b33..5ebacc9 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -89,8 +89,16 @@ prog.command('dev') }); watcher.on('error', (event: ErrorEvent) => { - console.log(colors.red(`✗ ${event.type}`)); - console.log(colors.red(event.message)); + const { type, error } = event; + + console.log(colors.bold().red(`✗ ${type}`)); + + if (error.loc && error.loc.file) { + console.log(colors.bold(`${path.relative(process.cwd(), error.loc.file)} (${error.loc.line}:${error.loc.column})`)); + } + + console.log(colors.red(event.error.message)); + if (error.frame) console.log(error.frame); }); watcher.on('fatal', (event: FatalEvent) => { diff --git a/src/core/create_compilers/extract_css.ts b/src/core/create_compilers/extract_css.ts index c35dcf2..47bf99e 100644 --- a/src/core/create_compilers/extract_css.ts +++ b/src/core/create_compilers/extract_css.ts @@ -153,7 +153,7 @@ export default function extract_css(client_result: CompileResult, components: Pa chunks_with_css.add(chunk); }); - const entry = path.resolve(dirs.src, 'app.mjs'); + const entry = path.resolve(dirs.src, 'client.js'); const entry_chunk = client_result.chunks.find(chunk => chunk.modules.indexOf(entry) !== -1); const entry_chunk_dependencies: Set = new Set([entry_chunk]); diff --git a/src/interfaces.ts b/src/interfaces.ts index 8b2f377..f768100 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -69,7 +69,7 @@ export type ReadyEvent = { export type ErrorEvent = { type: string; - message: string; + error: Error; }; export type FatalEvent = { From 74c66b784f5a8d7d1bd0fa04d2327a20947db5aa Mon Sep 17 00:00:00 2001 From: Conduitry Date: Fri, 8 Mar 2019 08:34:36 -0500 Subject: [PATCH 4/4] Server-side preload check fixes (fixes #575, #594, #598) --- package-lock.json | 19 +++++++++---------- package.json | 6 +++--- rollup.config.js | 5 +++-- src/core/create_manifest_data.ts | 9 +++------ 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6916e9..e89dccb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4372,9 +4372,9 @@ } }, "rollup-plugin-svelte": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.0.1.tgz", - "integrity": "sha512-iwm4ANbdoEQqoCL8m70R3F2Oe/auSr0zIOBVVJWx7IMSkzFZjhd0PeqzKe3BWCllLAnBXIbqTSOHmU2mnvy0SA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.0.3.tgz", + "integrity": "sha512-3W/jbtBcsxohKQMI1Po2ZsUHRGUy3vEtgXLHvBin1+ms3wl2eomSyYBV7pwrkh6tWok9BVzdxGQgd7IqibG+Ew==", "dev": true, "requires": { "require-relative": "^0.8.7", @@ -4960,9 +4960,9 @@ } }, "svelte": { - "version": "3.0.0-beta.3", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.0.0-beta.3.tgz", - "integrity": "sha512-kEPbvpmzZqVsUMgMQ1DFx1W+05hWiHVSQaQYPv55AzcCAeXHRZD9N55Pv4LKH6sOHvvNhkb4GVLSK2yBQZn5CQ==", + "version": "3.0.0-beta.11", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.0.0-beta.11.tgz", + "integrity": "sha512-NTk89Q1azXoG08qRDd9R9aM8+fylCSon1bPThsS2IWSqw7YEPPu2wv9p3VaZ5Eo4NubUDfnX/HXtwdGozSnjCg==", "dev": true }, "svelte-dev-helper": { @@ -4972,13 +4972,12 @@ "dev": true }, "svelte-loader": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-2.12.0.tgz", - "integrity": "sha512-mxkjxHecbWl3KzhlwWm4C/Mid4Anhk611sEG31aa0BwdELIgLSaAxSJkxJrrFxxNgEKGKyTSeUI3blKNM+3s8Q==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-2.13.3.tgz", + "integrity": "sha512-ZvNWbR77lZ04nCHqnN0XFxKCQ+fynARCy+kxwogagW3k2NTJWg2QfJwN1J9d4ch+OZwcGPgGZITVr7FGB3hPmQ==", "dev": true, "requires": { "loader-utils": "^1.1.0", - "require-relative": "^0.8.7", "svelte-dev-helper": "^1.1.9" } }, diff --git a/package.json b/package.json index c3ab70d..baaa96a 100644 --- a/package.json +++ b/package.json @@ -50,12 +50,12 @@ "rollup-plugin-replace": "^2.1.0", "rollup-plugin-string": "^2.0.2", "rollup-plugin-sucrase": "^2.1.0", - "rollup-plugin-svelte": "^5.0.1", + "rollup-plugin-svelte": "^5.0.3", "sade": "^1.4.2", "sirv": "^0.2.2", "sucrase": "^3.9.5", - "svelte": "^3.0.0-alpha27", - "svelte-loader": "^2.12.0", + "svelte": "^3.0.0-beta.11", + "svelte-loader": "^2.13.3", "webpack": "^4.29.0", "webpack-format-messages": "^2.0.5", "yootils": "0.0.14" diff --git a/rollup.config.js b/rollup.config.js index 6932778..dd6aa84 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -9,7 +9,8 @@ import { builtinModules } from 'module'; const external = [].concat( Object.keys(pkg.dependencies), Object.keys(process.binding('natives')), - 'sapper/core.js' + 'sapper/core.js', + 'svelte/compiler' ); function template(kind, external) { @@ -65,4 +66,4 @@ export default [ }) ] } -]; \ No newline at end of file +]; diff --git a/src/core/create_manifest_data.ts b/src/core/create_manifest_data.ts index 10125ed..6324733 100644 --- a/src/core/create_manifest_data.ts +++ b/src/core/create_manifest_data.ts @@ -17,11 +17,8 @@ export default function create_manifest_data(cwd: string): ManifestData { if (/preload/.test(source)) { try { - const { stats } = svelte.compile(source, { - generate: false, - onwarn: () => {} - }); - return !!stats.vars.find((variable: any) => variable.module && variable.export_name === 'preload'); + const { vars } = svelte.compile(source.replace(/]*>[^]*?<\/style>/g, ''), { generate: false }); + return vars.some((variable: any) => variable.module && variable.export_name === 'preload'); } catch (err) {} } @@ -346,4 +343,4 @@ function get_pattern(segments: Part[][], add_trailing_slash: boolean) { }).join('') + (add_trailing_slash ? '\\\/?$' : '$') ); -} \ No newline at end of file +}