From 0ad08748b9dbaea0766f51a03227febf9e184d18 Mon Sep 17 00:00:00 2001 From: DominusVilicus Date: Thu, 21 May 2020 10:21:01 +0930 Subject: [PATCH 1/3] Add renderedComponents Feature --- src/compiler/compile/render_ssr/index.ts | 1 + src/runtime/internal/ssr.ts | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/compiler/compile/render_ssr/index.ts b/src/compiler/compile/render_ssr/index.ts index c87fe3bdd92b..8a38976c6299 100644 --- a/src/compiler/compile/render_ssr/index.ts +++ b/src/compiler/compile/render_ssr/index.ts @@ -147,6 +147,7 @@ export default function ssr( instance_javascript, ...parent_bindings, css.code && b`$$result.css.add(#css);`, + options.filename && b`$$result.renderedComponents.add('${options.filename}');`, main ].filter(Boolean); diff --git a/src/runtime/internal/ssr.ts b/src/runtime/internal/ssr.ts index 646a81d817e7..cec283f1f530 100644 --- a/src/runtime/internal/ssr.ts +++ b/src/runtime/internal/ssr.ts @@ -107,7 +107,8 @@ export function create_ssr_component(fn) { map: null; code: string; }>; - } = { title: '', head: '', css: new Set() }; + renderedComponents: Set; + } = { title: '', head: '', css: new Set(), renderedComponents: new Set() }; const html = $$render(result, props, {}, options); @@ -119,7 +120,8 @@ export function create_ssr_component(fn) { code: Array.from(result.css).map(css => css.code).join('\n'), map: null // TODO }, - head: result.title + result.head + head: result.title + result.head, + renderedComponents: Array.from(result.renderedComponents) }; }, From a18096a81a6dd26b8ae0232e55c5cee1db83d0a8 Mon Sep 17 00:00:00 2001 From: Dominus Vilicus Date: Sun, 20 Sep 2020 21:52:40 +0930 Subject: [PATCH 2/3] Revert "Update Changes" --- .eslintignore | 1 + .eslintrc.js | 78 +- .github/ISSUE_TEMPLATE.md | 5 +- .github/ISSUE_TEMPLATE/feature_request.md | 5 - .github/PULL_REQUEST_TEMPLATE.md | 11 +- .github/workflows/ci.yml | 9 +- CHANGELOG.md | 65 +- CONTRIBUTING.md | 5 +- README.md | 23 +- package-lock.json | 1293 ++++------------- package.json | 17 +- rollup.config.js | 20 +- site/README.md | 44 +- ...-11-26-frameworks-without-the-framework.md | 2 +- ...per-towards-the-ideal-web-app-framework.md | 8 +- .../2019-04-16-svelte-for-new-developers.md | 4 +- .../blog/2020-07-17-svelte-and-typescript.md | 141 -- site/content/docs/02-template-syntax.md | 31 +- site/content/docs/03-run-time.md | 8 +- .../05-bindings/05-file-inputs/App.svelte | 37 - .../05-bindings/05-file-inputs/meta.json | 3 - .../App.svelte | 0 .../meta.json | 0 .../App.svelte | 0 .../meta.json | 0 .../App.svelte | 9 +- .../meta.json | 0 .../App.svelte | 4 +- .../meta.json | 0 .../App.svelte | 0 .../meta.json | 0 .../{11-bind-this => 10-bind-this}/App.svelte | 2 +- .../{11-bind-this => 10-bind-this}/meta.json | 0 .../App.svelte | 0 .../Keypad.svelte | 0 .../meta.json | 0 site/content/faq/100-im-new-to-svelte.md | 2 +- .../faq/200-are-there-any-video-courses.md | 6 +- site/content/faq/300-is-svelte-dev-down.md | 5 + .../400-how-can-i-get-syntax-highlighting.md | 4 +- .../450-how-do-i-document-my-components.md | 32 - .../faq/500-what-about-typescript-support.md | 19 +- .../01-svelte-self/text.md | 4 +- site/package-lock.json | 602 ++++---- site/package.json | 30 +- site/rollup.config.js | 25 +- site/scripts/copy-workers.js | 4 - .../components/Repl/InputOutputToggle.svelte | 2 +- site/src/components/Repl/ReplWidget.svelte | 3 - site/src/routes/_layout.svelte | 1 - site/src/routes/blog/[slug].svelte | 9 - site/src/routes/blog/rss.xml.js | 16 +- site/src/routes/docs/_sections.js | 2 +- .../[id]/_components/AppControls/index.svelte | 2 - site/src/routes/repl/[id]/index.svelte | 5 +- site/src/routes/repl/embed.svelte | 2 - .../tutorial/[slug]/_TableOfContents.svelte | 4 +- site/src/utils/highlight.js | 1 - .../examples/thumbnails/file-inputs.jpg | Bin 2751 -> 0 bytes site/static/media/svelte-ts.png | Bin 189664 -> 0 bytes src/compiler/compile/Component.ts | 97 +- src/compiler/compile/css/Stylesheet.ts | 2 +- src/compiler/compile/index.ts | 4 +- src/compiler/compile/nodes/Binding.ts | 9 +- src/compiler/compile/nodes/EachBlock.ts | 1 - src/compiler/compile/nodes/Element.ts | 48 +- src/compiler/compile/nodes/Text.ts | 2 +- src/compiler/compile/nodes/shared/Context.ts | 8 +- .../compile/nodes/shared/Expression.ts | 52 +- src/compiler/compile/render_dom/Block.ts | 50 +- src/compiler/compile/render_dom/Renderer.ts | 31 +- src/compiler/compile/render_dom/index.ts | 38 +- .../compile/render_dom/wrappers/AwaitBlock.ts | 14 +- .../compile/render_dom/wrappers/EachBlock.ts | 31 +- .../render_dom/wrappers/Element/Attribute.ts | 234 ++- .../render_dom/wrappers/Element/Binding.ts | 149 +- .../wrappers/Element/SpreadAttribute.ts | 3 - .../Element/handle_select_value_binding.ts | 16 - .../render_dom/wrappers/Element/index.ts | 305 ++-- .../compile/render_dom/wrappers/IfBlock.ts | 2 +- .../wrappers/InlineComponent/index.ts | 25 +- .../render_dom/wrappers/RawMustacheTag.ts | 8 +- .../compile/render_dom/wrappers/Slot.ts | 28 +- .../compile/render_dom/wrappers/Window.ts | 4 +- .../render_dom/wrappers/shared/bind_this.ts | 84 +- .../wrappers/shared/get_slot_definition.ts | 4 +- .../shared/mark_each_block_bindings.ts | 26 - .../compile/render_ssr/handlers/Slot.ts | 4 +- src/compiler/compile/render_ssr/index.ts | 45 +- src/compiler/compile/utils/compare_node.ts | 19 - .../compile/utils/flatten_reference.ts | 21 +- src/compiler/compile/utils/hash.ts | 1 - src/compiler/compile/utils/replace_object.ts | 14 - .../compile/utils/reserved_keywords.ts | 2 +- .../utils/string_to_member_expression.ts | 17 - src/compiler/compile/utils/stringify.ts | 2 +- src/compiler/interfaces.ts | 4 +- src/compiler/parse/index.ts | 9 +- src/compiler/parse/read/script.ts | 2 +- src/compiler/parse/read/style.ts | 11 +- src/compiler/parse/state/mustache.ts | 16 +- src/compiler/parse/state/tag.ts | 35 +- src/compiler/parse/state/text.ts | 2 +- src/compiler/parse/utils/entities.ts | 2 +- src/compiler/parse/utils/html.ts | 6 +- src/compiler/preprocess/index.ts | 10 +- src/compiler/utils/fuzzymatch.ts | 4 +- src/compiler/utils/names.ts | 2 +- src/compiler/utils/namespaces.ts | 2 +- src/runtime/animate/index.ts | 6 +- src/runtime/internal/Component.ts | 27 +- src/runtime/internal/await_block.ts | 3 - src/runtime/internal/dev.ts | 2 +- src/runtime/internal/dom.ts | 54 +- src/runtime/internal/keyed_each.ts | 2 +- src/runtime/internal/lifecycle.ts | 10 +- src/runtime/internal/utils.ts | 12 - src/runtime/motion/tweened.ts | 10 +- src/runtime/store/index.ts | 4 +- src/runtime/transition/index.ts | 56 +- test/css/index.js | 3 +- test/css/samples/empty-class/_config.js | 2 +- .../global-with-unused-descendant/_config.js | 2 +- .../expected.html | 4 +- .../input.svelte | 6 +- .../_config.js | 2 +- .../unused-selector-leading/_config.js | 4 +- .../unused-selector-string-concat/_config.js | 44 +- .../unused-selector-ternary-bailed/_config.js | 2 +- .../unused-selector-ternary-concat/_config.js | 12 +- .../unused-selector-ternary-nested/_config.js | 12 +- .../unused-selector-ternary/_config.js | 2 +- test/css/samples/unused-selector/_config.js | 2 +- test/custom-elements/index.js | 15 +- test/helpers.js | 1 - .../samples/dynamic-text-nil/_config.js | 4 +- test/hydration/samples/element-ref/_config.js | 2 +- test/js/index.js | 6 +- .../action-custom-event-handler/expected.js | 13 +- test/js/samples/action/expected.js | 11 +- test/js/samples/bind-online/expected.js | 18 +- test/js/samples/bind-open/expected.js | 17 +- test/js/samples/bind-width-height/expected.js | 2 +- .../bindings-readonly-order/expected.js | 19 +- .../capture-inject-dev-only/expected.js | 11 +- .../samples/capture-inject-state/expected.js | 7 +- .../expected.js | 2 +- .../component-static-array/expected.js | 3 +- .../component-static-immutable/expected.js | 3 +- .../component-static-immutable2/expected.js | 3 +- .../samples/component-static-var/expected.js | 17 +- test/js/samples/component-static/expected.js | 3 +- .../expected.js | 11 +- .../samples/computed-collapsed-if/expected.js | 2 +- test/js/samples/data-attribute/expected.js | 2 +- test/js/samples/debug-empty/expected.js | 7 +- .../debug-foo-bar-baz-things/expected.js | 7 +- test/js/samples/debug-foo/expected.js | 7 +- test/js/samples/debug-hoisted/expected.js | 4 +- .../samples/debug-no-dependencies/expected.js | 4 +- test/js/samples/debug-ssr-foo/expected.js | 2 +- .../samples/deconflict-builtins/expected.js | 2 +- .../js/samples/deconflict-globals/expected.js | 2 +- .../expected.js | 7 +- .../samples/dont-invalidate-this/expected.js | 11 +- test/js/samples/dynamic-import/expected.js | 3 +- .../each-block-array-literal/expected.js | 2 +- .../each-block-changed-check/expected.js | 6 +- .../each-block-keyed-animated/expected.js | 2 +- test/js/samples/each-block-keyed/expected.js | 2 +- .../samples/event-handler-dynamic/expected.js | 23 +- .../event-handler-no-passive/expected.js | 11 +- test/js/samples/event-modifiers/expected.js | 21 +- .../js/samples/if-block-no-update/expected.js | 2 +- test/js/samples/if-block-simple/expected.js | 2 +- test/js/samples/initial-context/expected.js | 59 - test/js/samples/initial-context/input.svelte | 7 - .../expected.js | 2 +- .../inline-style-optimized-url/expected.js | 2 +- .../inline-style-optimized/expected.js | 2 +- .../inline-style-unoptimized/expected.js | 2 +- test/js/samples/input-files/expected.js | 13 +- .../input-no-initial-value/expected.js | 17 +- test/js/samples/input-range/expected.js | 19 +- test/js/samples/input-value/expected.js | 11 +- .../input-without-blowback-guard/expected.js | 13 +- .../expected.js | 11 +- .../expected.js | 11 +- .../expected.js | 11 +- .../expected.js | 11 +- test/js/samples/loop-protect/_config.js | 4 +- test/js/samples/loop-protect/expected.js | 8 +- test/js/samples/media-bindings/expected.js | 38 +- .../non-imported-component/expected.js | 6 +- test/js/samples/optional-chaining/expected.js | 189 --- .../js/samples/optional-chaining/input.svelte | 31 - .../expected.js | 2 +- .../expected.js | 2 +- .../samples/select-dynamic-value/expected.js | 28 +- .../samples/src-attribute-check/expected.js | 2 +- .../samples/ssr-no-oncreate-etc/expected.js | 2 +- .../samples/ssr-preserve-comments/expected.js | 2 +- test/js/samples/title/expected.js | 2 +- test/js/samples/transition-local/expected.js | 2 +- .../transition-repeated-outro/expected.js | 2 +- .../use-elements-as-anchors/expected.js | 2 +- test/js/samples/video-bindings/expected.js | 19 +- .../samples/window-binding-online/expected.js | 18 +- .../samples/window-binding-scroll/expected.js | 23 +- test/parser/index.js | 10 +- .../samples/action-with-call/output.json | 3 +- test/parser/samples/animation/output.json | 6 +- test/parser/samples/await-catch/output.json | 9 +- .../samples/await-then-catch/output.json | 15 +- .../parser/samples/dynamic-import/output.json | 18 +- .../samples/each-block-else/output.json | 6 +- .../samples/each-block-indexed/output.json | 6 +- .../samples/each-block-keyed/output.json | 9 +- test/parser/samples/each-block/output.json | 6 +- .../error.json | 10 - .../input.svelte | 3 - .../error.json | 10 - .../input.svelte | 5 - .../error.json | 10 - .../input.svelte | 3 - .../no-error-if-before-closing/output.json | 12 +- .../samples/unusual-identifier/output.json | 6 +- test/preprocess/samples/comments/_config.js | 6 +- .../samples/script-self-closing/_config.js | 12 - .../samples/script-self-closing/input.svelte | 1 - .../samples/script-self-closing/output.svelte | 1 - .../samples/style-self-closing/_config.js | 12 - .../samples/style-self-closing/input.svelte | 3 - .../samples/style-self-closing/output.svelte | 3 - test/runtime/index.js | 4 +- .../samples/$$rest-without-props/_config.js | 2 +- test/runtime/samples/$$rest/_config.js | 2 +- test/runtime/samples/$$slot/A.svelte | 31 - test/runtime/samples/$$slot/_config.js | 18 - test/runtime/samples/$$slot/main.svelte | 23 - .../_config.js | 2 +- .../action-ternary-template/_config.js | 4 +- test/runtime/samples/action-this/_config.js | 2 +- .../apply-directives-in-order-2/_config.js | 6 +- .../apply-directives-in-order/_config.js | 2 +- .../attribute-boolean-false/_config.js | 2 +- .../samples/attribute-boolean-true/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../samples/attribute-false/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../runtime/samples/attribute-null/_config.js | 2 +- .../attribute-prefer-expression/_config.js | 4 +- .../samples/attribute-undefined/_config.js | 2 +- .../await-with-update-2/Component.svelte | 7 - .../samples/await-with-update-2/_config.js | 64 - .../samples/await-with-update-2/main.svelte | 16 - .../await-with-update/Component.svelte | 5 - .../samples/await-with-update/_config.js | 60 - .../samples/await-with-update/main.svelte | 16 - .../samples/await-without-catch/_config.js | 44 - .../samples/await-without-catch/main.svelte | 9 - .../_config.js | 2 +- .../binding-contenteditable-html/_config.js | 4 +- .../_config.js | 2 +- .../binding-contenteditable-text/_config.js | 4 +- .../_config.js | 4 +- .../_config.js | 10 +- .../_config.js | 81 -- .../main.svelte | 19 - .../binding-input-group-each-1/_config.js | 275 ---- .../binding-input-group-each-1/main.svelte | 15 - .../binding-input-group-each-2/_config.js | 59 - .../binding-input-group-each-2/main.svelte | 17 - .../binding-input-group-each-3/_config.js | 275 ---- .../binding-input-group-each-3/main.svelte | 15 - .../binding-input-group-each-4/_config.js | 153 -- .../binding-input-group-each-4/main.svelte | 33 - .../binding-input-group-each-5/_config.js | 160 -- .../binding-input-group-each-5/main.svelte | 24 - .../binding-input-group-each-6/_config.js | 87 -- .../binding-input-group-each-6/main.svelte | 22 - .../samples/binding-input-number-2/_config.js | 2 +- .../samples/binding-input-number/_config.js | 4 +- .../_config.js | 2 +- .../binding-input-range-change/_config.js | 4 +- .../samples/binding-input-range/_config.js | 4 +- .../_config.js | 4 +- .../_config.js | 2 +- .../binding-input-text-contextual/_config.js | 4 +- .../_config.js | 6 +- .../_config.js | 6 +- .../_config.js | 6 +- .../_config.js | 8 +- .../_config.js | 6 +- .../binding-input-text-deep/_config.js | 6 +- .../binding-input-text-undefined/_config.js | 2 +- .../samples/binding-input-text/_config.js | 4 +- .../binding-select-initial-value/_config.js | 4 +- .../samples/binding-select-late-2/_config.js | 34 - .../samples/binding-select-late-2/main.svelte | 12 - .../samples/binding-select-late-3/_config.js | 34 - .../samples/binding-select-late-3/main.svelte | 12 - .../binding-select-optgroup/_config.js | 2 +- .../runtime/samples/binding-select/_config.js | 4 +- .../samples/binding-store-deep/_config.js | 2 +- test/runtime/samples/binding-store/_config.js | 2 +- .../samples/binding-textarea/_config.js | 4 +- .../_config.js | 53 - .../main.svelte | 17 - .../samples/bitmask-overflow-2/_config.js | 2 +- .../samples/bitmask-overflow-3/_config.js | 2 +- .../bitmask-overflow-slot-2/_config.js | 2 +- .../class-with-spread-and-bind/_config.js | 4 +- .../samples/component-binding-deep/_config.js | 2 +- .../component-binding-store/Input.svelte | 5 - .../component-binding-store/_config.js | 61 - .../component-binding-store/main.svelte | 18 - .../_config.js | 15 - .../main.svelte | 6 - .../component-event-not-stale/_config.js | 4 +- .../component-events-console/_config.js | 2 +- .../component-namespace/Tooltip.svelte | 1 - .../samples/component-namespace/Widget.svelte | 5 - .../samples/component-namespace/_config.js | 3 - .../samples/component-namespace/main.svelte | 8 - .../component-shorthand-import/_config.js | 2 +- .../component-slot-fallback-3/_config.js | 2 +- .../component-slot-fallback-4/_config.js | 2 +- .../component-slot-let-in-slot/_config.js | 2 +- .../component-slot-nested-if/_config.js | 2 +- .../samples/deconflict-builtins-2/_config.js | 2 +- .../dev-warning-missing-data-each/_config.js | 12 +- .../runtime/samples/document-event/_config.js | 2 +- .../each-block-array-literal/_config.js | 2 +- .../_config.js | 2 +- .../each-block-destructured-array/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 4 +- .../_config.js | 2 +- .../each-block-destructured-object/_config.js | 2 +- .../each-block-else-mount-or-intro/_config.js | 2 +- .../samples/each-block-in-if-block/_config.js | 2 +- .../Component.svelte | 5 - .../_config.js | 21 - .../main.svelte | 17 - .../samples/each-block-keyed-empty/_config.js | 2 +- .../each-block-keyed-non-prop/_config.js | 2 +- .../_config.js | 2 +- .../samples/each-block-keyed-shift/_config.js | 2 +- .../each-block-keyed-siblings/_config.js | 4 +- .../each-block-keyed-static/_config.js | 2 +- .../each-block-scope-shadow-bind-2/_config.js | 23 - .../main.svelte | 10 - .../each-block-scope-shadow-bind-3/_config.js | 105 -- .../main.svelte | 14 - .../each-block-scope-shadow-bind-4/_config.js | 64 - .../main.svelte | 14 - .../each-block-scope-shadow-bind/_config.js | 23 - .../each-block-scope-shadow-bind/main.svelte | 10 - .../each-block-scope-shadow-self/_config.js | 2 +- .../each-blocks-assignment-2/_config.js | 20 - .../each-blocks-assignment-2/main.svelte | 12 - .../samples/each-blocks-assignment/_config.js | 97 -- .../each-blocks-assignment/main.svelte | 13 - test/runtime/samples/empty-dom/_config.js | 2 +- .../samples/empty-style-block/_config.js | 2 +- .../escape-template-literals/_config.js | 2 +- .../samples/event-handler-async/_config.js | 2 +- .../event-handler-dynamic-2/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../event-handler-dynamic-hash/_config.js | 2 +- .../event-handler-dynamic-invalid/_config.js | 2 +- .../_config.js | 2 +- .../samples/event-handler-dynamic/_config.js | 2 +- .../event-handler-each-this/_config.js | 2 +- .../event-handler-modifier-self/_config.js | 2 +- .../_config.js | 12 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 4 +- .../samples/if-block-else-in-each/_config.js | 4 +- .../if-block-else-partial-outro/_config.js | 4 +- .../_config.js | 2 +- .../_config.js | 2 +- .../samples/initial-state-assign/_config.js | 2 +- .../innerhtml-with-comments/_config.js | 8 - .../innerhtml-with-comments/main.svelte | 5 - .../_config.js | 6 +- .../loop-protect-generator-opt-out/_config.js | 4 +- .../loop-protect-inner-function/_config.js | 2 +- test/runtime/samples/loop-protect/_config.js | 2 +- .../nested-transition-detach-each/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../samples/noscript-removal/_config.js | 2 +- .../paren-wrapped-expressions/_config.js | 2 +- test/runtime/samples/prop-exports/_config.js | 2 +- .../Comp.svelte | 6 - .../_config.js | 30 - .../main.svelte | 8 - .../samples/props-reactive-slot/Comp.svelte | 1 - .../samples/props-reactive-slot/_config.js | 21 - .../samples/props-reactive-slot/main.svelte | 13 - .../raw-mustache-as-root/RawMustache.svelte | 5 - .../samples/raw-mustache-as-root/_config.js | 33 - .../samples/raw-mustache-as-root/main.svelte | 17 - .../raw-mustache-inside-head/_config.js | 16 - .../raw-mustache-inside-head/main.svelte | 16 - .../raw-mustache-inside-slot/Component.svelte | 2 - .../raw-mustache-inside-slot/_config.js | 33 - .../raw-mustache-inside-slot/main.svelte | 17 - .../samples/raw-mustaches-td-tr/_config.js | 18 - .../samples/raw-mustaches-td-tr/main.svelte | 12 - .../_config.js | 27 - .../main.svelte | 10 - .../reactive-import-statement/_config.js | 2 +- .../reactive-value-assign-property/_config.js | 5 - .../main.svelte | 6 - .../self-reference-component/_config.js | 2 +- .../samples/set-undefined-attr/_config.js | 2 +- .../samples/sigil-component-prop/_config.js | 2 +- .../slot-if-block-update-no-anchor/_config.js | 2 +- .../samples/spread-component-2/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 8 +- .../spread-component-dynamic/_config.js | 8 +- .../_config.js | 2 +- .../samples/spread-each-component/_config.js | 2 +- .../samples/spread-each-element/_config.js | 2 +- .../samples/spread-element-boolean/_config.js | 2 +- .../_config.js | 39 - .../main.svelte | 12 - .../_config.js | 12 - .../main.svelte | 5 - .../InputOne.svelte | 18 - .../InputTwo.svelte | 19 - .../spread-element-input-value/_config.js | 62 - .../spread-element-input-value/main.svelte | 9 - .../spread-element-input-value/utils.js | 6 - .../_config.js | 2 +- .../spread-element-multiple/_config.js | 8 +- .../_config.js | 2 +- .../store-each-binding-deep/_config.js | 14 - .../store-each-binding-deep/main.svelte | 11 - .../samples/store-imports-hoisted/_config.js | 7 - .../samples/store-imports-hoisted/foo.js | 3 - .../samples/store-imports-hoisted/main.svelte | 7 - .../samples/store-resubscribe-b/_config.js | 2 +- .../store-resubscribe-export/_config.js | 8 +- .../store-resubscribe-observable/_config.js | 2 +- .../samples/store-shadow-scope/_config.js | 3 - .../samples/store-shadow-scope/main.svelte | 9 - .../_config.js | 3 - .../main.svelte | 9 - .../svg-tspan-preserve-space/_config.js | 2 +- .../this-in-function-expressions/_config.js | 10 - .../this-in-function-expressions/main.svelte | 2 - .../_config.js | 2 +- .../transition-css-duration/_config.js | 2 +- .../samples/transition-css-iframe/_config.js | 2 +- .../transition-css-in-out-in/_config.js | 2 +- .../_config.js | 2 +- .../transition-js-aborted-outro/_config.js | 4 +- .../transition-js-deferred-b/_config.js | 2 +- .../samples/transition-js-deferred/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 54 - .../main.svelte | 27 - .../_config.js | 22 - .../main.svelte | 18 - .../_config.js | 20 - .../main.svelte | 18 - .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../transition-js-local-and-global/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../transition-js-local-nested-if/_config.js | 2 +- .../samples/transition-js-local/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../transition-js-nested-each/_config.js | 2 +- .../transition-js-nested-if/_config.js | 2 +- .../_config.js | 2 +- .../transition-js-parameterised/_config.js | 2 +- .../unchanged-expression-escape/_config.js | 2 +- .../unchanged-expression-xss/_config.js | 2 +- .../samples/whitespace-list/_config.js | 2 +- .../window-bind-scroll-update/_config.js | 2 +- .../window-binding-scroll-store/_config.js | 10 +- .../samples/window-event-custom/_config.js | 2 +- test/server-side-rendering/index.js | 4 +- test/validator/index.js | 2 +- .../errors.json | 17 - .../input.svelte | 6 - .../input.svelte | 6 - .../warnings.json | 32 - .../a11y-media-has-caption/input.svelte | 4 - .../a11y-media-has-caption/warnings.json | 32 - test/vars/samples/assumed-global/_config.js | 2 +- .../vars/samples/duplicate-globals/_config.js | 2 +- .../duplicate-non-hoistable/_config.js | 2 +- test/vars/samples/duplicate-vars/_config.js | 2 +- .../vars/samples/implicit-reactive/_config.js | 2 +- .../samples/referenced-from-script/_config.js | 32 +- .../samples/template-references/_config.js | 10 +- test/vars/samples/undeclared/_config.js | 2 +- 517 files changed, 2001 insertions(+), 7064 deletions(-) delete mode 100644 site/content/blog/2020-07-17-svelte-and-typescript.md delete mode 100644 site/content/examples/05-bindings/05-file-inputs/App.svelte delete mode 100644 site/content/examples/05-bindings/05-file-inputs/meta.json rename site/content/examples/05-bindings/{06-select-bindings => 05-select-bindings}/App.svelte (100%) rename site/content/examples/05-bindings/{06-select-bindings => 05-select-bindings}/meta.json (100%) rename site/content/examples/05-bindings/{07-multiple-select-bindings => 06-multiple-select-bindings}/App.svelte (100%) rename site/content/examples/05-bindings/{07-multiple-select-bindings => 06-multiple-select-bindings}/meta.json (100%) rename site/content/examples/05-bindings/{08-each-block-bindings => 07-each-block-bindings}/App.svelte (89%) rename site/content/examples/05-bindings/{08-each-block-bindings => 07-each-block-bindings}/meta.json (100%) rename site/content/examples/05-bindings/{09-media-elements => 08-media-elements}/App.svelte (95%) rename site/content/examples/05-bindings/{09-media-elements => 08-media-elements}/meta.json (100%) rename site/content/examples/05-bindings/{10-dimensions => 09-dimensions}/App.svelte (100%) rename site/content/examples/05-bindings/{10-dimensions => 09-dimensions}/meta.json (100%) rename site/content/examples/05-bindings/{11-bind-this => 10-bind-this}/App.svelte (99%) rename site/content/examples/05-bindings/{11-bind-this => 10-bind-this}/meta.json (100%) rename site/content/examples/05-bindings/{12-component-bindings => 11-component-bindings}/App.svelte (100%) rename site/content/examples/05-bindings/{12-component-bindings => 11-component-bindings}/Keypad.svelte (100%) rename site/content/examples/05-bindings/{12-component-bindings => 11-component-bindings}/meta.json (100%) create mode 100644 site/content/faq/300-is-svelte-dev-down.md delete mode 100644 site/content/faq/450-how-do-i-document-my-components.md delete mode 100644 site/scripts/copy-workers.js delete mode 100644 site/static/examples/thumbnails/file-inputs.jpg delete mode 100644 site/static/media/svelte-ts.png delete mode 100644 src/compiler/compile/render_dom/wrappers/Element/SpreadAttribute.ts delete mode 100644 src/compiler/compile/render_dom/wrappers/Element/handle_select_value_binding.ts delete mode 100644 src/compiler/compile/render_dom/wrappers/shared/mark_each_block_bindings.ts delete mode 100644 src/compiler/compile/utils/compare_node.ts delete mode 100644 src/compiler/compile/utils/replace_object.ts delete mode 100644 src/compiler/compile/utils/string_to_member_expression.ts delete mode 100644 test/js/samples/initial-context/expected.js delete mode 100644 test/js/samples/initial-context/input.svelte delete mode 100644 test/js/samples/optional-chaining/expected.js delete mode 100644 test/js/samples/optional-chaining/input.svelte delete mode 100644 test/parser/samples/error-css-global-without-selector/error.json delete mode 100644 test/parser/samples/error-css-global-without-selector/input.svelte delete mode 100644 test/parser/samples/error-unmatched-closing-tag-autoclose-2/error.json delete mode 100644 test/parser/samples/error-unmatched-closing-tag-autoclose-2/input.svelte delete mode 100644 test/parser/samples/error-unmatched-closing-tag-autoclose/error.json delete mode 100644 test/parser/samples/error-unmatched-closing-tag-autoclose/input.svelte delete mode 100644 test/preprocess/samples/script-self-closing/_config.js delete mode 100644 test/preprocess/samples/script-self-closing/input.svelte delete mode 100644 test/preprocess/samples/script-self-closing/output.svelte delete mode 100644 test/preprocess/samples/style-self-closing/_config.js delete mode 100644 test/preprocess/samples/style-self-closing/input.svelte delete mode 100644 test/preprocess/samples/style-self-closing/output.svelte delete mode 100644 test/runtime/samples/$$slot/A.svelte delete mode 100644 test/runtime/samples/$$slot/_config.js delete mode 100644 test/runtime/samples/$$slot/main.svelte delete mode 100644 test/runtime/samples/await-with-update-2/Component.svelte delete mode 100644 test/runtime/samples/await-with-update-2/_config.js delete mode 100644 test/runtime/samples/await-with-update-2/main.svelte delete mode 100644 test/runtime/samples/await-with-update/Component.svelte delete mode 100644 test/runtime/samples/await-with-update/_config.js delete mode 100644 test/runtime/samples/await-with-update/main.svelte delete mode 100644 test/runtime/samples/await-without-catch/_config.js delete mode 100644 test/runtime/samples/await-without-catch/main.svelte delete mode 100644 test/runtime/samples/binding-input-group-duplicate-value/_config.js delete mode 100644 test/runtime/samples/binding-input-group-duplicate-value/main.svelte delete mode 100644 test/runtime/samples/binding-input-group-each-1/_config.js delete mode 100644 test/runtime/samples/binding-input-group-each-1/main.svelte delete mode 100644 test/runtime/samples/binding-input-group-each-2/_config.js delete mode 100644 test/runtime/samples/binding-input-group-each-2/main.svelte delete mode 100644 test/runtime/samples/binding-input-group-each-3/_config.js delete mode 100644 test/runtime/samples/binding-input-group-each-3/main.svelte delete mode 100644 test/runtime/samples/binding-input-group-each-4/_config.js delete mode 100644 test/runtime/samples/binding-input-group-each-4/main.svelte delete mode 100644 test/runtime/samples/binding-input-group-each-5/_config.js delete mode 100644 test/runtime/samples/binding-input-group-each-5/main.svelte delete mode 100644 test/runtime/samples/binding-input-group-each-6/_config.js delete mode 100644 test/runtime/samples/binding-input-group-each-6/main.svelte delete mode 100644 test/runtime/samples/binding-select-late-2/_config.js delete mode 100644 test/runtime/samples/binding-select-late-2/main.svelte delete mode 100644 test/runtime/samples/binding-select-late-3/_config.js delete mode 100644 test/runtime/samples/binding-select-late-3/main.svelte delete mode 100644 test/runtime/samples/binding-this-each-block-property-2/_config.js delete mode 100644 test/runtime/samples/binding-this-each-block-property-2/main.svelte delete mode 100644 test/runtime/samples/component-binding-store/Input.svelte delete mode 100644 test/runtime/samples/component-binding-store/_config.js delete mode 100644 test/runtime/samples/component-binding-store/main.svelte delete mode 100644 test/runtime/samples/component-event-handler-contenteditable/_config.js delete mode 100644 test/runtime/samples/component-event-handler-contenteditable/main.svelte delete mode 100644 test/runtime/samples/component-namespace/Tooltip.svelte delete mode 100644 test/runtime/samples/component-namespace/Widget.svelte delete mode 100644 test/runtime/samples/component-namespace/_config.js delete mode 100644 test/runtime/samples/component-namespace/main.svelte delete mode 100644 test/runtime/samples/each-block-keyed-component-action/Component.svelte delete mode 100644 test/runtime/samples/each-block-keyed-component-action/_config.js delete mode 100644 test/runtime/samples/each-block-keyed-component-action/main.svelte delete mode 100644 test/runtime/samples/each-block-scope-shadow-bind-2/_config.js delete mode 100644 test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte delete mode 100644 test/runtime/samples/each-block-scope-shadow-bind-3/_config.js delete mode 100644 test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte delete mode 100644 test/runtime/samples/each-block-scope-shadow-bind-4/_config.js delete mode 100644 test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte delete mode 100644 test/runtime/samples/each-block-scope-shadow-bind/_config.js delete mode 100644 test/runtime/samples/each-block-scope-shadow-bind/main.svelte delete mode 100644 test/runtime/samples/each-blocks-assignment-2/_config.js delete mode 100644 test/runtime/samples/each-blocks-assignment-2/main.svelte delete mode 100644 test/runtime/samples/each-blocks-assignment/_config.js delete mode 100644 test/runtime/samples/each-blocks-assignment/main.svelte delete mode 100644 test/runtime/samples/innerhtml-with-comments/_config.js delete mode 100644 test/runtime/samples/innerhtml-with-comments/main.svelte delete mode 100644 test/runtime/samples/props-reactive-only-with-change/Comp.svelte delete mode 100644 test/runtime/samples/props-reactive-only-with-change/_config.js delete mode 100644 test/runtime/samples/props-reactive-only-with-change/main.svelte delete mode 100644 test/runtime/samples/props-reactive-slot/Comp.svelte delete mode 100644 test/runtime/samples/props-reactive-slot/_config.js delete mode 100644 test/runtime/samples/props-reactive-slot/main.svelte delete mode 100644 test/runtime/samples/raw-mustache-as-root/RawMustache.svelte delete mode 100644 test/runtime/samples/raw-mustache-as-root/_config.js delete mode 100644 test/runtime/samples/raw-mustache-as-root/main.svelte delete mode 100644 test/runtime/samples/raw-mustache-inside-head/_config.js delete mode 100644 test/runtime/samples/raw-mustache-inside-head/main.svelte delete mode 100644 test/runtime/samples/raw-mustache-inside-slot/Component.svelte delete mode 100644 test/runtime/samples/raw-mustache-inside-slot/_config.js delete mode 100644 test/runtime/samples/raw-mustache-inside-slot/main.svelte delete mode 100644 test/runtime/samples/raw-mustaches-td-tr/_config.js delete mode 100644 test/runtime/samples/raw-mustaches-td-tr/main.svelte delete mode 100644 test/runtime/samples/reactive-function-called-reassigned/_config.js delete mode 100644 test/runtime/samples/reactive-function-called-reassigned/main.svelte delete mode 100644 test/runtime/samples/reactive-value-assign-property/_config.js delete mode 100644 test/runtime/samples/reactive-value-assign-property/main.svelte delete mode 100644 test/runtime/samples/spread-element-input-select-multiple/_config.js delete mode 100644 test/runtime/samples/spread-element-input-select-multiple/main.svelte delete mode 100644 test/runtime/samples/spread-element-input-value-undefined/_config.js delete mode 100644 test/runtime/samples/spread-element-input-value-undefined/main.svelte delete mode 100644 test/runtime/samples/spread-element-input-value/InputOne.svelte delete mode 100644 test/runtime/samples/spread-element-input-value/InputTwo.svelte delete mode 100644 test/runtime/samples/spread-element-input-value/_config.js delete mode 100644 test/runtime/samples/spread-element-input-value/main.svelte delete mode 100644 test/runtime/samples/spread-element-input-value/utils.js delete mode 100644 test/runtime/samples/store-each-binding-deep/_config.js delete mode 100644 test/runtime/samples/store-each-binding-deep/main.svelte delete mode 100644 test/runtime/samples/store-imports-hoisted/_config.js delete mode 100644 test/runtime/samples/store-imports-hoisted/foo.js delete mode 100644 test/runtime/samples/store-imports-hoisted/main.svelte delete mode 100644 test/runtime/samples/store-shadow-scope/_config.js delete mode 100644 test/runtime/samples/store-shadow-scope/main.svelte delete mode 100644 test/runtime/samples/store-template-expression-scope/_config.js delete mode 100644 test/runtime/samples/store-template-expression-scope/main.svelte delete mode 100644 test/runtime/samples/this-in-function-expressions/_config.js delete mode 100644 test/runtime/samples/this-in-function-expressions/main.svelte delete mode 100644 test/runtime/samples/transition-js-each-else-block-intro-outro/_config.js delete mode 100644 test/runtime/samples/transition-js-each-else-block-intro-outro/main.svelte delete mode 100644 test/runtime/samples/transition-js-each-else-block-intro/_config.js delete mode 100644 test/runtime/samples/transition-js-each-else-block-intro/main.svelte delete mode 100644 test/runtime/samples/transition-js-each-else-block-outro/_config.js delete mode 100644 test/runtime/samples/transition-js-each-else-block-outro/main.svelte delete mode 100644 test/validator/samples/a11y-contenteditable-element-without-child/errors.json delete mode 100644 test/validator/samples/a11y-contenteditable-element-without-child/input.svelte delete mode 100644 test/validator/samples/a11y-label-has-associated-control/input.svelte delete mode 100644 test/validator/samples/a11y-label-has-associated-control/warnings.json delete mode 100644 test/validator/samples/a11y-media-has-caption/input.svelte delete mode 100644 test/validator/samples/a11y-media-has-caption/warnings.json diff --git a/.eslintignore b/.eslintignore index d123c1053048..b5cb03ae6e62 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,6 +2,7 @@ **/expected.js _output test/*/samples/*/output.js +node_modules # automatically generated internal_exports.ts diff --git a/.eslintrc.js b/.eslintrc.js index a093de610b35..946a157e40c8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,65 @@ module.exports = { root: true, - extends: '@sveltejs', + rules: { + indent: 'off', + 'no-unused-vars': 'off', + semi: [2, 'always'], + 'keyword-spacing': [2, { before: true, after: true }], + 'space-before-blocks': [2, 'always'], + 'no-mixed-spaces-and-tabs': [2, 'smart-tabs'], + 'no-cond-assign': 0, + 'object-shorthand': [2, 'always'], + 'no-const-assign': 2, + 'no-class-assign': 2, + 'no-this-before-super': 2, + 'no-var': 2, + 'no-unreachable': 2, + 'valid-typeof': 2, + 'quote-props': [2, 'as-needed'], + 'one-var': [2, 'never'], + 'prefer-arrow-callback': 2, + 'prefer-const': [2, { destructuring: 'all' }], + 'arrow-spacing': 2, + 'no-inner-declarations': 0, + 'require-atomic-updates': 'off', + '@typescript-eslint/indent': 'off', + '@typescript-eslint/camelcase': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/array-type': ['error', 'array-simple'], + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_' + } + ], + '@typescript-eslint/no-object-literal-type-assertion': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/prefer-interface': 'off' + }, + globals: { + globalThis: false + }, + env: { + es6: true, + browser: true, + node: true, + mocha: true + }, + extends: [ + 'eslint:recommended', + 'plugin:import/errors', + 'plugin:import/warnings', + 'plugin:import/typescript', + 'plugin:@typescript-eslint/recommended' + ], + parserOptions: { + ecmaVersion: 9, + sourceType: 'module' + }, + plugins: ['svelte3'], settings: { 'import/core-modules': [ 'svelte', @@ -10,5 +69,20 @@ module.exports = { 'estree' ], 'svelte3/compiler': require('./compiler') - } + }, + overrides: [ + { + files: ['*.js'], + rules: { + '@typescript-eslint/no-var-requires': 'off' + } + }, + { + files: ['*.svelte'], + processor: 'svelte3/svelte3', + rules: { + '@typescript-eslint/indent': 'off' + } + } + ] }; diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 7daff3f1ab15..6871094f5cac 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -8,13 +8,10 @@ the issue. One way we prioritize issues is by the number of :+1: reactions on their descriptions. Please DO NOT add `+1` or :+1: comments. ### Feature requests and proposals - We're excited to hear how we can make Svelte better. Please add as much detail -as you can on your use case. To propose an implementation of a large feature or -change, please create an [RFC](https://github.com/sveltejs/rfcs). +as you can on your use case. ### Bugs - If you're filing an issue about a bug please include as much information as you can including the following. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 923bfdb50cc1..e533c21c96fa 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -7,11 +7,6 @@ assignees: '' --- - - **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. For example: I'm always frustrated when [...] diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d14a0f9fe4b4..1e77e0337aca 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,8 @@ -### Before submitting the PR, please make sure you do the following -- [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs -- [ ] This message body should clearly illustrate what problems it solves. -- [ ] Ideally, include a test that fails without this PR but passes with it. + +### Before submitting the PR, please make sure you do the following +- [ ] It's really useful if your PR relates to an outstanding issue, so please reference it in your PR, or create an explanatory one for discussion. In many cases features are absent for a reason. +- [ ] This message body should clearly illustrate what problems it solves. If there are related issues, remember to reference them. +- [ ] Ideally, include a test that fails without this PR but passes with it. PRs will only be merged once they pass CI. (Remember to `npm run lint`!) ### Tests -- [ ] Run the tests with `npm test` and lint the project with `npm run lint` +- [ ] Run the tests tests with `npm test` or `yarn test`) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4e04386fccfb..457ddb3babea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,12 +3,12 @@ on: [push, pull_request] jobs: Tests: runs-on: ${{ matrix.os }} - timeout-minutes: 10 strategy: matrix: node-version: [8, 10, 12, 14] os: [ubuntu-latest, windows-latest, macOS-latest] steps: + - run: git config --global core.autocrlf false - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: @@ -19,17 +19,12 @@ jobs: CI: true Lint: runs-on: ubuntu-latest - timeout-minutes: 2 steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 - run: 'npm i && npm run lint' Unit: - runs-on: ${{ matrix.os }} - timeout-minutes: 5 - strategy: - matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] + runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ccfeff27381..2fd3d96fbed0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,72 +2,11 @@ ## Unreleased -* Expose object of which slots have received content in `$$slots` ([#2106](https://github.com/sveltejs/svelte/issues/2106)) -* Re-throw an unhandled rejection when an `{#await}` block with no `{:catch}` gets a rejection ([#5129](https://github.com/sveltejs/svelte/issues/5129)) -* Add types to `createEventDispatcher` ([#5211](https://github.com/sveltejs/svelte/issues/5211)) -* In SSR mode, do not automatically declare variables for reactive assignments to member expressions ([#5247](https://github.com/sveltejs/svelte/issues/5247)) -* Include selector in message of `unused-css-selector` warning ([#5252](https://github.com/sveltejs/svelte/issues/5252)) -* Fix using ``s in child `{#await}`/`{#each}` contexts ([#5255](https://github.com/sveltejs/svelte/issues/5255)) -* Fix using `` in `{:catch}` ([#5259](https://github.com/sveltejs/svelte/issues/5259)) -* Fix setting one-way bound `` `value` to `undefined` when it has spread attributes ([#5270](https://github.com/sveltejs/svelte/issues/5270)) -* Fix deep two-way bindings inside an `{#each}` involving a store ([#5286](https://github.com/sveltejs/svelte/issues/5286)) - -## 3.24.1 - -* Prevent duplicate invalidation with certain two-way component bindings ([#3180](https://github.com/sveltejs/svelte/issues/3180), [#5117](https://github.com/sveltejs/svelte/issues/5117), [#5144](https://github.com/sveltejs/svelte/issues/5144)) -* Fix reactivity when passing `$$props` to a `` ([#3364](https://github.com/sveltejs/svelte/issues/3364)) -* Fix transitions on `{#each}` `{:else}` ([#4970](https://github.com/sveltejs/svelte/issues/4970)) -* Fix unneeded invalidation of `$$props` and `$$restProps` ([#4993](https://github.com/sveltejs/svelte/issues/4993), [#5118](https://github.com/sveltejs/svelte/issues/5118)) -* Provide better compiler error message when mismatched tags are due to autoclosing of tags ([#5049](https://github.com/sveltejs/svelte/issues/5049)) -* Add `a11y-label-has-associated-control` warning ([#5074](https://github.com/sveltejs/svelte/pull/5074)) -* Add `a11y-media-has-caption` warning ([#5075](https://github.com/sveltejs/svelte/pull/5075)) -* Fix `bind:group` when using contextual reference ([#5174](https://github.com/sveltejs/svelte/issues/5174)) - -## 3.24.0 - -* Support nullish coalescing (`??`) and optional chaining (`?.`) operators ([#1972](https://github.com/sveltejs/svelte/issues/1972)) -* Support `import.meta` ([#4379](https://github.com/sveltejs/svelte/issues/4379)) -* Fix only setting `` values when they're changed when there are spread attributes ([#4418](https://github.com/sveltejs/svelte/issues/4418)) -* Fix placement of `{@html}` when used at the root of a slot, at the root of a component, or in `` ([#5012](https://github.com/sveltejs/svelte/issues/5012), [#5071](https://github.com/sveltejs/svelte/pull/5071)) -* Fix certain handling of two-way bound `contenteditable` elements ([#5018](https://github.com/sveltejs/svelte/issues/5018)) -* Fix handling of `import`ed value that is used as a store and is also mutated ([#5019](https://github.com/sveltejs/svelte/issues/5019)) -* Do not display `a11y-missing-content` warning on elements with `contenteditable` bindings ([#5020](https://github.com/sveltejs/svelte/issues/5020)) -* Fix handling of `this` in inline function expressions in the template ([#5033](https://github.com/sveltejs/svelte/issues/5033)) -* Fix collapsing HTML with static content ([#5040](https://github.com/sveltejs/svelte/issues/5040)) -* Prevent use of `$store` at compile time when top-level `store` has been shadowed ([#5048](https://github.com/sveltejs/svelte/issues/5048)) -* Update ` - - - - -{#if files} -

Selected files:

- {#each Array.from(files) as file} -

{file.name} ({file.size} bytes)

- {/each} -{/if} diff --git a/site/content/examples/05-bindings/05-file-inputs/meta.json b/site/content/examples/05-bindings/05-file-inputs/meta.json deleted file mode 100644 index 92d0587e8748..000000000000 --- a/site/content/examples/05-bindings/05-file-inputs/meta.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "title": "File inputs" -} diff --git a/site/content/examples/05-bindings/06-select-bindings/App.svelte b/site/content/examples/05-bindings/05-select-bindings/App.svelte similarity index 100% rename from site/content/examples/05-bindings/06-select-bindings/App.svelte rename to site/content/examples/05-bindings/05-select-bindings/App.svelte diff --git a/site/content/examples/05-bindings/06-select-bindings/meta.json b/site/content/examples/05-bindings/05-select-bindings/meta.json similarity index 100% rename from site/content/examples/05-bindings/06-select-bindings/meta.json rename to site/content/examples/05-bindings/05-select-bindings/meta.json diff --git a/site/content/examples/05-bindings/07-multiple-select-bindings/App.svelte b/site/content/examples/05-bindings/06-multiple-select-bindings/App.svelte similarity index 100% rename from site/content/examples/05-bindings/07-multiple-select-bindings/App.svelte rename to site/content/examples/05-bindings/06-multiple-select-bindings/App.svelte diff --git a/site/content/examples/05-bindings/07-multiple-select-bindings/meta.json b/site/content/examples/05-bindings/06-multiple-select-bindings/meta.json similarity index 100% rename from site/content/examples/05-bindings/07-multiple-select-bindings/meta.json rename to site/content/examples/05-bindings/06-multiple-select-bindings/meta.json diff --git a/site/content/examples/05-bindings/08-each-block-bindings/App.svelte b/site/content/examples/05-bindings/07-each-block-bindings/App.svelte similarity index 89% rename from site/content/examples/05-bindings/08-each-block-bindings/App.svelte rename to site/content/examples/05-bindings/07-each-block-bindings/App.svelte index 4d3d75420cc9..ff91612ec52b 100644 --- a/site/content/examples/05-bindings/08-each-block-bindings/App.svelte +++ b/site/content/examples/05-bindings/07-each-block-bindings/App.svelte @@ -16,10 +16,16 @@ $: remaining = todos.filter(t => !t.done).length; + +

Todos

{#each todos as todo} -
+
{/each} diff --git a/site/content/examples/05-bindings/08-each-block-bindings/meta.json b/site/content/examples/05-bindings/07-each-block-bindings/meta.json similarity index 100% rename from site/content/examples/05-bindings/08-each-block-bindings/meta.json rename to site/content/examples/05-bindings/07-each-block-bindings/meta.json diff --git a/site/content/examples/05-bindings/09-media-elements/App.svelte b/site/content/examples/05-bindings/08-media-elements/App.svelte similarity index 95% rename from site/content/examples/05-bindings/09-media-elements/App.svelte rename to site/content/examples/05-bindings/08-media-elements/App.svelte index 7a071dbe495f..469e9e12eb2c 100644 --- a/site/content/examples/05-bindings/09-media-elements/App.svelte +++ b/site/content/examples/05-bindings/08-media-elements/App.svelte @@ -109,8 +109,8 @@
- + diff --git a/site/src/utils/highlight.js b/site/src/utils/highlight.js index 124af2e6be29..d9e4fe5ec816 100644 --- a/site/src/utils/highlight.js +++ b/site/src/utils/highlight.js @@ -1,7 +1,6 @@ import { langs } from '@sveltejs/site-kit/utils/markdown.js'; import PrismJS from 'prismjs'; import 'prismjs/components/prism-bash'; -import 'prismjs/components/prism-diff'; import 'prism-svelte'; export function highlight(source, lang) { diff --git a/site/static/examples/thumbnails/file-inputs.jpg b/site/static/examples/thumbnails/file-inputs.jpg deleted file mode 100644 index d302633f6b6fd370594d1d116dfb0b6a8adbd436..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2751 zcmdT^XH?S(690z)O7jRIz*3Z@iBUkMgie+sC`DRm2`WtzB=jnRaCdMhf}*epxPS>I z2@s@{grdvAVp!>+1Oieep$SrS6#MnSvAAz*NI3O+Etq}T-cqjMkzJb_4Q~U7v zF#kAAK%n1mBp`@{gbYkZOIB9P&s^W!@BhZ(O8{~l=mC1bAPB$*0f8Z)!+!&E00;ns zjsScGm|s8;#CPn-X(0}Pz+gZ?h+l{gEcBlM5Z{p-A}9g<_5$oXCs$Mop>$AEN!RDt z#qfV*Kd-HOFQu)lg3vR!@QsYBf3V6q8W;kY0sCM3 z`70~J(r_{%N^+Y`*5Q$|Vzz^n0$h*lNo$U5t$|+9Vk+{mVyV52#tdYzrZ;(!4fcsx zyQ(=LCz2NwACo+eVYu`*2>!UpF7ht<6Ox418eOh%xx8pMEDVC-^enhC)ghQ94gBXB zb}|MK6qvNF-eu>O1zkotXQXCH_DMf?uUHW9O4KKMrFD8=b}^^E<)RrK#arNzmB_TQ z;K%Kk=r;M4w5QBPC+Mkk=%8y;(|zG`U9Z=~;PkAybn>Iqzb}^`1^vnXs>%l=H+?oW zk`4iuaNEqGzO9YDFR)3tFJHt-8Fe<0shr*apqoT67$n)FxQ}G30 zUD-bFu1z;_>L~^f6`B$-vLC*Dy1_+*$~jj59n>Q$Kaqvi*bhbVpy9 zAw7Pc{C9)d2vY;utXofhkQCL>Nqp7h>71qS4JO7moMlB9aK>3PyD3kIth^u-smFoC zLkXff{deFrcLVm6eE#eX9r%93TeWw2mK9N_KchxP%leS-h0~0Z2k>)pYX6$#l?SyY z7O2(fV9s(Vg~_GO-WqtVX8NSp2pYP6jLlAqjaC3%e6-Xr^Fj zpf|#-N{D|?p=5kIKn7payx>*+#Lf2M`^oi2ciFxrq(Lv|^d)u^d0cz! z)$f(UU0Im0)D_w3qR8@Q-vkfyYFg6~wgYURy4P~Grnt1dF&4RiHb;&U?IEs!y4C~`8c_l zC5t00)GA5-d4;VzRe{I%2ubkDtOanyCN_ZCtJ;Jp)0WS?ROy)$r0W#^paLm{-)`>; zEiW4z8@C+asm%;l(@s|RSiOubpj(k9RWSu0M_856dIFa5p&3Y;81xPoK^ z#`Ah?&Er|)IFG?MonGY5;sFt9jx2tN3g-op)mMD&RI2P2O>sG&j*bvYqLA<3;*4Hd zvZMtY(yROX<75&0Co9_O5T@3zoc^}E6ezXdrWjymd8^V*f4%uN1^1LTK|D|W>~2~T zeZEt{_*|NlvT`PAv{7H_G@wX#+DdIAJjB&cUhu4WFmI-Krqh1{%beIJ8r&OPi#9~X z&YPJ&QcTKR!4f?7Yh(_A%=$y17|nafNS7+F9Y%ThG@{@=Jw!i=OXZYB@;@WOU&<5@ zA#}=jRfdGxGGrMhMf=yXjLn{c2@Py+wdA?dGOH0QCT$AS$}92a`++exrbXYU@GX;i zbLrMpnG9u=dm0J~puq#b|M{;H{1WcPIu+5<)71;}3xbC+l@`Q=-rgsuX5CaCZ)FOc zG;i7om1{#rz?v)LI6Uy9>Na%uhNFBco;QuSoxE^1)NPY7a_n35?dHts5(D8$R%^%( msK;%(dOntP;!jWJ+ZMOFDq$@GdEnsBhx|I_Usy3aocI;?`dRb< diff --git a/site/static/media/svelte-ts.png b/site/static/media/svelte-ts.png deleted file mode 100644 index ed562822c3ce0dd85b32f6c792e70fce8e319687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189664 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

m_cN5*-D5fLdbJ*J zq%U8%iLns#v=h-uS8{6#)5|=+p7kkeqk=c+;WNuic-|&_2c(Gv6Y1m zxbov!goiwIXZN|Uhfn%DMk`FexW(+vB1fK4lsL2*7h>XrfQNm=Q&1*&!)ce(kNSBt zL~zKDS$I}}%GCFFw)2gL#f&VpE`ze%{%wi>9e|XQzFM$EnF^~Ahz^8S1xDm$PbshR zW6Xr_>P`^b?-m;s2v^eHnt!~h0yirqBv+O*pw0{kQBj%3gDMl0`vu59PGbkI!fHSf z3Ryro9nfGWq;X`KboaZa5Jq@#scna$CR#K*fHUZJ<0&d%{yy{6v4;R7vJFU4Z>bY* zJc_@D4TakJi;JZS!)2>ma8zDdVLdnPOaF2@go35hVoQXPr>#BTEr^br0^2bZ1q`dM zvnzh#VfvTow8ys~3=GUa#QaZ4?tci@q&GwBM3Df#ZN~xDFnF^lF1O;}G^qoU-64j! ze|q<$EGI2c&au%JV;nCk{OL-96c!MR%FDUDMQBq;F)9aiza)W+#w+*Jtg5N0DTEa4 zy+$TML%|Nsyt=bvx8EJ%&@S6RHwU#=ed{kbtyE_pnrk0J-_%w#^bAL0lEO z>4Yf9dxO?&f8fhx(7(a*ue9J}yF|cg3jr#?Y4JBx3L+aDyaNWBD9K_=%_QaW<-&AO-*b01Sa~sN?tG>MuBavAEg!*gTQ8>4rf={u=9qn#Oujyl&iHan(bpk_^{>7Y!~$C z^);ix?H6SR-8jgIJ{IXsj97dbTYHT+Bp(cI| z?i5nei0x*Sk$%6J=mxA3n9njA4uYT1F#mizxXb)@ZrJdt+>^wbtz666R~YUc+rjkG z`rx&4eh|f>?Q-4)W%D;pyTKG9q71^4zg#K(Txgv=Y=(0N0-*9?1Hk!ymZaY`WYELL zNS?I3ihDHSW_{G=T;WiY7qDE-p0$e{sVNdn!z1?QnE5_wh7EkX1V2LCvJ0H98n=es z*4#j^0!(p*dAy~%-_TDz2_2q-tnwy$9bx3%-|iBW8G+6Y?wp+MLLH5-)?b*Yx6jal zcMzS9>l&=U^vDvr;QP4%VE^qre*J$cnD4h>C0fxqDzxazq(=+#uHU)+j4$GPhG)-# zA`xxEiv<*NdU-`$n=rRPKg|E)sO9|!1A`J)%0a5z$sU^DZedPJk*c_Ec|DPb6}4lb z(mFg}F~kv$d-LP@A4Xwj+UMnSvm}S<86_mleA!l^z8=_*eRyrynmlOwehXz^LRSjPU8~j=Ixq&U^hcV3R zLxdk&J-AJ7crzyWm2#j|6tOp6L&kAVAnzqWTVr`1hJ{ z#9!SB_+1+G7&Hsin%U=fpC#H%k=y|%J*5`;OTPs*TOGm`h+^{>^yv_uk@Cx9{iaDj z7`i{sUvLHLEcJ`W*2~Sqi@)Rc3K9Y|Gem~pE3s5_M7zQNQ|ECEy zzIHQQD(;uA>zhHf97p++Z>R4p*nW_Fa9SkC}3#EW^vUQQZ9IFabY<^h~UUbUB{Fv!tkDkcddDpvALPxadr zDj^Xq4~m1&-@ovGC_`Ly-!?g&m|m(6@NDs9G#VfJ+3432SHvd7E(KgOOa8cjViJai zhJ%BHSwDdYPa-Q&MTLcih9;k>F!o&^H8&u^M*iZ6b< zJJk-L0AXg(zt?iMak9oA4644LDk)XNanp_63bkN!s1HX$;PwdqC>zU38U*A_XZ zxBVdJrgsF1Qg|k{zN@^brGHYR?rL%2HC(qNU#WF;C4v_E^5vtxfq@NB2esc^4iR7D zufm&3Trc=>R?}WK&-nH=cW{_iAn3Ks`qYq@>dSd2fAYOWKOrR@Wsl4JwW#wia2XAD zU*45Snc)V5hXyaAc0JmDJ`NO>)c9^VD~}hP`}^mEMM@glApV?f5}VCYznCPA%r&P{ z;NWw8PlDX3bdLz7z5A;F+45DlyQ~{<5u>kd!2I?@o=SKPd&!)vX%tQqqSosi~y-)X?d`VU!-(J=~ ziVTQm&j+LuymS2dNnX0~jY&MB7&N zK{a^)-tJw+_IN_ZV6oYI9PtP}-6-mwG`sTOOZT>NFzq~ZSQnftml5M%b01fL(8jTu zXatSPq3~o&gjIK~3lOry%vx~9Z6S+6Fn&aG^fdV|W0#HT{~l%M1-h(AHS+TFw>o{m z`Kp3pK~Ne2Bp!#|GJI=G|8fBq9mo*)3)xAaFHTl_N_-P z={x!BEhK4P%vY>u13^FGR)?_snCRIm7q`dH_9q`yd$NpEPZv__5P?W{ymI`EuDpgn zbt0->JtLACP%ib)qc{s!2)#vS!T>F=hLV9g|BYjmKyid*c*q`yn)b`&(A@bsl2{L) zG{+gj5=odBbbgZhDE+r%KeeR7U&;NhY9>HNfqr`Icsb&4J!JOnqVWEEv}i@m)q97?Tv-)1m~C4!mHUG9M`E-%4O!dr2?v#Ju>JxaXp!Me#I_ETXl zIrHc0i&yQ;T&~+!4lU{R^izCh)Dxy;|ixaRcjS48`?4K#SiI_^?mFNZ{FQ$ zC`rG^sRaZbiDnT`IX*Tl`)w1^GkpMR6l9j|g{SAVC$sc$nD0)!1@%mk9Su)GL0nH4 zI=~UcvCRH6=aOzPU43CxEh+7HTYGsMSrP{E|8bTB1Gp)Zm!SD&<-5q-?(7_LmaqTJ zf7Vb-BaJX5&{C;a*h$Hs;qbbp^I70WCQt`h?_P&_ZDaZwav)06e;J7IljD2Mq6CC( z%c>Y53JQwE@nwDNAo}6NCV)_32k`XNTdsy)US2K%u*hJW+Z{0giwp=0$|CPHnJrV` z-!gJ*+?fj!sMcjym!iZ>B14DS3e=buhD3sE(DCMt8(J%}#ETTH>8?gwSn4}$m%8qKSmc@9wI}`Vomo3u} zB1ZJVKFJ!UMWjrO>C9#qlcJ7 z?%gWx-4jov#6^lA!vz z1`7BD6Hd3I1-zv?7RNx~{{0&+8W&EXPx#eY1Q!mSWywARBqPrYY~D+Wd)^CL8va&! zUvC04`VZ2U3XbrT;$Mc zc037nJXz8kO<`SVvZJWec9>PZem*Rz*ynV;HW3jM!#OjVEk<`SdAS}3=z{4AJq$rZrdI{|HB-<;w$unAsUzRPN(m(;Wr4dH%XPr0&%;x1Sh0m$O>kNI8?Ta=T_zEa`~*T- zaMJ8>BnHZ1zM?Z|tL0KyzUB}cY^dPi+n-X4Nil6FA3>2|l(MaG@|++{J-3Zq%Q6Gf z5m3n`7)Ew)%ZxnK&nEb9hpP8K9jfgE+b~kShf{fQFTPV1y8It;*}`AtoqK!-Q@cAg z*?)eT#yV3=*-n@Kkw!_JyKUXYde?Ir+*uT9R7Xrjh7TYb1IG;-78G7yT_h6SPSl={ zq*uRAiI8a^qVdV}KgiS(C&b)+2~q1(R8bcrRZKPH7kES-Dz>oLN}u#m$p2WT~F2k(YKwN?4u@2wB{ z0U`&nA)D_EYlyJMdQ%9NiYrE6MO_lK8u7F@7zS}hV?;_qw&$Ivr+K@9{kVn0l3x#3 z;Ss%N<$O%y%09$;*CBJ|9^QT+Y1VSzKcHu{ztB?Xajg9YS+JZXZN0sn`R#gCPX8I) zY8tEN8_Q+0cqND~g7tK)BGc*VJQDtVXDcSoJfK}&sd4oHEI%j+ z7iL|J?J5c3TxG{JIIvm1vss9|*Z-{#MD~x;0CVv#Pr$dxO+#%T)#S^B$pSZQu=D+> zNiS>8x<+2aQWtK9&xId?z*l6`pHHPsBLJ8iwi9(dyN2RvHf@_sWE2~Tn;s9EWlxUg zD+c8FU;Il;X=&A~Awb;U<2AnU!@FCZV-Y^V>LTVs%&zdbK?X4%)|gt#?GVFNjV4>d zyFUh^XMU04Au9y3qo&lK`kH+bEF9QiI^VZ6*M6b7tVSdz=R@`o|C06E-ZPM^P*XqS z<$T80s4WYWf#B~Imh71#2HjZ%EvpB(+Q3UBG2eDm(a;HXP4-kS9h+xT9FM~q1hT!A`?K*_ zZ>!7I`Q5r#Y@wmE187#A?Dz5#_~AYMw=sCoFm>&*Hs~8%R&mzoES9@%W5%04Noy6A zPdv;xK)vEF5C8tmoltSZ0ULBmW^`xZ=n@!6h$M|yS|BGOUkI<}eDuPfTWp3iPMtA zsC%7}5i=QSOR%V~XS^SA-7xFRG(!QmgovDIk-~dY`TAiIYBTrT1S7xAHb~XP6$^5W z=?~{@>kB7oR#TetxBJxw@%gU8n^#%(|M!Pwm;XaIaJ@tAqCwxbc}Fyd4bA)QDN8c_ zb?9q;;BaS+Dex}WX zs_@O%Mvr?{kBL?rQDYu~v7ct$7SwQBOlO4{&DuJqVgB2)A^xFDQf@FYc8%eEUWIRE znxim)-YyRf z>I@Ik-g0Uw34u0HL5DcB9U{9k$5L%(Ts!^@u+OP)&motP%<-KXqe5DZ?h`rVzvq`L} zfRpfLkMAVi978(z>PaBBu_)Q?$pUnkQD2N-i@Zu))S-l|MZ{G_ z`+yV4Cl@QS{MxMBsVyE5E;5^j#S<*MO@``3g?cRxVmVf3R?E z5NOcDm&XMt#a{BhP6iAdzh+WeW}K8!1jyBWoYV;H%WDwstA>7(34O5_)<0`JYS0Jc=>!mJjN)AN8Y93(CkGv-vBmC)`+Bbj)Cp7p=9t;=@88+_8#jZ* zOh+QYY6tjFkhJ>P>v@a}aKn3Efj+rbB3Y&CJh7H6S}#Wp=L6+3G?TR!PR$|btxOF# z4|SE!b3saPzgx~?=J^AE#bNC8?W33tFLm@RzwznsV={MwFVT=0Sk09~O>y6J9j>=u zI5Exy7dSq_p#gp9;lDD$$t6b0nFGfA`}>Lc_%b|ICOU$Q8Q=A%N2&{JPHnZe4Xe^O zL%7I9df}y9hl<_%$G!)S$=c%-u`MNw+vQ^M&p>tndAeXk%z>08w1+h+vcDy^fJj0j z7{~5NQNnx%?I>Ym&M+m*V?F=5a=T8EsnU0W(cG9!R?&ZJ)VB2=#g#FID4Q z<+uBP#`yRC_TeT~2USX5q9sQTU1~HyzRIypwbgA>V|Gep%J{dsb(iMp+btb!d^|yE zbRLE>q3?kFPn$YPSB)7x7`P}8mb!}w;Ub5Xm+<8RiU!0UPf8xba7}n^dQ2hcm#?u) z#WWc17iMLmrL81S7n9TTT_ce<(nVPAkI$p$1AxIDC@6SK)Vw&cv2AQsI(KxGSh1dy zrg?+QCMqdNKO_aK)Uhl>prld~@px5@i1mBrK}SJHBRDFvDdVgUOVhyjc2!eF0p^<* zC=v8umCY46Bq&5>Hxn);Kil)=5opih+ZHWd=rsZ2Q5!u_9YV_LvsF`aa|@U}K8p{V zJ!JAT5A97(I%RLP;mOx%$B~S2jED;eyg|{yH?u8KImN9XQBS?#dB<`6_%X%=-eTqz z+WX&l-9D$(o%mc;wBp0#u!~ym^0h;y{YQ>V=_(NaL`mJpA3+|pm~!eAp`oN8uaOYz zvz)Tik~i_ZCd?x#;_doA@KrVY-_}+mwC)8S)a*{4JQn`n9dQzQp+Tc{GvC%tmugO& zU-w!8VWsi;a@c0gWiK1B93*6A1AW+6qCM457OF^Y9DrktESBqU>L%d>fF356EctFh zKgiAMVftLwLktv0%IheRQbk-?#i+>|PNspaWV0^4~T7Dt-tROgmRR5M2fQ#abGI#^6KLOaeb0Oh@7; zfG*2M<_ZStJi$*k-!ZrX-Ym(Z?*<;>9@eBIwWqV;OIBWXJdhFGQ0(m-7?5nK=&Jl| zII-)=5^Uy<5la_p<#~o)mVvzbl5yF&^++obHS{SONt9@85Ee{v88W4s6@G0q18%RxN z173W4rNCp~jJS&nr{}{C=6>~7PCYt}N@pkcyu_(&cCenF9*6B8=rWI866l{K zG*na}5HuyTW+>d|5)u+1Acs-G!JWT>vql0u**G$i`LUz}@#k{4UIoe>j`Upwl6NcqLSb4PAk~#B<_KR zl*<6Qsc}Is+Itf!6dXlM$`KbgDc7%qW^a9(eD3R#kj!AB9rT zkPp?iOUG?X|Y9` zXG8#ul0iV*(vO9BeEn?-ADyJK4$Sv+d>=sef5KENZ~oaL4N*-^uo6~oLQVBt_nB+c z=*-$Tfr&gG%YKY$6NhK`{4Z|?24bQ;CQj%fl2=}snHE@>BLLfYo_Pun6W7>q zyDNY$)>>3<8mi7tG`h%trJZR!;?sE`!W07|(0?E#CDq@;w^WXyUz8-?D}kd zy#dn2`u!bnHo$JGE(A(oMMOnomPfa2|D###5d>_GEpWNCQ zt+UwPd=0Hg)z)d~6h zx>so5jll^1+`pXzr9<122lTTcQpX4S*`8*+r_sOq8(m&$S#`(~*)jj?5k{m_s*C{8 z_Dp>-masCoOlsuK>mr-arrcY>iylGL@ zKW#}HB(CS+qU{)?UX%YHNmPqTh%qYkL$gf|q@Am7(rLjJx`+IBU{KO;@+pVDkS;!M zpWqL2{~fPhH-!7`qVXSW%tjm&rbD3K)ElU;29ApX&&t*_lm25!_^aJ_g~Vj7id_os zDtay-jx22a_X@b5WGwk+NkzMmzCQ67*58j^x{IPZ&=LXkYM6Wi%0#~g&Te5OB*Crl zhBqZ+<2odpa}|}(LBOH@u{4=8>&CJO)Bti4P@uw`<&+)qQ5|ou%Mx?pK=A4Ma5n4_ zlR@W8lW2G=6Cg_c>ZsENYFl1xp}h~+CWtkLpN7{jo~NYhWfA}Bqajvk5ru>0CaD@+ zHu5KZ>b?%=L;0;Np}W5b)X{^Hv9kl6f!)^}@p;OB^HTGwgQ#X>En)Jwj^(Ri086=* zkXVs(=R_gb^M0d>gpHXF^2&QZ_k18t*)hZra5_+9`T-9aejw^bNk=>I{Pqk>2wrh~ zQa1?+>D0;z>h`*J*3vh@y~|$9O@Xh{5{Q3vyYUgF1CNcgVlK^J$euv~7kU zxWx>~SIFhn%AW@dmxS0B0oopKuk@UpoLLgy#z*aa?})v>=sCfGH<6 zk-LL|a;ErbHe02KgD}Qf<>( z=^kG+rhlEX9!wXEw{AZWUIT{+J$nAmI)87He6X}9Ru~#gtOMdWrP?hRd`q>a;1&3} zQJzHV4VL(iH%H>^i59>WTn;X@am&^e*xk0rWV%9 z;SxM~2IGbIj^)H?`dB79tKOmk=ZVtM5~m_^%bI{V+%uPR3mk;Nvdfn5Ph$x2#RGgi z)XEhKwKlE*9S-jM@AdR&F7a(bNL*vF0$ob*0i+CfeGD>psErn>OrBc$)^nkm3SB}- zvDMUtbX$Gk-JQS!0b(PXKx;0Xa;w~Pnge2p8U;2=6_BwW3DiS{l2_YW8x5*_O&l$R ziwj2QQI0n}7gtx{!@9;~(fKDx^&ba727B@6SY=8D%`*0Ni`gEZ+=S{M)FOZQtEa5G z!r!a*fFF6V1Zu_u2Fv^oB;eUi1;f*IgJ0o@Q=`d;$gu7+Y&^ovYc9BH12SF%p-8n;Aaie9{vc%wb4QWTyGQM$x{Sm~Gn$h5sKU!WS1}UP;Lw|A)b(!wdoj z26Xuw)>ZPFf#I2w^LKo!JqUb_K?6MH=U-m)46|dr#n3d0tBu{p%4a;r80ak;(;Y9U zaZ&x4MiM(80Z82kr7g4lKSt)yZ+&DdOS7x&wN3FW8((<`)&{W`s4s6-m47a^tg0)W zzakf!YCJ8K6;O|Q^-H*Sm&bv=sH|^6QQGcug%&5dcY%m zY8UVe$4wAcvo;Mm5jN<58nFpJVwlkds`!`eJ09gWZXNh2IEbXN!Qhss z7jSCT^DkZ0R9rE`itK3|qCasLuUB}mH&`9c%Q*4?|K0zApg}{_0qMQ*vAu!uqU-K& ze@sD+LFOhS@NK0J$k+W2QO}q&Z@m;)&cEpxu{@?@8y||s!+l}i?&u%2StfP)bAKFz9MEIlCc;jmdm91*-SlsDbUgul$wG`>zoO*Aim!df|B5TD7PFnOI_yAbPe zS^d$r_hYFZDw6P@qt|2`meU>ocTopz6=A-5aVk6_qV~qU0L5Sg(nX<}`0qkTTa)AyP zsYs`EKyWV7QTZzIQeG_eE;v)T1VuFVy9HKSrz9qNAhEUJgVVQz!u&SOqA-^{9B0M!9owf{>6Monoa6~v-s z^2ndB{ISe`+o!!tz^Hr`wtku!m;_|(YNZ;cGMomcbQm3_f*f131M@4TB<@sKRj6Al z-OYj5rqMU(z^`hZ7mZfod3=!~cEIyX2jwQPhUC64^l zgJVY_dcK2a6(LrgrmU*E1HVe)!Y(K!UYH{=N@=Tq^qi{v-K+D;mmXK+Xn#h@Ud^ddz{1QbM&A|gdF6a|&ui;zff zLO`SnL_h_UjtU48dgxt>AR$Buy#+{5Zr=MV--U0jyZ7hgs); zvElL2vx?C(d`GR)cL$4_$HM6b24w34jEB#% z*0D1zEM^uKOvnDlF9!UR%qsYIP>x!jaqjMaKIxY0g4>3>DYbKPN5IyaabAXYb4t$54 zM$8|$yCmvAjP;ed**Az;K&({GTM5o#IW*sW2vo|E$lb1a1k=S~W%TLMn(wI@c}8_2 zT_W^67>i%8$x4?UWVB92Jqhwt*{$Vhv!{;p%2R%+m%7=?0}z)<_9r#pecxh=bl!M5 zrU;!lar$`9uO;b+Ay9)mC+<8kcYNi^0Ur#7>4?*p^T^^lNy2J1Z{EDQ^P$G3Tuwq- zdOuz}rjFc=9;pj8hX;i(Zsb%MCrdb(>-5Ua(zC1xs2p)o> zXI;ZBJ3e2N?W|U93j8uO7Qbts#7BdOK2B=dbQt%{N~mco>i$jQh`+g?X6`-G5j)&I z1DW0!Y9R?-ogFrsWGIsNTeqv<9n5qXDVzG~&$d;(t>bA{$3b+M`F-VW$xmP8Sw2;w z^PZ5_#YmZk)5jz%dAh&27JCBx7#-`hGw+Xvm@cEm_~@%EmtKG28GMgpDDu3?eD(y< zH#a-mV9v6%wA5B=_ow+)daA&Z=TlV$W}HGo_v+40==J~p`BFvm<=%2Qovdr&?Y}8t zI8Q(gWa%t3eIMY<--bc6;&*7(MEb$*q12D>lpXiq6+A9bdu`b+y+ ze&kl9&_kC^@BCWrj=Nh^nekRs@5bCLEc_~8Fs10(XpIOr6cKq3LXL7@%Vj24>86mObdHQTh9pz$X-?Z=~SP|FNxi9Rpa&)6D5a^11y#r>enMX_kG*^lJ|m zGArlW=H=@O{OcITmwax}qj?lx&)WQR0)fxJ-AOAoDFLe6ST{ceb9t4vgFCawAHuY_ z@#2@iaDazZ45x6MN=B+=VnRFWy_}9YbHPw;JbeLhUit-3`TxTYcb=OY6(eB$)PbJw z@n5b$OwK|+FWOb}BG0w%F?BNlSAIQ}ac=Nj$IGl(9z0W+#$MG@`>$h~L<_b~`(HBxP#V%jVh=PG!nhh^M zd`~~@Vk#?hTAyR9XsEk7R$o}GxnPxp?XBFLv+sNQp4{j5O=kVj`&@zpzxCT}-8oM* z{z?9au1fXJhr+5>`aa6dF{Lv|NeKzLHfD#~X^9>Zl|t%ql6*^_;jz#O-ea`soTWa# zz6M@j;z^s09Q4qcE(=S$=;8n1GadTbJ32GgxnWS5xR{tDo!gi9Soi&&Kf%e8pBo=| zT+2t_y$!F9+BE)zxtU}+V?XyuI6OcvFNqzGw^_s7jsHn z?aX3tr>!nZc_4e=>c+}&IJ?Rl)X;Z9JA5K2|@w!7-VZ<#fLO6fXe8`_G=0 zb`koHZ&r&pnsH>^#=z;&Ndux*%UmljXmHszg`Fz6I%50(1+4L_7KO->$m3k2G zoV^P_Gl(YKaZYsBAMEO`7s>z4dLH+hyoZ9Hum6Bj{t0Q|HKFoWjasYS0G*;j_I}`} z#MK0!N|g@&#y`dlFX-Tf`SLR}HLjqopE$1>_d3-6BnVOZ-}C@*t z&#`*jTsAlGbDM{gP14P zj&CP~RMtRLG6qO%hf(*6A(TH`U>t;6Gtq~HS7!SwMHEiZDMBG=EvS0{nQV)pl5Erg zb~9@ZP4=YJurLaOHVZPJ*$-=eM@gsi9^h2&y6adQNEzU-0l4ZkQ zpl+sgL?syr4g`LL!yReqtpa*Ji>WEu#QOP=xw}^(*nGCduu={nW^iGr5$VJ_ zp8YO^;#;(N`-wMdn z2O3F^9+L>xR1NIImB6$gQ5nW$Pl12^j}rg6lTFu}r0G>n$W46|;d5n$Y*WnYm1+hp zR+wLcwe3zv-?bjOcpB?duHo`DPQ^Olg?80LE8r&)F`9#FRyiWy(>1t;Veq94^H8nRm%h zUk?Ph%+CX#g-sat8iqw>Z`3Uw(%u?~MpDNlLAN$bikw6(Dl{)my{c}7*y@r6ahuZH zwV}M7e81)}@miM^4sTP*JJ0CaVQQK++J5ysie5`FxYV6eXorV&DnDug1Om{WuY6x>S ze?k&0#;IIIux=qFEC1mH40~l`AgQIzB}=B8Y1k{TPn2oSj%&;`&AkUF(BBPpNproIWWS|*oB4mH6-@i-0*AUizX3ewvu8j z6EcPr(W=hw&H^yEcudV`gRm&G8U4_xr=>8e2E;0W;YkH12AKtsgY-yL;L(PkcxvRt zimzt4I)5}(R+aJVe3^Ws7cxDXrQ!0plB9+_4x`Cm`kQ0f^t}~5Ix^fWpZz1F=U!5t zagS>eXaRF^1VI3cfer~gA1{Q795Q>rias#p?(8`UF917pC22)`sU@n64-j45*hdYj zaCp{Y`925g8=GfCbs_TI{IBZEjrL4ArTWAAchqF&_~A`LqTyGH>fao9bgv8|Bq0z( zI3rsmr;q$=*I-zHE`_mcen9J4U#c%Q<`ZSufG0p9h}^$6epo9*)q9em73!T{<%%uS zc7Z&;AbJKT7gzVH8^=gaiR1iJTq++P^rhCmG?+i@M%;i};uSeaR`9)^f zw=IV}r380=HHvbo>itHJZJi6IMjoKUDCBV+;ie0e`QyZ*J0E;=cU4sR&*Wt#fuI7H zFkQq4l3b?Ap>0~}TC0fQ(QxnejCUDcGKjoStpbs17ZIH7P^|6l86aY0OB{^ar)7j5 zw(KaGOp4J^qDh^%G7ohEZW3{on4~p(m8Rl0*F=sGZWucY<>KN0%c$V{8|%lp~F zlH&G}r$F8g(Yzf@%|7ky(BO803t0aep(L8be&U{_hgGQ5@E{uHS<-0CWB$&6L46Q( z?$sh6Ud<&mIYVGu{l*Q7->pN{2%{)q9YFh#V7w|un!1UPaZUP(s}li;{IP<({7sd& z24XpufVsqJF+^D!dC{*i9V38=P}b0^E=nu6#XYY}2s>i~@RjwYo{w9o;R~JUTO|mY zb6yB|3ZEUGO?h;X1V#HO0>E>!D_PT=v)}Ly6SjR)X9v`Vvpw!uPE!}>aZKRwA;_^s z@xA>+!mBET0h|IygHS50v(r^#yu}#JiY+!nUUxxM`lK~|1ob`}7&^HAZJlN*Z>UXS zs{O6E3ybpVc0V&|k023v_I8!MQW-IynP0P>>S zkGqmr(oXmGeC>-Ee5-tuS#^JmFx6_)oCqYu+S1cC!dDMFbl_`U7)v#@6yT~`)iu11 z^5sV=m%_%F%>^o5v_=#5J>Aq#+{?=D!itHa3G(yLg<)#Qh{woRi`P+Os+xf^RR!Bj zA~ok;?}R1yxh9vp&>a4JUWfT!VTgwKwR@o-29)$1-#3b7@enSSVsFwX`BtoHyov&u zkP9mh35XaEd?s?t(M#EDlWl)7EJCDNIm(ccCg1X#Gbnxh!KTs*HVa?sfAH#tt!MZ* z;ZQ-@3#rklP!<`V0aBE5mGbMa*WBWw?y0e}jmSrpyG-#@-1g9&`YqSR5?ik)3%AR) z`2D5;3)SD;2~Z+xI$ziWAjJ5JV1s0B_z{SZ8L)uMgRN1Rf{#;TY(<=3%#R&Yd5lS= zWfN0(l-4tc_`IX5JUaR9@S3DcDk0P3Z8r?mNKb5#Sy5(urO~e09|{DyGn`O}S3tWs zu!FmiSg?D&*r(S*d5l;C-z1|~BMjMJm&kjVJYT|lBz)ws!kH06!R$bpNZSbuKH%HluylM4{k51K;YcsyceL1@D>pJ z#oN>MvOKSl(GTzy>zFs6CREkfsR43iS95C%*%6P9(V7 zi%TBt0=}L1KtZjiUvb(ytOB%Df)r^nTgihK^JqO$`}U+VtNHROu9giW-wSWNgX{%g zZ}$$EsLvBe#a4{A)yX?Y#+XR}=x-e(#4E3?{YtFQ`azObrv7RfY%*>*e!?dO{??ir z;hWUM3b#CIZC!m4pC#sMAc9+aHUN9o{q4h)RdhHvKPdq@@1?}8A8*08PTqJ@jZ?pI zeyMslWGcfTQyfgwIr`aW5<9lGdGQ2k@6|{7YYBF0AK6XRo6u&7Lax?-?px_xBIi4yrB5Ty-9h2& z@GB?yHg3Zgh!g9H?=sfVwiEJS0D7zOpzYw>mm8}ns7Xdh!~7&{>ToqcGI&ah?6x5} z$ZGc)+Meexk3g}&WvkUwihnklfBCSpxAl02EvVpYiR!=MK7VdIpi4g0mDXn+yuQ|)`oDet~DND3Cj3nTDiQsVLJgz8QVW(l%Oh>`iNjGe^xT8<) z?3)o}l`L-|Xnqo(M)aMnJpfb!QvI9xh%KZhv0zt;ue(7NiT>N&ecT1Z7VtJYlhUAt zLlJfwm*9FtoU}PtQfgQCMNnp+WvDPEbehov(B9WX_(>V$* zKtan+?w`Nx*SUf<@J}-#9hLo%`ewc`G7s0>N9kpR%K2vFhkGDJJB~|Jq4oBt1hPc# zb5ufb9$c8oR_*m>kY<_RWm|!S+wdb`i$Nc%Zh=i&jl?#jJdPi4H*kL18P#i>G&ap(l1 zG>LnwRtVTrh0Vnf3|AdU;7Z{{Um=#*TJLZ_(S+*=lug#~QwaM#fjf7&0y^D?$W2|U zkF)_`$Q0k3$%W$lb*MnHFG3&FAvwqk+zi+(&VWrHb_4p%o%FO_5Xu&0LJx>|Tn29k z?3pN}N4pQ1t{G5AQ{nUEp1YJa19k#M zifuw!6Z_J0xx6Q5c?0 z3#P1!O9M)2u$yyKr)W4g=3xNbwaY|p>V4V2K(wUZgRlcZqunVhqpgX^D%SzYH(Gvt zC#?N=KNar*unwrX(dTl7t^t2?7gQ^O^t9Z*4mc4657{^^{P95%Y-84Cx%d#^szd^p zpuATAv%vgasaF}+mMSSVyovwvx{=|spkXSon3Pe9*B@;xi? z;`ybv`a+>Ck@hWD_PKi#zF7Ap8mqx_@KpT8DRa?BP3FMUPv;N45hkV z)9469X99PIOa$UZE|LWsS#rg|u)l&O00Ltu>$1Zmwk6qTSf(WphR{$%QzQ%yN$Hf1 zu8I6$U!ffxJ$u18-QY~N(*jR`DeFcNQuTI99@hS%TRV=0{Gnv0?@8+Sm=?ES)ot|{ zGTUrB14MJjnx^{su(JcvsyXzYcdBDa;Ybt*o{i8R2PLB6o^UI8Te?Z zbsm3cwOm6Keo`sD5}lM z{~q~u$6dk5tJ8bG8&Oi)rT@SYNzNbiPXzH}A{GE<;UM4&jti1K4*7Gq_{pub5qm|r z?H(c?9#%z_FNH6L)o}GYqo0*A!Flm%9%3sc0e}NbA^ofHTv{mVd$UBxHKPU9Fiw(emP*LiICYp+ck)9sE`95b z$@dA?C>5eyU}8;CK7Kt&El>?x3wew#Kr5&XUT4EI6}6t+Vj=I=;t!86AUqBdyo&=; z=n%A~JmuSi6E2HNwD+)$<;UZF1e2y+S3s&o>TX`6k=k_6s5R27*=Vv|2b-o;WlsxD z9y(chN0Ow$X(X;q;ht+7Dx<85&Un`roBIwI8po+rCm zQg#&%_ZA2q)&dX*t8bqo2ef)_WBH5oiDj^GZng0r9Np(S$ns)gySho;Ia1*7!dIF;>duGYALwdbQ-E{N{^c(Eer+(*m=EGGr3X++ z0e^&=O7Cw`)G5{!ZyD0!|FZH*z_vh`>K=W7Yk{clNs`xrm5^{)?ApNU&;h-S1;-~w zN(5DX;(e9W|(W z5%@x`K!yJTn%h8>lDI!6%S)kt!5!)4zT0pZ-hTla4-(r)!p1>b4m^Fy_q5wIZzauSAms?sZw{C8}t3?$jI} z1uBuvyIZs-;C^NrvF|H27rGCvB}W>nwz?Rb?+{dYo_xF`_A(us)i2qM#t6=ssEcEK z2Pxs~%GlsB{;;yYCh#^F1V$~S8NQy`0Lzg%iYq7)zzP!Un`LpiMpN3ZC`6*44zfmG z68#_2Jk`4SpNA@)X}c2Iym<0&7#OB0qo{J(nd~=8K}&g4uag!v$u}TU^aY`?Jpu4m zvDVBb_vz-yBMpF(8M^A1Em`|lTnLO6@mgybZ~sliN5Gbf;FEhX1Jci4|H0k4Rx2wY z3rAK3@yEj54es`ZR1Hs`1kUUvt>MGy&_^8HxTLtPj;lqA9~q)43^XZ-l?+knLicm3 z_b<39Nv-PVjb|IXd7b#5@R#D{_KV%z@B5K-@!|@^Oqb4!4 z?)3%BSy`Z7KUE&}>G~zuB-B;y3tZ^1gCi0bzfh_0C6~qwNC(`CR-XZ{qQGh2!6t$| zfHAF;?%byxw9&~u3+p1!m-njES%8SwL$?QZsXw4O%PQlV`)V*A+SEyM`aS|$d(;F$ z+c-!uBp zBT>bX`+SpO69CA4+Lt4G4Wm+qQXj6lgbMopr25iAs1XCgk^+_oTSnSr!JkxK-b1wA zGZ=p0oy=Nk_-=TJP-_wi{krF6SIH){KCZv}+Z0HNp-;;em<~*;Op6u?;5J-8~^{)SVWmoHVeSUJJK)e1Ev8>PZm7{~+i02Jm+|-uP znL66E3&9!qNH4ULP<^z@7a@p1zo z54zqYhM)ZdG`#@8bw9?no*IK=skjio6B`=y-0A+K+b*^;zmA&3<82(Rcn#w+4qR|i z?*XiO+*pcLiIh^l=qcyv@$^Q#Wxse{E@?+dt7xnYwk^>1Ex~CS*R;^Xyk~A1ZMIxX z{dwe#v;{b=62qaiGHRl^SOXmpUc=7VyXaub3Hd5ldPMK*$?(D0`v>`pyz^hI_Ym#W zJ}F#^Zdj^=4IBXoE_ZN0$Rbo|&7WS5I&bf2L?Uos-KvTbIU!R`%!mHoh!g zb)3^)*0z(976U34d&GgMT`N<7+!WsbOfI7Fst2ab2(#W|I6pH>>vrcYzmWsxk^20q zn{>`caG{B*mjC&bOkzK96903RVZ*FsL&g95!A7VFcP}MO3pRwo5<>rVAewG-~ab1pp@&&7d~2kT`a?eUoJ4+_bs%3rIui|MwADF77sr< zNqpO_@#{2Y@P+H2FJI2Me8XDju7QpeS(o^_J=qxvC5JY3m954XYN8Im1QvH^Eo4GV z{R1Iv?d`+xiRMkj`nmw|-!=Z%MK+!fwBEy8`P9W9iqzANtwuoXHV?gq_Tm)#vt!4O mah{w8e$&*lI!(X-|B6?~jLNElMhfAdrwncz->T5DkN7_}uHbtB diff --git a/src/compiler/compile/Component.ts b/src/compiler/compile/Component.ts index ed2b10e40432..a5a31c807004 100644 --- a/src/compiler/compile/Component.ts +++ b/src/compiler/compile/Component.ts @@ -8,7 +8,7 @@ import { create_scopes, extract_names, Scope, - extract_identifiers + extract_identifiers, } from './utils/scope'; import Stylesheet from './css/Stylesheet'; import { test } from '../config'; @@ -155,7 +155,7 @@ export default class Component { ) || { start: 0, end: 0 }; this.warn(svelteOptions, { code: 'custom-element-no-tag', - message: `No custom element 'tag' option was specified. To automatically register a custom element, specify a name with a hyphen in it, e.g. . To hide this warning, use ` + message: `No custom element 'tag' option was specified. To automatically register a custom element, specify a name with a hyphen in it, e.g. . To hide this warning, use `, }); } this.tag = this.component_options.tag || compile_options.tag; @@ -190,7 +190,7 @@ export default class Component { this.add_var({ name, injected: true, - referenced: true + referenced: true, }); } else if (name[0] === '$') { this.add_var({ @@ -198,7 +198,7 @@ export default class Component { injected: true, referenced: true, mutated: true, - writable: true + writable: true, }); const subscribable_name = name.slice(1); @@ -289,7 +289,7 @@ export default class Component { } const imported_helpers = Array.from(this.helpers, ([name, alias]) => ({ name, - alias + alias, })); create_module( @@ -305,7 +305,7 @@ export default class Component { .filter(variable => variable.module && variable.export_name) .map(variable => ({ name: variable.name, - as: variable.export_name + as: variable.export_name, })) ); @@ -342,9 +342,9 @@ export default class Component { reassigned: v.reassigned || false, referenced: v.referenced || false, writable: v.writable || false, - referenced_from_script: v.referenced_from_script || false + referenced_from_script: v.referenced_from_script || false, })), - stats: this.stats.render() + stats: this.stats.render(), }; } @@ -409,7 +409,7 @@ export default class Component { source: this.source, start: pos.start, end: pos.end, - filename: this.compile_options.filename + filename: this.compile_options.filename, }); } @@ -441,7 +441,7 @@ export default class Component { pos: pos.start, filename: this.compile_options.filename, toString: () => - `${warning.message} (${start.line}:${start.column})\n${frame}` + `${warning.message} (${start.line}:${start.column})\n${frame}`, }); } @@ -453,7 +453,7 @@ export default class Component { if (node.type === 'ExportDefaultDeclaration') { this.error(node, { code: `default-export`, - message: `A component cannot have a default export` + message: `A component cannot have a default export`, }); } @@ -461,7 +461,7 @@ export default class Component { if (node.source) { this.error(node, { code: `not-implemented`, - message: `A component currently cannot have an export ... from` + message: `A component currently cannot have an export ... from`, }); } if (node.declaration) { @@ -531,10 +531,10 @@ export default class Component { if (node.type === 'LabeledStatement' && node.label.name === '$') { component.warn(node as any, { code: 'module-script-reactive-declaration', - message: '$: has no effect in a module script' + message: '$: has no effect in a module script', }); } - } + }, }); const { scope, globals } = create_scopes(script.content); @@ -544,7 +544,7 @@ export default class Component { if (name[0] === '$') { this.error(node as any, { code: 'illegal-declaration', - message: `The $ prefix is reserved, and cannot be used for variable and import names` + message: `The $ prefix is reserved, and cannot be used for variable and import names`, }); } @@ -562,7 +562,7 @@ export default class Component { if (name[0] === '$') { this.error(node as any, { code: 'illegal-subscription', - message: `Cannot reference store value inside - \ No newline at end of file diff --git a/test/js/samples/inline-style-optimized-multiple/expected.js b/test/js/samples/inline-style-optimized-multiple/expected.js index 0a9d0a1e8eba..84a38abd7bbe 100644 --- a/test/js/samples/inline-style-optimized-multiple/expected.js +++ b/test/js/samples/inline-style-optimized-multiple/expected.js @@ -44,7 +44,7 @@ function instance($$self, $$props, $$invalidate) { let { x } = $$props; let { y } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("color" in $$props) $$invalidate(0, color = $$props.color); if ("x" in $$props) $$invalidate(1, x = $$props.x); if ("y" in $$props) $$invalidate(2, y = $$props.y); diff --git a/test/js/samples/inline-style-optimized-url/expected.js b/test/js/samples/inline-style-optimized-url/expected.js index 0debb035854f..77870348a572 100644 --- a/test/js/samples/inline-style-optimized-url/expected.js +++ b/test/js/samples/inline-style-optimized-url/expected.js @@ -37,7 +37,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { data } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("data" in $$props) $$invalidate(0, data = $$props.data); }; diff --git a/test/js/samples/inline-style-optimized/expected.js b/test/js/samples/inline-style-optimized/expected.js index b7db0f1cf30b..5bef284f0946 100644 --- a/test/js/samples/inline-style-optimized/expected.js +++ b/test/js/samples/inline-style-optimized/expected.js @@ -37,7 +37,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { color } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("color" in $$props) $$invalidate(0, color = $$props.color); }; diff --git a/test/js/samples/inline-style-unoptimized/expected.js b/test/js/samples/inline-style-unoptimized/expected.js index 0688f14b9b24..fdff685eade2 100644 --- a/test/js/samples/inline-style-unoptimized/expected.js +++ b/test/js/samples/inline-style-unoptimized/expected.js @@ -54,7 +54,7 @@ function instance($$self, $$props, $$invalidate) { let { key } = $$props; let { value } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("style" in $$props) $$invalidate(0, style = $$props.style); if ("key" in $$props) $$invalidate(1, key = $$props.key); if ("value" in $$props) $$invalidate(2, value = $$props.value); diff --git a/test/js/samples/input-files/expected.js b/test/js/samples/input-files/expected.js index 8adc7443f5c1..1c1e57fc9b24 100644 --- a/test/js/samples/input-files/expected.js +++ b/test/js/samples/input-files/expected.js @@ -13,7 +13,6 @@ import { function create_fragment(ctx) { let input; - let mounted; let dispose; return { @@ -22,20 +21,16 @@ function create_fragment(ctx) { attr(input, "type", "file"); input.multiple = true; }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, input, anchor); - - if (!mounted) { - dispose = listen(input, "change", /*input_change_handler*/ ctx[1]); - mounted = true; - } + if (remount) dispose(); + dispose = listen(input, "change", /*input_change_handler*/ ctx[1]); }, p: noop, i: noop, o: noop, d(detaching) { if (detaching) detach(input); - mounted = false; dispose(); } }; @@ -49,7 +44,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(0, files); } - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("files" in $$props) $$invalidate(0, files = $$props.files); }; diff --git a/test/js/samples/input-no-initial-value/expected.js b/test/js/samples/input-no-initial-value/expected.js index 3354aa31117e..f72daa22a302 100644 --- a/test/js/samples/input-no-initial-value/expected.js +++ b/test/js/samples/input-no-initial-value/expected.js @@ -20,7 +20,6 @@ function create_fragment(ctx) { let input; let t0; let button; - let mounted; let dispose; return { @@ -33,21 +32,18 @@ function create_fragment(ctx) { attr(input, "type", "text"); input.required = true; }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, form, anchor); append(form, input); set_input_value(input, /*test*/ ctx[0]); append(form, t0); append(form, button); + if (remount) run_all(dispose); - if (!mounted) { - dispose = [ - listen(input, "input", /*input_input_handler*/ ctx[2]), - listen(form, "submit", /*handleSubmit*/ ctx[1]) - ]; - - mounted = true; - } + dispose = [ + listen(input, "input", /*input_input_handler*/ ctx[2]), + listen(form, "submit", /*handleSubmit*/ ctx[1]) + ]; }, p(ctx, [dirty]) { if (dirty & /*test*/ 1 && input.value !== /*test*/ ctx[0]) { @@ -58,7 +54,6 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(form); - mounted = false; run_all(dispose); } }; diff --git a/test/js/samples/input-range/expected.js b/test/js/samples/input-range/expected.js index a855ca3653fe..17a806544907 100644 --- a/test/js/samples/input-range/expected.js +++ b/test/js/samples/input-range/expected.js @@ -16,7 +16,6 @@ import { function create_fragment(ctx) { let input; - let mounted; let dispose; return { @@ -24,18 +23,15 @@ function create_fragment(ctx) { input = element("input"); attr(input, "type", "range"); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, input, anchor); set_input_value(input, /*value*/ ctx[0]); + if (remount) run_all(dispose); - if (!mounted) { - dispose = [ - listen(input, "change", /*input_change_input_handler*/ ctx[1]), - listen(input, "input", /*input_change_input_handler*/ ctx[1]) - ]; - - mounted = true; - } + dispose = [ + listen(input, "change", /*input_change_input_handler*/ ctx[1]), + listen(input, "input", /*input_change_input_handler*/ ctx[1]) + ]; }, p(ctx, [dirty]) { if (dirty & /*value*/ 1) { @@ -46,7 +42,6 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(input); - mounted = false; run_all(dispose); } }; @@ -60,7 +55,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(0, value); } - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("value" in $$props) $$invalidate(0, value = $$props.value); }; diff --git a/test/js/samples/input-value/expected.js b/test/js/samples/input-value/expected.js index 781a2ae60358..31be2895ac0d 100644 --- a/test/js/samples/input-value/expected.js +++ b/test/js/samples/input-value/expected.js @@ -20,7 +20,6 @@ function create_fragment(ctx) { let h1; let t1; let t2; - let mounted; let dispose; return { @@ -32,17 +31,14 @@ function create_fragment(ctx) { t2 = text("!"); input.value = /*name*/ ctx[0]; }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, input, anchor); insert(target, t0, anchor); insert(target, h1, anchor); append(h1, t1); append(h1, t2); - - if (!mounted) { - dispose = listen(input, "input", /*onInput*/ ctx[1]); - mounted = true; - } + if (remount) dispose(); + dispose = listen(input, "input", /*onInput*/ ctx[1]); }, p(ctx, [dirty]) { if (dirty & /*name*/ 1 && input.value !== /*name*/ ctx[0]) { @@ -57,7 +53,6 @@ function create_fragment(ctx) { if (detaching) detach(input); if (detaching) detach(t0); if (detaching) detach(h1); - mounted = false; dispose(); } }; diff --git a/test/js/samples/input-without-blowback-guard/expected.js b/test/js/samples/input-without-blowback-guard/expected.js index 6c5b2156232f..1e379032f3a1 100644 --- a/test/js/samples/input-without-blowback-guard/expected.js +++ b/test/js/samples/input-without-blowback-guard/expected.js @@ -13,7 +13,6 @@ import { function create_fragment(ctx) { let input; - let mounted; let dispose; return { @@ -21,14 +20,11 @@ function create_fragment(ctx) { input = element("input"); attr(input, "type", "checkbox"); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, input, anchor); input.checked = /*foo*/ ctx[0]; - - if (!mounted) { - dispose = listen(input, "change", /*input_change_handler*/ ctx[1]); - mounted = true; - } + if (remount) dispose(); + dispose = listen(input, "change", /*input_change_handler*/ ctx[1]); }, p(ctx, [dirty]) { if (dirty & /*foo*/ 1) { @@ -39,7 +35,6 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(input); - mounted = false; dispose(); } }; @@ -53,7 +48,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(0, foo); } - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("foo" in $$props) $$invalidate(0, foo = $$props.foo); }; diff --git a/test/js/samples/instrumentation-script-if-no-block/expected.js b/test/js/samples/instrumentation-script-if-no-block/expected.js index 7f51c6455007..f45e52aebd3b 100644 --- a/test/js/samples/instrumentation-script-if-no-block/expected.js +++ b/test/js/samples/instrumentation-script-if-no-block/expected.js @@ -20,7 +20,6 @@ function create_fragment(ctx) { let p; let t2; let t3; - let mounted; let dispose; return { @@ -32,17 +31,14 @@ function create_fragment(ctx) { t2 = text("x: "); t3 = text(/*x*/ ctx[0]); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, button, anchor); insert(target, t1, anchor); insert(target, p, anchor); append(p, t2); append(p, t3); - - if (!mounted) { - dispose = listen(button, "click", /*foo*/ ctx[1]); - mounted = true; - } + if (remount) dispose(); + dispose = listen(button, "click", /*foo*/ ctx[1]); }, p(ctx, [dirty]) { if (dirty & /*x*/ 1) set_data(t3, /*x*/ ctx[0]); @@ -53,7 +49,6 @@ function create_fragment(ctx) { if (detaching) detach(button); if (detaching) detach(t1); if (detaching) detach(p); - mounted = false; dispose(); } }; diff --git a/test/js/samples/instrumentation-script-x-equals-x/expected.js b/test/js/samples/instrumentation-script-x-equals-x/expected.js index ea0d65acb906..9fe964097829 100644 --- a/test/js/samples/instrumentation-script-x-equals-x/expected.js +++ b/test/js/samples/instrumentation-script-x-equals-x/expected.js @@ -21,7 +21,6 @@ function create_fragment(ctx) { let t2; let t3_value = /*things*/ ctx[0].length + ""; let t3; - let mounted; let dispose; return { @@ -33,17 +32,14 @@ function create_fragment(ctx) { t2 = text("number of things: "); t3 = text(t3_value); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, button, anchor); insert(target, t1, anchor); insert(target, p, anchor); append(p, t2); append(p, t3); - - if (!mounted) { - dispose = listen(button, "click", /*foo*/ ctx[1]); - mounted = true; - } + if (remount) dispose(); + dispose = listen(button, "click", /*foo*/ ctx[1]); }, p(ctx, [dirty]) { if (dirty & /*things*/ 1 && t3_value !== (t3_value = /*things*/ ctx[0].length + "")) set_data(t3, t3_value); @@ -54,7 +50,6 @@ function create_fragment(ctx) { if (detaching) detach(button); if (detaching) detach(t1); if (detaching) detach(p); - mounted = false; dispose(); } }; diff --git a/test/js/samples/instrumentation-template-if-no-block/expected.js b/test/js/samples/instrumentation-template-if-no-block/expected.js index 0c2713a9cc64..6f3bea4010fc 100644 --- a/test/js/samples/instrumentation-template-if-no-block/expected.js +++ b/test/js/samples/instrumentation-template-if-no-block/expected.js @@ -20,7 +20,6 @@ function create_fragment(ctx) { let p; let t2; let t3; - let mounted; let dispose; return { @@ -32,17 +31,14 @@ function create_fragment(ctx) { t2 = text("x: "); t3 = text(/*x*/ ctx[0]); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, button, anchor); insert(target, t1, anchor); insert(target, p, anchor); append(p, t2); append(p, t3); - - if (!mounted) { - dispose = listen(button, "click", /*click_handler*/ ctx[1]); - mounted = true; - } + if (remount) dispose(); + dispose = listen(button, "click", /*click_handler*/ ctx[1]); }, p(ctx, [dirty]) { if (dirty & /*x*/ 1) set_data(t3, /*x*/ ctx[0]); @@ -53,7 +49,6 @@ function create_fragment(ctx) { if (detaching) detach(button); if (detaching) detach(t1); if (detaching) detach(p); - mounted = false; dispose(); } }; diff --git a/test/js/samples/instrumentation-template-x-equals-x/expected.js b/test/js/samples/instrumentation-template-x-equals-x/expected.js index 55cd310661e7..ed095353bd53 100644 --- a/test/js/samples/instrumentation-template-x-equals-x/expected.js +++ b/test/js/samples/instrumentation-template-x-equals-x/expected.js @@ -21,7 +21,6 @@ function create_fragment(ctx) { let t2; let t3_value = /*things*/ ctx[0].length + ""; let t3; - let mounted; let dispose; return { @@ -33,17 +32,14 @@ function create_fragment(ctx) { t2 = text("number of things: "); t3 = text(t3_value); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, button, anchor); insert(target, t1, anchor); insert(target, p, anchor); append(p, t2); append(p, t3); - - if (!mounted) { - dispose = listen(button, "click", /*click_handler*/ ctx[1]); - mounted = true; - } + if (remount) dispose(); + dispose = listen(button, "click", /*click_handler*/ ctx[1]); }, p(ctx, [dirty]) { if (dirty & /*things*/ 1 && t3_value !== (t3_value = /*things*/ ctx[0].length + "")) set_data(t3, t3_value); @@ -54,7 +50,6 @@ function create_fragment(ctx) { if (detaching) detach(button); if (detaching) detach(t1); if (detaching) detach(p); - mounted = false; dispose(); } }; diff --git a/test/js/samples/loop-protect/_config.js b/test/js/samples/loop-protect/_config.js index 1dc927b4daae..fcbf8be09b18 100644 --- a/test/js/samples/loop-protect/_config.js +++ b/test/js/samples/loop-protect/_config.js @@ -1,6 +1,6 @@ export default { options: { dev: true, - loopGuardTimeout: 100 - } + loopGuardTimeout: 100, + }, }; diff --git a/test/js/samples/loop-protect/expected.js b/test/js/samples/loop-protect/expected.js index 1042b20823b8..c52d9df437e5 100644 --- a/test/js/samples/loop-protect/expected.js +++ b/test/js/samples/loop-protect/expected.js @@ -67,8 +67,6 @@ function foo() { } function instance($$self, $$props, $$invalidate) { - let { $$slots: slots = {}, $$scope } = $$props; - validate_slots("Component", slots, []); let node; { @@ -113,10 +111,12 @@ function instance($$self, $$props, $$invalidate) { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console_1.warn(` was created with unknown prop '${key}'`); }); + let { $$slots = {}, $$scope } = $$props; + validate_slots("Component", $$slots, []); + function div_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { - node = $$value; - $$invalidate(0, node); + $$invalidate(0, node = $$value); }); } diff --git a/test/js/samples/media-bindings/expected.js b/test/js/samples/media-bindings/expected.js index 867d4a7dadfb..0849a38b519b 100644 --- a/test/js/samples/media-bindings/expected.js +++ b/test/js/samples/media-bindings/expected.js @@ -19,7 +19,6 @@ function create_fragment(ctx) { let audio_updating = false; let audio_animationframe; let audio_is_paused = true; - let mounted; let dispose; function audio_timeupdate_handler() { @@ -43,7 +42,7 @@ function create_fragment(ctx) { if (/*seeking*/ ctx[9] === void 0) add_render_callback(() => /*audio_seeking_seeked_handler*/ ctx[18].call(audio)); if (/*ended*/ ctx[10] === void 0) add_render_callback(() => /*audio_ended_handler*/ ctx[19].call(audio)); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, audio, anchor); if (!isNaN(/*volume*/ ctx[6])) { @@ -56,23 +55,21 @@ function create_fragment(ctx) { audio.playbackRate = /*playbackRate*/ ctx[8]; } - if (!mounted) { - dispose = [ - listen(audio, "progress", /*audio_progress_handler*/ ctx[11]), - listen(audio, "loadedmetadata", /*audio_loadedmetadata_handler*/ ctx[12]), - listen(audio, "timeupdate", audio_timeupdate_handler), - listen(audio, "durationchange", /*audio_durationchange_handler*/ ctx[14]), - listen(audio, "play", /*audio_play_pause_handler*/ ctx[15]), - listen(audio, "pause", /*audio_play_pause_handler*/ ctx[15]), - listen(audio, "volumechange", /*audio_volumechange_handler*/ ctx[16]), - listen(audio, "ratechange", /*audio_ratechange_handler*/ ctx[17]), - listen(audio, "seeking", /*audio_seeking_seeked_handler*/ ctx[18]), - listen(audio, "seeked", /*audio_seeking_seeked_handler*/ ctx[18]), - listen(audio, "ended", /*audio_ended_handler*/ ctx[19]) - ]; - - mounted = true; - } + if (remount) run_all(dispose); + + dispose = [ + listen(audio, "progress", /*audio_progress_handler*/ ctx[11]), + listen(audio, "loadedmetadata", /*audio_loadedmetadata_handler*/ ctx[12]), + listen(audio, "timeupdate", audio_timeupdate_handler), + listen(audio, "durationchange", /*audio_durationchange_handler*/ ctx[14]), + listen(audio, "play", /*audio_play_pause_handler*/ ctx[15]), + listen(audio, "pause", /*audio_play_pause_handler*/ ctx[15]), + listen(audio, "volumechange", /*audio_volumechange_handler*/ ctx[16]), + listen(audio, "ratechange", /*audio_ratechange_handler*/ ctx[17]), + listen(audio, "seeking", /*audio_seeking_seeked_handler*/ ctx[18]), + listen(audio, "seeked", /*audio_seeking_seeked_handler*/ ctx[18]), + listen(audio, "ended", /*audio_ended_handler*/ ctx[19]) + ]; }, p(ctx, [dirty]) { if (!audio_updating && dirty & /*currentTime*/ 8 && !isNaN(/*currentTime*/ ctx[3])) { @@ -101,7 +98,6 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(audio); - mounted = false; run_all(dispose); } }; @@ -173,7 +169,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(10, ended); } - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("buffered" in $$props) $$invalidate(0, buffered = $$props.buffered); if ("seekable" in $$props) $$invalidate(1, seekable = $$props.seekable); if ("played" in $$props) $$invalidate(2, played = $$props.played); diff --git a/test/js/samples/non-imported-component/expected.js b/test/js/samples/non-imported-component/expected.js index 5a6b8e8bb730..2784fd17acb3 100644 --- a/test/js/samples/non-imported-component/expected.js +++ b/test/js/samples/non-imported-component/expected.js @@ -17,12 +17,10 @@ import { import Imported from "Imported.svelte"; function create_fragment(ctx) { - let imported; let t; - let nonimported; let current; - imported = new Imported({}); - nonimported = new NonImported({}); + const imported = new Imported({}); + const nonimported = new NonImported({}); return { c() { diff --git a/test/js/samples/optional-chaining/expected.js b/test/js/samples/optional-chaining/expected.js deleted file mode 100644 index 8aa94796c1b0..000000000000 --- a/test/js/samples/optional-chaining/expected.js +++ /dev/null @@ -1,189 +0,0 @@ -/* generated by Svelte vX.Y.Z */ -import { - SvelteComponent, - attr, - create_component, - destroy_component, - detach, - element, - init, - insert, - mount_component, - safe_not_equal, - set_data, - space, - text, - transition_in, - transition_out -} from "svelte/internal"; - -function create_fragment(ctx) { - let t0_value = /*a*/ ctx[0].normal + ""; - let t0; - let t1_value = /*b*/ ctx[1]?.optional + ""; - let t1; - let t2; - let t3_value = /*c*/ ctx[2]["computed"] + ""; - let t3; - let t4_value = /*d*/ ctx[3]?.["computed_optional"] + ""; - let t4; - let t5; - let t6_value = /*e*/ ctx[4]() + ""; - let t6; - let t7_value = /*f*/ ctx[5]?.() + ""; - let t7; - let t8; - let div; - let div_a_value; - let div_b_value; - let div_c_value; - let div_d_value; - let div_e_value; - let div_f_value; - let t9; - let component; - let current; - - component = new /*Component*/ ctx[6]({ - props: { - a: /*a*/ ctx[0].normal, - b: /*b*/ ctx[1]?.optional, - c: /*c*/ ctx[2]["computed"], - d: /*d*/ ctx[3]?.["computed_optional"], - e: /*e*/ ctx[4](), - f: /*f*/ ctx[5]?.() - } - }); - - return { - c() { - t0 = text(t0_value); - t1 = text(t1_value); - t2 = space(); - t3 = text(t3_value); - t4 = text(t4_value); - t5 = space(); - t6 = text(t6_value); - t7 = text(t7_value); - t8 = space(); - div = element("div"); - t9 = space(); - create_component(component.$$.fragment); - attr(div, "a", div_a_value = /*a*/ ctx[0].normal); - attr(div, "b", div_b_value = /*b*/ ctx[1]?.optional); - attr(div, "c", div_c_value = /*c*/ ctx[2]["computed"]); - attr(div, "d", div_d_value = /*d*/ ctx[3]?.["computed_optional"]); - attr(div, "e", div_e_value = /*e*/ ctx[4]()); - attr(div, "f", div_f_value = /*f*/ ctx[5]?.()); - }, - m(target, anchor) { - insert(target, t0, anchor); - insert(target, t1, anchor); - insert(target, t2, anchor); - insert(target, t3, anchor); - insert(target, t4, anchor); - insert(target, t5, anchor); - insert(target, t6, anchor); - insert(target, t7, anchor); - insert(target, t8, anchor); - insert(target, div, anchor); - insert(target, t9, anchor); - mount_component(component, target, anchor); - current = true; - }, - p(ctx, [dirty]) { - if ((!current || dirty & /*a*/ 1) && t0_value !== (t0_value = /*a*/ ctx[0].normal + "")) set_data(t0, t0_value); - if ((!current || dirty & /*b*/ 2) && t1_value !== (t1_value = /*b*/ ctx[1]?.optional + "")) set_data(t1, t1_value); - if ((!current || dirty & /*c*/ 4) && t3_value !== (t3_value = /*c*/ ctx[2]["computed"] + "")) set_data(t3, t3_value); - if ((!current || dirty & /*d*/ 8) && t4_value !== (t4_value = /*d*/ ctx[3]?.["computed_optional"] + "")) set_data(t4, t4_value); - if ((!current || dirty & /*e*/ 16) && t6_value !== (t6_value = /*e*/ ctx[4]() + "")) set_data(t6, t6_value); - if ((!current || dirty & /*f*/ 32) && t7_value !== (t7_value = /*f*/ ctx[5]?.() + "")) set_data(t7, t7_value); - - if (!current || dirty & /*a*/ 1 && div_a_value !== (div_a_value = /*a*/ ctx[0].normal)) { - attr(div, "a", div_a_value); - } - - if (!current || dirty & /*b*/ 2 && div_b_value !== (div_b_value = /*b*/ ctx[1]?.optional)) { - attr(div, "b", div_b_value); - } - - if (!current || dirty & /*c*/ 4 && div_c_value !== (div_c_value = /*c*/ ctx[2]["computed"])) { - attr(div, "c", div_c_value); - } - - if (!current || dirty & /*d*/ 8 && div_d_value !== (div_d_value = /*d*/ ctx[3]?.["computed_optional"])) { - attr(div, "d", div_d_value); - } - - if (!current || dirty & /*e*/ 16 && div_e_value !== (div_e_value = /*e*/ ctx[4]())) { - attr(div, "e", div_e_value); - } - - if (!current || dirty & /*f*/ 32 && div_f_value !== (div_f_value = /*f*/ ctx[5]?.())) { - attr(div, "f", div_f_value); - } - - const component_changes = {}; - if (dirty & /*a*/ 1) component_changes.a = /*a*/ ctx[0].normal; - if (dirty & /*b*/ 2) component_changes.b = /*b*/ ctx[1]?.optional; - if (dirty & /*c*/ 4) component_changes.c = /*c*/ ctx[2]["computed"]; - if (dirty & /*d*/ 8) component_changes.d = /*d*/ ctx[3]?.["computed_optional"]; - if (dirty & /*e*/ 16) component_changes.e = /*e*/ ctx[4](); - if (dirty & /*f*/ 32) component_changes.f = /*f*/ ctx[5]?.(); - component.$set(component_changes); - }, - i(local) { - if (current) return; - transition_in(component.$$.fragment, local); - current = true; - }, - o(local) { - transition_out(component.$$.fragment, local); - current = false; - }, - d(detaching) { - if (detaching) detach(t0); - if (detaching) detach(t1); - if (detaching) detach(t2); - if (detaching) detach(t3); - if (detaching) detach(t4); - if (detaching) detach(t5); - if (detaching) detach(t6); - if (detaching) detach(t7); - if (detaching) detach(t8); - if (detaching) detach(div); - if (detaching) detach(t9); - destroy_component(component, detaching); - } - }; -} - -function instance($$self, $$props, $$invalidate) { - let { a } = $$props; - let { b } = $$props; - let { c } = $$props; - let { d } = $$props; - let { e } = $$props; - let { f } = $$props; - let Component; - - $$self.$$set = $$props => { - if ("a" in $$props) $$invalidate(0, a = $$props.a); - if ("b" in $$props) $$invalidate(1, b = $$props.b); - if ("c" in $$props) $$invalidate(2, c = $$props.c); - if ("d" in $$props) $$invalidate(3, d = $$props.d); - if ("e" in $$props) $$invalidate(4, e = $$props.e); - if ("f" in $$props) $$invalidate(5, f = $$props.f); - }; - - return [a, b, c, d, e, f, Component]; -} - -class Component_1 extends SvelteComponent { - constructor(options) { - super(); - init(this, options, instance, create_fragment, safe_not_equal, { a: 0, b: 1, c: 2, d: 3, e: 4, f: 5 }); - } -} - -export default Component_1; \ No newline at end of file diff --git a/test/js/samples/optional-chaining/input.svelte b/test/js/samples/optional-chaining/input.svelte deleted file mode 100644 index 78edf2ca85d1..000000000000 --- a/test/js/samples/optional-chaining/input.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - -{a.normal}{b?.optional} -{c['computed']}{d?.['computed_optional']} -{e()}{f?.()} - -

- - diff --git a/test/js/samples/reactive-values-non-topologically-ordered/expected.js b/test/js/samples/reactive-values-non-topologically-ordered/expected.js index 15290496d527..3d266f10acfb 100644 --- a/test/js/samples/reactive-values-non-topologically-ordered/expected.js +++ b/test/js/samples/reactive-values-non-topologically-ordered/expected.js @@ -6,7 +6,7 @@ function instance($$self, $$props, $$invalidate) { let a; let b; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("x" in $$props) $$invalidate(0, x = $$props.x); }; diff --git a/test/js/samples/reactive-values-non-writable-dependencies/expected.js b/test/js/samples/reactive-values-non-writable-dependencies/expected.js index 5196a770d976..38bd356d85e4 100644 --- a/test/js/samples/reactive-values-non-writable-dependencies/expected.js +++ b/test/js/samples/reactive-values-non-writable-dependencies/expected.js @@ -5,7 +5,7 @@ function instance($$self, $$props, $$invalidate) { let { a = 1 } = $$props; let { b = 2 } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("a" in $$props) $$invalidate(0, a = $$props.a); if ("b" in $$props) $$invalidate(1, b = $$props.b); }; diff --git a/test/js/samples/select-dynamic-value/expected.js b/test/js/samples/select-dynamic-value/expected.js index 8777cd260072..a93a47bd3ac4 100644 --- a/test/js/samples/select-dynamic-value/expected.js +++ b/test/js/samples/select-dynamic-value/expected.js @@ -7,14 +7,14 @@ import { init, insert, noop, - safe_not_equal, - select_option + safe_not_equal } from "svelte/internal"; function create_fragment(ctx) { let select; let option0; let option1; + let select_value_value; return { c() { @@ -32,11 +32,27 @@ function create_fragment(ctx) { insert(target, select, anchor); append(select, option0); append(select, option1); - select_option(select, /*current*/ ctx[0]); + select_value_value = /*current*/ ctx[0]; + + for (var i = 0; i < select.options.length; i += 1) { + var option = select.options[i]; + + if (option.__value === select_value_value) { + option.selected = true; + break; + } + } }, p(ctx, [dirty]) { - if (dirty & /*current*/ 1) { - select_option(select, /*current*/ ctx[0]); + if (dirty & /*current*/ 1 && select_value_value !== (select_value_value = /*current*/ ctx[0])) { + for (var i = 0; i < select.options.length; i += 1) { + var option = select.options[i]; + + if (option.__value === select_value_value) { + option.selected = true; + break; + } + } } }, i: noop, @@ -50,7 +66,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { current } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("current" in $$props) $$invalidate(0, current = $$props.current); }; diff --git a/test/js/samples/src-attribute-check/expected.js b/test/js/samples/src-attribute-check/expected.js index 93638edfb43b..e03b3a6ba7ee 100644 --- a/test/js/samples/src-attribute-check/expected.js +++ b/test/js/samples/src-attribute-check/expected.js @@ -67,7 +67,7 @@ function instance($$self, $$props, $$invalidate) { let { url } = $$props; let { slug } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("url" in $$props) $$invalidate(0, url = $$props.url); if ("slug" in $$props) $$invalidate(1, slug = $$props.slug); }; diff --git a/test/js/samples/ssr-no-oncreate-etc/expected.js b/test/js/samples/ssr-no-oncreate-etc/expected.js index b91deb3e9732..803f06a8829d 100644 --- a/test/js/samples/ssr-no-oncreate-etc/expected.js +++ b/test/js/samples/ssr-no-oncreate-etc/expected.js @@ -15,7 +15,7 @@ function swipe(node, callback) { } // TODO implement -const Component = create_ssr_component(($$result, $$props, $$bindings, slots) => { +const Component = create_ssr_component(($$result, $$props, $$bindings, $$slots) => { onMount(() => { console.log("onMount"); }); diff --git a/test/js/samples/ssr-preserve-comments/expected.js b/test/js/samples/ssr-preserve-comments/expected.js index de9fa7582ed9..1dc12710c0bb 100644 --- a/test/js/samples/ssr-preserve-comments/expected.js +++ b/test/js/samples/ssr-preserve-comments/expected.js @@ -1,7 +1,7 @@ /* generated by Svelte vX.Y.Z */ import { create_ssr_component } from "svelte/internal"; -const Component = create_ssr_component(($$result, $$props, $$bindings, slots) => { +const Component = create_ssr_component(($$result, $$props, $$bindings, $$slots) => { return `
content
more content
`; diff --git a/test/js/samples/title/expected.js b/test/js/samples/title/expected.js index b10f569759d4..d4e7e1a58491 100644 --- a/test/js/samples/title/expected.js +++ b/test/js/samples/title/expected.js @@ -22,7 +22,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { custom } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("custom" in $$props) $$invalidate(0, custom = $$props.custom); }; diff --git a/test/js/samples/transition-local/expected.js b/test/js/samples/transition-local/expected.js index ea3d9db3d7e6..25a03f026f75 100644 --- a/test/js/samples/transition-local/expected.js +++ b/test/js/samples/transition-local/expected.js @@ -124,7 +124,7 @@ function instance($$self, $$props, $$invalidate) { let { x } = $$props; let { y } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("x" in $$props) $$invalidate(0, x = $$props.x); if ("y" in $$props) $$invalidate(1, y = $$props.y); }; diff --git a/test/js/samples/transition-repeated-outro/expected.js b/test/js/samples/transition-repeated-outro/expected.js index 12483ab91af7..1f76a93666be 100644 --- a/test/js/samples/transition-repeated-outro/expected.js +++ b/test/js/samples/transition-repeated-outro/expected.js @@ -102,7 +102,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { num = 1 } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("num" in $$props) $$invalidate(0, num = $$props.num); }; diff --git a/test/js/samples/use-elements-as-anchors/expected.js b/test/js/samples/use-elements-as-anchors/expected.js index d07411518e91..5be8808edbcf 100644 --- a/test/js/samples/use-elements-as-anchors/expected.js +++ b/test/js/samples/use-elements-as-anchors/expected.js @@ -243,7 +243,7 @@ function instance($$self, $$props, $$invalidate) { let { d } = $$props; let { e } = $$props; - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("a" in $$props) $$invalidate(0, a = $$props.a); if ("b" in $$props) $$invalidate(1, b = $$props.b); if ("c" in $$props) $$invalidate(2, c = $$props.c); diff --git a/test/js/samples/video-bindings/expected.js b/test/js/samples/video-bindings/expected.js index 8afa670bbb52..9c5467e1a05d 100644 --- a/test/js/samples/video-bindings/expected.js +++ b/test/js/samples/video-bindings/expected.js @@ -19,7 +19,6 @@ function create_fragment(ctx) { let video_updating = false; let video_animationframe; let video_resize_listener; - let mounted; let dispose; function video_timeupdate_handler() { @@ -39,18 +38,15 @@ function create_fragment(ctx) { if (/*videoHeight*/ ctx[1] === void 0 || /*videoWidth*/ ctx[2] === void 0) add_render_callback(() => /*video_resize_handler*/ ctx[5].call(video)); add_render_callback(() => /*video_elementresize_handler*/ ctx[6].call(video)); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, video, anchor); video_resize_listener = add_resize_listener(video, /*video_elementresize_handler*/ ctx[6].bind(video)); + if (remount) run_all(dispose); - if (!mounted) { - dispose = [ - listen(video, "timeupdate", video_timeupdate_handler), - listen(video, "resize", /*video_resize_handler*/ ctx[5]) - ]; - - mounted = true; - } + dispose = [ + listen(video, "timeupdate", video_timeupdate_handler), + listen(video, "resize", /*video_resize_handler*/ ctx[5]) + ]; }, p(ctx, [dirty]) { if (!video_updating && dirty & /*currentTime*/ 1 && !isNaN(/*currentTime*/ ctx[0])) { @@ -64,7 +60,6 @@ function create_fragment(ctx) { d(detaching) { if (detaching) detach(video); video_resize_listener(); - mounted = false; run_all(dispose); } }; @@ -93,7 +88,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(3, offsetWidth); } - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("currentTime" in $$props) $$invalidate(0, currentTime = $$props.currentTime); if ("videoHeight" in $$props) $$invalidate(1, videoHeight = $$props.videoHeight); if ("videoWidth" in $$props) $$invalidate(2, videoWidth = $$props.videoWidth); diff --git a/test/js/samples/window-binding-online/expected.js b/test/js/samples/window-binding-online/expected.js index 887195bce1b3..fa955e4fd59b 100644 --- a/test/js/samples/window-binding-online/expected.js +++ b/test/js/samples/window-binding-online/expected.js @@ -10,27 +10,23 @@ import { } from "svelte/internal"; function create_fragment(ctx) { - let mounted; let dispose; add_render_callback(/*onlinestatuschanged*/ ctx[1]); return { c: noop, - m(target, anchor) { - if (!mounted) { - dispose = [ - listen(window, "online", /*onlinestatuschanged*/ ctx[1]), - listen(window, "offline", /*onlinestatuschanged*/ ctx[1]) - ]; - - mounted = true; - } + m(target, anchor, remount) { + if (remount) run_all(dispose); + + dispose = [ + listen(window, "online", /*onlinestatuschanged*/ ctx[1]), + listen(window, "offline", /*onlinestatuschanged*/ ctx[1]) + ]; }, p: noop, i: noop, o: noop, d(detaching) { - mounted = false; run_all(dispose); } }; diff --git a/test/js/samples/window-binding-scroll/expected.js b/test/js/samples/window-binding-scroll/expected.js index 09a4d3737d29..30723cc142fc 100644 --- a/test/js/samples/window-binding-scroll/expected.js +++ b/test/js/samples/window-binding-scroll/expected.js @@ -25,7 +25,6 @@ function create_fragment(ctx) { let p; let t0; let t1; - let mounted; let dispose; add_render_callback(/*onwindowscroll*/ ctx[1]); @@ -35,21 +34,18 @@ function create_fragment(ctx) { t0 = text("scrolled to "); t1 = text(/*y*/ ctx[0]); }, - m(target, anchor) { + m(target, anchor, remount) { insert(target, p, anchor); append(p, t0); append(p, t1); + if (remount) dispose(); - if (!mounted) { - dispose = listen(window, "scroll", () => { - scrolling = true; - clearTimeout(scrolling_timeout); - scrolling_timeout = setTimeout(clear_scrolling, 100); - /*onwindowscroll*/ ctx[1](); - }); - - mounted = true; - } + dispose = listen(window, "scroll", () => { + scrolling = true; + clearTimeout(scrolling_timeout); + scrolling_timeout = setTimeout(clear_scrolling, 100); + /*onwindowscroll*/ ctx[1](); + }); }, p(ctx, [dirty]) { if (dirty & /*y*/ 1 && !scrolling) { @@ -65,7 +61,6 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(p); - mounted = false; dispose(); } }; @@ -78,7 +73,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(0, y = window.pageYOffset) } - $$self.$$set = $$props => { + $$self.$set = $$props => { if ("y" in $$props) $$invalidate(0, y = $$props.y); }; diff --git a/test/parser/index.js b/test/parser/index.js index 2c8d516a7d84..27c5ec1563ce 100644 --- a/test/parser/index.js +++ b/test/parser/index.js @@ -20,7 +20,7 @@ describe('parse', () => { (skip ? it.skip : solo ? it.only : it)(dir, () => { const options = tryToLoadJson(`${__dirname}/samples/${dir}/options.json`) || {}; - const input = fs.readFileSync(`${__dirname}/samples/${dir}/input.svelte`, 'utf-8').replace(/\s+$/, '').replace(/\r/g, ""); + const input = fs.readFileSync(`${__dirname}/samples/${dir}/input.svelte`, 'utf-8').replace(/\s+$/, ''); const expectedOutput = tryToLoadJson(`${__dirname}/samples/${dir}/output.json`); const expectedError = tryToLoadJson(`${__dirname}/samples/${dir}/error.json`); @@ -38,9 +38,13 @@ describe('parse', () => { } catch (err) { if (err.name !== 'ParseError') throw err; if (!expectedError) throw err; - const { code, message, pos, start } = err + try { - assert.deepEqual({ code, message, pos, start }, expectedError); + assert.equal(err.code, expectedError.code); + assert.equal(err.message, expectedError.message); + assert.deepEqual(err.start, expectedError.start); + assert.equal(err.pos, expectedError.pos); + assert.equal(err.toString().split('\n')[0], `${expectedError.message} (${expectedError.start.line}:${expectedError.start.column})`); } catch (err2) { const e = err2.code === 'MODULE_NOT_FOUND' ? err : err2; throw e; diff --git a/test/parser/samples/action-with-call/output.json b/test/parser/samples/action-with-call/output.json index 66c569dc5a40..ccb4011c678b 100644 --- a/test/parser/samples/action-with-call/output.json +++ b/test/parser/samples/action-with-call/output.json @@ -64,8 +64,7 @@ "value": "tooltip msg", "raw": "'tooltip msg'" } - ], - "optional": false + ] } } ], diff --git a/test/parser/samples/animation/output.json b/test/parser/samples/animation/output.json index 11195009c8ac..1958ba2817bd 100644 --- a/test/parser/samples/animation/output.json +++ b/test/parser/samples/animation/output.json @@ -52,10 +52,10 @@ } ], "context": { - "type": "Identifier", - "name": "thing", "start": 17, - "end": 22 + "end": 22, + "type": "Identifier", + "name": "thing" }, "key": { "type": "Identifier", diff --git a/test/parser/samples/await-catch/output.json b/test/parser/samples/await-catch/output.json index 91862b53660b..c5435830184b 100644 --- a/test/parser/samples/await-catch/output.json +++ b/test/parser/samples/await-catch/output.json @@ -26,10 +26,10 @@ }, "value": null, "error": { - "type": "Identifier", - "name": "theError", "start": 47, - "end": 55 + "end": 55, + "type": "Identifier", + "name": "theError" }, "pending": { "start": 19, @@ -152,8 +152,7 @@ }, "name": "message" }, - "computed": false, - "optional": false + "computed": false } } ] diff --git a/test/parser/samples/await-then-catch/output.json b/test/parser/samples/await-then-catch/output.json index e377d3fa3e8d..8e4b7a4c32e5 100644 --- a/test/parser/samples/await-then-catch/output.json +++ b/test/parser/samples/await-then-catch/output.json @@ -25,16 +25,16 @@ "name": "thePromise" }, "value": { - "type": "Identifier", - "name": "theValue", "start": 46, - "end": 54 + "end": 54, + "type": "Identifier", + "name": "theValue" }, "error": { - "type": "Identifier", - "name": "theError", "start": 96, - "end": 104 + "end": 104, + "type": "Identifier", + "name": "theError" }, "pending": { "start": 19, @@ -209,8 +209,7 @@ }, "name": "message" }, - "computed": false, - "optional": false + "computed": false } } ] diff --git a/test/parser/samples/dynamic-import/output.json b/test/parser/samples/dynamic-import/output.json index ed3d58782dc1..1e41252afab1 100644 --- a/test/parser/samples/dynamic-import/output.json +++ b/test/parser/samples/dynamic-import/output.json @@ -275,8 +275,7 @@ }, "name": "then" }, - "computed": false, - "optional": false + "computed": false }, "arguments": [ { @@ -404,8 +403,7 @@ }, "name": "log" }, - "computed": false, - "optional": false + "computed": false }, "arguments": [ { @@ -454,25 +452,21 @@ }, "name": "default" }, - "computed": false, - "optional": false + "computed": false } - ], - "optional": false + ] } } ] } } - ], - "optional": false + ] } } ] } } - ], - "optional": false + ] } } ], diff --git a/test/parser/samples/each-block-else/output.json b/test/parser/samples/each-block-else/output.json index 622789d17784..2720ce52929d 100644 --- a/test/parser/samples/each-block-else/output.json +++ b/test/parser/samples/each-block-else/output.json @@ -57,10 +57,10 @@ } ], "context": { - "type": "Identifier", - "name": "animal", "start": 18, - "end": 24 + "end": 24, + "type": "Identifier", + "name": "animal" }, "else": { "start": 50, diff --git a/test/parser/samples/each-block-indexed/output.json b/test/parser/samples/each-block-indexed/output.json index 01b97ffcb47d..50f2000a36c5 100644 --- a/test/parser/samples/each-block-indexed/output.json +++ b/test/parser/samples/each-block-indexed/output.json @@ -85,10 +85,10 @@ } ], "context": { - "type": "Identifier", - "name": "animal", "start": 18, - "end": 24 + "end": 24, + "type": "Identifier", + "name": "animal" }, "index": "i" } diff --git a/test/parser/samples/each-block-keyed/output.json b/test/parser/samples/each-block-keyed/output.json index 6eaf19a82d86..7dc86814538a 100644 --- a/test/parser/samples/each-block-keyed/output.json +++ b/test/parser/samples/each-block-keyed/output.json @@ -57,10 +57,10 @@ } ], "context": { - "type": "Identifier", - "name": "todo", "start": 16, - "end": 20 + "end": 20, + "type": "Identifier", + "name": "todo" }, "key": { "type": "MemberExpression", @@ -108,8 +108,7 @@ }, "name": "id" }, - "computed": false, - "optional": false + "computed": false } } ] diff --git a/test/parser/samples/each-block/output.json b/test/parser/samples/each-block/output.json index 82d4455d192e..6594fb50a6ec 100644 --- a/test/parser/samples/each-block/output.json +++ b/test/parser/samples/each-block/output.json @@ -57,10 +57,10 @@ } ], "context": { - "type": "Identifier", - "name": "animal", "start": 18, - "end": 24 + "end": 24, + "type": "Identifier", + "name": "animal" } } ] diff --git a/test/parser/samples/error-css-global-without-selector/error.json b/test/parser/samples/error-css-global-without-selector/error.json deleted file mode 100644 index f4237c65d390..000000000000 --- a/test/parser/samples/error-css-global-without-selector/error.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "code": "css-syntax-error", - "message": ":global() must contain a selector", - "start": { - "line": 2, - "column": 1, - "character": 9 - }, - "pos": 9 -} diff --git a/test/parser/samples/error-css-global-without-selector/input.svelte b/test/parser/samples/error-css-global-without-selector/input.svelte deleted file mode 100644 index a626136cfc3b..000000000000 --- a/test/parser/samples/error-css-global-without-selector/input.svelte +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose-2/error.json b/test/parser/samples/error-unmatched-closing-tag-autoclose-2/error.json deleted file mode 100644 index d24296bd96d8..000000000000 --- a/test/parser/samples/error-unmatched-closing-tag-autoclose-2/error.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "code": "invalid-closing-tag", - "message": "

attempted to close an element that was not open", - "pos": 38, - "start": { - "character": 38, - "column": 0, - "line": 5 - } -} diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose-2/input.svelte b/test/parser/samples/error-unmatched-closing-tag-autoclose-2/input.svelte deleted file mode 100644 index 5182577921ef..000000000000 --- a/test/parser/samples/error-unmatched-closing-tag-autoclose-2/input.svelte +++ /dev/null @@ -1,5 +0,0 @@ -
-

-

pre tag
-
-

\ No newline at end of file diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json b/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json deleted file mode 100644 index e6532d747e37..000000000000 --- a/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "code": "invalid-closing-tag", - "message": "

attempted to close

that was already automatically closed by

",
-	"pos": 24,
-	"start": {
-		"character": 24,
-		"column": 0,
-		"line": 3
-	}
-}
diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose/input.svelte b/test/parser/samples/error-unmatched-closing-tag-autoclose/input.svelte
deleted file mode 100644
index 0bfd6097362a..000000000000
--- a/test/parser/samples/error-unmatched-closing-tag-autoclose/input.svelte
+++ /dev/null
@@ -1,3 +0,0 @@
-

-

pre tag
-

\ No newline at end of file diff --git a/test/parser/samples/no-error-if-before-closing/output.json b/test/parser/samples/no-error-if-before-closing/output.json index f22586b26722..708128a42eb9 100644 --- a/test/parser/samples/no-error-if-before-closing/output.json +++ b/test/parser/samples/no-error-if-before-closing/output.json @@ -116,10 +116,10 @@ "raw": "true" }, "value": { - "type": "Identifier", - "name": "f", "start": 97, - "end": 98 + "end": 98, + "type": "Identifier", + "name": "f" }, "error": null, "pending": { @@ -204,10 +204,10 @@ "raw": "true" }, "value": { - "type": "Identifier", - "name": "f", "start": 137, - "end": 138 + "end": 138, + "type": "Identifier", + "name": "f" }, "error": null, "pending": { diff --git a/test/parser/samples/unusual-identifier/output.json b/test/parser/samples/unusual-identifier/output.json index 3d209d35fe39..76cc82cfd6de 100644 --- a/test/parser/samples/unusual-identifier/output.json +++ b/test/parser/samples/unusual-identifier/output.json @@ -57,10 +57,10 @@ } ], "context": { - "type": "Identifier", - "name": "𐊧", "start": 17, - "end": 19 + "end": 19, + "type": "Identifier", + "name": "𐊧" } } ] diff --git a/test/preprocess/samples/comments/_config.js b/test/preprocess/samples/comments/_config.js index fdec37756742..4416d121d0d9 100644 --- a/test/preprocess/samples/comments/_config.js +++ b/test/preprocess/samples/comments/_config.js @@ -2,7 +2,7 @@ export default { preprocess: [ { script: ({ content }) => ({ code: content.replace(/one/g, 'two') }), - style: ({ content }) => ({ code: content.replace(/one/g, 'three') }) - } - ] + style: ({ content }) => ({ code: content.replace(/one/g, 'three') }), + }, + ], }; diff --git a/test/preprocess/samples/script-self-closing/_config.js b/test/preprocess/samples/script-self-closing/_config.js deleted file mode 100644 index 4baab9730e12..000000000000 --- a/test/preprocess/samples/script-self-closing/_config.js +++ /dev/null @@ -1,12 +0,0 @@ -import * as assert from "assert"; - -export default { - preprocess: { - script: ({ content, attributes }) => { - assert.equal(content, ""); - return { - code: `console.log("${attributes["the-answer"]}");` - }; - } - } -}; diff --git a/test/preprocess/samples/script-self-closing/input.svelte b/test/preprocess/samples/script-self-closing/input.svelte deleted file mode 100644 index c5816cb3baee..000000000000 --- a/test/preprocess/samples/script-self-closing/input.svelte +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/preprocess/samples/style-self-closing/_config.js b/test/preprocess/samples/style-self-closing/_config.js deleted file mode 100644 index 0a05cd3d641e..000000000000 --- a/test/preprocess/samples/style-self-closing/_config.js +++ /dev/null @@ -1,12 +0,0 @@ -import * as assert from "assert"; - -export default { - preprocess: { - style: ({ content, attributes: { color } }) => { - assert.equal(content, ""); - return { - code: `div { color: ${color}; }` - }; - } - } -}; diff --git a/test/preprocess/samples/style-self-closing/input.svelte b/test/preprocess/samples/style-self-closing/input.svelte deleted file mode 100644 index 07176c87e5b2..000000000000 --- a/test/preprocess/samples/style-self-closing/input.svelte +++ /dev/null @@ -1,3 +0,0 @@ -
$brand
- - \ No newline at end of file diff --git a/test/runtime/index.js b/test/runtime/index.js index 65157196c9d7..f070eb818551 100644 --- a/test/runtime/index.js +++ b/test/runtime/index.js @@ -39,7 +39,7 @@ describe("runtime", () => { filename }, compileOptions); - const { js: { code } } = compile(fs.readFileSync(filename, "utf-8").replace(/\r/g, ""), options); + const { js: { code } } = compile(fs.readFileSync(filename, "utf-8"), options); return module._compile(code, filename); }; @@ -103,7 +103,7 @@ describe("runtime", () => { try { const { js } = compile( - fs.readFileSync(`${cwd}/${file}`, 'utf-8').replace(/\r/g, ""), + fs.readFileSync(`${cwd}/${file}`, 'utf-8'), { ...compileOptions, filename: file diff --git a/test/runtime/samples/$$rest-without-props/_config.js b/test/runtime/samples/$$rest-without-props/_config.js index 1fb8e85a6a27..017f9df5611a 100644 --- a/test/runtime/samples/$$rest-without-props/_config.js +++ b/test/runtime/samples/$$rest-without-props/_config.js @@ -11,7 +11,7 @@ export default {
`, - async test({ assert, target, window }) { + async test({ assert, target, window, }) { const [btn1, btn2, btn3, btn4] = target.querySelectorAll('button'); const clickEvent = new window.MouseEvent('click'); diff --git a/test/runtime/samples/$$rest/_config.js b/test/runtime/samples/$$rest/_config.js index f00c26d71235..255927f354b3 100644 --- a/test/runtime/samples/$$rest/_config.js +++ b/test/runtime/samples/$$rest/_config.js @@ -13,7 +13,7 @@ export default { `, - async test({ assert, target, window }) { + async test({ assert, target, window, }) { const [btn1, btn2, btn3, btn4] = target.querySelectorAll('button'); const clickEvent = new window.MouseEvent('click'); diff --git a/test/runtime/samples/$$slot/A.svelte b/test/runtime/samples/$$slot/A.svelte deleted file mode 100644 index ffa166166ca9..000000000000 --- a/test/runtime/samples/$$slot/A.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - - -$$slots: {toString($$slots)} - -{#if $$slots.b} -
- -
-{:else} - Slot b is not available -{/if} \ No newline at end of file diff --git a/test/runtime/samples/$$slot/_config.js b/test/runtime/samples/$$slot/_config.js deleted file mode 100644 index 13b2137cdbc5..000000000000 --- a/test/runtime/samples/$$slot/_config.js +++ /dev/null @@ -1,18 +0,0 @@ -export default { - html: ` - byeworld - hello world - $$slots: {"a":true,"default":true} - Slot b is not available - - bye world - hello world - $$slots: {"a":true,"b":true,"default":true} -
hello world
- `, - - async test({ assert, target, component }) { - assert.equal(component.getA(), ''); - assert.equal(component.getB(), 'foo'); - } -}; diff --git a/test/runtime/samples/$$slot/main.svelte b/test/runtime/samples/$$slot/main.svelte deleted file mode 100644 index 8b7efae5735a..000000000000 --- a/test/runtime/samples/$$slot/main.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
- hello world - bye - world - - - - hello world - hello world - bye world - diff --git a/test/runtime/samples/action-custom-event-handler-this/_config.js b/test/runtime/samples/action-custom-event-handler-this/_config.js index 754f813c7fd5..88a30232abe5 100644 --- a/test/runtime/samples/action-custom-event-handler-this/_config.js +++ b/test/runtime/samples/action-custom-event-handler-this/_config.js @@ -18,5 +18,5 @@ export default { input.dispatchEvent(event); assert.ok(blurred); - } + }, }; diff --git a/test/runtime/samples/action-ternary-template/_config.js b/test/runtime/samples/action-ternary-template/_config.js index ecb18dceec0e..adf23a9f683b 100644 --- a/test/runtime/samples/action-ternary-template/_config.js +++ b/test/runtime/samples/action-ternary-template/_config.js @@ -1,7 +1,7 @@ export default { props: { target: 'World!', - display: true + display: true, }, html: ` @@ -16,5 +16,5 @@ export default { assert.htmlEqual(target.innerHTML, `

Hello World!

`); - } + }, }; diff --git a/test/runtime/samples/action-this/_config.js b/test/runtime/samples/action-this/_config.js index c59ff3b6347c..de7f834cdce5 100644 --- a/test/runtime/samples/action-this/_config.js +++ b/test/runtime/samples/action-this/_config.js @@ -7,5 +7,5 @@ export default { await button.dispatchEvent(click); await Promise.resolve(); assert.htmlEqual(target.innerHTML, ``); - } + }, }; diff --git a/test/runtime/samples/apply-directives-in-order-2/_config.js b/test/runtime/samples/apply-directives-in-order-2/_config.js index caff97a5b9d5..a74ce41cb66f 100644 --- a/test/runtime/samples/apply-directives-in-order-2/_config.js +++ b/test/runtime/samples/apply-directives-in-order-2/_config.js @@ -1,7 +1,7 @@ const value = []; export default { props: { - value + value, }, async test({ assert, component, target, window }) { @@ -32,7 +32,7 @@ export default { '15', '16', '17', - '18' + '18', ]); - } + }, }; diff --git a/test/runtime/samples/apply-directives-in-order/_config.js b/test/runtime/samples/apply-directives-in-order/_config.js index 7c8f87ef857f..e5e8980ed115 100644 --- a/test/runtime/samples/apply-directives-in-order/_config.js +++ b/test/runtime/samples/apply-directives-in-order/_config.js @@ -33,5 +33,5 @@ export default {

HE

`); - } + }, }; diff --git a/test/runtime/samples/attribute-boolean-false/_config.js b/test/runtime/samples/attribute-boolean-false/_config.js index e47c5e7df1b5..14fdeb9fdc8d 100644 --- a/test/runtime/samples/attribute-boolean-false/_config.js +++ b/test/runtime/samples/attribute-boolean-false/_config.js @@ -3,5 +3,5 @@ export default { test({ assert, component, target }) { const textarea = target.querySelector('textarea'); assert.ok(textarea.readOnly === false); - } + }, }; diff --git a/test/runtime/samples/attribute-boolean-true/_config.js b/test/runtime/samples/attribute-boolean-true/_config.js index 1f77e33027de..0e402ed1e334 100644 --- a/test/runtime/samples/attribute-boolean-true/_config.js +++ b/test/runtime/samples/attribute-boolean-true/_config.js @@ -3,5 +3,5 @@ export default { test({ assert, component, target }) { const textarea = target.querySelector('textarea'); assert.ok(textarea.readOnly); - } + }, }; diff --git a/test/runtime/samples/attribute-dataset-without-value/_config.js b/test/runtime/samples/attribute-dataset-without-value/_config.js index 21e60b92aa87..934f44eb06fc 100644 --- a/test/runtime/samples/attribute-dataset-without-value/_config.js +++ b/test/runtime/samples/attribute-dataset-without-value/_config.js @@ -1,3 +1,3 @@ export default { - html: '
' + html: '
', }; diff --git a/test/runtime/samples/attribute-dynamic-no-dependencies/_config.js b/test/runtime/samples/attribute-dynamic-no-dependencies/_config.js index f1088830af46..acf3c64bdd90 100644 --- a/test/runtime/samples/attribute-dynamic-no-dependencies/_config.js +++ b/test/runtime/samples/attribute-dynamic-no-dependencies/_config.js @@ -1,5 +1,5 @@ export default { html: `
bar
- ` + `, }; diff --git a/test/runtime/samples/attribute-false/_config.js b/test/runtime/samples/attribute-false/_config.js index 632d4ac1c24e..9fd08a2a4836 100644 --- a/test/runtime/samples/attribute-false/_config.js +++ b/test/runtime/samples/attribute-false/_config.js @@ -1,3 +1,3 @@ export default { - html: `
` + html: `
`, }; diff --git a/test/runtime/samples/attribute-null-classnames-no-style/_config.js b/test/runtime/samples/attribute-null-classnames-no-style/_config.js index e90d81a60f1b..917cf565c039 100644 --- a/test/runtime/samples/attribute-null-classnames-no-style/_config.js +++ b/test/runtime/samples/attribute-null-classnames-no-style/_config.js @@ -1,7 +1,7 @@ export default { props: { testName1: "test1", - testName2: "test2" + testName2: "test2", }, html: `
`, diff --git a/test/runtime/samples/attribute-null-classnames-with-style/_config.js b/test/runtime/samples/attribute-null-classnames-with-style/_config.js index 20e6d4c7be66..5762f628fb33 100644 --- a/test/runtime/samples/attribute-null-classnames-with-style/_config.js +++ b/test/runtime/samples/attribute-null-classnames-with-style/_config.js @@ -1,7 +1,7 @@ export default { props: { testName1: "test1", - testName2: "test2" + testName2: "test2", }, html: `
`, diff --git a/test/runtime/samples/attribute-null-func-classnames-no-style/_config.js b/test/runtime/samples/attribute-null-func-classnames-no-style/_config.js index e90d81a60f1b..917cf565c039 100644 --- a/test/runtime/samples/attribute-null-func-classnames-no-style/_config.js +++ b/test/runtime/samples/attribute-null-func-classnames-no-style/_config.js @@ -1,7 +1,7 @@ export default { props: { testName1: "test1", - testName2: "test2" + testName2: "test2", }, html: `
`, diff --git a/test/runtime/samples/attribute-null-func-classnames-with-style/_config.js b/test/runtime/samples/attribute-null-func-classnames-with-style/_config.js index 20e6d4c7be66..5762f628fb33 100644 --- a/test/runtime/samples/attribute-null-func-classnames-with-style/_config.js +++ b/test/runtime/samples/attribute-null-func-classnames-with-style/_config.js @@ -1,7 +1,7 @@ export default { props: { testName1: "test1", - testName2: "test2" + testName2: "test2", }, html: `
`, diff --git a/test/runtime/samples/attribute-null/_config.js b/test/runtime/samples/attribute-null/_config.js index 36955050a0ee..ae2f0a8af6f0 100644 --- a/test/runtime/samples/attribute-null/_config.js +++ b/test/runtime/samples/attribute-null/_config.js @@ -1,3 +1,3 @@ export default { - html: `
` + html: `
`, }; diff --git a/test/runtime/samples/attribute-prefer-expression/_config.js b/test/runtime/samples/attribute-prefer-expression/_config.js index 2388ff35df6a..29fcbc7f131d 100644 --- a/test/runtime/samples/attribute-prefer-expression/_config.js +++ b/test/runtime/samples/attribute-prefer-expression/_config.js @@ -2,7 +2,7 @@ export default { skip_if_ssr: true, props: { - foo: false + foo: false, }, test({ assert, component, target }) { @@ -15,5 +15,5 @@ export default { assert.ok(!inputs[0].checked); assert.ok(inputs[1].checked); - } + }, }; diff --git a/test/runtime/samples/attribute-undefined/_config.js b/test/runtime/samples/attribute-undefined/_config.js index 36955050a0ee..ae2f0a8af6f0 100644 --- a/test/runtime/samples/attribute-undefined/_config.js +++ b/test/runtime/samples/attribute-undefined/_config.js @@ -1,3 +1,3 @@ export default { - html: `
` + html: `
`, }; diff --git a/test/runtime/samples/await-with-update-2/Component.svelte b/test/runtime/samples/await-with-update-2/Component.svelte deleted file mode 100644 index 1301db3f9908..000000000000 --- a/test/runtime/samples/await-with-update-2/Component.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -
count: {count}
-
value: {value}
\ No newline at end of file diff --git a/test/runtime/samples/await-with-update-2/_config.js b/test/runtime/samples/await-with-update-2/_config.js deleted file mode 100644 index 613f2b32550c..000000000000 --- a/test/runtime/samples/await-with-update-2/_config.js +++ /dev/null @@ -1,64 +0,0 @@ -export default { - props: { - thePromise: new Promise((_) => {}), - count: 0 - }, - - html: ` -

loading...

- `, - - async test({ assert, component, target }) { - await (component.thePromise = Promise.resolve({ value: "success", Component: component.Component })); - - assert.htmlEqual( - target.innerHTML, - ` -
Resolved: -
count: 0
-
value: success
-
- ` - ); - - component.count = 5; - - assert.htmlEqual( - target.innerHTML, - ` -
Resolved: -
count: 5
-
value: success
-
- ` - ); - - try { - await (component.thePromise = Promise.reject({ value: "failure", Component: component.Component })); - } catch (error) { - // ignore - } - - assert.htmlEqual( - target.innerHTML, - ` -
Rejected: -
count: 5
-
value: failure
-
- ` - ); - - component.count = 10; - - assert.htmlEqual( - target.innerHTML, - ` -
Rejected: -
count: 10
-
value: failure
-
- ` - ); - } -}; diff --git a/test/runtime/samples/await-with-update-2/main.svelte b/test/runtime/samples/await-with-update-2/main.svelte deleted file mode 100644 index b29c875f920e..000000000000 --- a/test/runtime/samples/await-with-update-2/main.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
- {#await thePromise} -

loading...

- {:then { value: theValue, Component }} - Resolved: - {:catch { value: theError, Component } } - Rejected: - {/await} -
\ No newline at end of file diff --git a/test/runtime/samples/await-with-update/Component.svelte b/test/runtime/samples/await-with-update/Component.svelte deleted file mode 100644 index 5f13c80e65f1..000000000000 --- a/test/runtime/samples/await-with-update/Component.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -
count: {count}
\ No newline at end of file diff --git a/test/runtime/samples/await-with-update/_config.js b/test/runtime/samples/await-with-update/_config.js deleted file mode 100644 index 08bf12b89ee5..000000000000 --- a/test/runtime/samples/await-with-update/_config.js +++ /dev/null @@ -1,60 +0,0 @@ -export default { - props: { - thePromise: new Promise((_) => {}), - count: 0 - }, - - html: ` -

loading...

- `, - - async test({ assert, component, target }) { - await (component.thePromise = Promise.resolve(component.Component)); - - assert.htmlEqual( - target.innerHTML, - ` -
Resolved: -
count: 0
-
- ` - ); - - component.count = 5; - - assert.htmlEqual( - target.innerHTML, - ` -
Resolved: -
count: 5
-
- ` - ); - - try { - await (component.thePromise = Promise.reject(component.Component)); - } catch (error) { - // ignore - } - - assert.htmlEqual( - target.innerHTML, - ` -
Rejected: -
count: 5
-
- ` - ); - - component.count = 10; - - assert.htmlEqual( - target.innerHTML, - ` -
Rejected: -
count: 10
-
- ` - ); - } -}; diff --git a/test/runtime/samples/await-with-update/main.svelte b/test/runtime/samples/await-with-update/main.svelte deleted file mode 100644 index 51c5b76a212e..000000000000 --- a/test/runtime/samples/await-with-update/main.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
- {#await thePromise} -

loading...

- {:then theValue} - Resolved: - {:catch theError} - Rejected: - {/await} -
\ No newline at end of file diff --git a/test/runtime/samples/await-without-catch/_config.js b/test/runtime/samples/await-without-catch/_config.js deleted file mode 100644 index 2030ed794994..000000000000 --- a/test/runtime/samples/await-without-catch/_config.js +++ /dev/null @@ -1,44 +0,0 @@ -let fulfil; - -let promise = new Promise(f => { - fulfil = f; -}); - -export default { - props: { - promise - }, - - html: ` -

loading...

- `, - - test({ assert, component, target }) { - fulfil(42); - - return promise - .then(() => { - assert.htmlEqual(target.innerHTML, ` -

loaded

- `); - - let reject; - - promise = new Promise((f, r) => { - reject = r; - }); - - component.promise = promise; - - assert.htmlEqual(target.innerHTML, ` -

loading...

- `); - - reject(new Error('this error should be thrown')); - return promise; - }) - .catch((err) => { - assert.equal(err.message, 'this error should be thrown'); - }); - } -}; \ No newline at end of file diff --git a/test/runtime/samples/await-without-catch/main.svelte b/test/runtime/samples/await-without-catch/main.svelte deleted file mode 100644 index f528a8bf6996..000000000000 --- a/test/runtime/samples/await-without-catch/main.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - -{#await promise} -

loading...

-{:then value} -

loaded

-{/await} \ No newline at end of file diff --git a/test/runtime/samples/binding-contenteditable-html-initial/_config.js b/test/runtime/samples/binding-contenteditable-html-initial/_config.js index 4c30a3231ab2..9eac2c9b17ac 100644 --- a/test/runtime/samples/binding-contenteditable-html-initial/_config.js +++ b/test/runtime/samples/binding-contenteditable-html-initial/_config.js @@ -36,5 +36,5 @@ export default { goodbye

hello goodbye

`); - } + }, }; diff --git a/test/runtime/samples/binding-contenteditable-html/_config.js b/test/runtime/samples/binding-contenteditable-html/_config.js index 639572faea07..ceb6a75c7098 100644 --- a/test/runtime/samples/binding-contenteditable-html/_config.js +++ b/test/runtime/samples/binding-contenteditable-html/_config.js @@ -1,6 +1,6 @@ export default { props: { - name: 'world' + name: 'world', }, html: ` @@ -34,5 +34,5 @@ export default { goodbye

hello goodbye

`); - } + }, }; diff --git a/test/runtime/samples/binding-contenteditable-text-initial/_config.js b/test/runtime/samples/binding-contenteditable-text-initial/_config.js index d5f331bb7a90..4899f30f1243 100644 --- a/test/runtime/samples/binding-contenteditable-text-initial/_config.js +++ b/test/runtime/samples/binding-contenteditable-text-initial/_config.js @@ -30,5 +30,5 @@ export default { goodbye

hello goodbye

`); - } + }, }; diff --git a/test/runtime/samples/binding-contenteditable-text/_config.js b/test/runtime/samples/binding-contenteditable-text/_config.js index 89f39682587d..9f8645724d6d 100644 --- a/test/runtime/samples/binding-contenteditable-text/_config.js +++ b/test/runtime/samples/binding-contenteditable-text/_config.js @@ -1,6 +1,6 @@ export default { props: { - name: 'world' + name: 'world', }, html: ` @@ -28,5 +28,5 @@ export default { goodbye

hello goodbye

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js b/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js index 9d099feb0a72..2e3a1c296fb0 100644 --- a/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js +++ b/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js @@ -2,7 +2,7 @@ export default { skip_if_ssr: true, props: { - indeterminate: true + indeterminate: true, }, html: ` @@ -38,5 +38,5 @@ export default {

checked? true

indeterminate? true

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js b/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js index 9e6f915dd0e1..b502ed40af26 100644 --- a/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js +++ b/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js @@ -3,13 +3,13 @@ export default { cats: [ { name: "cat 0", - checked: false + checked: false, }, { name: "cat 1", - checked: false - } - ] + checked: false, + }, + ], }, html: ` @@ -22,7 +22,7 @@ export default { const newCats = cats.slice(); newCats.push({ name: "cat " + cats.length, - checked: false + checked: false, }); component.cats = newCats; diff --git a/test/runtime/samples/binding-input-group-duplicate-value/_config.js b/test/runtime/samples/binding-input-group-duplicate-value/_config.js deleted file mode 100644 index 7f50ad6dce65..000000000000 --- a/test/runtime/samples/binding-input-group-duplicate-value/_config.js +++ /dev/null @@ -1,81 +0,0 @@ -export default { - html: ` -

Checked:

- -
- - a
- b
- c
- d
- -
- - a
- b
- c
- d
- `, - - async test({ assert, component, target, window }) { - const inputs = target.querySelectorAll("input"); - const p = target.querySelector("p"); - - assert.equal(inputs[0].checked, false); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, false); - assert.equal(inputs[3].checked, false); - - assert.equal(inputs[4].checked, false); - assert.equal(inputs[5].checked, false); - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, false); - - const event = new window.Event("change"); - - inputs[0].checked = true; - await inputs[0].dispatchEvent(event); - - assert.htmlEqual(p.innerHTML, `Checked: a`); - - assert.equal(inputs[0].checked, true); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, false); - assert.equal(inputs[3].checked, false); - - assert.equal(inputs[4].checked, true); - assert.equal(inputs[5].checked, false); - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, false); - - inputs[3].checked = true; - await inputs[3].dispatchEvent(event); - - assert.htmlEqual(p.innerHTML, `Checked: a,d`); - - assert.equal(inputs[0].checked, true); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, false); - assert.equal(inputs[3].checked, true); - - assert.equal(inputs[4].checked, true); - assert.equal(inputs[5].checked, false); - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, true); - - inputs[4].checked = false; - await inputs[4].dispatchEvent(event); - - assert.htmlEqual(p.innerHTML, `Checked: d`); - - assert.equal(inputs[0].checked, false); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, false); - assert.equal(inputs[3].checked, true); - - assert.equal(inputs[4].checked, false); - assert.equal(inputs[5].checked, false); - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, true); - } -}; diff --git a/test/runtime/samples/binding-input-group-duplicate-value/main.svelte b/test/runtime/samples/binding-input-group-duplicate-value/main.svelte deleted file mode 100644 index 153e559d239a..000000000000 --- a/test/runtime/samples/binding-input-group-duplicate-value/main.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - -

Checked: {foo}

- -
- -a
-b
-c
-d
- -
- -a
-b
-c
-d
\ No newline at end of file diff --git a/test/runtime/samples/binding-input-group-each-1/_config.js b/test/runtime/samples/binding-input-group-each-1/_config.js deleted file mode 100644 index 92010296dc8a..000000000000 --- a/test/runtime/samples/binding-input-group-each-1/_config.js +++ /dev/null @@ -1,275 +0,0 @@ -const values = [ - { name: 'Alpha' }, - { name: 'Beta' }, - { name: 'Gamma' } -]; - -const selected_array = [ - [values[1]], - [], - [values[2]] -]; - -export default { - props: { - values, - selected_array - }, - - html: ` -
- - - - - - -

Beta

-
-
- - - - - - -

-
-
- - - - - - -

Gamma

-
- `, - - async test({ assert, component, target, window }) { - const inputs = target.querySelectorAll('input'); - assert.equal(inputs[0].checked, false); - assert.equal(inputs[1].checked, true); - assert.equal(inputs[2].checked, false); - assert.equal(inputs[3].checked, false); - assert.equal(inputs[4].checked, false); - assert.equal(inputs[5].checked, false); - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, false); - assert.equal(inputs[8].checked, true); - - const event = new window.Event('change'); - - inputs[0].checked = true; - await inputs[0].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` -
- - - - - - -

Alpha, Beta

-
-
- - - - - - -

-
-
- - - - - - -

Gamma

-
- `); - inputs[3].checked = true; - await inputs[3].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` -
- - - - - - -

Alpha, Beta

-
-
- - - - - - -

Alpha

-
-
- - - - - - -

Gamma

-
- `); - - inputs[8].checked = false; - await inputs[8].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` -
- - - - - - -

Alpha, Beta

-
-
- - - - - - -

Alpha

-
-
- - - - - - -

-
- `); - - component.selected_array = [[values[1], values[2]], [values[2]]]; - - assert.equal(inputs[0].checked, false); - assert.equal(inputs[1].checked, true); - assert.equal(inputs[2].checked, true); - assert.equal(inputs[3].checked, false); - assert.equal(inputs[4].checked, false); - assert.equal(inputs[5].checked, true); - - assert.htmlEqual(target.innerHTML, ` -
- - - - - - -

Beta, Gamma

-
-
- - - - - - -

Gamma

-
- `); - } -}; diff --git a/test/runtime/samples/binding-input-group-each-1/main.svelte b/test/runtime/samples/binding-input-group-each-1/main.svelte deleted file mode 100644 index 5ed255c83a87..000000000000 --- a/test/runtime/samples/binding-input-group-each-1/main.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -{#each selected_array as selected} -
- {#each values as value} - - {/each} -

{selected.map(v => v.name).join(', ')}

-
-{/each} diff --git a/test/runtime/samples/binding-input-group-each-2/_config.js b/test/runtime/samples/binding-input-group-each-2/_config.js deleted file mode 100644 index 78d692d9795c..000000000000 --- a/test/runtime/samples/binding-input-group-each-2/_config.js +++ /dev/null @@ -1,59 +0,0 @@ -export default { - html: ` - - - - -

1, 2, 3

`, - - async test({ assert, component, target, window }) { - const inputs = target.querySelectorAll('input'); - assert.equal(inputs[0].checked, true); - assert.equal(inputs[1].checked, true); - assert.equal(inputs[2].checked, true); - - const event = new window.Event('change'); - - inputs[0].checked = false; - await inputs[0].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - - -

2, 3

- `); - - component.selected = [[1, 3]]; - assert.equal(inputs[0].checked, true); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, true); - - assert.htmlEqual(target.innerHTML, ` - - - - -

1, 3

- `); - } -}; diff --git a/test/runtime/samples/binding-input-group-each-2/main.svelte b/test/runtime/samples/binding-input-group-each-2/main.svelte deleted file mode 100644 index 46f7e9e69858..000000000000 --- a/test/runtime/samples/binding-input-group-each-2/main.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - -{#each options as value} - -{/each} - -

{selected[0].join(', ')}

\ No newline at end of file diff --git a/test/runtime/samples/binding-input-group-each-3/_config.js b/test/runtime/samples/binding-input-group-each-3/_config.js deleted file mode 100644 index 92010296dc8a..000000000000 --- a/test/runtime/samples/binding-input-group-each-3/_config.js +++ /dev/null @@ -1,275 +0,0 @@ -const values = [ - { name: 'Alpha' }, - { name: 'Beta' }, - { name: 'Gamma' } -]; - -const selected_array = [ - [values[1]], - [], - [values[2]] -]; - -export default { - props: { - values, - selected_array - }, - - html: ` -
- - - - - - -

Beta

-
-
- - - - - - -

-
-
- - - - - - -

Gamma

-
- `, - - async test({ assert, component, target, window }) { - const inputs = target.querySelectorAll('input'); - assert.equal(inputs[0].checked, false); - assert.equal(inputs[1].checked, true); - assert.equal(inputs[2].checked, false); - assert.equal(inputs[3].checked, false); - assert.equal(inputs[4].checked, false); - assert.equal(inputs[5].checked, false); - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, false); - assert.equal(inputs[8].checked, true); - - const event = new window.Event('change'); - - inputs[0].checked = true; - await inputs[0].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` -
- - - - - - -

Alpha, Beta

-
-
- - - - - - -

-
-
- - - - - - -

Gamma

-
- `); - inputs[3].checked = true; - await inputs[3].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` -
- - - - - - -

Alpha, Beta

-
-
- - - - - - -

Alpha

-
-
- - - - - - -

Gamma

-
- `); - - inputs[8].checked = false; - await inputs[8].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` -
- - - - - - -

Alpha, Beta

-
-
- - - - - - -

Alpha

-
-
- - - - - - -

-
- `); - - component.selected_array = [[values[1], values[2]], [values[2]]]; - - assert.equal(inputs[0].checked, false); - assert.equal(inputs[1].checked, true); - assert.equal(inputs[2].checked, true); - assert.equal(inputs[3].checked, false); - assert.equal(inputs[4].checked, false); - assert.equal(inputs[5].checked, true); - - assert.htmlEqual(target.innerHTML, ` -
- - - - - - -

Beta, Gamma

-
-
- - - - - - -

Gamma

-
- `); - } -}; diff --git a/test/runtime/samples/binding-input-group-each-3/main.svelte b/test/runtime/samples/binding-input-group-each-3/main.svelte deleted file mode 100644 index 42a7a1c4e9b9..000000000000 --- a/test/runtime/samples/binding-input-group-each-3/main.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -{#each selected_array as _, index} -
- {#each values as value} - - {/each} -

{selected_array[index].map(v => v.name).join(', ')}

-
-{/each} diff --git a/test/runtime/samples/binding-input-group-each-4/_config.js b/test/runtime/samples/binding-input-group-each-4/_config.js deleted file mode 100644 index f1168858b006..000000000000 --- a/test/runtime/samples/binding-input-group-each-4/_config.js +++ /dev/null @@ -1,153 +0,0 @@ -export default { - html: ` - - - -

1

- - - -

2

- - - -

- - - -

3

- `, - - async test({ assert, component, target, window }) { - const inputs = target.querySelectorAll('input'); - assert.equal(inputs[0].checked, true); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, false); - - assert.equal(inputs[3].checked, false); - assert.equal(inputs[4].checked, true); - assert.equal(inputs[5].checked, false); - - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, false); - assert.equal(inputs[8].checked, false); - - assert.equal(inputs[9].checked, false); - assert.equal(inputs[10].checked, false); - assert.equal(inputs[11].checked, true); - - const event = new window.Event('change'); - - inputs[2].checked = true; - await inputs[2].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

1, 3

- - - -

2

- - - -

- - - -

3

- `); - - inputs[9].checked = true; - await inputs[9].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

1, 3

- - - -

2

- - - -

- - - -

1, 3

- `); - - inputs[4].checked = false; - await inputs[4].dispatchEvent(event); - inputs[5].checked = true; - await inputs[5].dispatchEvent(event); - inputs[6].checked = true; - await inputs[6].dispatchEvent(event); - inputs[7].checked = true; - await inputs[7].dispatchEvent(event); - inputs[11].checked = false; - await inputs[11].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

1, 3

- - - -

3

- - - -

1, 2

- - - -

1

- `); - - component.selected_array_1 = [[3], [1]]; - component.selected_array_2 = [[], [2]]; - - assert.equal(inputs[0].checked, false); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, true); - - assert.equal(inputs[3].checked, true); - assert.equal(inputs[4].checked, false); - assert.equal(inputs[5].checked, false); - - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, false); - assert.equal(inputs[8].checked, false); - - assert.equal(inputs[9].checked, false); - assert.equal(inputs[10].checked, true); - assert.equal(inputs[11].checked, false); - - assert.htmlEqual(target.innerHTML, ` - - - -

3

- - - -

1

- - - -

- - - -

2

- `); - } -}; diff --git a/test/runtime/samples/binding-input-group-each-4/main.svelte b/test/runtime/samples/binding-input-group-each-4/main.svelte deleted file mode 100644 index 0bbf5ea763c6..000000000000 --- a/test/runtime/samples/binding-input-group-each-4/main.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - -{#each selected_array_1 as selected} - {#each options as value} - - {/each} -

{selected.join(', ')}

-{/each} - -{#each selected_array_2 as selected} - {#each options as value} - - {/each} -

{selected.join(', ')}

-{/each} \ No newline at end of file diff --git a/test/runtime/samples/binding-input-group-each-5/_config.js b/test/runtime/samples/binding-input-group-each-5/_config.js deleted file mode 100644 index 579225c627c5..000000000000 --- a/test/runtime/samples/binding-input-group-each-5/_config.js +++ /dev/null @@ -1,160 +0,0 @@ -export default { - html: ` - - - -

1

- - - -

1, 2, 3

- - - -

2

- - - -

1

- `, - - async test({ assert, component, target, window }) { - const inputs = target.querySelectorAll('input'); - assert.equal(inputs[0].checked, true); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, false); - - assert.equal(inputs[3].checked, true); - assert.equal(inputs[4].checked, true); - assert.equal(inputs[5].checked, true); - - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, true); - assert.equal(inputs[8].checked, false); - - assert.equal(inputs[9].checked, true); - assert.equal(inputs[10].checked, false); - assert.equal(inputs[11].checked, false); - - const event = new window.Event('change'); - - inputs[2].checked = true; - await inputs[2].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

1, 3

- - - -

1, 2, 3

- - - -

2

- - - -

1

- `); - - inputs[8].checked = true; - await inputs[8].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

1, 3

- - - -

1, 2, 3

- - - -

2, 3

- - - -

1

- `); - - component.selected_index = [1, 1]; - - assert.htmlEqual(target.innerHTML, ` - - - -

1, 2, 3

- - - -

1, 2, 3

- - - -

1

- - - -

1

- `); - - assert.equal(inputs[0].checked, true); - assert.equal(inputs[1].checked, true); - assert.equal(inputs[2].checked, true); - - assert.equal(inputs[3].checked, true); - assert.equal(inputs[4].checked, true); - assert.equal(inputs[5].checked, true); - - assert.equal(inputs[6].checked, true); - assert.equal(inputs[7].checked, false); - assert.equal(inputs[8].checked, false); - - assert.equal(inputs[9].checked, true); - assert.equal(inputs[10].checked, false); - assert.equal(inputs[11].checked, false); - - inputs[5].checked = false; - await inputs[5].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

1, 2

- - - -

1, 2

- - - -

1

- - - -

1

- `); - - assert.equal(inputs[0].checked, true); - assert.equal(inputs[1].checked, true); - assert.equal(inputs[2].checked, false); - - assert.equal(inputs[3].checked, true); - assert.equal(inputs[4].checked, true); - assert.equal(inputs[5].checked, false); - - assert.equal(inputs[6].checked, true); - assert.equal(inputs[7].checked, false); - assert.equal(inputs[8].checked, false); - - assert.equal(inputs[9].checked, true); - assert.equal(inputs[10].checked, false); - assert.equal(inputs[11].checked, false); - } -}; diff --git a/test/runtime/samples/binding-input-group-each-5/main.svelte b/test/runtime/samples/binding-input-group-each-5/main.svelte deleted file mode 100644 index 93bdce651093..000000000000 --- a/test/runtime/samples/binding-input-group-each-5/main.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - -{#each selected_array as selected} - {#each selected_index as index} - {#each options as value} - - {/each} -

{selected[index].join(', ')}

- {/each} -{/each} diff --git a/test/runtime/samples/binding-input-group-each-6/_config.js b/test/runtime/samples/binding-input-group-each-6/_config.js deleted file mode 100644 index 9eb251bf5d06..000000000000 --- a/test/runtime/samples/binding-input-group-each-6/_config.js +++ /dev/null @@ -1,87 +0,0 @@ -export default { - html: ` - - - -

- - - -

- - - -

- `, - - async test({ assert, component, target, window }) { - const inputs = target.querySelectorAll('input'); - assert.equal(inputs[0].checked, false); - assert.equal(inputs[1].checked, false); - assert.equal(inputs[2].checked, false); - - assert.equal(inputs[3].checked, false); - assert.equal(inputs[4].checked, false); - assert.equal(inputs[5].checked, false); - - assert.equal(inputs[6].checked, false); - assert.equal(inputs[7].checked, false); - assert.equal(inputs[8].checked, false); - - const event = new window.Event('change'); - - inputs[2].checked = true; - await inputs[2].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

z

- - - -

- - - -

- `); - - inputs[4].checked = true; - await inputs[4].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

z

- - - -

y

- - - -

- `); - - inputs[5].checked = true; - await inputs[5].dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - - - -

z

- - - -

y, z

- - - -

- `); - } -}; diff --git a/test/runtime/samples/binding-input-group-each-6/main.svelte b/test/runtime/samples/binding-input-group-each-6/main.svelte deleted file mode 100644 index 85be939e8a99..000000000000 --- a/test/runtime/samples/binding-input-group-each-6/main.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - -{#each Object.keys(list) as key} - {#each values as value} - - {/each} -

{list[key].join(', ')}

-{/each} diff --git a/test/runtime/samples/binding-input-number-2/_config.js b/test/runtime/samples/binding-input-number-2/_config.js index 5daf50fd04f3..a3510eb757ba 100644 --- a/test/runtime/samples/binding-input-number-2/_config.js +++ b/test/runtime/samples/binding-input-number-2/_config.js @@ -27,5 +27,5 @@ export default { component.value = 1; assert.equal(component.value, 1); assert.equal(input.value, "1"); - } + }, }; diff --git a/test/runtime/samples/binding-input-number/_config.js b/test/runtime/samples/binding-input-number/_config.js index 3c5919bc644c..869b9f9896ca 100644 --- a/test/runtime/samples/binding-input-number/_config.js +++ b/test/runtime/samples/binding-input-number/_config.js @@ -1,6 +1,6 @@ export default { props: { - count: 42 + count: 42, }, html: ` @@ -44,5 +44,5 @@ export default {

undefined undefined

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-range-change-with-max/_config.js b/test/runtime/samples/binding-input-range-change-with-max/_config.js index dc3cf4ce281f..1fda90d83cba 100644 --- a/test/runtime/samples/binding-input-range-change-with-max/_config.js +++ b/test/runtime/samples/binding-input-range-change-with-max/_config.js @@ -29,5 +29,5 @@ export default {

20 of 20

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-range-change/_config.js b/test/runtime/samples/binding-input-range-change/_config.js index f6ec2d9c5368..62e9562770c6 100644 --- a/test/runtime/samples/binding-input-range-change/_config.js +++ b/test/runtime/samples/binding-input-range-change/_config.js @@ -1,6 +1,6 @@ export default { props: { - count: 42 + count: 42, }, html: ` @@ -34,5 +34,5 @@ export default {

number 44

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-range/_config.js b/test/runtime/samples/binding-input-range/_config.js index dc6178e088d0..4c3d37a6677f 100644 --- a/test/runtime/samples/binding-input-range/_config.js +++ b/test/runtime/samples/binding-input-range/_config.js @@ -1,6 +1,6 @@ export default { props: { - count: 42 + count: 42, }, html: ` @@ -34,5 +34,5 @@ export default {

number 44

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js b/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js index de4d6325b0c2..28cffdfa5772 100644 --- a/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js +++ b/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js @@ -1,7 +1,7 @@ export default { props: { foo: 'a', - items: ['x'] + items: ['x'], }, html: ` @@ -32,5 +32,5 @@ export default {

b

y

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-contextual-reactive/_config.js b/test/runtime/samples/binding-input-text-contextual-reactive/_config.js index a1584c18b8c3..6fdfc4be527f 100644 --- a/test/runtime/samples/binding-input-text-contextual-reactive/_config.js +++ b/test/runtime/samples/binding-input-text-contextual-reactive/_config.js @@ -121,5 +121,5 @@ export default {

done:one / done:two / remaining:four

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-contextual/_config.js b/test/runtime/samples/binding-input-text-contextual/_config.js index 1c66ea7ff55f..bb7f16c8bb87 100644 --- a/test/runtime/samples/binding-input-text-contextual/_config.js +++ b/test/runtime/samples/binding-input-text-contextual/_config.js @@ -1,6 +1,6 @@ export default { props: { - items: ['one', 'two', 'three'] + items: ['one', 'two', 'three'], }, html: ` @@ -65,5 +65,5 @@ export default {

five

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-deconflicted/_config.js b/test/runtime/samples/binding-input-text-deconflicted/_config.js index 48a7d2590a89..46fe3e2a3872 100644 --- a/test/runtime/samples/binding-input-text-deconflicted/_config.js +++ b/test/runtime/samples/binding-input-text-deconflicted/_config.js @@ -1,8 +1,8 @@ export default { props: { component: { - name: 'world' - } + name: 'world', + }, }, html: ` @@ -36,5 +36,5 @@ export default {

Hello goodbye!

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js b/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js index 0afbb9d952f4..eeecdb0ef810 100644 --- a/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js +++ b/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js @@ -4,8 +4,8 @@ export default { obj: { foo: 'a', bar: 'b', - baz: 'c' - } + baz: 'c', + }, }, html: ` @@ -56,5 +56,5 @@ export default {
{"foo":"d","bar":"e","baz":"f"}
`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-deep-computed/_config.js b/test/runtime/samples/binding-input-text-deep-computed/_config.js index 3a85d50d76fd..a1ea2c34ad0c 100644 --- a/test/runtime/samples/binding-input-text-deep-computed/_config.js +++ b/test/runtime/samples/binding-input-text-deep-computed/_config.js @@ -2,8 +2,8 @@ export default { props: { prop: 'name', user: { - name: 'alice' - } + name: 'alice', + }, }, html: ` @@ -40,5 +40,5 @@ export default {

hello carol

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js b/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js index 627ef5f15e85..364195233d5c 100644 --- a/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js +++ b/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js @@ -5,9 +5,9 @@ export default { { foo: 'a', bar: 'b', - baz: 'c' - } - ] + baz: 'c', + }, + ], }, html: ` @@ -58,5 +58,5 @@ export default {
{"foo":"d","bar":"e","baz":"f"}
`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-deep-contextual/_config.js b/test/runtime/samples/binding-input-text-deep-contextual/_config.js index cc80d380425a..5b6b0d65779b 100644 --- a/test/runtime/samples/binding-input-text-deep-contextual/_config.js +++ b/test/runtime/samples/binding-input-text-deep-contextual/_config.js @@ -3,8 +3,8 @@ export default { items: [ { description: 'one' }, { description: 'two' }, - { description: 'three' } - ] + { description: 'three' }, + ], }, html: ` @@ -45,5 +45,5 @@ export default {

four

five

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-deep/_config.js b/test/runtime/samples/binding-input-text-deep/_config.js index 35443e907355..e6113510a7cd 100644 --- a/test/runtime/samples/binding-input-text-deep/_config.js +++ b/test/runtime/samples/binding-input-text-deep/_config.js @@ -1,8 +1,8 @@ export default { props: { user: { - name: 'alice' - } + name: 'alice', + }, }, html: ` @@ -39,5 +39,5 @@ export default {

hello carol

`); - } + }, }; diff --git a/test/runtime/samples/binding-input-text-undefined/_config.js b/test/runtime/samples/binding-input-text-undefined/_config.js index fa59b1f796c7..009e1b37ba8b 100644 --- a/test/runtime/samples/binding-input-text-undefined/_config.js +++ b/test/runtime/samples/binding-input-text-undefined/_config.js @@ -26,5 +26,5 @@ export default { component.x = undefined; assert.equal(input.value, ''); - } + }, }; diff --git a/test/runtime/samples/binding-input-text/_config.js b/test/runtime/samples/binding-input-text/_config.js index 52d8e44902ab..e7162b6153bb 100644 --- a/test/runtime/samples/binding-input-text/_config.js +++ b/test/runtime/samples/binding-input-text/_config.js @@ -1,6 +1,6 @@ export default { props: { - name: 'world' + name: 'world', }, html: ` @@ -33,5 +33,5 @@ export default {

hello goodbye

`); - } + }, }; diff --git a/test/runtime/samples/binding-select-initial-value/_config.js b/test/runtime/samples/binding-select-initial-value/_config.js index d34a987fa5a8..d98e5d2e1c11 100644 --- a/test/runtime/samples/binding-select-initial-value/_config.js +++ b/test/runtime/samples/binding-select-initial-value/_config.js @@ -24,7 +24,7 @@ export default { `, props: { - selected: 'b' + selected: 'b', }, test({ assert, component, target }) { @@ -33,5 +33,5 @@ export default { assert.equal(select.value, 'b'); assert.ok(options[1].selected); - } + }, }; diff --git a/test/runtime/samples/binding-select-late-2/_config.js b/test/runtime/samples/binding-select-late-2/_config.js deleted file mode 100644 index 42c45d13668b..000000000000 --- a/test/runtime/samples/binding-select-late-2/_config.js +++ /dev/null @@ -1,34 +0,0 @@ -export default { - props: { - items: [], - selected: 'two' - }, - - html: ` - -

selected: two

- `, - - ssrHtml: ` - -

selected: two

- `, - - test({ assert, component, target }) { - component.items = [ 'one', 'two', 'three' ]; - - const options = target.querySelectorAll('option'); - assert.ok(!options[0].selected); - assert.ok(options[1].selected); - assert.ok(!options[2].selected); - - assert.htmlEqual(target.innerHTML, ` - -

selected: two

- `); - } -}; diff --git a/test/runtime/samples/binding-select-late-2/main.svelte b/test/runtime/samples/binding-select-late-2/main.svelte deleted file mode 100644 index 52cc14528ae6..000000000000 --- a/test/runtime/samples/binding-select-late-2/main.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - - -

selected: {selected || 'nothing'}

\ No newline at end of file diff --git a/test/runtime/samples/binding-select-late-3/_config.js b/test/runtime/samples/binding-select-late-3/_config.js deleted file mode 100644 index 42c45d13668b..000000000000 --- a/test/runtime/samples/binding-select-late-3/_config.js +++ /dev/null @@ -1,34 +0,0 @@ -export default { - props: { - items: [], - selected: 'two' - }, - - html: ` - -

selected: two

- `, - - ssrHtml: ` - -

selected: two

- `, - - test({ assert, component, target }) { - component.items = [ 'one', 'two', 'three' ]; - - const options = target.querySelectorAll('option'); - assert.ok(!options[0].selected); - assert.ok(options[1].selected); - assert.ok(!options[2].selected); - - assert.htmlEqual(target.innerHTML, ` - -

selected: two

- `); - } -}; diff --git a/test/runtime/samples/binding-select-late-3/main.svelte b/test/runtime/samples/binding-select-late-3/main.svelte deleted file mode 100644 index ec9ac8d34511..000000000000 --- a/test/runtime/samples/binding-select-late-3/main.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - - -

selected: {selected || 'nothing'}

\ No newline at end of file diff --git a/test/runtime/samples/binding-select-optgroup/_config.js b/test/runtime/samples/binding-select-optgroup/_config.js index 03ad3e328088..e8a1d4079760 100644 --- a/test/runtime/samples/binding-select-optgroup/_config.js +++ b/test/runtime/samples/binding-select-optgroup/_config.js @@ -45,5 +45,5 @@ export default { `); - } + }, }; diff --git a/test/runtime/samples/binding-select/_config.js b/test/runtime/samples/binding-select/_config.js index 310315176bd1..a5995061a0fe 100644 --- a/test/runtime/samples/binding-select/_config.js +++ b/test/runtime/samples/binding-select/_config.js @@ -24,7 +24,7 @@ export default { `, props: { - selected: 'one' + selected: 'one', }, async test({ assert, component, target, window }) { @@ -53,5 +53,5 @@ export default { `); component.selected = 'three'; - } + }, }; diff --git a/test/runtime/samples/binding-store-deep/_config.js b/test/runtime/samples/binding-store-deep/_config.js index c0f4f6357845..8bdd41818b57 100644 --- a/test/runtime/samples/binding-store-deep/_config.js +++ b/test/runtime/samples/binding-store-deep/_config.js @@ -37,5 +37,5 @@ export default { assert.deepEqual(names, ['world', 'everybody', 'goodbye']); unsubscribe(); - } + }, }; diff --git a/test/runtime/samples/binding-store/_config.js b/test/runtime/samples/binding-store/_config.js index 6e7a70878ad0..eb22d3e96c56 100644 --- a/test/runtime/samples/binding-store/_config.js +++ b/test/runtime/samples/binding-store/_config.js @@ -37,5 +37,5 @@ export default { assert.deepEqual(names, ['world', 'everybody', 'goodbye']); unsubscribe(); - } + }, }; diff --git a/test/runtime/samples/binding-textarea/_config.js b/test/runtime/samples/binding-textarea/_config.js index 70646e5e4bfa..ac092096e6cf 100644 --- a/test/runtime/samples/binding-textarea/_config.js +++ b/test/runtime/samples/binding-textarea/_config.js @@ -1,6 +1,6 @@ export default { props: { - value: 'some text' + value: 'some text', }, html: ` @@ -33,5 +33,5 @@ export default {

goodbye

`); - } + }, }; diff --git a/test/runtime/samples/binding-this-each-block-property-2/_config.js b/test/runtime/samples/binding-this-each-block-property-2/_config.js deleted file mode 100644 index 5c288cd6d1e7..000000000000 --- a/test/runtime/samples/binding-this-each-block-property-2/_config.js +++ /dev/null @@ -1,53 +0,0 @@ -let calls = []; -function callback(refs) { - calls.push(refs.map(({ ref }) => ({ ref }))); -} -export default { - html: ``, - props: { - callback - }, - after_test() { - calls = []; - }, - async test({ assert, component, target }) { - assert.equal(calls.length, 1); - assert.equal(calls[0].length, 0); - - await component.addItem(); - - let divs = target.querySelectorAll("div"); - - assert.equal(calls.length, 3); - assert.equal(calls[1].length, 1); - assert.equal(calls[1][0].ref, null); - assert.equal(calls[2].length, 1); - assert.equal(calls[2][0].ref, divs[0]); - - await component.addItem(); - - divs = target.querySelectorAll("div"); - - assert.equal(calls.length, 5); - assert.equal(calls[3].length, 2); - assert.equal(calls[3][0].ref, divs[0]); - assert.equal(calls[3][1].ref, null); - assert.equal(calls[4].length, 2); - assert.equal(calls[4][0].ref, divs[0]); - assert.equal(calls[4][1].ref, divs[1]); - - await component.addItem(); - - divs = target.querySelectorAll("div"); - - assert.equal(calls.length, 7); - assert.equal(calls[5].length, 3); - assert.equal(calls[5][0].ref, divs[0]); - assert.equal(calls[5][1].ref, divs[1]); - assert.equal(calls[5][2].ref, null); - assert.equal(calls[6].length, 3); - assert.equal(calls[6][0].ref, divs[0]); - assert.equal(calls[6][1].ref, divs[1]); - assert.equal(calls[6][2].ref, divs[2]); - } -}; diff --git a/test/runtime/samples/binding-this-each-block-property-2/main.svelte b/test/runtime/samples/binding-this-each-block-property-2/main.svelte deleted file mode 100644 index bc1efe725cfa..000000000000 --- a/test/runtime/samples/binding-this-each-block-property-2/main.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - -{#each refs as xxx} -
-{/each} \ No newline at end of file diff --git a/test/runtime/samples/bitmask-overflow-2/_config.js b/test/runtime/samples/bitmask-overflow-2/_config.js index 7304f6fa684d..0b637912923f 100644 --- a/test/runtime/samples/bitmask-overflow-2/_config.js +++ b/test/runtime/samples/bitmask-overflow-2/_config.js @@ -1,3 +1,3 @@ export default { - error: `potato is not defined` + error: `potato is not defined`, }; \ No newline at end of file diff --git a/test/runtime/samples/bitmask-overflow-3/_config.js b/test/runtime/samples/bitmask-overflow-3/_config.js index a55a73af1d2e..aee7d3237e6b 100644 --- a/test/runtime/samples/bitmask-overflow-3/_config.js +++ b/test/runtime/samples/bitmask-overflow-3/_config.js @@ -1,3 +1,3 @@ export default { - error: `A is not defined` + error: `A is not defined`, }; \ No newline at end of file diff --git a/test/runtime/samples/bitmask-overflow-slot-2/_config.js b/test/runtime/samples/bitmask-overflow-slot-2/_config.js index 08c0c2f9022c..b01bd81e00bb 100644 --- a/test/runtime/samples/bitmask-overflow-slot-2/_config.js +++ b/test/runtime/samples/bitmask-overflow-slot-2/_config.js @@ -90,7 +90,7 @@ export default { assert.deepEqual(component.reads, { _0: 2, - _1: 2 + _1: 2, }); } }; \ No newline at end of file diff --git a/test/runtime/samples/class-with-spread-and-bind/_config.js b/test/runtime/samples/class-with-spread-and-bind/_config.js index cab46706ef51..f3c54e8c525a 100644 --- a/test/runtime/samples/class-with-spread-and-bind/_config.js +++ b/test/runtime/samples/class-with-spread-and-bind/_config.js @@ -1,6 +1,6 @@ export default { props: { - primary: true + primary: true, }, html: `
`, @@ -14,5 +14,5 @@ export default {
` ); - } + }, }; diff --git a/test/runtime/samples/component-binding-deep/_config.js b/test/runtime/samples/component-binding-deep/_config.js index 8a2f5a56cfeb..be5a2624acc1 100644 --- a/test/runtime/samples/component-binding-deep/_config.js +++ b/test/runtime/samples/component-binding-deep/_config.js @@ -21,5 +21,5 @@ export default {

blah

`); - } + }, }; diff --git a/test/runtime/samples/component-binding-store/Input.svelte b/test/runtime/samples/component-binding-store/Input.svelte deleted file mode 100644 index 792104bec8c0..000000000000 --- a/test/runtime/samples/component-binding-store/Input.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - - \ No newline at end of file diff --git a/test/runtime/samples/component-binding-store/_config.js b/test/runtime/samples/component-binding-store/_config.js deleted file mode 100644 index 8b8a7a170af7..000000000000 --- a/test/runtime/samples/component-binding-store/_config.js +++ /dev/null @@ -1,61 +0,0 @@ -export default { - html: ` - - -
- `, - - async test({ assert, component, target, window }) { - let count = 0; - component.callback = () => { - count++; - }; - - const [input1, input2] = target.querySelectorAll("input"); - - input1.value = "1"; - await input1.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` - - -
1
- ` - ); - assert.equal(input1.value, "1"); - assert.equal(input2.value, "1"); - assert.equal(count, 1); - - input2.value = "123"; - await input2.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` - - -
123
- ` - ); - assert.equal(input1.value, "123"); - assert.equal(input2.value, "123"); - assert.equal(count, 2); - - input1.value = "456"; - await input1.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` - - -
456
- ` - ); - assert.equal(input1.value, "456"); - assert.equal(input2.value, "456"); - assert.equal(count, 3); - } -}; diff --git a/test/runtime/samples/component-binding-store/main.svelte b/test/runtime/samples/component-binding-store/main.svelte deleted file mode 100644 index dba08e527680..000000000000 --- a/test/runtime/samples/component-binding-store/main.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - -
{$value.value}
\ No newline at end of file diff --git a/test/runtime/samples/component-event-handler-contenteditable/_config.js b/test/runtime/samples/component-event-handler-contenteditable/_config.js deleted file mode 100644 index 3a8573497546..000000000000 --- a/test/runtime/samples/component-event-handler-contenteditable/_config.js +++ /dev/null @@ -1,15 +0,0 @@ -export default { - html: ` -
- `, - - async test({ assert, component, target, window }) { - const div = target.querySelector('div'); - const text = window.document.createTextNode('a'); - div.insertBefore(text, null); - const event = new window.InputEvent('input'); - await div.dispatchEvent(event); - - assert.equal(div.textContent, 'a'); - } -}; diff --git a/test/runtime/samples/component-event-handler-contenteditable/main.svelte b/test/runtime/samples/component-event-handler-contenteditable/main.svelte deleted file mode 100644 index 1eb5911df897..000000000000 --- a/test/runtime/samples/component-event-handler-contenteditable/main.svelte +++ /dev/null @@ -1,6 +0,0 @@ - - -
{text}
diff --git a/test/runtime/samples/component-event-not-stale/_config.js b/test/runtime/samples/component-event-not-stale/_config.js index 7951afb9d55f..912ea1f7d037 100644 --- a/test/runtime/samples/component-event-not-stale/_config.js +++ b/test/runtime/samples/component-event-not-stale/_config.js @@ -1,6 +1,6 @@ export default { props: { - value: 1 + value: 1, }, test({ assert, component, target, window }) { @@ -26,5 +26,5 @@ export default { { value: 2 }, { value: 2 } ]); - } + }, }; diff --git a/test/runtime/samples/component-events-console/_config.js b/test/runtime/samples/component-events-console/_config.js index 39ccbd719f9c..b80074978561 100644 --- a/test/runtime/samples/component-events-console/_config.js +++ b/test/runtime/samples/component-events-console/_config.js @@ -21,5 +21,5 @@ export default { } console.log = log; - } + }, }; diff --git a/test/runtime/samples/component-namespace/Tooltip.svelte b/test/runtime/samples/component-namespace/Tooltip.svelte deleted file mode 100644 index 9b44ef57a841..000000000000 --- a/test/runtime/samples/component-namespace/Tooltip.svelte +++ /dev/null @@ -1 +0,0 @@ -

i am a widget

\ No newline at end of file diff --git a/test/runtime/samples/component-namespace/Widget.svelte b/test/runtime/samples/component-namespace/Widget.svelte deleted file mode 100644 index b6aa45c6a89b..000000000000 --- a/test/runtime/samples/component-namespace/Widget.svelte +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/test/runtime/samples/component-namespace/_config.js b/test/runtime/samples/component-namespace/_config.js deleted file mode 100644 index 5b96ac8df009..000000000000 --- a/test/runtime/samples/component-namespace/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - html: '

i am a widget

' -}; diff --git a/test/runtime/samples/component-namespace/main.svelte b/test/runtime/samples/component-namespace/main.svelte deleted file mode 100644 index 3f53b2b1c815..000000000000 --- a/test/runtime/samples/component-namespace/main.svelte +++ /dev/null @@ -1,8 +0,0 @@ - - -{#each widgets as LazyWidget} - -{/each} \ No newline at end of file diff --git a/test/runtime/samples/component-shorthand-import/_config.js b/test/runtime/samples/component-shorthand-import/_config.js index c955224600eb..ceb8e19f68ca 100644 --- a/test/runtime/samples/component-shorthand-import/_config.js +++ b/test/runtime/samples/component-shorthand-import/_config.js @@ -1,3 +1,3 @@ export default { - html: `

This is the widget.

` + html: `

This is the widget.

`, }; diff --git a/test/runtime/samples/component-slot-fallback-3/_config.js b/test/runtime/samples/component-slot-fallback-3/_config.js index 25cc65eb2d23..b5591fb5e07d 100644 --- a/test/runtime/samples/component-slot-fallback-3/_config.js +++ b/test/runtime/samples/component-slot-fallback-3/_config.js @@ -2,5 +2,5 @@ export default { html: `
Hello World
Hello
world
Bye
World
- ` + `, }; diff --git a/test/runtime/samples/component-slot-fallback-4/_config.js b/test/runtime/samples/component-slot-fallback-4/_config.js index 4ebe35351398..b7c2b63ed6f7 100644 --- a/test/runtime/samples/component-slot-fallback-4/_config.js +++ b/test/runtime/samples/component-slot-fallback-4/_config.js @@ -1,5 +1,5 @@ export default { html: ` foobar - ` + `, }; diff --git a/test/runtime/samples/component-slot-let-in-slot/_config.js b/test/runtime/samples/component-slot-let-in-slot/_config.js index eb16c27fda78..a86d869581fa 100644 --- a/test/runtime/samples/component-slot-let-in-slot/_config.js +++ b/test/runtime/samples/component-slot-let-in-slot/_config.js @@ -1,6 +1,6 @@ export default { props: { - prop: 'a' + prop: 'a', }, html: 'a', diff --git a/test/runtime/samples/component-slot-nested-if/_config.js b/test/runtime/samples/component-slot-nested-if/_config.js index 45c570fc2236..89dfd006cc76 100644 --- a/test/runtime/samples/component-slot-nested-if/_config.js +++ b/test/runtime/samples/component-slot-nested-if/_config.js @@ -26,5 +26,5 @@ export default { Display: abc ` ); - } + }, }; diff --git a/test/runtime/samples/deconflict-builtins-2/_config.js b/test/runtime/samples/deconflict-builtins-2/_config.js index 1489f83dc410..5870ff073b45 100644 --- a/test/runtime/samples/deconflict-builtins-2/_config.js +++ b/test/runtime/samples/deconflict-builtins-2/_config.js @@ -1,4 +1,4 @@ export default { html: `hello world`, - preserveIdentifiers: true + preserveIdentifiers: true, }; \ No newline at end of file diff --git a/test/runtime/samples/dev-warning-missing-data-each/_config.js b/test/runtime/samples/dev-warning-missing-data-each/_config.js index 7d7794eff49c..92cda48fceb4 100644 --- a/test/runtime/samples/dev-warning-missing-data-each/_config.js +++ b/test/runtime/samples/dev-warning-missing-data-each/_config.js @@ -7,18 +7,18 @@ export default { letters: [ { id: 1, - char: 'a' + char: 'a', }, { id: 2, - char: 'b' + char: 'b', }, { id: 3, - char: 'c' - } - ] + char: 'c', + }, + ], }, - warnings: [] + warnings: [], }; diff --git a/test/runtime/samples/document-event/_config.js b/test/runtime/samples/document-event/_config.js index d9a8866275aa..f5e4b46f4f44 100644 --- a/test/runtime/samples/document-event/_config.js +++ b/test/runtime/samples/document-event/_config.js @@ -9,5 +9,5 @@ export default { const event2 = new window.Event('mouseleave'); window.document.body.dispatchEvent(event2); assert.deepEqual(component.events, ['enter', 'leave']); - } + }, }; diff --git a/test/runtime/samples/each-block-array-literal/_config.js b/test/runtime/samples/each-block-array-literal/_config.js index 164e4730bceb..288d1cd09f16 100644 --- a/test/runtime/samples/each-block-array-literal/_config.js +++ b/test/runtime/samples/each-block-array-literal/_config.js @@ -15,5 +15,5 @@ export default { button.dispatchEvent(event); assert.equal(component.clicked, 'racoon'); - } + }, }; diff --git a/test/runtime/samples/each-block-destructured-array-sparse/_config.js b/test/runtime/samples/each-block-destructured-array-sparse/_config.js index 331c3aec1bc0..9805276600a0 100644 --- a/test/runtime/samples/each-block-destructured-array-sparse/_config.js +++ b/test/runtime/samples/each-block-destructured-array-sparse/_config.js @@ -16,5 +16,5 @@ export default { assert.htmlEqual( target.innerHTML, `

bar

`); - } + }, }; diff --git a/test/runtime/samples/each-block-destructured-array/_config.js b/test/runtime/samples/each-block-destructured-array/_config.js index e2924c8656bf..432d8a3a78d4 100644 --- a/test/runtime/samples/each-block-destructured-array/_config.js +++ b/test/runtime/samples/each-block-destructured-array/_config.js @@ -16,5 +16,5 @@ export default { assert.htmlEqual( target.innerHTML, `

foo: bar

`); - } + }, }; diff --git a/test/runtime/samples/each-block-destructured-default/_config.js b/test/runtime/samples/each-block-destructured-default/_config.js index 0e99fd589f3a..133fd685321a 100644 --- a/test/runtime/samples/each-block-destructured-default/_config.js +++ b/test/runtime/samples/each-block-destructured-default/_config.js @@ -18,5 +18,5 @@ export default { assert.htmlEqual(target.innerHTML, `

cow - ‎B. taurus - 50kg

`); - } + }, }; diff --git a/test/runtime/samples/each-block-destructured-object-binding/_config.js b/test/runtime/samples/each-block-destructured-object-binding/_config.js index 2ab3e243970b..8b59a9703411 100644 --- a/test/runtime/samples/each-block-destructured-object-binding/_config.js +++ b/test/runtime/samples/each-block-destructured-object-binding/_config.js @@ -1,6 +1,6 @@ export default { props: { - people: [{ name: { first: 'Doctor', last: 'Who' } }] + people: [{ name: { first: 'Doctor', last: 'Who' } }], }, html: ` @@ -41,5 +41,5 @@ export default {

Frank Oz

`); - } + }, }; diff --git a/test/runtime/samples/each-block-destructured-object-rest/_config.js b/test/runtime/samples/each-block-destructured-object-rest/_config.js index be5d38b55534..561d4e844215 100644 --- a/test/runtime/samples/each-block-destructured-object-rest/_config.js +++ b/test/runtime/samples/each-block-destructured-object-rest/_config.js @@ -16,5 +16,5 @@ export default { assert.htmlEqual(target.innerHTML, `

cow

`); - } + }, }; diff --git a/test/runtime/samples/each-block-destructured-object/_config.js b/test/runtime/samples/each-block-destructured-object/_config.js index feec72f402f8..dc3943fffeac 100644 --- a/test/runtime/samples/each-block-destructured-object/_config.js +++ b/test/runtime/samples/each-block-destructured-object/_config.js @@ -16,5 +16,5 @@ export default { assert.htmlEqual( target.innerHTML, `

cow: hooves

`); - } + }, }; diff --git a/test/runtime/samples/each-block-else-mount-or-intro/_config.js b/test/runtime/samples/each-block-else-mount-or-intro/_config.js index acf2bafd5fba..8460a4b5e040 100644 --- a/test/runtime/samples/each-block-else-mount-or-intro/_config.js +++ b/test/runtime/samples/each-block-else-mount-or-intro/_config.js @@ -1,4 +1,4 @@ export default { props: { items: [] }, - html: `No items.` + html: `No items.`, }; diff --git a/test/runtime/samples/each-block-in-if-block/_config.js b/test/runtime/samples/each-block-in-if-block/_config.js index 082b9b303373..eda3ca14a9f0 100644 --- a/test/runtime/samples/each-block-in-if-block/_config.js +++ b/test/runtime/samples/each-block-in-if-block/_config.js @@ -1,7 +1,7 @@ export default { props: { dummy: false, - fruits: ['Apple', 'Banana', 'Tomato'] + fruits: ['Apple', 'Banana', 'Tomato'], }, html: '
Apple
Banana
Tomato
', diff --git a/test/runtime/samples/each-block-keyed-component-action/Component.svelte b/test/runtime/samples/each-block-keyed-component-action/Component.svelte deleted file mode 100644 index 18a6c7452a01..000000000000 --- a/test/runtime/samples/each-block-keyed-component-action/Component.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -
diff --git a/test/runtime/samples/each-block-keyed-component-action/_config.js b/test/runtime/samples/each-block-keyed-component-action/_config.js deleted file mode 100644 index 66c609be01b1..000000000000 --- a/test/runtime/samples/each-block-keyed-component-action/_config.js +++ /dev/null @@ -1,21 +0,0 @@ -export default { - test({ assert, component, raf }) { - assert.equal(component.count, 0); - - component.arr = ["2"]; - - assert.equal(component.count, 1); - - component.arr = ["1", "2"]; - - assert.equal(component.count, 2); - - component.arr = ["2", "1"]; - - assert.equal(component.count, 2); - - component.arr = []; - - assert.equal(component.count, 0); - } -}; diff --git a/test/runtime/samples/each-block-keyed-component-action/main.svelte b/test/runtime/samples/each-block-keyed-component-action/main.svelte deleted file mode 100644 index bfacdf402a02..000000000000 --- a/test/runtime/samples/each-block-keyed-component-action/main.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - -{#each arr as item (item)} - -{/each} diff --git a/test/runtime/samples/each-block-keyed-empty/_config.js b/test/runtime/samples/each-block-keyed-empty/_config.js index 2c9055ce4466..cf8f4d321901 100644 --- a/test/runtime/samples/each-block-keyed-empty/_config.js +++ b/test/runtime/samples/each-block-keyed-empty/_config.js @@ -1,6 +1,6 @@ export default { props: { - x: [{ z: 1 }, { z: 2 }] + x: [{ z: 1 }, { z: 2 }], }, html: `` diff --git a/test/runtime/samples/each-block-keyed-non-prop/_config.js b/test/runtime/samples/each-block-keyed-non-prop/_config.js index 2cccbedef0f4..90e9a7f9c866 100644 --- a/test/runtime/samples/each-block-keyed-non-prop/_config.js +++ b/test/runtime/samples/each-block-keyed-non-prop/_config.js @@ -25,5 +25,5 @@ export default { assert.equal(p1, p4, 'first

element should be retained'); assert.equal(p3, p5, 'last

element should be retained'); - } + }, }; diff --git a/test/runtime/samples/each-block-keyed-random-permute/_config.js b/test/runtime/samples/each-block-keyed-random-permute/_config.js index 4e6830a61682..80bf2d91151a 100644 --- a/test/runtime/samples/each-block-keyed-random-permute/_config.js +++ b/test/runtime/samples/each-block-keyed-random-permute/_config.js @@ -19,7 +19,7 @@ function permute() { export default { props: { - values: toObjects('abc') + values: toObjects('abc'), }, html: `(a)(b)(c)`, diff --git a/test/runtime/samples/each-block-keyed-shift/_config.js b/test/runtime/samples/each-block-keyed-shift/_config.js index 4e7809445c49..44ca8447f0d6 100644 --- a/test/runtime/samples/each-block-keyed-shift/_config.js +++ b/test/runtime/samples/each-block-keyed-shift/_config.js @@ -1,6 +1,6 @@ export default { props: { - titles: [{ name: 'a' }, { name: 'b' }, { name: 'c' }] + titles: [{ name: 'a', }, { name: 'b' }, { name: 'c' }] }, html: ` diff --git a/test/runtime/samples/each-block-keyed-siblings/_config.js b/test/runtime/samples/each-block-keyed-siblings/_config.js index a52b6c404d50..d87f8943da70 100644 --- a/test/runtime/samples/each-block-keyed-siblings/_config.js +++ b/test/runtime/samples/each-block-keyed-siblings/_config.js @@ -1,7 +1,7 @@ export default { props: { ones: [{ text: '1' }], - twos: [{ text: '2' }] + twos: [{ text: '2' }], }, html: ` @@ -16,5 +16,5 @@ export default {

11
2
`); - } + }, }; diff --git a/test/runtime/samples/each-block-keyed-static/_config.js b/test/runtime/samples/each-block-keyed-static/_config.js index 57800c454fa4..629ea47ebb33 100644 --- a/test/runtime/samples/each-block-keyed-static/_config.js +++ b/test/runtime/samples/each-block-keyed-static/_config.js @@ -1,6 +1,6 @@ export default { props: { - x: [{ z: 1 }, { z: 2 }] + x: [{ z: 1 }, { z: 2 }], }, html: ` diff --git a/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js b/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js deleted file mode 100644 index 384c2dd2b4cc..000000000000 --- a/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js +++ /dev/null @@ -1,23 +0,0 @@ -export default { - html: ` - Hello - - `, - ssrHtml: ` - Hello - - `, - async test({ assert, target, window }) { - const input = target.querySelector("input"); - input.value = "abcd"; - await input.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` - abcd - - ` - ); - } -}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte b/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte deleted file mode 100644 index f5bff01e6cc2..000000000000 --- a/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -{#each a as { a }} - {a} - -{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js b/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js deleted file mode 100644 index 92230a735c2c..000000000000 --- a/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js +++ /dev/null @@ -1,105 +0,0 @@ -export default { - html: ` -
- Hello World - - -
-
- Sapper App - - -
- `, - - ssrHtml: ` -
- Hello World - - -
-
- Sapper App - - -
- `, - async test({ assert, target, window }) { - const [input1, input2, input3, input4] = target.querySelectorAll("input"); - input1.value = "Awesome"; - await input1.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` -
- Awesome World - - -
-
- Sapper App - - -
- ` - ); - - input2.value = "Svelte"; - await input2.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` -
- Awesome Svelte - - -
-
- Sapper App - - -
- ` - ); - - input3.value = "Foo"; - await input3.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` -
- Awesome Svelte - - -
-
- Foo App - - -
- ` - ); - - input4.value = "Bar"; - await input4.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` -
- Awesome Svelte - - -
-
- Foo Bar - - -
- ` - ); - } -}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte b/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte deleted file mode 100644 index 2e8fe5e59193..000000000000 --- a/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - -{#each a as a} -
- {a[0]} {a[1]} - - -
-{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js b/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js deleted file mode 100644 index 418fcbea4a27..000000000000 --- a/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js +++ /dev/null @@ -1,64 +0,0 @@ -export default { - html: ` -
- b: Hello - -
- - `, - ssrHtml: ` -
- b: Hello - -
- - `, - async test({ assert, target, window }) { - const input = target.querySelector("input"); - const button = target.querySelector("button"); - - input.value = "Awesome"; - await input.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` -
- b: Awesome - -
- - ` - ); - - - await button.dispatchEvent(new window.MouseEvent("click")); - - assert.htmlEqual( - target.innerHTML, - ` -
- c: World - -
- - ` - ); - - assert.equal(input.value, 'World'); - - input.value = "Svelte"; - await input.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` -
- c: Svelte - -
- - ` - ); - } -}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte b/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte deleted file mode 100644 index bc4f172dd020..000000000000 --- a/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - -{#each a as { a, key }} -
- {key}: {a[key]} - -
-{/each} - - \ No newline at end of file diff --git a/test/runtime/samples/each-block-scope-shadow-bind/_config.js b/test/runtime/samples/each-block-scope-shadow-bind/_config.js deleted file mode 100644 index 384c2dd2b4cc..000000000000 --- a/test/runtime/samples/each-block-scope-shadow-bind/_config.js +++ /dev/null @@ -1,23 +0,0 @@ -export default { - html: ` - Hello - - `, - ssrHtml: ` - Hello - - `, - async test({ assert, target, window }) { - const input = target.querySelector("input"); - input.value = "abcd"; - await input.dispatchEvent(new window.Event("input")); - - assert.htmlEqual( - target.innerHTML, - ` - abcd - - ` - ); - } -}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind/main.svelte b/test/runtime/samples/each-block-scope-shadow-bind/main.svelte deleted file mode 100644 index f3471e179f3b..000000000000 --- a/test/runtime/samples/each-block-scope-shadow-bind/main.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -{#each a as a} - {a} - -{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-block-scope-shadow-self/_config.js b/test/runtime/samples/each-block-scope-shadow-self/_config.js index 867aadfab9d5..1669dc5b6eb1 100644 --- a/test/runtime/samples/each-block-scope-shadow-self/_config.js +++ b/test/runtime/samples/each-block-scope-shadow-self/_config.js @@ -9,5 +9,5 @@ export default { assert.equal(target.querySelectorAll('input').length, 3); assert.deepEqual(component.data, { a: 'svelte', b: 'B', c: 'C' }); assert.deepEqual(component.x, ['a', 'b', 'c']); - } + }, }; diff --git a/test/runtime/samples/each-blocks-assignment-2/_config.js b/test/runtime/samples/each-blocks-assignment-2/_config.js deleted file mode 100644 index 083161726173..000000000000 --- a/test/runtime/samples/each-blocks-assignment-2/_config.js +++ /dev/null @@ -1,20 +0,0 @@ -export default { - html: ` - foo - - `, - async test({ assert, component, target, window }) { - const button = target.querySelector("button"); - - const clickEvent = new window.MouseEvent("click"); - await button.dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - bar - - ` - ); - } -}; diff --git a/test/runtime/samples/each-blocks-assignment-2/main.svelte b/test/runtime/samples/each-blocks-assignment-2/main.svelte deleted file mode 100644 index 5ef3ae83acc3..000000000000 --- a/test/runtime/samples/each-blocks-assignment-2/main.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - -{#each arr as o} - {o.prop} - -{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-blocks-assignment/_config.js b/test/runtime/samples/each-blocks-assignment/_config.js deleted file mode 100644 index 2c95d486d67d..000000000000 --- a/test/runtime/samples/each-blocks-assignment/_config.js +++ /dev/null @@ -1,97 +0,0 @@ -export default { - html: ` - - 1 - - 2 - - 3 - - `, - async test({ assert, component, target, window }) { - let [incrementBtn, ...buttons] = target.querySelectorAll("button"); - - const clickEvent = new window.MouseEvent("click"); - await buttons[0].dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - - 2 - - 2 - - 3 - - ` - ); - - await buttons[0].dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - - 4 - - 2 - - 3 - - ` - ); - - await buttons[2].dispatchEvent(clickEvent); - await buttons[2].dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - - 4 - - 2 - - 12 - - ` - ); - - await incrementBtn.dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - - 4 - - 2 - - 12 - - 4 - - ` - ); - - [incrementBtn, ...buttons] = target.querySelectorAll("button"); - - await buttons[3].dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - - 4 - - 2 - - 12 - - 8 - - ` - ); - } -}; diff --git a/test/runtime/samples/each-blocks-assignment/main.svelte b/test/runtime/samples/each-blocks-assignment/main.svelte deleted file mode 100644 index f74bffbe04f7..000000000000 --- a/test/runtime/samples/each-blocks-assignment/main.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - -{#each arr as o} - {o} - -{/each} \ No newline at end of file diff --git a/test/runtime/samples/empty-dom/_config.js b/test/runtime/samples/empty-dom/_config.js index 7da2831db478..e3e3d0ecd521 100644 --- a/test/runtime/samples/empty-dom/_config.js +++ b/test/runtime/samples/empty-dom/_config.js @@ -1,3 +1,3 @@ export default { - html: '' + html: '', }; \ No newline at end of file diff --git a/test/runtime/samples/empty-style-block/_config.js b/test/runtime/samples/empty-style-block/_config.js index 22dc25b41e1f..0375bad02998 100644 --- a/test/runtime/samples/empty-style-block/_config.js +++ b/test/runtime/samples/empty-style-block/_config.js @@ -1,3 +1,3 @@ export default { - html: '' + html: '', }; diff --git a/test/runtime/samples/escape-template-literals/_config.js b/test/runtime/samples/escape-template-literals/_config.js index 9e50f9476440..1419d656794a 100644 --- a/test/runtime/samples/escape-template-literals/_config.js +++ b/test/runtime/samples/escape-template-literals/_config.js @@ -1,3 +1,3 @@ export default { - html: '`${foo}\\n`\n
foo
\n
`${foo}\\n`
' + html: '`${foo}\\n`\n
foo
\n
`${foo}\\n`
', }; diff --git a/test/runtime/samples/event-handler-async/_config.js b/test/runtime/samples/event-handler-async/_config.js index b483d039edbf..fab4d998b605 100644 --- a/test/runtime/samples/event-handler-async/_config.js +++ b/test/runtime/samples/event-handler-async/_config.js @@ -1,5 +1,5 @@ export default { html: ` - ` + `, }; diff --git a/test/runtime/samples/event-handler-dynamic-2/_config.js b/test/runtime/samples/event-handler-dynamic-2/_config.js index 5fded4785517..c996d8f2aaec 100644 --- a/test/runtime/samples/event-handler-dynamic-2/_config.js +++ b/test/runtime/samples/event-handler-dynamic-2/_config.js @@ -29,5 +29,5 @@ export default { await handler_b.dispatchEvent(event); assert.equal(p.innerHTML, '2'); - } + }, }; diff --git a/test/runtime/samples/event-handler-dynamic-bound-var/_config.js b/test/runtime/samples/event-handler-dynamic-bound-var/_config.js index c490db000a92..c832127c092d 100644 --- a/test/runtime/samples/event-handler-dynamic-bound-var/_config.js +++ b/test/runtime/samples/event-handler-dynamic-bound-var/_config.js @@ -16,5 +16,5 @@ export default { Bye World ` ); - } + }, }; diff --git a/test/runtime/samples/event-handler-dynamic-expression/_config.js b/test/runtime/samples/event-handler-dynamic-expression/_config.js index b202196ebf4d..c4d259a54246 100644 --- a/test/runtime/samples/event-handler-dynamic-expression/_config.js +++ b/test/runtime/samples/event-handler-dynamic-expression/_config.js @@ -16,5 +16,5 @@ export default { await button.dispatchEvent(event); assert.htmlEqual(target.innerHTML, ``); - } + }, }; diff --git a/test/runtime/samples/event-handler-dynamic-hash/_config.js b/test/runtime/samples/event-handler-dynamic-hash/_config.js index dcfebb700836..e60e5615245f 100644 --- a/test/runtime/samples/event-handler-dynamic-hash/_config.js +++ b/test/runtime/samples/event-handler-dynamic-hash/_config.js @@ -52,5 +52,5 @@ export default {

2

`); - } + }, }; diff --git a/test/runtime/samples/event-handler-dynamic-invalid/_config.js b/test/runtime/samples/event-handler-dynamic-invalid/_config.js index ad9d8c868028..ba1777f94503 100644 --- a/test/runtime/samples/event-handler-dynamic-invalid/_config.js +++ b/test/runtime/samples/event-handler-dynamic-invalid/_config.js @@ -24,5 +24,5 @@ export default { await buttonInvalid.dispatchEvent(event); assert.equal(err, "", err); - } + }, }; diff --git a/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js b/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js index 6bd96ba8aa80..6d7d29e48288 100644 --- a/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js +++ b/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js @@ -12,5 +12,5 @@ export default { await button.dispatchEvent(event); assert.ok(!component.inner_clicked); - } + }, }; diff --git a/test/runtime/samples/event-handler-dynamic/_config.js b/test/runtime/samples/event-handler-dynamic/_config.js index dcfebb700836..e60e5615245f 100644 --- a/test/runtime/samples/event-handler-dynamic/_config.js +++ b/test/runtime/samples/event-handler-dynamic/_config.js @@ -52,5 +52,5 @@ export default {

2

`); - } + }, }; diff --git a/test/runtime/samples/event-handler-each-this/_config.js b/test/runtime/samples/event-handler-each-this/_config.js index 7f6528977c08..3ab2d5acdcff 100644 --- a/test/runtime/samples/event-handler-each-this/_config.js +++ b/test/runtime/samples/event-handler-each-this/_config.js @@ -1,6 +1,6 @@ export default { props: { - items: ['foo', 'bar', 'baz'] + items: ['foo', 'bar', 'baz'], }, html: ` diff --git a/test/runtime/samples/event-handler-modifier-self/_config.js b/test/runtime/samples/event-handler-modifier-self/_config.js index 6bd96ba8aa80..6d7d29e48288 100644 --- a/test/runtime/samples/event-handler-modifier-self/_config.js +++ b/test/runtime/samples/event-handler-modifier-self/_config.js @@ -12,5 +12,5 @@ export default { await button.dispatchEvent(event); assert.ok(!component.inner_clicked); - } + }, }; diff --git a/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js b/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js index 34cee8157c3d..d5f3def7f197 100644 --- a/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js +++ b/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js @@ -37,17 +37,17 @@ export default { todos: { first: { description: 'Buy some milk', - done: true + done: true, }, second: { description: 'Do the laundry', - done: true + done: true, }, third: { description: "Find life's true purpose", - done: false - } - } + done: false, + }, + }, }, async test({ assert, component, target, window }) { @@ -74,5 +74,5 @@ export default {
`); - } + }, }; diff --git a/test/runtime/samples/globals-shadowed-by-each-binding/_config.js b/test/runtime/samples/globals-shadowed-by-each-binding/_config.js index 50feb09bb6e9..f69e5e8b0e19 100644 --- a/test/runtime/samples/globals-shadowed-by-each-binding/_config.js +++ b/test/runtime/samples/globals-shadowed-by-each-binding/_config.js @@ -1,3 +1,3 @@ export default { - html: '

Alert1

Alert2

' + html: '

Alert1

Alert2

', }; diff --git a/test/runtime/samples/if-block-component-store-function-conditionals/_config.js b/test/runtime/samples/if-block-component-store-function-conditionals/_config.js index 609765d2250f..db171f2fd18d 100644 --- a/test/runtime/samples/if-block-component-store-function-conditionals/_config.js +++ b/test/runtime/samples/if-block-component-store-function-conditionals/_config.js @@ -1,3 +1,3 @@ export default { - html: '

OK

' + html: '

OK

', }; diff --git a/test/runtime/samples/if-block-component-without-outro/_config.js b/test/runtime/samples/if-block-component-without-outro/_config.js index fbcc328fa31f..8106081c7c47 100644 --- a/test/runtime/samples/if-block-component-without-outro/_config.js +++ b/test/runtime/samples/if-block-component-without-outro/_config.js @@ -1,6 +1,6 @@ export default { props: { - foo: true + foo: true, }, html: '
A wild component appears
', @@ -8,5 +8,5 @@ export default { test({ assert, component, target }) { component.foo = false; assert.htmlEqual(target.innerHTML, ''); - } + }, }; diff --git a/test/runtime/samples/if-block-else-in-each/_config.js b/test/runtime/samples/if-block-else-in-each/_config.js index e75dcb15ee6f..44268f32b9cb 100644 --- a/test/runtime/samples/if-block-else-in-each/_config.js +++ b/test/runtime/samples/if-block-else-in-each/_config.js @@ -1,9 +1,9 @@ export default { props: { - array: [true, false] + array: [true, false], }, html: `
foo
bar
- ` + `, }; diff --git a/test/runtime/samples/if-block-else-partial-outro/_config.js b/test/runtime/samples/if-block-else-partial-outro/_config.js index ae58d25c232f..a358680edf1b 100644 --- a/test/runtime/samples/if-block-else-partial-outro/_config.js +++ b/test/runtime/samples/if-block-else-partial-outro/_config.js @@ -1,7 +1,7 @@ export default { props: { x: 1, - y: false + y: false, }, html: ` @@ -13,5 +13,5 @@ export default { assert.htmlEqual(target.innerHTML, ` 2 `); - } + }, }; diff --git a/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js b/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js index da80f5be1202..b2e71ea01f35 100644 --- a/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js +++ b/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js @@ -18,5 +18,5 @@ export default {

y

`); - } + }, }; diff --git a/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js b/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js index 15213e19b375..b94da1a576f4 100644 --- a/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js +++ b/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js @@ -2,5 +2,5 @@ export default { html: `
- ` + `, }; diff --git a/test/runtime/samples/initial-state-assign/_config.js b/test/runtime/samples/initial-state-assign/_config.js index 95a1a5e068ef..b4067fef8021 100644 --- a/test/runtime/samples/initial-state-assign/_config.js +++ b/test/runtime/samples/initial-state-assign/_config.js @@ -3,5 +3,5 @@ export default { html: ` "foo" "bar" - ` + `, }; diff --git a/test/runtime/samples/innerhtml-with-comments/_config.js b/test/runtime/samples/innerhtml-with-comments/_config.js deleted file mode 100644 index 95d4a6fa968d..000000000000 --- a/test/runtime/samples/innerhtml-with-comments/_config.js +++ /dev/null @@ -1,8 +0,0 @@ -export default { - html: ` - - Style: - Bootstrap. - - ` -}; \ No newline at end of file diff --git a/test/runtime/samples/innerhtml-with-comments/main.svelte b/test/runtime/samples/innerhtml-with-comments/main.svelte deleted file mode 100644 index e00f7550726d..000000000000 --- a/test/runtime/samples/innerhtml-with-comments/main.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - Style: - - Bootstrap. - \ No newline at end of file diff --git a/test/runtime/samples/lifecycle-render-order-for-children/_config.js b/test/runtime/samples/lifecycle-render-order-for-children/_config.js index d182d5a97eb8..033b593aeacb 100644 --- a/test/runtime/samples/lifecycle-render-order-for-children/_config.js +++ b/test/runtime/samples/lifecycle-render-order-for-children/_config.js @@ -21,7 +21,7 @@ export default { '3: onMount', '3: afterUpdate', '0: onMount', - '0: afterUpdate' + '0: afterUpdate', ]); } else { assert.deepEqual(order, [ @@ -40,10 +40,10 @@ export default { '3: onMount', '3: afterUpdate', '0: onMount', - '0: afterUpdate' + '0: afterUpdate', ]); } order.length = 0; - } + }, }; diff --git a/test/runtime/samples/loop-protect-generator-opt-out/_config.js b/test/runtime/samples/loop-protect-generator-opt-out/_config.js index 0fe83a36dbd9..9b6a24b51315 100644 --- a/test/runtime/samples/loop-protect-generator-opt-out/_config.js +++ b/test/runtime/samples/loop-protect-generator-opt-out/_config.js @@ -1,6 +1,6 @@ export default { compileOptions: { dev: true, - loopGuardTimeout: 1 - } + loopGuardTimeout: 1, + }, }; diff --git a/test/runtime/samples/loop-protect-inner-function/_config.js b/test/runtime/samples/loop-protect-inner-function/_config.js index 1b553e247513..862d4f4c0f44 100644 --- a/test/runtime/samples/loop-protect-inner-function/_config.js +++ b/test/runtime/samples/loop-protect-inner-function/_config.js @@ -2,6 +2,6 @@ export default { html: '
', compileOptions: { dev: true, - loopGuardTimeout: 100 + loopGuardTimeout: 100, } }; diff --git a/test/runtime/samples/loop-protect/_config.js b/test/runtime/samples/loop-protect/_config.js index 230bbeb53d8f..75f75c003d93 100644 --- a/test/runtime/samples/loop-protect/_config.js +++ b/test/runtime/samples/loop-protect/_config.js @@ -2,6 +2,6 @@ export default { error: 'Infinite loop detected', compileOptions: { dev: true, - loopGuardTimeout: 100 + loopGuardTimeout: 100, } }; diff --git a/test/runtime/samples/nested-transition-detach-each/_config.js b/test/runtime/samples/nested-transition-detach-each/_config.js index 00c2d44048ac..e17fe1bc4d5b 100644 --- a/test/runtime/samples/nested-transition-detach-each/_config.js +++ b/test/runtime/samples/nested-transition-detach-each/_config.js @@ -35,5 +35,5 @@ export default { raf.tick(0); raf.tick(100); assert.htmlEqual(target.innerHTML, ``); - } + }, }; diff --git a/test/runtime/samples/nested-transition-detach-if-false/_config.js b/test/runtime/samples/nested-transition-detach-if-false/_config.js index 1d420941922a..d2ae78ffe385 100644 --- a/test/runtime/samples/nested-transition-detach-if-false/_config.js +++ b/test/runtime/samples/nested-transition-detach-if-false/_config.js @@ -20,5 +20,5 @@ export default { a `); - } + }, }; diff --git a/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js b/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js index 30ff83b39f72..6696389e6e09 100644 --- a/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js +++ b/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js @@ -20,5 +20,5 @@ export default { }; component.value = 'two'; - } + }, }; diff --git a/test/runtime/samples/noscript-removal/_config.js b/test/runtime/samples/noscript-removal/_config.js index 709792c14a65..35bdcefd9639 100644 --- a/test/runtime/samples/noscript-removal/_config.js +++ b/test/runtime/samples/noscript-removal/_config.js @@ -5,5 +5,5 @@ export default {
foo
foo
foo
-` +`, }; diff --git a/test/runtime/samples/paren-wrapped-expressions/_config.js b/test/runtime/samples/paren-wrapped-expressions/_config.js index 972dc51cb022..0c757dc85499 100644 --- a/test/runtime/samples/paren-wrapped-expressions/_config.js +++ b/test/runtime/samples/paren-wrapped-expressions/_config.js @@ -2,7 +2,7 @@ export default { props: { a: 'foo', b: true, - c: [ 1, 2, 3 ] + c: [ 1, 2, 3 ], }, html: ` diff --git a/test/runtime/samples/prop-exports/_config.js b/test/runtime/samples/prop-exports/_config.js index 69a40c4fabf3..e1620c015fa6 100644 --- a/test/runtime/samples/prop-exports/_config.js +++ b/test/runtime/samples/prop-exports/_config.js @@ -10,7 +10,7 @@ export default { a2: 4, a6: writable(29), for: 'loop', - continue: '...' + continue: '...', }, html: ` diff --git a/test/runtime/samples/props-reactive-only-with-change/Comp.svelte b/test/runtime/samples/props-reactive-only-with-change/Comp.svelte deleted file mode 100644 index 0eaf8a40d48a..000000000000 --- a/test/runtime/samples/props-reactive-only-with-change/Comp.svelte +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/test/runtime/samples/props-reactive-only-with-change/_config.js b/test/runtime/samples/props-reactive-only-with-change/_config.js deleted file mode 100644 index d2e86e583d5e..000000000000 --- a/test/runtime/samples/props-reactive-only-with-change/_config.js +++ /dev/null @@ -1,30 +0,0 @@ -let callbacks = []; - -export default { - props: { - callback: (value) => callbacks.push(value), - val1: "1", - val2: "2" - }, - - before_test() { - callbacks = []; - }, - - async test({ assert, component, target }) { - assert.equal(callbacks.length, 2); - assert.equal(JSON.stringify(callbacks), '["1","2"]'); - - component.val1 = "3"; - assert.equal(callbacks.length, 3); - assert.equal(JSON.stringify(callbacks), '["1","2","1"]'); - - component.val1 = "4"; - assert.equal(callbacks.length, 4); - assert.equal(JSON.stringify(callbacks), '["1","2","1","1"]'); - - component.val2 = "5"; - assert.equal(callbacks.length, 5); - assert.equal(JSON.stringify(callbacks), '["1","2","1","1","2"]'); - } -}; diff --git a/test/runtime/samples/props-reactive-only-with-change/main.svelte b/test/runtime/samples/props-reactive-only-with-change/main.svelte deleted file mode 100644 index 73ddd137f5bc..000000000000 --- a/test/runtime/samples/props-reactive-only-with-change/main.svelte +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file diff --git a/test/runtime/samples/props-reactive-slot/Comp.svelte b/test/runtime/samples/props-reactive-slot/Comp.svelte deleted file mode 100644 index bf9e12a58a80..000000000000 --- a/test/runtime/samples/props-reactive-slot/Comp.svelte +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/runtime/samples/props-reactive-slot/_config.js b/test/runtime/samples/props-reactive-slot/_config.js deleted file mode 100644 index 8ee6ef69dc1b..000000000000 --- a/test/runtime/samples/props-reactive-slot/_config.js +++ /dev/null @@ -1,21 +0,0 @@ -export default { - html: ` -

hi

- - `, - - async test({ assert, component, target, window }) { - const btn = target.querySelector("button"); - const clickEvent = new window.MouseEvent("click"); - - await btn.dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` -

changed

- - ` - ); - } -}; diff --git a/test/runtime/samples/props-reactive-slot/main.svelte b/test/runtime/samples/props-reactive-slot/main.svelte deleted file mode 100644 index 84777bf8abe0..000000000000 --- a/test/runtime/samples/props-reactive-slot/main.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - -

- {props.someprop} -

-
- - \ No newline at end of file diff --git a/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte b/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte deleted file mode 100644 index d94954f49b24..000000000000 --- a/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -{@html content} \ No newline at end of file diff --git a/test/runtime/samples/raw-mustache-as-root/_config.js b/test/runtime/samples/raw-mustache-as-root/_config.js deleted file mode 100644 index e42fa7f5177e..000000000000 --- a/test/runtime/samples/raw-mustache-as-root/_config.js +++ /dev/null @@ -1,33 +0,0 @@ -export default { - html: ` - -

Another first line

-

This line should be last.

- `, - async test({ assert, target, window }) { - const btn = target.querySelector("button"); - const clickEvent = new window.MouseEvent("click"); - - await btn.dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - -

First line

-

This line should be last.

- ` - ); - - await btn.dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - -

Another first line

-

This line should be last.

- ` - ); - } -}; diff --git a/test/runtime/samples/raw-mustache-as-root/main.svelte b/test/runtime/samples/raw-mustache-as-root/main.svelte deleted file mode 100644 index 7ccce0cd9be9..000000000000 --- a/test/runtime/samples/raw-mustache-as-root/main.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -

This line should be last.

\ No newline at end of file diff --git a/test/runtime/samples/raw-mustache-inside-head/_config.js b/test/runtime/samples/raw-mustache-inside-head/_config.js deleted file mode 100644 index 7923fc72380e..000000000000 --- a/test/runtime/samples/raw-mustache-inside-head/_config.js +++ /dev/null @@ -1,16 +0,0 @@ -export default { - async test({ assert, target, window }) { - const btn = target.querySelector("button"); - const clickEvent = new window.MouseEvent("click"); - - assert.equal(window.document.head.innerHTML.includes(''), true); - - await btn.dispatchEvent(clickEvent); - - assert.equal(window.document.head.innerHTML.includes(''), true); - - await btn.dispatchEvent(clickEvent); - - assert.equal(window.document.head.innerHTML.includes(''), true); - } -}; diff --git a/test/runtime/samples/raw-mustache-inside-head/main.svelte b/test/runtime/samples/raw-mustache-inside-head/main.svelte deleted file mode 100644 index 25b9fdeee93c..000000000000 --- a/test/runtime/samples/raw-mustache-inside-head/main.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - {@html content} - - diff --git a/test/runtime/samples/raw-mustache-inside-slot/Component.svelte b/test/runtime/samples/raw-mustache-inside-slot/Component.svelte deleted file mode 100644 index fcabccae4898..000000000000 --- a/test/runtime/samples/raw-mustache-inside-slot/Component.svelte +++ /dev/null @@ -1,2 +0,0 @@ - -

This line should be last.

\ No newline at end of file diff --git a/test/runtime/samples/raw-mustache-inside-slot/_config.js b/test/runtime/samples/raw-mustache-inside-slot/_config.js deleted file mode 100644 index e42fa7f5177e..000000000000 --- a/test/runtime/samples/raw-mustache-inside-slot/_config.js +++ /dev/null @@ -1,33 +0,0 @@ -export default { - html: ` - -

Another first line

-

This line should be last.

- `, - async test({ assert, target, window }) { - const btn = target.querySelector("button"); - const clickEvent = new window.MouseEvent("click"); - - await btn.dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - -

First line

-

This line should be last.

- ` - ); - - await btn.dispatchEvent(clickEvent); - - assert.htmlEqual( - target.innerHTML, - ` - -

Another first line

-

This line should be last.

- ` - ); - } -}; diff --git a/test/runtime/samples/raw-mustache-inside-slot/main.svelte b/test/runtime/samples/raw-mustache-inside-slot/main.svelte deleted file mode 100644 index a022a68e9597..000000000000 --- a/test/runtime/samples/raw-mustache-inside-slot/main.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - {@html content} - \ No newline at end of file diff --git a/test/runtime/samples/raw-mustaches-td-tr/_config.js b/test/runtime/samples/raw-mustaches-td-tr/_config.js deleted file mode 100644 index 1bcad157f391..000000000000 --- a/test/runtime/samples/raw-mustaches-td-tr/_config.js +++ /dev/null @@ -1,18 +0,0 @@ -export default { - props: { - raw: "12" - }, - - html: ` - - - - - - - - - -
57
12
- ` -}; diff --git a/test/runtime/samples/raw-mustaches-td-tr/main.svelte b/test/runtime/samples/raw-mustaches-td-tr/main.svelte deleted file mode 100644 index 07d7299e439c..000000000000 --- a/test/runtime/samples/raw-mustaches-td-tr/main.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - {@html raw} - -
57
\ No newline at end of file diff --git a/test/runtime/samples/reactive-function-called-reassigned/_config.js b/test/runtime/samples/reactive-function-called-reassigned/_config.js deleted file mode 100644 index 7b2a8b72fe08..000000000000 --- a/test/runtime/samples/reactive-function-called-reassigned/_config.js +++ /dev/null @@ -1,27 +0,0 @@ -let value; -let called = 0; -function callback(_value) { - called ++; - value = _value; -} - -export default { - props: { - callback - }, - async test({ assert, component, target, window }) { - assert.equal(called, 1); - - const input = target.querySelector('input'); - - const event = new window.Event('input'); - input.value = 'h'; - await input.dispatchEvent(event); - - assert.equal(called, 2); - assert.equal(value.length, 3); - assert.equal(value[0], 'h'); - assert.equal(value[1], '2'); - assert.equal(value[2], '3'); - } -}; diff --git a/test/runtime/samples/reactive-function-called-reassigned/main.svelte b/test/runtime/samples/reactive-function-called-reassigned/main.svelte deleted file mode 100644 index 10a3c79d1498..000000000000 --- a/test/runtime/samples/reactive-function-called-reassigned/main.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -{#each refs as ref} - -{/each} \ No newline at end of file diff --git a/test/runtime/samples/reactive-import-statement/_config.js b/test/runtime/samples/reactive-import-statement/_config.js index 45a844afa0b7..7fb8097ca58a 100644 --- a/test/runtime/samples/reactive-import-statement/_config.js +++ b/test/runtime/samples/reactive-import-statement/_config.js @@ -11,7 +11,7 @@ export default { before_test() { delete require.cache[path.resolve(__dirname, 'data.js')]; }, - async test({ assert, target, window }) { + async test({ assert, target, window, }) { const btn = target.querySelector('button'); const clickEvent = new window.MouseEvent('click'); diff --git a/test/runtime/samples/reactive-value-assign-property/_config.js b/test/runtime/samples/reactive-value-assign-property/_config.js deleted file mode 100644 index b6d8bf51be73..000000000000 --- a/test/runtime/samples/reactive-value-assign-property/_config.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - html: ` -

Hello world!

- ` -}; diff --git a/test/runtime/samples/reactive-value-assign-property/main.svelte b/test/runtime/samples/reactive-value-assign-property/main.svelte deleted file mode 100644 index 58e0fdb03c39..000000000000 --- a/test/runtime/samples/reactive-value-assign-property/main.svelte +++ /dev/null @@ -1,6 +0,0 @@ - - -

Hello {user.name}!

\ No newline at end of file diff --git a/test/runtime/samples/self-reference-component/_config.js b/test/runtime/samples/self-reference-component/_config.js index e9cd0ac440fc..e3e0ad3a4f2a 100644 --- a/test/runtime/samples/self-reference-component/_config.js +++ b/test/runtime/samples/self-reference-component/_config.js @@ -1,3 +1,3 @@ export default { - html: '5 4 3 2 1 0' + html: '5 4 3 2 1 0', }; \ No newline at end of file diff --git a/test/runtime/samples/set-undefined-attr/_config.js b/test/runtime/samples/set-undefined-attr/_config.js index a0df368e65d4..b23f51dfc962 100644 --- a/test/runtime/samples/set-undefined-attr/_config.js +++ b/test/runtime/samples/set-undefined-attr/_config.js @@ -1,5 +1,5 @@ export default { html: `
`, - ssrHtml: `
` + ssrHtml: `
`, }; diff --git a/test/runtime/samples/sigil-component-prop/_config.js b/test/runtime/samples/sigil-component-prop/_config.js index 9f84a5999454..2f467bb9d4dd 100644 --- a/test/runtime/samples/sigil-component-prop/_config.js +++ b/test/runtime/samples/sigil-component-prop/_config.js @@ -3,5 +3,5 @@ export default { dev: true }, props: { foo: 'foo' }, - html: `
foo @ foo # foo
` + html: `
foo @ foo # foo
`, }; diff --git a/test/runtime/samples/slot-if-block-update-no-anchor/_config.js b/test/runtime/samples/slot-if-block-update-no-anchor/_config.js index 58d2b49adebc..060cbaa6192a 100644 --- a/test/runtime/samples/slot-if-block-update-no-anchor/_config.js +++ b/test/runtime/samples/slot-if-block-update-no-anchor/_config.js @@ -3,5 +3,5 @@ export default { assert.htmlEqual(target.innerHTML, ``); component.enabled = true; assert.htmlEqual(target.innerHTML, `enabled`); - } + }, }; diff --git a/test/runtime/samples/spread-component-2/_config.js b/test/runtime/samples/spread-component-2/_config.js index e5441bc4b9c9..6d36e8e60dfb 100644 --- a/test/runtime/samples/spread-component-2/_config.js +++ b/test/runtime/samples/spread-component-2/_config.js @@ -10,7 +10,7 @@ export default { baz: 50 + 2, qux: 1, quux: 'quuxx' - }] + }], }, html: ` diff --git a/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js b/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js index d7ad47b01f4d..c5e23a023cbc 100644 --- a/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js +++ b/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js @@ -2,7 +2,7 @@ export default { props: { props: { foo: 'lol', - baz: 40 + 2 + baz: 40 + 2, } }, diff --git a/test/runtime/samples/spread-component-dynamic-non-object/_config.js b/test/runtime/samples/spread-component-dynamic-non-object/_config.js index fa8de8ad942a..094f2fbb9bde 100644 --- a/test/runtime/samples/spread-component-dynamic-non-object/_config.js +++ b/test/runtime/samples/spread-component-dynamic-non-object/_config.js @@ -2,7 +2,7 @@ export default { props: { props: { foo: 'lol', - baz: 40 + 2 + baz: 40 + 2, } }, diff --git a/test/runtime/samples/spread-component-dynamic-undefined/_config.js b/test/runtime/samples/spread-component-dynamic-undefined/_config.js index e7e205a34bf0..09e5f87c14a3 100644 --- a/test/runtime/samples/spread-component-dynamic-undefined/_config.js +++ b/test/runtime/samples/spread-component-dynamic-undefined/_config.js @@ -1,17 +1,17 @@ export default { props: { props: { - a: 1 - } + a: 1, + }, }, html: ``, test({ assert, component, target }) { component.props = { - a: 2 + a: 2, }; assert.htmlEqual(target.innerHTML, ``); - } + }, }; diff --git a/test/runtime/samples/spread-component-dynamic/_config.js b/test/runtime/samples/spread-component-dynamic/_config.js index 08df27e1c2e9..a6bf952ae03a 100644 --- a/test/runtime/samples/spread-component-dynamic/_config.js +++ b/test/runtime/samples/spread-component-dynamic/_config.js @@ -1,8 +1,8 @@ export default { props: { props: { - a: 1 - } + a: 1, + }, }, html: ` @@ -11,9 +11,9 @@ export default { test({ assert, component, target }) { component.props = { - a: 2 + a: 2, }; assert.htmlEqual(target.innerHTML, `

a: 2

`); - } + }, }; diff --git a/test/runtime/samples/spread-component-multiple-dependencies/_config.js b/test/runtime/samples/spread-component-multiple-dependencies/_config.js index 070916ebd88e..bc05f31130a4 100644 --- a/test/runtime/samples/spread-component-multiple-dependencies/_config.js +++ b/test/runtime/samples/spread-component-multiple-dependencies/_config.js @@ -6,5 +6,5 @@ export default { target.innerHTML, `a baz` ); - } + }, }; diff --git a/test/runtime/samples/spread-each-component/_config.js b/test/runtime/samples/spread-each-component/_config.js index 66d2381875f0..bc4d8ee7a4ee 100644 --- a/test/runtime/samples/spread-each-component/_config.js +++ b/test/runtime/samples/spread-each-component/_config.js @@ -20,5 +20,5 @@ export default {
`); - } + }, }; diff --git a/test/runtime/samples/spread-each-element/_config.js b/test/runtime/samples/spread-each-element/_config.js index 579f84009952..5dbd82a89295 100644 --- a/test/runtime/samples/spread-each-element/_config.js +++ b/test/runtime/samples/spread-each-element/_config.js @@ -20,5 +20,5 @@ export default {
`); - } + }, }; diff --git a/test/runtime/samples/spread-element-boolean/_config.js b/test/runtime/samples/spread-element-boolean/_config.js index d336dae029c9..3ee277eec4e1 100644 --- a/test/runtime/samples/spread-element-boolean/_config.js +++ b/test/runtime/samples/spread-element-boolean/_config.js @@ -21,5 +21,5 @@ export default { `` ); assert.ok(!button.disabled); - } + }, }; diff --git a/test/runtime/samples/spread-element-input-select-multiple/_config.js b/test/runtime/samples/spread-element-input-select-multiple/_config.js deleted file mode 100644 index 1ddcd9eb6d76..000000000000 --- a/test/runtime/samples/spread-element-input-select-multiple/_config.js +++ /dev/null @@ -1,39 +0,0 @@ -export default { - async test({ assert, component, target, window }) { - const [input1, input2] = target.querySelectorAll('input'); - const select = target.querySelector('select'); - const [option1, option2] = select.childNodes; - - let selections = Array.from(select.selectedOptions); - assert.equal(selections.length, 2); - assert.ok(selections.includes(option1)); - assert.ok(selections.includes(option2)); - - const event = new window.Event('change'); - - input1.checked = false; - await input1.dispatchEvent(event); - - selections = Array.from(select.selectedOptions); - assert.equal(selections.length, 1); - assert.ok(!selections.includes(option1)); - assert.ok(selections.includes(option2)); - - input2.checked = false; - await input2.dispatchEvent(event); - input1.checked = true; - await input1.dispatchEvent(event); - - selections = Array.from(select.selectedOptions); - assert.equal(selections.length, 1); - assert.ok(selections.includes(option1)); - assert.ok(!selections.includes(option2)); - - component.spread = { value: ['Hello', 'World'] }; - - selections = Array.from(select.selectedOptions); - assert.equal(selections.length, 2); - assert.ok(selections.includes(option1)); - assert.ok(selections.includes(option2)); - } -}; diff --git a/test/runtime/samples/spread-element-input-select-multiple/main.svelte b/test/runtime/samples/spread-element-input-select-multiple/main.svelte deleted file mode 100644 index d2fb12dd204d..000000000000 --- a/test/runtime/samples/spread-element-input-select-multiple/main.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/test/runtime/samples/spread-element-input-value-undefined/_config.js b/test/runtime/samples/spread-element-input-value-undefined/_config.js deleted file mode 100644 index d66e215cde35..000000000000 --- a/test/runtime/samples/spread-element-input-value-undefined/_config.js +++ /dev/null @@ -1,12 +0,0 @@ -export default { - async test({ assert, component, target, window }) { - const input = target.querySelector("input"); - component.value = undefined; - - assert.equal(input.value, "undefined"); - - component.value = "foobar"; - - assert.equal(input.value, "foobar"); - } -}; diff --git a/test/runtime/samples/spread-element-input-value-undefined/main.svelte b/test/runtime/samples/spread-element-input-value-undefined/main.svelte deleted file mode 100644 index 5c9121dc031a..000000000000 --- a/test/runtime/samples/spread-element-input-value-undefined/main.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - - \ No newline at end of file diff --git a/test/runtime/samples/spread-element-input-value/InputOne.svelte b/test/runtime/samples/spread-element-input-value/InputOne.svelte deleted file mode 100644 index 92ecb7b9a98a..000000000000 --- a/test/runtime/samples/spread-element-input-value/InputOne.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/test/runtime/samples/spread-element-input-value/InputTwo.svelte b/test/runtime/samples/spread-element-input-value/InputTwo.svelte deleted file mode 100644 index 33ec0622a46a..000000000000 --- a/test/runtime/samples/spread-element-input-value/InputTwo.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/test/runtime/samples/spread-element-input-value/_config.js b/test/runtime/samples/spread-element-input-value/_config.js deleted file mode 100644 index abb63ceab341..000000000000 --- a/test/runtime/samples/spread-element-input-value/_config.js +++ /dev/null @@ -1,62 +0,0 @@ -export default { - async test({ assert, component, target, window }) { - const [input1, input2] = target.querySelectorAll("input"); - - // we are not able emulate user interaction in jsdom, - // therefore, jsdom could not validate minlength / maxlength - - // we simulate user input with - // setting input.value + dispathEvent - - // and we determine if svelte does not set the `input.value` again by - // spying on the setter of `input.value` - - const spy1 = spyOnValueSetter(input1, input1.value); - const spy2 = spyOnValueSetter(input2, input2.value); - - const event = new window.Event("input"); - - input1.value = '12345'; - spy1.reset(); - await input1.dispatchEvent(event); - - assert.ok(!spy1.isSetCalled()); - - input2.value = '12345'; - spy2.reset(); - await input2.dispatchEvent(event); - - assert.ok(!spy2.isSetCalled()); - - spy1.reset(); - component.val1 = '56789'; - assert.ok(spy1.isSetCalled()); - - spy2.reset(); - component.val2 = '56789'; - assert.ok(spy2.isSetCalled()); - } -}; - -function spyOnValueSetter(input, initialValue) { - let value = initialValue; - let isSet = false; - Object.defineProperty(input, "value", { - get() { - return value; - }, - set(_value) { - value = _value; - isSet = true; - } - }); - - return { - isSetCalled() { - return isSet; - }, - reset() { - isSet = false; - } - }; -} diff --git a/test/runtime/samples/spread-element-input-value/main.svelte b/test/runtime/samples/spread-element-input-value/main.svelte deleted file mode 100644 index bb5f0e00bf48..000000000000 --- a/test/runtime/samples/spread-element-input-value/main.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/test/runtime/samples/spread-element-input-value/utils.js b/test/runtime/samples/spread-element-input-value/utils.js deleted file mode 100644 index ee941bda5545..000000000000 --- a/test/runtime/samples/spread-element-input-value/utils.js +++ /dev/null @@ -1,6 +0,0 @@ -export function omit(obj, ...keysToOmit) { - return Object.keys(obj).reduce((acc, key) => { - if (keysToOmit.indexOf(key) === -1) acc[key] = obj[key]; - return acc; - }, {}); -} diff --git a/test/runtime/samples/spread-element-multiple-dependencies/_config.js b/test/runtime/samples/spread-element-multiple-dependencies/_config.js index 480eb6621c49..69ef1f8ebefa 100644 --- a/test/runtime/samples/spread-element-multiple-dependencies/_config.js +++ b/test/runtime/samples/spread-element-multiple-dependencies/_config.js @@ -6,5 +6,5 @@ export default { target.innerHTML, `
` ); - } + }, }; diff --git a/test/runtime/samples/spread-element-multiple/_config.js b/test/runtime/samples/spread-element-multiple/_config.js index 0c04b16d4009..641f74d72758 100644 --- a/test/runtime/samples/spread-element-multiple/_config.js +++ b/test/runtime/samples/spread-element-multiple/_config.js @@ -2,12 +2,12 @@ export default { props: { a: { 'data-one': 1, - 'data-two': 2 + 'data-two': 2, }, c: { - 'data-b': 'overridden' + 'data-b': 'overridden', }, - d: 'deeeeee' + d: 'deeeeee', }, html: ` @@ -27,5 +27,5 @@ export default { target.innerHTML, `
test
` ); - } + }, }; diff --git a/test/runtime/samples/store-auto-subscribe-event-callback/_config.js b/test/runtime/samples/store-auto-subscribe-event-callback/_config.js index 7897036809be..747ed3e4adff 100644 --- a/test/runtime/samples/store-auto-subscribe-event-callback/_config.js +++ b/test/runtime/samples/store-auto-subscribe-event-callback/_config.js @@ -18,5 +18,5 @@ export default { Dirty: true Valid: true `); - } + }, }; diff --git a/test/runtime/samples/store-each-binding-deep/_config.js b/test/runtime/samples/store-each-binding-deep/_config.js deleted file mode 100644 index 70776940dd49..000000000000 --- a/test/runtime/samples/store-each-binding-deep/_config.js +++ /dev/null @@ -1,14 +0,0 @@ -export default { - async test({ assert, target, window }) { - const input = target.querySelector('input'); - - const event = new window.Event('input'); - input.value = 'changed'; - await input.dispatchEvent(event); - - assert.htmlEqual(target.innerHTML, ` - -

changed

- `); - } -}; \ No newline at end of file diff --git a/test/runtime/samples/store-each-binding-deep/main.svelte b/test/runtime/samples/store-each-binding-deep/main.svelte deleted file mode 100644 index 8f1cabf5b809..000000000000 --- a/test/runtime/samples/store-each-binding-deep/main.svelte +++ /dev/null @@ -1,11 +0,0 @@ - - -{#each $itemStore.prop.things as thing } - -{/each} - -

{$itemStore.prop.things[0].name}

\ No newline at end of file diff --git a/test/runtime/samples/store-imports-hoisted/_config.js b/test/runtime/samples/store-imports-hoisted/_config.js deleted file mode 100644 index 251866e5ba06..000000000000 --- a/test/runtime/samples/store-imports-hoisted/_config.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - compileOptions: { dev: true }, // tests `@validate_store` code generation - - html: ` -

42

- ` -}; \ No newline at end of file diff --git a/test/runtime/samples/store-imports-hoisted/foo.js b/test/runtime/samples/store-imports-hoisted/foo.js deleted file mode 100644 index 5d15213c3a0f..000000000000 --- a/test/runtime/samples/store-imports-hoisted/foo.js +++ /dev/null @@ -1,3 +0,0 @@ -import { writable } from '../../../../store'; - -export default writable(42); \ No newline at end of file diff --git a/test/runtime/samples/store-imports-hoisted/main.svelte b/test/runtime/samples/store-imports-hoisted/main.svelte deleted file mode 100644 index 223572962e8c..000000000000 --- a/test/runtime/samples/store-imports-hoisted/main.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -

{answer}

diff --git a/test/runtime/samples/store-resubscribe-b/_config.js b/test/runtime/samples/store-resubscribe-b/_config.js index dd11a863f2b7..d043bbcd8709 100644 --- a/test/runtime/samples/store-resubscribe-b/_config.js +++ b/test/runtime/samples/store-resubscribe-b/_config.js @@ -1,3 +1,3 @@ export default { - html: `42` + html: `42`, }; diff --git a/test/runtime/samples/store-resubscribe-export/_config.js b/test/runtime/samples/store-resubscribe-export/_config.js index 3c8473b3e154..b6e6f1134441 100644 --- a/test/runtime/samples/store-resubscribe-export/_config.js +++ b/test/runtime/samples/store-resubscribe-export/_config.js @@ -6,14 +6,14 @@ const fakeStore = val => ({ return { unsubscribe: () => { subscribeCalled = true; - } + }, }; - } + }, }); export default { props: { - foo: fakeStore(1) + foo: fakeStore(1), }, html: `

1

@@ -23,5 +23,5 @@ export default { component.foo = fakeStore(5); return assert.htmlEqual(target.innerHTML, `

5

`); - } + }, }; diff --git a/test/runtime/samples/store-resubscribe-observable/_config.js b/test/runtime/samples/store-resubscribe-observable/_config.js index dd11a863f2b7..d043bbcd8709 100644 --- a/test/runtime/samples/store-resubscribe-observable/_config.js +++ b/test/runtime/samples/store-resubscribe-observable/_config.js @@ -1,3 +1,3 @@ export default { - html: `42` + html: `42`, }; diff --git a/test/runtime/samples/store-shadow-scope/_config.js b/test/runtime/samples/store-shadow-scope/_config.js deleted file mode 100644 index e2d6fc780848..000000000000 --- a/test/runtime/samples/store-shadow-scope/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - error: `Stores must be declared at the top level of the component (this may change in a future version of Svelte)` -}; diff --git a/test/runtime/samples/store-shadow-scope/main.svelte b/test/runtime/samples/store-shadow-scope/main.svelte deleted file mode 100644 index 72c4a06c2adc..000000000000 --- a/test/runtime/samples/store-shadow-scope/main.svelte +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/test/runtime/samples/store-template-expression-scope/_config.js b/test/runtime/samples/store-template-expression-scope/_config.js deleted file mode 100644 index e2d6fc780848..000000000000 --- a/test/runtime/samples/store-template-expression-scope/_config.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - error: `Stores must be declared at the top level of the component (this may change in a future version of Svelte)` -}; diff --git a/test/runtime/samples/store-template-expression-scope/main.svelte b/test/runtime/samples/store-template-expression-scope/main.svelte deleted file mode 100644 index 1c9ccb29334c..000000000000 --- a/test/runtime/samples/store-template-expression-scope/main.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/test/validator/samples/a11y-label-has-associated-control/warnings.json b/test/validator/samples/a11y-label-has-associated-control/warnings.json deleted file mode 100644 index b70a1a47de70..000000000000 --- a/test/validator/samples/a11y-label-has-associated-control/warnings.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "code": "a11y-label-has-associated-control", - "end": { - "character": 16, - "column": 16, - "line": 1 - }, - "message": "A11y: A form label must be associated with a control.", - "pos": 0, - "start": { - "character": 0, - "column": 0, - "line": 1 - } - }, - { - "code": "a11y-label-has-associated-control", - "end": { - "character": 149, - "column": 30, - "line": 6 - }, - "message": "A11y: A form label must be associated with a control.", - "pos": 119, - "start": { - "character": 119, - "column": 0, - "line": 6 - } - } -] diff --git a/test/validator/samples/a11y-media-has-caption/input.svelte b/test/validator/samples/a11y-media-has-caption/input.svelte deleted file mode 100644 index 105269cddb48..000000000000 --- a/test/validator/samples/a11y-media-has-caption/input.svelte +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/test/validator/samples/a11y-media-has-caption/warnings.json b/test/validator/samples/a11y-media-has-caption/warnings.json deleted file mode 100644 index a8c894b1d491..000000000000 --- a/test/validator/samples/a11y-media-has-caption/warnings.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "code": "a11y-media-has-caption", - "end": { - "character": 55, - "column": 15, - "line": 2 - }, - "message": "A11y: Media elements must have a ", - "pos": 40, - "start": { - "character": 40, - "column": 0, - "line": 2 - } - }, - { - "code": "a11y-media-has-caption", - "end": { - "character": 80, - "column": 24, - "line": 3 - }, - "message": "A11y: Media elements must have a ", - "pos": 56, - "start": { - "character": 56, - "column": 0, - "line": 3 - } - } -] diff --git a/test/vars/samples/assumed-global/_config.js b/test/vars/samples/assumed-global/_config.js index 782760bb8b04..2b84e83f12c3 100644 --- a/test/vars/samples/assumed-global/_config.js +++ b/test/vars/samples/assumed-global/_config.js @@ -1,5 +1,5 @@ export default { test(assert, vars) { assert.deepEqual(vars, []); - } + }, }; diff --git a/test/vars/samples/duplicate-globals/_config.js b/test/vars/samples/duplicate-globals/_config.js index 782760bb8b04..2b84e83f12c3 100644 --- a/test/vars/samples/duplicate-globals/_config.js +++ b/test/vars/samples/duplicate-globals/_config.js @@ -1,5 +1,5 @@ export default { test(assert, vars) { assert.deepEqual(vars, []); - } + }, }; diff --git a/test/vars/samples/duplicate-non-hoistable/_config.js b/test/vars/samples/duplicate-non-hoistable/_config.js index bd70e2980010..4ebc5b00cfcc 100644 --- a/test/vars/samples/duplicate-non-hoistable/_config.js +++ b/test/vars/samples/duplicate-non-hoistable/_config.js @@ -13,5 +13,5 @@ export default { writable: true } ]); - } + }, }; diff --git a/test/vars/samples/duplicate-vars/_config.js b/test/vars/samples/duplicate-vars/_config.js index 749a0c59afb3..eb10c44a9a56 100644 --- a/test/vars/samples/duplicate-vars/_config.js +++ b/test/vars/samples/duplicate-vars/_config.js @@ -24,5 +24,5 @@ export default { writable: true } ]); - } + }, }; diff --git a/test/vars/samples/implicit-reactive/_config.js b/test/vars/samples/implicit-reactive/_config.js index a8bf261d4f82..770de590e66d 100644 --- a/test/vars/samples/implicit-reactive/_config.js +++ b/test/vars/samples/implicit-reactive/_config.js @@ -24,5 +24,5 @@ export default { writable: true } ]); - } + }, }; diff --git a/test/vars/samples/referenced-from-script/_config.js b/test/vars/samples/referenced-from-script/_config.js index ec068cb1d7f0..191a52f8ccac 100644 --- a/test/vars/samples/referenced-from-script/_config.js +++ b/test/vars/samples/referenced-from-script/_config.js @@ -10,7 +10,7 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false + referenced_from_script: false, }, { name: 'j', @@ -21,7 +21,7 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false + referenced_from_script: false, }, { name: 'k', @@ -32,7 +32,7 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false + referenced_from_script: false, }, { name: 'a', @@ -43,7 +43,7 @@ export default { reassigned: true, referenced: false, writable: true, - referenced_from_script: true + referenced_from_script: true, }, { name: 'b', @@ -54,7 +54,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: true + referenced_from_script: true, }, { name: 'c', @@ -65,7 +65,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: true + referenced_from_script: true, }, { name: 'd', @@ -76,7 +76,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: true + referenced_from_script: true, }, { name: 'e', @@ -87,7 +87,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: false + referenced_from_script: false, }, { name: 'f', @@ -98,7 +98,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: false + referenced_from_script: false, }, { name: 'g', @@ -109,7 +109,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: true + referenced_from_script: true, }, { name: 'h', @@ -120,7 +120,7 @@ export default { reassigned: true, referenced: false, writable: true, - referenced_from_script: true + referenced_from_script: true, }, { name: 'foo', @@ -131,7 +131,7 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false + referenced_from_script: false, }, { name: 'l', @@ -142,7 +142,7 @@ export default { reassigned: false, referenced: false, referenced_from_script: true, - writable: false + writable: false, }, { name: 'bar', @@ -153,8 +153,8 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false - } + referenced_from_script: false, + }, ]); - } + }, }; diff --git a/test/vars/samples/template-references/_config.js b/test/vars/samples/template-references/_config.js index 34c07e19e00c..674e35151774 100644 --- a/test/vars/samples/template-references/_config.js +++ b/test/vars/samples/template-references/_config.js @@ -10,7 +10,7 @@ export default { reassigned: false, referenced: true, referenced_from_script: false, - writable: false + writable: false, }, { export_name: null, @@ -21,7 +21,7 @@ export default { reassigned: false, referenced: true, referenced_from_script: false, - writable: true + writable: true, }, { export_name: null, @@ -32,8 +32,8 @@ export default { reassigned: false, referenced: true, referenced_from_script: false, - writable: true - } + writable: true, + }, ]); - } + }, }; diff --git a/test/vars/samples/undeclared/_config.js b/test/vars/samples/undeclared/_config.js index 782760bb8b04..2b84e83f12c3 100644 --- a/test/vars/samples/undeclared/_config.js +++ b/test/vars/samples/undeclared/_config.js @@ -1,5 +1,5 @@ export default { test(assert, vars) { assert.deepEqual(vars, []); - } + }, }; From 311ced5477cb56671def66be21aad2b7fe8a8b91 Mon Sep 17 00:00:00 2001 From: Dominus Vilicus Date: Sun, 20 Sep 2020 22:11:10 +0930 Subject: [PATCH 3/3] Revert "Revert "Update Changes"" --- .eslintignore | 1 - .eslintrc.js | 78 +- .github/ISSUE_TEMPLATE.md | 5 +- .github/ISSUE_TEMPLATE/feature_request.md | 5 + .github/PULL_REQUEST_TEMPLATE.md | 11 +- .github/workflows/ci.yml | 9 +- CHANGELOG.md | 65 +- CONTRIBUTING.md | 5 +- README.md | 23 +- package-lock.json | 1293 +++++++++++++---- package.json | 17 +- rollup.config.js | 20 +- site/README.md | 44 +- ...-11-26-frameworks-without-the-framework.md | 2 +- ...per-towards-the-ideal-web-app-framework.md | 8 +- .../2019-04-16-svelte-for-new-developers.md | 4 +- .../blog/2020-07-17-svelte-and-typescript.md | 141 ++ site/content/docs/02-template-syntax.md | 31 +- site/content/docs/03-run-time.md | 8 +- .../05-bindings/05-file-inputs/App.svelte | 37 + .../05-bindings/05-file-inputs/meta.json | 3 + .../App.svelte | 0 .../meta.json | 0 .../App.svelte | 0 .../meta.json | 0 .../App.svelte | 9 +- .../meta.json | 0 .../App.svelte | 4 +- .../meta.json | 0 .../App.svelte | 0 .../meta.json | 0 .../{10-bind-this => 11-bind-this}/App.svelte | 2 +- .../{10-bind-this => 11-bind-this}/meta.json | 0 .../App.svelte | 0 .../Keypad.svelte | 0 .../meta.json | 0 site/content/faq/100-im-new-to-svelte.md | 2 +- .../faq/200-are-there-any-video-courses.md | 6 +- site/content/faq/300-is-svelte-dev-down.md | 5 - .../400-how-can-i-get-syntax-highlighting.md | 4 +- .../450-how-do-i-document-my-components.md | 32 + .../faq/500-what-about-typescript-support.md | 19 +- .../01-svelte-self/text.md | 4 +- site/package-lock.json | 602 ++++---- site/package.json | 30 +- site/rollup.config.js | 25 +- site/scripts/copy-workers.js | 4 + .../components/Repl/InputOutputToggle.svelte | 2 +- site/src/components/Repl/ReplWidget.svelte | 3 + site/src/routes/_layout.svelte | 1 + site/src/routes/blog/[slug].svelte | 9 + site/src/routes/blog/rss.xml.js | 16 +- site/src/routes/docs/_sections.js | 2 +- .../[id]/_components/AppControls/index.svelte | 2 + site/src/routes/repl/[id]/index.svelte | 5 +- site/src/routes/repl/embed.svelte | 2 + .../tutorial/[slug]/_TableOfContents.svelte | 4 +- site/src/utils/highlight.js | 1 + .../examples/thumbnails/file-inputs.jpg | Bin 0 -> 2751 bytes site/static/media/svelte-ts.png | Bin 0 -> 189664 bytes src/compiler/compile/Component.ts | 97 +- src/compiler/compile/css/Stylesheet.ts | 2 +- src/compiler/compile/index.ts | 4 +- src/compiler/compile/nodes/Binding.ts | 9 +- src/compiler/compile/nodes/EachBlock.ts | 1 + src/compiler/compile/nodes/Element.ts | 48 +- src/compiler/compile/nodes/Text.ts | 2 +- src/compiler/compile/nodes/shared/Context.ts | 8 +- .../compile/nodes/shared/Expression.ts | 52 +- src/compiler/compile/render_dom/Block.ts | 50 +- src/compiler/compile/render_dom/Renderer.ts | 31 +- src/compiler/compile/render_dom/index.ts | 38 +- .../compile/render_dom/wrappers/AwaitBlock.ts | 14 +- .../compile/render_dom/wrappers/EachBlock.ts | 31 +- .../render_dom/wrappers/Element/Attribute.ts | 234 +-- .../render_dom/wrappers/Element/Binding.ts | 149 +- .../wrappers/Element/SpreadAttribute.ts | 3 + .../Element/handle_select_value_binding.ts | 16 + .../render_dom/wrappers/Element/index.ts | 305 ++-- .../compile/render_dom/wrappers/IfBlock.ts | 2 +- .../wrappers/InlineComponent/index.ts | 25 +- .../render_dom/wrappers/RawMustacheTag.ts | 8 +- .../compile/render_dom/wrappers/Slot.ts | 28 +- .../compile/render_dom/wrappers/Window.ts | 4 +- .../render_dom/wrappers/shared/bind_this.ts | 84 +- .../wrappers/shared/get_slot_definition.ts | 4 +- .../shared/mark_each_block_bindings.ts | 26 + .../compile/render_ssr/handlers/Slot.ts | 4 +- src/compiler/compile/render_ssr/index.ts | 45 +- src/compiler/compile/utils/compare_node.ts | 19 + .../compile/utils/flatten_reference.ts | 21 +- src/compiler/compile/utils/hash.ts | 1 + src/compiler/compile/utils/replace_object.ts | 14 + .../compile/utils/reserved_keywords.ts | 2 +- .../utils/string_to_member_expression.ts | 17 + src/compiler/compile/utils/stringify.ts | 2 +- src/compiler/interfaces.ts | 4 +- src/compiler/parse/index.ts | 9 +- src/compiler/parse/read/script.ts | 2 +- src/compiler/parse/read/style.ts | 11 +- src/compiler/parse/state/mustache.ts | 16 +- src/compiler/parse/state/tag.ts | 35 +- src/compiler/parse/state/text.ts | 2 +- src/compiler/parse/utils/entities.ts | 2 +- src/compiler/parse/utils/html.ts | 6 +- src/compiler/preprocess/index.ts | 10 +- src/compiler/utils/fuzzymatch.ts | 4 +- src/compiler/utils/names.ts | 2 +- src/compiler/utils/namespaces.ts | 2 +- src/runtime/animate/index.ts | 6 +- src/runtime/internal/Component.ts | 27 +- src/runtime/internal/await_block.ts | 3 + src/runtime/internal/dev.ts | 2 +- src/runtime/internal/dom.ts | 54 +- src/runtime/internal/keyed_each.ts | 2 +- src/runtime/internal/lifecycle.ts | 10 +- src/runtime/internal/utils.ts | 12 + src/runtime/motion/tweened.ts | 10 +- src/runtime/store/index.ts | 4 +- src/runtime/transition/index.ts | 56 +- test/css/index.js | 3 +- test/css/samples/empty-class/_config.js | 2 +- .../global-with-unused-descendant/_config.js | 2 +- .../expected.html | 4 +- .../input.svelte | 6 +- .../_config.js | 2 +- .../unused-selector-leading/_config.js | 4 +- .../unused-selector-string-concat/_config.js | 44 +- .../unused-selector-ternary-bailed/_config.js | 2 +- .../unused-selector-ternary-concat/_config.js | 12 +- .../unused-selector-ternary-nested/_config.js | 12 +- .../unused-selector-ternary/_config.js | 2 +- test/css/samples/unused-selector/_config.js | 2 +- test/custom-elements/index.js | 15 +- test/helpers.js | 1 + .../samples/dynamic-text-nil/_config.js | 4 +- test/hydration/samples/element-ref/_config.js | 2 +- test/js/index.js | 6 +- .../action-custom-event-handler/expected.js | 13 +- test/js/samples/action/expected.js | 11 +- test/js/samples/bind-online/expected.js | 18 +- test/js/samples/bind-open/expected.js | 17 +- test/js/samples/bind-width-height/expected.js | 2 +- .../bindings-readonly-order/expected.js | 19 +- .../capture-inject-dev-only/expected.js | 11 +- .../samples/capture-inject-state/expected.js | 7 +- .../expected.js | 2 +- .../component-static-array/expected.js | 3 +- .../component-static-immutable/expected.js | 3 +- .../component-static-immutable2/expected.js | 3 +- .../samples/component-static-var/expected.js | 17 +- test/js/samples/component-static/expected.js | 3 +- .../expected.js | 11 +- .../samples/computed-collapsed-if/expected.js | 2 +- test/js/samples/data-attribute/expected.js | 2 +- test/js/samples/debug-empty/expected.js | 7 +- .../debug-foo-bar-baz-things/expected.js | 7 +- test/js/samples/debug-foo/expected.js | 7 +- test/js/samples/debug-hoisted/expected.js | 4 +- .../samples/debug-no-dependencies/expected.js | 4 +- test/js/samples/debug-ssr-foo/expected.js | 2 +- .../samples/deconflict-builtins/expected.js | 2 +- .../js/samples/deconflict-globals/expected.js | 2 +- .../expected.js | 7 +- .../samples/dont-invalidate-this/expected.js | 11 +- test/js/samples/dynamic-import/expected.js | 3 +- .../each-block-array-literal/expected.js | 2 +- .../each-block-changed-check/expected.js | 6 +- .../each-block-keyed-animated/expected.js | 2 +- test/js/samples/each-block-keyed/expected.js | 2 +- .../samples/event-handler-dynamic/expected.js | 23 +- .../event-handler-no-passive/expected.js | 11 +- test/js/samples/event-modifiers/expected.js | 21 +- .../js/samples/if-block-no-update/expected.js | 2 +- test/js/samples/if-block-simple/expected.js | 2 +- test/js/samples/initial-context/expected.js | 59 + test/js/samples/initial-context/input.svelte | 7 + .../expected.js | 2 +- .../inline-style-optimized-url/expected.js | 2 +- .../inline-style-optimized/expected.js | 2 +- .../inline-style-unoptimized/expected.js | 2 +- test/js/samples/input-files/expected.js | 13 +- .../input-no-initial-value/expected.js | 17 +- test/js/samples/input-range/expected.js | 19 +- test/js/samples/input-value/expected.js | 11 +- .../input-without-blowback-guard/expected.js | 13 +- .../expected.js | 11 +- .../expected.js | 11 +- .../expected.js | 11 +- .../expected.js | 11 +- test/js/samples/loop-protect/_config.js | 4 +- test/js/samples/loop-protect/expected.js | 8 +- test/js/samples/media-bindings/expected.js | 38 +- .../non-imported-component/expected.js | 6 +- test/js/samples/optional-chaining/expected.js | 189 +++ .../js/samples/optional-chaining/input.svelte | 31 + .../expected.js | 2 +- .../expected.js | 2 +- .../samples/select-dynamic-value/expected.js | 28 +- .../samples/src-attribute-check/expected.js | 2 +- .../samples/ssr-no-oncreate-etc/expected.js | 2 +- .../samples/ssr-preserve-comments/expected.js | 2 +- test/js/samples/title/expected.js | 2 +- test/js/samples/transition-local/expected.js | 2 +- .../transition-repeated-outro/expected.js | 2 +- .../use-elements-as-anchors/expected.js | 2 +- test/js/samples/video-bindings/expected.js | 19 +- .../samples/window-binding-online/expected.js | 18 +- .../samples/window-binding-scroll/expected.js | 23 +- test/parser/index.js | 10 +- .../samples/action-with-call/output.json | 3 +- test/parser/samples/animation/output.json | 6 +- test/parser/samples/await-catch/output.json | 9 +- .../samples/await-then-catch/output.json | 15 +- .../parser/samples/dynamic-import/output.json | 18 +- .../samples/each-block-else/output.json | 6 +- .../samples/each-block-indexed/output.json | 6 +- .../samples/each-block-keyed/output.json | 9 +- test/parser/samples/each-block/output.json | 6 +- .../error.json | 10 + .../input.svelte | 3 + .../error.json | 10 + .../input.svelte | 5 + .../error.json | 10 + .../input.svelte | 3 + .../no-error-if-before-closing/output.json | 12 +- .../samples/unusual-identifier/output.json | 6 +- test/preprocess/samples/comments/_config.js | 6 +- .../samples/script-self-closing/_config.js | 12 + .../samples/script-self-closing/input.svelte | 1 + .../samples/script-self-closing/output.svelte | 1 + .../samples/style-self-closing/_config.js | 12 + .../samples/style-self-closing/input.svelte | 3 + .../samples/style-self-closing/output.svelte | 3 + test/runtime/index.js | 4 +- .../samples/$$rest-without-props/_config.js | 2 +- test/runtime/samples/$$rest/_config.js | 2 +- test/runtime/samples/$$slot/A.svelte | 31 + test/runtime/samples/$$slot/_config.js | 18 + test/runtime/samples/$$slot/main.svelte | 23 + .../_config.js | 2 +- .../action-ternary-template/_config.js | 4 +- test/runtime/samples/action-this/_config.js | 2 +- .../apply-directives-in-order-2/_config.js | 6 +- .../apply-directives-in-order/_config.js | 2 +- .../attribute-boolean-false/_config.js | 2 +- .../samples/attribute-boolean-true/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../samples/attribute-false/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../runtime/samples/attribute-null/_config.js | 2 +- .../attribute-prefer-expression/_config.js | 4 +- .../samples/attribute-undefined/_config.js | 2 +- .../await-with-update-2/Component.svelte | 7 + .../samples/await-with-update-2/_config.js | 64 + .../samples/await-with-update-2/main.svelte | 16 + .../await-with-update/Component.svelte | 5 + .../samples/await-with-update/_config.js | 60 + .../samples/await-with-update/main.svelte | 16 + .../samples/await-without-catch/_config.js | 44 + .../samples/await-without-catch/main.svelte | 9 + .../_config.js | 2 +- .../binding-contenteditable-html/_config.js | 4 +- .../_config.js | 2 +- .../binding-contenteditable-text/_config.js | 4 +- .../_config.js | 4 +- .../_config.js | 10 +- .../_config.js | 81 ++ .../main.svelte | 19 + .../binding-input-group-each-1/_config.js | 275 ++++ .../binding-input-group-each-1/main.svelte | 15 + .../binding-input-group-each-2/_config.js | 59 + .../binding-input-group-each-2/main.svelte | 17 + .../binding-input-group-each-3/_config.js | 275 ++++ .../binding-input-group-each-3/main.svelte | 15 + .../binding-input-group-each-4/_config.js | 153 ++ .../binding-input-group-each-4/main.svelte | 33 + .../binding-input-group-each-5/_config.js | 160 ++ .../binding-input-group-each-5/main.svelte | 24 + .../binding-input-group-each-6/_config.js | 87 ++ .../binding-input-group-each-6/main.svelte | 22 + .../samples/binding-input-number-2/_config.js | 2 +- .../samples/binding-input-number/_config.js | 4 +- .../_config.js | 2 +- .../binding-input-range-change/_config.js | 4 +- .../samples/binding-input-range/_config.js | 4 +- .../_config.js | 4 +- .../_config.js | 2 +- .../binding-input-text-contextual/_config.js | 4 +- .../_config.js | 6 +- .../_config.js | 6 +- .../_config.js | 6 +- .../_config.js | 8 +- .../_config.js | 6 +- .../binding-input-text-deep/_config.js | 6 +- .../binding-input-text-undefined/_config.js | 2 +- .../samples/binding-input-text/_config.js | 4 +- .../binding-select-initial-value/_config.js | 4 +- .../samples/binding-select-late-2/_config.js | 34 + .../samples/binding-select-late-2/main.svelte | 12 + .../samples/binding-select-late-3/_config.js | 34 + .../samples/binding-select-late-3/main.svelte | 12 + .../binding-select-optgroup/_config.js | 2 +- .../runtime/samples/binding-select/_config.js | 4 +- .../samples/binding-store-deep/_config.js | 2 +- test/runtime/samples/binding-store/_config.js | 2 +- .../samples/binding-textarea/_config.js | 4 +- .../_config.js | 53 + .../main.svelte | 17 + .../samples/bitmask-overflow-2/_config.js | 2 +- .../samples/bitmask-overflow-3/_config.js | 2 +- .../bitmask-overflow-slot-2/_config.js | 2 +- .../class-with-spread-and-bind/_config.js | 4 +- .../samples/component-binding-deep/_config.js | 2 +- .../component-binding-store/Input.svelte | 5 + .../component-binding-store/_config.js | 61 + .../component-binding-store/main.svelte | 18 + .../_config.js | 15 + .../main.svelte | 6 + .../component-event-not-stale/_config.js | 4 +- .../component-events-console/_config.js | 2 +- .../component-namespace/Tooltip.svelte | 1 + .../samples/component-namespace/Widget.svelte | 5 + .../samples/component-namespace/_config.js | 3 + .../samples/component-namespace/main.svelte | 8 + .../component-shorthand-import/_config.js | 2 +- .../component-slot-fallback-3/_config.js | 2 +- .../component-slot-fallback-4/_config.js | 2 +- .../component-slot-let-in-slot/_config.js | 2 +- .../component-slot-nested-if/_config.js | 2 +- .../samples/deconflict-builtins-2/_config.js | 2 +- .../dev-warning-missing-data-each/_config.js | 12 +- .../runtime/samples/document-event/_config.js | 2 +- .../each-block-array-literal/_config.js | 2 +- .../_config.js | 2 +- .../each-block-destructured-array/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 4 +- .../_config.js | 2 +- .../each-block-destructured-object/_config.js | 2 +- .../each-block-else-mount-or-intro/_config.js | 2 +- .../samples/each-block-in-if-block/_config.js | 2 +- .../Component.svelte | 5 + .../_config.js | 21 + .../main.svelte | 17 + .../samples/each-block-keyed-empty/_config.js | 2 +- .../each-block-keyed-non-prop/_config.js | 2 +- .../_config.js | 2 +- .../samples/each-block-keyed-shift/_config.js | 2 +- .../each-block-keyed-siblings/_config.js | 4 +- .../each-block-keyed-static/_config.js | 2 +- .../each-block-scope-shadow-bind-2/_config.js | 23 + .../main.svelte | 10 + .../each-block-scope-shadow-bind-3/_config.js | 105 ++ .../main.svelte | 14 + .../each-block-scope-shadow-bind-4/_config.js | 64 + .../main.svelte | 14 + .../each-block-scope-shadow-bind/_config.js | 23 + .../each-block-scope-shadow-bind/main.svelte | 10 + .../each-block-scope-shadow-self/_config.js | 2 +- .../each-blocks-assignment-2/_config.js | 20 + .../each-blocks-assignment-2/main.svelte | 12 + .../samples/each-blocks-assignment/_config.js | 97 ++ .../each-blocks-assignment/main.svelte | 13 + test/runtime/samples/empty-dom/_config.js | 2 +- .../samples/empty-style-block/_config.js | 2 +- .../escape-template-literals/_config.js | 2 +- .../samples/event-handler-async/_config.js | 2 +- .../event-handler-dynamic-2/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../event-handler-dynamic-hash/_config.js | 2 +- .../event-handler-dynamic-invalid/_config.js | 2 +- .../_config.js | 2 +- .../samples/event-handler-dynamic/_config.js | 2 +- .../event-handler-each-this/_config.js | 2 +- .../event-handler-modifier-self/_config.js | 2 +- .../_config.js | 12 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 4 +- .../samples/if-block-else-in-each/_config.js | 4 +- .../if-block-else-partial-outro/_config.js | 4 +- .../_config.js | 2 +- .../_config.js | 2 +- .../samples/initial-state-assign/_config.js | 2 +- .../innerhtml-with-comments/_config.js | 8 + .../innerhtml-with-comments/main.svelte | 5 + .../_config.js | 6 +- .../loop-protect-generator-opt-out/_config.js | 4 +- .../loop-protect-inner-function/_config.js | 2 +- test/runtime/samples/loop-protect/_config.js | 2 +- .../nested-transition-detach-each/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../samples/noscript-removal/_config.js | 2 +- .../paren-wrapped-expressions/_config.js | 2 +- test/runtime/samples/prop-exports/_config.js | 2 +- .../Comp.svelte | 6 + .../_config.js | 30 + .../main.svelte | 8 + .../samples/props-reactive-slot/Comp.svelte | 1 + .../samples/props-reactive-slot/_config.js | 21 + .../samples/props-reactive-slot/main.svelte | 13 + .../raw-mustache-as-root/RawMustache.svelte | 5 + .../samples/raw-mustache-as-root/_config.js | 33 + .../samples/raw-mustache-as-root/main.svelte | 17 + .../raw-mustache-inside-head/_config.js | 16 + .../raw-mustache-inside-head/main.svelte | 16 + .../raw-mustache-inside-slot/Component.svelte | 2 + .../raw-mustache-inside-slot/_config.js | 33 + .../raw-mustache-inside-slot/main.svelte | 17 + .../samples/raw-mustaches-td-tr/_config.js | 18 + .../samples/raw-mustaches-td-tr/main.svelte | 12 + .../_config.js | 27 + .../main.svelte | 10 + .../reactive-import-statement/_config.js | 2 +- .../reactive-value-assign-property/_config.js | 5 + .../main.svelte | 6 + .../self-reference-component/_config.js | 2 +- .../samples/set-undefined-attr/_config.js | 2 +- .../samples/sigil-component-prop/_config.js | 2 +- .../slot-if-block-update-no-anchor/_config.js | 2 +- .../samples/spread-component-2/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 8 +- .../spread-component-dynamic/_config.js | 8 +- .../_config.js | 2 +- .../samples/spread-each-component/_config.js | 2 +- .../samples/spread-each-element/_config.js | 2 +- .../samples/spread-element-boolean/_config.js | 2 +- .../_config.js | 39 + .../main.svelte | 12 + .../_config.js | 12 + .../main.svelte | 5 + .../InputOne.svelte | 18 + .../InputTwo.svelte | 19 + .../spread-element-input-value/_config.js | 62 + .../spread-element-input-value/main.svelte | 9 + .../spread-element-input-value/utils.js | 6 + .../_config.js | 2 +- .../spread-element-multiple/_config.js | 8 +- .../_config.js | 2 +- .../store-each-binding-deep/_config.js | 14 + .../store-each-binding-deep/main.svelte | 11 + .../samples/store-imports-hoisted/_config.js | 7 + .../samples/store-imports-hoisted/foo.js | 3 + .../samples/store-imports-hoisted/main.svelte | 7 + .../samples/store-resubscribe-b/_config.js | 2 +- .../store-resubscribe-export/_config.js | 8 +- .../store-resubscribe-observable/_config.js | 2 +- .../samples/store-shadow-scope/_config.js | 3 + .../samples/store-shadow-scope/main.svelte | 9 + .../_config.js | 3 + .../main.svelte | 9 + .../svg-tspan-preserve-space/_config.js | 2 +- .../this-in-function-expressions/_config.js | 10 + .../this-in-function-expressions/main.svelte | 2 + .../_config.js | 2 +- .../transition-css-duration/_config.js | 2 +- .../samples/transition-css-iframe/_config.js | 2 +- .../transition-css-in-out-in/_config.js | 2 +- .../_config.js | 2 +- .../transition-js-aborted-outro/_config.js | 4 +- .../transition-js-deferred-b/_config.js | 2 +- .../samples/transition-js-deferred/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 54 + .../main.svelte | 27 + .../_config.js | 22 + .../main.svelte | 18 + .../_config.js | 20 + .../main.svelte | 18 + .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../transition-js-local-and-global/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../transition-js-local-nested-if/_config.js | 2 +- .../samples/transition-js-local/_config.js | 2 +- .../_config.js | 2 +- .../_config.js | 2 +- .../transition-js-nested-each/_config.js | 2 +- .../transition-js-nested-if/_config.js | 2 +- .../_config.js | 2 +- .../transition-js-parameterised/_config.js | 2 +- .../unchanged-expression-escape/_config.js | 2 +- .../unchanged-expression-xss/_config.js | 2 +- .../samples/whitespace-list/_config.js | 2 +- .../window-bind-scroll-update/_config.js | 2 +- .../window-binding-scroll-store/_config.js | 10 +- .../samples/window-event-custom/_config.js | 2 +- test/server-side-rendering/index.js | 4 +- test/validator/index.js | 2 +- .../errors.json | 17 + .../input.svelte | 6 + .../input.svelte | 6 + .../warnings.json | 32 + .../a11y-media-has-caption/input.svelte | 4 + .../a11y-media-has-caption/warnings.json | 32 + test/vars/samples/assumed-global/_config.js | 2 +- .../vars/samples/duplicate-globals/_config.js | 2 +- .../duplicate-non-hoistable/_config.js | 2 +- test/vars/samples/duplicate-vars/_config.js | 2 +- .../vars/samples/implicit-reactive/_config.js | 2 +- .../samples/referenced-from-script/_config.js | 32 +- .../samples/template-references/_config.js | 10 +- test/vars/samples/undeclared/_config.js | 2 +- 517 files changed, 7064 insertions(+), 2001 deletions(-) create mode 100644 site/content/blog/2020-07-17-svelte-and-typescript.md create mode 100644 site/content/examples/05-bindings/05-file-inputs/App.svelte create mode 100644 site/content/examples/05-bindings/05-file-inputs/meta.json rename site/content/examples/05-bindings/{05-select-bindings => 06-select-bindings}/App.svelte (100%) rename site/content/examples/05-bindings/{05-select-bindings => 06-select-bindings}/meta.json (100%) rename site/content/examples/05-bindings/{06-multiple-select-bindings => 07-multiple-select-bindings}/App.svelte (100%) rename site/content/examples/05-bindings/{06-multiple-select-bindings => 07-multiple-select-bindings}/meta.json (100%) rename site/content/examples/05-bindings/{07-each-block-bindings => 08-each-block-bindings}/App.svelte (89%) rename site/content/examples/05-bindings/{07-each-block-bindings => 08-each-block-bindings}/meta.json (100%) rename site/content/examples/05-bindings/{08-media-elements => 09-media-elements}/App.svelte (95%) rename site/content/examples/05-bindings/{08-media-elements => 09-media-elements}/meta.json (100%) rename site/content/examples/05-bindings/{09-dimensions => 10-dimensions}/App.svelte (100%) rename site/content/examples/05-bindings/{09-dimensions => 10-dimensions}/meta.json (100%) rename site/content/examples/05-bindings/{10-bind-this => 11-bind-this}/App.svelte (99%) rename site/content/examples/05-bindings/{10-bind-this => 11-bind-this}/meta.json (100%) rename site/content/examples/05-bindings/{11-component-bindings => 12-component-bindings}/App.svelte (100%) rename site/content/examples/05-bindings/{11-component-bindings => 12-component-bindings}/Keypad.svelte (100%) rename site/content/examples/05-bindings/{11-component-bindings => 12-component-bindings}/meta.json (100%) delete mode 100644 site/content/faq/300-is-svelte-dev-down.md create mode 100644 site/content/faq/450-how-do-i-document-my-components.md create mode 100644 site/scripts/copy-workers.js create mode 100644 site/static/examples/thumbnails/file-inputs.jpg create mode 100644 site/static/media/svelte-ts.png create mode 100644 src/compiler/compile/render_dom/wrappers/Element/SpreadAttribute.ts create mode 100644 src/compiler/compile/render_dom/wrappers/Element/handle_select_value_binding.ts create mode 100644 src/compiler/compile/render_dom/wrappers/shared/mark_each_block_bindings.ts create mode 100644 src/compiler/compile/utils/compare_node.ts create mode 100644 src/compiler/compile/utils/replace_object.ts create mode 100644 src/compiler/compile/utils/string_to_member_expression.ts create mode 100644 test/js/samples/initial-context/expected.js create mode 100644 test/js/samples/initial-context/input.svelte create mode 100644 test/js/samples/optional-chaining/expected.js create mode 100644 test/js/samples/optional-chaining/input.svelte create mode 100644 test/parser/samples/error-css-global-without-selector/error.json create mode 100644 test/parser/samples/error-css-global-without-selector/input.svelte create mode 100644 test/parser/samples/error-unmatched-closing-tag-autoclose-2/error.json create mode 100644 test/parser/samples/error-unmatched-closing-tag-autoclose-2/input.svelte create mode 100644 test/parser/samples/error-unmatched-closing-tag-autoclose/error.json create mode 100644 test/parser/samples/error-unmatched-closing-tag-autoclose/input.svelte create mode 100644 test/preprocess/samples/script-self-closing/_config.js create mode 100644 test/preprocess/samples/script-self-closing/input.svelte create mode 100644 test/preprocess/samples/script-self-closing/output.svelte create mode 100644 test/preprocess/samples/style-self-closing/_config.js create mode 100644 test/preprocess/samples/style-self-closing/input.svelte create mode 100644 test/preprocess/samples/style-self-closing/output.svelte create mode 100644 test/runtime/samples/$$slot/A.svelte create mode 100644 test/runtime/samples/$$slot/_config.js create mode 100644 test/runtime/samples/$$slot/main.svelte create mode 100644 test/runtime/samples/await-with-update-2/Component.svelte create mode 100644 test/runtime/samples/await-with-update-2/_config.js create mode 100644 test/runtime/samples/await-with-update-2/main.svelte create mode 100644 test/runtime/samples/await-with-update/Component.svelte create mode 100644 test/runtime/samples/await-with-update/_config.js create mode 100644 test/runtime/samples/await-with-update/main.svelte create mode 100644 test/runtime/samples/await-without-catch/_config.js create mode 100644 test/runtime/samples/await-without-catch/main.svelte create mode 100644 test/runtime/samples/binding-input-group-duplicate-value/_config.js create mode 100644 test/runtime/samples/binding-input-group-duplicate-value/main.svelte create mode 100644 test/runtime/samples/binding-input-group-each-1/_config.js create mode 100644 test/runtime/samples/binding-input-group-each-1/main.svelte create mode 100644 test/runtime/samples/binding-input-group-each-2/_config.js create mode 100644 test/runtime/samples/binding-input-group-each-2/main.svelte create mode 100644 test/runtime/samples/binding-input-group-each-3/_config.js create mode 100644 test/runtime/samples/binding-input-group-each-3/main.svelte create mode 100644 test/runtime/samples/binding-input-group-each-4/_config.js create mode 100644 test/runtime/samples/binding-input-group-each-4/main.svelte create mode 100644 test/runtime/samples/binding-input-group-each-5/_config.js create mode 100644 test/runtime/samples/binding-input-group-each-5/main.svelte create mode 100644 test/runtime/samples/binding-input-group-each-6/_config.js create mode 100644 test/runtime/samples/binding-input-group-each-6/main.svelte create mode 100644 test/runtime/samples/binding-select-late-2/_config.js create mode 100644 test/runtime/samples/binding-select-late-2/main.svelte create mode 100644 test/runtime/samples/binding-select-late-3/_config.js create mode 100644 test/runtime/samples/binding-select-late-3/main.svelte create mode 100644 test/runtime/samples/binding-this-each-block-property-2/_config.js create mode 100644 test/runtime/samples/binding-this-each-block-property-2/main.svelte create mode 100644 test/runtime/samples/component-binding-store/Input.svelte create mode 100644 test/runtime/samples/component-binding-store/_config.js create mode 100644 test/runtime/samples/component-binding-store/main.svelte create mode 100644 test/runtime/samples/component-event-handler-contenteditable/_config.js create mode 100644 test/runtime/samples/component-event-handler-contenteditable/main.svelte create mode 100644 test/runtime/samples/component-namespace/Tooltip.svelte create mode 100644 test/runtime/samples/component-namespace/Widget.svelte create mode 100644 test/runtime/samples/component-namespace/_config.js create mode 100644 test/runtime/samples/component-namespace/main.svelte create mode 100644 test/runtime/samples/each-block-keyed-component-action/Component.svelte create mode 100644 test/runtime/samples/each-block-keyed-component-action/_config.js create mode 100644 test/runtime/samples/each-block-keyed-component-action/main.svelte create mode 100644 test/runtime/samples/each-block-scope-shadow-bind-2/_config.js create mode 100644 test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte create mode 100644 test/runtime/samples/each-block-scope-shadow-bind-3/_config.js create mode 100644 test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte create mode 100644 test/runtime/samples/each-block-scope-shadow-bind-4/_config.js create mode 100644 test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte create mode 100644 test/runtime/samples/each-block-scope-shadow-bind/_config.js create mode 100644 test/runtime/samples/each-block-scope-shadow-bind/main.svelte create mode 100644 test/runtime/samples/each-blocks-assignment-2/_config.js create mode 100644 test/runtime/samples/each-blocks-assignment-2/main.svelte create mode 100644 test/runtime/samples/each-blocks-assignment/_config.js create mode 100644 test/runtime/samples/each-blocks-assignment/main.svelte create mode 100644 test/runtime/samples/innerhtml-with-comments/_config.js create mode 100644 test/runtime/samples/innerhtml-with-comments/main.svelte create mode 100644 test/runtime/samples/props-reactive-only-with-change/Comp.svelte create mode 100644 test/runtime/samples/props-reactive-only-with-change/_config.js create mode 100644 test/runtime/samples/props-reactive-only-with-change/main.svelte create mode 100644 test/runtime/samples/props-reactive-slot/Comp.svelte create mode 100644 test/runtime/samples/props-reactive-slot/_config.js create mode 100644 test/runtime/samples/props-reactive-slot/main.svelte create mode 100644 test/runtime/samples/raw-mustache-as-root/RawMustache.svelte create mode 100644 test/runtime/samples/raw-mustache-as-root/_config.js create mode 100644 test/runtime/samples/raw-mustache-as-root/main.svelte create mode 100644 test/runtime/samples/raw-mustache-inside-head/_config.js create mode 100644 test/runtime/samples/raw-mustache-inside-head/main.svelte create mode 100644 test/runtime/samples/raw-mustache-inside-slot/Component.svelte create mode 100644 test/runtime/samples/raw-mustache-inside-slot/_config.js create mode 100644 test/runtime/samples/raw-mustache-inside-slot/main.svelte create mode 100644 test/runtime/samples/raw-mustaches-td-tr/_config.js create mode 100644 test/runtime/samples/raw-mustaches-td-tr/main.svelte create mode 100644 test/runtime/samples/reactive-function-called-reassigned/_config.js create mode 100644 test/runtime/samples/reactive-function-called-reassigned/main.svelte create mode 100644 test/runtime/samples/reactive-value-assign-property/_config.js create mode 100644 test/runtime/samples/reactive-value-assign-property/main.svelte create mode 100644 test/runtime/samples/spread-element-input-select-multiple/_config.js create mode 100644 test/runtime/samples/spread-element-input-select-multiple/main.svelte create mode 100644 test/runtime/samples/spread-element-input-value-undefined/_config.js create mode 100644 test/runtime/samples/spread-element-input-value-undefined/main.svelte create mode 100644 test/runtime/samples/spread-element-input-value/InputOne.svelte create mode 100644 test/runtime/samples/spread-element-input-value/InputTwo.svelte create mode 100644 test/runtime/samples/spread-element-input-value/_config.js create mode 100644 test/runtime/samples/spread-element-input-value/main.svelte create mode 100644 test/runtime/samples/spread-element-input-value/utils.js create mode 100644 test/runtime/samples/store-each-binding-deep/_config.js create mode 100644 test/runtime/samples/store-each-binding-deep/main.svelte create mode 100644 test/runtime/samples/store-imports-hoisted/_config.js create mode 100644 test/runtime/samples/store-imports-hoisted/foo.js create mode 100644 test/runtime/samples/store-imports-hoisted/main.svelte create mode 100644 test/runtime/samples/store-shadow-scope/_config.js create mode 100644 test/runtime/samples/store-shadow-scope/main.svelte create mode 100644 test/runtime/samples/store-template-expression-scope/_config.js create mode 100644 test/runtime/samples/store-template-expression-scope/main.svelte create mode 100644 test/runtime/samples/this-in-function-expressions/_config.js create mode 100644 test/runtime/samples/this-in-function-expressions/main.svelte create mode 100644 test/runtime/samples/transition-js-each-else-block-intro-outro/_config.js create mode 100644 test/runtime/samples/transition-js-each-else-block-intro-outro/main.svelte create mode 100644 test/runtime/samples/transition-js-each-else-block-intro/_config.js create mode 100644 test/runtime/samples/transition-js-each-else-block-intro/main.svelte create mode 100644 test/runtime/samples/transition-js-each-else-block-outro/_config.js create mode 100644 test/runtime/samples/transition-js-each-else-block-outro/main.svelte create mode 100644 test/validator/samples/a11y-contenteditable-element-without-child/errors.json create mode 100644 test/validator/samples/a11y-contenteditable-element-without-child/input.svelte create mode 100644 test/validator/samples/a11y-label-has-associated-control/input.svelte create mode 100644 test/validator/samples/a11y-label-has-associated-control/warnings.json create mode 100644 test/validator/samples/a11y-media-has-caption/input.svelte create mode 100644 test/validator/samples/a11y-media-has-caption/warnings.json diff --git a/.eslintignore b/.eslintignore index b5cb03ae6e62..d123c1053048 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,7 +2,6 @@ **/expected.js _output test/*/samples/*/output.js -node_modules # automatically generated internal_exports.ts diff --git a/.eslintrc.js b/.eslintrc.js index 946a157e40c8..a093de610b35 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,65 +1,6 @@ module.exports = { root: true, - rules: { - indent: 'off', - 'no-unused-vars': 'off', - semi: [2, 'always'], - 'keyword-spacing': [2, { before: true, after: true }], - 'space-before-blocks': [2, 'always'], - 'no-mixed-spaces-and-tabs': [2, 'smart-tabs'], - 'no-cond-assign': 0, - 'object-shorthand': [2, 'always'], - 'no-const-assign': 2, - 'no-class-assign': 2, - 'no-this-before-super': 2, - 'no-var': 2, - 'no-unreachable': 2, - 'valid-typeof': 2, - 'quote-props': [2, 'as-needed'], - 'one-var': [2, 'never'], - 'prefer-arrow-callback': 2, - 'prefer-const': [2, { destructuring: 'all' }], - 'arrow-spacing': 2, - 'no-inner-declarations': 0, - 'require-atomic-updates': 'off', - '@typescript-eslint/indent': 'off', - '@typescript-eslint/camelcase': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/array-type': ['error', 'array-simple'], - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-member-accessibility': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', - { - argsIgnorePattern: '^_' - } - ], - '@typescript-eslint/no-object-literal-type-assertion': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/prefer-interface': 'off' - }, - globals: { - globalThis: false - }, - env: { - es6: true, - browser: true, - node: true, - mocha: true - }, - extends: [ - 'eslint:recommended', - 'plugin:import/errors', - 'plugin:import/warnings', - 'plugin:import/typescript', - 'plugin:@typescript-eslint/recommended' - ], - parserOptions: { - ecmaVersion: 9, - sourceType: 'module' - }, - plugins: ['svelte3'], + extends: '@sveltejs', settings: { 'import/core-modules': [ 'svelte', @@ -69,20 +10,5 @@ module.exports = { 'estree' ], 'svelte3/compiler': require('./compiler') - }, - overrides: [ - { - files: ['*.js'], - rules: { - '@typescript-eslint/no-var-requires': 'off' - } - }, - { - files: ['*.svelte'], - processor: 'svelte3/svelte3', - rules: { - '@typescript-eslint/indent': 'off' - } - } - ] + } }; diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 6871094f5cac..7daff3f1ab15 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -8,10 +8,13 @@ the issue. One way we prioritize issues is by the number of :+1: reactions on their descriptions. Please DO NOT add `+1` or :+1: comments. ### Feature requests and proposals + We're excited to hear how we can make Svelte better. Please add as much detail -as you can on your use case. +as you can on your use case. To propose an implementation of a large feature or +change, please create an [RFC](https://github.com/sveltejs/rfcs). ### Bugs + If you're filing an issue about a bug please include as much information as you can including the following. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index e533c21c96fa..923bfdb50cc1 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -7,6 +7,11 @@ assignees: '' --- + + **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. For example: I'm always frustrated when [...] diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1e77e0337aca..d14a0f9fe4b4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,8 +1,7 @@ - - ### Before submitting the PR, please make sure you do the following -- [ ] It's really useful if your PR relates to an outstanding issue, so please reference it in your PR, or create an explanatory one for discussion. In many cases features are absent for a reason. -- [ ] This message body should clearly illustrate what problems it solves. If there are related issues, remember to reference them. -- [ ] Ideally, include a test that fails without this PR but passes with it. PRs will only be merged once they pass CI. (Remember to `npm run lint`!) +- [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs +- [ ] This message body should clearly illustrate what problems it solves. +- [ ] Ideally, include a test that fails without this PR but passes with it. + ### Tests -- [ ] Run the tests tests with `npm test` or `yarn test`) +- [ ] Run the tests with `npm test` and lint the project with `npm run lint` diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 457ddb3babea..4e04386fccfb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,12 +3,12 @@ on: [push, pull_request] jobs: Tests: runs-on: ${{ matrix.os }} + timeout-minutes: 10 strategy: matrix: node-version: [8, 10, 12, 14] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - - run: git config --global core.autocrlf false - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: @@ -19,12 +19,17 @@ jobs: CI: true Lint: runs-on: ubuntu-latest + timeout-minutes: 2 steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 - run: 'npm i && npm run lint' Unit: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + timeout-minutes: 5 + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fd3d96fbed0..0ccfeff27381 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,72 @@ ## Unreleased +* Expose object of which slots have received content in `$$slots` ([#2106](https://github.com/sveltejs/svelte/issues/2106)) +* Re-throw an unhandled rejection when an `{#await}` block with no `{:catch}` gets a rejection ([#5129](https://github.com/sveltejs/svelte/issues/5129)) +* Add types to `createEventDispatcher` ([#5211](https://github.com/sveltejs/svelte/issues/5211)) +* In SSR mode, do not automatically declare variables for reactive assignments to member expressions ([#5247](https://github.com/sveltejs/svelte/issues/5247)) +* Include selector in message of `unused-css-selector` warning ([#5252](https://github.com/sveltejs/svelte/issues/5252)) +* Fix using ``s in child `{#await}`/`{#each}` contexts ([#5255](https://github.com/sveltejs/svelte/issues/5255)) +* Fix using `` in `{:catch}` ([#5259](https://github.com/sveltejs/svelte/issues/5259)) +* Fix setting one-way bound `` `value` to `undefined` when it has spread attributes ([#5270](https://github.com/sveltejs/svelte/issues/5270)) +* Fix deep two-way bindings inside an `{#each}` involving a store ([#5286](https://github.com/sveltejs/svelte/issues/5286)) + +## 3.24.1 + +* Prevent duplicate invalidation with certain two-way component bindings ([#3180](https://github.com/sveltejs/svelte/issues/3180), [#5117](https://github.com/sveltejs/svelte/issues/5117), [#5144](https://github.com/sveltejs/svelte/issues/5144)) +* Fix reactivity when passing `$$props` to a `` ([#3364](https://github.com/sveltejs/svelte/issues/3364)) +* Fix transitions on `{#each}` `{:else}` ([#4970](https://github.com/sveltejs/svelte/issues/4970)) +* Fix unneeded invalidation of `$$props` and `$$restProps` ([#4993](https://github.com/sveltejs/svelte/issues/4993), [#5118](https://github.com/sveltejs/svelte/issues/5118)) +* Provide better compiler error message when mismatched tags are due to autoclosing of tags ([#5049](https://github.com/sveltejs/svelte/issues/5049)) +* Add `a11y-label-has-associated-control` warning ([#5074](https://github.com/sveltejs/svelte/pull/5074)) +* Add `a11y-media-has-caption` warning ([#5075](https://github.com/sveltejs/svelte/pull/5075)) +* Fix `bind:group` when using contextual reference ([#5174](https://github.com/sveltejs/svelte/issues/5174)) + +## 3.24.0 + +* Support nullish coalescing (`??`) and optional chaining (`?.`) operators ([#1972](https://github.com/sveltejs/svelte/issues/1972)) +* Support `import.meta` ([#4379](https://github.com/sveltejs/svelte/issues/4379)) +* Fix only setting `` values when they're changed when there are spread attributes ([#4418](https://github.com/sveltejs/svelte/issues/4418)) +* Fix placement of `{@html}` when used at the root of a slot, at the root of a component, or in `` ([#5012](https://github.com/sveltejs/svelte/issues/5012), [#5071](https://github.com/sveltejs/svelte/pull/5071)) +* Fix certain handling of two-way bound `contenteditable` elements ([#5018](https://github.com/sveltejs/svelte/issues/5018)) +* Fix handling of `import`ed value that is used as a store and is also mutated ([#5019](https://github.com/sveltejs/svelte/issues/5019)) +* Do not display `a11y-missing-content` warning on elements with `contenteditable` bindings ([#5020](https://github.com/sveltejs/svelte/issues/5020)) +* Fix handling of `this` in inline function expressions in the template ([#5033](https://github.com/sveltejs/svelte/issues/5033)) +* Fix collapsing HTML with static content ([#5040](https://github.com/sveltejs/svelte/issues/5040)) +* Prevent use of `$store` at compile time when top-level `store` has been shadowed ([#5048](https://github.com/sveltejs/svelte/issues/5048)) +* Update ` + + + + +{#if files} +

Selected files:

+ {#each Array.from(files) as file} +

{file.name} ({file.size} bytes)

+ {/each} +{/if} diff --git a/site/content/examples/05-bindings/05-file-inputs/meta.json b/site/content/examples/05-bindings/05-file-inputs/meta.json new file mode 100644 index 000000000000..92d0587e8748 --- /dev/null +++ b/site/content/examples/05-bindings/05-file-inputs/meta.json @@ -0,0 +1,3 @@ +{ + "title": "File inputs" +} diff --git a/site/content/examples/05-bindings/05-select-bindings/App.svelte b/site/content/examples/05-bindings/06-select-bindings/App.svelte similarity index 100% rename from site/content/examples/05-bindings/05-select-bindings/App.svelte rename to site/content/examples/05-bindings/06-select-bindings/App.svelte diff --git a/site/content/examples/05-bindings/05-select-bindings/meta.json b/site/content/examples/05-bindings/06-select-bindings/meta.json similarity index 100% rename from site/content/examples/05-bindings/05-select-bindings/meta.json rename to site/content/examples/05-bindings/06-select-bindings/meta.json diff --git a/site/content/examples/05-bindings/06-multiple-select-bindings/App.svelte b/site/content/examples/05-bindings/07-multiple-select-bindings/App.svelte similarity index 100% rename from site/content/examples/05-bindings/06-multiple-select-bindings/App.svelte rename to site/content/examples/05-bindings/07-multiple-select-bindings/App.svelte diff --git a/site/content/examples/05-bindings/06-multiple-select-bindings/meta.json b/site/content/examples/05-bindings/07-multiple-select-bindings/meta.json similarity index 100% rename from site/content/examples/05-bindings/06-multiple-select-bindings/meta.json rename to site/content/examples/05-bindings/07-multiple-select-bindings/meta.json diff --git a/site/content/examples/05-bindings/07-each-block-bindings/App.svelte b/site/content/examples/05-bindings/08-each-block-bindings/App.svelte similarity index 89% rename from site/content/examples/05-bindings/07-each-block-bindings/App.svelte rename to site/content/examples/05-bindings/08-each-block-bindings/App.svelte index ff91612ec52b..4d3d75420cc9 100644 --- a/site/content/examples/05-bindings/07-each-block-bindings/App.svelte +++ b/site/content/examples/05-bindings/08-each-block-bindings/App.svelte @@ -16,16 +16,10 @@ $: remaining = todos.filter(t => !t.done).length; - -

Todos

{#each todos as todo} -
+
{/each} diff --git a/site/content/examples/05-bindings/07-each-block-bindings/meta.json b/site/content/examples/05-bindings/08-each-block-bindings/meta.json similarity index 100% rename from site/content/examples/05-bindings/07-each-block-bindings/meta.json rename to site/content/examples/05-bindings/08-each-block-bindings/meta.json diff --git a/site/content/examples/05-bindings/08-media-elements/App.svelte b/site/content/examples/05-bindings/09-media-elements/App.svelte similarity index 95% rename from site/content/examples/05-bindings/08-media-elements/App.svelte rename to site/content/examples/05-bindings/09-media-elements/App.svelte index 469e9e12eb2c..7a071dbe495f 100644 --- a/site/content/examples/05-bindings/08-media-elements/App.svelte +++ b/site/content/examples/05-bindings/09-media-elements/App.svelte @@ -109,8 +109,8 @@
- + diff --git a/site/src/utils/highlight.js b/site/src/utils/highlight.js index d9e4fe5ec816..124af2e6be29 100644 --- a/site/src/utils/highlight.js +++ b/site/src/utils/highlight.js @@ -1,6 +1,7 @@ import { langs } from '@sveltejs/site-kit/utils/markdown.js'; import PrismJS from 'prismjs'; import 'prismjs/components/prism-bash'; +import 'prismjs/components/prism-diff'; import 'prism-svelte'; export function highlight(source, lang) { diff --git a/site/static/examples/thumbnails/file-inputs.jpg b/site/static/examples/thumbnails/file-inputs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d302633f6b6fd370594d1d116dfb0b6a8adbd436 GIT binary patch literal 2751 zcmdT^XH?S(690z)O7jRIz*3Z@iBUkMgie+sC`DRm2`WtzB=jnRaCdMhf}*epxPS>I z2@s@{grdvAVp!>+1Oieep$SrS6#MnSvAAz*NI3O+Etq}T-cqjMkzJb_4Q~U7v zF#kAAK%n1mBp`@{gbYkZOIB9P&s^W!@BhZ(O8{~l=mC1bAPB$*0f8Z)!+!&E00;ns zjsScGm|s8;#CPn-X(0}Pz+gZ?h+l{gEcBlM5Z{p-A}9g<_5$oXCs$Mop>$AEN!RDt z#qfV*Kd-HOFQu)lg3vR!@QsYBf3V6q8W;kY0sCM3 z`70~J(r_{%N^+Y`*5Q$|Vzz^n0$h*lNo$U5t$|+9Vk+{mVyV52#tdYzrZ;(!4fcsx zyQ(=LCz2NwACo+eVYu`*2>!UpF7ht<6Ox418eOh%xx8pMEDVC-^enhC)ghQ94gBXB zb}|MK6qvNF-eu>O1zkotXQXCH_DMf?uUHW9O4KKMrFD8=b}^^E<)RrK#arNzmB_TQ z;K%Kk=r;M4w5QBPC+Mkk=%8y;(|zG`U9Z=~;PkAybn>Iqzb}^`1^vnXs>%l=H+?oW zk`4iuaNEqGzO9YDFR)3tFJHt-8Fe<0shr*apqoT67$n)FxQ}G30 zUD-bFu1z;_>L~^f6`B$-vLC*Dy1_+*$~jj59n>Q$Kaqvi*bhbVpy9 zAw7Pc{C9)d2vY;utXofhkQCL>Nqp7h>71qS4JO7moMlB9aK>3PyD3kIth^u-smFoC zLkXff{deFrcLVm6eE#eX9r%93TeWw2mK9N_KchxP%leS-h0~0Z2k>)pYX6$#l?SyY z7O2(fV9s(Vg~_GO-WqtVX8NSp2pYP6jLlAqjaC3%e6-Xr^Fj zpf|#-N{D|?p=5kIKn7payx>*+#Lf2M`^oi2ciFxrq(Lv|^d)u^d0cz! z)$f(UU0Im0)D_w3qR8@Q-vkfyYFg6~wgYURy4P~Grnt1dF&4RiHb;&U?IEs!y4C~`8c_l zC5t00)GA5-d4;VzRe{I%2ubkDtOanyCN_ZCtJ;Jp)0WS?ROy)$r0W#^paLm{-)`>; zEiW4z8@C+asm%;l(@s|RSiOubpj(k9RWSu0M_856dIFa5p&3Y;81xPoK^ z#`Ah?&Er|)IFG?MonGY5;sFt9jx2tN3g-op)mMD&RI2P2O>sG&j*bvYqLA<3;*4Hd zvZMtY(yROX<75&0Co9_O5T@3zoc^}E6ezXdrWjymd8^V*f4%uN1^1LTK|D|W>~2~T zeZEt{_*|NlvT`PAv{7H_G@wX#+DdIAJjB&cUhu4WFmI-Krqh1{%beIJ8r&OPi#9~X z&YPJ&QcTKR!4f?7Yh(_A%=$y17|nafNS7+F9Y%ThG@{@=Jw!i=OXZYB@;@WOU&<5@ zA#}=jRfdGxGGrMhMf=yXjLn{c2@Py+wdA?dGOH0QCT$AS$}92a`++exrbXYU@GX;i zbLrMpnG9u=dm0J~puq#b|M{;H{1WcPIu+5<)71;}3xbC+l@`Q=-rgsuX5CaCZ)FOc zG;i7om1{#rz?v)LI6Uy9>Na%uhNFBco;QuSoxE^1)NPY7a_n35?dHts5(D8$R%^%( msK;%(dOntP;!jWJ+ZMOFDq$@GdEnsBhx|I_Usy3aocI;?`dRb< literal 0 HcmV?d00001 diff --git a/site/static/media/svelte-ts.png b/site/static/media/svelte-ts.png new file mode 100644 index 0000000000000000000000000000000000000000..ed562822c3ce0dd85b32f6c792e70fce8e319687 GIT binary patch literal 189664 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

m_cN5*-D5fLdbJ*J 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 literal 0 HcmV?d00001 diff --git a/src/compiler/compile/Component.ts b/src/compiler/compile/Component.ts index a5a31c807004..ed2b10e40432 100644 --- a/src/compiler/compile/Component.ts +++ b/src/compiler/compile/Component.ts @@ -8,7 +8,7 @@ import { create_scopes, extract_names, Scope, - extract_identifiers, + extract_identifiers } from './utils/scope'; import Stylesheet from './css/Stylesheet'; import { test } from '../config'; @@ -155,7 +155,7 @@ export default class Component { ) || { start: 0, end: 0 }; this.warn(svelteOptions, { code: 'custom-element-no-tag', - message: `No custom element 'tag' option was specified. To automatically register a custom element, specify a name with a hyphen in it, e.g. . To hide this warning, use `, + message: `No custom element 'tag' option was specified. To automatically register a custom element, specify a name with a hyphen in it, e.g. . To hide this warning, use ` }); } this.tag = this.component_options.tag || compile_options.tag; @@ -190,7 +190,7 @@ export default class Component { this.add_var({ name, injected: true, - referenced: true, + referenced: true }); } else if (name[0] === '$') { this.add_var({ @@ -198,7 +198,7 @@ export default class Component { injected: true, referenced: true, mutated: true, - writable: true, + writable: true }); const subscribable_name = name.slice(1); @@ -289,7 +289,7 @@ export default class Component { } const imported_helpers = Array.from(this.helpers, ([name, alias]) => ({ name, - alias, + alias })); create_module( @@ -305,7 +305,7 @@ export default class Component { .filter(variable => variable.module && variable.export_name) .map(variable => ({ name: variable.name, - as: variable.export_name, + as: variable.export_name })) ); @@ -342,9 +342,9 @@ export default class Component { reassigned: v.reassigned || false, referenced: v.referenced || false, writable: v.writable || false, - referenced_from_script: v.referenced_from_script || false, + referenced_from_script: v.referenced_from_script || false })), - stats: this.stats.render(), + stats: this.stats.render() }; } @@ -409,7 +409,7 @@ export default class Component { source: this.source, start: pos.start, end: pos.end, - filename: this.compile_options.filename, + filename: this.compile_options.filename }); } @@ -441,7 +441,7 @@ export default class Component { pos: pos.start, filename: this.compile_options.filename, toString: () => - `${warning.message} (${start.line}:${start.column})\n${frame}`, + `${warning.message} (${start.line}:${start.column})\n${frame}` }); } @@ -453,7 +453,7 @@ export default class Component { if (node.type === 'ExportDefaultDeclaration') { this.error(node, { code: `default-export`, - message: `A component cannot have a default export`, + message: `A component cannot have a default export` }); } @@ -461,7 +461,7 @@ export default class Component { if (node.source) { this.error(node, { code: `not-implemented`, - message: `A component currently cannot have an export ... from`, + message: `A component currently cannot have an export ... from` }); } if (node.declaration) { @@ -531,10 +531,10 @@ export default class Component { if (node.type === 'LabeledStatement' && node.label.name === '$') { component.warn(node as any, { code: 'module-script-reactive-declaration', - message: '$: has no effect in a module script', + message: '$: has no effect in a module script' }); } - }, + } }); const { scope, globals } = create_scopes(script.content); @@ -544,7 +544,7 @@ export default class Component { if (name[0] === '$') { this.error(node as any, { code: 'illegal-declaration', - message: `The $ prefix is reserved, and cannot be used for variable and import names`, + message: `The $ prefix is reserved, and cannot be used for variable and import names` }); } @@ -562,7 +562,7 @@ export default class Component { if (name[0] === '$') { this.error(node as any, { code: 'illegal-subscription', - message: `Cannot reference store value inside + \ No newline at end of file diff --git a/test/js/samples/inline-style-optimized-multiple/expected.js b/test/js/samples/inline-style-optimized-multiple/expected.js index 84a38abd7bbe..0a9d0a1e8eba 100644 --- a/test/js/samples/inline-style-optimized-multiple/expected.js +++ b/test/js/samples/inline-style-optimized-multiple/expected.js @@ -44,7 +44,7 @@ function instance($$self, $$props, $$invalidate) { let { x } = $$props; let { y } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("color" in $$props) $$invalidate(0, color = $$props.color); if ("x" in $$props) $$invalidate(1, x = $$props.x); if ("y" in $$props) $$invalidate(2, y = $$props.y); diff --git a/test/js/samples/inline-style-optimized-url/expected.js b/test/js/samples/inline-style-optimized-url/expected.js index 77870348a572..0debb035854f 100644 --- a/test/js/samples/inline-style-optimized-url/expected.js +++ b/test/js/samples/inline-style-optimized-url/expected.js @@ -37,7 +37,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { data } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("data" in $$props) $$invalidate(0, data = $$props.data); }; diff --git a/test/js/samples/inline-style-optimized/expected.js b/test/js/samples/inline-style-optimized/expected.js index 5bef284f0946..b7db0f1cf30b 100644 --- a/test/js/samples/inline-style-optimized/expected.js +++ b/test/js/samples/inline-style-optimized/expected.js @@ -37,7 +37,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { color } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("color" in $$props) $$invalidate(0, color = $$props.color); }; diff --git a/test/js/samples/inline-style-unoptimized/expected.js b/test/js/samples/inline-style-unoptimized/expected.js index fdff685eade2..0688f14b9b24 100644 --- a/test/js/samples/inline-style-unoptimized/expected.js +++ b/test/js/samples/inline-style-unoptimized/expected.js @@ -54,7 +54,7 @@ function instance($$self, $$props, $$invalidate) { let { key } = $$props; let { value } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("style" in $$props) $$invalidate(0, style = $$props.style); if ("key" in $$props) $$invalidate(1, key = $$props.key); if ("value" in $$props) $$invalidate(2, value = $$props.value); diff --git a/test/js/samples/input-files/expected.js b/test/js/samples/input-files/expected.js index 1c1e57fc9b24..8adc7443f5c1 100644 --- a/test/js/samples/input-files/expected.js +++ b/test/js/samples/input-files/expected.js @@ -13,6 +13,7 @@ import { function create_fragment(ctx) { let input; + let mounted; let dispose; return { @@ -21,16 +22,20 @@ function create_fragment(ctx) { attr(input, "type", "file"); input.multiple = true; }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, input, anchor); - if (remount) dispose(); - dispose = listen(input, "change", /*input_change_handler*/ ctx[1]); + + if (!mounted) { + dispose = listen(input, "change", /*input_change_handler*/ ctx[1]); + mounted = true; + } }, p: noop, i: noop, o: noop, d(detaching) { if (detaching) detach(input); + mounted = false; dispose(); } }; @@ -44,7 +49,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(0, files); } - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("files" in $$props) $$invalidate(0, files = $$props.files); }; diff --git a/test/js/samples/input-no-initial-value/expected.js b/test/js/samples/input-no-initial-value/expected.js index f72daa22a302..3354aa31117e 100644 --- a/test/js/samples/input-no-initial-value/expected.js +++ b/test/js/samples/input-no-initial-value/expected.js @@ -20,6 +20,7 @@ function create_fragment(ctx) { let input; let t0; let button; + let mounted; let dispose; return { @@ -32,18 +33,21 @@ function create_fragment(ctx) { attr(input, "type", "text"); input.required = true; }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, form, anchor); append(form, input); set_input_value(input, /*test*/ ctx[0]); append(form, t0); append(form, button); - if (remount) run_all(dispose); - dispose = [ - listen(input, "input", /*input_input_handler*/ ctx[2]), - listen(form, "submit", /*handleSubmit*/ ctx[1]) - ]; + if (!mounted) { + dispose = [ + listen(input, "input", /*input_input_handler*/ ctx[2]), + listen(form, "submit", /*handleSubmit*/ ctx[1]) + ]; + + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*test*/ 1 && input.value !== /*test*/ ctx[0]) { @@ -54,6 +58,7 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(form); + mounted = false; run_all(dispose); } }; diff --git a/test/js/samples/input-range/expected.js b/test/js/samples/input-range/expected.js index 17a806544907..a855ca3653fe 100644 --- a/test/js/samples/input-range/expected.js +++ b/test/js/samples/input-range/expected.js @@ -16,6 +16,7 @@ import { function create_fragment(ctx) { let input; + let mounted; let dispose; return { @@ -23,15 +24,18 @@ function create_fragment(ctx) { input = element("input"); attr(input, "type", "range"); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, input, anchor); set_input_value(input, /*value*/ ctx[0]); - if (remount) run_all(dispose); - dispose = [ - listen(input, "change", /*input_change_input_handler*/ ctx[1]), - listen(input, "input", /*input_change_input_handler*/ ctx[1]) - ]; + if (!mounted) { + dispose = [ + listen(input, "change", /*input_change_input_handler*/ ctx[1]), + listen(input, "input", /*input_change_input_handler*/ ctx[1]) + ]; + + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*value*/ 1) { @@ -42,6 +46,7 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(input); + mounted = false; run_all(dispose); } }; @@ -55,7 +60,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(0, value); } - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("value" in $$props) $$invalidate(0, value = $$props.value); }; diff --git a/test/js/samples/input-value/expected.js b/test/js/samples/input-value/expected.js index 31be2895ac0d..781a2ae60358 100644 --- a/test/js/samples/input-value/expected.js +++ b/test/js/samples/input-value/expected.js @@ -20,6 +20,7 @@ function create_fragment(ctx) { let h1; let t1; let t2; + let mounted; let dispose; return { @@ -31,14 +32,17 @@ function create_fragment(ctx) { t2 = text("!"); input.value = /*name*/ ctx[0]; }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, input, anchor); insert(target, t0, anchor); insert(target, h1, anchor); append(h1, t1); append(h1, t2); - if (remount) dispose(); - dispose = listen(input, "input", /*onInput*/ ctx[1]); + + if (!mounted) { + dispose = listen(input, "input", /*onInput*/ ctx[1]); + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*name*/ 1 && input.value !== /*name*/ ctx[0]) { @@ -53,6 +57,7 @@ function create_fragment(ctx) { if (detaching) detach(input); if (detaching) detach(t0); if (detaching) detach(h1); + mounted = false; dispose(); } }; diff --git a/test/js/samples/input-without-blowback-guard/expected.js b/test/js/samples/input-without-blowback-guard/expected.js index 1e379032f3a1..6c5b2156232f 100644 --- a/test/js/samples/input-without-blowback-guard/expected.js +++ b/test/js/samples/input-without-blowback-guard/expected.js @@ -13,6 +13,7 @@ import { function create_fragment(ctx) { let input; + let mounted; let dispose; return { @@ -20,11 +21,14 @@ function create_fragment(ctx) { input = element("input"); attr(input, "type", "checkbox"); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, input, anchor); input.checked = /*foo*/ ctx[0]; - if (remount) dispose(); - dispose = listen(input, "change", /*input_change_handler*/ ctx[1]); + + if (!mounted) { + dispose = listen(input, "change", /*input_change_handler*/ ctx[1]); + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*foo*/ 1) { @@ -35,6 +39,7 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(input); + mounted = false; dispose(); } }; @@ -48,7 +53,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(0, foo); } - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("foo" in $$props) $$invalidate(0, foo = $$props.foo); }; diff --git a/test/js/samples/instrumentation-script-if-no-block/expected.js b/test/js/samples/instrumentation-script-if-no-block/expected.js index f45e52aebd3b..7f51c6455007 100644 --- a/test/js/samples/instrumentation-script-if-no-block/expected.js +++ b/test/js/samples/instrumentation-script-if-no-block/expected.js @@ -20,6 +20,7 @@ function create_fragment(ctx) { let p; let t2; let t3; + let mounted; let dispose; return { @@ -31,14 +32,17 @@ function create_fragment(ctx) { t2 = text("x: "); t3 = text(/*x*/ ctx[0]); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, button, anchor); insert(target, t1, anchor); insert(target, p, anchor); append(p, t2); append(p, t3); - if (remount) dispose(); - dispose = listen(button, "click", /*foo*/ ctx[1]); + + if (!mounted) { + dispose = listen(button, "click", /*foo*/ ctx[1]); + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*x*/ 1) set_data(t3, /*x*/ ctx[0]); @@ -49,6 +53,7 @@ function create_fragment(ctx) { if (detaching) detach(button); if (detaching) detach(t1); if (detaching) detach(p); + mounted = false; dispose(); } }; diff --git a/test/js/samples/instrumentation-script-x-equals-x/expected.js b/test/js/samples/instrumentation-script-x-equals-x/expected.js index 9fe964097829..ea0d65acb906 100644 --- a/test/js/samples/instrumentation-script-x-equals-x/expected.js +++ b/test/js/samples/instrumentation-script-x-equals-x/expected.js @@ -21,6 +21,7 @@ function create_fragment(ctx) { let t2; let t3_value = /*things*/ ctx[0].length + ""; let t3; + let mounted; let dispose; return { @@ -32,14 +33,17 @@ function create_fragment(ctx) { t2 = text("number of things: "); t3 = text(t3_value); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, button, anchor); insert(target, t1, anchor); insert(target, p, anchor); append(p, t2); append(p, t3); - if (remount) dispose(); - dispose = listen(button, "click", /*foo*/ ctx[1]); + + if (!mounted) { + dispose = listen(button, "click", /*foo*/ ctx[1]); + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*things*/ 1 && t3_value !== (t3_value = /*things*/ ctx[0].length + "")) set_data(t3, t3_value); @@ -50,6 +54,7 @@ function create_fragment(ctx) { if (detaching) detach(button); if (detaching) detach(t1); if (detaching) detach(p); + mounted = false; dispose(); } }; diff --git a/test/js/samples/instrumentation-template-if-no-block/expected.js b/test/js/samples/instrumentation-template-if-no-block/expected.js index 6f3bea4010fc..0c2713a9cc64 100644 --- a/test/js/samples/instrumentation-template-if-no-block/expected.js +++ b/test/js/samples/instrumentation-template-if-no-block/expected.js @@ -20,6 +20,7 @@ function create_fragment(ctx) { let p; let t2; let t3; + let mounted; let dispose; return { @@ -31,14 +32,17 @@ function create_fragment(ctx) { t2 = text("x: "); t3 = text(/*x*/ ctx[0]); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, button, anchor); insert(target, t1, anchor); insert(target, p, anchor); append(p, t2); append(p, t3); - if (remount) dispose(); - dispose = listen(button, "click", /*click_handler*/ ctx[1]); + + if (!mounted) { + dispose = listen(button, "click", /*click_handler*/ ctx[1]); + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*x*/ 1) set_data(t3, /*x*/ ctx[0]); @@ -49,6 +53,7 @@ function create_fragment(ctx) { if (detaching) detach(button); if (detaching) detach(t1); if (detaching) detach(p); + mounted = false; dispose(); } }; diff --git a/test/js/samples/instrumentation-template-x-equals-x/expected.js b/test/js/samples/instrumentation-template-x-equals-x/expected.js index ed095353bd53..55cd310661e7 100644 --- a/test/js/samples/instrumentation-template-x-equals-x/expected.js +++ b/test/js/samples/instrumentation-template-x-equals-x/expected.js @@ -21,6 +21,7 @@ function create_fragment(ctx) { let t2; let t3_value = /*things*/ ctx[0].length + ""; let t3; + let mounted; let dispose; return { @@ -32,14 +33,17 @@ function create_fragment(ctx) { t2 = text("number of things: "); t3 = text(t3_value); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, button, anchor); insert(target, t1, anchor); insert(target, p, anchor); append(p, t2); append(p, t3); - if (remount) dispose(); - dispose = listen(button, "click", /*click_handler*/ ctx[1]); + + if (!mounted) { + dispose = listen(button, "click", /*click_handler*/ ctx[1]); + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*things*/ 1 && t3_value !== (t3_value = /*things*/ ctx[0].length + "")) set_data(t3, t3_value); @@ -50,6 +54,7 @@ function create_fragment(ctx) { if (detaching) detach(button); if (detaching) detach(t1); if (detaching) detach(p); + mounted = false; dispose(); } }; diff --git a/test/js/samples/loop-protect/_config.js b/test/js/samples/loop-protect/_config.js index fcbf8be09b18..1dc927b4daae 100644 --- a/test/js/samples/loop-protect/_config.js +++ b/test/js/samples/loop-protect/_config.js @@ -1,6 +1,6 @@ export default { options: { dev: true, - loopGuardTimeout: 100, - }, + loopGuardTimeout: 100 + } }; diff --git a/test/js/samples/loop-protect/expected.js b/test/js/samples/loop-protect/expected.js index c52d9df437e5..1042b20823b8 100644 --- a/test/js/samples/loop-protect/expected.js +++ b/test/js/samples/loop-protect/expected.js @@ -67,6 +67,8 @@ function foo() { } function instance($$self, $$props, $$invalidate) { + let { $$slots: slots = {}, $$scope } = $$props; + validate_slots("Component", slots, []); let node; { @@ -111,12 +113,10 @@ function instance($$self, $$props, $$invalidate) { if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console_1.warn(` was created with unknown prop '${key}'`); }); - let { $$slots = {}, $$scope } = $$props; - validate_slots("Component", $$slots, []); - function div_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { - $$invalidate(0, node = $$value); + node = $$value; + $$invalidate(0, node); }); } diff --git a/test/js/samples/media-bindings/expected.js b/test/js/samples/media-bindings/expected.js index 0849a38b519b..867d4a7dadfb 100644 --- a/test/js/samples/media-bindings/expected.js +++ b/test/js/samples/media-bindings/expected.js @@ -19,6 +19,7 @@ function create_fragment(ctx) { let audio_updating = false; let audio_animationframe; let audio_is_paused = true; + let mounted; let dispose; function audio_timeupdate_handler() { @@ -42,7 +43,7 @@ function create_fragment(ctx) { if (/*seeking*/ ctx[9] === void 0) add_render_callback(() => /*audio_seeking_seeked_handler*/ ctx[18].call(audio)); if (/*ended*/ ctx[10] === void 0) add_render_callback(() => /*audio_ended_handler*/ ctx[19].call(audio)); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, audio, anchor); if (!isNaN(/*volume*/ ctx[6])) { @@ -55,21 +56,23 @@ function create_fragment(ctx) { audio.playbackRate = /*playbackRate*/ ctx[8]; } - if (remount) run_all(dispose); - - dispose = [ - listen(audio, "progress", /*audio_progress_handler*/ ctx[11]), - listen(audio, "loadedmetadata", /*audio_loadedmetadata_handler*/ ctx[12]), - listen(audio, "timeupdate", audio_timeupdate_handler), - listen(audio, "durationchange", /*audio_durationchange_handler*/ ctx[14]), - listen(audio, "play", /*audio_play_pause_handler*/ ctx[15]), - listen(audio, "pause", /*audio_play_pause_handler*/ ctx[15]), - listen(audio, "volumechange", /*audio_volumechange_handler*/ ctx[16]), - listen(audio, "ratechange", /*audio_ratechange_handler*/ ctx[17]), - listen(audio, "seeking", /*audio_seeking_seeked_handler*/ ctx[18]), - listen(audio, "seeked", /*audio_seeking_seeked_handler*/ ctx[18]), - listen(audio, "ended", /*audio_ended_handler*/ ctx[19]) - ]; + if (!mounted) { + dispose = [ + listen(audio, "progress", /*audio_progress_handler*/ ctx[11]), + listen(audio, "loadedmetadata", /*audio_loadedmetadata_handler*/ ctx[12]), + listen(audio, "timeupdate", audio_timeupdate_handler), + listen(audio, "durationchange", /*audio_durationchange_handler*/ ctx[14]), + listen(audio, "play", /*audio_play_pause_handler*/ ctx[15]), + listen(audio, "pause", /*audio_play_pause_handler*/ ctx[15]), + listen(audio, "volumechange", /*audio_volumechange_handler*/ ctx[16]), + listen(audio, "ratechange", /*audio_ratechange_handler*/ ctx[17]), + listen(audio, "seeking", /*audio_seeking_seeked_handler*/ ctx[18]), + listen(audio, "seeked", /*audio_seeking_seeked_handler*/ ctx[18]), + listen(audio, "ended", /*audio_ended_handler*/ ctx[19]) + ]; + + mounted = true; + } }, p(ctx, [dirty]) { if (!audio_updating && dirty & /*currentTime*/ 8 && !isNaN(/*currentTime*/ ctx[3])) { @@ -98,6 +101,7 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(audio); + mounted = false; run_all(dispose); } }; @@ -169,7 +173,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(10, ended); } - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("buffered" in $$props) $$invalidate(0, buffered = $$props.buffered); if ("seekable" in $$props) $$invalidate(1, seekable = $$props.seekable); if ("played" in $$props) $$invalidate(2, played = $$props.played); diff --git a/test/js/samples/non-imported-component/expected.js b/test/js/samples/non-imported-component/expected.js index 2784fd17acb3..5a6b8e8bb730 100644 --- a/test/js/samples/non-imported-component/expected.js +++ b/test/js/samples/non-imported-component/expected.js @@ -17,10 +17,12 @@ import { import Imported from "Imported.svelte"; function create_fragment(ctx) { + let imported; let t; + let nonimported; let current; - const imported = new Imported({}); - const nonimported = new NonImported({}); + imported = new Imported({}); + nonimported = new NonImported({}); return { c() { diff --git a/test/js/samples/optional-chaining/expected.js b/test/js/samples/optional-chaining/expected.js new file mode 100644 index 000000000000..8aa94796c1b0 --- /dev/null +++ b/test/js/samples/optional-chaining/expected.js @@ -0,0 +1,189 @@ +/* generated by Svelte vX.Y.Z */ +import { + SvelteComponent, + attr, + create_component, + destroy_component, + detach, + element, + init, + insert, + mount_component, + safe_not_equal, + set_data, + space, + text, + transition_in, + transition_out +} from "svelte/internal"; + +function create_fragment(ctx) { + let t0_value = /*a*/ ctx[0].normal + ""; + let t0; + let t1_value = /*b*/ ctx[1]?.optional + ""; + let t1; + let t2; + let t3_value = /*c*/ ctx[2]["computed"] + ""; + let t3; + let t4_value = /*d*/ ctx[3]?.["computed_optional"] + ""; + let t4; + let t5; + let t6_value = /*e*/ ctx[4]() + ""; + let t6; + let t7_value = /*f*/ ctx[5]?.() + ""; + let t7; + let t8; + let div; + let div_a_value; + let div_b_value; + let div_c_value; + let div_d_value; + let div_e_value; + let div_f_value; + let t9; + let component; + let current; + + component = new /*Component*/ ctx[6]({ + props: { + a: /*a*/ ctx[0].normal, + b: /*b*/ ctx[1]?.optional, + c: /*c*/ ctx[2]["computed"], + d: /*d*/ ctx[3]?.["computed_optional"], + e: /*e*/ ctx[4](), + f: /*f*/ ctx[5]?.() + } + }); + + return { + c() { + t0 = text(t0_value); + t1 = text(t1_value); + t2 = space(); + t3 = text(t3_value); + t4 = text(t4_value); + t5 = space(); + t6 = text(t6_value); + t7 = text(t7_value); + t8 = space(); + div = element("div"); + t9 = space(); + create_component(component.$$.fragment); + attr(div, "a", div_a_value = /*a*/ ctx[0].normal); + attr(div, "b", div_b_value = /*b*/ ctx[1]?.optional); + attr(div, "c", div_c_value = /*c*/ ctx[2]["computed"]); + attr(div, "d", div_d_value = /*d*/ ctx[3]?.["computed_optional"]); + attr(div, "e", div_e_value = /*e*/ ctx[4]()); + attr(div, "f", div_f_value = /*f*/ ctx[5]?.()); + }, + m(target, anchor) { + insert(target, t0, anchor); + insert(target, t1, anchor); + insert(target, t2, anchor); + insert(target, t3, anchor); + insert(target, t4, anchor); + insert(target, t5, anchor); + insert(target, t6, anchor); + insert(target, t7, anchor); + insert(target, t8, anchor); + insert(target, div, anchor); + insert(target, t9, anchor); + mount_component(component, target, anchor); + current = true; + }, + p(ctx, [dirty]) { + if ((!current || dirty & /*a*/ 1) && t0_value !== (t0_value = /*a*/ ctx[0].normal + "")) set_data(t0, t0_value); + if ((!current || dirty & /*b*/ 2) && t1_value !== (t1_value = /*b*/ ctx[1]?.optional + "")) set_data(t1, t1_value); + if ((!current || dirty & /*c*/ 4) && t3_value !== (t3_value = /*c*/ ctx[2]["computed"] + "")) set_data(t3, t3_value); + if ((!current || dirty & /*d*/ 8) && t4_value !== (t4_value = /*d*/ ctx[3]?.["computed_optional"] + "")) set_data(t4, t4_value); + if ((!current || dirty & /*e*/ 16) && t6_value !== (t6_value = /*e*/ ctx[4]() + "")) set_data(t6, t6_value); + if ((!current || dirty & /*f*/ 32) && t7_value !== (t7_value = /*f*/ ctx[5]?.() + "")) set_data(t7, t7_value); + + if (!current || dirty & /*a*/ 1 && div_a_value !== (div_a_value = /*a*/ ctx[0].normal)) { + attr(div, "a", div_a_value); + } + + if (!current || dirty & /*b*/ 2 && div_b_value !== (div_b_value = /*b*/ ctx[1]?.optional)) { + attr(div, "b", div_b_value); + } + + if (!current || dirty & /*c*/ 4 && div_c_value !== (div_c_value = /*c*/ ctx[2]["computed"])) { + attr(div, "c", div_c_value); + } + + if (!current || dirty & /*d*/ 8 && div_d_value !== (div_d_value = /*d*/ ctx[3]?.["computed_optional"])) { + attr(div, "d", div_d_value); + } + + if (!current || dirty & /*e*/ 16 && div_e_value !== (div_e_value = /*e*/ ctx[4]())) { + attr(div, "e", div_e_value); + } + + if (!current || dirty & /*f*/ 32 && div_f_value !== (div_f_value = /*f*/ ctx[5]?.())) { + attr(div, "f", div_f_value); + } + + const component_changes = {}; + if (dirty & /*a*/ 1) component_changes.a = /*a*/ ctx[0].normal; + if (dirty & /*b*/ 2) component_changes.b = /*b*/ ctx[1]?.optional; + if (dirty & /*c*/ 4) component_changes.c = /*c*/ ctx[2]["computed"]; + if (dirty & /*d*/ 8) component_changes.d = /*d*/ ctx[3]?.["computed_optional"]; + if (dirty & /*e*/ 16) component_changes.e = /*e*/ ctx[4](); + if (dirty & /*f*/ 32) component_changes.f = /*f*/ ctx[5]?.(); + component.$set(component_changes); + }, + i(local) { + if (current) return; + transition_in(component.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(component.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach(t0); + if (detaching) detach(t1); + if (detaching) detach(t2); + if (detaching) detach(t3); + if (detaching) detach(t4); + if (detaching) detach(t5); + if (detaching) detach(t6); + if (detaching) detach(t7); + if (detaching) detach(t8); + if (detaching) detach(div); + if (detaching) detach(t9); + destroy_component(component, detaching); + } + }; +} + +function instance($$self, $$props, $$invalidate) { + let { a } = $$props; + let { b } = $$props; + let { c } = $$props; + let { d } = $$props; + let { e } = $$props; + let { f } = $$props; + let Component; + + $$self.$$set = $$props => { + if ("a" in $$props) $$invalidate(0, a = $$props.a); + if ("b" in $$props) $$invalidate(1, b = $$props.b); + if ("c" in $$props) $$invalidate(2, c = $$props.c); + if ("d" in $$props) $$invalidate(3, d = $$props.d); + if ("e" in $$props) $$invalidate(4, e = $$props.e); + if ("f" in $$props) $$invalidate(5, f = $$props.f); + }; + + return [a, b, c, d, e, f, Component]; +} + +class Component_1 extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal, { a: 0, b: 1, c: 2, d: 3, e: 4, f: 5 }); + } +} + +export default Component_1; \ No newline at end of file diff --git a/test/js/samples/optional-chaining/input.svelte b/test/js/samples/optional-chaining/input.svelte new file mode 100644 index 000000000000..78edf2ca85d1 --- /dev/null +++ b/test/js/samples/optional-chaining/input.svelte @@ -0,0 +1,31 @@ + + +{a.normal}{b?.optional} +{c['computed']}{d?.['computed_optional']} +{e()}{f?.()} + +

+ + diff --git a/test/js/samples/reactive-values-non-topologically-ordered/expected.js b/test/js/samples/reactive-values-non-topologically-ordered/expected.js index 3d266f10acfb..15290496d527 100644 --- a/test/js/samples/reactive-values-non-topologically-ordered/expected.js +++ b/test/js/samples/reactive-values-non-topologically-ordered/expected.js @@ -6,7 +6,7 @@ function instance($$self, $$props, $$invalidate) { let a; let b; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("x" in $$props) $$invalidate(0, x = $$props.x); }; diff --git a/test/js/samples/reactive-values-non-writable-dependencies/expected.js b/test/js/samples/reactive-values-non-writable-dependencies/expected.js index 38bd356d85e4..5196a770d976 100644 --- a/test/js/samples/reactive-values-non-writable-dependencies/expected.js +++ b/test/js/samples/reactive-values-non-writable-dependencies/expected.js @@ -5,7 +5,7 @@ function instance($$self, $$props, $$invalidate) { let { a = 1 } = $$props; let { b = 2 } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("a" in $$props) $$invalidate(0, a = $$props.a); if ("b" in $$props) $$invalidate(1, b = $$props.b); }; diff --git a/test/js/samples/select-dynamic-value/expected.js b/test/js/samples/select-dynamic-value/expected.js index a93a47bd3ac4..8777cd260072 100644 --- a/test/js/samples/select-dynamic-value/expected.js +++ b/test/js/samples/select-dynamic-value/expected.js @@ -7,14 +7,14 @@ import { init, insert, noop, - safe_not_equal + safe_not_equal, + select_option } from "svelte/internal"; function create_fragment(ctx) { let select; let option0; let option1; - let select_value_value; return { c() { @@ -32,27 +32,11 @@ function create_fragment(ctx) { insert(target, select, anchor); append(select, option0); append(select, option1); - select_value_value = /*current*/ ctx[0]; - - for (var i = 0; i < select.options.length; i += 1) { - var option = select.options[i]; - - if (option.__value === select_value_value) { - option.selected = true; - break; - } - } + select_option(select, /*current*/ ctx[0]); }, p(ctx, [dirty]) { - if (dirty & /*current*/ 1 && select_value_value !== (select_value_value = /*current*/ ctx[0])) { - for (var i = 0; i < select.options.length; i += 1) { - var option = select.options[i]; - - if (option.__value === select_value_value) { - option.selected = true; - break; - } - } + if (dirty & /*current*/ 1) { + select_option(select, /*current*/ ctx[0]); } }, i: noop, @@ -66,7 +50,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { current } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("current" in $$props) $$invalidate(0, current = $$props.current); }; diff --git a/test/js/samples/src-attribute-check/expected.js b/test/js/samples/src-attribute-check/expected.js index e03b3a6ba7ee..93638edfb43b 100644 --- a/test/js/samples/src-attribute-check/expected.js +++ b/test/js/samples/src-attribute-check/expected.js @@ -67,7 +67,7 @@ function instance($$self, $$props, $$invalidate) { let { url } = $$props; let { slug } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("url" in $$props) $$invalidate(0, url = $$props.url); if ("slug" in $$props) $$invalidate(1, slug = $$props.slug); }; diff --git a/test/js/samples/ssr-no-oncreate-etc/expected.js b/test/js/samples/ssr-no-oncreate-etc/expected.js index 803f06a8829d..b91deb3e9732 100644 --- a/test/js/samples/ssr-no-oncreate-etc/expected.js +++ b/test/js/samples/ssr-no-oncreate-etc/expected.js @@ -15,7 +15,7 @@ function swipe(node, callback) { } // TODO implement -const Component = create_ssr_component(($$result, $$props, $$bindings, $$slots) => { +const Component = create_ssr_component(($$result, $$props, $$bindings, slots) => { onMount(() => { console.log("onMount"); }); diff --git a/test/js/samples/ssr-preserve-comments/expected.js b/test/js/samples/ssr-preserve-comments/expected.js index 1dc12710c0bb..de9fa7582ed9 100644 --- a/test/js/samples/ssr-preserve-comments/expected.js +++ b/test/js/samples/ssr-preserve-comments/expected.js @@ -1,7 +1,7 @@ /* generated by Svelte vX.Y.Z */ import { create_ssr_component } from "svelte/internal"; -const Component = create_ssr_component(($$result, $$props, $$bindings, $$slots) => { +const Component = create_ssr_component(($$result, $$props, $$bindings, slots) => { return `
content
more content
`; diff --git a/test/js/samples/title/expected.js b/test/js/samples/title/expected.js index d4e7e1a58491..b10f569759d4 100644 --- a/test/js/samples/title/expected.js +++ b/test/js/samples/title/expected.js @@ -22,7 +22,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { custom } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("custom" in $$props) $$invalidate(0, custom = $$props.custom); }; diff --git a/test/js/samples/transition-local/expected.js b/test/js/samples/transition-local/expected.js index 25a03f026f75..ea3d9db3d7e6 100644 --- a/test/js/samples/transition-local/expected.js +++ b/test/js/samples/transition-local/expected.js @@ -124,7 +124,7 @@ function instance($$self, $$props, $$invalidate) { let { x } = $$props; let { y } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("x" in $$props) $$invalidate(0, x = $$props.x); if ("y" in $$props) $$invalidate(1, y = $$props.y); }; diff --git a/test/js/samples/transition-repeated-outro/expected.js b/test/js/samples/transition-repeated-outro/expected.js index 1f76a93666be..12483ab91af7 100644 --- a/test/js/samples/transition-repeated-outro/expected.js +++ b/test/js/samples/transition-repeated-outro/expected.js @@ -102,7 +102,7 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { num = 1 } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("num" in $$props) $$invalidate(0, num = $$props.num); }; diff --git a/test/js/samples/use-elements-as-anchors/expected.js b/test/js/samples/use-elements-as-anchors/expected.js index 5be8808edbcf..d07411518e91 100644 --- a/test/js/samples/use-elements-as-anchors/expected.js +++ b/test/js/samples/use-elements-as-anchors/expected.js @@ -243,7 +243,7 @@ function instance($$self, $$props, $$invalidate) { let { d } = $$props; let { e } = $$props; - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("a" in $$props) $$invalidate(0, a = $$props.a); if ("b" in $$props) $$invalidate(1, b = $$props.b); if ("c" in $$props) $$invalidate(2, c = $$props.c); diff --git a/test/js/samples/video-bindings/expected.js b/test/js/samples/video-bindings/expected.js index 9c5467e1a05d..8afa670bbb52 100644 --- a/test/js/samples/video-bindings/expected.js +++ b/test/js/samples/video-bindings/expected.js @@ -19,6 +19,7 @@ function create_fragment(ctx) { let video_updating = false; let video_animationframe; let video_resize_listener; + let mounted; let dispose; function video_timeupdate_handler() { @@ -38,15 +39,18 @@ function create_fragment(ctx) { if (/*videoHeight*/ ctx[1] === void 0 || /*videoWidth*/ ctx[2] === void 0) add_render_callback(() => /*video_resize_handler*/ ctx[5].call(video)); add_render_callback(() => /*video_elementresize_handler*/ ctx[6].call(video)); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, video, anchor); video_resize_listener = add_resize_listener(video, /*video_elementresize_handler*/ ctx[6].bind(video)); - if (remount) run_all(dispose); - dispose = [ - listen(video, "timeupdate", video_timeupdate_handler), - listen(video, "resize", /*video_resize_handler*/ ctx[5]) - ]; + if (!mounted) { + dispose = [ + listen(video, "timeupdate", video_timeupdate_handler), + listen(video, "resize", /*video_resize_handler*/ ctx[5]) + ]; + + mounted = true; + } }, p(ctx, [dirty]) { if (!video_updating && dirty & /*currentTime*/ 1 && !isNaN(/*currentTime*/ ctx[0])) { @@ -60,6 +64,7 @@ function create_fragment(ctx) { d(detaching) { if (detaching) detach(video); video_resize_listener(); + mounted = false; run_all(dispose); } }; @@ -88,7 +93,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(3, offsetWidth); } - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("currentTime" in $$props) $$invalidate(0, currentTime = $$props.currentTime); if ("videoHeight" in $$props) $$invalidate(1, videoHeight = $$props.videoHeight); if ("videoWidth" in $$props) $$invalidate(2, videoWidth = $$props.videoWidth); diff --git a/test/js/samples/window-binding-online/expected.js b/test/js/samples/window-binding-online/expected.js index fa955e4fd59b..887195bce1b3 100644 --- a/test/js/samples/window-binding-online/expected.js +++ b/test/js/samples/window-binding-online/expected.js @@ -10,23 +10,27 @@ import { } from "svelte/internal"; function create_fragment(ctx) { + let mounted; let dispose; add_render_callback(/*onlinestatuschanged*/ ctx[1]); return { c: noop, - m(target, anchor, remount) { - if (remount) run_all(dispose); - - dispose = [ - listen(window, "online", /*onlinestatuschanged*/ ctx[1]), - listen(window, "offline", /*onlinestatuschanged*/ ctx[1]) - ]; + m(target, anchor) { + if (!mounted) { + dispose = [ + listen(window, "online", /*onlinestatuschanged*/ ctx[1]), + listen(window, "offline", /*onlinestatuschanged*/ ctx[1]) + ]; + + mounted = true; + } }, p: noop, i: noop, o: noop, d(detaching) { + mounted = false; run_all(dispose); } }; diff --git a/test/js/samples/window-binding-scroll/expected.js b/test/js/samples/window-binding-scroll/expected.js index 30723cc142fc..09a4d3737d29 100644 --- a/test/js/samples/window-binding-scroll/expected.js +++ b/test/js/samples/window-binding-scroll/expected.js @@ -25,6 +25,7 @@ function create_fragment(ctx) { let p; let t0; let t1; + let mounted; let dispose; add_render_callback(/*onwindowscroll*/ ctx[1]); @@ -34,18 +35,21 @@ function create_fragment(ctx) { t0 = text("scrolled to "); t1 = text(/*y*/ ctx[0]); }, - m(target, anchor, remount) { + m(target, anchor) { insert(target, p, anchor); append(p, t0); append(p, t1); - if (remount) dispose(); - dispose = listen(window, "scroll", () => { - scrolling = true; - clearTimeout(scrolling_timeout); - scrolling_timeout = setTimeout(clear_scrolling, 100); - /*onwindowscroll*/ ctx[1](); - }); + if (!mounted) { + dispose = listen(window, "scroll", () => { + scrolling = true; + clearTimeout(scrolling_timeout); + scrolling_timeout = setTimeout(clear_scrolling, 100); + /*onwindowscroll*/ ctx[1](); + }); + + mounted = true; + } }, p(ctx, [dirty]) { if (dirty & /*y*/ 1 && !scrolling) { @@ -61,6 +65,7 @@ function create_fragment(ctx) { o: noop, d(detaching) { if (detaching) detach(p); + mounted = false; dispose(); } }; @@ -73,7 +78,7 @@ function instance($$self, $$props, $$invalidate) { $$invalidate(0, y = window.pageYOffset) } - $$self.$set = $$props => { + $$self.$$set = $$props => { if ("y" in $$props) $$invalidate(0, y = $$props.y); }; diff --git a/test/parser/index.js b/test/parser/index.js index 27c5ec1563ce..2c8d516a7d84 100644 --- a/test/parser/index.js +++ b/test/parser/index.js @@ -20,7 +20,7 @@ describe('parse', () => { (skip ? it.skip : solo ? it.only : it)(dir, () => { const options = tryToLoadJson(`${__dirname}/samples/${dir}/options.json`) || {}; - const input = fs.readFileSync(`${__dirname}/samples/${dir}/input.svelte`, 'utf-8').replace(/\s+$/, ''); + const input = fs.readFileSync(`${__dirname}/samples/${dir}/input.svelte`, 'utf-8').replace(/\s+$/, '').replace(/\r/g, ""); const expectedOutput = tryToLoadJson(`${__dirname}/samples/${dir}/output.json`); const expectedError = tryToLoadJson(`${__dirname}/samples/${dir}/error.json`); @@ -38,13 +38,9 @@ describe('parse', () => { } catch (err) { if (err.name !== 'ParseError') throw err; if (!expectedError) throw err; - + const { code, message, pos, start } = err try { - assert.equal(err.code, expectedError.code); - assert.equal(err.message, expectedError.message); - assert.deepEqual(err.start, expectedError.start); - assert.equal(err.pos, expectedError.pos); - assert.equal(err.toString().split('\n')[0], `${expectedError.message} (${expectedError.start.line}:${expectedError.start.column})`); + assert.deepEqual({ code, message, pos, start }, expectedError); } catch (err2) { const e = err2.code === 'MODULE_NOT_FOUND' ? err : err2; throw e; diff --git a/test/parser/samples/action-with-call/output.json b/test/parser/samples/action-with-call/output.json index ccb4011c678b..66c569dc5a40 100644 --- a/test/parser/samples/action-with-call/output.json +++ b/test/parser/samples/action-with-call/output.json @@ -64,7 +64,8 @@ "value": "tooltip msg", "raw": "'tooltip msg'" } - ] + ], + "optional": false } } ], diff --git a/test/parser/samples/animation/output.json b/test/parser/samples/animation/output.json index 1958ba2817bd..11195009c8ac 100644 --- a/test/parser/samples/animation/output.json +++ b/test/parser/samples/animation/output.json @@ -52,10 +52,10 @@ } ], "context": { - "start": 17, - "end": 22, "type": "Identifier", - "name": "thing" + "name": "thing", + "start": 17, + "end": 22 }, "key": { "type": "Identifier", diff --git a/test/parser/samples/await-catch/output.json b/test/parser/samples/await-catch/output.json index c5435830184b..91862b53660b 100644 --- a/test/parser/samples/await-catch/output.json +++ b/test/parser/samples/await-catch/output.json @@ -26,10 +26,10 @@ }, "value": null, "error": { - "start": 47, - "end": 55, "type": "Identifier", - "name": "theError" + "name": "theError", + "start": 47, + "end": 55 }, "pending": { "start": 19, @@ -152,7 +152,8 @@ }, "name": "message" }, - "computed": false + "computed": false, + "optional": false } } ] diff --git a/test/parser/samples/await-then-catch/output.json b/test/parser/samples/await-then-catch/output.json index 8e4b7a4c32e5..e377d3fa3e8d 100644 --- a/test/parser/samples/await-then-catch/output.json +++ b/test/parser/samples/await-then-catch/output.json @@ -25,16 +25,16 @@ "name": "thePromise" }, "value": { - "start": 46, - "end": 54, "type": "Identifier", - "name": "theValue" + "name": "theValue", + "start": 46, + "end": 54 }, "error": { - "start": 96, - "end": 104, "type": "Identifier", - "name": "theError" + "name": "theError", + "start": 96, + "end": 104 }, "pending": { "start": 19, @@ -209,7 +209,8 @@ }, "name": "message" }, - "computed": false + "computed": false, + "optional": false } } ] diff --git a/test/parser/samples/dynamic-import/output.json b/test/parser/samples/dynamic-import/output.json index 1e41252afab1..ed3d58782dc1 100644 --- a/test/parser/samples/dynamic-import/output.json +++ b/test/parser/samples/dynamic-import/output.json @@ -275,7 +275,8 @@ }, "name": "then" }, - "computed": false + "computed": false, + "optional": false }, "arguments": [ { @@ -403,7 +404,8 @@ }, "name": "log" }, - "computed": false + "computed": false, + "optional": false }, "arguments": [ { @@ -452,21 +454,25 @@ }, "name": "default" }, - "computed": false + "computed": false, + "optional": false } - ] + ], + "optional": false } } ] } } - ] + ], + "optional": false } } ] } } - ] + ], + "optional": false } } ], diff --git a/test/parser/samples/each-block-else/output.json b/test/parser/samples/each-block-else/output.json index 2720ce52929d..622789d17784 100644 --- a/test/parser/samples/each-block-else/output.json +++ b/test/parser/samples/each-block-else/output.json @@ -57,10 +57,10 @@ } ], "context": { - "start": 18, - "end": 24, "type": "Identifier", - "name": "animal" + "name": "animal", + "start": 18, + "end": 24 }, "else": { "start": 50, diff --git a/test/parser/samples/each-block-indexed/output.json b/test/parser/samples/each-block-indexed/output.json index 50f2000a36c5..01b97ffcb47d 100644 --- a/test/parser/samples/each-block-indexed/output.json +++ b/test/parser/samples/each-block-indexed/output.json @@ -85,10 +85,10 @@ } ], "context": { - "start": 18, - "end": 24, "type": "Identifier", - "name": "animal" + "name": "animal", + "start": 18, + "end": 24 }, "index": "i" } diff --git a/test/parser/samples/each-block-keyed/output.json b/test/parser/samples/each-block-keyed/output.json index 7dc86814538a..6eaf19a82d86 100644 --- a/test/parser/samples/each-block-keyed/output.json +++ b/test/parser/samples/each-block-keyed/output.json @@ -57,10 +57,10 @@ } ], "context": { - "start": 16, - "end": 20, "type": "Identifier", - "name": "todo" + "name": "todo", + "start": 16, + "end": 20 }, "key": { "type": "MemberExpression", @@ -108,7 +108,8 @@ }, "name": "id" }, - "computed": false + "computed": false, + "optional": false } } ] diff --git a/test/parser/samples/each-block/output.json b/test/parser/samples/each-block/output.json index 6594fb50a6ec..82d4455d192e 100644 --- a/test/parser/samples/each-block/output.json +++ b/test/parser/samples/each-block/output.json @@ -57,10 +57,10 @@ } ], "context": { - "start": 18, - "end": 24, "type": "Identifier", - "name": "animal" + "name": "animal", + "start": 18, + "end": 24 } } ] diff --git a/test/parser/samples/error-css-global-without-selector/error.json b/test/parser/samples/error-css-global-without-selector/error.json new file mode 100644 index 000000000000..f4237c65d390 --- /dev/null +++ b/test/parser/samples/error-css-global-without-selector/error.json @@ -0,0 +1,10 @@ +{ + "code": "css-syntax-error", + "message": ":global() must contain a selector", + "start": { + "line": 2, + "column": 1, + "character": 9 + }, + "pos": 9 +} diff --git a/test/parser/samples/error-css-global-without-selector/input.svelte b/test/parser/samples/error-css-global-without-selector/input.svelte new file mode 100644 index 000000000000..a626136cfc3b --- /dev/null +++ b/test/parser/samples/error-css-global-without-selector/input.svelte @@ -0,0 +1,3 @@ + diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose-2/error.json b/test/parser/samples/error-unmatched-closing-tag-autoclose-2/error.json new file mode 100644 index 000000000000..d24296bd96d8 --- /dev/null +++ b/test/parser/samples/error-unmatched-closing-tag-autoclose-2/error.json @@ -0,0 +1,10 @@ +{ + "code": "invalid-closing-tag", + "message": "

attempted to close an element that was not open", + "pos": 38, + "start": { + "character": 38, + "column": 0, + "line": 5 + } +} diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose-2/input.svelte b/test/parser/samples/error-unmatched-closing-tag-autoclose-2/input.svelte new file mode 100644 index 000000000000..5182577921ef --- /dev/null +++ b/test/parser/samples/error-unmatched-closing-tag-autoclose-2/input.svelte @@ -0,0 +1,5 @@ +
+

+

pre tag
+
+

\ No newline at end of file diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json b/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json new file mode 100644 index 000000000000..e6532d747e37 --- /dev/null +++ b/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json @@ -0,0 +1,10 @@ +{ + "code": "invalid-closing-tag", + "message": "

attempted to close

that was already automatically closed by

",
+	"pos": 24,
+	"start": {
+		"character": 24,
+		"column": 0,
+		"line": 3
+	}
+}
diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose/input.svelte b/test/parser/samples/error-unmatched-closing-tag-autoclose/input.svelte
new file mode 100644
index 000000000000..0bfd6097362a
--- /dev/null
+++ b/test/parser/samples/error-unmatched-closing-tag-autoclose/input.svelte
@@ -0,0 +1,3 @@
+

+

pre tag
+

\ No newline at end of file diff --git a/test/parser/samples/no-error-if-before-closing/output.json b/test/parser/samples/no-error-if-before-closing/output.json index 708128a42eb9..f22586b26722 100644 --- a/test/parser/samples/no-error-if-before-closing/output.json +++ b/test/parser/samples/no-error-if-before-closing/output.json @@ -116,10 +116,10 @@ "raw": "true" }, "value": { - "start": 97, - "end": 98, "type": "Identifier", - "name": "f" + "name": "f", + "start": 97, + "end": 98 }, "error": null, "pending": { @@ -204,10 +204,10 @@ "raw": "true" }, "value": { - "start": 137, - "end": 138, "type": "Identifier", - "name": "f" + "name": "f", + "start": 137, + "end": 138 }, "error": null, "pending": { diff --git a/test/parser/samples/unusual-identifier/output.json b/test/parser/samples/unusual-identifier/output.json index 76cc82cfd6de..3d209d35fe39 100644 --- a/test/parser/samples/unusual-identifier/output.json +++ b/test/parser/samples/unusual-identifier/output.json @@ -57,10 +57,10 @@ } ], "context": { - "start": 17, - "end": 19, "type": "Identifier", - "name": "𐊧" + "name": "𐊧", + "start": 17, + "end": 19 } } ] diff --git a/test/preprocess/samples/comments/_config.js b/test/preprocess/samples/comments/_config.js index 4416d121d0d9..fdec37756742 100644 --- a/test/preprocess/samples/comments/_config.js +++ b/test/preprocess/samples/comments/_config.js @@ -2,7 +2,7 @@ export default { preprocess: [ { script: ({ content }) => ({ code: content.replace(/one/g, 'two') }), - style: ({ content }) => ({ code: content.replace(/one/g, 'three') }), - }, - ], + style: ({ content }) => ({ code: content.replace(/one/g, 'three') }) + } + ] }; diff --git a/test/preprocess/samples/script-self-closing/_config.js b/test/preprocess/samples/script-self-closing/_config.js new file mode 100644 index 000000000000..4baab9730e12 --- /dev/null +++ b/test/preprocess/samples/script-self-closing/_config.js @@ -0,0 +1,12 @@ +import * as assert from "assert"; + +export default { + preprocess: { + script: ({ content, attributes }) => { + assert.equal(content, ""); + return { + code: `console.log("${attributes["the-answer"]}");` + }; + } + } +}; diff --git a/test/preprocess/samples/script-self-closing/input.svelte b/test/preprocess/samples/script-self-closing/input.svelte new file mode 100644 index 000000000000..c5816cb3baee --- /dev/null +++ b/test/preprocess/samples/script-self-closing/input.svelte @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/preprocess/samples/style-self-closing/_config.js b/test/preprocess/samples/style-self-closing/_config.js new file mode 100644 index 000000000000..0a05cd3d641e --- /dev/null +++ b/test/preprocess/samples/style-self-closing/_config.js @@ -0,0 +1,12 @@ +import * as assert from "assert"; + +export default { + preprocess: { + style: ({ content, attributes: { color } }) => { + assert.equal(content, ""); + return { + code: `div { color: ${color}; }` + }; + } + } +}; diff --git a/test/preprocess/samples/style-self-closing/input.svelte b/test/preprocess/samples/style-self-closing/input.svelte new file mode 100644 index 000000000000..07176c87e5b2 --- /dev/null +++ b/test/preprocess/samples/style-self-closing/input.svelte @@ -0,0 +1,3 @@ +
$brand
+ + \ No newline at end of file diff --git a/test/runtime/index.js b/test/runtime/index.js index f070eb818551..65157196c9d7 100644 --- a/test/runtime/index.js +++ b/test/runtime/index.js @@ -39,7 +39,7 @@ describe("runtime", () => { filename }, compileOptions); - const { js: { code } } = compile(fs.readFileSync(filename, "utf-8"), options); + const { js: { code } } = compile(fs.readFileSync(filename, "utf-8").replace(/\r/g, ""), options); return module._compile(code, filename); }; @@ -103,7 +103,7 @@ describe("runtime", () => { try { const { js } = compile( - fs.readFileSync(`${cwd}/${file}`, 'utf-8'), + fs.readFileSync(`${cwd}/${file}`, 'utf-8').replace(/\r/g, ""), { ...compileOptions, filename: file diff --git a/test/runtime/samples/$$rest-without-props/_config.js b/test/runtime/samples/$$rest-without-props/_config.js index 017f9df5611a..1fb8e85a6a27 100644 --- a/test/runtime/samples/$$rest-without-props/_config.js +++ b/test/runtime/samples/$$rest-without-props/_config.js @@ -11,7 +11,7 @@ export default {
`, - async test({ assert, target, window, }) { + async test({ assert, target, window }) { const [btn1, btn2, btn3, btn4] = target.querySelectorAll('button'); const clickEvent = new window.MouseEvent('click'); diff --git a/test/runtime/samples/$$rest/_config.js b/test/runtime/samples/$$rest/_config.js index 255927f354b3..f00c26d71235 100644 --- a/test/runtime/samples/$$rest/_config.js +++ b/test/runtime/samples/$$rest/_config.js @@ -13,7 +13,7 @@ export default { `, - async test({ assert, target, window, }) { + async test({ assert, target, window }) { const [btn1, btn2, btn3, btn4] = target.querySelectorAll('button'); const clickEvent = new window.MouseEvent('click'); diff --git a/test/runtime/samples/$$slot/A.svelte b/test/runtime/samples/$$slot/A.svelte new file mode 100644 index 000000000000..ffa166166ca9 --- /dev/null +++ b/test/runtime/samples/$$slot/A.svelte @@ -0,0 +1,31 @@ + + + + + +$$slots: {toString($$slots)} + +{#if $$slots.b} +
+ +
+{:else} + Slot b is not available +{/if} \ No newline at end of file diff --git a/test/runtime/samples/$$slot/_config.js b/test/runtime/samples/$$slot/_config.js new file mode 100644 index 000000000000..13b2137cdbc5 --- /dev/null +++ b/test/runtime/samples/$$slot/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + byeworld + hello world + $$slots: {"a":true,"default":true} + Slot b is not available + + bye world + hello world + $$slots: {"a":true,"b":true,"default":true} +
hello world
+ `, + + async test({ assert, target, component }) { + assert.equal(component.getA(), ''); + assert.equal(component.getB(), 'foo'); + } +}; diff --git a/test/runtime/samples/$$slot/main.svelte b/test/runtime/samples/$$slot/main.svelte new file mode 100644 index 000000000000..8b7efae5735a --- /dev/null +++ b/test/runtime/samples/$$slot/main.svelte @@ -0,0 +1,23 @@ + + +
+ hello world + bye + world + + + + hello world + hello world + bye world + diff --git a/test/runtime/samples/action-custom-event-handler-this/_config.js b/test/runtime/samples/action-custom-event-handler-this/_config.js index 88a30232abe5..754f813c7fd5 100644 --- a/test/runtime/samples/action-custom-event-handler-this/_config.js +++ b/test/runtime/samples/action-custom-event-handler-this/_config.js @@ -18,5 +18,5 @@ export default { input.dispatchEvent(event); assert.ok(blurred); - }, + } }; diff --git a/test/runtime/samples/action-ternary-template/_config.js b/test/runtime/samples/action-ternary-template/_config.js index adf23a9f683b..ecb18dceec0e 100644 --- a/test/runtime/samples/action-ternary-template/_config.js +++ b/test/runtime/samples/action-ternary-template/_config.js @@ -1,7 +1,7 @@ export default { props: { target: 'World!', - display: true, + display: true }, html: ` @@ -16,5 +16,5 @@ export default { assert.htmlEqual(target.innerHTML, `

Hello World!

`); - }, + } }; diff --git a/test/runtime/samples/action-this/_config.js b/test/runtime/samples/action-this/_config.js index de7f834cdce5..c59ff3b6347c 100644 --- a/test/runtime/samples/action-this/_config.js +++ b/test/runtime/samples/action-this/_config.js @@ -7,5 +7,5 @@ export default { await button.dispatchEvent(click); await Promise.resolve(); assert.htmlEqual(target.innerHTML, ``); - }, + } }; diff --git a/test/runtime/samples/apply-directives-in-order-2/_config.js b/test/runtime/samples/apply-directives-in-order-2/_config.js index a74ce41cb66f..caff97a5b9d5 100644 --- a/test/runtime/samples/apply-directives-in-order-2/_config.js +++ b/test/runtime/samples/apply-directives-in-order-2/_config.js @@ -1,7 +1,7 @@ const value = []; export default { props: { - value, + value }, async test({ assert, component, target, window }) { @@ -32,7 +32,7 @@ export default { '15', '16', '17', - '18', + '18' ]); - }, + } }; diff --git a/test/runtime/samples/apply-directives-in-order/_config.js b/test/runtime/samples/apply-directives-in-order/_config.js index e5e8980ed115..7c8f87ef857f 100644 --- a/test/runtime/samples/apply-directives-in-order/_config.js +++ b/test/runtime/samples/apply-directives-in-order/_config.js @@ -33,5 +33,5 @@ export default {

HE

`); - }, + } }; diff --git a/test/runtime/samples/attribute-boolean-false/_config.js b/test/runtime/samples/attribute-boolean-false/_config.js index 14fdeb9fdc8d..e47c5e7df1b5 100644 --- a/test/runtime/samples/attribute-boolean-false/_config.js +++ b/test/runtime/samples/attribute-boolean-false/_config.js @@ -3,5 +3,5 @@ export default { test({ assert, component, target }) { const textarea = target.querySelector('textarea'); assert.ok(textarea.readOnly === false); - }, + } }; diff --git a/test/runtime/samples/attribute-boolean-true/_config.js b/test/runtime/samples/attribute-boolean-true/_config.js index 0e402ed1e334..1f77e33027de 100644 --- a/test/runtime/samples/attribute-boolean-true/_config.js +++ b/test/runtime/samples/attribute-boolean-true/_config.js @@ -3,5 +3,5 @@ export default { test({ assert, component, target }) { const textarea = target.querySelector('textarea'); assert.ok(textarea.readOnly); - }, + } }; diff --git a/test/runtime/samples/attribute-dataset-without-value/_config.js b/test/runtime/samples/attribute-dataset-without-value/_config.js index 934f44eb06fc..21e60b92aa87 100644 --- a/test/runtime/samples/attribute-dataset-without-value/_config.js +++ b/test/runtime/samples/attribute-dataset-without-value/_config.js @@ -1,3 +1,3 @@ export default { - html: '
', + html: '
' }; diff --git a/test/runtime/samples/attribute-dynamic-no-dependencies/_config.js b/test/runtime/samples/attribute-dynamic-no-dependencies/_config.js index acf3c64bdd90..f1088830af46 100644 --- a/test/runtime/samples/attribute-dynamic-no-dependencies/_config.js +++ b/test/runtime/samples/attribute-dynamic-no-dependencies/_config.js @@ -1,5 +1,5 @@ export default { html: `
bar
- `, + ` }; diff --git a/test/runtime/samples/attribute-false/_config.js b/test/runtime/samples/attribute-false/_config.js index 9fd08a2a4836..632d4ac1c24e 100644 --- a/test/runtime/samples/attribute-false/_config.js +++ b/test/runtime/samples/attribute-false/_config.js @@ -1,3 +1,3 @@ export default { - html: `
`, + html: `
` }; diff --git a/test/runtime/samples/attribute-null-classnames-no-style/_config.js b/test/runtime/samples/attribute-null-classnames-no-style/_config.js index 917cf565c039..e90d81a60f1b 100644 --- a/test/runtime/samples/attribute-null-classnames-no-style/_config.js +++ b/test/runtime/samples/attribute-null-classnames-no-style/_config.js @@ -1,7 +1,7 @@ export default { props: { testName1: "test1", - testName2: "test2", + testName2: "test2" }, html: `
`, diff --git a/test/runtime/samples/attribute-null-classnames-with-style/_config.js b/test/runtime/samples/attribute-null-classnames-with-style/_config.js index 5762f628fb33..20e6d4c7be66 100644 --- a/test/runtime/samples/attribute-null-classnames-with-style/_config.js +++ b/test/runtime/samples/attribute-null-classnames-with-style/_config.js @@ -1,7 +1,7 @@ export default { props: { testName1: "test1", - testName2: "test2", + testName2: "test2" }, html: `
`, diff --git a/test/runtime/samples/attribute-null-func-classnames-no-style/_config.js b/test/runtime/samples/attribute-null-func-classnames-no-style/_config.js index 917cf565c039..e90d81a60f1b 100644 --- a/test/runtime/samples/attribute-null-func-classnames-no-style/_config.js +++ b/test/runtime/samples/attribute-null-func-classnames-no-style/_config.js @@ -1,7 +1,7 @@ export default { props: { testName1: "test1", - testName2: "test2", + testName2: "test2" }, html: `
`, diff --git a/test/runtime/samples/attribute-null-func-classnames-with-style/_config.js b/test/runtime/samples/attribute-null-func-classnames-with-style/_config.js index 5762f628fb33..20e6d4c7be66 100644 --- a/test/runtime/samples/attribute-null-func-classnames-with-style/_config.js +++ b/test/runtime/samples/attribute-null-func-classnames-with-style/_config.js @@ -1,7 +1,7 @@ export default { props: { testName1: "test1", - testName2: "test2", + testName2: "test2" }, html: `
`, diff --git a/test/runtime/samples/attribute-null/_config.js b/test/runtime/samples/attribute-null/_config.js index ae2f0a8af6f0..36955050a0ee 100644 --- a/test/runtime/samples/attribute-null/_config.js +++ b/test/runtime/samples/attribute-null/_config.js @@ -1,3 +1,3 @@ export default { - html: `
`, + html: `
` }; diff --git a/test/runtime/samples/attribute-prefer-expression/_config.js b/test/runtime/samples/attribute-prefer-expression/_config.js index 29fcbc7f131d..2388ff35df6a 100644 --- a/test/runtime/samples/attribute-prefer-expression/_config.js +++ b/test/runtime/samples/attribute-prefer-expression/_config.js @@ -2,7 +2,7 @@ export default { skip_if_ssr: true, props: { - foo: false, + foo: false }, test({ assert, component, target }) { @@ -15,5 +15,5 @@ export default { assert.ok(!inputs[0].checked); assert.ok(inputs[1].checked); - }, + } }; diff --git a/test/runtime/samples/attribute-undefined/_config.js b/test/runtime/samples/attribute-undefined/_config.js index ae2f0a8af6f0..36955050a0ee 100644 --- a/test/runtime/samples/attribute-undefined/_config.js +++ b/test/runtime/samples/attribute-undefined/_config.js @@ -1,3 +1,3 @@ export default { - html: `
`, + html: `
` }; diff --git a/test/runtime/samples/await-with-update-2/Component.svelte b/test/runtime/samples/await-with-update-2/Component.svelte new file mode 100644 index 000000000000..1301db3f9908 --- /dev/null +++ b/test/runtime/samples/await-with-update-2/Component.svelte @@ -0,0 +1,7 @@ + + +
count: {count}
+
value: {value}
\ No newline at end of file diff --git a/test/runtime/samples/await-with-update-2/_config.js b/test/runtime/samples/await-with-update-2/_config.js new file mode 100644 index 000000000000..613f2b32550c --- /dev/null +++ b/test/runtime/samples/await-with-update-2/_config.js @@ -0,0 +1,64 @@ +export default { + props: { + thePromise: new Promise((_) => {}), + count: 0 + }, + + html: ` +

loading...

+ `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve({ value: "success", Component: component.Component })); + + assert.htmlEqual( + target.innerHTML, + ` +
Resolved: +
count: 0
+
value: success
+
+ ` + ); + + component.count = 5; + + assert.htmlEqual( + target.innerHTML, + ` +
Resolved: +
count: 5
+
value: success
+
+ ` + ); + + try { + await (component.thePromise = Promise.reject({ value: "failure", Component: component.Component })); + } catch (error) { + // ignore + } + + assert.htmlEqual( + target.innerHTML, + ` +
Rejected: +
count: 5
+
value: failure
+
+ ` + ); + + component.count = 10; + + assert.htmlEqual( + target.innerHTML, + ` +
Rejected: +
count: 10
+
value: failure
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/await-with-update-2/main.svelte b/test/runtime/samples/await-with-update-2/main.svelte new file mode 100644 index 000000000000..b29c875f920e --- /dev/null +++ b/test/runtime/samples/await-with-update-2/main.svelte @@ -0,0 +1,16 @@ + + +
+ {#await thePromise} +

loading...

+ {:then { value: theValue, Component }} + Resolved: + {:catch { value: theError, Component } } + Rejected: + {/await} +
\ No newline at end of file diff --git a/test/runtime/samples/await-with-update/Component.svelte b/test/runtime/samples/await-with-update/Component.svelte new file mode 100644 index 000000000000..5f13c80e65f1 --- /dev/null +++ b/test/runtime/samples/await-with-update/Component.svelte @@ -0,0 +1,5 @@ + + +
count: {count}
\ No newline at end of file diff --git a/test/runtime/samples/await-with-update/_config.js b/test/runtime/samples/await-with-update/_config.js new file mode 100644 index 000000000000..08bf12b89ee5 --- /dev/null +++ b/test/runtime/samples/await-with-update/_config.js @@ -0,0 +1,60 @@ +export default { + props: { + thePromise: new Promise((_) => {}), + count: 0 + }, + + html: ` +

loading...

+ `, + + async test({ assert, component, target }) { + await (component.thePromise = Promise.resolve(component.Component)); + + assert.htmlEqual( + target.innerHTML, + ` +
Resolved: +
count: 0
+
+ ` + ); + + component.count = 5; + + assert.htmlEqual( + target.innerHTML, + ` +
Resolved: +
count: 5
+
+ ` + ); + + try { + await (component.thePromise = Promise.reject(component.Component)); + } catch (error) { + // ignore + } + + assert.htmlEqual( + target.innerHTML, + ` +
Rejected: +
count: 5
+
+ ` + ); + + component.count = 10; + + assert.htmlEqual( + target.innerHTML, + ` +
Rejected: +
count: 10
+
+ ` + ); + } +}; diff --git a/test/runtime/samples/await-with-update/main.svelte b/test/runtime/samples/await-with-update/main.svelte new file mode 100644 index 000000000000..51c5b76a212e --- /dev/null +++ b/test/runtime/samples/await-with-update/main.svelte @@ -0,0 +1,16 @@ + + +
+ {#await thePromise} +

loading...

+ {:then theValue} + Resolved: + {:catch theError} + Rejected: + {/await} +
\ No newline at end of file diff --git a/test/runtime/samples/await-without-catch/_config.js b/test/runtime/samples/await-without-catch/_config.js new file mode 100644 index 000000000000..2030ed794994 --- /dev/null +++ b/test/runtime/samples/await-without-catch/_config.js @@ -0,0 +1,44 @@ +let fulfil; + +let promise = new Promise(f => { + fulfil = f; +}); + +export default { + props: { + promise + }, + + html: ` +

loading...

+ `, + + test({ assert, component, target }) { + fulfil(42); + + return promise + .then(() => { + assert.htmlEqual(target.innerHTML, ` +

loaded

+ `); + + let reject; + + promise = new Promise((f, r) => { + reject = r; + }); + + component.promise = promise; + + assert.htmlEqual(target.innerHTML, ` +

loading...

+ `); + + reject(new Error('this error should be thrown')); + return promise; + }) + .catch((err) => { + assert.equal(err.message, 'this error should be thrown'); + }); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/await-without-catch/main.svelte b/test/runtime/samples/await-without-catch/main.svelte new file mode 100644 index 000000000000..f528a8bf6996 --- /dev/null +++ b/test/runtime/samples/await-without-catch/main.svelte @@ -0,0 +1,9 @@ + + +{#await promise} +

loading...

+{:then value} +

loaded

+{/await} \ No newline at end of file diff --git a/test/runtime/samples/binding-contenteditable-html-initial/_config.js b/test/runtime/samples/binding-contenteditable-html-initial/_config.js index 9eac2c9b17ac..4c30a3231ab2 100644 --- a/test/runtime/samples/binding-contenteditable-html-initial/_config.js +++ b/test/runtime/samples/binding-contenteditable-html-initial/_config.js @@ -36,5 +36,5 @@ export default { goodbye

hello goodbye

`); - }, + } }; diff --git a/test/runtime/samples/binding-contenteditable-html/_config.js b/test/runtime/samples/binding-contenteditable-html/_config.js index ceb6a75c7098..639572faea07 100644 --- a/test/runtime/samples/binding-contenteditable-html/_config.js +++ b/test/runtime/samples/binding-contenteditable-html/_config.js @@ -1,6 +1,6 @@ export default { props: { - name: 'world', + name: 'world' }, html: ` @@ -34,5 +34,5 @@ export default { goodbye

hello goodbye

`); - }, + } }; diff --git a/test/runtime/samples/binding-contenteditable-text-initial/_config.js b/test/runtime/samples/binding-contenteditable-text-initial/_config.js index 4899f30f1243..d5f331bb7a90 100644 --- a/test/runtime/samples/binding-contenteditable-text-initial/_config.js +++ b/test/runtime/samples/binding-contenteditable-text-initial/_config.js @@ -30,5 +30,5 @@ export default { goodbye

hello goodbye

`); - }, + } }; diff --git a/test/runtime/samples/binding-contenteditable-text/_config.js b/test/runtime/samples/binding-contenteditable-text/_config.js index 9f8645724d6d..89f39682587d 100644 --- a/test/runtime/samples/binding-contenteditable-text/_config.js +++ b/test/runtime/samples/binding-contenteditable-text/_config.js @@ -1,6 +1,6 @@ export default { props: { - name: 'world', + name: 'world' }, html: ` @@ -28,5 +28,5 @@ export default { goodbye

hello goodbye

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js b/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js index 2e3a1c296fb0..9d099feb0a72 100644 --- a/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js +++ b/test/runtime/samples/binding-input-checkbox-indeterminate/_config.js @@ -2,7 +2,7 @@ export default { skip_if_ssr: true, props: { - indeterminate: true, + indeterminate: true }, html: ` @@ -38,5 +38,5 @@ export default {

checked? true

indeterminate? true

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js b/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js index b502ed40af26..9e6f915dd0e1 100644 --- a/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js +++ b/test/runtime/samples/binding-input-checkbox-with-event-in-each/_config.js @@ -3,13 +3,13 @@ export default { cats: [ { name: "cat 0", - checked: false, + checked: false }, { name: "cat 1", - checked: false, - }, - ], + checked: false + } + ] }, html: ` @@ -22,7 +22,7 @@ export default { const newCats = cats.slice(); newCats.push({ name: "cat " + cats.length, - checked: false, + checked: false }); component.cats = newCats; diff --git a/test/runtime/samples/binding-input-group-duplicate-value/_config.js b/test/runtime/samples/binding-input-group-duplicate-value/_config.js new file mode 100644 index 000000000000..7f50ad6dce65 --- /dev/null +++ b/test/runtime/samples/binding-input-group-duplicate-value/_config.js @@ -0,0 +1,81 @@ +export default { + html: ` +

Checked:

+ +
+ + a
+ b
+ c
+ d
+ +
+ + a
+ b
+ c
+ d
+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll("input"); + const p = target.querySelector("p"); + + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, false); + + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + + const event = new window.Event("change"); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual(p.innerHTML, `Checked: a`); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, false); + + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, false); + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + + inputs[3].checked = true; + await inputs[3].dispatchEvent(event); + + assert.htmlEqual(p.innerHTML, `Checked: a,d`); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, true); + + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, false); + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, true); + + inputs[4].checked = false; + await inputs[4].dispatchEvent(event); + + assert.htmlEqual(p.innerHTML, `Checked: d`); + + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, true); + + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, true); + } +}; diff --git a/test/runtime/samples/binding-input-group-duplicate-value/main.svelte b/test/runtime/samples/binding-input-group-duplicate-value/main.svelte new file mode 100644 index 000000000000..153e559d239a --- /dev/null +++ b/test/runtime/samples/binding-input-group-duplicate-value/main.svelte @@ -0,0 +1,19 @@ + + +

Checked: {foo}

+ +
+ +a
+b
+c
+d
+ +
+ +a
+b
+c
+d
\ No newline at end of file diff --git a/test/runtime/samples/binding-input-group-each-1/_config.js b/test/runtime/samples/binding-input-group-each-1/_config.js new file mode 100644 index 000000000000..92010296dc8a --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-1/_config.js @@ -0,0 +1,275 @@ +const values = [ + { name: 'Alpha' }, + { name: 'Beta' }, + { name: 'Gamma' } +]; + +const selected_array = [ + [values[1]], + [], + [values[2]] +]; + +export default { + props: { + values, + selected_array + }, + + html: ` +
+ + + + + + +

Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, true); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ `); + inputs[3].checked = true; + await inputs[3].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

Alpha

+
+
+ + + + + + +

Gamma

+
+ `); + + inputs[8].checked = false; + await inputs[8].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

Alpha

+
+
+ + + + + + +

+
+ `); + + component.selected_array = [[values[1], values[2]], [values[2]]]; + + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, true); + + assert.htmlEqual(target.innerHTML, ` +
+ + + + + + +

Beta, Gamma

+
+
+ + + + + + +

Gamma

+
+ `); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-1/main.svelte b/test/runtime/samples/binding-input-group-each-1/main.svelte new file mode 100644 index 000000000000..5ed255c83a87 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-1/main.svelte @@ -0,0 +1,15 @@ + + +{#each selected_array as selected} +
+ {#each values as value} + + {/each} +

{selected.map(v => v.name).join(', ')}

+
+{/each} diff --git a/test/runtime/samples/binding-input-group-each-2/_config.js b/test/runtime/samples/binding-input-group-each-2/_config.js new file mode 100644 index 000000000000..78d692d9795c --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-2/_config.js @@ -0,0 +1,59 @@ +export default { + html: ` + + + + +

1, 2, 3

`, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + + const event = new window.Event('change'); + + inputs[0].checked = false; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + + +

2, 3

+ `); + + component.selected = [[1, 3]]; + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, true); + + assert.htmlEqual(target.innerHTML, ` + + + + +

1, 3

+ `); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-2/main.svelte b/test/runtime/samples/binding-input-group-each-2/main.svelte new file mode 100644 index 000000000000..46f7e9e69858 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-2/main.svelte @@ -0,0 +1,17 @@ + + +{#each options as value} + +{/each} + +

{selected[0].join(', ')}

\ No newline at end of file diff --git a/test/runtime/samples/binding-input-group-each-3/_config.js b/test/runtime/samples/binding-input-group-each-3/_config.js new file mode 100644 index 000000000000..92010296dc8a --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-3/_config.js @@ -0,0 +1,275 @@ +const values = [ + { name: 'Alpha' }, + { name: 'Beta' }, + { name: 'Gamma' } +]; + +const selected_array = [ + [values[1]], + [], + [values[2]] +]; + +export default { + props: { + values, + selected_array + }, + + html: ` +
+ + + + + + +

Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, true); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

+
+
+ + + + + + +

Gamma

+
+ `); + inputs[3].checked = true; + await inputs[3].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

Alpha

+
+
+ + + + + + +

Gamma

+
+ `); + + inputs[8].checked = false; + await inputs[8].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` +
+ + + + + + +

Alpha, Beta

+
+
+ + + + + + +

Alpha

+
+
+ + + + + + +

+
+ `); + + component.selected_array = [[values[1], values[2]], [values[2]]]; + + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, true); + + assert.htmlEqual(target.innerHTML, ` +
+ + + + + + +

Beta, Gamma

+
+
+ + + + + + +

Gamma

+
+ `); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-3/main.svelte b/test/runtime/samples/binding-input-group-each-3/main.svelte new file mode 100644 index 000000000000..42a7a1c4e9b9 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-3/main.svelte @@ -0,0 +1,15 @@ + + +{#each selected_array as _, index} +
+ {#each values as value} + + {/each} +

{selected_array[index].map(v => v.name).join(', ')}

+
+{/each} diff --git a/test/runtime/samples/binding-input-group-each-4/_config.js b/test/runtime/samples/binding-input-group-each-4/_config.js new file mode 100644 index 000000000000..f1168858b006 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-4/_config.js @@ -0,0 +1,153 @@ +export default { + html: ` + + + +

1

+ + + +

2

+ + + +

+ + + +

3

+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, false); + + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, false); + assert.equal(inputs[10].checked, false); + assert.equal(inputs[11].checked, true); + + const event = new window.Event('change'); + + inputs[2].checked = true; + await inputs[2].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

1, 3

+ + + +

2

+ + + +

+ + + +

3

+ `); + + inputs[9].checked = true; + await inputs[9].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

1, 3

+ + + +

2

+ + + +

+ + + +

1, 3

+ `); + + inputs[4].checked = false; + await inputs[4].dispatchEvent(event); + inputs[5].checked = true; + await inputs[5].dispatchEvent(event); + inputs[6].checked = true; + await inputs[6].dispatchEvent(event); + inputs[7].checked = true; + await inputs[7].dispatchEvent(event); + inputs[11].checked = false; + await inputs[11].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

1, 3

+ + + +

3

+ + + +

1, 2

+ + + +

1

+ `); + + component.selected_array_1 = [[3], [1]]; + component.selected_array_2 = [[], [2]]; + + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, true); + + assert.equal(inputs[3].checked, true); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, false); + assert.equal(inputs[10].checked, true); + assert.equal(inputs[11].checked, false); + + assert.htmlEqual(target.innerHTML, ` + + + +

3

+ + + +

1

+ + + +

+ + + +

2

+ `); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-4/main.svelte b/test/runtime/samples/binding-input-group-each-4/main.svelte new file mode 100644 index 000000000000..0bbf5ea763c6 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-4/main.svelte @@ -0,0 +1,33 @@ + + +{#each selected_array_1 as selected} + {#each options as value} + + {/each} +

{selected.join(', ')}

+{/each} + +{#each selected_array_2 as selected} + {#each options as value} + + {/each} +

{selected.join(', ')}

+{/each} \ No newline at end of file diff --git a/test/runtime/samples/binding-input-group-each-5/_config.js b/test/runtime/samples/binding-input-group-each-5/_config.js new file mode 100644 index 000000000000..579225c627c5 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-5/_config.js @@ -0,0 +1,160 @@ +export default { + html: ` + + + +

1

+ + + +

1, 2, 3

+ + + +

2

+ + + +

1

+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + assert.equal(inputs[3].checked, true); + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, true); + + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, true); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, true); + assert.equal(inputs[10].checked, false); + assert.equal(inputs[11].checked, false); + + const event = new window.Event('change'); + + inputs[2].checked = true; + await inputs[2].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

1, 3

+ + + +

1, 2, 3

+ + + +

2

+ + + +

1

+ `); + + inputs[8].checked = true; + await inputs[8].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

1, 3

+ + + +

1, 2, 3

+ + + +

2, 3

+ + + +

1

+ `); + + component.selected_index = [1, 1]; + + assert.htmlEqual(target.innerHTML, ` + + + +

1, 2, 3

+ + + +

1, 2, 3

+ + + +

1

+ + + +

1

+ `); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, true); + + assert.equal(inputs[3].checked, true); + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, true); + + assert.equal(inputs[6].checked, true); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, true); + assert.equal(inputs[10].checked, false); + assert.equal(inputs[11].checked, false); + + inputs[5].checked = false; + await inputs[5].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

1, 2

+ + + +

1, 2

+ + + +

1

+ + + +

1

+ `); + + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + + assert.equal(inputs[3].checked, true); + assert.equal(inputs[4].checked, true); + assert.equal(inputs[5].checked, false); + + assert.equal(inputs[6].checked, true); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + assert.equal(inputs[9].checked, true); + assert.equal(inputs[10].checked, false); + assert.equal(inputs[11].checked, false); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-5/main.svelte b/test/runtime/samples/binding-input-group-each-5/main.svelte new file mode 100644 index 000000000000..93bdce651093 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-5/main.svelte @@ -0,0 +1,24 @@ + + +{#each selected_array as selected} + {#each selected_index as index} + {#each options as value} + + {/each} +

{selected[index].join(', ')}

+ {/each} +{/each} diff --git a/test/runtime/samples/binding-input-group-each-6/_config.js b/test/runtime/samples/binding-input-group-each-6/_config.js new file mode 100644 index 000000000000..9eb251bf5d06 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-6/_config.js @@ -0,0 +1,87 @@ +export default { + html: ` + + + +

+ + + +

+ + + +

+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, false); + assert.equal(inputs[2].checked, false); + + assert.equal(inputs[3].checked, false); + assert.equal(inputs[4].checked, false); + assert.equal(inputs[5].checked, false); + + assert.equal(inputs[6].checked, false); + assert.equal(inputs[7].checked, false); + assert.equal(inputs[8].checked, false); + + const event = new window.Event('change'); + + inputs[2].checked = true; + await inputs[2].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

z

+ + + +

+ + + +

+ `); + + inputs[4].checked = true; + await inputs[4].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

z

+ + + +

y

+ + + +

+ `); + + inputs[5].checked = true; + await inputs[5].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + +

z

+ + + +

y, z

+ + + +

+ `); + } +}; diff --git a/test/runtime/samples/binding-input-group-each-6/main.svelte b/test/runtime/samples/binding-input-group-each-6/main.svelte new file mode 100644 index 000000000000..85be939e8a99 --- /dev/null +++ b/test/runtime/samples/binding-input-group-each-6/main.svelte @@ -0,0 +1,22 @@ + + +{#each Object.keys(list) as key} + {#each values as value} + + {/each} +

{list[key].join(', ')}

+{/each} diff --git a/test/runtime/samples/binding-input-number-2/_config.js b/test/runtime/samples/binding-input-number-2/_config.js index a3510eb757ba..5daf50fd04f3 100644 --- a/test/runtime/samples/binding-input-number-2/_config.js +++ b/test/runtime/samples/binding-input-number-2/_config.js @@ -27,5 +27,5 @@ export default { component.value = 1; assert.equal(component.value, 1); assert.equal(input.value, "1"); - }, + } }; diff --git a/test/runtime/samples/binding-input-number/_config.js b/test/runtime/samples/binding-input-number/_config.js index 869b9f9896ca..3c5919bc644c 100644 --- a/test/runtime/samples/binding-input-number/_config.js +++ b/test/runtime/samples/binding-input-number/_config.js @@ -1,6 +1,6 @@ export default { props: { - count: 42, + count: 42 }, html: ` @@ -44,5 +44,5 @@ export default {

undefined undefined

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-range-change-with-max/_config.js b/test/runtime/samples/binding-input-range-change-with-max/_config.js index 1fda90d83cba..dc3cf4ce281f 100644 --- a/test/runtime/samples/binding-input-range-change-with-max/_config.js +++ b/test/runtime/samples/binding-input-range-change-with-max/_config.js @@ -29,5 +29,5 @@ export default {

20 of 20

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-range-change/_config.js b/test/runtime/samples/binding-input-range-change/_config.js index 62e9562770c6..f6ec2d9c5368 100644 --- a/test/runtime/samples/binding-input-range-change/_config.js +++ b/test/runtime/samples/binding-input-range-change/_config.js @@ -1,6 +1,6 @@ export default { props: { - count: 42, + count: 42 }, html: ` @@ -34,5 +34,5 @@ export default {

number 44

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-range/_config.js b/test/runtime/samples/binding-input-range/_config.js index 4c3d37a6677f..dc6178e088d0 100644 --- a/test/runtime/samples/binding-input-range/_config.js +++ b/test/runtime/samples/binding-input-range/_config.js @@ -1,6 +1,6 @@ export default { props: { - count: 42, + count: 42 }, html: ` @@ -34,5 +34,5 @@ export default {

number 44

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js b/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js index 28cffdfa5772..de4d6325b0c2 100644 --- a/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js +++ b/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js @@ -1,7 +1,7 @@ export default { props: { foo: 'a', - items: ['x'], + items: ['x'] }, html: ` @@ -32,5 +32,5 @@ export default {

b

y

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-contextual-reactive/_config.js b/test/runtime/samples/binding-input-text-contextual-reactive/_config.js index 6fdfc4be527f..a1584c18b8c3 100644 --- a/test/runtime/samples/binding-input-text-contextual-reactive/_config.js +++ b/test/runtime/samples/binding-input-text-contextual-reactive/_config.js @@ -121,5 +121,5 @@ export default {

done:one / done:two / remaining:four

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-contextual/_config.js b/test/runtime/samples/binding-input-text-contextual/_config.js index bb7f16c8bb87..1c66ea7ff55f 100644 --- a/test/runtime/samples/binding-input-text-contextual/_config.js +++ b/test/runtime/samples/binding-input-text-contextual/_config.js @@ -1,6 +1,6 @@ export default { props: { - items: ['one', 'two', 'three'], + items: ['one', 'two', 'three'] }, html: ` @@ -65,5 +65,5 @@ export default {

five

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-deconflicted/_config.js b/test/runtime/samples/binding-input-text-deconflicted/_config.js index 46fe3e2a3872..48a7d2590a89 100644 --- a/test/runtime/samples/binding-input-text-deconflicted/_config.js +++ b/test/runtime/samples/binding-input-text-deconflicted/_config.js @@ -1,8 +1,8 @@ export default { props: { component: { - name: 'world', - }, + name: 'world' + } }, html: ` @@ -36,5 +36,5 @@ export default {

Hello goodbye!

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js b/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js index eeecdb0ef810..0afbb9d952f4 100644 --- a/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js +++ b/test/runtime/samples/binding-input-text-deep-computed-dynamic/_config.js @@ -4,8 +4,8 @@ export default { obj: { foo: 'a', bar: 'b', - baz: 'c', - }, + baz: 'c' + } }, html: ` @@ -56,5 +56,5 @@ export default {
{"foo":"d","bar":"e","baz":"f"}
`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-deep-computed/_config.js b/test/runtime/samples/binding-input-text-deep-computed/_config.js index a1ea2c34ad0c..3a85d50d76fd 100644 --- a/test/runtime/samples/binding-input-text-deep-computed/_config.js +++ b/test/runtime/samples/binding-input-text-deep-computed/_config.js @@ -2,8 +2,8 @@ export default { props: { prop: 'name', user: { - name: 'alice', - }, + name: 'alice' + } }, html: ` @@ -40,5 +40,5 @@ export default {

hello carol

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js b/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js index 364195233d5c..627ef5f15e85 100644 --- a/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js +++ b/test/runtime/samples/binding-input-text-deep-contextual-computed-dynamic/_config.js @@ -5,9 +5,9 @@ export default { { foo: 'a', bar: 'b', - baz: 'c', - }, - ], + baz: 'c' + } + ] }, html: ` @@ -58,5 +58,5 @@ export default {
{"foo":"d","bar":"e","baz":"f"}
`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-deep-contextual/_config.js b/test/runtime/samples/binding-input-text-deep-contextual/_config.js index 5b6b0d65779b..cc80d380425a 100644 --- a/test/runtime/samples/binding-input-text-deep-contextual/_config.js +++ b/test/runtime/samples/binding-input-text-deep-contextual/_config.js @@ -3,8 +3,8 @@ export default { items: [ { description: 'one' }, { description: 'two' }, - { description: 'three' }, - ], + { description: 'three' } + ] }, html: ` @@ -45,5 +45,5 @@ export default {

four

five

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-deep/_config.js b/test/runtime/samples/binding-input-text-deep/_config.js index e6113510a7cd..35443e907355 100644 --- a/test/runtime/samples/binding-input-text-deep/_config.js +++ b/test/runtime/samples/binding-input-text-deep/_config.js @@ -1,8 +1,8 @@ export default { props: { user: { - name: 'alice', - }, + name: 'alice' + } }, html: ` @@ -39,5 +39,5 @@ export default {

hello carol

`); - }, + } }; diff --git a/test/runtime/samples/binding-input-text-undefined/_config.js b/test/runtime/samples/binding-input-text-undefined/_config.js index 009e1b37ba8b..fa59b1f796c7 100644 --- a/test/runtime/samples/binding-input-text-undefined/_config.js +++ b/test/runtime/samples/binding-input-text-undefined/_config.js @@ -26,5 +26,5 @@ export default { component.x = undefined; assert.equal(input.value, ''); - }, + } }; diff --git a/test/runtime/samples/binding-input-text/_config.js b/test/runtime/samples/binding-input-text/_config.js index e7162b6153bb..52d8e44902ab 100644 --- a/test/runtime/samples/binding-input-text/_config.js +++ b/test/runtime/samples/binding-input-text/_config.js @@ -1,6 +1,6 @@ export default { props: { - name: 'world', + name: 'world' }, html: ` @@ -33,5 +33,5 @@ export default {

hello goodbye

`); - }, + } }; diff --git a/test/runtime/samples/binding-select-initial-value/_config.js b/test/runtime/samples/binding-select-initial-value/_config.js index d98e5d2e1c11..d34a987fa5a8 100644 --- a/test/runtime/samples/binding-select-initial-value/_config.js +++ b/test/runtime/samples/binding-select-initial-value/_config.js @@ -24,7 +24,7 @@ export default { `, props: { - selected: 'b', + selected: 'b' }, test({ assert, component, target }) { @@ -33,5 +33,5 @@ export default { assert.equal(select.value, 'b'); assert.ok(options[1].selected); - }, + } }; diff --git a/test/runtime/samples/binding-select-late-2/_config.js b/test/runtime/samples/binding-select-late-2/_config.js new file mode 100644 index 000000000000..42c45d13668b --- /dev/null +++ b/test/runtime/samples/binding-select-late-2/_config.js @@ -0,0 +1,34 @@ +export default { + props: { + items: [], + selected: 'two' + }, + + html: ` + +

selected: two

+ `, + + ssrHtml: ` + +

selected: two

+ `, + + test({ assert, component, target }) { + component.items = [ 'one', 'two', 'three' ]; + + const options = target.querySelectorAll('option'); + assert.ok(!options[0].selected); + assert.ok(options[1].selected); + assert.ok(!options[2].selected); + + assert.htmlEqual(target.innerHTML, ` + +

selected: two

+ `); + } +}; diff --git a/test/runtime/samples/binding-select-late-2/main.svelte b/test/runtime/samples/binding-select-late-2/main.svelte new file mode 100644 index 000000000000..52cc14528ae6 --- /dev/null +++ b/test/runtime/samples/binding-select-late-2/main.svelte @@ -0,0 +1,12 @@ + + + + +

selected: {selected || 'nothing'}

\ No newline at end of file diff --git a/test/runtime/samples/binding-select-late-3/_config.js b/test/runtime/samples/binding-select-late-3/_config.js new file mode 100644 index 000000000000..42c45d13668b --- /dev/null +++ b/test/runtime/samples/binding-select-late-3/_config.js @@ -0,0 +1,34 @@ +export default { + props: { + items: [], + selected: 'two' + }, + + html: ` + +

selected: two

+ `, + + ssrHtml: ` + +

selected: two

+ `, + + test({ assert, component, target }) { + component.items = [ 'one', 'two', 'three' ]; + + const options = target.querySelectorAll('option'); + assert.ok(!options[0].selected); + assert.ok(options[1].selected); + assert.ok(!options[2].selected); + + assert.htmlEqual(target.innerHTML, ` + +

selected: two

+ `); + } +}; diff --git a/test/runtime/samples/binding-select-late-3/main.svelte b/test/runtime/samples/binding-select-late-3/main.svelte new file mode 100644 index 000000000000..ec9ac8d34511 --- /dev/null +++ b/test/runtime/samples/binding-select-late-3/main.svelte @@ -0,0 +1,12 @@ + + + + +

selected: {selected || 'nothing'}

\ No newline at end of file diff --git a/test/runtime/samples/binding-select-optgroup/_config.js b/test/runtime/samples/binding-select-optgroup/_config.js index e8a1d4079760..03ad3e328088 100644 --- a/test/runtime/samples/binding-select-optgroup/_config.js +++ b/test/runtime/samples/binding-select-optgroup/_config.js @@ -45,5 +45,5 @@ export default { `); - }, + } }; diff --git a/test/runtime/samples/binding-select/_config.js b/test/runtime/samples/binding-select/_config.js index a5995061a0fe..310315176bd1 100644 --- a/test/runtime/samples/binding-select/_config.js +++ b/test/runtime/samples/binding-select/_config.js @@ -24,7 +24,7 @@ export default { `, props: { - selected: 'one', + selected: 'one' }, async test({ assert, component, target, window }) { @@ -53,5 +53,5 @@ export default { `); component.selected = 'three'; - }, + } }; diff --git a/test/runtime/samples/binding-store-deep/_config.js b/test/runtime/samples/binding-store-deep/_config.js index 8bdd41818b57..c0f4f6357845 100644 --- a/test/runtime/samples/binding-store-deep/_config.js +++ b/test/runtime/samples/binding-store-deep/_config.js @@ -37,5 +37,5 @@ export default { assert.deepEqual(names, ['world', 'everybody', 'goodbye']); unsubscribe(); - }, + } }; diff --git a/test/runtime/samples/binding-store/_config.js b/test/runtime/samples/binding-store/_config.js index eb22d3e96c56..6e7a70878ad0 100644 --- a/test/runtime/samples/binding-store/_config.js +++ b/test/runtime/samples/binding-store/_config.js @@ -37,5 +37,5 @@ export default { assert.deepEqual(names, ['world', 'everybody', 'goodbye']); unsubscribe(); - }, + } }; diff --git a/test/runtime/samples/binding-textarea/_config.js b/test/runtime/samples/binding-textarea/_config.js index ac092096e6cf..70646e5e4bfa 100644 --- a/test/runtime/samples/binding-textarea/_config.js +++ b/test/runtime/samples/binding-textarea/_config.js @@ -1,6 +1,6 @@ export default { props: { - value: 'some text', + value: 'some text' }, html: ` @@ -33,5 +33,5 @@ export default {

goodbye

`); - }, + } }; diff --git a/test/runtime/samples/binding-this-each-block-property-2/_config.js b/test/runtime/samples/binding-this-each-block-property-2/_config.js new file mode 100644 index 000000000000..5c288cd6d1e7 --- /dev/null +++ b/test/runtime/samples/binding-this-each-block-property-2/_config.js @@ -0,0 +1,53 @@ +let calls = []; +function callback(refs) { + calls.push(refs.map(({ ref }) => ({ ref }))); +} +export default { + html: ``, + props: { + callback + }, + after_test() { + calls = []; + }, + async test({ assert, component, target }) { + assert.equal(calls.length, 1); + assert.equal(calls[0].length, 0); + + await component.addItem(); + + let divs = target.querySelectorAll("div"); + + assert.equal(calls.length, 3); + assert.equal(calls[1].length, 1); + assert.equal(calls[1][0].ref, null); + assert.equal(calls[2].length, 1); + assert.equal(calls[2][0].ref, divs[0]); + + await component.addItem(); + + divs = target.querySelectorAll("div"); + + assert.equal(calls.length, 5); + assert.equal(calls[3].length, 2); + assert.equal(calls[3][0].ref, divs[0]); + assert.equal(calls[3][1].ref, null); + assert.equal(calls[4].length, 2); + assert.equal(calls[4][0].ref, divs[0]); + assert.equal(calls[4][1].ref, divs[1]); + + await component.addItem(); + + divs = target.querySelectorAll("div"); + + assert.equal(calls.length, 7); + assert.equal(calls[5].length, 3); + assert.equal(calls[5][0].ref, divs[0]); + assert.equal(calls[5][1].ref, divs[1]); + assert.equal(calls[5][2].ref, null); + assert.equal(calls[6].length, 3); + assert.equal(calls[6][0].ref, divs[0]); + assert.equal(calls[6][1].ref, divs[1]); + assert.equal(calls[6][2].ref, divs[2]); + } +}; diff --git a/test/runtime/samples/binding-this-each-block-property-2/main.svelte b/test/runtime/samples/binding-this-each-block-property-2/main.svelte new file mode 100644 index 000000000000..bc1efe725cfa --- /dev/null +++ b/test/runtime/samples/binding-this-each-block-property-2/main.svelte @@ -0,0 +1,17 @@ + + +{#each refs as xxx} +
+{/each} \ No newline at end of file diff --git a/test/runtime/samples/bitmask-overflow-2/_config.js b/test/runtime/samples/bitmask-overflow-2/_config.js index 0b637912923f..7304f6fa684d 100644 --- a/test/runtime/samples/bitmask-overflow-2/_config.js +++ b/test/runtime/samples/bitmask-overflow-2/_config.js @@ -1,3 +1,3 @@ export default { - error: `potato is not defined`, + error: `potato is not defined` }; \ No newline at end of file diff --git a/test/runtime/samples/bitmask-overflow-3/_config.js b/test/runtime/samples/bitmask-overflow-3/_config.js index aee7d3237e6b..a55a73af1d2e 100644 --- a/test/runtime/samples/bitmask-overflow-3/_config.js +++ b/test/runtime/samples/bitmask-overflow-3/_config.js @@ -1,3 +1,3 @@ export default { - error: `A is not defined`, + error: `A is not defined` }; \ No newline at end of file diff --git a/test/runtime/samples/bitmask-overflow-slot-2/_config.js b/test/runtime/samples/bitmask-overflow-slot-2/_config.js index b01bd81e00bb..08c0c2f9022c 100644 --- a/test/runtime/samples/bitmask-overflow-slot-2/_config.js +++ b/test/runtime/samples/bitmask-overflow-slot-2/_config.js @@ -90,7 +90,7 @@ export default { assert.deepEqual(component.reads, { _0: 2, - _1: 2, + _1: 2 }); } }; \ No newline at end of file diff --git a/test/runtime/samples/class-with-spread-and-bind/_config.js b/test/runtime/samples/class-with-spread-and-bind/_config.js index f3c54e8c525a..cab46706ef51 100644 --- a/test/runtime/samples/class-with-spread-and-bind/_config.js +++ b/test/runtime/samples/class-with-spread-and-bind/_config.js @@ -1,6 +1,6 @@ export default { props: { - primary: true, + primary: true }, html: `
`, @@ -14,5 +14,5 @@ export default {
` ); - }, + } }; diff --git a/test/runtime/samples/component-binding-deep/_config.js b/test/runtime/samples/component-binding-deep/_config.js index be5a2624acc1..8a2f5a56cfeb 100644 --- a/test/runtime/samples/component-binding-deep/_config.js +++ b/test/runtime/samples/component-binding-deep/_config.js @@ -21,5 +21,5 @@ export default {

blah

`); - }, + } }; diff --git a/test/runtime/samples/component-binding-store/Input.svelte b/test/runtime/samples/component-binding-store/Input.svelte new file mode 100644 index 000000000000..792104bec8c0 --- /dev/null +++ b/test/runtime/samples/component-binding-store/Input.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/component-binding-store/_config.js b/test/runtime/samples/component-binding-store/_config.js new file mode 100644 index 000000000000..8b8a7a170af7 --- /dev/null +++ b/test/runtime/samples/component-binding-store/_config.js @@ -0,0 +1,61 @@ +export default { + html: ` + + +
+ `, + + async test({ assert, component, target, window }) { + let count = 0; + component.callback = () => { + count++; + }; + + const [input1, input2] = target.querySelectorAll("input"); + + input1.value = "1"; + await input1.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` + + +
1
+ ` + ); + assert.equal(input1.value, "1"); + assert.equal(input2.value, "1"); + assert.equal(count, 1); + + input2.value = "123"; + await input2.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` + + +
123
+ ` + ); + assert.equal(input1.value, "123"); + assert.equal(input2.value, "123"); + assert.equal(count, 2); + + input1.value = "456"; + await input1.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` + + +
456
+ ` + ); + assert.equal(input1.value, "456"); + assert.equal(input2.value, "456"); + assert.equal(count, 3); + } +}; diff --git a/test/runtime/samples/component-binding-store/main.svelte b/test/runtime/samples/component-binding-store/main.svelte new file mode 100644 index 000000000000..dba08e527680 --- /dev/null +++ b/test/runtime/samples/component-binding-store/main.svelte @@ -0,0 +1,18 @@ + + + + + + +
{$value.value}
\ No newline at end of file diff --git a/test/runtime/samples/component-event-handler-contenteditable/_config.js b/test/runtime/samples/component-event-handler-contenteditable/_config.js new file mode 100644 index 000000000000..3a8573497546 --- /dev/null +++ b/test/runtime/samples/component-event-handler-contenteditable/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` +
+ `, + + async test({ assert, component, target, window }) { + const div = target.querySelector('div'); + const text = window.document.createTextNode('a'); + div.insertBefore(text, null); + const event = new window.InputEvent('input'); + await div.dispatchEvent(event); + + assert.equal(div.textContent, 'a'); + } +}; diff --git a/test/runtime/samples/component-event-handler-contenteditable/main.svelte b/test/runtime/samples/component-event-handler-contenteditable/main.svelte new file mode 100644 index 000000000000..1eb5911df897 --- /dev/null +++ b/test/runtime/samples/component-event-handler-contenteditable/main.svelte @@ -0,0 +1,6 @@ + + +
{text}
diff --git a/test/runtime/samples/component-event-not-stale/_config.js b/test/runtime/samples/component-event-not-stale/_config.js index 912ea1f7d037..7951afb9d55f 100644 --- a/test/runtime/samples/component-event-not-stale/_config.js +++ b/test/runtime/samples/component-event-not-stale/_config.js @@ -1,6 +1,6 @@ export default { props: { - value: 1, + value: 1 }, test({ assert, component, target, window }) { @@ -26,5 +26,5 @@ export default { { value: 2 }, { value: 2 } ]); - }, + } }; diff --git a/test/runtime/samples/component-events-console/_config.js b/test/runtime/samples/component-events-console/_config.js index b80074978561..39ccbd719f9c 100644 --- a/test/runtime/samples/component-events-console/_config.js +++ b/test/runtime/samples/component-events-console/_config.js @@ -21,5 +21,5 @@ export default { } console.log = log; - }, + } }; diff --git a/test/runtime/samples/component-namespace/Tooltip.svelte b/test/runtime/samples/component-namespace/Tooltip.svelte new file mode 100644 index 000000000000..9b44ef57a841 --- /dev/null +++ b/test/runtime/samples/component-namespace/Tooltip.svelte @@ -0,0 +1 @@ +

i am a widget

\ No newline at end of file diff --git a/test/runtime/samples/component-namespace/Widget.svelte b/test/runtime/samples/component-namespace/Widget.svelte new file mode 100644 index 000000000000..b6aa45c6a89b --- /dev/null +++ b/test/runtime/samples/component-namespace/Widget.svelte @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/test/runtime/samples/component-namespace/_config.js b/test/runtime/samples/component-namespace/_config.js new file mode 100644 index 000000000000..5b96ac8df009 --- /dev/null +++ b/test/runtime/samples/component-namespace/_config.js @@ -0,0 +1,3 @@ +export default { + html: '

i am a widget

' +}; diff --git a/test/runtime/samples/component-namespace/main.svelte b/test/runtime/samples/component-namespace/main.svelte new file mode 100644 index 000000000000..3f53b2b1c815 --- /dev/null +++ b/test/runtime/samples/component-namespace/main.svelte @@ -0,0 +1,8 @@ + + +{#each widgets as LazyWidget} + +{/each} \ No newline at end of file diff --git a/test/runtime/samples/component-shorthand-import/_config.js b/test/runtime/samples/component-shorthand-import/_config.js index ceb8e19f68ca..c955224600eb 100644 --- a/test/runtime/samples/component-shorthand-import/_config.js +++ b/test/runtime/samples/component-shorthand-import/_config.js @@ -1,3 +1,3 @@ export default { - html: `

This is the widget.

`, + html: `

This is the widget.

` }; diff --git a/test/runtime/samples/component-slot-fallback-3/_config.js b/test/runtime/samples/component-slot-fallback-3/_config.js index b5591fb5e07d..25cc65eb2d23 100644 --- a/test/runtime/samples/component-slot-fallback-3/_config.js +++ b/test/runtime/samples/component-slot-fallback-3/_config.js @@ -2,5 +2,5 @@ export default { html: `
Hello World
Hello
world
Bye
World
- `, + ` }; diff --git a/test/runtime/samples/component-slot-fallback-4/_config.js b/test/runtime/samples/component-slot-fallback-4/_config.js index b7c2b63ed6f7..4ebe35351398 100644 --- a/test/runtime/samples/component-slot-fallback-4/_config.js +++ b/test/runtime/samples/component-slot-fallback-4/_config.js @@ -1,5 +1,5 @@ export default { html: ` foobar - `, + ` }; diff --git a/test/runtime/samples/component-slot-let-in-slot/_config.js b/test/runtime/samples/component-slot-let-in-slot/_config.js index a86d869581fa..eb16c27fda78 100644 --- a/test/runtime/samples/component-slot-let-in-slot/_config.js +++ b/test/runtime/samples/component-slot-let-in-slot/_config.js @@ -1,6 +1,6 @@ export default { props: { - prop: 'a', + prop: 'a' }, html: 'a', diff --git a/test/runtime/samples/component-slot-nested-if/_config.js b/test/runtime/samples/component-slot-nested-if/_config.js index 89dfd006cc76..45c570fc2236 100644 --- a/test/runtime/samples/component-slot-nested-if/_config.js +++ b/test/runtime/samples/component-slot-nested-if/_config.js @@ -26,5 +26,5 @@ export default { Display: abc ` ); - }, + } }; diff --git a/test/runtime/samples/deconflict-builtins-2/_config.js b/test/runtime/samples/deconflict-builtins-2/_config.js index 5870ff073b45..1489f83dc410 100644 --- a/test/runtime/samples/deconflict-builtins-2/_config.js +++ b/test/runtime/samples/deconflict-builtins-2/_config.js @@ -1,4 +1,4 @@ export default { html: `hello world`, - preserveIdentifiers: true, + preserveIdentifiers: true }; \ No newline at end of file diff --git a/test/runtime/samples/dev-warning-missing-data-each/_config.js b/test/runtime/samples/dev-warning-missing-data-each/_config.js index 92cda48fceb4..7d7794eff49c 100644 --- a/test/runtime/samples/dev-warning-missing-data-each/_config.js +++ b/test/runtime/samples/dev-warning-missing-data-each/_config.js @@ -7,18 +7,18 @@ export default { letters: [ { id: 1, - char: 'a', + char: 'a' }, { id: 2, - char: 'b', + char: 'b' }, { id: 3, - char: 'c', - }, - ], + char: 'c' + } + ] }, - warnings: [], + warnings: [] }; diff --git a/test/runtime/samples/document-event/_config.js b/test/runtime/samples/document-event/_config.js index f5e4b46f4f44..d9a8866275aa 100644 --- a/test/runtime/samples/document-event/_config.js +++ b/test/runtime/samples/document-event/_config.js @@ -9,5 +9,5 @@ export default { const event2 = new window.Event('mouseleave'); window.document.body.dispatchEvent(event2); assert.deepEqual(component.events, ['enter', 'leave']); - }, + } }; diff --git a/test/runtime/samples/each-block-array-literal/_config.js b/test/runtime/samples/each-block-array-literal/_config.js index 288d1cd09f16..164e4730bceb 100644 --- a/test/runtime/samples/each-block-array-literal/_config.js +++ b/test/runtime/samples/each-block-array-literal/_config.js @@ -15,5 +15,5 @@ export default { button.dispatchEvent(event); assert.equal(component.clicked, 'racoon'); - }, + } }; diff --git a/test/runtime/samples/each-block-destructured-array-sparse/_config.js b/test/runtime/samples/each-block-destructured-array-sparse/_config.js index 9805276600a0..331c3aec1bc0 100644 --- a/test/runtime/samples/each-block-destructured-array-sparse/_config.js +++ b/test/runtime/samples/each-block-destructured-array-sparse/_config.js @@ -16,5 +16,5 @@ export default { assert.htmlEqual( target.innerHTML, `

bar

`); - }, + } }; diff --git a/test/runtime/samples/each-block-destructured-array/_config.js b/test/runtime/samples/each-block-destructured-array/_config.js index 432d8a3a78d4..e2924c8656bf 100644 --- a/test/runtime/samples/each-block-destructured-array/_config.js +++ b/test/runtime/samples/each-block-destructured-array/_config.js @@ -16,5 +16,5 @@ export default { assert.htmlEqual( target.innerHTML, `

foo: bar

`); - }, + } }; diff --git a/test/runtime/samples/each-block-destructured-default/_config.js b/test/runtime/samples/each-block-destructured-default/_config.js index 133fd685321a..0e99fd589f3a 100644 --- a/test/runtime/samples/each-block-destructured-default/_config.js +++ b/test/runtime/samples/each-block-destructured-default/_config.js @@ -18,5 +18,5 @@ export default { assert.htmlEqual(target.innerHTML, `

cow - ‎B. taurus - 50kg

`); - }, + } }; diff --git a/test/runtime/samples/each-block-destructured-object-binding/_config.js b/test/runtime/samples/each-block-destructured-object-binding/_config.js index 8b59a9703411..2ab3e243970b 100644 --- a/test/runtime/samples/each-block-destructured-object-binding/_config.js +++ b/test/runtime/samples/each-block-destructured-object-binding/_config.js @@ -1,6 +1,6 @@ export default { props: { - people: [{ name: { first: 'Doctor', last: 'Who' } }], + people: [{ name: { first: 'Doctor', last: 'Who' } }] }, html: ` @@ -41,5 +41,5 @@ export default {

Frank Oz

`); - }, + } }; diff --git a/test/runtime/samples/each-block-destructured-object-rest/_config.js b/test/runtime/samples/each-block-destructured-object-rest/_config.js index 561d4e844215..be5d38b55534 100644 --- a/test/runtime/samples/each-block-destructured-object-rest/_config.js +++ b/test/runtime/samples/each-block-destructured-object-rest/_config.js @@ -16,5 +16,5 @@ export default { assert.htmlEqual(target.innerHTML, `

cow

`); - }, + } }; diff --git a/test/runtime/samples/each-block-destructured-object/_config.js b/test/runtime/samples/each-block-destructured-object/_config.js index dc3943fffeac..feec72f402f8 100644 --- a/test/runtime/samples/each-block-destructured-object/_config.js +++ b/test/runtime/samples/each-block-destructured-object/_config.js @@ -16,5 +16,5 @@ export default { assert.htmlEqual( target.innerHTML, `

cow: hooves

`); - }, + } }; diff --git a/test/runtime/samples/each-block-else-mount-or-intro/_config.js b/test/runtime/samples/each-block-else-mount-or-intro/_config.js index 8460a4b5e040..acf2bafd5fba 100644 --- a/test/runtime/samples/each-block-else-mount-or-intro/_config.js +++ b/test/runtime/samples/each-block-else-mount-or-intro/_config.js @@ -1,4 +1,4 @@ export default { props: { items: [] }, - html: `No items.`, + html: `No items.` }; diff --git a/test/runtime/samples/each-block-in-if-block/_config.js b/test/runtime/samples/each-block-in-if-block/_config.js index eda3ca14a9f0..082b9b303373 100644 --- a/test/runtime/samples/each-block-in-if-block/_config.js +++ b/test/runtime/samples/each-block-in-if-block/_config.js @@ -1,7 +1,7 @@ export default { props: { dummy: false, - fruits: ['Apple', 'Banana', 'Tomato'], + fruits: ['Apple', 'Banana', 'Tomato'] }, html: '
Apple
Banana
Tomato
', diff --git a/test/runtime/samples/each-block-keyed-component-action/Component.svelte b/test/runtime/samples/each-block-keyed-component-action/Component.svelte new file mode 100644 index 000000000000..18a6c7452a01 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-component-action/Component.svelte @@ -0,0 +1,5 @@ + + +
diff --git a/test/runtime/samples/each-block-keyed-component-action/_config.js b/test/runtime/samples/each-block-keyed-component-action/_config.js new file mode 100644 index 000000000000..66c609be01b1 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-component-action/_config.js @@ -0,0 +1,21 @@ +export default { + test({ assert, component, raf }) { + assert.equal(component.count, 0); + + component.arr = ["2"]; + + assert.equal(component.count, 1); + + component.arr = ["1", "2"]; + + assert.equal(component.count, 2); + + component.arr = ["2", "1"]; + + assert.equal(component.count, 2); + + component.arr = []; + + assert.equal(component.count, 0); + } +}; diff --git a/test/runtime/samples/each-block-keyed-component-action/main.svelte b/test/runtime/samples/each-block-keyed-component-action/main.svelte new file mode 100644 index 000000000000..bfacdf402a02 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-component-action/main.svelte @@ -0,0 +1,17 @@ + + +{#each arr as item (item)} + +{/each} diff --git a/test/runtime/samples/each-block-keyed-empty/_config.js b/test/runtime/samples/each-block-keyed-empty/_config.js index cf8f4d321901..2c9055ce4466 100644 --- a/test/runtime/samples/each-block-keyed-empty/_config.js +++ b/test/runtime/samples/each-block-keyed-empty/_config.js @@ -1,6 +1,6 @@ export default { props: { - x: [{ z: 1 }, { z: 2 }], + x: [{ z: 1 }, { z: 2 }] }, html: `` diff --git a/test/runtime/samples/each-block-keyed-non-prop/_config.js b/test/runtime/samples/each-block-keyed-non-prop/_config.js index 90e9a7f9c866..2cccbedef0f4 100644 --- a/test/runtime/samples/each-block-keyed-non-prop/_config.js +++ b/test/runtime/samples/each-block-keyed-non-prop/_config.js @@ -25,5 +25,5 @@ export default { assert.equal(p1, p4, 'first

element should be retained'); assert.equal(p3, p5, 'last

element should be retained'); - }, + } }; diff --git a/test/runtime/samples/each-block-keyed-random-permute/_config.js b/test/runtime/samples/each-block-keyed-random-permute/_config.js index 80bf2d91151a..4e6830a61682 100644 --- a/test/runtime/samples/each-block-keyed-random-permute/_config.js +++ b/test/runtime/samples/each-block-keyed-random-permute/_config.js @@ -19,7 +19,7 @@ function permute() { export default { props: { - values: toObjects('abc'), + values: toObjects('abc') }, html: `(a)(b)(c)`, diff --git a/test/runtime/samples/each-block-keyed-shift/_config.js b/test/runtime/samples/each-block-keyed-shift/_config.js index 44ca8447f0d6..4e7809445c49 100644 --- a/test/runtime/samples/each-block-keyed-shift/_config.js +++ b/test/runtime/samples/each-block-keyed-shift/_config.js @@ -1,6 +1,6 @@ export default { props: { - titles: [{ name: 'a', }, { name: 'b' }, { name: 'c' }] + titles: [{ name: 'a' }, { name: 'b' }, { name: 'c' }] }, html: ` diff --git a/test/runtime/samples/each-block-keyed-siblings/_config.js b/test/runtime/samples/each-block-keyed-siblings/_config.js index d87f8943da70..a52b6c404d50 100644 --- a/test/runtime/samples/each-block-keyed-siblings/_config.js +++ b/test/runtime/samples/each-block-keyed-siblings/_config.js @@ -1,7 +1,7 @@ export default { props: { ones: [{ text: '1' }], - twos: [{ text: '2' }], + twos: [{ text: '2' }] }, html: ` @@ -16,5 +16,5 @@ export default {

11
2
`); - }, + } }; diff --git a/test/runtime/samples/each-block-keyed-static/_config.js b/test/runtime/samples/each-block-keyed-static/_config.js index 629ea47ebb33..57800c454fa4 100644 --- a/test/runtime/samples/each-block-keyed-static/_config.js +++ b/test/runtime/samples/each-block-keyed-static/_config.js @@ -1,6 +1,6 @@ export default { props: { - x: [{ z: 1 }, { z: 2 }], + x: [{ z: 1 }, { z: 2 }] }, html: ` diff --git a/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js b/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js new file mode 100644 index 000000000000..384c2dd2b4cc --- /dev/null +++ b/test/runtime/samples/each-block-scope-shadow-bind-2/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` + Hello + + `, + ssrHtml: ` + Hello + + `, + async test({ assert, target, window }) { + const input = target.querySelector("input"); + input.value = "abcd"; + await input.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` + abcd + + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte b/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte new file mode 100644 index 000000000000..f5bff01e6cc2 --- /dev/null +++ b/test/runtime/samples/each-block-scope-shadow-bind-2/main.svelte @@ -0,0 +1,10 @@ + + +{#each a as { a }} + {a} + +{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js b/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js new file mode 100644 index 000000000000..92230a735c2c --- /dev/null +++ b/test/runtime/samples/each-block-scope-shadow-bind-3/_config.js @@ -0,0 +1,105 @@ +export default { + html: ` +
+ Hello World + + +
+
+ Sapper App + + +
+ `, + + ssrHtml: ` +
+ Hello World + + +
+
+ Sapper App + + +
+ `, + async test({ assert, target, window }) { + const [input1, input2, input3, input4] = target.querySelectorAll("input"); + input1.value = "Awesome"; + await input1.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` +
+ Awesome World + + +
+
+ Sapper App + + +
+ ` + ); + + input2.value = "Svelte"; + await input2.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` +
+ Awesome Svelte + + +
+
+ Sapper App + + +
+ ` + ); + + input3.value = "Foo"; + await input3.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` +
+ Awesome Svelte + + +
+
+ Foo App + + +
+ ` + ); + + input4.value = "Bar"; + await input4.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` +
+ Awesome Svelte + + +
+
+ Foo Bar + + +
+ ` + ); + } +}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte b/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte new file mode 100644 index 000000000000..2e8fe5e59193 --- /dev/null +++ b/test/runtime/samples/each-block-scope-shadow-bind-3/main.svelte @@ -0,0 +1,14 @@ + + +{#each a as a} +
+ {a[0]} {a[1]} + + +
+{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js b/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js new file mode 100644 index 000000000000..418fcbea4a27 --- /dev/null +++ b/test/runtime/samples/each-block-scope-shadow-bind-4/_config.js @@ -0,0 +1,64 @@ +export default { + html: ` +
+ b: Hello + +
+ + `, + ssrHtml: ` +
+ b: Hello + +
+ + `, + async test({ assert, target, window }) { + const input = target.querySelector("input"); + const button = target.querySelector("button"); + + input.value = "Awesome"; + await input.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` +
+ b: Awesome + +
+ + ` + ); + + + await button.dispatchEvent(new window.MouseEvent("click")); + + assert.htmlEqual( + target.innerHTML, + ` +
+ c: World + +
+ + ` + ); + + assert.equal(input.value, 'World'); + + input.value = "Svelte"; + await input.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` +
+ c: Svelte + +
+ + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte b/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte new file mode 100644 index 000000000000..bc4f172dd020 --- /dev/null +++ b/test/runtime/samples/each-block-scope-shadow-bind-4/main.svelte @@ -0,0 +1,14 @@ + + +{#each a as { a, key }} +
+ {key}: {a[key]} + +
+{/each} + + \ No newline at end of file diff --git a/test/runtime/samples/each-block-scope-shadow-bind/_config.js b/test/runtime/samples/each-block-scope-shadow-bind/_config.js new file mode 100644 index 000000000000..384c2dd2b4cc --- /dev/null +++ b/test/runtime/samples/each-block-scope-shadow-bind/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` + Hello + + `, + ssrHtml: ` + Hello + + `, + async test({ assert, target, window }) { + const input = target.querySelector("input"); + input.value = "abcd"; + await input.dispatchEvent(new window.Event("input")); + + assert.htmlEqual( + target.innerHTML, + ` + abcd + + ` + ); + } +}; diff --git a/test/runtime/samples/each-block-scope-shadow-bind/main.svelte b/test/runtime/samples/each-block-scope-shadow-bind/main.svelte new file mode 100644 index 000000000000..f3471e179f3b --- /dev/null +++ b/test/runtime/samples/each-block-scope-shadow-bind/main.svelte @@ -0,0 +1,10 @@ + + +{#each a as a} + {a} + +{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-block-scope-shadow-self/_config.js b/test/runtime/samples/each-block-scope-shadow-self/_config.js index 1669dc5b6eb1..867aadfab9d5 100644 --- a/test/runtime/samples/each-block-scope-shadow-self/_config.js +++ b/test/runtime/samples/each-block-scope-shadow-self/_config.js @@ -9,5 +9,5 @@ export default { assert.equal(target.querySelectorAll('input').length, 3); assert.deepEqual(component.data, { a: 'svelte', b: 'B', c: 'C' }); assert.deepEqual(component.x, ['a', 'b', 'c']); - }, + } }; diff --git a/test/runtime/samples/each-blocks-assignment-2/_config.js b/test/runtime/samples/each-blocks-assignment-2/_config.js new file mode 100644 index 000000000000..083161726173 --- /dev/null +++ b/test/runtime/samples/each-blocks-assignment-2/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` + foo + + `, + async test({ assert, component, target, window }) { + const button = target.querySelector("button"); + + const clickEvent = new window.MouseEvent("click"); + await button.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + bar + + ` + ); + } +}; diff --git a/test/runtime/samples/each-blocks-assignment-2/main.svelte b/test/runtime/samples/each-blocks-assignment-2/main.svelte new file mode 100644 index 000000000000..5ef3ae83acc3 --- /dev/null +++ b/test/runtime/samples/each-blocks-assignment-2/main.svelte @@ -0,0 +1,12 @@ + + +{#each arr as o} + {o.prop} + +{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-blocks-assignment/_config.js b/test/runtime/samples/each-blocks-assignment/_config.js new file mode 100644 index 000000000000..2c95d486d67d --- /dev/null +++ b/test/runtime/samples/each-blocks-assignment/_config.js @@ -0,0 +1,97 @@ +export default { + html: ` + + 1 + + 2 + + 3 + + `, + async test({ assert, component, target, window }) { + let [incrementBtn, ...buttons] = target.querySelectorAll("button"); + + const clickEvent = new window.MouseEvent("click"); + await buttons[0].dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + + 2 + + 2 + + 3 + + ` + ); + + await buttons[0].dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + + 4 + + 2 + + 3 + + ` + ); + + await buttons[2].dispatchEvent(clickEvent); + await buttons[2].dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + + 4 + + 2 + + 12 + + ` + ); + + await incrementBtn.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + + 4 + + 2 + + 12 + + 4 + + ` + ); + + [incrementBtn, ...buttons] = target.querySelectorAll("button"); + + await buttons[3].dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + + 4 + + 2 + + 12 + + 8 + + ` + ); + } +}; diff --git a/test/runtime/samples/each-blocks-assignment/main.svelte b/test/runtime/samples/each-blocks-assignment/main.svelte new file mode 100644 index 000000000000..f74bffbe04f7 --- /dev/null +++ b/test/runtime/samples/each-blocks-assignment/main.svelte @@ -0,0 +1,13 @@ + + + +{#each arr as o} + {o} + +{/each} \ No newline at end of file diff --git a/test/runtime/samples/empty-dom/_config.js b/test/runtime/samples/empty-dom/_config.js index e3e3d0ecd521..7da2831db478 100644 --- a/test/runtime/samples/empty-dom/_config.js +++ b/test/runtime/samples/empty-dom/_config.js @@ -1,3 +1,3 @@ export default { - html: '', + html: '' }; \ No newline at end of file diff --git a/test/runtime/samples/empty-style-block/_config.js b/test/runtime/samples/empty-style-block/_config.js index 0375bad02998..22dc25b41e1f 100644 --- a/test/runtime/samples/empty-style-block/_config.js +++ b/test/runtime/samples/empty-style-block/_config.js @@ -1,3 +1,3 @@ export default { - html: '', + html: '' }; diff --git a/test/runtime/samples/escape-template-literals/_config.js b/test/runtime/samples/escape-template-literals/_config.js index 1419d656794a..9e50f9476440 100644 --- a/test/runtime/samples/escape-template-literals/_config.js +++ b/test/runtime/samples/escape-template-literals/_config.js @@ -1,3 +1,3 @@ export default { - html: '`${foo}\\n`\n
foo
\n
`${foo}\\n`
', + html: '`${foo}\\n`\n
foo
\n
`${foo}\\n`
' }; diff --git a/test/runtime/samples/event-handler-async/_config.js b/test/runtime/samples/event-handler-async/_config.js index fab4d998b605..b483d039edbf 100644 --- a/test/runtime/samples/event-handler-async/_config.js +++ b/test/runtime/samples/event-handler-async/_config.js @@ -1,5 +1,5 @@ export default { html: ` - `, + ` }; diff --git a/test/runtime/samples/event-handler-dynamic-2/_config.js b/test/runtime/samples/event-handler-dynamic-2/_config.js index c996d8f2aaec..5fded4785517 100644 --- a/test/runtime/samples/event-handler-dynamic-2/_config.js +++ b/test/runtime/samples/event-handler-dynamic-2/_config.js @@ -29,5 +29,5 @@ export default { await handler_b.dispatchEvent(event); assert.equal(p.innerHTML, '2'); - }, + } }; diff --git a/test/runtime/samples/event-handler-dynamic-bound-var/_config.js b/test/runtime/samples/event-handler-dynamic-bound-var/_config.js index c832127c092d..c490db000a92 100644 --- a/test/runtime/samples/event-handler-dynamic-bound-var/_config.js +++ b/test/runtime/samples/event-handler-dynamic-bound-var/_config.js @@ -16,5 +16,5 @@ export default { Bye World ` ); - }, + } }; diff --git a/test/runtime/samples/event-handler-dynamic-expression/_config.js b/test/runtime/samples/event-handler-dynamic-expression/_config.js index c4d259a54246..b202196ebf4d 100644 --- a/test/runtime/samples/event-handler-dynamic-expression/_config.js +++ b/test/runtime/samples/event-handler-dynamic-expression/_config.js @@ -16,5 +16,5 @@ export default { await button.dispatchEvent(event); assert.htmlEqual(target.innerHTML, ``); - }, + } }; diff --git a/test/runtime/samples/event-handler-dynamic-hash/_config.js b/test/runtime/samples/event-handler-dynamic-hash/_config.js index e60e5615245f..dcfebb700836 100644 --- a/test/runtime/samples/event-handler-dynamic-hash/_config.js +++ b/test/runtime/samples/event-handler-dynamic-hash/_config.js @@ -52,5 +52,5 @@ export default {

2

`); - }, + } }; diff --git a/test/runtime/samples/event-handler-dynamic-invalid/_config.js b/test/runtime/samples/event-handler-dynamic-invalid/_config.js index ba1777f94503..ad9d8c868028 100644 --- a/test/runtime/samples/event-handler-dynamic-invalid/_config.js +++ b/test/runtime/samples/event-handler-dynamic-invalid/_config.js @@ -24,5 +24,5 @@ export default { await buttonInvalid.dispatchEvent(event); assert.equal(err, "", err); - }, + } }; diff --git a/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js b/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js index 6d7d29e48288..6bd96ba8aa80 100644 --- a/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js +++ b/test/runtime/samples/event-handler-dynamic-modifier-self/_config.js @@ -12,5 +12,5 @@ export default { await button.dispatchEvent(event); assert.ok(!component.inner_clicked); - }, + } }; diff --git a/test/runtime/samples/event-handler-dynamic/_config.js b/test/runtime/samples/event-handler-dynamic/_config.js index e60e5615245f..dcfebb700836 100644 --- a/test/runtime/samples/event-handler-dynamic/_config.js +++ b/test/runtime/samples/event-handler-dynamic/_config.js @@ -52,5 +52,5 @@ export default {

2

`); - }, + } }; diff --git a/test/runtime/samples/event-handler-each-this/_config.js b/test/runtime/samples/event-handler-each-this/_config.js index 3ab2d5acdcff..7f6528977c08 100644 --- a/test/runtime/samples/event-handler-each-this/_config.js +++ b/test/runtime/samples/event-handler-each-this/_config.js @@ -1,6 +1,6 @@ export default { props: { - items: ['foo', 'bar', 'baz'], + items: ['foo', 'bar', 'baz'] }, html: ` diff --git a/test/runtime/samples/event-handler-modifier-self/_config.js b/test/runtime/samples/event-handler-modifier-self/_config.js index 6d7d29e48288..6bd96ba8aa80 100644 --- a/test/runtime/samples/event-handler-modifier-self/_config.js +++ b/test/runtime/samples/event-handler-modifier-self/_config.js @@ -12,5 +12,5 @@ export default { await button.dispatchEvent(event); assert.ok(!component.inner_clicked); - }, + } }; diff --git a/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js b/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js index d5f3def7f197..34cee8157c3d 100644 --- a/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js +++ b/test/runtime/samples/globals-not-overwritten-by-bindings/_config.js @@ -37,17 +37,17 @@ export default { todos: { first: { description: 'Buy some milk', - done: true, + done: true }, second: { description: 'Do the laundry', - done: true, + done: true }, third: { description: "Find life's true purpose", - done: false, - }, - }, + done: false + } + } }, async test({ assert, component, target, window }) { @@ -74,5 +74,5 @@ export default {
`); - }, + } }; diff --git a/test/runtime/samples/globals-shadowed-by-each-binding/_config.js b/test/runtime/samples/globals-shadowed-by-each-binding/_config.js index f69e5e8b0e19..50feb09bb6e9 100644 --- a/test/runtime/samples/globals-shadowed-by-each-binding/_config.js +++ b/test/runtime/samples/globals-shadowed-by-each-binding/_config.js @@ -1,3 +1,3 @@ export default { - html: '

Alert1

Alert2

', + html: '

Alert1

Alert2

' }; diff --git a/test/runtime/samples/if-block-component-store-function-conditionals/_config.js b/test/runtime/samples/if-block-component-store-function-conditionals/_config.js index db171f2fd18d..609765d2250f 100644 --- a/test/runtime/samples/if-block-component-store-function-conditionals/_config.js +++ b/test/runtime/samples/if-block-component-store-function-conditionals/_config.js @@ -1,3 +1,3 @@ export default { - html: '

OK

', + html: '

OK

' }; diff --git a/test/runtime/samples/if-block-component-without-outro/_config.js b/test/runtime/samples/if-block-component-without-outro/_config.js index 8106081c7c47..fbcc328fa31f 100644 --- a/test/runtime/samples/if-block-component-without-outro/_config.js +++ b/test/runtime/samples/if-block-component-without-outro/_config.js @@ -1,6 +1,6 @@ export default { props: { - foo: true, + foo: true }, html: '
A wild component appears
', @@ -8,5 +8,5 @@ export default { test({ assert, component, target }) { component.foo = false; assert.htmlEqual(target.innerHTML, ''); - }, + } }; diff --git a/test/runtime/samples/if-block-else-in-each/_config.js b/test/runtime/samples/if-block-else-in-each/_config.js index 44268f32b9cb..e75dcb15ee6f 100644 --- a/test/runtime/samples/if-block-else-in-each/_config.js +++ b/test/runtime/samples/if-block-else-in-each/_config.js @@ -1,9 +1,9 @@ export default { props: { - array: [true, false], + array: [true, false] }, html: `
foo
bar
- `, + ` }; diff --git a/test/runtime/samples/if-block-else-partial-outro/_config.js b/test/runtime/samples/if-block-else-partial-outro/_config.js index a358680edf1b..ae58d25c232f 100644 --- a/test/runtime/samples/if-block-else-partial-outro/_config.js +++ b/test/runtime/samples/if-block-else-partial-outro/_config.js @@ -1,7 +1,7 @@ export default { props: { x: 1, - y: false, + y: false }, html: ` @@ -13,5 +13,5 @@ export default { assert.htmlEqual(target.innerHTML, ` 2 `); - }, + } }; diff --git a/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js b/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js index b2e71ea01f35..da80f5be1202 100644 --- a/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js +++ b/test/runtime/samples/if-block-no-outro-else-with-outro/_config.js @@ -18,5 +18,5 @@ export default {

y

`); - }, + } }; diff --git a/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js b/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js index b94da1a576f4..15213e19b375 100644 --- a/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js +++ b/test/runtime/samples/if-block-outro-unique-select-block-type/_config.js @@ -2,5 +2,5 @@ export default { html: `
- `, + ` }; diff --git a/test/runtime/samples/initial-state-assign/_config.js b/test/runtime/samples/initial-state-assign/_config.js index b4067fef8021..95a1a5e068ef 100644 --- a/test/runtime/samples/initial-state-assign/_config.js +++ b/test/runtime/samples/initial-state-assign/_config.js @@ -3,5 +3,5 @@ export default { html: ` "foo" "bar" - `, + ` }; diff --git a/test/runtime/samples/innerhtml-with-comments/_config.js b/test/runtime/samples/innerhtml-with-comments/_config.js new file mode 100644 index 000000000000..95d4a6fa968d --- /dev/null +++ b/test/runtime/samples/innerhtml-with-comments/_config.js @@ -0,0 +1,8 @@ +export default { + html: ` + + Style: + Bootstrap. + + ` +}; \ No newline at end of file diff --git a/test/runtime/samples/innerhtml-with-comments/main.svelte b/test/runtime/samples/innerhtml-with-comments/main.svelte new file mode 100644 index 000000000000..e00f7550726d --- /dev/null +++ b/test/runtime/samples/innerhtml-with-comments/main.svelte @@ -0,0 +1,5 @@ + + Style: + + Bootstrap. + \ No newline at end of file diff --git a/test/runtime/samples/lifecycle-render-order-for-children/_config.js b/test/runtime/samples/lifecycle-render-order-for-children/_config.js index 033b593aeacb..d182d5a97eb8 100644 --- a/test/runtime/samples/lifecycle-render-order-for-children/_config.js +++ b/test/runtime/samples/lifecycle-render-order-for-children/_config.js @@ -21,7 +21,7 @@ export default { '3: onMount', '3: afterUpdate', '0: onMount', - '0: afterUpdate', + '0: afterUpdate' ]); } else { assert.deepEqual(order, [ @@ -40,10 +40,10 @@ export default { '3: onMount', '3: afterUpdate', '0: onMount', - '0: afterUpdate', + '0: afterUpdate' ]); } order.length = 0; - }, + } }; diff --git a/test/runtime/samples/loop-protect-generator-opt-out/_config.js b/test/runtime/samples/loop-protect-generator-opt-out/_config.js index 9b6a24b51315..0fe83a36dbd9 100644 --- a/test/runtime/samples/loop-protect-generator-opt-out/_config.js +++ b/test/runtime/samples/loop-protect-generator-opt-out/_config.js @@ -1,6 +1,6 @@ export default { compileOptions: { dev: true, - loopGuardTimeout: 1, - }, + loopGuardTimeout: 1 + } }; diff --git a/test/runtime/samples/loop-protect-inner-function/_config.js b/test/runtime/samples/loop-protect-inner-function/_config.js index 862d4f4c0f44..1b553e247513 100644 --- a/test/runtime/samples/loop-protect-inner-function/_config.js +++ b/test/runtime/samples/loop-protect-inner-function/_config.js @@ -2,6 +2,6 @@ export default { html: '
', compileOptions: { dev: true, - loopGuardTimeout: 100, + loopGuardTimeout: 100 } }; diff --git a/test/runtime/samples/loop-protect/_config.js b/test/runtime/samples/loop-protect/_config.js index 75f75c003d93..230bbeb53d8f 100644 --- a/test/runtime/samples/loop-protect/_config.js +++ b/test/runtime/samples/loop-protect/_config.js @@ -2,6 +2,6 @@ export default { error: 'Infinite loop detected', compileOptions: { dev: true, - loopGuardTimeout: 100, + loopGuardTimeout: 100 } }; diff --git a/test/runtime/samples/nested-transition-detach-each/_config.js b/test/runtime/samples/nested-transition-detach-each/_config.js index e17fe1bc4d5b..00c2d44048ac 100644 --- a/test/runtime/samples/nested-transition-detach-each/_config.js +++ b/test/runtime/samples/nested-transition-detach-each/_config.js @@ -35,5 +35,5 @@ export default { raf.tick(0); raf.tick(100); assert.htmlEqual(target.innerHTML, ``); - }, + } }; diff --git a/test/runtime/samples/nested-transition-detach-if-false/_config.js b/test/runtime/samples/nested-transition-detach-if-false/_config.js index d2ae78ffe385..1d420941922a 100644 --- a/test/runtime/samples/nested-transition-detach-if-false/_config.js +++ b/test/runtime/samples/nested-transition-detach-if-false/_config.js @@ -20,5 +20,5 @@ export default { a `); - }, + } }; diff --git a/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js b/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js index 6696389e6e09..30ff83b39f72 100644 --- a/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js +++ b/test/runtime/samples/nested-transition-if-block-not-remounted/_config.js @@ -20,5 +20,5 @@ export default { }; component.value = 'two'; - }, + } }; diff --git a/test/runtime/samples/noscript-removal/_config.js b/test/runtime/samples/noscript-removal/_config.js index 35bdcefd9639..709792c14a65 100644 --- a/test/runtime/samples/noscript-removal/_config.js +++ b/test/runtime/samples/noscript-removal/_config.js @@ -5,5 +5,5 @@ export default {
foo
foo
foo
-`, +` }; diff --git a/test/runtime/samples/paren-wrapped-expressions/_config.js b/test/runtime/samples/paren-wrapped-expressions/_config.js index 0c757dc85499..972dc51cb022 100644 --- a/test/runtime/samples/paren-wrapped-expressions/_config.js +++ b/test/runtime/samples/paren-wrapped-expressions/_config.js @@ -2,7 +2,7 @@ export default { props: { a: 'foo', b: true, - c: [ 1, 2, 3 ], + c: [ 1, 2, 3 ] }, html: ` diff --git a/test/runtime/samples/prop-exports/_config.js b/test/runtime/samples/prop-exports/_config.js index e1620c015fa6..69a40c4fabf3 100644 --- a/test/runtime/samples/prop-exports/_config.js +++ b/test/runtime/samples/prop-exports/_config.js @@ -10,7 +10,7 @@ export default { a2: 4, a6: writable(29), for: 'loop', - continue: '...', + continue: '...' }, html: ` diff --git a/test/runtime/samples/props-reactive-only-with-change/Comp.svelte b/test/runtime/samples/props-reactive-only-with-change/Comp.svelte new file mode 100644 index 000000000000..0eaf8a40d48a --- /dev/null +++ b/test/runtime/samples/props-reactive-only-with-change/Comp.svelte @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/test/runtime/samples/props-reactive-only-with-change/_config.js b/test/runtime/samples/props-reactive-only-with-change/_config.js new file mode 100644 index 000000000000..d2e86e583d5e --- /dev/null +++ b/test/runtime/samples/props-reactive-only-with-change/_config.js @@ -0,0 +1,30 @@ +let callbacks = []; + +export default { + props: { + callback: (value) => callbacks.push(value), + val1: "1", + val2: "2" + }, + + before_test() { + callbacks = []; + }, + + async test({ assert, component, target }) { + assert.equal(callbacks.length, 2); + assert.equal(JSON.stringify(callbacks), '["1","2"]'); + + component.val1 = "3"; + assert.equal(callbacks.length, 3); + assert.equal(JSON.stringify(callbacks), '["1","2","1"]'); + + component.val1 = "4"; + assert.equal(callbacks.length, 4); + assert.equal(JSON.stringify(callbacks), '["1","2","1","1"]'); + + component.val2 = "5"; + assert.equal(callbacks.length, 5); + assert.equal(JSON.stringify(callbacks), '["1","2","1","1","2"]'); + } +}; diff --git a/test/runtime/samples/props-reactive-only-with-change/main.svelte b/test/runtime/samples/props-reactive-only-with-change/main.svelte new file mode 100644 index 000000000000..73ddd137f5bc --- /dev/null +++ b/test/runtime/samples/props-reactive-only-with-change/main.svelte @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/test/runtime/samples/props-reactive-slot/Comp.svelte b/test/runtime/samples/props-reactive-slot/Comp.svelte new file mode 100644 index 000000000000..bf9e12a58a80 --- /dev/null +++ b/test/runtime/samples/props-reactive-slot/Comp.svelte @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/runtime/samples/props-reactive-slot/_config.js b/test/runtime/samples/props-reactive-slot/_config.js new file mode 100644 index 000000000000..8ee6ef69dc1b --- /dev/null +++ b/test/runtime/samples/props-reactive-slot/_config.js @@ -0,0 +1,21 @@ +export default { + html: ` +

hi

+ + `, + + async test({ assert, component, target, window }) { + const btn = target.querySelector("button"); + const clickEvent = new window.MouseEvent("click"); + + await btn.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` +

changed

+ + ` + ); + } +}; diff --git a/test/runtime/samples/props-reactive-slot/main.svelte b/test/runtime/samples/props-reactive-slot/main.svelte new file mode 100644 index 000000000000..84777bf8abe0 --- /dev/null +++ b/test/runtime/samples/props-reactive-slot/main.svelte @@ -0,0 +1,13 @@ + + + +

+ {props.someprop} +

+
+ + \ No newline at end of file diff --git a/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte b/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte new file mode 100644 index 000000000000..d94954f49b24 --- /dev/null +++ b/test/runtime/samples/raw-mustache-as-root/RawMustache.svelte @@ -0,0 +1,5 @@ + + +{@html content} \ No newline at end of file diff --git a/test/runtime/samples/raw-mustache-as-root/_config.js b/test/runtime/samples/raw-mustache-as-root/_config.js new file mode 100644 index 000000000000..e42fa7f5177e --- /dev/null +++ b/test/runtime/samples/raw-mustache-as-root/_config.js @@ -0,0 +1,33 @@ +export default { + html: ` + +

Another first line

+

This line should be last.

+ `, + async test({ assert, target, window }) { + const btn = target.querySelector("button"); + const clickEvent = new window.MouseEvent("click"); + + await btn.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + +

First line

+

This line should be last.

+ ` + ); + + await btn.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + +

Another first line

+

This line should be last.

+ ` + ); + } +}; diff --git a/test/runtime/samples/raw-mustache-as-root/main.svelte b/test/runtime/samples/raw-mustache-as-root/main.svelte new file mode 100644 index 000000000000..7ccce0cd9be9 --- /dev/null +++ b/test/runtime/samples/raw-mustache-as-root/main.svelte @@ -0,0 +1,17 @@ + + + + + + +

This line should be last.

\ No newline at end of file diff --git a/test/runtime/samples/raw-mustache-inside-head/_config.js b/test/runtime/samples/raw-mustache-inside-head/_config.js new file mode 100644 index 000000000000..7923fc72380e --- /dev/null +++ b/test/runtime/samples/raw-mustache-inside-head/_config.js @@ -0,0 +1,16 @@ +export default { + async test({ assert, target, window }) { + const btn = target.querySelector("button"); + const clickEvent = new window.MouseEvent("click"); + + assert.equal(window.document.head.innerHTML.includes(''), true); + + await btn.dispatchEvent(clickEvent); + + assert.equal(window.document.head.innerHTML.includes(''), true); + + await btn.dispatchEvent(clickEvent); + + assert.equal(window.document.head.innerHTML.includes(''), true); + } +}; diff --git a/test/runtime/samples/raw-mustache-inside-head/main.svelte b/test/runtime/samples/raw-mustache-inside-head/main.svelte new file mode 100644 index 000000000000..25b9fdeee93c --- /dev/null +++ b/test/runtime/samples/raw-mustache-inside-head/main.svelte @@ -0,0 +1,16 @@ + + + + + + {@html content} + + diff --git a/test/runtime/samples/raw-mustache-inside-slot/Component.svelte b/test/runtime/samples/raw-mustache-inside-slot/Component.svelte new file mode 100644 index 000000000000..fcabccae4898 --- /dev/null +++ b/test/runtime/samples/raw-mustache-inside-slot/Component.svelte @@ -0,0 +1,2 @@ + +

This line should be last.

\ No newline at end of file diff --git a/test/runtime/samples/raw-mustache-inside-slot/_config.js b/test/runtime/samples/raw-mustache-inside-slot/_config.js new file mode 100644 index 000000000000..e42fa7f5177e --- /dev/null +++ b/test/runtime/samples/raw-mustache-inside-slot/_config.js @@ -0,0 +1,33 @@ +export default { + html: ` + +

Another first line

+

This line should be last.

+ `, + async test({ assert, target, window }) { + const btn = target.querySelector("button"); + const clickEvent = new window.MouseEvent("click"); + + await btn.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + +

First line

+

This line should be last.

+ ` + ); + + await btn.dispatchEvent(clickEvent); + + assert.htmlEqual( + target.innerHTML, + ` + +

Another first line

+

This line should be last.

+ ` + ); + } +}; diff --git a/test/runtime/samples/raw-mustache-inside-slot/main.svelte b/test/runtime/samples/raw-mustache-inside-slot/main.svelte new file mode 100644 index 000000000000..a022a68e9597 --- /dev/null +++ b/test/runtime/samples/raw-mustache-inside-slot/main.svelte @@ -0,0 +1,17 @@ + + + + + + {@html content} + \ No newline at end of file diff --git a/test/runtime/samples/raw-mustaches-td-tr/_config.js b/test/runtime/samples/raw-mustaches-td-tr/_config.js new file mode 100644 index 000000000000..1bcad157f391 --- /dev/null +++ b/test/runtime/samples/raw-mustaches-td-tr/_config.js @@ -0,0 +1,18 @@ +export default { + props: { + raw: "12" + }, + + html: ` + + + + + + + + + +
57
12
+ ` +}; diff --git a/test/runtime/samples/raw-mustaches-td-tr/main.svelte b/test/runtime/samples/raw-mustaches-td-tr/main.svelte new file mode 100644 index 000000000000..07d7299e439c --- /dev/null +++ b/test/runtime/samples/raw-mustaches-td-tr/main.svelte @@ -0,0 +1,12 @@ + + + + + + + + {@html raw} + +
57
\ No newline at end of file diff --git a/test/runtime/samples/reactive-function-called-reassigned/_config.js b/test/runtime/samples/reactive-function-called-reassigned/_config.js new file mode 100644 index 000000000000..7b2a8b72fe08 --- /dev/null +++ b/test/runtime/samples/reactive-function-called-reassigned/_config.js @@ -0,0 +1,27 @@ +let value; +let called = 0; +function callback(_value) { + called ++; + value = _value; +} + +export default { + props: { + callback + }, + async test({ assert, component, target, window }) { + assert.equal(called, 1); + + const input = target.querySelector('input'); + + const event = new window.Event('input'); + input.value = 'h'; + await input.dispatchEvent(event); + + assert.equal(called, 2); + assert.equal(value.length, 3); + assert.equal(value[0], 'h'); + assert.equal(value[1], '2'); + assert.equal(value[2], '3'); + } +}; diff --git a/test/runtime/samples/reactive-function-called-reassigned/main.svelte b/test/runtime/samples/reactive-function-called-reassigned/main.svelte new file mode 100644 index 000000000000..10a3c79d1498 --- /dev/null +++ b/test/runtime/samples/reactive-function-called-reassigned/main.svelte @@ -0,0 +1,10 @@ + + +{#each refs as ref} + +{/each} \ No newline at end of file diff --git a/test/runtime/samples/reactive-import-statement/_config.js b/test/runtime/samples/reactive-import-statement/_config.js index 7fb8097ca58a..45a844afa0b7 100644 --- a/test/runtime/samples/reactive-import-statement/_config.js +++ b/test/runtime/samples/reactive-import-statement/_config.js @@ -11,7 +11,7 @@ export default { before_test() { delete require.cache[path.resolve(__dirname, 'data.js')]; }, - async test({ assert, target, window, }) { + async test({ assert, target, window }) { const btn = target.querySelector('button'); const clickEvent = new window.MouseEvent('click'); diff --git a/test/runtime/samples/reactive-value-assign-property/_config.js b/test/runtime/samples/reactive-value-assign-property/_config.js new file mode 100644 index 000000000000..b6d8bf51be73 --- /dev/null +++ b/test/runtime/samples/reactive-value-assign-property/_config.js @@ -0,0 +1,5 @@ +export default { + html: ` +

Hello world!

+ ` +}; diff --git a/test/runtime/samples/reactive-value-assign-property/main.svelte b/test/runtime/samples/reactive-value-assign-property/main.svelte new file mode 100644 index 000000000000..58e0fdb03c39 --- /dev/null +++ b/test/runtime/samples/reactive-value-assign-property/main.svelte @@ -0,0 +1,6 @@ + + +

Hello {user.name}!

\ No newline at end of file diff --git a/test/runtime/samples/self-reference-component/_config.js b/test/runtime/samples/self-reference-component/_config.js index e3e0ad3a4f2a..e9cd0ac440fc 100644 --- a/test/runtime/samples/self-reference-component/_config.js +++ b/test/runtime/samples/self-reference-component/_config.js @@ -1,3 +1,3 @@ export default { - html: '5 4 3 2 1 0', + html: '5 4 3 2 1 0' }; \ No newline at end of file diff --git a/test/runtime/samples/set-undefined-attr/_config.js b/test/runtime/samples/set-undefined-attr/_config.js index b23f51dfc962..a0df368e65d4 100644 --- a/test/runtime/samples/set-undefined-attr/_config.js +++ b/test/runtime/samples/set-undefined-attr/_config.js @@ -1,5 +1,5 @@ export default { html: `
`, - ssrHtml: `
`, + ssrHtml: `
` }; diff --git a/test/runtime/samples/sigil-component-prop/_config.js b/test/runtime/samples/sigil-component-prop/_config.js index 2f467bb9d4dd..9f84a5999454 100644 --- a/test/runtime/samples/sigil-component-prop/_config.js +++ b/test/runtime/samples/sigil-component-prop/_config.js @@ -3,5 +3,5 @@ export default { dev: true }, props: { foo: 'foo' }, - html: `
foo @ foo # foo
`, + html: `
foo @ foo # foo
` }; diff --git a/test/runtime/samples/slot-if-block-update-no-anchor/_config.js b/test/runtime/samples/slot-if-block-update-no-anchor/_config.js index 060cbaa6192a..58d2b49adebc 100644 --- a/test/runtime/samples/slot-if-block-update-no-anchor/_config.js +++ b/test/runtime/samples/slot-if-block-update-no-anchor/_config.js @@ -3,5 +3,5 @@ export default { assert.htmlEqual(target.innerHTML, ``); component.enabled = true; assert.htmlEqual(target.innerHTML, `enabled`); - }, + } }; diff --git a/test/runtime/samples/spread-component-2/_config.js b/test/runtime/samples/spread-component-2/_config.js index 6d36e8e60dfb..e5441bc4b9c9 100644 --- a/test/runtime/samples/spread-component-2/_config.js +++ b/test/runtime/samples/spread-component-2/_config.js @@ -10,7 +10,7 @@ export default { baz: 50 + 2, qux: 1, quux: 'quuxx' - }], + }] }, html: ` diff --git a/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js b/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js index c5e23a023cbc..d7ad47b01f4d 100644 --- a/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js +++ b/test/runtime/samples/spread-component-dynamic-non-object-multiple-dependencies/_config.js @@ -2,7 +2,7 @@ export default { props: { props: { foo: 'lol', - baz: 40 + 2, + baz: 40 + 2 } }, diff --git a/test/runtime/samples/spread-component-dynamic-non-object/_config.js b/test/runtime/samples/spread-component-dynamic-non-object/_config.js index 094f2fbb9bde..fa8de8ad942a 100644 --- a/test/runtime/samples/spread-component-dynamic-non-object/_config.js +++ b/test/runtime/samples/spread-component-dynamic-non-object/_config.js @@ -2,7 +2,7 @@ export default { props: { props: { foo: 'lol', - baz: 40 + 2, + baz: 40 + 2 } }, diff --git a/test/runtime/samples/spread-component-dynamic-undefined/_config.js b/test/runtime/samples/spread-component-dynamic-undefined/_config.js index 09e5f87c14a3..e7e205a34bf0 100644 --- a/test/runtime/samples/spread-component-dynamic-undefined/_config.js +++ b/test/runtime/samples/spread-component-dynamic-undefined/_config.js @@ -1,17 +1,17 @@ export default { props: { props: { - a: 1, - }, + a: 1 + } }, html: ``, test({ assert, component, target }) { component.props = { - a: 2, + a: 2 }; assert.htmlEqual(target.innerHTML, ``); - }, + } }; diff --git a/test/runtime/samples/spread-component-dynamic/_config.js b/test/runtime/samples/spread-component-dynamic/_config.js index a6bf952ae03a..08df27e1c2e9 100644 --- a/test/runtime/samples/spread-component-dynamic/_config.js +++ b/test/runtime/samples/spread-component-dynamic/_config.js @@ -1,8 +1,8 @@ export default { props: { props: { - a: 1, - }, + a: 1 + } }, html: ` @@ -11,9 +11,9 @@ export default { test({ assert, component, target }) { component.props = { - a: 2, + a: 2 }; assert.htmlEqual(target.innerHTML, `

a: 2

`); - }, + } }; diff --git a/test/runtime/samples/spread-component-multiple-dependencies/_config.js b/test/runtime/samples/spread-component-multiple-dependencies/_config.js index bc05f31130a4..070916ebd88e 100644 --- a/test/runtime/samples/spread-component-multiple-dependencies/_config.js +++ b/test/runtime/samples/spread-component-multiple-dependencies/_config.js @@ -6,5 +6,5 @@ export default { target.innerHTML, `a baz` ); - }, + } }; diff --git a/test/runtime/samples/spread-each-component/_config.js b/test/runtime/samples/spread-each-component/_config.js index bc4d8ee7a4ee..66d2381875f0 100644 --- a/test/runtime/samples/spread-each-component/_config.js +++ b/test/runtime/samples/spread-each-component/_config.js @@ -20,5 +20,5 @@ export default {
`); - }, + } }; diff --git a/test/runtime/samples/spread-each-element/_config.js b/test/runtime/samples/spread-each-element/_config.js index 5dbd82a89295..579f84009952 100644 --- a/test/runtime/samples/spread-each-element/_config.js +++ b/test/runtime/samples/spread-each-element/_config.js @@ -20,5 +20,5 @@ export default {
`); - }, + } }; diff --git a/test/runtime/samples/spread-element-boolean/_config.js b/test/runtime/samples/spread-element-boolean/_config.js index 3ee277eec4e1..d336dae029c9 100644 --- a/test/runtime/samples/spread-element-boolean/_config.js +++ b/test/runtime/samples/spread-element-boolean/_config.js @@ -21,5 +21,5 @@ export default { `` ); assert.ok(!button.disabled); - }, + } }; diff --git a/test/runtime/samples/spread-element-input-select-multiple/_config.js b/test/runtime/samples/spread-element-input-select-multiple/_config.js new file mode 100644 index 000000000000..1ddcd9eb6d76 --- /dev/null +++ b/test/runtime/samples/spread-element-input-select-multiple/_config.js @@ -0,0 +1,39 @@ +export default { + async test({ assert, component, target, window }) { + const [input1, input2] = target.querySelectorAll('input'); + const select = target.querySelector('select'); + const [option1, option2] = select.childNodes; + + let selections = Array.from(select.selectedOptions); + assert.equal(selections.length, 2); + assert.ok(selections.includes(option1)); + assert.ok(selections.includes(option2)); + + const event = new window.Event('change'); + + input1.checked = false; + await input1.dispatchEvent(event); + + selections = Array.from(select.selectedOptions); + assert.equal(selections.length, 1); + assert.ok(!selections.includes(option1)); + assert.ok(selections.includes(option2)); + + input2.checked = false; + await input2.dispatchEvent(event); + input1.checked = true; + await input1.dispatchEvent(event); + + selections = Array.from(select.selectedOptions); + assert.equal(selections.length, 1); + assert.ok(selections.includes(option1)); + assert.ok(!selections.includes(option2)); + + component.spread = { value: ['Hello', 'World'] }; + + selections = Array.from(select.selectedOptions); + assert.equal(selections.length, 2); + assert.ok(selections.includes(option1)); + assert.ok(selections.includes(option2)); + } +}; diff --git a/test/runtime/samples/spread-element-input-select-multiple/main.svelte b/test/runtime/samples/spread-element-input-select-multiple/main.svelte new file mode 100644 index 000000000000..d2fb12dd204d --- /dev/null +++ b/test/runtime/samples/spread-element-input-select-multiple/main.svelte @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/test/runtime/samples/spread-element-input-value-undefined/_config.js b/test/runtime/samples/spread-element-input-value-undefined/_config.js new file mode 100644 index 000000000000..d66e215cde35 --- /dev/null +++ b/test/runtime/samples/spread-element-input-value-undefined/_config.js @@ -0,0 +1,12 @@ +export default { + async test({ assert, component, target, window }) { + const input = target.querySelector("input"); + component.value = undefined; + + assert.equal(input.value, "undefined"); + + component.value = "foobar"; + + assert.equal(input.value, "foobar"); + } +}; diff --git a/test/runtime/samples/spread-element-input-value-undefined/main.svelte b/test/runtime/samples/spread-element-input-value-undefined/main.svelte new file mode 100644 index 000000000000..5c9121dc031a --- /dev/null +++ b/test/runtime/samples/spread-element-input-value-undefined/main.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/spread-element-input-value/InputOne.svelte b/test/runtime/samples/spread-element-input-value/InputOne.svelte new file mode 100644 index 000000000000..92ecb7b9a98a --- /dev/null +++ b/test/runtime/samples/spread-element-input-value/InputOne.svelte @@ -0,0 +1,18 @@ + + + diff --git a/test/runtime/samples/spread-element-input-value/InputTwo.svelte b/test/runtime/samples/spread-element-input-value/InputTwo.svelte new file mode 100644 index 000000000000..33ec0622a46a --- /dev/null +++ b/test/runtime/samples/spread-element-input-value/InputTwo.svelte @@ -0,0 +1,19 @@ + + + diff --git a/test/runtime/samples/spread-element-input-value/_config.js b/test/runtime/samples/spread-element-input-value/_config.js new file mode 100644 index 000000000000..abb63ceab341 --- /dev/null +++ b/test/runtime/samples/spread-element-input-value/_config.js @@ -0,0 +1,62 @@ +export default { + async test({ assert, component, target, window }) { + const [input1, input2] = target.querySelectorAll("input"); + + // we are not able emulate user interaction in jsdom, + // therefore, jsdom could not validate minlength / maxlength + + // we simulate user input with + // setting input.value + dispathEvent + + // and we determine if svelte does not set the `input.value` again by + // spying on the setter of `input.value` + + const spy1 = spyOnValueSetter(input1, input1.value); + const spy2 = spyOnValueSetter(input2, input2.value); + + const event = new window.Event("input"); + + input1.value = '12345'; + spy1.reset(); + await input1.dispatchEvent(event); + + assert.ok(!spy1.isSetCalled()); + + input2.value = '12345'; + spy2.reset(); + await input2.dispatchEvent(event); + + assert.ok(!spy2.isSetCalled()); + + spy1.reset(); + component.val1 = '56789'; + assert.ok(spy1.isSetCalled()); + + spy2.reset(); + component.val2 = '56789'; + assert.ok(spy2.isSetCalled()); + } +}; + +function spyOnValueSetter(input, initialValue) { + let value = initialValue; + let isSet = false; + Object.defineProperty(input, "value", { + get() { + return value; + }, + set(_value) { + value = _value; + isSet = true; + } + }); + + return { + isSetCalled() { + return isSet; + }, + reset() { + isSet = false; + } + }; +} diff --git a/test/runtime/samples/spread-element-input-value/main.svelte b/test/runtime/samples/spread-element-input-value/main.svelte new file mode 100644 index 000000000000..bb5f0e00bf48 --- /dev/null +++ b/test/runtime/samples/spread-element-input-value/main.svelte @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/test/runtime/samples/spread-element-input-value/utils.js b/test/runtime/samples/spread-element-input-value/utils.js new file mode 100644 index 000000000000..ee941bda5545 --- /dev/null +++ b/test/runtime/samples/spread-element-input-value/utils.js @@ -0,0 +1,6 @@ +export function omit(obj, ...keysToOmit) { + return Object.keys(obj).reduce((acc, key) => { + if (keysToOmit.indexOf(key) === -1) acc[key] = obj[key]; + return acc; + }, {}); +} diff --git a/test/runtime/samples/spread-element-multiple-dependencies/_config.js b/test/runtime/samples/spread-element-multiple-dependencies/_config.js index 69ef1f8ebefa..480eb6621c49 100644 --- a/test/runtime/samples/spread-element-multiple-dependencies/_config.js +++ b/test/runtime/samples/spread-element-multiple-dependencies/_config.js @@ -6,5 +6,5 @@ export default { target.innerHTML, `
` ); - }, + } }; diff --git a/test/runtime/samples/spread-element-multiple/_config.js b/test/runtime/samples/spread-element-multiple/_config.js index 641f74d72758..0c04b16d4009 100644 --- a/test/runtime/samples/spread-element-multiple/_config.js +++ b/test/runtime/samples/spread-element-multiple/_config.js @@ -2,12 +2,12 @@ export default { props: { a: { 'data-one': 1, - 'data-two': 2, + 'data-two': 2 }, c: { - 'data-b': 'overridden', + 'data-b': 'overridden' }, - d: 'deeeeee', + d: 'deeeeee' }, html: ` @@ -27,5 +27,5 @@ export default { target.innerHTML, `
test
` ); - }, + } }; diff --git a/test/runtime/samples/store-auto-subscribe-event-callback/_config.js b/test/runtime/samples/store-auto-subscribe-event-callback/_config.js index 747ed3e4adff..7897036809be 100644 --- a/test/runtime/samples/store-auto-subscribe-event-callback/_config.js +++ b/test/runtime/samples/store-auto-subscribe-event-callback/_config.js @@ -18,5 +18,5 @@ export default { Dirty: true Valid: true `); - }, + } }; diff --git a/test/runtime/samples/store-each-binding-deep/_config.js b/test/runtime/samples/store-each-binding-deep/_config.js new file mode 100644 index 000000000000..70776940dd49 --- /dev/null +++ b/test/runtime/samples/store-each-binding-deep/_config.js @@ -0,0 +1,14 @@ +export default { + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + const event = new window.Event('input'); + input.value = 'changed'; + await input.dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + +

changed

+ `); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/store-each-binding-deep/main.svelte b/test/runtime/samples/store-each-binding-deep/main.svelte new file mode 100644 index 000000000000..8f1cabf5b809 --- /dev/null +++ b/test/runtime/samples/store-each-binding-deep/main.svelte @@ -0,0 +1,11 @@ + + +{#each $itemStore.prop.things as thing } + +{/each} + +

{$itemStore.prop.things[0].name}

\ No newline at end of file diff --git a/test/runtime/samples/store-imports-hoisted/_config.js b/test/runtime/samples/store-imports-hoisted/_config.js new file mode 100644 index 000000000000..251866e5ba06 --- /dev/null +++ b/test/runtime/samples/store-imports-hoisted/_config.js @@ -0,0 +1,7 @@ +export default { + compileOptions: { dev: true }, // tests `@validate_store` code generation + + html: ` +

42

+ ` +}; \ No newline at end of file diff --git a/test/runtime/samples/store-imports-hoisted/foo.js b/test/runtime/samples/store-imports-hoisted/foo.js new file mode 100644 index 000000000000..5d15213c3a0f --- /dev/null +++ b/test/runtime/samples/store-imports-hoisted/foo.js @@ -0,0 +1,3 @@ +import { writable } from '../../../../store'; + +export default writable(42); \ No newline at end of file diff --git a/test/runtime/samples/store-imports-hoisted/main.svelte b/test/runtime/samples/store-imports-hoisted/main.svelte new file mode 100644 index 000000000000..223572962e8c --- /dev/null +++ b/test/runtime/samples/store-imports-hoisted/main.svelte @@ -0,0 +1,7 @@ + + +

{answer}

diff --git a/test/runtime/samples/store-resubscribe-b/_config.js b/test/runtime/samples/store-resubscribe-b/_config.js index d043bbcd8709..dd11a863f2b7 100644 --- a/test/runtime/samples/store-resubscribe-b/_config.js +++ b/test/runtime/samples/store-resubscribe-b/_config.js @@ -1,3 +1,3 @@ export default { - html: `42`, + html: `42` }; diff --git a/test/runtime/samples/store-resubscribe-export/_config.js b/test/runtime/samples/store-resubscribe-export/_config.js index b6e6f1134441..3c8473b3e154 100644 --- a/test/runtime/samples/store-resubscribe-export/_config.js +++ b/test/runtime/samples/store-resubscribe-export/_config.js @@ -6,14 +6,14 @@ const fakeStore = val => ({ return { unsubscribe: () => { subscribeCalled = true; - }, + } }; - }, + } }); export default { props: { - foo: fakeStore(1), + foo: fakeStore(1) }, html: `

1

@@ -23,5 +23,5 @@ export default { component.foo = fakeStore(5); return assert.htmlEqual(target.innerHTML, `

5

`); - }, + } }; diff --git a/test/runtime/samples/store-resubscribe-observable/_config.js b/test/runtime/samples/store-resubscribe-observable/_config.js index d043bbcd8709..dd11a863f2b7 100644 --- a/test/runtime/samples/store-resubscribe-observable/_config.js +++ b/test/runtime/samples/store-resubscribe-observable/_config.js @@ -1,3 +1,3 @@ export default { - html: `42`, + html: `42` }; diff --git a/test/runtime/samples/store-shadow-scope/_config.js b/test/runtime/samples/store-shadow-scope/_config.js new file mode 100644 index 000000000000..e2d6fc780848 --- /dev/null +++ b/test/runtime/samples/store-shadow-scope/_config.js @@ -0,0 +1,3 @@ +export default { + error: `Stores must be declared at the top level of the component (this may change in a future version of Svelte)` +}; diff --git a/test/runtime/samples/store-shadow-scope/main.svelte b/test/runtime/samples/store-shadow-scope/main.svelte new file mode 100644 index 000000000000..72c4a06c2adc --- /dev/null +++ b/test/runtime/samples/store-shadow-scope/main.svelte @@ -0,0 +1,9 @@ + diff --git a/test/runtime/samples/store-template-expression-scope/_config.js b/test/runtime/samples/store-template-expression-scope/_config.js new file mode 100644 index 000000000000..e2d6fc780848 --- /dev/null +++ b/test/runtime/samples/store-template-expression-scope/_config.js @@ -0,0 +1,3 @@ +export default { + error: `Stores must be declared at the top level of the component (this may change in a future version of Svelte)` +}; diff --git a/test/runtime/samples/store-template-expression-scope/main.svelte b/test/runtime/samples/store-template-expression-scope/main.svelte new file mode 100644 index 000000000000..1c9ccb29334c --- /dev/null +++ b/test/runtime/samples/store-template-expression-scope/main.svelte @@ -0,0 +1,9 @@ + + + + diff --git a/test/validator/samples/a11y-label-has-associated-control/warnings.json b/test/validator/samples/a11y-label-has-associated-control/warnings.json new file mode 100644 index 000000000000..b70a1a47de70 --- /dev/null +++ b/test/validator/samples/a11y-label-has-associated-control/warnings.json @@ -0,0 +1,32 @@ +[ + { + "code": "a11y-label-has-associated-control", + "end": { + "character": 16, + "column": 16, + "line": 1 + }, + "message": "A11y: A form label must be associated with a control.", + "pos": 0, + "start": { + "character": 0, + "column": 0, + "line": 1 + } + }, + { + "code": "a11y-label-has-associated-control", + "end": { + "character": 149, + "column": 30, + "line": 6 + }, + "message": "A11y: A form label must be associated with a control.", + "pos": 119, + "start": { + "character": 119, + "column": 0, + "line": 6 + } + } +] diff --git a/test/validator/samples/a11y-media-has-caption/input.svelte b/test/validator/samples/a11y-media-has-caption/input.svelte new file mode 100644 index 000000000000..105269cddb48 --- /dev/null +++ b/test/validator/samples/a11y-media-has-caption/input.svelte @@ -0,0 +1,4 @@ + + + + diff --git a/test/validator/samples/a11y-media-has-caption/warnings.json b/test/validator/samples/a11y-media-has-caption/warnings.json new file mode 100644 index 000000000000..a8c894b1d491 --- /dev/null +++ b/test/validator/samples/a11y-media-has-caption/warnings.json @@ -0,0 +1,32 @@ +[ + { + "code": "a11y-media-has-caption", + "end": { + "character": 55, + "column": 15, + "line": 2 + }, + "message": "A11y: Media elements must have a ", + "pos": 40, + "start": { + "character": 40, + "column": 0, + "line": 2 + } + }, + { + "code": "a11y-media-has-caption", + "end": { + "character": 80, + "column": 24, + "line": 3 + }, + "message": "A11y: Media elements must have a ", + "pos": 56, + "start": { + "character": 56, + "column": 0, + "line": 3 + } + } +] diff --git a/test/vars/samples/assumed-global/_config.js b/test/vars/samples/assumed-global/_config.js index 2b84e83f12c3..782760bb8b04 100644 --- a/test/vars/samples/assumed-global/_config.js +++ b/test/vars/samples/assumed-global/_config.js @@ -1,5 +1,5 @@ export default { test(assert, vars) { assert.deepEqual(vars, []); - }, + } }; diff --git a/test/vars/samples/duplicate-globals/_config.js b/test/vars/samples/duplicate-globals/_config.js index 2b84e83f12c3..782760bb8b04 100644 --- a/test/vars/samples/duplicate-globals/_config.js +++ b/test/vars/samples/duplicate-globals/_config.js @@ -1,5 +1,5 @@ export default { test(assert, vars) { assert.deepEqual(vars, []); - }, + } }; diff --git a/test/vars/samples/duplicate-non-hoistable/_config.js b/test/vars/samples/duplicate-non-hoistable/_config.js index 4ebc5b00cfcc..bd70e2980010 100644 --- a/test/vars/samples/duplicate-non-hoistable/_config.js +++ b/test/vars/samples/duplicate-non-hoistable/_config.js @@ -13,5 +13,5 @@ export default { writable: true } ]); - }, + } }; diff --git a/test/vars/samples/duplicate-vars/_config.js b/test/vars/samples/duplicate-vars/_config.js index eb10c44a9a56..749a0c59afb3 100644 --- a/test/vars/samples/duplicate-vars/_config.js +++ b/test/vars/samples/duplicate-vars/_config.js @@ -24,5 +24,5 @@ export default { writable: true } ]); - }, + } }; diff --git a/test/vars/samples/implicit-reactive/_config.js b/test/vars/samples/implicit-reactive/_config.js index 770de590e66d..a8bf261d4f82 100644 --- a/test/vars/samples/implicit-reactive/_config.js +++ b/test/vars/samples/implicit-reactive/_config.js @@ -24,5 +24,5 @@ export default { writable: true } ]); - }, + } }; diff --git a/test/vars/samples/referenced-from-script/_config.js b/test/vars/samples/referenced-from-script/_config.js index 191a52f8ccac..ec068cb1d7f0 100644 --- a/test/vars/samples/referenced-from-script/_config.js +++ b/test/vars/samples/referenced-from-script/_config.js @@ -10,7 +10,7 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false, + referenced_from_script: false }, { name: 'j', @@ -21,7 +21,7 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false, + referenced_from_script: false }, { name: 'k', @@ -32,7 +32,7 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false, + referenced_from_script: false }, { name: 'a', @@ -43,7 +43,7 @@ export default { reassigned: true, referenced: false, writable: true, - referenced_from_script: true, + referenced_from_script: true }, { name: 'b', @@ -54,7 +54,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: true, + referenced_from_script: true }, { name: 'c', @@ -65,7 +65,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: true, + referenced_from_script: true }, { name: 'd', @@ -76,7 +76,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: true, + referenced_from_script: true }, { name: 'e', @@ -87,7 +87,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: false, + referenced_from_script: false }, { name: 'f', @@ -98,7 +98,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: false, + referenced_from_script: false }, { name: 'g', @@ -109,7 +109,7 @@ export default { reassigned: false, referenced: false, writable: true, - referenced_from_script: true, + referenced_from_script: true }, { name: 'h', @@ -120,7 +120,7 @@ export default { reassigned: true, referenced: false, writable: true, - referenced_from_script: true, + referenced_from_script: true }, { name: 'foo', @@ -131,7 +131,7 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false, + referenced_from_script: false }, { name: 'l', @@ -142,7 +142,7 @@ export default { reassigned: false, referenced: false, referenced_from_script: true, - writable: false, + writable: false }, { name: 'bar', @@ -153,8 +153,8 @@ export default { reassigned: false, referenced: false, writable: false, - referenced_from_script: false, - }, + referenced_from_script: false + } ]); - }, + } }; diff --git a/test/vars/samples/template-references/_config.js b/test/vars/samples/template-references/_config.js index 674e35151774..34c07e19e00c 100644 --- a/test/vars/samples/template-references/_config.js +++ b/test/vars/samples/template-references/_config.js @@ -10,7 +10,7 @@ export default { reassigned: false, referenced: true, referenced_from_script: false, - writable: false, + writable: false }, { export_name: null, @@ -21,7 +21,7 @@ export default { reassigned: false, referenced: true, referenced_from_script: false, - writable: true, + writable: true }, { export_name: null, @@ -32,8 +32,8 @@ export default { reassigned: false, referenced: true, referenced_from_script: false, - writable: true, - }, + writable: true + } ]); - }, + } }; diff --git a/test/vars/samples/undeclared/_config.js b/test/vars/samples/undeclared/_config.js index 2b84e83f12c3..782760bb8b04 100644 --- a/test/vars/samples/undeclared/_config.js +++ b/test/vars/samples/undeclared/_config.js @@ -1,5 +1,5 @@ export default { test(assert, vars) { assert.deepEqual(vars, []); - }, + } };