├── .gitignore ├── .prettierrc.yaml ├── LICENSE ├── README.md ├── package.json ├── pnpm-lock.yaml ├── public ├── favicon.png ├── global.css ├── index.html ├── worker.js └── worker.js.map ├── rollup.config.js ├── src ├── App.svelte ├── Input.svelte ├── Output.svelte ├── Tabs.svelte ├── main.ts ├── types.ts └── worker.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/build/ 3 | 4 | .DS_Store 5 | .vscode 6 | -------------------------------------------------------------------------------- /.prettierrc.yaml: -------------------------------------------------------------------------------- 1 | useTabs: true 2 | svelteSortOrder: scripts-markup-styles 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 pngwn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # REPLicant - Svelte Summit 2020 2 | 3 | This is the source code for a [talk I gave at Svelte Summit 2020](https://www.youtube.com/watch?v=S3j1fLzC8_E). This is actual code I wrote during the talk with a few later additions to clean things up. I will add a link to the video when it is published. 4 | 5 | ## Table of Contents 6 | 7 | - [Differences from the talk](#differences-from-the-talk) 8 | - [Usage](#usage) 9 | - [Commits](#commits) 10 | - [Initial setup and config](#initial-setup-and-config) 11 | - [REPL code editor](#repl-code-editor) 12 | - [Tabbed interface](#tabbed-interface) 13 | - [New component creation](#new-component-creation) 14 | - [Web Worker setup](#web-worker-setup) 15 | - [Svelte package imports](#svelte-package-imports) 16 | - [Local package imports](#local-package-imports) 17 | - [Iframe setup](#iframe-setup) 18 | - [Evaluate and render](#evaluate-and-render) 19 | - [NPM module imports](#npm-module-imports) 20 | - [What next?](#what-next) 21 | - [Further reading](#further-reading) 22 | 23 | ## Differences from the talk 24 | 25 | The only thing this app does that the version in the talk doesn't is resolve npm module imports to a CDN. So `import x from 'randommodule'` works in this app too. You can read more details about this [here](#npm-module-imports). 26 | 27 | ## Usage 28 | 29 | _Note: I use `pnpm` but this will probably work fine with `yarn` or `npm` depsite the lockfile warnings._ 30 | 31 | Clone and install 32 | 33 | ```bash 34 | git clone https://github.com/pngwn/REPLicant.git && cd REPLicant 35 | 36 | pnpm i # or yarn or npm i 37 | ``` 38 | 39 | Run the dev server and play around: 40 | 41 | ```bash 42 | pnpm dev 43 | ``` 44 | 45 | ## Commits 46 | 47 | ### initial setup and config 48 | 49 | This commit setups the basics. It is the [svelte-template]() after running the `setupTypescript` script with a few extra config files (`.prettierrc.yaml` and `.gitignore`). 50 | 51 | We also add some basic typescript interfaces and data structures for the REPL. 52 | 53 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/534b9fe0527fc14c58a7551a9a8196c4468a1040)\ 54 | [View the commit](https://github.com/pngwn/REPLicant/commit/534b9fe0527fc14c58a7551a9a8196c4468a1040) 55 | 56 | ### repl code editor 57 | 58 | This commit adds an input, which is our rudimentary code editor and keeps the contents of the input in sync with the component state we setup earlier. 59 | 60 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/a26696c2ce634979d9481fa36b44d1529d7f6890)\ 61 | [View the diff](https://github.com/pngwn/REPLicant/commit/a26696c2ce634979d9481fa36b44d1529d7f6890) 62 | 63 | ### tabbed interface 64 | 65 | This commit adds a tabbed UI allowing us to switch between the different components, marking them as active. The 'active' component is the component we are currently editing in the REPL. 66 | 67 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/f87252385b84b84daa7534353c04d8665dd32b60)\ 68 | [View the diff](https://github.com/pngwn/REPLicant/commit/f87252385b84b84daa7534353c04d8665dd32b60) 69 | 70 | ### new component creation 71 | 72 | This commit adds a button allowing the creation of a new component in the REPL as well as accompanying logic. This only supports the creation of svelte components (`.svelte` files) and the name is automatically generated. 73 | 74 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/fd783d86fefdf85847b2805d57887c569fa677ac)\ 75 | [View the diff](https://github.com/pngwn/REPLicant/commit/fd783d86fefdf85847b2805d57887c569fa677ac) 76 | 77 | ### web worker setup 78 | 79 | This commit sets up the basic web worker boilerplate as well as some simple messaging to make sure things are working as expected. 80 | 81 | It also adds another entrypoint in the rollup config, to bundle the worker file seperately. 82 | 83 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/abd59742d41d68618d9b61945711429ae70b7515)\ 84 | [View the diff](https://github.com/pngwn/REPLicant/commit/abd59742d41d68618d9b61945711429ae70b7515) 85 | 86 | ### Svelte package imports 87 | 88 | This commit setups the rollup basics that we need and resolves svelte imports to the CDN we are using (jsdelivr) as we have no file system. It resolve the follwing cases: 89 | 90 | - plain 'svelte' imports: `import { onMount } from 'svelte';` 91 | - svelte 'sub imports': `import { writable } from 'svelte/writable';` 92 | - relative imports from a svelte package: `import x from './file.js';` where the importing module is module is a svelte module that we handled above. 93 | 94 | In addition to resolving the paths, it also fetches the source code from the cdn and passes it to the bundler. 95 | 96 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/1899a92812683bd12f3063ee51dae7f9f2795e15)\ 97 | [View the diff](https://github.com/pngwn/REPLicant/commit/1899a92812683bd12f3063ee51dae7f9f2795e15) 98 | 99 | ### Local package imports 100 | 101 | This commit resolves local REPL imports that don't exist anywhere except in memory. These are the components that the user is creating live in the browser. 102 | 103 | It also compiles svelte components to valid javascript and returns that to the bundler. 104 | 105 | And finally it passes this final bundle back to the main thread. 106 | 107 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/28f54dbd8af541374427b61d643b1729b88a4dad)\ 108 | [View the diff](https://github.com/pngwn/REPLicant/commit/28f54dbd8af541374427b61d643b1729b88a4dad) 109 | 110 | ### Iframe setup 111 | 112 | This commit sets up the basic ifram boilerplate, giving it a valid `srcdoc`, listening for any posted messages inside. In the parent component (outside of the iframe) we pass a simple message down to check everything is working. 113 | 114 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/e0362b500ee191c68aec9b9a0fa1c7f5fc3b8465)\ 115 | [View the diff](https://github.com/pngwn/REPLicant/commit/e0362b500ee191c68aec9b9a0fa1c7f5fc3b8465) 116 | 117 | ### Evaluate and render 118 | 119 | This commit evaluates the bundle in the iframe via a dynamic import using blob urls and then renders the component to the page. 120 | 121 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/9709717a52577d050a7eec5a53ba6c6ddbaf5196)\ 122 | [View the diff](https://github.com/pngwn/REPLicant/commit/9709717a52577d050a7eec5a53ba6c6ddbaf5196) 123 | 124 | ### NPM module imports 125 | 126 | _This did not appear in the talk_ 127 | 128 | This is similar to the earlier resolution steps. This commit resolves npm module imports to the CDN. It does this by fetching the `package.json` and reading it to work out where teh entry point is. This enables `import x from 'any-random-package';`. 129 | 130 | Unlike with the svelte packages, where we can easily workout what the structure looks like, the entrypoint for a given npm module can vary significantly. We just get the `package.json` to remove any ambiguity. 131 | 132 | This also works for Svelte-specific packages that are using the `svelte` field to point to uncompile `.svelte` files. 133 | 134 | [Browse the repo at this point](https://github.com/pngwn/REPLicant/tree/adc1028989503ace1cac410df2b5cfbc4b46f488)\ 135 | [View the diff](https://github.com/pngwn/REPLicant/commit/adc1028989503ace1cac410df2b5cfbc4b46f488) 136 | 137 | ## What next? 138 | 139 | This is just the start, from here you can go on to add whatever features you like. 140 | 141 | Maybe you want allow importing different file types, that would just require a new transform that convert that format into JavaScript, just like we did with `.svelte` files. 142 | 143 | Perhaps you'd like to add additional UI features. Draggable tabs, more user feedback. Syntax highlighting and code completion could be added by using a dedicated code editor such as [monaco-editor](https://microsoft.github.io/monaco-editor/) or [codemirror](https://codemirror.net/)(which is used by the official Svelte REPL). 144 | 145 | Maybe you want to improve the performance of the data-loading and compilation by adding some caching for those behaviours inside the web worker. 146 | 147 | The list is endless, check the [repl on the Svelte site](https://svelte.dev/repl/) for inspiration but don't let that limit you! 148 | 149 | ## Further reading 150 | 151 | - To understand the Svelte API itself - [tutorial](https://svelte.dev/tutorial/) - [docs](https://svelte.dev/docs/) 152 | - [Svelte REPL](https://svelte.dev/repl/) 153 | - [mdsvex Playground](https://mdsvex.com/playground) 154 | - [Try Ruby](https://try.ruby-lang.org/) 155 | - [Tour of Go](https://tour.golang.org/welcome/1) 156 | - [Rust Playground](https://play.rust-lang.org/) 157 | - [TypesScript Playground](https://www.typescriptlang.org/play) 158 | - [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers) 159 | - [Blobs](https://developer.mozilla.org/en-US/docs/Web/API/Blob) 160 | - [Blob URLS](https://javascript.info/blob) 161 | - [Embedding content and iFrames](https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies) 162 | - [Communicating with iFrames](https://javascript.info/cross-window-communication) 163 | 164 | ## Questions 165 | 166 | If you have questions or feedback then feel to file an issue here, bug me on twitter ([@evilpingwin](https://twitter.com/evilpingwin)), or you can grab me on discord (@pngwn). 167 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "build": "rollup -c", 6 | "dev": "rollup -c -w", 7 | "start": "sirv public", 8 | "validate": "svelte-check" 9 | }, 10 | "devDependencies": { 11 | "@rollup/plugin-commonjs": "^14.0.0", 12 | "@rollup/plugin-node-resolve": "^8.0.0", 13 | "rollup": "^2.3.4", 14 | "rollup-plugin-livereload": "^2.0.0", 15 | "rollup-plugin-svelte": "^6.0.0", 16 | "rollup-plugin-terser": "^7.0.0", 17 | "svelte": "^3.0.0", 18 | "svelte-check": "^1.0.0", 19 | "svelte-preprocess": "^4.0.0", 20 | "@rollup/plugin-typescript": "^6.0.0", 21 | "typescript": "^3.9.3", 22 | "tslib": "^2.0.0", 23 | "@tsconfig/svelte": "^1.0.0" 24 | }, 25 | "dependencies": { 26 | "sirv-cli": "^1.0.0" 27 | } 28 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | sirv-cli: 1.0.6 3 | devDependencies: 4 | '@rollup/plugin-commonjs': 14.0.0_rollup@2.29.0 5 | '@rollup/plugin-node-resolve': 8.4.0_rollup@2.29.0 6 | '@rollup/plugin-typescript': 6.0.0_3cf0551218068091b4bd1b4d46e0396b 7 | '@tsconfig/svelte': 1.0.10 8 | rollup: 2.29.0 9 | rollup-plugin-livereload: 2.0.0 10 | rollup-plugin-svelte: 6.0.1_rollup@2.29.0+svelte@3.29.0 11 | rollup-plugin-terser: 7.0.2_rollup@2.29.0 12 | svelte: 3.29.0 13 | svelte-check: 1.0.55 14 | svelte-preprocess: 4.5.1_svelte@3.29.0+typescript@3.9.7 15 | tslib: 2.0.3 16 | typescript: 3.9.7 17 | lockfileVersion: 5.1 18 | packages: 19 | /@babel/code-frame/7.10.4: 20 | dependencies: 21 | '@babel/highlight': 7.10.4 22 | dev: true 23 | resolution: 24 | integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 25 | /@babel/helper-validator-identifier/7.10.4: 26 | dev: true 27 | resolution: 28 | integrity: sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 29 | /@babel/highlight/7.10.4: 30 | dependencies: 31 | '@babel/helper-validator-identifier': 7.10.4 32 | chalk: 2.4.2 33 | js-tokens: 4.0.0 34 | dev: true 35 | resolution: 36 | integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 37 | /@emmetio/extract-abbreviation/0.1.6: 38 | dev: true 39 | resolution: 40 | integrity: sha512-Ce3xE2JvTSEbASFbRbA1gAIcMcZWdS2yUYRaQbeM0nbOzaZrUYfa3ePtcriYRZOZmr+CkKA+zbjhvTpIOAYVcw== 41 | /@polka/url/1.0.0-next.11: 42 | dev: false 43 | resolution: 44 | integrity: sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA== 45 | /@rollup/plugin-commonjs/14.0.0_rollup@2.29.0: 46 | dependencies: 47 | '@rollup/pluginutils': 3.1.0_rollup@2.29.0 48 | commondir: 1.0.1 49 | estree-walker: 1.0.1 50 | glob: 7.1.6 51 | is-reference: 1.2.1 52 | magic-string: 0.25.7 53 | resolve: 1.17.0 54 | rollup: 2.29.0 55 | dev: true 56 | engines: 57 | node: '>= 8.0.0' 58 | peerDependencies: 59 | rollup: ^2.3.4 60 | resolution: 61 | integrity: sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw== 62 | /@rollup/plugin-node-resolve/8.4.0_rollup@2.29.0: 63 | dependencies: 64 | '@rollup/pluginutils': 3.1.0_rollup@2.29.0 65 | '@types/resolve': 1.17.1 66 | builtin-modules: 3.1.0 67 | deep-freeze: 0.0.1 68 | deepmerge: 4.2.2 69 | is-module: 1.0.0 70 | resolve: 1.17.0 71 | rollup: 2.29.0 72 | dev: true 73 | engines: 74 | node: '>= 8.0.0' 75 | peerDependencies: 76 | rollup: ^1.20.0||^2.0.0 77 | resolution: 78 | integrity: sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ== 79 | /@rollup/plugin-typescript/6.0.0_3cf0551218068091b4bd1b4d46e0396b: 80 | dependencies: 81 | '@rollup/pluginutils': 3.1.0_rollup@2.29.0 82 | resolve: 1.17.0 83 | rollup: 2.29.0 84 | tslib: 2.0.3 85 | typescript: 3.9.7 86 | dev: true 87 | engines: 88 | node: '>=8.0.0' 89 | peerDependencies: 90 | rollup: ^2.14.0 91 | tslib: '*' 92 | typescript: '>=3.4.0' 93 | resolution: 94 | integrity: sha512-Y5U2L4eaF3wUSgCZRMdvNmuzWkKMyN3OwvhAdbzAi5sUqedaBk/XbzO4T7RlViDJ78MOPhwAIv2FtId/jhMtbg== 95 | /@rollup/pluginutils/3.1.0_rollup@2.29.0: 96 | dependencies: 97 | '@types/estree': 0.0.39 98 | estree-walker: 1.0.1 99 | picomatch: 2.2.2 100 | rollup: 2.29.0 101 | dev: true 102 | engines: 103 | node: '>= 8.0.0' 104 | peerDependencies: 105 | rollup: ^1.20.0||^2.0.0 106 | resolution: 107 | integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 108 | /@tsconfig/svelte/1.0.10: 109 | dev: true 110 | resolution: 111 | integrity: sha512-EBrpH2iXXfaf/9z81koiDYkp2mlwW2XzFcAqn6qh7VKyP8zBvHHAQzNhY+W9vH5arAjmGAm5g8ElWq6YmXm3ig== 112 | /@types/estree/0.0.39: 113 | dev: true 114 | resolution: 115 | integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 116 | /@types/estree/0.0.45: 117 | dev: true 118 | resolution: 119 | integrity: sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== 120 | /@types/node/14.11.8: 121 | dev: true 122 | resolution: 123 | integrity: sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw== 124 | /@types/parse-json/4.0.0: 125 | dev: true 126 | resolution: 127 | integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== 128 | /@types/pug/2.0.4: 129 | dev: true 130 | resolution: 131 | integrity: sha1-h3L80EGOPNLMFxVV1zAHQVBR9LI= 132 | /@types/resolve/1.17.1: 133 | dependencies: 134 | '@types/node': 14.11.8 135 | dev: true 136 | resolution: 137 | integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== 138 | /@types/sass/1.16.0: 139 | dependencies: 140 | '@types/node': 14.11.8 141 | dev: true 142 | resolution: 143 | integrity: sha512-2XZovu4NwcqmtZtsBR5XYLw18T8cBCnU2USFHTnYLLHz9fkhnoEMoDsqShJIOFsFhn5aJHjweiUUdTrDGujegA== 144 | /ansi-styles/3.2.1: 145 | dependencies: 146 | color-convert: 1.9.3 147 | dev: true 148 | engines: 149 | node: '>=4' 150 | resolution: 151 | integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 152 | /ansi-styles/4.3.0: 153 | dependencies: 154 | color-convert: 2.0.1 155 | dev: true 156 | engines: 157 | node: '>=8' 158 | resolution: 159 | integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 160 | /anymatch/3.1.1: 161 | dependencies: 162 | normalize-path: 3.0.0 163 | picomatch: 2.2.2 164 | dev: true 165 | engines: 166 | node: '>= 8' 167 | resolution: 168 | integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 169 | /async-limiter/1.0.1: 170 | dev: true 171 | resolution: 172 | integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== 173 | /balanced-match/1.0.0: 174 | dev: true 175 | resolution: 176 | integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 177 | /binary-extensions/2.1.0: 178 | dev: true 179 | engines: 180 | node: '>=8' 181 | resolution: 182 | integrity: sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== 183 | /brace-expansion/1.1.11: 184 | dependencies: 185 | balanced-match: 1.0.0 186 | concat-map: 0.0.1 187 | dev: true 188 | resolution: 189 | integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 190 | /braces/3.0.2: 191 | dependencies: 192 | fill-range: 7.0.1 193 | dev: true 194 | engines: 195 | node: '>=8' 196 | resolution: 197 | integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 198 | /buffer-from/1.1.1: 199 | dev: true 200 | resolution: 201 | integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 202 | /builtin-modules/3.1.0: 203 | dev: true 204 | engines: 205 | node: '>=6' 206 | resolution: 207 | integrity: sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== 208 | /callsites/3.1.0: 209 | dev: true 210 | engines: 211 | node: '>=6' 212 | resolution: 213 | integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 214 | /chalk/2.4.2: 215 | dependencies: 216 | ansi-styles: 3.2.1 217 | escape-string-regexp: 1.0.5 218 | supports-color: 5.5.0 219 | dev: true 220 | engines: 221 | node: '>=4' 222 | resolution: 223 | integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 224 | /chalk/4.1.0: 225 | dependencies: 226 | ansi-styles: 4.3.0 227 | supports-color: 7.2.0 228 | dev: true 229 | engines: 230 | node: '>=10' 231 | resolution: 232 | integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 233 | /chokidar/3.4.2: 234 | dependencies: 235 | anymatch: 3.1.1 236 | braces: 3.0.2 237 | glob-parent: 5.1.1 238 | is-binary-path: 2.1.0 239 | is-glob: 4.0.1 240 | normalize-path: 3.0.0 241 | readdirp: 3.4.0 242 | dev: true 243 | engines: 244 | node: '>= 8.10.0' 245 | optionalDependencies: 246 | fsevents: 2.1.3 247 | resolution: 248 | integrity: sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== 249 | /color-convert/1.9.3: 250 | dependencies: 251 | color-name: 1.1.3 252 | dev: true 253 | resolution: 254 | integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 255 | /color-convert/2.0.1: 256 | dependencies: 257 | color-name: 1.1.4 258 | dev: true 259 | engines: 260 | node: '>=7.0.0' 261 | resolution: 262 | integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 263 | /color-name/1.1.3: 264 | dev: true 265 | resolution: 266 | integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 267 | /color-name/1.1.4: 268 | dev: true 269 | resolution: 270 | integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 271 | /commander/2.20.3: 272 | dev: true 273 | resolution: 274 | integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 275 | /commondir/1.0.1: 276 | dev: true 277 | resolution: 278 | integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 279 | /concat-map/0.0.1: 280 | dev: true 281 | resolution: 282 | integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 283 | /console-clear/1.1.1: 284 | dev: false 285 | engines: 286 | node: '>=4' 287 | resolution: 288 | integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ== 289 | /cosmiconfig/7.0.0: 290 | dependencies: 291 | '@types/parse-json': 4.0.0 292 | import-fresh: 3.2.1 293 | parse-json: 5.1.0 294 | path-type: 4.0.0 295 | yaml: 1.10.0 296 | dev: true 297 | engines: 298 | node: '>=10' 299 | resolution: 300 | integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== 301 | /dedent-js/1.0.1: 302 | dev: true 303 | resolution: 304 | integrity: sha1-vuX7fJ5yfYXf+iRZDRDsGrElUwU= 305 | /deep-freeze/0.0.1: 306 | dev: true 307 | resolution: 308 | integrity: sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ= 309 | /deepmerge/4.2.2: 310 | dev: true 311 | engines: 312 | node: '>=0.10.0' 313 | resolution: 314 | integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 315 | /detect-indent/6.0.0: 316 | dev: true 317 | engines: 318 | node: '>=8' 319 | resolution: 320 | integrity: sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== 321 | /error-ex/1.3.2: 322 | dependencies: 323 | is-arrayish: 0.2.1 324 | dev: true 325 | resolution: 326 | integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 327 | /escape-string-regexp/1.0.5: 328 | dev: true 329 | engines: 330 | node: '>=0.8.0' 331 | resolution: 332 | integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 333 | /estree-walker/0.6.1: 334 | dev: true 335 | resolution: 336 | integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== 337 | /estree-walker/1.0.1: 338 | dev: true 339 | resolution: 340 | integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 341 | /estree-walker/2.0.1: 342 | dev: true 343 | resolution: 344 | integrity: sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg== 345 | /fill-range/7.0.1: 346 | dependencies: 347 | to-regex-range: 5.0.1 348 | dev: true 349 | engines: 350 | node: '>=8' 351 | resolution: 352 | integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 353 | /fs.realpath/1.0.0: 354 | dev: true 355 | resolution: 356 | integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 357 | /fsevents/2.1.3: 358 | dev: true 359 | engines: 360 | node: ^8.16.0 || ^10.6.0 || >=11.0.0 361 | optional: true 362 | os: 363 | - darwin 364 | resolution: 365 | integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 366 | /get-port/3.2.0: 367 | dev: false 368 | engines: 369 | node: '>=4' 370 | resolution: 371 | integrity: sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= 372 | /glob-parent/5.1.1: 373 | dependencies: 374 | is-glob: 4.0.1 375 | dev: true 376 | engines: 377 | node: '>= 6' 378 | resolution: 379 | integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 380 | /glob/7.1.6: 381 | dependencies: 382 | fs.realpath: 1.0.0 383 | inflight: 1.0.6 384 | inherits: 2.0.4 385 | minimatch: 3.0.4 386 | once: 1.4.0 387 | path-is-absolute: 1.0.1 388 | dev: true 389 | resolution: 390 | integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 391 | /has-flag/3.0.0: 392 | dev: true 393 | engines: 394 | node: '>=4' 395 | resolution: 396 | integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 397 | /has-flag/4.0.0: 398 | dev: true 399 | engines: 400 | node: '>=8' 401 | resolution: 402 | integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 403 | /import-fresh/3.2.1: 404 | dependencies: 405 | parent-module: 1.0.1 406 | resolve-from: 4.0.0 407 | dev: true 408 | engines: 409 | node: '>=6' 410 | resolution: 411 | integrity: sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== 412 | /inflight/1.0.6: 413 | dependencies: 414 | once: 1.4.0 415 | wrappy: 1.0.2 416 | dev: true 417 | resolution: 418 | integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 419 | /inherits/2.0.4: 420 | dev: true 421 | resolution: 422 | integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 423 | /is-arrayish/0.2.1: 424 | dev: true 425 | resolution: 426 | integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 427 | /is-binary-path/2.1.0: 428 | dependencies: 429 | binary-extensions: 2.1.0 430 | dev: true 431 | engines: 432 | node: '>=8' 433 | resolution: 434 | integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 435 | /is-extglob/2.1.1: 436 | dev: true 437 | engines: 438 | node: '>=0.10.0' 439 | resolution: 440 | integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 441 | /is-glob/4.0.1: 442 | dependencies: 443 | is-extglob: 2.1.1 444 | dev: true 445 | engines: 446 | node: '>=0.10.0' 447 | resolution: 448 | integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 449 | /is-module/1.0.0: 450 | dev: true 451 | resolution: 452 | integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 453 | /is-number/7.0.0: 454 | dev: true 455 | engines: 456 | node: '>=0.12.0' 457 | resolution: 458 | integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 459 | /is-reference/1.2.1: 460 | dependencies: 461 | '@types/estree': 0.0.45 462 | dev: true 463 | resolution: 464 | integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== 465 | /jest-worker/26.5.0: 466 | dependencies: 467 | '@types/node': 14.11.8 468 | merge-stream: 2.0.0 469 | supports-color: 7.2.0 470 | dev: true 471 | engines: 472 | node: '>= 10.13.0' 473 | resolution: 474 | integrity: sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug== 475 | /js-tokens/4.0.0: 476 | dev: true 477 | resolution: 478 | integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 479 | /json-parse-even-better-errors/2.3.1: 480 | dev: true 481 | resolution: 482 | integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 483 | /jsonc-parser/1.0.3: 484 | dev: true 485 | resolution: 486 | integrity: sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g== 487 | /kleur/3.0.3: 488 | dev: false 489 | engines: 490 | node: '>=6' 491 | resolution: 492 | integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 493 | /lines-and-columns/1.1.6: 494 | dev: true 495 | resolution: 496 | integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 497 | /livereload-js/3.3.1: 498 | dev: true 499 | resolution: 500 | integrity: sha512-CBu1gTEfzVhlOK1WASKAAJ9Qx1fHECTq0SUB67sfxwQssopTyvzqTlgl+c0h9pZ6V+Fzd2rc510ppuNusg9teQ== 501 | /livereload/0.9.1: 502 | dependencies: 503 | chokidar: 3.4.2 504 | livereload-js: 3.3.1 505 | opts: 2.0.2 506 | ws: 6.2.1 507 | dev: true 508 | engines: 509 | node: '>=8.0.0' 510 | hasBin: true 511 | resolution: 512 | integrity: sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw== 513 | /local-access/1.0.1: 514 | dev: false 515 | engines: 516 | node: '>=6' 517 | resolution: 518 | integrity: sha512-ykt2pgN0aqIy6KQC1CqdWTWkmUwNgaOS6dcpHVjyBJONA+Xi7AtSB1vuxC/U/0tjIP3wcRudwQk1YYzUvzk2bA== 519 | /lodash/4.17.20: 520 | dev: true 521 | resolution: 522 | integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 523 | /lower-case/2.0.1: 524 | dependencies: 525 | tslib: 1.14.1 526 | dev: true 527 | resolution: 528 | integrity: sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== 529 | /magic-string/0.25.7: 530 | dependencies: 531 | sourcemap-codec: 1.4.8 532 | dev: true 533 | resolution: 534 | integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 535 | /merge-stream/2.0.0: 536 | dev: true 537 | resolution: 538 | integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 539 | /mime/2.4.6: 540 | dev: false 541 | engines: 542 | node: '>=4.0.0' 543 | hasBin: true 544 | resolution: 545 | integrity: sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== 546 | /min-indent/1.0.1: 547 | dev: true 548 | engines: 549 | node: '>=4' 550 | resolution: 551 | integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== 552 | /minimatch/3.0.4: 553 | dependencies: 554 | brace-expansion: 1.1.11 555 | dev: true 556 | resolution: 557 | integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 558 | /minimist/1.2.5: 559 | dev: true 560 | resolution: 561 | integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 562 | /mri/1.1.6: 563 | dev: false 564 | engines: 565 | node: '>=4' 566 | resolution: 567 | integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== 568 | /no-case/3.0.3: 569 | dependencies: 570 | lower-case: 2.0.1 571 | tslib: 1.14.1 572 | dev: true 573 | resolution: 574 | integrity: sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== 575 | /normalize-path/3.0.0: 576 | dev: true 577 | engines: 578 | node: '>=0.10.0' 579 | resolution: 580 | integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 581 | /once/1.4.0: 582 | dependencies: 583 | wrappy: 1.0.2 584 | dev: true 585 | resolution: 586 | integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 587 | /opts/2.0.2: 588 | dev: true 589 | resolution: 590 | integrity: sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg== 591 | /parent-module/1.0.1: 592 | dependencies: 593 | callsites: 3.1.0 594 | dev: true 595 | engines: 596 | node: '>=6' 597 | resolution: 598 | integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 599 | /parse-json/5.1.0: 600 | dependencies: 601 | '@babel/code-frame': 7.10.4 602 | error-ex: 1.3.2 603 | json-parse-even-better-errors: 2.3.1 604 | lines-and-columns: 1.1.6 605 | dev: true 606 | engines: 607 | node: '>=8' 608 | resolution: 609 | integrity: sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== 610 | /pascal-case/3.1.1: 611 | dependencies: 612 | no-case: 3.0.3 613 | tslib: 1.14.1 614 | dev: true 615 | resolution: 616 | integrity: sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== 617 | /path-is-absolute/1.0.1: 618 | dev: true 619 | engines: 620 | node: '>=0.10.0' 621 | resolution: 622 | integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 623 | /path-parse/1.0.6: 624 | dev: true 625 | resolution: 626 | integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 627 | /path-type/4.0.0: 628 | dev: true 629 | engines: 630 | node: '>=8' 631 | resolution: 632 | integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 633 | /picomatch/2.2.2: 634 | dev: true 635 | engines: 636 | node: '>=8.6' 637 | resolution: 638 | integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 639 | /prettier-plugin-svelte/1.4.0_prettier@2.1.2+svelte@3.28.0: 640 | dependencies: 641 | prettier: 2.1.2 642 | svelte: 3.28.0 643 | dev: true 644 | peerDependencies: 645 | prettier: ^1.16.4 || ^2.0.0 646 | svelte: ^3.2.0 647 | resolution: 648 | integrity: sha512-KXO2He7Kql0Lz4DdlzVli1j2JTDUR9jPV/DqyfnJmY1pCeSV1qZkxgdsyYma35W6OLrCAr/G6yKdmzo+75u2Ng== 649 | /prettier/2.1.2: 650 | dev: true 651 | engines: 652 | node: '>=10.13.0' 653 | hasBin: true 654 | resolution: 655 | integrity: sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== 656 | /randombytes/2.1.0: 657 | dependencies: 658 | safe-buffer: 5.2.1 659 | dev: true 660 | resolution: 661 | integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 662 | /readdirp/3.4.0: 663 | dependencies: 664 | picomatch: 2.2.2 665 | dev: true 666 | engines: 667 | node: '>=8.10.0' 668 | resolution: 669 | integrity: sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== 670 | /require-relative/0.8.7: 671 | dev: true 672 | resolution: 673 | integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= 674 | /resolve-from/4.0.0: 675 | dev: true 676 | engines: 677 | node: '>=4' 678 | resolution: 679 | integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 680 | /resolve/1.17.0: 681 | dependencies: 682 | path-parse: 1.0.6 683 | dev: true 684 | resolution: 685 | integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== 686 | /rollup-plugin-livereload/2.0.0: 687 | dependencies: 688 | livereload: 0.9.1 689 | dev: true 690 | engines: 691 | node: '>=8.3' 692 | resolution: 693 | integrity: sha512-oC/8NqumGYuphkqrfszOHUUIwzKsaHBICw6QRwT5uD07gvePTS+HW+GFwu6f9K8W02CUuTvtIM9AWJrbj4wE1A== 694 | /rollup-plugin-svelte/6.0.1_rollup@2.29.0+svelte@3.29.0: 695 | dependencies: 696 | require-relative: 0.8.7 697 | rollup: 2.29.0 698 | rollup-pluginutils: 2.8.2 699 | sourcemap-codec: 1.4.8 700 | svelte: 3.29.0 701 | dev: true 702 | peerDependencies: 703 | rollup: '>=1.19.2' 704 | svelte: '*' 705 | resolution: 706 | integrity: sha512-kS9/JZMBNgpKTqVKlwV8mhmGwxu8NiNf6+n5ZzdZ8yDp3+ADqjf8Au+JNEpoOn6kLlh1hLS2Gsa76k9RP57HDQ== 707 | /rollup-plugin-terser/7.0.2_rollup@2.29.0: 708 | dependencies: 709 | '@babel/code-frame': 7.10.4 710 | jest-worker: 26.5.0 711 | rollup: 2.29.0 712 | serialize-javascript: 4.0.0 713 | terser: 5.3.4 714 | dev: true 715 | peerDependencies: 716 | rollup: ^2.0.0 717 | resolution: 718 | integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== 719 | /rollup-pluginutils/2.8.2: 720 | dependencies: 721 | estree-walker: 0.6.1 722 | dev: true 723 | resolution: 724 | integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== 725 | /rollup/2.29.0: 726 | dev: true 727 | engines: 728 | node: '>=10.0.0' 729 | hasBin: true 730 | optionalDependencies: 731 | fsevents: 2.1.3 732 | resolution: 733 | integrity: sha512-gtU0sjxMpsVlpuAf4QXienPmUAhd6Kc7owQ4f5lypoxBW18fw2UNYZ4NssLGsri6WhUZkE/Ts3EMRebN+gNLiQ== 734 | /sade/1.7.4: 735 | dependencies: 736 | mri: 1.1.6 737 | dev: false 738 | engines: 739 | node: '>= 6' 740 | resolution: 741 | integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA== 742 | /safe-buffer/5.2.1: 743 | dev: true 744 | resolution: 745 | integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 746 | /semiver/1.1.0: 747 | dev: false 748 | engines: 749 | node: '>=6' 750 | resolution: 751 | integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg== 752 | /serialize-javascript/4.0.0: 753 | dependencies: 754 | randombytes: 2.1.0 755 | dev: true 756 | resolution: 757 | integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== 758 | /sirv-cli/1.0.6: 759 | dependencies: 760 | console-clear: 1.1.1 761 | get-port: 3.2.0 762 | kleur: 3.0.3 763 | local-access: 1.0.1 764 | sade: 1.7.4 765 | semiver: 1.1.0 766 | sirv: 1.0.6 767 | tinydate: 1.3.0 768 | dev: false 769 | engines: 770 | node: '>= 10' 771 | hasBin: true 772 | resolution: 773 | integrity: sha512-K/iY1OHG7hTw4GzLoqMhwzKCbgWmx5joYAAF2+CwyiamWCpVzAgNVWgAc0JmSA2Gf3wseov05il2QbFTGTZMVg== 774 | /sirv/1.0.6: 775 | dependencies: 776 | '@polka/url': 1.0.0-next.11 777 | mime: 2.4.6 778 | totalist: 1.1.0 779 | dev: false 780 | engines: 781 | node: '>= 10' 782 | resolution: 783 | integrity: sha512-LRGu7Op4Xl9hhigOy2kcB53zAYTjNDdpooey49dIU0cMdpOv9ithVf7nstk3jvs8EhMiT/VORoyazZYGgw4vnA== 784 | /source-map-support/0.5.19: 785 | dependencies: 786 | buffer-from: 1.1.1 787 | source-map: 0.6.1 788 | dev: true 789 | resolution: 790 | integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 791 | /source-map/0.6.1: 792 | dev: true 793 | engines: 794 | node: '>=0.10.0' 795 | resolution: 796 | integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 797 | /source-map/0.7.3: 798 | dev: true 799 | engines: 800 | node: '>= 8' 801 | resolution: 802 | integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== 803 | /sourcemap-codec/1.4.8: 804 | dev: true 805 | resolution: 806 | integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 807 | /strip-indent/3.0.0: 808 | dependencies: 809 | min-indent: 1.0.1 810 | dev: true 811 | engines: 812 | node: '>=8' 813 | resolution: 814 | integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== 815 | /supports-color/5.5.0: 816 | dependencies: 817 | has-flag: 3.0.0 818 | dev: true 819 | engines: 820 | node: '>=4' 821 | resolution: 822 | integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 823 | /supports-color/7.2.0: 824 | dependencies: 825 | has-flag: 4.0.0 826 | dev: true 827 | engines: 828 | node: '>=8' 829 | resolution: 830 | integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 831 | /svelte-check/1.0.55: 832 | dependencies: 833 | chalk: 4.1.0 834 | chokidar: 3.4.2 835 | glob: 7.1.6 836 | minimist: 1.2.5 837 | svelte-language-server: 0.10.134 838 | vscode-languageserver: 6.1.1 839 | vscode-languageserver-protocol: 3.15.3 840 | vscode-languageserver-types: 3.15.1 841 | vscode-uri: 2.1.2 842 | dev: true 843 | hasBin: true 844 | resolution: 845 | integrity: sha512-CEN9h7eXvReXhS9ebxtQDZ4WjwKaqBmM3hY9HEsEHy88Zy9aZ7kASSF2Zy9YTNM86Z/r7mf2X6Mcxp0tyoDmLw== 846 | /svelte-language-server/0.10.134: 847 | dependencies: 848 | chokidar: 3.4.2 849 | cosmiconfig: 7.0.0 850 | estree-walker: 2.0.1 851 | lodash: 4.17.20 852 | prettier: 2.1.2 853 | prettier-plugin-svelte: 1.4.0_prettier@2.1.2+svelte@3.28.0 854 | source-map: 0.7.3 855 | svelte: 3.28.0 856 | svelte-preprocess: 4.3.2_svelte@3.28.0+typescript@3.9.7 857 | svelte2tsx: 0.1.122_svelte@3.28.0+typescript@3.9.7 858 | typescript: 3.9.7 859 | vscode-css-languageservice: 4.2.0 860 | vscode-emmet-helper: 1.2.17 861 | vscode-html-languageservice: 3.0.4-next.15 862 | vscode-languageserver: 6.1.1 863 | vscode-languageserver-types: 3.15.1 864 | vscode-uri: 2.1.2 865 | dev: true 866 | hasBin: true 867 | resolution: 868 | integrity: sha512-75fBs6c5aT+wFA/l0XG9a9ax2QrV7rrO/+4idw2OCFkgsQoK4RAp9i+vP9JNYnIcm4eM2bm/a6bcBxfwkifzHA== 869 | /svelte-preprocess/4.3.2_svelte@3.28.0+typescript@3.9.7: 870 | dependencies: 871 | '@types/pug': 2.0.4 872 | '@types/sass': 1.16.0 873 | detect-indent: 6.0.0 874 | strip-indent: 3.0.0 875 | svelte: 3.28.0 876 | typescript: 3.9.7 877 | dev: true 878 | engines: 879 | node: '>= 9.11.2' 880 | peerDependencies: 881 | '@babel/core': ^7.10.2 882 | coffeescript: ^2.5.1 883 | less: ^3.11.3 884 | node-sass: '*' 885 | postcss: ^7.0.32 886 | postcss-load-config: ^2.1.0 887 | pug: ^3.0.0 888 | sass: ^1.26.8 889 | stylus: ^0.54.7 890 | svelte: ^3.23.0 891 | typescript: ^3.9.5 || ^4.0.0 892 | peerDependenciesMeta: 893 | '@babel/core': 894 | optional: true 895 | coffeescript: 896 | optional: true 897 | less: 898 | optional: true 899 | node-sass: 900 | optional: true 901 | postcss: 902 | optional: true 903 | postcss-load-config: 904 | optional: true 905 | pug: 906 | optional: true 907 | sass: 908 | optional: true 909 | stylus: 910 | optional: true 911 | svelte: 912 | optional: true 913 | typescript: 914 | optional: true 915 | requiresBuild: true 916 | resolution: 917 | integrity: sha512-CmIsCr62y34qGS10/SC1l1VkmX0kZR6wncbGgRJ1qJftLDMEaazC3bWqoqAlrqyQFvpO0+xb44GQm4RKi/9sLQ== 918 | /svelte-preprocess/4.5.1_svelte@3.29.0+typescript@3.9.7: 919 | dependencies: 920 | '@types/pug': 2.0.4 921 | '@types/sass': 1.16.0 922 | detect-indent: 6.0.0 923 | strip-indent: 3.0.0 924 | svelte: 3.29.0 925 | typescript: 3.9.7 926 | dev: true 927 | engines: 928 | node: '>= 9.11.2' 929 | peerDependencies: 930 | '@babel/core': ^7.10.2 931 | coffeescript: ^2.5.1 932 | less: ^3.11.3 933 | node-sass: '*' 934 | postcss: ^7 || ^8 935 | postcss-load-config: ^2.1.0 936 | pug: ^3.0.0 937 | sass: ^1.26.8 938 | stylus: ^0.54.7 939 | sugarss: ^2.0.0 940 | svelte: ^3.23.0 941 | typescript: ^3.9.5 || ^4.0.0 942 | peerDependenciesMeta: 943 | '@babel/core': 944 | optional: true 945 | coffeescript: 946 | optional: true 947 | less: 948 | optional: true 949 | node-sass: 950 | optional: true 951 | postcss: 952 | optional: true 953 | postcss-load-config: 954 | optional: true 955 | pug: 956 | optional: true 957 | sass: 958 | optional: true 959 | stylus: 960 | optional: true 961 | sugarss: 962 | optional: true 963 | svelte: 964 | optional: true 965 | typescript: 966 | optional: true 967 | requiresBuild: true 968 | resolution: 969 | integrity: sha512-fZiLMg+mJzp5y4bsvBtl6wE1WCp+s5L87BoKMONGLXk8HSZD5HuRJzxhM0yhM9LHF0jP5kYG22P2Vc/vrv4I0A== 970 | /svelte/3.28.0: 971 | dev: true 972 | engines: 973 | node: '>= 8' 974 | resolution: 975 | integrity: sha512-WJW8wD+aTmU5GUnTUjdhVF35mve2MjylubLgB6fGWoXHpYENdwcwWsWvjMQLayzMynqNH733h1Ck8wJzNR7gdQ== 976 | /svelte/3.29.0: 977 | dev: true 978 | engines: 979 | node: '>= 8' 980 | resolution: 981 | integrity: sha512-f+A65eyOQ5ujETLy+igNXtlr6AEjAQLYd1yJE1VwNiXMQO5Z/Vmiy3rL+zblV/9jd7rtTTWqO1IcuXsP2Qv0OA== 982 | /svelte2tsx/0.1.122_svelte@3.28.0+typescript@3.9.7: 983 | dependencies: 984 | dedent-js: 1.0.1 985 | pascal-case: 3.1.1 986 | svelte: 3.28.0 987 | typescript: 3.9.7 988 | dev: true 989 | peerDependencies: 990 | svelte: ^3.24 991 | typescript: ^4.0.2 992 | resolution: 993 | integrity: sha512-5130S9oYXyg866/upHja1feBc+C7kMO/RkZE2U3/hf59ss56JjhtZrP+6Owap2gnueSs5MNVuQdkhBDIOjkMiw== 994 | /terser/5.3.4: 995 | dependencies: 996 | commander: 2.20.3 997 | source-map: 0.7.3 998 | source-map-support: 0.5.19 999 | dev: true 1000 | engines: 1001 | node: '>=6.0.0' 1002 | hasBin: true 1003 | resolution: 1004 | integrity: sha512-dxuB8KQo8Gt6OVOeLg/rxfcxdNZI/V1G6ze1czFUzPeCFWZRtvZMgSzlZZ5OYBZ4HoG607F6pFPNLekJyV+yVw== 1005 | /tinydate/1.3.0: 1006 | dev: false 1007 | engines: 1008 | node: '>=4' 1009 | resolution: 1010 | integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w== 1011 | /to-regex-range/5.0.1: 1012 | dependencies: 1013 | is-number: 7.0.0 1014 | dev: true 1015 | engines: 1016 | node: '>=8.0' 1017 | resolution: 1018 | integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1019 | /totalist/1.1.0: 1020 | dev: false 1021 | engines: 1022 | node: '>=6' 1023 | resolution: 1024 | integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== 1025 | /tslib/1.14.1: 1026 | dev: true 1027 | resolution: 1028 | integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1029 | /tslib/2.0.3: 1030 | dev: true 1031 | resolution: 1032 | integrity: sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== 1033 | /typescript/3.9.7: 1034 | dev: true 1035 | engines: 1036 | node: '>=4.2.0' 1037 | hasBin: true 1038 | resolution: 1039 | integrity: sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== 1040 | /vscode-css-languageservice/4.2.0: 1041 | dependencies: 1042 | vscode-languageserver-textdocument: 1.0.1 1043 | vscode-languageserver-types: 3.15.1 1044 | vscode-nls: 4.1.2 1045 | vscode-uri: 2.1.2 1046 | dev: true 1047 | resolution: 1048 | integrity: sha512-HIjl5bofrrxMMF05K/nq83270EdvteuAIio44FWd6tDdfhgg4vbofiAuXRSpXFi335f5+ekKdrzvPZm9ahqzsg== 1049 | /vscode-emmet-helper/1.2.17: 1050 | dependencies: 1051 | '@emmetio/extract-abbreviation': 0.1.6 1052 | jsonc-parser: 1.0.3 1053 | vscode-languageserver-types: 3.15.1 1054 | dev: true 1055 | resolution: 1056 | integrity: sha512-X4pzcrJ8dE7M3ArFuySF5fgipKDd/EauXkiJwtjBIVRWpVNq0tF9+lNCyuC7iDUwP3Oq7ow/TGssD3GdG96Jow== 1057 | /vscode-html-languageservice/3.0.4-next.15: 1058 | dependencies: 1059 | vscode-languageserver-textdocument: 1.0.1 1060 | vscode-languageserver-types: 3.15.1 1061 | vscode-nls: 4.1.2 1062 | vscode-uri: 2.1.2 1063 | dev: true 1064 | resolution: 1065 | integrity: sha512-UmUm3A1ZTj+BloVIyel+5pK/nfsqRfPLXzl8BA9O7v5Cj64vivddABvNf/rW1US8fzdikFNZNloC/4ooqxB2kw== 1066 | /vscode-jsonrpc/5.0.1: 1067 | dev: true 1068 | engines: 1069 | node: '>=8.0.0 || >=10.0.0' 1070 | resolution: 1071 | integrity: sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A== 1072 | /vscode-languageserver-protocol/3.15.3: 1073 | dependencies: 1074 | vscode-jsonrpc: 5.0.1 1075 | vscode-languageserver-types: 3.15.1 1076 | dev: true 1077 | resolution: 1078 | integrity: sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw== 1079 | /vscode-languageserver-textdocument/1.0.1: 1080 | dev: true 1081 | resolution: 1082 | integrity: sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== 1083 | /vscode-languageserver-types/3.15.1: 1084 | dev: true 1085 | resolution: 1086 | integrity: sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ== 1087 | /vscode-languageserver/6.1.1: 1088 | dependencies: 1089 | vscode-languageserver-protocol: 3.15.3 1090 | dev: true 1091 | hasBin: true 1092 | resolution: 1093 | integrity: sha512-DueEpkUAkD5XTR4MLYNr6bQIp/UFR0/IPApgXU3YfCBCB08u2sm9hRCs6DxYZELkk++STPjpcjksR2H8qI3cDQ== 1094 | /vscode-nls/4.1.2: 1095 | dev: true 1096 | resolution: 1097 | integrity: sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw== 1098 | /vscode-uri/2.1.2: 1099 | dev: true 1100 | resolution: 1101 | integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== 1102 | /wrappy/1.0.2: 1103 | dev: true 1104 | resolution: 1105 | integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1106 | /ws/6.2.1: 1107 | dependencies: 1108 | async-limiter: 1.0.1 1109 | dev: true 1110 | resolution: 1111 | integrity: sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== 1112 | /yaml/1.10.0: 1113 | dev: true 1114 | engines: 1115 | node: '>= 6' 1116 | resolution: 1117 | integrity: sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== 1118 | specifiers: 1119 | '@rollup/plugin-commonjs': ^14.0.0 1120 | '@rollup/plugin-node-resolve': ^8.0.0 1121 | '@rollup/plugin-typescript': ^6.0.0 1122 | '@tsconfig/svelte': ^1.0.0 1123 | rollup: ^2.3.4 1124 | rollup-plugin-livereload: ^2.0.0 1125 | rollup-plugin-svelte: ^6.0.0 1126 | rollup-plugin-terser: ^7.0.0 1127 | sirv-cli: ^1.0.0 1128 | svelte: ^3.0.0 1129 | svelte-check: ^1.0.0 1130 | svelte-preprocess: ^4.0.0 1131 | tslib: ^2.0.0 1132 | typescript: ^3.9.3 1133 | -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pngwn/REPLicant/22e730db85adf7bed9ebbcd00b3cb9dd1786c654/public/favicon.png -------------------------------------------------------------------------------- /public/global.css: -------------------------------------------------------------------------------- 1 | /* Base Styles 2 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 3 | /* NOTE 4 | html is set to 62.5% so that all the REM measurements throughout Skeleton 5 | are based on 10px sizing. So basically 1.5rem = 15px :) */ 6 | html { 7 | font-size: 62.5%; 8 | height: 100%; 9 | box-sizing: border-box; 10 | margin: 0; 11 | padding: 0; 12 | } 13 | body { 14 | font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ 15 | line-height: 1.6; 16 | font-weight: 400; 17 | font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, 18 | sans-serif; 19 | color: #222; 20 | height: 100%; 21 | margin: 0; 22 | padding: 0; 23 | box-sizing: border-box; 24 | } 25 | 26 | /* Typography 27 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 28 | h1, 29 | h2, 30 | h3, 31 | h4, 32 | h5, 33 | h6 { 34 | margin-top: 0; 35 | margin-bottom: 2rem; 36 | font-weight: 300; 37 | } 38 | h1 { 39 | font-size: 4rem; 40 | line-height: 1.2; 41 | letter-spacing: -0.1rem; 42 | } 43 | h2 { 44 | font-size: 3.6rem; 45 | line-height: 1.25; 46 | letter-spacing: -0.1rem; 47 | } 48 | h3 { 49 | font-size: 3rem; 50 | line-height: 1.3; 51 | letter-spacing: -0.1rem; 52 | } 53 | h4 { 54 | font-size: 2.4rem; 55 | line-height: 1.35; 56 | letter-spacing: -0.08rem; 57 | } 58 | h5 { 59 | font-size: 1.8rem; 60 | line-height: 1.5; 61 | letter-spacing: -0.05rem; 62 | } 63 | h6 { 64 | font-size: 1.5rem; 65 | line-height: 1.6; 66 | letter-spacing: 0; 67 | } 68 | 69 | /* Larger than phablet */ 70 | @media (min-width: 550px) { 71 | h1 { 72 | font-size: 5rem; 73 | } 74 | h2 { 75 | font-size: 4.2rem; 76 | } 77 | h3 { 78 | font-size: 3.6rem; 79 | } 80 | h4 { 81 | font-size: 3rem; 82 | } 83 | h5 { 84 | font-size: 2.4rem; 85 | } 86 | h6 { 87 | font-size: 1.5rem; 88 | } 89 | } 90 | 91 | p { 92 | margin-top: 0; 93 | } 94 | 95 | /* Links 96 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 97 | a { 98 | color: #1eaedb; 99 | } 100 | a:hover { 101 | color: #0fa0ce; 102 | } 103 | 104 | /* Buttons 105 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 106 | .button, 107 | button, 108 | input[type="submit"], 109 | input[type="reset"], 110 | input[type="button"] { 111 | display: inline-block; 112 | height: 38px; 113 | padding: 0 30px; 114 | color: #555; 115 | text-align: center; 116 | font-size: 11px; 117 | font-weight: 600; 118 | line-height: 38px; 119 | letter-spacing: 0.1rem; 120 | text-transform: uppercase; 121 | text-decoration: none; 122 | white-space: nowrap; 123 | background-color: transparent; 124 | border-radius: 4px; 125 | border: 1px solid #bbb; 126 | cursor: pointer; 127 | box-sizing: border-box; 128 | } 129 | .button:hover, 130 | button:hover, 131 | input[type="submit"]:hover, 132 | input[type="reset"]:hover, 133 | input[type="button"]:hover, 134 | .button:focus, 135 | button:focus, 136 | input[type="submit"]:focus, 137 | input[type="reset"]:focus, 138 | input[type="button"]:focus { 139 | color: #333; 140 | border-color: #888; 141 | outline: 0; 142 | } 143 | .button.button-primary, 144 | button.button-primary, 145 | input[type="submit"].button-primary, 146 | input[type="reset"].button-primary, 147 | input[type="button"].button-primary { 148 | color: #fff; 149 | background-color: #33c3f0; 150 | border-color: #33c3f0; 151 | } 152 | .button.button-primary:hover, 153 | button.button-primary:hover, 154 | input[type="submit"].button-primary:hover, 155 | input[type="reset"].button-primary:hover, 156 | input[type="button"].button-primary:hover, 157 | .button.button-primary:focus, 158 | button.button-primary:focus, 159 | input[type="submit"].button-primary:focus, 160 | input[type="reset"].button-primary:focus, 161 | input[type="button"].button-primary:focus { 162 | color: #fff; 163 | background-color: #1eaedb; 164 | border-color: #1eaedb; 165 | } 166 | 167 | /* Forms 168 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 169 | input[type="email"], 170 | input[type="number"], 171 | input[type="search"], 172 | input[type="text"], 173 | input[type="tel"], 174 | input[type="url"], 175 | input[type="password"], 176 | textarea, 177 | select { 178 | height: 38px; 179 | padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ 180 | background-color: #fff; 181 | border: 1px solid #d1d1d1; 182 | border-radius: 4px; 183 | box-shadow: none; 184 | box-sizing: border-box; 185 | } 186 | /* Removes awkward default styles on some inputs for iOS */ 187 | input[type="email"], 188 | input[type="number"], 189 | input[type="search"], 190 | input[type="text"], 191 | input[type="tel"], 192 | input[type="url"], 193 | input[type="password"], 194 | textarea { 195 | -webkit-appearance: none; 196 | -moz-appearance: none; 197 | appearance: none; 198 | } 199 | textarea { 200 | min-height: 65px; 201 | padding-top: 6px; 202 | padding-bottom: 6px; 203 | } 204 | input[type="email"]:focus, 205 | input[type="number"]:focus, 206 | input[type="search"]:focus, 207 | input[type="text"]:focus, 208 | input[type="tel"]:focus, 209 | input[type="url"]:focus, 210 | input[type="password"]:focus, 211 | textarea:focus, 212 | select:focus { 213 | border: 1px solid #33c3f0; 214 | outline: 0; 215 | } 216 | label, 217 | legend { 218 | display: block; 219 | margin-bottom: 0.5rem; 220 | font-weight: 600; 221 | } 222 | fieldset { 223 | padding: 0; 224 | border-width: 0; 225 | } 226 | input[type="checkbox"], 227 | input[type="radio"] { 228 | display: inline; 229 | } 230 | label > .label-body { 231 | display: inline-block; 232 | margin-left: 0.5rem; 233 | font-weight: normal; 234 | } 235 | 236 | /* Lists 237 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 238 | ul { 239 | list-style: circle inside; 240 | } 241 | ol { 242 | list-style: decimal inside; 243 | } 244 | ol, 245 | ul { 246 | padding-left: 0; 247 | margin-top: 0; 248 | } 249 | ul ul, 250 | ul ol, 251 | ol ol, 252 | ol ul { 253 | margin: 1.5rem 0 1.5rem 3rem; 254 | font-size: 90%; 255 | } 256 | li { 257 | margin-bottom: 1rem; 258 | } 259 | 260 | /* Code 261 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 262 | code { 263 | padding: 0.2rem 0.5rem; 264 | margin: 0 0.2rem; 265 | font-size: 90%; 266 | white-space: nowrap; 267 | background: #f1f1f1; 268 | border: 1px solid #e1e1e1; 269 | border-radius: 4px; 270 | } 271 | pre > code { 272 | display: block; 273 | padding: 1rem 1.5rem; 274 | white-space: pre; 275 | } 276 | 277 | /* Tables 278 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 279 | th, 280 | td { 281 | padding: 12px 15px; 282 | text-align: left; 283 | border-bottom: 1px solid #e1e1e1; 284 | } 285 | th:first-child, 286 | td:first-child { 287 | padding-left: 0; 288 | } 289 | th:last-child, 290 | td:last-child { 291 | padding-right: 0; 292 | } 293 | 294 | /* Spacing 295 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 296 | button, 297 | .button { 298 | margin-bottom: 1rem; 299 | } 300 | input, 301 | textarea, 302 | select, 303 | fieldset { 304 | margin-bottom: 1.5rem; 305 | } 306 | pre, 307 | blockquote, 308 | dl, 309 | figure, 310 | table, 311 | p, 312 | ul, 313 | ol, 314 | form { 315 | margin-bottom: 2.5rem; 316 | } 317 | 318 | ul { 319 | list-style: none; 320 | display: flex; 321 | font-size: 1.3rem; 322 | } 323 | 324 | li { 325 | margin: 0 0 0 10px; 326 | padding: 0; 327 | display: flex; 328 | align-items: center; 329 | } 330 | 331 | button { 332 | padding: 0 5px; 333 | height: 2.2rem; 334 | font-weight: 500; 335 | font-size: 1.6rem; 336 | line-height: 2.2rem; 337 | margin: 0; 338 | } 339 | 340 | main { 341 | text-align: center; 342 | padding: 1em; 343 | margin: 0 auto; 344 | height: 100%; 345 | box-sizing: border-box; 346 | display: flex; 347 | } 348 | 349 | section { 350 | width: 50%; 351 | height: 100%; 352 | resize: none; 353 | display: flex; 354 | flex-direction: column; 355 | } 356 | 357 | textarea { 358 | width: 100%; 359 | height: 100%; 360 | resize: none; 361 | } 362 | 363 | iframe { 364 | width: 100%; 365 | height: 100%; 366 | border: none; 367 | } 368 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |