├── .gitignore ├── README.md ├── content ├── .notes.md ├── 01-introduction.md ├── 02-what-is-svelte.md ├── 03-the-basics.md ├── 04-starting-from-scratch.md ├── 05-building-a-game.md ├── 06-building-a-sapper-app.md └── 07-more-to-explore.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 ├── node_modules │ └── @app │ │ ├── components │ │ └── Nav.svelte │ │ └── get_sections.js ├── routes │ ├── [section] │ │ ├── index.json.js │ │ └── index.svelte │ ├── _error.svelte │ ├── _layout.svelte │ ├── about.svelte │ ├── index.svelte │ └── toc.json.js ├── server.js ├── service-worker.js └── template.html └── static ├── favicon.png ├── fonts ├── fira-mono │ └── fira-mono-latin-400.woff2 ├── overpass │ ├── overpass-latin-100.woff2 │ ├── overpass-latin-300.woff2 │ ├── overpass-latin-400.woff2 │ ├── overpass-latin-600.woff2 │ └── overpass-latin-700.woff2 └── roboto │ ├── roboto-latin-400.woff2 │ ├── roboto-latin-400italic.woff2 │ ├── roboto-latin-500.woff2 │ └── roboto-latin-500italic.woff2 ├── global.css ├── logo-192.png ├── logo-512.png ├── manifest.json ├── prism.css └── successkid.jpg /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /node_modules/ 3 | /src/node_modules/@sapper/ 4 | !/src/node_modules 5 | yarn-error.log 6 | /cypress/screenshots/ 7 | /__sapper__/ 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # sapper-template 2 | 3 | The default [Sapper](https://github.com/sveltejs/sapper) template, available for Rollup and webpack. 4 | 5 | 6 | ## Getting started 7 | 8 | 9 | ### Using `degit` 10 | 11 | [`degit`](https://github.com/Rich-Harris/degit) is a scaffolding tool that lets you create a directory from a branch in a repository. Use either the `rollup` or `webpack` branch in `sapper-template`: 12 | 13 | ```bash 14 | # for Rollup 15 | npx degit "sveltejs/sapper-template#rollup" my-app 16 | # for webpack 17 | npx degit "sveltejs/sapper-template#webpack" my-app 18 | ``` 19 | 20 | 21 | ### Using GitHub templates 22 | 23 | Alternatively, you can use GitHub's template feature with the [sapper-template-rollup](https://github.com/sveltejs/sapper-template-rollup) or [sapper-template-webpack](https://github.com/sveltejs/sapper-template-webpack) repositories. 24 | 25 | 26 | ### Running the project 27 | 28 | However you get the code, you can install dependencies and run the project in development mode with: 29 | 30 | ```bash 31 | cd my-app 32 | npm install # or yarn 33 | npm run dev 34 | ``` 35 | 36 | Open up [localhost:3000](http://localhost:3000) and start clicking around. 37 | 38 | Consult [sapper.svelte.dev](https://sapper.svelte.dev) for help getting started. 39 | 40 | 41 | ## Structure 42 | 43 | Sapper expects to find two directories in the root of your project — `src` and `static`. 44 | 45 | 46 | ### src 47 | 48 | The [src](src) directory contains the entry points for your app — `client.js`, `server.js` and (optionally) a `service-worker.js` — along with a `template.html` file and a `routes` directory. 49 | 50 | 51 | #### src/routes 52 | 53 | This is the heart of your Sapper app. There are two kinds of routes — *pages*, and *server routes*. 54 | 55 | **Pages** are Svelte components written in `.svelte` files. When a user first visits the application, they will be served a server-rendered version of the route in question, plus some JavaScript that 'hydrates' the page and initialises a client-side router. From that point forward, navigating to other pages is handled entirely on the client for a fast, app-like feel. (Sapper will preload and cache the code for these subsequent pages, so that navigation is instantaneous.) 56 | 57 | **Server routes** are modules written in `.js` files, that export functions corresponding to HTTP methods. Each function receives Express `request` and `response` objects as arguments, plus a `next` function. This is useful for creating a JSON API, for example. 58 | 59 | There are three simple rules for naming the files that define your routes: 60 | 61 | * A file called `src/routes/about.svelte` corresponds to the `/about` route. A file called `src/routes/blog/[slug].svelte` corresponds to the `/blog/:slug` route, in which case `params.slug` is available to the route 62 | * The file `src/routes/index.svelte` (or `src/routes/index.js`) corresponds to the root of your app. `src/routes/about/index.svelte` is treated the same as `src/routes/about.svelte`. 63 | * Files and directories with a leading underscore do *not* create routes. This allows you to colocate helper modules and components with the routes that depend on them — for example you could have a file called `src/routes/_helpers/datetime.js` and it would *not* create a `/_helpers/datetime` route 64 | 65 | 66 | ### static 67 | 68 | The [static](static) directory contains any static assets that should be available. These are served using [sirv](https://github.com/lukeed/sirv). 69 | 70 | In your [service-worker.js](src/service-worker.js) file, you can import these as `files` from the generated manifest... 71 | 72 | ```js 73 | import { files } from '@sapper/service-worker'; 74 | ``` 75 | 76 | ...so that you can cache them (though you can choose not to, for example if you don't want to cache very large files). 77 | 78 | 79 | ## Bundler config 80 | 81 | Sapper uses Rollup or webpack to provide code-splitting and dynamic imports, as well as compiling your Svelte components. With webpack, it also provides hot module reloading. As long as you don't do anything daft, you can edit the configuration files to add whatever plugins you'd like. 82 | 83 | 84 | ## Production mode and deployment 85 | 86 | To start a production version of your app, run `npm run build && npm start`. This will disable live reloading, and activate the appropriate bundler plugins. 87 | 88 | You can deploy your application to any environment that supports Node 10 or above. As an example, to deploy to [Vercel Now](https://vercel.com) when using `sapper export`, run these commands: 89 | 90 | ```bash 91 | npm install -g now 92 | now 93 | ``` 94 | 95 | If your app can't be exported to a static site, you can use the [now-sapper](https://github.com/thgh/now-sapper) builder. You can find instructions on how to do so in its [README](https://github.com/thgh/now-sapper#basic-usage). 96 | 97 | 98 | ## Using external components 99 | 100 | When using Svelte components installed from npm, such as [@sveltejs/svelte-virtual-list](https://github.com/sveltejs/svelte-virtual-list), Svelte needs the original component source (rather than any precompiled JavaScript that ships with the component). This allows the component to be rendered server-side, and also keeps your client-side app smaller. 101 | 102 | Because of that, it's essential that the bundler doesn't treat the package as an *external dependency*. You can either modify the `external` option under `server` in [rollup.config.js](rollup.config.js) or the `externals` option in [webpack.config.js](webpack.config.js), or simply install the package to `devDependencies` rather than `dependencies`, which will cause it to get bundled (and therefore compiled) with your app: 103 | 104 | ```bash 105 | npm install -D @sveltejs/svelte-virtual-list 106 | ``` 107 | 108 | 109 | ## Bugs and feedback 110 | 111 | Sapper is in early development, and may have the odd rough edge here and there. Please be vocal over on the [Sapper issue tracker](https://github.com/sveltejs/sapper/issues). 112 | -------------------------------------------------------------------------------- /content/.notes.md: -------------------------------------------------------------------------------- 1 | TypeScript 2 | 3 | Learn Sourcetree -------------------------------------------------------------------------------- /content/01-introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction 3 | --- 4 | 5 | Welcome to the [Frontend Masters](https://frontendmasters.com) Svelte workshop! This is the companion site to the video course that, if you're one of the select few, you're currently watching LIVE; after the course ends it will live on as a companion resource, full of code samples and links and what-have-you. 6 | 7 | [Issues and pull requests](https://github.com/Rich-Harris/svelte-workshop) are welcome. 8 | 9 | 10 | ## About this workshop 11 | 12 | Here's the plan: we're going to go from 'I had heard of Svelte, but wasn't sure how to pronounce it' to building a dynamically server-rendered, progressively-enhanced, personalisable, interactive (but JS-optional!) PWA, all in the space of a few hours. 13 | 14 | It'll happen in four parts: 15 | 16 | * The introductory waffly bit, where I explain what Svelte is 17 | * A series of short interactive exercises to teach you the fundamentals 18 | * Building a simple game 19 | * Building a complete app 20 | 21 | It's ambitious, but I think we can do it. Who's with me? 22 | 23 | 24 | ## About me 25 | 26 | Speaking of 'me', I suppose I should tell you a bit about myself. 27 | 28 | I've spent my career in digital journalism, using JavaScript to tell stories in interactive and data-driven ways. These days I'm a proud member of the [New York Times Graphics Department](https://twitter.com/nytgraphics). 29 | 30 | That's the day job. By night, I work on open source projects like Svelte, which I started in 2016. 31 | 32 | What else do you want to know? AMA. You can find me on Twitter at [@rich_harris](https://twitter.com/rich_harris). 33 | 34 | 35 | ## Acknowledgments 36 | 37 | Let me take this opportunity to thank Marc and the rest of the team at Frontend Masters, who work hard to make courses like this one possible; our friends at [Codesmith](https://www.codesmith.io/), who gave us space to record the video; the Svelte community of users and contributors, and YOU, for being here. You're all wonderful. 38 | 39 | 40 | ## Housekeeping 41 | 42 | I'm going to be using [VSCode](https://code.visualstudio.com/) with the [Svelte Beta](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode) extension installed (*not* the one that's just called 'Svelte' — Svelte Beta is a fork of that extension, and will replace it in the near future). I strongly recommend you do the same. 43 | 44 | For the final stage of the workshop, we're going to use various free services that you'll need to sign up for. I recommend doing this now, so that everything is ready for later: 45 | 46 | * [Fauna](https://fauna.com) 47 | * [Auth0](https://auth0.com) 48 | * [Weatherbit](https://www.weatherbit.io) (this one takes a little while to provision API keys, so don't wait until you need it!) 49 | * [Vercel](https://vercel.com) (optional — so that you can deploy your app). You'll also need to install (or update) the Vercel CLI globally with `npm i -g vercel` 50 | 51 | ## Okay, ready? 52 | 53 | Let's do this. -------------------------------------------------------------------------------- /content/02-what-is-svelte.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: What is Svelte? 3 | --- 4 | 5 | There's a lot of different ways to describe Svelte, but let's start with this: Svelte is a **component framework**. In other words, it serves a similar purpose to projects like React and Vue. 6 | 7 | 8 | ## What is a framework? 9 | 10 | Component frameworks exist to help you write apps more **declaratively**. That word gets used a lot, so it's helpful to understand what we mean when we say that. 11 | 12 | This declarative code... 13 | 14 | ```svelte 15 | 18 | 19 | 22 | ``` 23 | 24 | ...is equivalent to this **imperative code**: 25 | 26 | ```js 27 | function component() { 28 | let count = 0; 29 | 30 | const button = document.createElement('button'); 31 | button.textContent = `Clicks: ${count}`; 32 | 33 | button.addEventListener('click', () => { 34 | count += 1; 35 | button.textContent = `Clicks: ${count}`; 36 | }); 37 | 38 | return button; 39 | } 40 | ``` 41 | 42 | In the imperative version, we're telling the browser what to do. In the declarative version, we're simply saying what outcome we want. It's a lot easier to read and write, and there's no duplication. 43 | 44 | But wait, there's more! Suppose we wanted to wrap `{count}` in a `` element. In declarative-land, you do exactly that. 45 | 46 | ```diff 47 | 50 | 51 | 55 | ``` 56 | 57 | But if we're doing things imperatively, we need to rewrite a significant chunk of the component. 58 | 59 | ```diff 60 | function component() { 61 | let count = 0; 62 | 63 | const button = document.createElement('button'); 64 | - button.textContent = `Clicks: ${count}`; 65 | + const strong = document.createElement('strong'); 66 | + strong.textContent = count; 67 | 68 | + button.append( 69 | + document.createTextNode('Clicks: '), 70 | + strong 71 | + ); 72 | 73 | button.addEventListener('click', () => { 74 | count += 1; 75 | - button.textContent = `Clicks: ${count}`; 76 | + strong.textContent = count; 77 | }); 78 | 79 | return button; 80 | } 81 | ``` 82 | 83 | It's worth spending a moment to internalise that, to understand the incredible value that component frameworks provide. 84 | 85 | Traditionally, though, there's an implicit trade-off. The framework provides a better developer experience, but it's a middleman between you and the browser. It introduces inefficiency. 86 | 87 | 88 | ## How is Svelte different? 89 | 90 | Svelte began as an experiment to prove that this is a false dichotomy. It is a **compiler** that takes your declarative code and turns it into imperative JavaScript. 91 | 92 | Compiler-centric design has a number of tangible advantages: 93 | 94 | * Your apps will generally be smaller, because we don't need to cart around a bulky framework runtime that needs to anticipate every possible use case. JavaScript is the most expensive thing on the web, and if we can use less of it our apps launch more quickly 95 | * Your apps will be faster, because we don't need to use costly techniques like re-generating a [virtual DOM](https://svelte.dev/blog/virtual-dom-is-pure-overhead) on every state change. Instead, we can make surgical, granular updates 96 | * Your apps will be easier to write, because we have more control over the authoring experience. We don't have the same constraints other people do 97 | 98 | In particular, Svelte allows you to [write less code](https://svelte.dev/blog/write-less-code), which means fewer bugs and more time spent outdoors. 99 | 100 | Beyond that, Svelte aims to make your life easier by providing answers to questions that almost every app will raise at some point, and which often involve finding and adding extra libraries: 101 | 102 | * How do we manage cross-component state? 103 | * How do we add motion and element transitions? 104 | * How do we handle user input via form elements? 105 | * How do we add CSS to our components without polluting the global scope? 106 | 107 | 108 | ## Who makes it? 109 | 110 | You do. I'm serious! 111 | 112 | Svelte isn't a project with full-time engineers and corporate funding. It is open source in the truest sense of the word — everyone who works on it does so on a voluntary basis because we believe in the project. 113 | 114 | There's a core team of developers who do the bulk of the day to day work, but they're supported by countless others, and every decision we make about the future of the framework is made with the community. 115 | 116 | It's an egalitarian, communitarian project that welcomes developers of all backgrounds, with all skill levels, and we'd love for you to be involved. -------------------------------------------------------------------------------- /content/03-the-basics.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The basics 3 | --- 4 | 5 | We're going to go through the entire Svelte tutorial. By the end of it, you'll understand what Svelte can do, and how to write Svelte components. 6 | 7 | * https://svelte.dev/tutorial 8 | 9 | 10 | ## Compilers 101 11 | 12 | While we're here, let's briefly talk about how the compiler works, and what the output looks like. You don't need to understand this stuff to be productive with Svelte, but it's good to have some basic familiarity with the process. 13 | 14 | All compilers do some version of the following steps: 15 | 16 | * Parsing — generating an **abstract syntax tree** from your source code 17 | * Transformation — generating a new AST that represents the output 18 | * Code generation — turning the new AST back into code 19 | 20 | Svelte implements its own markup parser, and embeds [Acorn](https://github.com/acornjs/acorn) and [CSSTree](https://github.com/csstree/csstree) for parsing JavaScript and CSS. You can see the result of the parse step using [AST Explorer](https://astexplorer.net/) — change the language family to `HTML` (the menu next to `Snippet`), and the language to `svelte` (the menu next to that). 21 | 22 | For example the AST for this component... 23 | 24 | ```svelte 25 | 28 | 29 |

Hello {name}!

