From 7ac4aac0ea6ac3c7edcf6ac04119e4928b437bf6 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 15:31:43 +0545 Subject: [PATCH 01/22] initialize playground --- package.json | 5 + packages/playground/.gitignore | 24 + packages/playground/README.md | 47 ++ packages/playground/index.html | 14 + packages/playground/jsconfig.json | 33 ++ packages/playground/package.json | 24 + packages/playground/public/vite.svg | 1 + packages/playground/server.js | 71 +++ packages/playground/src/App.svelte | 45 ++ packages/playground/src/app.css | 80 ++++ packages/playground/src/assets/svelte.svg | 1 + packages/playground/src/entry-client.js | 7 + packages/playground/src/entry-server.js | 6 + packages/playground/src/lib/Counter.svelte | 10 + packages/playground/src/vite-env.d.ts | 2 + packages/playground/svelte.config.js | 5 + packages/playground/vite.config.js | 18 + pnpm-lock.yaml | 483 ++++++++++++++++++++- 18 files changed, 870 insertions(+), 6 deletions(-) create mode 100644 packages/playground/.gitignore create mode 100644 packages/playground/README.md create mode 100644 packages/playground/index.html create mode 100644 packages/playground/jsconfig.json create mode 100644 packages/playground/package.json create mode 100644 packages/playground/public/vite.svg create mode 100644 packages/playground/server.js create mode 100644 packages/playground/src/App.svelte create mode 100644 packages/playground/src/app.css create mode 100644 packages/playground/src/assets/svelte.svg create mode 100644 packages/playground/src/entry-client.js create mode 100644 packages/playground/src/entry-server.js create mode 100644 packages/playground/src/lib/Counter.svelte create mode 100644 packages/playground/src/vite-env.d.ts create mode 100644 packages/playground/svelte.config.js create mode 100644 packages/playground/vite.config.js diff --git a/package.json b/package.json index e2e60ef73289..eaee10482058 100644 --- a/package.json +++ b/package.json @@ -27,5 +27,10 @@ "prettier": "^2.8.8", "prettier-plugin-svelte": "^2.10.0" }, + "pnpm": { + "overrides": { + "svelte": "workspace:*" + } + }, "packageManager": "pnpm@8.4.0" } diff --git a/packages/playground/.gitignore b/packages/playground/.gitignore new file mode 100644 index 000000000000..a547bf36d8d1 --- /dev/null +++ b/packages/playground/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/playground/README.md b/packages/playground/README.md new file mode 100644 index 000000000000..69c2ac55e181 --- /dev/null +++ b/packages/playground/README.md @@ -0,0 +1,47 @@ +# Svelte + Vite + +This template should help get you started developing with Svelte in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). + +## Need an official Svelte framework? + +Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. + +## Technical considerations + +**Why use this over SvelteKit?** + +- It brings its own routing solution which might not be preferable for some users. +- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. + +This template contains as little as possible to get started with Vite + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. + +Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. + +**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** + +Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. + +**Why include `.vscode/extensions.json`?** + +Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. + +**Why enable `checkJs` in the JS template?** + +It is likely that most cases of changing variable types in runtime are likely to be accidental, rather than deliberate. This provides advanced typechecking out of the box. Should you like to take advantage of the dynamically-typed nature of JavaScript, it is trivial to change the configuration. + +**Why is HMR not preserving my local component state?** + +HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr). + +If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. + +```js +// store.js +// An extremely simple external store +import { writable } from 'svelte/store' +export default writable(0) +``` diff --git a/packages/playground/index.html b/packages/playground/index.html new file mode 100644 index 000000000000..4371576286a6 --- /dev/null +++ b/packages/playground/index.html @@ -0,0 +1,14 @@ + + + + + + + Vite + Svelte + + + +
+ + + diff --git a/packages/playground/jsconfig.json b/packages/playground/jsconfig.json new file mode 100644 index 000000000000..e596c582326d --- /dev/null +++ b/packages/playground/jsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "moduleResolution": "Node", + "target": "ESNext", + "module": "ESNext", + /** + * svelte-preprocess cannot figure out whether you have + * a value or a type, so tell TypeScript to enforce using + * `import type` instead of `import` for Types. + */ + "importsNotUsedAsValues": "error", + "isolatedModules": true, + "resolveJsonModule": true, + /** + * To have warnings / errors of the Svelte compiler at the + * correct position, enable source maps by default. + */ + "sourceMap": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable this if you'd like to use dynamic types. + */ + "checkJs": true + }, + /** + * Use global.d.ts instead of compilerOptions.types + * to avoid limiting type declarations. + */ + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/packages/playground/package.json b/packages/playground/package.json new file mode 100644 index 000000000000..fa20536cb636 --- /dev/null +++ b/packages/playground/package.json @@ -0,0 +1,24 @@ +{ + "name": "playground", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "node server", + "build": "npm run build:client && npm run build:server", + "build:client": "vite build --ssrManifest --outDir dist/client", + "build:server": "vite build --ssr src/entry-server.js --outDir dist/server", + "preview": "cross-env NODE_ENV=production node server" + }, + "dependencies": { + "compression": "^1.7.4", + "express": "^4.18.2", + "sirv": "^2.0.2" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^2.4.1", + "cross-env": "^7.0.3", + "svelte": "^3.54.0", + "vite": "^4.0.4" + } +} \ No newline at end of file diff --git a/packages/playground/public/vite.svg b/packages/playground/public/vite.svg new file mode 100644 index 000000000000..e7b8dfb1b2a6 --- /dev/null +++ b/packages/playground/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/playground/server.js b/packages/playground/server.js new file mode 100644 index 000000000000..b68e0663782a --- /dev/null +++ b/packages/playground/server.js @@ -0,0 +1,71 @@ +import fs from 'node:fs/promises' +import express from 'express' + +// Constants +const isProduction = process.env.NODE_ENV === 'production' +const port = process.env.PORT || 5173 +const base = process.env.BASE || '/' + +// Cached production assets +const templateHtml = isProduction + ? await fs.readFile('./dist/client/index.html', 'utf-8') + : '' +const ssrManifest = isProduction + ? await fs.readFile('./dist/client/ssr-manifest.json', 'utf-8') + : undefined + +// Create http server +const app = express() + +// Add Vite or respective production middlewares +let vite +if (!isProduction) { + const { createServer } = await import('vite') + vite = await createServer({ + server: { middlewareMode: true }, + appType: 'custom', + base + }) + app.use(vite.middlewares) +} else { + const compression = (await import('compression')).default + const sirv = (await import('sirv')).default + app.use(compression()) + app.use(base, sirv('./dist/client', { extensions: [] })) +} + +// Serve HTML +app.use('*', async (req, res) => { + try { + const url = req.originalUrl.replace(base, '') + + let template + let render + if (!isProduction) { + // Always read fresh template in development + template = await fs.readFile('./index.html', 'utf-8') + template = await vite.transformIndexHtml(url, template) + render = (await vite.ssrLoadModule('/src/entry-server.js')).render + } else { + template = templateHtml + render = (await import('./dist/server/entry-server.js')).render + } + + const rendered = await render(url, ssrManifest) + + const html = template + .replace(``, rendered.head ?? '') + .replace(``, rendered.html ?? '') + + res.status(200).set({ 'Content-Type': 'text/html' }).end(html) + } catch (e) { + vite?.ssrFixStacktrace(e) + console.log(e.stack) + res.status(500).end(e.stack) + } +}) + +// Start http server +app.listen(port, () => { + console.log(`Server started at http://localhost:${port}`) +}) diff --git a/packages/playground/src/App.svelte b/packages/playground/src/App.svelte new file mode 100644 index 000000000000..7d6f4ed4339f --- /dev/null +++ b/packages/playground/src/App.svelte @@ -0,0 +1,45 @@ + + +
+
+ + + + + + +
+

Vite + Svelte

+ +
+ +
+ +

+ Check out SvelteKit, the official Svelte app framework powered by Vite! +

+ +

+ Click on the Vite and Svelte logos to learn more +

