├── .gitignore ├── .vscode └── settings.json ├── my-static-site ├── .gitignore ├── README.md ├── cypress.json ├── cypress │ ├── fixtures │ │ └── example.json │ ├── integration │ │ └── spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src │ ├── client.js │ ├── components │ │ └── Nav.svelte │ ├── routes │ │ ├── _error.svelte │ │ ├── _layout.svelte │ │ ├── blog │ │ │ ├── [slug].json.js │ │ │ ├── [slug].svelte │ │ │ ├── _posts.js │ │ │ ├── index.json.js │ │ │ └── index.svelte │ │ ├── dogs │ │ │ ├── [name].json.js │ │ │ ├── [name].svelte │ │ │ ├── dogs.json │ │ │ ├── index.json.js │ │ │ └── index.svelte │ │ ├── index.svelte │ │ ├── paper.svelte │ │ ├── rock.svelte │ │ ├── rps.svelte │ │ └── scissors.svelte │ ├── server.js │ ├── service-worker.js │ └── template.html └── static │ ├── favicon.png │ ├── global.css │ ├── images │ ├── german-shorthaired-pointer-old.jpg │ ├── german-shorthaired-pointer.jpg │ ├── native-american-indian-dog-old.jpg │ ├── native-american-indian-dog.jpg │ ├── paper.jpg │ ├── rock.jpg │ ├── scissors.jpg │ ├── treeing-walker-coonhound-old.jpg │ ├── treeing-walker-coonhound.jpg │ ├── whippet-old.jpg │ └── whippet.jpg │ ├── logo-192.png │ ├── logo-512.png │ └── manifest.json ├── package.json ├── sanitize-html ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.png │ ├── global.css │ ├── index.html │ ├── sanitize-html.min.js │ └── star.png ├── rollup.config.js └── src │ ├── App.svelte │ └── main.js ├── sapper-shopping ├── .gitignore ├── README.md ├── cypress.json ├── cypress │ ├── fixtures │ │ └── example.json │ ├── integration │ │ └── spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src │ ├── client.js │ ├── components │ │ └── Nav.svelte │ ├── items.js │ ├── routes │ │ ├── _error.svelte │ │ ├── _layout.svelte │ │ ├── blog │ │ │ ├── [slug].json.js │ │ │ ├── [slug].svelte │ │ │ ├── _posts.js │ │ │ ├── index.json.js │ │ │ └── index.svelte │ │ ├── cart.svelte │ │ ├── index.svelte │ │ └── ship.svelte │ ├── server.js │ ├── service-worker.js │ ├── stores.js │ └── template.html └── static │ ├── favicon.png │ ├── global.css │ ├── great-success.png │ ├── logo-192.png │ ├── logo-512.png │ └── manifest.json ├── svelte-shop-hash-routing ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js └── src │ ├── App.svelte │ ├── Cart.svelte │ ├── NavButton.svelte │ ├── NotFound.svelte │ ├── Ship.svelte │ ├── Shop.svelte │ ├── items.js │ ├── main.js │ └── stores.js ├── svelte-shop-manual-routing ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js └── src │ ├── App.svelte │ ├── Cart.svelte │ ├── NavButton.svelte │ ├── Ship.svelte │ ├── Shop.svelte │ ├── items.js │ ├── main.js │ └── stores.js ├── svelte-shop-page-routing ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js └── src │ ├── App.svelte │ ├── Cart.svelte │ ├── NotFound.svelte │ ├── Ship.svelte │ ├── Shop.svelte │ ├── items.js │ ├── main.js │ └── stores.js ├── svelte-todo ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .vscode │ └── settings.json ├── LICENSE ├── README.md ├── babel.config.js ├── cypress.json ├── cypress │ └── integration │ │ └── TodoList.spec.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js └── src │ ├── ShippingLabel.svelte │ ├── Todo.svelte │ ├── TodoList.spec.js │ ├── TodoList.svelte │ ├── main.js │ └── todo.spec.js ├── travel-packing-ch10 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .vscode │ └── settings.json ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── dialog-polyfill.css │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js └── src │ ├── App.svelte │ ├── Category.svelte │ ├── Checklist.svelte │ ├── Dialog.svelte │ ├── Item.svelte │ ├── Login.svelte │ ├── NotFound.svelte │ ├── main.js │ └── util.js ├── travel-packing-ch12 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .storybook │ ├── addons.js │ └── config.js ├── .vscode │ └── settings.json ├── README.md ├── babel.config.js ├── cypress.json ├── cypress │ ├── examples │ │ ├── actions.spec.js │ │ ├── aliasing.spec.js │ │ ├── assertions.spec.js │ │ ├── connectors.spec.js │ │ ├── cookies.spec.js │ │ ├── cypress_api.spec.js │ │ ├── files.spec.js │ │ ├── local_storage.spec.js │ │ ├── location.spec.js │ │ ├── misc.spec.js │ │ ├── navigation.spec.js │ │ ├── network_requests.spec.js │ │ ├── querying.spec.js │ │ ├── spies_stubs_clocks.spec.js │ │ ├── traversal.spec.js │ │ ├── utilities.spec.js │ │ ├── viewport.spec.js │ │ ├── waiting.spec.js │ │ └── window.spec.js │ ├── fixtures │ │ ├── example.json │ │ ├── profile.json │ │ └── users.json │ ├── integration │ │ └── travel-packing.spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── dialog-polyfill.css │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js ├── src │ ├── App.svelte │ ├── Category.spec.js │ ├── Category.svelte │ ├── Checklist.svelte │ ├── Dialog.svelte │ ├── Item.spec.js │ ├── Item.svelte │ ├── Login.svelte │ ├── NotFound.svelte │ ├── __snapshots__ │ │ ├── Category.spec.js.snap │ │ └── Item.spec.js.snap │ ├── main.js │ └── util.js └── stories │ ├── Category.stories.js │ ├── Checklist.stories.js │ ├── Dialog.stories.js │ ├── DialogWrapper.svelte │ ├── Item.stories.js │ ├── Login.stories.js │ └── StyleWrapper.svelte ├── travel-packing-ch13 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .storybook │ ├── addons.js │ └── config.js ├── .vscode │ └── settings.json ├── Dockerfile ├── README.md ├── babel.config.js ├── cypress.json ├── cypress │ ├── examples │ │ ├── actions.spec.js │ │ ├── aliasing.spec.js │ │ ├── assertions.spec.js │ │ ├── connectors.spec.js │ │ ├── cookies.spec.js │ │ ├── cypress_api.spec.js │ │ ├── files.spec.js │ │ ├── local_storage.spec.js │ │ ├── location.spec.js │ │ ├── misc.spec.js │ │ ├── navigation.spec.js │ │ ├── network_requests.spec.js │ │ ├── querying.spec.js │ │ ├── spies_stubs_clocks.spec.js │ │ ├── traversal.spec.js │ │ ├── utilities.spec.js │ │ ├── viewport.spec.js │ │ ├── waiting.spec.js │ │ └── window.spec.js │ ├── fixtures │ │ ├── example.json │ │ ├── profile.json │ │ └── users.json │ ├── integration │ │ └── travel-packing.spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── dialog-polyfill.css │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js ├── server │ ├── package-lock.json │ ├── package.json │ └── server.js ├── src │ ├── App.svelte │ ├── Category.spec.js │ ├── Category.svelte │ ├── Checklist.svelte │ ├── Dialog.svelte │ ├── Item.spec.js │ ├── Item.svelte │ ├── Login.svelte │ ├── NotFound.svelte │ ├── __snapshots__ │ │ ├── Category.spec.js.snap │ │ └── Item.spec.js.snap │ ├── main.js │ └── util.js └── stories │ ├── Category.stories.js │ ├── Checklist.stories.js │ ├── Dialog.stories.js │ ├── DialogWrapper.svelte │ ├── Item.stories.js │ ├── Login.stories.js │ └── StyleWrapper.svelte ├── travel-packing-ch14 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .storybook │ ├── addons.js │ └── config.js ├── .vscode │ └── settings.json ├── README.md ├── babel.config.js ├── cypress.json ├── cypress │ ├── examples │ │ ├── actions.spec.js │ │ ├── aliasing.spec.js │ │ ├── assertions.spec.js │ │ ├── connectors.spec.js │ │ ├── cookies.spec.js │ │ ├── cypress_api.spec.js │ │ ├── files.spec.js │ │ ├── local_storage.spec.js │ │ ├── location.spec.js │ │ ├── misc.spec.js │ │ ├── navigation.spec.js │ │ ├── network_requests.spec.js │ │ ├── querying.spec.js │ │ ├── spies_stubs_clocks.spec.js │ │ ├── traversal.spec.js │ │ ├── utilities.spec.js │ │ ├── viewport.spec.js │ │ ├── waiting.spec.js │ │ └── window.spec.js │ ├── fixtures │ │ ├── example.json │ │ ├── profile.json │ │ └── users.json │ ├── integration │ │ └── travel-packing.spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── jest.config.js ├── package.json ├── public │ ├── dialog-polyfill.css │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js ├── server │ ├── package-lock.json │ ├── package.json │ └── server.js ├── src │ ├── App.svelte │ ├── Baskets.svelte │ ├── Category.spec.js │ ├── Category.svelte │ ├── Checklist.svelte │ ├── Dialog.svelte │ ├── Item.spec.js │ ├── Item.svelte │ ├── Login.svelte │ ├── NotFound.svelte │ ├── __snapshots__ │ │ ├── Category.spec.js.snap │ │ └── Item.spec.js.snap │ ├── main.js │ └── util.js └── stories │ ├── Category.stories.js │ ├── Checklist.stories.js │ ├── Dialog.stories.js │ ├── DialogWrapper.svelte │ ├── Item.stories.js │ ├── Login.stories.js │ └── StyleWrapper.svelte ├── travel-packing-ch16 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── README.md ├── cypress.json ├── cypress │ ├── fixtures │ │ └── example.json │ ├── integration │ │ └── spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── package.json ├── rollup.config.js ├── src │ ├── client.js │ ├── components │ │ ├── Category.svelte │ │ ├── Dialog.svelte │ │ ├── Item.svelte │ │ └── NotFound.svelte │ ├── routes │ │ ├── _error.svelte │ │ ├── _layout.svelte │ │ ├── checklist.svelte │ │ └── index.svelte │ ├── server.js │ ├── service-worker.js │ ├── template.html │ └── util.js └── static │ ├── favicon.png │ ├── global.css │ ├── logo-192.png │ ├── logo-512.png │ └── manifest.json ├── travel-packing-ch17 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .vscode │ └── settings.json ├── README.md ├── cypress.json ├── cypress │ ├── fixtures │ │ └── example.json │ ├── integration │ │ └── spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src │ ├── client.js │ ├── components │ │ ├── Category.svelte │ │ ├── Dialog.svelte │ │ ├── Item.svelte │ │ └── NotFound.svelte │ ├── routes │ │ ├── _error.svelte │ │ ├── _layout.svelte │ │ ├── categories │ │ │ ├── [categoryId] │ │ │ │ ├── index.json.js │ │ │ │ └── items │ │ │ │ │ ├── [itemId].json.js │ │ │ │ │ └── index.json.js │ │ │ ├── _helpers.js │ │ │ └── index.json.js │ │ ├── checklist.svelte │ │ └── index.svelte │ ├── server.js │ ├── service-worker.js │ ├── template.html │ └── util.js └── static │ ├── favicon.png │ ├── global.css │ ├── logo-192.png │ ├── logo-512.png │ └── manifest.json ├── travel-packing-ch19 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .vscode │ └── settings.json ├── README.md ├── cypress.json ├── cypress │ ├── fixtures │ │ └── example.json │ ├── integration │ │ └── spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src │ ├── client.js │ ├── components │ │ ├── Category.svelte │ │ ├── Dialog.svelte │ │ ├── Item.svelte │ │ └── NotFound.svelte │ ├── routes │ │ ├── _error.svelte │ │ ├── _layout.svelte │ │ ├── categories │ │ │ ├── [categoryId] │ │ │ │ ├── index.json.js │ │ │ │ └── items │ │ │ │ │ ├── [itemId].json.js │ │ │ │ │ └── index.json.js │ │ │ ├── _helpers.js │ │ │ └── index.json.js │ │ ├── checklist.svelte │ │ └── index.svelte │ ├── server.js │ ├── service-worker.js │ ├── template.html │ └── util.js └── static │ ├── favicon.png │ ├── global.css │ ├── logo-192.png │ ├── logo-512.png │ └── manifest.json ├── travel-packing-ch3 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── README.md ├── package.json ├── public │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js └── src │ ├── App.svelte │ ├── Login.svelte │ └── main.js ├── travel-packing-ch4 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── README.md ├── package.json ├── public │ ├── favicon.png │ ├── global.css │ └── index.html ├── report.20191218.160736.57199.0.001.json ├── rollup.config.js └── src │ ├── App.svelte │ ├── Category.svelte │ ├── Checklist.svelte │ ├── Item.svelte │ ├── Login.svelte │ ├── main.js │ └── util.js ├── travel-packing-ch5 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── README.md ├── package.json ├── public │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js └── src │ ├── App.svelte │ ├── Category.svelte │ ├── Checklist.svelte │ ├── Item.svelte │ ├── Login.svelte │ ├── main.js │ └── util.js ├── travel-packing-ch7 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .vscode │ └── settings.json ├── README.md ├── package.json ├── public │ ├── dialog-polyfill.css │ ├── favicon.png │ ├── global.css │ └── index.html ├── rollup.config.js └── src │ ├── App.svelte │ ├── Category.svelte │ ├── Checklist.svelte │ ├── Dialog.svelte │ ├── Item.svelte │ ├── Login.svelte │ ├── main.js │ └── util.js └── travel-packing-ch9 ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .vscode └── settings.json ├── README.md ├── package-lock.json ├── package.json ├── public ├── dialog-polyfill.css ├── favicon.png ├── global.css └── index.html ├── rollup.config.js └── src ├── App.svelte ├── Category.svelte ├── Checklist.svelte ├── Dialog.svelte ├── Item.svelte ├── Login.svelte ├── NotFound.svelte ├── main.js └── util.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .*.swp 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "uuidv" 4 | ] 5 | } -------------------------------------------------------------------------------- /my-static-site/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /node_modules/ 3 | /src/node_modules/@sapper/ 4 | yarn-error.log 5 | /cypress/screenshots/ 6 | /__sapper__/ 7 | -------------------------------------------------------------------------------- /my-static-site/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:3000", 3 | "video": false 4 | } -------------------------------------------------------------------------------- /my-static-site/cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } -------------------------------------------------------------------------------- /my-static-site/cypress/integration/spec.js: -------------------------------------------------------------------------------- 1 | describe('Sapper template app', () => { 2 | beforeEach(() => { 3 | cy.visit('/') 4 | }); 5 | 6 | it('has the correct

