From 3b148b6635d77b5ef558ce72dbc2afb8fe529d58 Mon Sep 17 00:00:00 2001 From: PaulMaly Date: Mon, 11 Nov 2019 11:20:17 +0300 Subject: [PATCH 1/8] User `let` instead `var` for loop index User `let` instead `var` for loop index to prevent naming collisions with top-level scope. To reproduce: https://svelte.dev/repl/33152732e43049cfaf171bc6f10fd88f?version=3.13.0 --- src/compiler/compile/render_dom/wrappers/Element/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index 168d53d997..75c2cc6096 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -634,10 +634,10 @@ export default class ElementWrapper extends Wrapper { }); block.chunks.init.push(b` - var ${levels} = [${initial_props}]; + let ${levels} = [${initial_props}]; - var ${data} = {}; - for (var #i = 0; #i < ${levels}.length; #i += 1) { + let ${data} = {}; + for (let #i = 0; #i < ${levels}.length; #i += 1) { ${data} = @assign(${data}, ${levels}[#i]); } `); @@ -931,4 +931,4 @@ function to_html(wrappers: Array, blo } } }); -} \ No newline at end of file +} From b2fb1453f539ac686a2262ebf1f1d9a1c11a31f3 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 11 Nov 2019 17:50:22 -0500 Subject: [PATCH 2/8] update deps, prevent naming conflict seen in #3891 --- package-lock.json | 25 ++++++------------- package.json | 4 +-- .../samples/deconflict-spread-i/_config.js | 3 +++ .../samples/deconflict-spread-i/main.svelte | 5 ++++ 4 files changed, 17 insertions(+), 20 deletions(-) create mode 100644 test/runtime/samples/deconflict-spread-i/_config.js create mode 100644 test/runtime/samples/deconflict-spread-i/main.svelte diff --git a/package-lock.json b/package-lock.json index b11cf80a83..68b7c4b6a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -500,26 +500,15 @@ "dev": true }, "code-red": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-0.0.19.tgz", - "integrity": "sha512-pzkA9ikMLR7KatByUJVz33kQKkrDnsJhyuvxSSUnyJNBggkGNStmDe/ezYvfP4CZ9XM7vYIID+YIaMJnlYGzLg==", + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-0.0.20.tgz", + "integrity": "sha512-nEh0GdiKVQ1zFyTImD+Z93kqVG0UPXSn9W5YCafOiOHBlVEhlVQkuVmerCg1CPmm1xka/3cvhS+EI/Ozeke6bQ==", "dev": true, "requires": { "acorn": "^7.1.0", "is-reference": "^1.1.4", - "periscopic": "^1.0.2", + "periscopic": "^2.0.1", "sourcemap-codec": "^1.4.6" - }, - "dependencies": { - "periscopic": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-1.1.0.tgz", - "integrity": "sha512-sUdDgd8G35JjpBqHGnuc2MECoyUryHGfjtsKFPS6N8MEGHtxoIML8yEWydL1zf+W8EoChX4L7A9AvVRJuM6Lqg==", - "dev": true, - "requires": { - "is-reference": "^1.1.4" - } - } } }, "codecov": { @@ -2734,9 +2723,9 @@ "dev": true }, "periscopic": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.0.tgz", - "integrity": "sha512-2YVtztswd6ud5b0+IDD26UhEm1QvlTsR3s7G59CD0txGyhfvQ39YhNuueSmzT5VzHUxiIH0E8S04JSQpXMJ8/g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.1.tgz", + "integrity": "sha512-twJ8e4RatllMAcbmBqKj8cvZ94HtqSzbb8hJoGj4iSCcCHXxKb06HRxOq4heyq2x/6mKynJDvTTreHCz+m6lJw==", "dev": true, "requires": { "is-reference": "^1.1.4" diff --git a/package.json b/package.json index 771dbc194f..6c70337b99 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "acorn": "^7.1.0", "agadoo": "^1.1.0", "c8": "^5.0.1", - "code-red": "0.0.19", + "code-red": "0.0.20", "codecov": "^3.5.0", "css-tree": "1.0.0-alpha22", "eslint": "^6.3.0", @@ -77,7 +77,7 @@ "locate-character": "^2.0.5", "magic-string": "^0.25.3", "mocha": "^6.2.0", - "periscopic": "^2.0.0", + "periscopic": "^2.0.1", "puppeteer": "^1.19.0", "rollup": "^1.21.4", "rollup-plugin-commonjs": "^10.1.0", diff --git a/test/runtime/samples/deconflict-spread-i/_config.js b/test/runtime/samples/deconflict-spread-i/_config.js new file mode 100644 index 0000000000..f147a4c1ff --- /dev/null +++ b/test/runtime/samples/deconflict-spread-i/_config.js @@ -0,0 +1,3 @@ +export default { + preserveIdentifiers: true +}; \ No newline at end of file diff --git a/test/runtime/samples/deconflict-spread-i/main.svelte b/test/runtime/samples/deconflict-spread-i/main.svelte new file mode 100644 index 0000000000..a7b201ac4e --- /dev/null +++ b/test/runtime/samples/deconflict-spread-i/main.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file From c29e2085a192dd22f7a7122b143ca2ce09372c24 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 11 Nov 2019 18:28:54 -0500 Subject: [PATCH 3/8] -> v3.14.0 --- CHANGELOG.md | 8 ++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62306fdbdb..0fc0d1a6f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Svelte changelog +## 3.14.0 + +* Add `loopGuardTimeout` option that augments `for`/`while` loops to prevent infinite loops, primarily for use in the REPL ([#3887](https://github.com/sveltejs/svelte/pull/3887)) +* Keep component bindings in sync when changed in reactive statements ([#3382](https://github.com/sveltejs/svelte/issues/3382)) +* Update attributes before bindings ([#3857](https://github.com/sveltejs/svelte/issues/3857)) +* Prevent variable naming conflict ([#3899](https://github.com/sveltejs/svelte/issues/3899)) + + ## 3.13.0 * New structured code generation, which eliminates a number of edge cases and obscure bugs ([#3539](https://github.com/sveltejs/svelte/pull/3539)) diff --git a/package-lock.json b/package-lock.json index 68b7c4b6a7..c43ea8461b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "svelte", - "version": "3.13.0", + "version": "3.14.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6c70337b99..8ad1cde101 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "svelte", - "version": "3.13.0", + "version": "3.14.0", "description": "Cybernetically enhanced web apps", "module": "index.mjs", "main": "index", From 8237db442223406d78aa560404801f0cb74a04cb Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Wed, 13 Nov 2019 10:41:34 +0800 Subject: [PATCH 4/8] fix text content escape html (#3916) Fixes #3911 --- .../compile/render_dom/wrappers/Element/index.ts | 11 +++++++---- .../samples/unchanged-expression-escape/_config.js | 7 +++++++ .../samples/unchanged-expression-escape/main.svelte | 7 +++++++ 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 test/runtime/samples/unchanged-expression-escape/_config.js create mode 100644 test/runtime/samples/unchanged-expression-escape/main.svelte diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index 75c2cc6096..a34091f5b6 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -304,7 +304,8 @@ export default class ElementWrapper extends Wrapper { } // insert static children with textContent or innerHTML - if (!this.node.namespace && (this.can_use_innerhtml || this.can_use_textcontent()) && this.fragment.nodes.length > 0) { + const can_use_textcontent = this.can_use_textcontent(); + if (!this.node.namespace && (this.can_use_innerhtml || can_use_textcontent) && this.fragment.nodes.length > 0) { if (this.fragment.nodes.length === 1 && this.fragment.nodes[0].node.type === 'Text') { block.chunks.create.push( // @ts-ignore todo: should it be this.fragment.nodes[0].node.data instead? @@ -324,7 +325,8 @@ export default class ElementWrapper extends Wrapper { quasis: [] }; - to_html((this.fragment.nodes as unknown as Array), block, literal, state); + const can_use_raw_text = !this.can_use_innerhtml && can_use_textcontent; + to_html((this.fragment.nodes as unknown as Array), block, literal, state, can_use_raw_text); literal.quasis.push(state.quasi); block.chunks.create.push( @@ -867,7 +869,7 @@ export default class ElementWrapper extends Wrapper { } } -function to_html(wrappers: Array, block: Block, literal: any, state: any) { +function to_html(wrappers: Array, block: Block, literal: any, state: any, can_use_raw_text?: boolean) { wrappers.forEach(wrapper => { if (wrapper.node.type === 'Text') { if ((wrapper as TextWrapper).use_space()) state.quasi.value.raw += ' '; @@ -876,7 +878,8 @@ function to_html(wrappers: Array, blo const raw = parent && ( parent.name === 'script' || - parent.name === 'style' + parent.name === 'style' || + can_use_raw_text ); state.quasi.value.raw += (raw ? wrapper.node.data : escape_html(wrapper.node.data)) diff --git a/test/runtime/samples/unchanged-expression-escape/_config.js b/test/runtime/samples/unchanged-expression-escape/_config.js new file mode 100644 index 0000000000..11a54c0fe9 --- /dev/null +++ b/test/runtime/samples/unchanged-expression-escape/_config.js @@ -0,0 +1,7 @@ +export default { + html: ` +