+
+ + diff --git a/packages/playground/src/app.css b/packages/playground/src/app.css new file mode 100644 index 000000000000..b87aec7223e0 --- /dev/null +++ b/packages/playground/src/app.css @@ -0,0 +1,80 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/playground/src/assets/svelte.svg b/packages/playground/src/assets/svelte.svg new file mode 100644 index 000000000000..c5e08481f8ae --- /dev/null +++ b/packages/playground/src/assets/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/playground/src/entry-client.js b/packages/playground/src/entry-client.js new file mode 100644 index 000000000000..b890809a00b7 --- /dev/null +++ b/packages/playground/src/entry-client.js @@ -0,0 +1,7 @@ +import './app.css' +import App from './App.svelte' + +new App({ + target: document.getElementById('app'), + hydrate: true +}) diff --git a/packages/playground/src/entry-server.js b/packages/playground/src/entry-server.js new file mode 100644 index 000000000000..d6d7e32cab1a --- /dev/null +++ b/packages/playground/src/entry-server.js @@ -0,0 +1,6 @@ +import App from './App.svelte' + +export function render() { + // @ts-ignore + return App.render() +} diff --git a/packages/playground/src/lib/Counter.svelte b/packages/playground/src/lib/Counter.svelte new file mode 100644 index 000000000000..e45f90310979 --- /dev/null +++ b/packages/playground/src/lib/Counter.svelte @@ -0,0 +1,10 @@ + + + diff --git a/packages/playground/src/vite-env.d.ts b/packages/playground/src/vite-env.d.ts new file mode 100644 index 000000000000..4078e7476a2e --- /dev/null +++ b/packages/playground/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/packages/playground/svelte.config.js b/packages/playground/svelte.config.js new file mode 100644 index 000000000000..09a1bf7a7b22 --- /dev/null +++ b/packages/playground/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +export default { + preprocess: vitePreprocess() +} diff --git a/packages/playground/vite.config.js b/packages/playground/vite.config.js new file mode 100644 index 000000000000..d94c2bac582f --- /dev/null +++ b/packages/playground/vite.config.js @@ -0,0 +1,18 @@ +import { defineConfig } from 'vite'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + svelte({ + compilerOptions: { + hydratable: true + } + }) + ], + server: { + watch: { + ignored: ['!**/node_modules/svelte/**'] + } + } +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 535ef573fc5d..4f4910e4af8a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,8 @@ lockfileVersion: '6.0' +overrides: + svelte: workspace:* + importers: .: @@ -32,6 +35,31 @@ importers: specifier: ^2.10.0 version: 2.10.0(prettier@2.8.8)(svelte@3.59.1) + packages/playground: + dependencies: + compression: + specifier: ^1.7.4 + version: 1.7.4 + express: + specifier: ^4.18.2 + version: 4.18.2 + sirv: + specifier: ^2.0.2 + version: 2.0.2 + devDependencies: + '@sveltejs/vite-plugin-svelte': + specifier: ^2.4.1 + version: 2.4.1(svelte@packages+svelte)(vite@4.3.9) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + svelte: + specifier: workspace:* + version: link:../svelte + vite: + specifier: ^4.0.4 + version: 4.3.9(@types/node@14.18.48) + packages/svelte: dependencies: '@ampproject/remapping': @@ -706,6 +734,10 @@ packages: fsevents: 2.3.2 dev: true + /@polka/url@1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + dev: false + /@rollup/plugin-commonjs@24.1.0(rollup@3.23.0): resolution: {integrity: sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==} engines: {node: '>=14.0.0'} @@ -820,6 +852,42 @@ packages: typescript: 5.0.4 dev: true + /@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@packages+svelte)(vite@4.3.9): + resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==} + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^2.2.0 + svelte: ^3.54.0 || ^4.0.0-next.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@packages+svelte)(vite@4.3.9) + debug: 4.3.4 + svelte: link:packages/svelte + vite: 4.3.9(@types/node@14.18.48) + transitivePeerDependencies: + - supports-color + dev: true + + /@sveltejs/vite-plugin-svelte@2.4.1(svelte@packages+svelte)(vite@4.3.9): + resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==} + engines: {node: ^14.18.0 || >= 16} + peerDependencies: + svelte: ^3.54.0 || ^4.0.0-next.0 + vite: ^4.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@packages+svelte)(vite@4.3.9) + debug: 4.3.4 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.0 + svelte: link:packages/svelte + svelte-hmr: 0.15.1(svelte@packages+svelte) + vite: 4.3.9(@types/node@14.18.48) + vitefu: 0.2.4(vite@4.3.9) + transitivePeerDependencies: + - supports-color + dev: true + /@svitejs/changesets-changelog-github-compact@1.1.0: resolution: {integrity: sha512-qhUGGDHcpbY2zpjW3SwqchuW8J/5EzlPFud7xNntHKA7f3a/mx5+g+ruJKFHSAiVZYo30PALt+AyhmPUNKH/Og==} engines: {node: ^14.13.1 || ^16.0.0 || >=18} @@ -1067,6 +1135,14 @@ packages: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: @@ -1170,6 +1246,10 @@ packages: call-bind: 1.0.2 is-array-buffer: 3.0.2 + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + /array-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} @@ -1244,6 +1324,26 @@ packages: resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} dev: true + /body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1275,6 +1375,16 @@ packages: engines: {node: '>=6'} dev: true + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -1419,6 +1529,28 @@ packages: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + /concat-map@0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true @@ -1437,6 +1569,35 @@ packages: well-known-symbols: 2.0.0 dev: true + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + dev: true + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -1515,6 +1676,17 @@ packages: time-zone: 1.0.0 dev: true + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -1612,6 +1784,16 @@ packages: engines: {node: '>=0.4.0'} dev: true + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -1650,10 +1832,19 @@ packages: engines: {node: '>=12'} dev: true + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + /enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -1785,6 +1976,10 @@ packages: engines: {node: '>=6'} dev: true + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -2101,6 +2296,50 @@ packages: engines: {node: '>=0.10.0'} dev: true + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true @@ -2161,6 +2400,21 @@ packages: to-regex-range: 5.0.1 dev: true + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2210,6 +2464,16 @@ packages: mime-types: 2.1.35 dev: true + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -2433,6 +2697,17 @@ packages: whatwg-encoding: 2.0.0 dev: true + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} @@ -2463,7 +2738,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: true /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} @@ -2504,7 +2778,6 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} @@ -2514,6 +2787,11 @@ packages: has: 1.0.3 side-channel: 1.0.4 + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} @@ -2966,6 +3244,11 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: false + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + /meow@6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} @@ -2983,11 +3266,20 @@ packages: yargs-parser: 18.1.3 dev: true + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -2999,14 +3291,18 @@ packages: /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: true /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: true + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -3053,13 +3349,21 @@ packages: ufo: 1.1.2 dev: true + /mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} @@ -3075,6 +3379,11 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + /node-fetch@2.6.11: resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} engines: {node: 4.x || >=6.0.0} @@ -3133,6 +3442,18 @@ packages: es-abstract: 1.21.2 dev: true + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -3247,6 +3568,11 @@ packages: entities: 4.5.0 dev: true + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3266,6 +3592,10 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -3416,6 +3746,14 @@ packages: react-is: 17.0.2 dev: true + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -3429,6 +3767,13 @@ packages: engines: {node: '>=6'} dev: true + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true @@ -3442,6 +3787,21 @@ packages: engines: {node: '>=8'} dev: true + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true @@ -3574,6 +3934,14 @@ packages: queue-microtask: 1.2.3 dev: true + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -3590,7 +3958,6 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true /saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} @@ -3617,10 +3984,47 @@ packages: lru-cache: 6.0.0 dev: true + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -3660,6 +4064,15 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true + /sirv@2.0.2: + resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.21 + mrmime: 1.0.1 + totalist: 3.0.1 + dev: false + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -3731,6 +4144,11 @@ packages: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + /std-env@3.3.3: resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} dev: true @@ -3846,6 +4264,15 @@ packages: svelte: 3.59.1 dev: true + /svelte-hmr@0.15.1(svelte@packages+svelte): + resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: '>=3.19.0' + dependencies: + svelte: link:packages/svelte + dev: true + /svelte@3.59.1: resolution: {integrity: sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==} engines: {node: '>= 8'} @@ -3904,6 +4331,16 @@ packages: is-number: 7.0.0 dev: true + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: false + /tough-cookie@4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} @@ -4006,6 +4443,14 @@ packages: engines: {node: '>=8'} dev: true + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: @@ -4043,6 +4488,11 @@ packages: engines: {node: '>= 4.0.0'} dev: true + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -4066,6 +4516,11 @@ packages: which-typed-array: 1.1.9 dev: true + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -4073,6 +4528,11 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + /vite-node@0.31.1(@types/node@14.18.48): resolution: {integrity: sha512-BajE/IsNQ6JyizPzu9zRgHrBwczkAs0erQf/JRpgTIESpKvNj9/Gd0vxX905klLkb0I0SJVCKbdrl5c6FnqYKA==} engines: {node: '>=v14.18.0'} @@ -4127,6 +4587,17 @@ packages: fsevents: 2.3.2 dev: true + /vitefu@0.2.4(vite@4.3.9): + resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 4.3.9(@types/node@14.18.48) + dev: true + /vitest@0.31.1(happy-dom@9.20.3)(jsdom@21.1.2)(playwright@1.34.3): resolution: {integrity: sha512-/dOoOgzoFk/5pTvg1E65WVaobknWREN15+HF+0ucudo3dDG/vCZoXTQrjIfEaWvQXmqScwkRodrTbM/ScMpRcQ==} engines: {node: '>=v14.18.0'} From c090bb12fa90e5a6bbb6de4e9205d41d7a07f09e Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 15:35:10 +0545 Subject: [PATCH 02/22] pnpm up --- packages/playground/package.json | 6 +++--- pnpm-lock.yaml | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/playground/package.json b/packages/playground/package.json index fa20536cb636..e9ab60a3af6f 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -13,12 +13,12 @@ "dependencies": { "compression": "^1.7.4", "express": "^4.18.2", - "sirv": "^2.0.2" + "sirv": "^2.0.3" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^2.4.1", "cross-env": "^7.0.3", - "svelte": "^3.54.0", - "vite": "^4.0.4" + "svelte": "workspace:*", + "vite": "^4.3.9" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f4910e4af8a..2501ddf4ed05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,8 +44,8 @@ importers: specifier: ^4.18.2 version: 4.18.2 sirv: - specifier: ^2.0.2 - version: 2.0.2 + specifier: ^2.0.3 + version: 2.0.3 devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^2.4.1 @@ -57,7 +57,7 @@ importers: specifier: workspace:* version: link:../svelte vite: - specifier: ^4.0.4 + specifier: ^4.3.9 version: 4.3.9(@types/node@14.18.48) packages/svelte: @@ -4064,8 +4064,8 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /sirv@2.0.2: - resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} + /sirv@2.0.3: + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} dependencies: '@polka/url': 1.0.0-next.21 From 7ddd352a35621fae088282edcdcd5a0ac22c8b06 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 15:39:07 +0545 Subject: [PATCH 03/22] tidy up git ignore --- packages/playground/.gitignore | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/packages/playground/.gitignore b/packages/playground/.gitignore index a547bf36d8d1..1e6889c86357 100644 --- a/packages/playground/.gitignore +++ b/packages/playground/.gitignore @@ -1,24 +1,3 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules dist dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? +*.local \ No newline at end of file From a6e6d96f0ed3fc40cfca68438f22e95d896255be Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 15:44:18 +0545 Subject: [PATCH 04/22] remove fluff --- packages/playground/index.html | 2 - packages/playground/public/vite.svg | 1 - packages/playground/src/App.svelte | 44 +------------ packages/playground/src/app.css | 80 ----------------------- packages/playground/src/assets/svelte.svg | 1 - 5 files changed, 3 insertions(+), 125 deletions(-) delete mode 100644 packages/playground/public/vite.svg delete mode 100644 packages/playground/src/assets/svelte.svg diff --git a/packages/playground/index.html b/packages/playground/index.html index 4371576286a6..127f44cea092 100644 --- a/packages/playground/index.html +++ b/packages/playground/index.html @@ -2,9 +2,7 @@ - - Vite + Svelte diff --git a/packages/playground/public/vite.svg b/packages/playground/public/vite.svg deleted file mode 100644 index e7b8dfb1b2a6..000000000000 --- a/packages/playground/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/playground/src/App.svelte b/packages/playground/src/App.svelte index 7d6f4ed4339f..f5a7a3e4d40e 100644 --- a/packages/playground/src/App.svelte +++ b/packages/playground/src/App.svelte @@ -1,45 +1,7 @@ -
- -

Vite + Svelte

+

Hello {name}!

-
- -
- -

- Check out SvelteKit, the official Svelte app framework powered by Vite! -

- -

- Click on the Vite and Svelte logos to learn more -

-
- - + diff --git a/packages/playground/src/app.css b/packages/playground/src/app.css index b87aec7223e0..e69de29bb2d1 100644 --- a/packages/playground/src/app.css +++ b/packages/playground/src/app.css @@ -1,80 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -.card { - padding: 2em; -} - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/packages/playground/src/assets/svelte.svg b/packages/playground/src/assets/svelte.svg deleted file mode 100644 index c5e08481f8ae..000000000000 --- a/packages/playground/src/assets/svelte.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From aea491d8c19fd45601a7980d3af79552ace7aeb3 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 15:46:58 +0545 Subject: [PATCH 05/22] format --- packages/playground/.gitignore | 2 +- packages/playground/README.md | 4 +- packages/playground/index.html | 18 ++--- packages/playground/jsconfig.json | 62 ++++++++-------- packages/playground/package.json | 47 ++++++------ packages/playground/server.js | 96 ++++++++++++------------- packages/playground/src/entry-client.js | 10 +-- packages/playground/src/entry-server.js | 6 +- packages/playground/svelte.config.js | 6 +- 9 files changed, 125 insertions(+), 126 deletions(-) diff --git a/packages/playground/.gitignore b/packages/playground/.gitignore index 1e6889c86357..0212d8b6cea4 100644 --- a/packages/playground/.gitignore +++ b/packages/playground/.gitignore @@ -1,3 +1,3 @@ dist dist-ssr -*.local \ No newline at end of file +*.local diff --git a/packages/playground/README.md b/packages/playground/README.md index 69c2ac55e181..a80a5f2248b1 100644 --- a/packages/playground/README.md +++ b/packages/playground/README.md @@ -42,6 +42,6 @@ If you have state that's important to retain within a component, consider creati ```js // store.js // An extremely simple external store -import { writable } from 'svelte/store' -export default writable(0) +import { writable } from 'svelte/store'; +export default writable(0); ``` diff --git a/packages/playground/index.html b/packages/playground/index.html index 127f44cea092..5a974b1354c5 100644 --- a/packages/playground/index.html +++ b/packages/playground/index.html @@ -1,12 +1,12 @@ - - - - - - -
- - + + + + + + +
+ + diff --git a/packages/playground/jsconfig.json b/packages/playground/jsconfig.json index e596c582326d..913970cf87dd 100644 --- a/packages/playground/jsconfig.json +++ b/packages/playground/jsconfig.json @@ -1,33 +1,33 @@ { - "compilerOptions": { - "moduleResolution": "Node", - "target": "ESNext", - "module": "ESNext", - /** - * svelte-preprocess cannot figure out whether you have - * a value or a type, so tell TypeScript to enforce using - * `import type` instead of `import` for Types. - */ - "importsNotUsedAsValues": "error", - "isolatedModules": true, - "resolveJsonModule": true, - /** - * To have warnings / errors of the Svelte compiler at the - * correct position, enable source maps by default. - */ - "sourceMap": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - /** - * Typecheck JS in `.svelte` and `.js` files by default. - * Disable this if you'd like to use dynamic types. - */ - "checkJs": true - }, - /** - * Use global.d.ts instead of compilerOptions.types - * to avoid limiting type declarations. - */ - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] + "compilerOptions": { + "moduleResolution": "Node", + "target": "ESNext", + "module": "ESNext", + /** + * svelte-preprocess cannot figure out whether you have + * a value or a type, so tell TypeScript to enforce using + * `import type` instead of `import` for Types. + */ + "importsNotUsedAsValues": "error", + "isolatedModules": true, + "resolveJsonModule": true, + /** + * To have warnings / errors of the Svelte compiler at the + * correct position, enable source maps by default. + */ + "sourceMap": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable this if you'd like to use dynamic types. + */ + "checkJs": true + }, + /** + * Use global.d.ts instead of compilerOptions.types + * to avoid limiting type declarations. + */ + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] } diff --git a/packages/playground/package.json b/packages/playground/package.json index e9ab60a3af6f..8bcee8868fcb 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -1,24 +1,25 @@ { - "name": "playground", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "node server", - "build": "npm run build:client && npm run build:server", - "build:client": "vite build --ssrManifest --outDir dist/client", - "build:server": "vite build --ssr src/entry-server.js --outDir dist/server", - "preview": "cross-env NODE_ENV=production node server" - }, - "dependencies": { - "compression": "^1.7.4", - "express": "^4.18.2", - "sirv": "^2.0.3" - }, - "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^2.4.1", - "cross-env": "^7.0.3", - "svelte": "workspace:*", - "vite": "^4.3.9" - } -} \ No newline at end of file + "name": "playground", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "node server", + "format": "prettier . --cache --plugin-search-dir=. --write", + "build": "npm run build:client && npm run build:server", + "build:client": "vite build --ssrManifest --outDir dist/client", + "build:server": "vite build --ssr src/entry-server.js --outDir dist/server", + "preview": "cross-env NODE_ENV=production node server" + }, + "dependencies": { + "compression": "^1.7.4", + "express": "^4.18.2", + "sirv": "^2.0.3" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^2.4.1", + "cross-env": "^7.0.3", + "svelte": "workspace:*", + "vite": "^4.3.9" + } +} diff --git a/packages/playground/server.js b/packages/playground/server.js index b68e0663782a..ebd55428c17b 100644 --- a/packages/playground/server.js +++ b/packages/playground/server.js @@ -1,71 +1,69 @@ -import fs from 'node:fs/promises' -import express from 'express' +import fs from 'node:fs/promises'; +import express from 'express'; // Constants -const isProduction = process.env.NODE_ENV === 'production' -const port = process.env.PORT || 5173 -const base = process.env.BASE || '/' +const isProduction = process.env.NODE_ENV === 'production'; +const port = process.env.PORT || 5173; +const base = process.env.BASE || '/'; // Cached production assets -const templateHtml = isProduction - ? await fs.readFile('./dist/client/index.html', 'utf-8') - : '' +const templateHtml = isProduction ? await fs.readFile('./dist/client/index.html', 'utf-8') : ''; const ssrManifest = isProduction - ? await fs.readFile('./dist/client/ssr-manifest.json', 'utf-8') - : undefined + ? await fs.readFile('./dist/client/ssr-manifest.json', 'utf-8') + : undefined; // Create http server -const app = express() +const app = express(); // Add Vite or respective production middlewares -let vite +let vite; if (!isProduction) { - const { createServer } = await import('vite') - vite = await createServer({ - server: { middlewareMode: true }, - appType: 'custom', - base - }) - app.use(vite.middlewares) + const { createServer } = await import('vite'); + vite = await createServer({ + server: { middlewareMode: true }, + appType: 'custom', + base + }); + app.use(vite.middlewares); } else { - const compression = (await import('compression')).default - const sirv = (await import('sirv')).default - app.use(compression()) - app.use(base, sirv('./dist/client', { extensions: [] })) + const compression = (await import('compression')).default; + const sirv = (await import('sirv')).default; + app.use(compression()); + app.use(base, sirv('./dist/client', { extensions: [] })); } // Serve HTML app.use('*', async (req, res) => { - try { - const url = req.originalUrl.replace(base, '') + try { + const url = req.originalUrl.replace(base, ''); - let template - let render - if (!isProduction) { - // Always read fresh template in development - template = await fs.readFile('./index.html', 'utf-8') - template = await vite.transformIndexHtml(url, template) - render = (await vite.ssrLoadModule('/src/entry-server.js')).render - } else { - template = templateHtml - render = (await import('./dist/server/entry-server.js')).render - } + let template; + let render; + if (!isProduction) { + // Always read fresh template in development + template = await fs.readFile('./index.html', 'utf-8'); + template = await vite.transformIndexHtml(url, template); + render = (await vite.ssrLoadModule('/src/entry-server.js')).render; + } else { + template = templateHtml; + render = (await import('./dist/server/entry-server.js')).render; + } - const rendered = await render(url, ssrManifest) + const rendered = await render(url, ssrManifest); - const html = template - .replace(``, rendered.head ?? '') - .replace(``, rendered.html ?? '') + const html = template + .replace(``, rendered.head ?? '') + .replace(``, rendered.html ?? ''); - res.status(200).set({ 'Content-Type': 'text/html' }).end(html) - } catch (e) { - vite?.ssrFixStacktrace(e) - console.log(e.stack) - res.status(500).end(e.stack) - } -}) + res.status(200).set({ 'Content-Type': 'text/html' }).end(html); + } catch (e) { + vite?.ssrFixStacktrace(e); + console.log(e.stack); + res.status(500).end(e.stack); + } +}); // Start http server app.listen(port, () => { - console.log(`Server started at http://localhost:${port}`) -}) + console.log(`Server started at http://localhost:${port}`); +}); diff --git a/packages/playground/src/entry-client.js b/packages/playground/src/entry-client.js index b890809a00b7..932575fc51f9 100644 --- a/packages/playground/src/entry-client.js +++ b/packages/playground/src/entry-client.js @@ -1,7 +1,7 @@ -import './app.css' -import App from './App.svelte' +import './app.css'; +import App from './App.svelte'; new App({ - target: document.getElementById('app'), - hydrate: true -}) + target: document.getElementById('app'), + hydrate: true +}); diff --git a/packages/playground/src/entry-server.js b/packages/playground/src/entry-server.js index d6d7e32cab1a..7402e1e9add2 100644 --- a/packages/playground/src/entry-server.js +++ b/packages/playground/src/entry-server.js @@ -1,6 +1,6 @@ -import App from './App.svelte' +import App from './App.svelte'; export function render() { - // @ts-ignore - return App.render() + // @ts-ignore + return App.render(); } diff --git a/packages/playground/svelte.config.js b/packages/playground/svelte.config.js index 09a1bf7a7b22..538a94854200 100644 --- a/packages/playground/svelte.config.js +++ b/packages/playground/svelte.config.js @@ -1,5 +1,5 @@ -import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; export default { - preprocess: vitePreprocess() -} + preprocess: vitePreprocess() +}; From 85f214e55c69c2949d1788c3af00fae349e56032 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 15:49:23 +0545 Subject: [PATCH 06/22] rm readme --- packages/playground/README.md | 47 ----------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 packages/playground/README.md diff --git a/packages/playground/README.md b/packages/playground/README.md deleted file mode 100644 index a80a5f2248b1..000000000000 --- a/packages/playground/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Svelte + Vite - -This template should help get you started developing with Svelte in Vite. - -## Recommended IDE Setup - -[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). - -## Need an official Svelte framework? - -Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. - -## Technical considerations - -**Why use this over SvelteKit?** - -- It brings its own routing solution which might not be preferable for some users. -- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. - -This template contains as little as possible to get started with Vite + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. - -Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. - -**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** - -Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. - -**Why include `.vscode/extensions.json`?** - -Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. - -**Why enable `checkJs` in the JS template?** - -It is likely that most cases of changing variable types in runtime are likely to be accidental, rather than deliberate. This provides advanced typechecking out of the box. Should you like to take advantage of the dynamically-typed nature of JavaScript, it is trivial to change the configuration. - -**Why is HMR not preserving my local component state?** - -HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr). - -If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. - -```js -// store.js -// An extremely simple external store -import { writable } from 'svelte/store'; -export default writable(0); -``` From 3b968c993e83eaa4773ac94590117013085c3240 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 15:50:55 +0545 Subject: [PATCH 07/22] fix jsconfig error --- packages/playground/jsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playground/jsconfig.json b/packages/playground/jsconfig.json index 913970cf87dd..ba142a7d31d6 100644 --- a/packages/playground/jsconfig.json +++ b/packages/playground/jsconfig.json @@ -8,7 +8,7 @@ * a value or a type, so tell TypeScript to enforce using * `import type` instead of `import` for Types. */ - "importsNotUsedAsValues": "error", + "verbatimModuleSyntax": true, "isolatedModules": true, "resolveJsonModule": true, /** From eaf46f61c54b1ca6385ec4acfbcf5ae62fa87141 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 16:06:03 +0545 Subject: [PATCH 08/22] add skip-worktree instructions --- packages/playground/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/playground/README.md diff --git a/packages/playground/README.md b/packages/playground/README.md new file mode 100644 index 000000000000..571e1da1e89c --- /dev/null +++ b/packages/playground/README.md @@ -0,0 +1,5 @@ +You may use this package to experiment with your changes to Svelte. + +To prevent any changes you make from being committed, run `git update-index --skip-worktree ./**/*.*` in this directory. + +If you would actually like to make some changes to the files here for everyone then run `git update-index --no-skip-worktree ./**/*.*` before committing. \ No newline at end of file From 9f1a7ba77cf07a45599a9d80b0fa99c9da639323 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 16:34:33 +0545 Subject: [PATCH 09/22] reload hack --- packages/playground/README.md | 2 +- packages/playground/vite.config.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/playground/README.md b/packages/playground/README.md index 571e1da1e89c..0f8a71184529 100644 --- a/packages/playground/README.md +++ b/packages/playground/README.md @@ -1,5 +1,5 @@ You may use this package to experiment with your changes to Svelte. -To prevent any changes you make from being committed, run `git update-index --skip-worktree ./**/*.*` in this directory. +To prevent any changes you make in this directory from being accidentally committed, run `git update-index --skip-worktree ./**/*.*` in this directory. If you would actually like to make some changes to the files here for everyone then run `git update-index --no-skip-worktree ./**/*.*` before committing. \ No newline at end of file diff --git a/packages/playground/vite.config.js b/packages/playground/vite.config.js index d94c2bac582f..656a77504c35 100644 --- a/packages/playground/vite.config.js +++ b/packages/playground/vite.config.js @@ -1,6 +1,9 @@ import { defineConfig } from 'vite'; import { svelte } from '@sveltejs/vite-plugin-svelte'; +// Do not remove this import. It's needed to trigger reloads when the compiler changes. +import { compile } from '../svelte/src/compiler/index.js'; + // https://vitejs.dev/config/ export default defineConfig({ plugins: [ From 1e88d87b54890f3401423cc869cf126836c3e26c Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sat, 27 May 2023 18:40:46 +0545 Subject: [PATCH 10/22] simplify --- packages/playground/package.json | 1 - packages/playground/vite.config.js | 35 ++++++++++++++---- pnpm-lock.yaml | 59 ------------------------------ 3 files changed, 27 insertions(+), 68 deletions(-) diff --git a/packages/playground/package.json b/packages/playground/package.json index 8bcee8868fcb..827f5c025d7c 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -17,7 +17,6 @@ "sirv": "^2.0.3" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^2.4.1", "cross-env": "^7.0.3", "svelte": "workspace:*", "vite": "^4.3.9" diff --git a/packages/playground/vite.config.js b/packages/playground/vite.config.js index 656a77504c35..08cc7c00b7a8 100644 --- a/packages/playground/vite.config.js +++ b/packages/playground/vite.config.js @@ -1,17 +1,36 @@ -import { defineConfig } from 'vite'; -import { svelte } from '@sveltejs/vite-plugin-svelte'; +import { createFilter, defineConfig } from 'vite'; +import { compile } from '../svelte/src/compiler'; -// Do not remove this import. It's needed to trigger reloads when the compiler changes. -import { compile } from '../svelte/src/compiler/index.js'; +const filter = createFilter('**/*.svelte'); // https://vitejs.dev/config/ export default defineConfig({ plugins: [ - svelte({ - compilerOptions: { - hydratable: true + { + name: 'svelte', + transform(code, id, options) { + if (!filter(id)) return null; + + const compiled = compile(code, { + filename: id, + generate: options?.ssr ? 'ssr' : 'dom', + hydratable: true, + css: 'injected' + }); + + return compiled.js; + }, + configureServer(server) { + server.watcher.on('change', (path) => { + if (path.includes('src/compiler')) { + // pre-emptively send a full reload so that the request finishes faster + server.ws.send({ + type: 'full-reload' + }); + } + }); } - }) + } ], server: { watch: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2501ddf4ed05..5d22bb5bb73f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,9 +47,6 @@ importers: specifier: ^2.0.3 version: 2.0.3 devDependencies: - '@sveltejs/vite-plugin-svelte': - specifier: ^2.4.1 - version: 2.4.1(svelte@packages+svelte)(vite@4.3.9) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -852,42 +849,6 @@ packages: typescript: 5.0.4 dev: true - /@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@packages+svelte)(vite@4.3.9): - resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==} - engines: {node: ^14.18.0 || >= 16} - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^2.2.0 - svelte: ^3.54.0 || ^4.0.0-next.0 - vite: ^4.0.0 - dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@packages+svelte)(vite@4.3.9) - debug: 4.3.4 - svelte: link:packages/svelte - vite: 4.3.9(@types/node@14.18.48) - transitivePeerDependencies: - - supports-color - dev: true - - /@sveltejs/vite-plugin-svelte@2.4.1(svelte@packages+svelte)(vite@4.3.9): - resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==} - engines: {node: ^14.18.0 || >= 16} - peerDependencies: - svelte: ^3.54.0 || ^4.0.0-next.0 - vite: ^4.0.0 - dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@packages+svelte)(vite@4.3.9) - debug: 4.3.4 - deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.0 - svelte: link:packages/svelte - svelte-hmr: 0.15.1(svelte@packages+svelte) - vite: 4.3.9(@types/node@14.18.48) - vitefu: 0.2.4(vite@4.3.9) - transitivePeerDependencies: - - supports-color - dev: true - /@svitejs/changesets-changelog-github-compact@1.1.0: resolution: {integrity: sha512-qhUGGDHcpbY2zpjW3SwqchuW8J/5EzlPFud7xNntHKA7f3a/mx5+g+ruJKFHSAiVZYo30PALt+AyhmPUNKH/Og==} engines: {node: ^14.13.1 || ^16.0.0 || >=18} @@ -4264,15 +4225,6 @@ packages: svelte: 3.59.1 dev: true - /svelte-hmr@0.15.1(svelte@packages+svelte): - resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - peerDependencies: - svelte: '>=3.19.0' - dependencies: - svelte: link:packages/svelte - dev: true - /svelte@3.59.1: resolution: {integrity: sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==} engines: {node: '>= 8'} @@ -4587,17 +4539,6 @@ packages: fsevents: 2.3.2 dev: true - /vitefu@0.2.4(vite@4.3.9): - resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 - peerDependenciesMeta: - vite: - optional: true - dependencies: - vite: 4.3.9(@types/node@14.18.48) - dev: true - /vitest@0.31.1(happy-dom@9.20.3)(jsdom@21.1.2)(playwright@1.34.3): resolution: {integrity: sha512-/dOoOgzoFk/5pTvg1E65WVaobknWREN15+HF+0ucudo3dDG/vCZoXTQrjIfEaWvQXmqScwkRodrTbM/ScMpRcQ==} engines: {node: '>=v14.18.0'} From 3501116d70ff7982136968862d80b19e145d00bb Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 09:57:25 +0545 Subject: [PATCH 11/22] use rollup --- packages/playground/package.json | 9 +-- packages/playground/rollup.config.js | 71 +++++++++++++++++++ packages/playground/server.js | 69 ------------------ packages/playground/src/app.css | 0 packages/playground/src/entry-client.js | 17 ++++- .../{index.html => src/template.html} | 2 +- packages/playground/src/vite-env.d.ts | 2 - packages/playground/svelte.config.js | 5 -- packages/playground/vite.config.js | 40 ----------- pnpm-lock.yaml | 24 +++++++ 10 files changed, 115 insertions(+), 124 deletions(-) create mode 100644 packages/playground/rollup.config.js delete mode 100644 packages/playground/server.js delete mode 100644 packages/playground/src/app.css rename packages/playground/{index.html => src/template.html} (79%) delete mode 100644 packages/playground/src/vite-env.d.ts delete mode 100644 packages/playground/svelte.config.js delete mode 100644 packages/playground/vite.config.js diff --git a/packages/playground/package.json b/packages/playground/package.json index 827f5c025d7c..bbcec4ffe94f 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -4,12 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "node server", - "format": "prettier . --cache --plugin-search-dir=. --write", - "build": "npm run build:client && npm run build:server", - "build:client": "vite build --ssrManifest --outDir dist/client", - "build:server": "vite build --ssr src/entry-server.js --outDir dist/server", - "preview": "cross-env NODE_ENV=production node server" + "dev": "cross-env NODE_OPTIONS=--experimental-vm-modules rollup -cw" }, "dependencies": { "compression": "^1.7.4", @@ -18,6 +13,8 @@ }, "devDependencies": { "cross-env": "^7.0.3", + "rollup": "^3.20.2", + "rollup-plugin-serve": "^2.0.2", "svelte": "workspace:*", "vite": "^4.3.9" } diff --git a/packages/playground/rollup.config.js b/packages/playground/rollup.config.js new file mode 100644 index 000000000000..6b19782af3da --- /dev/null +++ b/packages/playground/rollup.config.js @@ -0,0 +1,71 @@ +import { compile } from '../svelte/src/compiler/index.js'; +import { rollup } from 'rollup'; +import { SourceTextModule } from 'node:vm'; +import { readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import serve from 'rollup-plugin-serve'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); + +const create_svelte_plugin = (ssr = false) => ({ + name: 'svelte', + resolveId(id) { + if (id === 'svelte') { + return path.resolve(__dirname, '../svelte/src/runtime/index.js'); + } else if (id.startsWith('svelte/')) { + return path.resolve(__dirname, `../svelte/src/runtime/${id.slice(7)}/index.js`); + } + }, + transform(code, id) { + if (!id.endsWith('.svelte')) return null; + const compiled = compile(code, { + filename: id, + generate: ssr ? 'ssr' : 'dom', + hydratable: true, + css: 'injected' + }); + return compiled.js; + } +}); + +const client_plugin = create_svelte_plugin(); +const ssr_plugin = create_svelte_plugin(true); + +/** + * @type {import('rollup').RollupOptions} + */ +export default { + input: 'src/entry-client.js', + output: { + dir: 'dist', + format: 'esm', + sourcemap: true + }, + plugins: [ + client_plugin, + serve('dist'), + { + name: 'ssr', + async generateBundle() { + const build = await rollup({ + input: 'src/entry-server.js', + plugins: [ssr_plugin] + }); + + const result = await build.generate({ + format: 'esm' + }); + + const mod = new SourceTextModule(result.output[0].code); + await mod.link(() => {}); + await mod.evaluate(); + const { html } = mod.namespace.render(); + writeFileSync( + 'dist/index.html', + readFileSync('src/template.html', 'utf-8').replace('', html) + ); + writeFileSync('dist/version.json', Date.now().toString()); + } + } + ] +}; diff --git a/packages/playground/server.js b/packages/playground/server.js deleted file mode 100644 index ebd55428c17b..000000000000 --- a/packages/playground/server.js +++ /dev/null @@ -1,69 +0,0 @@ -import fs from 'node:fs/promises'; -import express from 'express'; - -// Constants -const isProduction = process.env.NODE_ENV === 'production'; -const port = process.env.PORT || 5173; -const base = process.env.BASE || '/'; - -// Cached production assets -const templateHtml = isProduction ? await fs.readFile('./dist/client/index.html', 'utf-8') : ''; -const ssrManifest = isProduction - ? await fs.readFile('./dist/client/ssr-manifest.json', 'utf-8') - : undefined; - -// Create http server -const app = express(); - -// Add Vite or respective production middlewares -let vite; -if (!isProduction) { - const { createServer } = await import('vite'); - vite = await createServer({ - server: { middlewareMode: true }, - appType: 'custom', - base - }); - app.use(vite.middlewares); -} else { - const compression = (await import('compression')).default; - const sirv = (await import('sirv')).default; - app.use(compression()); - app.use(base, sirv('./dist/client', { extensions: [] })); -} - -// Serve HTML -app.use('*', async (req, res) => { - try { - const url = req.originalUrl.replace(base, ''); - - let template; - let render; - if (!isProduction) { - // Always read fresh template in development - template = await fs.readFile('./index.html', 'utf-8'); - template = await vite.transformIndexHtml(url, template); - render = (await vite.ssrLoadModule('/src/entry-server.js')).render; - } else { - template = templateHtml; - render = (await import('./dist/server/entry-server.js')).render; - } - - const rendered = await render(url, ssrManifest); - - const html = template - .replace(``, rendered.head ?? '') - .replace(``, rendered.html ?? ''); - - res.status(200).set({ 'Content-Type': 'text/html' }).end(html); - } catch (e) { - vite?.ssrFixStacktrace(e); - console.log(e.stack); - res.status(500).end(e.stack); - } -}); - -// Start http server -app.listen(port, () => { - console.log(`Server started at http://localhost:${port}`); -}); diff --git a/packages/playground/src/app.css b/packages/playground/src/app.css deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/playground/src/entry-client.js b/packages/playground/src/entry-client.js index 932575fc51f9..fd0ae1dab9bf 100644 --- a/packages/playground/src/entry-client.js +++ b/packages/playground/src/entry-client.js @@ -1,7 +1,22 @@ -import './app.css'; import App from './App.svelte'; new App({ target: document.getElementById('app'), hydrate: true }); + +function get_version() { + return fetch('/version.json').then((r) => r.json()); +} +let prev = await get_version(); + +while (true) { + await new Promise((r) => setTimeout(r, 2500)); + try { + const version = await get_version(); + if (prev !== version) { + prev = version; + window.location.reload(); + } + } catch {} +} diff --git a/packages/playground/index.html b/packages/playground/src/template.html similarity index 79% rename from packages/playground/index.html rename to packages/playground/src/template.html index 5a974b1354c5..412145dac481 100644 --- a/packages/playground/index.html +++ b/packages/playground/src/template.html @@ -7,6 +7,6 @@
- + diff --git a/packages/playground/src/vite-env.d.ts b/packages/playground/src/vite-env.d.ts deleted file mode 100644 index 4078e7476a2e..000000000000 --- a/packages/playground/src/vite-env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/packages/playground/svelte.config.js b/packages/playground/svelte.config.js deleted file mode 100644 index 538a94854200..000000000000 --- a/packages/playground/svelte.config.js +++ /dev/null @@ -1,5 +0,0 @@ -import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; - -export default { - preprocess: vitePreprocess() -}; diff --git a/packages/playground/vite.config.js b/packages/playground/vite.config.js deleted file mode 100644 index 08cc7c00b7a8..000000000000 --- a/packages/playground/vite.config.js +++ /dev/null @@ -1,40 +0,0 @@ -import { createFilter, defineConfig } from 'vite'; -import { compile } from '../svelte/src/compiler'; - -const filter = createFilter('**/*.svelte'); - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - { - name: 'svelte', - transform(code, id, options) { - if (!filter(id)) return null; - - const compiled = compile(code, { - filename: id, - generate: options?.ssr ? 'ssr' : 'dom', - hydratable: true, - css: 'injected' - }); - - return compiled.js; - }, - configureServer(server) { - server.watcher.on('change', (path) => { - if (path.includes('src/compiler')) { - // pre-emptively send a full reload so that the request finishes faster - server.ws.send({ - type: 'full-reload' - }); - } - }); - } - } - ], - server: { - watch: { - ignored: ['!**/node_modules/svelte/**'] - } - } -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5d22bb5bb73f..c0c05df59d10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,6 +50,12 @@ importers: cross-env: specifier: ^7.0.3 version: 7.0.3 + rollup: + specifier: ^3.20.2 + version: 3.23.0 + rollup-plugin-serve: + specifier: ^2.0.2 + version: 2.0.2 svelte: specifier: workspace:* version: link:../svelte @@ -3265,6 +3271,12 @@ packages: hasBin: true dev: false + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: true + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3421,6 +3433,11 @@ packages: wrappy: 1.0.2 dev: true + /opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + dev: true + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -3877,6 +3894,13 @@ packages: glob: 7.2.3 dev: true + /rollup-plugin-serve@2.0.2: + resolution: {integrity: sha512-ALqyTbPhlf7FZ5RzlbDvMYvbKuCHWginJkTo6dMsbgji/a78IbsXox+pC83HENdkTRz8OXrTj+aShp3+3ratpg==} + dependencies: + mime: 3.0.0 + opener: 1.5.2 + dev: true + /rollup@3.23.0: resolution: {integrity: sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} From 1ed33890f6a1ba2b9ff380bd7cfccae9961234f5 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 10:10:06 +0545 Subject: [PATCH 12/22] ughh --- packages/playground/package.json | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/playground/package.json b/packages/playground/package.json index bbcec4ffe94f..7936640004a2 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -4,18 +4,11 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "cross-env NODE_OPTIONS=--experimental-vm-modules rollup -cw" - }, - "dependencies": { - "compression": "^1.7.4", - "express": "^4.18.2", - "sirv": "^2.0.3" + "dev": "node --experimental-vm-modules --watch ./node_modules/rollup/dist/bin/rollup -cw" }, "devDependencies": { - "cross-env": "^7.0.3", "rollup": "^3.20.2", "rollup-plugin-serve": "^2.0.2", - "svelte": "workspace:*", - "vite": "^4.3.9" + "svelte": "workspace:*" } } From 9e154fd03c4df024f8af79021379ce2a11e849d0 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 10:21:14 +0545 Subject: [PATCH 13/22] add flag for SSR --- packages/playground/rollup.config.js | 51 ++++++++++++++++------------ 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/packages/playground/rollup.config.js b/packages/playground/rollup.config.js index 6b19782af3da..5f6f4629b285 100644 --- a/packages/playground/rollup.config.js +++ b/packages/playground/rollup.config.js @@ -7,29 +7,38 @@ import serve from 'rollup-plugin-serve'; const __dirname = path.dirname(new URL(import.meta.url).pathname); -const create_svelte_plugin = (ssr = false) => ({ - name: 'svelte', - resolveId(id) { - if (id === 'svelte') { - return path.resolve(__dirname, '../svelte/src/runtime/index.js'); - } else if (id.startsWith('svelte/')) { - return path.resolve(__dirname, `../svelte/src/runtime/${id.slice(7)}/index.js`); +const create_plugin = (ssr = false) => + /** @type {import('rollup').Plugin}*/ ({ + name: 'custom-svelte-' + ssr, + resolveId(id) { + if (id === 'svelte') { + return path.resolve(__dirname, '../svelte/src/runtime/index.js'); + } else if (id.startsWith('svelte/')) { + return path.resolve(__dirname, `../svelte/src/runtime/${id.slice(7)}/index.js`); + } + }, + transform(code, id) { + code = code.replace('import.meta.env.SSR', ssr); + + if (!id.endsWith('.svelte')) { + return { + code, + map: null + }; + } + + const compiled = compile(code, { + filename: id, + generate: ssr ? 'ssr' : 'dom', + hydratable: true, + css: 'injected' + }); + return compiled.js; } - }, - transform(code, id) { - if (!id.endsWith('.svelte')) return null; - const compiled = compile(code, { - filename: id, - generate: ssr ? 'ssr' : 'dom', - hydratable: true, - css: 'injected' - }); - return compiled.js; - } -}); + }); -const client_plugin = create_svelte_plugin(); -const ssr_plugin = create_svelte_plugin(true); +const client_plugin = create_plugin(); +const ssr_plugin = create_plugin(true); /** * @type {import('rollup').RollupOptions} From 6d9de95b0ac2095f2f4c325feaade8b0fc8353cc Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 12:07:35 +0545 Subject: [PATCH 14/22] ... --- packages/playground/src/App.svelte | 6 ++++++ packages/playground/src/entry-client.js | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/playground/src/App.svelte b/packages/playground/src/App.svelte index f5a7a3e4d40e..9a9982192865 100644 --- a/packages/playground/src/App.svelte +++ b/packages/playground/src/App.svelte @@ -1,5 +1,11 @@

Hello {name}!

diff --git a/packages/playground/src/entry-client.js b/packages/playground/src/entry-client.js index fd0ae1dab9bf..49d39998e74f 100644 --- a/packages/playground/src/entry-client.js +++ b/packages/playground/src/entry-client.js @@ -15,7 +15,6 @@ while (true) { try { const version = await get_version(); if (prev !== version) { - prev = version; window.location.reload(); } } catch {} From 6547ddd37c94152084233e03fb3c9a6968c72da3 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 14:58:58 +0545 Subject: [PATCH 15/22] simplify further --- packages/playground/package.json | 2 +- packages/playground/rollup.config.js | 80 ------------------- packages/playground/src/entry-client.js | 3 + packages/playground/src/template.html | 1 + packages/playground/start.js | 100 ++++++++++++++++++++++++ 5 files changed, 105 insertions(+), 81 deletions(-) delete mode 100644 packages/playground/rollup.config.js create mode 100644 packages/playground/start.js diff --git a/packages/playground/package.json b/packages/playground/package.json index 7936640004a2..cf61c552b0c2 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "node --experimental-vm-modules --watch ./node_modules/rollup/dist/bin/rollup -cw" + "dev": "node --experimental-vm-modules --watch start.js" }, "devDependencies": { "rollup": "^3.20.2", diff --git a/packages/playground/rollup.config.js b/packages/playground/rollup.config.js deleted file mode 100644 index 5f6f4629b285..000000000000 --- a/packages/playground/rollup.config.js +++ /dev/null @@ -1,80 +0,0 @@ -import { compile } from '../svelte/src/compiler/index.js'; -import { rollup } from 'rollup'; -import { SourceTextModule } from 'node:vm'; -import { readFileSync, writeFileSync } from 'node:fs'; -import path from 'node:path'; -import serve from 'rollup-plugin-serve'; - -const __dirname = path.dirname(new URL(import.meta.url).pathname); - -const create_plugin = (ssr = false) => - /** @type {import('rollup').Plugin}*/ ({ - name: 'custom-svelte-' + ssr, - resolveId(id) { - if (id === 'svelte') { - return path.resolve(__dirname, '../svelte/src/runtime/index.js'); - } else if (id.startsWith('svelte/')) { - return path.resolve(__dirname, `../svelte/src/runtime/${id.slice(7)}/index.js`); - } - }, - transform(code, id) { - code = code.replace('import.meta.env.SSR', ssr); - - if (!id.endsWith('.svelte')) { - return { - code, - map: null - }; - } - - const compiled = compile(code, { - filename: id, - generate: ssr ? 'ssr' : 'dom', - hydratable: true, - css: 'injected' - }); - return compiled.js; - } - }); - -const client_plugin = create_plugin(); -const ssr_plugin = create_plugin(true); - -/** - * @type {import('rollup').RollupOptions} - */ -export default { - input: 'src/entry-client.js', - output: { - dir: 'dist', - format: 'esm', - sourcemap: true - }, - plugins: [ - client_plugin, - serve('dist'), - { - name: 'ssr', - async generateBundle() { - const build = await rollup({ - input: 'src/entry-server.js', - plugins: [ssr_plugin] - }); - - const result = await build.generate({ - format: 'esm' - }); - - const mod = new SourceTextModule(result.output[0].code); - await mod.link(() => {}); - await mod.evaluate(); - const { html } = mod.namespace.render(); - writeFileSync( - 'dist/index.html', - readFileSync('src/template.html', 'utf-8').replace('', html) - ); - writeFileSync('dist/version.json', Date.now().toString()); - } - } - ] -}; diff --git a/packages/playground/src/entry-client.js b/packages/playground/src/entry-client.js index 49d39998e74f..e62bbf2eb783 100644 --- a/packages/playground/src/entry-client.js +++ b/packages/playground/src/entry-client.js @@ -8,8 +8,11 @@ new App({ function get_version() { return fetch('/version.json').then((r) => r.json()); } + let prev = await get_version(); +// Mom: We have live reloading at home +// Live reloading at home: while (true) { await new Promise((r) => setTimeout(r, 2500)); try { diff --git a/packages/playground/src/template.html b/packages/playground/src/template.html index 412145dac481..2cc688066ff3 100644 --- a/packages/playground/src/template.html +++ b/packages/playground/src/template.html @@ -3,6 +3,7 @@ + <!--app-title--> diff --git a/packages/playground/start.js b/packages/playground/start.js new file mode 100644 index 000000000000..2e03161bf13a --- /dev/null +++ b/packages/playground/start.js @@ -0,0 +1,100 @@ +import { readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { watch } from 'rollup'; +import serve from 'rollup-plugin-serve'; +import * as svelte from '../svelte/src/compiler/index.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); + +const create_plugin = (ssr = false) => { + /** @type {import('rollup').Plugin}*/ + return { + name: 'custom-svelte-' + ssr, + resolveId(id) { + if (id === 'svelte') { + return path.resolve( + __dirname, + ssr ? '../svelte/src/runtime/ssr.js' : '../svelte/src/runtime/index.js' + ); + } else if (id.startsWith('svelte/')) { + return path.resolve(__dirname, `../svelte/src/runtime/${id.slice(7)}/index.js`); + } + }, + transform(code, id) { + code = code.replace('import.meta.env.SSR', ssr); + + if (!id.endsWith('.svelte')) { + return { + code, + map: null + }; + } + + const compiled = svelte.compile(code, { + filename: id, + generate: ssr ? 'ssr' : 'dom', + hydratable: true, + css: 'injected' + }); + return compiled.js; + } + }; +}; + +const client_plugin = create_plugin(); +const ssr_plugin = create_plugin(true); + +// let svelte; +const watcher = watch([ + { + input: 'src/entry-client.js', + output: { + dir: 'dist', + format: 'esm', + sourcemap: true + }, + plugins: [client_plugin, serve('dist')] + }, + { + input: 'src/entry-server.js', + output: { + dir: 'dist-ssr', + format: 'iife', + indent: false + }, + plugins: [ + ssr_plugin, + { + async generateBundle(_, bundle) { + const result = bundle['entry-server.js']; + const mod = (0, eval)(result.code); + const { html } = mod.render(); + + writeFileSync( + 'dist/index.html', + readFileSync('src/template.html', 'utf-8') + .replace('', html) + .replace('', svelte.VERSION) + ); + writeFileSync('dist/version.json', Date.now().toString()); + } + } + ], + onwarn(warning, handler) { + if (warning.code === 'MISSING_NAME_OPTION_FOR_IIFE_EXPORT') return; + handler(warning); + } + } +]); + +watcher + .on('change', (id) => { + console.log(`changed ${id}`); + }) + .on('event', (event) => { + if (event.code === 'ERROR') { + console.error(event.error); + } else if (event.code === 'BUNDLE_END') { + console.log(`Generated ${event.output} in ${event.duration}ms`); + } + }); From 221b5e0d7e7896428b2fe79f8668a8f69adf0fb8 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 15:20:45 +0545 Subject: [PATCH 16/22] configure launch.json --- .gitignore | 3 ++- .vscode/launch.json | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 .vscode/launch.json diff --git a/.gitignore b/.gitignore index 8a4d1d070e8f..cc2e05ea5f5e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .idea .DS_Store -.vscode +.vscode/* +!.vscode/launch.json node_modules .eslintcache diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000000..4fd54da74861 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Playground: Browser", + "url": "http://localhost:10001" + }, + { + "type": "node", + "request": "launch", + "name": "Playground: Server", + "outputCapture": "std", + "program": "start.js", + "cwd": "${workspaceFolder}/packages/playground", + "cascadeTerminateToConfigurations": ["Playground: Browser"] + } + ], + "compounds": [ + { + "name": "Playground: Full", + "configurations": ["Playground: Server", "Playground: Browser"] + } + ] +} From 99a10a8dd59a674e1f8e08bf11b438c6b320f7a5 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 15:22:21 +0545 Subject: [PATCH 17/22] add debugger info to readme --- packages/playground/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/playground/README.md b/packages/playground/README.md index 0f8a71184529..6ac0393720cc 100644 --- a/packages/playground/README.md +++ b/packages/playground/README.md @@ -2,4 +2,6 @@ You may use this package to experiment with your changes to Svelte. To prevent any changes you make in this directory from being accidentally committed, run `git update-index --skip-worktree ./**/*.*` in this directory. -If you would actually like to make some changes to the files here for everyone then run `git update-index --no-skip-worktree ./**/*.*` before committing. \ No newline at end of file +If you would actually like to make some changes to the files here for everyone then run `git update-index --no-skip-worktree ./**/*.*` before committing. + +If you're using VS Code, you can use the "Playground: Full" launch configuration to run the playground and attach the debugger to both the compiler and the browser. From 5b046b8a1a903b140a44caae6136e77a75f488a3 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 15:32:37 +0545 Subject: [PATCH 18/22] remove vm modules flag --- packages/playground/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playground/package.json b/packages/playground/package.json index cf61c552b0c2..9c1f03db2050 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "node --experimental-vm-modules --watch start.js" + "dev": "node --watch start.js" }, "devDependencies": { "rollup": "^3.20.2", From dc8b4d9dcb7167ea5f5f3fdc27c4e1f8fa401e0f Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 15:33:30 +0545 Subject: [PATCH 19/22] use replaceAll instead of replace --- packages/playground/start.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playground/start.js b/packages/playground/start.js index 2e03161bf13a..7adcfc9f2f6d 100644 --- a/packages/playground/start.js +++ b/packages/playground/start.js @@ -21,7 +21,7 @@ const create_plugin = (ssr = false) => { } }, transform(code, id) { - code = code.replace('import.meta.env.SSR', ssr); + code = code.replaceAll('import.meta.env.SSR', ssr); if (!id.endsWith('.svelte')) { return { From 7bf4fcafb64f95a878efb367e418ece26edab145 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Sun, 28 May 2023 17:19:56 +0545 Subject: [PATCH 20/22] tidy up --- packages/playground/src/App.svelte | 14 ++------------ packages/playground/start.js | 10 +++++----- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/packages/playground/src/App.svelte b/packages/playground/src/App.svelte index 9a9982192865..944dd1235a61 100644 --- a/packages/playground/src/App.svelte +++ b/packages/playground/src/App.svelte @@ -1,13 +1,3 @@ - - -

Hello {name}!

- - + \ No newline at end of file diff --git a/packages/playground/start.js b/packages/playground/start.js index 7adcfc9f2f6d..1c88bb08d92b 100644 --- a/packages/playground/start.js +++ b/packages/playground/start.js @@ -4,10 +4,10 @@ import { watch } from 'rollup'; import serve from 'rollup-plugin-serve'; import * as svelte from '../svelte/src/compiler/index.js'; -const __dirname = path.dirname(new URL(import.meta.url).pathname); +const __dirname = new URL('.', import.meta.url).pathname; -const create_plugin = (ssr = false) => { - /** @type {import('rollup').Plugin}*/ +/** @returns {import('rollup').Plugin}*/ +function create_plugin(ssr = false) { return { name: 'custom-svelte-' + ssr, resolveId(id) { @@ -36,15 +36,15 @@ const create_plugin = (ssr = false) => { hydratable: true, css: 'injected' }); + return compiled.js; } }; -}; +} const client_plugin = create_plugin(); const ssr_plugin = create_plugin(true); -// let svelte; const watcher = watch([ { input: 'src/entry-client.js', From d1ea4ec61c723c430c777e2b9255527f31bb203e Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Mon, 5 Jun 2023 11:05:07 +0545 Subject: [PATCH 21/22] fix: make it run --- packages/playground/src/App.svelte | 6 +++--- packages/playground/start.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/playground/src/App.svelte b/packages/playground/src/App.svelte index 944dd1235a61..ab87de6d9679 100644 --- a/packages/playground/src/App.svelte +++ b/packages/playground/src/App.svelte @@ -1,3 +1,3 @@ - - - \ No newline at end of file +
+ Hello world! +
\ No newline at end of file diff --git a/packages/playground/start.js b/packages/playground/start.js index 1c88bb08d92b..4144ba97acfd 100644 --- a/packages/playground/start.js +++ b/packages/playground/start.js @@ -9,7 +9,7 @@ const __dirname = new URL('.', import.meta.url).pathname; /** @returns {import('rollup').Plugin}*/ function create_plugin(ssr = false) { return { - name: 'custom-svelte-' + ssr, + name: 'custom-svelte-ssr-' + ssr, resolveId(id) { if (id === 'svelte') { return path.resolve( From 6a510e3fb93f3d7b119356b67a56118bc2bf0856 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Tue, 6 Jun 2023 06:40:38 +0545 Subject: [PATCH 22/22] add watch to launch config --- .vscode/launch.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.vscode/launch.json b/.vscode/launch.json index 4fd54da74861..2e22a5ab9b7e 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,6 +10,7 @@ { "type": "node", "request": "launch", + "runtimeArgs": ["--watch"], "name": "Playground: Server", "outputCapture": "std", "program": "start.js",