From 4918faf605bf94027a626407c938e53945b8e347 Mon Sep 17 00:00:00 2001 From: Shunichi Hato Date: Thu, 31 Oct 2019 17:28:56 +0900 Subject: [PATCH 01/15] Fix crud example update error when filtering because the index `i` in update refers to the index in the original --- .../examples/20-7guis/05-7guis-crud/App.svelte | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/site/content/examples/20-7guis/05-7guis-crud/App.svelte b/site/content/examples/20-7guis/05-7guis-crud/App.svelte index f55aeb0d83..68574bca43 100644 --- a/site/content/examples/20-7guis/05-7guis-crud/App.svelte +++ b/site/content/examples/20-7guis/05-7guis-crud/App.svelte @@ -22,13 +22,13 @@ let i = 0; $: filteredPeople = prefix - ? people.filter(person => { + ? people.map(person => { const name = `${person.last}, ${person.first}`; - return name.toLowerCase().startsWith(prefix.toLowerCase()); + return { matched: name.toLowerCase().startsWith(prefix.toLowerCase()), person: person }; }) - : people; + : people.map(person => Object({ matched: true, person: person })); - $: selected = filteredPeople[i]; + $: selected = filteredPeople[i].person; $: reset_inputs(selected); @@ -82,8 +82,10 @@ From b704531a2eca63c0c4afad432c63a1aeda9c6f83 Mon Sep 17 00:00:00 2001 From: Shunichi Hato Date: Sun, 3 Nov 2019 13:58:35 +0900 Subject: [PATCH 02/15] Make selection reactive with search --- site/content/examples/20-7guis/05-7guis-crud/App.svelte | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/site/content/examples/20-7guis/05-7guis-crud/App.svelte b/site/content/examples/20-7guis/05-7guis-crud/App.svelte index 68574bca43..67145ceec7 100644 --- a/site/content/examples/20-7guis/05-7guis-crud/App.svelte +++ b/site/content/examples/20-7guis/05-7guis-crud/App.svelte @@ -28,6 +28,11 @@ }) : people.map(person => Object({ matched: true, person: person })); + $: if (!filteredPeople[i].matched) { + let newIndex = filteredPeople.findIndex(person => person.matched); + if (newIndex >= 0) i = newIndex; + } + $: selected = filteredPeople[i].person; $: reset_inputs(selected); From 3d464054814d8f5fee280b034f6904cf1f18f4eb Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Thu, 7 Nov 2019 00:55:07 +0800 Subject: [PATCH 03/15] skip missing input files --- test/js/index.js | 7 +++++-- test/parser/index.js | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/test/js/index.js b/test/js/index.js index 5fd632d606..411a015276 100644 --- a/test/js/index.js +++ b/test/js/index.js @@ -14,8 +14,11 @@ describe("js", () => { throw new Error("Forgot to remove `solo: true` from test"); } - (solo ? it.only : it)(dir, () => { - dir = path.resolve(`${__dirname}/samples`, dir); + dir = path.resolve(`${__dirname}/samples`, dir); + + const skip = !fs.existsSync(`${dir}/input.svelte`); + + (skip ? it.skip : solo ? it.only : it)(dir, () => { const config = loadConfig(`${dir}/_config.js`); const input = fs.readFileSync(`${dir}/input.svelte`, "utf-8").replace(/\s+$/, ""); diff --git a/test/parser/index.js b/test/parser/index.js index 0188fac431..3306785591 100644 --- a/test/parser/index.js +++ b/test/parser/index.js @@ -15,7 +15,9 @@ describe('parse', () => { ); } - (solo ? it.only : it)(dir, () => { + const skip = !fs.existsSync(`${__dirname}/samples/${dir}/input.svelte`); + + (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+$/, ''); From ecf6d3508a6bde09090470840263fbdc66dd994a Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Thu, 7 Nov 2019 08:25:09 +0800 Subject: [PATCH 04/15] update contributing.md for solo test --- CONTRIBUTING.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f00ebc07b9..9a0ab51e72 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -96,6 +96,12 @@ Test samples are kept in `/test/xxx/samples` folder. 1. To run test, run `npm run test` 1. To run test for a specific feature, you can use the `-g` (aka `--grep`) option. For example, to only run test involving transitions, run `npm run test -- -g transition`. +##### Running solo test + +1. To run only one test, rename the test sample folder to end with `.solo`. For example, to run the `test/js/samples/action` only, rename it to `test/js/samples/action.solo`. +1. To run only one test suite, rename the test suite folder to end with `.solo`. For example, to run the `test/js` test suite only, rename it to `test/js.solo`. +1. Remember to rename the test folder back. The CI will fail if there's a solo test. + #### Breaking changes When adding a new breaking change, follow this template in your pull request: From d8b9274697a58e1af7b4473a69871e5745940ae5 Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Thu, 7 Nov 2019 08:34:05 +0800 Subject: [PATCH 05/15] update test snapshot with --update flag --- CONTRIBUTING.md | 5 +++ test/css/index.js | 33 +++++++++++-------- test/helpers.js | 4 +++ test/hydration/index.js | 14 ++++++-- test/js/index.js | 32 ++++++++++++++---- test/parser/index.js | 2 +- test/server-side-rendering/index.js | 50 +++++++++++++++++++++++------ 7 files changed, 108 insertions(+), 32 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9a0ab51e72..9c2cb51034 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,6 +102,11 @@ Test samples are kept in `/test/xxx/samples` folder. 1. To run only one test suite, rename the test suite folder to end with `.solo`. For example, to run the `test/js` test suite only, rename it to `test/js.solo`. 1. Remember to rename the test folder back. The CI will fail if there's a solo test. +##### Updating `.expected` files + +1. Tests suites like `css`, `js`, `server-side-rendering` asserts that the generated output has to match the content in the `.expected` file. For example, in the `js` test suites, the generated js code is compared against the content in `expected.js`. +1. To update the content of the `.expected` file, run the test with `--update` flag. (`npm run test --update`) + #### Breaking changes When adding a new breaking change, follow this template in your pull request: diff --git a/test/css/index.js b/test/css/index.js index 1f90d243be..dc17314597 100644 --- a/test/css/index.js +++ b/test/css/index.js @@ -1,6 +1,6 @@ import * as assert from 'assert'; import * as fs from 'fs'; -import { env, normalizeHtml, svelte } from '../helpers.js'; +import { env, svelte, setupHtmlEqual, shouldUpdateExpected } from '../helpers.js'; function try_require(file) { try { @@ -37,6 +37,10 @@ function create(code) { } describe('css', () => { + before(() => { + setupHtmlEqual(); + }); + fs.readdirSync(`${__dirname}/samples`).forEach(dir => { if (dir[0] === '.') return; @@ -80,7 +84,17 @@ describe('css', () => { css: read(`${__dirname}/samples/${dir}/expected.css`) }; - assert.equal(dom.css.code.replace(/svelte(-ref)?-[a-z0-9]+/g, (m, $1) => $1 ? m : 'svelte-xyz'), expected.css); + const actual_css = dom.css.code.replace(/svelte(-ref)?-[a-z0-9]+/g, (m, $1) => $1 ? m : 'svelte-xyz'); + try { + assert.equal(actual_css, expected.css); + } catch (error) { + if (shouldUpdateExpected()) { + fs.writeFileSync(`${__dirname}/samples/${dir}/expected.css`, actual_css); + console.log(`Updated ${dir}/expected.css.`); + } else { + throw error; + } + } let ClientComponent; let ServerComponent; @@ -114,10 +128,8 @@ describe('css', () => { fs.writeFileSync(`${__dirname}/samples/${dir}/_actual.html`, html); - assert.equal( - normalizeHtml(window, html.replace(/svelte(-ref)?-[a-z0-9]+/g, (m, $1) => $1 ? m : 'svelte-xyz')), - normalizeHtml(window, expected.html) - ); + const actual_html = html.replace(/svelte(-ref)?-[a-z0-9]+/g, (m, $1) => $1 ? m : 'svelte-xyz'); + assert.htmlEqual(actual_html, expected.html); window.document.head.innerHTML = ''; // remove added styles } catch (err) { @@ -127,13 +139,8 @@ describe('css', () => { // ssr try { - assert.equal( - normalizeHtml( - window, - ServerComponent.render(config.props).html.replace(/svelte(-ref)?-[a-z0-9]+/g, (m, $1) => $1 ? m : 'svelte-xyz') - ), - normalizeHtml(window, expected.html) - ); + const actual_ssr = ServerComponent.render(config.props).html.replace(/svelte(-ref)?-[a-z0-9]+/g, (m, $1) => $1 ? m : 'svelte-xyz'); + assert.htmlEqual(actual_ssr, expected.html); } catch (err) { console.log(ssr.js.code); throw err; diff --git a/test/helpers.js b/test/helpers.js index d4f507fc87..ff40ac5f79 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -206,6 +206,10 @@ export function showOutput(cwd, options = {}, compile = svelte.compile) { }); } +export function shouldUpdateExpected() { + return process.argv.includes('--update'); +} + export function spaces(i) { let result = ''; while (i--) result += ' '; diff --git a/test/hydration/index.js b/test/hydration/index.js index 85e2ccc4a0..a0bfd6de4b 100644 --- a/test/hydration/index.js +++ b/test/hydration/index.js @@ -7,7 +7,8 @@ import { loadConfig, loadSvelte, env, - setupHtmlEqual + setupHtmlEqual, + shouldUpdateExpected } from '../helpers.js'; let compileOptions = null; @@ -76,7 +77,16 @@ describe('hydration', () => { props: config.props }); - assert.htmlEqual(target.innerHTML, fs.readFileSync(`${cwd}/_after.html`, 'utf-8')); + try { + assert.htmlEqual(target.innerHTML, fs.readFileSync(`${cwd}/_after.html`, 'utf-8')); + } catch (error) { + if (shouldUpdateExpected()) { + fs.writeFileSync(`${cwd}/_after.html`, target.innerHTML); + console.log(`Updated ${cwd}/_after.html.`); + } else { + throw error; + } + } if (config.test) { config.test(assert, target, snapshot, component, window); diff --git a/test/js/index.js b/test/js/index.js index 411a015276..6df2c9baf1 100644 --- a/test/js/index.js +++ b/test/js/index.js @@ -1,7 +1,7 @@ import * as assert from "assert"; import * as fs from "fs"; import * as path from "path"; -import { loadConfig, svelte } from "../helpers.js"; +import { loadConfig, svelte, shouldUpdateExpected } from "../helpers.js"; describe("js", () => { fs.readdirSync(`${__dirname}/samples`).forEach(dir => { @@ -37,12 +37,32 @@ describe("js", () => { const output = `${dir}/_actual.js`; fs.writeFileSync(output, actual); - const expected = fs.readFileSync(`${dir}/expected.js`, "utf-8"); + const expectedPath = `${dir}/expected.js`; - assert.equal( - actual.trim().replace(/^[ \t]+$/gm, ""), - expected.trim().replace(/^[ \t]+$/gm, "") - ); + let expected = ''; + try { + expected = fs.readFileSync(expectedPath, "utf-8"); + } catch (error) { + console.log(error); + if (error.code === 'ENOENT') { + // missing expected.js + fs.writeFileSync(expectedPath, actual); + } + } + + try { + assert.equal( + actual.trim().replace(/^[ \t]+$/gm, ""), + expected.trim().replace(/^[ \t]+$/gm, "") + ); + } catch (error) { + if (shouldUpdateExpected()) { + fs.writeFileSync(expectedPath, actual); + console.log(`Updated ${expectedPath}.`); + } else { + throw error; + } + } }); }); }); diff --git a/test/parser/index.js b/test/parser/index.js index 3306785591..27c5ec1563 100644 --- a/test/parser/index.js +++ b/test/parser/index.js @@ -1,6 +1,6 @@ import * as assert from 'assert'; import * as fs from 'fs'; -import { svelte, tryToLoadJson } from '../helpers.js'; +import { svelte, tryToLoadJson, shouldUpdateExpected } from '../helpers.js'; describe('parse', () => { fs.readdirSync(`${__dirname}/samples`).forEach(dir => { diff --git a/test/server-side-rendering/index.js b/test/server-side-rendering/index.js index 73b286044f..768917e833 100644 --- a/test/server-side-rendering/index.js +++ b/test/server-side-rendering/index.js @@ -6,7 +6,8 @@ import { showOutput, loadConfig, setupHtmlEqual, - tryToLoadJson + tryToLoadJson, + shouldUpdateExpected } from "../helpers.js"; function tryToReadFile(file) { @@ -58,18 +59,47 @@ describe("ssr", () => { fs.writeFileSync(`${dir}/_actual.html`, html); if (css.code) fs.writeFileSync(`${dir}/_actual.css`, css.code); - assert.htmlEqual(html, expectedHtml); - assert.equal( - css.code.replace(/^\s+/gm, ""), - expectedCss.replace(/^\s+/gm, "") - ); + try { + assert.htmlEqual(html, expectedHtml); + } catch (error) { + if (shouldUpdateExpected()) { + fs.writeFileSync(`${dir}/_expected.html`, html); + console.log(`Updated ${dir}/_expected.html.`); + } else { + throw error; + } + } + + try { + assert.equal( + css.code.replace(/^\s+/gm, ""), + expectedCss.replace(/^\s+/gm, "") + ); + } catch (error) { + if (shouldUpdateExpected()) { + fs.writeFileSync(`${dir}/_expected.css`, css.code); + console.log(`Updated ${dir}/_expected.css.`); + } else { + throw error; + } + } if (fs.existsSync(`${dir}/_expected-head.html`)) { fs.writeFileSync(`${dir}/_actual-head.html`, head); - assert.htmlEqual( - head, - fs.readFileSync(`${dir}/_expected-head.html`, 'utf-8') - ); + + try { + assert.htmlEqual( + head, + fs.readFileSync(`${dir}/_expected-head.html`, 'utf-8') + ); + } catch (error) { + if (shouldUpdateExpected()) { + fs.writeFileSync(`${dir}/_expected-head.html`, head); + console.log(`Updated ${dir}/_expected-head.html.`); + } else { + throw error; + } + } } if (show) showOutput(dir, { generate: 'ssr', format: 'cjs' }); From a7a75cb5503779ffae788c4b862f852b0426354a Mon Sep 17 00:00:00 2001 From: Nitay Rabinovich Date: Mon, 11 Nov 2019 11:02:18 +0200 Subject: [PATCH 06/15] Rexport SvelteComponent as SvelteComponent API --- src/runtime/ambient.ts | 19 ++----------------- src/runtime/index.ts | 3 ++- src/runtime/internal/ComponentApi.ts | 16 ++++++++++++++++ src/runtime/internal/index.ts | 1 + 4 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 src/runtime/internal/ComponentApi.ts diff --git a/src/runtime/ambient.ts b/src/runtime/ambient.ts index b094056c59..65b4bc23d3 100644 --- a/src/runtime/ambient.ts +++ b/src/runtime/ambient.ts @@ -1,19 +1,4 @@ declare module '*.svelte' { - type Props = Record; - - export default class { - constructor(options: { - target: Element; - anchor?: Element; - props?: Props; - hydrate?: boolean; - intro?: boolean; - }); - - $set(props: Props): void; - $on(event: string, callback: (event: CustomEvent) => void): () => void; - $destroy(): void; - - [accessor: string]: any; - } + type SvelteComponent = typeof import('./internal/ComponentApi').SvelteComponentApi + export default SvelteComponent } diff --git a/src/runtime/index.ts b/src/runtime/index.ts index 0973b93f1e..70fb65557f 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -8,5 +8,6 @@ export { setContext, getContext, tick, - createEventDispatcher + createEventDispatcher, + SvelteComponentApi as SvelteComponent } from 'svelte/internal'; diff --git a/src/runtime/internal/ComponentApi.ts b/src/runtime/internal/ComponentApi.ts new file mode 100644 index 0000000000..943e2c9de1 --- /dev/null +++ b/src/runtime/internal/ComponentApi.ts @@ -0,0 +1,16 @@ +type Props = Record; +export declare class SvelteComponentApi { + constructor(options: { + target: Element; + anchor?: Element; + props?: Props; + hydrate?: boolean; + intro?: boolean; + }); + + $set(props: Props): void; + $on(event: string, callback: (event: CustomEvent) => void): () => void; + $destroy(): void; + + [accessor: string]: any; +} \ No newline at end of file diff --git a/src/runtime/internal/index.ts b/src/runtime/internal/index.ts index e1dd2a1fcf..8e5725d3be 100644 --- a/src/runtime/internal/index.ts +++ b/src/runtime/internal/index.ts @@ -12,4 +12,5 @@ export * from './ssr'; export * from './transitions'; export * from './utils'; export * from './Component'; +export * from './ComponentApi'; export * from './dev'; From 97e44099b518ed7437b8d016ec9ef7bddf1686c9 Mon Sep 17 00:00:00 2001 From: Nitay Rabinovich Date: Mon, 11 Nov 2019 11:47:46 +0200 Subject: [PATCH 07/15] Fix linting and exporting --- src/runtime/ambient.ts | 4 ++-- src/runtime/internal/ComponentApi.ts | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/runtime/ambient.ts b/src/runtime/ambient.ts index 65b4bc23d3..8dd2b2e1c9 100644 --- a/src/runtime/ambient.ts +++ b/src/runtime/ambient.ts @@ -1,4 +1,4 @@ declare module '*.svelte' { - type SvelteComponent = typeof import('./internal/ComponentApi').SvelteComponentApi - export default SvelteComponent + // eslint-disable-next-line import/no-unresolved + export { default } from 'svelte/internal/ComponentApi'; } diff --git a/src/runtime/internal/ComponentApi.ts b/src/runtime/internal/ComponentApi.ts index 943e2c9de1..2718960e3d 100644 --- a/src/runtime/internal/ComponentApi.ts +++ b/src/runtime/internal/ComponentApi.ts @@ -1,16 +1,15 @@ type Props = Record; export declare class SvelteComponentApi { - constructor(options: { + constructor (options: { target: Element; anchor?: Element; props?: Props; hydrate?: boolean; intro?: boolean; }); - $set(props: Props): void; $on(event: string, callback: (event: CustomEvent) => void): () => void; $destroy(): void; - [accessor: string]: any; -} \ No newline at end of file +} +export default SvelteComponentApi; \ No newline at end of file From 3fb9626eb45076101a5974c77163d8c2504f9b84 Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Tue, 12 Nov 2019 09:01:07 +0800 Subject: [PATCH 08/15] skip comments for preprocessors --- src/compiler/preprocess/index.ts | 11 ++++++-- test/preprocess/samples/comments/_config.js | 8 ++++++ test/preprocess/samples/comments/input.svelte | 25 +++++++++++++++++++ .../preprocess/samples/comments/output.svelte | 25 +++++++++++++++++++ 4 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 test/preprocess/samples/comments/_config.js create mode 100644 test/preprocess/samples/comments/input.svelte create mode 100644 test/preprocess/samples/comments/output.svelte diff --git a/src/compiler/preprocess/index.ts b/src/compiler/preprocess/index.ts index 2faa3b97f2..4549517fbd 100644 --- a/src/compiler/preprocess/index.ts +++ b/src/compiler/preprocess/index.ts @@ -94,8 +94,12 @@ export default async function preprocess( for (const fn of script) { source = await replace_async( source, - /([^]*?)<\/script>/gi, + /|([^]*?)<\/script>/gi, async (match, attributes = '', content) => { + if (!attributes && !content) { + return match; + } + attributes = attributes || ''; const processed = await fn({ content, attributes: parse_attributes(attributes), @@ -110,8 +114,11 @@ export default async function preprocess( for (const fn of style) { source = await replace_async( source, - /([^]*?)<\/style>/gi, + /|([^]*?)<\/style>/gi, async (match, attributes = '', content) => { + if (!attributes && !content) { + return match; + } const processed: Processed = await fn({ content, attributes: parse_attributes(attributes), diff --git a/test/preprocess/samples/comments/_config.js b/test/preprocess/samples/comments/_config.js new file mode 100644 index 0000000000..4416d121d0 --- /dev/null +++ b/test/preprocess/samples/comments/_config.js @@ -0,0 +1,8 @@ +export default { + preprocess: [ + { + script: ({ content }) => ({ code: content.replace(/one/g, 'two') }), + style: ({ content }) => ({ code: content.replace(/one/g, 'three') }), + }, + ], +}; diff --git a/test/preprocess/samples/comments/input.svelte b/test/preprocess/samples/comments/input.svelte new file mode 100644 index 0000000000..1a01971f7f --- /dev/null +++ b/test/preprocess/samples/comments/input.svelte @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/test/preprocess/samples/comments/output.svelte b/test/preprocess/samples/comments/output.svelte new file mode 100644 index 0000000000..2d3538af17 --- /dev/null +++ b/test/preprocess/samples/comments/output.svelte @@ -0,0 +1,25 @@ + + + + + + + + + + + + + From 3593dd308ccbd7999d53d102215e09dae160999b Mon Sep 17 00:00:00 2001 From: Nitay Rabinovich Date: Tue, 12 Nov 2019 09:11:01 +0200 Subject: [PATCH 09/15] Export SvelteComponentDev as API --- src/runtime/ambient.ts | 3 +-- src/runtime/index.ts | 2 +- src/runtime/internal/ComponentApi.ts | 15 --------------- src/runtime/internal/dev.ts | 18 +++++++++++++++++- src/runtime/internal/index.ts | 1 - 5 files changed, 19 insertions(+), 20 deletions(-) delete mode 100644 src/runtime/internal/ComponentApi.ts diff --git a/src/runtime/ambient.ts b/src/runtime/ambient.ts index 8dd2b2e1c9..09cd9b72f2 100644 --- a/src/runtime/ambient.ts +++ b/src/runtime/ambient.ts @@ -1,4 +1,3 @@ declare module '*.svelte' { - // eslint-disable-next-line import/no-unresolved - export { default } from 'svelte/internal/ComponentApi'; + export { SvelteComponentDev as default } from 'svelte/internal'; } diff --git a/src/runtime/index.ts b/src/runtime/index.ts index 70fb65557f..e6c0c916f2 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -9,5 +9,5 @@ export { getContext, tick, createEventDispatcher, - SvelteComponentApi as SvelteComponent + SvelteComponentDev as SvelteComponent } from 'svelte/internal'; diff --git a/src/runtime/internal/ComponentApi.ts b/src/runtime/internal/ComponentApi.ts deleted file mode 100644 index 2718960e3d..0000000000 --- a/src/runtime/internal/ComponentApi.ts +++ /dev/null @@ -1,15 +0,0 @@ -type Props = Record; -export declare class SvelteComponentApi { - constructor (options: { - target: Element; - anchor?: Element; - props?: Props; - hydrate?: boolean; - intro?: boolean; - }); - $set(props: Props): void; - $on(event: string, callback: (event: CustomEvent) => void): () => void; - $destroy(): void; - [accessor: string]: any; -} -export default SvelteComponentApi; \ No newline at end of file diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index c10b339632..bf03b65aae 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -79,8 +79,24 @@ export function set_data_dev(text, data) { text.data = data; } + +type Props = Record; +export interface SvelteComponentDev { + $set(props?: Props): void; + $on(event: string, callback: (event: CustomEvent) => void): () => void; + $destroy(): void; + [accessor: string]: any; +} + export class SvelteComponentDev extends SvelteComponent { - constructor(options) { + constructor(options: { + target: Element; + anchor?: Element; + props?: Props; + hydrate?: boolean; + intro?: boolean; + $$inline?: boolean; + }) { if (!options || (!options.target && !options.$$inline)) { throw new Error(`'target' is a required option`); } diff --git a/src/runtime/internal/index.ts b/src/runtime/internal/index.ts index 8e5725d3be..e1dd2a1fcf 100644 --- a/src/runtime/internal/index.ts +++ b/src/runtime/internal/index.ts @@ -12,5 +12,4 @@ export * from './ssr'; export * from './transitions'; export * from './utils'; export * from './Component'; -export * from './ComponentApi'; export * from './dev'; From 97f68620fd927866405c8e1d9d51d3a7e65fd493 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Wed, 13 Nov 2019 18:58:00 -0500 Subject: [PATCH 10/15] site: bump repl package --- site/package-lock.json | 40 +++++++++++----------------------------- site/package.json | 2 +- 2 files changed, 12 insertions(+), 30 deletions(-) diff --git a/site/package-lock.json b/site/package-lock.json index 2f8008911f..09bd67cf1e 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -1291,17 +1291,23 @@ } }, "@sveltejs/svelte-repl": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@sveltejs/svelte-repl/-/svelte-repl-0.1.11.tgz", - "integrity": "sha512-z0Cv9fNggmL6C2bphYa2A5Bku91U3ukCmJTh9pFS68X0sJxDFJPsBgxAmWhrOfOe7NdGvm/s+fBEOo8cce66/w==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/@sveltejs/svelte-repl/-/svelte-repl-0.1.13.tgz", + "integrity": "sha512-griMkrRRzAQq22awKaBN5cewGly4xeeo8qpDs8ZhQxmEk5TcX3dMhIGMLuPTSv3Yr0s2c6TDJXcN+ORJn//fpQ==", "dev": true, "requires": { - "codemirror": "^5.48.4", - "estree-walker": "^0.6.1", + "codemirror": "^5.49.2", + "estree-walker": "^0.9.0", "sourcemap-codec": "^1.4.6", "yootils": "0.0.16" }, "dependencies": { + "estree-walker": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.9.0.tgz", + "integrity": "sha512-12U47o7XHUX329+x3FzNVjCx3SHEzMF0nkDv7r/HnBzX/xNTKxajBk6gyygaxrAFtLj39219oMfbtxv4KpaOiA==", + "dev": true + }, "sourcemap-codec": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", @@ -3368,12 +3374,6 @@ "requires": { "@babel/helper-module-imports": "^7.0.0", "rollup-pluginutils": "^2.8.1" - }, - "dependencies": { - "estree-walker": { - "version": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" - } } }, "rollup-plugin-commonjs": { @@ -3411,10 +3411,6 @@ "rollup-pluginutils": "^2.8.1" }, "dependencies": { - "estree-walker": { - "version": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" - }, "resolve": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", @@ -3458,12 +3454,6 @@ "rollup-pluginutils": "^2.8.1", "serialize-javascript": "^1.7.0", "terser": "^4.1.0" - }, - "dependencies": { - "estree-walker": { - "version": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" - } } }, "rollup-pluginutils": { @@ -3473,14 +3463,6 @@ "dev": true, "requires": { "estree-walker": "^0.6.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - } } }, "safe-buffer": { diff --git a/site/package.json b/site/package.json index dc32005555..d08aa1f742 100644 --- a/site/package.json +++ b/site/package.json @@ -36,7 +36,7 @@ "@babel/runtime": "^7.6.0", "@sindresorhus/slugify": "^0.9.1", "@sveltejs/site-kit": "^1.1.4", - "@sveltejs/svelte-repl": "^0.1.11", + "@sveltejs/svelte-repl": "^0.1.13", "degit": "^2.1.4", "dotenv": "^8.1.0", "esm": "^3.2.25", From 280913cca44111a535f215bc11133d929fdafa60 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 14 Nov 2019 15:43:06 -0500 Subject: [PATCH 11/15] tabs --- src/runtime/internal/dev.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index bf03b65aae..4b0cdb8c75 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -82,18 +82,18 @@ export function set_data_dev(text, data) { type Props = Record; export interface SvelteComponentDev { - $set(props?: Props): void; - $on(event: string, callback: (event: CustomEvent) => void): () => void; - $destroy(): void; - [accessor: string]: any; + $set(props?: Props): void; + $on(event: string, callback: (event: CustomEvent) => void): () => void; + $destroy(): void; + [accessor: string]: any; } export class SvelteComponentDev extends SvelteComponent { constructor(options: { - target: Element; - anchor?: Element; - props?: Props; - hydrate?: boolean; + target: Element; + anchor?: Element; + props?: Props; + hydrate?: boolean; intro?: boolean; $$inline?: boolean; }) { @@ -119,4 +119,4 @@ export function loop_guard() { throw new Error(`Infinite loop detected`); } }; -} \ No newline at end of file +} From 95501ed5f5948ace5546356710de8460d2c0f122 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 14 Nov 2019 16:34:30 -0500 Subject: [PATCH 12/15] Print 'delete this directory' message and move on --- test/js/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/js/index.js b/test/js/index.js index 6df2c9baf1..8954a50365 100644 --- a/test/js/index.js +++ b/test/js/index.js @@ -1,6 +1,7 @@ import * as assert from "assert"; import * as fs from "fs"; import * as path from "path"; +import * as kleur from "kleur"; import { loadConfig, svelte, shouldUpdateExpected } from "../helpers.js"; describe("js", () => { @@ -16,7 +17,10 @@ describe("js", () => { dir = path.resolve(`${__dirname}/samples`, dir); - const skip = !fs.existsSync(`${dir}/input.svelte`); + if (!fs.existsSync(`${dir}/input.svelte`)) { + console.log(colors.red().bold(`Missing file ${dir}/input.svelte. If you recently switched branches you may need to delete this directory`)); + return; + } (skip ? it.skip : solo ? it.only : it)(dir, () => { const config = loadConfig(`${dir}/_config.js`); From cecfab3fafe44cb7c3b987b8b1d60627735509a5 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 14 Nov 2019 16:38:44 -0500 Subject: [PATCH 13/15] doh --- test/js/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/js/index.js b/test/js/index.js index 8954a50365..b16c25fe50 100644 --- a/test/js/index.js +++ b/test/js/index.js @@ -22,7 +22,7 @@ describe("js", () => { return; } - (skip ? it.skip : solo ? it.only : it)(dir, () => { + (solo ? it.only : it)(dir, () => { const config = loadConfig(`${dir}/_config.js`); const input = fs.readFileSync(`${dir}/input.svelte`, "utf-8").replace(/\s+$/, ""); From 3889ec499e21216614200927288856cab42c4453 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 14 Nov 2019 16:55:34 -0500 Subject: [PATCH 14/15] simpler fix --- .../20-7guis/05-7guis-crud/App.svelte | 36 ++++++------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/site/content/examples/20-7guis/05-7guis-crud/App.svelte b/site/content/examples/20-7guis/05-7guis-crud/App.svelte index 67145ceec7..aec623d2a4 100644 --- a/site/content/examples/20-7guis/05-7guis-crud/App.svelte +++ b/site/content/examples/20-7guis/05-7guis-crud/App.svelte @@ -2,18 +2,9 @@