From 501efa9413da81cd9016ef56149f0b2c6820433b Mon Sep 17 00:00:00 2001 From: Shivam Meena Date: Thu, 5 Oct 2023 07:35:26 +0530 Subject: [PATCH] html-satori based --- .eslintrc.cjs | 28 +- .github/ISSUE_TEMPLATE/bug_report.md | 40 - .github/ISSUE_TEMPLATE/feature_request.md | 19 - .github/workflows/publish.yml | 27 - .gitignore | 7 +- .npmrc | 1 + LICENSE | 21 - README.md | 203 +- examples/cf-page-build/package.json | 2 +- examples/cf-page-build/pnpm-lock.yaml | 6 +- examples/cf-workers-build/package.json | 20 +- examples/cf-workers-build/pnpm-lock.yaml | 526 +++-- package.json | 101 +- playwright.config.ts | 10 - pnpm-lock.yaml | 1561 +++++--------- postcss.config.cjs | 6 - src/app.css | 14 - src/app.d.ts | 17 +- src/app.html | 29 +- src/components/Navbar.svelte | 72 - src/index.test.ts | 7 + src/lib/api.ts | 78 + src/lib/index.ts | 99 +- src/lib/toReactElement.ts | 107 - src/routes/+layout.svelte | 71 - src/routes/+page.svelte | 240 --- src/routes/+page.ts | 1 - src/routes/+server.ts | 7 + src/routes/component-og/+server.ts | 26 - src/routes/component-og/OG.svelte | 29 - src/routes/new/+server.ts | 50 - src/routes/og/+server.ts | 19 - src/routes/sc/+server.ts | 10 + src/routes/sc/OG.svelte | 29 + static/demo.png | Bin 12657 -> 0 bytes static/favicon.ico | Bin 1150 -> 0 bytes static/iaw-mono-var.woff2 | Bin 42832 -> 0 bytes static/inter-latin-ext-400-normal.woff | Bin 43980 -> 0 bytes static/inter-latin-ext-700-normal.woff | Bin 47744 -> 0 bytes static/logo.png | Bin 13047 -> 0 bytes static/logo.webp | Bin 6128 -> 0 bytes static/noto-sans.ttf | Bin 27748 -> 0 bytes static/~partytown/debug/partytown-atomics.js | 572 ----- static/~partytown/debug/partytown-media.js | 374 ---- .../~partytown/debug/partytown-sandbox-sw.js | 559 ----- static/~partytown/debug/partytown-sw.js | 59 - .../~partytown/debug/partytown-ww-atomics.js | 1884 ----------------- static/~partytown/debug/partytown-ww-sw.js | 1876 ---------------- static/~partytown/debug/partytown.js | 75 - static/~partytown/partytown-atomics.js | 2 - static/~partytown/partytown-media.js | 2 - static/~partytown/partytown-sw.js | 2 - static/~partytown/partytown.js | 2 - svelte.config.js | 17 +- tailwind.config.cjs | 8 - tsconfig.json | 7 +- vercel.json | 12 - vite.config.ts | 29 +- 58 files changed, 1099 insertions(+), 7864 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .github/workflows/publish.yml delete mode 100644 LICENSE delete mode 100644 playwright.config.ts delete mode 100644 postcss.config.cjs delete mode 100644 src/app.css delete mode 100644 src/components/Navbar.svelte create mode 100644 src/index.test.ts create mode 100644 src/lib/api.ts delete mode 100644 src/lib/toReactElement.ts delete mode 100644 src/routes/+layout.svelte delete mode 100644 src/routes/+page.svelte delete mode 100644 src/routes/+page.ts create mode 100644 src/routes/+server.ts delete mode 100644 src/routes/component-og/+server.ts delete mode 100644 src/routes/component-og/OG.svelte delete mode 100644 src/routes/new/+server.ts delete mode 100644 src/routes/og/+server.ts create mode 100644 src/routes/sc/+server.ts create mode 100644 src/routes/sc/OG.svelte delete mode 100644 static/demo.png delete mode 100644 static/favicon.ico delete mode 100644 static/iaw-mono-var.woff2 delete mode 100644 static/inter-latin-ext-400-normal.woff delete mode 100644 static/inter-latin-ext-700-normal.woff delete mode 100644 static/logo.png delete mode 100644 static/logo.webp delete mode 100644 static/noto-sans.ttf delete mode 100644 static/~partytown/debug/partytown-atomics.js delete mode 100644 static/~partytown/debug/partytown-media.js delete mode 100644 static/~partytown/debug/partytown-sandbox-sw.js delete mode 100644 static/~partytown/debug/partytown-sw.js delete mode 100644 static/~partytown/debug/partytown-ww-atomics.js delete mode 100644 static/~partytown/debug/partytown-ww-sw.js delete mode 100644 static/~partytown/debug/partytown.js delete mode 100644 static/~partytown/partytown-atomics.js delete mode 100644 static/~partytown/partytown-media.js delete mode 100644 static/~partytown/partytown-sw.js delete mode 100644 static/~partytown/partytown.js delete mode 100644 tailwind.config.cjs delete mode 100644 vercel.json diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 3ccf435..ebc1958 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,20 +1,30 @@ module.exports = { root: true, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:svelte/recommended', + 'prettier' + ], parser: '@typescript-eslint/parser', - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], - plugins: ['svelte3', '@typescript-eslint'], - ignorePatterns: ['*.cjs'], - overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], - settings: { - 'svelte3/typescript': () => require('typescript') - }, + plugins: ['@typescript-eslint'], parserOptions: { sourceType: 'module', - ecmaVersion: 2020 + ecmaVersion: 2020, + extraFileExtensions: ['.svelte'] }, env: { browser: true, es2017: true, node: true - } + }, + overrides: [ + { + files: ['*.svelte'], + parser: 'svelte-eslint-parser', + parserOptions: { + parser: '@typescript-eslint/parser' + } + } + ] }; diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index b5c68e5..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: - -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - -- OS: [e.g. iOS] -- Browser [e.g. chrome, safari] -- Version [e.g. 22] - -**Smartphone (please complete the following information):** - -- Device: [e.g. iPhone6] -- OS: [e.g. iOS8.1] -- Browser [e.g. stock browser, safari] -- Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 2f28cea..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index c629bb9..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,27 +0,0 @@ -on: - push: - branches: main - -jobs: - publish: - runs-on: ubuntu-latest - env: - CI: true - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 18 - - uses: pnpm/action-setup@v2 - name: Install pnpm - id: pnpm-install - with: - version: 8.6.1 - - run: pnpm install - - run: pnpm test:build - - run: pnpm build - #- run: pnpm test - - uses: JS-DevTools/npm-publish@v2 - with: - token: ${{ secrets.NPM_TOKEN }} - package: "package" diff --git a/.gitignore b/.gitignore index 136bbef..2ec1cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,12 @@ .DS_Store node_modules /build +/dist /.svelte-kit /package .env .env.* !.env.example +vite.config.js.timestamp-* +vite.config.ts.timestamp-* .idea -package -.vercel -pnpm-lock.yaml -dist diff --git a/.npmrc b/.npmrc index b6f27f1..0c05da4 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ engine-strict=true +resolution-mode=highest diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 8b21a13..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Ether Corps - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index 6f15c04..4fee31f 100644 --- a/README.md +++ b/README.md @@ -1,189 +1,58 @@ -# SvelteKit Open Graph Image Generation +# create-svelte -Dynamically generate Open Graph images from an HTML+CSS template or Svelte component using fast and efficient conversion from HTML > SVG > PNG. Based on [Satori](https://github.com/vercel/satori#documentation). No headless browser required. +Everything you need to build a Svelte library, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). -## Installation +Read more about creating a library [in the docs](https://kit.svelte.dev/docs/packaging). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! ```bash -pnpm install -D @ethercorps/sveltekit-og +# create a new project in the current directory +npm create svelte@latest + +# create a new project in my-app +npm create svelte@latest my-app ``` -> Using with Cloudflare Pages or Workers then you have to provide `url` polyfill by just installing it as `devDependency`. +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: ```bash -pnpm i -D url +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open ``` -## Usage +Everything inside `src/lib` is part of your library, everything inside `src/routes` can be used as a showcase or preview app. -Create a file at `/src/routes/og/+server.ts`. Alternatively, you can use JavaScript by removing the types from this example. +## Building -```typescript -// src/routes/og/+server.ts -import { ImageResponse } from '@ethercorps/sveltekit-og'; -import { RequestHandler } from './$types'; +To build your library: -const template = ` -
-
-

- Ready to dive in? - Start your free trial today. -

-
-
- Get started -
-
- Learn more -
-
-
-
-`; - -const fontFile = await fetch('https://og-playground.vercel.app/inter-latin-ext-400-normal.woff'); -const fontData: ArrayBuffer = await fontFile.arrayBuffer(); - -export const GET: RequestHandler = async () => { - return await ImageResponse(template, { - height: 630, - width: 1200, - fonts: [ - { - name: 'Inter Latin', - data: fontData, - weight: 400 - } - ] - }); -}; +```bash +npm run package ``` -Then run `npm dev` and visit `localhost:5173/og` to view your generated PNG. Remember that hot module reloading does not work with server routes, so if you change your HTML or CSS, hard refresh the route to see changes. +To create a production version of your showcase app: -## Example Output - -![Rendered OG image](static/demo.png) - -## Headers - -When run in development, image headers contain `cache-control: no-cache, no-store`. In production, image headers contain `'cache-control': 'public, immutable, no-transform, max-age=31536000'`, which caches the image for 1 year. In both cases, the `'content-type': 'image/png'` is used. - -## Styling - -Notice that our example uses TailwindCSS classes (e.g. `tw="bg-gray-50"`). Alternatively, your HTML can contain style attributes using any of [the subset of CSS supported by Satori](https://github.com/vercel/satori#css). - -Satori supports only a subset of HTML and CSS. For full details, see [Satori’s documentation](https://github.com/vercel/satori#documentation). Notably, Satori only supports flex-based layouts. - -## Fonts - -Satori supports `ttf`, `otf`, and `woff` font formats; `woff2` is not supported. To maximize the font parsing speed, `ttf` or `otf` are recommended over `woff`. - -By default, `@ethercorps/sveltekit-og` includes only 'Noto Sans' font. If you need to use other fonts, you can specify them as shown in the example. Notably, you can also import a font file that is stored locally within your project and are not required to use fetch. - -## Examples - -- `ImageResponse` · [_source_](/src/routes/new/+server.ts) · [_demo_](https://sveltekit-og-five.vercel.app/new) -- `componentToImageResponse` · [_source_](/src/routes/component-og/) · [_demo_](https://sveltekit-og-five.vercel.app/component-og) - -## API Reference - -The package exposes an `ImageResponse` and `componentToImageResponse` constructors, with the following options available: - -```typescript -import {ImageResponse, componentToImageResponse} from '@ethercorps/sveltekit-og' -import {SvelteComponent} from "svelte"; - -// ... -ImageResponse( - element : string, - options : { - width ? : number = 1200 - height ? : number = 630, - backgroundColor ? : string = "#fff" - fonts ? : { - name: string, - data: ArrayBuffer, - weight: number, - style: 'normal' | 'italic' - }[] - debug ? : boolean = false - graphemeImages ? : Record; - loadAdditionalAsset ? : (languageCode: string, segment: string) => Promise; - // Options that will be passed to the HTTP response - status ? : number = 200 - statusText ? : string - headers ? : Record - }) - -componentToImageResponse( - component : typeof SvelteComponent, - props : {}, // All export let example inside prop dictionary - options : { - width ? : number = 1200 - height ? : number = 630 - fonts ? : { - name: string, - data: ArrayBuffer, - weight: number, - style: 'normal' | 'italic' - }[] - debug ? : boolean = false - graphemeImages ? : Record; - loadAdditionalAsset ? : (languageCode: string, segment: string) => Promise; - // Options that will be passed to the HTTP response - status ? : number = 200 - statusText ? : string - headers ? : Record - }) +```bash +npm run build ``` -## Changelog +You can preview the production build with `npm run preview`. -### v1.2.3 Update (Breaking Changes) +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. -> Now you have to install dependency by yourself which will make it easier to build for all plateforms. +## Publishing +Go into the `package.json` and give your package the desired name through the `"name"` option. Also consider adding a `"license"` field and point it to a `LICENSE` file which you can create from a template (one popular option is the [MIT license](https://opensource.org/license/mit/)). + +To publish your library to [npm](https://www.npmjs.com): + +```bash +npm publish ``` -npm i @resvg/resvg-js -``` - -``` -npm i satori -``` - -> From now on their will be no issues related to build, and soon this library going to have its own documentation. - -### v1.2.2 Update (Breaking Change) - -- We don't provide access to satori from `@ethercorps/sveltekit-og`. - -### v1.0.0 Update (Breaking Changes) - -Finally, We have added html to react like element like object converter out of the box and with svelte compiler. -Now you can use `{ toReactElement }` with `"@ethercorps/sveltekit-og"` like: - -- We have changed to function based instead of class based ImageResponse and componentToImageResponse. -- Removed `@resvg/resvg-wasm` with `@resvg/resvg-js` because of internal errors. -- Removed `satori-html` because now we have `toReactElement` out of the box with svelte compiler. - > If you find a problem related to undefined a please check [_vite.config.js_](/vite.config.ts) and add ` define: { _a: 'undefined' } in config.` - -> If you find any issue and have suggestion for this project please open a ticket and if you want to contribute please create a new discussion. - -## Acknowledgements - -This project will not be possible without the following projects: - -- [Satori & @vercel/og](https://github.com/vercel/satori) -- [Noto by Google Fonts](https://fonts.google.com/noto) -- [svg2png-wasm](https://github.com/ssssota/svg2png-wasm) - -## Authors - -- [@theetherGit](https://www.github.com/theetherGit) -- [@etherCorps](https://www.github.com/etherCorps) - -## Contributors - -- [@jasongitmail](https://github.com/jasongitmail) diff --git a/examples/cf-page-build/package.json b/examples/cf-page-build/package.json index 6363986..8173f09 100644 --- a/examples/cf-page-build/package.json +++ b/examples/cf-page-build/package.json @@ -12,7 +12,7 @@ "format": "prettier --plugin-search-dir . --write ." }, "devDependencies": { - "@ethercorps/sveltekit-og": "link:../../package", + "@ethercorps/sveltekit-og": "link:../../", "@playwright/test": "^1.34.3", "@sveltejs/adapter-cloudflare": "^2.3.0", "@sveltejs/kit": "^1.20.2", diff --git a/examples/cf-page-build/pnpm-lock.yaml b/examples/cf-page-build/pnpm-lock.yaml index b89db49..f77406d 100644 --- a/examples/cf-page-build/pnpm-lock.yaml +++ b/examples/cf-page-build/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -6,8 +6,8 @@ settings: devDependencies: '@ethercorps/sveltekit-og': - specifier: link:../../package - version: link:../../package + specifier: link:../../ + version: link:../.. '@playwright/test': specifier: ^1.34.3 version: 1.34.3 diff --git a/examples/cf-workers-build/package.json b/examples/cf-workers-build/package.json index b3d9d2f..8f46d49 100644 --- a/examples/cf-workers-build/package.json +++ b/examples/cf-workers-build/package.json @@ -11,19 +11,19 @@ "format": "prettier --plugin-search-dir . --write ." }, "devDependencies": { - "@ethercorps/sveltekit-og": "link:../../package", - "@playwright/test": "^1.34.3", - "@sveltejs/adapter-cloudflare-workers": "^1.1.2", - "@sveltejs/adapter-static": "^2.0.2", - "@sveltejs/kit": "^1.20.2", - "eslint": "^8.42.0", - "eslint-config-prettier": "^8.8.0", + "@ethercorps/sveltekit-og": "link:../..", + "@playwright/test": "^1.37.1", + "@sveltejs/adapter-cloudflare-workers": "^1.1.4", + "@sveltejs/adapter-static": "^2.0.3", + "@sveltejs/kit": "^1.24.0", + "eslint": "^8.48.0", + "eslint-config-prettier": "^8.10.0", "eslint-plugin-svelte3": "^4.0.0", "prettier": "^2.8.8", "prettier-plugin-svelte": "^2.10.1", - "svelte": "^3.59.1", - "vite": "^4.3.9", - "url": "^0.11.0" + "svelte": "^3.59.2", + "url": "^0.11.1", + "vite": "^4.4.9" }, "type": "module" } diff --git a/examples/cf-workers-build/pnpm-lock.yaml b/examples/cf-workers-build/pnpm-lock.yaml index 6810049..b5b60b2 100644 --- a/examples/cf-workers-build/pnpm-lock.yaml +++ b/examples/cf-workers-build/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -6,53 +6,58 @@ settings: devDependencies: '@ethercorps/sveltekit-og': - specifier: link:../../package - version: link:../../package + specifier: link:../.. + version: link:../.. '@playwright/test': - specifier: ^1.34.3 - version: 1.34.3 + specifier: ^1.37.1 + version: 1.37.1 '@sveltejs/adapter-cloudflare-workers': - specifier: ^1.1.2 - version: 1.1.2(@sveltejs/kit@1.20.2) + specifier: ^1.1.4 + version: 1.1.4(@sveltejs/kit@1.24.0) '@sveltejs/adapter-static': - specifier: ^2.0.2 - version: 2.0.2(@sveltejs/kit@1.20.2) + specifier: ^2.0.3 + version: 2.0.3(@sveltejs/kit@1.24.0) '@sveltejs/kit': - specifier: ^1.20.2 - version: 1.20.2(svelte@3.59.1)(vite@4.3.9) + specifier: ^1.24.0 + version: 1.24.0(svelte@3.59.2)(vite@4.4.9) eslint: - specifier: ^8.42.0 - version: 8.42.0 + specifier: ^8.48.0 + version: 8.48.0 eslint-config-prettier: - specifier: ^8.8.0 - version: 8.8.0(eslint@8.42.0) + specifier: ^8.10.0 + version: 8.10.0(eslint@8.48.0) eslint-plugin-svelte3: specifier: ^4.0.0 - version: 4.0.0(eslint@8.42.0)(svelte@3.59.1) + version: 4.0.0(eslint@8.48.0)(svelte@3.59.2) prettier: specifier: ^2.8.8 version: 2.8.8 prettier-plugin-svelte: specifier: ^2.10.1 - version: 2.10.1(prettier@2.8.8)(svelte@3.59.1) + version: 2.10.1(prettier@2.8.8)(svelte@3.59.2) svelte: - specifier: ^3.59.1 - version: 3.59.1 + specifier: ^3.59.2 + version: 3.59.2 url: - specifier: ^0.11.0 - version: 0.11.0 + specifier: ^0.11.1 + version: 0.11.1 vite: - specifier: ^4.3.9 - version: 4.3.9 + specifier: ^4.4.9 + version: 4.4.9 packages: - /@cloudflare/workers-types@4.20230518.0: - resolution: {integrity: sha512-A0w1V+5SUawGaaPRlhFhSC/SCDT9oQG8TMoWOKFLA4qbqagELqEAFD4KySBIkeVOvCBLT1DZSYBMCxbXddl0kw==} + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} dev: true - /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + /@cloudflare/workers-types@4.20230821.0: + resolution: {integrity: sha512-lVQSyr5E4CEkQw7WIdsrMTj+kHjsm28mJ0B5AhNFByKR+16KTFsU/RW/nGLKHHW2jxT5lvYI+HjNQMzC9QR8Ng==} + dev: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -60,8 +65,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -69,8 +74,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -78,8 +83,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -87,8 +92,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -96,8 +101,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -105,8 +110,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -114,8 +119,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -123,8 +128,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -132,8 +137,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -141,8 +146,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -150,8 +155,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -159,8 +164,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -168,8 +173,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -177,8 +182,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -186,8 +191,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -195,8 +200,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -204,8 +209,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -213,8 +218,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -222,8 +227,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -231,8 +236,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -240,8 +245,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -249,29 +254,29 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.42.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.42.0 - eslint-visitor-keys: 3.4.1 + eslint: 8.48.0 + eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.5.1: - resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + /@eslint-community/regexpp@4.8.0: + resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.0.3: - resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.5.2 - globals: 13.20.0 + espree: 9.6.1 + globals: 13.21.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -281,13 +286,13 @@ packages: - supports-color dev: true - /@eslint/js@8.42.0: - resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} + /@eslint/js@8.48.0: + resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.10: - resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + /@humanwhocodes/config-array@0.11.11: + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -335,13 +340,13 @@ packages: fastq: 1.15.0 dev: true - /@playwright/test@1.34.3: - resolution: {integrity: sha512-zPLef6w9P6T/iT6XDYG3mvGOqOyb6eHaV9XtkunYs0+OzxBtrPAAaHotc0X+PJ00WPPnLfFBTl7mf45Mn8DBmw==} - engines: {node: '>=14'} + /@playwright/test@1.37.1: + resolution: {integrity: sha512-bq9zTli3vWJo8S3LwB91U0qDNQDpEXnw7knhxLM0nwDvexQAwx9tO8iKDZSqqneVq+URd/WIoz+BALMqUTgdSg==} + engines: {node: '>=16'} hasBin: true dependencies: - '@types/node': 20.2.5 - playwright-core: 1.34.3 + '@types/node': 20.5.7 + playwright-core: 1.37.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -350,27 +355,27 @@ packages: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true - /@sveltejs/adapter-cloudflare-workers@1.1.2(@sveltejs/kit@1.20.2): - resolution: {integrity: sha512-akhvgvLI1hERPi/Q2kmoQdqZ9qG3MnY3TY3c89eQCSNbj8IhKEp8AMGVxREkbSM6Vcpirx7kief3r7slQziOSg==} + /@sveltejs/adapter-cloudflare-workers@1.1.4(@sveltejs/kit@1.24.0): + resolution: {integrity: sha512-HCCwCp4RN+pWnbwBJkPy2CLiNto2kVvy0pVzN8gmLfcDcj9mqHBMSdEuvPaa0kQaMzAlvcxGpzGOvg3JNrWUXQ==} peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@cloudflare/workers-types': 4.20230518.0 + '@cloudflare/workers-types': 4.20230821.0 '@iarna/toml': 2.2.5 - '@sveltejs/kit': 1.20.2(svelte@3.59.1)(vite@4.3.9) - esbuild: 0.17.19 + '@sveltejs/kit': 1.24.0(svelte@3.59.2)(vite@4.4.9) + esbuild: 0.18.20 dev: true - /@sveltejs/adapter-static@2.0.2(@sveltejs/kit@1.20.2): - resolution: {integrity: sha512-9wYtf6s6ew7DHUHMrt55YpD1FgV7oWql2IGsW5BXquLxqcY9vjrqCFo0TzzDpo+ZPZkW/v77k0eOP6tsAb8HmQ==} + /@sveltejs/adapter-static@2.0.3(@sveltejs/kit@1.24.0): + resolution: {integrity: sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==} peerDependencies: '@sveltejs/kit': ^1.5.0 dependencies: - '@sveltejs/kit': 1.20.2(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/kit': 1.24.0(svelte@3.59.2)(vite@4.4.9) dev: true - /@sveltejs/kit@1.20.2(svelte@3.59.1)(vite@4.3.9): - resolution: {integrity: sha512-MtR1i+HtmYWcRgtubw1GQqT/+CWXL/z24PegE0xYAdObbhdr7YtEfmoe705D/JZMtMmoPXrmSk4W0MfL5A3lYw==} + /@sveltejs/kit@1.24.0(svelte@3.59.2)(vite@4.4.9): + resolution: {integrity: sha512-r7Gj0/VcdAIRL1yE1cJ5rurWJ5drrR7BzRv+P+NAathtvnMCi0u4FhezO7T4bj7DJdQ3TNsax3yQcrVWxh60fg==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true @@ -378,57 +383,57 @@ packages: svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/vite-plugin-svelte': 2.4.5(svelte@3.59.2)(vite@4.4.9) '@types/cookie': 0.5.1 cookie: 0.5.0 devalue: 4.3.2 esm-env: 1.0.0 kleur: 4.1.5 - magic-string: 0.30.0 + magic-string: 0.30.3 mime: 3.0.0 sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.3 - svelte: 3.59.1 + svelte: 3.59.2 tiny-glob: 0.2.9 - undici: 5.22.1 - vite: 4.3.9 + undici: 5.23.0 + vite: 4.4.9 transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte-inspector@1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@3.59.1)(vite@4.3.9): - resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==} + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.5)(svelte@3.59.2)(vite@4.4.9): + resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} engines: {node: ^14.18.0 || >= 16} peerDependencies: '@sveltejs/vite-plugin-svelte': ^2.2.0 - svelte: ^3.54.0 || ^4.0.0-next.0 + svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/vite-plugin-svelte': 2.4.5(svelte@3.59.2)(vite@4.4.9) debug: 4.3.4 - svelte: 3.59.1 - vite: 4.3.9 + svelte: 3.59.2 + vite: 4.4.9 transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.4.1(svelte@3.59.1)(vite@4.3.9): - resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==} + /@sveltejs/vite-plugin-svelte@2.4.5(svelte@3.59.2)(vite@4.4.9): + resolution: {integrity: sha512-UJKsFNwhzCVuiZd06jM/psscyNJNDwjQC+qIeb7GBJK9iWeQCcIyfcPWDvbCudfcJggY9jtxJeeaZH7uny93FQ==} engines: {node: ^14.18.0 || >= 16} peerDependencies: - svelte: ^3.54.0 || ^4.0.0-next.0 + svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.2(@sveltejs/vite-plugin-svelte@2.4.1)(svelte@3.59.1)(vite@4.3.9) + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.5)(svelte@3.59.2)(vite@4.4.9) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.0 - svelte: 3.59.1 - svelte-hmr: 0.15.2(svelte@3.59.1) - vite: 4.3.9 - vitefu: 0.2.4(vite@4.3.9) + magic-string: 0.30.3 + svelte: 3.59.2 + svelte-hmr: 0.15.3(svelte@3.59.2) + vite: 4.4.9 + vitefu: 0.2.4(vite@4.4.9) transitivePeerDependencies: - supports-color dev: true @@ -437,20 +442,20 @@ packages: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} dev: true - /@types/node@20.2.5: - resolution: {integrity: sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==} + /@types/node@20.5.7: + resolution: {integrity: sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==} dev: true - /acorn-jsx@5.3.2(acorn@8.8.2): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 dev: true - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -498,6 +503,13 @@ packages: streamsearch: 1.1.0 dev: true + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -572,34 +584,34 @@ packages: esutils: 2.0.3 dev: true - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 dev: true /escape-string-regexp@4.0.0: @@ -607,48 +619,48 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.8.0(eslint@8.42.0): - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + /eslint-config-prettier@8.10.0(eslint@8.48.0): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.42.0 + eslint: 8.48.0 dev: true - /eslint-plugin-svelte3@4.0.0(eslint@8.42.0)(svelte@3.59.1): + /eslint-plugin-svelte3@4.0.0(eslint@8.48.0)(svelte@3.59.2): resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: eslint: '>=8.0.0' svelte: ^3.2.0 dependencies: - eslint: 8.42.0 - svelte: 3.59.1 + eslint: 8.48.0 + svelte: 3.59.2 dev: true - /eslint-scope@7.2.0: - resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.1: - resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.42.0: - resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} + /eslint@8.48.0: + resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) - '@eslint-community/regexpp': 4.5.1 - '@eslint/eslintrc': 2.0.3 - '@eslint/js': 8.42.0 - '@humanwhocodes/config-array': 0.11.10 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) + '@eslint-community/regexpp': 4.8.0 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.48.0 + '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -657,19 +669,18 @@ packages: debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.1 - espree: 9.5.2 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 + globals: 13.21.0 graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -679,9 +690,8 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 + optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -691,13 +701,13 @@ packages: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} dev: true - /espree@9.5.2: - resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.1 + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 dev: true /esquery@1.5.0: @@ -746,7 +756,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.1.0 dev: true /find-up@5.0.0: @@ -757,11 +767,12 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@3.1.0: + resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} + engines: {node: '>=12.0.0'} dependencies: flatted: 3.2.7 + keyv: 4.5.3 rimraf: 3.0.2 dev: true @@ -781,6 +792,27 @@ packages: dev: true optional: true + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: true + /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -799,8 +831,8 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + /globals@13.21.0: + resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -823,6 +855,23 @@ packages: engines: {node: '>=8'} dev: true + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} @@ -880,6 +929,10 @@ packages: argparse: 2.0.1 dev: true + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -888,6 +941,12 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /keyv@4.5.3: + resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + dependencies: + json-buffer: 3.0.1 + dev: true + /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -912,8 +971,8 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /magic-string@0.30.0: - resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + /magic-string@0.30.3: + resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -955,22 +1014,26 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.3 dev: true /p-limit@3.1.0: @@ -1013,14 +1076,14 @@ packages: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /playwright-core@1.34.3: - resolution: {integrity: sha512-2pWd6G7OHKemc5x1r1rp8aQcpvDh7goMBZlJv6Co5vCNLVcQJdhxRL09SGaY6HcyHH9aT4tiynZabMofVasBYw==} - engines: {node: '>=14'} + /playwright-core@1.37.1: + resolution: {integrity: sha512-17EuQxlSIYCmEMwzMqusJ2ztDgJePjrbttaefgdsiqeLWidjYz9BxXaTaZWxH1J95SHGk6tjE+dwgWILJoUZfA==} + engines: {node: '>=16'} hasBin: true dev: true - /postcss@8.4.24: - resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} + /postcss@8.4.29: + resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -1033,14 +1096,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@3.59.1): + /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@3.59.2): resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 dependencies: prettier: 2.8.8 - svelte: 3.59.1 + svelte: 3.59.2 dev: true /prettier@2.8.8: @@ -1049,8 +1112,8 @@ packages: hasBin: true dev: true - /punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + /punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true /punycode@2.3.0: @@ -1058,10 +1121,11 @@ packages: engines: {node: '>=6'} dev: true - /querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 dev: true /queue-microtask@1.2.3: @@ -1085,12 +1149,12 @@ packages: glob: 7.2.3 dev: true - /rollup@3.24.0: - resolution: {integrity: sha512-OgraHOIg2YpHQTjl0/ymWfFNBEyPucB7lmhXrQUh38qNOegxLapSPFs9sNr0qKR75awW41D93XafoR2QfhBdUQ==} + /rollup@3.28.1: + resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /run-parallel@1.2.0: @@ -1122,6 +1186,14 @@ packages: engines: {node: '>=8'} dev: true + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + dev: true + /sirv@2.0.3: resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} @@ -1160,17 +1232,17 @@ packages: has-flag: 4.0.0 dev: true - /svelte-hmr@0.15.2(svelte@3.59.1): - resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==} + /svelte-hmr@0.15.3(svelte@3.59.2): + resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: - svelte: ^3.19.0 || ^4.0.0-next.0 + svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 3.59.1 + svelte: 3.59.2 dev: true - /svelte@3.59.1: - resolution: {integrity: sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==} + /svelte@3.59.2: + resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==} engines: {node: '>= 8'} dev: true @@ -1202,8 +1274,8 @@ packages: engines: {node: '>=10'} dev: true - /undici@5.22.1: - resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} + /undici@5.23.0: + resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} engines: {node: '>=14.0'} dependencies: busboy: 1.6.0 @@ -1215,20 +1287,21 @@ packages: punycode: 2.3.0 dev: true - /url@0.11.0: - resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} + /url@0.11.1: + resolution: {integrity: sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==} dependencies: - punycode: 1.3.2 - querystring: 0.2.0 + punycode: 1.4.1 + qs: 6.11.2 dev: true - /vite@4.3.9: - resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + /vite@4.4.9: + resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: '@types/node': '>= 14' less: '*' + lightningcss: ^1.21.0 sass: '*' stylus: '*' sugarss: '*' @@ -1238,6 +1311,8 @@ packages: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true stylus: @@ -1247,14 +1322,14 @@ packages: terser: optional: true dependencies: - esbuild: 0.17.19 - postcss: 8.4.24 - rollup: 3.24.0 + esbuild: 0.18.20 + postcss: 8.4.29 + rollup: 3.28.1 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /vitefu@0.2.4(vite@4.3.9): + /vitefu@0.2.4(vite@4.4.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 @@ -1262,7 +1337,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9 + vite: 4.4.9 dev: true /which@2.0.2: @@ -1273,11 +1348,6 @@ packages: isexe: 2.0.0 dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true diff --git a/package.json b/package.json index eee4b26..d04eb3f 100644 --- a/package.json +++ b/package.json @@ -1,69 +1,56 @@ { - "name": "@ethercorps/sveltekit-og", - "version": "2.0.1", - "private": false, + "name": "sveltekit-og", + "version": "0.0.1", "scripts": { - "dev": "vite dev --host", - "build:prod": "vite build", - "build": "svelte-kit sync && svelte-package", + "dev": "vite dev", + "build": "vite build && npm run package", "preview": "vite preview", - "prepublishOnly": "echo 'Did you mean to publish `./package/`, instead of `./`?' && exit 1", - "test:build": "pnpm build && pnpm test:vercel:build && pnpm test:netlify:build && pnpm test:pages:build && pnpm test:workers:build && pnpm test:node:build", - "test:vercel:build": "cd examples/vercel-build && pnpm install && pnpm build", - "test:netlify:build": "cd examples/netlify-build && pnpm install && pnpm build", - "test:pages:build": "cd examples/cf-page-build && pnpm install && pnpm build", - "test:workers:build": "cd examples/cf-workers-build && pnpm install && pnpm build", - "test:node:build": "cd examples/node-build && pnpm install && pnpm build", - "test": "playwright test", + "package": "svelte-kit sync && svelte-package && publint", + "prepublishOnly": "npm run package", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "test": "vitest", "lint": "prettier --plugin-search-dir . --check . && eslint .", "format": "prettier --plugin-search-dir . --write ." }, - "devDependencies": { - "@builder.io/partytown": "^0.8.0", - "@playwright/test": "^1.37.1", - "@sveltejs/adapter-auto": "next", - "@sveltejs/adapter-vercel": "^2.4.3", - "@sveltejs/kit": "^1.24.0", - "@sveltejs/package": "2.2.2", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", - "autoprefixer": "^10.4.15", - "brace": "^0.11.1", - "eslint": "^8.48.0", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-svelte": "^2.33.0", - "postcss": "^8.4.29", - "prettier": "^2.8.8", - "prettier-plugin-svelte": "^2.10.1", - "prism-svelte": "^0.5.0", - "prismjs": "^1.29.0", - "svelte": "^4.2.0", - "svelte-check": "^3.5.1", - "svelte-preprocess": "^5.0.4", - "tailwindcss": "^3.3.3", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "vite": "^4.4.9" + "exports": { + ".": { + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js" + } }, + "files": [ + "dist", + "!dist/**/*.test.*", + "!dist/**/*.spec.*" + ], + "peerDependencies": { + "svelte": "^4.0.0" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.20.4", + "@sveltejs/package": "^2.0.0", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "eslint": "^8.28.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-svelte": "^2.30.0", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.10.1", + "publint": "^0.1.9", + "svelte": "^4.0.5", + "svelte-check": "^3.4.3", + "tslib": "^2.4.1", + "typescript": "^5.0.0", + "vite": "^4.4.2", + "vitest": "^0.34.0" + }, + "svelte": "./dist/index.js", + "types": "./dist/index.d.ts", "type": "module", "dependencies": { - "satori": "^0.10.3", - "svg2png-wasm": "^1.4.0" - }, - "keywords": [ - "open graph image", - "open graph", - "og image", - "og:image", - "social", - "card", - "sveltekit og", - "sveltekit-og", - "@ethercorps/sveltekit-og" - ], - "license": "MIT", - "repository": "https://github.com/etherCorps/sveltekit-og", - "homepage": "https://github.com/etherCorps/sveltekit-og#readme" + "@vercel/og": "^0.5.17", + "satori-html": "^0.3.2" + } } diff --git a/playwright.config.ts b/playwright.config.ts deleted file mode 100644 index 6ad3a7f..0000000 --- a/playwright.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { PlaywrightTestConfig } from '@playwright/test'; - -const config: PlaywrightTestConfig = { - webServer: { - command: 'npm run build && npm run preview', - port: 4173 - } -}; - -export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd78e8e..da5b3fc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,89 +5,65 @@ settings: excludeLinksFromLockfile: false dependencies: - satori: - specifier: ^0.10.3 - version: 0.10.3 - svg2png-wasm: - specifier: ^1.4.0 - version: 1.4.0 + '@vercel/og': + specifier: ^0.5.17 + version: 0.5.17 + satori-html: + specifier: ^0.3.2 + version: 0.3.2 devDependencies: - '@builder.io/partytown': - specifier: ^0.8.0 - version: 0.8.0 - '@playwright/test': - specifier: ^1.37.1 - version: 1.37.1 '@sveltejs/adapter-auto': - specifier: next - version: 1.0.0-next.91(@sveltejs/kit@1.24.0) - '@sveltejs/adapter-vercel': - specifier: ^2.4.3 - version: 2.4.3(@sveltejs/kit@1.24.0) + specifier: ^2.0.0 + version: 2.1.0(@sveltejs/kit@1.25.1) '@sveltejs/kit': - specifier: ^1.24.0 - version: 1.24.0(svelte@4.2.0)(vite@4.4.9) + specifier: ^1.20.4 + version: 1.25.1(svelte@4.2.1)(vite@4.4.9) '@sveltejs/package': - specifier: 2.2.2 - version: 2.2.2(svelte@4.2.0)(typescript@5.2.2) + specifier: ^2.0.0 + version: 2.2.2(svelte@4.2.1)(typescript@5.2.2) '@typescript-eslint/eslint-plugin': - specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2) + specifier: ^5.45.0 + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.50.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^5.62.0 - version: 5.62.0(eslint@8.48.0)(typescript@5.2.2) - autoprefixer: - specifier: ^10.4.15 - version: 10.4.15(postcss@8.4.29) - brace: - specifier: ^0.11.1 - version: 0.11.1 + specifier: ^5.45.0 + version: 5.62.0(eslint@8.50.0)(typescript@5.2.2) eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^8.28.0 + version: 8.50.0 eslint-config-prettier: - specifier: ^8.10.0 - version: 8.10.0(eslint@8.48.0) + specifier: ^8.5.0 + version: 8.10.0(eslint@8.50.0) eslint-plugin-svelte: - specifier: ^2.33.0 - version: 2.33.0(eslint@8.48.0)(svelte@4.2.0) - postcss: - specifier: ^8.4.29 - version: 8.4.29 + specifier: ^2.30.0 + version: 2.33.2(eslint@8.50.0)(svelte@4.2.1) prettier: - specifier: ^2.8.8 + specifier: ^2.8.0 version: 2.8.8 prettier-plugin-svelte: specifier: ^2.10.1 - version: 2.10.1(prettier@2.8.8)(svelte@4.2.0) - prism-svelte: - specifier: ^0.5.0 - version: 0.5.0 - prismjs: - specifier: ^1.29.0 - version: 1.29.0 + version: 2.10.1(prettier@2.8.8)(svelte@4.2.1) + publint: + specifier: ^0.1.9 + version: 0.1.16 svelte: - specifier: ^4.2.0 - version: 4.2.0 + specifier: ^4.0.5 + version: 4.2.1 svelte-check: - specifier: ^3.5.1 - version: 3.5.1(postcss@8.4.29)(svelte@4.2.0) - svelte-preprocess: - specifier: ^5.0.4 - version: 5.0.4(postcss@8.4.29)(svelte@4.2.0)(typescript@5.2.2) - tailwindcss: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.3 + version: 3.5.2(postcss@8.4.30)(svelte@4.2.1) tslib: - specifier: ^2.6.2 + specifier: ^2.4.1 version: 2.6.2 typescript: - specifier: ^5.2.2 + specifier: ^5.0.0 version: 5.2.2 vite: - specifier: ^4.4.9 - version: 4.4.9 + specifier: ^4.4.2 + version: 4.4.9(@types/node@20.7.1) + vitest: + specifier: ^0.34.0 + version: 0.34.5 packages: @@ -96,11 +72,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: true - /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -109,20 +80,6 @@ packages: '@jridgewell/trace-mapping': 0.3.19 dev: true - /@builder.io/partytown@0.8.0: - resolution: {integrity: sha512-M6H7nSMwW2dHd1/MQ+9J1Jqdw22uhl1nKv90kIiL9G7gjFVqqouQp4qSS1oZclmtW1XjAa4Q5UnbHB4iytmxZA==} - hasBin: true - dev: true - - /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -132,15 +89,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -150,15 +98,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -168,15 +107,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -186,15 +116,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -204,15 +125,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -222,15 +134,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -240,15 +143,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -258,15 +152,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -276,15 +161,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -294,15 +170,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -312,15 +179,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -330,15 +188,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -348,15 +197,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -366,15 +206,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -384,15 +215,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -402,15 +224,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -420,15 +233,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -438,15 +242,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -456,15 +251,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -474,15 +260,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -492,15 +269,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -510,18 +278,18 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.48.0 + eslint: 8.50.0 eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.8.0: - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} + /@eslint-community/regexpp@4.9.0: + resolution: {integrity: sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -532,7 +300,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.21.0 + globals: 13.22.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -542,8 +310,8 @@ packages: - supports-color dev: true - /@eslint/js@8.48.0: - resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} + /@eslint/js@8.50.0: + resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -567,6 +335,13 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} @@ -597,24 +372,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@mapbox/node-pre-gyp@1.0.11: - resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} - hasBin: true - dependencies: - detect-libc: 2.0.2 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.7.0 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.5.4 - tar: 6.1.15 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -636,28 +393,14 @@ packages: fastq: 1.15.0 dev: true - /@playwright/test@1.37.1: - resolution: {integrity: sha512-bq9zTli3vWJo8S3LwB91U0qDNQDpEXnw7knhxLM0nwDvexQAwx9tO8iKDZSqqneVq+URd/WIoz+BALMqUTgdSg==} - engines: {node: '>=16'} - hasBin: true - dependencies: - '@types/node': 20.5.7 - playwright-core: 1.37.1 - optionalDependencies: - fsevents: 2.3.2 + /@polka/url@1.0.0-next.23: + resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} dev: true - /@polka/url@1.0.0-next.21: - resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} - dev: true - - /@rollup/pluginutils@4.2.1: - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: true + /@resvg/resvg-wasm@2.4.1: + resolution: {integrity: sha512-yi6R0HyHtsoWTRA06Col4WoDs7SvlXU3DLMNP2bdAgs7HK18dTEVl1weXgxRzi8gwLteGUbIg29zulxIB3GSdg==} + engines: {node: '>= 10'} + dev: false /@shuding/opentype.js@1.4.0-beta.0: resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} @@ -668,30 +411,21 @@ packages: string.prototype.codepointat: 0.2.1 dev: false - /@sveltejs/adapter-auto@1.0.0-next.91(@sveltejs/kit@1.24.0): - resolution: {integrity: sha512-U57tQdzTfFINim8tzZSARC9ztWPzwOoHwNOpGdb2o6XrD0mEQwU9DsII7dBblvzg+xCnmd0pw7PDtXz5c5t96w==} - peerDependencies: - '@sveltejs/kit': ^1.0.0-next.587 - dependencies: - '@sveltejs/kit': 1.24.0(svelte@4.2.0)(vite@4.4.9) - import-meta-resolve: 2.2.2 + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sveltejs/adapter-vercel@2.4.3(@sveltejs/kit@1.24.0): - resolution: {integrity: sha512-3k/3udwaioFYdKDAgQcWSByB+KCbtjX+ARonYGCtYE0iuxWLStrESxy3SaU+17XD5Frh8w7tfY8ft4TV3ej3Dg==} + /@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.25.1): + resolution: {integrity: sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==} peerDependencies: - '@sveltejs/kit': ^1.5.0 + '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': 1.24.0(svelte@4.2.0)(vite@4.4.9) - '@vercel/nft': 0.22.6 - esbuild: 0.17.19 - transitivePeerDependencies: - - encoding - - supports-color + '@sveltejs/kit': 1.25.1(svelte@4.2.1)(vite@4.4.9) + import-meta-resolve: 3.0.0 dev: true - /@sveltejs/kit@1.24.0(svelte@4.2.0)(vite@4.4.9): - resolution: {integrity: sha512-r7Gj0/VcdAIRL1yE1cJ5rurWJ5drrR7BzRv+P+NAathtvnMCi0u4FhezO7T4bj7DJdQ3TNsax3yQcrVWxh60fg==} + /@sveltejs/kit@1.25.1(svelte@4.2.1)(vite@4.4.9): + resolution: {integrity: sha512-pD8XsvNJNgTNkFngNlM60my/X8dXWPKVzN5RghEQr0NjGZmuCjy49AfFu2cGbZjNf5pBcqd2RCNMW912P5fkhA==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true @@ -699,8 +433,8 @@ packages: svelte: ^3.54.0 || ^4.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.5(svelte@4.2.0)(vite@4.4.9) - '@types/cookie': 0.5.1 + '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.1)(vite@4.4.9) + '@types/cookie': 0.5.2 cookie: 0.5.0 devalue: 4.3.2 esm-env: 1.0.0 @@ -710,15 +444,15 @@ packages: sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.3 - svelte: 4.2.0 + svelte: 4.2.1 tiny-glob: 0.2.9 - undici: 5.23.0 - vite: 4.4.9 + undici: 5.25.2 + vite: 4.4.9(@types/node@20.7.1) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/package@2.2.2(svelte@4.2.0)(typescript@5.2.2): + /@sveltejs/package@2.2.2(svelte@4.2.1)(typescript@5.2.2): resolution: {integrity: sha512-rP3sVv6cAntcdcG4r4KspLU6nZYYUrHJBAX3Arrw0KJFdgxtlsi2iDwN0Jwr/vIkgjcU0ZPWM8kkT5kpZDlWAw==} engines: {node: ^16.14 || >=18} hasBin: true @@ -729,13 +463,13 @@ packages: kleur: 4.1.5 sade: 1.8.1 semver: 7.5.4 - svelte: 4.2.0 - svelte2tsx: 0.6.21(svelte@4.2.0)(typescript@5.2.2) + svelte: 4.2.1 + svelte2tsx: 0.6.22(svelte@4.2.1)(typescript@5.2.2) transitivePeerDependencies: - typescript dev: true - /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.5)(svelte@4.2.0)(vite@4.4.9): + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.4.9): resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -743,59 +477,69 @@ packages: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.5(svelte@4.2.0)(vite@4.4.9) + '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.1)(vite@4.4.9) debug: 4.3.4 - svelte: 4.2.0 - vite: 4.4.9 + svelte: 4.2.1 + vite: 4.4.9(@types/node@20.7.1) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.4.5(svelte@4.2.0)(vite@4.4.9): - resolution: {integrity: sha512-UJKsFNwhzCVuiZd06jM/psscyNJNDwjQC+qIeb7GBJK9iWeQCcIyfcPWDvbCudfcJggY9jtxJeeaZH7uny93FQ==} + /@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.4.9): + resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==} engines: {node: ^14.18.0 || >= 16} peerDependencies: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.5)(svelte@4.2.0)(vite@4.4.9) + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.4.9) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.3 - svelte: 4.2.0 - svelte-hmr: 0.15.3(svelte@4.2.0) - vite: 4.4.9 + svelte: 4.2.1 + svelte-hmr: 0.15.3(svelte@4.2.1) + vite: 4.4.9(@types/node@20.7.1) vitefu: 0.2.4(vite@4.4.9) transitivePeerDependencies: - supports-color dev: true - /@types/cookie@0.5.1: - resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} + /@types/chai-subset@1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.6 dev: true - /@types/estree@1.0.1: - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + /@types/chai@4.3.6: + resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} dev: true - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/cookie@0.5.2: + resolution: {integrity: sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA==} dev: true - /@types/node@20.5.7: - resolution: {integrity: sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==} + /@types/estree@1.0.2: + resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} dev: true - /@types/pug@2.0.6: - resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} + /@types/json-schema@7.0.13: + resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} dev: true - /@types/semver@7.5.1: - resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} + /@types/node@20.7.1: + resolution: {integrity: sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==} dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.2.2): + /@types/pug@2.0.7: + resolution: {integrity: sha512-I469DU0UXNC1aHepwirWhu9YKg5fkxohZD95Ey/5A7lovC+Siu+MCLffva87lnfThaOrw9Vb1DUN5t55oULAAw==} + dev: true + + /@types/semver@7.5.3: + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + dev: true + + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.50.0)(typescript@5.2.2): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -806,13 +550,13 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.8.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.2.2) + '@eslint-community/regexpp': 4.9.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.50.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.50.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.50.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -823,7 +567,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.48.0)(typescript@5.2.2): + /@typescript-eslint/parser@5.62.0(eslint@8.50.0)(typescript@5.2.2): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -837,7 +581,7 @@ packages: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.50.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -851,7 +595,7 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.48.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@5.62.0(eslint@8.50.0)(typescript@5.2.2): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -862,9 +606,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.50.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.50.0 tsutils: 3.21.0(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -897,19 +641,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.48.0)(typescript@5.2.2): + /@typescript-eslint/utils@5.62.0(eslint@8.50.0)(typescript@5.2.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.1 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) + '@types/json-schema': 7.0.13 + '@types/semver': 7.5.3 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.48.0 + eslint: 8.50.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -925,29 +669,51 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@vercel/nft@0.22.6: - resolution: {integrity: sha512-gTsFnnT4mGxodr4AUlW3/urY+8JKKB452LwF3m477RFUJTAaDmcz2JqFuInzvdybYIeyIv1sSONEJxsxnbQ5JQ==} - engines: {node: '>=14'} - hasBin: true + /@vercel/og@0.5.17: + resolution: {integrity: sha512-/GOyUBq3MhB3ygbhTJoZ0cHvwlyKdt0g8f4npuj4mwFlp57S7j4XWwgtqILK3XdFf25esN9i77fInrDkeRJfgA==} + engines: {node: '>=16'} dependencies: - '@mapbox/node-pre-gyp': 1.0.11 - '@rollup/pluginutils': 4.2.1 - acorn: 8.10.0 - async-sema: 3.1.1 - bindings: 1.5.0 - estree-walker: 2.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - node-gyp-build: 4.6.1 - resolve-from: 5.0.0 - transitivePeerDependencies: - - encoding - - supports-color + '@resvg/resvg-wasm': 2.4.1 + satori: 0.10.8 + yoga-wasm-web: 0.3.3 + dev: false + + /@vitest/expect@0.34.5: + resolution: {integrity: sha512-/3RBIV9XEH+nRpRMqDJBufKIOQaYUH2X6bt0rKSCW0MfKhXFLYsR5ivHifeajRSTsln0FwJbitxLKHSQz/Xwkw==} + dependencies: + '@vitest/spy': 0.34.5 + '@vitest/utils': 0.34.5 + chai: 4.3.9 dev: true - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + /@vitest/runner@0.34.5: + resolution: {integrity: sha512-RDEE3ViVvl7jFSCbnBRyYuu23XxmvRTSZWW6W4M7eC5dOsK75d5LIf6uhE5Fqf809DQ1+9ICZZNxhIolWHU4og==} + dependencies: + '@vitest/utils': 0.34.5 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@0.34.5: + resolution: {integrity: sha512-+ikwSbhu6z2yOdtKmk/aeoDZ9QPm2g/ZO5rXT58RR9Vmu/kB2MamyDSx77dctqdZfP3Diqv4mbc/yw2kPT8rmA==} + dependencies: + magic-string: 0.30.3 + pathe: 1.1.1 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@0.34.5: + resolution: {integrity: sha512-epsicsfhvBjRjCMOC/3k00mP/TBGQy8/P0DxOFiWyLt55gnZ99dqCfCiAsKO17BWVjn4eZRIjKvcqNmSz8gvmg==} + dependencies: + tinyspy: 2.1.1 + dev: true + + /@vitest/utils@0.34.5: + resolution: {integrity: sha512-ur6CmmYQoeHMwmGb0v+qwkwN3yopZuZyf4xt1DBBSGBed8Hf9Gmbm/5dEWqgpLPdRx6Av6jcWXrjcKfkTzg/pw==} + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.6 + pretty-format: 29.7.0 dev: true /acorn-jsx@5.3.2(acorn@8.10.0): @@ -958,21 +724,17 @@ packages: acorn: 8.10.0 dev: true + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -994,8 +756,9 @@ packages: color-convert: 2.0.1 dev: true - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} dev: true /anymatch@3.1.3: @@ -1006,22 +769,6 @@ packages: picomatch: 2.3.1 dev: true - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: true - - /are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - dev: true - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -1037,24 +784,8 @@ packages: engines: {node: '>=8'} dev: true - /async-sema@3.1.1: - resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} - dev: true - - /autoprefixer@10.4.15(postcss@8.4.29): - resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.21.10 - caniuse-lite: 1.0.30001524 - fraction.js: 4.3.1 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.29 - postcss-value-parser: 4.2.0 + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true /axobject-query@3.2.1: @@ -1077,12 +808,6 @@ packages: engines: {node: '>=8'} dev: true - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - dependencies: - file-uri-to-path: 1.0.0 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1090,8 +815,10 @@ packages: concat-map: 0.0.1 dev: true - /brace@0.11.1: - resolution: {integrity: sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q==} + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 dev: true /braces@3.0.2: @@ -1101,17 +828,6 @@ packages: fill-range: 7.0.1 dev: true - /browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001524 - electron-to-chromium: 1.4.505 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.10) - dev: true - /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true @@ -1123,22 +839,31 @@ packages: streamsearch: 1.1.0 dev: true + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: false - /caniuse-lite@1.0.30001524: - resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} + /chai@4.3.9: + resolution: {integrity: sha512-tH8vhfA1CfuYMkALXj+wmZcqiwqOfshU9Gry+NYiiLqIddrobkBhALv6XD4yDz68qapphYI4vSaqhqAdThCAAA==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 dev: true /chalk@4.1.2: @@ -1149,6 +874,12 @@ packages: supports-color: 7.2.0 dev: true + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -1164,16 +895,11 @@ packages: fsevents: 2.3.3 dev: true - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true - /code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 acorn: 8.10.0 estree-walker: 3.0.3 periscopic: 3.1.0 @@ -1189,24 +915,10 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - dev: true - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true - /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: true - /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} @@ -1272,6 +984,13 @@ packages: resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} dev: true + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -1281,10 +1000,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true - /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -1295,17 +1010,13 @@ packages: engines: {node: '>=8'} dev: true - /detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - dev: true - /devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: true - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /dir-glob@3.0.1: @@ -1315,10 +1026,6 @@ packages: path-type: 4.0.0 dev: true - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -1326,52 +1033,14 @@ packages: esutils: 2.0.3 dev: true - /electron-to-chromium@1.4.505: - resolution: {integrity: sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ==} - dev: true - /emoji-regex@10.2.1: resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} dev: false - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - /es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - dev: true - /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -1402,11 +1071,6 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: false @@ -1416,17 +1080,17 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.10.0(eslint@8.48.0): + /eslint-config-prettier@8.10.0(eslint@8.50.0): resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.48.0 + eslint: 8.50.0 dev: true - /eslint-plugin-svelte@2.33.0(eslint@8.48.0)(svelte@4.2.0): - resolution: {integrity: sha512-kk7Z4BfxVjFYJseFcOpS8kiKNio7KnAnhFagmM89h1wNSKlM7tIn+uguNQppKM9leYW+S+Us0Rjg2Qg3zsEcvg==} + /eslint-plugin-svelte@2.33.2(eslint@8.50.0)(svelte@4.2.1): + resolution: {integrity: sha512-knWmauax+E/jvQ9CmuX5dAhQKP9P4eGQZxWa5RMutEJVCcy0wFmiUvOeDND2jR4vUkbDlX4khKjaceY7QzbkYw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 @@ -1435,19 +1099,19 @@ packages: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) '@jridgewell/sourcemap-codec': 1.4.15 debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.50.0 esutils: 2.0.3 known-css-properties: 0.28.0 - postcss: 8.4.29 - postcss-load-config: 3.1.4(postcss@8.4.29) - postcss-safe-parser: 6.0.0(postcss@8.4.29) + postcss: 8.4.30 + postcss-load-config: 3.1.4(postcss@8.4.30) + postcss-safe-parser: 6.0.0(postcss@8.4.30) postcss-selector-parser: 6.0.13 semver: 7.5.4 - svelte: 4.2.0 - svelte-eslint-parser: 0.33.0(svelte@4.2.0) + svelte: 4.2.1 + svelte-eslint-parser: 0.33.0(svelte@4.2.1) transitivePeerDependencies: - supports-color - ts-node @@ -1474,15 +1138,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.48.0: - resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} + /eslint@8.50.0: + resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) - '@eslint-community/regexpp': 4.8.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) + '@eslint-community/regexpp': 4.9.0 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.48.0 + '@eslint/js': 8.50.0 '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -1501,7 +1165,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.21.0 + globals: 13.22.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -1557,14 +1221,10 @@ packages: engines: {node: '>=4.0'} dev: true - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true - /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 dev: true /esutils@2.0.3: @@ -1612,10 +1272,6 @@ packages: flat-cache: 3.1.0 dev: true - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: true - /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -1635,38 +1291,19 @@ packages: resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} engines: {node: '>=12.0.0'} dependencies: - flatted: 3.2.7 + flatted: 3.2.9 keyv: 4.5.3 rimraf: 3.0.2 dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true - - /fraction.js@4.3.1: - resolution: {integrity: sha512-nx0cki48JBA6ThPeUpeKCNpdhEl/9bRS+dAEYnRUod+Z1jhFfC3K/mBLorZZntqHM+GTH3/dkkpfoT3QITYe7g==} - dev: true - - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1675,23 +1312,8 @@ packages: dev: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true /glob-parent@5.1.2: @@ -1708,17 +1330,6 @@ packages: is-glob: 4.0.3 dev: true - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -1730,8 +1341,19 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + + /globals@13.22.0: + resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -1770,30 +1392,16 @@ packages: engines: {node: '>=8'} dev: true - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - /hex-rgb@4.3.0: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} dev: false - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + /ignore-walk@5.0.1: + resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color + minimatch: 5.1.6 dev: true /ignore@5.2.4: @@ -1809,8 +1417,8 @@ packages: resolve-from: 4.0.0 dev: true - /import-meta-resolve@2.2.2: - resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + /import-meta-resolve@3.0.0: + resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==} dev: true /imurmurhash@0.1.4: @@ -1836,22 +1444,11 @@ packages: binary-extensions: 2.2.0 dev: true - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.3 - dev: true - /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1869,21 +1466,16 @@ packages: engines: {node: '>=8'} dev: true - /is-reference@3.0.1: - resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} + /is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /jiti@1.19.3: - resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==} - hasBin: true - dev: true - /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1903,6 +1495,10 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + /keyv@4.5.3: resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} dependencies: @@ -1938,8 +1534,9 @@ packages: unicode-trie: 2.0.0 dev: false - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} dev: true /locate-character@3.0.0: @@ -1957,6 +1554,12 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.2 + dev: true + /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: @@ -1984,13 +1587,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 - dev: true - /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: true @@ -2025,30 +1621,17 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 - dev: true - - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true - - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - dev: true - /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -2056,10 +1639,13 @@ packages: minimist: 1.2.8 dev: true - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.10.0 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.0 dev: true /mri@1.2.0: @@ -2076,14 +1662,6 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: true - /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2105,62 +1683,32 @@ packages: tslib: 2.6.2 dev: true - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: true - - /node-gyp-build@4.6.1: - resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} - hasBin: true - dev: true - - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true - - /nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - dependencies: - abbrev: 1.1.1 - dev: true - /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true - - /npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + /npm-bundled@2.0.1: + resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 + npm-normalize-package-bin: 2.0.0 dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + /npm-normalize-package-bin@2.0.0: + resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + /npm-packlist@5.1.3: + resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + dependencies: + glob: 8.1.0 + ignore-walk: 5.0.1 + npm-bundled: 2.0.1 + npm-normalize-package-bin: 2.0.0 dev: true /once@1.4.0: @@ -2188,6 +1736,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -2235,21 +1790,25 @@ packages: engines: {node: '>=8'} dev: true - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 estree-walker: 3.0.3 - is-reference: 3.0.1 + is-reference: 3.0.2 dev: true /picocolors@1.0.0: @@ -2261,45 +1820,15 @@ packages: engines: {node: '>=8.6'} dev: true - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true - - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true - - /playwright-core@1.37.1: - resolution: {integrity: sha512-17EuQxlSIYCmEMwzMqusJ2ztDgJePjrbttaefgdsiqeLWidjYz9BxXaTaZWxH1J95SHGk6tjE+dwgWILJoUZfA==} - engines: {node: '>=16'} - hasBin: true - dev: true - - /postcss-import@15.1.0(postcss@8.4.29): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: - postcss: 8.4.29 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.4 + jsonc-parser: 3.2.0 + mlly: 1.4.2 + pathe: 1.1.1 dev: true - /postcss-js@4.0.1(postcss@8.4.29): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.29 - dev: true - - /postcss-load-config@3.1.4(postcss@8.4.29): + /postcss-load-config@3.1.4(postcss@8.4.30): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -2312,53 +1841,26 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.29 + postcss: 8.4.30 yaml: 1.10.2 dev: true - /postcss-load-config@4.0.1(postcss@8.4.29): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.29 - yaml: 2.3.2 - dev: true - - /postcss-nested@6.0.1(postcss@8.4.29): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.29 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-safe-parser@6.0.0(postcss@8.4.29): + /postcss-safe-parser@6.0.0(postcss@8.4.30): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.3.3 dependencies: - postcss: 8.4.29 + postcss: 8.4.30 dev: true - /postcss-scss@4.0.7(postcss@8.4.29): - resolution: {integrity: sha512-xPv2GseoyXPa58Nro7M73ZntttusuCmZdeOojUFR5PZDz2BR62vfYx1w9TyOnp1+nYFowgOMipsCBhxzVkAEPw==} + /postcss-scss@4.0.8(postcss@8.4.30): + resolution: {integrity: sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA==} engines: {node: '>=12.0'} peerDependencies: - postcss: ^8.4.19 + postcss: ^8.4.29 dependencies: - postcss: 8.4.29 + postcss: 8.4.30 dev: true /postcss-selector-parser@6.0.13: @@ -2371,9 +1873,10 @@ packages: /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false - /postcss@8.4.29: - resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} + /postcss@8.4.30: + resolution: {integrity: sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -2386,14 +1889,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.2.0): + /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.2.1): resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 dependencies: prettier: 2.8.8 - svelte: 4.2.0 + svelte: 4.2.1 dev: true /prettier@2.8.8: @@ -2402,13 +1905,23 @@ packages: hasBin: true dev: true - /prism-svelte@0.5.0: - resolution: {integrity: sha512-db91Bf3pRGKDPz1lAqLFSJXeW13mulUJxhycysFpfXV5MIK7RgWWK2E5aPAa71s8TCzQUXxF5JOV42/iOs6QkA==} + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 dev: true - /prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} + /publint@0.1.16: + resolution: {integrity: sha512-wJgk7HnXDT5Ap0DjFYbGz78kPkN44iQvDiaq8P63IEEyNU9mYXvaMd2cAyIM6OgqXM/IA3CK6XWIsRq+wjNpgw==} + engines: {node: '>=16'} + hasBin: true + dependencies: + npm-packlist: 5.1.3 + picocolors: 1.0.0 + sade: 1.8.1 dev: true /punycode@2.3.0: @@ -2420,19 +1933,8 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true /readdirp@3.6.0: @@ -2447,20 +1949,6 @@ packages: engines: {node: '>=4'} dev: true - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true - - /resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} - hasBin: true - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2480,8 +1968,8 @@ packages: glob: 7.2.3 dev: true - /rollup@3.28.1: - resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -2501,10 +1989,6 @@ packages: mri: 1.2.0 dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - /sander@0.5.1: resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} dependencies: @@ -2514,8 +1998,14 @@ packages: rimraf: 2.7.1 dev: true - /satori@0.10.3: - resolution: {integrity: sha512-8tZPu7AGiRWimbOyja1s2HK0hEC4DacZ8cAKDITxlVI5tKQZbOuMiVgSB50CABwc0I4Imgtkq7o9Egj1WOJTKg==} + /satori-html@0.3.2: + resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} + dependencies: + ultrahtml: 1.5.2 + dev: false + + /satori@0.10.8: + resolution: {integrity: sha512-WlPLxgpx5kIyMuOO6qi98DhZGIbRk5XJRqENkt6D6gyDBWGyo3M5kcSl0X/oSFHUH+n4unlzwMejoPM47s4zug==} engines: {node: '>=16'} dependencies: '@shuding/opentype.js': 1.4.0-beta.0 @@ -2530,11 +2020,6 @@ packages: yoga-wasm-web: 0.3.3 dev: false - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -2543,10 +2028,6 @@ packages: lru-cache: 6.0.0 dev: true - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - /set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} dev: true @@ -2563,15 +2044,15 @@ packages: engines: {node: '>=8'} dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true /sirv@2.0.3: resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} dependencies: - '@polka/url': 1.0.0-next.21 + '@polka/url': 1.0.0-next.23 mrmime: 1.0.1 totalist: 3.0.1 dev: true @@ -2596,30 +2077,23 @@ packages: engines: {node: '>=0.10.0'} dev: true + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + + /std-env@3.4.3: + resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - /string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} dev: false - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2639,18 +2113,10 @@ packages: engines: {node: '>=8'} dev: true - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 + acorn: 8.10.0 dev: true /supports-color@7.2.0: @@ -2660,13 +2126,8 @@ packages: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /svelte-check@3.5.1(postcss@8.4.29)(svelte@4.2.0): - resolution: {integrity: sha512-+Zb4iHxAhdUtcUg/WJPRjlS1RJalIsWAe9Mz6G1zyznSs7dDkT7VUBdXc3q7Iwg49O/VrZgyJRvOJkjuBfKjFA==} + /svelte-check@3.5.2(postcss@8.4.30)(svelte@4.2.1): + resolution: {integrity: sha512-5a/YWbiH4c+AqAUP+0VneiV5bP8YOk9JL3jwvN+k2PEPLgpu85bjQc5eE67+eIZBBwUEJzmO3I92OqKcqbp3fw==} hasBin: true peerDependencies: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 @@ -2677,8 +2138,8 @@ packages: import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 4.2.0 - svelte-preprocess: 5.0.4(postcss@8.4.29)(svelte@4.2.0)(typescript@5.2.2) + svelte: 4.2.1 + svelte-preprocess: 5.0.4(postcss@8.4.30)(svelte@4.2.1)(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - '@babel/core' @@ -2692,7 +2153,7 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.33.0(svelte@4.2.0): + /svelte-eslint-parser@0.33.0(svelte@4.2.1): resolution: {integrity: sha512-5awZ6Bs+Tb/zQwa41PSdcLynAVQTwW0HGyCBjtbAQ59taLZqDgQSMzRlDmapjZdDtzERm0oXDZNE0E+PKJ6ryg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2704,21 +2165,21 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.29 - postcss-scss: 4.0.7(postcss@8.4.29) - svelte: 4.2.0 + postcss: 8.4.30 + postcss-scss: 4.0.8(postcss@8.4.30) + svelte: 4.2.1 dev: true - /svelte-hmr@0.15.3(svelte@4.2.0): + /svelte-hmr@0.15.3(svelte@4.2.1): resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 4.2.0 + svelte: 4.2.1 dev: true - /svelte-preprocess@5.0.4(postcss@8.4.29)(svelte@4.2.0)(typescript@5.2.2): + /svelte-preprocess@5.0.4(postcss@8.4.30)(svelte@4.2.1)(typescript@5.2.2): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -2756,30 +2217,30 @@ packages: typescript: optional: true dependencies: - '@types/pug': 2.0.6 + '@types/pug': 2.0.7 detect-indent: 6.1.0 magic-string: 0.27.0 - postcss: 8.4.29 + postcss: 8.4.30 sorcery: 0.11.0 strip-indent: 3.0.0 - svelte: 4.2.0 + svelte: 4.2.1 typescript: 5.2.2 dev: true - /svelte2tsx@0.6.21(svelte@4.2.0)(typescript@5.2.2): - resolution: {integrity: sha512-v+vvbiy6WDmEQdIkJpvHYxJYG/obALfH0P6CTreYO350q/9+QmFTNCOJvx0O1o59Zpzx1Bqe+qlDxP/KtJSZEA==} + /svelte2tsx@0.6.22(svelte@4.2.1)(typescript@5.2.2): + resolution: {integrity: sha512-eFCfz0juaWeanbwGeQV21kPMwH3LKhfrUYRy1PqRmlieuHvJs8VeK7CaoHJdpBZWCXba2cltHVdywJmwOGhbww==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 typescript: ^4.9.4 || ^5.0.0 dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 4.2.0 + svelte: 4.2.1 typescript: 5.2.2 dev: true - /svelte@4.2.0: - resolution: {integrity: sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==} + /svelte@4.2.1: + resolution: {integrity: sha512-LpLqY2Jr7cRxkrTc796/AaaoMLF/1ax7cto8Ot76wrvKQhrPmZ0JgajiWPmg9mTSDqO16SSLiD17r9MsvAPTmw==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.2.1 @@ -2791,76 +2252,16 @@ packages: code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 - is-reference: 3.0.1 + is-reference: 3.0.2 locate-character: 3.0.0 magic-string: 0.30.3 periscopic: 3.1.0 dev: true - /svg2png-wasm@1.4.0: - resolution: {integrity: sha512-UH6XzvHZvHzLrgjcjxX4BCOMalzF1Z8G6EJRsBo/+DLO2jhzdUBwhA8Hl8sn21Cn6N/jBbbdeqUhCzR/FL6xYw==} - dev: false - - /tailwindcss@3.3.3: - resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.1 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.19.3 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.29 - postcss-import: 15.1.0(postcss@8.4.29) - postcss-js: 4.0.1(postcss@8.4.29) - postcss-load-config: 4.0.1(postcss@8.4.29) - postcss-nested: 6.0.1(postcss@8.4.29) - postcss-selector-parser: 6.0.13 - resolve: 1.22.4 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - dev: true - - /tar@6.1.15: - resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} - engines: {node: '>=10'} - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: true - /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: true - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: true - /tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: @@ -2872,6 +2273,20 @@ packages: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} dev: false + /tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + dev: true + + /tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + engines: {node: '>=14.0.0'} + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2884,14 +2299,6 @@ packages: engines: {node: '>=6'} dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true - - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true - /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true @@ -2917,6 +2324,11 @@ packages: prelude-ls: 1.2.1 dev: true + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -2928,8 +2340,16 @@ packages: hasBin: true dev: true - /undici@5.23.0: - resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} + /ufo@1.3.0: + resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==} + dev: true + + /ultrahtml@1.5.2: + resolution: {integrity: sha512-qh4mBffhlkiXwDAOxvSGxhL0QEQsTbnP9BozOK3OYPEGvPvdWzvAUaXNtUSMdNsKDtuyjEbyVUPFZ52SSLhLqw==} + dev: false + + /undici@5.25.2: + resolution: {integrity: sha512-tch8RbCfn1UUH1PeVCXva4V8gDpGAud/w0WubD6sHC46vYQ3KDxL+xv1A2UxK0N6jrVedutuPHxe1XIoqerwMw==} engines: {node: '>=14.0'} dependencies: busboy: 1.6.0 @@ -2942,17 +2362,6 @@ packages: tiny-inflate: 1.0.3 dev: false - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.10 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -2963,7 +2372,29 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /vite@4.4.9: + /vite-node@0.34.5(@types/node@20.7.1): + resolution: {integrity: sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.2 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.4.9(@types/node@20.7.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@4.4.9(@types/node@20.7.1): resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -2991,9 +2422,10 @@ packages: terser: optional: true dependencies: + '@types/node': 20.7.1 esbuild: 0.18.20 - postcss: 8.4.29 - rollup: 3.28.1 + postcss: 8.4.30 + rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 dev: true @@ -3006,18 +2438,72 @@ packages: vite: optional: true dependencies: - vite: 4.4.9 + vite: 4.4.9(@types/node@20.7.1) dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + /vitest@0.34.5: + resolution: {integrity: sha512-CPI68mmnr2DThSB3frSuE5RLm9wo5wU4fbDrDwWQQB1CWgq9jQVoQwnQSzYAjdoBOPoH2UtXpOgHVge/uScfZg==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 + '@types/chai': 4.3.6 + '@types/chai-subset': 1.3.3 + '@types/node': 20.7.1 + '@vitest/expect': 0.34.5 + '@vitest/runner': 0.34.5 + '@vitest/snapshot': 0.34.5 + '@vitest/spy': 0.34.5 + '@vitest/utils': 0.34.5 + acorn: 8.10.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.9 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.3 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.4.3 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.7.0 + vite: 4.4.9(@types/node@20.7.1) + vite-node: 0.34.5(@types/node@20.7.1) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser dev: true /which@2.0.2: @@ -3028,10 +2514,13 @@ packages: isexe: 2.0.0 dev: true - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true dependencies: - string-width: 4.2.3 + siginfo: 2.0.0 + stackback: 0.0.2 dev: true /wrappy@1.0.2: @@ -3047,16 +2536,16 @@ packages: engines: {node: '>= 6'} dev: true - /yaml@2.3.2: - resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} - engines: {node: '>= 14'} - dev: true - /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + /yoga-wasm-web@0.3.3: resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} dev: false diff --git a/postcss.config.cjs b/postcss.config.cjs deleted file mode 100644 index 054c147..0000000 --- a/postcss.config.cjs +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {} - } -}; diff --git a/src/app.css b/src/app.css deleted file mode 100644 index aab77a5..0000000 --- a/src/app.css +++ /dev/null @@ -1,14 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@font-face { - font-family: 'Ian Mono'; - src: url('/iaw-mono-var.woff2') format('woff2'); -} - -@layer base { - html { - font-family: Ian Mono, monospace; - } -} diff --git a/src/app.d.ts b/src/app.d.ts index 20346fb..f59b884 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,11 +1,12 @@ -/// - // See https://kit.svelte.dev/docs/types#app // for information about these interfaces -// and what to do when importing types -declare namespace App { - // interface Locals {} - // interface PageData {} - // interface Error {} - // interface Platform {} +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface Platform {} + } } + +export {}; diff --git a/src/app.html b/src/app.html index 2e08503..d2fc6b0 100644 --- a/src/app.html +++ b/src/app.html @@ -2,36 +2,11 @@ - + - - - @ethercorps/sveltekit-og - - - - - - - - - - - - - - - - %sveltekit.head% - +
%sveltekit.body%
diff --git a/src/components/Navbar.svelte b/src/components/Navbar.svelte deleted file mode 100644 index bf62c4b..0000000 --- a/src/components/Navbar.svelte +++ /dev/null @@ -1,72 +0,0 @@ - - - - diff --git a/src/index.test.ts b/src/index.test.ts new file mode 100644 index 0000000..e07cbbd --- /dev/null +++ b/src/index.test.ts @@ -0,0 +1,7 @@ +import { describe, it, expect } from 'vitest'; + +describe('sum test', () => { + it('adds 1 + 2 to equal 3', () => { + expect(1 + 2).toBe(3); + }); +}); diff --git a/src/lib/api.ts b/src/lib/api.ts new file mode 100644 index 0000000..c55f7af --- /dev/null +++ b/src/lib/api.ts @@ -0,0 +1,78 @@ +import { html } from "satori-html"; +import {ImageResponse as IR} from "@vercel/og" +import type {SvelteComponent} from "svelte"; + +export const ImageResponse = async (htmlTemplate: string, options?: ImageResponseOptions) => { + const reactVNode = html(`${htmlTemplate}`); + console.log(reactVNode) + return new IR(reactVNode, options) +}; + +export const componentToImageResponse = async (component: SvelteComponent, props: Record, options?: ImageResponseOptions) => { + const ssrSvelte = component.render(props); + console.log(ssrSvelte); + return ImageResponse(`${ssrSvelte.html}`, options) +}; + +declare const apis: { + twemoji: (code: any) => string; + openmoji: string; + blobmoji: string; + noto: string; + fluent: (code: any) => string; + fluentFlat: (code: any) => string; +}; + +declare type EmojiType = keyof typeof apis; + +type Weight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900; +type Style$1 = 'normal' | 'italic'; + +interface FontOptions { + data: Buffer | ArrayBuffer; + name: string; + weight?: Weight; + style?: Style$1; + lang?: string; +} + +export declare type ImageResponseOptions = ImageOptions & ConstructorParameters[1]; + +declare type ImageOptions = { + /** + * The width of the image. + * + * @type {number} + * @default 1200 + */ + width?: number; + /** + * The height of the image. + * + * @type {number} + * @default 630 + */ + height?: number; + /** + * Display debug information on the image. + * + * @type {boolean} + * @default false + */ + debug?: boolean; + /** + * A list of fonts to use. + * + * @type {{ data: ArrayBuffer; name: string; weight?: 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900; style?: 'normal' | 'italic' }[]} + * @default Noto Sans Latin Regular. + */ + fonts?: FontOptions[]; + /** + * Using a specific Emoji style. Defaults to `twemoji`. + * + * @link https://github.com/vercel/og#emoji + * @type {EmojiType} + * @default 'twemoji' + */ + emoji?: EmojiType; +}; diff --git a/src/lib/index.ts b/src/lib/index.ts index ed4b818..98bb684 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,98 +1 @@ -import satori, { type SatoriOptions } from 'satori'; -import type { SvelteComponent } from 'svelte'; -import toReactElement from './toReactElement.js'; -import { svg2png, initialize, type ConvertOptions } from 'svg2png-wasm'; - -let initialized = false; - -const fontFile = await fetch('https://sveltekit-og.ethercorps.io/noto-sans.ttf'); -const fontData: ArrayBuffer = await fontFile.arrayBuffer(); - -const indexWasmRes = await fetch('https://unpkg.com/svg2png-wasm/svg2png_wasm_bg.wasm'); -const svg2PngWasmBuffer = await indexWasmRes.arrayBuffer(); - -const initSvgToPng = async () => { - await initialize(svg2PngWasmBuffer).catch((e) => console.log(e)); - initialized = true; -}; - -const ImageResponse = async (htmlTemplate: string, optionsByUser: ImageResponseOptions) => { - const options = Object.assign({ width: 1200, height: 630, debug: !1 }, optionsByUser); - const svg = await satori(toReactElement(htmlTemplate), { - width: options.width, - height: options.height, - debug: options.debug, - fonts: options.fonts || [ - { - name: 'sans serif', - data: fontData, - style: 'normal', - weight: 700 - } - ] - }); - - if (!initialized) { - await initSvgToPng(); - initialized = true; - } - - const defaultConfig: ConvertOptions = { - width: options.width, // optional - height: options.height // optional - }; - - if (Object.hasOwn(options, 'backgroundColor')) { - defaultConfig.backgroundColor = options.backgroundColor; - } - - const png = await svg2png(svg, defaultConfig); - - return new Response(png, { - headers: { - 'Content-Type': 'image/png', - 'cache-control': 'public, immutable, no-transform, max-age=31536000', - ...options.headers - }, - - status: options.status, - statusText: options.statusText - }); -}; - -const componentToImageResponse = ( - component: typeof SvelteComponent, - props = {}, - optionsByUser: ImageResponseOptions -) => { - const htmlTemplate = componentToMarkup(component, props); - return ImageResponse(htmlTemplate, optionsByUser); -}; - -const componentToMarkup = (component: typeof SvelteComponent, props = {}) => { - const SvelteRenderedMarkup = (component as any).render(props); - let htmlTemplate = `${SvelteRenderedMarkup.html}`; - if (SvelteRenderedMarkup && SvelteRenderedMarkup.css && SvelteRenderedMarkup.css.code) { - htmlTemplate = `${SvelteRenderedMarkup.html}`; - } - return htmlTemplate; -}; - -type ImageResponseOptions = ConstructorParameters[1] & ImageOptions; - -type ImageOptions = { - width?: number; - height?: number; - debug?: boolean; - fonts?: SatoriOptions['fonts']; - backgroundColor?: string; - graphemeImages?: Record; - loadAdditionalAsset?: ( - languageCode: string, - segment: string - ) => Promise; -}; - -export type ImageResponseType = typeof ImageResponse; - -export { componentToImageResponse, ImageResponse, toReactElement }; +export {componentToImageResponse, ImageResponse, type ImageResponseOptions} from "./api.js" diff --git a/src/lib/toReactElement.ts b/src/lib/toReactElement.ts deleted file mode 100644 index 93629f1..0000000 --- a/src/lib/toReactElement.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { parse, walk } from 'svelte/compiler'; -import type { Ast } from 'svelte/types/compiler/interfaces'; - -/* Start of code from satori-html for cssToObject converter*/ -const camelize = (ident: string) => ident.replace(/-([a-z])/g, (_, char) => char.toUpperCase()); -const cssToObject = (str: string) => { - const obj: Record = {}; - let t = 0; - let pair = ['', '']; - const flags: Record = {}; - for (const c of str) { - if (!flags['('] && c === ':') { - t = 1; - } else if (c === ';') { - const [decl = '', value = ''] = pair; - obj[camelize(decl.trim())] = value.trim(); - t = 0; - pair = ['', '']; - } else { - pair[t] += c; - switch (c) { - case '(': { - flags[c]++; - break; - } - case ')': { - flags['(']--; - break; - } - } - } - } - const [decl = '', value = ''] = pair; - if (decl.trim() && value.trim()) { - obj[camelize(decl.trim())] = value.trim(); - } - - return obj; -}; -const nodeMap = new WeakMap(); -interface VNode { - type: string; - props: { - style?: Record; - children?: string | VNode | VNode[]; - [prop: string]: any; - }; -} -const root: VNode = { - type: 'div', - props: { - style: { - display: 'flex', - flexDirection: 'column', - width: '100%', - height: '100%' - }, - children: [] - } -}; -/* End of satori-html */ - -export const toReactElement = (htmlString: string): VNode => { - const svelteAST: Ast = parse(htmlString); - walk(svelteAST, { - enter(node: any, parent: any, prop: any, index: any) { - let newNode: any = {}; - if (node.type === 'Fragment') { - nodeMap.set(node, root); - } else if (node.type === 'Element') { - newNode.type = node.name; - const { ...props } = node.attributes; - if (node.attributes.length > 0) { - node.attributes.forEach((attribute: any) => { - if (attribute.name === 'style') { - props['style'] = cssToObject(attribute.value[0].data) as any; - } else props[attribute.name] = attribute.value[0].data as any; - }); - delete props[0]; - } - props.children = [] as unknown as string; - Object.assign(newNode, { props }); - nodeMap.set(node, newNode); - if (parent) { - const newParent = nodeMap.get(parent); - newParent.props.children[index] = newNode; - } - } else if (node.type === 'Text') { - newNode = node.data.trim(); - if (newNode) { - if (parent && parent.type !== 'Attribute') { - const newParent = nodeMap.get(parent); - if (parent.children.length === 1) { - newParent.props.children = newNode; - } else { - newParent.props.children[index] = newNode; - } - } - } - } - } - }); - - return root; -}; - -export default toReactElement; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte deleted file mode 100644 index f6d76bd..0000000 --- a/src/routes/+layout.svelte +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - -
- - -
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte deleted file mode 100644 index 8e8c6fe..0000000 --- a/src/routes/+page.svelte +++ /dev/null @@ -1,240 +0,0 @@ - - -
-
-

Introduction

-

- SvelteKit-OG is use to dynamically generate Open Graph images from an HTML+CSS template or - Svelte component using fast and efficient conversion from
HTML > SVG > PNG. Based on Satori. - No headless browser required. -

-
- -
-

Installation

-

- Use your favourite package manager and add @ethercorps/sveltekit-og - as your devDependency. -

-
- Example: - - pnpm i -D @ethercorps/sveltekit-og - -
-
-

- If you are using it on with - cloudflare pages - - or cloudflare workers then you have - to provide polyfills for - url. You can simply add it to your - devDependency, -
To install - - pnpm i -D url - -

-
-
-
-

Usage

-

- Create a file at - /src/routes/og/+server.ts - . Alternatively, you can use JavaScript by removing the types from this example. -

-
-

- Route can be anything but it should have only one file - +server.ts -

-
-
{@html highlightedQuickEg}
-
-

- Then run pnpm run dev and visit localhost:5173/og to view your generated PNG. Remember that hot module reloading does not work with server routes, so if you change your HTML or CSS, hard refresh the route to see changes. -

-
-

- Image Output: Live Version - @ethercorps/sveltekit-og Demo OG Generated PNG -

-
- -
-

Headers

-

- Notice that our example uses TailwindCSS classes (e.g. tw="bg-gray-50"). Alternatively, your HTML can contain style attributes using any of the subset of CSS supported by Satori. -
-
- Satori supports only a subset of HTML and CSS. For full details, see Satori’s documentation. Notably, Satori only supports flex-based layouts. -

-
- -
-

Fonts

-

- Satori supports ttf, otf, and woff font formats; woff2 is not supported. To maximize the font parsing speed, ttf or otf are recommended over woff. -
-
- By default, @ethercorps/sveltekit-og includes only 'Noto Sans' font. If you need to use other fonts, you can specify them as shown in the example. Notably, you can also import a font file that is stored locally within your project and are not required to use fetch. -

-
- -
-

Examples

- -
  • ImageResponse - Source - Demo
  • -
  • componentToImageResponse - Source - Demo
  • -
    - -
    -

    Api Reference

    - -

    - The package exposes an ImageResponse and componentToImageResponse constructors, with the following options available. -

    -
    {@html highlightedApiReference}
    -
    - - -
    diff --git a/src/routes/+page.ts b/src/routes/+page.ts deleted file mode 100644 index 76f5bdc..0000000 --- a/src/routes/+page.ts +++ /dev/null @@ -1 +0,0 @@ -export let prerender = true diff --git a/src/routes/+server.ts b/src/routes/+server.ts new file mode 100644 index 0000000..d62fcba --- /dev/null +++ b/src/routes/+server.ts @@ -0,0 +1,7 @@ +import type {RequestHandler} from "@sveltejs/kit"; +import {ImageResponse} from "$lib"; + +export const GET: RequestHandler = async () => { + const html = '
    hello, world
    '; + return ImageResponse(html) +}; diff --git a/src/routes/component-og/+server.ts b/src/routes/component-og/+server.ts deleted file mode 100644 index 973d297..0000000 --- a/src/routes/component-og/+server.ts +++ /dev/null @@ -1,26 +0,0 @@ -import OG from './OG.svelte'; -import { componentToImageResponse } from '$lib'; -import type { RequestHandler } from '@sveltejs/kit'; - -const fontFile = await fetch( - 'https://raw.githubusercontent.com/etherCorps/sveltekit-og/main/static/inter-latin-ext-700-normal.woff' -); -const fontData: ArrayBuffer = await fontFile.arrayBuffer(); - -export const GET: RequestHandler = async () => { - return await componentToImageResponse( - OG, - { text: 'Ready to dive in?', spanText: 'Start your free trial today.' }, - { - height: 250, - width: 500, - fonts: [ - { - name: 'Inter Latin', - data: fontData, - weight: 700 - } - ] - } - ); -}; diff --git a/src/routes/component-og/OG.svelte b/src/routes/component-og/OG.svelte deleted file mode 100644 index bae5bcf..0000000 --- a/src/routes/component-og/OG.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - -
    -
    -

    - {text} - {spanText} -

    -
    - - -
    -
    -
    diff --git a/src/routes/new/+server.ts b/src/routes/new/+server.ts deleted file mode 100644 index 3637b08..0000000 --- a/src/routes/new/+server.ts +++ /dev/null @@ -1,50 +0,0 @@ -`/src/routes/new/+server.ts` - -import { ImageResponse } from '$lib'; -import type { RequestHandler } from '@sveltejs/kit'; - -const template = ` -
    -
    -

    - Ready to dive in? - Start your free trial today. -

    -
    - - -
    -
    -
    -`; -const fontFile400 = await fetch( - 'https://raw.githubusercontent.com/etherCorps/sveltekit-og/main/static/inter-latin-ext-400-normal.woff' -); -const fontFile700 = await fetch( - 'https://raw.githubusercontent.com/etherCorps/sveltekit-og/main/static/inter-latin-ext-700-normal.woff' -); -const fontData400: ArrayBuffer = await fontFile400.arrayBuffer(); -const fontData700: ArrayBuffer = await fontFile700.arrayBuffer(); - -export const GET: RequestHandler = async () => { - return await ImageResponse(template, { - height: 250, - width: 500, - fonts: [ - { - name: 'Inter Latin', - data: fontData400, - weight: 400 - }, - { - name: 'Inter Latin', - data: fontData700, - weight: 700 - } - ] - }); -}; diff --git a/src/routes/og/+server.ts b/src/routes/og/+server.ts deleted file mode 100644 index 072bfa1..0000000 --- a/src/routes/og/+server.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type {RequestHandler} from "@sveltejs/kit"; -import {ImageResponse} from "$lib"; -import {to_number} from "svelte/internal"; - -const htmlSrc = ` -
    -
    Design
    -
    Develop
    -
    SvelteKit OG
    -
    - -`; - -export const GET: RequestHandler = async ({request, url}) => { - return ImageResponse(htmlSrc, { - width: to_number(url.searchParams.get('w')) || 600, - height: to_number(url.searchParams.get('h')) || 420, - }) -}; diff --git a/src/routes/sc/+server.ts b/src/routes/sc/+server.ts new file mode 100644 index 0000000..7a5f95b --- /dev/null +++ b/src/routes/sc/+server.ts @@ -0,0 +1,10 @@ +import type {RequestHandler} from "@sveltejs/kit"; +import {componentToImageResponse} from "$lib"; +import OG from "./OG.svelte"; + +export const GET: RequestHandler = async () => { + return await componentToImageResponse( + OG, + { text: 'Ready to dive in?', spanText: 'Start your free trial today.' } + ); +}; diff --git a/src/routes/sc/OG.svelte b/src/routes/sc/OG.svelte new file mode 100644 index 0000000..2fa1240 --- /dev/null +++ b/src/routes/sc/OG.svelte @@ -0,0 +1,29 @@ + + +
    +
    +

    + {text} + {spanText} +

    +
    + + +
    +
    +
    diff --git a/static/demo.png b/static/demo.png deleted file mode 100644 index bb74d9ccf7e1715b35996c670ba65620f0e55a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12657 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 NAUa0cm734P{u>#%4lV!y diff --git a/static/favicon.ico b/static/favicon.ico deleted file mode 100644 index 3e1c7041736524c5fda182ba5453f66149988b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmZ{j%W4!s6ozY(7=?(;Dj^~mK|$~Z#I5)QE(}>j(S^Q*#OKIL-#~X+2xcL;kgP;R z=Gt?=-!DDm%v8R=>>5T)DttLzRp&qT*XbT(V*JJ9hW~r!&4w}C#+duS5-We#3C6H@ z*+`{Q24Zj*Ucp;9gj?x!T6>pC-5&cJ@Em@@A2gOYf$y*n*WkYzT8nr}Z0GZN+wFGk za5%KhX47V~S=AZB2Y3Mgc!}oMiJyZYuwfWljm2W&qUM!K#YTQeOTC0E;Jhfpy<{?3 zRGvn!*R#c9(f0d&S7$z-J5Q=lZVwJ3o%gPu6-uSj(lhnknbm65P9_sqcQhLL`+Ol^ zp1ppH=M%7*Ovct~HFsXUUU&IAS6Yp7xooK&kh|yg(fc{p9o4(lF&>XyJw^3I9?}0s zd(-QQH{hFkue-{xdg1Ty>uD~3pZ`gfAwBtHk-L#N~2yXwpuN#ev;dVM=N^y&^%C{z8mQ^bZ_;{_odNjs9u-chtg{( zqEmbfUtuo)gTcV{%zsPjOD>nw`Dd^VPVZ}I4m)rJ6?xISRNp$Cj#YnHm-iQXXZTp^ z{R4Zdu?D)&N08SUgzyve+gyIXUbh+(iG;fod3vu;;59shJDjWE_%c0vWX$PpxN6M1 S^@tep0!~>I9r8k0pg9Lm%=oAP diff --git a/static/iaw-mono-var.woff2 b/static/iaw-mono-var.woff2 deleted file mode 100644 index f2fac0145b234c1da793ac56618e1ce70e7801d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42832 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

    +JlWW(e{@X}>;jqeo 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 diff --git a/static/~partytown/debug/partytown-atomics.js b/static/~partytown/debug/partytown-atomics.js deleted file mode 100644 index 96685b5..0000000 --- a/static/~partytown/debug/partytown-atomics.js +++ /dev/null @@ -1,572 +0,0 @@ -/* Partytown 0.8.0 - MIT builder.io */ -(window => { - const isPromise = v => "object" == typeof v && v && v.then; - const noop = () => {}; - const len = obj => obj.length; - const getConstructorName = obj => { - var _a, _b, _c; - try { - const constructorName = null === (_a = null == obj ? void 0 : obj.constructor) || void 0 === _a ? void 0 : _a.name; - if (constructorName) { - return constructorName; - } - } catch (e) {} - try { - const zoneJsConstructorName = null === (_c = null === (_b = null == obj ? void 0 : obj.__zone_symbol__originalInstance) || void 0 === _b ? void 0 : _b.constructor) || void 0 === _c ? void 0 : _c.name; - if (zoneJsConstructorName) { - return zoneJsConstructorName; - } - } catch (e) {} - return ""; - }; - const startsWith = (str, val) => str.startsWith(val); - const isValidMemberName = memberName => !(startsWith(memberName, "webkit") || startsWith(memberName, "toJSON") || startsWith(memberName, "constructor") || startsWith(memberName, "toString") || startsWith(memberName, "_")); - const getNodeName = node => 11 === node.nodeType && node.host ? "#s" : node.nodeName; - const randomId = () => Math.round(Math.random() * Number.MAX_SAFE_INTEGER).toString(36); - const defineConstructorName = (Cstr, value) => ((obj, memberName, descriptor) => Object.defineProperty(obj, memberName, { - ...descriptor, - configurable: true - }))(Cstr, "name", { - value: value - }); - const htmlConstructorTags = { - Anchor: "a", - DList: "dl", - Image: "img", - OList: "ol", - Paragraph: "p", - Quote: "q", - TableCaption: "caption", - TableCell: "td", - TableCol: "colgroup", - TableRow: "tr", - TableSection: "tbody", - UList: "ul" - }; - const svgConstructorTags = { - Graphics: "g", - SVG: "svg" - }; - const InstanceIdKey = Symbol(); - const CreatedKey = Symbol(); - const instances = new Map; - const mainRefs = new Map; - const winCtxs = {}; - const windowIds = new WeakMap; - const getAndSetInstanceId = (instance, instanceId) => { - if (instance) { - if (instanceId = windowIds.get(instance)) { - return instanceId; - } - (instanceId = instance[InstanceIdKey]) || setInstanceId(instance, instanceId = randomId()); - return instanceId; - } - }; - const getInstance = (winId, instanceId, win, doc, docId) => { - if ((win = winCtxs[winId]) && win.$window$) { - if (winId === instanceId) { - return win.$window$; - } - doc = win.$window$.document; - docId = instanceId.split(".").pop(); - if ("d" === docId) { - return doc; - } - if ("e" === docId) { - return doc.documentElement; - } - if ("h" === docId) { - return doc.head; - } - if ("b" === docId) { - return doc.body; - } - } - return instances.get(instanceId); - }; - const setInstanceId = (instance, instanceId, now) => { - if (instance) { - instances.set(instanceId, instance); - instance[InstanceIdKey] = instanceId; - instance[CreatedKey] = now = Date.now(); - if (now > lastCleanup + 5e3) { - instances.forEach(((storedInstance, instanceId) => { - storedInstance[CreatedKey] < lastCleanup && storedInstance.nodeType && !storedInstance.isConnected && instances.delete(instanceId); - })); - lastCleanup = now; - } - } - }; - let lastCleanup = 0; - const mainWindow = window.parent; - const docImpl = document.implementation.createHTMLDocument(); - const config = mainWindow.partytown || {}; - const libPath = (config.lib || "/~partytown/") + "debug/"; - const logMain = msg => { - console.debug.apply(console, [ "%cMain 🌎", "background: #717171; color: white; padding: 2px 3px; border-radius: 2px; font-size: 0.8em;", msg ]); - }; - const winIds = []; - const normalizedWinId = winId => { - winIds.includes(winId) || winIds.push(winId); - return winIds.indexOf(winId) + 1; - }; - const defineCustomElement = (winId, worker, ceData) => { - const Cstr = defineConstructorName(class extends winCtxs[winId].$window$.HTMLElement {}, ceData[0]); - const ceCallbackMethods = "connectedCallback,disconnectedCallback,attributeChangedCallback,adoptedCallback".split(","); - ceCallbackMethods.map((callbackMethodName => Cstr.prototype[callbackMethodName] = function(...args) { - worker.postMessage([ 15, winId, getAndSetInstanceId(this), callbackMethodName, args ]); - })); - Cstr.observedAttributes = ceData[1]; - return Cstr; - }; - const serializeForWorker = ($winId$, value, added, type, cstrName, prevInstanceId) => void 0 !== value && (type = typeof value) ? "string" === type || "number" === type || "boolean" === type || null == value ? [ 0, value ] : "function" === type ? [ 6 ] : (added = added || new Set) && Array.isArray(value) ? added.has(value) ? [ 1, [] ] : added.add(value) && [ 1, value.map((v => serializeForWorker($winId$, v, added))) ] : "object" === type ? serializedValueIsError(value) ? [ 14, { - name: value.name, - message: value.message, - stack: value.stack - } ] : "" === (cstrName = getConstructorName(value)) ? [ 2, {} ] : "Window" === cstrName ? [ 3, [ $winId$, $winId$ ] ] : "HTMLCollection" === cstrName || "NodeList" === cstrName ? [ 7, Array.from(value).map((v => serializeForWorker($winId$, v, added)[1])) ] : cstrName.endsWith("Event") ? [ 5, serializeObjectForWorker($winId$, value, added) ] : "CSSRuleList" === cstrName ? [ 12, Array.from(value).map(serializeCssRuleForWorker) ] : startsWith(cstrName, "CSS") && cstrName.endsWith("Rule") ? [ 11, serializeCssRuleForWorker(value) ] : "CSSStyleDeclaration" === cstrName ? [ 13, serializeObjectForWorker($winId$, value, added) ] : "Attr" === cstrName ? [ 10, [ value.name, value.value ] ] : value.nodeType ? [ 3, [ $winId$, getAndSetInstanceId(value), getNodeName(value), prevInstanceId ] ] : [ 2, serializeObjectForWorker($winId$, value, added, true, true) ] : void 0 : value; - const serializeObjectForWorker = (winId, obj, added, includeFunctions, includeEmptyStrings, serializedObj, propName, propValue) => { - serializedObj = {}; - if (!added.has(obj)) { - added.add(obj); - for (propName in obj) { - if (isValidMemberName(propName)) { - propValue = "path" === propName && getConstructorName(obj).endsWith("Event") ? obj.composedPath() : obj[propName]; - (includeFunctions || "function" != typeof propValue) && (includeEmptyStrings || "" !== propValue) && (serializedObj[propName] = serializeForWorker(winId, propValue, added)); - } - } - } - return serializedObj; - }; - const serializeCssRuleForWorker = cssRule => { - let obj = {}; - let key; - for (key in cssRule) { - validCssRuleProps.includes(key) && (obj[key] = String(cssRule[key])); - } - return obj; - }; - const serializedValueIsError = value => value instanceof window.top.Error; - const deserializeFromWorker = (worker, serializedTransfer, serializedType, serializedValue) => { - if (serializedTransfer) { - serializedType = serializedTransfer[0]; - serializedValue = serializedTransfer[1]; - return 0 === serializedType ? serializedValue : 4 === serializedType ? deserializeRefFromWorker(worker, serializedValue) : 1 === serializedType ? serializedValue.map((v => deserializeFromWorker(worker, v))) : 3 === serializedType ? getInstance(serializedValue[0], serializedValue[1]) : 5 === serializedType ? constructEvent(deserializeObjectFromWorker(worker, serializedValue)) : 2 === serializedType ? deserializeObjectFromWorker(worker, serializedValue) : 8 === serializedType ? serializedValue : 9 === serializedType ? new window[serializedTransfer[2]](serializedValue) : void 0; - } - }; - const deserializeRefFromWorker = (worker, {$winId$: $winId$, $instanceId$: $instanceId$, $refId$: $refId$}, ref) => { - ref = mainRefs.get($refId$); - if (!ref) { - ref = function(...args) { - worker.postMessage([ 9, { - $winId$: $winId$, - $instanceId$: $instanceId$, - $refId$: $refId$, - $thisArg$: serializeForWorker($winId$, this), - $args$: serializeForWorker($winId$, args) - } ]); - }; - mainRefs.set($refId$, ref); - } - return ref; - }; - const constructEvent = eventProps => new ("detail" in eventProps ? CustomEvent : Event)(eventProps.type, eventProps); - const deserializeObjectFromWorker = (worker, serializedValue, obj, key) => { - obj = {}; - for (key in serializedValue) { - obj[key] = deserializeFromWorker(worker, serializedValue[key]); - } - return obj; - }; - const validCssRuleProps = "cssText,selectorText,href,media,namespaceURI,prefix,name,conditionText".split(","); - const mainAccessHandler = async (worker, accessReq) => { - let accessRsp = { - $msgId$: accessReq.$msgId$ - }; - let totalTasks = len(accessReq.$tasks$); - let i = 0; - let task; - let winId; - let applyPath; - let instance; - let rtnValue; - let isLast; - for (;i < totalTasks; i++) { - try { - isLast = i === totalTasks - 1; - task = accessReq.$tasks$[i]; - winId = task.$winId$; - applyPath = task.$applyPath$; - !winCtxs[winId] && winId.startsWith("f_") && await new Promise((resolve => { - let check = 0; - let callback = () => { - winCtxs[winId] || check++ > 1e3 ? resolve() : requestAnimationFrame(callback); - }; - callback(); - })); - if (1 === applyPath[0] && applyPath[1] in winCtxs[winId].$window$) { - setInstanceId(new winCtxs[winId].$window$[applyPath[1]](...deserializeFromWorker(worker, applyPath[2])), task.$instanceId$); - } else { - instance = getInstance(winId, task.$instanceId$); - if (instance) { - rtnValue = applyToInstance(worker, winId, instance, applyPath, isLast, task.$groupedGetters$); - task.$assignInstanceId$ && ("string" == typeof task.$assignInstanceId$ ? setInstanceId(rtnValue, task.$assignInstanceId$) : winCtxs[task.$assignInstanceId$.$winId$] = { - $winId$: task.$assignInstanceId$.$winId$, - $window$: { - document: rtnValue - } - }); - if (isPromise(rtnValue)) { - rtnValue = await rtnValue; - isLast && (accessRsp.$isPromise$ = true); - } - isLast && (accessRsp.$rtnValue$ = serializeForWorker(winId, rtnValue, void 0, void 0, void 0, task.$instanceId$)); - } else { - accessRsp.$error$ = `Error finding instance "${task.$instanceId$}" on window ${normalizedWinId(winId)}`; - console.error(accessRsp.$error$, task); - } - } - } catch (e) { - isLast ? accessRsp.$error$ = String(e.stack || e) : console.error(e); - } - } - return accessRsp; - }; - const applyToInstance = (worker, winId, instance, applyPath, isLast, groupedGetters) => { - let i = 0; - let l = len(applyPath); - let next; - let current; - let previous; - let args; - let groupedRtnValues; - for (;i < l; i++) { - current = applyPath[i]; - next = applyPath[i + 1]; - previous = applyPath[i - 1]; - try { - if (!Array.isArray(next)) { - if ("string" == typeof current || "number" == typeof current) { - if (i + 1 === l && groupedGetters) { - groupedRtnValues = {}; - groupedGetters.map((propName => groupedRtnValues[propName] = instance[propName])); - return groupedRtnValues; - } - instance = instance[current]; - } else { - if (0 === next) { - instance[previous] = deserializeFromWorker(worker, current); - return; - } - if ("function" == typeof instance[previous]) { - args = deserializeFromWorker(worker, current); - "define" === previous && "CustomElementRegistry" === getConstructorName(instance) && (args[1] = defineCustomElement(winId, worker, args[1])); - "insertRule" === previous && args[1] > len(instance.cssRules) && (args[1] = len(instance.cssRules)); - instance = instance[previous].apply(instance, args); - if ("play" === previous) { - return Promise.resolve(); - } - } - } - } - } catch (err) { - if (isLast) { - throw err; - } - console.debug("Non-blocking setter error:", err); - } - } - return instance; - }; - const readNextScript = (worker, winCtx) => { - let $winId$ = winCtx.$winId$; - let win = winCtx.$window$; - let doc = win.document; - let scriptSelector = 'script[type="text/partytown"]:not([data-ptid]):not([data-pterror])'; - let scriptElm; - let $instanceId$; - let scriptData; - if (doc && doc.body) { - scriptElm = doc.querySelector('script[type="text/partytown"]:not([data-ptid]):not([data-pterror]):not([async]):not([defer])'); - scriptElm || (scriptElm = doc.querySelector(scriptSelector)); - if (scriptElm) { - scriptElm.dataset.ptid = $instanceId$ = getAndSetInstanceId(scriptElm, $winId$); - scriptData = { - $winId$: $winId$, - $instanceId$: $instanceId$ - }; - if (scriptElm.src) { - scriptData.$url$ = scriptElm.src; - scriptData.$orgUrl$ = scriptElm.dataset.ptsrc || scriptElm.src; - } else { - scriptData.$content$ = scriptElm.innerHTML; - } - worker.postMessage([ 7, scriptData ]); - } else { - if (!winCtx.$isInitialized$) { - winCtx.$isInitialized$ = 1; - ((worker, $winId$, win) => { - let queuedForwardCalls = win._ptf; - let forwards = (win.partytown || {}).forward || []; - let i; - let mainForwardFn; - let forwardCall = ($forward$, args) => worker.postMessage([ 10, { - $winId$: $winId$, - $forward$: $forward$, - $args$: serializeForWorker($winId$, Array.from(args)) - } ]); - win._ptf = void 0; - forwards.map((forwardProps => { - mainForwardFn = win; - forwardProps.split(".").map(((_, i, arr) => { - mainForwardFn = mainForwardFn[arr[i]] = i + 1 < len(arr) ? mainForwardFn[arr[i]] || ("push" === arr[i + 1] ? [] : {}) : (...args) => forwardCall(arr, args); - })); - })); - if (queuedForwardCalls) { - for (i = 0; i < len(queuedForwardCalls); i += 2) { - forwardCall(queuedForwardCalls[i], queuedForwardCalls[i + 1]); - } - } - })(worker, $winId$, win); - doc.dispatchEvent(new CustomEvent("pt0")); - { - const winType = win === win.top ? "top" : "iframe"; - logMain(`Executed ${winType} window ${normalizedWinId($winId$)} environment scripts in ${(performance.now() - winCtx.$startTime$).toFixed(1)}ms`); - } - } - worker.postMessage([ 8, $winId$ ]); - } - } else { - requestAnimationFrame((() => readNextScript(worker, winCtx))); - } - }; - const registerWindow = (worker, $winId$, $window$) => { - if (!windowIds.has($window$)) { - windowIds.set($window$, $winId$); - const doc = $window$.document; - const history = $window$.history; - const $parentWinId$ = windowIds.get($window$.parent); - let initialised = false; - const onInitialisedQueue = []; - const onInitialised = callback => { - initialised ? callback() : onInitialisedQueue.push(callback); - }; - const sendInitEnvData = () => { - worker.postMessage([ 5, { - $winId$: $winId$, - $parentWinId$: $parentWinId$, - $url$: doc.baseURI, - $visibilityState$: doc.visibilityState - } ]); - setTimeout((() => { - initialised = true; - onInitialisedQueue.forEach((callback => { - callback(); - })); - })); - }; - const pushState = history.pushState.bind(history); - const replaceState = history.replaceState.bind(history); - const onLocationChange = (type, state, newUrl, oldUrl) => () => { - setTimeout((() => { - worker.postMessage([ 13, { - $winId$: $winId$, - type: type, - state: state, - url: doc.baseURI, - newUrl: newUrl, - oldUrl: oldUrl - } ]); - })); - }; - history.pushState = (state, _, newUrl) => { - pushState(state, _, newUrl); - onInitialised(onLocationChange(0, state, null == newUrl ? void 0 : newUrl.toString())); - }; - history.replaceState = (state, _, newUrl) => { - replaceState(state, _, newUrl); - onInitialised(onLocationChange(1, state, null == newUrl ? void 0 : newUrl.toString())); - }; - $window$.addEventListener("popstate", (event => { - onInitialised(onLocationChange(2, event.state)); - })); - $window$.addEventListener("hashchange", (event => { - onInitialised(onLocationChange(3, {}, event.newURL, event.oldURL)); - })); - $window$.addEventListener("ptupdate", (() => { - readNextScript(worker, winCtxs[$winId$]); - })); - doc.addEventListener("visibilitychange", (() => worker.postMessage([ 14, $winId$, doc.visibilityState ]))); - winCtxs[$winId$] = { - $winId$: $winId$, - $window$: $window$ - }; - winCtxs[$winId$].$startTime$ = performance.now(); - { - const winType = $winId$ === $parentWinId$ ? "top" : "iframe"; - logMain(`Registered ${winType} window ${normalizedWinId($winId$)}`); - } - "complete" === doc.readyState ? sendInitEnvData() : $window$.addEventListener("load", sendInitEnvData); - } - }; - const onMessageFromWebWorker = (worker, msg, winCtx) => { - if (4 === msg[0]) { - registerWindow(worker, randomId(), mainWindow); - } else { - winCtx = winCtxs[msg[1]]; - winCtx && (7 === msg[0] ? requestAnimationFrame((() => readNextScript(worker, winCtx))) : 6 === msg[0] && ((worker, winCtx, instanceId, errorMsg, scriptElm) => { - scriptElm = winCtx.$window$.document.querySelector(`[data-ptid="${instanceId}"]`); - if (scriptElm) { - errorMsg ? scriptElm.dataset.pterror = errorMsg : scriptElm.type += "-x"; - delete scriptElm.dataset.ptid; - } - readNextScript(worker, winCtx); - })(worker, winCtx, msg[2], msg[3])); - } - }; - const readMainInterfaces = () => { - const elms = Object.getOwnPropertyNames(mainWindow).map((interfaceName => ((doc, interfaceName, r, tag) => { - r = interfaceName.match(/^(HTML|SVG)(.+)Element$/); - if (r) { - tag = r[2]; - return "S" == interfaceName[0] ? doc.createElementNS("http://www.w3.org/2000/svg", svgConstructorTags[tag] || tag.slice(0, 2).toLowerCase() + tag.slice(2)) : doc.createElement(htmlConstructorTags[tag] || tag); - } - })(docImpl, interfaceName))).filter((elm => elm)).map((elm => [ elm ])); - return readImplementations(elms, []); - }; - const cstrs = new Set([ "Object" ]); - const readImplementations = (impls, interfaces) => { - const cstrImpls = impls.filter((implData => implData[0])).map((implData => { - const impl = implData[0]; - const interfaceType = implData[1]; - const cstrName = getConstructorName(impl); - const CstrPrototype = mainWindow[cstrName].prototype; - return [ cstrName, CstrPrototype, impl, interfaceType ]; - })); - cstrImpls.map((([cstrName, CstrPrototype, impl, intefaceType]) => readOwnImplementation(cstrs, interfaces, cstrName, CstrPrototype, impl, intefaceType))); - return interfaces; - }; - const readImplementation = (cstrName, impl, memberName) => { - let interfaceMembers = []; - let interfaceInfo = [ cstrName, "Object", interfaceMembers ]; - for (memberName in impl) { - readImplementationMember(interfaceMembers, impl, memberName); - } - return interfaceInfo; - }; - const readOwnImplementation = (cstrs, interfaces, cstrName, CstrPrototype, impl, interfaceType) => { - if (!cstrs.has(cstrName)) { - cstrs.add(cstrName); - const SuperCstr = Object.getPrototypeOf(CstrPrototype); - const superCstrName = getConstructorName(SuperCstr); - const interfaceMembers = []; - const propDescriptors = Object.getOwnPropertyDescriptors(CstrPrototype); - readOwnImplementation(cstrs, interfaces, superCstrName, SuperCstr, impl, interfaceType); - for (const memberName in propDescriptors) { - readImplementationMember(interfaceMembers, impl, memberName); - } - interfaces.push([ cstrName, superCstrName, interfaceMembers, interfaceType, getNodeName(impl) ]); - } - }; - const readImplementationMember = (interfaceMembers, implementation, memberName, value, memberType, cstrName) => { - try { - if (isValidMemberName(memberName) && isNaN(memberName[0]) && "all" !== memberName) { - value = implementation[memberName]; - memberType = typeof value; - if ("function" === memberType) { - (String(value).includes("[native") || Object.getPrototypeOf(implementation)[memberName]) && interfaceMembers.push([ memberName, 5 ]); - } else if ("object" === memberType && null != value) { - cstrName = getConstructorName(value); - "Object" !== cstrName && self[cstrName] && interfaceMembers.push([ memberName, value.nodeType || cstrName ]); - } else { - "symbol" !== memberType && (memberName.toUpperCase() === memberName ? interfaceMembers.push([ memberName, 6, value ]) : interfaceMembers.push([ memberName, 6 ])); - } - } - } catch (e) { - console.warn(e); - } - }; - const readStorage = storageName => { - let items = []; - let i = 0; - let l = len(mainWindow[storageName]); - let key; - for (;i < l; i++) { - key = mainWindow[storageName].key(i); - items.push([ key, mainWindow[storageName].getItem(key) ]); - } - return items; - }; - const getGlobalConstructor = (mainWindow, cstrName) => void 0 !== mainWindow[cstrName] ? new mainWindow[cstrName](noop) : 0; - const addGlobalConstructorUsingPrototype = ($interfaces$, mainWindow, cstrName) => { - void 0 !== mainWindow[cstrName] && $interfaces$.push([ cstrName, "Object", Object.keys(mainWindow[cstrName].prototype).map((propName => [ propName, 6 ])), 12 ]); - }; - let worker; - (async receiveMessage => { - const sharedDataBuffer = new SharedArrayBuffer(1073741824); - const sharedData = new Int32Array(sharedDataBuffer); - return (worker, msg) => { - const msgType = msg[0]; - const accessReq = msg[1]; - if (0 === msgType) { - const initData = (() => { - const elm = docImpl.createElement("i"); - const textNode = docImpl.createTextNode(""); - const comment = docImpl.createComment(""); - const frag = docImpl.createDocumentFragment(); - const shadowRoot = docImpl.createElement("p").attachShadow({ - mode: "open" - }); - const intersectionObserver = getGlobalConstructor(mainWindow, "IntersectionObserver"); - const mutationObserver = getGlobalConstructor(mainWindow, "MutationObserver"); - const resizeObserver = getGlobalConstructor(mainWindow, "ResizeObserver"); - const perf = mainWindow.performance; - const screen = mainWindow.screen; - const impls = [ [ mainWindow.history ], [ perf ], [ perf.navigation ], [ perf.timing ], [ screen ], [ screen.orientation ], [ mainWindow.visualViewport ], [ intersectionObserver, 12 ], [ mutationObserver, 12 ], [ resizeObserver, 12 ], [ textNode ], [ comment ], [ frag ], [ shadowRoot ], [ elm ], [ elm.attributes ], [ elm.classList ], [ elm.dataset ], [ elm.style ], [ docImpl ], [ docImpl.doctype ] ]; - const initialInterfaces = [ readImplementation("Window", mainWindow), readImplementation("Node", textNode) ]; - const $config$ = JSON.stringify(config, ((k, v) => { - if ("function" == typeof v) { - v = String(v); - v.startsWith(k + "(") && (v = "function " + v); - } - return v; - })); - const initWebWorkerData = { - $config$: $config$, - $interfaces$: readImplementations(impls, initialInterfaces), - $libPath$: new URL(libPath, mainWindow.location) + "", - $origin$: origin, - $localStorage$: readStorage("localStorage"), - $sessionStorage$: readStorage("sessionStorage") - }; - addGlobalConstructorUsingPrototype(initWebWorkerData.$interfaces$, mainWindow, "IntersectionObserverEntry"); - return initWebWorkerData; - })(); - initData.$sharedDataBuffer$ = sharedDataBuffer; - worker.postMessage([ 1, initData ]); - } else { - 2 === msg[0] ? worker.postMessage([ 3, readMainInterfaces() ]) : 11 === msgType ? receiveMessage(accessReq, (accessRsp => { - const stringifiedData = JSON.stringify(accessRsp); - const stringifiedDataLength = stringifiedData.length; - for (let i = 0; i < stringifiedDataLength; i++) { - sharedData[i + 1] = stringifiedData.charCodeAt(i); - } - sharedData[0] = stringifiedDataLength; - Atomics.notify(sharedData, 0); - })) : onMessageFromWebWorker(worker, msg); - } - }; - })(((accessReq, responseCallback) => mainAccessHandler(worker, accessReq).then(responseCallback))).then((onMessageHandler => { - if (onMessageHandler) { - worker = new Worker(libPath + "partytown-ww-atomics.js?v=0.8.0", { - name: "Partytown 🎉" - }); - worker.onmessage = ev => { - const msg = ev.data; - 12 === msg[0] ? mainAccessHandler(worker, msg[1]) : onMessageHandler(worker, msg); - }; - logMain("Created Partytown web worker (0.8.0)"); - worker.onerror = ev => console.error("Web Worker Error", ev); - mainWindow.addEventListener("pt1", (ev => registerWindow(worker, getAndSetInstanceId(ev.detail.frameElement), ev.detail))); - } - })); -})(window); diff --git a/static/~partytown/debug/partytown-media.js b/static/~partytown/debug/partytown-media.js deleted file mode 100644 index f71fadb..0000000 --- a/static/~partytown/debug/partytown-media.js +++ /dev/null @@ -1,374 +0,0 @@ -/* Partytown 0.8.0 - MIT builder.io */ -(self => { - const [getter, setter, callMethod, constructGlobal, definePrototypePropertyDescriptor, randomId, WinIdKey, InstanceIdKey, ApplyPathKey] = self.$bridgeToMedia$; - delete self.$bridgeToMedia$; - const ContextKey = Symbol(); - const MediaSourceKey = Symbol(); - const ReadyStateKey = Symbol(); - const SourceBuffersKey = Symbol(); - const SourceBufferTasksKey = Symbol(); - const TimeRangesKey = Symbol(); - const EMPTY_ARRAY = []; - const defineCstr = (win, cstrName, Cstr) => win[cstrName] = defineCstrName(cstrName, Cstr); - const defineCstrName = (cstrName, Cstr) => Object.defineProperty(Cstr, "name", { - value: cstrName - }); - const initCanvas = (WorkerBase, win) => { - const HTMLCanvasDescriptorMap = { - getContext: { - value(contextType, contextAttributes) { - this[ContextKey] || (this[ContextKey] = (contextType.includes("webgl") ? createContextWebGL : createContext2D)(this, contextType, contextAttributes)); - return this[ContextKey]; - } - } - }; - const WorkerCanvasGradient = defineCstr(win, "CanvasGradient", class extends WorkerBase { - addColorStop(...args) { - callMethod(this, [ "addColorStop" ], args, 2); - } - }); - const WorkerCanvasPattern = defineCstr(win, "CanvasPattern", class extends WorkerBase { - setTransform(...args) { - callMethod(this, [ "setTransform" ], args, 2); - } - }); - const createContext2D = (canvasInstance, contextType, contextAttributes) => { - const winId = canvasInstance[WinIdKey]; - const ctxInstanceId = randomId(); - const ctxInstance = { - [WinIdKey]: winId, - [InstanceIdKey]: ctxInstanceId, - [ApplyPathKey]: [] - }; - const ctx = callMethod(canvasInstance, [ "getContext" ], [ contextType, contextAttributes ], 1, ctxInstanceId); - const ctx2dGetterMethods = "getContextAttributes,getImageData,getLineDash,getTransform,isPointInPath,isPointInStroke,measureText".split(","); - const CanvasRenderingContext2D = { - get: (target, propName) => "string" == typeof propName && propName in ctx ? "function" == typeof ctx[propName] ? (...args) => { - if (propName.startsWith("create")) { - const instanceId = randomId(); - callMethod(ctxInstance, [ propName ], args, 2, instanceId); - if ("createImageData" === propName || "createPattern" === propName) { - (api => { - console.warn(`${api} not implemented`); - })(`${propName}()`); - return { - setTransform: () => {} - }; - } - return new WorkerCanvasGradient(winId, instanceId); - } - const methodCallType = ctx2dGetterMethods.includes(propName) ? 1 : 2; - return callMethod(ctxInstance, [ propName ], args, methodCallType); - } : ctx[propName] : target[propName], - set(target, propName, value) { - if ("string" == typeof propName && propName in ctx) { - ctx[propName] !== value && "function" != typeof value && setter(ctxInstance, [ propName ], value); - ctx[propName] = value; - } else { - target[propName] = value; - } - return true; - } - }; - return new Proxy(ctx, CanvasRenderingContext2D); - }; - const createContextWebGL = (canvasInstance, contextType, contextAttributes) => { - const winId = canvasInstance[WinIdKey]; - const ctxInstanceId = randomId(); - const ctxInstance = { - [WinIdKey]: winId, - [InstanceIdKey]: ctxInstanceId, - [ApplyPathKey]: [] - }; - const ctx = callMethod(canvasInstance, [ "getContext" ], [ contextType, contextAttributes ], 1, ctxInstanceId); - const WebGLRenderingContextHandler = { - get: (target, propName) => "string" == typeof propName ? "function" != typeof ctx[propName] ? ctx[propName] : (...args) => callMethod(ctxInstance, [ propName ], args, getWebGlMethodCallType(propName)) : target[propName], - set(target, propName, value) { - if ("string" == typeof propName && propName in ctx) { - ctx[propName] !== value && "function" != typeof value && setter(ctxInstance, [ propName ], value); - ctx[propName] = value; - } else { - target[propName] = value; - } - return true; - } - }; - return new Proxy(ctx, WebGLRenderingContextHandler); - }; - const ctxWebGLGetterMethods = "checkFramebufferStatus,makeXRCompatible".split(","); - const getWebGlMethodCallType = methodName => methodName.startsWith("create") || methodName.startsWith("get") || methodName.startsWith("is") || ctxWebGLGetterMethods.includes(methodName) ? 1 : 2; - defineCstr(win, "CanvasGradient", WorkerCanvasGradient); - defineCstr(win, "CanvasPattern", WorkerCanvasPattern); - definePrototypePropertyDescriptor(win.HTMLCanvasElement, HTMLCanvasDescriptorMap); - }; - const initMedia = (WorkerBase, WorkerEventTargetProxy, env, win) => { - var _a, _b; - win.Audio = defineCstrName("HTMLAudioElement", class { - constructor(src) { - const audio = env.$createNode$("audio", randomId()); - audio.src = src; - return audio; - } - }); - const WorkerAudioTrack = class extends WorkerBase { - get enabled() { - return getter(this, [ "enabled" ]); - } - set enabled(value) { - setter(this, [ "enabled" ], value); - } - get id() { - return getter(this, [ "id" ]); - } - get kind() { - return getter(this, [ "kind" ]); - } - get label() { - return getter(this, [ "label" ]); - } - get language() { - return getter(this, [ "language" ]); - } - get sourceBuffer() { - return new WorkerSourceBuffer(this); - } - }; - const WorkerAudioTrackList = class { - constructor(mediaElm) { - const winId = mediaElm[WinIdKey]; - const instanceId = mediaElm[InstanceIdKey]; - const instance = { - addEventListener(...args) { - callMethod(mediaElm, [ "audioTracks", "addEventListener" ], args, 3); - }, - getTrackById: (...args) => callMethod(mediaElm, [ "audioTracks", "getTrackById" ], args), - get length() { - return getter(mediaElm, [ "audioTracks", "length" ]); - }, - removeEventListener(...args) { - callMethod(mediaElm, [ "audioTracks", "removeEventListener" ], args, 3); - } - }; - return new Proxy(instance, { - get: (target, propName) => "number" == typeof propName ? new WorkerAudioTrack(winId, instanceId, [ "audioTracks", propName ]) : target[propName] - }); - } - }; - const WorkerSourceBufferList = defineCstr(win, "SourceBufferList", class extends Array { - constructor(mediaSource) { - super(); - this[MediaSourceKey] = mediaSource; - } - addEventListener(...args) { - callMethod(this[MediaSourceKey], [ "sourceBuffers", "addEventListener" ], args, 3); - } - removeEventListener(...args) { - callMethod(this[MediaSourceKey], [ "sourceBuffers", "removeEventListener" ], args, 3); - } - }); - const WorkerSourceBuffer = defineCstr(win, "SourceBuffer", (_b = class extends WorkerEventTargetProxy { - constructor(mediaSource) { - super(mediaSource[WinIdKey], mediaSource[InstanceIdKey], [ "sourceBuffers" ]); - this[_a] = []; - this[MediaSourceKey] = mediaSource; - } - abort() { - const sbIndex = getSourceBufferIndex(this); - callMethod(this, [ sbIndex, "appendWindowStart" ], EMPTY_ARRAY, 1); - } - addEventListener(...args) { - const sbIndex = getSourceBufferIndex(this); - callMethod(this, [ sbIndex, "addEventListener" ], args, 3); - } - appendBuffer(buf) { - this[SourceBufferTasksKey].push([ "appendBuffer", [ buf ], buf ]); - drainSourceBufferQueue(this); - } - get appendWindowStart() { - const sbIndex = getSourceBufferIndex(this); - return getter(this, [ sbIndex, "appendWindowStart" ]); - } - set appendWindowStart(value) { - const sbIndex = getSourceBufferIndex(this); - setter(this, [ sbIndex, "appendWindowStart" ], value); - } - get appendWindowEnd() { - const sbIndex = getSourceBufferIndex(this); - return getter(this, [ sbIndex, "appendWindowEnd" ]); - } - set appendWindowEnd(value) { - const sbIndex = getSourceBufferIndex(this); - setter(this, [ sbIndex, "appendWindowEnd" ], value); - } - get buffered() { - const mediaSource = this[MediaSourceKey]; - const sbIndex = getSourceBufferIndex(this); - const timeRanges = new WorkerTimeRanges(mediaSource[WinIdKey], mediaSource[InstanceIdKey], [ "sourceBuffers", sbIndex, "buffered" ]); - return timeRanges; - } - changeType(mimeType) { - const sbIndex = getSourceBufferIndex(this); - callMethod(this, [ sbIndex, "changeType" ], [ mimeType ], 2); - } - get mode() { - const sbIndex = getSourceBufferIndex(this); - return getter(this, [ sbIndex, "mode" ]); - } - set mode(value) { - const sbIndex = getSourceBufferIndex(this); - setter(this, [ sbIndex, "mode" ], value); - } - remove(start, end) { - this[SourceBufferTasksKey].push([ "remove", [ start, end ] ]); - drainSourceBufferQueue(this); - } - removeEventListener(...args) { - const sbIndex = getSourceBufferIndex(this); - callMethod(this, [ sbIndex, "removeEventListener" ], args, 3); - } - get timestampOffset() { - const sbIndex = getSourceBufferIndex(this); - return getter(this, [ sbIndex, "timestampOffset" ]); - } - set timestampOffset(value) { - const sbIndex = getSourceBufferIndex(this); - setter(this, [ sbIndex, "timestampOffset" ], value); - } - get updating() { - const sbIndex = getSourceBufferIndex(this); - return getter(this, [ sbIndex, "updating" ]); - } - }, _a = SourceBufferTasksKey, _b)); - const WorkerTimeRanges = defineCstr(win, "TimeRanges", class extends WorkerBase { - start(...args) { - return callMethod(this, [ "start" ], args); - } - end(...args) { - return callMethod(this, [ "end" ], args); - } - get length() { - return getter(this, [ "length" ]); - } - }); - const getSourceBufferIndex = sourceBuffer => { - if (sourceBuffer) { - const mediaSource = sourceBuffer[MediaSourceKey]; - const sourceBufferList = mediaSource[SourceBuffersKey]; - return sourceBufferList.indexOf(sourceBuffer); - } - return -1; - }; - const drainSourceBufferQueue = sourceBuffer => { - if (sourceBuffer[SourceBufferTasksKey].length) { - if (!sourceBuffer.updating) { - const task = sourceBuffer[SourceBufferTasksKey].shift(); - if (task) { - const sbIndex = getSourceBufferIndex(sourceBuffer); - callMethod(sourceBuffer, [ sbIndex, task[0] ], task[1], 3, void 0, task[2]); - } - } - setTimeout((() => drainSourceBufferQueue(sourceBuffer)), 50); - } - }; - const HTMLMediaDescriptorMap = { - buffered: { - get() { - if (!this[TimeRangesKey]) { - this[TimeRangesKey] = new WorkerTimeRanges(this[WinIdKey], this[InstanceIdKey], [ "buffered" ]); - setTimeout((() => { - this[TimeRangesKey] = void 0; - }), 5e3); - } - return this[TimeRangesKey]; - } - }, - readyState: { - get() { - if (4 === this[ReadyStateKey]) { - return 4; - } - if ("number" != typeof this[ReadyStateKey]) { - this[ReadyStateKey] = getter(this, [ "readyState" ]); - setTimeout((() => { - this[ReadyStateKey] = void 0; - }), 1e3); - } - return this[ReadyStateKey]; - } - } - }; - defineCstr(win, "MediaSource", class extends WorkerEventTargetProxy { - constructor() { - super(env.$winId$); - this[SourceBuffersKey] = new WorkerSourceBufferList(this); - constructGlobal(this, "MediaSource", EMPTY_ARRAY); - } - get activeSourceBuffers() { - return []; - } - addSourceBuffer(mimeType) { - const sourceBuffer = new WorkerSourceBuffer(this); - this[SourceBuffersKey].push(sourceBuffer); - callMethod(this, [ "addSourceBuffer" ], [ mimeType ]); - return sourceBuffer; - } - clearLiveSeekableRange() { - callMethod(this, [ "clearLiveSeekableRange" ], EMPTY_ARRAY, 2); - } - get duration() { - return getter(this, [ "duration" ]); - } - set duration(value) { - setter(this, [ "duration" ], value); - } - endOfStream(endOfStreamError) { - callMethod(this, [ "endOfStream" ], [ endOfStreamError ], 3); - } - get readyState() { - return getter(this, [ "readyState" ]); - } - removeSourceBuffer(sourceBuffer) { - const index = getSourceBufferIndex(sourceBuffer); - if (index > -1) { - this[SourceBuffersKey].splice(index, 1); - callMethod(this, [ "removeSourceBuffer" ], [ index ], 1); - } - } - setLiveSeekableRange(start, end) { - callMethod(this, [ "setLiveSeekableRange" ], [ start, end ], 2); - } - get sourceBuffers() { - return this[SourceBuffersKey]; - } - static isTypeSupported(mimeType) { - if (!isStaticTypeSupported.has(mimeType)) { - const isSupported = callMethod(win, [ "MediaSource", "isTypeSupported" ], [ mimeType ]); - isStaticTypeSupported.set(mimeType, isSupported); - } - return isStaticTypeSupported.get(mimeType); - } - }); - const winURL = win.URL = defineCstrName("URL", class extends URL {}); - const hasAudioTracks = "audioTracks" in win.HTMLMediaElement.prototype; - if (hasAudioTracks) { - defineCstr(win, "AudioTrackList", WorkerAudioTrackList); - defineCstr(win, "AudioTrack", WorkerAudioTrack); - HTMLMediaDescriptorMap.audioTracks = { - get() { - return new WorkerAudioTrackList(this); - } - }; - } - definePrototypePropertyDescriptor(win.HTMLMediaElement, HTMLMediaDescriptorMap); - winURL.createObjectURL = obj => callMethod(win, [ "URL", "createObjectURL" ], [ obj ]); - winURL.revokeObjectURL = obj => callMethod(win, [ "URL", "revokeObjectURL" ], [ obj ]); - }; - const isStaticTypeSupported = new Map; - self.$bridgeFromMedia$ = (WorkerBase, WorkerEventTargetProxy, env, win, windowMediaConstructors) => { - windowMediaConstructors.map((mediaCstrName => { - delete win[mediaCstrName]; - })); - initCanvas(WorkerBase, win); - initMedia(WorkerBase, WorkerEventTargetProxy, env, win); - }; -})(self); diff --git a/static/~partytown/debug/partytown-sandbox-sw.js b/static/~partytown/debug/partytown-sandbox-sw.js deleted file mode 100644 index 44b9657..0000000 --- a/static/~partytown/debug/partytown-sandbox-sw.js +++ /dev/null @@ -1,559 +0,0 @@ -/* Partytown 0.8.0 - MIT builder.io */ -(window => { - const isPromise = v => "object" == typeof v && v && v.then; - const noop = () => {}; - const len = obj => obj.length; - const getConstructorName = obj => { - var _a, _b, _c; - try { - const constructorName = null === (_a = null == obj ? void 0 : obj.constructor) || void 0 === _a ? void 0 : _a.name; - if (constructorName) { - return constructorName; - } - } catch (e) {} - try { - const zoneJsConstructorName = null === (_c = null === (_b = null == obj ? void 0 : obj.__zone_symbol__originalInstance) || void 0 === _b ? void 0 : _b.constructor) || void 0 === _c ? void 0 : _c.name; - if (zoneJsConstructorName) { - return zoneJsConstructorName; - } - } catch (e) {} - return ""; - }; - const startsWith = (str, val) => str.startsWith(val); - const isValidMemberName = memberName => !(startsWith(memberName, "webkit") || startsWith(memberName, "toJSON") || startsWith(memberName, "constructor") || startsWith(memberName, "toString") || startsWith(memberName, "_")); - const getNodeName = node => 11 === node.nodeType && node.host ? "#s" : node.nodeName; - const randomId = () => Math.round(Math.random() * Number.MAX_SAFE_INTEGER).toString(36); - const defineConstructorName = (Cstr, value) => ((obj, memberName, descriptor) => Object.defineProperty(obj, memberName, { - ...descriptor, - configurable: true - }))(Cstr, "name", { - value: value - }); - const htmlConstructorTags = { - Anchor: "a", - DList: "dl", - Image: "img", - OList: "ol", - Paragraph: "p", - Quote: "q", - TableCaption: "caption", - TableCell: "td", - TableCol: "colgroup", - TableRow: "tr", - TableSection: "tbody", - UList: "ul" - }; - const svgConstructorTags = { - Graphics: "g", - SVG: "svg" - }; - const InstanceIdKey = Symbol(); - const CreatedKey = Symbol(); - const instances = new Map; - const mainRefs = new Map; - const winCtxs = {}; - const windowIds = new WeakMap; - const getAndSetInstanceId = (instance, instanceId) => { - if (instance) { - if (instanceId = windowIds.get(instance)) { - return instanceId; - } - (instanceId = instance[InstanceIdKey]) || setInstanceId(instance, instanceId = randomId()); - return instanceId; - } - }; - const getInstance = (winId, instanceId, win, doc, docId) => { - if ((win = winCtxs[winId]) && win.$window$) { - if (winId === instanceId) { - return win.$window$; - } - doc = win.$window$.document; - docId = instanceId.split(".").pop(); - if ("d" === docId) { - return doc; - } - if ("e" === docId) { - return doc.documentElement; - } - if ("h" === docId) { - return doc.head; - } - if ("b" === docId) { - return doc.body; - } - } - return instances.get(instanceId); - }; - const setInstanceId = (instance, instanceId, now) => { - if (instance) { - instances.set(instanceId, instance); - instance[InstanceIdKey] = instanceId; - instance[CreatedKey] = now = Date.now(); - if (now > lastCleanup + 5e3) { - instances.forEach(((storedInstance, instanceId) => { - storedInstance[CreatedKey] < lastCleanup && storedInstance.nodeType && !storedInstance.isConnected && instances.delete(instanceId); - })); - lastCleanup = now; - } - } - }; - let lastCleanup = 0; - const mainWindow = window.parent; - const docImpl = document.implementation.createHTMLDocument(); - const config = mainWindow.partytown || {}; - const libPath = (config.lib || "/~partytown/") + "debug/"; - const logMain = msg => { - console.debug.apply(console, [ "%cMain 🌎", "background: #717171; color: white; padding: 2px 3px; border-radius: 2px; font-size: 0.8em;", msg ]); - }; - const winIds = []; - const normalizedWinId = winId => { - winIds.includes(winId) || winIds.push(winId); - return winIds.indexOf(winId) + 1; - }; - const defineCustomElement = (winId, worker, ceData) => { - const Cstr = defineConstructorName(class extends winCtxs[winId].$window$.HTMLElement {}, ceData[0]); - const ceCallbackMethods = "connectedCallback,disconnectedCallback,attributeChangedCallback,adoptedCallback".split(","); - ceCallbackMethods.map((callbackMethodName => Cstr.prototype[callbackMethodName] = function(...args) { - worker.postMessage([ 15, winId, getAndSetInstanceId(this), callbackMethodName, args ]); - })); - Cstr.observedAttributes = ceData[1]; - return Cstr; - }; - const serializeForWorker = ($winId$, value, added, type, cstrName, prevInstanceId) => void 0 !== value && (type = typeof value) ? "string" === type || "number" === type || "boolean" === type || null == value ? [ 0, value ] : "function" === type ? [ 6 ] : (added = added || new Set) && Array.isArray(value) ? added.has(value) ? [ 1, [] ] : added.add(value) && [ 1, value.map((v => serializeForWorker($winId$, v, added))) ] : "object" === type ? serializedValueIsError(value) ? [ 14, { - name: value.name, - message: value.message, - stack: value.stack - } ] : "" === (cstrName = getConstructorName(value)) ? [ 2, {} ] : "Window" === cstrName ? [ 3, [ $winId$, $winId$ ] ] : "HTMLCollection" === cstrName || "NodeList" === cstrName ? [ 7, Array.from(value).map((v => serializeForWorker($winId$, v, added)[1])) ] : cstrName.endsWith("Event") ? [ 5, serializeObjectForWorker($winId$, value, added) ] : "CSSRuleList" === cstrName ? [ 12, Array.from(value).map(serializeCssRuleForWorker) ] : startsWith(cstrName, "CSS") && cstrName.endsWith("Rule") ? [ 11, serializeCssRuleForWorker(value) ] : "CSSStyleDeclaration" === cstrName ? [ 13, serializeObjectForWorker($winId$, value, added) ] : "Attr" === cstrName ? [ 10, [ value.name, value.value ] ] : value.nodeType ? [ 3, [ $winId$, getAndSetInstanceId(value), getNodeName(value), prevInstanceId ] ] : [ 2, serializeObjectForWorker($winId$, value, added, true, true) ] : void 0 : value; - const serializeObjectForWorker = (winId, obj, added, includeFunctions, includeEmptyStrings, serializedObj, propName, propValue) => { - serializedObj = {}; - if (!added.has(obj)) { - added.add(obj); - for (propName in obj) { - if (isValidMemberName(propName)) { - propValue = "path" === propName && getConstructorName(obj).endsWith("Event") ? obj.composedPath() : obj[propName]; - (includeFunctions || "function" != typeof propValue) && (includeEmptyStrings || "" !== propValue) && (serializedObj[propName] = serializeForWorker(winId, propValue, added)); - } - } - } - return serializedObj; - }; - const serializeCssRuleForWorker = cssRule => { - let obj = {}; - let key; - for (key in cssRule) { - validCssRuleProps.includes(key) && (obj[key] = String(cssRule[key])); - } - return obj; - }; - const serializedValueIsError = value => value instanceof window.top.Error; - const deserializeFromWorker = (worker, serializedTransfer, serializedType, serializedValue) => { - if (serializedTransfer) { - serializedType = serializedTransfer[0]; - serializedValue = serializedTransfer[1]; - return 0 === serializedType ? serializedValue : 4 === serializedType ? deserializeRefFromWorker(worker, serializedValue) : 1 === serializedType ? serializedValue.map((v => deserializeFromWorker(worker, v))) : 3 === serializedType ? getInstance(serializedValue[0], serializedValue[1]) : 5 === serializedType ? constructEvent(deserializeObjectFromWorker(worker, serializedValue)) : 2 === serializedType ? deserializeObjectFromWorker(worker, serializedValue) : 8 === serializedType ? serializedValue : 9 === serializedType ? new window[serializedTransfer[2]](serializedValue) : void 0; - } - }; - const deserializeRefFromWorker = (worker, {$winId$: $winId$, $instanceId$: $instanceId$, $refId$: $refId$}, ref) => { - ref = mainRefs.get($refId$); - if (!ref) { - ref = function(...args) { - worker.postMessage([ 9, { - $winId$: $winId$, - $instanceId$: $instanceId$, - $refId$: $refId$, - $thisArg$: serializeForWorker($winId$, this), - $args$: serializeForWorker($winId$, args) - } ]); - }; - mainRefs.set($refId$, ref); - } - return ref; - }; - const constructEvent = eventProps => new ("detail" in eventProps ? CustomEvent : Event)(eventProps.type, eventProps); - const deserializeObjectFromWorker = (worker, serializedValue, obj, key) => { - obj = {}; - for (key in serializedValue) { - obj[key] = deserializeFromWorker(worker, serializedValue[key]); - } - return obj; - }; - const validCssRuleProps = "cssText,selectorText,href,media,namespaceURI,prefix,name,conditionText".split(","); - const mainAccessHandler = async (worker, accessReq) => { - let accessRsp = { - $msgId$: accessReq.$msgId$ - }; - let totalTasks = len(accessReq.$tasks$); - let i = 0; - let task; - let winId; - let applyPath; - let instance; - let rtnValue; - let isLast; - for (;i < totalTasks; i++) { - try { - isLast = i === totalTasks - 1; - task = accessReq.$tasks$[i]; - winId = task.$winId$; - applyPath = task.$applyPath$; - !winCtxs[winId] && winId.startsWith("f_") && await new Promise((resolve => { - let check = 0; - let callback = () => { - winCtxs[winId] || check++ > 1e3 ? resolve() : requestAnimationFrame(callback); - }; - callback(); - })); - if (1 === applyPath[0] && applyPath[1] in winCtxs[winId].$window$) { - setInstanceId(new winCtxs[winId].$window$[applyPath[1]](...deserializeFromWorker(worker, applyPath[2])), task.$instanceId$); - } else { - instance = getInstance(winId, task.$instanceId$); - if (instance) { - rtnValue = applyToInstance(worker, winId, instance, applyPath, isLast, task.$groupedGetters$); - task.$assignInstanceId$ && ("string" == typeof task.$assignInstanceId$ ? setInstanceId(rtnValue, task.$assignInstanceId$) : winCtxs[task.$assignInstanceId$.$winId$] = { - $winId$: task.$assignInstanceId$.$winId$, - $window$: { - document: rtnValue - } - }); - if (isPromise(rtnValue)) { - rtnValue = await rtnValue; - isLast && (accessRsp.$isPromise$ = true); - } - isLast && (accessRsp.$rtnValue$ = serializeForWorker(winId, rtnValue, void 0, void 0, void 0, task.$instanceId$)); - } else { - accessRsp.$error$ = `Error finding instance "${task.$instanceId$}" on window ${normalizedWinId(winId)}`; - console.error(accessRsp.$error$, task); - } - } - } catch (e) { - isLast ? accessRsp.$error$ = String(e.stack || e) : console.error(e); - } - } - return accessRsp; - }; - const applyToInstance = (worker, winId, instance, applyPath, isLast, groupedGetters) => { - let i = 0; - let l = len(applyPath); - let next; - let current; - let previous; - let args; - let groupedRtnValues; - for (;i < l; i++) { - current = applyPath[i]; - next = applyPath[i + 1]; - previous = applyPath[i - 1]; - try { - if (!Array.isArray(next)) { - if ("string" == typeof current || "number" == typeof current) { - if (i + 1 === l && groupedGetters) { - groupedRtnValues = {}; - groupedGetters.map((propName => groupedRtnValues[propName] = instance[propName])); - return groupedRtnValues; - } - instance = instance[current]; - } else { - if (0 === next) { - instance[previous] = deserializeFromWorker(worker, current); - return; - } - if ("function" == typeof instance[previous]) { - args = deserializeFromWorker(worker, current); - "define" === previous && "CustomElementRegistry" === getConstructorName(instance) && (args[1] = defineCustomElement(winId, worker, args[1])); - "insertRule" === previous && args[1] > len(instance.cssRules) && (args[1] = len(instance.cssRules)); - instance = instance[previous].apply(instance, args); - if ("play" === previous) { - return Promise.resolve(); - } - } - } - } - } catch (err) { - if (isLast) { - throw err; - } - console.debug("Non-blocking setter error:", err); - } - } - return instance; - }; - const readNextScript = (worker, winCtx) => { - let $winId$ = winCtx.$winId$; - let win = winCtx.$window$; - let doc = win.document; - let scriptSelector = 'script[type="text/partytown"]:not([data-ptid]):not([data-pterror])'; - let scriptElm; - let $instanceId$; - let scriptData; - if (doc && doc.body) { - scriptElm = doc.querySelector('script[type="text/partytown"]:not([data-ptid]):not([data-pterror]):not([async]):not([defer])'); - scriptElm || (scriptElm = doc.querySelector(scriptSelector)); - if (scriptElm) { - scriptElm.dataset.ptid = $instanceId$ = getAndSetInstanceId(scriptElm, $winId$); - scriptData = { - $winId$: $winId$, - $instanceId$: $instanceId$ - }; - if (scriptElm.src) { - scriptData.$url$ = scriptElm.src; - scriptData.$orgUrl$ = scriptElm.dataset.ptsrc || scriptElm.src; - } else { - scriptData.$content$ = scriptElm.innerHTML; - } - worker.postMessage([ 7, scriptData ]); - } else { - if (!winCtx.$isInitialized$) { - winCtx.$isInitialized$ = 1; - ((worker, $winId$, win) => { - let queuedForwardCalls = win._ptf; - let forwards = (win.partytown || {}).forward || []; - let i; - let mainForwardFn; - let forwardCall = ($forward$, args) => worker.postMessage([ 10, { - $winId$: $winId$, - $forward$: $forward$, - $args$: serializeForWorker($winId$, Array.from(args)) - } ]); - win._ptf = void 0; - forwards.map((forwardProps => { - mainForwardFn = win; - forwardProps.split(".").map(((_, i, arr) => { - mainForwardFn = mainForwardFn[arr[i]] = i + 1 < len(arr) ? mainForwardFn[arr[i]] || ("push" === arr[i + 1] ? [] : {}) : (...args) => forwardCall(arr, args); - })); - })); - if (queuedForwardCalls) { - for (i = 0; i < len(queuedForwardCalls); i += 2) { - forwardCall(queuedForwardCalls[i], queuedForwardCalls[i + 1]); - } - } - })(worker, $winId$, win); - doc.dispatchEvent(new CustomEvent("pt0")); - { - const winType = win === win.top ? "top" : "iframe"; - logMain(`Executed ${winType} window ${normalizedWinId($winId$)} environment scripts in ${(performance.now() - winCtx.$startTime$).toFixed(1)}ms`); - } - } - worker.postMessage([ 8, $winId$ ]); - } - } else { - requestAnimationFrame((() => readNextScript(worker, winCtx))); - } - }; - const registerWindow = (worker, $winId$, $window$) => { - if (!windowIds.has($window$)) { - windowIds.set($window$, $winId$); - const doc = $window$.document; - const history = $window$.history; - const $parentWinId$ = windowIds.get($window$.parent); - let initialised = false; - const onInitialisedQueue = []; - const onInitialised = callback => { - initialised ? callback() : onInitialisedQueue.push(callback); - }; - const sendInitEnvData = () => { - worker.postMessage([ 5, { - $winId$: $winId$, - $parentWinId$: $parentWinId$, - $url$: doc.baseURI, - $visibilityState$: doc.visibilityState - } ]); - setTimeout((() => { - initialised = true; - onInitialisedQueue.forEach((callback => { - callback(); - })); - })); - }; - const pushState = history.pushState.bind(history); - const replaceState = history.replaceState.bind(history); - const onLocationChange = (type, state, newUrl, oldUrl) => () => { - setTimeout((() => { - worker.postMessage([ 13, { - $winId$: $winId$, - type: type, - state: state, - url: doc.baseURI, - newUrl: newUrl, - oldUrl: oldUrl - } ]); - })); - }; - history.pushState = (state, _, newUrl) => { - pushState(state, _, newUrl); - onInitialised(onLocationChange(0, state, null == newUrl ? void 0 : newUrl.toString())); - }; - history.replaceState = (state, _, newUrl) => { - replaceState(state, _, newUrl); - onInitialised(onLocationChange(1, state, null == newUrl ? void 0 : newUrl.toString())); - }; - $window$.addEventListener("popstate", (event => { - onInitialised(onLocationChange(2, event.state)); - })); - $window$.addEventListener("hashchange", (event => { - onInitialised(onLocationChange(3, {}, event.newURL, event.oldURL)); - })); - $window$.addEventListener("ptupdate", (() => { - readNextScript(worker, winCtxs[$winId$]); - })); - doc.addEventListener("visibilitychange", (() => worker.postMessage([ 14, $winId$, doc.visibilityState ]))); - winCtxs[$winId$] = { - $winId$: $winId$, - $window$: $window$ - }; - winCtxs[$winId$].$startTime$ = performance.now(); - { - const winType = $winId$ === $parentWinId$ ? "top" : "iframe"; - logMain(`Registered ${winType} window ${normalizedWinId($winId$)}`); - } - "complete" === doc.readyState ? sendInitEnvData() : $window$.addEventListener("load", sendInitEnvData); - } - }; - const onMessageFromWebWorker = (worker, msg, winCtx) => { - if (4 === msg[0]) { - registerWindow(worker, randomId(), mainWindow); - } else { - winCtx = winCtxs[msg[1]]; - winCtx && (7 === msg[0] ? requestAnimationFrame((() => readNextScript(worker, winCtx))) : 6 === msg[0] && ((worker, winCtx, instanceId, errorMsg, scriptElm) => { - scriptElm = winCtx.$window$.document.querySelector(`[data-ptid="${instanceId}"]`); - if (scriptElm) { - errorMsg ? scriptElm.dataset.pterror = errorMsg : scriptElm.type += "-x"; - delete scriptElm.dataset.ptid; - } - readNextScript(worker, winCtx); - })(worker, winCtx, msg[2], msg[3])); - } - }; - const readMainPlatform = () => { - const elm = docImpl.createElement("i"); - const textNode = docImpl.createTextNode(""); - const comment = docImpl.createComment(""); - const frag = docImpl.createDocumentFragment(); - const shadowRoot = docImpl.createElement("p").attachShadow({ - mode: "open" - }); - const intersectionObserver = getGlobalConstructor(mainWindow, "IntersectionObserver"); - const mutationObserver = getGlobalConstructor(mainWindow, "MutationObserver"); - const resizeObserver = getGlobalConstructor(mainWindow, "ResizeObserver"); - const perf = mainWindow.performance; - const screen = mainWindow.screen; - const impls = [ [ mainWindow.history ], [ perf ], [ perf.navigation ], [ perf.timing ], [ screen ], [ screen.orientation ], [ mainWindow.visualViewport ], [ intersectionObserver, 12 ], [ mutationObserver, 12 ], [ resizeObserver, 12 ], [ textNode ], [ comment ], [ frag ], [ shadowRoot ], [ elm ], [ elm.attributes ], [ elm.classList ], [ elm.dataset ], [ elm.style ], [ docImpl ], [ docImpl.doctype ] ]; - const initialInterfaces = [ readImplementation("Window", mainWindow), readImplementation("Node", textNode) ]; - const $config$ = JSON.stringify(config, ((k, v) => { - if ("function" == typeof v) { - v = String(v); - v.startsWith(k + "(") && (v = "function " + v); - } - return v; - })); - const initWebWorkerData = { - $config$: $config$, - $interfaces$: readImplementations(impls, initialInterfaces), - $libPath$: new URL(libPath, mainWindow.location) + "", - $origin$: origin, - $localStorage$: readStorage("localStorage"), - $sessionStorage$: readStorage("sessionStorage") - }; - addGlobalConstructorUsingPrototype(initWebWorkerData.$interfaces$, mainWindow, "IntersectionObserverEntry"); - return initWebWorkerData; - }; - const readMainInterfaces = () => { - const elms = Object.getOwnPropertyNames(mainWindow).map((interfaceName => ((doc, interfaceName, r, tag) => { - r = interfaceName.match(/^(HTML|SVG)(.+)Element$/); - if (r) { - tag = r[2]; - return "S" == interfaceName[0] ? doc.createElementNS("http://www.w3.org/2000/svg", svgConstructorTags[tag] || tag.slice(0, 2).toLowerCase() + tag.slice(2)) : doc.createElement(htmlConstructorTags[tag] || tag); - } - })(docImpl, interfaceName))).filter((elm => elm)).map((elm => [ elm ])); - return readImplementations(elms, []); - }; - const cstrs = new Set([ "Object" ]); - const readImplementations = (impls, interfaces) => { - const cstrImpls = impls.filter((implData => implData[0])).map((implData => { - const impl = implData[0]; - const interfaceType = implData[1]; - const cstrName = getConstructorName(impl); - const CstrPrototype = mainWindow[cstrName].prototype; - return [ cstrName, CstrPrototype, impl, interfaceType ]; - })); - cstrImpls.map((([cstrName, CstrPrototype, impl, intefaceType]) => readOwnImplementation(cstrs, interfaces, cstrName, CstrPrototype, impl, intefaceType))); - return interfaces; - }; - const readImplementation = (cstrName, impl, memberName) => { - let interfaceMembers = []; - let interfaceInfo = [ cstrName, "Object", interfaceMembers ]; - for (memberName in impl) { - readImplementationMember(interfaceMembers, impl, memberName); - } - return interfaceInfo; - }; - const readOwnImplementation = (cstrs, interfaces, cstrName, CstrPrototype, impl, interfaceType) => { - if (!cstrs.has(cstrName)) { - cstrs.add(cstrName); - const SuperCstr = Object.getPrototypeOf(CstrPrototype); - const superCstrName = getConstructorName(SuperCstr); - const interfaceMembers = []; - const propDescriptors = Object.getOwnPropertyDescriptors(CstrPrototype); - readOwnImplementation(cstrs, interfaces, superCstrName, SuperCstr, impl, interfaceType); - for (const memberName in propDescriptors) { - readImplementationMember(interfaceMembers, impl, memberName); - } - interfaces.push([ cstrName, superCstrName, interfaceMembers, interfaceType, getNodeName(impl) ]); - } - }; - const readImplementationMember = (interfaceMembers, implementation, memberName, value, memberType, cstrName) => { - try { - if (isValidMemberName(memberName) && isNaN(memberName[0]) && "all" !== memberName) { - value = implementation[memberName]; - memberType = typeof value; - if ("function" === memberType) { - (String(value).includes("[native") || Object.getPrototypeOf(implementation)[memberName]) && interfaceMembers.push([ memberName, 5 ]); - } else if ("object" === memberType && null != value) { - cstrName = getConstructorName(value); - "Object" !== cstrName && self[cstrName] && interfaceMembers.push([ memberName, value.nodeType || cstrName ]); - } else { - "symbol" !== memberType && (memberName.toUpperCase() === memberName ? interfaceMembers.push([ memberName, 6, value ]) : interfaceMembers.push([ memberName, 6 ])); - } - } - } catch (e) { - console.warn(e); - } - }; - const readStorage = storageName => { - let items = []; - let i = 0; - let l = len(mainWindow[storageName]); - let key; - for (;i < l; i++) { - key = mainWindow[storageName].key(i); - items.push([ key, mainWindow[storageName].getItem(key) ]); - } - return items; - }; - const getGlobalConstructor = (mainWindow, cstrName) => void 0 !== mainWindow[cstrName] ? new mainWindow[cstrName](noop) : 0; - const addGlobalConstructorUsingPrototype = ($interfaces$, mainWindow, cstrName) => { - void 0 !== mainWindow[cstrName] && $interfaces$.push([ cstrName, "Object", Object.keys(mainWindow[cstrName].prototype).map((propName => [ propName, 6 ])), 12 ]); - }; - let worker; - (receiveMessage => { - const swContainer = window.navigator.serviceWorker; - return swContainer.getRegistration().then((swRegistration => { - swContainer.addEventListener("message", (ev => receiveMessage(ev.data, (accessRsp => swRegistration.active && swRegistration.active.postMessage(accessRsp))))); - return (worker, msg) => { - 0 === msg[0] ? worker.postMessage([ 1, readMainPlatform() ]) : 2 === msg[0] ? worker.postMessage([ 3, readMainInterfaces() ]) : onMessageFromWebWorker(worker, msg); - }; - })); - })(((accessReq, responseCallback) => mainAccessHandler(worker, accessReq).then(responseCallback))).then((onMessageHandler => { - if (onMessageHandler) { - worker = new Worker(libPath + "partytown-ww-sw.js?v=0.8.0", { - name: "Partytown 🎉" - }); - worker.onmessage = ev => { - const msg = ev.data; - 12 === msg[0] ? mainAccessHandler(worker, msg[1]) : onMessageHandler(worker, msg); - }; - logMain("Created Partytown web worker (0.8.0)"); - worker.onerror = ev => console.error("Web Worker Error", ev); - mainWindow.addEventListener("pt1", (ev => registerWindow(worker, getAndSetInstanceId(ev.detail.frameElement), ev.detail))); - } - })); -})(window); diff --git a/static/~partytown/debug/partytown-sw.js b/static/~partytown/debug/partytown-sw.js deleted file mode 100644 index 38101ad..0000000 --- a/static/~partytown/debug/partytown-sw.js +++ /dev/null @@ -1,59 +0,0 @@ -/* Partytown 0.8.0 - MIT builder.io */ -const resolves = new Map; - -const swMessageError = (accessReq, $error$) => ({ - $msgId$: accessReq.$msgId$, - $error$: $error$ -}); - -const httpRequestFromWebWorker = req => new Promise((async resolve => { - const accessReq = await req.clone().json(); - const responseData = await (accessReq => new Promise((async resolve => { - const clients = await self.clients.matchAll(); - const client = [ ...clients ].sort(((a, b) => a.url > b.url ? -1 : a.url < b.url ? 1 : 0))[0]; - if (client) { - const timeout = 12e4; - const msgResolve = [ resolve, setTimeout((() => { - resolves.delete(accessReq.$msgId$); - resolve(swMessageError(accessReq, "Timeout")); - }), timeout) ]; - resolves.set(accessReq.$msgId$, msgResolve); - client.postMessage(accessReq); - } else { - resolve(swMessageError(accessReq, "NoParty")); - } - })))(accessReq); - resolve(response(JSON.stringify(responseData), "application/json")); -})); - -const response = (body, contentType) => new Response(body, { - headers: { - "content-type": contentType || "text/html", - "Cache-Control": "no-store" - } -}); - -self.oninstall = () => self.skipWaiting(); - -self.onactivate = () => self.clients.claim(); - -self.onmessage = ev => { - const accessRsp = ev.data; - const r = resolves.get(accessRsp.$msgId$); - if (r) { - resolves.delete(accessRsp.$msgId$); - clearTimeout(r[1]); - r[0](accessRsp); - } -}; - -self.onfetch = ev => { - const req = ev.request; - const url = new URL(req.url); - const pathname = url.pathname; - if (pathname.endsWith("sw.html")) { - ev.respondWith(response('