', () => { 7 | cy.contains('h1', 'Great success!') 8 | }); 9 | 10 | it('navigates to /about', () => { 11 | cy.get('nav a').contains('about').click(); 12 | cy.url().should('include', '/about'); 13 | }); 14 | 15 | it('navigates to /blog', () => { 16 | cy.get('nav a').contains('blog').click(); 17 | cy.url().should('include', '/blog'); 18 | }); 19 | }); -------------------------------------------------------------------------------- /my-static-site/cypress/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | module.exports = (on, config) => { 15 | // `on` is used to hook into various events Cypress emits 16 | // `config` is the resolved Cypress config 17 | } 18 | -------------------------------------------------------------------------------- /my-static-site/cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // 11 | // 12 | // -- This is a parent command -- 13 | // Cypress.Commands.add("login", (email, password) => { ... }) 14 | // 15 | // 16 | // -- This is a child command -- 17 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 18 | // 19 | // 20 | // -- This is a dual command -- 21 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 22 | // 23 | // 24 | // -- This is will overwrite an existing command -- 25 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 26 | -------------------------------------------------------------------------------- /my-static-site/cypress/support/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands' 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') 21 | -------------------------------------------------------------------------------- /my-static-site/src/client.js: -------------------------------------------------------------------------------- 1 | import * as sapper from '@sapper/app'; 2 | 3 | sapper.start({ 4 | target: document.querySelector('#sapper') 5 | }); -------------------------------------------------------------------------------- /my-static-site/src/routes/_error.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 29 | 30 | 31 | {status} 32 | 33 | 34 |

{status}

35 | 36 |

{error.message}

37 | 38 | {#if dev && error.stack} 39 |
{error.stack}
40 | {/if} 41 | -------------------------------------------------------------------------------- /my-static-site/src/routes/_layout.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 |