├── .gitignore ├── .npmrc ├── README.md ├── jsconfig.json ├── package-lock.json ├── package.json ├── src ├── app.html ├── components │ ├── Comp.svelte │ └── Monaco.svelte ├── global.d.ts └── routes │ └── index.svelte ├── static └── favicon.png └── svelte.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /.svelte-kit 4 | /package 5 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Svelte Filesystem Proof of concept 2 | 3 | This is Quick POC of [an idea i had](https://twitter.com/swyx/status/1396005314227539968): what if you could edit Svelte components in place in the browser — using the File System Access API! 4 | 5 | What if we didn't have to mentally map our source code rendered content? Just click on component, source pops up, we edit, save. **No IDE needed!** 6 | 7 | > note: this idea works only in development - which makes sense if you think about it 8 | 9 | 10 | https://user-images.githubusercontent.com/6764957/120790682-d9b7c400-c565-11eb-9580-740279005543.mp4 11 | 12 | 13 | [see tweet responses](https://twitter.com/swyx/status/1400764771520040963) 14 | 15 | ## usage 16 | 17 | ```bash 18 | npm install 19 | npm run dev -- --open # localhost 20 | ``` 21 | 22 | - Click `load` button to open `src/components/Comp.svelte` - you will have to navigate there yourself until [this PR lands](https://github.com/WICG/file-system-access/pull/287) 23 | - try making edits the source 24 | - then hit the `save` button 25 | - see it hot reload thanks to Vite/SvelteKit. 26 | 27 | You now have a self-editing component! 28 | 29 | ## possible extensions 30 | 31 | - mouseover components and cmd+click to open up their source (may have to choose from a list - use event bubbling to identify the list of components?) 32 | - embed Monaco instance for better editing (like this https://github.com/sw-yx/svelte-zen-garden) - currently i only use `
` which is janky af 33 | 34 | ## notes on filesystem access api 35 | 36 | its still too clunky - you HAVE to use `showOpenFilePicker` right now to load a file. 37 | 38 | Ideally we can just give a known filepath and construct the `FileSystemFileHandle` ourselves, but this is currently impossible. i've [opened an issue here](https://github.com/WICG/file-system-access/issues/301). 39 | 40 | if it were, we could then instrument svelte's rollup/webpack loader to expose filepath info to every component so that we can figure out which component to open (or offer a menu of them) instead of having the user navigate to there. 41 | 42 | - basic reading: https://web.dev/file-system-access/ 43 | - spec: https://wicg.github.io/file-system-access/#api-filpickeroptions-types 44 | - key PR: https://github.com/WICG/file-system-access/pull/287 45 | - potential polyfills 46 | - https://browser-fs-access.glitch.me/ 47 | - https://github.com/jimmywarting/native-file-system-adapter/ 48 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "$lib/*": ["src/lib/*"] 6 | } 7 | }, 8 | "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] 9 | } 10 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "~TODO~", 3 | "version": "0.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "~TODO~", 9 | "version": "0.0.1", 10 | "dependencies": { 11 | "monaco-editor": "^0.24.0" 12 | }, 13 | "devDependencies": { 14 | "@sveltejs/kit": "next", 15 | "svelte": "^3.34.0" 16 | } 17 | }, 18 | "node_modules/@rollup/pluginutils": { 19 | "version": "4.1.0", 20 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", 21 | "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", 22 | "dev": true, 23 | "dependencies": { 24 | "estree-walker": "^2.0.1", 25 | "picomatch": "^2.2.2" 26 | }, 27 | "engines": { 28 | "node": ">= 8.0.0" 29 | }, 30 | "peerDependencies": { 31 | "rollup": "^1.20.0||^2.0.0" 32 | } 33 | }, 34 | "node_modules/@sveltejs/kit": { 35 | "version": "1.0.0-next.113", 36 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.113.tgz", 37 | "integrity": "sha512-X7feyAD9ZWQ79W5MXgF0t3JBsA+pTqCrnl2l8y8PNCP7pEJwizPCfmFAjwx7luz3OZUA2FTFBB7bqG7K1IUaYg==", 38 | "dev": true, 39 | "dependencies": { 40 | "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", 41 | "cheap-watch": "^1.0.3", 42 | "sade": "^1.7.4", 43 | "vite": "2.3.6" 44 | }, 45 | "bin": { 46 | "svelte-kit": "svelte-kit.js" 47 | }, 48 | "engines": { 49 | "node": "^12.20 || ^14.13.1 || >= 16" 50 | }, 51 | "peerDependencies": { 52 | "svelte": "^3.38.2" 53 | } 54 | }, 55 | "node_modules/@sveltejs/vite-plugin-svelte": { 56 | "version": "1.0.0-next.10", 57 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.10.tgz", 58 | "integrity": "sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==", 59 | "dev": true, 60 | "dependencies": { 61 | "@rollup/pluginutils": "^4.1.0", 62 | "chalk": "^4.1.1", 63 | "debug": "^4.3.2", 64 | "hash-sum": "^2.0.0", 65 | "require-relative": "^0.8.7", 66 | "slash": "^4.0.0", 67 | "source-map": "^0.7.3", 68 | "svelte-hmr": "^0.14.2" 69 | }, 70 | "engines": { 71 | "node": ">=12.0.0" 72 | }, 73 | "peerDependencies": { 74 | "svelte": "^3.37.0", 75 | "vite": "^2.2.3" 76 | } 77 | }, 78 | "node_modules/ansi-styles": { 79 | "version": "4.3.0", 80 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 81 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 82 | "dev": true, 83 | "dependencies": { 84 | "color-convert": "^2.0.1" 85 | }, 86 | "engines": { 87 | "node": ">=8" 88 | }, 89 | "funding": { 90 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 91 | } 92 | }, 93 | "node_modules/chalk": { 94 | "version": "4.1.1", 95 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", 96 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", 97 | "dev": true, 98 | "dependencies": { 99 | "ansi-styles": "^4.1.0", 100 | "supports-color": "^7.1.0" 101 | }, 102 | "engines": { 103 | "node": ">=10" 104 | }, 105 | "funding": { 106 | "url": "https://github.com/chalk/chalk?sponsor=1" 107 | } 108 | }, 109 | "node_modules/cheap-watch": { 110 | "version": "1.0.3", 111 | "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.3.tgz", 112 | "integrity": "sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==", 113 | "dev": true, 114 | "engines": { 115 | "node": ">=8" 116 | } 117 | }, 118 | "node_modules/color-convert": { 119 | "version": "2.0.1", 120 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 121 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 122 | "dev": true, 123 | "dependencies": { 124 | "color-name": "~1.1.4" 125 | }, 126 | "engines": { 127 | "node": ">=7.0.0" 128 | } 129 | }, 130 | "node_modules/color-name": { 131 | "version": "1.1.4", 132 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 133 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 134 | "dev": true 135 | }, 136 | "node_modules/colorette": { 137 | "version": "1.2.2", 138 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 139 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", 140 | "dev": true 141 | }, 142 | "node_modules/debug": { 143 | "version": "4.3.2", 144 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 145 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 146 | "dev": true, 147 | "dependencies": { 148 | "ms": "2.1.2" 149 | }, 150 | "engines": { 151 | "node": ">=6.0" 152 | }, 153 | "peerDependenciesMeta": { 154 | "supports-color": { 155 | "optional": true 156 | } 157 | } 158 | }, 159 | "node_modules/esbuild": { 160 | "version": "0.12.6", 161 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.6.tgz", 162 | "integrity": "sha512-RDvVLvAjsq/kIZJoneMiUOH7EE7t2QaW7T3Q7EdQij14+bZbDq5sndb0tTanmHIFSqZVMBMMyqzVHkS3dJobeA==", 163 | "dev": true, 164 | "hasInstallScript": true, 165 | "bin": { 166 | "esbuild": "bin/esbuild" 167 | } 168 | }, 169 | "node_modules/estree-walker": { 170 | "version": "2.0.2", 171 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 172 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 173 | "dev": true 174 | }, 175 | "node_modules/fsevents": { 176 | "version": "2.3.2", 177 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 178 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 179 | "dev": true, 180 | "hasInstallScript": true, 181 | "optional": true, 182 | "os": [ 183 | "darwin" 184 | ], 185 | "engines": { 186 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 187 | } 188 | }, 189 | "node_modules/function-bind": { 190 | "version": "1.1.1", 191 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 192 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 193 | "dev": true 194 | }, 195 | "node_modules/has": { 196 | "version": "1.0.3", 197 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 198 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 199 | "dev": true, 200 | "dependencies": { 201 | "function-bind": "^1.1.1" 202 | }, 203 | "engines": { 204 | "node": ">= 0.4.0" 205 | } 206 | }, 207 | "node_modules/has-flag": { 208 | "version": "4.0.0", 209 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 210 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 211 | "dev": true, 212 | "engines": { 213 | "node": ">=8" 214 | } 215 | }, 216 | "node_modules/hash-sum": { 217 | "version": "2.0.0", 218 | "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", 219 | "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", 220 | "dev": true 221 | }, 222 | "node_modules/is-core-module": { 223 | "version": "2.4.0", 224 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", 225 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", 226 | "dev": true, 227 | "dependencies": { 228 | "has": "^1.0.3" 229 | }, 230 | "funding": { 231 | "url": "https://github.com/sponsors/ljharb" 232 | } 233 | }, 234 | "node_modules/monaco-editor": { 235 | "version": "0.24.0", 236 | "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.24.0.tgz", 237 | "integrity": "sha512-o1f0Lz6ABFNTtnEqqqvlY9qzNx24rQZx1RgYNQ8SkWkE+Ka63keHH/RqxQ4QhN4fs/UYOnvAtEUZsPrzccH++A==" 238 | }, 239 | "node_modules/mri": { 240 | "version": "1.1.6", 241 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", 242 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", 243 | "dev": true, 244 | "engines": { 245 | "node": ">=4" 246 | } 247 | }, 248 | "node_modules/ms": { 249 | "version": "2.1.2", 250 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 251 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 252 | "dev": true 253 | }, 254 | "node_modules/nanoid": { 255 | "version": "3.1.23", 256 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", 257 | "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", 258 | "dev": true, 259 | "bin": { 260 | "nanoid": "bin/nanoid.cjs" 261 | }, 262 | "engines": { 263 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 264 | } 265 | }, 266 | "node_modules/path-parse": { 267 | "version": "1.0.7", 268 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 269 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 270 | "dev": true 271 | }, 272 | "node_modules/picomatch": { 273 | "version": "2.3.0", 274 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 275 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 276 | "dev": true, 277 | "engines": { 278 | "node": ">=8.6" 279 | }, 280 | "funding": { 281 | "url": "https://github.com/sponsors/jonschlinkert" 282 | } 283 | }, 284 | "node_modules/postcss": { 285 | "version": "8.3.0", 286 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", 287 | "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", 288 | "dev": true, 289 | "dependencies": { 290 | "colorette": "^1.2.2", 291 | "nanoid": "^3.1.23", 292 | "source-map-js": "^0.6.2" 293 | }, 294 | "engines": { 295 | "node": "^10 || ^12 || >=14" 296 | }, 297 | "funding": { 298 | "type": "opencollective", 299 | "url": "https://opencollective.com/postcss/" 300 | } 301 | }, 302 | "node_modules/require-relative": { 303 | "version": "0.8.7", 304 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 305 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 306 | "dev": true 307 | }, 308 | "node_modules/resolve": { 309 | "version": "1.20.0", 310 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 311 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 312 | "dev": true, 313 | "dependencies": { 314 | "is-core-module": "^2.2.0", 315 | "path-parse": "^1.0.6" 316 | }, 317 | "funding": { 318 | "url": "https://github.com/sponsors/ljharb" 319 | } 320 | }, 321 | "node_modules/rollup": { 322 | "version": "2.50.6", 323 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.50.6.tgz", 324 | "integrity": "sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg==", 325 | "dev": true, 326 | "bin": { 327 | "rollup": "dist/bin/rollup" 328 | }, 329 | "engines": { 330 | "node": ">=10.0.0" 331 | }, 332 | "optionalDependencies": { 333 | "fsevents": "~2.3.1" 334 | } 335 | }, 336 | "node_modules/sade": { 337 | "version": "1.7.4", 338 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", 339 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", 340 | "dev": true, 341 | "dependencies": { 342 | "mri": "^1.1.0" 343 | }, 344 | "engines": { 345 | "node": ">= 6" 346 | } 347 | }, 348 | "node_modules/slash": { 349 | "version": "4.0.0", 350 | "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", 351 | "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", 352 | "dev": true, 353 | "engines": { 354 | "node": ">=12" 355 | }, 356 | "funding": { 357 | "url": "https://github.com/sponsors/sindresorhus" 358 | } 359 | }, 360 | "node_modules/source-map": { 361 | "version": "0.7.3", 362 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 363 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 364 | "dev": true, 365 | "engines": { 366 | "node": ">= 8" 367 | } 368 | }, 369 | "node_modules/source-map-js": { 370 | "version": "0.6.2", 371 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", 372 | "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", 373 | "dev": true, 374 | "engines": { 375 | "node": ">=0.10.0" 376 | } 377 | }, 378 | "node_modules/supports-color": { 379 | "version": "7.2.0", 380 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 381 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 382 | "dev": true, 383 | "dependencies": { 384 | "has-flag": "^4.0.0" 385 | }, 386 | "engines": { 387 | "node": ">=8" 388 | } 389 | }, 390 | "node_modules/svelte": { 391 | "version": "3.38.2", 392 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.38.2.tgz", 393 | "integrity": "sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg==", 394 | "dev": true, 395 | "engines": { 396 | "node": ">= 8" 397 | } 398 | }, 399 | "node_modules/svelte-hmr": { 400 | "version": "0.14.4", 401 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.4.tgz", 402 | "integrity": "sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==", 403 | "dev": true, 404 | "peerDependencies": { 405 | "svelte": ">=3.19.0" 406 | } 407 | }, 408 | "node_modules/vite": { 409 | "version": "2.3.6", 410 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.3.6.tgz", 411 | "integrity": "sha512-fsEpNKDHgh3Sn66JH06ZnUBnIgUVUtw6ucDhlOj1CEqxIkymU25yv1/kWDPlIjyYHnalr0cN6V+zzUJ+fmWHYw==", 412 | "dev": true, 413 | "dependencies": { 414 | "esbuild": "^0.12.5", 415 | "postcss": "^8.2.10", 416 | "resolve": "^1.19.0", 417 | "rollup": "^2.38.5" 418 | }, 419 | "bin": { 420 | "vite": "bin/vite.js" 421 | }, 422 | "engines": { 423 | "node": ">=12.0.0" 424 | }, 425 | "optionalDependencies": { 426 | "fsevents": "~2.3.1" 427 | } 428 | } 429 | }, 430 | "dependencies": { 431 | "@rollup/pluginutils": { 432 | "version": "4.1.0", 433 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", 434 | "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", 435 | "dev": true, 436 | "requires": { 437 | "estree-walker": "^2.0.1", 438 | "picomatch": "^2.2.2" 439 | } 440 | }, 441 | "@sveltejs/kit": { 442 | "version": "1.0.0-next.113", 443 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.113.tgz", 444 | "integrity": "sha512-X7feyAD9ZWQ79W5MXgF0t3JBsA+pTqCrnl2l8y8PNCP7pEJwizPCfmFAjwx7luz3OZUA2FTFBB7bqG7K1IUaYg==", 445 | "dev": true, 446 | "requires": { 447 | "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", 448 | "cheap-watch": "^1.0.3", 449 | "sade": "^1.7.4", 450 | "vite": "2.3.6" 451 | } 452 | }, 453 | "@sveltejs/vite-plugin-svelte": { 454 | "version": "1.0.0-next.10", 455 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.10.tgz", 456 | "integrity": "sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==", 457 | "dev": true, 458 | "requires": { 459 | "@rollup/pluginutils": "^4.1.0", 460 | "chalk": "^4.1.1", 461 | "debug": "^4.3.2", 462 | "hash-sum": "^2.0.0", 463 | "require-relative": "^0.8.7", 464 | "slash": "^4.0.0", 465 | "source-map": "^0.7.3", 466 | "svelte-hmr": "^0.14.2" 467 | } 468 | }, 469 | "ansi-styles": { 470 | "version": "4.3.0", 471 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 472 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 473 | "dev": true, 474 | "requires": { 475 | "color-convert": "^2.0.1" 476 | } 477 | }, 478 | "chalk": { 479 | "version": "4.1.1", 480 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", 481 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", 482 | "dev": true, 483 | "requires": { 484 | "ansi-styles": "^4.1.0", 485 | "supports-color": "^7.1.0" 486 | } 487 | }, 488 | "cheap-watch": { 489 | "version": "1.0.3", 490 | "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.3.tgz", 491 | "integrity": "sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==", 492 | "dev": true 493 | }, 494 | "color-convert": { 495 | "version": "2.0.1", 496 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 497 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 498 | "dev": true, 499 | "requires": { 500 | "color-name": "~1.1.4" 501 | } 502 | }, 503 | "color-name": { 504 | "version": "1.1.4", 505 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 506 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 507 | "dev": true 508 | }, 509 | "colorette": { 510 | "version": "1.2.2", 511 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 512 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", 513 | "dev": true 514 | }, 515 | "debug": { 516 | "version": "4.3.2", 517 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 518 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 519 | "dev": true, 520 | "requires": { 521 | "ms": "2.1.2" 522 | } 523 | }, 524 | "esbuild": { 525 | "version": "0.12.6", 526 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.6.tgz", 527 | "integrity": "sha512-RDvVLvAjsq/kIZJoneMiUOH7EE7t2QaW7T3Q7EdQij14+bZbDq5sndb0tTanmHIFSqZVMBMMyqzVHkS3dJobeA==", 528 | "dev": true 529 | }, 530 | "estree-walker": { 531 | "version": "2.0.2", 532 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 533 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 534 | "dev": true 535 | }, 536 | "fsevents": { 537 | "version": "2.3.2", 538 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 539 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 540 | "dev": true, 541 | "optional": true 542 | }, 543 | "function-bind": { 544 | "version": "1.1.1", 545 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 546 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 547 | "dev": true 548 | }, 549 | "has": { 550 | "version": "1.0.3", 551 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 552 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 553 | "dev": true, 554 | "requires": { 555 | "function-bind": "^1.1.1" 556 | } 557 | }, 558 | "has-flag": { 559 | "version": "4.0.0", 560 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 561 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 562 | "dev": true 563 | }, 564 | "hash-sum": { 565 | "version": "2.0.0", 566 | "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", 567 | "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", 568 | "dev": true 569 | }, 570 | "is-core-module": { 571 | "version": "2.4.0", 572 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", 573 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", 574 | "dev": true, 575 | "requires": { 576 | "has": "^1.0.3" 577 | } 578 | }, 579 | "monaco-editor": { 580 | "version": "0.24.0", 581 | "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.24.0.tgz", 582 | "integrity": "sha512-o1f0Lz6ABFNTtnEqqqvlY9qzNx24rQZx1RgYNQ8SkWkE+Ka63keHH/RqxQ4QhN4fs/UYOnvAtEUZsPrzccH++A==" 583 | }, 584 | "mri": { 585 | "version": "1.1.6", 586 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", 587 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", 588 | "dev": true 589 | }, 590 | "ms": { 591 | "version": "2.1.2", 592 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 593 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 594 | "dev": true 595 | }, 596 | "nanoid": { 597 | "version": "3.1.23", 598 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", 599 | "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", 600 | "dev": true 601 | }, 602 | "path-parse": { 603 | "version": "1.0.7", 604 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 605 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 606 | "dev": true 607 | }, 608 | "picomatch": { 609 | "version": "2.3.0", 610 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 611 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 612 | "dev": true 613 | }, 614 | "postcss": { 615 | "version": "8.3.0", 616 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", 617 | "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", 618 | "dev": true, 619 | "requires": { 620 | "colorette": "^1.2.2", 621 | "nanoid": "^3.1.23", 622 | "source-map-js": "^0.6.2" 623 | } 624 | }, 625 | "require-relative": { 626 | "version": "0.8.7", 627 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 628 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 629 | "dev": true 630 | }, 631 | "resolve": { 632 | "version": "1.20.0", 633 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 634 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 635 | "dev": true, 636 | "requires": { 637 | "is-core-module": "^2.2.0", 638 | "path-parse": "^1.0.6" 639 | } 640 | }, 641 | "rollup": { 642 | "version": "2.50.6", 643 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.50.6.tgz", 644 | "integrity": "sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg==", 645 | "dev": true, 646 | "requires": { 647 | "fsevents": "~2.3.1" 648 | } 649 | }, 650 | "sade": { 651 | "version": "1.7.4", 652 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", 653 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", 654 | "dev": true, 655 | "requires": { 656 | "mri": "^1.1.0" 657 | } 658 | }, 659 | "slash": { 660 | "version": "4.0.0", 661 | "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", 662 | "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", 663 | "dev": true 664 | }, 665 | "source-map": { 666 | "version": "0.7.3", 667 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 668 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 669 | "dev": true 670 | }, 671 | "source-map-js": { 672 | "version": "0.6.2", 673 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", 674 | "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", 675 | "dev": true 676 | }, 677 | "supports-color": { 678 | "version": "7.2.0", 679 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 680 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 681 | "dev": true, 682 | "requires": { 683 | "has-flag": "^4.0.0" 684 | } 685 | }, 686 | "svelte": { 687 | "version": "3.38.2", 688 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.38.2.tgz", 689 | "integrity": "sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg==", 690 | "dev": true 691 | }, 692 | "svelte-hmr": { 693 | "version": "0.14.4", 694 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.4.tgz", 695 | "integrity": "sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==", 696 | "dev": true, 697 | "requires": {} 698 | }, 699 | "vite": { 700 | "version": "2.3.6", 701 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.3.6.tgz", 702 | "integrity": "sha512-fsEpNKDHgh3Sn66JH06ZnUBnIgUVUtw6ucDhlOj1CEqxIkymU25yv1/kWDPlIjyYHnalr0cN6V+zzUJ+fmWHYw==", 703 | "dev": true, 704 | "requires": { 705 | "esbuild": "^0.12.5", 706 | "fsevents": "~2.3.1", 707 | "postcss": "^8.2.10", 708 | "resolve": "^1.19.0", 709 | "rollup": "^2.38.5" 710 | } 711 | } 712 | } 713 | } 714 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "~TODO~", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "dev": "svelte-kit dev", 6 | "build": "svelte-kit build", 7 | "preview": "svelte-kit preview" 8 | }, 9 | "devDependencies": { 10 | "@sveltejs/kit": "next", 11 | "svelte": "^3.34.0" 12 | }, 13 | "type": "module", 14 | "dependencies": { 15 | "monaco-editor": "^0.24.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | %svelte.head% 9 | 10 | 11 |%svelte.body%12 | 13 | 14 | -------------------------------------------------------------------------------- /src/components/Comp.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | {#if contents === null} 6 |please load the file7 | {:else} 8 |9 |10 | {/if} 11 | 12 |
13 | 14 |hello Svelte
-------------------------------------------------------------------------------- /src/components/Monaco.svelte: -------------------------------------------------------------------------------- 1 | 24 | 25 | 36 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | ///2 | -------------------------------------------------------------------------------- /src/routes/index.svelte: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | Welcome to SvelteKit
25 | 26 |
27 | 28 | 29 | 30 | 31 |32 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swyxio/svelte-filesystem-demo/b482d1019b2d5ecfa5913f5f9b368b4c962c8886/static/favicon.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('@sveltejs/kit').Config} */ 2 | const config = { 3 | kit: { 4 | // hydrate the element in src/app.html 5 | target: '#svelte', 6 | ssr: false 7 | } 8 | }; 9 | 10 | export default config; 11 | --------------------------------------------------------------------------------