Hello world, what's up? this & that

+

Hello world, what's up? this & that

+

Hello world, what's up? this & that

+ `, +}; diff --git a/test/runtime/samples/unchanged-expression-escape/main.svelte b/test/runtime/samples/unchanged-expression-escape/main.svelte new file mode 100644 index 0000000000..de61ba5906 --- /dev/null +++ b/test/runtime/samples/unchanged-expression-escape/main.svelte @@ -0,0 +1,7 @@ + + +

Hello {name}, what's up? this & that

+

Hello world, what's up? this & that

+

Hello {name}, what's up? this & that

\ No newline at end of file From afe5ad430a741ebece0cb94a34ffe96c6d4fdfec Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 12 Nov 2019 21:42:13 -0500 Subject: [PATCH 5/8] Use IE-compatible js to check for unknown prop warnings (#3915) Fixes #3914 --- src/compiler/compile/render_dom/index.ts | 4 ++-- test/js/samples/debug-empty/expected.js | 2 +- test/js/samples/debug-foo-bar-baz-things/expected.js | 2 +- test/js/samples/debug-foo/expected.js | 2 +- test/js/samples/dev-warning-missing-data-computed/expected.js | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/compiler/compile/render_dom/index.ts b/src/compiler/compile/render_dom/index.ts index 49ce17236a..cc0c7dfe31 100644 --- a/src/compiler/compile/render_dom/index.ts +++ b/src/compiler/compile/render_dom/index.ts @@ -247,7 +247,7 @@ export default function dom( function create_fragment(#ctx) { ${block.get_contents()} } - `); + `); } body.push(b` @@ -369,7 +369,7 @@ export default function dom( unknown_props_check = b` const writable_props = [${writable_props.map(prop => x`'${prop.export_name}'`)}]; @_Object.keys($$props).forEach(key => { - if (!writable_props.includes(key) && !key.startsWith('$$')) @_console.warn(\`<${component.tag}> was created with unknown prop '\${key}'\`); + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== '$$') @_console.warn(\`<${component.tag}> was created with unknown prop '\${key}'\`); }); `; } diff --git a/test/js/samples/debug-empty/expected.js b/test/js/samples/debug-empty/expected.js index 3c65e5a950..b545823c57 100644 --- a/test/js/samples/debug-empty/expected.js +++ b/test/js/samples/debug-empty/expected.js @@ -72,7 +72,7 @@ function instance($$self, $$props, $$invalidate) { const writable_props = ["name"]; Object.keys($$props).forEach(key => { - if (!writable_props.includes(key) && !key.startsWith("$$")) console.warn(` was created with unknown prop '${key}'`); + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$set = $$props => { diff --git a/test/js/samples/debug-foo-bar-baz-things/expected.js b/test/js/samples/debug-foo-bar-baz-things/expected.js index 4d6a0f61c6..448fc82176 100644 --- a/test/js/samples/debug-foo-bar-baz-things/expected.js +++ b/test/js/samples/debug-foo-bar-baz-things/expected.js @@ -167,7 +167,7 @@ function instance($$self, $$props, $$invalidate) { const writable_props = ["things", "foo", "bar", "baz"]; Object.keys($$props).forEach(key => { - if (!writable_props.includes(key) && !key.startsWith("$$")) console.warn(` was created with unknown prop '${key}'`); + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$set = $$props => { diff --git a/test/js/samples/debug-foo/expected.js b/test/js/samples/debug-foo/expected.js index 3f502bc0ca..8abfd1bae1 100644 --- a/test/js/samples/debug-foo/expected.js +++ b/test/js/samples/debug-foo/expected.js @@ -165,7 +165,7 @@ function instance($$self, $$props, $$invalidate) { const writable_props = ["things", "foo"]; Object.keys($$props).forEach(key => { - if (!writable_props.includes(key) && !key.startsWith("$$")) console.warn(` was created with unknown prop '${key}'`); + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$set = $$props => { diff --git a/test/js/samples/dev-warning-missing-data-computed/expected.js b/test/js/samples/dev-warning-missing-data-computed/expected.js index f362a42db6..5da2b4aead 100644 --- a/test/js/samples/dev-warning-missing-data-computed/expected.js +++ b/test/js/samples/dev-warning-missing-data-computed/expected.js @@ -69,7 +69,7 @@ function instance($$self, $$props, $$invalidate) { const writable_props = ["foo"]; Object.keys($$props).forEach(key => { - if (!writable_props.includes(key) && !key.startsWith("$$")) console.warn(` was created with unknown prop '${key}'`); + if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(` was created with unknown prop '${key}'`); }); $$self.$set = $$props => { From 6774e336bacb8a4506c54161cc7c78c301f8262f Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 12 Nov 2019 21:42:42 -0500 Subject: [PATCH 6/8] Deconflict dev mode block function names again (#3907) Fixes #3900 --- package-lock.json | 6 ++--- package.json | 2 +- src/compiler/compile/render_dom/Block.ts | 22 +++++++++---------- .../deconflict-block-methods/_config.js | 6 +++++ .../deconflict-block-methods/main.svelte | 5 +++++ 5 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 test/runtime/samples/deconflict-block-methods/_config.js create mode 100644 test/runtime/samples/deconflict-block-methods/main.svelte diff --git a/package-lock.json b/package-lock.json index c43ea8461b..208d392bfd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -500,9 +500,9 @@ "dev": true }, "code-red": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-0.0.20.tgz", - "integrity": "sha512-nEh0GdiKVQ1zFyTImD+Z93kqVG0UPXSn9W5YCafOiOHBlVEhlVQkuVmerCg1CPmm1xka/3cvhS+EI/Ozeke6bQ==", + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-0.0.21.tgz", + "integrity": "sha512-luUVxyGNwTU/lG+lY+pitXHJzgDvFa0WfxA4Nsd7uk/S366mHY8B86pwAcyRcKY9BE/HvryVNXCR691Q5ry+Ww==", "dev": true, "requires": { "acorn": "^7.1.0", diff --git a/package.json b/package.json index 8ad1cde101..d10edd1f1e 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "acorn": "^7.1.0", "agadoo": "^1.1.0", "c8": "^5.0.1", - "code-red": "0.0.20", + "code-red": "0.0.21", "codecov": "^3.5.0", "css-tree": "1.0.0-alpha22", "eslint": "^6.3.0", diff --git a/src/compiler/compile/render_dom/Block.ts b/src/compiler/compile/render_dom/Block.ts index 0b9784a6e8..74822ef9be 100644 --- a/src/compiler/compile/render_dom/Block.ts +++ b/src/compiler/compile/render_dom/Block.ts @@ -266,7 +266,7 @@ export default class Block { : this.chunks.hydrate ); - properties.create = x`function create() { + properties.create = x`function #create() { ${this.chunks.create} ${hydrate} }`; @@ -276,7 +276,7 @@ export default class Block { if (this.chunks.claim.length === 0 && this.chunks.hydrate.length === 0) { properties.claim = noop; } else { - properties.claim = x`function claim(#nodes) { + properties.claim = x`function #claim(#nodes) { ${this.chunks.claim} ${this.renderer.options.hydratable && this.chunks.hydrate.length > 0 && b`this.h();`} }`; @@ -284,7 +284,7 @@ export default class Block { } if (this.renderer.options.hydratable && this.chunks.hydrate.length > 0) { - properties.hydrate = x`function hydrate() { + properties.hydrate = x`function #hydrate() { ${this.chunks.hydrate} }`; } @@ -292,7 +292,7 @@ export default class Block { if (this.chunks.mount.length === 0) { properties.mount = noop; } else { - properties.mount = x`function mount(#target, anchor) { + properties.mount = x`function #mount(#target, anchor) { ${this.chunks.mount} }`; } @@ -302,7 +302,7 @@ export default class Block { properties.update = noop; } else { const ctx = this.maintain_context ? x`#new_ctx` : x`#ctx`; - properties.update = x`function update(#changed, ${ctx}) { + properties.update = x`function #update(#changed, ${ctx}) { ${this.maintain_context && b`#ctx = ${ctx};`} ${this.chunks.update} }`; @@ -310,15 +310,15 @@ export default class Block { } if (this.has_animation) { - properties.measure = x`function measure() { + properties.measure = x`function #measure() { ${this.chunks.measure} }`; - properties.fix = x`function fix() { + properties.fix = x`function #fix() { ${this.chunks.fix} }`; - properties.animate = x`function animate() { + properties.animate = x`function #animate() { ${this.chunks.animate} }`; } @@ -327,7 +327,7 @@ export default class Block { if (this.chunks.intro.length === 0) { properties.intro = noop; } else { - properties.intro = x`function intro(#local) { + properties.intro = x`function #intro(#local) { ${this.has_outros && b`if (#current) return;`} ${this.chunks.intro} }`; @@ -336,7 +336,7 @@ export default class Block { if (this.chunks.outro.length === 0) { properties.outro = noop; } else { - properties.outro = x`function outro(#local) { + properties.outro = x`function #outro(#local) { ${this.chunks.outro} }`; } @@ -345,7 +345,7 @@ export default class Block { if (this.chunks.destroy.length === 0) { properties.destroy = noop; } else { - properties.destroy = x`function destroy(detaching) { + properties.destroy = x`function #destroy(detaching) { ${this.chunks.destroy} }`; } diff --git a/test/runtime/samples/deconflict-block-methods/_config.js b/test/runtime/samples/deconflict-block-methods/_config.js new file mode 100644 index 0000000000..2bb1aa8424 --- /dev/null +++ b/test/runtime/samples/deconflict-block-methods/_config.js @@ -0,0 +1,6 @@ +export default { + compileOptions: { + dev: true + }, + html: `
deconflicted
` +}; diff --git a/test/runtime/samples/deconflict-block-methods/main.svelte b/test/runtime/samples/deconflict-block-methods/main.svelte new file mode 100644 index 0000000000..ad75488873 --- /dev/null +++ b/test/runtime/samples/deconflict-block-methods/main.svelte @@ -0,0 +1,5 @@ + + +
{create}
From 7e2e23e7ae9a164bbaa389b6ea2104447041c1c1 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 12 Nov 2019 21:52:50 -0500 Subject: [PATCH 7/8] -> v3.14.1 --- CHANGELOG.md | 6 ++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fc0d1a6f1..566fde5005 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Svelte changelog +## 3.14.1 + +* Deconflict block method names with other variables ([#3900](https://github.com/sveltejs/svelte/issues/3900)) +* Fix entity encoding issue in text nodes with constant expressions ([#3911](https://github.com/sveltejs/svelte/issues/3911)) +* Make code for unknown prop warnings compatible with older js engines ([#3914](https://github.com/sveltejs/svelte/issues/3914)) + ## 3.14.0 * Add `loopGuardTimeout` option that augments `for`/`while` loops to prevent infinite loops, primarily for use in the REPL ([#3887](https://github.com/sveltejs/svelte/pull/3887)) diff --git a/package-lock.json b/package-lock.json index 208d392bfd..238b6d04d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "svelte", - "version": "3.14.0", + "version": "3.14.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d10edd1f1e..703df57e22 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "svelte", - "version": "3.14.0", + "version": "3.14.1", "description": "Cybernetically enhanced web apps", "module": "index.mjs", "main": "index", From feafc34f8e6bc9ac5d27ba2b959a02b34bafba9a Mon Sep 17 00:00:00 2001 From: Conduitry Date: Wed, 13 Nov 2019 07:26:30 -0500 Subject: [PATCH 8/8] site: rollup resolve and onwarn improvements from sapper-template --- site/rollup.config.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/site/rollup.config.js b/site/rollup.config.js index c713be33c1..9cb963a87d 100644 --- a/site/rollup.config.js +++ b/site/rollup.config.js @@ -13,6 +13,9 @@ const mode = process.env.NODE_ENV; const dev = mode === 'development'; const legacy = !!process.env.SAPPER_LEGACY_BUILD; +const onwarn = (warning, onwarn) => (warning.code === 'CIRCULAR_DEPENDENCY' && /[/\\]@sapper[/\\]/.test(warning.message)) || onwarn(warning); +const dedupe = importee => importee === 'svelte' || importee.startsWith('svelte/'); + export default { client: { input: config.client.input(), @@ -28,7 +31,10 @@ export default { hydratable: true, emitCss: true }), - resolve(), + resolve({ + browser: true, + dedupe + }), commonjs(), json(), @@ -53,6 +59,7 @@ export default { module: true }) ], + onwarn }, server: { @@ -67,7 +74,9 @@ export default { generate: 'ssr', dev }), - resolve(), + resolve({ + dedupe + }), commonjs(), json() ], @@ -78,6 +87,7 @@ export default { require('module').builtinModules || Object.keys(process.binding('natives')) ) ], + onwarn }, serviceworker: {