├── .gitignore ├── README.md ├── logo.svg ├── package-lock.json ├── package.json ├── pages ├── __layout.svelte ├── _components │ └── Counter.svelte ├── _default │ ├── _default.page.client.js │ └── _default.page.server.js ├── _error.page.svelte ├── about │ └── index.page.svelte └── index.page.svelte ├── server └── index.js └── vite.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | *.local 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WIP: Svelte SSR example using vite-plugin-ssr 2 | 3 | An attempt to create a Svelte version of the [vite-plugin-ssr](https://vite-plugin-ssr.com/) vue template. 4 | 5 | ## Vite plugins used 6 | 7 | - [vite-plugin-ssr](https://vite-plugin-ssr.com/) 8 | - [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte/tree/main/packages/vite-plugin-svelte) 9 | 10 | ## Outstanding issues 11 | 12 | - Cheat: “layout” is being manually imported into all pages. 13 | 14 | In the Vue example, it’s trivial to implement a layout template but Svelte pages must be compiled. You could add that feature to this example by manually creating and rendering a Svelte page wrapped in the layout component but that would add a lot of complexity to this small example while still not being indicative of real-world use (where you could have a hierarchy of layout templates and would likely have to keep a graph of your dependencies). 15 | 16 | Relatedly, instead of local scoped styles, we’re scoping the styles to the content of the slot in the “Colored page” using the new `* :global()` syntax in Svelte. 17 | 18 | - Cheat: logo.svg link hardcoded in head (in _default.page.server.js_) 19 | 20 | ## Install and run 21 | 22 | 1. Clone this repository 23 | 2. Install dependencies: `npm i` 24 | 2. Run it: `npm run dev` 25 | 3. Hit `https://localhost` in your browser. 26 | 27 | 28 | -------------------------------------------------------------------------------- /logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "@brillout/json-s": { 6 | "version": "0.2.0", 7 | "resolved": "https://registry.npmjs.org/@brillout/json-s/-/json-s-0.2.0.tgz", 8 | "integrity": "sha512-kYmNGXGrBXqF4rmIXDpQVUFK9af1DF38BjUXgEwnPk1bZv3dFVjn8iu4CgE+LP5KvMyyDWfGhQfIPuX+pc3jNg==" 9 | }, 10 | "@brillout/libassert": { 11 | "version": "0.4.2", 12 | "resolved": "https://registry.npmjs.org/@brillout/libassert/-/libassert-0.4.2.tgz", 13 | "integrity": "sha512-8B3gmpeOlwnrWQh5c1lxBIKeUs7dGAxTt8q5hjlNuFZdGsV+AByoD6oQRmvCOHcu7bEQW7lYRIN8gfAIwqvYUQ==" 14 | }, 15 | "@brillout/path-to-regexp": { 16 | "version": "0.1.2", 17 | "resolved": "https://registry.npmjs.org/@brillout/path-to-regexp/-/path-to-regexp-0.1.2.tgz", 18 | "integrity": "sha512-hGwx0UhXfUmuQlzVv5799k1MkXh/Q6EOxUMDS0cf9iD2ZXMG6INUkkvK2I5rFRH0WD2bqnndnoN1dgaCRo8w7w==", 19 | "requires": { 20 | "path-to-regexp": "^1.7.0" 21 | }, 22 | "dependencies": { 23 | "path-to-regexp": { 24 | "version": "1.8.0", 25 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", 26 | "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", 27 | "requires": { 28 | "isarray": "0.0.1" 29 | } 30 | } 31 | } 32 | }, 33 | "@nodelib/fs.scandir": { 34 | "version": "2.1.5", 35 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 36 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 37 | "requires": { 38 | "@nodelib/fs.stat": "2.0.5", 39 | "run-parallel": "^1.1.9" 40 | } 41 | }, 42 | "@nodelib/fs.stat": { 43 | "version": "2.0.5", 44 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 45 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" 46 | }, 47 | "@nodelib/fs.walk": { 48 | "version": "1.2.8", 49 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 50 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 51 | "requires": { 52 | "@nodelib/fs.scandir": "2.1.5", 53 | "fastq": "^1.6.0" 54 | } 55 | }, 56 | "@panva/asn1.js": { 57 | "version": "1.0.0", 58 | "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", 59 | "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==" 60 | }, 61 | "@rollup/pluginutils": { 62 | "version": "4.1.1", 63 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", 64 | "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", 65 | "dev": true, 66 | "requires": { 67 | "estree-walker": "^2.0.1", 68 | "picomatch": "^2.2.2" 69 | } 70 | }, 71 | "@small-tech/auto-encrypt": { 72 | "version": "2.2.0", 73 | "resolved": "https://registry.npmjs.org/@small-tech/auto-encrypt/-/auto-encrypt-2.2.0.tgz", 74 | "integrity": "sha512-+/WqoT6plaPNNZE+W6R/sbhHHAspzZwzlE/BtBM4bhV9fN1nZXFJapBm7fqH56U4zvmwuL+DtmJk851bV0+Tww==", 75 | "requires": { 76 | "bent": "github:aral/bent#errors-with-response-headers", 77 | "encodeurl": "^1.0.2", 78 | "fs-extra": "^8.1.0", 79 | "jose": "^1.24.0", 80 | "moment": "^2.24.0", 81 | "node-forge": "^0.10.0", 82 | "ocsp": "^1.2.0", 83 | "server-destroy": "^1.0.1" 84 | }, 85 | "dependencies": { 86 | "fs-extra": { 87 | "version": "8.1.0", 88 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 89 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 90 | "requires": { 91 | "graceful-fs": "^4.2.0", 92 | "jsonfile": "^4.0.0", 93 | "universalify": "^0.1.0" 94 | } 95 | } 96 | } 97 | }, 98 | "@small-tech/auto-encrypt-localhost": { 99 | "version": "6.1.0", 100 | "resolved": "https://registry.npmjs.org/@small-tech/auto-encrypt-localhost/-/auto-encrypt-localhost-6.1.0.tgz", 101 | "integrity": "sha512-vkimeIR1KIeGLa9f6yKfW6JNbupUkIR6dqMSJT1vemnX40KyvjOww+9L0oTRYUe1EnYz16vpj1Nd3+f+Cy6TjQ==", 102 | "requires": { 103 | "encodeurl": "^1.0.2", 104 | "fs-extra": "^8.1.0", 105 | "server-destroy": "^1.0.1", 106 | "syswide-cas": "^5.3.0" 107 | }, 108 | "dependencies": { 109 | "fs-extra": { 110 | "version": "8.1.0", 111 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 112 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 113 | "requires": { 114 | "graceful-fs": "^4.2.0", 115 | "jsonfile": "^4.0.0", 116 | "universalify": "^0.1.0" 117 | } 118 | } 119 | } 120 | }, 121 | "@small-tech/cross-platform-hostname": { 122 | "version": "1.0.0", 123 | "resolved": "https://registry.npmjs.org/@small-tech/cross-platform-hostname/-/cross-platform-hostname-1.0.0.tgz", 124 | "integrity": "sha512-Vgu1poGyPmAdJBjX9pAwGFvh/1GdZzgJzkSkmvSgT5gQtAF50h/Bdiqa8bqAmzAAocTHpr5+Y+riyYdRZyT/Ng==" 125 | }, 126 | "@small-tech/https": { 127 | "version": "2.1.2", 128 | "resolved": "https://registry.npmjs.org/@small-tech/https/-/https-2.1.2.tgz", 129 | "integrity": "sha512-G8mUKad9CTpvyALIZ1UUk0L2ORoqid6n+pI5DO73mGHgsiOnpdXckg+HSvqsCcn5hCEVqdjlotPPHgx2Un5K2w==", 130 | "requires": { 131 | "@small-tech/auto-encrypt": "^2.2.0", 132 | "@small-tech/auto-encrypt-localhost": "^6.1.0", 133 | "fs-extra": "^9.0.1" 134 | } 135 | }, 136 | "@sveltejs/vite-plugin-svelte": { 137 | "version": "1.0.0-next.12", 138 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.12.tgz", 139 | "integrity": "sha512-cuyNkJ6leptfv+7qL/fWQ7EpGWdguosFOUI0z93oQUmFTcX7QxJ5h+QI3NQyktBzlKL/761L8BbG2hHNkVbLIQ==", 140 | "dev": true, 141 | "requires": { 142 | "@rollup/pluginutils": "^4.1.0", 143 | "debug": "^4.3.2", 144 | "kleur": "^4.1.4", 145 | "magic-string": "^0.25.7", 146 | "require-relative": "^0.8.7", 147 | "svelte-hmr": "^0.14.5" 148 | }, 149 | "dependencies": { 150 | "debug": { 151 | "version": "4.3.2", 152 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 153 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 154 | "dev": true, 155 | "requires": { 156 | "ms": "2.1.2" 157 | } 158 | }, 159 | "ms": { 160 | "version": "2.1.2", 161 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 162 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 163 | "dev": true 164 | } 165 | } 166 | }, 167 | "accepts": { 168 | "version": "1.3.7", 169 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 170 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 171 | "requires": { 172 | "mime-types": "~2.1.24", 173 | "negotiator": "0.6.2" 174 | } 175 | }, 176 | "array-flatten": { 177 | "version": "1.1.1", 178 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 179 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 180 | }, 181 | "asn1.js": { 182 | "version": "4.10.1", 183 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 184 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 185 | "requires": { 186 | "bn.js": "^4.0.0", 187 | "inherits": "^2.0.1", 188 | "minimalistic-assert": "^1.0.0" 189 | } 190 | }, 191 | "asn1.js-rfc2560": { 192 | "version": "4.0.6", 193 | "resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-4.0.6.tgz", 194 | "integrity": "sha512-ysf48ni+f/efNPilq4+ApbifUPcSW/xbDeQAh055I+grr2gXgNRQqHew7kkO70WSMQ2tEOURVwsK+dJqUNjIIg==", 195 | "requires": { 196 | "asn1.js-rfc5280": "^2.0.0" 197 | } 198 | }, 199 | "asn1.js-rfc5280": { 200 | "version": "2.0.1", 201 | "resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-2.0.1.tgz", 202 | "integrity": "sha512-1e2ypnvTbYD/GdxWK77tdLBahvo1fZUHlQJqAVUuZWdYj0rdjGcf2CWYUtbsyRYpYUMwMWLZFUtLxog8ZXTrcg==", 203 | "requires": { 204 | "asn1.js": "^4.5.0" 205 | } 206 | }, 207 | "async": { 208 | "version": "1.5.2", 209 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 210 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" 211 | }, 212 | "at-least-node": { 213 | "version": "1.0.0", 214 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 215 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" 216 | }, 217 | "bent": { 218 | "version": "github:aral/bent#16a959683c6916204c28a1c870cb7b399c9215a9", 219 | "from": "github:aral/bent#errors-with-response-headers", 220 | "requires": { 221 | "bytesish": "^0.4.1", 222 | "caseless": "~0.12.0", 223 | "is-stream": "^2.0.0" 224 | } 225 | }, 226 | "bn.js": { 227 | "version": "4.12.0", 228 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 229 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 230 | }, 231 | "body-parser": { 232 | "version": "1.19.0", 233 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 234 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 235 | "requires": { 236 | "bytes": "3.1.0", 237 | "content-type": "~1.0.4", 238 | "debug": "2.6.9", 239 | "depd": "~1.1.2", 240 | "http-errors": "1.7.2", 241 | "iconv-lite": "0.4.24", 242 | "on-finished": "~2.3.0", 243 | "qs": "6.7.0", 244 | "raw-body": "2.4.0", 245 | "type-is": "~1.6.17" 246 | } 247 | }, 248 | "braces": { 249 | "version": "3.0.2", 250 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 251 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 252 | "requires": { 253 | "fill-range": "^7.0.1" 254 | } 255 | }, 256 | "bytes": { 257 | "version": "3.1.0", 258 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 259 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 260 | }, 261 | "bytesish": { 262 | "version": "0.4.4", 263 | "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz", 264 | "integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==" 265 | }, 266 | "cac": { 267 | "version": "6.7.3", 268 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.3.tgz", 269 | "integrity": "sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg==" 270 | }, 271 | "caseless": { 272 | "version": "0.12.0", 273 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 274 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 275 | }, 276 | "colorette": { 277 | "version": "1.2.2", 278 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 279 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" 280 | }, 281 | "content-disposition": { 282 | "version": "0.5.3", 283 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 284 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 285 | "requires": { 286 | "safe-buffer": "5.1.2" 287 | } 288 | }, 289 | "content-type": { 290 | "version": "1.0.4", 291 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 292 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 293 | }, 294 | "cookie": { 295 | "version": "0.4.0", 296 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 297 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 298 | }, 299 | "cookie-signature": { 300 | "version": "1.0.6", 301 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 302 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 303 | }, 304 | "cross-env": { 305 | "version": "7.0.3", 306 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", 307 | "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", 308 | "requires": { 309 | "cross-spawn": "^7.0.1" 310 | } 311 | }, 312 | "cross-spawn": { 313 | "version": "7.0.3", 314 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 315 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 316 | "requires": { 317 | "path-key": "^3.1.0", 318 | "shebang-command": "^2.0.0", 319 | "which": "^2.0.1" 320 | } 321 | }, 322 | "debug": { 323 | "version": "2.6.9", 324 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 325 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 326 | "requires": { 327 | "ms": "2.0.0" 328 | } 329 | }, 330 | "depd": { 331 | "version": "1.1.2", 332 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 333 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 334 | }, 335 | "destroy": { 336 | "version": "1.0.4", 337 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 338 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 339 | }, 340 | "devalue": { 341 | "version": "2.0.1", 342 | "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz", 343 | "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==" 344 | }, 345 | "ee-first": { 346 | "version": "1.1.1", 347 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 348 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 349 | }, 350 | "encodeurl": { 351 | "version": "1.0.2", 352 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 353 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 354 | }, 355 | "esbuild": { 356 | "version": "0.12.15", 357 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.15.tgz", 358 | "integrity": "sha512-72V4JNd2+48eOVCXx49xoSWHgC3/cCy96e7mbXKY+WOWghN00cCmlGnwVLRhRHorvv0dgCyuMYBZlM2xDM5OQw==" 359 | }, 360 | "escape-html": { 361 | "version": "1.0.3", 362 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 363 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 364 | }, 365 | "estree-walker": { 366 | "version": "2.0.2", 367 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 368 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 369 | "dev": true 370 | }, 371 | "etag": { 372 | "version": "1.8.1", 373 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 374 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 375 | }, 376 | "express": { 377 | "version": "4.17.1", 378 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 379 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 380 | "requires": { 381 | "accepts": "~1.3.7", 382 | "array-flatten": "1.1.1", 383 | "body-parser": "1.19.0", 384 | "content-disposition": "0.5.3", 385 | "content-type": "~1.0.4", 386 | "cookie": "0.4.0", 387 | "cookie-signature": "1.0.6", 388 | "debug": "2.6.9", 389 | "depd": "~1.1.2", 390 | "encodeurl": "~1.0.2", 391 | "escape-html": "~1.0.3", 392 | "etag": "~1.8.1", 393 | "finalhandler": "~1.1.2", 394 | "fresh": "0.5.2", 395 | "merge-descriptors": "1.0.1", 396 | "methods": "~1.1.2", 397 | "on-finished": "~2.3.0", 398 | "parseurl": "~1.3.3", 399 | "path-to-regexp": "0.1.7", 400 | "proxy-addr": "~2.0.5", 401 | "qs": "6.7.0", 402 | "range-parser": "~1.2.1", 403 | "safe-buffer": "5.1.2", 404 | "send": "0.17.1", 405 | "serve-static": "1.14.1", 406 | "setprototypeof": "1.1.1", 407 | "statuses": "~1.5.0", 408 | "type-is": "~1.6.18", 409 | "utils-merge": "1.0.1", 410 | "vary": "~1.1.2" 411 | } 412 | }, 413 | "fast-glob": { 414 | "version": "3.2.7", 415 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", 416 | "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", 417 | "requires": { 418 | "@nodelib/fs.stat": "^2.0.2", 419 | "@nodelib/fs.walk": "^1.2.3", 420 | "glob-parent": "^5.1.2", 421 | "merge2": "^1.3.0", 422 | "micromatch": "^4.0.4" 423 | } 424 | }, 425 | "fastq": { 426 | "version": "1.11.1", 427 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", 428 | "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", 429 | "requires": { 430 | "reusify": "^1.0.4" 431 | } 432 | }, 433 | "fill-range": { 434 | "version": "7.0.1", 435 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 436 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 437 | "requires": { 438 | "to-regex-range": "^5.0.1" 439 | } 440 | }, 441 | "finalhandler": { 442 | "version": "1.1.2", 443 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 444 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 445 | "requires": { 446 | "debug": "2.6.9", 447 | "encodeurl": "~1.0.2", 448 | "escape-html": "~1.0.3", 449 | "on-finished": "~2.3.0", 450 | "parseurl": "~1.3.3", 451 | "statuses": "~1.5.0", 452 | "unpipe": "~1.0.0" 453 | } 454 | }, 455 | "forwarded": { 456 | "version": "0.2.0", 457 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 458 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 459 | }, 460 | "fresh": { 461 | "version": "0.5.2", 462 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 463 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 464 | }, 465 | "fs-extra": { 466 | "version": "9.1.0", 467 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 468 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 469 | "requires": { 470 | "at-least-node": "^1.0.0", 471 | "graceful-fs": "^4.2.0", 472 | "jsonfile": "^6.0.1", 473 | "universalify": "^2.0.0" 474 | }, 475 | "dependencies": { 476 | "jsonfile": { 477 | "version": "6.1.0", 478 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 479 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 480 | "requires": { 481 | "graceful-fs": "^4.1.6", 482 | "universalify": "^2.0.0" 483 | } 484 | }, 485 | "universalify": { 486 | "version": "2.0.0", 487 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 488 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" 489 | } 490 | } 491 | }, 492 | "fsevents": { 493 | "version": "2.3.2", 494 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 495 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 496 | "optional": true 497 | }, 498 | "function-bind": { 499 | "version": "1.1.1", 500 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 501 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 502 | }, 503 | "glob-parent": { 504 | "version": "5.1.2", 505 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 506 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 507 | "requires": { 508 | "is-glob": "^4.0.1" 509 | } 510 | }, 511 | "graceful-fs": { 512 | "version": "4.2.6", 513 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 514 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" 515 | }, 516 | "has": { 517 | "version": "1.0.3", 518 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 519 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 520 | "requires": { 521 | "function-bind": "^1.1.1" 522 | } 523 | }, 524 | "http-errors": { 525 | "version": "1.7.2", 526 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 527 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 528 | "requires": { 529 | "depd": "~1.1.2", 530 | "inherits": "2.0.3", 531 | "setprototypeof": "1.1.1", 532 | "statuses": ">= 1.5.0 < 2", 533 | "toidentifier": "1.0.0" 534 | } 535 | }, 536 | "iconv-lite": { 537 | "version": "0.4.24", 538 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 539 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 540 | "requires": { 541 | "safer-buffer": ">= 2.1.2 < 3" 542 | } 543 | }, 544 | "inherits": { 545 | "version": "2.0.3", 546 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 547 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 548 | }, 549 | "ipaddr.js": { 550 | "version": "1.9.1", 551 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 552 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 553 | }, 554 | "is-core-module": { 555 | "version": "2.5.0", 556 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", 557 | "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", 558 | "requires": { 559 | "has": "^1.0.3" 560 | } 561 | }, 562 | "is-extglob": { 563 | "version": "2.1.1", 564 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 565 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 566 | }, 567 | "is-glob": { 568 | "version": "4.0.1", 569 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 570 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 571 | "requires": { 572 | "is-extglob": "^2.1.1" 573 | } 574 | }, 575 | "is-number": { 576 | "version": "7.0.0", 577 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 578 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 579 | }, 580 | "is-stream": { 581 | "version": "2.0.0", 582 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 583 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" 584 | }, 585 | "isarray": { 586 | "version": "0.0.1", 587 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 588 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 589 | }, 590 | "isexe": { 591 | "version": "2.0.0", 592 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 593 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 594 | }, 595 | "jose": { 596 | "version": "1.28.1", 597 | "resolved": "https://registry.npmjs.org/jose/-/jose-1.28.1.tgz", 598 | "integrity": "sha512-6JK28rFu5ENp/yxMwM+iN7YeaInnY9B9Bggjkz5fuwLiJhbVrl2O4SJr65bdNBPl9y27fdC3Mymh+FVCvozLIg==", 599 | "requires": { 600 | "@panva/asn1.js": "^1.0.0" 601 | } 602 | }, 603 | "jsonfile": { 604 | "version": "4.0.0", 605 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 606 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 607 | "requires": { 608 | "graceful-fs": "^4.1.6" 609 | } 610 | }, 611 | "kleur": { 612 | "version": "4.1.4", 613 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", 614 | "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", 615 | "dev": true 616 | }, 617 | "kolorist": { 618 | "version": "1.5.0", 619 | "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.5.0.tgz", 620 | "integrity": "sha512-pPobydIHK884YBtkS/tWSZXpSAEpcMbilyun3KL37ot935qL2HNKm/tI45i/Rd+MxdIWEhm7/LmUQzWZYK+Qhg==" 621 | }, 622 | "magic-string": { 623 | "version": "0.25.7", 624 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 625 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 626 | "dev": true, 627 | "requires": { 628 | "sourcemap-codec": "^1.4.4" 629 | } 630 | }, 631 | "media-typer": { 632 | "version": "0.3.0", 633 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 634 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 635 | }, 636 | "merge-descriptors": { 637 | "version": "1.0.1", 638 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 639 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 640 | }, 641 | "merge2": { 642 | "version": "1.4.1", 643 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 644 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" 645 | }, 646 | "methods": { 647 | "version": "1.1.2", 648 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 649 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 650 | }, 651 | "micromatch": { 652 | "version": "4.0.4", 653 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 654 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 655 | "requires": { 656 | "braces": "^3.0.1", 657 | "picomatch": "^2.2.3" 658 | } 659 | }, 660 | "mime": { 661 | "version": "1.6.0", 662 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 663 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 664 | }, 665 | "mime-db": { 666 | "version": "1.48.0", 667 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", 668 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" 669 | }, 670 | "mime-types": { 671 | "version": "2.1.31", 672 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", 673 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", 674 | "requires": { 675 | "mime-db": "1.48.0" 676 | } 677 | }, 678 | "minimalistic-assert": { 679 | "version": "1.0.1", 680 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 681 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 682 | }, 683 | "moment": { 684 | "version": "2.29.1", 685 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", 686 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" 687 | }, 688 | "ms": { 689 | "version": "2.0.0", 690 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 691 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 692 | }, 693 | "nanoid": { 694 | "version": "3.1.23", 695 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", 696 | "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" 697 | }, 698 | "negotiator": { 699 | "version": "0.6.2", 700 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 701 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 702 | }, 703 | "node-forge": { 704 | "version": "0.10.0", 705 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", 706 | "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" 707 | }, 708 | "ocsp": { 709 | "version": "1.2.0", 710 | "resolved": "https://registry.npmjs.org/ocsp/-/ocsp-1.2.0.tgz", 711 | "integrity": "sha1-RpoXdrRX3uZ+sCAUCMGUa6xAdsw=", 712 | "requires": { 713 | "asn1.js": "^4.8.0", 714 | "asn1.js-rfc2560": "^4.0.0", 715 | "asn1.js-rfc5280": "^2.0.0", 716 | "async": "^1.5.2", 717 | "simple-lru-cache": "0.0.2" 718 | } 719 | }, 720 | "on-finished": { 721 | "version": "2.3.0", 722 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 723 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 724 | "requires": { 725 | "ee-first": "1.1.1" 726 | } 727 | }, 728 | "parseurl": { 729 | "version": "1.3.3", 730 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 731 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 732 | }, 733 | "path-key": { 734 | "version": "3.1.1", 735 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 736 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 737 | }, 738 | "path-parse": { 739 | "version": "1.0.7", 740 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 741 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 742 | }, 743 | "path-to-regexp": { 744 | "version": "0.1.7", 745 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 746 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 747 | }, 748 | "picomatch": { 749 | "version": "2.3.0", 750 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 751 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" 752 | }, 753 | "postcss": { 754 | "version": "8.3.5", 755 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", 756 | "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", 757 | "requires": { 758 | "colorette": "^1.2.2", 759 | "nanoid": "^3.1.23", 760 | "source-map-js": "^0.6.2" 761 | } 762 | }, 763 | "proxy-addr": { 764 | "version": "2.0.7", 765 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 766 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 767 | "requires": { 768 | "forwarded": "0.2.0", 769 | "ipaddr.js": "1.9.1" 770 | } 771 | }, 772 | "qs": { 773 | "version": "6.7.0", 774 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 775 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 776 | }, 777 | "queue-microtask": { 778 | "version": "1.2.3", 779 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 780 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" 781 | }, 782 | "range-parser": { 783 | "version": "1.2.1", 784 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 785 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 786 | }, 787 | "raw-body": { 788 | "version": "2.4.0", 789 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 790 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 791 | "requires": { 792 | "bytes": "3.1.0", 793 | "http-errors": "1.7.2", 794 | "iconv-lite": "0.4.24", 795 | "unpipe": "1.0.0" 796 | } 797 | }, 798 | "require-relative": { 799 | "version": "0.8.7", 800 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 801 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 802 | "dev": true 803 | }, 804 | "resolve": { 805 | "version": "1.20.0", 806 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 807 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 808 | "requires": { 809 | "is-core-module": "^2.2.0", 810 | "path-parse": "^1.0.6" 811 | } 812 | }, 813 | "reusify": { 814 | "version": "1.0.4", 815 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 816 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" 817 | }, 818 | "rollup": { 819 | "version": "2.53.2", 820 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.53.2.tgz", 821 | "integrity": "sha512-1CtEYuS5CRCzFZ7SNW5528SlDlk4VDXIRGwbm/2POQxA/G4+7/crIqJwkmnj8Q/74hGx4oVlNvh4E1CJQ5hZ6w==", 822 | "requires": { 823 | "fsevents": "~2.3.2" 824 | } 825 | }, 826 | "run-parallel": { 827 | "version": "1.2.0", 828 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 829 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 830 | "requires": { 831 | "queue-microtask": "^1.2.2" 832 | } 833 | }, 834 | "safe-buffer": { 835 | "version": "5.1.2", 836 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 837 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 838 | }, 839 | "safer-buffer": { 840 | "version": "2.1.2", 841 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 842 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 843 | }, 844 | "send": { 845 | "version": "0.17.1", 846 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 847 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 848 | "requires": { 849 | "debug": "2.6.9", 850 | "depd": "~1.1.2", 851 | "destroy": "~1.0.4", 852 | "encodeurl": "~1.0.2", 853 | "escape-html": "~1.0.3", 854 | "etag": "~1.8.1", 855 | "fresh": "0.5.2", 856 | "http-errors": "~1.7.2", 857 | "mime": "1.6.0", 858 | "ms": "2.1.1", 859 | "on-finished": "~2.3.0", 860 | "range-parser": "~1.2.1", 861 | "statuses": "~1.5.0" 862 | }, 863 | "dependencies": { 864 | "ms": { 865 | "version": "2.1.1", 866 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 867 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 868 | } 869 | } 870 | }, 871 | "serve-static": { 872 | "version": "1.14.1", 873 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 874 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 875 | "requires": { 876 | "encodeurl": "~1.0.2", 877 | "escape-html": "~1.0.3", 878 | "parseurl": "~1.3.3", 879 | "send": "0.17.1" 880 | } 881 | }, 882 | "server-destroy": { 883 | "version": "1.0.1", 884 | "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", 885 | "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" 886 | }, 887 | "setprototypeof": { 888 | "version": "1.1.1", 889 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 890 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 891 | }, 892 | "shebang-command": { 893 | "version": "2.0.0", 894 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 895 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 896 | "requires": { 897 | "shebang-regex": "^3.0.0" 898 | } 899 | }, 900 | "shebang-regex": { 901 | "version": "3.0.0", 902 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 903 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 904 | }, 905 | "simple-lru-cache": { 906 | "version": "0.0.2", 907 | "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", 908 | "integrity": "sha1-1ZzDoZPBpdAyD4Tucy9uRxPlEd0=" 909 | }, 910 | "source-map-js": { 911 | "version": "0.6.2", 912 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", 913 | "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" 914 | }, 915 | "sourcemap-codec": { 916 | "version": "1.4.8", 917 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 918 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 919 | "dev": true 920 | }, 921 | "statuses": { 922 | "version": "1.5.0", 923 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 924 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 925 | }, 926 | "svelte": { 927 | "version": "3.38.3", 928 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.38.3.tgz", 929 | "integrity": "sha512-N7bBZJH0iF24wsalFZF+fVYMUOigaAUQMIcEKHO3jstK/iL8VmP9xE+P0/a76+FkNcWt+TDv2Gx1taUoUscrvw==", 930 | "dev": true 931 | }, 932 | "svelte-hmr": { 933 | "version": "0.14.6", 934 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.6.tgz", 935 | "integrity": "sha512-0oXQmRiEh3uNjyVQiGmIE7imbKO4dYc1WL6XRXTC0X9XbSacJgj9MOLguqqbZygPsNnlglhlk4eB0pCmM6nQAA==", 936 | "dev": true 937 | }, 938 | "syswide-cas": { 939 | "version": "5.3.0", 940 | "resolved": "https://registry.npmjs.org/syswide-cas/-/syswide-cas-5.3.0.tgz", 941 | "integrity": "sha512-+RLgS6VInsX8rBpL+gy5qpa7phngecbK7NABelBZpqYpBTwOIK1y7CqHlXK5Vy/rA4erD9q/FyKzMjx2uX3zYg==" 942 | }, 943 | "to-regex-range": { 944 | "version": "5.0.1", 945 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 946 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 947 | "requires": { 948 | "is-number": "^7.0.0" 949 | } 950 | }, 951 | "toidentifier": { 952 | "version": "1.0.0", 953 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 954 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 955 | }, 956 | "type-is": { 957 | "version": "1.6.18", 958 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 959 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 960 | "requires": { 961 | "media-typer": "0.3.0", 962 | "mime-types": "~2.1.24" 963 | } 964 | }, 965 | "universalify": { 966 | "version": "0.1.2", 967 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 968 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 969 | }, 970 | "unpipe": { 971 | "version": "1.0.0", 972 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 973 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 974 | }, 975 | "utils-merge": { 976 | "version": "1.0.1", 977 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 978 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 979 | }, 980 | "vary": { 981 | "version": "1.1.2", 982 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 983 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 984 | }, 985 | "vite": { 986 | "version": "2.4.2", 987 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.4.2.tgz", 988 | "integrity": "sha512-2MifxD2I9fjyDmmEzbULOo3kOUoqX90A58cT6mECxoVQlMYFuijZsPQBuA14mqSwvV3ydUsqnq+BRWXyO9Qa+w==", 989 | "requires": { 990 | "esbuild": "^0.12.8", 991 | "fsevents": "~2.3.2", 992 | "postcss": "^8.3.5", 993 | "resolve": "^1.20.0", 994 | "rollup": "^2.38.5" 995 | } 996 | }, 997 | "vite-plugin-ssr": { 998 | "version": "0.2.0", 999 | "resolved": "https://registry.npmjs.org/vite-plugin-ssr/-/vite-plugin-ssr-0.2.0.tgz", 1000 | "integrity": "sha512-PwnUGmjUJ9YsmxFnXnN9YyMgBH/EW5fERjYIpR2/Bd+p53W+D4sSORbET0i1bQPKEOPPcrs3NLsjEzD+smKjkw==", 1001 | "requires": { 1002 | "@brillout/json-s": "^0.2.0", 1003 | "@brillout/libassert": "^0.4.2", 1004 | "@brillout/path-to-regexp": "^0.1.2", 1005 | "cac": "^6.7.3", 1006 | "devalue": "^2.0.1", 1007 | "fast-glob": "^3.2.5", 1008 | "kolorist": "^1.4.1" 1009 | } 1010 | }, 1011 | "which": { 1012 | "version": "2.0.2", 1013 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1014 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1015 | "requires": { 1016 | "isexe": "^2.0.0" 1017 | } 1018 | } 1019 | } 1020 | } 1021 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "dev": "npm run server", 4 | "prod": "npm run build && npm run server:prod", 5 | "build": "vite build && vite build --ssr", 6 | "server": "node ./server", 7 | "server:prod": "cross-env NODE_ENV=production node ./server" 8 | }, 9 | "dependencies": { 10 | "@small-tech/cross-platform-hostname": "^1.0.0", 11 | "@small-tech/https": "^2.1.2", 12 | "cross-env": "^7.0.3", 13 | "express": "^4.17.1", 14 | "vite": "^2.3.6", 15 | "vite-plugin-ssr": "^0.2.0" 16 | }, 17 | "devDependencies": { 18 | "@sveltejs/vite-plugin-svelte": "^1.0.0-next.12", 19 | "svelte": "^3.38.3" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /pages/__layout.svelte: -------------------------------------------------------------------------------- 1 |
2 | 9 |
10 |
11 | 12 | 53 | -------------------------------------------------------------------------------- /pages/_components/Counter.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /pages/_default/_default.page.client.js: -------------------------------------------------------------------------------- 1 | import { getPage } from 'vite-plugin-ssr/client' 2 | 3 | const pageContext = await getPage() 4 | 5 | new pageContext.Page({ 6 | target: document.getElementById('app'), 7 | hydrate: true 8 | }) 9 | -------------------------------------------------------------------------------- /pages/_default/_default.page.server.js: -------------------------------------------------------------------------------- 1 | import { html } from 'vite-plugin-ssr' 2 | 3 | export { render } 4 | export { passToClient } 5 | 6 | // See https://vite-plugin-ssr.com/data-fetching 7 | const passToClient = ['pageProps', 'routeParams'] 8 | 9 | async function render(pageContext) { 10 | const app = pageContext.Page.render(pageContext) 11 | const appHtml = app.html 12 | const appCss = app.css.code 13 | 14 | // See https://vite-plugin-ssr.com/html-head 15 | const { documentProps } = pageContext 16 | const title = (documentProps && documentProps.title) || 'Vite SSR app (Svelte version)' 17 | const desc = (documentProps && documentProps.description) || 'App using Vite + vite-plugin-ssr (Svelte version)' 18 | 19 | return html` 20 | 21 | 22 | 23 | 24 | 25 | 26 | ${title} 27 | 28 | 29 | 30 |
${html.dangerouslySkipEscape(appHtml)}
31 | 32 | ` 33 | } 34 | -------------------------------------------------------------------------------- /pages/_error.page.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | {#if is404} 8 |
9 |

404 Page Not Found

10 | This page could not be found. 11 |
12 | {:else} 13 |
14 |

500 Internal Server Error

15 | Something went wrong. 16 |
17 | {/if} 18 | -------------------------------------------------------------------------------- /pages/about/index.page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 | 7 |

About

8 |

A colored page.

9 |
10 |
11 | 12 | 19 | -------------------------------------------------------------------------------- /pages/index.page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 |

Welcome

8 | This page is: 9 | 13 |
14 | -------------------------------------------------------------------------------- /server/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const { createPageRender } = require('vite-plugin-ssr') 3 | 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const root = `${__dirname}/..` 6 | 7 | startServer() 8 | 9 | async function startServer() { 10 | const app = express() 11 | 12 | let viteDevServer 13 | if (isProduction) { 14 | app.use(express.static(`${root}/dist/client`, { index: false })) 15 | } else { 16 | const vite = require('vite') 17 | viteDevServer = await vite.createServer({ 18 | root, 19 | server: { 20 | middlewareMode: true 21 | } 22 | }) 23 | app.use(viteDevServer.middlewares) 24 | } 25 | 26 | const renderPage = createPageRender({ viteDevServer, isProduction, root }) 27 | app.get('*', async (req, res, next) => { 28 | const url = req.originalUrl 29 | const pageContext = { 30 | url 31 | } 32 | const result = await renderPage(pageContext) 33 | if (result.nothingRendered) return next() 34 | res.status(result.statusCode).send(result.renderResult) 35 | }) 36 | 37 | const port = process.env.PORT || 3000 38 | app.listen(port) 39 | console.log(`Server running at http://localhost:${port}`) 40 | } 41 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import ssr from 'vite-plugin-ssr/plugin' 2 | import { svelte } from '@sveltejs/vite-plugin-svelte' 3 | 4 | export default { 5 | plugins: [svelte(), ssr()] 6 | } 7 | --------------------------------------------------------------------------------