diff --git a/.gitignore b/.gitignore index 32582b2774..228136cbc8 100644 --- a/.gitignore +++ b/.gitignore @@ -23,14 +23,3 @@ node_modules _actual*.* _output /types - -/site/.svelte-kit/ -/site/build/ -/site/.env -/site/static/svelte-app.json -/site/static/contributors.jpg -/site/static/donors.jpg -/site/static/workers/ -/site/scripts/svelte-app/ -/site/src/routes/_contributors.js -/site/src/routes/_donors.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c4a4ab92e..1ffb41e35b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,17 @@ # Svelte changelog -## Unreleased +## 3.44.3 + +* Fix `bind:this` binding inside `onMount` for manually instantiated component ([#6760](https://github.com/sveltejs/svelte/issues/6760)) +* Prevent cursor jumps with one-way binding for other `type="text"`-like ``s ([#6941](https://github.com/sveltejs/svelte/pull/6941)) +* Exclude `async` loops from `loopGuardTimeout` ([#6945](https://github.com/sveltejs/svelte/issues/6945)) + +## 3.44.2 * Fix overly restrictive preprocessor types ([#6904](https://github.com/sveltejs/svelte/pull/6904)) * More specific typing for crossfade function - returns a tuple, not an array ([#6926](https://github.com/sveltejs/svelte/issues/6926)) +* Add `URLSearchParams` as a known global ([#6938](https://github.com/sveltejs/svelte/pull/6938)) +* Add `types` field to `exports` map ([#6939](https://github.com/sveltejs/svelte/issues/6939)) ## 3.44.1 diff --git a/README.md b/README.md index 8d263abeb9..fa66ac6cc9 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ npm run test -- -g transition ## svelte.dev -The source code for https://svelte.dev, including all the documentation, lives in the [site](site) directory. The site is built with [Sapper](https://sapper.svelte.dev). +The source code for https://svelte.dev, including all the documentation, lives in the [site](site) directory. The site is built with [SvelteKit](https://kit.svelte.dev). ### Is svelte.dev down? diff --git a/package-lock.json b/package-lock.json index b222eba950..0aeed9166d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "svelte", - "version": "3.44.1", + "version": "3.44.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "svelte", - "version": "3.44.1", + "version": "3.44.3", "license": "MIT", "devDependencies": { "@ampproject/remapping": "^0.3.0", diff --git a/package.json b/package.json index 5ddceacbce..ee6c781860 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "svelte", - "version": "3.44.1", + "version": "3.44.3", "description": "Cybernetically enhanced web apps", "module": "index.mjs", "main": "index", @@ -22,6 +22,7 @@ "exports": { "./package.json": "./package.json", ".": { + "types": "./types/runtime/index.d.ts", "browser": { "import": "./index.mjs", "require": "./index.js" @@ -34,22 +35,27 @@ "require": "./index.js" }, "./compiler": { + "types": "./types/compiler/index.d.ts", "import": "./compiler.mjs", "require": "./compiler.js" }, "./animate": { + "types": "./types/runtime/animate/index.d.ts", "import": "./animate/index.mjs", "require": "./animate/index.js" }, "./easing": { + "types": "./types/runtime/easing/index.d.ts", "import": "./easing/index.mjs", "require": "./easing/index.js" }, "./internal": { + "types": "./types/runtime/internal/index.d.ts", "import": "./internal/index.mjs", "require": "./internal/index.js" }, "./motion": { + "types": "./types/runtime/motion/index.d.ts", "import": "./motion/index.mjs", "require": "./motion/index.js" }, @@ -57,14 +63,17 @@ "require": "./register.js" }, "./store": { + "types": "./types/runtime/store/index.d.ts", "import": "./store/index.mjs", "require": "./store/index.js" }, "./transition": { + "types": "./types/runtime/transition/index.d.ts", "import": "./transition/index.mjs", "require": "./transition/index.js" }, "./ssr": { + "types": "./types/runtime/index.d.ts", "import": "./ssr.mjs", "require": "./ssr.js" } diff --git a/site/.dockerignore b/site/.dockerignore deleted file mode 100644 index c8dd6b5308..0000000000 --- a/site/.dockerignore +++ /dev/null @@ -1,7 +0,0 @@ -/* -!/Dockerfile -!/package.json -!/package-lock.json -!/build -!/static -!/content diff --git a/site/.env.example b/site/.env.example deleted file mode 100644 index ce4a906653..0000000000 --- a/site/.env.example +++ /dev/null @@ -1,13 +0,0 @@ -NODE_ENV= - -PORT=3000 -BASEURL=http://localhost:3000 -GITHUB_CLIENT_ID= -GITHUB_CLIENT_SECRET= -VITE_MAPBOX_ACCESS_TOKEN= - -PGHOST=localhost -PGPORT=5432 -PGUSER=username -PGPASSWORD=password -PGDATABASE=database_name diff --git a/site/.eslintrc.cjs b/site/.eslintrc.cjs deleted file mode 100644 index 255b8af9c5..0000000000 --- a/site/.eslintrc.cjs +++ /dev/null @@ -1,58 +0,0 @@ -module.exports = { - root: true, - rules: { - indent: [2, 'tab', { SwitchCase: 1 }], - semi: [2, 'always'], - 'keyword-spacing': [2, { before: true, after: true }], - 'space-before-blocks': [2, 'always'], - 'no-mixed-spaces-and-tabs': [2, 'smart-tabs'], - 'no-cond-assign': 0, - 'no-unused-vars': 2, - 'object-shorthand': [2, 'always'], - 'no-const-assign': 2, - 'no-class-assign': 2, - 'no-this-before-super': 2, - 'no-var': 2, - 'no-unreachable': 2, - 'valid-typeof': 2, - 'quote-props': [2, 'as-needed'], - 'one-var': [2, 'never'], - 'prefer-arrow-callback': 2, - 'prefer-const': [2, { destructuring: 'all' }], - 'arrow-spacing': 2, - 'no-inner-declarations': 0, - 'require-atomic-updates': 0 - }, - env: { - es6: true, - browser: true, - node: true, - mocha: true - }, - extends: [ - 'eslint:recommended', - 'plugin:import/errors', - 'plugin:import/warnings' - ], - plugins: ['svelte3'], - overrides: [ - { - files: ['*.svelte'], - processor: 'svelte3/svelte3' - } - ], - parserOptions: { - ecmaVersion: 9, - sourceType: 'module' - }, - settings: { - 'import/core-modules': ['svelte'], - 'svelte3/compiler': (() => { - try { - return require('svelte/compiler'); - } catch (e) { - return null; - } - })() - } -}; diff --git a/site/.gcloudignore b/site/.gcloudignore deleted file mode 100644 index c46042a27e..0000000000 --- a/site/.gcloudignore +++ /dev/null @@ -1 +0,0 @@ -#!include:.dockerignore diff --git a/site/Dockerfile b/site/Dockerfile deleted file mode 100644 index 493cfe3f93..0000000000 --- a/site/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -# IMPORTANT: Don't use this Dockerfile in your own projects without also looking at the .dockerignore file. -# Without an appropriate .dockerignore, this Dockerfile will copy a large number of unneeded files into your image. - -FROM mhart/alpine-node:14 - -# install dependencies -WORKDIR /app -COPY package.json package-lock.json ./ -RUN npm ci --production - -### -# Only copy over the Node pieces we need -# ~> Saves 35MB -### -FROM mhart/alpine-node:slim-14 - -WORKDIR /app -COPY --from=0 /app . -COPY . . - -EXPOSE 3000 -CMD ["node", "build"] diff --git a/site/Makefile b/site/Makefile deleted file mode 100644 index ebf7223f41..0000000000 --- a/site/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -HASH := `git rev-parse --short HEAD` - -SERVICE := svelte-website -PROJECT := svelte-dev - -IMAGE := gcr.io/$(PROJECT)/$(SERVICE):$(HASH) - -sveltekit: - @echo "\n~> updating template & contributors list" - @npm run update - @echo "\n~> building SvelteKit app" - @npm run build - - -docker: - @echo "\n~> building docker image" - @gcloud builds submit --project $(PROJECT) -t $(IMAGE) - - -deploy: sveltekit docker - @echo "\n~> deploying $(SERVICE) to Cloud Run servers" - @gcloud run deploy $(SERVICE) --project $(PROJECT) --allow-unauthenticated --platform managed --region us-central1 --image $(IMAGE) --memory=512Mi diff --git a/site/README.md b/site/README.md deleted file mode 100644 index 4c1d462a90..0000000000 --- a/site/README.md +++ /dev/null @@ -1,84 +0,0 @@ -## Running locally - -Set up the site sub-project: - -```bash -git clone https://github.com/sveltejs/svelte.git -cd site -npm ci -npm run dev -``` - -and navigate to [localhost:3000](http://localhost:3000). - -The first time you run the site locally, it will update the list of Contributors and REPL dependencies. After this it won't run again unless you force it by running: - -```bash -npm run update -``` - -## Running using the local copy of Svelte - -By default, the REPL will fetch the most recent version of Svelte from https://unpkg.com/svelte. When running the site locally, you can also use your local copy of Svelte. - -To produce the proper browser-compatible UMD build of the compiler, you will need to run `npm run build` (or `npm run dev`) in the root of this repository with the `PUBLISH` environment variable set to any non-empty string: - -```bash -git clone https://github.com/sveltejs/svelte.git -cd svelte -npm ci -PUBLISH=1 npm run build -cd site -npm ci -npm run dev -``` - -Then visit the REPL at [localhost:3000/repl?version=local](http://localhost:3000/repl?version=local). Please note that the local REPL only works with `npm run dev` and not when building the site for production usage. - -## REPL GitHub integration - -In order for the REPL's GitHub integration to work properly when running locally, you will need to: -- [create a GitHub OAuth app](https://github.com/settings/developers): - - set `Authorization callback URL` to `http://localhost:3000/auth/callback`; - - set `Application name` as you like, and `Homepage URL` as `http://localhost:3000/`; - - create the app and take note of `Client ID` and `Client Secret` -- in this repo, create `site/.env` containing: - ``` - GITHUB_CLIENT_ID=[your app's Client ID] - GITHUB_CLIENT_SECRET=[your app's Client Secret] - BASEURL=http://localhost:3000 - ``` - -## Building the site - -To build the website, run `npm run build`. The output can be found in `build`. - -## Testing - -Tests can be run using `npm run test`. - - -## Linking `@sveltejs/site-kit` and `@sveltejs/svelte-repl` - -This site depends on `@sveltejs/site-kit` (a collection of styles, components and icons used in common by *.svelte.dev websites), and `@sveltejs/svelte-repl`. - -In order to work on features that depend on those packages, you need to [link](https://docs.npmjs.com/cli/link) their repositories: - -- `cd ` -- `git clone https://github.com/sveltejs/site-kit` -- `git clone https://github.com/sveltejs/svelte-repl` -- `cd /site-kit` -- `npm link` -- `cd /svelte-repl` -- `npm link` -- `cd /site` -- `npm link @sveltejs/site-kit` -- `npm link @sveltejs/svelte-repl` - - - -## Translating the API docs - -Anchors are automatically generated using headings in the documentation and by default (for the english language) they are latinised to make sure the URL is always conforming to RFC3986. - -If we need to translate the API documentation to a language using unicode chars, we can setup this app to export the correct anchors by setting up `SLUG_PRESERVE_UNICODE` to `true` in `config.js`. diff --git a/site/config.js b/site/config.js deleted file mode 100644 index 097bd173a8..0000000000 --- a/site/config.js +++ /dev/null @@ -1,2 +0,0 @@ -export const SLUG_PRESERVE_UNICODE = false; -export const SLUG_SEPARATOR = '_'; diff --git a/site/content/blog/2020-12-01-whats-new-in-svelte-december-2020.md b/site/content/blog/2020-12-01-whats-new-in-svelte-december-2020.md index 58ee10cb18..b8b1a9d13a 100644 --- a/site/content/blog/2020-12-01-whats-new-in-svelte-december-2020.md +++ b/site/content/blog/2020-12-01-whats-new-in-svelte-december-2020.md @@ -10,7 +10,7 @@ It's the last "What's new in Svelte" of the year and there's lots to celebrate! ## New features & impactful bug fixes 1. `$$props`, `$$restProps`, and `$$slots` are all now supported in custom web components (**3.29.5**, [Example](https://svelte.dev/repl/ad8e6f39cd20403dacd1be84d71e498d?version=3.29.5)) and `slot` components now support spread props: `` (**3.30.0**) -2. A new `hasContext` lifecycle function makes it easy to check whether a `key` has been set in the context of a parent component (**3.30.0** & **3.30.1**, [Docs](https://svelte.dev/docs#hasContext)) +2. A new `hasContext` lifecycle function makes it easy to check whether a `key` has been set in the context of a parent component (**3.30.0** & **3.30.1**, [Docs](https://svelte.dev/docs#run-time-svelte-hascontext)) 3. There is now a new `SvelteComponentTyped` class which makes it easier to add strongly typed components that extend base Svelte components. Component library and framework authors rejoice! An example: `export class YourComponent extends SvelteComponentTyped<{aProp: boolean}, {click: MouseEvent}, {default: {aSlot: string}}> {}` (**3.31.0**, [RFC](https://github.com/sveltejs/rfcs/pull/37)) 4. Transitions within `{:else}` blocks should now complete successfully (**3.29.5**, [Example](https://svelte.dev/repl/49cef205e5da459594ef2eafcbd41593?version=3.29.5)) 5. Svelte now includes an export map, which explicitly states which files can be imported from its npm package (**3.29.5** with some fixes in **3.29.6**, **3.29.7** and **3.30.0**) diff --git a/site/content/blog/2021-03-01-whats-new-in-svelte-march-2021.md b/site/content/blog/2021-03-01-whats-new-in-svelte-march-2021.md index 8ae5c9d625..d009d37391 100644 --- a/site/content/blog/2021-03-01-whats-new-in-svelte-march-2021.md +++ b/site/content/blog/2021-03-01-whats-new-in-svelte-march-2021.md @@ -10,13 +10,13 @@ Lots to cover this month with releases from across the Svelte ecosystem. Most im Let's dive into the news 🐬 ## What's new in `sveltejs/svelte` -* SSR store handling has been reworked to subscribe and unsubscribe as in DOM mode. SSR stores should work much more consistently now (**3.31.2**, see [custom stores](https://svelte.dev/examples#custom-stores) and [Server-side component API ](https://svelte.dev/docs#Server-side_component_API)) +* SSR store handling has been reworked to subscribe and unsubscribe as in DOM mode. SSR stores should work much more consistently now (**3.31.2**, see [custom stores](https://svelte.dev/examples#custom-stores) and [Server-side component API ](https://svelte.dev/docs#run-time-server-side-component-api)) * Multiple instances of the same action are now allowed on an element (**3.32.0**, [example](https://svelte.dev/repl/01a14375951749dab9579cb6860eccde?version=3.32.0)) * The new `foreign` namespace should make it easier for alternative compile targets (like Svelte Native and SvelteGUI) by disabling certain HTML5-specific behaviour and checks (**3.32.0**, [more info](https://github.com/sveltejs/svelte/pull/5652)) * Support for inline comment sourcemaps in code from preprocessors (**3.32.0**) * Destructured defaults are now allowed to refer to other variables (**3.33.0**, [example](https://svelte.dev/repl/0ee7227e1b45465b9b47d7a5ae2d1252?version=3.33.0)) * Custom elements will now call `onMount` functions when connecting and clean up when disconnecting (**3.33.0**, checkout [this PR](https://github.com/sveltejs/svelte/pull/4522) for an interesting conversation on how folks are using Svelte with Web Components) -* A `cssHash` option has been added to the compiler options to control the classname used for CSS scoping (**3.34.0**, [docs](https://svelte.dev/docs#svelte_compile)) +* A `cssHash` option has been added to the compiler options to control the classname used for CSS scoping (**3.34.0**, [docs](https://svelte.dev/docs#compile-time-svelte-compile)) * Continued improvement to Typescript definitions For a complete list of changes, including bug fixes and links to PRs, check out [the CHANGELOG](https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md) diff --git a/site/content/blog/2021-04-01-whats-new-in-svelte-april-2021.md b/site/content/blog/2021-04-01-whats-new-in-svelte-april-2021.md index d21c9e907e..b5a360dee5 100644 --- a/site/content/blog/2021-04-01-whats-new-in-svelte-april-2021.md +++ b/site/content/blog/2021-04-01-whats-new-in-svelte-april-2021.md @@ -13,7 +13,7 @@ Two projects that have been months (even years) in the making have made their wa Want to learn more about how to get started, what's different compared to Sapper, new features and migration paths? Check out this week's [episode of Svelte Radio](https://www.svelteradio.com/episodes/svelte-kit-public-beta) for a deep dive with Antony, Kev and Swyx. ## New in Svelte & Language Tools -- Slotted components, including `` lets component consumers target specific slots with rich content (**Svelte 3.35.0, Language Tools [104.5.0](https://github.com/sveltejs/language-tools/releases/tag/extensions-104.5.0)**, check out the [docs](https://svelte.dev/docs#svelte_fragment) and the [tutorial](https://svelte.dev/tutorial/svelte-fragment)) +- Slotted components, including `` lets component consumers target specific slots with rich content (**Svelte 3.35.0, Language Tools [104.5.0](https://github.com/sveltejs/language-tools/releases/tag/extensions-104.5.0)**, check out the [docs](https://svelte.dev/docs#template-syntax-svelte-fragment) and the [tutorial](https://svelte.dev/tutorial/svelte-fragment)) - Linked editing now works for HTML in Svelte files (**Language Tools, [104.6.0](https://github.com/sveltejs/language-tools/releases/tag/extensions-104.6.0)**) - Type definitions `svelte.d.ts` are now resolved in order, allowing library authors to ship type definitions with their svelte components (**Language Tools, [104.7.0](https://github.com/sveltejs/language-tools/releases/tag/extensions-104.7.0)**) - [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte) is available for general use of Svelte in Vite. `npm init @vitejs/app` includes Svelte options using this plugin. diff --git a/site/content/blog/2021-05-01-whats-new-in-svelte-may-2021.md b/site/content/blog/2021-05-01-whats-new-in-svelte-may-2021.md index 5f23091465..924e52f287 100644 --- a/site/content/blog/2021-05-01-whats-new-in-svelte-may-2021.md +++ b/site/content/blog/2021-05-01-whats-new-in-svelte-may-2021.md @@ -1,5 +1,5 @@ --- -title: What's new in Svelte: May 2021 +title: "What's new in Svelte: May 2021" description: Working toward SvelteKit 1.0 and a showcase full of SvelteKit sites! author: Daniel Sandoval authorURL: https://desandoval.net diff --git a/site/content/blog/2021-06-01-whats-new-in-svelte-june-2021.md b/site/content/blog/2021-06-01-whats-new-in-svelte-june-2021.md index ab55f497f7..d1e3af95fb 100644 --- a/site/content/blog/2021-06-01-whats-new-in-svelte-june-2021.md +++ b/site/content/blog/2021-06-01-whats-new-in-svelte-june-2021.md @@ -1,5 +1,5 @@ --- -title: What's new in Svelte: June 2021 +title: "What's new in Svelte: June 2021" description: Progress towards SvelteKit 1.0 and tighter TypeScript/Svelte integrations in language tools author: Daniel Sandoval authorURL: https://desandoval.net diff --git a/site/content/blog/2021-07-01-whats-new-in-svelte-july-2021.md b/site/content/blog/2021-07-01-whats-new-in-svelte-july-2021.md index fa6440ade4..c7510143a8 100644 --- a/site/content/blog/2021-07-01-whats-new-in-svelte-july-2021.md +++ b/site/content/blog/2021-07-01-whats-new-in-svelte-july-2021.md @@ -1,5 +1,5 @@ --- -title: What's new in Svelte: July 2021 +title: "What's new in Svelte: July 2021" description: Keeping cool with fixes, TypeScript tooling and tonnes of new features author: Daniel Sandoval authorURL: https://desandoval.net diff --git a/site/content/blog/2021-08-01-whats-new-in-svelte-august-2021.md b/site/content/blog/2021-08-01-whats-new-in-svelte-august-2021.md index e5eb87f14d..0dd54ca22f 100644 --- a/site/content/blog/2021-08-01-whats-new-in-svelte-august-2021.md +++ b/site/content/blog/2021-08-01-whats-new-in-svelte-august-2021.md @@ -1,5 +1,5 @@ --- -title: What's new in Svelte: August 2021 +title: "What's new in Svelte: August 2021" description: Shadow DOM, export and await - oh my! author: Daniel Sandoval authorURL: https://desandoval.net diff --git a/site/content/blog/2021-09-01-whats-new-in-svelte-september-2021.md b/site/content/blog/2021-09-01-whats-new-in-svelte-september-2021.md index b3251e6cd5..87d1a838fe 100644 --- a/site/content/blog/2021-09-01-whats-new-in-svelte-september-2021.md +++ b/site/content/blog/2021-09-01-whats-new-in-svelte-september-2021.md @@ -1,5 +1,5 @@ --- -title: What's new in Svelte: September 2021 +title: "What's new in Svelte: September 2021" description: StackOverflow's most loved web framework author: Daniel Sandoval authorURL: https://desandoval.net diff --git a/site/content/blog/2021-10-01-whats-new-in-svelte-october-2021.md b/site/content/blog/2021-10-01-whats-new-in-svelte-october-2021.md index 78fa05dbe2..5ffd65bb0a 100644 --- a/site/content/blog/2021-10-01-whats-new-in-svelte-october-2021.md +++ b/site/content/blog/2021-10-01-whats-new-in-svelte-october-2021.md @@ -1,5 +1,5 @@ --- -title: What's new in Svelte: October 2021 +title: "What's new in Svelte: October 2021" description: A whole year of "What's new in Svelte" author: Daniel Sandoval authorURL: https://desandoval.net diff --git a/site/content/blog/2021-11-01-whats-new-in-svelte-november-2021.md b/site/content/blog/2021-11-01-whats-new-in-svelte-november-2021.md index 7c0fd812c1..12a89a639c 100644 --- a/site/content/blog/2021-11-01-whats-new-in-svelte-november-2021.md +++ b/site/content/blog/2021-11-01-whats-new-in-svelte-november-2021.md @@ -1,5 +1,5 @@ --- -title: What's new in Svelte: November 2021 +title: "What's new in Svelte: November 2021" description: Over 5000 stars to light up the showcase author: Daniel Sandoval authorURL: https://desandoval.net diff --git a/site/content/blog/2021-12-01-whats-new-in-svelte-december-2021.md b/site/content/blog/2021-12-01-whats-new-in-svelte-december-2021.md new file mode 100644 index 0000000000..f50f25b0f4 --- /dev/null +++ b/site/content/blog/2021-12-01-whats-new-in-svelte-december-2021.md @@ -0,0 +1,91 @@ +--- +title: "What's new in Svelte: December 2021" +description: "Svelte Summit Fall 2021 Recap, Rich Harris joins Vercel, and Kevin goes full-time on Svelte Society" +author: Daniel Sandoval +authorURL: https://desandoval.net +--- + +With SvelteKit getting more and more stable each day, there's not much to cover in terms of code changes other than bug fixes... So, in this month's newsletter, we'll be covering Svelte Summit Fall 2021! + +If you want to dive deep into the last month's worth of bug fixes, check out the [Svelte](https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md) and [SvelteKit](https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md) changelogs, respectively. + + +## What happened at Svelte Summit? + +If you missed Svelte Summit, you can watch the entire live stream on [YouTube](https://www.youtube.com/watch?v=1Df-9EKvZr0) and catch a recap in the [#svelte-summit channel on Discord](https://discord.gg/YmHcdnhu). + +Here are the highlights: +- [Rich Harris](https://twitter.com/rich_harris) took us through a tour of Svelte's history and announced [his move to Vercel](https://vercel.com/blog/vercel-welcomes-rich-harris-creator-of-svelte) - where he will be helping maintain Svelte full-time! ([20:00](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=1200s)) +- [Steph Dietz](https://twitter.com/steph_dietz_) explained how Svelte's simple abstractions makes it easy for beginners and experts alike to learn and use JavaScript - without the boilerplate ([29:00](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=1740s)) +- [Kevin Bridges](https://twitter.com/kevinast) dove deep into Svelte's reactivity logic by visualizing it through `ReflectiveCounter` and showing how to "fine tune" it, as needed. A full "syllabus" for the presentation is available on [Kevin's site](https://wiibridges.com/presentations/ResponsiveSvelte/). ([42:55](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=2575s)) +- [Mateo Morris](https://twitter.com/_mateomorris) launched [Primo](https://primo.af/), an all-in-one SvelteKit CMS to help build and manage static sites ([1:12:34](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=4354s)) +- [Guillermo Rauch](https://vercel.com/about/rauchg) explained Vercel's commitment to Svelte, what it means to have Rich on the team, and what's coming next from the company... ([1:21:54](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=4914s)) +- [Geoff Rich](https://twitter.com/geoffrich_) introduced various ways to modify motion and transitions within Svelte to be more accessible to all users of the web. Slides and a full transcription of the talk are available on [Geoff's site](https://geoffrich.net/posts/svelte-summit-2021/). ([1:32:30](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=5550s)) +- [Dean Fogarty](https://df.id.au/) demoed a number of different use-cases for custom stores - transforming data to and from storage mechanisms within Svelte. Transcript and code is available on [Dean's GitHub](https://github.com/angrytongan/svelte-summit-2021). ([1:43:06](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=6186s)) +- [Kellen Mace](https://twitter.com/kellenmace) shared how we can let content creators keep using WordPress, while leveraging Svelte on the frontend to provide a phenomenal user experience ([1:49:30](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=6570ss)) +- [Ben Holmes](https://twitter.com/bholmesdev) explained the "islands" architecture and how 11ty + [Slinkity](https://slinkity.dev/) can bring these islands to any HTML template ([2:17:15](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=8235s)) +- [Scott Tolinski](https://twitter.com/stolinski) shared the lessons learned from rewriting the React-based LevelUpTutorials in Svelte and "found developer bliss" ([3:16:35](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=11795s)) +- [Svelte Sirens](https://sveltesirens.dev) was announced as the new Svelte community for women, non-binary and allies. Their first event was on November 29th - all future events can be found on [the Svelte Sirens website](https://sveltesirens.dev/events) ([3:50:45](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=13845s)) +- [Rich Harris](https://twitter.com/rich_harris) discussed creating libraries with SvelteKit, better ways to link packages when developing, and how SvelteKit helps with modern JavaScript library development ([3:56:00](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=14160s)) +- [Ken Kunz](https://twitter.com/kennethkunz) explained how finite state machines (and the svelte-fsm library) can make managing Svelte component states more... manageable. Examples from the talk are available on [Ken's GitHub](https://github.com/kenkunz/svelte-fsm/wiki/Examples). ([4:07:18](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=14838s)) +- [Austin Crim](https://twitter.com/crim_codes) connected learning to code on the web to learning how to play an instrument. By giving learners early wins and introducing the fundamentals through real-world apps, learning Svelte (and the fundamentals underneath) doesn't have to be a chore ([4:21:50](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=15710s)) +- [Jesse Skinner](https://twitter.com/JesseSkinner) brought our legacy apps into the future by explaining how to use (and reuse) Svelte components within React (and even jQuery!) projects ([4:32:30](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=16350s)) +- [Jim Fisk](https://twitter.com/jimafisk) and [Stephanie Luz](https://stephanie-luz.medium.com/) introduced [Plenti](https://plenti.co/) and its theming tools to make building new Svelte sites much faster ([4:59:00](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=17940s)) +- [Evyatar Alush](https://twitter.com/evyataral) helped us all make (and maintain) better forms using a powerful validation library called [Vest](https://github.com/ealush/vest) ([5:08:55](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=18535s)) +- Dominik G. presented a fresh take on icon libraries - one that reduces the bundle size of applications and opens up the entire iconify library for use in any Svelte app ([5:30:04](https://www.youtube.com/watch?v=1Df-9EKvZr0&t=19804s)) + +Thanks to [Kevin](https://twitter.com/kevmodrome) and all the Svelte Society volunteers for pulling together such an amazing event! Excitingly, [Kevin announced](https://twitter.com/kevmodrome/status/1463151477174714373) after the event that he will now be working full-time on Svelte Society! You can check out all the talks, broken up into individual videos for convenience, in [this Svelte Society YouTube Playlist](https://www.youtube.com/playlist?list=PL8bMgX1kyZTg2bI9IOMgfBc8lrU3v2itt). + +If you have feedback on the Svelte Summit, Kev is [looking for feedback on the Svelte subreddit](https://www.reddit.com/r/sveltejs/comments/qzgo3k/svelte_summit_feedback/) 👀 + + +--- + +## Community Showcase + +**Apps & Sites** +- [pixeldrain](https://github.com/Fornaxian/pixeldrain_web) is a free-to-use file sharing platform +- [LifeHash](http://lifehash.info/) generates beautiful visual hashes from Blockchain Commons +- [simple-cloud-music](https://github.com/dufu1991/simple-cloud-music) is a lightweight third-party NetEase cloud music player for modern browsers (likely only works on Chrome) +- [palette.rocks](https://palette.rocks/) is a color palette generator with contrast-checking built-in +- [Kadium](https://github.com/probablykasper/kadium) is an app for staying on top of YouTube channel uploads +- [Multi-Monitor Calculator](https://multimonitorcalculator.com/) is a tool for planning your multi-monitor setup +- [Your Home](https://yourhome.fb.com/) is an interactive overview of Facebook's privacy settings +- [Svelte Crush](https://svelte-crush.netlify.app/) is a Candy Crush style match-3 game +- [100.000 Corona deaths in Germany](https://twitter.com/h_i_g_s_c_h/status/1463767113563353089?s=20) is a visualization made for Spiegel Gesundheit + +**Looking for a Svelte project to work on? Interested in helping make Svelte's presence on the web better?** Check out [the list of open issues](https://github.com/svelte-society/sveltesociety-2021/issues) if you'd like to contribute to the Svelte Society rewrite in SvelteKit. + + +**Videos, Blogs and Podcasts** +- [How To Make and Publish a Svelte Library](https://www.youtube.com/watch?v=_TymiadmPrc) +- [SvelteKit is now fully supported in WebContainers](https://blog.stackblitz.com/posts/sveltekit-supported-in-webcontainers/) +- [Introducing Svelte, and Comparing Svelte with React and Vue](https://joshcollinsworth.com/blog/introducing-svelte-comparing-with-react-vue) +- [Testing a Svelte app with Jest](https://www.roboleary.net/2021/11/18/svelte-app-testing-jest.html) +- [How to create a toast notification library package with SvelteKit](https://www.sarcevic.dev/blog/toasting-in-svelte) +- [Svelte training: Here you can learn Svelte](https://sustainablewww.org/principles/svelte-training-here-you-can-learn-svelte) +- [Introduction to Svelte Actions](https://blog.logrocket.com/svelte-actions-introduction/) +- [Enjoy making DAPPs using SvelteWeb3](https://chiuzon.medium.com/enjoy-making-dapps-using-svelteweb3-b78dfea1d902) +- [Svelte creator: Web development should be more fun](https://www.infoworld.com/article/3639521/svelte-creator-web-development-should-be-more-fun.html) +- [Svelte Radio: Rich Harris is now working full-time on Svelte 🤯](https://share.transistor.fm/s/d9b04961) +- [Web Rush: Svelte and Elder.js with Nick Reese](https://webrush.io/episodes/episode-158-svelte-and-elderjs-with-nick-reese) +- [Building SvelteKit applications with Serverless Redis](https://blog.upstash.com/svelte-with-serverless-redis) + +**Libraries, Tools & Components** +- [svelte-cubed](https://github.com/Rich-Harris/svelte-cubed) is a Three.js component library for Svelte - created by Rich Harris for his presentation at Svelte Summit Fall 2021 +- [svelte-fsm](https://github.com/kenkunz/svelte-fsm) is a tiny, simple, expressive, pragmatic Finite State Machine (FSM) library, optimized for Svelte +- [bromb](https://github.com/samuelstroschein/bromb) is a feedback widget for websites/web apps that is small and easy to integration/self-host +- [Spaper](https://github.com/Oli8/spaper) is a set of PaperCSS components for Svelte +- [svelte-intl-precompile](https://github.com/cibernox/svelte-intl-precompile) is an i18n library for Svelte that analyzes and compiles your translations at build time +- [svelte-preprocess-svg](https://github.com/svitejs/svelte-preprocess-svg) automatically optimizes inline svg in Svelte components for better performance and reduced file size +- [svelte-subcomponent-preprocessor](https://github.com/srmullen/svelte-subcomponent-preprocessor) allows you to write more than one component within a svelte file +- [svelte-pdfjs](https://github.com/gtm-nayan/svelte-pdfjs) is a crude implementation of a Svelte PDF viewer component +- [svelte-inview](https://github.com/maciekgrzybek/svelte-inview) is a Svelte action that monitors an element enters or leaves the viewport/parent element +- [sveltekit-adapter-wordpress-shortcode](https://github.com/tomatrow/sveltekit-adapter-wordpress-shortcode) is an adapter for SvelteKit which turns your app into a wordpress shortcode +- [svelte-websocket-store](https://github.com/arlac77/svelte-websocket-store) is a Svelte store with a websocket backend +- [Svelte Auto Form](https://github.com/leveluptuts/auto-form) is a fast and fun form library focused on ease of use, rather than flexibility. +- [set-focus](https://www.npmjs.com/package/@svackages/set-focus) is an Svelte action that will set focus on `` or ` +{#if showModal} +
(showModal = false)}> + Click outside me! +
+{/if} \ No newline at end of file + diff --git a/site/content/examples/13-actions/00-actions/click_outside.js b/site/content/examples/13-actions/00-actions/click_outside.js new file mode 100644 index 0000000000..e8983c1457 --- /dev/null +++ b/site/content/examples/13-actions/00-actions/click_outside.js @@ -0,0 +1,15 @@ +export function clickOutside(node) { + const handleClick = (event) => { + if (!node.contains(event.target)) { + node.dispatchEvent(new CustomEvent("outclick")); + } + }; + + document.addEventListener("click", handleClick, true); + + return { + destroy() { + document.removeEventListener("click", handleClick, true); + } + }; +} diff --git a/site/content/examples/13-actions/03-actions-pannable/App.svelte b/site/content/examples/13-actions/03-actions-pannable/App.svelte new file mode 100644 index 0000000000..4548a5cbb6 --- /dev/null +++ b/site/content/examples/13-actions/03-actions-pannable/App.svelte @@ -0,0 +1,51 @@ + + +
+ + \ No newline at end of file diff --git a/site/content/examples/13-actions/03-actions-pannable/meta.json b/site/content/examples/13-actions/03-actions-pannable/meta.json new file mode 100644 index 0000000000..b97be8071f --- /dev/null +++ b/site/content/examples/13-actions/03-actions-pannable/meta.json @@ -0,0 +1,3 @@ +{ + "title": "A more complex action" +} \ No newline at end of file diff --git a/site/content/examples/13-actions/00-actions/pannable.js b/site/content/examples/13-actions/03-actions-pannable/pannable.js similarity index 100% rename from site/content/examples/13-actions/00-actions/pannable.js rename to site/content/examples/13-actions/03-actions-pannable/pannable.js diff --git a/site/content/tutorial/01-introduction/07-making-an-app/text.md b/site/content/tutorial/01-introduction/07-making-an-app/text.md index 3f40637997..ea387120e4 100644 --- a/site/content/tutorial/01-introduction/07-making-an-app/text.md +++ b/site/content/tutorial/01-introduction/07-making-an-app/text.md @@ -14,7 +14,7 @@ First, you'll need to integrate Svelte with a build tool. There are officially m Don't worry if you're relatively new to web development and haven't used these tools before. We've prepared a simple step-by-step guide, [Svelte for new developers](blog/svelte-for-new-developers), which walks you through the process. -You'll also want to configure your text editor. If you're using VS Code, install the [Svelte extension](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode), otherwise follow [this guide](blog/setting-up-your-editor) to configure your text editor to treat `.svelte` files the same as `.html` for the sake of syntax highlighting. +You'll also want to configure your text editor. There are [plugins](https://sveltesociety.dev/tools#editor-support) for many popular editors as well as an official [VS Code extension](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). If your editor does not have a Svelte plugin then you can follow [this guide](blog/setting-up-your-editor) to configure your text editor to treat `.svelte` files the same as `.html` for the sake of syntax highlighting. Then, once you've got your project set up, using Svelte components is easy. The compiler turns each component into a regular JavaScript class — just import it and instantiate with `new`: @@ -30,4 +30,4 @@ const app = new App({ }); ``` -You can then interact with `app` using the [component API](docs#Client-side_component_API) if you need to. +You can then interact with `app` using the [component API](docs#run-time-client-side-component-api) if you need to. diff --git a/site/content/tutorial/02-reactivity/03-reactive-statements/app-b/App.svelte b/site/content/tutorial/02-reactivity/03-reactive-statements/app-b/App.svelte index f757be6f51..3e82cd562c 100644 --- a/site/content/tutorial/02-reactivity/03-reactive-statements/app-b/App.svelte +++ b/site/content/tutorial/02-reactivity/03-reactive-statements/app-b/App.svelte @@ -2,7 +2,7 @@ let count = 0; $: if (count >= 10) { - alert(`count is dangerously high!`); + alert('count is dangerously high!'); count = 9; } diff --git a/site/content/tutorial/02-reactivity/03-reactive-statements/text.md b/site/content/tutorial/02-reactivity/03-reactive-statements/text.md index 1b0e90b7d5..87dc9c14b6 100644 --- a/site/content/tutorial/02-reactivity/03-reactive-statements/text.md +++ b/site/content/tutorial/02-reactivity/03-reactive-statements/text.md @@ -5,15 +5,15 @@ title: Statements We're not limited to declaring reactive *values* — we can also run arbitrary *statements* reactively. For example, we can log the value of `count` whenever it changes: ```js -$: console.log(`the count is ${count}`); +$: console.log('the count is ' + count); ``` You can easily group statements together with a block: ```js $: { - console.log(`the count is ${count}`); - alert(`I SAID THE COUNT IS ${count}`); + console.log('the count is ' + count); + alert('I SAID THE COUNT IS ' + count); } ``` @@ -21,7 +21,7 @@ You can even put the `$:` in front of things like `if` blocks: ```js $: if (count >= 10) { - alert(`count is dangerously high!`); + alert('count is dangerously high!'); count = 9; } ``` \ No newline at end of file diff --git a/site/content/tutorial/06-bindings/14-component-this/text.md b/site/content/tutorial/06-bindings/14-component-this/text.md index 68c8c05a46..e389dbbacf 100644 --- a/site/content/tutorial/06-bindings/14-component-this/text.md +++ b/site/content/tutorial/06-bindings/14-component-this/text.md @@ -2,9 +2,13 @@ title: Binding to component instances --- -Just as you can bind to DOM elements, you can bind to component instances themselves. For example, we can bind the instance of `` to a prop named `field` in the same way we did when binding DOM Elements +Just as you can bind to DOM elements, you can bind to component instances themselves. For example, we can bind the instance of `` to a variable named `field` in the same way we did when binding DOM Elements ```html + + ``` diff --git a/site/content/tutorial/08-stores/04-derived-stores/text.md b/site/content/tutorial/08-stores/04-derived-stores/text.md index 5663d3c81d..43af56a087 100644 --- a/site/content/tutorial/08-stores/04-derived-stores/text.md +++ b/site/content/tutorial/08-stores/04-derived-stores/text.md @@ -11,4 +11,4 @@ export const elapsed = derived( ); ``` -> It's possible to derive a store from multiple inputs, and to explicitly `set` a value instead of returning it (which is useful for deriving values asynchronously). Consult the [API reference](docs#derived) for more information. +> It's possible to derive a store from multiple inputs, and to explicitly `set` a value instead of returning it (which is useful for deriving values asynchronously). Consult the [API reference](docs#run-time-svelte-store-derived) for more information. diff --git a/site/content/tutorial/10-transitions/07-local-transitions/text.md b/site/content/tutorial/10-transitions/07-local-transitions/text.md index 400fbcaacb..7b9b0ce7f4 100644 --- a/site/content/tutorial/10-transitions/07-local-transitions/text.md +++ b/site/content/tutorial/10-transitions/07-local-transitions/text.md @@ -6,7 +6,7 @@ Ordinarily, transitions will play on elements when any container block is added Instead, we'd like transitions to play only when individual items are added and removed — in other words, when the user drags the slider. -We can achieve this with a *local* transition, which only plays when the immediate parent block is added or removed: +We can achieve this with a *local* transition, which only plays when the block with the transition itself is added or removed: ```html
diff --git a/site/content/tutorial/12-actions/01-actions/app-a/App.svelte b/site/content/tutorial/12-actions/01-actions/app-a/App.svelte index feacc44c52..40b4ea2673 100644 --- a/site/content/tutorial/12-actions/01-actions/app-a/App.svelte +++ b/site/content/tutorial/12-actions/01-actions/app-a/App.svelte @@ -1,29 +1,16 @@ + +{#if showModal} +
(showModal = false)}> + Click outside me! +
+{/if} + - -
\ No newline at end of file diff --git a/site/content/tutorial/12-actions/01-actions/app-a/pannable.js b/site/content/tutorial/12-actions/01-actions/app-a/click_outside.js similarity index 69% rename from site/content/tutorial/12-actions/01-actions/app-a/pannable.js rename to site/content/tutorial/12-actions/01-actions/app-a/click_outside.js index 332cd3e147..c406f6e95c 100644 --- a/site/content/tutorial/12-actions/01-actions/app-a/pannable.js +++ b/site/content/tutorial/12-actions/01-actions/app-a/click_outside.js @@ -1,4 +1,4 @@ -export function pannable(node) { +export function clickOutside(node) { // setup work goes here... return { @@ -6,4 +6,4 @@ export function pannable(node) { // ...cleanup goes here } }; -} \ No newline at end of file +} diff --git a/site/content/tutorial/12-actions/01-actions/app-b/App.svelte b/site/content/tutorial/12-actions/01-actions/app-b/App.svelte index 171f82762c..bd990a5360 100644 --- a/site/content/tutorial/12-actions/01-actions/app-b/App.svelte +++ b/site/content/tutorial/12-actions/01-actions/app-b/App.svelte @@ -1,30 +1,16 @@ + +{#if showModal} +
(showModal = false)}> + Click outside me! +
+{/if} + - -
\ No newline at end of file diff --git a/site/content/tutorial/12-actions/01-actions/app-b/click_outside.js b/site/content/tutorial/12-actions/01-actions/app-b/click_outside.js new file mode 100644 index 0000000000..e8983c1457 --- /dev/null +++ b/site/content/tutorial/12-actions/01-actions/app-b/click_outside.js @@ -0,0 +1,15 @@ +export function clickOutside(node) { + const handleClick = (event) => { + if (!node.contains(event.target)) { + node.dispatchEvent(new CustomEvent("outclick")); + } + }; + + document.addEventListener("click", handleClick, true); + + return { + destroy() { + document.removeEventListener("click", handleClick, true); + } + }; +} diff --git a/site/content/tutorial/12-actions/01-actions/app-b/pannable.js b/site/content/tutorial/12-actions/01-actions/app-b/pannable.js deleted file mode 100644 index f7d15328be..0000000000 --- a/site/content/tutorial/12-actions/01-actions/app-b/pannable.js +++ /dev/null @@ -1,47 +0,0 @@ -export function pannable(node) { - let x; - let y; - - function handleMousedown(event) { - x = event.clientX; - y = event.clientY; - - node.dispatchEvent(new CustomEvent('panstart', { - detail: { x, y } - })); - - window.addEventListener('mousemove', handleMousemove); - window.addEventListener('mouseup', handleMouseup); - } - - function handleMousemove(event) { - const dx = event.clientX - x; - const dy = event.clientY - y; - x = event.clientX; - y = event.clientY; - - node.dispatchEvent(new CustomEvent('panmove', { - detail: { x, y, dx, dy } - })); - } - - function handleMouseup(event) { - x = event.clientX; - y = event.clientY; - - node.dispatchEvent(new CustomEvent('panend', { - detail: { x, y } - })); - - window.removeEventListener('mousemove', handleMousemove); - window.removeEventListener('mouseup', handleMouseup); - } - - node.addEventListener('mousedown', handleMousedown); - - return { - destroy() { - node.removeEventListener('mousedown', handleMousedown); - } - }; -} \ No newline at end of file diff --git a/site/content/tutorial/12-actions/01-actions/text.md b/site/content/tutorial/12-actions/01-actions/text.md index 3706b31e7c..dfe75c192f 100644 --- a/site/content/tutorial/12-actions/01-actions/text.md +++ b/site/content/tutorial/12-actions/01-actions/text.md @@ -4,85 +4,45 @@ title: The use directive Actions are essentially element-level lifecycle functions. They're useful for things like: -* interfacing with third-party libraries -* lazy-loaded images -* tooltips -* adding custom event handlers +- interfacing with third-party libraries +- lazy-loaded images +- tooltips +- adding custom event handlers -In this app, we want to make the orange box 'pannable'. It has event handlers for the `panstart`, `panmove` and `panend` events, but these aren't native DOM events. We have to dispatch them ourselves. First, import the `pannable` function... +In this app, we want to make the orange modal close when the user clicks outside it. It has an event handler for the `outclick` event, but it isn't a native DOM event. We have to dispatch it ourselves. First, import the `clickOutside` function... ```js -import { pannable } from './pannable.js'; +import { clickOutside } from "./click_outside.js"; ``` ...then use it with the element: ```html -
+
+ Click outside me! +
``` -Open the `pannable.js` file. Like transition functions, an action function receives a `node` and some optional parameters, and returns an action object. That object can have a `destroy` function, which is called when the element is unmounted. +Open the `click_outside.js` file. Like transition functions, an action function receives a `node` (which is the element that the action is applied to) and some optional parameters, and returns an action object. That object can have a `destroy` function, which is called when the element is unmounted. -We want to fire `panstart` event when the user mouses down on the element, `panmove` events (with `dx` and `dy` properties showing how far the mouse moved) when they drag it, and `panend` events when they mouse up. One possible implementation looks like this: +We want to fire the `outclick` event when the user clicks outside the orange box. One possible implementation looks like this: ```js -export function pannable(node) { - let x; - let y; - - function handleMousedown(event) { - x = event.clientX; - y = event.clientY; - - node.dispatchEvent(new CustomEvent('panstart', { - detail: { x, y } - })); - - window.addEventListener('mousemove', handleMousemove); - window.addEventListener('mouseup', handleMouseup); - } - - function handleMousemove(event) { - const dx = event.clientX - x; - const dy = event.clientY - y; - x = event.clientX; - y = event.clientY; - - node.dispatchEvent(new CustomEvent('panmove', { - detail: { x, y, dx, dy } - })); - } - - function handleMouseup(event) { - x = event.clientX; - y = event.clientY; - - node.dispatchEvent(new CustomEvent('panend', { - detail: { x, y } - })); - - window.removeEventListener('mousemove', handleMousemove); - window.removeEventListener('mouseup', handleMouseup); - } +export function clickOutside(node) { + const handleClick = (event) => { + if (!node.contains(event.target)) { + node.dispatchEvent(new CustomEvent("outclick")); + } + }; - node.addEventListener('mousedown', handleMousedown); + document.addEventListener("click", handleClick, true); return { destroy() { - node.removeEventListener('mousedown', handleMousedown); - } + document.removeEventListener("click", handleClick, true); + }, }; } ``` -Update the `pannable` function and try moving the box around. - -> This implementation is for demonstration purposes — a more complete one would also consider touch events. +Update the `clickOutside` function, click the button to show the modal and then click outside it to close it. diff --git a/site/docker-compose.yml b/site/docker-compose.yml deleted file mode 100644 index 910119796a..0000000000 --- a/site/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: "3.0" -services: - postgres: - image: postgres:13.4 - ports: - - "5432:5432" - environment: - - POSTGRES_DB=${PGDATABASE} - - POSTGRES_USER=${PGUSER} - - POSTGRES_PASSWORD=${PGPASSWORD} - adminer: - image: adminer - restart: always - ports: - - "4000:8080" diff --git a/site/migrations/000-create-users.cjs b/site/migrations/000-create-users.cjs deleted file mode 100644 index 76dde745a2..0000000000 --- a/site/migrations/000-create-users.cjs +++ /dev/null @@ -1,25 +0,0 @@ -exports.up = DB => { - DB.sql(` - create table if not exists users ( - id serial primary key, - uid character varying(255) not null unique, - name character varying(255), - username character varying(255) not null, - avatar text, - github_token character varying(255), - created_at timestamp with time zone NOT NULL DEFAULT now(), - updated_at timestamp with time zone - ); - - create unique index if not exists users_pkey ON users(id int4_ops); - create unique index if not exists users_uid_key ON users(uid text_ops); - `); -}; - -exports.down = DB => { - DB.sql(` - drop table if exists users cascade; - drop index if exists users_uid_key; - drop index if exists users_pkey; - `); -}; diff --git a/site/migrations/001-create-gists.cjs b/site/migrations/001-create-gists.cjs deleted file mode 100644 index 22293f5737..0000000000 --- a/site/migrations/001-create-gists.cjs +++ /dev/null @@ -1,24 +0,0 @@ -exports.up = DB => { - DB.sql(` - create table if not exists gists ( - id serial primary key, - uid uuid NOT NULL DEFAULT gen_random_uuid(), - user_id integer REFERENCES users(id) not null, - name character varying(255) not null, - files json not null, - created_at timestamp with time zone NOT NULL DEFAULT now(), - updated_at timestamp with time zone - ); - - create unique index if not exists gists_pkey ON gists(id int4_ops); - create index if not exists gists_user_id_key ON gists(user_id int4_ops); - `); -}; - -exports.down = DB => { - DB.sql(` - drop table if exists gists cascade; - drop index if exists gists_user_id_key; - drop index if exists gists_pkey; - `); -}; diff --git a/site/migrations/002-create-sessions.cjs b/site/migrations/002-create-sessions.cjs deleted file mode 100644 index c24fc69115..0000000000 --- a/site/migrations/002-create-sessions.cjs +++ /dev/null @@ -1,15 +0,0 @@ -exports.up = DB => { - DB.sql(` - create table if not exists sessions ( - uid uuid NOT NULL PRIMARY KEY DEFAULT gen_random_uuid(), - user_id integer REFERENCES users(id) not null, - expiry timestamp without time zone DEFAULT now() + interval '1 year' - ); - `); -}; - -exports.down = DB => { - DB.sql(` - drop table if exists sessions; - `); -}; diff --git a/site/package-lock.json b/site/package-lock.json deleted file mode 100644 index 70f17cc888..0000000000 --- a/site/package-lock.json +++ /dev/null @@ -1,3970 +0,0 @@ -{ - "name": "svelte.dev", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "svelte.dev", - "version": "1.0.0", - "dependencies": { - "cookie": "^0.4.0", - "devalue": "^2.0.0", - "do-not-zip": "^1.0.0", - "flru": "^1.0.2", - "httpie": "^1.1.2", - "jsonwebtoken": "^8.5.1", - "marked": "^3.0.5", - "pg": "^8.7.1", - "prism-svelte": "^0.4.3", - "prismjs": "^1.25.0" - }, - "devDependencies": { - "@sindresorhus/slugify": "^0.9.1", - "@sveltejs/adapter-node": "next", - "@sveltejs/kit": "next", - "@sveltejs/site-kit": "^1.4.0", - "@sveltejs/svelte-repl": "^0.3.0", - "degit": "^2.1.4", - "dotenv": "^10.0.0", - "jimp": "^0.8.0", - "node-fetch": "^2.6.1", - "node-pg-migrate": "^6.0.0", - "shelljs": "^0.8.3", - "svelte": "^3.39.0", - "uvu": "^0.5.2" - } - }, - "node_modules/@jimp/bmp": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.8.5.tgz", - "integrity": "sha512-o/23j1RODQGGjvb2xg+9ZQCHc9uXa5XIoJuXHN8kh8AJBGD7JZYiHMwNHaxJRJvadimCKUeA5udZUJAoaPwrYg==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "bmp-js": "^0.1.0", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/core": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.8.5.tgz", - "integrity": "sha512-Jto1IdL5HYg7uE15rpQjK6dfZJ6d6gRjUsVCPW50nIfXgWizaTibFEov90W9Bj+irwKrX2ntG3e3pZUyOC0COg==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "core-js": "^2.5.7", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "node_modules/@jimp/custom": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.8.5.tgz", - "integrity": "sha512-hS4qHOcOIL+N93IprsIhFgr8F4XnC2oYd+lRaOKEOg3ptS2vQnceSTtcXsC0//mhq8AV6lNjpbfs1iseEZuTqg==", - "dev": true, - "dependencies": { - "@jimp/core": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "node_modules/@jimp/gif": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.8.5.tgz", - "integrity": "sha512-Mj8jmv4AS76OY+Hx/Xoyihj02SUZ2ELk+O5x89pODz1+NeGtSWHHjZjnSam9HYAjycvVI/lGJdk/7w0nWIV/yQ==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "omggif": "^1.0.9" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/jpeg": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.8.5.tgz", - "integrity": "sha512-7kjTY0BiCpwRywk+oPfpLto7cLI+9G0mf4N1bv1Hn+VLQwcXFy2fHyl4qjqLbbY6u4cyZgqN+R8Pg6GRRzv0kw==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "jpeg-js": "^0.3.4" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-blit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.8.5.tgz", - "integrity": "sha512-r8Z1CwazaJwZCRbucQgrfprlGyH91tX7GubUsbWr+zy5/dRJAAgaPj/hcoHDwbh3zyiXp5BECKKzKW0x4reL4w==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-blur": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.8.5.tgz", - "integrity": "sha512-UH5ywpV4YooUh9HXEsrNKDtojLCvIAAV0gywqn8EQeFyzwBJyXAvRNARJp7zr5OPLr9uGXkRLDCO9YyzdlXZng==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-color": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.8.5.tgz", - "integrity": "sha512-7XHqcTQ8Y1zto1b9P1y8m1dzSjnOpBsD9OZG0beTpeJ5bgPX+hF5ZLmvcM6c5ljkINw5EUF1it07BYbkCxiGQA==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "tinycolor2": "^1.4.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-contain": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.8.5.tgz", - "integrity": "sha512-ZkiPFx9L0yITiKtYTYLWyBsSIdxo/NARhNPRZXyVF9HmTWSLDUw1c2c1uvETKxDZTAVK+souYT14DwFWWdhsYA==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-cover": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.8.5.tgz", - "integrity": "sha512-OdT4YAopLOhbhTUQV3R1v5ZZqIaUt3n3vJi/OfTbsak1t9UkPBVdmYPyhoont8zJdtdkF5dW16Ro1FTshytcww==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5", - "@jimp/plugin-scale": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-crop": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.8.5.tgz", - "integrity": "sha512-E1Hb+gfu2k74Gkqh96apAyVljsP5MjCH4TY6lECAAEcYKGH/XRhz6lY2dSEjCYE7KtiqjTZzWwYkgAvkwojj9Q==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-displace": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.8.5.tgz", - "integrity": "sha512-fVgVYTS1HZzAXkg8Lg06PuirSUG5oXYaYYGL+3ZU4tmZn1pyZ+mZyfejpwtymETEYZnmymHoCT4xto19E/IRvA==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-dither": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.8.5.tgz", - "integrity": "sha512-KSj2y8E3yK7tldjT/8ejqAWw5HFBjtWW6QkcxfW7FdV4c/nsXZXDkMbhqMZ7FkDuSYoAPeWUFeddrH4yipC5iA==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-flip": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.8.5.tgz", - "integrity": "sha512-2QbGDkurPNAXZUeHLo/UA3tjh+AbAXWZKSdtoa1ArlASovRz8rqtA45YIRIkKrMH82TA3PZk8bgP2jaLKLrzww==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-rotate": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-gaussian": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.8.5.tgz", - "integrity": "sha512-2zReC5GJcVAXtf3UgzFcHSYN277i02K9Yrhc1xJf3mti00s43uD++B5Ho7/mIo+HrntVvWhxqar7PARdq0lVIg==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-invert": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.8.5.tgz", - "integrity": "sha512-GyMXPGheHdS14xfDceuZ9hrGm6gE9UG3PfTEjQbJmHMWippLC6yf8kombSudJlUf8q72YYSSXsSFKGgkHa67vA==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-mask": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.8.5.tgz", - "integrity": "sha512-inD/++XO+MkmwXl9JGYQ8X2deyOZuq9i+dmugH/557p16B9Q6tvUQt5X1Yg5w7hhkLZ00BKOAJI9XoyCC1NFvQ==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-normalize": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.8.5.tgz", - "integrity": "sha512-8YRWJWBT4NoSAbPhnjQJXGeaeWVrJAlGDv39A54oNH8Ry47fHcE0EN6zogQNpBuM34M6hRnZl4rOv1FIisaWdg==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-print": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.8.5.tgz", - "integrity": "sha512-BviNpCiA/fEieOqsrWr1FkqyFuiG2izdyyg7zUqyeUTHPwqrTLvXO9cfP/ThG4hZpu5wMQ5QClWSqhZu1fAwxA==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "load-bmfont": "^1.4.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-resize": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.8.5.tgz", - "integrity": "sha512-gIdmISuNmZQ1QwprnRC5VXVWQfKIiWineVQGebpMAG/aoFOLDXrVl939Irg7Fb/uOlSFTzpAbt1zpJ8YG/Mi2w==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-rotate": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.8.5.tgz", - "integrity": "sha512-8T9wnL3gb+Z0ogMZmtyI6h3y7TuqW2a5SpFbzFUVF+lTZoAabXjEfX3CAozizCLaT+Duc5H2FJVemAHiyr+Dbw==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-blit": ">=0.3.5", - "@jimp/plugin-crop": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-scale": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.8.5.tgz", - "integrity": "sha512-G+CDH9s7BsxJ4b+mKZ5SsiXwTAynBJ+7/9SwZFnICZJJvLd79Tws6VPXfSaKJZuWnGIX++L8jTGmFORCfLNkdg==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5", - "@jimp/plugin-resize": ">=0.3.5" - } - }, - "node_modules/@jimp/plugins": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.8.5.tgz", - "integrity": "sha512-52na0wqfQ3uItIA+C9cJ1EXffhSmABgK7ETClDseUh9oGtynHzxZ97smnFf1ydLjXLrF89Gt+YBxWLyiBGgiZQ==", - "dev": true, - "dependencies": { - "@jimp/plugin-blit": "^0.8.5", - "@jimp/plugin-blur": "^0.8.5", - "@jimp/plugin-color": "^0.8.5", - "@jimp/plugin-contain": "^0.8.5", - "@jimp/plugin-cover": "^0.8.5", - "@jimp/plugin-crop": "^0.8.5", - "@jimp/plugin-displace": "^0.8.5", - "@jimp/plugin-dither": "^0.8.5", - "@jimp/plugin-flip": "^0.8.5", - "@jimp/plugin-gaussian": "^0.8.5", - "@jimp/plugin-invert": "^0.8.5", - "@jimp/plugin-mask": "^0.8.5", - "@jimp/plugin-normalize": "^0.8.5", - "@jimp/plugin-print": "^0.8.5", - "@jimp/plugin-resize": "^0.8.5", - "@jimp/plugin-rotate": "^0.8.5", - "@jimp/plugin-scale": "^0.8.5", - "core-js": "^2.5.7", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/png": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.8.5.tgz", - "integrity": "sha512-zT89ucu8I2rsD3FIMIPLgr1OyKn4neD+5umwD3MY8AOB8+6tX5bFtnmTm3FzGJaJuibkK0wFl87eiaxnb+Megw==", - "dev": true, - "dependencies": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "pngjs": "^3.3.3" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/tiff": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.8.5.tgz", - "integrity": "sha512-Z7uzDcbHuwDg+hy2+UJQ2s5O6sqYXmv6H1fmSf/2dxBrlGMzl8yTc2/BxLrGREeoidDDMcKmXYGAOp4uCsdJjw==", - "dev": true, - "dependencies": { - "core-js": "^2.5.7", - "utif": "^2.0.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/types": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.8.5.tgz", - "integrity": "sha512-XUvpyebZGd1vyFiJyxUT4H9A3mKD7MV2MxjXnay3fNTrcow0UJJspmFw/w+G3TP/1dgrVC4K++gntjR6QWTzvg==", - "dev": true, - "dependencies": { - "@jimp/bmp": "^0.8.5", - "@jimp/gif": "^0.8.5", - "@jimp/jpeg": "^0.8.5", - "@jimp/png": "^0.8.5", - "@jimp/tiff": "^0.8.5", - "core-js": "^2.5.7", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/utils": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.8.5.tgz", - "integrity": "sha512-D3+H4BiopDkhUKvKkZTPPJ53voqOkfMuk3r7YZNcLtXGLkchjjukC4056lNo7B0DzjBgowTYsQM3JjKnYNIYeg==", - "dev": true, - "dependencies": { - "core-js": "^2.5.7" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", - "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@sindresorhus/slugify": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-0.9.1.tgz", - "integrity": "sha512-b6heYM9dzZD13t2GOiEQTDE0qX+I1GyOotMwKh9VQqzuNiVdPVT8dM43fe9HNb/3ul+Qwd5oKSEDrDIfhq3bnQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5", - "lodash.deburr": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sveltejs/adapter-node": { - "version": "1.0.0-next.53", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-1.0.0-next.53.tgz", - "integrity": "sha512-fovlQ+DPeAvkYqi+BXG48A4U1Dz2YzQXi3fG8Qs9zGAGnX22cx3ldZMThdDcOakwDmQodMYatK8cSBxuP0GAkA==", - "dev": true, - "dependencies": { - "esbuild": "^0.13.3", - "tiny-glob": "^0.2.9" - } - }, - "node_modules/@sveltejs/kit": { - "version": "1.0.0-next.186", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.186.tgz", - "integrity": "sha512-LFv2q2cToreUcGp0B+5uVfu0qMvQiw3hsyELnUwxPP/lpUbcmYjgQmwivjRNTdudCqZt7ng3Ehy7UDILbBhExQ==", - "dev": true, - "dependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", - "cheap-watch": "^1.0.4", - "sade": "^1.7.4", - "vite": "^2.6.10" - }, - "bin": { - "svelte-kit": "svelte-kit.js" - }, - "engines": { - "node": ">=14.13" - }, - "peerDependencies": { - "svelte": "^3.44.0" - } - }, - "node_modules/@sveltejs/site-kit": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@sveltejs/site-kit/-/site-kit-1.4.0.tgz", - "integrity": "sha512-QoIo8KC6G9gInwFyk4+KCzVOiLNdj2aw7T+wGDED+A/SuvICSCyS7W/Ft0WcoAGyQGtgIFRVCcXacubduzA7bg==", - "dev": true, - "dependencies": { - "@sindresorhus/slugify": "^0.9.1", - "golden-fleece": "^1.0.9" - } - }, - "node_modules/@sveltejs/svelte-repl": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@sveltejs/svelte-repl/-/svelte-repl-0.3.0.tgz", - "integrity": "sha512-7ybZNTdCHCv6TbH22nZVIgdA/bypKFumXs83ZDDRDoXbZa129UBJTTQV6DhTjitT+tPK4nyRNFiSsEOy10X4Uw==", - "dev": true, - "dependencies": { - "codemirror": "^5.49.2", - "estree-walker": "^0.9.0", - "marked": "3.0.5", - "sourcemap-codec": "^1.4.6", - "svelte-json-tree": "0.0.5", - "yootils": "0.0.16" - } - }, - "node_modules/@sveltejs/svelte-repl/node_modules/estree-walker": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.9.0.tgz", - "integrity": "sha512-12U47o7XHUX329+x3FzNVjCx3SHEzMF0nkDv7r/HnBzX/xNTKxajBk6gyygaxrAFtLj39219oMfbtxv4KpaOiA==", - "dev": true - }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "1.0.0-next.30", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.30.tgz", - "integrity": "sha512-YQqdMxjL1VgSFk4/+IY3yLwuRRapPafPiZTiaGEq1psbJYSNYUWx9F1zMm32GMsnogg3zn99mGJOqe3ld3HZSg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.1", - "debug": "^4.3.2", - "kleur": "^4.1.4", - "magic-string": "^0.25.7", - "require-relative": "^0.8.7", - "svelte-hmr": "^0.14.7" - }, - "engines": { - "node": "^14.13.1 || >= 16" - }, - "peerDependencies": { - "diff-match-patch": "^1.0.5", - "svelte": "^3.44.0", - "vite": "^2.6.0" - }, - "peerDependenciesMeta": { - "diff-match-patch": { - "optional": true - } - } - }, - "node_modules/@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", - "dev": true - }, - "node_modules/@types/pg": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", - "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, - "node_modules/any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/cheap-watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.4.tgz", - "integrity": "sha512-QR/9FrtRL5fjfUJBhAKCdi0lSRQ3rVRRum3GF9wDKp2TJbEIMGhUEr2yU8lORzm9Isdjx7/k9S0DFDx+z5VGtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/codemirror": { - "version": "5.63.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.63.1.tgz", - "integrity": "sha512-baivaNZreZOGh1/tYyTvCupC9NeWk7qlZeGUDi4nFKj/J0JU8FYKZND4QqLw70P7HOttlCt4JJAOj9GoIhHEkA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/degit": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/degit/-/degit-2.8.4.tgz", - "integrity": "sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==", - "dev": true, - "bin": { - "degit": "degit" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/devalue": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz", - "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==" - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/do-not-zip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/do-not-zip/-/do-not-zip-1.0.0.tgz", - "integrity": "sha512-Pgd81ET43bhAGaN2Hq1zluSX1FmD7kl7KcV9ER/lawiLsRUB9pRA5y8r6us29Xk6BrINZETO8TjhYwtwafWUww==" - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/esbuild": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.4.tgz", - "integrity": "sha512-wMA5eUwpavTBiNl+It6j8OQuKVh69l6z4DKDLzoTIqC+gChnPpcmqdA8WNHptUHRnfyML+mKEQPlW7Mybj8gHg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "optionalDependencies": { - "esbuild-android-arm64": "0.13.4", - "esbuild-darwin-64": "0.13.4", - "esbuild-darwin-arm64": "0.13.4", - "esbuild-freebsd-64": "0.13.4", - "esbuild-freebsd-arm64": "0.13.4", - "esbuild-linux-32": "0.13.4", - "esbuild-linux-64": "0.13.4", - "esbuild-linux-arm": "0.13.4", - "esbuild-linux-arm64": "0.13.4", - "esbuild-linux-mips64le": "0.13.4", - "esbuild-linux-ppc64le": "0.13.4", - "esbuild-openbsd-64": "0.13.4", - "esbuild-sunos-64": "0.13.4", - "esbuild-windows-32": "0.13.4", - "esbuild-windows-64": "0.13.4", - "esbuild-windows-arm64": "0.13.4" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.4.tgz", - "integrity": "sha512-elDJt+jNyoHFId0/dKsuVYUPke3EcquIyUwzJCH17a3ERglN3A9aMBI5zbz+xNZ+FbaDNdpn0RaJHCFLbZX+fA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/esbuild-darwin-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.4.tgz", - "integrity": "sha512-zJQGyHRAdZUXlRzbN7W+7ykmEiGC+bq3Gc4GxKYjjWTgDRSEly98ym+vRNkDjXwXYD3gGzSwvH35+MiHAtWvLA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.4.tgz", - "integrity": "sha512-r8oYvAtqSGq8HNTZCAx4TdLE7jZiGhX9ooGi5AQAey37MA6XNaP8ZNlw9OCpcgpx3ryU2WctXwIqPzkHO7a8dg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.4.tgz", - "integrity": "sha512-u9DRGkn09EN8+lCh6z7FKle7awi17PJRBuAKdRNgSo5ZrH/3m+mYaJK2PR2URHMpAfXiwJX341z231tSdVe3Yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.4.tgz", - "integrity": "sha512-q3B2k68Uf6gfjATjcK16DqxvjqRQkHL8aPoOfj4op+lSqegdXvBacB1d8jw8PxbWJ8JHpdTLdAVUYU80kotQXA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/esbuild-linux-32": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.4.tgz", - "integrity": "sha512-UUYJPHSiKAO8KoN3Ls/iZtgDLZvK5HarES96aolDPWZnq9FLx4dIHM/x2z4Rxv9IYqQ/DxlPoE2Co1UPBIYYeA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.4.tgz", - "integrity": "sha512-+RnohAKiiUW4UHLGRkNR1AnENW1gCuDWuygEtd4jxTNPIoeC7lbXGor7rtgjj9AdUzFgOEvAXyNNX01kJ8NueQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-arm": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.4.tgz", - "integrity": "sha512-BH5gKve4jglS7UPSsfwHSX79I5agC/lm4eKoRUEyo8lwQs89frQSRp2Xup+6SFQnxt3md5EsKcd2Dbkqeb3gPA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.4.tgz", - "integrity": "sha512-+A188cAdd6QuSRxMIwRrWLjgphQA0LDAQ/ECVlrPVJwnx+1i64NjDZivoqPYLOTkSPIKntiWwMhhf0U5/RrPHQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.4.tgz", - "integrity": "sha512-0xkwtPaUkG5xMTFGaQPe1AadSe5QAiQuD4Gix1O9k5Xo/U8xGIkw9UFUTvfEUeu71vFb6ZgsIacfP1NLoFjWNw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.4.tgz", - "integrity": "sha512-E1+oJPP7A+j23GPo3CEpBhGwG1bni4B8IbTA3/3rvzjURwUMZdcN3Fhrz24rnjzdLSHmULtOE4VsbT42h1Om4Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.4.tgz", - "integrity": "sha512-xEkI1o5HYxDzbv9jSox0EsDxpwraG09SRiKKv0W8pH6O3bt+zPSlnoK7+I7Q69tkvONkpIq5n2o+c55uq0X7cw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/esbuild-sunos-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.4.tgz", - "integrity": "sha512-bjXUMcODMnB6hQicLBBmmnBl7OMDyVpFahKvHGXJfDChIi5udiIRKCmFUFIRn+AUAKVlfrofRKdyPC7kBsbvGQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ] - }, - "node_modules/esbuild-windows-32": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.4.tgz", - "integrity": "sha512-z4CH07pfyVY0XF98TCsGmLxKCl0kyvshKDbdpTekW9f2d+dJqn5mmoUyWhpSVJ0SfYWJg86FoD9nMbbaMVyGdg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/esbuild-windows-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.4.tgz", - "integrity": "sha512-uVL11vORRPjocGLYam67rwFLd0LvkrHEs+JG+1oJN4UD9MQmNGZPa4gBHo6hDpF+kqRJ9kXgQSeDqUyRy0tj/Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.4.tgz", - "integrity": "sha512-vA6GLvptgftRcDcWngD5cMlL4f4LbL8JjU2UMT9yJ0MT5ra6hdZNFWnOeOoEtY4GtJ6OjZ0i+81sTqhAB0fMkg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", - "dev": true - }, - "node_modules/file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/flru": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flru/-/flru-1.0.2.tgz", - "integrity": "sha512-kWyh8ADvHBFz6ua5xYOPnUroZTT/bwWfrCeL0Wj1dzG4/YOmOcfJ99W8dOVyyynJN35rZ9aCOtHChqQovV7yog==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/golden-fleece": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/golden-fleece/-/golden-fleece-1.0.9.tgz", - "integrity": "sha512-YSwLaGMOgSBx9roJlNLL12c+FRiw7VECphinc6mGucphc/ZxTHgdEz6gmJqH6NOzYEd/yr64hwjom5pZ+tJVpg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/httpie": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", - "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "node_modules/jimp": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.8.5.tgz", - "integrity": "sha512-BW7t/+TCgKpqZw/wHFwqF/A/Tyk43RmzRHyMBdqfOepqunUrajt0RTqowdWyFo4CS2FmD8pFiYfefWjpXFWrCA==", - "dev": true, - "dependencies": { - "@jimp/custom": "^0.8.5", - "@jimp/plugins": "^0.8.5", - "@jimp/types": "^0.8.5", - "core-js": "^2.5.7", - "regenerator-runtime": "^0.13.3" - } - }, - "node_modules/jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==", - "dev": true - }, - "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=4", - "npm": ">=1.4.28" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "dev": true, - "dependencies": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "node_modules/lodash.deburr": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", - "dev": true - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/marked": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.5.tgz", - "integrity": "sha512-6sXDj79pTjEiu9HfOH7LcqggjUtLHXEG3wxzhSI3zr0uwxIjyDy2rpRWDDLmIeWvUIHNkpalsIcW5JjPAVikaA==", - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-pg-migrate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/node-pg-migrate/-/node-pg-migrate-6.0.0.tgz", - "integrity": "sha512-mv0qhjENeD/HuGghZCuAcWCrOB77B5dNLMXRz13UeBDDTafsRGFpN+4/IpFM9EZ8g0mcE34/ceVYDLmk4W8/Pw==", - "dev": true, - "dependencies": { - "@types/pg": "^8.0.0", - "decamelize": "^5.0.0", - "mkdirp": "~1.0.0", - "yargs": "~17.1.0" - }, - "bin": { - "node-pg-migrate": "bin/node-pg-migrate" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "pg": ">=4.3.0 <9.0.0" - } - }, - "node_modules/node-pg-migrate/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-pg-migrate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/node-pg-migrate/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/node-pg-migrate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/node-pg-migrate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/node-pg-migrate/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/node-pg-migrate/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-pg-migrate/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-pg-migrate/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-pg-migrate/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-pg-migrate/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/node-pg-migrate/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-pg-migrate/node_modules/yargs": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", - "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/node-pg-migrate/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", - "dev": true - }, - "node_modules/parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", - "dev": true - }, - "node_modules/parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dev": true, - "dependencies": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "node_modules/parse-headers": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", - "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==", - "dev": true - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/pg": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.1.tgz", - "integrity": "sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==", - "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.5.0", - "pg-pool": "^3.4.1", - "pg-protocol": "^1.5.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "pg-native": ">=2.0.0" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.4.1.tgz", - "integrity": "sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", - "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", - "dependencies": { - "split2": "^3.1.1" - } - }, - "node_modules/phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", - "dev": true - }, - "node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "dev": true, - "dependencies": { - "pngjs": "^3.0.0" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, - "node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss": { - "version": "8.3.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", - "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", - "dev": true, - "dependencies": { - "nanoid": "^3.1.28", - "picocolors": "^0.2.1", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prism-svelte": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/prism-svelte/-/prism-svelte-0.4.7.tgz", - "integrity": "sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==" - }, - "node_modules/prismjs": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", - "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", - "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/sade": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", - "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/svelte": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.44.0.tgz", - "integrity": "sha512-zWACSJBSncGiDvFfYOMFGNV5zDLOlyhftmO5yOZ0lEtQMptpElaRtl39MWz1+lYCpwUq4F3Q2lTzI9TrTL+eMA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/svelte-hmr": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.7.tgz", - "integrity": "sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog==", - "dev": true, - "peerDependencies": { - "svelte": ">=3.19.0" - } - }, - "node_modules/svelte-json-tree": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/svelte-json-tree/-/svelte-json-tree-0.0.5.tgz", - "integrity": "sha512-kTcOVlsldI2neszYNQAfFCt+u62OWWAZgpeoW9RN3hjtJCWI5bkVj0gtljZWUlyEWTfgpmag5L5AHDKg8w8ZmQ==", - "dev": true - }, - "node_modules/timm": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==", - "dev": true - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/totalist": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-2.0.0.tgz", - "integrity": "sha512-+Y17F0YzxfACxTyjfhnJQEe7afPA0GSpYlFkl2VFMxYP7jshQf9gXV7cH47EfToBumFThfKBvfAcoUn6fdNeRQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "node_modules/utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "dev": true, - "dependencies": { - "pako": "^1.0.5" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uvu": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.2.tgz", - "integrity": "sha512-m2hLe7I2eROhh+tm3WE5cTo/Cv3WQA7Oc9f7JB6uWv+/zVKvfAm53bMyOoGOSZeQ7Ov2Fu9pLhFr7p07bnT20w==", - "dev": true, - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3", - "totalist": "^2.0.0" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.6.10.tgz", - "integrity": "sha512-XbevwpDJMs3lKiGEj0UQScsOCpwHIjFgfzPnFVkPgnxsF9oPv1uGyckLg58XkXv6LnO46KN9yZqJzINFmAxtUg==", - "dev": true, - "dependencies": { - "esbuild": "^0.13.2", - "postcss": "^8.3.8", - "resolve": "^1.20.0", - "rollup": "^2.57.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": ">=12.2.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "less": "*", - "sass": "*", - "stylus": "*" - }, - "peerDependenciesMeta": { - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - } - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yootils": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/yootils/-/yootils-0.0.16.tgz", - "integrity": "sha512-aIVecm5ucOzwhtKbl0zkfg0ZSOUR9c2da0k8cIc9umjjzkvVCWUUX/UHZ1CLPsv4wmJLqt0aWeLB7p9n9JDwYQ==", - "dev": true - } - }, - "dependencies": { - "@jimp/bmp": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.8.5.tgz", - "integrity": "sha512-o/23j1RODQGGjvb2xg+9ZQCHc9uXa5XIoJuXHN8kh8AJBGD7JZYiHMwNHaxJRJvadimCKUeA5udZUJAoaPwrYg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "bmp-js": "^0.1.0", - "core-js": "^2.5.7" - } - }, - "@jimp/core": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.8.5.tgz", - "integrity": "sha512-Jto1IdL5HYg7uE15rpQjK6dfZJ6d6gRjUsVCPW50nIfXgWizaTibFEov90W9Bj+irwKrX2ntG3e3pZUyOC0COg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "core-js": "^2.5.7", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/custom": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.8.5.tgz", - "integrity": "sha512-hS4qHOcOIL+N93IprsIhFgr8F4XnC2oYd+lRaOKEOg3ptS2vQnceSTtcXsC0//mhq8AV6lNjpbfs1iseEZuTqg==", - "dev": true, - "requires": { - "@jimp/core": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/gif": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.8.5.tgz", - "integrity": "sha512-Mj8jmv4AS76OY+Hx/Xoyihj02SUZ2ELk+O5x89pODz1+NeGtSWHHjZjnSam9HYAjycvVI/lGJdk/7w0nWIV/yQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.8.5.tgz", - "integrity": "sha512-7kjTY0BiCpwRywk+oPfpLto7cLI+9G0mf4N1bv1Hn+VLQwcXFy2fHyl4qjqLbbY6u4cyZgqN+R8Pg6GRRzv0kw==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "jpeg-js": "^0.3.4" - } - }, - "@jimp/plugin-blit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.8.5.tgz", - "integrity": "sha512-r8Z1CwazaJwZCRbucQgrfprlGyH91tX7GubUsbWr+zy5/dRJAAgaPj/hcoHDwbh3zyiXp5BECKKzKW0x4reL4w==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-blur": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.8.5.tgz", - "integrity": "sha512-UH5ywpV4YooUh9HXEsrNKDtojLCvIAAV0gywqn8EQeFyzwBJyXAvRNARJp7zr5OPLr9uGXkRLDCO9YyzdlXZng==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-color": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.8.5.tgz", - "integrity": "sha512-7XHqcTQ8Y1zto1b9P1y8m1dzSjnOpBsD9OZG0beTpeJ5bgPX+hF5ZLmvcM6c5ljkINw5EUF1it07BYbkCxiGQA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.8.5.tgz", - "integrity": "sha512-ZkiPFx9L0yITiKtYTYLWyBsSIdxo/NARhNPRZXyVF9HmTWSLDUw1c2c1uvETKxDZTAVK+souYT14DwFWWdhsYA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-cover": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.8.5.tgz", - "integrity": "sha512-OdT4YAopLOhbhTUQV3R1v5ZZqIaUt3n3vJi/OfTbsak1t9UkPBVdmYPyhoont8zJdtdkF5dW16Ro1FTshytcww==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-crop": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.8.5.tgz", - "integrity": "sha512-E1Hb+gfu2k74Gkqh96apAyVljsP5MjCH4TY6lECAAEcYKGH/XRhz6lY2dSEjCYE7KtiqjTZzWwYkgAvkwojj9Q==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-displace": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.8.5.tgz", - "integrity": "sha512-fVgVYTS1HZzAXkg8Lg06PuirSUG5oXYaYYGL+3ZU4tmZn1pyZ+mZyfejpwtymETEYZnmymHoCT4xto19E/IRvA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-dither": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.8.5.tgz", - "integrity": "sha512-KSj2y8E3yK7tldjT/8ejqAWw5HFBjtWW6QkcxfW7FdV4c/nsXZXDkMbhqMZ7FkDuSYoAPeWUFeddrH4yipC5iA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-flip": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.8.5.tgz", - "integrity": "sha512-2QbGDkurPNAXZUeHLo/UA3tjh+AbAXWZKSdtoa1ArlASovRz8rqtA45YIRIkKrMH82TA3PZk8bgP2jaLKLrzww==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-gaussian": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.8.5.tgz", - "integrity": "sha512-2zReC5GJcVAXtf3UgzFcHSYN277i02K9Yrhc1xJf3mti00s43uD++B5Ho7/mIo+HrntVvWhxqar7PARdq0lVIg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-invert": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.8.5.tgz", - "integrity": "sha512-GyMXPGheHdS14xfDceuZ9hrGm6gE9UG3PfTEjQbJmHMWippLC6yf8kombSudJlUf8q72YYSSXsSFKGgkHa67vA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-mask": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.8.5.tgz", - "integrity": "sha512-inD/++XO+MkmwXl9JGYQ8X2deyOZuq9i+dmugH/557p16B9Q6tvUQt5X1Yg5w7hhkLZ00BKOAJI9XoyCC1NFvQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-normalize": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.8.5.tgz", - "integrity": "sha512-8YRWJWBT4NoSAbPhnjQJXGeaeWVrJAlGDv39A54oNH8Ry47fHcE0EN6zogQNpBuM34M6hRnZl4rOv1FIisaWdg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-print": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.8.5.tgz", - "integrity": "sha512-BviNpCiA/fEieOqsrWr1FkqyFuiG2izdyyg7zUqyeUTHPwqrTLvXO9cfP/ThG4hZpu5wMQ5QClWSqhZu1fAwxA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.8.5.tgz", - "integrity": "sha512-gIdmISuNmZQ1QwprnRC5VXVWQfKIiWineVQGebpMAG/aoFOLDXrVl939Irg7Fb/uOlSFTzpAbt1zpJ8YG/Mi2w==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-rotate": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.8.5.tgz", - "integrity": "sha512-8T9wnL3gb+Z0ogMZmtyI6h3y7TuqW2a5SpFbzFUVF+lTZoAabXjEfX3CAozizCLaT+Duc5H2FJVemAHiyr+Dbw==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-scale": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.8.5.tgz", - "integrity": "sha512-G+CDH9s7BsxJ4b+mKZ5SsiXwTAynBJ+7/9SwZFnICZJJvLd79Tws6VPXfSaKJZuWnGIX++L8jTGmFORCfLNkdg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7" - } - }, - "@jimp/plugins": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.8.5.tgz", - "integrity": "sha512-52na0wqfQ3uItIA+C9cJ1EXffhSmABgK7ETClDseUh9oGtynHzxZ97smnFf1ydLjXLrF89Gt+YBxWLyiBGgiZQ==", - "dev": true, - "requires": { - "@jimp/plugin-blit": "^0.8.5", - "@jimp/plugin-blur": "^0.8.5", - "@jimp/plugin-color": "^0.8.5", - "@jimp/plugin-contain": "^0.8.5", - "@jimp/plugin-cover": "^0.8.5", - "@jimp/plugin-crop": "^0.8.5", - "@jimp/plugin-displace": "^0.8.5", - "@jimp/plugin-dither": "^0.8.5", - "@jimp/plugin-flip": "^0.8.5", - "@jimp/plugin-gaussian": "^0.8.5", - "@jimp/plugin-invert": "^0.8.5", - "@jimp/plugin-mask": "^0.8.5", - "@jimp/plugin-normalize": "^0.8.5", - "@jimp/plugin-print": "^0.8.5", - "@jimp/plugin-resize": "^0.8.5", - "@jimp/plugin-rotate": "^0.8.5", - "@jimp/plugin-scale": "^0.8.5", - "core-js": "^2.5.7", - "timm": "^1.6.1" - } - }, - "@jimp/png": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.8.5.tgz", - "integrity": "sha512-zT89ucu8I2rsD3FIMIPLgr1OyKn4neD+5umwD3MY8AOB8+6tX5bFtnmTm3FzGJaJuibkK0wFl87eiaxnb+Megw==", - "dev": true, - "requires": { - "@jimp/utils": "^0.8.5", - "core-js": "^2.5.7", - "pngjs": "^3.3.3" - } - }, - "@jimp/tiff": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.8.5.tgz", - "integrity": "sha512-Z7uzDcbHuwDg+hy2+UJQ2s5O6sqYXmv6H1fmSf/2dxBrlGMzl8yTc2/BxLrGREeoidDDMcKmXYGAOp4uCsdJjw==", - "dev": true, - "requires": { - "core-js": "^2.5.7", - "utif": "^2.0.1" - } - }, - "@jimp/types": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.8.5.tgz", - "integrity": "sha512-XUvpyebZGd1vyFiJyxUT4H9A3mKD7MV2MxjXnay3fNTrcow0UJJspmFw/w+G3TP/1dgrVC4K++gntjR6QWTzvg==", - "dev": true, - "requires": { - "@jimp/bmp": "^0.8.5", - "@jimp/gif": "^0.8.5", - "@jimp/jpeg": "^0.8.5", - "@jimp/png": "^0.8.5", - "@jimp/tiff": "^0.8.5", - "core-js": "^2.5.7", - "timm": "^1.6.1" - } - }, - "@jimp/utils": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.8.5.tgz", - "integrity": "sha512-D3+H4BiopDkhUKvKkZTPPJ53voqOkfMuk3r7YZNcLtXGLkchjjukC4056lNo7B0DzjBgowTYsQM3JjKnYNIYeg==", - "dev": true, - "requires": { - "core-js": "^2.5.7" - } - }, - "@rollup/pluginutils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", - "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "@sindresorhus/slugify": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-0.9.1.tgz", - "integrity": "sha512-b6heYM9dzZD13t2GOiEQTDE0qX+I1GyOotMwKh9VQqzuNiVdPVT8dM43fe9HNb/3ul+Qwd5oKSEDrDIfhq3bnQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "lodash.deburr": "^4.1.0" - } - }, - "@sveltejs/adapter-node": { - "version": "1.0.0-next.53", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-1.0.0-next.53.tgz", - "integrity": "sha512-fovlQ+DPeAvkYqi+BXG48A4U1Dz2YzQXi3fG8Qs9zGAGnX22cx3ldZMThdDcOakwDmQodMYatK8cSBxuP0GAkA==", - "dev": true, - "requires": { - "esbuild": "^0.13.3", - "tiny-glob": "^0.2.9" - } - }, - "@sveltejs/kit": { - "version": "1.0.0-next.186", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.186.tgz", - "integrity": "sha512-LFv2q2cToreUcGp0B+5uVfu0qMvQiw3hsyELnUwxPP/lpUbcmYjgQmwivjRNTdudCqZt7ng3Ehy7UDILbBhExQ==", - "dev": true, - "requires": { - "@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", - "cheap-watch": "^1.0.4", - "sade": "^1.7.4", - "vite": "^2.6.10" - } - }, - "@sveltejs/site-kit": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@sveltejs/site-kit/-/site-kit-1.4.0.tgz", - "integrity": "sha512-QoIo8KC6G9gInwFyk4+KCzVOiLNdj2aw7T+wGDED+A/SuvICSCyS7W/Ft0WcoAGyQGtgIFRVCcXacubduzA7bg==", - "dev": true, - "requires": { - "@sindresorhus/slugify": "^0.9.1", - "golden-fleece": "^1.0.9" - } - }, - "@sveltejs/svelte-repl": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@sveltejs/svelte-repl/-/svelte-repl-0.3.0.tgz", - "integrity": "sha512-7ybZNTdCHCv6TbH22nZVIgdA/bypKFumXs83ZDDRDoXbZa129UBJTTQV6DhTjitT+tPK4nyRNFiSsEOy10X4Uw==", - "dev": true, - "requires": { - "codemirror": "^5.49.2", - "estree-walker": "^0.9.0", - "marked": "3.0.5", - "sourcemap-codec": "^1.4.6", - "svelte-json-tree": "0.0.5", - "yootils": "0.0.16" - }, - "dependencies": { - "estree-walker": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.9.0.tgz", - "integrity": "sha512-12U47o7XHUX329+x3FzNVjCx3SHEzMF0nkDv7r/HnBzX/xNTKxajBk6gyygaxrAFtLj39219oMfbtxv4KpaOiA==", - "dev": true - } - } - }, - "@sveltejs/vite-plugin-svelte": { - "version": "1.0.0-next.30", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.30.tgz", - "integrity": "sha512-YQqdMxjL1VgSFk4/+IY3yLwuRRapPafPiZTiaGEq1psbJYSNYUWx9F1zMm32GMsnogg3zn99mGJOqe3ld3HZSg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.1", - "debug": "^4.3.2", - "kleur": "^4.1.4", - "magic-string": "^0.25.7", - "require-relative": "^0.8.7", - "svelte-hmr": "^0.14.7" - } - }, - "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", - "dev": true - }, - "@types/pg": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", - "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", - "dev": true, - "requires": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, - "any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", - "dev": true - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" - }, - "cheap-watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.4.tgz", - "integrity": "sha512-QR/9FrtRL5fjfUJBhAKCdi0lSRQ3rVRRum3GF9wDKp2TJbEIMGhUEr2yU8lORzm9Isdjx7/k9S0DFDx+z5VGtw==", - "dev": true - }, - "codemirror": { - "version": "5.63.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.63.1.tgz", - "integrity": "sha512-baivaNZreZOGh1/tYyTvCupC9NeWk7qlZeGUDi4nFKj/J0JU8FYKZND4QqLw70P7HOttlCt4JJAOj9GoIhHEkA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true - }, - "degit": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/degit/-/degit-2.8.4.tgz", - "integrity": "sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==", - "dev": true - }, - "dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", - "dev": true - }, - "devalue": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz", - "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==" - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "do-not-zip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/do-not-zip/-/do-not-zip-1.0.0.tgz", - "integrity": "sha512-Pgd81ET43bhAGaN2Hq1zluSX1FmD7kl7KcV9ER/lawiLsRUB9pRA5y8r6us29Xk6BrINZETO8TjhYwtwafWUww==" - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "esbuild": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.4.tgz", - "integrity": "sha512-wMA5eUwpavTBiNl+It6j8OQuKVh69l6z4DKDLzoTIqC+gChnPpcmqdA8WNHptUHRnfyML+mKEQPlW7Mybj8gHg==", - "dev": true, - "requires": { - "esbuild-android-arm64": "0.13.4", - "esbuild-darwin-64": "0.13.4", - "esbuild-darwin-arm64": "0.13.4", - "esbuild-freebsd-64": "0.13.4", - "esbuild-freebsd-arm64": "0.13.4", - "esbuild-linux-32": "0.13.4", - "esbuild-linux-64": "0.13.4", - "esbuild-linux-arm": "0.13.4", - "esbuild-linux-arm64": "0.13.4", - "esbuild-linux-mips64le": "0.13.4", - "esbuild-linux-ppc64le": "0.13.4", - "esbuild-openbsd-64": "0.13.4", - "esbuild-sunos-64": "0.13.4", - "esbuild-windows-32": "0.13.4", - "esbuild-windows-64": "0.13.4", - "esbuild-windows-arm64": "0.13.4" - } - }, - "esbuild-android-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.4.tgz", - "integrity": "sha512-elDJt+jNyoHFId0/dKsuVYUPke3EcquIyUwzJCH17a3ERglN3A9aMBI5zbz+xNZ+FbaDNdpn0RaJHCFLbZX+fA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.4.tgz", - "integrity": "sha512-zJQGyHRAdZUXlRzbN7W+7ykmEiGC+bq3Gc4GxKYjjWTgDRSEly98ym+vRNkDjXwXYD3gGzSwvH35+MiHAtWvLA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.4.tgz", - "integrity": "sha512-r8oYvAtqSGq8HNTZCAx4TdLE7jZiGhX9ooGi5AQAey37MA6XNaP8ZNlw9OCpcgpx3ryU2WctXwIqPzkHO7a8dg==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.4.tgz", - "integrity": "sha512-u9DRGkn09EN8+lCh6z7FKle7awi17PJRBuAKdRNgSo5ZrH/3m+mYaJK2PR2URHMpAfXiwJX341z231tSdVe3Yw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.4.tgz", - "integrity": "sha512-q3B2k68Uf6gfjATjcK16DqxvjqRQkHL8aPoOfj4op+lSqegdXvBacB1d8jw8PxbWJ8JHpdTLdAVUYU80kotQXA==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.4.tgz", - "integrity": "sha512-UUYJPHSiKAO8KoN3Ls/iZtgDLZvK5HarES96aolDPWZnq9FLx4dIHM/x2z4Rxv9IYqQ/DxlPoE2Co1UPBIYYeA==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.4.tgz", - "integrity": "sha512-+RnohAKiiUW4UHLGRkNR1AnENW1gCuDWuygEtd4jxTNPIoeC7lbXGor7rtgjj9AdUzFgOEvAXyNNX01kJ8NueQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.4.tgz", - "integrity": "sha512-BH5gKve4jglS7UPSsfwHSX79I5agC/lm4eKoRUEyo8lwQs89frQSRp2Xup+6SFQnxt3md5EsKcd2Dbkqeb3gPA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.4.tgz", - "integrity": "sha512-+A188cAdd6QuSRxMIwRrWLjgphQA0LDAQ/ECVlrPVJwnx+1i64NjDZivoqPYLOTkSPIKntiWwMhhf0U5/RrPHQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.4.tgz", - "integrity": "sha512-0xkwtPaUkG5xMTFGaQPe1AadSe5QAiQuD4Gix1O9k5Xo/U8xGIkw9UFUTvfEUeu71vFb6ZgsIacfP1NLoFjWNw==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.4.tgz", - "integrity": "sha512-E1+oJPP7A+j23GPo3CEpBhGwG1bni4B8IbTA3/3rvzjURwUMZdcN3Fhrz24rnjzdLSHmULtOE4VsbT42h1Om4Q==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.4.tgz", - "integrity": "sha512-xEkI1o5HYxDzbv9jSox0EsDxpwraG09SRiKKv0W8pH6O3bt+zPSlnoK7+I7Q69tkvONkpIq5n2o+c55uq0X7cw==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.4.tgz", - "integrity": "sha512-bjXUMcODMnB6hQicLBBmmnBl7OMDyVpFahKvHGXJfDChIi5udiIRKCmFUFIRn+AUAKVlfrofRKdyPC7kBsbvGQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.4.tgz", - "integrity": "sha512-z4CH07pfyVY0XF98TCsGmLxKCl0kyvshKDbdpTekW9f2d+dJqn5mmoUyWhpSVJ0SfYWJg86FoD9nMbbaMVyGdg==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.4.tgz", - "integrity": "sha512-uVL11vORRPjocGLYam67rwFLd0LvkrHEs+JG+1oJN4UD9MQmNGZPa4gBHo6hDpF+kqRJ9kXgQSeDqUyRy0tj/Q==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.4.tgz", - "integrity": "sha512-vA6GLvptgftRcDcWngD5cMlL4f4LbL8JjU2UMT9yJ0MT5ra6hdZNFWnOeOoEtY4GtJ6OjZ0i+81sTqhAB0fMkg==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", - "dev": true - }, - "file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", - "dev": true - }, - "flru": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flru/-/flru-1.0.2.tgz", - "integrity": "sha512-kWyh8ADvHBFz6ua5xYOPnUroZTT/bwWfrCeL0Wj1dzG4/YOmOcfJ99W8dOVyyynJN35rZ9aCOtHChqQovV7yog==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "golden-fleece": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/golden-fleece/-/golden-fleece-1.0.9.tgz", - "integrity": "sha512-YSwLaGMOgSBx9roJlNLL12c+FRiw7VECphinc6mGucphc/ZxTHgdEz6gmJqH6NOzYEd/yr64hwjom5pZ+tJVpg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "httpie": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", - "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==" - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "jimp": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.8.5.tgz", - "integrity": "sha512-BW7t/+TCgKpqZw/wHFwqF/A/Tyk43RmzRHyMBdqfOepqunUrajt0RTqowdWyFo4CS2FmD8pFiYfefWjpXFWrCA==", - "dev": true, - "requires": { - "@jimp/custom": "^0.8.5", - "@jimp/plugins": "^0.8.5", - "@jimp/types": "^0.8.5", - "core-js": "^2.5.7", - "regenerator-runtime": "^0.13.3" - } - }, - "jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==", - "dev": true - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true - }, - "load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "lodash.deburr": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", - "dev": true - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "marked": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.5.tgz", - "integrity": "sha512-6sXDj79pTjEiu9HfOH7LcqggjUtLHXEG3wxzhSI3zr0uwxIjyDy2rpRWDDLmIeWvUIHNkpalsIcW5JjPAVikaA==" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", - "dev": true - }, - "node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-pg-migrate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/node-pg-migrate/-/node-pg-migrate-6.0.0.tgz", - "integrity": "sha512-mv0qhjENeD/HuGghZCuAcWCrOB77B5dNLMXRz13UeBDDTafsRGFpN+4/IpFM9EZ8g0mcE34/ceVYDLmk4W8/Pw==", - "dev": true, - "requires": { - "@types/pg": "^8.0.0", - "decamelize": "^5.0.0", - "mkdirp": "~1.0.0", - "yargs": "~17.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", - "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", - "dev": true - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", - "dev": true - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dev": true, - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "parse-headers": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", - "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "pg": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.1.tgz", - "integrity": "sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==", - "requires": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.5.0", - "pg-pool": "^3.4.1", - "pg-protocol": "^1.5.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - } - }, - "pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" - }, - "pg-pool": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.4.1.tgz", - "integrity": "sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==", - "requires": {} - }, - "pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" - }, - "pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "requires": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - } - }, - "pgpass": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", - "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", - "requires": { - "split2": "^3.1.1" - } - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "dev": true, - "requires": { - "pngjs": "^3.0.0" - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - }, - "postcss": { - "version": "8.3.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", - "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", - "dev": true, - "requires": { - "nanoid": "^3.1.28", - "picocolors": "^0.2.1", - "source-map-js": "^0.6.2" - } - }, - "postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" - }, - "postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" - }, - "postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" - }, - "postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "requires": { - "xtend": "^4.0.0" - } - }, - "prism-svelte": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/prism-svelte/-/prism-svelte-0.4.7.tgz", - "integrity": "sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==" - }, - "prismjs": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", - "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "rollup": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", - "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "sade": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", - "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", - "dev": true, - "requires": { - "mri": "^1.1.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "requires": { - "readable-stream": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "svelte": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.44.0.tgz", - "integrity": "sha512-zWACSJBSncGiDvFfYOMFGNV5zDLOlyhftmO5yOZ0lEtQMptpElaRtl39MWz1+lYCpwUq4F3Q2lTzI9TrTL+eMA==", - "dev": true - }, - "svelte-hmr": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.7.tgz", - "integrity": "sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog==", - "dev": true, - "requires": {} - }, - "svelte-json-tree": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/svelte-json-tree/-/svelte-json-tree-0.0.5.tgz", - "integrity": "sha512-kTcOVlsldI2neszYNQAfFCt+u62OWWAZgpeoW9RN3hjtJCWI5bkVj0gtljZWUlyEWTfgpmag5L5AHDKg8w8ZmQ==", - "dev": true - }, - "timm": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==", - "dev": true - }, - "tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "requires": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", - "dev": true - }, - "totalist": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-2.0.0.tgz", - "integrity": "sha512-+Y17F0YzxfACxTyjfhnJQEe7afPA0GSpYlFkl2VFMxYP7jshQf9gXV7cH47EfToBumFThfKBvfAcoUn6fdNeRQ==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "dev": true, - "requires": { - "pako": "^1.0.5" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uvu": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.2.tgz", - "integrity": "sha512-m2hLe7I2eROhh+tm3WE5cTo/Cv3WQA7Oc9f7JB6uWv+/zVKvfAm53bMyOoGOSZeQ7Ov2Fu9pLhFr7p07bnT20w==", - "dev": true, - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3", - "totalist": "^2.0.0" - } - }, - "vite": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.6.10.tgz", - "integrity": "sha512-XbevwpDJMs3lKiGEj0UQScsOCpwHIjFgfzPnFVkPgnxsF9oPv1uGyckLg58XkXv6LnO46KN9yZqJzINFmAxtUg==", - "dev": true, - "requires": { - "esbuild": "^0.13.2", - "fsevents": "~2.3.2", - "postcss": "^8.3.8", - "resolve": "^1.20.0", - "rollup": "^2.57.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", - "dev": true - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yootils": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/yootils/-/yootils-0.0.16.tgz", - "integrity": "sha512-aIVecm5ucOzwhtKbl0zkfg0ZSOUR9c2da0k8cIc9umjjzkvVCWUUX/UHZ1CLPsv4wmJLqt0aWeLB7p9n9JDwYQ==", - "dev": true - } - } -} diff --git a/site/package.json b/site/package.json deleted file mode 100644 index caceb3d721..0000000000 --- a/site/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "svelte.dev", - "version": "1.0.0", - "description": "Docs and examples for Svelte", - "type": "module", - "scripts": { - "dev": "node scripts/update.js && npm run copy-workers && svelte-kit dev", - "copy-workers": "node scripts/copy-workers.js", - "migrate": "node-pg-migrate -r dotenv/config", - "build": "node scripts/update.js && npm run copy-workers && svelte-kit build", - "update": "node scripts/update.js --force=true", - "start": "node build", - "test": "uvu test", - "deploy": "make deploy" - }, - "dependencies": { - "cookie": "^0.4.0", - "devalue": "^2.0.0", - "do-not-zip": "^1.0.0", - "flru": "^1.0.2", - "httpie": "^1.1.2", - "jsonwebtoken": "^8.5.1", - "marked": "^3.0.5", - "pg": "^8.7.1", - "prism-svelte": "^0.4.3", - "prismjs": "^1.25.0" - }, - "devDependencies": { - "@sindresorhus/slugify": "^0.9.1", - "@sveltejs/adapter-node": "next", - "@sveltejs/kit": "next", - "@sveltejs/site-kit": "^1.4.0", - "@sveltejs/svelte-repl": "^0.3.0", - "degit": "^2.1.4", - "dotenv": "^10.0.0", - "jimp": "^0.8.0", - "node-fetch": "^2.6.1", - "node-pg-migrate": "^6.0.0", - "shelljs": "^0.8.3", - "svelte": "^3.39.0", - "uvu": "^0.5.2" - } -} diff --git a/site/scripts/copy-workers.js b/site/scripts/copy-workers.js deleted file mode 100644 index 733714b217..0000000000 --- a/site/scripts/copy-workers.js +++ /dev/null @@ -1,4 +0,0 @@ -import sh from 'shelljs'; - -sh.rm('-rf', 'static/workers'); -sh.cp('-r', 'node_modules/@sveltejs/svelte-repl/workers', 'static'); diff --git a/site/scripts/get-example-thumbnails/index.js b/site/scripts/get-example-thumbnails/index.js deleted file mode 100644 index 4c920a3b52..0000000000 --- a/site/scripts/get-example-thumbnails/index.js +++ /dev/null @@ -1,67 +0,0 @@ -import fs from 'fs'; -import puppeteer from 'puppeteer'; -import Jimp from 'jimp'; -import c from 'kleur'; - -const slugs = []; - -fs.readdirSync(`content/examples`).forEach(group_dir => { - fs.readdirSync(`content/examples/${group_dir}`).filter(file => file !== 'meta.json').map(example_dir => { - const slug = example_dir.replace(/^\d+-/, ''); - slugs.push(slug); - }); -}); - -async function main() { - const browser = await puppeteer.launch({ - defaultViewport: { - width: 400 * 10 / 4, - height: 400 + 42, - deviceScaleFactor: 2 - } - }); - - const page = await browser.newPage(); - - for (const slug of slugs) { - try { - const output_file = `static/examples/thumbnails/${slug}.jpg`; - if (fs.existsSync(output_file)) { - console.log(c.gray(`skipping ${slug}`)); - continue; - } - - console.log(slug); - await page.goto(`http://localhost:3000/repl/embed?example=${slug}`); - - await page.waitForSelector('iframe.inited[title=Result]'); - await page.waitFor(1500); - const iframe = await page.$('iframe.inited[title=Result]'); - const buffer = await iframe.screenshot(); - - const image = await Jimp.read(buffer); - console.log(image.bitmap.width, image.bitmap.height); - image.crop(3, 3, image.bitmap.width - 6, image.bitmap.height - 6); - image.autocrop(); - // image.scale(0.25); - - if (image.bitmap.width > 200 || image.bitmap.height > 200) { - const scale = Math.min( - 200 / image.bitmap.width, - 200 / image.bitmap.height - ); - - image.scale(scale); - } - - await image.quality(75).write(output_file); - } catch (err) { - console.log(c.bold().red(`failed to screenshot ${slug}`)); - console.log(err); - } - } - - await browser.close(); -} - -main(); \ No newline at end of file diff --git a/site/scripts/get-examples-from-tutorials/index.js b/site/scripts/get-examples-from-tutorials/index.js deleted file mode 100644 index 50a39ca2fd..0000000000 --- a/site/scripts/get-examples-from-tutorials/index.js +++ /dev/null @@ -1,77 +0,0 @@ -import sander from 'sander'; -import { dirname } from 'path'; -import { fileURLToPath } from 'url'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -process.chdir(`${__dirname}/../..`); - -function extract_frontmatter(markdown) { - const match = /---\r?\n([\s\S]+?)\r?\n---/.exec(markdown); - const frontMatter = match[1]; - const content = markdown.slice(match[0].length); - - const metadata = {}; - frontMatter.split('\n').forEach(pair => { - const colonIndex = pair.indexOf(':'); - metadata[pair.slice(0, colonIndex).trim()] = pair - .slice(colonIndex + 1) - .trim(); - }); - - return { metadata, content }; -} - -const tutorial_sections = sander.readdirSync(`content/tutorial`).map(section_dir => { - const section_slug = section_dir.replace(/^\d+-/, ''); - - const meta = JSON.parse(sander.readFileSync(`content/tutorial/${section_dir}/meta.json`, { encoding: 'utf-8' })); - - const chapters = sander.readdirSync(`content/tutorial/${section_dir}`).map(chapter_dir => { - const app_dir = `content/tutorial/${section_dir}/${chapter_dir}/app-b`; - if (!sander.existsSync(app_dir)) return; - - const markdown = sander.readFileSync(`content/tutorial/${section_dir}/${chapter_dir}/text.md`, { encoding: 'utf-8' }); - const { metadata } = extract_frontmatter(markdown); - - const chapter_slug = chapter_dir.replace(/^\d+-/, ''); - - return { - slug: chapter_slug, - title: metadata.title, - files: sander.readdirSync(app_dir).map(name => { - return { - name, - source: sander.readFileSync(`${app_dir}/${name}`, { encoding: 'utf-8' }) - }; - }) - }; - }).filter(Boolean); - - return { - slug: section_slug, - title: meta.title, - chapters - }; -}).filter(section => section.chapters.length > 0); - -const pad = i => i < 10 ? `0${i}` : i; - -tutorial_sections.forEach((section, i) => { - const section_dir = `${pad(i)}-${section.slug}`; - - sander.writeFileSync(`content/examples/${section_dir}/meta.json`, JSON.stringify({ - title: section.title - }, null, '\t')); - - section.chapters.forEach((chapter, i) => { - const chapter_dir = `${pad(i)}-${chapter.slug}`; - - sander.writeFileSync(`content/examples/${section_dir}/${chapter_dir}/meta.json`, JSON.stringify({ - title: chapter.title - }, null, '\t')); - - chapter.files.forEach(file => { - sander.writeFileSync(`content/examples/${section_dir}/${chapter_dir}/${file.name}`, file.source); - }); - }); -}); \ No newline at end of file diff --git a/site/scripts/get_contributors.js b/site/scripts/get_contributors.js deleted file mode 100644 index c263de25c5..0000000000 --- a/site/scripts/get_contributors.js +++ /dev/null @@ -1,66 +0,0 @@ -import 'dotenv/config'; -import fs from 'fs'; -import fetch from 'node-fetch'; -import Jimp from 'jimp'; -import { dirname } from 'path'; -import { fileURLToPath } from 'url'; - - -const force = process.env.FORCE_UPDATE === 'true'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -process.chdir(__dirname); - -const outputFile = `../src/routes/_contributors.js`; -if (!force && fs.existsSync(outputFile)) { - console.info(`[update/contributors] ${outputFile} exists. Skipping`); - process.exit(0); -} - -const base = `https://api.github.com/repos/sveltejs/svelte/contributors`; -const { GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET } = process.env; - -const SIZE = 64; - -async function main() { - const contributors = []; - let page = 1; - - while (true) { - const res = await fetch(`${base}?client_id=${GITHUB_CLIENT_ID}&client_secret=${GITHUB_CLIENT_SECRET}&per_page=100&page=${page++}`); - const list = await res.json(); - - if (list.length === 0) break; - - contributors.push(...list); - } - - const authors = contributors - .filter(({ login }) => !login.includes('[bot]')) - .sort((a, b) => b.contributions - a.contributions); - - const sprite = new Jimp(SIZE * authors.length, SIZE); - - for (let i = 0; i < authors.length; i += 1) { - const author = authors[i]; - console.log(`${i + 1} / ${authors.length}: ${author.login}`); - - const image_data = await fetch(author.avatar_url); - const buffer = await image_data.arrayBuffer(); - - const image = await Jimp.read(buffer); - image.resize(SIZE, SIZE); - - sprite.composite(image, i * SIZE, 0); - } - - await sprite.quality(80).write(`../static/contributors.jpg`); - // TODO: Optimizing the static/contributors.jpg image should probably get automated as well - console.log('remember to additionally optimize the resulting /static/contributors.jpg image file via e.g. https://squoosh.app '); - - const str = `[\n\t${authors.map(a => `'${a.login}'`).join(',\n\t')}\n]`; - - fs.writeFileSync(outputFile, `export default ${str};`); -} - -main(); diff --git a/site/scripts/get_donors.js b/site/scripts/get_donors.js deleted file mode 100644 index 9e26391195..0000000000 --- a/site/scripts/get_donors.js +++ /dev/null @@ -1,63 +0,0 @@ -import 'dotenv/config'; -import fs from 'fs'; -import fetch from 'node-fetch'; -import Jimp from 'jimp'; -import { dirname } from 'path'; -import { fileURLToPath } from 'url'; - - -const force = process.env.FORCE_UPDATE === 'true'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -process.chdir(__dirname); - -const outputFile = `../src/routes/_donors.js`; -if (!force && fs.existsSync(outputFile)) { - console.info(`[update/donors] ${outputFile} exists. Skipping`); - process.exit(0); -} - -const SIZE = 64; - -async function main() { - const res = await fetch('https://opencollective.com/svelte/members/all.json'); - const donors = await res.json(); - - const unique = new Map(); - donors.forEach(d => unique.set(d.profile, d)); - - let backers = [...unique.values()] - .filter(({ role }) => role === 'BACKER') - .sort((a, b) => b.totalAmountDonated - a.totalAmountDonated); - - const included = []; - for (let i = 0; i < backers.length; i += 1) { - const backer = backers[i]; - console.log(`${i} / ${backers.length}: ${backer.name}`); - - try { - const image_data = await fetch(backer.image); - const buffer = await image_data.arrayBuffer(); - const image = await Jimp.read(buffer); - image.resize(SIZE, SIZE); - included.push({ backer, image }); - } catch( err) { - console.log(`Skipping ${backer.name}: no image data`); - } - } - - const sprite = new Jimp(SIZE * included.length, SIZE); - for (let i = 0; i < included.length; i += 1) { - sprite.composite(included[i].image, i * SIZE, 0); - } - - await sprite.quality(80).write(`../static/donors.jpg`); - // TODO: Optimizing the static/donors.jpg image should probably get automated as well - console.log('remember to additionally optimize the resulting /static/donors.jpg image file via e.g. https://squoosh.app '); - - const str = `[\n\t${included.map(a => `${JSON.stringify(a.backer.name)}`).join(',\n\t')}\n]`; - - fs.writeFileSync(outputFile, `export default ${str};`); -} - -main(); diff --git a/site/scripts/update.js b/site/scripts/update.js deleted file mode 100644 index 724c0d1be8..0000000000 --- a/site/scripts/update.js +++ /dev/null @@ -1,9 +0,0 @@ -import sh from 'shelljs'; - -sh.env['FORCE_UPDATE'] = process.argv.includes('--force=true'); - -Promise.all([ - sh.exec('node ./scripts/get_contributors.js'), - sh.exec('node ./scripts/get_donors.js'), - sh.exec('node ./scripts/update_template.js') -]); diff --git a/site/scripts/update_template.js b/site/scripts/update_template.js deleted file mode 100644 index 77395efa5f..0000000000 --- a/site/scripts/update_template.js +++ /dev/null @@ -1,36 +0,0 @@ -import sh from 'shelljs'; -import fs from 'fs'; -import path, { dirname } from 'path'; -import { fileURLToPath } from 'url'; - -const force = process.env.FORCE_UPDATE === 'true'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -sh.cd(path.join(__dirname, '..')); - -const outputFile = 'static/svelte-app.json'; -if (!force && fs.existsSync(outputFile)) { - console.info(`[update/template] ${outputFile} exists. Skipping`); - process.exit(0); -} - -// fetch svelte app -sh.rm('-rf','scripts/svelte-app'); -sh.exec('npx degit sveltejs/template scripts/svelte-app'); - -// remove src (will be recreated client-side) and node_modules -sh.rm('-rf', 'scripts/svelte-app/src'); -sh.rm('-rf', 'scripts/svelte-app/node_modules'); - -// build svelte-app.json -const appPath = 'scripts/svelte-app'; -const files = []; - -for (const path of sh.find(appPath).filter(p => fs.lstatSync(p).isFile()) ) { - const bytes = fs.readFileSync(path); - const string = bytes.toString(); - const data = bytes.compare(Buffer.from(string)) === 0 ? string : [...bytes]; - files.push({ path: path.slice(appPath.length + 1), data }); -} - -fs.writeFileSync(outputFile, JSON.stringify(files)); diff --git a/site/src/app.html b/site/src/app.html deleted file mode 100644 index d051adb2f3..0000000000 --- a/site/src/app.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - %svelte.head% - - -
%svelte.body%
- - diff --git a/site/src/components/IntersectionObserver.svelte b/site/src/components/IntersectionObserver.svelte deleted file mode 100644 index 210fd524fd..0000000000 --- a/site/src/components/IntersectionObserver.svelte +++ /dev/null @@ -1,59 +0,0 @@ - - - - -
- -
\ No newline at end of file diff --git a/site/src/components/Lazy.svelte b/site/src/components/Lazy.svelte deleted file mode 100644 index ef81d68f00..0000000000 --- a/site/src/components/Lazy.svelte +++ /dev/null @@ -1,11 +0,0 @@ - - - \ No newline at end of file diff --git a/site/src/components/PreloadingIndicator.svelte b/site/src/components/PreloadingIndicator.svelte deleted file mode 100644 index 8b88029abb..0000000000 --- a/site/src/components/PreloadingIndicator.svelte +++ /dev/null @@ -1,63 +0,0 @@ - - - - -{#if visible} -
-
-
-{/if} - -{#if p >= 0.4} -
-{/if} \ No newline at end of file diff --git a/site/src/components/Repl/InputOutputToggle.svelte b/site/src/components/Repl/InputOutputToggle.svelte deleted file mode 100644 index 8233ee58b2..0000000000 --- a/site/src/components/Repl/InputOutputToggle.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - - - \ No newline at end of file diff --git a/site/src/components/Repl/ReplWidget.svelte b/site/src/components/Repl/ReplWidget.svelte deleted file mode 100644 index ced2aafee2..0000000000 --- a/site/src/components/Repl/ReplWidget.svelte +++ /dev/null @@ -1,136 +0,0 @@ - - - - -
-
- {#if browser} - - {/if} -
- - {#if mobile} - - {/if} -
diff --git a/site/src/components/ScreenToggle.svelte b/site/src/components/ScreenToggle.svelte deleted file mode 100644 index 87d90aa7a8..0000000000 --- a/site/src/components/ScreenToggle.svelte +++ /dev/null @@ -1,46 +0,0 @@ - - - - -
- {#each labels as label, index} - - {/each} -
diff --git a/site/src/config.js b/site/src/config.js deleted file mode 100644 index a3589957fc..0000000000 --- a/site/src/config.js +++ /dev/null @@ -1,5 +0,0 @@ -// REPL props - -export const svelteUrl = `https://unpkg.com/svelte@3`; -export const rollupUrl = `https://unpkg.com/rollup@1/dist/rollup.browser.js`; -export const mapbox_setup = `window.MAPBOX_ACCESS_TOKEN = '${import.meta.env.VITE_MAPBOX_ACCESS_TOKEN}';`; diff --git a/site/src/hooks.js b/site/src/hooks.js deleted file mode 100644 index 961fc5bb81..0000000000 --- a/site/src/hooks.js +++ /dev/null @@ -1,31 +0,0 @@ -// need to do this first before importing database, etc. -import dotenv from 'dotenv'; -dotenv.config(); - -import * as cookie from 'cookie'; -import { get_user, sanitize_user } from './utils/auth'; -import { query } from './utils/db'; - -/** @type {import('@sveltejs/kit').Handle} */ -export async function handle({ request, resolve }) { - if (process.env['PGHOST']) { - // this is a convenient time to clear out expired sessions - query('delete from sessions where expiry < now()'); - - request.locals.cookies = cookie.parse(request.headers.cookie || ''); - request.locals.user = await get_user(request.locals.cookies.sid); - } - - const response = await resolve(request); - - return response; -} - -/** @type {import('@sveltejs/kit').GetSession} */ -export function getSession(request) { - return request.locals.user - ? { - user: sanitize_user(request.locals.user) - } - : {}; -} diff --git a/site/src/routes/__error.svelte b/site/src/routes/__error.svelte deleted file mode 100644 index 4f84d7d66b..0000000000 --- a/site/src/routes/__error.svelte +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - {status} - - -
\ No newline at end of file diff --git a/site/src/routes/__layout.svelte b/site/src/routes/__layout.svelte deleted file mode 100644 index f01c312cc6..0000000000 --- a/site/src/routes/__layout.svelte +++ /dev/null @@ -1,70 +0,0 @@ - - - - -{#if $navigating && $navigating.to} - -{/if} - -{#if $page.path !== '/repl/embed'} - -{/if} - -
- -
- - diff --git a/site/src/routes/_components/Contributors.svelte b/site/src/routes/_components/Contributors.svelte deleted file mode 100644 index 74eb3fa50f..0000000000 --- a/site/src/routes/_components/Contributors.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - -{#each contributors as contributor, i} - - {contributor} - -{/each} diff --git a/site/src/routes/_components/Donors.svelte b/site/src/routes/_components/Donors.svelte deleted file mode 100644 index dc1f7ffcc8..0000000000 --- a/site/src/routes/_components/Donors.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - - -{#each donors as donor, i} - - {donor} - -{/each} diff --git a/site/src/routes/_components/Example.svelte b/site/src/routes/_components/Example.svelte deleted file mode 100644 index c07b4be0b5..0000000000 --- a/site/src/routes/_components/Example.svelte +++ /dev/null @@ -1,52 +0,0 @@ - - - - -
-
- - -
- - {#if intersecting} - - - {/if} - -
-
-
\ No newline at end of file diff --git a/site/src/routes/_components/WhosUsingSvelte.js b/site/src/routes/_components/WhosUsingSvelte.js deleted file mode 100644 index 430bc95867..0000000000 --- a/site/src/routes/_components/WhosUsingSvelte.js +++ /dev/null @@ -1,80 +0,0 @@ -export const companies = [ - { - href: "https://1password.com", - filename: "1password.svg", - alt: "1Password logo", - }, - { - href: "https://www.alaskaair.com/", - style: "background-color: #01426a;", - filename: "alaskaairlines.svg", - alt: "Alaska Airlines logo", - }, - { - href: "https://avast.com", - filename: "avast.svg", - alt: "Avast logo", - }, - { - href: "https://chess.com", - style: "background-color: #312e2b;", - filename: "chess.svg", - alt: "Chess.com logo", - }, - { - href: "https://fusioncharts.com", - filename: "fusioncharts.svg", - alt: "FusionCharts logo", - }, - { - href: "https://godaddy.com", - filename: "godaddy.svg", - alt: "GoDaddy logo", - }, - { - href: "https://www.ibm.com/", - filename: "ibm.svg", - alt: "IBM logo", - }, - { - href: "https://media.lesechos.fr/infographie", - filename: "les-echos.svg", - alt: "Les Echos", - }, - { - href: "https://www.philips.co.uk", - filename: "philips.svg", - alt: "Philips logo", - }, - { - href: "https://global.rakuten.com/corp/", - filename: "rakuten.svg", - alt: "Rakuten logo", - }, - { - href: "https://razorpay.com", - filename: "razorpay.svg", - alt: "Razorpay logo", - }, - { - href: "https://www.se.com", - style: " background-color: #3dcd58; ", - filename: "Schneider_Electric.svg", - alt: "Schneider Electric", - }, - { - href: "https://squareup.com", - filename: "square.svg", - alt: "Square", - }, - { - href: "https://nytimes.com", - filename: "nyt.svg", - alt: "The New York Times logo", - }, - { - href: "https://transloadit.com", - filename: "transloadit.svg", - alt: "Transloadit", - }, -]; diff --git a/site/src/routes/_components/WhosUsingSvelte.svelte b/site/src/routes/_components/WhosUsingSvelte.svelte deleted file mode 100644 index 06094eac2c..0000000000 --- a/site/src/routes/_components/WhosUsingSvelte.svelte +++ /dev/null @@ -1,66 +0,0 @@ - - -
- {#each sortedCompanies as { href, filename, alt, style, picture, span }, index} - - {#if picture} - - {#each picture as { type, srcset }} - - {/each} - - - {:else} - - {#if span} - {span} - {/if} - {/if} - - {/each} -
- - diff --git a/site/src/routes/apps/index.json.js b/site/src/routes/apps/index.json.js deleted file mode 100644 index e6b7d42e5b..0000000000 --- a/site/src/routes/apps/index.json.js +++ /dev/null @@ -1,25 +0,0 @@ -import { query as db_query } from '../../utils/db'; - -export async function get({ query, locals }) { - if (locals.user) { - const page_size = 100; - const offset = query.get('offset') ? parseInt(query.get('offset')) : 0; - const rows = await db_query(` - select g.uid, g.name, coalesce(g.updated_at, g.created_at) as updated_at - from gists g - where g.user_id = $1 - order by id desc - limit ${page_size + 1} - offset $2 - `, [locals.user.id, offset]); - - rows.forEach(row => { - row.uid = row.uid.replace(/-/g, ''); - }); - - const more = rows.length > page_size; - return { body: { apps: rows.slice(0, page_size), offset: more ? offset + page_size : null }}; - } else { - return { status: 401 }; - } -} diff --git a/site/src/routes/apps/index.svelte b/site/src/routes/apps/index.svelte deleted file mode 100644 index 3c025f3b42..0000000000 --- a/site/src/routes/apps/index.svelte +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - Your apps • Svelte - - -
- {#if user} -
-

Your apps

- -
- {user.name || user.username} avatar - - {user.name || user.username} - (log out) - -
-
- - - - {#if offset !== null} - - {/if} - {:else} -

Please log in to see your saved apps.

- {/if} -
- - diff --git a/site/src/routes/auth/_config.js b/site/src/routes/auth/_config.js deleted file mode 100644 index 58a9856bcc..0000000000 --- a/site/src/routes/auth/_config.js +++ /dev/null @@ -1,6 +0,0 @@ -export const oauth = 'https://github.com/login/oauth'; -export const baseurl = process.env['BASEURL']; -export const secure = baseurl && baseurl.startsWith('https:'); - -export const client_id = process.env['GITHUB_CLIENT_ID']; -export const client_secret = process.env['GITHUB_CLIENT_SECRET']; diff --git a/site/src/routes/auth/callback.js b/site/src/routes/auth/callback.js deleted file mode 100644 index 971ac96071..0000000000 --- a/site/src/routes/auth/callback.js +++ /dev/null @@ -1,54 +0,0 @@ -import devalue from 'devalue'; -import * as cookie from 'cookie'; -import * as httpie from 'httpie'; -import { parse, stringify } from 'querystring'; -import { sanitize_user, create_user, create_session } from '../../utils/auth'; -import { oauth, secure, client_id, client_secret } from './_config.js'; - -export async function get({ query }) { - try { - // Trade "code" for "access_token" - const r1 = await httpie.post(`${oauth}/access_token?` + stringify({ - code: query.get('code'), - client_id, - client_secret, - })); - - // Now fetch User details - const { access_token } = parse(r1.data); - const r2 = await httpie.get('https://api.github.com/user', { - headers: { - 'User-Agent': 'svelte.dev', - Authorization: `token ${access_token}` - } - }); - - const user = await create_user(r2.data, access_token); - const session = await create_session(user); - - return { - headers: { - 'Set-Cookie': cookie.serialize('sid', session.uid, { - maxAge: 31536000, - path: '/', - httpOnly: true, - secure - }), - 'Content-Type': 'text/html; charset=utf-8' - }, - body: ` - - ` - }; - } catch (err) { - console.error('GET /auth/callback', err); - return { - status: 500, - body: err.data - }; - } -} diff --git a/site/src/routes/auth/login.js b/site/src/routes/auth/login.js deleted file mode 100644 index b1f075d682..0000000000 --- a/site/src/routes/auth/login.js +++ /dev/null @@ -1,35 +0,0 @@ -import { stringify } from 'querystring'; -import { oauth, baseurl, client_id } from './_config.js'; - -export const get = client_id - ? () => { - const Location = `${oauth}/authorize?` + stringify({ - scope: 'read:user', - client_id, - redirect_uri: `${baseurl}/auth/callback`, - }); - - return { - status: 302, - headers: { - Location - } - }; - } - : () => { - return { - status: 500, - headers: { - 'Content-Type': 'text/html; charset=utf-8' - }, - body: ` - -

Missing .env file

-

In order to use GitHub authentication, you will need to register an OAuth application and create a local .env file:

-
GITHUB_CLIENT_ID=[YOUR_APP_ID]\nGITHUB_CLIENT_SECRET=[YOUR_APP_SECRET]\nBASEURL=http://localhost:3000
-

The BASEURL variable should match the callback URL specified for your app.

-

See also here

- - ` - }; - }; diff --git a/site/src/routes/auth/logout.js b/site/src/routes/auth/logout.js deleted file mode 100644 index cafc25ee04..0000000000 --- a/site/src/routes/auth/logout.js +++ /dev/null @@ -1,18 +0,0 @@ -import * as cookie from 'cookie'; -import { secure } from './_config.js'; -import { delete_session } from '../../utils/auth.js'; - -export async function get(request) { - await delete_session(request.locals.cookies.sid); - - return { - headers: { - 'Set-Cookie': cookie.serialize('sid', '', { - maxAge: -1, - path: '/', - httpOnly: true, - secure - }) - } - }; -} diff --git a/site/src/routes/blog/[slug].json.js b/site/src/routes/blog/[slug].json.js deleted file mode 100644 index 60c48dd2f7..0000000000 --- a/site/src/routes/blog/[slug].json.js +++ /dev/null @@ -1,23 +0,0 @@ -import get_posts from './_posts.js'; - -let lookup; - -export function get({ params }) { - if (!lookup || process.env.NODE_ENV !== 'production') { - lookup = new Map(); - get_posts().forEach(post => { - lookup.set(post.slug, post); - }); - } - - const post = lookup.get(params.slug); - - if (post) { - return { - body: post, - headers: { - 'Cache-Control': `max-age=${5 * 60 * 1e3}` // 5 minutes - } - }; - } -} diff --git a/site/src/routes/blog/[slug].svelte b/site/src/routes/blog/[slug].svelte deleted file mode 100644 index 480a1aa4a0..0000000000 --- a/site/src/routes/blog/[slug].svelte +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - {post.metadata.title} - - - - - - -
-

{post.metadata.title}

-

{post.metadata.description}

- - - - {@html post.html} -
- - diff --git a/site/src/routes/blog/_posts.js b/site/src/routes/blog/_posts.js deleted file mode 100644 index 2c86e13656..0000000000 --- a/site/src/routes/blog/_posts.js +++ /dev/null @@ -1,59 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import { extract_frontmatter, link_renderer } from '@sveltejs/site-kit/utils/markdown.js'; -import marked from 'marked'; -import { makeSlugProcessor } from '../../utils/slug'; -import { highlight } from '../../utils/highlight'; -import { SLUG_PRESERVE_UNICODE } from '../../../config'; - -const makeSlug = makeSlugProcessor(SLUG_PRESERVE_UNICODE); - -export default function get_posts() { - return fs - .readdirSync('content/blog') - .map(file => { - if (path.extname(file) !== '.md') return; - - const match = /^(\d+-\d+-\d+)-(.+)\.md$/.exec(file); - if (!match) throw new Error(`Invalid filename '${file}'`); - - const [, pubdate, slug] = match; - - const markdown = fs.readFileSync(`content/blog/${file}`, 'utf-8'); - - const { content, metadata } = extract_frontmatter(markdown); - - const date = new Date(`${pubdate} EDT`); // cheeky hack - metadata.pubdate = pubdate; - metadata.dateString = date.toDateString(); - - const renderer = new marked.Renderer(); - - renderer.link = link_renderer; - - renderer.code = highlight; - - renderer.heading = (text, level, rawtext) => { - const fragment = makeSlug(rawtext); - - return ` - - - - ${text} - `; - }; - - const html = marked( - content.replace(/^\t+/gm, match => match.split('\t').join(' ')), - { renderer } - ); - - return { - html, - metadata, - slug - }; - }) - .sort((a, b) => a.metadata.pubdate < b.metadata.pubdate ? 1 : -1); -} diff --git a/site/src/routes/blog/index.json.js b/site/src/routes/blog/index.json.js deleted file mode 100644 index b65451a5a1..0000000000 --- a/site/src/routes/blog/index.json.js +++ /dev/null @@ -1,26 +0,0 @@ -import get_posts from './_posts.js'; - -let json; - -export function get() { - if (!json || process.env.NODE_ENV !== 'production') { - const posts = get_posts() - .filter(post => !post.metadata.draft) - .map(post => { - return { - slug: post.slug, - metadata: post.metadata - }; - }); - - json = JSON.stringify(posts); - } - - return { - body: json, - headers: { - 'Content-Type': 'application/json', - 'Cache-Control': `max-age=${5 * 60 * 1e3}` // 5 minutes - } - } -} diff --git a/site/src/routes/blog/index.svelte b/site/src/routes/blog/index.svelte deleted file mode 100644 index 40131d7a19..0000000000 --- a/site/src/routes/blog/index.svelte +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - Blog • Svelte - - - - - - - -

Blog

-
- {#each posts as post} - - {/each} -
- - diff --git a/site/src/routes/blog/rss.xml.js b/site/src/routes/blog/rss.xml.js deleted file mode 100644 index a82426a973..0000000000 --- a/site/src/routes/blog/rss.xml.js +++ /dev/null @@ -1,56 +0,0 @@ -import get_posts from '../blog/_posts.js'; - -const months = ',Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','); - -function formatPubdate(str) { - const [y, m, d] = str.split('-'); - return `${d} ${months[+m]} ${y} 12:00 +0000`; -} - -function escapeHTML(html) { - const chars = { - '"' : 'quot', - "'": '#39', - '&': 'amp', - '<' : 'lt', - '>' : 'gt' - }; - - return html.replace(/["'&<>]/g, c => `&${chars[c]};`); -} - -const rss = ` - - - - - Svelte blog - https://svelte.dev/blog - News and information about the magical disappearing UI framework - - https://svelte.dev/favicon.png - Svelte - https://svelte.dev/blog - - ${get_posts().filter(post => !post.metadata.draft).map(post => ` - - ${escapeHTML(post.metadata.title)} - https://svelte.dev/blog/${post.slug} - ${escapeHTML(post.metadata.description)} - ${formatPubdate(post.metadata.pubdate)} - - `).join('')} - - - -`.replace(/>[^\S]+/gm, '>').replace(/[^\S]+ file[0] !== '.' && path.extname(file) === '.md') - .map(file => { - const markdown = fs.readFileSync(`content/docs/${file}`, 'utf-8'); - - const { content, metadata } = extract_frontmatter(markdown); - - const section_slug = make_slug(metadata.title); - - const subsections = []; - - const renderer = new marked.Renderer(); - - let block_open = false; - - renderer.link = link_renderer; - - renderer.hr = () => { - block_open = true; - - return '
'; - }; - - renderer.code = (source, lang) => { - source = source.replace(/^ +/gm, match => - match.split(' ').join('\t') - ); - - const lines = source.split('\n'); - - const meta = extract_metadata(lines[0], lang); - - let prefix = ''; - let className = 'code-block'; - - if (meta) { - source = lines.slice(1).join('\n'); - const filename = meta.filename || (lang === 'html' && 'App.svelte'); - if (filename) { - prefix = `${prefix} ${filename}`; - className += ' named'; - } - } - - if (meta && meta.hidden) return ''; - - const html = `
${prefix}${highlight(source, lang)}
`; - - if (block_open) { - block_open = false; - return `
${html}
`; - } - - return html; - }; - - renderer.heading = (text, level, rawtext) => { - let slug; - - const match = /]*>(.+)<\/a>/.exec(text); - if (match) { - slug = match[1]; - text = match[2]; - } else { - slug = make_slug(rawtext); - } - - if (level === 3 || level === 4) { - const title = text - .replace(/<\/?code>/g, '') - .replace(/\.(\w+)(\((.+)?\))?/, (m, $1, $2, $3) => { - if ($3) return `.${$1}(...)`; - if ($2) return `.${$1}()`; - return `.${$1}`; - }); - - subsections.push({ slug, title, level }); - } - - return ` - - 4 ? 'data-scrollignore' : ''}> - - ${text} - `; - }; - - blockTypes.forEach(type => { - const fn = renderer[type]; - renderer[type] = function() { - return fn.apply(this, arguments); - }; - }); - - const html = marked(content, { renderer }); - - const hashes = {}; - - return { - html: html.replace(/@@(\d+)/g, (m, id) => hashes[id] || m), - metadata, - subsections, - slug: section_slug, - file, - }; - }); -} diff --git a/site/src/routes/docs/index.json.js b/site/src/routes/docs/index.json.js deleted file mode 100644 index b056f8083d..0000000000 --- a/site/src/routes/docs/index.json.js +++ /dev/null @@ -1,13 +0,0 @@ -import get_sections from './_sections.js'; - -let json; - -export function get() { - if (!json || process.env.NODE_ENV !== 'production') { - json = get_sections(); - } - - return { - body: json - }; -} diff --git a/site/src/routes/docs/index.svelte b/site/src/routes/docs/index.svelte deleted file mode 100644 index 4496330bf4..0000000000 --- a/site/src/routes/docs/index.svelte +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - API Docs • Svelte - - - - - - -

API Docs

- diff --git a/site/src/routes/examples/[slug].json.js b/site/src/routes/examples/[slug].json.js deleted file mode 100644 index 44e65aa840..0000000000 --- a/site/src/routes/examples/[slug].json.js +++ /dev/null @@ -1,20 +0,0 @@ -import { get_example } from './_examples.js'; - -const cache = new Map(); - -export function get({ params }) { - const { slug } = params; - - let example = cache.get(slug); - - if (!example || process.env.NODE_ENV !== 'production') { - example = get_example(slug); - if (example) cache.set(slug, example); - } - - if (example) { - return { - body: example - }; - } -} diff --git a/site/src/routes/examples/_TableOfContents.svelte b/site/src/routes/examples/_TableOfContents.svelte deleted file mode 100644 index d5a8b7240f..0000000000 --- a/site/src/routes/examples/_TableOfContents.svelte +++ /dev/null @@ -1,116 +0,0 @@ - - - - -
    - {#each sections as section} -
  • - {section.title} - - {#each section.examples as example} -
    - - {example.title} thumbnail - - {example.title} - - {#if example.slug === active_section} - REPL - {/if} -
    - {/each} -
  • - {/each} -
diff --git a/site/src/routes/examples/_examples.js b/site/src/routes/examples/_examples.js deleted file mode 100644 index e4580d7fda..0000000000 --- a/site/src/routes/examples/_examples.js +++ /dev/null @@ -1,50 +0,0 @@ -import fs from 'fs'; - -let lookup; -const titles = new Map(); - -export function get_examples() { - lookup = new Map(); - - return fs.readdirSync(`content/examples`).map(group_dir => { - const metadata = JSON.parse(fs.readFileSync(`content/examples/${group_dir}/meta.json`, 'utf-8')); - - return { - title: metadata.title, - examples: fs.readdirSync(`content/examples/${group_dir}`).filter(file => file !== 'meta.json').map(example_dir => { - const slug = example_dir.replace(/^\d+-/, ''); - - if (lookup.has(slug)) throw new Error(`Duplicate example slug "${slug}"`); - lookup.set(slug, `${group_dir}/${example_dir}`); - - const metadata = JSON.parse(fs.readFileSync(`content/examples/${group_dir}/${example_dir}/meta.json`, 'utf-8')); - titles.set(slug, metadata.title); - - return { - slug, - title: metadata.title - }; - }) - }; - }); -} - -export function get_example(slug) { - if (!lookup || !lookup.has(slug)) get_examples(); - - const dir = lookup.get(slug); - const title = titles.get(slug); - - if (!dir || !title) return null; - - const files = fs.readdirSync(`content/examples/${dir}`) - .filter(name => name[0] !== '.' && name !== 'meta.json') - .map(name => { - return { - name, - source: fs.readFileSync(`content/examples/${dir}/${name}`, 'utf-8') - }; - }); - - return { title, files }; -} diff --git a/site/src/routes/examples/index.json.js b/site/src/routes/examples/index.json.js deleted file mode 100644 index d425d50203..0000000000 --- a/site/src/routes/examples/index.json.js +++ /dev/null @@ -1,22 +0,0 @@ -import { get_examples } from './_examples.js'; - -let cached; - -export function get() { - if (!cached || process.env.NODE_ENV !== 'production') { - cached = get_examples().filter(section => section.title); - } - - try { - return { - body: cached - }; - } catch(err) { - return { - status: e.status || 500, - body: { - message: e.message - } - }; - } -} diff --git a/site/src/routes/examples/index.svelte b/site/src/routes/examples/index.svelte deleted file mode 100644 index 099e39956c..0000000000 --- a/site/src/routes/examples/index.svelte +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - {title} {title ? '•' : ''} Svelte Examples - - - - - - -

Examples

-
-
- -
- -
-
- {#if mobile} - - {/if} -
- - diff --git a/site/src/routes/faq/_faqs.js b/site/src/routes/faq/_faqs.js deleted file mode 100644 index fa48e02282..0000000000 --- a/site/src/routes/faq/_faqs.js +++ /dev/null @@ -1,58 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import { extract_frontmatter, link_renderer } from '@sveltejs/site-kit/utils/markdown.js'; -import marked from 'marked'; -import { makeSlugProcessor } from '../../utils/slug'; -import { highlight } from '../../utils/highlight'; -import { SLUG_PRESERVE_UNICODE } from '../../../config'; - -const makeSlug = makeSlugProcessor(SLUG_PRESERVE_UNICODE); - -export default function get_faqs() { - return fs - .readdirSync('content/faq') - .map(file => { - if (path.extname(file) !== '.md') return; - - const match = /^([0-9]+)-(.+)\.md$/.exec(file); - if (!match) throw new Error(`Invalid filename '${file}'`); - - const [, order, slug] = match; - - const markdown = fs.readFileSync(`content/faq/${file}`, 'utf-8'); - - const { content, metadata } = extract_frontmatter(markdown); - - const renderer = new marked.Renderer(); - - renderer.link = link_renderer; - - renderer.code = highlight; - - renderer.heading = (text, level, rawtext) => { - const fragment = makeSlug(rawtext); - - return ` - - - - ${text} - `; - }; - - const answer = marked( - content.replace(/^\t+/gm, match => match.split('\t').join(' ')), - { renderer } - ); - - const fragment = makeSlug(slug); - - return { - fragment, - order, - answer, - metadata - }; - }) - .sort((a, b) => a.order - b.order); -} diff --git a/site/src/routes/faq/index.json.js b/site/src/routes/faq/index.json.js deleted file mode 100644 index e41b051ae8..0000000000 --- a/site/src/routes/faq/index.json.js +++ /dev/null @@ -1,26 +0,0 @@ -import get_faqs from './_faqs.js'; - -let json; - -export function get() { - if (!json || process.env.NODE_ENV !== 'production') { - const faqs = get_faqs() - .map(faq => { - return { - fragment: faq.fragment, - answer: faq.answer, - metadata: faq.metadata - }; - }); - - json = JSON.stringify(faqs); - } - - return { - body: json, - headers: { - 'Content-Type': 'application/json', - 'Cache-Control': `max-age=${5 * 60 * 1e3}` // 5 minutes - } - }; -} diff --git a/site/src/routes/faq/index.svelte b/site/src/routes/faq/index.svelte deleted file mode 100644 index c36b6b30b7..0000000000 --- a/site/src/routes/faq/index.svelte +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - Frequently Asked Questions • Svelte - - - - - - -
-

Frequently Asked Questions

- {#each faqs as faq} - -
-

- -   - {faq.metadata.question} -

-

{@html faq.answer}

-
- {/each} -
- - diff --git a/site/src/routes/index.svelte b/site/src/routes/index.svelte deleted file mode 100644 index 2e48531ec5..0000000000 --- a/site/src/routes/index.svelte +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - Svelte • Cybernetically enhanced web apps - - - - - - -

Svelte

- - - - -

Write less code

-

Build boilerplate-free components using languages you already know — HTML, CSS and JavaScript

- - learn more -
- - -

No virtual DOM

-

Svelte compiles your code to tiny, framework-less vanilla JS — your app starts fast and stays fast

- - learn more -
- - -

Truly reactive

-

No more complex state management libraries — Svelte brings reactivity to JavaScript itself

- - learn more -
- -
-

Svelte is a radical new approach to building user interfaces. Whereas traditional frameworks like React and Vue do the bulk of their work in the browser, Svelte shifts that work into a compile step that happens when you build your app.

- -

Instead of using techniques like virtual DOM diffing, Svelte writes code that surgically updates the DOM when the state of your app changes.

- -

We're proud that Svelte was recently voted the most loved web framework with the most satisfied developers in a pair of industry surveys. We think you'll love it too. Read the introductory blog post to learn more.

-
- -
-
-npx degit sveltejs/template my-svelte-project
-# or download and extract this .zip file
-cd my-svelte-project
-# to use TypeScript run:
-# node scripts/setupTypeScript.js
-
-npm install
-npm run dev
-		
- -

See the quickstart guide for more information.

- -

Learn Svelte

-
-
- -
- -

Svelte components are built on top of HTML. Just add data.

-
- - -

CSS is component-scoped by default — no more style collisions or specificity wars. Or you can use your favourite CSS-in-JS library.

-
- - -

Trigger efficient, granular updates by assigning to local variables. The compiler does the rest.

-
- - -

Build beautiful UIs with a powerful, performant transition engine built right into the framework.

-
-
- -
-

Who's using Svelte?

- - -
- -
-

Supporters

- -

Svelte is free and open source software, made possible by the work of hundreds of volunteers and donors. Join us or give!

- -

Contributors

- - - -

- -

Donors

- - -
diff --git a/site/src/routes/repl/[id]/_components/AppControls/UserMenu.svelte b/site/src/routes/repl/[id]/_components/AppControls/UserMenu.svelte deleted file mode 100644 index c550d05e6c..0000000000 --- a/site/src/routes/repl/[id]/_components/AppControls/UserMenu.svelte +++ /dev/null @@ -1,114 +0,0 @@ - - -
- {name} - {name} avatar - - {#if showMenu} - - {/if} -
- - diff --git a/site/src/routes/repl/[id]/_components/AppControls/index.svelte b/site/src/routes/repl/[id]/_components/AppControls/index.svelte deleted file mode 100644 index 94a019325f..0000000000 --- a/site/src/routes/repl/[id]/_components/AppControls/index.svelte +++ /dev/null @@ -1,285 +0,0 @@ - - - - -
- - -
- - - - - - - - - {#if $session.user} - - {:else} - - {/if} -
-
- - diff --git a/site/src/routes/repl/[id]/index.json.js b/site/src/routes/repl/[id]/index.json.js deleted file mode 100644 index 0a5f79c82a..0000000000 --- a/site/src/routes/repl/[id]/index.json.js +++ /dev/null @@ -1,173 +0,0 @@ -import * as httpie from 'httpie'; -import { query, find } from '../../../utils/db'; -import { get_example } from '../../examples/_examples.js'; - -const GITHUB_CLIENT_ID = process.env['GITHUB_CLIENT_ID']; -const GITHUB_CLIENT_SECRET = process.env['GITHUB_CLIENT_SECRET']; - -export async function get({ path, params }) { - // is this an example? - const example = get_example(params.id); - - if (example) { - return { - body: { - relaxed: true, - uid: params.id, - name: example.title, - files: example.files, - owner: null - } - }; - } - - if (process.env.NODE_ENV === 'development') { - // In dev, proxy requests to load particular REPLs to the real server. - // This avoids needing to connect to the real database server. - try { - const res_proxy = await httpie.get(`https://svelte.dev${path}`); - return { - body: res_proxy.data, - status: res_proxy.statusCode, - headers: res_proxy.headers - }; - } catch (err) { - return { - status: err.statusCode, - body: { error: err.message } - }; - } - } - - const [row] = await query(` - select g.*, u.uid as owner from gists g - left join users u on g.user_id = u.id - where g.uid = $1 limit 1 - `, [params.id]); // via filename pattern - - if (!row) { - const base = `https://api.github.com/gists/${params.id}`; - const url = `${base}?client_id=${GITHUB_CLIENT_ID}&client_secret=${GITHUB_CLIENT_SECRET}`; - - try { - const { data } = await httpie.get(url, { - headers: { - 'User-Agent': 'https://svelte.dev' - } - }); - - // create owner if necessary... - let user = await find(`select * from users where uid = $1`, [data.owner.id]); - - if (!user) { - const { id, name, login, avatar_url } = data.owner; - - user = await find(` - insert into users(uid, name, username, avatar) - values ($1, $2, $3, $4) - returning * - `, [id, name, login, avatar_url]); - } - - delete data.files['README.md']; - delete data.files['meta.json']; - - const files = Object.keys(data.files).map(key => { - const name = key.replace(/\.html$/, '.svelte'); - - return { - name, - source: data.files[key].content - }; - }); - - // add gist to database... - await query(` - insert into gists(uid, user_id, name, files) - values ($1, $2, $3, $4) - `, [params.id, user.id, data.description, JSON.stringify(files)]); - - return { - body: { - uid: params.id, - name: data.description, - files, - owner: data.owner.id - } - }; - } catch (err) { - return { - status: err.statusCode, - body: { error: err.message } - }; - } - } - - return { - body: { - uid: row.uid.replace(/-/g, ''), - name: row.name, - files: row.files, - owner: row.owner - } - }; -} - -export async function patch({ params, locals, body }) { - const { user } = locals; - if (!user) return; - - let id; - const uid = params.id; - - try { - const [row] = await query(`select * from gists where uid = $1 limit 1`, [uid]); - if (!row) { - return { - status: 404, - body: { - error: 'Gist not found' - } - }; - } - if (row.user_id !== user.id) { - return { status: 403, body: { error: 'Item does not belong to you' }}; - } - id = row.id; - } catch (err) { - console.error('PATCH /gists @ select', err); - return { status: 500 }; - } - - try { - const obj = body; - obj.updated_at = 'now()'; - let k; - const cols = []; - const vals = []; - for (k in obj) { - cols.push(k); - vals.push(k === 'files' ? JSON.stringify(obj[k]) : obj[k]); - } - - const tmp = vals.map((x, i) => `$${i + 1}`).join(','); - const set = `set (${cols.join(',')}) = (${tmp})`; - - const [row] = await query(`update gists ${set} where id = ${id} returning *`, vals); - - return { - body: { - uid: row.uid.replace(/-/g, ''), - name: row.name, - files: row.files, - owner: user.uid, - } - }; - } catch (err) { - console.error('PATCH /gists @ update', err); - return { - status: 500, - body: { error: err.message } - }; - } -} diff --git a/site/src/routes/repl/[id]/index.svelte b/site/src/routes/repl/[id]/index.svelte deleted file mode 100644 index 5bf06503b1..0000000000 --- a/site/src/routes/repl/[id]/index.svelte +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - {name} • REPL • Svelte - - - - - - - - -
- - - {#if browser} -
- -
- - {#if mobile} - - {/if} - {/if} -
diff --git a/site/src/routes/repl/_utils/body.js b/site/src/routes/repl/_utils/body.js deleted file mode 100644 index 950208ab56..0000000000 --- a/site/src/routes/repl/_utils/body.js +++ /dev/null @@ -1,19 +0,0 @@ -export default function body(req) { - return new Promise((fulfil, reject) => { - let str = ''; - - req.on('error', reject); - - req.on('data', chunk => { - str += chunk; - }); - - req.on('end', () => { - try { - fulfil(JSON.parse(str)); - } catch (err) { - reject(err); - } - }); - }); -} \ No newline at end of file diff --git a/site/src/routes/repl/_utils/downloadBlob.js b/site/src/routes/repl/_utils/downloadBlob.js deleted file mode 100644 index d90ed40530..0000000000 --- a/site/src/routes/repl/_utils/downloadBlob.js +++ /dev/null @@ -1,11 +0,0 @@ -export default (blob, filename) => { - const url = URL.createObjectURL(blob); - const link = document.createElement('a'); - link.href = url; - link.download = filename; - link.style.display = 'none'; - document.body.appendChild(link); - link.click(); - URL.revokeObjectURL(url); - link.remove(); -}; diff --git a/site/src/routes/repl/create.json.js b/site/src/routes/repl/create.json.js deleted file mode 100644 index 7695f80e83..0000000000 --- a/site/src/routes/repl/create.json.js +++ /dev/null @@ -1,31 +0,0 @@ -import { query } from '../../utils/db'; - -export async function post({ locals, body }) { - const { user } = locals; - if (!user) return; // response already sent - - try { - const { name, files } = body; - - const [row] = await query(` - insert into gists(user_id, name, files) - values ($1, $2, $3) returning *`, [user.id, name, JSON.stringify(files)]); - - return { - status: 201, - body: { - uid: row.uid.replace(/-/g, ''), - name: row.name, - files: row.files, - owner: user.uid, - } - }; - } catch (err) { - return { - status: 500, - body: { - error: err.message - } - }; - } -} diff --git a/site/src/routes/repl/embed.svelte b/site/src/routes/repl/embed.svelte deleted file mode 100644 index ad88926d68..0000000000 --- a/site/src/routes/repl/embed.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - REPL • Svelte - - - - - - -
- {#if browser} - - {/if} -
diff --git a/site/src/routes/repl/index.svelte b/site/src/routes/repl/index.svelte deleted file mode 100644 index 483ab7e4cd..0000000000 --- a/site/src/routes/repl/index.svelte +++ /dev/null @@ -1,23 +0,0 @@ - diff --git a/site/src/routes/repl/local/[...path].js b/site/src/routes/repl/local/[...path].js deleted file mode 100644 index 72bf70722f..0000000000 --- a/site/src/routes/repl/local/[...path].js +++ /dev/null @@ -1,11 +0,0 @@ -import { readFileSync } from 'fs'; - -export function get({ params: { path } }) { - if (process.env.NODE_ENV !== 'development' || ('/' + path).includes('/.')) { - return { status: 403 }; - } - return { - headers: { 'Content-Type': 'text/javascript' }, - body: readFileSync('../' + path) - }; -} diff --git a/site/src/routes/tutorial/[slug]/_TableOfContents.svelte b/site/src/routes/tutorial/[slug]/_TableOfContents.svelte deleted file mode 100644 index 4a28c2335e..0000000000 --- a/site/src/routes/tutorial/[slug]/_TableOfContents.svelte +++ /dev/null @@ -1,94 +0,0 @@ - - - - - diff --git a/site/src/routes/tutorial/[slug]/index.json.js b/site/src/routes/tutorial/[slug]/index.json.js deleted file mode 100644 index 31ccfb1ff7..0000000000 --- a/site/src/routes/tutorial/[slug]/index.json.js +++ /dev/null @@ -1,101 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; -import marked from 'marked'; -import { extract_frontmatter, extract_metadata, link_renderer } from '@sveltejs/site-kit/utils/markdown'; -import { highlight } from '../../../utils/highlight'; - -const cache = new Map(); - -function find_tutorial(slug) { - const sections = fs.readdirSync(`content/tutorial`); - - for (const section of sections) { - const chapters = fs.readdirSync(`content/tutorial/${section}`).filter(dir => /^\d+/.test(dir)); - for (const chapter of chapters) { - if (slug === chapter.replace(/^\d+-/, '')) { - return { section, chapter }; - } - } - } -} - -function get_tutorial(slug) { - const found = find_tutorial(slug); - if (!found) return found; - - const dir = `content/tutorial/${found.section}/${found.chapter}`; - - const markdown = fs.readFileSync(`${dir}/text.md`, 'utf-8'); - const app_a = fs.readdirSync(`${dir}/app-a`); - const app_b = fs.existsSync(`${dir}/app-b`) && fs.readdirSync(`${dir}/app-b`); - - const { content } = extract_frontmatter(markdown); - - const renderer = new marked.Renderer(); - - renderer.link = link_renderer; - - renderer.code = (source, lang) => { - source = source.replace(/^ +/gm, match => - match.split(' ').join('\t') - ); - - const lines = source.split('\n'); - - const meta = extract_metadata(lines[0], lang); - - let prefix = ''; - let className = 'code-block'; - - if (meta) { - source = lines.slice(1).join('\n'); - const filename = meta.filename || (lang === 'html' && 'App.svelte'); - if (filename) { - prefix = `${prefix} ${filename}`; - className += ' named'; - } - } - - return `
${prefix}${highlight(source, lang)}
`; - }; - - let html = marked(content, { renderer }); - if (found.chapter.startsWith('01')) { - const meta = JSON.parse(fs.readFileSync(`content/tutorial/${found.section}/meta.json`)); - html = `

${meta.title}

\n${html}`; - } - - function get_file(stage, file) { - const ext = path.extname(file); - const name = file.slice(0, -ext.length); - const type = ext.slice(1); - - return { - name, - type, - source: fs.readFileSync(`${dir}/${stage}/${file}`, 'utf-8') - }; - } - - return { - html, - app_a: app_a.map(file => get_file('app-a', file)), - app_b: app_b && app_b.map(file => get_file('app-b', file)) - }; -} - -export function get({ params }) { - const { slug } = params; - - let tut = cache.get(slug); - if (!tut || process.env.NODE_ENV !== 'production') { - tut = get_tutorial(slug); - cache.set(slug, tut); - } - - if (tut) { - return { - body: tut - }; - } -} diff --git a/site/src/routes/tutorial/[slug]/index.svelte b/site/src/routes/tutorial/[slug]/index.svelte deleted file mode 100644 index b6de219520..0000000000 --- a/site/src/routes/tutorial/[slug]/index.svelte +++ /dev/null @@ -1,323 +0,0 @@ - - - - - - - - {selected.section.title} / {selected.chapter.title} • Svelte Tutorial - - - - - - - - -
-
-
-
- -
- -
- {@html chapter.html} - -
- {#if chapter.app_b} - - - {/if} - - {#if selected.next} - - {/if} -
- - -
-
- -
- -
-
- - {#if mobile} - - {/if} -
diff --git a/site/src/routes/tutorial/__layout.svelte b/site/src/routes/tutorial/__layout.svelte deleted file mode 100644 index c762919dd2..0000000000 --- a/site/src/routes/tutorial/__layout.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - - - diff --git a/site/src/routes/tutorial/index.json.js b/site/src/routes/tutorial/index.json.js deleted file mode 100644 index 9df41f9e26..0000000000 --- a/site/src/routes/tutorial/index.json.js +++ /dev/null @@ -1,67 +0,0 @@ -import * as fs from 'fs'; -import { extract_frontmatter } from '@sveltejs/site-kit/utils/markdown'; - -let json; - -function get_sections() { - const slugs = new Set(); - - const sections = fs.readdirSync(`content/tutorial`) - .filter(dir => /^\d+/.test(dir)) - .map(dir => { - let meta; - - try { - meta = JSON.parse(fs.readFileSync(`content/tutorial/${dir}/meta.json`, 'utf-8')); - } catch (err) { - throw new Error(`Error reading metadata for ${dir}`); - } - - return { - title: meta.title, - chapters: fs.readdirSync(`content/tutorial/${dir}`) - .filter(dir => /^\d+/.test(dir)) - .map(tutorial => { - try { - const md = fs.readFileSync(`content/tutorial/${dir}/${tutorial}/text.md`, 'utf-8'); - const { metadata } = extract_frontmatter(md); - - const slug = tutorial.replace(/^\d+-/, ''); - - if (slugs.has(slug)) throw new Error(`Duplicate slug: ${slug}`); - slugs.add(slug); - - return { - slug, - title: metadata.title, - section_dir: dir, - chapter_dir: tutorial, - }; - } catch (err) { - throw new Error(`Error building tutorial ${dir}/${tutorial}: ${err.message}`); - } - }) - }; - }); - - return sections; -} - -export function get() { - try { - if (!json || process.env.NODE_ENV !== 'production') { - json = get_sections(); - } - - return { - body: json - }; - } catch (err) { - return { - status: 500, - body: { - message: err.message - } - }; - } -} diff --git a/site/src/routes/tutorial/index.svelte b/site/src/routes/tutorial/index.svelte deleted file mode 100644 index 69abd448aa..0000000000 --- a/site/src/routes/tutorial/index.svelte +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/site/src/routes/tutorial/random-number.js b/site/src/routes/tutorial/random-number.js deleted file mode 100644 index 5a4d94e1f4..0000000000 --- a/site/src/routes/tutorial/random-number.js +++ /dev/null @@ -1,23 +0,0 @@ -export async function get(req) { - let { min = '0', max = '100' } = req.query; - min = +min; - max = +max; - - // simulate a long delay - await new Promise((res) => setTimeout(res, 1000)); - - // fail sometimes - if (Math.random() < 0.333) { - return { - status: 400, - headers: { 'Access-Control-Allow-Origin': '*' }, - body: `Failed to generate random number. Please try again` - }; - } - - const num = min + Math.round(Math.random() * (max - min)); - return { - headers: { 'Access-Control-Allow-Origin': '*' }, - body: String(num) - }; -} diff --git a/site/src/utils/auth.js b/site/src/utils/auth.js deleted file mode 100644 index e810a4fe32..0000000000 --- a/site/src/utils/auth.js +++ /dev/null @@ -1,52 +0,0 @@ -import flru from 'flru'; -import { find, query } from './db'; - -export const sanitize_user = obj => obj && ({ - uid: obj.uid, - username: obj.username, - name: obj.name, - avatar: obj.avatar -}); - -const session_cache = flru(1000); - -export const create_user = async (gh_user, access_token) => { - return await find(` - insert into users(uid, name, username, avatar, github_token) - values ($1, $2, $3, $4, $5) on conflict (uid) do update - set (name, username, avatar, github_token, updated_at) = ($2, $3, $4, $5, now()) - returning id, uid, username, name, avatar - `, [gh_user.id, gh_user.name, gh_user.login, gh_user.avatar_url, access_token]); -}; - -export const create_session = async user => { - const session = await find(` - insert into sessions(user_id) - values ($1) - returning uid - `, [user.id]); - - session_cache.set(session.uid, user); - - return session; -}; - -export const delete_session = async sid => { - await query(`delete from sessions where uid = $1`, [sid]); - session_cache.set(sid, null); -}; - -export const get_user = async sid => { - if (!sid) return null; - - if (!session_cache.has(sid)) { - session_cache.set(sid, await find(` - select users.id, users.uid, users.username, users.name, users.avatar - from sessions - left join users on sessions.user_id = users.id - where sessions.uid = $1 and expiry > now() - `, [sid])); - } - - return session_cache.get(sid); -}; diff --git a/site/src/utils/compat.js b/site/src/utils/compat.js deleted file mode 100644 index 0b0f1e954b..0000000000 --- a/site/src/utils/compat.js +++ /dev/null @@ -1 +0,0 @@ -export const isMac = typeof navigator !== 'undefined' && navigator.platform === 'MacIntel'; diff --git a/site/src/utils/db.js b/site/src/utils/db.js deleted file mode 100644 index 4d512aabe9..0000000000 --- a/site/src/utils/db.js +++ /dev/null @@ -1,12 +0,0 @@ -import pg from 'pg'; - -// Uses `PG*` ENV vars -export const DB = process.env['PGHOST'] ? new pg.Pool() : null; - -export function query(text, values=[]) { - return DB.query(text, values).then(r => r.rows); -} - -export function find(text, values=[]) { - return query(text, values).then(arr => arr[0]); -} diff --git a/site/src/utils/events.js b/site/src/utils/events.js deleted file mode 100644 index 5575812a95..0000000000 --- a/site/src/utils/events.js +++ /dev/null @@ -1,19 +0,0 @@ -export function keyEvent(code) { - return function (node, callback) { - node.addEventListener('keydown', handleKeydown); - - function handleKeydown(event) { - if (event.keyCode === code) { - callback.call(this, event); - } - } - - return { - destroy() { - node.removeEventListener('keydown', handleKeydown); - } - }; - }; -} - -export const enter = keyEvent(13); diff --git a/site/src/utils/examples.js b/site/src/utils/examples.js deleted file mode 100644 index fc61d79ad3..0000000000 --- a/site/src/utils/examples.js +++ /dev/null @@ -1,16 +0,0 @@ -export function process_example(files) { - return files - .map(file => { - const [name, type] = file.name.split('.'); - return { name, type, source: file.source }; - }) - .sort((a, b) => { - if (a.name === 'App' && a.type === 'svelte') return -1; - if (b.name === 'App' && b.type === 'svelte') return 1; - - if (a.type === b.type) return a.name < b.name ? -1 : 1; - - if (a.type === 'svelte') return -1; - if (b.type === 'svelte') return 1; - }); -} \ No newline at end of file diff --git a/site/src/utils/highlight.js b/site/src/utils/highlight.js deleted file mode 100644 index cbe227cec2..0000000000 --- a/site/src/utils/highlight.js +++ /dev/null @@ -1,16 +0,0 @@ -import { langs } from '@sveltejs/site-kit/utils/markdown.js'; -import PrismJS from 'prismjs'; -import 'prismjs/components/prism-bash.js'; -import 'prismjs/components/prism-diff.js'; -import 'prism-svelte'; - -export function highlight(source, lang) { - const plang = langs[lang] || ''; - const highlighted = plang ? PrismJS.highlight( - source, - PrismJS.languages[plang], - lang, - ) : source.replace(/[&<>]/g, c => ({ '&': '&', '<': '<', '>': '>' })[c]); - - return `
${highlighted}
`; -} diff --git a/site/src/utils/slug.js b/site/src/utils/slug.js deleted file mode 100644 index 25afcdf017..0000000000 --- a/site/src/utils/slug.js +++ /dev/null @@ -1,78 +0,0 @@ -import slugify from '@sindresorhus/slugify'; -import {SLUG_SEPARATOR} from '../../config.js'; - -/* url-safe processor */ - -export const urlsafeSlugProcessor = string => - slugify(string, { - customReplacements: [ // runs before any other transformations - ['$', 'DOLLAR'], // `$destroy` & co - ['-', 'DASH'], // conflicts with `separator` - ], - separator: SLUG_SEPARATOR, - decamelize: false, - lowercase: false - }) - .replace(/DOLLAR/g, '$') - .replace(/DASH/g, '-'); - -/* unicode-preserver processor */ - -const alphaNumRegex = /[a-zA-Z0-9]/; -const unicodeRegex = /\p{Letter}/u; -const isNonAlphaNumUnicode = - string => !alphaNumRegex.test(string) && unicodeRegex.test(string); - -export const unicodeSafeProcessor = string => - string.split('') - .reduce((accum, char, index, array) => { - const type = isNonAlphaNumUnicode(char) ? 'pass' : 'process'; - - if (index === 0) { - accum.current = {type, string: char}; - } else if (type === accum.current.type) { - accum.current.string += char; - } else { - accum.chunks.push(accum.current); - accum.current = {type, string: char}; - } - - if (index === array.length - 1) { - accum.chunks.push(accum.current); - } - - return accum; - }, {chunks: [], current: {type: '', string: ''}}) - .chunks - .reduce((accum, chunk) => { - const processed = chunk.type === 'process' - ? urlsafeSlugProcessor(chunk.string) - : chunk.string; - - processed.length > 0 && accum.push(processed); - - return accum; - }, []) - .join(SLUG_SEPARATOR); - -/* processor */ - -export const makeSlugProcessor = (preserveUnicode = false) => preserveUnicode - ? unicodeSafeProcessor - : urlsafeSlugProcessor; - -/* session processor */ - -export const makeSessionSlugProcessor = (preserveUnicode = false) => { - const processor = makeSlugProcessor(preserveUnicode); - const seen = new Set(); - - return string => { - const slug = processor(string); - - if (seen.has(slug)) throw new Error(`Duplicate slug ${slug}`); - seen.add(slug); - - return slug; - }; -}; diff --git a/site/static/examples/thumbnails/7guis-circles.jpg b/site/static/examples/thumbnails/7guis-circles.jpg deleted file mode 100644 index e2d58b9f36..0000000000 Binary files a/site/static/examples/thumbnails/7guis-circles.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/7guis-counter.jpg b/site/static/examples/thumbnails/7guis-counter.jpg deleted file mode 100644 index b0b525fc42..0000000000 Binary files a/site/static/examples/thumbnails/7guis-counter.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/7guis-crud.jpg b/site/static/examples/thumbnails/7guis-crud.jpg deleted file mode 100644 index ccebfb8a6b..0000000000 Binary files a/site/static/examples/thumbnails/7guis-crud.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/7guis-flight-booker.jpg b/site/static/examples/thumbnails/7guis-flight-booker.jpg deleted file mode 100644 index c0aecc9fe1..0000000000 Binary files a/site/static/examples/thumbnails/7guis-flight-booker.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/7guis-temperature.jpg b/site/static/examples/thumbnails/7guis-temperature.jpg deleted file mode 100644 index b58e9e09b9..0000000000 Binary files a/site/static/examples/thumbnails/7guis-temperature.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/7guis-timer.jpg b/site/static/examples/thumbnails/7guis-timer.jpg deleted file mode 100644 index 6fd89dd75a..0000000000 Binary files a/site/static/examples/thumbnails/7guis-timer.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/actions.jpg b/site/static/examples/thumbnails/actions.jpg deleted file mode 100644 index 33986769df..0000000000 Binary files a/site/static/examples/thumbnails/actions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/adding-parameters-to-actions.jpg b/site/static/examples/thumbnails/adding-parameters-to-actions.jpg deleted file mode 100644 index 1963b7f41e..0000000000 Binary files a/site/static/examples/thumbnails/adding-parameters-to-actions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/adding-parameters-to-transitions.jpg b/site/static/examples/thumbnails/adding-parameters-to-transitions.jpg deleted file mode 100644 index db4f939d2a..0000000000 Binary files a/site/static/examples/thumbnails/adding-parameters-to-transitions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/animate.jpg b/site/static/examples/thumbnails/animate.jpg deleted file mode 100644 index 48cc6eb45d..0000000000 Binary files a/site/static/examples/thumbnails/animate.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/area-chart.jpg b/site/static/examples/thumbnails/area-chart.jpg deleted file mode 100644 index 4f6a2c8e64..0000000000 Binary files a/site/static/examples/thumbnails/area-chart.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/auto-subscriptions.jpg b/site/static/examples/thumbnails/auto-subscriptions.jpg deleted file mode 100644 index 9f14c15036..0000000000 Binary files a/site/static/examples/thumbnails/auto-subscriptions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/await-blocks.jpg b/site/static/examples/thumbnails/await-blocks.jpg deleted file mode 100644 index 3d3dbe60f5..0000000000 Binary files a/site/static/examples/thumbnails/await-blocks.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/bar-chart.jpg b/site/static/examples/thumbnails/bar-chart.jpg deleted file mode 100644 index ce303b926c..0000000000 Binary files a/site/static/examples/thumbnails/bar-chart.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/bind-this.jpg b/site/static/examples/thumbnails/bind-this.jpg deleted file mode 100644 index 61c1957f69..0000000000 Binary files a/site/static/examples/thumbnails/bind-this.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/checkbox-inputs.jpg b/site/static/examples/thumbnails/checkbox-inputs.jpg deleted file mode 100644 index 2831b458d7..0000000000 Binary files a/site/static/examples/thumbnails/checkbox-inputs.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/class-shorthand.jpg b/site/static/examples/thumbnails/class-shorthand.jpg deleted file mode 100644 index 3c3937e4e0..0000000000 Binary files a/site/static/examples/thumbnails/class-shorthand.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/classes.jpg b/site/static/examples/thumbnails/classes.jpg deleted file mode 100644 index b2081309e1..0000000000 Binary files a/site/static/examples/thumbnails/classes.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/clock.jpg b/site/static/examples/thumbnails/clock.jpg deleted file mode 100644 index 9cab05c8cc..0000000000 Binary files a/site/static/examples/thumbnails/clock.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/component-bindings.jpg b/site/static/examples/thumbnails/component-bindings.jpg deleted file mode 100644 index a28af2440f..0000000000 Binary files a/site/static/examples/thumbnails/component-bindings.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/component-events.jpg b/site/static/examples/thumbnails/component-events.jpg deleted file mode 100644 index 3199aff9c9..0000000000 Binary files a/site/static/examples/thumbnails/component-events.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/conditional-slots.jpg b/site/static/examples/thumbnails/conditional-slots.jpg deleted file mode 100644 index 39bdbf3a3e..0000000000 Binary files a/site/static/examples/thumbnails/conditional-slots.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/context-api.jpg b/site/static/examples/thumbnails/context-api.jpg deleted file mode 100644 index 5c283cd63e..0000000000 Binary files a/site/static/examples/thumbnails/context-api.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/custom-css-transitions.jpg b/site/static/examples/thumbnails/custom-css-transitions.jpg deleted file mode 100644 index fb406bff92..0000000000 Binary files a/site/static/examples/thumbnails/custom-css-transitions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/custom-js-transitions.jpg b/site/static/examples/thumbnails/custom-js-transitions.jpg deleted file mode 100644 index 4f43705d99..0000000000 Binary files a/site/static/examples/thumbnails/custom-js-transitions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/custom-stores.jpg b/site/static/examples/thumbnails/custom-stores.jpg deleted file mode 100644 index 9f14c15036..0000000000 Binary files a/site/static/examples/thumbnails/custom-stores.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/debug.jpg b/site/static/examples/thumbnails/debug.jpg deleted file mode 100644 index e65fa074e2..0000000000 Binary files a/site/static/examples/thumbnails/debug.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/declaring-props.jpg b/site/static/examples/thumbnails/declaring-props.jpg deleted file mode 100644 index 94759bc743..0000000000 Binary files a/site/static/examples/thumbnails/declaring-props.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/default-values.jpg b/site/static/examples/thumbnails/default-values.jpg deleted file mode 100644 index 94033260b2..0000000000 Binary files a/site/static/examples/thumbnails/default-values.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/deferred-transitions.jpg b/site/static/examples/thumbnails/deferred-transitions.jpg deleted file mode 100644 index 3a7fe90f2f..0000000000 Binary files a/site/static/examples/thumbnails/deferred-transitions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/derived-stores.jpg b/site/static/examples/thumbnails/derived-stores.jpg deleted file mode 100644 index a2aade2920..0000000000 Binary files a/site/static/examples/thumbnails/derived-stores.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/dimensions.jpg b/site/static/examples/thumbnails/dimensions.jpg deleted file mode 100644 index 065a62207c..0000000000 Binary files a/site/static/examples/thumbnails/dimensions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/dom-event-forwarding.jpg b/site/static/examples/thumbnails/dom-event-forwarding.jpg deleted file mode 100644 index 4c23217bba..0000000000 Binary files a/site/static/examples/thumbnails/dom-event-forwarding.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/dom-events.jpg b/site/static/examples/thumbnails/dom-events.jpg deleted file mode 100644 index 365d26e705..0000000000 Binary files a/site/static/examples/thumbnails/dom-events.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/dynamic-attributes.jpg b/site/static/examples/thumbnails/dynamic-attributes.jpg deleted file mode 100644 index a0d5898ce2..0000000000 Binary files a/site/static/examples/thumbnails/dynamic-attributes.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/each-block-bindings.jpg b/site/static/examples/thumbnails/each-block-bindings.jpg deleted file mode 100644 index 931f1dcf42..0000000000 Binary files a/site/static/examples/thumbnails/each-block-bindings.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/each-blocks.jpg b/site/static/examples/thumbnails/each-blocks.jpg deleted file mode 100644 index efc9dcb88f..0000000000 Binary files a/site/static/examples/thumbnails/each-blocks.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/easing.jpg b/site/static/examples/thumbnails/easing.jpg deleted file mode 100644 index 11c4871c2a..0000000000 Binary files a/site/static/examples/thumbnails/easing.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/else-blocks.jpg b/site/static/examples/thumbnails/else-blocks.jpg deleted file mode 100644 index 69426d5ec3..0000000000 Binary files a/site/static/examples/thumbnails/else-blocks.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/else-if-blocks.jpg b/site/static/examples/thumbnails/else-if-blocks.jpg deleted file mode 100644 index 15996af39f..0000000000 Binary files a/site/static/examples/thumbnails/else-if-blocks.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/event-forwarding.jpg b/site/static/examples/thumbnails/event-forwarding.jpg deleted file mode 100644 index 3199aff9c9..0000000000 Binary files a/site/static/examples/thumbnails/event-forwarding.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/event-modifiers.jpg b/site/static/examples/thumbnails/event-modifiers.jpg deleted file mode 100644 index 752c5b1a0a..0000000000 Binary files a/site/static/examples/thumbnails/event-modifiers.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/file-inputs.jpg b/site/static/examples/thumbnails/file-inputs.jpg deleted file mode 100644 index d302633f6b..0000000000 Binary files a/site/static/examples/thumbnails/file-inputs.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/group-inputs.jpg b/site/static/examples/thumbnails/group-inputs.jpg deleted file mode 100644 index c70f2afcdc..0000000000 Binary files a/site/static/examples/thumbnails/group-inputs.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/hacker-news.jpg b/site/static/examples/thumbnails/hacker-news.jpg deleted file mode 100644 index 1792586cef..0000000000 Binary files a/site/static/examples/thumbnails/hacker-news.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/hello-world.jpg b/site/static/examples/thumbnails/hello-world.jpg deleted file mode 100644 index 3b8d871ade..0000000000 Binary files a/site/static/examples/thumbnails/hello-world.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/html-tags.jpg b/site/static/examples/thumbnails/html-tags.jpg deleted file mode 100644 index f208c04e4f..0000000000 Binary files a/site/static/examples/thumbnails/html-tags.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/if-blocks.jpg b/site/static/examples/thumbnails/if-blocks.jpg deleted file mode 100644 index 69426d5ec3..0000000000 Binary files a/site/static/examples/thumbnails/if-blocks.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/immutable-data.jpg b/site/static/examples/thumbnails/immutable-data.jpg deleted file mode 100644 index e339b8d459..0000000000 Binary files a/site/static/examples/thumbnails/immutable-data.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/in-and-out.jpg b/site/static/examples/thumbnails/in-and-out.jpg deleted file mode 100644 index 397ca3b51b..0000000000 Binary files a/site/static/examples/thumbnails/in-and-out.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/inline-handlers.jpg b/site/static/examples/thumbnails/inline-handlers.jpg deleted file mode 100644 index 365d26e705..0000000000 Binary files a/site/static/examples/thumbnails/inline-handlers.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/keyed-each-blocks.jpg b/site/static/examples/thumbnails/keyed-each-blocks.jpg deleted file mode 100644 index 8f3d85b288..0000000000 Binary files a/site/static/examples/thumbnails/keyed-each-blocks.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/media-elements.jpg b/site/static/examples/thumbnails/media-elements.jpg deleted file mode 100644 index 579dcc707f..0000000000 Binary files a/site/static/examples/thumbnails/media-elements.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/modal.jpg b/site/static/examples/thumbnails/modal.jpg deleted file mode 100644 index d6ec829865..0000000000 Binary files a/site/static/examples/thumbnails/modal.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/module-exports.jpg b/site/static/examples/thumbnails/module-exports.jpg deleted file mode 100644 index 26c3e6a32f..0000000000 Binary files a/site/static/examples/thumbnails/module-exports.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/multiple-select-bindings.jpg b/site/static/examples/thumbnails/multiple-select-bindings.jpg deleted file mode 100644 index ada9aaa433..0000000000 Binary files a/site/static/examples/thumbnails/multiple-select-bindings.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/named-slots.jpg b/site/static/examples/thumbnails/named-slots.jpg deleted file mode 100644 index 54915f686f..0000000000 Binary files a/site/static/examples/thumbnails/named-slots.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/nested-components.jpg b/site/static/examples/thumbnails/nested-components.jpg deleted file mode 100644 index 2352c21b6c..0000000000 Binary files a/site/static/examples/thumbnails/nested-components.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/numeric-inputs.jpg b/site/static/examples/thumbnails/numeric-inputs.jpg deleted file mode 100644 index 0bcbbbbfd2..0000000000 Binary files a/site/static/examples/thumbnails/numeric-inputs.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/ondestroy.jpg b/site/static/examples/thumbnails/ondestroy.jpg deleted file mode 100644 index c34d437017..0000000000 Binary files a/site/static/examples/thumbnails/ondestroy.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/onmount.jpg b/site/static/examples/thumbnails/onmount.jpg deleted file mode 100644 index e42c874b90..0000000000 Binary files a/site/static/examples/thumbnails/onmount.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/reactive-assignments.jpg b/site/static/examples/thumbnails/reactive-assignments.jpg deleted file mode 100644 index 3a57e27711..0000000000 Binary files a/site/static/examples/thumbnails/reactive-assignments.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/reactive-declarations.jpg b/site/static/examples/thumbnails/reactive-declarations.jpg deleted file mode 100644 index 4f094d80ff..0000000000 Binary files a/site/static/examples/thumbnails/reactive-declarations.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/reactive-statements.jpg b/site/static/examples/thumbnails/reactive-statements.jpg deleted file mode 100644 index 3a57e27711..0000000000 Binary files a/site/static/examples/thumbnails/reactive-statements.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/readable-stores.jpg b/site/static/examples/thumbnails/readable-stores.jpg deleted file mode 100644 index 18b3ecc97f..0000000000 Binary files a/site/static/examples/thumbnails/readable-stores.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/scatterplot.jpg b/site/static/examples/thumbnails/scatterplot.jpg deleted file mode 100644 index 065aabcc8b..0000000000 Binary files a/site/static/examples/thumbnails/scatterplot.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/select-bindings.jpg b/site/static/examples/thumbnails/select-bindings.jpg deleted file mode 100644 index f1f2f1bf9c..0000000000 Binary files a/site/static/examples/thumbnails/select-bindings.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/sharing-code.jpg b/site/static/examples/thumbnails/sharing-code.jpg deleted file mode 100644 index f3d5ec1045..0000000000 Binary files a/site/static/examples/thumbnails/sharing-code.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/slot-fallbacks.jpg b/site/static/examples/thumbnails/slot-fallbacks.jpg deleted file mode 100644 index 44c083e49d..0000000000 Binary files a/site/static/examples/thumbnails/slot-fallbacks.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/slot-props.jpg b/site/static/examples/thumbnails/slot-props.jpg deleted file mode 100644 index 424a0f2b1e..0000000000 Binary files a/site/static/examples/thumbnails/slot-props.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/slots.jpg b/site/static/examples/thumbnails/slots.jpg deleted file mode 100644 index 845f3cb938..0000000000 Binary files a/site/static/examples/thumbnails/slots.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/spread-props.jpg b/site/static/examples/thumbnails/spread-props.jpg deleted file mode 100644 index 0d0e2a9228..0000000000 Binary files a/site/static/examples/thumbnails/spread-props.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/spring.jpg b/site/static/examples/thumbnails/spring.jpg deleted file mode 100644 index ca972a512d..0000000000 Binary files a/site/static/examples/thumbnails/spring.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/styling.jpg b/site/static/examples/thumbnails/styling.jpg deleted file mode 100644 index 431c4bfe7b..0000000000 Binary files a/site/static/examples/thumbnails/styling.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/svelte-body.jpg b/site/static/examples/thumbnails/svelte-body.jpg deleted file mode 100644 index 2494b1c95a..0000000000 Binary files a/site/static/examples/thumbnails/svelte-body.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/svelte-component.jpg b/site/static/examples/thumbnails/svelte-component.jpg deleted file mode 100644 index b0b8922416..0000000000 Binary files a/site/static/examples/thumbnails/svelte-component.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/svelte-head.jpg b/site/static/examples/thumbnails/svelte-head.jpg deleted file mode 100644 index fbf9c2a5e6..0000000000 Binary files a/site/static/examples/thumbnails/svelte-head.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/svelte-self.jpg b/site/static/examples/thumbnails/svelte-self.jpg deleted file mode 100644 index d28a3ac940..0000000000 Binary files a/site/static/examples/thumbnails/svelte-self.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/svelte-window-bindings.jpg b/site/static/examples/thumbnails/svelte-window-bindings.jpg deleted file mode 100644 index 4afdf49f7b..0000000000 Binary files a/site/static/examples/thumbnails/svelte-window-bindings.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/svelte-window.jpg b/site/static/examples/thumbnails/svelte-window.jpg deleted file mode 100644 index ff2d91423d..0000000000 Binary files a/site/static/examples/thumbnails/svelte-window.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/svg-transitions.jpg b/site/static/examples/thumbnails/svg-transitions.jpg deleted file mode 100644 index ff2874f622..0000000000 Binary files a/site/static/examples/thumbnails/svg-transitions.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/text-inputs.jpg b/site/static/examples/thumbnails/text-inputs.jpg deleted file mode 100644 index e27418de53..0000000000 Binary files a/site/static/examples/thumbnails/text-inputs.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/textarea-inputs.jpg b/site/static/examples/thumbnails/textarea-inputs.jpg deleted file mode 100644 index 6245fd8d88..0000000000 Binary files a/site/static/examples/thumbnails/textarea-inputs.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/tick.jpg b/site/static/examples/thumbnails/tick.jpg deleted file mode 100644 index 660f5ba94e..0000000000 Binary files a/site/static/examples/thumbnails/tick.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/transition-events.jpg b/site/static/examples/thumbnails/transition-events.jpg deleted file mode 100644 index 40e7b05a19..0000000000 Binary files a/site/static/examples/thumbnails/transition-events.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/transition.jpg b/site/static/examples/thumbnails/transition.jpg deleted file mode 100644 index d99be156f8..0000000000 Binary files a/site/static/examples/thumbnails/transition.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/tweened.jpg b/site/static/examples/thumbnails/tweened.jpg deleted file mode 100644 index 89433e9f86..0000000000 Binary files a/site/static/examples/thumbnails/tweened.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/update.jpg b/site/static/examples/thumbnails/update.jpg deleted file mode 100644 index 95c4d22d6a..0000000000 Binary files a/site/static/examples/thumbnails/update.jpg and /dev/null differ diff --git a/site/static/examples/thumbnails/writable-stores.jpg b/site/static/examples/thumbnails/writable-stores.jpg deleted file mode 100644 index 9f14c15036..0000000000 Binary files a/site/static/examples/thumbnails/writable-stores.jpg and /dev/null differ diff --git a/site/static/favicon.ico b/site/static/favicon.ico deleted file mode 100644 index d75d248ef0..0000000000 Binary files a/site/static/favicon.ico and /dev/null differ diff --git a/site/static/favicon.png b/site/static/favicon.png deleted file mode 100644 index 21bc302b68..0000000000 Binary files a/site/static/favicon.png and /dev/null differ diff --git a/site/static/fonts/fira-mono/fira-mono-latin-400.woff2 b/site/static/fonts/fira-mono/fira-mono-latin-400.woff2 deleted file mode 100644 index e81b9f3c56..0000000000 Binary files a/site/static/fonts/fira-mono/fira-mono-latin-400.woff2 and /dev/null differ diff --git a/site/static/fonts/overpass/overpass-latin-100.woff2 b/site/static/fonts/overpass/overpass-latin-100.woff2 deleted file mode 100644 index a828f98880..0000000000 Binary files a/site/static/fonts/overpass/overpass-latin-100.woff2 and /dev/null differ diff --git a/site/static/fonts/overpass/overpass-latin-300.woff2 b/site/static/fonts/overpass/overpass-latin-300.woff2 deleted file mode 100644 index 15e204c35e..0000000000 Binary files a/site/static/fonts/overpass/overpass-latin-300.woff2 and /dev/null differ diff --git a/site/static/fonts/overpass/overpass-latin-400.woff2 b/site/static/fonts/overpass/overpass-latin-400.woff2 deleted file mode 100644 index 8f469bb22e..0000000000 Binary files a/site/static/fonts/overpass/overpass-latin-400.woff2 and /dev/null differ diff --git a/site/static/fonts/overpass/overpass-latin-600.woff2 b/site/static/fonts/overpass/overpass-latin-600.woff2 deleted file mode 100644 index 1956aca6e0..0000000000 Binary files a/site/static/fonts/overpass/overpass-latin-600.woff2 and /dev/null differ diff --git a/site/static/fonts/overpass/overpass-latin-700.woff2 b/site/static/fonts/overpass/overpass-latin-700.woff2 deleted file mode 100644 index 14a7f9cce5..0000000000 Binary files a/site/static/fonts/overpass/overpass-latin-700.woff2 and /dev/null differ diff --git a/site/static/fonts/roboto/roboto-latin-400.woff2 b/site/static/fonts/roboto/roboto-latin-400.woff2 deleted file mode 100644 index 7e854e669b..0000000000 Binary files a/site/static/fonts/roboto/roboto-latin-400.woff2 and /dev/null differ diff --git a/site/static/fonts/roboto/roboto-latin-400italic.woff2 b/site/static/fonts/roboto/roboto-latin-400italic.woff2 deleted file mode 100644 index 3791c883e8..0000000000 Binary files a/site/static/fonts/roboto/roboto-latin-400italic.woff2 and /dev/null differ diff --git a/site/static/fonts/roboto/roboto-latin-500.woff2 b/site/static/fonts/roboto/roboto-latin-500.woff2 deleted file mode 100644 index 8dceabcf6b..0000000000 Binary files a/site/static/fonts/roboto/roboto-latin-500.woff2 and /dev/null differ diff --git a/site/static/fonts/roboto/roboto-latin-500italic.woff2 b/site/static/fonts/roboto/roboto-latin-500italic.woff2 deleted file mode 100644 index 1b9589945e..0000000000 Binary files a/site/static/fonts/roboto/roboto-latin-500italic.woff2 and /dev/null differ diff --git a/site/static/global.css b/site/static/global.css deleted file mode 100644 index 329a811545..0000000000 --- a/site/static/global.css +++ /dev/null @@ -1,44 +0,0 @@ -/* headers anchors */ - -.offset-anchor { - position: relative; - display: block; - top: calc(-1 * (var(--nav-h) + var(--top-offset)) + 11rem); - width: 0; - height: 0; -} - -.anchor { - position: absolute; - display: block; - background: url(/icons/link.svg) 0 50% no-repeat; - background-size: 1em 1em; - width: 1.4em; - height: 1em; - top: calc(((var(--h3) - 24px) / 2) + 0.6em); - left: -1.4em; - opacity: 0; - transition: opacity 0.2s; - border: none !important; /* TODO get rid of linkify */ -} - -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - opacity: 1; -} - -/* visually hidden, but accessible to assistive tech */ -.visually-hidden { - border: 0; - clip: rect(0 0 0 0); - height: auto; - margin: 0; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; - white-space: nowrap; -} diff --git a/site/static/icons/arrow-right.svg b/site/static/icons/arrow-right.svg deleted file mode 100644 index 57bb51ed28..0000000000 --- a/site/static/icons/arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/check.svg b/site/static/icons/check.svg deleted file mode 100644 index c3e46a42b6..0000000000 --- a/site/static/icons/check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/chevron.svg b/site/static/icons/chevron.svg deleted file mode 100644 index 9d582fa803..0000000000 --- a/site/static/icons/chevron.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/collapse.svg b/site/static/icons/collapse.svg deleted file mode 100644 index 795939aec8..0000000000 --- a/site/static/icons/collapse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/download.svg b/site/static/icons/download.svg deleted file mode 100644 index b286a882fe..0000000000 --- a/site/static/icons/download.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/dropdown.svg b/site/static/icons/dropdown.svg deleted file mode 100644 index 69435856b4..0000000000 --- a/site/static/icons/dropdown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/edit.svg b/site/static/icons/edit.svg deleted file mode 100644 index 760321cd2f..0000000000 --- a/site/static/icons/edit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/expand.svg b/site/static/icons/expand.svg deleted file mode 100644 index a026808da3..0000000000 --- a/site/static/icons/expand.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/flip.svg b/site/static/icons/flip.svg deleted file mode 100644 index 3a18d5ffa1..0000000000 --- a/site/static/icons/flip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/fork.svg b/site/static/icons/fork.svg deleted file mode 100644 index 3e21885495..0000000000 --- a/site/static/icons/fork.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/link.svg b/site/static/icons/link.svg deleted file mode 100644 index 3345bdd0ba..0000000000 --- a/site/static/icons/link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/icons/loading.svg b/site/static/icons/loading.svg deleted file mode 100644 index e54abff1dd..0000000000 --- a/site/static/icons/loading.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/site/static/icons/save.svg b/site/static/icons/save.svg deleted file mode 100644 index a8a5fa1618..0000000000 --- a/site/static/icons/save.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/images/svelte-android-chrome-192.png b/site/static/images/svelte-android-chrome-192.png deleted file mode 100644 index e3ccf28087..0000000000 Binary files a/site/static/images/svelte-android-chrome-192.png and /dev/null differ diff --git a/site/static/images/svelte-android-chrome-512.png b/site/static/images/svelte-android-chrome-512.png deleted file mode 100644 index e673c91c7b..0000000000 Binary files a/site/static/images/svelte-android-chrome-512.png and /dev/null differ diff --git a/site/static/images/svelte-apple-touch-icon.png b/site/static/images/svelte-apple-touch-icon.png deleted file mode 100644 index 5600445b1c..0000000000 Binary files a/site/static/images/svelte-apple-touch-icon.png and /dev/null differ diff --git a/site/static/images/svelte-mstile-150.png b/site/static/images/svelte-mstile-150.png deleted file mode 100644 index 7694b20455..0000000000 Binary files a/site/static/images/svelte-mstile-150.png and /dev/null differ diff --git a/site/static/images/twitter-card.png b/site/static/images/twitter-card.png deleted file mode 100644 index 7a66e94003..0000000000 Binary files a/site/static/images/twitter-card.png and /dev/null differ diff --git a/site/static/manifest.json b/site/static/manifest.json deleted file mode 100644 index 45a9d5b907..0000000000 --- a/site/static/manifest.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "background_color": "#ffffff", - "theme_color": "#ff3e00", - "name": "Svelte", - "short_name": "Svelte", - "display": "minimal-ui", - "start_url": "/", - "icons": [ - { - "src": "images/svelte-android-chrome-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "images/svelte-android-chrome-512.png", - "sizes": "512x512", - "type": "image/png" - } - ] -} diff --git a/site/static/media/rethinking-best-practices.jpg b/site/static/media/rethinking-best-practices.jpg deleted file mode 100644 index fdbae403de..0000000000 Binary files a/site/static/media/rethinking-best-practices.jpg and /dev/null differ diff --git a/site/static/media/svelte-ts.png b/site/static/media/svelte-ts.png deleted file mode 100644 index ed562822c3..0000000000 Binary files a/site/static/media/svelte-ts.png and /dev/null differ diff --git a/site/static/prism.css b/site/static/prism.css deleted file mode 100644 index 0bedd0f02b..0000000000 --- a/site/static/prism.css +++ /dev/null @@ -1,96 +0,0 @@ -/* ------------------------------------------------ - syntax-highlighting [prism] ------------------------------------------------ -*/ - -/* colors --------------------------------- */ -pre[class*='language-'] { - --background: var(--back-light); - --base: #545454; - --comment: #696969; - --keyword: #007f8a; - --function: #bb5525; - --string: #856e3d; - --number: #008000; - --tags: var(--function); - --important: var(--string); -} - -/* type-base ------------------------------ */ -code[class*='language-'], -pre[class*='language-'] { - background: none; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - font: 300 var(--code-fs)/1.7 var(--font-mono); - color: var(--base); - tab-size: 2; - -moz-tab-size: 2; - -webkit-hyphens: none; - hyphens: none; -} - -/* code-blocks ---------------------------- */ -pre[class*='language-'] { - overflow: auto; - padding: 1.5rem 2rem; - margin: .8rem 0 2.4rem; - /* max-width: var(--code-w); */ - border-radius: var(--border-r); - box-shadow: 1px 1px 1px rgba(68, 68, 68, .12) inset; -} - -:not(pre) > code[class*='language-'], -pre[class*='language-'] { - background: var(--background); -} - -/* tokens --------------------------------- */ -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { color: var(--comment) } - -.token.punctuation { color: var(--base) } - -.token.property, -.token.tag, -.token.constant, -.token.symbol, -.token.deleted { color: var(--tags) } - -.token.boolean, -.token.number { color: var(--number) } - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { color: var(--string) } - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable { color: var(--base) } - -.token.atrule, -.token.attr-value, -.token.function, -.token.class-name { color: var(--function) } - -.token.keyword { color: var(--keyword) } - -.token.regex, -.token.important { color: var(--important) } - -.token.important, -.token.bold { font-weight: bold } -.token.italic { font-style: italic } -.token.entity { cursor: help } \ No newline at end of file diff --git a/site/static/svelte-logo-horizontal.svg b/site/static/svelte-logo-horizontal.svg deleted file mode 100644 index 1d602a9051..0000000000 --- a/site/static/svelte-logo-horizontal.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/site/static/svelte-logo-mask.svg b/site/static/svelte-logo-mask.svg deleted file mode 100644 index 8572d3da6c..0000000000 --- a/site/static/svelte-logo-mask.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/svelte-logo-outline.svg b/site/static/svelte-logo-outline.svg deleted file mode 100644 index d93d71c593..0000000000 --- a/site/static/svelte-logo-outline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/svelte-logo-vertical.svg b/site/static/svelte-logo-vertical.svg deleted file mode 100644 index 7e2888234d..0000000000 --- a/site/static/svelte-logo-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/svelte-logo.svg b/site/static/svelte-logo.svg deleted file mode 100644 index d8b477bee1..0000000000 --- a/site/static/svelte-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/svelte-logotype.svg b/site/static/svelte-logotype.svg deleted file mode 100644 index 1e0aec15ef..0000000000 --- a/site/static/svelte-logotype.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/site/static/tutorial/dark-theme.css b/site/static/tutorial/dark-theme.css deleted file mode 100644 index e6bfb771f1..0000000000 --- a/site/static/tutorial/dark-theme.css +++ /dev/null @@ -1,5 +0,0 @@ -body { - background-color: #333; - color: whitesmoke; - transition: all 0.5s; -} \ No newline at end of file diff --git a/site/static/tutorial/icons/email.svg b/site/static/tutorial/icons/email.svg deleted file mode 100644 index 70d92ca430..0000000000 --- a/site/static/tutorial/icons/email.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/tutorial/icons/folder-open.svg b/site/static/tutorial/icons/folder-open.svg deleted file mode 100644 index b2a58e7432..0000000000 --- a/site/static/tutorial/icons/folder-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/tutorial/icons/folder.svg b/site/static/tutorial/icons/folder.svg deleted file mode 100644 index 2e1246a7f9..0000000000 --- a/site/static/tutorial/icons/folder.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/tutorial/icons/gif.svg b/site/static/tutorial/icons/gif.svg deleted file mode 100644 index 4b28abcecd..0000000000 --- a/site/static/tutorial/icons/gif.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/tutorial/icons/map-marker.svg b/site/static/tutorial/icons/map-marker.svg deleted file mode 100644 index 40a702db9d..0000000000 --- a/site/static/tutorial/icons/map-marker.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/tutorial/icons/md.svg b/site/static/tutorial/icons/md.svg deleted file mode 100644 index 582204d3b7..0000000000 --- a/site/static/tutorial/icons/md.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/tutorial/icons/xlsx.svg b/site/static/tutorial/icons/xlsx.svg deleted file mode 100644 index 1a51093a97..0000000000 --- a/site/static/tutorial/icons/xlsx.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/tutorial/image.gif b/site/static/tutorial/image.gif deleted file mode 100644 index 3ce9c237d5..0000000000 Binary files a/site/static/tutorial/image.gif and /dev/null differ diff --git a/site/static/tutorial/kitten.png b/site/static/tutorial/kitten.png deleted file mode 100644 index f1a0ecca19..0000000000 Binary files a/site/static/tutorial/kitten.png and /dev/null differ diff --git a/site/static/whos-using-svelte/1password.svg b/site/static/whos-using-svelte/1password.svg deleted file mode 100644 index ba8a63c014..0000000000 --- a/site/static/whos-using-svelte/1password.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/Schneider_Electric.svg b/site/static/whos-using-svelte/Schneider_Electric.svg deleted file mode 100644 index c70ca1fceb..0000000000 --- a/site/static/whos-using-svelte/Schneider_Electric.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/alaskaairlines.svg b/site/static/whos-using-svelte/alaskaairlines.svg deleted file mode 100644 index 15d172c08b..0000000000 --- a/site/static/whos-using-svelte/alaskaairlines.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/avast.svg b/site/static/whos-using-svelte/avast.svg deleted file mode 100644 index 736eeff3d9..0000000000 --- a/site/static/whos-using-svelte/avast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/chess.svg b/site/static/whos-using-svelte/chess.svg deleted file mode 100644 index bd85352a52..0000000000 --- a/site/static/whos-using-svelte/chess.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/fusioncharts.svg b/site/static/whos-using-svelte/fusioncharts.svg deleted file mode 100644 index 147dd9e026..0000000000 --- a/site/static/whos-using-svelte/fusioncharts.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/godaddy.svg b/site/static/whos-using-svelte/godaddy.svg deleted file mode 100644 index df39638281..0000000000 --- a/site/static/whos-using-svelte/godaddy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/ibm.svg b/site/static/whos-using-svelte/ibm.svg deleted file mode 100644 index d8982a47ab..0000000000 --- a/site/static/whos-using-svelte/ibm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/les-echos.svg b/site/static/whos-using-svelte/les-echos.svg deleted file mode 100644 index 6ab7eddeef..0000000000 --- a/site/static/whos-using-svelte/les-echos.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/nyt.svg b/site/static/whos-using-svelte/nyt.svg deleted file mode 100644 index cef76f1afb..0000000000 --- a/site/static/whos-using-svelte/nyt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/philips.svg b/site/static/whos-using-svelte/philips.svg deleted file mode 100644 index 5f6c7fa343..0000000000 --- a/site/static/whos-using-svelte/philips.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/rakuten.svg b/site/static/whos-using-svelte/rakuten.svg deleted file mode 100644 index 67b59c8354..0000000000 --- a/site/static/whos-using-svelte/rakuten.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/razorpay.svg b/site/static/whos-using-svelte/razorpay.svg deleted file mode 100644 index b430dc5a5b..0000000000 --- a/site/static/whos-using-svelte/razorpay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/square.svg b/site/static/whos-using-svelte/square.svg deleted file mode 100644 index d1b0689c61..0000000000 --- a/site/static/whos-using-svelte/square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/static/whos-using-svelte/transloadit.svg b/site/static/whos-using-svelte/transloadit.svg deleted file mode 100644 index f3383655bb..0000000000 --- a/site/static/whos-using-svelte/transloadit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/svelte.config.js b/site/svelte.config.js deleted file mode 100644 index 699dd19c68..0000000000 --- a/site/svelte.config.js +++ /dev/null @@ -1,36 +0,0 @@ -import adapter from '@sveltejs/adapter-node'; - -/** @type {import('@sveltejs/kit').Config} */ -export default { - kit: { - adapter: adapter(), - target: '#svelte', - prerender: { - enabled: false - }, - vite: () => ({ - optimizeDeps: { - include: [ - 'codemirror', - 'codemirror/mode/javascript/javascript.js', - 'codemirror/mode/handlebars/handlebars.js', - 'codemirror/mode/htmlmixed/htmlmixed.js', - 'codemirror/mode/xml/xml.js', - 'codemirror/mode/css/css.js', - 'codemirror/mode/markdown/markdown.js', - 'codemirror/addon/edit/closebrackets.js', - 'codemirror/addon/edit/closetag.js', - 'codemirror/addon/edit/continuelist.js', - 'codemirror/addon/comment/comment.js', - 'codemirror/addon/fold/foldcode.js', - 'codemirror/addon/fold/foldgutter.js', - 'codemirror/addon/fold/brace-fold.js', - 'codemirror/addon/fold/xml-fold.js', - 'codemirror/addon/fold/indent-fold.js', - 'codemirror/addon/fold/markdown-fold.js', - 'codemirror/addon/fold/comment-fold.js' - ] - } - }) - } -}; diff --git a/site/test/utils/slug.js b/site/test/utils/slug.js deleted file mode 100644 index a25672171e..0000000000 --- a/site/test/utils/slug.js +++ /dev/null @@ -1,430 +0,0 @@ -import * as uvu from 'uvu'; -import * as assert from 'uvu/assert'; -import {urlsafeSlugProcessor, unicodeSafeProcessor} from '../../src/utils/slug.js'; -import {SLUG_SEPARATOR as _} from '../../config.js'; - -function run(name, func) { - const suite = uvu.suite(name); - func(suite); - suite.run(); -} - -run('urlsafeSlugProcessor -> ascii', it => { - it('space separated words', () => { - assert.equal( - urlsafeSlugProcessor('Text expressions'), - `Text${_}expressions` - ); - }); - it('numbered text', () => { - assert.equal( - urlsafeSlugProcessor('1. export creates'), - `1${_}export${_}creates` - ); - }); - it('punctuated text', () => { - assert.equal( - urlsafeSlugProcessor('svelte.VERSION'), - `svelte${_}VERSION` - ); - }); - it('text starting with the dollar sign', () => { - assert.equal( - urlsafeSlugProcessor('$destroy method'), - `$destroy${_}method` - ); - }); - it('numbered text containing the dollar sign', () => { - assert.equal( - urlsafeSlugProcessor('1. export $destroy'), - `1${_}export${_}$destroy` - ); - }); - it('text containing the equal char', () => { - assert.equal( - urlsafeSlugProcessor('script context=module'), - `script${_}context${_}module` - ); - }); - it('text containing the colon char', () => { - assert.equal( - urlsafeSlugProcessor('svelte:body'), - `svelte${_}body` - ); - }); - it('text containing the slash char', () => { - assert.equal( - urlsafeSlugProcessor('svelte/motion'), - `svelte${_}motion` - ); - }); - it('text containing the comma char', () => { - assert.equal( - urlsafeSlugProcessor('svelte, motion'), - `svelte${_}motion` - ); - }); -}); - -run('urlsafeSlugProcessor - unicode', it => { - it('should translate symbols to English', () => { - assert.equal( - urlsafeSlugProcessor('Ich ♥ Deutsch'), - `Ich${_}love${_}Deutsch` - ); - }); - it('should remove emoji', () => { - assert.equal( - urlsafeSlugProcessor('Ich 😍 Deutsch'), - `Ich${_}Deutsch` - ); - }); -}); - -run('urlsafeSlugProcessor -> cyrillic', it => { - it('space separated words', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие и перехват событий'), - `Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('numbered text', () => { - assert.equal( - urlsafeSlugProcessor('1 Всплытие и перехват событий'), - `1${_}Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('punctuated text', () => { - assert.equal( - urlsafeSlugProcessor('.Всплытие.и.перехват событий'), - `Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('text starting with the dollar sign', () => { - assert.equal( - urlsafeSlugProcessor('$Всплытие $ перехват событий'), - `$Vsplytie${_}$${_}perehvat${_}sobytij` - ); - }); - it('text containing the dollar sign', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие$перехват'), - `Vsplytie$perehvat` - ); - }); - it('text containing the equal char', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие = перехват=событий'), - `Vsplytie${_}perehvat${_}sobytij` - ); - }); - it('text containing the colon char', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие : перехват:событий'), - `Vsplytie${_}perehvat${_}sobytij` - ); - }); - it('text containing the slash char', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие / перехват/событий'), - `Vsplytie${_}perehvat${_}sobytij` - ); - }); - it('text containing the comma char', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие, перехват'), - `Vsplytie${_}perehvat` - ); - }); -}); - -run('urlsafeSlugProcessor -> ascii + cyrillic', it => { - it('space separated words', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие и export перехват событий'), - `Vsplytie${_}i${_}export${_}perehvat${_}sobytij` - ); - }); - it('ascii word concatenated to a cyrillic word', () => { - assert.equal( - urlsafeSlugProcessor('exportВсплытие'), - 'exportVsplytie' - ); - }); - it('cyrillic word concatenated to an ascii word', () => { - assert.equal( - urlsafeSlugProcessor('Всплытиеexport'), - `Vsplytieexport` - ); - }); - it('numbered text', () => { - assert.equal( - urlsafeSlugProcessor('1 export Всплытие и перехват событий'), - `1${_}export${_}Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('punctuated text', () => { - assert.equal( - urlsafeSlugProcessor('.Всплытие.export.и.перехват событий'), - `Vsplytie${_}export${_}i${_}perehvat${_}sobytij` - ); - }); - it('text starting with the dollar sign, followed by ascii char', () => { - assert.equal( - urlsafeSlugProcessor('$exportВсплытие перехват событий'), - `$exportVsplytie${_}perehvat${_}sobytij` - ); - }); - it('text starting with the dollar sign, followed by unicode char', () => { - assert.equal( - urlsafeSlugProcessor('$Всплытие export перехват событий'), - `$Vsplytie${_}export${_}perehvat${_}sobytij` - ); - }); - it('text containing the dollar sign, followed by ascii char', () => { - assert.equal( - urlsafeSlugProcessor('export $destroy a component prop Всплытие и перехват событий'), - `export${_}$destroy${_}a${_}component${_}prop${_}Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('text containing the dollar sign, followed by unicode char', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие export $Всплытие a component prop Всплытие и перехват событий'), - `Vsplytie${_}export${_}$Vsplytie${_}a${_}component${_}prop${_}Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('text containing the equal char', () => { - assert.equal( - urlsafeSlugProcessor('script context=module Всплытие=и перехват событий'), - `script${_}context${_}module${_}Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('text containing the colon char', () => { - assert.equal( - urlsafeSlugProcessor('svelte:body Всплытие и:перехват событий'), - `svelte${_}body${_}Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('text containing the slash char', () => { - assert.equal( - urlsafeSlugProcessor('svelte/motion Всплытие и / перехват/событий'), - `svelte${_}motion${_}Vsplytie${_}i${_}perehvat${_}sobytij` - ); - }); - it('text containing the comma char', () => { - assert.equal( - urlsafeSlugProcessor('Всплытие, export'), - `Vsplytie${_}export` - ); - }); -}); - -run('unicodeSafeProcessor (preserve unicode) -> ascii', it => { - it('space separated words', () => { - assert.equal( - unicodeSafeProcessor('Text expressions'), - `Text${_}expressions` - ); - }); - it('numbered text', () => { - assert.equal( - unicodeSafeProcessor('1. export creates'), - `1${_}export${_}creates` - ); - }); - it('punctuated text', () => { - assert.equal( - unicodeSafeProcessor('svelte.VERSION'), - `svelte${_}VERSION` - ); - }); - it('text starting with the dollar sign', () => { - assert.equal( - unicodeSafeProcessor('$destroy method'), - `$destroy${_}method` - ); - }); - it('numbered text containing the dollar sign', () => { - assert.equal( - unicodeSafeProcessor('1. export $destroy'), - `1${_}export${_}$destroy` - ); - }); - it('text containing the equal char', () => { - assert.equal( - unicodeSafeProcessor('script context=module'), - `script${_}context${_}module` - ); - }); - it('text containing the colon char', () => { - assert.equal( - unicodeSafeProcessor('svelte:body'), - `svelte${_}body` - ); - }); - it('text containing the slash char', () => { - assert.equal( - unicodeSafeProcessor('svelte/motion'), - `svelte${_}motion` - ); - }); - it('text containing the comma char', () => { - assert.equal( - unicodeSafeProcessor('svelte, motion'), - `svelte${_}motion` - ); - }); -}); - -run('unicodeSafeProcessor (preserve unicode) -> unicode', it => { - it('should preserve symbols', () => { - assert.equal( - unicodeSafeProcessor('Ich ♥ Deutsch'), - `Ich${_}love${_}Deutsch` - ); - }); - it('should remove emoji', () => { - assert.equal( - unicodeSafeProcessor('Ich 😍 Deutsch'), - `Ich${_}Deutsch` - ); - }); -}); - -run('unicodeSafeProcessor (preserve unicode) -> cyrillic', it => { - it('space separated words', () => { - assert.equal( - unicodeSafeProcessor('Всплытие и перехват событий'), - `Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('numbered text', () => { - assert.equal( - unicodeSafeProcessor('1 Всплытие и перехват событий'), - `1${_}Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('punctuated text', () => { - assert.equal( - unicodeSafeProcessor('.Всплытие.и.перехват событий'), - `Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('text starting with the dollar sign', () => { - assert.equal( - unicodeSafeProcessor('$Всплытие $ перехват событий'), - `$${_}Всплытие${_}$${_}перехват${_}событий` - ); - }); - it('text containing the dollar sign', () => { - assert.equal( - unicodeSafeProcessor('Всплытие$перехват'), - `Всплытие${_}$${_}перехват` - ); - }); - it('text containing the equal char', () => { - assert.equal( - unicodeSafeProcessor('Всплытие = перехват=событий'), - `Всплытие${_}перехват${_}событий` - ); - }); - it('text containing the colon char', () => { - assert.equal( - unicodeSafeProcessor('Всплытие : перехват:событий'), - `Всплытие${_}перехват${_}событий` - ); - }); - it('text containing the slash char', () => { - assert.equal( - unicodeSafeProcessor('Всплытие / перехват/событий'), - `Всплытие${_}перехват${_}событий` - ); - }); - it('text containing the comma char', () => { - assert.equal( - unicodeSafeProcessor('Всплытие, перехват'), - `Всплытие${_}перехват` - ); - }); -}); - -run('unicodeSafeProcessor (preserve unicode) -> ascii + cyrillic', it => { - it('space separated words', () => { - assert.equal( - unicodeSafeProcessor('Всплытие и export перехват событий'), - `Всплытие${_}и${_}export${_}перехват${_}событий` - ); - }); - it('ascii word concatenated to a cyrillic word', () => { - assert.equal( - unicodeSafeProcessor('exportВсплытие'), - `export${_}Всплытие` - ); - }); - it('cyrillic word concatenated to an ascii word', () => { - assert.equal( - unicodeSafeProcessor('Всплытиеexport'), - `Всплытие${_}export` - ); - }); - it('numbered text', () => { - assert.equal( - unicodeSafeProcessor('1 export Всплытие и перехват событий'), - `1${_}export${_}Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('punctuated text', () => { - assert.equal( - unicodeSafeProcessor('.Всплытие.export.и.перехват событий'), - `Всплытие${_}export${_}и${_}перехват${_}событий` - ); - }); - it('text starting with the dollar sign, followed by ascii char', () => { - assert.equal( - unicodeSafeProcessor('$exportВсплытие перехват событий'), - `$export${_}Всплытие${_}перехват${_}событий` - ); - }); - it('text starting with the dollar sign, followed by unicode char', () => { - assert.equal( - unicodeSafeProcessor('$Всплытие export перехват событий'), - `$${_}Всплытие${_}export${_}перехват${_}событий` - ); - }); - it('text containing the dollar sign, followed by ascii char', () => { - assert.equal( - unicodeSafeProcessor('export $destroy a component prop Всплытие и перехват событий'), - `export${_}$destroy${_}a${_}component${_}prop${_}Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('text containing the dollar sign, followed by unicode char', () => { - assert.equal( - unicodeSafeProcessor('Всплытие export $Всплытие a component prop Всплытие и перехват событий'), - `Всплытие${_}export${_}$${_}Всплытие${_}a${_}component${_}prop${_}Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('text containing the equal char', () => { - assert.equal( - unicodeSafeProcessor('script context=module Всплытие=и перехват событий'), - `script${_}context${_}module${_}Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('text containing the colon char', () => { - assert.equal( - unicodeSafeProcessor('svelte:body Всплытие и:перехват событий'), - `svelte${_}body${_}Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('text containing the slash char', () => { - assert.equal( - unicodeSafeProcessor('svelte/motion Всплытие и / перехват/событий'), - `svelte${_}motion${_}Всплытие${_}и${_}перехват${_}событий` - ); - }); - it('text containing the comma char', () => { - assert.equal( - unicodeSafeProcessor('Всплытие, export'), - `Всплытие${_}export` - ); - }); -}); diff --git a/src/compiler/compile/Component.ts b/src/compiler/compile/Component.ts index 4d4cf909fd..0347a28743 100644 --- a/src/compiler/compile/Component.ts +++ b/src/compiler/compile/Component.ts @@ -24,7 +24,7 @@ import TemplateScope from './nodes/shared/TemplateScope'; import fuzzymatch from '../utils/fuzzymatch'; import get_object from './utils/get_object'; import Slot from './nodes/Slot'; -import { Node, ImportDeclaration, ExportNamedDeclaration, Identifier, ExpressionStatement, AssignmentExpression, Literal, Property, RestElement, ExportDefaultDeclaration, ExportAllDeclaration } from 'estree'; +import { Node, ImportDeclaration, ExportNamedDeclaration, Identifier, ExpressionStatement, AssignmentExpression, Literal, Property, RestElement, ExportDefaultDeclaration, ExportAllDeclaration, FunctionDeclaration, FunctionExpression } from 'estree'; import add_to_set from './utils/add_to_set'; import check_graph_for_cycles from './utils/check_graph_for_cycles'; import { print, b } from 'code-red'; @@ -766,12 +766,13 @@ export default class Component { }; let scope_updated = false; - let generator_count = 0; + const current_function_stack = []; + let current_function: FunctionDeclaration | FunctionExpression = null; walk(content, { enter(node: Node, parent: Node, prop, index) { - if ((node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression') && node.generator === true) { - generator_count++; + if ((node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression')) { + current_function_stack.push(current_function = node); } if (map.has(node)) { @@ -800,12 +801,13 @@ export default class Component { }, leave(node: Node) { - if ((node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression') && node.generator === true) { - generator_count--; + if ((node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression')) { + current_function_stack.pop(); + current_function = current_function_stack[current_function_stack.length - 1]; } // do it on leave, to prevent infinite loop - if (component.compile_options.dev && component.compile_options.loopGuardTimeout > 0 && generator_count <= 0) { + if (component.compile_options.dev && component.compile_options.loopGuardTimeout > 0 && (!current_function || (!current_function.generator && !current_function.async))) { const to_replace_for_loop_protect = component.loop_protect(node, scope, component.compile_options.loopGuardTimeout); if (to_replace_for_loop_protect) { this.replace(to_replace_for_loop_protect); diff --git a/src/compiler/compile/render_dom/wrappers/Element/Attribute.ts b/src/compiler/compile/render_dom/wrappers/Element/Attribute.ts index 3f57d004be..7b6aed0d5a 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/Attribute.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/Attribute.ts @@ -10,6 +10,21 @@ import handle_select_value_binding from './handle_select_value_binding'; import { Identifier, Node } from 'estree'; import { namespaces } from '../../../../utils/namespaces'; +const non_textlike_input_types = new Set([ + 'button', + 'checkbox', + 'color', + 'date', + 'datetime-local', + 'file', + 'hidden', + 'image', + 'radio', + 'range', + 'reset', + 'submit' +]); + export class BaseAttributeWrapper { node: Attribute; parent: ElementWrapper; @@ -203,8 +218,7 @@ export default class AttributeWrapper extends BaseAttributeWrapper { if (this.is_input_value) { const type = element.node.get_static_attribute_value('type'); - - if (type === null || type === '' || type === 'text' || type === 'email' || type === 'password') { + if (type !== true && !non_textlike_input_types.has(type)) { condition = x`${condition} && ${element.var}.${property_name} !== ${should_cache ? last : value}`; } } diff --git a/src/compiler/utils/names.ts b/src/compiler/utils/names.ts index 8df2a7247b..27acc8eb78 100644 --- a/src/compiler/utils/names.ts +++ b/src/compiler/utils/names.ts @@ -60,6 +60,7 @@ export const globals = new Set([ 'undefined', 'URIError', 'URL', + 'URLSearchParams', 'window' ]); diff --git a/src/runtime/internal/scheduler.ts b/src/runtime/internal/scheduler.ts index 568739e4f8..c0b8e57b08 100644 --- a/src/runtime/internal/scheduler.ts +++ b/src/runtime/internal/scheduler.ts @@ -1,5 +1,5 @@ import { run_all } from './utils'; -import { set_current_component } from './lifecycle'; +import { current_component, set_current_component } from './lifecycle'; export const dirty_components = []; export const intros = { enabled: false }; @@ -31,23 +31,42 @@ export function add_flush_callback(fn) { flush_callbacks.push(fn); } -let flushing = false; +// flush() calls callbacks in this order: +// 1. All beforeUpdate callbacks, in order: parents before children +// 2. All bind:this callbacks, in reverse order: children before parents. +// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT +// for afterUpdates called during the initial onMount, which are called in +// reverse order: children before parents. +// Since callbacks might update component values, which could trigger another +// call to flush(), the following steps guard against this: +// 1. During beforeUpdate, any updated components will be added to the +// dirty_components array and will cause a reentrant call to flush(). Because +// the flush index is kept outside the function, the reentrant call will pick +// up where the earlier call left off and go through all dirty components. The +// current_component value is saved and restored so that the reentrant call will +// not interfere with the "parent" flush() call. +// 2. bind:this callbacks cannot trigger new flush() calls. +// 3. During afterUpdate, any updated components will NOT have their afterUpdate +// callback called a second time; the seen_callbacks set, outside the flush() +// function, guarantees this behavior. const seen_callbacks = new Set(); +let flushidx = 0; // Do *not* move this inside the flush() function export function flush() { - if (flushing) return; - flushing = true; + const saved_component = current_component; do { // first, call beforeUpdate functions // and update components - for (let i = 0; i < dirty_components.length; i += 1) { - const component = dirty_components[i]; + while (flushidx < dirty_components.length) { + const component = dirty_components[flushidx]; + flushidx++; set_current_component(component); update(component.$$); } set_current_component(null); dirty_components.length = 0; + flushidx = 0; while (binding_callbacks.length) binding_callbacks.pop()(); @@ -73,8 +92,8 @@ export function flush() { } update_scheduled = false; - flushing = false; seen_callbacks.clear(); + set_current_component(saved_component); } function update($$) { diff --git a/test/js/samples/input-value/expected.js b/test/js/samples/input-value/expected.js index 2491a24256..2f951c9ae1 100644 --- a/test/js/samples/input-value/expected.js +++ b/test/js/samples/input-value/expected.js @@ -2,12 +2,14 @@ import { SvelteComponent, append, + attr, detach, element, init, insert, listen, noop, + run_all, safe_not_equal, set_data, space, @@ -15,50 +17,388 @@ import { } from "svelte/internal"; function create_fragment(ctx) { - let input; + let input0; let t0; - let h1; + let input1; let t1; + let input2; let t2; + let input3; + let t3; + let input4; + let t4; + let input5; + let t5; + let input6; + let t6; + let input7; + let t7; + let input8; + let t8; + let input9; + let t9; + let input10; + let t10; + let input11; + let t11; + let input12; + let t12; + let input13; + let t13; + let input14; + let t14; + let input15; + let t15; + let input16; + let t16; + let input17; + let t17; + let input18; + let t18; + let input19; + let t19; + let input20; + let t20; + let input21; + let t21; + let input22; + let t22; + let h1; + let t23; + let t24; let mounted; let dispose; return { c() { - input = element("input"); + input0 = element("input"); t0 = space(); + input1 = element("input"); + t1 = space(); + input2 = element("input"); + t2 = space(); + input3 = element("input"); + t3 = space(); + input4 = element("input"); + t4 = space(); + input5 = element("input"); + t5 = space(); + input6 = element("input"); + t6 = space(); + input7 = element("input"); + t7 = space(); + input8 = element("input"); + t8 = space(); + input9 = element("input"); + t9 = space(); + input10 = element("input"); + t10 = space(); + input11 = element("input"); + t11 = space(); + input12 = element("input"); + t12 = space(); + input13 = element("input"); + t13 = space(); + input14 = element("input"); + t14 = space(); + input15 = element("input"); + t15 = space(); + input16 = element("input"); + t16 = space(); + input17 = element("input"); + t17 = space(); + input18 = element("input"); + t18 = space(); + input19 = element("input"); + t19 = space(); + input20 = element("input"); + t20 = space(); + input21 = element("input"); + t21 = space(); + input22 = element("input"); + t22 = space(); h1 = element("h1"); - t1 = text(/*name*/ ctx[0]); - t2 = text("!"); - input.value = /*name*/ ctx[0]; + t23 = text(/*name*/ ctx[0]); + t24 = text("!"); + input0.value = /*name*/ ctx[0]; + attr(input1, "type", "email"); + input1.value = /*name*/ ctx[0]; + attr(input2, "type", "month"); + input2.value = /*name*/ ctx[0]; + attr(input3, "type", "number"); + input3.value = /*name*/ ctx[0]; + attr(input4, "type", "password"); + input4.value = /*name*/ ctx[0]; + attr(input5, "type", "search"); + input5.value = /*name*/ ctx[0]; + attr(input6, "type", "tel"); + input6.value = /*name*/ ctx[0]; + attr(input7, "type", "text"); + input7.value = /*name*/ ctx[0]; + attr(input8, "type", "url"); + input8.value = /*name*/ ctx[0]; + attr(input9, "type", "week"); + input9.value = /*name*/ ctx[0]; + attr(input10, "type", "button"); + input10.value = /*name*/ ctx[0]; + attr(input11, "type", "checkbox"); + input11.value = /*name*/ ctx[0]; + attr(input12, "type", "color"); + input12.value = /*name*/ ctx[0]; + attr(input13, "type", "date"); + input13.value = /*name*/ ctx[0]; + attr(input14, "type", "datetime-local"); + input14.value = /*name*/ ctx[0]; + attr(input15, "type", "file"); + input15.value = /*name*/ ctx[0]; + attr(input16, "type", "hidden"); + input16.value = /*name*/ ctx[0]; + attr(input17, "type", "image"); + input17.value = /*name*/ ctx[0]; + attr(input17, "alt", /*name*/ ctx[0]); + attr(input18, "type", "radio"); + input18.value = /*name*/ ctx[0]; + attr(input19, "type", "range"); + input19.value = /*name*/ ctx[0]; + attr(input20, "type", "reset"); + input20.value = /*name*/ ctx[0]; + attr(input21, "type", "submit"); + input21.value = /*name*/ ctx[0]; + attr(input22, "type", "time"); + input22.value = /*name*/ ctx[0]; }, m(target, anchor) { - insert(target, input, anchor); + insert(target, input0, anchor); insert(target, t0, anchor); + insert(target, input1, anchor); + insert(target, t1, anchor); + insert(target, input2, anchor); + insert(target, t2, anchor); + insert(target, input3, anchor); + insert(target, t3, anchor); + insert(target, input4, anchor); + insert(target, t4, anchor); + insert(target, input5, anchor); + insert(target, t5, anchor); + insert(target, input6, anchor); + insert(target, t6, anchor); + insert(target, input7, anchor); + insert(target, t7, anchor); + insert(target, input8, anchor); + insert(target, t8, anchor); + insert(target, input9, anchor); + insert(target, t9, anchor); + insert(target, input10, anchor); + insert(target, t10, anchor); + insert(target, input11, anchor); + insert(target, t11, anchor); + insert(target, input12, anchor); + insert(target, t12, anchor); + insert(target, input13, anchor); + insert(target, t13, anchor); + insert(target, input14, anchor); + insert(target, t14, anchor); + insert(target, input15, anchor); + insert(target, t15, anchor); + insert(target, input16, anchor); + insert(target, t16, anchor); + insert(target, input17, anchor); + insert(target, t17, anchor); + insert(target, input18, anchor); + insert(target, t18, anchor); + insert(target, input19, anchor); + insert(target, t19, anchor); + insert(target, input20, anchor); + insert(target, t20, anchor); + insert(target, input21, anchor); + insert(target, t21, anchor); + insert(target, input22, anchor); + insert(target, t22, anchor); insert(target, h1, anchor); - append(h1, t1); - append(h1, t2); + append(h1, t23); + append(h1, t24); if (!mounted) { - dispose = listen(input, "input", /*onInput*/ ctx[1]); + dispose = [ + listen(input0, "input", /*onInput*/ ctx[1]), + listen(input1, "input", /*onInput*/ ctx[1]), + listen(input2, "input", /*onInput*/ ctx[1]), + listen(input3, "input", /*onInput*/ ctx[1]), + listen(input4, "input", /*onInput*/ ctx[1]), + listen(input5, "input", /*onInput*/ ctx[1]), + listen(input6, "input", /*onInput*/ ctx[1]), + listen(input7, "input", /*onInput*/ ctx[1]), + listen(input8, "input", /*onInput*/ ctx[1]), + listen(input9, "input", /*onInput*/ ctx[1]), + listen(input10, "input", /*onInput*/ ctx[1]), + listen(input11, "input", /*onInput*/ ctx[1]), + listen(input12, "input", /*onInput*/ ctx[1]), + listen(input13, "input", /*onInput*/ ctx[1]), + listen(input14, "input", /*onInput*/ ctx[1]), + listen(input15, "input", /*onInput*/ ctx[1]), + listen(input16, "input", /*onInput*/ ctx[1]), + listen(input17, "input", /*onInput*/ ctx[1]), + listen(input18, "input", /*onInput*/ ctx[1]), + listen(input19, "input", /*onInput*/ ctx[1]), + listen(input20, "input", /*onInput*/ ctx[1]), + listen(input21, "input", /*onInput*/ ctx[1]), + listen(input22, "input", /*onInput*/ ctx[1]) + ]; + mounted = true; } }, p(ctx, [dirty]) { - if (dirty & /*name*/ 1 && input.value !== /*name*/ ctx[0]) { - input.value = /*name*/ ctx[0]; + if (dirty & /*name*/ 1 && input0.value !== /*name*/ ctx[0]) { + input0.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input1.value !== /*name*/ ctx[0]) { + input1.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input2.value !== /*name*/ ctx[0]) { + input2.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input3.value !== /*name*/ ctx[0]) { + input3.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input4.value !== /*name*/ ctx[0]) { + input4.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input5.value !== /*name*/ ctx[0]) { + input5.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input6.value !== /*name*/ ctx[0]) { + input6.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input7.value !== /*name*/ ctx[0]) { + input7.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input8.value !== /*name*/ ctx[0]) { + input8.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input9.value !== /*name*/ ctx[0]) { + input9.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input10.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input11.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input12.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input13.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input14.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input15.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input16.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input17.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + attr(input17, "alt", /*name*/ ctx[0]); + } + + if (dirty & /*name*/ 1) { + input18.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input19.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input20.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1) { + input21.value = /*name*/ ctx[0]; + } + + if (dirty & /*name*/ 1 && input22.value !== /*name*/ ctx[0]) { + input22.value = /*name*/ ctx[0]; } - if (dirty & /*name*/ 1) set_data(t1, /*name*/ ctx[0]); + if (dirty & /*name*/ 1) set_data(t23, /*name*/ ctx[0]); }, i: noop, o: noop, d(detaching) { - if (detaching) detach(input); + if (detaching) detach(input0); if (detaching) detach(t0); + if (detaching) detach(input1); + if (detaching) detach(t1); + if (detaching) detach(input2); + if (detaching) detach(t2); + if (detaching) detach(input3); + if (detaching) detach(t3); + if (detaching) detach(input4); + if (detaching) detach(t4); + if (detaching) detach(input5); + if (detaching) detach(t5); + if (detaching) detach(input6); + if (detaching) detach(t6); + if (detaching) detach(input7); + if (detaching) detach(t7); + if (detaching) detach(input8); + if (detaching) detach(t8); + if (detaching) detach(input9); + if (detaching) detach(t9); + if (detaching) detach(input10); + if (detaching) detach(t10); + if (detaching) detach(input11); + if (detaching) detach(t11); + if (detaching) detach(input12); + if (detaching) detach(t12); + if (detaching) detach(input13); + if (detaching) detach(t13); + if (detaching) detach(input14); + if (detaching) detach(t14); + if (detaching) detach(input15); + if (detaching) detach(t15); + if (detaching) detach(input16); + if (detaching) detach(t16); + if (detaching) detach(input17); + if (detaching) detach(t17); + if (detaching) detach(input18); + if (detaching) detach(t18); + if (detaching) detach(input19); + if (detaching) detach(t19); + if (detaching) detach(input20); + if (detaching) detach(t20); + if (detaching) detach(input21); + if (detaching) detach(t21); + if (detaching) detach(input22); + if (detaching) detach(t22); if (detaching) detach(h1); mounted = false; - dispose(); + run_all(dispose); } }; } @@ -80,4 +420,4 @@ class Component extends SvelteComponent { } } -export default Component; \ No newline at end of file +export default Component; diff --git a/test/js/samples/input-value/input.svelte b/test/js/samples/input-value/input.svelte index 476458a195..ee1d9e3de7 100644 --- a/test/js/samples/input-value/input.svelte +++ b/test/js/samples/input-value/input.svelte @@ -1,11 +1,33 @@ + + + + + + + + + -

{name}!

\ No newline at end of file + + + + + + + + + + + + + +

{name}!

diff --git a/test/runtime/samples/component-binding-onMount/Mount.svelte b/test/runtime/samples/component-binding-onMount/Mount.svelte new file mode 100644 index 0000000000..ce3b0c48f8 --- /dev/null +++ b/test/runtime/samples/component-binding-onMount/Mount.svelte @@ -0,0 +1,15 @@ + + +
+

+ Bound? {bound} +

diff --git a/test/runtime/samples/component-binding-onMount/_config.js b/test/runtime/samples/component-binding-onMount/_config.js new file mode 100644 index 0000000000..4ae78b588a --- /dev/null +++ b/test/runtime/samples/component-binding-onMount/_config.js @@ -0,0 +1,11 @@ +export default { + async test({ assert, target }) { + assert.htmlEqual(target.innerHTML, ` +
+

+ Bound? true +

+
+ `); + } +}; diff --git a/test/runtime/samples/component-binding-onMount/main.svelte b/test/runtime/samples/component-binding-onMount/main.svelte new file mode 100644 index 0000000000..971b13c1ce --- /dev/null +++ b/test/runtime/samples/component-binding-onMount/main.svelte @@ -0,0 +1,13 @@ + + +
diff --git a/test/runtime/samples/loop-protect-async-opt-out/_config.js b/test/runtime/samples/loop-protect-async-opt-out/_config.js new file mode 100644 index 0000000000..b1855c83eb --- /dev/null +++ b/test/runtime/samples/loop-protect-async-opt-out/_config.js @@ -0,0 +1,9 @@ +export default { + compileOptions: { + dev: true, + loopGuardTimeout: 1 + }, + async test({ component }) { + await component.run_async_function(); + } +}; diff --git a/test/runtime/samples/loop-protect-async-opt-out/main.svelte b/test/runtime/samples/loop-protect-async-opt-out/main.svelte new file mode 100644 index 0000000000..bc711ac5a3 --- /dev/null +++ b/test/runtime/samples/loop-protect-async-opt-out/main.svelte @@ -0,0 +1,12 @@ + diff --git a/test/runtime/samples/loop-protect-generator-opt-out/_config.js b/test/runtime/samples/loop-protect-generator-opt-out/_config.js index 0fe83a36db..2680ecfdfb 100644 --- a/test/runtime/samples/loop-protect-generator-opt-out/_config.js +++ b/test/runtime/samples/loop-protect-generator-opt-out/_config.js @@ -2,5 +2,8 @@ export default { compileOptions: { dev: true, loopGuardTimeout: 1 + }, + async test({ component }) { + await component.run_generator(); } }; diff --git a/test/runtime/samples/loop-protect-generator-opt-out/main.svelte b/test/runtime/samples/loop-protect-generator-opt-out/main.svelte index a7aa790681..514089435d 100644 --- a/test/runtime/samples/loop-protect-generator-opt-out/main.svelte +++ b/test/runtime/samples/loop-protect-generator-opt-out/main.svelte @@ -1,10 +1,12 @@