30 | ``` 31 | 32 | ...looks like this: 33 | 34 | ```js 35 | { 36 | "html": { 37 | "type": "Fragment", 38 | "children": [ 39 | { "type": "Text", "raw": "\n\n", "data": "\n\n" }, 40 | { 41 | "type": "Element", 42 | "name": "h1", 43 | "attributes": [], 44 | "children": [ 45 | { "type": "Text", "raw": "Hello ", "data": "Hello " }, 46 | { 47 | "type": "MustacheTag", 48 | "expression": { "type": "Identifier", "name": "name" } 49 | }, 50 | { "type": "Text", "raw": "!", "data": "!" } 51 | ] 52 | } 53 | ] 54 | }, 55 | "instance": { 56 | "type": "Script", 57 | "context": "default", 58 | "content": { 59 | "type": "Program", 60 | "body": [ 61 | { 62 | "type": "VariableDeclaration", 63 | "declarations": [ 64 | { 65 | "type": "VariableDeclarator", 66 | "id": { "type": "Identifier", "name": "name" }, 67 | "init": { "type": "Literal", "value": "world", "raw": "'world'" } 68 | } 69 | ], 70 | "kind": "let" 71 | } 72 | ], 73 | "sourceType": "module" 74 | } 75 | } 76 | } 77 | ``` 78 | 79 | Svelte walks, or **traverses** this data structure, to find information out about the component — for example, which variables are exported as props, which variables need to be instrumented to make them reactive, which CSS selectors are used by the markup, whether we're using features like transitions, and so on. 80 | 81 | Once it has this clear picture of what the component is doing, it passes the AST to one of two transformers, depending on whether we're generating client-side or server-side code. 82 | 83 | The result of that process is a pure JavaScript AST, which we finally turn back into JavaScript, and the original CSS string with some light modifications. Both come with sourcemaps for easy debugging. 84 | 85 | 86 | ## Reading the output 87 | 88 | Look at this input into the [REPL](https://svelte.dev/repl/172fb72d4d6243c88bdd58ce03a89ce7?version=3.23.2). Click on 'JS Output'. 89 | 90 | ```svelte 91 | 95 | 96 |

{a} + {b} = {a + b}

97 | ``` 98 | 99 | You can see how in the `p` method (which stands for uPdate — I know...) the compiler is able to selectively update text nodes based on whether `a` has changed, `b` has changed, or in the case of `{a + b}` whether *either* `a` or `b` has changed, using **bitwise operators**. It looks like overkill for a simple example like this, but this granular change-checking is how Svelte is able to avoid re-rendering entire components when state changes. -------------------------------------------------------------------------------- /content/04-starting-from-scratch.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Starting from scratch 3 | --- 4 | 5 | You can build apps inside the [Svelte REPL](https://svelte.dev/repl), but at some point you'll want to develop in your local environment. 6 | 7 | The easiest way is to use [degit](https://github.com/Rich-Harris/degit), a git-based scaffolding tool... 8 | 9 | ```bash 10 | mkdir my-project 11 | cd my-project 12 | npx degit sveltejs/template 13 | ``` 14 | 15 | ...but it's helpful to understand how things work under the hood, so we're going to create a project from nothing. 16 | 17 | Create a new folder and add a `src` folder inside: 18 | 19 | ```bash 20 | mkdir my-project 21 | cd my-project 22 | 23 | mkdir src 24 | ``` 25 | 26 | 27 | ## Installing Rollup 28 | 29 | As of June 2020, the default template uses [Rollup](http://rollupjs.org) as its module bundler, though there is also an official [webpack loader](https://github.com/sveltejs/svelte-loader) and a plethora of third party integrations for Parcel, Snowpack, Vite and everything else you might want to use. Install Rollup... 30 | 31 | ```bash 32 | npm i -D rollup 33 | ``` 34 | 35 | ...and create a `rollup.config.js` file: 36 | 37 | ```js 38 | export default { 39 | input: 'src/main.js', 40 | output: { 41 | file: 'public/build/bundle.js', 42 | format: 'esm', 43 | sourcemap: true 44 | } 45 | }; 46 | ``` 47 | 48 | Now we need to create that `src/main.js` entry point. We'll also create a test module to import, so you can see what Rollup does: 49 | 50 | ```bash 51 | echo "import hello from './hello.js'; 52 | 53 | hello();" > src/main.js 54 | 55 | echo "export default () => { 56 | console.log('hello!'); 57 | }" > src/hello.js 58 | ``` 59 | 60 | Run Rollup with the config file... 61 | 62 | ```bash 63 | npx rollup -c 64 | ``` 65 | 66 | ...and look at the `public/build/bundle.js` file: 67 | 68 | ```js 69 | var hello = () => { 70 | console.log('hello!'); 71 | }; 72 | 73 | hello(); 74 | //# sourceMappingURL=bundle.js.map 75 | ``` 76 | 77 | Now we just need to add a `public/index.html` file to load the bundle... 78 | 79 | ```html 80 | 81 | 82 | 83 | 84 | 85 | 86 | My app 87 | 88 | 89 | 90 | 91 | Open the console! 92 | 93 | 94 | ``` 95 | 96 | ...and serve it on [localhost:5000](http://localhost:5000): 97 | 98 | ```bash 99 | npm i -D serve 100 | npx serve public 101 | ``` 102 | 103 | 104 | ## Adding plugins 105 | 106 | That's cool, but not very Sveltey. We need to teach Rollup what to do when it encounters a Svelte file. We do that with **plugins**. Specifically, in addition to Svelte itself, we need two: 107 | 108 | * [rollup-plugin-svelte](https://www.npmjs.com/package/rollup-plugin-svelte) 109 | * [@rollup/plugin-node-resolve](https://www.npmjs.com/package/@rollup/plugin-node-resolve) — teaches Rollup how to find stuff in `node_modules` 110 | 111 | Install those... 112 | 113 | ```bash 114 | npm i -D svelte rollup-plugin-svelte @rollup/plugin-node-resolve 115 | ``` 116 | 117 | ...and add them to your config: 118 | 119 | ```diff 120 | +import resolve from '@rollup/plugin-node-resolve'; 121 | +import svelte from 'rollup-plugin-svelte'; 122 | 123 | export default { 124 | input: 'src/main.js', 125 | output: { 126 | file: 'public/build/bundle.js', 127 | format: 'esm', 128 | sourcemap: true 129 | - } 130 | + }, 131 | + plugins: [ 132 | + resolve(), 133 | + svelte({ 134 | + css: result => result.write('public/bundle/bundle.css') 135 | + }) 136 | + ] 137 | }; 138 | ``` 139 | 140 | Now we can add a Svelte component. Create `App.svelte`... 141 | 142 | ```svelte 143 | 146 | 147 |

Hello {name}!

148 | 149 | 154 | ``` 155 | 156 | ...and instantiate it from `main.js`: 157 | 158 | ```js 159 | import App from './App.svelte'; 160 | 161 | new App({ 162 | target: document.body, 163 | props: { 164 | name: 'world' 165 | } 166 | }); 167 | ``` 168 | 169 | The last thing we need to do is add a link to the new `bundle.css` file in `index.html`: 170 | 171 | ```diff 172 | 173 | 174 | 175 | 176 | 177 | 178 | My app 179 | 180 | + 181 | 182 | 183 | 184 | - Open the console! 185 | 186 | 187 | ``` 188 | 189 | Now when we run Rollup, it will include your compiled Svelte component in the JavaScript bundle. Try running `npx serve again`. 190 | 191 | The official project template is slightly fancier — it has livereload and a development server built in, for example — but that's basically all there is to it. -------------------------------------------------------------------------------- /content/05-building-a-game.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Building a game 3 | --- 4 | 5 | Time to move onto the fun stuff. We're going to make a game using data from [cameo.com](http://cameo.com), an amazing website that lets you pay celebrities to record 30 second personalised videos. You can get the Insane Clown Posse to roast your friends or wish your spouse a happy anniversary. 6 | 7 | The game is called [CameoParison](https://cameoparison.netlify.app), and the goal is to guess which celebrities are expensive, and which ones are cheap. Since there's no official API, we'll grab data from [cameo-explorer.netlify.app](https://cameo-explorer.netlify.app/celebs), which contains a scraped snapshot of some of the top celebs. 8 | 9 | We'll start by cloning the [starter repo](https://github.com/Rich-Harris/cameoparison-starter): 10 | 11 | ```bash 12 | git clone git@github.com:Rich-Harris/cameoparison-starter.git 13 | ``` 14 | 15 | This is almost identical to the [default project template](https://github.com/sveltejs/template), with the addition of a couple of image files and some extra `src` modules to save time later. 16 | 17 | It also has several branches that you can check out if you get stuck following the course and need to get back on track: 18 | 19 | * `checkpoint-1` 20 | * `checkpoint-2` 21 | * `checkpoint-3` 22 | * `complete` 23 | 24 | As you follow along, make your changes in the `master` branch. 25 | 26 | 27 | ## 1. Roughing out the UI 28 | 29 | First, we'll build out the 'welcome' screen and load the celebrity data. 30 | 31 | ## 2. Basic gameplay 32 | 33 | Next, we'll implement the basic gameplay logic. 34 | 35 | ## 3. Feature complete 36 | 37 | A few more tweaks, and the game is playable from start to finish. 38 | 39 | ## 4. Polish 40 | 41 | Finally, we polish the UI up with image preloading, transitions, and CSS tweaks. -------------------------------------------------------------------------------- /content/06-building-a-sapper-app.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Building a Sapper app 3 | --- 4 | 5 | In the final section of the workshop, we'll take a tour of [Sapper](https://sapper.svelte.dev), and look through the code for an example app, [Birdland](https://birdland.now.sh). The code for Birdland is [available on GitHub](https://github.com/rich-harris/birdland). 6 | 7 | ## What is Sapper? 8 | 9 | If Svelte is a component framework, Sapper is an **application** framework. Sapper is to Svelte as [Next.js](https://nextjs.org/) is to React. 10 | 11 | It's the Svelte team's attempt to answer the question 'how do you build a fully-featured application?' It features server-side rendering, code-splitting, filesystem-based routing, and lots of other good stuff. 12 | 13 | Many sites built with Sapper can be 'exported' as static files, à la [Jamstack](https://jamstack.org/). Others, like Birdland, need to do dynamic server-side rendering. Sapper supports both, so you can use it as a static site generator without worrying that you'll outgrow it as your requirements change. -------------------------------------------------------------------------------- /content/07-more-to-explore.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: More to explore 3 | --- 4 | 5 | * [svelte.dev/chat](http://svelte.dev/chat) — our friendly Discord server 6 | * [svelte-community.netlify.app](https://svelte-community.netlify.app/) — links to component libraries and all kinds of Svelte resources 7 | * [twitter.com/sveltejs](https://twitter.com/sveltejs) — the official Twitter account 8 | * [twitter.com/sveltesociety](https://twitter.com/sveltesociety) — the home of Svelte Society 9 | * [Svelte GL](https://github.com/sveltejs/gl) — an experimental WebGL library for Svelte 10 | * [Pancake](https://pancake-charts.surge.sh/) — an experimental charting library -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:3000", 3 | "video": false 4 | } -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /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 | }); -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TODO", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.10.1", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", 10 | "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.1" 14 | } 15 | }, 16 | "@babel/compat-data": { 17 | "version": "7.10.1", 18 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.1.tgz", 19 | "integrity": "sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw==", 20 | "dev": true, 21 | "requires": { 22 | "browserslist": "^4.12.0", 23 | "invariant": "^2.2.4", 24 | "semver": "^5.5.0" 25 | } 26 | }, 27 | "@babel/core": { 28 | "version": "7.10.2", 29 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz", 30 | "integrity": "sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==", 31 | "dev": true, 32 | "requires": { 33 | "@babel/code-frame": "^7.10.1", 34 | "@babel/generator": "^7.10.2", 35 | "@babel/helper-module-transforms": "^7.10.1", 36 | "@babel/helpers": "^7.10.1", 37 | "@babel/parser": "^7.10.2", 38 | "@babel/template": "^7.10.1", 39 | "@babel/traverse": "^7.10.1", 40 | "@babel/types": "^7.10.2", 41 | "convert-source-map": "^1.7.0", 42 | "debug": "^4.1.0", 43 | "gensync": "^1.0.0-beta.1", 44 | "json5": "^2.1.2", 45 | "lodash": "^4.17.13", 46 | "resolve": "^1.3.2", 47 | "semver": "^5.4.1", 48 | "source-map": "^0.5.0" 49 | }, 50 | "dependencies": { 51 | "debug": { 52 | "version": "4.1.1", 53 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 54 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 55 | "dev": true, 56 | "requires": { 57 | "ms": "^2.1.1" 58 | } 59 | }, 60 | "ms": { 61 | "version": "2.1.2", 62 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 63 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 64 | "dev": true 65 | } 66 | } 67 | }, 68 | "@babel/generator": { 69 | "version": "7.10.2", 70 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", 71 | "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", 72 | "dev": true, 73 | "requires": { 74 | "@babel/types": "^7.10.2", 75 | "jsesc": "^2.5.1", 76 | "lodash": "^4.17.13", 77 | "source-map": "^0.5.0" 78 | } 79 | }, 80 | "@babel/helper-annotate-as-pure": { 81 | "version": "7.10.1", 82 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz", 83 | "integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==", 84 | "dev": true, 85 | "requires": { 86 | "@babel/types": "^7.10.1" 87 | } 88 | }, 89 | "@babel/helper-builder-binary-assignment-operator-visitor": { 90 | "version": "7.10.1", 91 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz", 92 | "integrity": "sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw==", 93 | "dev": true, 94 | "requires": { 95 | "@babel/helper-explode-assignable-expression": "^7.10.1", 96 | "@babel/types": "^7.10.1" 97 | } 98 | }, 99 | "@babel/helper-compilation-targets": { 100 | "version": "7.10.2", 101 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz", 102 | "integrity": "sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==", 103 | "dev": true, 104 | "requires": { 105 | "@babel/compat-data": "^7.10.1", 106 | "browserslist": "^4.12.0", 107 | "invariant": "^2.2.4", 108 | "levenary": "^1.1.1", 109 | "semver": "^5.5.0" 110 | } 111 | }, 112 | "@babel/helper-create-class-features-plugin": { 113 | "version": "7.10.2", 114 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz", 115 | "integrity": "sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ==", 116 | "dev": true, 117 | "requires": { 118 | "@babel/helper-function-name": "^7.10.1", 119 | "@babel/helper-member-expression-to-functions": "^7.10.1", 120 | "@babel/helper-optimise-call-expression": "^7.10.1", 121 | "@babel/helper-plugin-utils": "^7.10.1", 122 | "@babel/helper-replace-supers": "^7.10.1", 123 | "@babel/helper-split-export-declaration": "^7.10.1" 124 | } 125 | }, 126 | "@babel/helper-create-regexp-features-plugin": { 127 | "version": "7.10.1", 128 | "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz", 129 | "integrity": "sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==", 130 | "dev": true, 131 | "requires": { 132 | "@babel/helper-annotate-as-pure": "^7.10.1", 133 | "@babel/helper-regex": "^7.10.1", 134 | "regexpu-core": "^4.7.0" 135 | } 136 | }, 137 | "@babel/helper-define-map": { 138 | "version": "7.10.1", 139 | "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz", 140 | "integrity": "sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg==", 141 | "dev": true, 142 | "requires": { 143 | "@babel/helper-function-name": "^7.10.1", 144 | "@babel/types": "^7.10.1", 145 | "lodash": "^4.17.13" 146 | } 147 | }, 148 | "@babel/helper-explode-assignable-expression": { 149 | "version": "7.10.1", 150 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz", 151 | "integrity": "sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg==", 152 | "dev": true, 153 | "requires": { 154 | "@babel/traverse": "^7.10.1", 155 | "@babel/types": "^7.10.1" 156 | } 157 | }, 158 | "@babel/helper-function-name": { 159 | "version": "7.10.1", 160 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", 161 | "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", 162 | "dev": true, 163 | "requires": { 164 | "@babel/helper-get-function-arity": "^7.10.1", 165 | "@babel/template": "^7.10.1", 166 | "@babel/types": "^7.10.1" 167 | } 168 | }, 169 | "@babel/helper-get-function-arity": { 170 | "version": "7.10.1", 171 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", 172 | "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", 173 | "dev": true, 174 | "requires": { 175 | "@babel/types": "^7.10.1" 176 | } 177 | }, 178 | "@babel/helper-hoist-variables": { 179 | "version": "7.10.1", 180 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz", 181 | "integrity": "sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg==", 182 | "dev": true, 183 | "requires": { 184 | "@babel/types": "^7.10.1" 185 | } 186 | }, 187 | "@babel/helper-member-expression-to-functions": { 188 | "version": "7.10.1", 189 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", 190 | "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", 191 | "dev": true, 192 | "requires": { 193 | "@babel/types": "^7.10.1" 194 | } 195 | }, 196 | "@babel/helper-module-imports": { 197 | "version": "7.10.1", 198 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", 199 | "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", 200 | "dev": true, 201 | "requires": { 202 | "@babel/types": "^7.10.1" 203 | } 204 | }, 205 | "@babel/helper-module-transforms": { 206 | "version": "7.10.1", 207 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", 208 | "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", 209 | "dev": true, 210 | "requires": { 211 | "@babel/helper-module-imports": "^7.10.1", 212 | "@babel/helper-replace-supers": "^7.10.1", 213 | "@babel/helper-simple-access": "^7.10.1", 214 | "@babel/helper-split-export-declaration": "^7.10.1", 215 | "@babel/template": "^7.10.1", 216 | "@babel/types": "^7.10.1", 217 | "lodash": "^4.17.13" 218 | } 219 | }, 220 | "@babel/helper-optimise-call-expression": { 221 | "version": "7.10.1", 222 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", 223 | "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", 224 | "dev": true, 225 | "requires": { 226 | "@babel/types": "^7.10.1" 227 | } 228 | }, 229 | "@babel/helper-plugin-utils": { 230 | "version": "7.10.1", 231 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz", 232 | "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==", 233 | "dev": true 234 | }, 235 | "@babel/helper-regex": { 236 | "version": "7.10.1", 237 | "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.1.tgz", 238 | "integrity": "sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==", 239 | "dev": true, 240 | "requires": { 241 | "lodash": "^4.17.13" 242 | } 243 | }, 244 | "@babel/helper-remap-async-to-generator": { 245 | "version": "7.10.1", 246 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz", 247 | "integrity": "sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A==", 248 | "dev": true, 249 | "requires": { 250 | "@babel/helper-annotate-as-pure": "^7.10.1", 251 | "@babel/helper-wrap-function": "^7.10.1", 252 | "@babel/template": "^7.10.1", 253 | "@babel/traverse": "^7.10.1", 254 | "@babel/types": "^7.10.1" 255 | } 256 | }, 257 | "@babel/helper-replace-supers": { 258 | "version": "7.10.1", 259 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", 260 | "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", 261 | "dev": true, 262 | "requires": { 263 | "@babel/helper-member-expression-to-functions": "^7.10.1", 264 | "@babel/helper-optimise-call-expression": "^7.10.1", 265 | "@babel/traverse": "^7.10.1", 266 | "@babel/types": "^7.10.1" 267 | } 268 | }, 269 | "@babel/helper-simple-access": { 270 | "version": "7.10.1", 271 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", 272 | "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", 273 | "dev": true, 274 | "requires": { 275 | "@babel/template": "^7.10.1", 276 | "@babel/types": "^7.10.1" 277 | } 278 | }, 279 | "@babel/helper-split-export-declaration": { 280 | "version": "7.10.1", 281 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", 282 | "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", 283 | "dev": true, 284 | "requires": { 285 | "@babel/types": "^7.10.1" 286 | } 287 | }, 288 | "@babel/helper-validator-identifier": { 289 | "version": "7.10.1", 290 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", 291 | "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", 292 | "dev": true 293 | }, 294 | "@babel/helper-wrap-function": { 295 | "version": "7.10.1", 296 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz", 297 | "integrity": "sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==", 298 | "dev": true, 299 | "requires": { 300 | "@babel/helper-function-name": "^7.10.1", 301 | "@babel/template": "^7.10.1", 302 | "@babel/traverse": "^7.10.1", 303 | "@babel/types": "^7.10.1" 304 | } 305 | }, 306 | "@babel/helpers": { 307 | "version": "7.10.1", 308 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", 309 | "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", 310 | "dev": true, 311 | "requires": { 312 | "@babel/template": "^7.10.1", 313 | "@babel/traverse": "^7.10.1", 314 | "@babel/types": "^7.10.1" 315 | } 316 | }, 317 | "@babel/highlight": { 318 | "version": "7.10.1", 319 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", 320 | "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", 321 | "dev": true, 322 | "requires": { 323 | "@babel/helper-validator-identifier": "^7.10.1", 324 | "chalk": "^2.0.0", 325 | "js-tokens": "^4.0.0" 326 | } 327 | }, 328 | "@babel/parser": { 329 | "version": "7.10.2", 330 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", 331 | "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", 332 | "dev": true 333 | }, 334 | "@babel/plugin-proposal-async-generator-functions": { 335 | "version": "7.10.1", 336 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz", 337 | "integrity": "sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw==", 338 | "dev": true, 339 | "requires": { 340 | "@babel/helper-plugin-utils": "^7.10.1", 341 | "@babel/helper-remap-async-to-generator": "^7.10.1", 342 | "@babel/plugin-syntax-async-generators": "^7.8.0" 343 | } 344 | }, 345 | "@babel/plugin-proposal-class-properties": { 346 | "version": "7.10.1", 347 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz", 348 | "integrity": "sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==", 349 | "dev": true, 350 | "requires": { 351 | "@babel/helper-create-class-features-plugin": "^7.10.1", 352 | "@babel/helper-plugin-utils": "^7.10.1" 353 | } 354 | }, 355 | "@babel/plugin-proposal-dynamic-import": { 356 | "version": "7.10.1", 357 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz", 358 | "integrity": "sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==", 359 | "dev": true, 360 | "requires": { 361 | "@babel/helper-plugin-utils": "^7.10.1", 362 | "@babel/plugin-syntax-dynamic-import": "^7.8.0" 363 | } 364 | }, 365 | "@babel/plugin-proposal-json-strings": { 366 | "version": "7.10.1", 367 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz", 368 | "integrity": "sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==", 369 | "dev": true, 370 | "requires": { 371 | "@babel/helper-plugin-utils": "^7.10.1", 372 | "@babel/plugin-syntax-json-strings": "^7.8.0" 373 | } 374 | }, 375 | "@babel/plugin-proposal-nullish-coalescing-operator": { 376 | "version": "7.10.1", 377 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz", 378 | "integrity": "sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==", 379 | "dev": true, 380 | "requires": { 381 | "@babel/helper-plugin-utils": "^7.10.1", 382 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" 383 | } 384 | }, 385 | "@babel/plugin-proposal-numeric-separator": { 386 | "version": "7.10.1", 387 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz", 388 | "integrity": "sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==", 389 | "dev": true, 390 | "requires": { 391 | "@babel/helper-plugin-utils": "^7.10.1", 392 | "@babel/plugin-syntax-numeric-separator": "^7.10.1" 393 | } 394 | }, 395 | "@babel/plugin-proposal-object-rest-spread": { 396 | "version": "7.10.1", 397 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz", 398 | "integrity": "sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==", 399 | "dev": true, 400 | "requires": { 401 | "@babel/helper-plugin-utils": "^7.10.1", 402 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0", 403 | "@babel/plugin-transform-parameters": "^7.10.1" 404 | } 405 | }, 406 | "@babel/plugin-proposal-optional-catch-binding": { 407 | "version": "7.10.1", 408 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz", 409 | "integrity": "sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==", 410 | "dev": true, 411 | "requires": { 412 | "@babel/helper-plugin-utils": "^7.10.1", 413 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" 414 | } 415 | }, 416 | "@babel/plugin-proposal-optional-chaining": { 417 | "version": "7.10.1", 418 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz", 419 | "integrity": "sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA==", 420 | "dev": true, 421 | "requires": { 422 | "@babel/helper-plugin-utils": "^7.10.1", 423 | "@babel/plugin-syntax-optional-chaining": "^7.8.0" 424 | } 425 | }, 426 | "@babel/plugin-proposal-private-methods": { 427 | "version": "7.10.1", 428 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz", 429 | "integrity": "sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==", 430 | "dev": true, 431 | "requires": { 432 | "@babel/helper-create-class-features-plugin": "^7.10.1", 433 | "@babel/helper-plugin-utils": "^7.10.1" 434 | } 435 | }, 436 | "@babel/plugin-proposal-unicode-property-regex": { 437 | "version": "7.10.1", 438 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz", 439 | "integrity": "sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==", 440 | "dev": true, 441 | "requires": { 442 | "@babel/helper-create-regexp-features-plugin": "^7.10.1", 443 | "@babel/helper-plugin-utils": "^7.10.1" 444 | } 445 | }, 446 | "@babel/plugin-syntax-async-generators": { 447 | "version": "7.8.4", 448 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 449 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 450 | "dev": true, 451 | "requires": { 452 | "@babel/helper-plugin-utils": "^7.8.0" 453 | } 454 | }, 455 | "@babel/plugin-syntax-class-properties": { 456 | "version": "7.10.1", 457 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz", 458 | "integrity": "sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==", 459 | "dev": true, 460 | "requires": { 461 | "@babel/helper-plugin-utils": "^7.10.1" 462 | } 463 | }, 464 | "@babel/plugin-syntax-dynamic-import": { 465 | "version": "7.8.3", 466 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 467 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 468 | "dev": true, 469 | "requires": { 470 | "@babel/helper-plugin-utils": "^7.8.0" 471 | } 472 | }, 473 | "@babel/plugin-syntax-json-strings": { 474 | "version": "7.8.3", 475 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 476 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 477 | "dev": true, 478 | "requires": { 479 | "@babel/helper-plugin-utils": "^7.8.0" 480 | } 481 | }, 482 | "@babel/plugin-syntax-nullish-coalescing-operator": { 483 | "version": "7.8.3", 484 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 485 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 486 | "dev": true, 487 | "requires": { 488 | "@babel/helper-plugin-utils": "^7.8.0" 489 | } 490 | }, 491 | "@babel/plugin-syntax-numeric-separator": { 492 | "version": "7.10.1", 493 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz", 494 | "integrity": "sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==", 495 | "dev": true, 496 | "requires": { 497 | "@babel/helper-plugin-utils": "^7.10.1" 498 | } 499 | }, 500 | "@babel/plugin-syntax-object-rest-spread": { 501 | "version": "7.8.3", 502 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 503 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 504 | "dev": true, 505 | "requires": { 506 | "@babel/helper-plugin-utils": "^7.8.0" 507 | } 508 | }, 509 | "@babel/plugin-syntax-optional-catch-binding": { 510 | "version": "7.8.3", 511 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 512 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 513 | "dev": true, 514 | "requires": { 515 | "@babel/helper-plugin-utils": "^7.8.0" 516 | } 517 | }, 518 | "@babel/plugin-syntax-optional-chaining": { 519 | "version": "7.8.3", 520 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 521 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 522 | "dev": true, 523 | "requires": { 524 | "@babel/helper-plugin-utils": "^7.8.0" 525 | } 526 | }, 527 | "@babel/plugin-syntax-top-level-await": { 528 | "version": "7.10.1", 529 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz", 530 | "integrity": "sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==", 531 | "dev": true, 532 | "requires": { 533 | "@babel/helper-plugin-utils": "^7.10.1" 534 | } 535 | }, 536 | "@babel/plugin-transform-arrow-functions": { 537 | "version": "7.10.1", 538 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz", 539 | "integrity": "sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==", 540 | "dev": true, 541 | "requires": { 542 | "@babel/helper-plugin-utils": "^7.10.1" 543 | } 544 | }, 545 | "@babel/plugin-transform-async-to-generator": { 546 | "version": "7.10.1", 547 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz", 548 | "integrity": "sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==", 549 | "dev": true, 550 | "requires": { 551 | "@babel/helper-module-imports": "^7.10.1", 552 | "@babel/helper-plugin-utils": "^7.10.1", 553 | "@babel/helper-remap-async-to-generator": "^7.10.1" 554 | } 555 | }, 556 | "@babel/plugin-transform-block-scoped-functions": { 557 | "version": "7.10.1", 558 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz", 559 | "integrity": "sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==", 560 | "dev": true, 561 | "requires": { 562 | "@babel/helper-plugin-utils": "^7.10.1" 563 | } 564 | }, 565 | "@babel/plugin-transform-block-scoping": { 566 | "version": "7.10.1", 567 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz", 568 | "integrity": "sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==", 569 | "dev": true, 570 | "requires": { 571 | "@babel/helper-plugin-utils": "^7.10.1", 572 | "lodash": "^4.17.13" 573 | } 574 | }, 575 | "@babel/plugin-transform-classes": { 576 | "version": "7.10.1", 577 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz", 578 | "integrity": "sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ==", 579 | "dev": true, 580 | "requires": { 581 | "@babel/helper-annotate-as-pure": "^7.10.1", 582 | "@babel/helper-define-map": "^7.10.1", 583 | "@babel/helper-function-name": "^7.10.1", 584 | "@babel/helper-optimise-call-expression": "^7.10.1", 585 | "@babel/helper-plugin-utils": "^7.10.1", 586 | "@babel/helper-replace-supers": "^7.10.1", 587 | "@babel/helper-split-export-declaration": "^7.10.1", 588 | "globals": "^11.1.0" 589 | } 590 | }, 591 | "@babel/plugin-transform-computed-properties": { 592 | "version": "7.10.1", 593 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz", 594 | "integrity": "sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ==", 595 | "dev": true, 596 | "requires": { 597 | "@babel/helper-plugin-utils": "^7.10.1" 598 | } 599 | }, 600 | "@babel/plugin-transform-destructuring": { 601 | "version": "7.10.1", 602 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz", 603 | "integrity": "sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==", 604 | "dev": true, 605 | "requires": { 606 | "@babel/helper-plugin-utils": "^7.10.1" 607 | } 608 | }, 609 | "@babel/plugin-transform-dotall-regex": { 610 | "version": "7.10.1", 611 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz", 612 | "integrity": "sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==", 613 | "dev": true, 614 | "requires": { 615 | "@babel/helper-create-regexp-features-plugin": "^7.10.1", 616 | "@babel/helper-plugin-utils": "^7.10.1" 617 | } 618 | }, 619 | "@babel/plugin-transform-duplicate-keys": { 620 | "version": "7.10.1", 621 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz", 622 | "integrity": "sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==", 623 | "dev": true, 624 | "requires": { 625 | "@babel/helper-plugin-utils": "^7.10.1" 626 | } 627 | }, 628 | "@babel/plugin-transform-exponentiation-operator": { 629 | "version": "7.10.1", 630 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz", 631 | "integrity": "sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==", 632 | "dev": true, 633 | "requires": { 634 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.1", 635 | "@babel/helper-plugin-utils": "^7.10.1" 636 | } 637 | }, 638 | "@babel/plugin-transform-for-of": { 639 | "version": "7.10.1", 640 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz", 641 | "integrity": "sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==", 642 | "dev": true, 643 | "requires": { 644 | "@babel/helper-plugin-utils": "^7.10.1" 645 | } 646 | }, 647 | "@babel/plugin-transform-function-name": { 648 | "version": "7.10.1", 649 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz", 650 | "integrity": "sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==", 651 | "dev": true, 652 | "requires": { 653 | "@babel/helper-function-name": "^7.10.1", 654 | "@babel/helper-plugin-utils": "^7.10.1" 655 | } 656 | }, 657 | "@babel/plugin-transform-literals": { 658 | "version": "7.10.1", 659 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz", 660 | "integrity": "sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==", 661 | "dev": true, 662 | "requires": { 663 | "@babel/helper-plugin-utils": "^7.10.1" 664 | } 665 | }, 666 | "@babel/plugin-transform-member-expression-literals": { 667 | "version": "7.10.1", 668 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz", 669 | "integrity": "sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==", 670 | "dev": true, 671 | "requires": { 672 | "@babel/helper-plugin-utils": "^7.10.1" 673 | } 674 | }, 675 | "@babel/plugin-transform-modules-amd": { 676 | "version": "7.10.1", 677 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz", 678 | "integrity": "sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==", 679 | "dev": true, 680 | "requires": { 681 | "@babel/helper-module-transforms": "^7.10.1", 682 | "@babel/helper-plugin-utils": "^7.10.1", 683 | "babel-plugin-dynamic-import-node": "^2.3.3" 684 | } 685 | }, 686 | "@babel/plugin-transform-modules-commonjs": { 687 | "version": "7.10.1", 688 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz", 689 | "integrity": "sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==", 690 | "dev": true, 691 | "requires": { 692 | "@babel/helper-module-transforms": "^7.10.1", 693 | "@babel/helper-plugin-utils": "^7.10.1", 694 | "@babel/helper-simple-access": "^7.10.1", 695 | "babel-plugin-dynamic-import-node": "^2.3.3" 696 | } 697 | }, 698 | "@babel/plugin-transform-modules-systemjs": { 699 | "version": "7.10.1", 700 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz", 701 | "integrity": "sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA==", 702 | "dev": true, 703 | "requires": { 704 | "@babel/helper-hoist-variables": "^7.10.1", 705 | "@babel/helper-module-transforms": "^7.10.1", 706 | "@babel/helper-plugin-utils": "^7.10.1", 707 | "babel-plugin-dynamic-import-node": "^2.3.3" 708 | } 709 | }, 710 | "@babel/plugin-transform-modules-umd": { 711 | "version": "7.10.1", 712 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz", 713 | "integrity": "sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==", 714 | "dev": true, 715 | "requires": { 716 | "@babel/helper-module-transforms": "^7.10.1", 717 | "@babel/helper-plugin-utils": "^7.10.1" 718 | } 719 | }, 720 | "@babel/plugin-transform-named-capturing-groups-regex": { 721 | "version": "7.8.3", 722 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", 723 | "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", 724 | "dev": true, 725 | "requires": { 726 | "@babel/helper-create-regexp-features-plugin": "^7.8.3" 727 | } 728 | }, 729 | "@babel/plugin-transform-new-target": { 730 | "version": "7.10.1", 731 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz", 732 | "integrity": "sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==", 733 | "dev": true, 734 | "requires": { 735 | "@babel/helper-plugin-utils": "^7.10.1" 736 | } 737 | }, 738 | "@babel/plugin-transform-object-super": { 739 | "version": "7.10.1", 740 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz", 741 | "integrity": "sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==", 742 | "dev": true, 743 | "requires": { 744 | "@babel/helper-plugin-utils": "^7.10.1", 745 | "@babel/helper-replace-supers": "^7.10.1" 746 | } 747 | }, 748 | "@babel/plugin-transform-parameters": { 749 | "version": "7.10.1", 750 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz", 751 | "integrity": "sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==", 752 | "dev": true, 753 | "requires": { 754 | "@babel/helper-get-function-arity": "^7.10.1", 755 | "@babel/helper-plugin-utils": "^7.10.1" 756 | } 757 | }, 758 | "@babel/plugin-transform-property-literals": { 759 | "version": "7.10.1", 760 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz", 761 | "integrity": "sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==", 762 | "dev": true, 763 | "requires": { 764 | "@babel/helper-plugin-utils": "^7.10.1" 765 | } 766 | }, 767 | "@babel/plugin-transform-regenerator": { 768 | "version": "7.10.1", 769 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz", 770 | "integrity": "sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw==", 771 | "dev": true, 772 | "requires": { 773 | "regenerator-transform": "^0.14.2" 774 | } 775 | }, 776 | "@babel/plugin-transform-reserved-words": { 777 | "version": "7.10.1", 778 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz", 779 | "integrity": "sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==", 780 | "dev": true, 781 | "requires": { 782 | "@babel/helper-plugin-utils": "^7.10.1" 783 | } 784 | }, 785 | "@babel/plugin-transform-runtime": { 786 | "version": "7.10.1", 787 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz", 788 | "integrity": "sha512-4w2tcglDVEwXJ5qxsY++DgWQdNJcCCsPxfT34wCUwIf2E7dI7pMpH8JczkMBbgBTNzBX62SZlNJ9H+De6Zebaw==", 789 | "dev": true, 790 | "requires": { 791 | "@babel/helper-module-imports": "^7.10.1", 792 | "@babel/helper-plugin-utils": "^7.10.1", 793 | "resolve": "^1.8.1", 794 | "semver": "^5.5.1" 795 | } 796 | }, 797 | "@babel/plugin-transform-shorthand-properties": { 798 | "version": "7.10.1", 799 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz", 800 | "integrity": "sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==", 801 | "dev": true, 802 | "requires": { 803 | "@babel/helper-plugin-utils": "^7.10.1" 804 | } 805 | }, 806 | "@babel/plugin-transform-spread": { 807 | "version": "7.10.1", 808 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz", 809 | "integrity": "sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==", 810 | "dev": true, 811 | "requires": { 812 | "@babel/helper-plugin-utils": "^7.10.1" 813 | } 814 | }, 815 | "@babel/plugin-transform-sticky-regex": { 816 | "version": "7.10.1", 817 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz", 818 | "integrity": "sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==", 819 | "dev": true, 820 | "requires": { 821 | "@babel/helper-plugin-utils": "^7.10.1", 822 | "@babel/helper-regex": "^7.10.1" 823 | } 824 | }, 825 | "@babel/plugin-transform-template-literals": { 826 | "version": "7.10.1", 827 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz", 828 | "integrity": "sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg==", 829 | "dev": true, 830 | "requires": { 831 | "@babel/helper-annotate-as-pure": "^7.10.1", 832 | "@babel/helper-plugin-utils": "^7.10.1" 833 | } 834 | }, 835 | "@babel/plugin-transform-typeof-symbol": { 836 | "version": "7.10.1", 837 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz", 838 | "integrity": "sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==", 839 | "dev": true, 840 | "requires": { 841 | "@babel/helper-plugin-utils": "^7.10.1" 842 | } 843 | }, 844 | "@babel/plugin-transform-unicode-escapes": { 845 | "version": "7.10.1", 846 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz", 847 | "integrity": "sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==", 848 | "dev": true, 849 | "requires": { 850 | "@babel/helper-plugin-utils": "^7.10.1" 851 | } 852 | }, 853 | "@babel/plugin-transform-unicode-regex": { 854 | "version": "7.10.1", 855 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz", 856 | "integrity": "sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==", 857 | "dev": true, 858 | "requires": { 859 | "@babel/helper-create-regexp-features-plugin": "^7.10.1", 860 | "@babel/helper-plugin-utils": "^7.10.1" 861 | } 862 | }, 863 | "@babel/preset-env": { 864 | "version": "7.10.2", 865 | "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.2.tgz", 866 | "integrity": "sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA==", 867 | "dev": true, 868 | "requires": { 869 | "@babel/compat-data": "^7.10.1", 870 | "@babel/helper-compilation-targets": "^7.10.2", 871 | "@babel/helper-module-imports": "^7.10.1", 872 | "@babel/helper-plugin-utils": "^7.10.1", 873 | "@babel/plugin-proposal-async-generator-functions": "^7.10.1", 874 | "@babel/plugin-proposal-class-properties": "^7.10.1", 875 | "@babel/plugin-proposal-dynamic-import": "^7.10.1", 876 | "@babel/plugin-proposal-json-strings": "^7.10.1", 877 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", 878 | "@babel/plugin-proposal-numeric-separator": "^7.10.1", 879 | "@babel/plugin-proposal-object-rest-spread": "^7.10.1", 880 | "@babel/plugin-proposal-optional-catch-binding": "^7.10.1", 881 | "@babel/plugin-proposal-optional-chaining": "^7.10.1", 882 | "@babel/plugin-proposal-private-methods": "^7.10.1", 883 | "@babel/plugin-proposal-unicode-property-regex": "^7.10.1", 884 | "@babel/plugin-syntax-async-generators": "^7.8.0", 885 | "@babel/plugin-syntax-class-properties": "^7.10.1", 886 | "@babel/plugin-syntax-dynamic-import": "^7.8.0", 887 | "@babel/plugin-syntax-json-strings": "^7.8.0", 888 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", 889 | "@babel/plugin-syntax-numeric-separator": "^7.10.1", 890 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0", 891 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", 892 | "@babel/plugin-syntax-optional-chaining": "^7.8.0", 893 | "@babel/plugin-syntax-top-level-await": "^7.10.1", 894 | "@babel/plugin-transform-arrow-functions": "^7.10.1", 895 | "@babel/plugin-transform-async-to-generator": "^7.10.1", 896 | "@babel/plugin-transform-block-scoped-functions": "^7.10.1", 897 | "@babel/plugin-transform-block-scoping": "^7.10.1", 898 | "@babel/plugin-transform-classes": "^7.10.1", 899 | "@babel/plugin-transform-computed-properties": "^7.10.1", 900 | "@babel/plugin-transform-destructuring": "^7.10.1", 901 | "@babel/plugin-transform-dotall-regex": "^7.10.1", 902 | "@babel/plugin-transform-duplicate-keys": "^7.10.1", 903 | "@babel/plugin-transform-exponentiation-operator": "^7.10.1", 904 | "@babel/plugin-transform-for-of": "^7.10.1", 905 | "@babel/plugin-transform-function-name": "^7.10.1", 906 | "@babel/plugin-transform-literals": "^7.10.1", 907 | "@babel/plugin-transform-member-expression-literals": "^7.10.1", 908 | "@babel/plugin-transform-modules-amd": "^7.10.1", 909 | "@babel/plugin-transform-modules-commonjs": "^7.10.1", 910 | "@babel/plugin-transform-modules-systemjs": "^7.10.1", 911 | "@babel/plugin-transform-modules-umd": "^7.10.1", 912 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", 913 | "@babel/plugin-transform-new-target": "^7.10.1", 914 | "@babel/plugin-transform-object-super": "^7.10.1", 915 | "@babel/plugin-transform-parameters": "^7.10.1", 916 | "@babel/plugin-transform-property-literals": "^7.10.1", 917 | "@babel/plugin-transform-regenerator": "^7.10.1", 918 | "@babel/plugin-transform-reserved-words": "^7.10.1", 919 | "@babel/plugin-transform-shorthand-properties": "^7.10.1", 920 | "@babel/plugin-transform-spread": "^7.10.1", 921 | "@babel/plugin-transform-sticky-regex": "^7.10.1", 922 | "@babel/plugin-transform-template-literals": "^7.10.1", 923 | "@babel/plugin-transform-typeof-symbol": "^7.10.1", 924 | "@babel/plugin-transform-unicode-escapes": "^7.10.1", 925 | "@babel/plugin-transform-unicode-regex": "^7.10.1", 926 | "@babel/preset-modules": "^0.1.3", 927 | "@babel/types": "^7.10.2", 928 | "browserslist": "^4.12.0", 929 | "core-js-compat": "^3.6.2", 930 | "invariant": "^2.2.2", 931 | "levenary": "^1.1.1", 932 | "semver": "^5.5.0" 933 | } 934 | }, 935 | "@babel/preset-modules": { 936 | "version": "0.1.3", 937 | "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", 938 | "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", 939 | "dev": true, 940 | "requires": { 941 | "@babel/helper-plugin-utils": "^7.0.0", 942 | "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", 943 | "@babel/plugin-transform-dotall-regex": "^7.4.4", 944 | "@babel/types": "^7.4.4", 945 | "esutils": "^2.0.2" 946 | } 947 | }, 948 | "@babel/runtime": { 949 | "version": "7.10.2", 950 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", 951 | "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", 952 | "dev": true, 953 | "requires": { 954 | "regenerator-runtime": "^0.13.4" 955 | } 956 | }, 957 | "@babel/template": { 958 | "version": "7.10.1", 959 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", 960 | "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", 961 | "dev": true, 962 | "requires": { 963 | "@babel/code-frame": "^7.10.1", 964 | "@babel/parser": "^7.10.1", 965 | "@babel/types": "^7.10.1" 966 | } 967 | }, 968 | "@babel/traverse": { 969 | "version": "7.10.1", 970 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", 971 | "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", 972 | "dev": true, 973 | "requires": { 974 | "@babel/code-frame": "^7.10.1", 975 | "@babel/generator": "^7.10.1", 976 | "@babel/helper-function-name": "^7.10.1", 977 | "@babel/helper-split-export-declaration": "^7.10.1", 978 | "@babel/parser": "^7.10.1", 979 | "@babel/types": "^7.10.1", 980 | "debug": "^4.1.0", 981 | "globals": "^11.1.0", 982 | "lodash": "^4.17.13" 983 | }, 984 | "dependencies": { 985 | "debug": { 986 | "version": "4.1.1", 987 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 988 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 989 | "dev": true, 990 | "requires": { 991 | "ms": "^2.1.1" 992 | } 993 | }, 994 | "ms": { 995 | "version": "2.1.2", 996 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 997 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 998 | "dev": true 999 | } 1000 | } 1001 | }, 1002 | "@babel/types": { 1003 | "version": "7.10.2", 1004 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", 1005 | "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", 1006 | "dev": true, 1007 | "requires": { 1008 | "@babel/helper-validator-identifier": "^7.10.1", 1009 | "lodash": "^4.17.13", 1010 | "to-fast-properties": "^2.0.0" 1011 | } 1012 | }, 1013 | "@polka/url": { 1014 | "version": "1.0.0-next.11", 1015 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.11.tgz", 1016 | "integrity": "sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA==" 1017 | }, 1018 | "@rollup/plugin-babel": { 1019 | "version": "5.0.2", 1020 | "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.0.2.tgz", 1021 | "integrity": "sha512-GiL7jL+FGppzQ1Sn4y2ER4UYXlgXFFEt+sHm4WJEzQwI76Yf9oy2QDqIvcon6xApZWlik3L8fezRGC6Mj2vRXg==", 1022 | "dev": true, 1023 | "requires": { 1024 | "@babel/helper-module-imports": "^7.7.4", 1025 | "@rollup/pluginutils": "^3.0.8" 1026 | } 1027 | }, 1028 | "@rollup/plugin-commonjs": { 1029 | "version": "12.0.0", 1030 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-12.0.0.tgz", 1031 | "integrity": "sha512-8+mDQt1QUmN+4Y9D3yCG8AJNewuTSLYPJVzKKUZ+lGeQrI+bV12Tc5HCyt2WdlnG6ihIL/DPbKRJlB40DX40mw==", 1032 | "dev": true, 1033 | "requires": { 1034 | "@rollup/pluginutils": "^3.0.8", 1035 | "commondir": "^1.0.1", 1036 | "estree-walker": "^1.0.1", 1037 | "glob": "^7.1.2", 1038 | "is-reference": "^1.1.2", 1039 | "magic-string": "^0.25.2", 1040 | "resolve": "^1.11.0" 1041 | } 1042 | }, 1043 | "@rollup/plugin-node-resolve": { 1044 | "version": "8.0.0", 1045 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.0.0.tgz", 1046 | "integrity": "sha512-5poJCChrkVggXXND/sQ7yNqwjUNT4fP31gpRWCnSNnlXuUXTCMHT33xZrTGxgjm5Rl18MHj7iEzlCT8rYWwQSA==", 1047 | "dev": true, 1048 | "requires": { 1049 | "@rollup/pluginutils": "^3.0.8", 1050 | "@types/resolve": "0.0.8", 1051 | "builtin-modules": "^3.1.0", 1052 | "deep-freeze": "^0.0.1", 1053 | "deepmerge": "^4.2.2", 1054 | "is-module": "^1.0.0", 1055 | "resolve": "^1.14.2" 1056 | } 1057 | }, 1058 | "@rollup/plugin-replace": { 1059 | "version": "2.3.2", 1060 | "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.2.tgz", 1061 | "integrity": "sha512-KEEL7V2tMNOsbAoNMKg91l1sNXBDoiP31GFlqXVOuV5691VQKzKBh91+OKKOG4uQWYqcFskcjFyh1d5YnZd0Zw==", 1062 | "dev": true, 1063 | "requires": { 1064 | "@rollup/pluginutils": "^3.0.8", 1065 | "magic-string": "^0.25.5" 1066 | } 1067 | }, 1068 | "@rollup/pluginutils": { 1069 | "version": "3.0.10", 1070 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.10.tgz", 1071 | "integrity": "sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==", 1072 | "dev": true, 1073 | "requires": { 1074 | "@types/estree": "0.0.39", 1075 | "estree-walker": "^1.0.1", 1076 | "picomatch": "^2.2.2" 1077 | } 1078 | }, 1079 | "@sindresorhus/slugify": { 1080 | "version": "0.9.1", 1081 | "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-0.9.1.tgz", 1082 | "integrity": "sha512-b6heYM9dzZD13t2GOiEQTDE0qX+I1GyOotMwKh9VQqzuNiVdPVT8dM43fe9HNb/3ul+Qwd5oKSEDrDIfhq3bnQ==", 1083 | "requires": { 1084 | "escape-string-regexp": "^1.0.5", 1085 | "lodash.deburr": "^4.1.0" 1086 | } 1087 | }, 1088 | "@sveltejs/site-kit": { 1089 | "version": "1.1.5", 1090 | "resolved": "https://registry.npmjs.org/@sveltejs/site-kit/-/site-kit-1.1.5.tgz", 1091 | "integrity": "sha512-Rs2quQ/H00DAN/ZTFa+unLefL335UW3Yo4I2rTocW5JwW73Kvi5++d7BcY8LsjhMCbG1PkwQmJE2RVrIIxQcOw==", 1092 | "requires": { 1093 | "@sindresorhus/slugify": "^0.9.1", 1094 | "golden-fleece": "^1.0.9" 1095 | } 1096 | }, 1097 | "@types/estree": { 1098 | "version": "0.0.39", 1099 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 1100 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 1101 | "dev": true 1102 | }, 1103 | "@types/node": { 1104 | "version": "14.0.6", 1105 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.6.tgz", 1106 | "integrity": "sha512-FbNmu4F67d3oZMWBV6Y4MaPER+0EpE9eIYf2yaHhCWovc1dlXCZkqGX4NLHfVVr6umt20TNBdRzrNJIzIKfdbw==", 1107 | "dev": true 1108 | }, 1109 | "@types/resolve": { 1110 | "version": "0.0.8", 1111 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", 1112 | "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", 1113 | "dev": true, 1114 | "requires": { 1115 | "@types/node": "*" 1116 | } 1117 | }, 1118 | "accepts": { 1119 | "version": "1.3.7", 1120 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 1121 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 1122 | "requires": { 1123 | "mime-types": "~2.1.24", 1124 | "negotiator": "0.6.2" 1125 | } 1126 | }, 1127 | "ansi-styles": { 1128 | "version": "3.2.1", 1129 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1130 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1131 | "dev": true, 1132 | "requires": { 1133 | "color-convert": "^1.9.0" 1134 | } 1135 | }, 1136 | "babel-plugin-dynamic-import-node": { 1137 | "version": "2.3.3", 1138 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", 1139 | "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", 1140 | "dev": true, 1141 | "requires": { 1142 | "object.assign": "^4.1.0" 1143 | } 1144 | }, 1145 | "balanced-match": { 1146 | "version": "1.0.0", 1147 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1148 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 1149 | "dev": true 1150 | }, 1151 | "brace-expansion": { 1152 | "version": "1.1.11", 1153 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1154 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1155 | "dev": true, 1156 | "requires": { 1157 | "balanced-match": "^1.0.0", 1158 | "concat-map": "0.0.1" 1159 | } 1160 | }, 1161 | "browserslist": { 1162 | "version": "4.12.0", 1163 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", 1164 | "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", 1165 | "dev": true, 1166 | "requires": { 1167 | "caniuse-lite": "^1.0.30001043", 1168 | "electron-to-chromium": "^1.3.413", 1169 | "node-releases": "^1.1.53", 1170 | "pkg-up": "^2.0.0" 1171 | } 1172 | }, 1173 | "buffer-from": { 1174 | "version": "1.1.1", 1175 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1176 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 1177 | "dev": true 1178 | }, 1179 | "builtin-modules": { 1180 | "version": "3.1.0", 1181 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", 1182 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", 1183 | "dev": true 1184 | }, 1185 | "bytes": { 1186 | "version": "3.0.0", 1187 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 1188 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 1189 | }, 1190 | "camel-case": { 1191 | "version": "3.0.0", 1192 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", 1193 | "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", 1194 | "dev": true, 1195 | "requires": { 1196 | "no-case": "^2.2.0", 1197 | "upper-case": "^1.1.1" 1198 | } 1199 | }, 1200 | "caniuse-lite": { 1201 | "version": "1.0.30001066", 1202 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz", 1203 | "integrity": "sha512-Gfj/WAastBtfxLws0RCh2sDbTK/8rJuSeZMecrSkNGYxPcv7EzblmDGfWQCFEQcSqYE2BRgQiJh8HOD07N5hIw==", 1204 | "dev": true 1205 | }, 1206 | "chalk": { 1207 | "version": "2.4.2", 1208 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1209 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1210 | "dev": true, 1211 | "requires": { 1212 | "ansi-styles": "^3.2.1", 1213 | "escape-string-regexp": "^1.0.5", 1214 | "supports-color": "^5.3.0" 1215 | } 1216 | }, 1217 | "clean-css": { 1218 | "version": "4.2.3", 1219 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", 1220 | "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", 1221 | "dev": true, 1222 | "requires": { 1223 | "source-map": "~0.6.0" 1224 | }, 1225 | "dependencies": { 1226 | "source-map": { 1227 | "version": "0.6.1", 1228 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1229 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1230 | "dev": true 1231 | } 1232 | } 1233 | }, 1234 | "clipboard": { 1235 | "version": "2.0.6", 1236 | "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", 1237 | "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", 1238 | "optional": true, 1239 | "requires": { 1240 | "good-listener": "^1.2.2", 1241 | "select": "^1.1.2", 1242 | "tiny-emitter": "^2.0.0" 1243 | } 1244 | }, 1245 | "color-convert": { 1246 | "version": "1.9.3", 1247 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1248 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1249 | "dev": true, 1250 | "requires": { 1251 | "color-name": "1.1.3" 1252 | } 1253 | }, 1254 | "color-name": { 1255 | "version": "1.1.3", 1256 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1257 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1258 | "dev": true 1259 | }, 1260 | "commander": { 1261 | "version": "2.20.3", 1262 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1263 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1264 | "dev": true 1265 | }, 1266 | "commondir": { 1267 | "version": "1.0.1", 1268 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1269 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 1270 | "dev": true 1271 | }, 1272 | "compressible": { 1273 | "version": "2.0.18", 1274 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 1275 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 1276 | "requires": { 1277 | "mime-db": ">= 1.43.0 < 2" 1278 | } 1279 | }, 1280 | "compression": { 1281 | "version": "1.7.4", 1282 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", 1283 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", 1284 | "requires": { 1285 | "accepts": "~1.3.5", 1286 | "bytes": "3.0.0", 1287 | "compressible": "~2.0.16", 1288 | "debug": "2.6.9", 1289 | "on-headers": "~1.0.2", 1290 | "safe-buffer": "5.1.2", 1291 | "vary": "~1.1.2" 1292 | } 1293 | }, 1294 | "concat-map": { 1295 | "version": "0.0.1", 1296 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1297 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1298 | "dev": true 1299 | }, 1300 | "convert-source-map": { 1301 | "version": "1.7.0", 1302 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", 1303 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", 1304 | "dev": true, 1305 | "requires": { 1306 | "safe-buffer": "~5.1.1" 1307 | } 1308 | }, 1309 | "core-js-compat": { 1310 | "version": "3.6.5", 1311 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", 1312 | "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", 1313 | "dev": true, 1314 | "requires": { 1315 | "browserslist": "^4.8.5", 1316 | "semver": "7.0.0" 1317 | }, 1318 | "dependencies": { 1319 | "semver": { 1320 | "version": "7.0.0", 1321 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1322 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1323 | "dev": true 1324 | } 1325 | } 1326 | }, 1327 | "cross-spawn": { 1328 | "version": "6.0.5", 1329 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 1330 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 1331 | "dev": true, 1332 | "requires": { 1333 | "nice-try": "^1.0.4", 1334 | "path-key": "^2.0.1", 1335 | "semver": "^5.5.0", 1336 | "shebang-command": "^1.2.0", 1337 | "which": "^1.2.9" 1338 | } 1339 | }, 1340 | "debug": { 1341 | "version": "2.6.9", 1342 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1343 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1344 | "requires": { 1345 | "ms": "2.0.0" 1346 | } 1347 | }, 1348 | "deep-freeze": { 1349 | "version": "0.0.1", 1350 | "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", 1351 | "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=", 1352 | "dev": true 1353 | }, 1354 | "deepmerge": { 1355 | "version": "4.2.2", 1356 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 1357 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 1358 | "dev": true 1359 | }, 1360 | "define-properties": { 1361 | "version": "1.1.3", 1362 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1363 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1364 | "dev": true, 1365 | "requires": { 1366 | "object-keys": "^1.0.12" 1367 | } 1368 | }, 1369 | "delegate": { 1370 | "version": "3.2.0", 1371 | "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", 1372 | "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", 1373 | "optional": true 1374 | }, 1375 | "electron-to-chromium": { 1376 | "version": "1.3.455", 1377 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.455.tgz", 1378 | "integrity": "sha512-4lwnxp+ArqOX9hiLwLpwhfqvwzUHFuDgLz4NTiU3lhygUzWtocIJ/5Vix+mWVNE2HQ9aI1k2ncGe5H/0OktMvA==", 1379 | "dev": true 1380 | }, 1381 | "error-ex": { 1382 | "version": "1.3.2", 1383 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1384 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1385 | "dev": true, 1386 | "requires": { 1387 | "is-arrayish": "^0.2.1" 1388 | } 1389 | }, 1390 | "es-abstract": { 1391 | "version": "1.17.5", 1392 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", 1393 | "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", 1394 | "dev": true, 1395 | "requires": { 1396 | "es-to-primitive": "^1.2.1", 1397 | "function-bind": "^1.1.1", 1398 | "has": "^1.0.3", 1399 | "has-symbols": "^1.0.1", 1400 | "is-callable": "^1.1.5", 1401 | "is-regex": "^1.0.5", 1402 | "object-inspect": "^1.7.0", 1403 | "object-keys": "^1.1.1", 1404 | "object.assign": "^4.1.0", 1405 | "string.prototype.trimleft": "^2.1.1", 1406 | "string.prototype.trimright": "^2.1.1" 1407 | } 1408 | }, 1409 | "es-to-primitive": { 1410 | "version": "1.2.1", 1411 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 1412 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 1413 | "dev": true, 1414 | "requires": { 1415 | "is-callable": "^1.1.4", 1416 | "is-date-object": "^1.0.1", 1417 | "is-symbol": "^1.0.2" 1418 | } 1419 | }, 1420 | "escape-string-regexp": { 1421 | "version": "1.0.5", 1422 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1423 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1424 | }, 1425 | "estree-walker": { 1426 | "version": "1.0.1", 1427 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 1428 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 1429 | "dev": true 1430 | }, 1431 | "esutils": { 1432 | "version": "2.0.3", 1433 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1434 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1435 | "dev": true 1436 | }, 1437 | "find-up": { 1438 | "version": "2.1.0", 1439 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 1440 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 1441 | "dev": true, 1442 | "requires": { 1443 | "locate-path": "^2.0.0" 1444 | } 1445 | }, 1446 | "fs.realpath": { 1447 | "version": "1.0.0", 1448 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1449 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1450 | "dev": true 1451 | }, 1452 | "fsevents": { 1453 | "version": "2.1.3", 1454 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 1455 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 1456 | "dev": true, 1457 | "optional": true 1458 | }, 1459 | "function-bind": { 1460 | "version": "1.1.1", 1461 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1462 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1463 | "dev": true 1464 | }, 1465 | "gensync": { 1466 | "version": "1.0.0-beta.1", 1467 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", 1468 | "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", 1469 | "dev": true 1470 | }, 1471 | "glob": { 1472 | "version": "7.1.6", 1473 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1474 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1475 | "dev": true, 1476 | "requires": { 1477 | "fs.realpath": "^1.0.0", 1478 | "inflight": "^1.0.4", 1479 | "inherits": "2", 1480 | "minimatch": "^3.0.4", 1481 | "once": "^1.3.0", 1482 | "path-is-absolute": "^1.0.0" 1483 | } 1484 | }, 1485 | "globals": { 1486 | "version": "11.12.0", 1487 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1488 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1489 | "dev": true 1490 | }, 1491 | "golden-fleece": { 1492 | "version": "1.0.9", 1493 | "resolved": "https://registry.npmjs.org/golden-fleece/-/golden-fleece-1.0.9.tgz", 1494 | "integrity": "sha512-YSwLaGMOgSBx9roJlNLL12c+FRiw7VECphinc6mGucphc/ZxTHgdEz6gmJqH6NOzYEd/yr64hwjom5pZ+tJVpg==" 1495 | }, 1496 | "good-listener": { 1497 | "version": "1.2.2", 1498 | "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", 1499 | "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", 1500 | "optional": true, 1501 | "requires": { 1502 | "delegate": "^3.1.2" 1503 | } 1504 | }, 1505 | "graceful-fs": { 1506 | "version": "4.2.4", 1507 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 1508 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 1509 | "dev": true 1510 | }, 1511 | "has": { 1512 | "version": "1.0.3", 1513 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1514 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1515 | "dev": true, 1516 | "requires": { 1517 | "function-bind": "^1.1.1" 1518 | } 1519 | }, 1520 | "has-flag": { 1521 | "version": "3.0.0", 1522 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1523 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1524 | "dev": true 1525 | }, 1526 | "has-symbols": { 1527 | "version": "1.0.1", 1528 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 1529 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 1530 | "dev": true 1531 | }, 1532 | "he": { 1533 | "version": "1.2.0", 1534 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1535 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1536 | "dev": true 1537 | }, 1538 | "hosted-git-info": { 1539 | "version": "2.8.8", 1540 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", 1541 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", 1542 | "dev": true 1543 | }, 1544 | "html-minifier": { 1545 | "version": "4.0.0", 1546 | "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", 1547 | "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", 1548 | "dev": true, 1549 | "requires": { 1550 | "camel-case": "^3.0.0", 1551 | "clean-css": "^4.2.1", 1552 | "commander": "^2.19.0", 1553 | "he": "^1.2.0", 1554 | "param-case": "^2.1.1", 1555 | "relateurl": "^0.2.7", 1556 | "uglify-js": "^3.5.1" 1557 | } 1558 | }, 1559 | "http-link-header": { 1560 | "version": "1.0.2", 1561 | "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.0.2.tgz", 1562 | "integrity": "sha512-z6YOZ8ZEnejkcCWlGZzYXNa6i+ZaTfiTg3WhlV/YvnNya3W/RbX1bMVUMTuCrg/DrtTCQxaFCkXCz4FtLpcebg==", 1563 | "dev": true 1564 | }, 1565 | "inflight": { 1566 | "version": "1.0.6", 1567 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1568 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1569 | "dev": true, 1570 | "requires": { 1571 | "once": "^1.3.0", 1572 | "wrappy": "1" 1573 | } 1574 | }, 1575 | "inherits": { 1576 | "version": "2.0.4", 1577 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1578 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1579 | "dev": true 1580 | }, 1581 | "invariant": { 1582 | "version": "2.2.4", 1583 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 1584 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 1585 | "dev": true, 1586 | "requires": { 1587 | "loose-envify": "^1.0.0" 1588 | } 1589 | }, 1590 | "is-arrayish": { 1591 | "version": "0.2.1", 1592 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1593 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1594 | "dev": true 1595 | }, 1596 | "is-callable": { 1597 | "version": "1.1.5", 1598 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", 1599 | "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", 1600 | "dev": true 1601 | }, 1602 | "is-date-object": { 1603 | "version": "1.0.2", 1604 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 1605 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 1606 | "dev": true 1607 | }, 1608 | "is-module": { 1609 | "version": "1.0.0", 1610 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1611 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 1612 | "dev": true 1613 | }, 1614 | "is-reference": { 1615 | "version": "1.2.0", 1616 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.0.tgz", 1617 | "integrity": "sha512-ZVxq+5TkOx6GQdnoMm2aRdCKADdcrOWXLGzGT+vIA8DMpqEJaRk5AL1bS80zJ2bjHunVmjdzfCt0e4BymIEqKQ==", 1618 | "dev": true, 1619 | "requires": { 1620 | "@types/estree": "0.0.44" 1621 | }, 1622 | "dependencies": { 1623 | "@types/estree": { 1624 | "version": "0.0.44", 1625 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.44.tgz", 1626 | "integrity": "sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g==", 1627 | "dev": true 1628 | } 1629 | } 1630 | }, 1631 | "is-regex": { 1632 | "version": "1.0.5", 1633 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", 1634 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", 1635 | "dev": true, 1636 | "requires": { 1637 | "has": "^1.0.3" 1638 | } 1639 | }, 1640 | "is-symbol": { 1641 | "version": "1.0.3", 1642 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 1643 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 1644 | "dev": true, 1645 | "requires": { 1646 | "has-symbols": "^1.0.1" 1647 | } 1648 | }, 1649 | "isexe": { 1650 | "version": "2.0.0", 1651 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1652 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1653 | "dev": true 1654 | }, 1655 | "jest-worker": { 1656 | "version": "24.9.0", 1657 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", 1658 | "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", 1659 | "dev": true, 1660 | "requires": { 1661 | "merge-stream": "^2.0.0", 1662 | "supports-color": "^6.1.0" 1663 | }, 1664 | "dependencies": { 1665 | "supports-color": { 1666 | "version": "6.1.0", 1667 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 1668 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 1669 | "dev": true, 1670 | "requires": { 1671 | "has-flag": "^3.0.0" 1672 | } 1673 | } 1674 | } 1675 | }, 1676 | "js-tokens": { 1677 | "version": "4.0.0", 1678 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1679 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1680 | "dev": true 1681 | }, 1682 | "jsesc": { 1683 | "version": "2.5.2", 1684 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1685 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1686 | "dev": true 1687 | }, 1688 | "json-parse-better-errors": { 1689 | "version": "1.0.2", 1690 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1691 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 1692 | "dev": true 1693 | }, 1694 | "json5": { 1695 | "version": "2.1.3", 1696 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", 1697 | "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", 1698 | "dev": true, 1699 | "requires": { 1700 | "minimist": "^1.2.5" 1701 | } 1702 | }, 1703 | "leven": { 1704 | "version": "3.1.0", 1705 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", 1706 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", 1707 | "dev": true 1708 | }, 1709 | "levenary": { 1710 | "version": "1.1.1", 1711 | "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", 1712 | "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", 1713 | "dev": true, 1714 | "requires": { 1715 | "leven": "^3.1.0" 1716 | } 1717 | }, 1718 | "load-json-file": { 1719 | "version": "4.0.0", 1720 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", 1721 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", 1722 | "dev": true, 1723 | "requires": { 1724 | "graceful-fs": "^4.1.2", 1725 | "parse-json": "^4.0.0", 1726 | "pify": "^3.0.0", 1727 | "strip-bom": "^3.0.0" 1728 | } 1729 | }, 1730 | "locate-path": { 1731 | "version": "2.0.0", 1732 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 1733 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 1734 | "dev": true, 1735 | "requires": { 1736 | "p-locate": "^2.0.0", 1737 | "path-exists": "^3.0.0" 1738 | } 1739 | }, 1740 | "lodash": { 1741 | "version": "4.17.15", 1742 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 1743 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 1744 | "dev": true 1745 | }, 1746 | "lodash.deburr": { 1747 | "version": "4.1.0", 1748 | "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", 1749 | "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" 1750 | }, 1751 | "loose-envify": { 1752 | "version": "1.4.0", 1753 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1754 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1755 | "dev": true, 1756 | "requires": { 1757 | "js-tokens": "^3.0.0 || ^4.0.0" 1758 | } 1759 | }, 1760 | "lower-case": { 1761 | "version": "1.1.4", 1762 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", 1763 | "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", 1764 | "dev": true 1765 | }, 1766 | "magic-string": { 1767 | "version": "0.25.7", 1768 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1769 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1770 | "dev": true, 1771 | "requires": { 1772 | "sourcemap-codec": "^1.4.4" 1773 | } 1774 | }, 1775 | "marked": { 1776 | "version": "1.1.0", 1777 | "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.0.tgz", 1778 | "integrity": "sha512-EkE7RW6KcXfMHy2PA7Jg0YJE1l8UPEZE8k45tylzmZM30/r1M1MUXWQfJlrSbsTeh7m/XTwHbWUENvAJZpp1YA==" 1779 | }, 1780 | "memorystream": { 1781 | "version": "0.3.1", 1782 | "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", 1783 | "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", 1784 | "dev": true 1785 | }, 1786 | "merge-stream": { 1787 | "version": "2.0.0", 1788 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1789 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1790 | "dev": true 1791 | }, 1792 | "mime": { 1793 | "version": "2.4.6", 1794 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", 1795 | "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" 1796 | }, 1797 | "mime-db": { 1798 | "version": "1.44.0", 1799 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1800 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 1801 | }, 1802 | "mime-types": { 1803 | "version": "2.1.27", 1804 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1805 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1806 | "requires": { 1807 | "mime-db": "1.44.0" 1808 | } 1809 | }, 1810 | "minimatch": { 1811 | "version": "3.0.4", 1812 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1813 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1814 | "dev": true, 1815 | "requires": { 1816 | "brace-expansion": "^1.1.7" 1817 | } 1818 | }, 1819 | "minimist": { 1820 | "version": "1.2.5", 1821 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1822 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1823 | "dev": true 1824 | }, 1825 | "ms": { 1826 | "version": "2.0.0", 1827 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1828 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1829 | }, 1830 | "negotiator": { 1831 | "version": "0.6.2", 1832 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1833 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 1834 | }, 1835 | "nice-try": { 1836 | "version": "1.0.5", 1837 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1838 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 1839 | "dev": true 1840 | }, 1841 | "no-case": { 1842 | "version": "2.3.2", 1843 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", 1844 | "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", 1845 | "dev": true, 1846 | "requires": { 1847 | "lower-case": "^1.1.1" 1848 | } 1849 | }, 1850 | "node-releases": { 1851 | "version": "1.1.57", 1852 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.57.tgz", 1853 | "integrity": "sha512-ZQmnWS7adi61A9JsllJ2gdj2PauElcjnOwTp2O011iGzoakTxUsDGSe+6vD7wXbKdqhSFymC0OSx35aAMhrSdw==", 1854 | "dev": true 1855 | }, 1856 | "normalize-package-data": { 1857 | "version": "2.5.0", 1858 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1859 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1860 | "dev": true, 1861 | "requires": { 1862 | "hosted-git-info": "^2.1.4", 1863 | "resolve": "^1.10.0", 1864 | "semver": "2 || 3 || 4 || 5", 1865 | "validate-npm-package-license": "^3.0.1" 1866 | } 1867 | }, 1868 | "npm-run-all": { 1869 | "version": "4.1.5", 1870 | "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", 1871 | "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", 1872 | "dev": true, 1873 | "requires": { 1874 | "ansi-styles": "^3.2.1", 1875 | "chalk": "^2.4.1", 1876 | "cross-spawn": "^6.0.5", 1877 | "memorystream": "^0.3.1", 1878 | "minimatch": "^3.0.4", 1879 | "pidtree": "^0.3.0", 1880 | "read-pkg": "^3.0.0", 1881 | "shell-quote": "^1.6.1", 1882 | "string.prototype.padend": "^3.0.0" 1883 | } 1884 | }, 1885 | "object-inspect": { 1886 | "version": "1.7.0", 1887 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 1888 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", 1889 | "dev": true 1890 | }, 1891 | "object-keys": { 1892 | "version": "1.1.1", 1893 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1894 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1895 | "dev": true 1896 | }, 1897 | "object.assign": { 1898 | "version": "4.1.0", 1899 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1900 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1901 | "dev": true, 1902 | "requires": { 1903 | "define-properties": "^1.1.2", 1904 | "function-bind": "^1.1.1", 1905 | "has-symbols": "^1.0.0", 1906 | "object-keys": "^1.0.11" 1907 | } 1908 | }, 1909 | "on-headers": { 1910 | "version": "1.0.2", 1911 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1912 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" 1913 | }, 1914 | "once": { 1915 | "version": "1.4.0", 1916 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1917 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1918 | "dev": true, 1919 | "requires": { 1920 | "wrappy": "1" 1921 | } 1922 | }, 1923 | "p-limit": { 1924 | "version": "1.3.0", 1925 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 1926 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 1927 | "dev": true, 1928 | "requires": { 1929 | "p-try": "^1.0.0" 1930 | } 1931 | }, 1932 | "p-locate": { 1933 | "version": "2.0.0", 1934 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 1935 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 1936 | "dev": true, 1937 | "requires": { 1938 | "p-limit": "^1.1.0" 1939 | } 1940 | }, 1941 | "p-try": { 1942 | "version": "1.0.0", 1943 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 1944 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 1945 | "dev": true 1946 | }, 1947 | "param-case": { 1948 | "version": "2.1.1", 1949 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", 1950 | "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", 1951 | "dev": true, 1952 | "requires": { 1953 | "no-case": "^2.2.0" 1954 | } 1955 | }, 1956 | "parse-json": { 1957 | "version": "4.0.0", 1958 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 1959 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 1960 | "dev": true, 1961 | "requires": { 1962 | "error-ex": "^1.3.1", 1963 | "json-parse-better-errors": "^1.0.1" 1964 | } 1965 | }, 1966 | "path-exists": { 1967 | "version": "3.0.0", 1968 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1969 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1970 | "dev": true 1971 | }, 1972 | "path-is-absolute": { 1973 | "version": "1.0.1", 1974 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1975 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1976 | "dev": true 1977 | }, 1978 | "path-key": { 1979 | "version": "2.0.1", 1980 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1981 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1982 | "dev": true 1983 | }, 1984 | "path-parse": { 1985 | "version": "1.0.6", 1986 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1987 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1988 | "dev": true 1989 | }, 1990 | "path-type": { 1991 | "version": "3.0.0", 1992 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", 1993 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", 1994 | "dev": true, 1995 | "requires": { 1996 | "pify": "^3.0.0" 1997 | } 1998 | }, 1999 | "picomatch": { 2000 | "version": "2.2.2", 2001 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 2002 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 2003 | "dev": true 2004 | }, 2005 | "pidtree": { 2006 | "version": "0.3.1", 2007 | "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", 2008 | "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", 2009 | "dev": true 2010 | }, 2011 | "pify": { 2012 | "version": "3.0.0", 2013 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 2014 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 2015 | "dev": true 2016 | }, 2017 | "pkg-up": { 2018 | "version": "2.0.0", 2019 | "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", 2020 | "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", 2021 | "dev": true, 2022 | "requires": { 2023 | "find-up": "^2.1.0" 2024 | } 2025 | }, 2026 | "polka": { 2027 | "version": "1.0.0-next.11", 2028 | "resolved": "https://registry.npmjs.org/polka/-/polka-1.0.0-next.11.tgz", 2029 | "integrity": "sha512-M/HBkS6ILksrDq7uvktCTev81OzuLwNtpxMyYdUhxLKQlMWdsu789XMotQU+p8JY8CM8vx8ML0HudyWjRus/lg==", 2030 | "requires": { 2031 | "@polka/url": "^1.0.0-next.11", 2032 | "trouter": "^3.1.0" 2033 | } 2034 | }, 2035 | "prism-svelte": { 2036 | "version": "0.4.6", 2037 | "resolved": "https://registry.npmjs.org/prism-svelte/-/prism-svelte-0.4.6.tgz", 2038 | "integrity": "sha512-C4U7thaRBDqtWu0H/8+NjBri4wKzzzJ5PULQFL8ZBCjYjniFvRNUEDldXpt4GWAi0vkrc1Uho3PVyCiXg9mCYg==" 2039 | }, 2040 | "prismjs": { 2041 | "version": "1.20.0", 2042 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.20.0.tgz", 2043 | "integrity": "sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ==", 2044 | "requires": { 2045 | "clipboard": "^2.0.0" 2046 | } 2047 | }, 2048 | "private": { 2049 | "version": "0.1.8", 2050 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 2051 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 2052 | "dev": true 2053 | }, 2054 | "read-pkg": { 2055 | "version": "3.0.0", 2056 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", 2057 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", 2058 | "dev": true, 2059 | "requires": { 2060 | "load-json-file": "^4.0.0", 2061 | "normalize-package-data": "^2.3.2", 2062 | "path-type": "^3.0.0" 2063 | } 2064 | }, 2065 | "regenerate": { 2066 | "version": "1.4.0", 2067 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", 2068 | "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", 2069 | "dev": true 2070 | }, 2071 | "regenerate-unicode-properties": { 2072 | "version": "8.2.0", 2073 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", 2074 | "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", 2075 | "dev": true, 2076 | "requires": { 2077 | "regenerate": "^1.4.0" 2078 | } 2079 | }, 2080 | "regenerator-runtime": { 2081 | "version": "0.13.5", 2082 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", 2083 | "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", 2084 | "dev": true 2085 | }, 2086 | "regenerator-transform": { 2087 | "version": "0.14.4", 2088 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", 2089 | "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", 2090 | "dev": true, 2091 | "requires": { 2092 | "@babel/runtime": "^7.8.4", 2093 | "private": "^0.1.8" 2094 | } 2095 | }, 2096 | "regexparam": { 2097 | "version": "1.3.0", 2098 | "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz", 2099 | "integrity": "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==" 2100 | }, 2101 | "regexpu-core": { 2102 | "version": "4.7.0", 2103 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", 2104 | "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", 2105 | "dev": true, 2106 | "requires": { 2107 | "regenerate": "^1.4.0", 2108 | "regenerate-unicode-properties": "^8.2.0", 2109 | "regjsgen": "^0.5.1", 2110 | "regjsparser": "^0.6.4", 2111 | "unicode-match-property-ecmascript": "^1.0.4", 2112 | "unicode-match-property-value-ecmascript": "^1.2.0" 2113 | } 2114 | }, 2115 | "regjsgen": { 2116 | "version": "0.5.2", 2117 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", 2118 | "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", 2119 | "dev": true 2120 | }, 2121 | "regjsparser": { 2122 | "version": "0.6.4", 2123 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", 2124 | "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", 2125 | "dev": true, 2126 | "requires": { 2127 | "jsesc": "~0.5.0" 2128 | }, 2129 | "dependencies": { 2130 | "jsesc": { 2131 | "version": "0.5.0", 2132 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 2133 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 2134 | "dev": true 2135 | } 2136 | } 2137 | }, 2138 | "relateurl": { 2139 | "version": "0.2.7", 2140 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 2141 | "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", 2142 | "dev": true 2143 | }, 2144 | "require-relative": { 2145 | "version": "0.8.7", 2146 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 2147 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 2148 | "dev": true 2149 | }, 2150 | "resolve": { 2151 | "version": "1.17.0", 2152 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 2153 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 2154 | "dev": true, 2155 | "requires": { 2156 | "path-parse": "^1.0.6" 2157 | } 2158 | }, 2159 | "rollup": { 2160 | "version": "2.12.0", 2161 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.12.0.tgz", 2162 | "integrity": "sha512-vKwc/xFkZGM9DRai3Eztpr/4g0yYDgNKVq8tLXhq/aSLbR+/EVL6rTjEW9bgWgeYEIKoN66/5w2Bjv1gzyHR/w==", 2163 | "dev": true, 2164 | "requires": { 2165 | "fsevents": "~2.1.2" 2166 | } 2167 | }, 2168 | "rollup-plugin-svelte": { 2169 | "version": "5.2.2", 2170 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.2.2.tgz", 2171 | "integrity": "sha512-I+TJ2T+VLKGbKQcpeMJ4AR2ciROqTZNjxbiMiH4Cn1yByaB9OEuy3CnrgHHuWatQcPuF3yIViyKX7OlETWDKOQ==", 2172 | "dev": true, 2173 | "requires": { 2174 | "require-relative": "^0.8.7", 2175 | "rollup-pluginutils": "^2.8.2", 2176 | "sourcemap-codec": "^1.4.8" 2177 | } 2178 | }, 2179 | "rollup-plugin-terser": { 2180 | "version": "5.3.0", 2181 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz", 2182 | "integrity": "sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g==", 2183 | "dev": true, 2184 | "requires": { 2185 | "@babel/code-frame": "^7.5.5", 2186 | "jest-worker": "^24.9.0", 2187 | "rollup-pluginutils": "^2.8.2", 2188 | "serialize-javascript": "^2.1.2", 2189 | "terser": "^4.6.2" 2190 | } 2191 | }, 2192 | "rollup-pluginutils": { 2193 | "version": "2.8.2", 2194 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 2195 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 2196 | "dev": true, 2197 | "requires": { 2198 | "estree-walker": "^0.6.1" 2199 | }, 2200 | "dependencies": { 2201 | "estree-walker": { 2202 | "version": "0.6.1", 2203 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 2204 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 2205 | "dev": true 2206 | } 2207 | } 2208 | }, 2209 | "safe-buffer": { 2210 | "version": "5.1.2", 2211 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2212 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2213 | }, 2214 | "sapper": { 2215 | "version": "0.27.13", 2216 | "resolved": "https://registry.npmjs.org/sapper/-/sapper-0.27.13.tgz", 2217 | "integrity": "sha512-LSx7kAE/ukcGLrcKxwoU45puj76HYVm/zQlwiYUHvZ9kRCZbzRAhrIaCna+3BqS0iH6IsAy3aTguZ002SkAc6A==", 2218 | "dev": true, 2219 | "requires": { 2220 | "html-minifier": "^4.0.0", 2221 | "http-link-header": "^1.0.2", 2222 | "shimport": "^1.0.1", 2223 | "sourcemap-codec": "^1.4.6", 2224 | "string-hash": "^1.1.3" 2225 | } 2226 | }, 2227 | "select": { 2228 | "version": "1.1.2", 2229 | "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", 2230 | "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", 2231 | "optional": true 2232 | }, 2233 | "semver": { 2234 | "version": "5.7.1", 2235 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2236 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2237 | "dev": true 2238 | }, 2239 | "serialize-javascript": { 2240 | "version": "2.1.2", 2241 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", 2242 | "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", 2243 | "dev": true 2244 | }, 2245 | "shebang-command": { 2246 | "version": "1.2.0", 2247 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2248 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2249 | "dev": true, 2250 | "requires": { 2251 | "shebang-regex": "^1.0.0" 2252 | } 2253 | }, 2254 | "shebang-regex": { 2255 | "version": "1.0.0", 2256 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2257 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2258 | "dev": true 2259 | }, 2260 | "shell-quote": { 2261 | "version": "1.7.2", 2262 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", 2263 | "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", 2264 | "dev": true 2265 | }, 2266 | "shimport": { 2267 | "version": "1.0.1", 2268 | "resolved": "https://registry.npmjs.org/shimport/-/shimport-1.0.1.tgz", 2269 | "integrity": "sha512-Imf4gH+8WQmT1GvxS/x79qpmfnE6m50hyN1ucatX+7oMCgmaF8obZWCPIzSUe6+P+YmXM46lkP2pxiV2/lt9Og==", 2270 | "dev": true 2271 | }, 2272 | "sirv": { 2273 | "version": "0.4.6", 2274 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-0.4.6.tgz", 2275 | "integrity": "sha512-rYpOXlNbpHiY4nVXxuDf4mXPvKz1reZGap/LkWp9TvcZ84qD/nPBjjH/6GZsgIjVMbOslnY8YYULAyP8jMn1GQ==", 2276 | "requires": { 2277 | "@polka/url": "^0.5.0", 2278 | "mime": "^2.3.1" 2279 | }, 2280 | "dependencies": { 2281 | "@polka/url": { 2282 | "version": "0.5.0", 2283 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", 2284 | "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==" 2285 | } 2286 | } 2287 | }, 2288 | "source-map": { 2289 | "version": "0.5.7", 2290 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2291 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2292 | "dev": true 2293 | }, 2294 | "source-map-support": { 2295 | "version": "0.5.19", 2296 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 2297 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 2298 | "dev": true, 2299 | "requires": { 2300 | "buffer-from": "^1.0.0", 2301 | "source-map": "^0.6.0" 2302 | }, 2303 | "dependencies": { 2304 | "source-map": { 2305 | "version": "0.6.1", 2306 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2307 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2308 | "dev": true 2309 | } 2310 | } 2311 | }, 2312 | "sourcemap-codec": { 2313 | "version": "1.4.8", 2314 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 2315 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 2316 | "dev": true 2317 | }, 2318 | "spdx-correct": { 2319 | "version": "3.1.1", 2320 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 2321 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 2322 | "dev": true, 2323 | "requires": { 2324 | "spdx-expression-parse": "^3.0.0", 2325 | "spdx-license-ids": "^3.0.0" 2326 | } 2327 | }, 2328 | "spdx-exceptions": { 2329 | "version": "2.3.0", 2330 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 2331 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 2332 | "dev": true 2333 | }, 2334 | "spdx-expression-parse": { 2335 | "version": "3.0.1", 2336 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 2337 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 2338 | "dev": true, 2339 | "requires": { 2340 | "spdx-exceptions": "^2.1.0", 2341 | "spdx-license-ids": "^3.0.0" 2342 | } 2343 | }, 2344 | "spdx-license-ids": { 2345 | "version": "3.0.5", 2346 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 2347 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", 2348 | "dev": true 2349 | }, 2350 | "string-hash": { 2351 | "version": "1.1.3", 2352 | "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", 2353 | "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", 2354 | "dev": true 2355 | }, 2356 | "string.prototype.padend": { 2357 | "version": "3.1.0", 2358 | "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", 2359 | "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", 2360 | "dev": true, 2361 | "requires": { 2362 | "define-properties": "^1.1.3", 2363 | "es-abstract": "^1.17.0-next.1" 2364 | } 2365 | }, 2366 | "string.prototype.trimend": { 2367 | "version": "1.0.1", 2368 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 2369 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 2370 | "dev": true, 2371 | "requires": { 2372 | "define-properties": "^1.1.3", 2373 | "es-abstract": "^1.17.5" 2374 | } 2375 | }, 2376 | "string.prototype.trimleft": { 2377 | "version": "2.1.2", 2378 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", 2379 | "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", 2380 | "dev": true, 2381 | "requires": { 2382 | "define-properties": "^1.1.3", 2383 | "es-abstract": "^1.17.5", 2384 | "string.prototype.trimstart": "^1.0.0" 2385 | } 2386 | }, 2387 | "string.prototype.trimright": { 2388 | "version": "2.1.2", 2389 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", 2390 | "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", 2391 | "dev": true, 2392 | "requires": { 2393 | "define-properties": "^1.1.3", 2394 | "es-abstract": "^1.17.5", 2395 | "string.prototype.trimend": "^1.0.0" 2396 | } 2397 | }, 2398 | "string.prototype.trimstart": { 2399 | "version": "1.0.1", 2400 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 2401 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 2402 | "dev": true, 2403 | "requires": { 2404 | "define-properties": "^1.1.3", 2405 | "es-abstract": "^1.17.5" 2406 | } 2407 | }, 2408 | "strip-bom": { 2409 | "version": "3.0.0", 2410 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 2411 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 2412 | "dev": true 2413 | }, 2414 | "supports-color": { 2415 | "version": "5.5.0", 2416 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2417 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2418 | "dev": true, 2419 | "requires": { 2420 | "has-flag": "^3.0.0" 2421 | } 2422 | }, 2423 | "svelte": { 2424 | "version": "3.23.0", 2425 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.23.0.tgz", 2426 | "integrity": "sha512-cnyd96bK/Nw5DnYuB1hzm5cl6+I1fpmdKOteA7KLzU9KGLsLmvWsSkSKbcntzODCLmSySN3HjcgTHRo6/rJNTw==", 2427 | "dev": true 2428 | }, 2429 | "terser": { 2430 | "version": "4.7.0", 2431 | "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz", 2432 | "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==", 2433 | "dev": true, 2434 | "requires": { 2435 | "commander": "^2.20.0", 2436 | "source-map": "~0.6.1", 2437 | "source-map-support": "~0.5.12" 2438 | }, 2439 | "dependencies": { 2440 | "source-map": { 2441 | "version": "0.6.1", 2442 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2443 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2444 | "dev": true 2445 | } 2446 | } 2447 | }, 2448 | "tiny-emitter": { 2449 | "version": "2.1.0", 2450 | "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", 2451 | "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", 2452 | "optional": true 2453 | }, 2454 | "to-fast-properties": { 2455 | "version": "2.0.0", 2456 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2457 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 2458 | "dev": true 2459 | }, 2460 | "trouter": { 2461 | "version": "3.1.0", 2462 | "resolved": "https://registry.npmjs.org/trouter/-/trouter-3.1.0.tgz", 2463 | "integrity": "sha512-3Swwu638QQWOefHLss9cdyLi5/9BKYmXZEXpH0KOFfB9YZwUAwHbDAcoYxaHfqAeFvbi/LqAK7rGkhCr1v1BJA==", 2464 | "requires": { 2465 | "regexparam": "^1.3.0" 2466 | } 2467 | }, 2468 | "uglify-js": { 2469 | "version": "3.9.4", 2470 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.4.tgz", 2471 | "integrity": "sha512-8RZBJq5smLOa7KslsNsVcSH+KOXf1uDU8yqLeNuVKwmT0T3FA0ZoXlinQfRad7SDcbZZRZE4ov+2v71EnxNyCA==", 2472 | "dev": true, 2473 | "requires": { 2474 | "commander": "~2.20.3" 2475 | } 2476 | }, 2477 | "unicode-canonical-property-names-ecmascript": { 2478 | "version": "1.0.4", 2479 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 2480 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", 2481 | "dev": true 2482 | }, 2483 | "unicode-match-property-ecmascript": { 2484 | "version": "1.0.4", 2485 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 2486 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 2487 | "dev": true, 2488 | "requires": { 2489 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 2490 | "unicode-property-aliases-ecmascript": "^1.0.4" 2491 | } 2492 | }, 2493 | "unicode-match-property-value-ecmascript": { 2494 | "version": "1.2.0", 2495 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", 2496 | "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", 2497 | "dev": true 2498 | }, 2499 | "unicode-property-aliases-ecmascript": { 2500 | "version": "1.1.0", 2501 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", 2502 | "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", 2503 | "dev": true 2504 | }, 2505 | "upper-case": { 2506 | "version": "1.1.3", 2507 | "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", 2508 | "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", 2509 | "dev": true 2510 | }, 2511 | "validate-npm-package-license": { 2512 | "version": "3.0.4", 2513 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 2514 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 2515 | "dev": true, 2516 | "requires": { 2517 | "spdx-correct": "^3.0.0", 2518 | "spdx-expression-parse": "^3.0.0" 2519 | } 2520 | }, 2521 | "vary": { 2522 | "version": "1.1.2", 2523 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2524 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2525 | }, 2526 | "which": { 2527 | "version": "1.3.1", 2528 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2529 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2530 | "dev": true, 2531 | "requires": { 2532 | "isexe": "^2.0.0" 2533 | } 2534 | }, 2535 | "wrappy": { 2536 | "version": "1.0.2", 2537 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2538 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2539 | "dev": true 2540 | } 2541 | } 2542 | } 2543 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TODO", 3 | "description": "TODO", 4 | "version": "0.0.1", 5 | "scripts": { 6 | "dev": "sapper dev", 7 | "build": "sapper build --legacy", 8 | "export": "sapper export --legacy", 9 | "start": "node __sapper__/build", 10 | "cy:run": "cypress run", 11 | "cy:open": "cypress open", 12 | "test": "run-p --race dev cy:run" 13 | }, 14 | "dependencies": { 15 | "@sveltejs/site-kit": "^1.1.5", 16 | "compression": "^1.7.1", 17 | "marked": "^1.1.0", 18 | "polka": "next", 19 | "prism-svelte": "^0.4.6", 20 | "prismjs": "^1.20.0", 21 | "sirv": "^0.4.0" 22 | }, 23 | "devDependencies": { 24 | "@babel/core": "^7.0.0", 25 | "@babel/plugin-syntax-dynamic-import": "^7.0.0", 26 | "@babel/plugin-transform-runtime": "^7.0.0", 27 | "@babel/preset-env": "^7.0.0", 28 | "@babel/runtime": "^7.0.0", 29 | "@rollup/plugin-babel": "^5.0.0", 30 | "@rollup/plugin-commonjs": "^12.0.0", 31 | "@rollup/plugin-node-resolve": "^8.0.0", 32 | "@rollup/plugin-replace": "^2.2.0", 33 | "npm-run-all": "^4.1.5", 34 | "rollup": "^2.3.4", 35 | "rollup-plugin-svelte": "^5.0.1", 36 | "rollup-plugin-terser": "^5.3.0", 37 | "sapper": "^0.27.0", 38 | "svelte": "^3.0.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import resolve from '@rollup/plugin-node-resolve'; 2 | import replace from '@rollup/plugin-replace'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import svelte from 'rollup-plugin-svelte'; 5 | import babel from '@rollup/plugin-babel'; 6 | import { terser } from 'rollup-plugin-terser'; 7 | import config from 'sapper/config/rollup.js'; 8 | import pkg from './package.json'; 9 | 10 | const mode = process.env.NODE_ENV; 11 | const dev = mode === 'development'; 12 | const legacy = !!process.env.SAPPER_LEGACY_BUILD; 13 | 14 | const onwarn = (warning, onwarn) => (warning.code === 'CIRCULAR_DEPENDENCY' && /[/\\]@sapper[/\\]/.test(warning.message)) || onwarn(warning); 15 | 16 | export default { 17 | client: { 18 | input: config.client.input(), 19 | output: config.client.output(), 20 | plugins: [ 21 | replace({ 22 | 'process.browser': true, 23 | 'process.env.NODE_ENV': JSON.stringify(mode) 24 | }), 25 | svelte({ 26 | dev, 27 | hydratable: true, 28 | emitCss: true 29 | }), 30 | resolve({ 31 | browser: true, 32 | dedupe: ['svelte'] 33 | }), 34 | commonjs(), 35 | 36 | legacy && babel({ 37 | extensions: ['.js', '.mjs', '.html', '.svelte'], 38 | babelHelpers: 'runtime', 39 | exclude: ['node_modules/@babel/**'], 40 | presets: [ 41 | ['@babel/preset-env', { 42 | targets: '> 0.25%, not dead' 43 | }] 44 | ], 45 | plugins: [ 46 | '@babel/plugin-syntax-dynamic-import', 47 | ['@babel/plugin-transform-runtime', { 48 | useESModules: true 49 | }] 50 | ] 51 | }), 52 | 53 | !dev && terser({ 54 | module: true 55 | }) 56 | ], 57 | 58 | preserveEntrySignatures: false, 59 | onwarn, 60 | }, 61 | 62 | server: { 63 | input: config.server.input(), 64 | output: config.server.output(), 65 | plugins: [ 66 | replace({ 67 | 'process.browser': false, 68 | 'process.env.NODE_ENV': JSON.stringify(mode) 69 | }), 70 | svelte({ 71 | generate: 'ssr', 72 | dev 73 | }), 74 | resolve({ 75 | dedupe: ['svelte'] 76 | }), 77 | commonjs() 78 | ], 79 | external: Object.keys(pkg.dependencies).concat( 80 | require('module').builtinModules || Object.keys(process.binding('natives')) 81 | ), 82 | 83 | preserveEntrySignatures: 'strict', 84 | onwarn, 85 | }, 86 | 87 | serviceworker: { 88 | input: config.serviceworker.input(), 89 | output: config.serviceworker.output(), 90 | plugins: [ 91 | resolve(), 92 | replace({ 93 | 'process.browser': true, 94 | 'process.env.NODE_ENV': JSON.stringify(mode) 95 | }), 96 | commonjs(), 97 | !dev && terser() 98 | ], 99 | 100 | preserveEntrySignatures: false, 101 | onwarn, 102 | } 103 | }; 104 | -------------------------------------------------------------------------------- /src/client.js: -------------------------------------------------------------------------------- 1 | import * as sapper from '@sapper/app'; 2 | 3 | sapper.start({ 4 | target: document.querySelector('#sapper') 5 | }); -------------------------------------------------------------------------------- /src/node_modules/@app/components/Nav.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 50 | 51 | 61 | -------------------------------------------------------------------------------- /src/node_modules/@app/get_sections.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import marked from 'marked'; 4 | import Prism from 'prismjs'; 5 | import 'prism-svelte'; 6 | import { extract_frontmatter } from '@sveltejs/site-kit/utils/markdown.js'; 7 | 8 | function make_slug(title) { 9 | return title.toLowerCase() 10 | .replace(/[^a-z]+/g, ' ').trim() 11 | .replace(/ /g, '-'); 12 | } 13 | 14 | function escape(str) { 15 | return str 16 | .replace(/&/g, '&') 17 | .replace(//g, '>') 19 | } 20 | 21 | export function get_sections() { 22 | const sections = fs.readdirSync('content') 23 | .filter(file => file[0] !== '.' && path.extname(file) === '.md') 24 | .map(file => { 25 | const markdown = fs.readFileSync(`content/${file}`, 'utf-8'); 26 | const { content, metadata } = extract_frontmatter(markdown); 27 | 28 | const section_slug = file.replace(/^\d+-/, '').replace(/\.md$/, ''); 29 | 30 | const subsections = []; 31 | 32 | const renderer = new marked.Renderer(); 33 | 34 | let uid = 1; 35 | 36 | renderer.code = (source, lang) => { 37 | let html; 38 | 39 | if (lang === 'diff') { 40 | source = escape(source.replace(/^([-+]?)( +)/gm, (_, op, space) => { 41 | return op + space.split(' ').join('\t'); 42 | })); 43 | 44 | let css = []; 45 | const lines = source.split('\n').map(line => { 46 | if (line[0] === '+') { 47 | return `${line.slice(1)}\n`; 48 | } 49 | 50 | if (line[0] === '-') { 51 | const id = uid++; 52 | css.push(`.diff-remove[data-id="${id}"]::before{content:${JSON.stringify(line).replace(/\\t/g, '\\000009')}}`); 53 | return ``; 54 | } 55 | 56 | return `${line}\n`; 57 | }); 58 | 59 | html = `${lines.join('')}`; 60 | } 61 | 62 | else { 63 | source = source.replace(/^ +/gm, match => 64 | match.split(' ').join('\t') 65 | ); 66 | 67 | if (Prism.languages[lang]) { 68 | html = Prism.highlight(source, Prism.languages[lang], lang); 69 | } else { 70 | html = escape(source); 71 | } 72 | } 73 | 74 | 75 | 76 | return `
${html}
`; 77 | }; 78 | 79 | renderer.heading = (text, level, title) => { 80 | const slug = level <= 4 && make_slug(title); 81 | 82 | subsections.push({ slug, title }); 83 | 84 | return ` 85 | 86 | 4 ? 'data-scrollignore' : ''}> 87 | 88 | ${text} 89 | `; 90 | }; 91 | 92 | renderer.link = (href, title, text) => { 93 | return `${text}`; 94 | }; 95 | 96 | const html = marked(content, { renderer }); 97 | 98 | return { 99 | title: metadata.title, 100 | slug: section_slug, 101 | subsections, 102 | html, 103 | next: null 104 | }; 105 | }); 106 | 107 | sections.forEach((section, i) => { 108 | const next = sections[i + 1]; 109 | 110 | if (next) { 111 | section.next = { 112 | title: next.title, 113 | slug: next.slug 114 | }; 115 | } 116 | }); 117 | 118 | return sections; 119 | } 120 | -------------------------------------------------------------------------------- /src/routes/[section]/index.json.js: -------------------------------------------------------------------------------- 1 | import { get_sections } from '@app/get_sections.js'; 2 | 3 | export async function get(req, res) { 4 | const section = get_sections().find(({ slug }) => slug === req.params.section); 5 | 6 | if (section) { 7 | const { title, slug, html, next } = section; 8 | 9 | res.setHeader('Content-Type', 'application/json'); 10 | res.end(JSON.stringify({ title, slug, html, next })); 11 | } else { 12 | res.statusCode = 404; 13 | res.end(JSON.stringify({ message: 'not found' })); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/routes/[section]/index.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | 15 | 16 | {section.title} 17 | 18 | 19 | {#if section.slug === 'introduction'} 20 |
The Svelte workshop
21 | {/if} 22 | 23 |

{section.title}

24 | 25 |
{@html section.html}
26 | 27 | {#if section.next} 28 |

Next: {section.next.title}

29 | {/if} 30 | 31 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /src/routes/_layout.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | 19 | 20 | hash = window.location.hash.slice(1)}/> 21 | 22 |
23 | 42 | 43 |
44 | 45 |
46 |
47 | 48 | -------------------------------------------------------------------------------- /src/routes/about.svelte: -------------------------------------------------------------------------------- 1 | 2 | About 3 | 4 | 5 |

About this site

6 | 7 |

This is the 'about' page. There's not much here.

-------------------------------------------------------------------------------- /src/routes/index.svelte: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/routes/toc.json.js: -------------------------------------------------------------------------------- 1 | import { get_sections } from '@app/get_sections.js'; 2 | 3 | export async function get(req, res) { 4 | const toc = get_sections().map(({ html, ...section }) => section); 5 | 6 | res.setHeader('Content-Type', 'application/json'); 7 | res.end(JSON.stringify(toc)); 8 | } 9 | -------------------------------------------------------------------------------- /src/server.js: -------------------------------------------------------------------------------- 1 | import sirv from 'sirv'; 2 | import polka from 'polka'; 3 | import compression from 'compression'; 4 | import * as sapper from '@sapper/server'; 5 | 6 | const { PORT, NODE_ENV } = process.env; 7 | const dev = NODE_ENV === 'development'; 8 | 9 | polka() // You can also use Express 10 | .use( 11 | compression({ threshold: 0 }), 12 | sirv('static', { dev }), 13 | sapper.middleware() 14 | ) 15 | .listen(PORT, err => { 16 | if (err) console.log('error', err); 17 | }); 18 | -------------------------------------------------------------------------------- /src/service-worker.js: -------------------------------------------------------------------------------- 1 | import { timestamp, files, shell, routes } from '@sapper/service-worker'; 2 | 3 | const ASSETS = `cache${timestamp}`; 4 | 5 | // `shell` is an array of all the files generated by the bundler, 6 | // `files` is an array of everything in the `static` directory 7 | const to_cache = shell.concat(files); 8 | const cached = new Set(to_cache); 9 | 10 | self.addEventListener('install', event => { 11 | event.waitUntil( 12 | caches 13 | .open(ASSETS) 14 | .then(cache => cache.addAll(to_cache)) 15 | .then(() => { 16 | self.skipWaiting(); 17 | }) 18 | ); 19 | }); 20 | 21 | self.addEventListener('activate', event => { 22 | event.waitUntil( 23 | caches.keys().then(async keys => { 24 | // delete old caches 25 | for (const key of keys) { 26 | if (key !== ASSETS) await caches.delete(key); 27 | } 28 | 29 | self.clients.claim(); 30 | }) 31 | ); 32 | }); 33 | 34 | self.addEventListener('fetch', event => { 35 | if (event.request.method !== 'GET' || event.request.headers.has('range')) return; 36 | 37 | const url = new URL(event.request.url); 38 | 39 | // don't try to handle e.g. data: URIs 40 | if (!url.protocol.startsWith('http')) return; 41 | 42 | // ignore dev server requests 43 | if (url.hostname === self.location.hostname && url.port !== self.location.port) return; 44 | 45 | // always serve static files and bundler-generated assets from cache 46 | if (url.host === self.location.host && cached.has(url.pathname)) { 47 | event.respondWith(caches.match(event.request)); 48 | return; 49 | } 50 | 51 | // for pages, you might want to serve a shell `service-worker-index.html` file, 52 | // which Sapper has generated for you. It's not right for every 53 | // app, but if it's right for yours then uncomment this section 54 | /* 55 | if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) { 56 | event.respondWith(caches.match('/service-worker-index.html')); 57 | return; 58 | } 59 | */ 60 | 61 | if (event.request.cache === 'only-if-cached') return; 62 | 63 | // for everything else, try the network first, falling back to 64 | // cache if the user is offline. (If the pages never change, you 65 | // might prefer a cache-first approach to a network-first one.) 66 | event.respondWith( 67 | caches 68 | .open(`offline${timestamp}`) 69 | .then(async cache => { 70 | try { 71 | const response = await fetch(event.request); 72 | cache.put(event.request, response.clone()); 73 | return response; 74 | } catch(err) { 75 | const response = await cache.match(event.request); 76 | if (response) return response; 77 | 78 | throw err; 79 | } 80 | }) 81 | ); 82 | }); 83 | -------------------------------------------------------------------------------- /src/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | %sapper.base% 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | %sapper.styles% 19 | 20 | 22 | %sapper.head% 23 | 24 | 25 | 27 |
%sapper.html%
28 | 29 | 32 | %sapper.scripts% 33 | 34 | 35 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/favicon.png -------------------------------------------------------------------------------- /static/fonts/fira-mono/fira-mono-latin-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/fira-mono/fira-mono-latin-400.woff2 -------------------------------------------------------------------------------- /static/fonts/overpass/overpass-latin-100.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/overpass/overpass-latin-100.woff2 -------------------------------------------------------------------------------- /static/fonts/overpass/overpass-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/overpass/overpass-latin-300.woff2 -------------------------------------------------------------------------------- /static/fonts/overpass/overpass-latin-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/overpass/overpass-latin-400.woff2 -------------------------------------------------------------------------------- /static/fonts/overpass/overpass-latin-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/overpass/overpass-latin-600.woff2 -------------------------------------------------------------------------------- /static/fonts/overpass/overpass-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/overpass/overpass-latin-700.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/roboto-latin-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/roboto/roboto-latin-400.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/roboto-latin-400italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/roboto/roboto-latin-400italic.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/roboto-latin-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/roboto/roboto-latin-500.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/roboto-latin-500italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/fonts/roboto/roboto-latin-500italic.woff2 -------------------------------------------------------------------------------- /static/global.css: -------------------------------------------------------------------------------- 1 | /* fonts ---------------------------------- */ 2 | /* overpass-300normal - latin */ 3 | @font-face { 4 | font-family: 'Overpass'; 5 | font-style: normal; 6 | font-weight: 300; 7 | src: 8 | local('Overpass Light '), 9 | local('Overpass-Light'), 10 | url('/fonts/overpass/overpass-latin-300.woff2') format('woff2'); 11 | } 12 | 13 | /* overpass-600normal - latin */ 14 | @font-face { 15 | font-family: 'Overpass'; 16 | font-style: normal; 17 | font-weight: 600; 18 | src: 19 | local('Overpass Bold '), 20 | local('Overpass-Bold'), 21 | url('/fonts/overpass/overpass-latin-600.woff2') format('woff2'); 22 | } 23 | 24 | /* fira-mono-400normal - latin */ 25 | @font-face { 26 | font-family: 'Fira Mono'; 27 | font-style: normal; 28 | font-weight: 400; 29 | src: 30 | local('Fira Mono Regular '), 31 | local('Fira Mono-Regular'), 32 | url('/fonts/fira-mono/fira-mono-latin-400.woff2') format('woff2'); 33 | } 34 | 35 | body { 36 | --font: 'Overpass', sans-serif; 37 | --font-mono: 'Fira Mono', monospace; 38 | 39 | --text: #bbb; 40 | --highlight: #ddd; 41 | --gray: #333; 42 | --light-gray: #444; 43 | 44 | margin: 0; 45 | font-size: 14px; 46 | line-height: 1.5; 47 | color: var(--text); 48 | background: #111; 49 | 50 | 51 | /* font-family: Roboto, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; */ 52 | font-family: var(--font); 53 | } 54 | 55 | h1, h2, h3, h4, h5, h6 { 56 | margin: 1em 0 0.5em 0; 57 | font-weight: 400; 58 | line-height: 1.2; 59 | color: var(--highlight); 60 | } 61 | 62 | h1 { 63 | font-size: 2em; 64 | } 65 | 66 | h1, h2 { 67 | font-family: var(--font); 68 | line-height: 1.25; 69 | } 70 | 71 | h2 { 72 | margin-top: 2em; 73 | } 74 | 75 | a { 76 | color: inherit; 77 | } 78 | 79 | strong { 80 | color: var(--highlight); 81 | } 82 | 83 | pre { 84 | background: #181818; 85 | tab-size: 2; 86 | padding: 0.5em; 87 | overflow-x: auto; 88 | } 89 | 90 | code { 91 | font-family: menlo, inconsolata, monospace; 92 | font-size: calc(1em - 2px); 93 | color: var(--text); 94 | background-color: 181818; 95 | padding: 0.2em 0.4em; 96 | border-radius: 2px; 97 | } 98 | 99 | pre code { 100 | padding: 0; 101 | } 102 | 103 | @media (min-width: 400px) { 104 | body { 105 | font-size: 16px; 106 | } 107 | } -------------------------------------------------------------------------------- /static/logo-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/logo-192.png -------------------------------------------------------------------------------- /static/logo-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/logo-512.png -------------------------------------------------------------------------------- /static/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "background_color": "#ffffff", 3 | "theme_color": "#333333", 4 | "name": "TODO", 5 | "short_name": "TODO", 6 | "display": "minimal-ui", 7 | "start_url": "/", 8 | "icons": [ 9 | { 10 | "src": "logo-192.png", 11 | "sizes": "192x192", 12 | "type": "image/png" 13 | }, 14 | { 15 | "src": "logo-512.png", 16 | "sizes": "512x512", 17 | "type": "image/png" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /static/prism.css: -------------------------------------------------------------------------------- 1 | .token.comment, 2 | .token.block-comment, 3 | .token.prolog, 4 | .token.doctype, 5 | .token.cdata { 6 | color: #5c6773; 7 | } 8 | 9 | .token.punctuation { 10 | color: #ccc; 11 | } 12 | 13 | .token.tag, 14 | .token.attr-name, 15 | .token.deleted { 16 | color: #e2777a; 17 | } 18 | 19 | .token.function-name { 20 | color: #6196cc; 21 | } 22 | 23 | .token.boolean, 24 | .token.token.function-name { 25 | color: #f08d49; 26 | } 27 | 28 | .token.class-name, 29 | .token.symbol { 30 | color: #f8c555; 31 | } 32 | 33 | .token.important, 34 | .token.atrule, 35 | .token.keyword { 36 | color: #cc99cd; 37 | } 38 | 39 | .token.char, 40 | .token.attr-value { 41 | color: #7ec699; 42 | } 43 | 44 | .token.operator, 45 | .token.url { 46 | color: #67cdcc; 47 | } 48 | 49 | .token.important, 50 | .token.bold { 51 | font-weight: bold; 52 | } 53 | .token.italic { 54 | font-style: italic; 55 | } 56 | 57 | .token.inserted { 58 | color: green; 59 | } 60 | 61 | /* ayu */ 62 | .token.title, 63 | .token.string { 64 | color: #bae67e; 65 | } 66 | 67 | .token.regex { 68 | color: #95e6cb; 69 | } 70 | .token.constant, 71 | .token.number { 72 | color: #ffcc66; 73 | } 74 | 75 | .token.function, 76 | .token.selector, 77 | .token.attr-name { 78 | color: #ffd580; 79 | } 80 | .token.entity { 81 | color: #d4bfff; 82 | cursor: help; 83 | } 84 | 85 | [class*="language-"] { 86 | color: #cbccc6; 87 | } 88 | 89 | .token.variable, 90 | .token.punctuation { 91 | color: #cbccc6; 92 | } 93 | .token.property { 94 | color: #f28779; 95 | } 96 | 97 | .token.builtin, 98 | .token.class-name { 99 | color: #5ccfe6; 100 | } 101 | 102 | .token.keyword { 103 | color: #ffa759; 104 | } 105 | 106 | .token.operator { 107 | color: #f29e74; 108 | } 109 | 110 | /* .token.function-name { 111 | color: #ffd580; 112 | } */ 113 | 114 | .token.parameter { 115 | color: #d4bfff; 116 | } 117 | 118 | .token.tag, 119 | .token.property { 120 | color: #5ccfe6; 121 | } 122 | 123 | .token.punctuation { 124 | color: #5ccfe680; 125 | } 126 | 127 | .token.namespace { 128 | opacity: 0.8; 129 | } 130 | 131 | .diff-add { 132 | color: #3D9970; 133 | } 134 | 135 | .diff-add::before { 136 | content: '+'; 137 | } 138 | 139 | .diff-remove { 140 | color: #FF4136; 141 | } 142 | 143 | .diff-remove::after { 144 | content: '\000A'; 145 | } -------------------------------------------------------------------------------- /static/successkid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/svelte-workshop/8f63acbe0fce2fd73a23ec72766cb26996502f6d/static/successkid.jpg --------------------------------------------------------------------------------