├── src ├── routes │ ├── url │ │ └── +page.svelte │ ├── Header.svelte │ ├── +layout.svelte │ ├── +page.ts │ ├── about │ │ ├── +page.ts │ │ └── +page.svelte │ ├── api │ │ ├── kv │ │ │ ├── +server.ts │ │ │ └── kv.json │ │ └── triggerCron │ │ │ └── +server.ts │ ├── tailwind.css │ └── +page.svelte ├── lib │ ├── images │ │ ├── svelte-welcome.png │ │ ├── svelte-welcome.webp │ │ ├── github.svg │ │ └── svelte-logo.svg │ ├── components │ │ ├── MonitorDayAverage.svelte │ │ ├── MonitorStatusLabel.svelte │ │ ├── MonitorStatusHeader.svelte │ │ ├── MonitorFilter.svelte │ │ ├── MonitorCard.svelte │ │ ├── ThemeSwitcher.svelte │ │ ├── MonitorHistogram.svelte │ │ └── locations.js │ └── functions │ │ ├── helpers.ts │ │ └── cronTrigger.ts ├── app.html ├── index.test.ts ├── index.ts ├── config.json └── app.d.ts ├── .npmrc ├── static ├── favicon.png ├── robots.txt └── logo-192x192.png ├── postcss.config.js ├── .gitignore ├── .editorconfig ├── .eslintignore ├── .prettierignore ├── tailwind.config.js ├── tests └── test.ts ├── vite.config.ts ├── .prettierrc ├── wrangler.toml ├── playwright.config.ts ├── tsconfig.json ├── .eslintrc.cjs ├── svelte.config.js ├── README.md ├── package.json ├── cli └── gcMonitors.js └── pnpm-lock.yaml /src/routes/url/+page.svelte: -------------------------------------------------------------------------------- 1 |
keep this.
2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | resolution-mode=highest 3 | -------------------------------------------------------------------------------- /src/routes/Header.svelte: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kxxoling/cf-status-page/HEAD/static/favicon.png -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /static/logo-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kxxoling/cf-status-page/HEAD/static/logo-192x192.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {} 5 | } 6 | }; 7 | -------------------------------------------------------------------------------- /src/lib/images/svelte-welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kxxoling/cf-status-page/HEAD/src/lib/images/svelte-welcome.png -------------------------------------------------------------------------------- /src/lib/images/svelte-welcome.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kxxoling/cf-status-page/HEAD/src/lib/images/svelte-welcome.webp -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | .vercel 10 | .output 11 | vite.config.js.timestamp-* 12 | vite.config.ts.timestamp-* 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | indent_style = space 7 | indent_size = 2 8 | trim_trailing_whitespace = true 9 | 10 | [*.md] 11 | indent_size = 2 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | 3 | export default { 4 | content: ['./src/**/*.{html,js,svelte,ts}'], 5 | theme: { 6 | extend: {} 7 | }, 8 | darkMode: 'class', 9 | plugins: [] 10 | }; 11 | -------------------------------------------------------------------------------- /tests/test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from '@playwright/test'; 2 | 3 | test('about page has expected h1', async ({ page }) => { 4 | await page.goto('/about'); 5 | await expect(page.getByRole('heading', { name: 'About this app' })).toBeVisible(); 6 | }); 7 | -------------------------------------------------------------------------------- /src/routes/+page.ts: -------------------------------------------------------------------------------- 1 | export const prerender = true; 2 | 3 | export async function load(event) { 4 | const _kvMonitors = await event.fetch('/api/kv').then((r) => r.json()); 5 | const kvMonitors = _kvMonitors as App.MonitorsState; 6 | return { kvMonitors }; 7 | } 8 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vitest/config'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()], 6 | test: { 7 | include: ['src/**/*.{test,spec}.{js,ts}'] 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": false, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "pluginSearchDirs": ["."], 8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 9 | } 10 | -------------------------------------------------------------------------------- /src/lib/components/MonitorDayAverage.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 |
9 | 10 | {locations[location] || location}: {avg}ms 11 | 12 | -------------------------------------------------------------------------------- /wrangler.toml: -------------------------------------------------------------------------------- 1 | name = "cf-svelte-ts" 2 | account_id = "" 3 | workers_dev = true 4 | main = "./.svelte-kit/cloudflare/" 5 | compatibility_date = "2023-04-19" 6 | compatibility_flags = [ "nodejs_compat" ] 7 | 8 | [triggers] 9 | crons = ["*/30 * * * *"] 10 | 11 | [site] 12 | bucket = ".svelte-kit/output/" 13 | -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- 1 | import type { PlaywrightTestConfig } from '@playwright/test'; 2 | 3 | const config: PlaywrightTestConfig = { 4 | webServer: { 5 | command: 'npm run build && npm run preview', 6 | port: 4173 7 | }, 8 | testDir: 'tests', 9 | testMatch: /(.+\.)?(test|spec)\.[jt]s/ 10 | }; 11 | 12 | export default config; 13 | -------------------------------------------------------------------------------- /src/routes/about/+page.ts: -------------------------------------------------------------------------------- 1 | import { dev } from '$app/environment'; 2 | 3 | // we don't need any JS on this page, though we'll load 4 | // it in dev so that we get hot module replacement 5 | export const csr = dev; 6 | 7 | // since there's no dynamic data here, we can prerender 8 | // it so that it gets served as a static asset in production 9 | export const prerender = true; 10 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/routes/api/kv/+server.ts: -------------------------------------------------------------------------------- 1 | import { getKVMonitors } from '$lib/functions/helpers.js'; 2 | import kvJSON from './kv.json'; 3 | 4 | export async function GET({ request, platform }) { 5 | if (platform?.env) { 6 | try { 7 | const kvMonitors = await getKVMonitors(platform.env); 8 | return new Response(JSON.stringify(kvMonitors)); 9 | } catch (err) { 10 | return new Response(err?.message || err?.stack || JSON.stringify(err)); 11 | } 12 | } 13 | 14 | return new Response(JSON.stringify(kvJSON)); 15 | } 16 | -------------------------------------------------------------------------------- /src/routes/api/triggerCron/+server.ts: -------------------------------------------------------------------------------- 1 | import { processCronTrigger } from '$lib/functions/cronTrigger'; 2 | 3 | export async function POST({ platform }) { 4 | if (platform?.env) { 5 | try { 6 | const checkDay = await processCronTrigger(platform.env); 7 | return new Response(`triggered event OK: ${checkDay}`); 8 | } catch (err: unknown) { 9 | console.error(err); 10 | return new Response(err?.message || err?.stack || JSON.stringify(err)); 11 | } 12 | } 13 | 14 | return new Response('no platform.env'); 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true, 12 | "types": ["@cloudflare/workers-types"] 13 | } 14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 15 | // 16 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 17 | // from the referenced tsconfig.json - TypeScript does not merge them in 18 | } 19 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:svelte/recommended', 7 | 'prettier' 8 | ], 9 | parser: '@typescript-eslint/parser', 10 | plugins: ['@typescript-eslint'], 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2020, 14 | extraFileExtensions: ['.svelte'] 15 | }, 16 | env: { 17 | browser: true, 18 | es2017: true, 19 | node: true 20 | }, 21 | overrides: [ 22 | { 23 | files: ['*.svelte'], 24 | parser: 'svelte-eslint-parser', 25 | parserOptions: { 26 | parser: '@typescript-eslint/parser' 27 | } 28 | } 29 | ] 30 | }; 31 | -------------------------------------------------------------------------------- /src/routes/about/+page.svelte: -------------------------------------------------------------------------------- 1 | 2 | About 3 | 4 | 5 | 6 |
7 |

About this app

8 | 9 |

10 | This is a SvelteKit app. You can make your own by typing the 11 | following into your command line and following the prompts: 12 |

13 | 14 |
npm create svelte@latest
15 | 16 |

17 | The page you're looking at is purely static HTML, with no client-side interactivity needed. 18 | Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening 19 | the devtools network panel and reloading. 20 |

21 |
22 | -------------------------------------------------------------------------------- /src/index.test.ts: -------------------------------------------------------------------------------- 1 | import { afterAll, beforeAll, describe, expect, it } from 'vitest'; 2 | import type { UnstableDevWorker } from 'wrangler'; 3 | import { unstable_dev } from 'wrangler'; 4 | 5 | describe('Worker', () => { 6 | let worker: UnstableDevWorker; 7 | 8 | beforeAll(async () => { 9 | worker = await unstable_dev('src/index.ts', { 10 | experimental: { disableExperimentalWarning: true } 11 | }); 12 | }); 13 | 14 | afterAll(async () => { 15 | await worker.stop(); 16 | }); 17 | 18 | it('should return Hello World', async () => { 19 | const resp = await worker.fetch(); 20 | if (resp) { 21 | const text = await resp.text(); 22 | expect(text).toMatchInlineSnapshot(`"Hello World!"`); 23 | } 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-cloudflare'; 2 | import { vitePreprocess } from '@sveltejs/kit/vite'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter() 15 | } 16 | }; 17 | 18 | export default config; 19 | -------------------------------------------------------------------------------- /src/lib/components/MonitorStatusLabel.svelte: -------------------------------------------------------------------------------- 1 | 23 | 24 |
25 | {text} 26 |
27 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Welcome to Cloudflare Workers! This is your first scheduled worker. 3 | * 4 | * - Run `wrangler dev --local` in your terminal to start a development server 5 | * - Run `curl "http://localhost:8787/cdn-cgi/mf/scheduled"` to trigger the scheduled event 6 | * - Go back to the console to see what your worker has logged 7 | * - Update the Cron trigger in wrangler.toml (see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers) 8 | * - Run `wrangler publish --name my-worker` to publish your worker 9 | * 10 | * Learn more at https://developers.cloudflare.com/workers/runtime-apis/scheduled-event/ 11 | */ 12 | import { processCronTrigger } from '$lib/functions/cronTrigger'; 13 | 14 | export default { 15 | async scheduled( 16 | controller: ScheduledController, 17 | env: App.Platform['env'], 18 | ctx: ExecutionContext 19 | ): Promise { 20 | await processCronTrigger(env); 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cf-status-page 2 | 3 | This is project rewrote from [eidam/cf-workers-status-page](https://github.com/eidam/cf-workers-status-page) with [SvelteKit](https://kit.svelte.dev/), TypeScript, TailwindCSS and Cloudflare stuffs. 4 | 5 | ## Deploy 6 | 7 | Fork your own and add a Cloudflare integration, then edit the `config.json` as your need. Deployment will be triggered automatically after new commits pushed to `main` branch. 8 | 9 | Better ways will be available if I have enough time. 10 | 11 | ## Developing 12 | 13 | Once you've created a project and installed dependencies with `pnpm install`, start a development server: 14 | 15 | ```bash 16 | pnpm run dev 17 | 18 | # or start the server and open the app in a new browser tab 19 | pnpm run dev -- --open 20 | 21 | # run linter 22 | pnpm run lint 23 | 24 | # format 25 | pnpm run format 26 | ``` 27 | 28 | ## TODOs 29 | 30 | - [ ] YAML/TOML configure file. (Or better configuration) 31 | - [ ] Custom deployment with Docker. 32 | - [ ] Other edge computing services like Vercel? 33 | - [ ] Notifications 34 | - [ ] Telegram 35 | - [ ] Slack 36 | - [ ] Discord 37 | - [ ] tests 38 | - [ ] Better TS coverage. 39 | - [ ] Wrangler CLI support. 40 | - [ ] Search and filter. 41 | - [ ] Actions 42 | - [ ] PR 43 | - [ ] Update deps 44 | - [ ] hooks: Husky 45 | -------------------------------------------------------------------------------- /src/lib/components/MonitorStatusHeader.svelte: -------------------------------------------------------------------------------- 1 | 21 | 22 |
23 |
24 |
{text}
25 | 26 | {#if kvMonitorsLastUpdate.time} 27 |
28 | checked 29 | {Math.round((Date.now() - kvMonitorsLastUpdate.time) / 1000)} sec ago (from 30 | {locations[kvMonitorsLastUpdate.loc] || kvMonitorsLastUpdate.loc}) 31 |
32 | {/if} 33 | 34 |
35 |
36 | -------------------------------------------------------------------------------- /src/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "settings": { 3 | "title": "Status Page", 4 | "url": "", 5 | "logo": "logo-192x192.png", 6 | "daysInHistogram": 90, 7 | "collectResponseTimes": true, 8 | "allMonitorsOperational": "All Systems Operational", 9 | "notAllMonitorsOperational": "Not All Systems Operational", 10 | "monitorLabelOperational": "Operational", 11 | "monitorLabelNotOperational": "Not Operational", 12 | "monitorLabelNoData": "No data", 13 | "dayInHistogramNoData": "No data", 14 | "dayInHistogramOperational": "All good", 15 | "dayInHistogramNotOperational": " incident(s)" 16 | }, 17 | "monitors": [ 18 | { 19 | "id": "workers-cloudflare-com", 20 | "name": "workers.cloudflare.com", 21 | "description": "You write code. They handle the rest.", 22 | "url": "https://workers.cloudflare.com/", 23 | "method": "GET", 24 | "expectStatus": 200, 25 | "followRedirect": false, 26 | "linkable": false 27 | }, 28 | { 29 | "id": "www-cloudflare-com", 30 | "name": "www.cloudflare.com", 31 | "description": "Built for anything connected to the Internet.", 32 | "url": "https://www.cloudflare.com", 33 | "method": "GET", 34 | "expectStatus": 200, 35 | "linkable": true 36 | }, 37 | { 38 | "id": "blog-cloudflare-com", 39 | "name": "The Cloudflare Blog", 40 | "url": "https://blog.cloudflare.com/", 41 | "method": "GET", 42 | "expectStatus": 200 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /src/lib/components/MonitorFilter.svelte: -------------------------------------------------------------------------------- 1 | 20 | 21 |
22 | 31 |
32 | 38 | 39 | 44 | 45 |
46 |
47 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cf-status-page", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "dev": "vite dev", 6 | "build": "vite build", 7 | "preview": "vite preview", 8 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 9 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 10 | "test": "playwright test", 11 | "test:unit": "vitest", 12 | "lint": "prettier --plugin-search-dir . --check . && eslint .", 13 | "format": "prettier --plugin-search-dir . --write ." 14 | }, 15 | "devDependencies": { 16 | "@cloudflare/workers-types": "^4.20230419.0", 17 | "@fontsource/fira-mono": "^4.5.10", 18 | "@neoconfetti/svelte": "^1.0.0", 19 | "@playwright/test": "^1.28.1", 20 | "@sveltejs/adapter-auto": "^2.0.0", 21 | "@sveltejs/adapter-cloudflare": "^2.2.2", 22 | "@sveltejs/kit": "^1.5.0", 23 | "@types/cookie": "^0.5.1", 24 | "@typescript-eslint/eslint-plugin": "^5.45.0", 25 | "@typescript-eslint/parser": "^5.45.0", 26 | "autoprefixer": "^10.4.14", 27 | "eslint": "^8.28.0", 28 | "eslint-config-prettier": "^8.5.0", 29 | "eslint-plugin-svelte": "^2.26.0", 30 | "node-fetch": "^3.3.1", 31 | "postcss": "^8.4.23", 32 | "prettier": "^2.8.0", 33 | "prettier-plugin-svelte": "^2.8.1", 34 | "svelte": "^3.54.0", 35 | "svelte-check": "^3.0.1", 36 | "tailwindcss": "^3.3.2", 37 | "tslib": "^2.4.1", 38 | "typescript": "^5.0.0", 39 | "vite": "^4.3.0", 40 | "vitest": "^0.25.8", 41 | "wrangler": "2.19.0" 42 | }, 43 | "type": "module" 44 | } 45 | -------------------------------------------------------------------------------- /src/routes/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | body { 7 | @apply bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-50; 8 | } 9 | 10 | a { 11 | @apply text-blue-500 dark:text-blue-400; 12 | } 13 | } 14 | 15 | @layer components { 16 | .card { 17 | @apply p-4 bg-white border border-gray-200 dark:bg-gray-700 dark:border-gray-600 shadow rounded-lg mb-2; 18 | } 19 | 20 | .pill { 21 | @apply px-2 py-1 inline-flex text-xs leading-5 font-semibold rounded-full; 22 | } 23 | 24 | .histogram { 25 | @apply h-6 w-full mx-auto; 26 | } 27 | .hitbox { 28 | align-items: flex-end; 29 | box-sizing: border-box; 30 | height: 100%; 31 | width: 100%; 32 | padding: 1px; 33 | border-radius: 3.75px; 34 | } 35 | .bar { 36 | @apply bg-gray-300 dark:bg-gray-600; 37 | padding-bottom: 1px; 38 | height: 100%; 39 | width: 85%; 40 | border-radius: 100px; 41 | } 42 | 43 | .bar.green { 44 | @apply bg-green-400 dark:bg-green-700; 45 | } 46 | 47 | .bar.red { 48 | @apply bg-red-400 dark:bg-red-700; 49 | } 50 | 51 | .bar.yellow { 52 | @apply bg-yellow-400 dark:bg-yellow-700; 53 | } 54 | 55 | .tooltip { 56 | @apply relative; 57 | } 58 | 59 | .tooltip .content { 60 | @apply invisible absolute z-50 inline-block; 61 | @apply rounded-lg py-1 px-2 bg-gray-100 dark:bg-gray-800 shadow; 62 | @apply opacity-0 transition-all duration-200 scale-50; 63 | } 64 | 65 | .tooltip:hover .content { 66 | @apply visible opacity-100 scale-100; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/lib/images/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 16 | -------------------------------------------------------------------------------- /src/lib/images/svelte-logo.svg: -------------------------------------------------------------------------------- 1 | svelte-logo -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | 10 | interface Platform { 11 | env: { 12 | KV_STATUS_PAGE: KVNamespace; 13 | SECRET_TELEGRAM_CHAT_ID?: string; 14 | SECRET_TELEGRAM_API_TOKEN?: string; 15 | }; 16 | context: { 17 | waitUntil(promise: Promise): void; 18 | }; 19 | caches: CacheStore & { 20 | default: Cache; 21 | }; 22 | } 23 | 24 | interface MonitorConfig { 25 | id: string; 26 | name: string; 27 | url: string; 28 | method: string; 29 | expectStatus: number; 30 | description?: string; 31 | followRedirects?: boolean; 32 | linkable?: boolean; 33 | } 34 | 35 | interface Config { 36 | settings: { 37 | [key: string]: unknown; 38 | }; 39 | monitors: MonitorConfig[]; 40 | } 41 | 42 | interface Monitor { 43 | firstCheck: string; 44 | lastCheck: { 45 | status: number; 46 | statusText: string; 47 | operational: boolean; 48 | }; 49 | checks: { 50 | [key: string]: { 51 | fails: number; 52 | res: { 53 | [key: string]: { 54 | n: number; 55 | ms: number; 56 | a: number; 57 | }; 58 | }; 59 | }; 60 | }; 61 | } 62 | 63 | interface MonitorsState extends JSON { 64 | lastUpdate: { 65 | allOperational: boolean; 66 | time: number; 67 | loc: string; 68 | }; 69 | monitors: { 70 | [key: string]: Monitor; 71 | }; 72 | } 73 | } 74 | } 75 | 76 | export {}; 77 | -------------------------------------------------------------------------------- /src/lib/components/MonitorCard.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 |
11 |
12 |
13 | {#if monitor.description} 14 |
15 | 21 | 26 | 27 |
30 | {monitor.description} 31 |
32 |
33 | {/if} 34 | 35 | {#if monitor.linkable === true || monitor.linkable === undefined} 36 | 37 |
{monitor.name}
38 |
39 | {:else} 40 | 41 |
{monitor.name}
42 |
43 | {/if} 44 |
45 | 46 | 47 |
48 | 49 | 50 | 51 |
52 |
{config.settings.daysInHistogram} days ago
53 |
Today
54 |
55 |
56 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | Status Page 25 | 26 | 27 | 28 |
29 |
30 |
31 |
32 | Logo 33 |

{config.settings.title}

34 |
35 |
36 | 37 | 38 |
39 |
40 | 41 | 42 | {#each MonitorStore.visible as monitor} 43 | 44 | {/each} 45 | 46 |
47 |
48 | Powered by 49 | 50 | Cloudflare Workers 51 | 52 |
53 | 56 |
57 |
58 |
59 | -------------------------------------------------------------------------------- /src/lib/components/ThemeSwitcher.svelte: -------------------------------------------------------------------------------- 1 | 30 | 31 | 67 | -------------------------------------------------------------------------------- /src/lib/components/MonitorHistogram.svelte: -------------------------------------------------------------------------------- 1 | 30 | 31 |
32 | {#each Array.from(Array(config.settings.daysInHistogram).keys()) as daysBefore} 33 |
34 |
35 |
36 | {styleByDih(daysBefore)['dayInHistogram']} 37 |
38 | 39 | {styleByDih(daysBefore)['label']} 40 | 41 | 42 | {#if kvMonitor && kvMonitor.checks.hasOwnProperty(styleByDih(daysBefore)['dayInHistogram'])} 43 | {#each Object.keys(kvMonitor.checks[styleByDih(daysBefore)['dayInHistogram']].res) as key} 44 | 48 | {/each} 49 | {/if} 50 |
51 |
52 | {/each} 53 |
54 | -------------------------------------------------------------------------------- /src/routes/api/kv/kv.json: -------------------------------------------------------------------------------- 1 | { 2 | "lastUpdate": { 3 | "allOperational": true, 4 | "time": 1683625335194, 5 | "loc": "NRT" 6 | }, 7 | "monitors": { 8 | "workers-cloudflare-com": { 9 | "firstCheck": "2023-05-08", 10 | "lastCheck": { 11 | "status": 200, 12 | "statusText": "OK", 13 | "operational": true 14 | }, 15 | "checks": { 16 | "2023-05-08": { 17 | "fails": 0, 18 | "res": { 19 | "HKG": { 20 | "n": 1, 21 | "ms": 1059, 22 | "a": 1059 23 | } 24 | } 25 | }, 26 | "2023-05-09": { 27 | "fails": 0, 28 | "res": { 29 | "NRT": { 30 | "n": 5, 31 | "ms": 1902, 32 | "a": 380 33 | } 34 | } 35 | } 36 | } 37 | }, 38 | "www-cloudflare-com": { 39 | "firstCheck": "2023-05-08", 40 | "lastCheck": { 41 | "status": 200, 42 | "statusText": "OK", 43 | "operational": true 44 | }, 45 | "checks": { 46 | "2023-05-08": { 47 | "fails": 0, 48 | "res": { 49 | "HKG": { 50 | "n": 1, 51 | "ms": 33, 52 | "a": 33 53 | } 54 | } 55 | }, 56 | "2023-05-09": { 57 | "fails": 0, 58 | "res": { 59 | "NRT": { 60 | "n": 5, 61 | "ms": 153, 62 | "a": 31 63 | } 64 | } 65 | } 66 | } 67 | }, 68 | "blog-cloudflare-com": { 69 | "firstCheck": "2023-05-08", 70 | "lastCheck": { 71 | "status": 200, 72 | "statusText": "OK", 73 | "operational": true 74 | }, 75 | "checks": { 76 | "2023-05-08": { 77 | "fails": 0, 78 | "res": { 79 | "HKG": { 80 | "n": 1, 81 | "ms": 31, 82 | "a": 31 83 | } 84 | } 85 | }, 86 | "2023-05-09": { 87 | "fails": 0, 88 | "res": { 89 | "NRT": { 90 | "n": 5, 91 | "ms": 132, 92 | "a": 26 93 | } 94 | } 95 | } 96 | } 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /cli/gcMonitors.js: -------------------------------------------------------------------------------- 1 | // copied from https://github.com/eidam/cf-workers-status-page/blob/main/src/cli/gcMonitors.js 2 | // import fetch from 'node-fetch'; 3 | import config from '../src/config.json' assert { type: 'json' }; 4 | 5 | const accountId = process.env.CF_ACCOUNT_ID; 6 | const namespaceId = process.env.KV_NAMESPACE_ID; 7 | const apiToken = process.env.CF_API_TOKEN; 8 | 9 | const kvMonitorsKey = 'monitors_data_v1_1'; 10 | 11 | if (!accountId || !namespaceId || !apiToken) { 12 | console.error( 13 | 'Missing required environment variables: CF_ACCOUNT_ID, KV_NAMESPACE_ID, CF_API_TOKEN' 14 | ); 15 | process.exit(0); 16 | } 17 | 18 | async function getKvMonitors(kvMonitorsKey) { 19 | const init = { 20 | headers: { 21 | 'Content-Type': 'application/json', 22 | Authorization: `Bearer ${apiToken}` 23 | } 24 | }; 25 | 26 | const res = await fetch( 27 | `https://api.cloudflare.com/client/v4/accounts/${accountId}/storage/kv/namespaces/${namespaceId}/values/${kvMonitorsKey}`, 28 | init 29 | ); 30 | const json = await res.json(); 31 | return json; 32 | } 33 | 34 | async function saveKVMonitors(kvMonitorsKey, data) { 35 | const init = { 36 | method: 'PUT', 37 | headers: { 38 | 'Content-Type': 'application/json', 39 | Authorization: `Bearer ${apiToken}` 40 | }, 41 | body: JSON.stringify(data) 42 | }; 43 | 44 | const res = await fetch( 45 | `https://api.cloudflare.com/client/v4/accounts/${accountId}/storage/kv/namespaces/${namespaceId}/values/${kvMonitorsKey}`, 46 | init 47 | ); 48 | 49 | return res; 50 | } 51 | 52 | getKvMonitors(kvMonitorsKey) 53 | .then(async (kvMonitors) => { 54 | let stateMonitors = kvMonitors; 55 | 56 | const configMonitors = config.monitors.map((key) => { 57 | return key.id; 58 | }); 59 | 60 | Object.keys(stateMonitors.monitors).map((monitor) => { 61 | // remove monitor data from state if missing in config 62 | if (!configMonitors.includes(monitor)) { 63 | delete stateMonitors.monitors[monitor]; 64 | } 65 | 66 | // delete dates older than config.settings.daysInHistogram 67 | let date = new Date(); 68 | date.setDate(date.getDate() - config.settings.daysInHistogram); 69 | date.toISOString().split('T')[0]; 70 | const cleanUpDate = date.toISOString().split('T')[0]; 71 | 72 | Object.keys(stateMonitors.monitors[monitor].checks).map((checkDay) => { 73 | if (checkDay < cleanUpDate) { 74 | delete stateMonitors.monitors[monitor].checks[checkDay]; 75 | } 76 | }); 77 | }); 78 | 79 | // sanity check + if good save the KV 80 | if (configMonitors.length === Object.keys(stateMonitors.monitors).length) { 81 | await saveKVMonitors(kvMonitorsKey, stateMonitors); 82 | } 83 | }) 84 | .catch((e) => console.log(e)); 85 | -------------------------------------------------------------------------------- /src/lib/functions/helpers.ts: -------------------------------------------------------------------------------- 1 | // import fetch from 'node-fetch' 2 | import config from '../../config.json'; 3 | 4 | const kvDataKey = 'monitors_data_v1_1'; 5 | 6 | type ENV = App.Platform['env']; 7 | 8 | export async function getKVMonitors(env: ENV): Promise { 9 | // trying both to see performance difference 10 | return await env.KV_STATUS_PAGE.get(kvDataKey, 'json'); 11 | //return JSON.parse(await KV_STATUS_PAGE.get(kvDataKey, 'text')) 12 | } 13 | 14 | export async function setKVMonitors(env: ENV, data: JSON) { 15 | return setKV(env, kvDataKey, JSON.stringify(data), undefined, undefined); 16 | } 17 | 18 | const getOperationalLabel = (operational: boolean) => { 19 | return operational 20 | ? config.settings.monitorLabelOperational 21 | : config.settings.monitorLabelNotOperational; 22 | }; 23 | 24 | async function setKV( 25 | env: ENV, 26 | key: string, 27 | value: string | ArrayBuffer | ArrayBufferView | ReadableStream, 28 | metadata: KVNamespacePutOptions['metadata'], 29 | expirationTtl?: number 30 | ) { 31 | return env.KV_STATUS_PAGE.put(key, value, { metadata, expirationTtl }); 32 | } 33 | 34 | // export async function notifySlack(monitor, operational) { 35 | // const payload = { 36 | // attachments: [ 37 | // { 38 | // fallback: `Monitor ${monitor.name} changed status to ${getOperationalLabel(operational)}`, 39 | // color: operational ? '#36a64f' : '#f2c744', 40 | // blocks: [ 41 | // { 42 | // type: 'section', 43 | // text: { 44 | // type: 'mrkdwn', 45 | // text: `Monitor *${ 46 | // monitor.name 47 | // }* changed status to *${getOperationalLabel(operational)}*`, 48 | // }, 49 | // }, 50 | // { 51 | // type: 'context', 52 | // elements: [ 53 | // { 54 | // type: 'mrkdwn', 55 | // text: `${operational ? ':white_check_mark:' : ':x:'} \`${ 56 | // monitor.method ? monitor.method : 'GET' 57 | // } ${monitor.url}\` - :eyes: <${ 58 | // config.settings.url 59 | // }|Status Page>`, 60 | // }, 61 | // ], 62 | // }, 63 | // ], 64 | // }, 65 | // ], 66 | // } 67 | // return fetch(SECRET_SLACK_WEBHOOK_URL, { 68 | // body: JSON.stringify(payload), 69 | // method: 'POST', 70 | // headers: { 'Content-Type': 'application/json' }, 71 | // }) 72 | // } 73 | 74 | export async function notifyTelegram(env: ENV, monitor: App.MonitorConfig, operational: boolean) { 75 | if (!env.SECRET_TELEGRAM_CHAT_ID) { 76 | console.error('SECRET_TELEGRAM_CHAT_ID is not set'); 77 | return; 78 | } 79 | const text = `Monitor *${monitor.name.replaceAll( 80 | '-', 81 | '\\-' 82 | )}* changed status to *${getOperationalLabel(operational)}* 83 | ${operational ? '✅' : '❌'} \`${monitor.method ? monitor.method : 'GET'} ${ 84 | monitor.url 85 | }\` \\- 👀 [Status Page](${config.settings.url})`; 86 | 87 | const payload = new FormData(); 88 | payload.append('chat_id', env.SECRET_TELEGRAM_CHAT_ID); 89 | payload.append('parse_mode', 'MarkdownV2'); 90 | payload.append('text', text); 91 | 92 | const telegramUrl = `https://api.telegram.org/bot${SECRET_TELEGRAM_API_TOKEN}/sendMessage`; 93 | return fetch(telegramUrl, { 94 | body: payload, 95 | method: 'POST' 96 | }); 97 | } 98 | 99 | // // Visualize your payload using https://leovoel.github.io/embed-visualizer/ 100 | // export async function notifyDiscord(monitor, operational) { 101 | // const payload = { 102 | // username: `${config.settings.title}`, 103 | // avatar_url: `${config.settings.url}/${config.settings.logo}`, 104 | // embeds: [ 105 | // { 106 | // title: `${monitor.name} is ${getOperationalLabel(operational)} ${ 107 | // operational ? ':white_check_mark:' : ':x:' 108 | // }`, 109 | // description: `\`${monitor.method ? monitor.method : 'GET'} ${ 110 | // monitor.url 111 | // }\` - :eyes: [Status Page](${config.settings.url})`, 112 | // color: operational ? 3581519 : 13632027, 113 | // }, 114 | // ], 115 | // } 116 | // return fetch(SECRET_DISCORD_WEBHOOK_URL, { 117 | // body: JSON.stringify(payload), 118 | // method: 'POST', 119 | // headers: { 'Content-Type': 'application/json' }, 120 | // }) 121 | // } 122 | 123 | export async function getCheckLocation() { 124 | const res = await fetch('https://cloudflare-dns.com/dns-query', { 125 | method: 'OPTIONS' 126 | }); 127 | return res.headers?.get('cf-ray')?.split('-')[1]; 128 | } 129 | -------------------------------------------------------------------------------- /src/lib/components/locations.js: -------------------------------------------------------------------------------- 1 | export const locations = { 2 | ADL: 'Adelaide', 3 | AKL: 'Auckland', 4 | ALG: 'Algiers', 5 | AMM: 'Amman', 6 | AMS: 'Amsterdam', 7 | ARI: 'Arica', 8 | ARN: 'Stockholm', 9 | ASU: 'Asunción', 10 | ATH: 'Athens', 11 | ATL: 'Atlanta', 12 | BAH: 'Manama', 13 | BCN: 'Barcelona', 14 | BEG: 'Belgrade', 15 | BEL: 'Belém', 16 | BEY: 'Beirut', 17 | BGW: 'Baghdad', 18 | BKK: 'Bangkok', 19 | BLR: 'Bangalore', 20 | BNA: 'Nashville', 21 | BNE: 'Brisbane', 22 | BNU: 'Blumenau', 23 | BOG: 'Bogotá', 24 | BOM: 'Mumbai', 25 | BOS: 'Boston', 26 | BRU: 'Brussels', 27 | BSB: 'Brasilia', 28 | BUD: 'Budapest', 29 | BUF: 'Buffalo', 30 | BWN: 'Bandar Seri Begawan', 31 | CAN: 'Guangzhou', 32 | CBR: 'Canberra', 33 | CCU: 'Kolkata', 34 | CDG: 'Paris', 35 | CEB: 'Cebu', 36 | CFC: 'Caçador', 37 | CGK: 'Jakarta', 38 | CGO: 'Zhengzhou', 39 | CGP: 'Chittagong', 40 | CKG: 'Chongqing', 41 | CLT: 'Charlotte', 42 | CMB: 'Colombo', 43 | CMH: 'Columbus', 44 | CMN: 'Casablanca', 45 | CNF: 'Belo Horizonte', 46 | CPH: 'Copenhagen', 47 | CPT: 'Cape Town', 48 | CSX: 'Zhuzhou', 49 | CTU: 'Chengdu', 50 | CUR: 'Willemstad', 51 | CWB: 'Curitiba', 52 | DAC: 'Dhaka', 53 | DAR: 'Dar Es Salaam', 54 | DEL: 'New Delhi', 55 | DEN: 'Denver', 56 | DFW: 'Dallas', 57 | DKR: 'Dakar', 58 | DME: 'Moscow', 59 | DMM: 'Dammam', 60 | DOH: 'Doha', 61 | DTW: 'Detroit', 62 | DUB: 'Dublin', 63 | DUR: 'Durban', 64 | DUS: 'Düsseldorf', 65 | DXB: 'Dubai', 66 | EDI: 'Edinburgh', 67 | EVN: 'Yerevan', 68 | EWR: 'Newark', 69 | EZE: 'Buenos Aires', 70 | FCO: 'Rome', 71 | FLN: 'Florianopolis', 72 | FOR: 'Fortaleza', 73 | FRA: 'Frankfurt', 74 | GIG: 'Rio de Janeiro', 75 | GND: 'St. George’s', 76 | GOT: 'Gothenburg', 77 | GRU: 'São Paulo', 78 | GUA: 'Guatemala City', 79 | GVA: 'Geneva', 80 | GYD: 'Baku', 81 | GYE: 'Guayaquil', 82 | HAM: 'Hamburg', 83 | HAN: 'Hanoi', 84 | HEL: 'Helsinki', 85 | HKG: 'Hong Kong ', 86 | HNL: 'Honolulu', 87 | HRE: 'Harare', 88 | HYD: 'Hyderabad', 89 | IAD: 'Ashburn', 90 | IAH: 'Houston', 91 | ICN: 'Seoul', 92 | IND: 'Indianapolis', 93 | ISB: 'Islamabad', 94 | IST: 'Istanbul', 95 | ITJ: 'Itajaí', 96 | JAX: 'Jacksonville', 97 | JIB: 'Djibouti City', 98 | JNB: 'Johannesburg', 99 | JSR: 'Jashore', 100 | KBP: 'Kyiv', 101 | KEF: 'Reykjavík', 102 | KGL: 'Kigali', 103 | KHI: 'Karachi', 104 | KIV: 'Chișinău', 105 | KIX: 'Osaka', 106 | KJA: 'Krasnoyarsk', 107 | KTM: 'Kathmandu', 108 | KUL: 'Kuala Lumpur', 109 | KWI: 'Kuwait City', 110 | LAD: 'Luanda', 111 | LAS: 'Las Vegas', 112 | LAX: 'Los Angeles', 113 | LCA: 'Nicosia', 114 | LED: 'Saint Petersburg', 115 | LHE: 'Lahore', 116 | LHR: 'London', 117 | LIM: 'Lima', 118 | LIS: 'Lisbon', 119 | LOS: 'Lagos', 120 | LUX: 'Luxembourg City', 121 | MAA: 'Chennai', 122 | MAD: 'Madrid', 123 | MAN: 'Manchester', 124 | MBA: 'Mombasa', 125 | MCI: 'Kansas City', 126 | MCT: 'Muscat', 127 | MDE: 'Medellín', 128 | MEL: 'Melbourne', 129 | MEM: 'Memphis', 130 | MEX: 'Mexico City', 131 | MFE: 'McAllen', 132 | MFM: 'Macau ', 133 | MGM: 'Montgomery', 134 | MIA: 'Miami', 135 | MLE: 'Malé', 136 | MNL: 'Manila', 137 | MPM: 'Maputo', 138 | MRS: 'Marseille', 139 | MRU: 'Port Louis', 140 | MSP: 'Minneapolis', 141 | MUC: 'Munich', 142 | MXP: 'Milan', 143 | NAG: 'Nagpur', 144 | NBG: 'Ningbo', 145 | NBO: 'Nairobi', 146 | NOU: 'Noumea', 147 | NRT: 'Tokyo', 148 | OMA: 'Omaha', 149 | ORD: 'Chicago', 150 | ORF: 'Norfolk', 151 | OSL: 'Oslo', 152 | OTP: 'Bucharest', 153 | PAP: 'Port', 154 | PBH: 'Thimphu', 155 | PBM: 'Paramaribo', 156 | PDX: 'Portland', 157 | PER: 'Perth', 158 | PHL: 'Philadelphia', 159 | PHX: 'Phoenix', 160 | PIT: 'Pittsburgh', 161 | PMO: 'Palermo', 162 | PNH: 'Phnom Penh', 163 | POA: 'Porto Alegre', 164 | PRG: 'Prague', 165 | PTY: 'Panama City', 166 | QRO: 'Queretaro', 167 | QWJ: 'Americana', 168 | RAO: 'Ribeirao Preto', 169 | RGN: 'Yangon', 170 | RIC: 'Richmond', 171 | RIX: 'Riga', 172 | ROB: 'Monrovia', 173 | RUH: 'Riyadh', 174 | RUN: 'Réunion', 175 | SAN: 'San Diego', 176 | SCL: 'Santiago', 177 | SEA: 'Seattle', 178 | SGN: 'Ho Chi Minh City', 179 | SHA: 'Shanghai', 180 | SIN: 'Singapore', 181 | SJC: 'San Jose', 182 | SJO: 'San José', 183 | SJP: 'São José do Rio Preto', 184 | SKG: 'Thessaloniki', 185 | SLC: 'Salt Lake City', 186 | SMF: 'Sacramento', 187 | SOD: 'Sorocaba', 188 | SOF: 'Sofia', 189 | SSA: 'Salvador', 190 | STL: 'St. Louis', 191 | SVX: 'Yekaterinburg', 192 | SYD: 'Sydney', 193 | SZV: 'Suzhou', 194 | TBS: 'Tbilisi', 195 | TGU: 'Tegucigalpa', 196 | TLH: 'Tallahassee', 197 | TLL: 'Tallinn', 198 | TLV: 'Tel Aviv', 199 | TNA: 'Jinan', 200 | TNR: 'Antananarivo', 201 | TPA: 'Tampa', 202 | TPE: 'Taipei ', 203 | TSN: 'Tianjin', 204 | TUN: 'Tunis', 205 | TXL: 'Berlin', 206 | UIO: 'Quito', 207 | ULN: 'Ulaanbaatar', 208 | URT: 'Surat Thani', 209 | VCP: 'Campinas', 210 | VIE: 'Vienna', 211 | VNO: 'Vilnius', 212 | VTE: 'Vientiane', 213 | WAW: 'Warsaw', 214 | WUH: 'Wuhan', 215 | WUX: 'Wuxi', 216 | XIY: 'Xi’an', 217 | YUL: 'Montréal', 218 | YVR: 'Vancouver', 219 | YWG: 'Winnipeg', 220 | YXE: 'Saskatoon', 221 | YYC: 'Calgary', 222 | YYZ: 'Toronto', 223 | ZAG: 'Zagreb', 224 | ZDM: 'Ramallah ', 225 | ZRH: 'Zürich' 226 | }; 227 | -------------------------------------------------------------------------------- /src/lib/functions/cronTrigger.ts: -------------------------------------------------------------------------------- 1 | // import fetch from 'node-fetch' 2 | import config from '../../config.json'; 3 | 4 | import { 5 | getCheckLocation, 6 | getKVMonitors, 7 | // notifyDiscord, 8 | // notifySlack, 9 | notifyTelegram, 10 | setKVMonitors 11 | } from './helpers'; 12 | 13 | function getDate() { 14 | return new Date().toISOString().split('T')[0]; 15 | } 16 | 17 | export async function processCronTrigger(env: App.Platform['env']) { 18 | // Get Worker PoP and save it to monitorsStateMetadata 19 | const checkLocation = await getCheckLocation(); 20 | const checkDay = getDate(); 21 | 22 | // Get monitors state from KV 23 | const _monitorsState = (await getKVMonitors(env)) || { lastUpdate: {}, monitors: {} }; 24 | const monitorsState = _monitorsState as App.MonitorsState; 25 | 26 | // Reset default all monitors state to true 27 | monitorsState.lastUpdate.allOperational = true; 28 | 29 | for (const monitor of config.monitors) { 30 | // Create default monitor state if does not exist yet 31 | if (typeof monitorsState.monitors[monitor.id] === 'undefined') { 32 | monitorsState.monitors[monitor.id] = { 33 | firstCheck: checkDay, 34 | lastCheck: { 35 | status: 0, // fill empty data 36 | statusText: '', 37 | operational: false 38 | }, 39 | checks: {} 40 | }; 41 | } 42 | 43 | console.log(`Checking ${monitor.name} ...`); 44 | 45 | // Fetch the monitors URL 46 | const init: RequestInit = { 47 | method: monitor.method || 'GET', 48 | redirect: monitor.followRedirect ? 'follow' : 'manual', 49 | headers: { 50 | 'User-Agent': config.settings.user_agent || 'cf-worker-status-page' 51 | } 52 | }; 53 | 54 | // Perform a check and measure time 55 | const requestStartTime = Date.now(); 56 | const checkResponse = await fetch(monitor.url, init); 57 | const requestTime = Math.round(Date.now() - requestStartTime); 58 | 59 | // Determine whether operational and status changed 60 | const monitorOperational = checkResponse.status === (monitor.expectStatus || 200); 61 | const monitorStatusChanged = 62 | monitorsState.monitors[monitor.id].lastCheck.operational !== monitorOperational; 63 | 64 | // Save monitor's last check response status 65 | monitorsState.monitors[monitor.id].lastCheck = { 66 | status: checkResponse.status, 67 | statusText: checkResponse.statusText, 68 | operational: monitorOperational 69 | }; 70 | 71 | /* TODO: notify adapters 72 | // Send Slack message on monitor change 73 | if ( 74 | monitorStatusChanged && 75 | typeof SECRET_SLACK_WEBHOOK_URL !== 'undefined' && 76 | SECRET_SLACK_WEBHOOK_URL !== 'default-gh-action-secret' 77 | ) { 78 | event.waitUntil(notifySlack(monitor, monitorOperational)) 79 | } 80 | 81 | // Send Discord message on monitor change 82 | if ( 83 | monitorStatusChanged && 84 | typeof SECRET_DISCORD_WEBHOOK_URL !== 'undefined' && 85 | SECRET_DISCORD_WEBHOOK_URL !== 'default-gh-action-secret' 86 | ) { 87 | event.waitUntil(notifyDiscord(monitor, monitorOperational)) 88 | } 89 | 90 | */ 91 | 92 | // Send Telegram message on monitor change 93 | if (monitorStatusChanged && env.SECRET_TELEGRAM_API_TOKEN && env.SECRET_TELEGRAM_CHAT_ID) { 94 | await notifyTelegram(env, monitor, monitorOperational); 95 | } 96 | 97 | // make sure checkDay exists in checks in cases when needed 98 | if ( 99 | (config.settings.collectResponseTimes || !monitorOperational) && 100 | // FIXME 101 | // eslint-disable-next-line no-prototype-builtins 102 | !monitorsState.monitors[monitor.id].checks.hasOwnProperty(checkDay) 103 | ) { 104 | monitorsState.monitors[monitor.id].checks[checkDay] = { fails: 0, res: {} }; 105 | } 106 | 107 | if (config.settings.collectResponseTimes && monitorOperational) { 108 | // make sure location exists in current checkDay 109 | if ( 110 | // FIXME 111 | // eslint-disable-next-line no-prototype-builtins 112 | !monitorsState.monitors[monitor.id].checks[checkDay].res.hasOwnProperty(checkLocation) 113 | ) { 114 | monitorsState.monitors[monitor.id].checks[checkDay].res[checkLocation] = { 115 | n: 0, 116 | ms: 0, 117 | a: 0 118 | }; 119 | } 120 | 121 | // increment number of checks and sum of ms 122 | const no = ++monitorsState.monitors[monitor.id].checks[checkDay].res[checkLocation].n; 123 | const ms = (monitorsState.monitors[monitor.id].checks[checkDay].res[checkLocation].ms += 124 | requestTime); 125 | 126 | // save new average ms 127 | monitorsState.monitors[monitor.id].checks[checkDay].res[checkLocation].a = Math.round( 128 | ms / no 129 | ); 130 | } else if (!monitorOperational) { 131 | // Save allOperational to false 132 | monitorsState.lastUpdate.allOperational = false; 133 | 134 | // Increment failed checks on status change or first fail of the day (maybe call it .incidents instead?) 135 | if (monitorStatusChanged || monitorsState.monitors[monitor.id].checks[checkDay].fails == 0) { 136 | monitorsState.monitors[monitor.id].checks[checkDay].fails++; 137 | } 138 | } 139 | } 140 | 141 | // Save last update information 142 | monitorsState.lastUpdate.time = Date.now(); 143 | monitorsState.lastUpdate.loc = checkLocation; 144 | 145 | // Save monitorsState to KV storage 146 | await setKVMonitors(env, monitorsState); 147 | 148 | // return new Response('OK') 149 | return checkDay; 150 | } 151 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | devDependencies: 4 | '@cloudflare/workers-types': 5 | specifier: ^4.20230419.0 6 | version: 4.20230419.0 7 | '@fontsource/fira-mono': 8 | specifier: ^4.5.10 9 | version: 4.5.10 10 | '@neoconfetti/svelte': 11 | specifier: ^1.0.0 12 | version: 1.0.0 13 | '@playwright/test': 14 | specifier: ^1.28.1 15 | version: 1.33.0 16 | '@sveltejs/adapter-auto': 17 | specifier: ^2.0.0 18 | version: 2.0.1(@sveltejs/kit@1.16.2) 19 | '@sveltejs/adapter-cloudflare': 20 | specifier: ^2.2.2 21 | version: 2.2.2(@sveltejs/kit@1.16.2) 22 | '@sveltejs/kit': 23 | specifier: ^1.5.0 24 | version: 1.16.2(svelte@3.59.0)(vite@4.3.5) 25 | '@types/cookie': 26 | specifier: ^0.5.1 27 | version: 0.5.1 28 | '@typescript-eslint/eslint-plugin': 29 | specifier: ^5.45.0 30 | version: 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@5.0.4) 31 | '@typescript-eslint/parser': 32 | specifier: ^5.45.0 33 | version: 5.59.2(eslint@8.39.0)(typescript@5.0.4) 34 | autoprefixer: 35 | specifier: ^10.4.14 36 | version: 10.4.14(postcss@8.4.23) 37 | eslint: 38 | specifier: ^8.28.0 39 | version: 8.39.0 40 | eslint-config-prettier: 41 | specifier: ^8.5.0 42 | version: 8.8.0(eslint@8.39.0) 43 | eslint-plugin-svelte: 44 | specifier: ^2.26.0 45 | version: 2.27.3(eslint@8.39.0)(svelte@3.59.0) 46 | node-fetch: 47 | specifier: ^3.3.1 48 | version: 3.3.1 49 | postcss: 50 | specifier: ^8.4.23 51 | version: 8.4.23 52 | prettier: 53 | specifier: ^2.8.0 54 | version: 2.8.8 55 | prettier-plugin-svelte: 56 | specifier: ^2.8.1 57 | version: 2.10.0(prettier@2.8.8)(svelte@3.59.0) 58 | svelte: 59 | specifier: ^3.54.0 60 | version: 3.59.0 61 | svelte-check: 62 | specifier: ^3.0.1 63 | version: 3.3.1(postcss@8.4.23)(svelte@3.59.0) 64 | tailwindcss: 65 | specifier: ^3.3.2 66 | version: 3.3.2 67 | tslib: 68 | specifier: ^2.4.1 69 | version: 2.5.0 70 | typescript: 71 | specifier: ^5.0.0 72 | version: 5.0.4 73 | vite: 74 | specifier: ^4.3.0 75 | version: 4.3.5(@types/node@20.0.0) 76 | vitest: 77 | specifier: ^0.25.8 78 | version: 0.25.8 79 | wrangler: 80 | specifier: 2.19.0 81 | version: 2.19.0 82 | 83 | packages: 84 | 85 | /@alloc/quick-lru@5.2.0: 86 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 87 | engines: {node: '>=10'} 88 | dev: true 89 | 90 | /@cloudflare/kv-asset-handler@0.2.0: 91 | resolution: {integrity: sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==} 92 | dependencies: 93 | mime: 3.0.0 94 | dev: true 95 | 96 | /@cloudflare/workers-types@4.20230419.0: 97 | resolution: {integrity: sha512-MfNBlHrI/ekRkbLtdAo23D4hkXF+3QD92OCwuXxCUK73HtMHuBqkMp9T/8KFbKNRCnz7PzUderc7Jr5m3eeW3g==} 98 | dev: true 99 | 100 | /@esbuild-plugins/node-globals-polyfill@0.1.1(esbuild@0.16.3): 101 | resolution: {integrity: sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==} 102 | peerDependencies: 103 | esbuild: '*' 104 | dependencies: 105 | esbuild: 0.16.3 106 | dev: true 107 | 108 | /@esbuild-plugins/node-modules-polyfill@0.1.4(esbuild@0.16.3): 109 | resolution: {integrity: sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==} 110 | peerDependencies: 111 | esbuild: '*' 112 | dependencies: 113 | esbuild: 0.16.3 114 | escape-string-regexp: 4.0.0 115 | rollup-plugin-node-polyfills: 0.2.1 116 | dev: true 117 | 118 | /@esbuild/android-arm64@0.16.3: 119 | resolution: {integrity: sha512-RolFVeinkeraDvN/OoRf1F/lP0KUfGNb5jxy/vkIMeRRChkrX/HTYN6TYZosRJs3a1+8wqpxAo5PI5hFmxyPRg==} 120 | engines: {node: '>=12'} 121 | cpu: [arm64] 122 | os: [android] 123 | requiresBuild: true 124 | dev: true 125 | optional: true 126 | 127 | /@esbuild/android-arm64@0.17.18: 128 | resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} 129 | engines: {node: '>=12'} 130 | cpu: [arm64] 131 | os: [android] 132 | requiresBuild: true 133 | dev: true 134 | optional: true 135 | 136 | /@esbuild/android-arm@0.16.3: 137 | resolution: {integrity: sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA==} 138 | engines: {node: '>=12'} 139 | cpu: [arm] 140 | os: [android] 141 | requiresBuild: true 142 | dev: true 143 | optional: true 144 | 145 | /@esbuild/android-arm@0.17.18: 146 | resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} 147 | engines: {node: '>=12'} 148 | cpu: [arm] 149 | os: [android] 150 | requiresBuild: true 151 | dev: true 152 | optional: true 153 | 154 | /@esbuild/android-x64@0.16.3: 155 | resolution: {integrity: sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ==} 156 | engines: {node: '>=12'} 157 | cpu: [x64] 158 | os: [android] 159 | requiresBuild: true 160 | dev: true 161 | optional: true 162 | 163 | /@esbuild/android-x64@0.17.18: 164 | resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} 165 | engines: {node: '>=12'} 166 | cpu: [x64] 167 | os: [android] 168 | requiresBuild: true 169 | dev: true 170 | optional: true 171 | 172 | /@esbuild/darwin-arm64@0.16.3: 173 | resolution: {integrity: sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw==} 174 | engines: {node: '>=12'} 175 | cpu: [arm64] 176 | os: [darwin] 177 | requiresBuild: true 178 | dev: true 179 | optional: true 180 | 181 | /@esbuild/darwin-arm64@0.17.18: 182 | resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} 183 | engines: {node: '>=12'} 184 | cpu: [arm64] 185 | os: [darwin] 186 | requiresBuild: true 187 | dev: true 188 | optional: true 189 | 190 | /@esbuild/darwin-x64@0.16.3: 191 | resolution: {integrity: sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ==} 192 | engines: {node: '>=12'} 193 | cpu: [x64] 194 | os: [darwin] 195 | requiresBuild: true 196 | dev: true 197 | optional: true 198 | 199 | /@esbuild/darwin-x64@0.17.18: 200 | resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} 201 | engines: {node: '>=12'} 202 | cpu: [x64] 203 | os: [darwin] 204 | requiresBuild: true 205 | dev: true 206 | optional: true 207 | 208 | /@esbuild/freebsd-arm64@0.16.3: 209 | resolution: {integrity: sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw==} 210 | engines: {node: '>=12'} 211 | cpu: [arm64] 212 | os: [freebsd] 213 | requiresBuild: true 214 | dev: true 215 | optional: true 216 | 217 | /@esbuild/freebsd-arm64@0.17.18: 218 | resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} 219 | engines: {node: '>=12'} 220 | cpu: [arm64] 221 | os: [freebsd] 222 | requiresBuild: true 223 | dev: true 224 | optional: true 225 | 226 | /@esbuild/freebsd-x64@0.16.3: 227 | resolution: {integrity: sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug==} 228 | engines: {node: '>=12'} 229 | cpu: [x64] 230 | os: [freebsd] 231 | requiresBuild: true 232 | dev: true 233 | optional: true 234 | 235 | /@esbuild/freebsd-x64@0.17.18: 236 | resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} 237 | engines: {node: '>=12'} 238 | cpu: [x64] 239 | os: [freebsd] 240 | requiresBuild: true 241 | dev: true 242 | optional: true 243 | 244 | /@esbuild/linux-arm64@0.16.3: 245 | resolution: {integrity: sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ==} 246 | engines: {node: '>=12'} 247 | cpu: [arm64] 248 | os: [linux] 249 | requiresBuild: true 250 | dev: true 251 | optional: true 252 | 253 | /@esbuild/linux-arm64@0.17.18: 254 | resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} 255 | engines: {node: '>=12'} 256 | cpu: [arm64] 257 | os: [linux] 258 | requiresBuild: true 259 | dev: true 260 | optional: true 261 | 262 | /@esbuild/linux-arm@0.16.3: 263 | resolution: {integrity: sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ==} 264 | engines: {node: '>=12'} 265 | cpu: [arm] 266 | os: [linux] 267 | requiresBuild: true 268 | dev: true 269 | optional: true 270 | 271 | /@esbuild/linux-arm@0.17.18: 272 | resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} 273 | engines: {node: '>=12'} 274 | cpu: [arm] 275 | os: [linux] 276 | requiresBuild: true 277 | dev: true 278 | optional: true 279 | 280 | /@esbuild/linux-ia32@0.16.3: 281 | resolution: {integrity: sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA==} 282 | engines: {node: '>=12'} 283 | cpu: [ia32] 284 | os: [linux] 285 | requiresBuild: true 286 | dev: true 287 | optional: true 288 | 289 | /@esbuild/linux-ia32@0.17.18: 290 | resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} 291 | engines: {node: '>=12'} 292 | cpu: [ia32] 293 | os: [linux] 294 | requiresBuild: true 295 | dev: true 296 | optional: true 297 | 298 | /@esbuild/linux-loong64@0.16.3: 299 | resolution: {integrity: sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw==} 300 | engines: {node: '>=12'} 301 | cpu: [loong64] 302 | os: [linux] 303 | requiresBuild: true 304 | dev: true 305 | optional: true 306 | 307 | /@esbuild/linux-loong64@0.17.18: 308 | resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} 309 | engines: {node: '>=12'} 310 | cpu: [loong64] 311 | os: [linux] 312 | requiresBuild: true 313 | dev: true 314 | optional: true 315 | 316 | /@esbuild/linux-mips64el@0.16.3: 317 | resolution: {integrity: sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw==} 318 | engines: {node: '>=12'} 319 | cpu: [mips64el] 320 | os: [linux] 321 | requiresBuild: true 322 | dev: true 323 | optional: true 324 | 325 | /@esbuild/linux-mips64el@0.17.18: 326 | resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} 327 | engines: {node: '>=12'} 328 | cpu: [mips64el] 329 | os: [linux] 330 | requiresBuild: true 331 | dev: true 332 | optional: true 333 | 334 | /@esbuild/linux-ppc64@0.16.3: 335 | resolution: {integrity: sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q==} 336 | engines: {node: '>=12'} 337 | cpu: [ppc64] 338 | os: [linux] 339 | requiresBuild: true 340 | dev: true 341 | optional: true 342 | 343 | /@esbuild/linux-ppc64@0.17.18: 344 | resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} 345 | engines: {node: '>=12'} 346 | cpu: [ppc64] 347 | os: [linux] 348 | requiresBuild: true 349 | dev: true 350 | optional: true 351 | 352 | /@esbuild/linux-riscv64@0.16.3: 353 | resolution: {integrity: sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ==} 354 | engines: {node: '>=12'} 355 | cpu: [riscv64] 356 | os: [linux] 357 | requiresBuild: true 358 | dev: true 359 | optional: true 360 | 361 | /@esbuild/linux-riscv64@0.17.18: 362 | resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} 363 | engines: {node: '>=12'} 364 | cpu: [riscv64] 365 | os: [linux] 366 | requiresBuild: true 367 | dev: true 368 | optional: true 369 | 370 | /@esbuild/linux-s390x@0.16.3: 371 | resolution: {integrity: sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ==} 372 | engines: {node: '>=12'} 373 | cpu: [s390x] 374 | os: [linux] 375 | requiresBuild: true 376 | dev: true 377 | optional: true 378 | 379 | /@esbuild/linux-s390x@0.17.18: 380 | resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} 381 | engines: {node: '>=12'} 382 | cpu: [s390x] 383 | os: [linux] 384 | requiresBuild: true 385 | dev: true 386 | optional: true 387 | 388 | /@esbuild/linux-x64@0.16.3: 389 | resolution: {integrity: sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w==} 390 | engines: {node: '>=12'} 391 | cpu: [x64] 392 | os: [linux] 393 | requiresBuild: true 394 | dev: true 395 | optional: true 396 | 397 | /@esbuild/linux-x64@0.17.18: 398 | resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} 399 | engines: {node: '>=12'} 400 | cpu: [x64] 401 | os: [linux] 402 | requiresBuild: true 403 | dev: true 404 | optional: true 405 | 406 | /@esbuild/netbsd-x64@0.16.3: 407 | resolution: {integrity: sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA==} 408 | engines: {node: '>=12'} 409 | cpu: [x64] 410 | os: [netbsd] 411 | requiresBuild: true 412 | dev: true 413 | optional: true 414 | 415 | /@esbuild/netbsd-x64@0.17.18: 416 | resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} 417 | engines: {node: '>=12'} 418 | cpu: [x64] 419 | os: [netbsd] 420 | requiresBuild: true 421 | dev: true 422 | optional: true 423 | 424 | /@esbuild/openbsd-x64@0.16.3: 425 | resolution: {integrity: sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg==} 426 | engines: {node: '>=12'} 427 | cpu: [x64] 428 | os: [openbsd] 429 | requiresBuild: true 430 | dev: true 431 | optional: true 432 | 433 | /@esbuild/openbsd-x64@0.17.18: 434 | resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} 435 | engines: {node: '>=12'} 436 | cpu: [x64] 437 | os: [openbsd] 438 | requiresBuild: true 439 | dev: true 440 | optional: true 441 | 442 | /@esbuild/sunos-x64@0.16.3: 443 | resolution: {integrity: sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw==} 444 | engines: {node: '>=12'} 445 | cpu: [x64] 446 | os: [sunos] 447 | requiresBuild: true 448 | dev: true 449 | optional: true 450 | 451 | /@esbuild/sunos-x64@0.17.18: 452 | resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} 453 | engines: {node: '>=12'} 454 | cpu: [x64] 455 | os: [sunos] 456 | requiresBuild: true 457 | dev: true 458 | optional: true 459 | 460 | /@esbuild/win32-arm64@0.16.3: 461 | resolution: {integrity: sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg==} 462 | engines: {node: '>=12'} 463 | cpu: [arm64] 464 | os: [win32] 465 | requiresBuild: true 466 | dev: true 467 | optional: true 468 | 469 | /@esbuild/win32-arm64@0.17.18: 470 | resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} 471 | engines: {node: '>=12'} 472 | cpu: [arm64] 473 | os: [win32] 474 | requiresBuild: true 475 | dev: true 476 | optional: true 477 | 478 | /@esbuild/win32-ia32@0.16.3: 479 | resolution: {integrity: sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ==} 480 | engines: {node: '>=12'} 481 | cpu: [ia32] 482 | os: [win32] 483 | requiresBuild: true 484 | dev: true 485 | optional: true 486 | 487 | /@esbuild/win32-ia32@0.17.18: 488 | resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} 489 | engines: {node: '>=12'} 490 | cpu: [ia32] 491 | os: [win32] 492 | requiresBuild: true 493 | dev: true 494 | optional: true 495 | 496 | /@esbuild/win32-x64@0.16.3: 497 | resolution: {integrity: sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow==} 498 | engines: {node: '>=12'} 499 | cpu: [x64] 500 | os: [win32] 501 | requiresBuild: true 502 | dev: true 503 | optional: true 504 | 505 | /@esbuild/win32-x64@0.17.18: 506 | resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} 507 | engines: {node: '>=12'} 508 | cpu: [x64] 509 | os: [win32] 510 | requiresBuild: true 511 | dev: true 512 | optional: true 513 | 514 | /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0): 515 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 516 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 517 | peerDependencies: 518 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 519 | dependencies: 520 | eslint: 8.39.0 521 | eslint-visitor-keys: 3.4.0 522 | dev: true 523 | 524 | /@eslint-community/regexpp@4.5.1: 525 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} 526 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 527 | dev: true 528 | 529 | /@eslint/eslintrc@2.0.2: 530 | resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} 531 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 532 | dependencies: 533 | ajv: 6.12.6 534 | debug: 4.3.4 535 | espree: 9.5.1 536 | globals: 13.20.0 537 | ignore: 5.2.4 538 | import-fresh: 3.3.0 539 | js-yaml: 4.1.0 540 | minimatch: 3.1.2 541 | strip-json-comments: 3.1.1 542 | transitivePeerDependencies: 543 | - supports-color 544 | dev: true 545 | 546 | /@eslint/js@8.39.0: 547 | resolution: {integrity: sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==} 548 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 549 | dev: true 550 | 551 | /@fontsource/fira-mono@4.5.10: 552 | resolution: {integrity: sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==} 553 | dev: true 554 | 555 | /@humanwhocodes/config-array@0.11.8: 556 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 557 | engines: {node: '>=10.10.0'} 558 | dependencies: 559 | '@humanwhocodes/object-schema': 1.2.1 560 | debug: 4.3.4 561 | minimatch: 3.1.2 562 | transitivePeerDependencies: 563 | - supports-color 564 | dev: true 565 | 566 | /@humanwhocodes/module-importer@1.0.1: 567 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 568 | engines: {node: '>=12.22'} 569 | dev: true 570 | 571 | /@humanwhocodes/object-schema@1.2.1: 572 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 573 | dev: true 574 | 575 | /@iarna/toml@2.2.5: 576 | resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} 577 | dev: true 578 | 579 | /@jridgewell/gen-mapping@0.3.3: 580 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 581 | engines: {node: '>=6.0.0'} 582 | dependencies: 583 | '@jridgewell/set-array': 1.1.2 584 | '@jridgewell/sourcemap-codec': 1.4.15 585 | '@jridgewell/trace-mapping': 0.3.18 586 | dev: true 587 | 588 | /@jridgewell/resolve-uri@3.1.0: 589 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 590 | engines: {node: '>=6.0.0'} 591 | dev: true 592 | 593 | /@jridgewell/set-array@1.1.2: 594 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 595 | engines: {node: '>=6.0.0'} 596 | dev: true 597 | 598 | /@jridgewell/sourcemap-codec@1.4.14: 599 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 600 | dev: true 601 | 602 | /@jridgewell/sourcemap-codec@1.4.15: 603 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 604 | dev: true 605 | 606 | /@jridgewell/trace-mapping@0.3.18: 607 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 608 | dependencies: 609 | '@jridgewell/resolve-uri': 3.1.0 610 | '@jridgewell/sourcemap-codec': 1.4.14 611 | dev: true 612 | 613 | /@miniflare/cache@2.13.0: 614 | resolution: {integrity: sha512-y3SdN3SVyPECWmLAEGkkrv0RB+LugEPs/FeXn8QtN9aE1vyj69clOAgmsDzoh1DpFfFsLKRiv05aWs4m79P8Xw==} 615 | engines: {node: '>=16.13'} 616 | dependencies: 617 | '@miniflare/core': 2.13.0 618 | '@miniflare/shared': 2.13.0 619 | http-cache-semantics: 4.1.1 620 | undici: 5.20.0 621 | dev: true 622 | 623 | /@miniflare/cli-parser@2.13.0: 624 | resolution: {integrity: sha512-Nx1PIfuMZ3mK9Dg/JojWZAjHR16h1pcdCFSqYln/ME7y5ifx+P1E5UkShWUQ1cBlibNaltjbJ2n/7stSAsIGPQ==} 625 | engines: {node: '>=16.13'} 626 | dependencies: 627 | '@miniflare/shared': 2.13.0 628 | kleur: 4.1.5 629 | dev: true 630 | 631 | /@miniflare/core@2.13.0: 632 | resolution: {integrity: sha512-YJ/C0J3k+7xn4gvlMpvePnM3xC8nOnkweW96cc0IA8kJ1JSmScOO2tZ7rrU1RyDgp6StkAtQBw4yC0wYeFycBw==} 633 | engines: {node: '>=16.13'} 634 | dependencies: 635 | '@iarna/toml': 2.2.5 636 | '@miniflare/queues': 2.13.0 637 | '@miniflare/shared': 2.13.0 638 | '@miniflare/watcher': 2.13.0 639 | busboy: 1.6.0 640 | dotenv: 10.0.0 641 | kleur: 4.1.5 642 | set-cookie-parser: 2.6.0 643 | undici: 5.20.0 644 | urlpattern-polyfill: 4.0.3 645 | dev: true 646 | 647 | /@miniflare/d1@2.13.0: 648 | resolution: {integrity: sha512-OslqjO8iTcvzyrC0spByftMboRmHJEyHyTHnlKkjWDGdQQztEOjso2Xj+3I4SZIeUYvbzDRhKLS2QXI9a8LS5A==} 649 | engines: {node: '>=16.7'} 650 | dependencies: 651 | '@miniflare/core': 2.13.0 652 | '@miniflare/shared': 2.13.0 653 | dev: true 654 | 655 | /@miniflare/durable-objects@2.13.0: 656 | resolution: {integrity: sha512-CRGVBPO9vY4Fc3aV+pdPRVVeYIt64vQqvw+BJbyW+TQtqVP2CGQeziJGnCfcONNNKyooZxGyUkHewUypyH+Qhg==} 657 | engines: {node: '>=16.13'} 658 | dependencies: 659 | '@miniflare/core': 2.13.0 660 | '@miniflare/shared': 2.13.0 661 | '@miniflare/storage-memory': 2.13.0 662 | undici: 5.20.0 663 | dev: true 664 | 665 | /@miniflare/html-rewriter@2.13.0: 666 | resolution: {integrity: sha512-XhN7Icyzvtvu+o/A0hrnSiSmla78seCaNwQ9M1TDHxt352I/ahPX4wtPXs6GbKqY0/i+V6yoG2KGFRQ/j59cQQ==} 667 | engines: {node: '>=16.13'} 668 | dependencies: 669 | '@miniflare/core': 2.13.0 670 | '@miniflare/shared': 2.13.0 671 | html-rewriter-wasm: 0.4.1 672 | undici: 5.20.0 673 | dev: true 674 | 675 | /@miniflare/http-server@2.13.0: 676 | resolution: {integrity: sha512-aMS/nUMTKP15hKnyZboeuWCiqmNrrCu+XRBY/TxDDl07iXcLpiHGf3oVv+yXxXkWlJHJVCbK7i/nXSNPllRMSw==} 677 | engines: {node: '>=16.13'} 678 | dependencies: 679 | '@miniflare/core': 2.13.0 680 | '@miniflare/shared': 2.13.0 681 | '@miniflare/web-sockets': 2.13.0 682 | kleur: 4.1.5 683 | selfsigned: 2.1.1 684 | undici: 5.20.0 685 | ws: 8.13.0 686 | youch: 2.2.2 687 | transitivePeerDependencies: 688 | - bufferutil 689 | - utf-8-validate 690 | dev: true 691 | 692 | /@miniflare/kv@2.13.0: 693 | resolution: {integrity: sha512-J0AS5x3g/YVOmHMxMAZs07nRXRvSo9jyuC0eikTBf+4AABvBIyvVYmdTjYNjCmr8O5smcfWBX5S27HelD3aAAQ==} 694 | engines: {node: '>=16.13'} 695 | dependencies: 696 | '@miniflare/shared': 2.13.0 697 | dev: true 698 | 699 | /@miniflare/queues@2.13.0: 700 | resolution: {integrity: sha512-Gf/a6M1mJL03iOvNqh3JNahcBfvEMPHnO28n0gkCoyYWGvddIr9lwCdFIa0qwNJsC1fIDRxhPg8PZ5cQLBMwRA==} 701 | engines: {node: '>=16.7'} 702 | dependencies: 703 | '@miniflare/shared': 2.13.0 704 | dev: true 705 | 706 | /@miniflare/r2@2.13.0: 707 | resolution: {integrity: sha512-/5k6GHOYMNV/oBtilV9HDXBkJUrx8oXVigG5vxbnzEGRXyVRmR+Glzu7mFT8JiE94XiEbXHk9Qvu1S5Dej3wBw==} 708 | engines: {node: '>=16.13'} 709 | dependencies: 710 | '@miniflare/shared': 2.13.0 711 | undici: 5.20.0 712 | dev: true 713 | 714 | /@miniflare/runner-vm@2.13.0: 715 | resolution: {integrity: sha512-VmKtF2cA8HmTuLXor1THWY0v+DmaobPct63iLcgWIaUdP3MIvL+9X8HDXFAviCR7bCTe6MKxckHkaOj0IE0aJQ==} 716 | engines: {node: '>=16.13'} 717 | dependencies: 718 | '@miniflare/shared': 2.13.0 719 | dev: true 720 | 721 | /@miniflare/scheduler@2.13.0: 722 | resolution: {integrity: sha512-AOaQanoR4NjVEzVGWHnrL15A7aMx+d9AKLJhSDF7KaP+4NrT2Wo2BQuXCpn5oStx3itOdlQpMfqQ139e/I8WhQ==} 723 | engines: {node: '>=16.13'} 724 | dependencies: 725 | '@miniflare/core': 2.13.0 726 | '@miniflare/shared': 2.13.0 727 | cron-schedule: 3.0.6 728 | dev: true 729 | 730 | /@miniflare/shared@2.13.0: 731 | resolution: {integrity: sha512-m8YFQzKmbjberrV9hPzNcQjNCXxjTjXUpuNrIGjAJO7g+BDztUHaZbdd26H9maBDlkeiWxA3hf0mDyCT/6MCMA==} 732 | engines: {node: '>=16.13'} 733 | dependencies: 734 | '@types/better-sqlite3': 7.6.4 735 | kleur: 4.1.5 736 | npx-import: 1.1.4 737 | picomatch: 2.3.1 738 | dev: true 739 | 740 | /@miniflare/sites@2.13.0: 741 | resolution: {integrity: sha512-/tuzIu00o6CF2tkSv01q02MgEShXBSKx85h9jwWvc+6u7prGacAOer0FA1YNRFbE+t9QIfutAkoPGMA9zYf8+Q==} 742 | engines: {node: '>=16.13'} 743 | dependencies: 744 | '@miniflare/kv': 2.13.0 745 | '@miniflare/shared': 2.13.0 746 | '@miniflare/storage-file': 2.13.0 747 | dev: true 748 | 749 | /@miniflare/storage-file@2.13.0: 750 | resolution: {integrity: sha512-LuAeAAY5046rq5U1eFLVkz+ppiFEWytWacpkQw92DvVKFFquZcXSj6WPxZF4rSs23WDk+rdcwuLekbb52aDR7A==} 751 | engines: {node: '>=16.13'} 752 | dependencies: 753 | '@miniflare/shared': 2.13.0 754 | '@miniflare/storage-memory': 2.13.0 755 | dev: true 756 | 757 | /@miniflare/storage-memory@2.13.0: 758 | resolution: {integrity: sha512-FnkYcBNXa/ym1ksNilNZycg9WYYKo6cWKplVBeSthRon3e8QY6t3n7/XRseBUo7O6mhDybVTy4wNCP1R2nBiEw==} 759 | engines: {node: '>=16.13'} 760 | dependencies: 761 | '@miniflare/shared': 2.13.0 762 | dev: true 763 | 764 | /@miniflare/watcher@2.13.0: 765 | resolution: {integrity: sha512-teAacWcpMStoBLbLae95IUaL5lPzjPlXa9lhK9CbRaio/KRMibTMRGWrYos3IVGQRZvklvLwcms/nTvgcdb6yw==} 766 | engines: {node: '>=16.13'} 767 | dependencies: 768 | '@miniflare/shared': 2.13.0 769 | dev: true 770 | 771 | /@miniflare/web-sockets@2.13.0: 772 | resolution: {integrity: sha512-+U2/HCf+BetRIgjAnNQjkuN6UeAjQmXifhQC+7CCaX834XJhrKXoR6z2xr2xkg1qj0qQs4D2jWG0KzrO5OUpug==} 773 | engines: {node: '>=16.13'} 774 | dependencies: 775 | '@miniflare/core': 2.13.0 776 | '@miniflare/shared': 2.13.0 777 | undici: 5.20.0 778 | ws: 8.13.0 779 | transitivePeerDependencies: 780 | - bufferutil 781 | - utf-8-validate 782 | dev: true 783 | 784 | /@neoconfetti/svelte@1.0.0: 785 | resolution: {integrity: sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==} 786 | dev: true 787 | 788 | /@nodelib/fs.scandir@2.1.5: 789 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 790 | engines: {node: '>= 8'} 791 | dependencies: 792 | '@nodelib/fs.stat': 2.0.5 793 | run-parallel: 1.2.0 794 | dev: true 795 | 796 | /@nodelib/fs.stat@2.0.5: 797 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 798 | engines: {node: '>= 8'} 799 | dev: true 800 | 801 | /@nodelib/fs.walk@1.2.8: 802 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 803 | engines: {node: '>= 8'} 804 | dependencies: 805 | '@nodelib/fs.scandir': 2.1.5 806 | fastq: 1.15.0 807 | dev: true 808 | 809 | /@playwright/test@1.33.0: 810 | resolution: {integrity: sha512-YunBa2mE7Hq4CfPkGzQRK916a4tuZoVx/EpLjeWlTVOnD4S2+fdaQZE0LJkbfhN5FTSKNLdcl7MoT5XB37bTkg==} 811 | engines: {node: '>=14'} 812 | hasBin: true 813 | dependencies: 814 | '@types/node': 20.0.0 815 | playwright-core: 1.33.0 816 | optionalDependencies: 817 | fsevents: 2.3.2 818 | dev: true 819 | 820 | /@polka/url@1.0.0-next.21: 821 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} 822 | dev: true 823 | 824 | /@sveltejs/adapter-auto@2.0.1(@sveltejs/kit@1.16.2): 825 | resolution: {integrity: sha512-anxxYMcQy7HWSKxN4YNaVcgNzCHtNFwygq72EA1Xv7c+5gSECOJ1ez1PYoLciPiFa7A3XBvMDQXUFJ2eqLDtAA==} 826 | peerDependencies: 827 | '@sveltejs/kit': ^1.0.0 828 | dependencies: 829 | '@sveltejs/kit': 1.16.2(svelte@3.59.0)(vite@4.3.5) 830 | import-meta-resolve: 3.0.0 831 | dev: true 832 | 833 | /@sveltejs/adapter-cloudflare@2.2.2(@sveltejs/kit@1.16.2): 834 | resolution: {integrity: sha512-B9DUVzbEEfT18Wr9vfhtS3UHQ6VMZrC47aKAvDTNe/C0Js23XdXfWp9ulyJcTUtt7lInJ1213LvAgrRb/358hQ==} 835 | peerDependencies: 836 | '@sveltejs/kit': ^1.0.0 837 | dependencies: 838 | '@cloudflare/workers-types': 4.20230419.0 839 | '@sveltejs/kit': 1.16.2(svelte@3.59.0)(vite@4.3.5) 840 | esbuild: 0.17.18 841 | worktop: 0.8.0-next.15 842 | dev: true 843 | 844 | /@sveltejs/kit@1.16.2(svelte@3.59.0)(vite@4.3.5): 845 | resolution: {integrity: sha512-yxcpA4nvlVlJ+VyYnj0zD3QN05kfmoh4OyitlPrVG34nnZSHzFpE4eZ33X1A/tc9prslSFRhpM6rWngCs0nM8w==} 846 | engines: {node: ^16.14 || >=18} 847 | hasBin: true 848 | requiresBuild: true 849 | peerDependencies: 850 | svelte: ^3.54.0 851 | vite: ^4.0.0 852 | dependencies: 853 | '@sveltejs/vite-plugin-svelte': 2.2.0(svelte@3.59.0)(vite@4.3.5) 854 | '@types/cookie': 0.5.1 855 | cookie: 0.5.0 856 | devalue: 4.3.0 857 | esm-env: 1.0.0 858 | kleur: 4.1.5 859 | magic-string: 0.30.0 860 | mime: 3.0.0 861 | sade: 1.8.1 862 | set-cookie-parser: 2.6.0 863 | sirv: 2.0.3 864 | svelte: 3.59.0 865 | tiny-glob: 0.2.9 866 | undici: 5.22.0 867 | vite: 4.3.5(@types/node@20.0.0) 868 | transitivePeerDependencies: 869 | - supports-color 870 | dev: true 871 | 872 | /@sveltejs/vite-plugin-svelte@2.2.0(svelte@3.59.0)(vite@4.3.5): 873 | resolution: {integrity: sha512-KDtdva+FZrZlyug15KlbXuubntAPKcBau0K7QhAIqC5SAy0uDbjZwoexDRx0L0J2T4niEfC6FnA9GuQQJKg+Aw==} 874 | engines: {node: ^14.18.0 || >= 16} 875 | peerDependencies: 876 | svelte: ^3.54.0 877 | vite: ^4.0.0 878 | dependencies: 879 | debug: 4.3.4 880 | deepmerge: 4.3.1 881 | kleur: 4.1.5 882 | magic-string: 0.30.0 883 | svelte: 3.59.0 884 | svelte-hmr: 0.15.1(svelte@3.59.0) 885 | vite: 4.3.5(@types/node@20.0.0) 886 | vitefu: 0.2.4(vite@4.3.5) 887 | transitivePeerDependencies: 888 | - supports-color 889 | dev: true 890 | 891 | /@types/better-sqlite3@7.6.4: 892 | resolution: {integrity: sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg==} 893 | dependencies: 894 | '@types/node': 20.0.0 895 | dev: true 896 | 897 | /@types/chai-subset@1.3.3: 898 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 899 | dependencies: 900 | '@types/chai': 4.3.5 901 | dev: true 902 | 903 | /@types/chai@4.3.5: 904 | resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} 905 | dev: true 906 | 907 | /@types/cookie@0.5.1: 908 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} 909 | dev: true 910 | 911 | /@types/json-schema@7.0.11: 912 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} 913 | dev: true 914 | 915 | /@types/node@20.0.0: 916 | resolution: {integrity: sha512-cD2uPTDnQQCVpmRefonO98/PPijuOnnEy5oytWJFPY1N9aJCz2wJ5kSGWO+zJoed2cY2JxQh6yBuUq4vIn61hw==} 917 | dev: true 918 | 919 | /@types/pug@2.0.6: 920 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} 921 | dev: true 922 | 923 | /@types/semver@7.3.13: 924 | resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} 925 | dev: true 926 | 927 | /@types/stack-trace@0.0.29: 928 | resolution: {integrity: sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==} 929 | dev: true 930 | 931 | /@typescript-eslint/eslint-plugin@5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@5.0.4): 932 | resolution: {integrity: sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==} 933 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 934 | peerDependencies: 935 | '@typescript-eslint/parser': ^5.0.0 936 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 937 | typescript: '*' 938 | peerDependenciesMeta: 939 | typescript: 940 | optional: true 941 | dependencies: 942 | '@eslint-community/regexpp': 4.5.1 943 | '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) 944 | '@typescript-eslint/scope-manager': 5.59.2 945 | '@typescript-eslint/type-utils': 5.59.2(eslint@8.39.0)(typescript@5.0.4) 946 | '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@5.0.4) 947 | debug: 4.3.4 948 | eslint: 8.39.0 949 | grapheme-splitter: 1.0.4 950 | ignore: 5.2.4 951 | natural-compare-lite: 1.4.0 952 | semver: 7.5.0 953 | tsutils: 3.21.0(typescript@5.0.4) 954 | typescript: 5.0.4 955 | transitivePeerDependencies: 956 | - supports-color 957 | dev: true 958 | 959 | /@typescript-eslint/parser@5.59.2(eslint@8.39.0)(typescript@5.0.4): 960 | resolution: {integrity: sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==} 961 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 962 | peerDependencies: 963 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 964 | typescript: '*' 965 | peerDependenciesMeta: 966 | typescript: 967 | optional: true 968 | dependencies: 969 | '@typescript-eslint/scope-manager': 5.59.2 970 | '@typescript-eslint/types': 5.59.2 971 | '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) 972 | debug: 4.3.4 973 | eslint: 8.39.0 974 | typescript: 5.0.4 975 | transitivePeerDependencies: 976 | - supports-color 977 | dev: true 978 | 979 | /@typescript-eslint/scope-manager@5.59.2: 980 | resolution: {integrity: sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==} 981 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 982 | dependencies: 983 | '@typescript-eslint/types': 5.59.2 984 | '@typescript-eslint/visitor-keys': 5.59.2 985 | dev: true 986 | 987 | /@typescript-eslint/type-utils@5.59.2(eslint@8.39.0)(typescript@5.0.4): 988 | resolution: {integrity: sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==} 989 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 990 | peerDependencies: 991 | eslint: '*' 992 | typescript: '*' 993 | peerDependenciesMeta: 994 | typescript: 995 | optional: true 996 | dependencies: 997 | '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) 998 | '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@5.0.4) 999 | debug: 4.3.4 1000 | eslint: 8.39.0 1001 | tsutils: 3.21.0(typescript@5.0.4) 1002 | typescript: 5.0.4 1003 | transitivePeerDependencies: 1004 | - supports-color 1005 | dev: true 1006 | 1007 | /@typescript-eslint/types@5.59.2: 1008 | resolution: {integrity: sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==} 1009 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1010 | dev: true 1011 | 1012 | /@typescript-eslint/typescript-estree@5.59.2(typescript@5.0.4): 1013 | resolution: {integrity: sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==} 1014 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1015 | peerDependencies: 1016 | typescript: '*' 1017 | peerDependenciesMeta: 1018 | typescript: 1019 | optional: true 1020 | dependencies: 1021 | '@typescript-eslint/types': 5.59.2 1022 | '@typescript-eslint/visitor-keys': 5.59.2 1023 | debug: 4.3.4 1024 | globby: 11.1.0 1025 | is-glob: 4.0.3 1026 | semver: 7.5.0 1027 | tsutils: 3.21.0(typescript@5.0.4) 1028 | typescript: 5.0.4 1029 | transitivePeerDependencies: 1030 | - supports-color 1031 | dev: true 1032 | 1033 | /@typescript-eslint/utils@5.59.2(eslint@8.39.0)(typescript@5.0.4): 1034 | resolution: {integrity: sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==} 1035 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1036 | peerDependencies: 1037 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1038 | dependencies: 1039 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) 1040 | '@types/json-schema': 7.0.11 1041 | '@types/semver': 7.3.13 1042 | '@typescript-eslint/scope-manager': 5.59.2 1043 | '@typescript-eslint/types': 5.59.2 1044 | '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) 1045 | eslint: 8.39.0 1046 | eslint-scope: 5.1.1 1047 | semver: 7.5.0 1048 | transitivePeerDependencies: 1049 | - supports-color 1050 | - typescript 1051 | dev: true 1052 | 1053 | /@typescript-eslint/visitor-keys@5.59.2: 1054 | resolution: {integrity: sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==} 1055 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1056 | dependencies: 1057 | '@typescript-eslint/types': 5.59.2 1058 | eslint-visitor-keys: 3.4.0 1059 | dev: true 1060 | 1061 | /acorn-jsx@5.3.2(acorn@8.8.2): 1062 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 1063 | peerDependencies: 1064 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1065 | dependencies: 1066 | acorn: 8.8.2 1067 | dev: true 1068 | 1069 | /acorn-walk@8.2.0: 1070 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 1071 | engines: {node: '>=0.4.0'} 1072 | dev: true 1073 | 1074 | /acorn@8.8.2: 1075 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} 1076 | engines: {node: '>=0.4.0'} 1077 | hasBin: true 1078 | dev: true 1079 | 1080 | /ajv@6.12.6: 1081 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 1082 | dependencies: 1083 | fast-deep-equal: 3.1.3 1084 | fast-json-stable-stringify: 2.1.0 1085 | json-schema-traverse: 0.4.1 1086 | uri-js: 4.4.1 1087 | dev: true 1088 | 1089 | /ansi-regex@5.0.1: 1090 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1091 | engines: {node: '>=8'} 1092 | dev: true 1093 | 1094 | /ansi-styles@4.3.0: 1095 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1096 | engines: {node: '>=8'} 1097 | dependencies: 1098 | color-convert: 2.0.1 1099 | dev: true 1100 | 1101 | /any-promise@1.3.0: 1102 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 1103 | dev: true 1104 | 1105 | /anymatch@3.1.3: 1106 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 1107 | engines: {node: '>= 8'} 1108 | dependencies: 1109 | normalize-path: 3.0.0 1110 | picomatch: 2.3.1 1111 | dev: true 1112 | 1113 | /arg@5.0.2: 1114 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 1115 | dev: true 1116 | 1117 | /argparse@2.0.1: 1118 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1119 | dev: true 1120 | 1121 | /array-union@2.1.0: 1122 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1123 | engines: {node: '>=8'} 1124 | dev: true 1125 | 1126 | /assertion-error@1.1.0: 1127 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 1128 | dev: true 1129 | 1130 | /autoprefixer@10.4.14(postcss@8.4.23): 1131 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} 1132 | engines: {node: ^10 || ^12 || >=14} 1133 | hasBin: true 1134 | peerDependencies: 1135 | postcss: ^8.1.0 1136 | dependencies: 1137 | browserslist: 4.21.5 1138 | caniuse-lite: 1.0.30001485 1139 | fraction.js: 4.2.0 1140 | normalize-range: 0.1.2 1141 | picocolors: 1.0.0 1142 | postcss: 8.4.23 1143 | postcss-value-parser: 4.2.0 1144 | dev: true 1145 | 1146 | /balanced-match@1.0.2: 1147 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1148 | dev: true 1149 | 1150 | /binary-extensions@2.2.0: 1151 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 1152 | engines: {node: '>=8'} 1153 | dev: true 1154 | 1155 | /blake3-wasm@2.1.5: 1156 | resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} 1157 | dev: true 1158 | 1159 | /brace-expansion@1.1.11: 1160 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1161 | dependencies: 1162 | balanced-match: 1.0.2 1163 | concat-map: 0.0.1 1164 | dev: true 1165 | 1166 | /braces@3.0.2: 1167 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1168 | engines: {node: '>=8'} 1169 | dependencies: 1170 | fill-range: 7.0.1 1171 | dev: true 1172 | 1173 | /browserslist@4.21.5: 1174 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 1175 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1176 | hasBin: true 1177 | dependencies: 1178 | caniuse-lite: 1.0.30001485 1179 | electron-to-chromium: 1.4.385 1180 | node-releases: 2.0.10 1181 | update-browserslist-db: 1.0.11(browserslist@4.21.5) 1182 | dev: true 1183 | 1184 | /buffer-crc32@0.2.13: 1185 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 1186 | dev: true 1187 | 1188 | /buffer-from@1.1.2: 1189 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 1190 | dev: true 1191 | 1192 | /builtins@5.0.1: 1193 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} 1194 | dependencies: 1195 | semver: 7.5.0 1196 | dev: true 1197 | 1198 | /busboy@1.6.0: 1199 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 1200 | engines: {node: '>=10.16.0'} 1201 | dependencies: 1202 | streamsearch: 1.1.0 1203 | dev: true 1204 | 1205 | /callsites@3.1.0: 1206 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1207 | engines: {node: '>=6'} 1208 | dev: true 1209 | 1210 | /camelcase-css@2.0.1: 1211 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 1212 | engines: {node: '>= 6'} 1213 | dev: true 1214 | 1215 | /caniuse-lite@1.0.30001485: 1216 | resolution: {integrity: sha512-8aUpZ7sjhlOyiNsg+pgcrTTPUXKh+rg544QYHSvQErljVEKJzvkYkCR/hUFeeVoEfTToUtY9cUKNRC7+c45YkA==} 1217 | dev: true 1218 | 1219 | /chai@4.3.7: 1220 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} 1221 | engines: {node: '>=4'} 1222 | dependencies: 1223 | assertion-error: 1.1.0 1224 | check-error: 1.0.2 1225 | deep-eql: 4.1.3 1226 | get-func-name: 2.0.0 1227 | loupe: 2.3.6 1228 | pathval: 1.1.1 1229 | type-detect: 4.0.8 1230 | dev: true 1231 | 1232 | /chalk@4.1.2: 1233 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1234 | engines: {node: '>=10'} 1235 | dependencies: 1236 | ansi-styles: 4.3.0 1237 | supports-color: 7.2.0 1238 | dev: true 1239 | 1240 | /check-error@1.0.2: 1241 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} 1242 | dev: true 1243 | 1244 | /chokidar@3.5.3: 1245 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1246 | engines: {node: '>= 8.10.0'} 1247 | dependencies: 1248 | anymatch: 3.1.3 1249 | braces: 3.0.2 1250 | glob-parent: 5.1.2 1251 | is-binary-path: 2.1.0 1252 | is-glob: 4.0.3 1253 | normalize-path: 3.0.0 1254 | readdirp: 3.6.0 1255 | optionalDependencies: 1256 | fsevents: 2.3.2 1257 | dev: true 1258 | 1259 | /color-convert@2.0.1: 1260 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1261 | engines: {node: '>=7.0.0'} 1262 | dependencies: 1263 | color-name: 1.1.4 1264 | dev: true 1265 | 1266 | /color-name@1.1.4: 1267 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1268 | dev: true 1269 | 1270 | /commander@4.1.1: 1271 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1272 | engines: {node: '>= 6'} 1273 | dev: true 1274 | 1275 | /concat-map@0.0.1: 1276 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 1277 | dev: true 1278 | 1279 | /cookie@0.4.2: 1280 | resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} 1281 | engines: {node: '>= 0.6'} 1282 | dev: true 1283 | 1284 | /cookie@0.5.0: 1285 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1286 | engines: {node: '>= 0.6'} 1287 | dev: true 1288 | 1289 | /cron-schedule@3.0.6: 1290 | resolution: {integrity: sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg==} 1291 | dev: true 1292 | 1293 | /cross-spawn@7.0.3: 1294 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1295 | engines: {node: '>= 8'} 1296 | dependencies: 1297 | path-key: 3.1.1 1298 | shebang-command: 2.0.0 1299 | which: 2.0.2 1300 | dev: true 1301 | 1302 | /cssesc@3.0.0: 1303 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1304 | engines: {node: '>=4'} 1305 | hasBin: true 1306 | dev: true 1307 | 1308 | /data-uri-to-buffer@4.0.1: 1309 | resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} 1310 | engines: {node: '>= 12'} 1311 | dev: true 1312 | 1313 | /debug@4.3.4: 1314 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1315 | engines: {node: '>=6.0'} 1316 | peerDependencies: 1317 | supports-color: '*' 1318 | peerDependenciesMeta: 1319 | supports-color: 1320 | optional: true 1321 | dependencies: 1322 | ms: 2.1.2 1323 | dev: true 1324 | 1325 | /deep-eql@4.1.3: 1326 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 1327 | engines: {node: '>=6'} 1328 | dependencies: 1329 | type-detect: 4.0.8 1330 | dev: true 1331 | 1332 | /deep-is@0.1.4: 1333 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1334 | dev: true 1335 | 1336 | /deepmerge@4.3.1: 1337 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1338 | engines: {node: '>=0.10.0'} 1339 | dev: true 1340 | 1341 | /detect-indent@6.1.0: 1342 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 1343 | engines: {node: '>=8'} 1344 | dev: true 1345 | 1346 | /devalue@4.3.0: 1347 | resolution: {integrity: sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==} 1348 | dev: true 1349 | 1350 | /didyoumean@1.2.2: 1351 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 1352 | dev: true 1353 | 1354 | /dir-glob@3.0.1: 1355 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1356 | engines: {node: '>=8'} 1357 | dependencies: 1358 | path-type: 4.0.0 1359 | dev: true 1360 | 1361 | /dlv@1.1.3: 1362 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 1363 | dev: true 1364 | 1365 | /doctrine@3.0.0: 1366 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1367 | engines: {node: '>=6.0.0'} 1368 | dependencies: 1369 | esutils: 2.0.3 1370 | dev: true 1371 | 1372 | /dotenv@10.0.0: 1373 | resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} 1374 | engines: {node: '>=10'} 1375 | dev: true 1376 | 1377 | /electron-to-chromium@1.4.385: 1378 | resolution: {integrity: sha512-L9zlje9bIw0h+CwPQumiuVlfMcV4boxRjFIWDcLfFqTZNbkwOExBzfmswytHawObQX4OUhtNv8gIiB21kOurIg==} 1379 | dev: true 1380 | 1381 | /es6-promise@3.3.1: 1382 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 1383 | dev: true 1384 | 1385 | /esbuild@0.16.3: 1386 | resolution: {integrity: sha512-71f7EjPWTiSguen8X/kxEpkAS7BFHwtQKisCDDV3Y4GLGWBaoSCyD5uXkaUew6JDzA9FEN1W23mdnSwW9kqCeg==} 1387 | engines: {node: '>=12'} 1388 | hasBin: true 1389 | requiresBuild: true 1390 | optionalDependencies: 1391 | '@esbuild/android-arm': 0.16.3 1392 | '@esbuild/android-arm64': 0.16.3 1393 | '@esbuild/android-x64': 0.16.3 1394 | '@esbuild/darwin-arm64': 0.16.3 1395 | '@esbuild/darwin-x64': 0.16.3 1396 | '@esbuild/freebsd-arm64': 0.16.3 1397 | '@esbuild/freebsd-x64': 0.16.3 1398 | '@esbuild/linux-arm': 0.16.3 1399 | '@esbuild/linux-arm64': 0.16.3 1400 | '@esbuild/linux-ia32': 0.16.3 1401 | '@esbuild/linux-loong64': 0.16.3 1402 | '@esbuild/linux-mips64el': 0.16.3 1403 | '@esbuild/linux-ppc64': 0.16.3 1404 | '@esbuild/linux-riscv64': 0.16.3 1405 | '@esbuild/linux-s390x': 0.16.3 1406 | '@esbuild/linux-x64': 0.16.3 1407 | '@esbuild/netbsd-x64': 0.16.3 1408 | '@esbuild/openbsd-x64': 0.16.3 1409 | '@esbuild/sunos-x64': 0.16.3 1410 | '@esbuild/win32-arm64': 0.16.3 1411 | '@esbuild/win32-ia32': 0.16.3 1412 | '@esbuild/win32-x64': 0.16.3 1413 | dev: true 1414 | 1415 | /esbuild@0.17.18: 1416 | resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} 1417 | engines: {node: '>=12'} 1418 | hasBin: true 1419 | requiresBuild: true 1420 | optionalDependencies: 1421 | '@esbuild/android-arm': 0.17.18 1422 | '@esbuild/android-arm64': 0.17.18 1423 | '@esbuild/android-x64': 0.17.18 1424 | '@esbuild/darwin-arm64': 0.17.18 1425 | '@esbuild/darwin-x64': 0.17.18 1426 | '@esbuild/freebsd-arm64': 0.17.18 1427 | '@esbuild/freebsd-x64': 0.17.18 1428 | '@esbuild/linux-arm': 0.17.18 1429 | '@esbuild/linux-arm64': 0.17.18 1430 | '@esbuild/linux-ia32': 0.17.18 1431 | '@esbuild/linux-loong64': 0.17.18 1432 | '@esbuild/linux-mips64el': 0.17.18 1433 | '@esbuild/linux-ppc64': 0.17.18 1434 | '@esbuild/linux-riscv64': 0.17.18 1435 | '@esbuild/linux-s390x': 0.17.18 1436 | '@esbuild/linux-x64': 0.17.18 1437 | '@esbuild/netbsd-x64': 0.17.18 1438 | '@esbuild/openbsd-x64': 0.17.18 1439 | '@esbuild/sunos-x64': 0.17.18 1440 | '@esbuild/win32-arm64': 0.17.18 1441 | '@esbuild/win32-ia32': 0.17.18 1442 | '@esbuild/win32-x64': 0.17.18 1443 | dev: true 1444 | 1445 | /escalade@3.1.1: 1446 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1447 | engines: {node: '>=6'} 1448 | dev: true 1449 | 1450 | /escape-string-regexp@4.0.0: 1451 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1452 | engines: {node: '>=10'} 1453 | dev: true 1454 | 1455 | /eslint-config-prettier@8.8.0(eslint@8.39.0): 1456 | resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} 1457 | hasBin: true 1458 | peerDependencies: 1459 | eslint: '>=7.0.0' 1460 | dependencies: 1461 | eslint: 8.39.0 1462 | dev: true 1463 | 1464 | /eslint-plugin-svelte@2.27.3(eslint@8.39.0)(svelte@3.59.0): 1465 | resolution: {integrity: sha512-LPri23kkKeeh+TkYr9FndQEy2Q5BhOrIwatnLdXx6hUtTIolohzrTJhWMK3k8BwitVBnJGl5CDVWNkV80tmdkQ==} 1466 | engines: {node: ^14.17.0 || >=16.0.0} 1467 | peerDependencies: 1468 | eslint: ^7.0.0 || ^8.0.0-0 1469 | svelte: ^3.37.0 1470 | peerDependenciesMeta: 1471 | svelte: 1472 | optional: true 1473 | dependencies: 1474 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) 1475 | '@jridgewell/sourcemap-codec': 1.4.15 1476 | debug: 4.3.4 1477 | eslint: 8.39.0 1478 | esutils: 2.0.3 1479 | known-css-properties: 0.27.0 1480 | postcss: 8.4.23 1481 | postcss-load-config: 3.1.4(postcss@8.4.23) 1482 | postcss-safe-parser: 6.0.0(postcss@8.4.23) 1483 | svelte: 3.59.0 1484 | svelte-eslint-parser: 0.27.0(svelte@3.59.0) 1485 | transitivePeerDependencies: 1486 | - supports-color 1487 | - ts-node 1488 | dev: true 1489 | 1490 | /eslint-scope@5.1.1: 1491 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1492 | engines: {node: '>=8.0.0'} 1493 | dependencies: 1494 | esrecurse: 4.3.0 1495 | estraverse: 4.3.0 1496 | dev: true 1497 | 1498 | /eslint-scope@7.2.0: 1499 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} 1500 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1501 | dependencies: 1502 | esrecurse: 4.3.0 1503 | estraverse: 5.3.0 1504 | dev: true 1505 | 1506 | /eslint-visitor-keys@3.4.0: 1507 | resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} 1508 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1509 | dev: true 1510 | 1511 | /eslint@8.39.0: 1512 | resolution: {integrity: sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==} 1513 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1514 | hasBin: true 1515 | dependencies: 1516 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) 1517 | '@eslint-community/regexpp': 4.5.1 1518 | '@eslint/eslintrc': 2.0.2 1519 | '@eslint/js': 8.39.0 1520 | '@humanwhocodes/config-array': 0.11.8 1521 | '@humanwhocodes/module-importer': 1.0.1 1522 | '@nodelib/fs.walk': 1.2.8 1523 | ajv: 6.12.6 1524 | chalk: 4.1.2 1525 | cross-spawn: 7.0.3 1526 | debug: 4.3.4 1527 | doctrine: 3.0.0 1528 | escape-string-regexp: 4.0.0 1529 | eslint-scope: 7.2.0 1530 | eslint-visitor-keys: 3.4.0 1531 | espree: 9.5.1 1532 | esquery: 1.5.0 1533 | esutils: 2.0.3 1534 | fast-deep-equal: 3.1.3 1535 | file-entry-cache: 6.0.1 1536 | find-up: 5.0.0 1537 | glob-parent: 6.0.2 1538 | globals: 13.20.0 1539 | grapheme-splitter: 1.0.4 1540 | ignore: 5.2.4 1541 | import-fresh: 3.3.0 1542 | imurmurhash: 0.1.4 1543 | is-glob: 4.0.3 1544 | is-path-inside: 3.0.3 1545 | js-sdsl: 4.4.0 1546 | js-yaml: 4.1.0 1547 | json-stable-stringify-without-jsonify: 1.0.1 1548 | levn: 0.4.1 1549 | lodash.merge: 4.6.2 1550 | minimatch: 3.1.2 1551 | natural-compare: 1.4.0 1552 | optionator: 0.9.1 1553 | strip-ansi: 6.0.1 1554 | strip-json-comments: 3.1.1 1555 | text-table: 0.2.0 1556 | transitivePeerDependencies: 1557 | - supports-color 1558 | dev: true 1559 | 1560 | /esm-env@1.0.0: 1561 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 1562 | dev: true 1563 | 1564 | /espree@9.5.1: 1565 | resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} 1566 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1567 | dependencies: 1568 | acorn: 8.8.2 1569 | acorn-jsx: 5.3.2(acorn@8.8.2) 1570 | eslint-visitor-keys: 3.4.0 1571 | dev: true 1572 | 1573 | /esquery@1.5.0: 1574 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1575 | engines: {node: '>=0.10'} 1576 | dependencies: 1577 | estraverse: 5.3.0 1578 | dev: true 1579 | 1580 | /esrecurse@4.3.0: 1581 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1582 | engines: {node: '>=4.0'} 1583 | dependencies: 1584 | estraverse: 5.3.0 1585 | dev: true 1586 | 1587 | /estraverse@4.3.0: 1588 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1589 | engines: {node: '>=4.0'} 1590 | dev: true 1591 | 1592 | /estraverse@5.3.0: 1593 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1594 | engines: {node: '>=4.0'} 1595 | dev: true 1596 | 1597 | /estree-walker@0.6.1: 1598 | resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} 1599 | dev: true 1600 | 1601 | /esutils@2.0.3: 1602 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1603 | engines: {node: '>=0.10.0'} 1604 | dev: true 1605 | 1606 | /execa@6.1.0: 1607 | resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} 1608 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1609 | dependencies: 1610 | cross-spawn: 7.0.3 1611 | get-stream: 6.0.1 1612 | human-signals: 3.0.1 1613 | is-stream: 3.0.0 1614 | merge-stream: 2.0.0 1615 | npm-run-path: 5.1.0 1616 | onetime: 6.0.0 1617 | signal-exit: 3.0.7 1618 | strip-final-newline: 3.0.0 1619 | dev: true 1620 | 1621 | /fast-deep-equal@3.1.3: 1622 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1623 | dev: true 1624 | 1625 | /fast-glob@3.2.12: 1626 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1627 | engines: {node: '>=8.6.0'} 1628 | dependencies: 1629 | '@nodelib/fs.stat': 2.0.5 1630 | '@nodelib/fs.walk': 1.2.8 1631 | glob-parent: 5.1.2 1632 | merge2: 1.4.1 1633 | micromatch: 4.0.5 1634 | dev: true 1635 | 1636 | /fast-json-stable-stringify@2.1.0: 1637 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1638 | dev: true 1639 | 1640 | /fast-levenshtein@2.0.6: 1641 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1642 | dev: true 1643 | 1644 | /fastq@1.15.0: 1645 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1646 | dependencies: 1647 | reusify: 1.0.4 1648 | dev: true 1649 | 1650 | /fetch-blob@3.2.0: 1651 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} 1652 | engines: {node: ^12.20 || >= 14.13} 1653 | dependencies: 1654 | node-domexception: 1.0.0 1655 | web-streams-polyfill: 3.2.1 1656 | dev: true 1657 | 1658 | /file-entry-cache@6.0.1: 1659 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1660 | engines: {node: ^10.12.0 || >=12.0.0} 1661 | dependencies: 1662 | flat-cache: 3.0.4 1663 | dev: true 1664 | 1665 | /fill-range@7.0.1: 1666 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1667 | engines: {node: '>=8'} 1668 | dependencies: 1669 | to-regex-range: 5.0.1 1670 | dev: true 1671 | 1672 | /find-up@5.0.0: 1673 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1674 | engines: {node: '>=10'} 1675 | dependencies: 1676 | locate-path: 6.0.0 1677 | path-exists: 4.0.0 1678 | dev: true 1679 | 1680 | /flat-cache@3.0.4: 1681 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1682 | engines: {node: ^10.12.0 || >=12.0.0} 1683 | dependencies: 1684 | flatted: 3.2.7 1685 | rimraf: 3.0.2 1686 | dev: true 1687 | 1688 | /flatted@3.2.7: 1689 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1690 | dev: true 1691 | 1692 | /formdata-polyfill@4.0.10: 1693 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} 1694 | engines: {node: '>=12.20.0'} 1695 | dependencies: 1696 | fetch-blob: 3.2.0 1697 | dev: true 1698 | 1699 | /fraction.js@4.2.0: 1700 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} 1701 | dev: true 1702 | 1703 | /fs.realpath@1.0.0: 1704 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1705 | dev: true 1706 | 1707 | /fsevents@2.3.2: 1708 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1709 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1710 | os: [darwin] 1711 | requiresBuild: true 1712 | dev: true 1713 | optional: true 1714 | 1715 | /function-bind@1.1.1: 1716 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1717 | dev: true 1718 | 1719 | /get-func-name@2.0.0: 1720 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} 1721 | dev: true 1722 | 1723 | /get-stream@6.0.1: 1724 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1725 | engines: {node: '>=10'} 1726 | dev: true 1727 | 1728 | /glob-parent@5.1.2: 1729 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1730 | engines: {node: '>= 6'} 1731 | dependencies: 1732 | is-glob: 4.0.3 1733 | dev: true 1734 | 1735 | /glob-parent@6.0.2: 1736 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1737 | engines: {node: '>=10.13.0'} 1738 | dependencies: 1739 | is-glob: 4.0.3 1740 | dev: true 1741 | 1742 | /glob@7.1.6: 1743 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1744 | dependencies: 1745 | fs.realpath: 1.0.0 1746 | inflight: 1.0.6 1747 | inherits: 2.0.4 1748 | minimatch: 3.1.2 1749 | once: 1.4.0 1750 | path-is-absolute: 1.0.1 1751 | dev: true 1752 | 1753 | /glob@7.2.3: 1754 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1755 | dependencies: 1756 | fs.realpath: 1.0.0 1757 | inflight: 1.0.6 1758 | inherits: 2.0.4 1759 | minimatch: 3.1.2 1760 | once: 1.4.0 1761 | path-is-absolute: 1.0.1 1762 | dev: true 1763 | 1764 | /globals@13.20.0: 1765 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1766 | engines: {node: '>=8'} 1767 | dependencies: 1768 | type-fest: 0.20.2 1769 | dev: true 1770 | 1771 | /globalyzer@0.1.0: 1772 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 1773 | dev: true 1774 | 1775 | /globby@11.1.0: 1776 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1777 | engines: {node: '>=10'} 1778 | dependencies: 1779 | array-union: 2.1.0 1780 | dir-glob: 3.0.1 1781 | fast-glob: 3.2.12 1782 | ignore: 5.2.4 1783 | merge2: 1.4.1 1784 | slash: 3.0.0 1785 | dev: true 1786 | 1787 | /globrex@0.1.2: 1788 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1789 | dev: true 1790 | 1791 | /graceful-fs@4.2.11: 1792 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1793 | dev: true 1794 | 1795 | /grapheme-splitter@1.0.4: 1796 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1797 | dev: true 1798 | 1799 | /has-flag@4.0.0: 1800 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1801 | engines: {node: '>=8'} 1802 | dev: true 1803 | 1804 | /has@1.0.3: 1805 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1806 | engines: {node: '>= 0.4.0'} 1807 | dependencies: 1808 | function-bind: 1.1.1 1809 | dev: true 1810 | 1811 | /html-rewriter-wasm@0.4.1: 1812 | resolution: {integrity: sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==} 1813 | dev: true 1814 | 1815 | /http-cache-semantics@4.1.1: 1816 | resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} 1817 | dev: true 1818 | 1819 | /human-signals@3.0.1: 1820 | resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} 1821 | engines: {node: '>=12.20.0'} 1822 | dev: true 1823 | 1824 | /ignore@5.2.4: 1825 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1826 | engines: {node: '>= 4'} 1827 | dev: true 1828 | 1829 | /import-fresh@3.3.0: 1830 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1831 | engines: {node: '>=6'} 1832 | dependencies: 1833 | parent-module: 1.0.1 1834 | resolve-from: 4.0.0 1835 | dev: true 1836 | 1837 | /import-meta-resolve@3.0.0: 1838 | resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==} 1839 | dev: true 1840 | 1841 | /imurmurhash@0.1.4: 1842 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1843 | engines: {node: '>=0.8.19'} 1844 | dev: true 1845 | 1846 | /inflight@1.0.6: 1847 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1848 | dependencies: 1849 | once: 1.4.0 1850 | wrappy: 1.0.2 1851 | dev: true 1852 | 1853 | /inherits@2.0.4: 1854 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1855 | dev: true 1856 | 1857 | /is-binary-path@2.1.0: 1858 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1859 | engines: {node: '>=8'} 1860 | dependencies: 1861 | binary-extensions: 2.2.0 1862 | dev: true 1863 | 1864 | /is-core-module@2.12.0: 1865 | resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} 1866 | dependencies: 1867 | has: 1.0.3 1868 | dev: true 1869 | 1870 | /is-extglob@2.1.1: 1871 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1872 | engines: {node: '>=0.10.0'} 1873 | dev: true 1874 | 1875 | /is-glob@4.0.3: 1876 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1877 | engines: {node: '>=0.10.0'} 1878 | dependencies: 1879 | is-extglob: 2.1.1 1880 | dev: true 1881 | 1882 | /is-number@7.0.0: 1883 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1884 | engines: {node: '>=0.12.0'} 1885 | dev: true 1886 | 1887 | /is-path-inside@3.0.3: 1888 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1889 | engines: {node: '>=8'} 1890 | dev: true 1891 | 1892 | /is-stream@3.0.0: 1893 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1894 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1895 | dev: true 1896 | 1897 | /isexe@2.0.0: 1898 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1899 | dev: true 1900 | 1901 | /jiti@1.18.2: 1902 | resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} 1903 | hasBin: true 1904 | dev: true 1905 | 1906 | /js-sdsl@4.4.0: 1907 | resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} 1908 | dev: true 1909 | 1910 | /js-yaml@4.1.0: 1911 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1912 | hasBin: true 1913 | dependencies: 1914 | argparse: 2.0.1 1915 | dev: true 1916 | 1917 | /json-schema-traverse@0.4.1: 1918 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1919 | dev: true 1920 | 1921 | /json-stable-stringify-without-jsonify@1.0.1: 1922 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1923 | dev: true 1924 | 1925 | /kleur@4.1.5: 1926 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1927 | engines: {node: '>=6'} 1928 | dev: true 1929 | 1930 | /known-css-properties@0.27.0: 1931 | resolution: {integrity: sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==} 1932 | dev: true 1933 | 1934 | /levn@0.4.1: 1935 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1936 | engines: {node: '>= 0.8.0'} 1937 | dependencies: 1938 | prelude-ls: 1.2.1 1939 | type-check: 0.4.0 1940 | dev: true 1941 | 1942 | /lilconfig@2.1.0: 1943 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1944 | engines: {node: '>=10'} 1945 | dev: true 1946 | 1947 | /lines-and-columns@1.2.4: 1948 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1949 | dev: true 1950 | 1951 | /local-pkg@0.4.3: 1952 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} 1953 | engines: {node: '>=14'} 1954 | dev: true 1955 | 1956 | /locate-path@6.0.0: 1957 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1958 | engines: {node: '>=10'} 1959 | dependencies: 1960 | p-locate: 5.0.0 1961 | dev: true 1962 | 1963 | /lodash.merge@4.6.2: 1964 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1965 | dev: true 1966 | 1967 | /loupe@2.3.6: 1968 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} 1969 | dependencies: 1970 | get-func-name: 2.0.0 1971 | dev: true 1972 | 1973 | /lru-cache@6.0.0: 1974 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1975 | engines: {node: '>=10'} 1976 | dependencies: 1977 | yallist: 4.0.0 1978 | dev: true 1979 | 1980 | /magic-string@0.25.9: 1981 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1982 | dependencies: 1983 | sourcemap-codec: 1.4.8 1984 | dev: true 1985 | 1986 | /magic-string@0.27.0: 1987 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 1988 | engines: {node: '>=12'} 1989 | dependencies: 1990 | '@jridgewell/sourcemap-codec': 1.4.15 1991 | dev: true 1992 | 1993 | /magic-string@0.30.0: 1994 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} 1995 | engines: {node: '>=12'} 1996 | dependencies: 1997 | '@jridgewell/sourcemap-codec': 1.4.15 1998 | dev: true 1999 | 2000 | /merge-stream@2.0.0: 2001 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 2002 | dev: true 2003 | 2004 | /merge2@1.4.1: 2005 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2006 | engines: {node: '>= 8'} 2007 | dev: true 2008 | 2009 | /micromatch@4.0.5: 2010 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2011 | engines: {node: '>=8.6'} 2012 | dependencies: 2013 | braces: 3.0.2 2014 | picomatch: 2.3.1 2015 | dev: true 2016 | 2017 | /mime@3.0.0: 2018 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 2019 | engines: {node: '>=10.0.0'} 2020 | hasBin: true 2021 | dev: true 2022 | 2023 | /mimic-fn@4.0.0: 2024 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 2025 | engines: {node: '>=12'} 2026 | dev: true 2027 | 2028 | /min-indent@1.0.1: 2029 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 2030 | engines: {node: '>=4'} 2031 | dev: true 2032 | 2033 | /miniflare@2.13.0: 2034 | resolution: {integrity: sha512-ayNhVa4a6bZiOuHtrPmOt4BCYcmW1fBQ/+qGL85smq1m2OBBm3aUs6f4ISf38xH8tk+qewgmAywetyVtn6KHPw==} 2035 | engines: {node: '>=16.13'} 2036 | hasBin: true 2037 | peerDependencies: 2038 | '@miniflare/storage-redis': 2.13.0 2039 | cron-schedule: ^3.0.4 2040 | ioredis: ^4.27.9 2041 | peerDependenciesMeta: 2042 | '@miniflare/storage-redis': 2043 | optional: true 2044 | cron-schedule: 2045 | optional: true 2046 | ioredis: 2047 | optional: true 2048 | dependencies: 2049 | '@miniflare/cache': 2.13.0 2050 | '@miniflare/cli-parser': 2.13.0 2051 | '@miniflare/core': 2.13.0 2052 | '@miniflare/d1': 2.13.0 2053 | '@miniflare/durable-objects': 2.13.0 2054 | '@miniflare/html-rewriter': 2.13.0 2055 | '@miniflare/http-server': 2.13.0 2056 | '@miniflare/kv': 2.13.0 2057 | '@miniflare/queues': 2.13.0 2058 | '@miniflare/r2': 2.13.0 2059 | '@miniflare/runner-vm': 2.13.0 2060 | '@miniflare/scheduler': 2.13.0 2061 | '@miniflare/shared': 2.13.0 2062 | '@miniflare/sites': 2.13.0 2063 | '@miniflare/storage-file': 2.13.0 2064 | '@miniflare/storage-memory': 2.13.0 2065 | '@miniflare/web-sockets': 2.13.0 2066 | kleur: 4.1.5 2067 | semiver: 1.1.0 2068 | source-map-support: 0.5.21 2069 | undici: 5.20.0 2070 | transitivePeerDependencies: 2071 | - bufferutil 2072 | - utf-8-validate 2073 | dev: true 2074 | 2075 | /minimatch@3.1.2: 2076 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2077 | dependencies: 2078 | brace-expansion: 1.1.11 2079 | dev: true 2080 | 2081 | /minimist@1.2.8: 2082 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2083 | dev: true 2084 | 2085 | /mkdirp@0.5.6: 2086 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 2087 | hasBin: true 2088 | dependencies: 2089 | minimist: 1.2.8 2090 | dev: true 2091 | 2092 | /mri@1.2.0: 2093 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 2094 | engines: {node: '>=4'} 2095 | dev: true 2096 | 2097 | /mrmime@1.0.1: 2098 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 2099 | engines: {node: '>=10'} 2100 | dev: true 2101 | 2102 | /ms@2.1.2: 2103 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2104 | dev: true 2105 | 2106 | /mustache@4.2.0: 2107 | resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} 2108 | hasBin: true 2109 | dev: true 2110 | 2111 | /mz@2.7.0: 2112 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 2113 | dependencies: 2114 | any-promise: 1.3.0 2115 | object-assign: 4.1.1 2116 | thenify-all: 1.6.0 2117 | dev: true 2118 | 2119 | /nanoid@3.3.6: 2120 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2121 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2122 | hasBin: true 2123 | dev: true 2124 | 2125 | /natural-compare-lite@1.4.0: 2126 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 2127 | dev: true 2128 | 2129 | /natural-compare@1.4.0: 2130 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2131 | dev: true 2132 | 2133 | /node-domexception@1.0.0: 2134 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 2135 | engines: {node: '>=10.5.0'} 2136 | dev: true 2137 | 2138 | /node-fetch@3.3.1: 2139 | resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} 2140 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2141 | dependencies: 2142 | data-uri-to-buffer: 4.0.1 2143 | fetch-blob: 3.2.0 2144 | formdata-polyfill: 4.0.10 2145 | dev: true 2146 | 2147 | /node-forge@1.3.1: 2148 | resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} 2149 | engines: {node: '>= 6.13.0'} 2150 | dev: true 2151 | 2152 | /node-releases@2.0.10: 2153 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 2154 | dev: true 2155 | 2156 | /normalize-path@3.0.0: 2157 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2158 | engines: {node: '>=0.10.0'} 2159 | dev: true 2160 | 2161 | /normalize-range@0.1.2: 2162 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 2163 | engines: {node: '>=0.10.0'} 2164 | dev: true 2165 | 2166 | /npm-run-path@5.1.0: 2167 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} 2168 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2169 | dependencies: 2170 | path-key: 4.0.0 2171 | dev: true 2172 | 2173 | /npx-import@1.1.4: 2174 | resolution: {integrity: sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==} 2175 | dependencies: 2176 | execa: 6.1.0 2177 | parse-package-name: 1.0.0 2178 | semver: 7.5.0 2179 | validate-npm-package-name: 4.0.0 2180 | dev: true 2181 | 2182 | /object-assign@4.1.1: 2183 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2184 | engines: {node: '>=0.10.0'} 2185 | dev: true 2186 | 2187 | /object-hash@3.0.0: 2188 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 2189 | engines: {node: '>= 6'} 2190 | dev: true 2191 | 2192 | /once@1.4.0: 2193 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2194 | dependencies: 2195 | wrappy: 1.0.2 2196 | dev: true 2197 | 2198 | /onetime@6.0.0: 2199 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2200 | engines: {node: '>=12'} 2201 | dependencies: 2202 | mimic-fn: 4.0.0 2203 | dev: true 2204 | 2205 | /optionator@0.9.1: 2206 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 2207 | engines: {node: '>= 0.8.0'} 2208 | dependencies: 2209 | deep-is: 0.1.4 2210 | fast-levenshtein: 2.0.6 2211 | levn: 0.4.1 2212 | prelude-ls: 1.2.1 2213 | type-check: 0.4.0 2214 | word-wrap: 1.2.3 2215 | dev: true 2216 | 2217 | /p-limit@3.1.0: 2218 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2219 | engines: {node: '>=10'} 2220 | dependencies: 2221 | yocto-queue: 0.1.0 2222 | dev: true 2223 | 2224 | /p-locate@5.0.0: 2225 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2226 | engines: {node: '>=10'} 2227 | dependencies: 2228 | p-limit: 3.1.0 2229 | dev: true 2230 | 2231 | /parent-module@1.0.1: 2232 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2233 | engines: {node: '>=6'} 2234 | dependencies: 2235 | callsites: 3.1.0 2236 | dev: true 2237 | 2238 | /parse-package-name@1.0.0: 2239 | resolution: {integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==} 2240 | dev: true 2241 | 2242 | /path-exists@4.0.0: 2243 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2244 | engines: {node: '>=8'} 2245 | dev: true 2246 | 2247 | /path-is-absolute@1.0.1: 2248 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2249 | engines: {node: '>=0.10.0'} 2250 | dev: true 2251 | 2252 | /path-key@3.1.1: 2253 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2254 | engines: {node: '>=8'} 2255 | dev: true 2256 | 2257 | /path-key@4.0.0: 2258 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2259 | engines: {node: '>=12'} 2260 | dev: true 2261 | 2262 | /path-parse@1.0.7: 2263 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2264 | dev: true 2265 | 2266 | /path-to-regexp@6.2.1: 2267 | resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} 2268 | dev: true 2269 | 2270 | /path-type@4.0.0: 2271 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2272 | engines: {node: '>=8'} 2273 | dev: true 2274 | 2275 | /pathval@1.1.1: 2276 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 2277 | dev: true 2278 | 2279 | /picocolors@1.0.0: 2280 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2281 | dev: true 2282 | 2283 | /picomatch@2.3.1: 2284 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2285 | engines: {node: '>=8.6'} 2286 | dev: true 2287 | 2288 | /pify@2.3.0: 2289 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2290 | engines: {node: '>=0.10.0'} 2291 | dev: true 2292 | 2293 | /pirates@4.0.5: 2294 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 2295 | engines: {node: '>= 6'} 2296 | dev: true 2297 | 2298 | /playwright-core@1.33.0: 2299 | resolution: {integrity: sha512-aizyPE1Cj62vAECdph1iaMILpT0WUDCq3E6rW6I+dleSbBoGbktvJtzS6VHkZ4DKNEOG9qJpiom/ZxO+S15LAw==} 2300 | engines: {node: '>=14'} 2301 | hasBin: true 2302 | dev: true 2303 | 2304 | /postcss-import@15.1.0(postcss@8.4.23): 2305 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2306 | engines: {node: '>=14.0.0'} 2307 | peerDependencies: 2308 | postcss: ^8.0.0 2309 | dependencies: 2310 | postcss: 8.4.23 2311 | postcss-value-parser: 4.2.0 2312 | read-cache: 1.0.0 2313 | resolve: 1.22.2 2314 | dev: true 2315 | 2316 | /postcss-js@4.0.1(postcss@8.4.23): 2317 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2318 | engines: {node: ^12 || ^14 || >= 16} 2319 | peerDependencies: 2320 | postcss: ^8.4.21 2321 | dependencies: 2322 | camelcase-css: 2.0.1 2323 | postcss: 8.4.23 2324 | dev: true 2325 | 2326 | /postcss-load-config@3.1.4(postcss@8.4.23): 2327 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 2328 | engines: {node: '>= 10'} 2329 | peerDependencies: 2330 | postcss: '>=8.0.9' 2331 | ts-node: '>=9.0.0' 2332 | peerDependenciesMeta: 2333 | postcss: 2334 | optional: true 2335 | ts-node: 2336 | optional: true 2337 | dependencies: 2338 | lilconfig: 2.1.0 2339 | postcss: 8.4.23 2340 | yaml: 1.10.2 2341 | dev: true 2342 | 2343 | /postcss-load-config@4.0.1(postcss@8.4.23): 2344 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 2345 | engines: {node: '>= 14'} 2346 | peerDependencies: 2347 | postcss: '>=8.0.9' 2348 | ts-node: '>=9.0.0' 2349 | peerDependenciesMeta: 2350 | postcss: 2351 | optional: true 2352 | ts-node: 2353 | optional: true 2354 | dependencies: 2355 | lilconfig: 2.1.0 2356 | postcss: 8.4.23 2357 | yaml: 2.2.2 2358 | dev: true 2359 | 2360 | /postcss-nested@6.0.1(postcss@8.4.23): 2361 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2362 | engines: {node: '>=12.0'} 2363 | peerDependencies: 2364 | postcss: ^8.2.14 2365 | dependencies: 2366 | postcss: 8.4.23 2367 | postcss-selector-parser: 6.0.12 2368 | dev: true 2369 | 2370 | /postcss-safe-parser@6.0.0(postcss@8.4.23): 2371 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} 2372 | engines: {node: '>=12.0'} 2373 | peerDependencies: 2374 | postcss: ^8.3.3 2375 | dependencies: 2376 | postcss: 8.4.23 2377 | dev: true 2378 | 2379 | /postcss-selector-parser@6.0.12: 2380 | resolution: {integrity: sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==} 2381 | engines: {node: '>=4'} 2382 | dependencies: 2383 | cssesc: 3.0.0 2384 | util-deprecate: 1.0.2 2385 | dev: true 2386 | 2387 | /postcss-value-parser@4.2.0: 2388 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2389 | dev: true 2390 | 2391 | /postcss@8.4.23: 2392 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} 2393 | engines: {node: ^10 || ^12 || >=14} 2394 | dependencies: 2395 | nanoid: 3.3.6 2396 | picocolors: 1.0.0 2397 | source-map-js: 1.0.2 2398 | dev: true 2399 | 2400 | /prelude-ls@1.2.1: 2401 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2402 | engines: {node: '>= 0.8.0'} 2403 | dev: true 2404 | 2405 | /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.59.0): 2406 | resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} 2407 | peerDependencies: 2408 | prettier: ^1.16.4 || ^2.0.0 2409 | svelte: ^3.2.0 2410 | dependencies: 2411 | prettier: 2.8.8 2412 | svelte: 3.59.0 2413 | dev: true 2414 | 2415 | /prettier@2.8.8: 2416 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 2417 | engines: {node: '>=10.13.0'} 2418 | hasBin: true 2419 | dev: true 2420 | 2421 | /punycode@2.3.0: 2422 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2423 | engines: {node: '>=6'} 2424 | dev: true 2425 | 2426 | /queue-microtask@1.2.3: 2427 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2428 | dev: true 2429 | 2430 | /read-cache@1.0.0: 2431 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2432 | dependencies: 2433 | pify: 2.3.0 2434 | dev: true 2435 | 2436 | /readdirp@3.6.0: 2437 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2438 | engines: {node: '>=8.10.0'} 2439 | dependencies: 2440 | picomatch: 2.3.1 2441 | dev: true 2442 | 2443 | /regexparam@2.0.1: 2444 | resolution: {integrity: sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw==} 2445 | engines: {node: '>=8'} 2446 | dev: true 2447 | 2448 | /resolve-from@4.0.0: 2449 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2450 | engines: {node: '>=4'} 2451 | dev: true 2452 | 2453 | /resolve@1.22.2: 2454 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2455 | hasBin: true 2456 | dependencies: 2457 | is-core-module: 2.12.0 2458 | path-parse: 1.0.7 2459 | supports-preserve-symlinks-flag: 1.0.0 2460 | dev: true 2461 | 2462 | /reusify@1.0.4: 2463 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2464 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2465 | dev: true 2466 | 2467 | /rimraf@2.7.1: 2468 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 2469 | hasBin: true 2470 | dependencies: 2471 | glob: 7.2.3 2472 | dev: true 2473 | 2474 | /rimraf@3.0.2: 2475 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2476 | hasBin: true 2477 | dependencies: 2478 | glob: 7.2.3 2479 | dev: true 2480 | 2481 | /rollup-plugin-inject@3.0.2: 2482 | resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} 2483 | deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. 2484 | dependencies: 2485 | estree-walker: 0.6.1 2486 | magic-string: 0.25.9 2487 | rollup-pluginutils: 2.8.2 2488 | dev: true 2489 | 2490 | /rollup-plugin-node-polyfills@0.2.1: 2491 | resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} 2492 | dependencies: 2493 | rollup-plugin-inject: 3.0.2 2494 | dev: true 2495 | 2496 | /rollup-pluginutils@2.8.2: 2497 | resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} 2498 | dependencies: 2499 | estree-walker: 0.6.1 2500 | dev: true 2501 | 2502 | /rollup@3.21.5: 2503 | resolution: {integrity: sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==} 2504 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2505 | hasBin: true 2506 | optionalDependencies: 2507 | fsevents: 2.3.2 2508 | dev: true 2509 | 2510 | /run-parallel@1.2.0: 2511 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2512 | dependencies: 2513 | queue-microtask: 1.2.3 2514 | dev: true 2515 | 2516 | /sade@1.8.1: 2517 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2518 | engines: {node: '>=6'} 2519 | dependencies: 2520 | mri: 1.2.0 2521 | dev: true 2522 | 2523 | /sander@0.5.1: 2524 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 2525 | dependencies: 2526 | es6-promise: 3.3.1 2527 | graceful-fs: 4.2.11 2528 | mkdirp: 0.5.6 2529 | rimraf: 2.7.1 2530 | dev: true 2531 | 2532 | /selfsigned@2.1.1: 2533 | resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} 2534 | engines: {node: '>=10'} 2535 | dependencies: 2536 | node-forge: 1.3.1 2537 | dev: true 2538 | 2539 | /semiver@1.1.0: 2540 | resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} 2541 | engines: {node: '>=6'} 2542 | dev: true 2543 | 2544 | /semver@7.5.0: 2545 | resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} 2546 | engines: {node: '>=10'} 2547 | hasBin: true 2548 | dependencies: 2549 | lru-cache: 6.0.0 2550 | dev: true 2551 | 2552 | /set-cookie-parser@2.6.0: 2553 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} 2554 | dev: true 2555 | 2556 | /shebang-command@2.0.0: 2557 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2558 | engines: {node: '>=8'} 2559 | dependencies: 2560 | shebang-regex: 3.0.0 2561 | dev: true 2562 | 2563 | /shebang-regex@3.0.0: 2564 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2565 | engines: {node: '>=8'} 2566 | dev: true 2567 | 2568 | /signal-exit@3.0.7: 2569 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2570 | dev: true 2571 | 2572 | /sirv@2.0.3: 2573 | resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} 2574 | engines: {node: '>= 10'} 2575 | dependencies: 2576 | '@polka/url': 1.0.0-next.21 2577 | mrmime: 1.0.1 2578 | totalist: 3.0.1 2579 | dev: true 2580 | 2581 | /slash@3.0.0: 2582 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2583 | engines: {node: '>=8'} 2584 | dev: true 2585 | 2586 | /sorcery@0.11.0: 2587 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} 2588 | hasBin: true 2589 | dependencies: 2590 | '@jridgewell/sourcemap-codec': 1.4.15 2591 | buffer-crc32: 0.2.13 2592 | minimist: 1.2.8 2593 | sander: 0.5.1 2594 | dev: true 2595 | 2596 | /source-map-js@1.0.2: 2597 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2598 | engines: {node: '>=0.10.0'} 2599 | dev: true 2600 | 2601 | /source-map-support@0.5.21: 2602 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 2603 | dependencies: 2604 | buffer-from: 1.1.2 2605 | source-map: 0.6.1 2606 | dev: true 2607 | 2608 | /source-map@0.6.1: 2609 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2610 | engines: {node: '>=0.10.0'} 2611 | dev: true 2612 | 2613 | /source-map@0.7.4: 2614 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 2615 | engines: {node: '>= 8'} 2616 | dev: true 2617 | 2618 | /sourcemap-codec@1.4.8: 2619 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 2620 | deprecated: Please use @jridgewell/sourcemap-codec instead 2621 | dev: true 2622 | 2623 | /stack-trace@0.0.10: 2624 | resolution: {integrity: sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=} 2625 | dev: true 2626 | 2627 | /streamsearch@1.1.0: 2628 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2629 | engines: {node: '>=10.0.0'} 2630 | dev: true 2631 | 2632 | /strip-ansi@6.0.1: 2633 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2634 | engines: {node: '>=8'} 2635 | dependencies: 2636 | ansi-regex: 5.0.1 2637 | dev: true 2638 | 2639 | /strip-final-newline@3.0.0: 2640 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2641 | engines: {node: '>=12'} 2642 | dev: true 2643 | 2644 | /strip-indent@3.0.0: 2645 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 2646 | engines: {node: '>=8'} 2647 | dependencies: 2648 | min-indent: 1.0.1 2649 | dev: true 2650 | 2651 | /strip-json-comments@3.1.1: 2652 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2653 | engines: {node: '>=8'} 2654 | dev: true 2655 | 2656 | /strip-literal@1.0.1: 2657 | resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} 2658 | dependencies: 2659 | acorn: 8.8.2 2660 | dev: true 2661 | 2662 | /sucrase@3.32.0: 2663 | resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} 2664 | engines: {node: '>=8'} 2665 | hasBin: true 2666 | dependencies: 2667 | '@jridgewell/gen-mapping': 0.3.3 2668 | commander: 4.1.1 2669 | glob: 7.1.6 2670 | lines-and-columns: 1.2.4 2671 | mz: 2.7.0 2672 | pirates: 4.0.5 2673 | ts-interface-checker: 0.1.13 2674 | dev: true 2675 | 2676 | /supports-color@7.2.0: 2677 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2678 | engines: {node: '>=8'} 2679 | dependencies: 2680 | has-flag: 4.0.0 2681 | dev: true 2682 | 2683 | /supports-preserve-symlinks-flag@1.0.0: 2684 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2685 | engines: {node: '>= 0.4'} 2686 | dev: true 2687 | 2688 | /svelte-check@3.3.1(postcss@8.4.23)(svelte@3.59.0): 2689 | resolution: {integrity: sha512-+Yb1F50M76JRPdZlxB8/blg75GiqKH/8QJTNtC3cKvxCbrRK7zpgmOg2oxem9n4eDAIllesm74guR3AnlAtNVg==} 2690 | hasBin: true 2691 | peerDependencies: 2692 | svelte: ^3.55.0 2693 | dependencies: 2694 | '@jridgewell/trace-mapping': 0.3.18 2695 | chokidar: 3.5.3 2696 | fast-glob: 3.2.12 2697 | import-fresh: 3.3.0 2698 | picocolors: 1.0.0 2699 | sade: 1.8.1 2700 | svelte: 3.59.0 2701 | svelte-preprocess: 5.0.3(postcss@8.4.23)(svelte@3.59.0)(typescript@5.0.4) 2702 | typescript: 5.0.4 2703 | transitivePeerDependencies: 2704 | - '@babel/core' 2705 | - coffeescript 2706 | - less 2707 | - postcss 2708 | - postcss-load-config 2709 | - pug 2710 | - sass 2711 | - stylus 2712 | - sugarss 2713 | dev: true 2714 | 2715 | /svelte-eslint-parser@0.27.0(svelte@3.59.0): 2716 | resolution: {integrity: sha512-x9cBbCZwLdCnNE3yPqGhvAqEl9FCILC6AaV2xRtwzaMCpvpqO7ceONXj9xka3fQFczSqLzkwOxP4Ln4cIQNqXg==} 2717 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2718 | peerDependencies: 2719 | svelte: ^3.37.0 2720 | peerDependenciesMeta: 2721 | svelte: 2722 | optional: true 2723 | dependencies: 2724 | eslint-scope: 7.2.0 2725 | eslint-visitor-keys: 3.4.0 2726 | espree: 9.5.1 2727 | svelte: 3.59.0 2728 | dev: true 2729 | 2730 | /svelte-hmr@0.15.1(svelte@3.59.0): 2731 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} 2732 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 2733 | peerDependencies: 2734 | svelte: '>=3.19.0' 2735 | dependencies: 2736 | svelte: 3.59.0 2737 | dev: true 2738 | 2739 | /svelte-preprocess@5.0.3(postcss@8.4.23)(svelte@3.59.0)(typescript@5.0.4): 2740 | resolution: {integrity: sha512-GrHF1rusdJVbOZOwgPWtpqmaexkydznKzy5qIC2FabgpFyKN57bjMUUUqPRfbBXK5igiEWn1uO/DXsa2vJ5VHA==} 2741 | engines: {node: '>= 14.10.0'} 2742 | requiresBuild: true 2743 | peerDependencies: 2744 | '@babel/core': ^7.10.2 2745 | coffeescript: ^2.5.1 2746 | less: ^3.11.3 || ^4.0.0 2747 | postcss: ^7 || ^8 2748 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 2749 | pug: ^3.0.0 2750 | sass: ^1.26.8 2751 | stylus: ^0.55.0 2752 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 2753 | svelte: ^3.23.0 2754 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' 2755 | peerDependenciesMeta: 2756 | '@babel/core': 2757 | optional: true 2758 | coffeescript: 2759 | optional: true 2760 | less: 2761 | optional: true 2762 | postcss: 2763 | optional: true 2764 | postcss-load-config: 2765 | optional: true 2766 | pug: 2767 | optional: true 2768 | sass: 2769 | optional: true 2770 | stylus: 2771 | optional: true 2772 | sugarss: 2773 | optional: true 2774 | typescript: 2775 | optional: true 2776 | dependencies: 2777 | '@types/pug': 2.0.6 2778 | detect-indent: 6.1.0 2779 | magic-string: 0.27.0 2780 | postcss: 8.4.23 2781 | sorcery: 0.11.0 2782 | strip-indent: 3.0.0 2783 | svelte: 3.59.0 2784 | typescript: 5.0.4 2785 | dev: true 2786 | 2787 | /svelte@3.59.0: 2788 | resolution: {integrity: sha512-Di1wVPwdWriw5pSyInMRpr5EZmwrzKxtDKv5aXu8A/WDUi59Y5bIvl42eLef0x1vwz+ZtrjdnT8nXir2bDqR/A==} 2789 | engines: {node: '>= 8'} 2790 | dev: true 2791 | 2792 | /tailwindcss@3.3.2: 2793 | resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} 2794 | engines: {node: '>=14.0.0'} 2795 | hasBin: true 2796 | dependencies: 2797 | '@alloc/quick-lru': 5.2.0 2798 | arg: 5.0.2 2799 | chokidar: 3.5.3 2800 | didyoumean: 1.2.2 2801 | dlv: 1.1.3 2802 | fast-glob: 3.2.12 2803 | glob-parent: 6.0.2 2804 | is-glob: 4.0.3 2805 | jiti: 1.18.2 2806 | lilconfig: 2.1.0 2807 | micromatch: 4.0.5 2808 | normalize-path: 3.0.0 2809 | object-hash: 3.0.0 2810 | picocolors: 1.0.0 2811 | postcss: 8.4.23 2812 | postcss-import: 15.1.0(postcss@8.4.23) 2813 | postcss-js: 4.0.1(postcss@8.4.23) 2814 | postcss-load-config: 4.0.1(postcss@8.4.23) 2815 | postcss-nested: 6.0.1(postcss@8.4.23) 2816 | postcss-selector-parser: 6.0.12 2817 | postcss-value-parser: 4.2.0 2818 | resolve: 1.22.2 2819 | sucrase: 3.32.0 2820 | transitivePeerDependencies: 2821 | - ts-node 2822 | dev: true 2823 | 2824 | /text-table@0.2.0: 2825 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2826 | dev: true 2827 | 2828 | /thenify-all@1.6.0: 2829 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2830 | engines: {node: '>=0.8'} 2831 | dependencies: 2832 | thenify: 3.3.1 2833 | dev: true 2834 | 2835 | /thenify@3.3.1: 2836 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2837 | dependencies: 2838 | any-promise: 1.3.0 2839 | dev: true 2840 | 2841 | /tiny-glob@0.2.9: 2842 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 2843 | dependencies: 2844 | globalyzer: 0.1.0 2845 | globrex: 0.1.2 2846 | dev: true 2847 | 2848 | /tinybench@2.5.0: 2849 | resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} 2850 | dev: true 2851 | 2852 | /tinypool@0.3.1: 2853 | resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} 2854 | engines: {node: '>=14.0.0'} 2855 | dev: true 2856 | 2857 | /tinyspy@1.1.1: 2858 | resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} 2859 | engines: {node: '>=14.0.0'} 2860 | dev: true 2861 | 2862 | /to-regex-range@5.0.1: 2863 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2864 | engines: {node: '>=8.0'} 2865 | dependencies: 2866 | is-number: 7.0.0 2867 | dev: true 2868 | 2869 | /totalist@3.0.1: 2870 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 2871 | engines: {node: '>=6'} 2872 | dev: true 2873 | 2874 | /ts-interface-checker@0.1.13: 2875 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2876 | dev: true 2877 | 2878 | /tslib@1.14.1: 2879 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2880 | dev: true 2881 | 2882 | /tslib@2.5.0: 2883 | resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} 2884 | dev: true 2885 | 2886 | /tsutils@3.21.0(typescript@5.0.4): 2887 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2888 | engines: {node: '>= 6'} 2889 | peerDependencies: 2890 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2891 | dependencies: 2892 | tslib: 1.14.1 2893 | typescript: 5.0.4 2894 | dev: true 2895 | 2896 | /type-check@0.4.0: 2897 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2898 | engines: {node: '>= 0.8.0'} 2899 | dependencies: 2900 | prelude-ls: 1.2.1 2901 | dev: true 2902 | 2903 | /type-detect@4.0.8: 2904 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 2905 | engines: {node: '>=4'} 2906 | dev: true 2907 | 2908 | /type-fest@0.20.2: 2909 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2910 | engines: {node: '>=10'} 2911 | dev: true 2912 | 2913 | /typescript@5.0.4: 2914 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} 2915 | engines: {node: '>=12.20'} 2916 | hasBin: true 2917 | dev: true 2918 | 2919 | /undici@5.20.0: 2920 | resolution: {integrity: sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==} 2921 | engines: {node: '>=12.18'} 2922 | dependencies: 2923 | busboy: 1.6.0 2924 | dev: true 2925 | 2926 | /undici@5.22.0: 2927 | resolution: {integrity: sha512-fR9RXCc+6Dxav4P9VV/sp5w3eFiSdOjJYsbtWfd4s5L5C4ogyuVpdKIVHeW0vV1MloM65/f7W45nR9ZxwVdyiA==} 2928 | engines: {node: '>=14.0'} 2929 | dependencies: 2930 | busboy: 1.6.0 2931 | dev: true 2932 | 2933 | /update-browserslist-db@1.0.11(browserslist@4.21.5): 2934 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2935 | hasBin: true 2936 | peerDependencies: 2937 | browserslist: '>= 4.21.0' 2938 | dependencies: 2939 | browserslist: 4.21.5 2940 | escalade: 3.1.1 2941 | picocolors: 1.0.0 2942 | dev: true 2943 | 2944 | /uri-js@4.4.1: 2945 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2946 | dependencies: 2947 | punycode: 2.3.0 2948 | dev: true 2949 | 2950 | /urlpattern-polyfill@4.0.3: 2951 | resolution: {integrity: sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==} 2952 | dev: true 2953 | 2954 | /util-deprecate@1.0.2: 2955 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2956 | dev: true 2957 | 2958 | /validate-npm-package-name@4.0.0: 2959 | resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==} 2960 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2961 | dependencies: 2962 | builtins: 5.0.1 2963 | dev: true 2964 | 2965 | /vite@4.3.5(@types/node@20.0.0): 2966 | resolution: {integrity: sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==} 2967 | engines: {node: ^14.18.0 || >=16.0.0} 2968 | hasBin: true 2969 | peerDependencies: 2970 | '@types/node': '>= 14' 2971 | less: '*' 2972 | sass: '*' 2973 | stylus: '*' 2974 | sugarss: '*' 2975 | terser: ^5.4.0 2976 | peerDependenciesMeta: 2977 | '@types/node': 2978 | optional: true 2979 | less: 2980 | optional: true 2981 | sass: 2982 | optional: true 2983 | stylus: 2984 | optional: true 2985 | sugarss: 2986 | optional: true 2987 | terser: 2988 | optional: true 2989 | dependencies: 2990 | '@types/node': 20.0.0 2991 | esbuild: 0.17.18 2992 | postcss: 8.4.23 2993 | rollup: 3.21.5 2994 | optionalDependencies: 2995 | fsevents: 2.3.2 2996 | dev: true 2997 | 2998 | /vitefu@0.2.4(vite@4.3.5): 2999 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} 3000 | peerDependencies: 3001 | vite: ^3.0.0 || ^4.0.0 3002 | peerDependenciesMeta: 3003 | vite: 3004 | optional: true 3005 | dependencies: 3006 | vite: 4.3.5(@types/node@20.0.0) 3007 | dev: true 3008 | 3009 | /vitest@0.25.8: 3010 | resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==} 3011 | engines: {node: '>=v14.16.0'} 3012 | hasBin: true 3013 | peerDependencies: 3014 | '@edge-runtime/vm': '*' 3015 | '@vitest/browser': '*' 3016 | '@vitest/ui': '*' 3017 | happy-dom: '*' 3018 | jsdom: '*' 3019 | peerDependenciesMeta: 3020 | '@edge-runtime/vm': 3021 | optional: true 3022 | '@vitest/browser': 3023 | optional: true 3024 | '@vitest/ui': 3025 | optional: true 3026 | happy-dom: 3027 | optional: true 3028 | jsdom: 3029 | optional: true 3030 | dependencies: 3031 | '@types/chai': 4.3.5 3032 | '@types/chai-subset': 1.3.3 3033 | '@types/node': 20.0.0 3034 | acorn: 8.8.2 3035 | acorn-walk: 8.2.0 3036 | chai: 4.3.7 3037 | debug: 4.3.4 3038 | local-pkg: 0.4.3 3039 | source-map: 0.6.1 3040 | strip-literal: 1.0.1 3041 | tinybench: 2.5.0 3042 | tinypool: 0.3.1 3043 | tinyspy: 1.1.1 3044 | vite: 4.3.5(@types/node@20.0.0) 3045 | transitivePeerDependencies: 3046 | - less 3047 | - sass 3048 | - stylus 3049 | - sugarss 3050 | - supports-color 3051 | - terser 3052 | dev: true 3053 | 3054 | /web-streams-polyfill@3.2.1: 3055 | resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} 3056 | engines: {node: '>= 8'} 3057 | dev: true 3058 | 3059 | /which@2.0.2: 3060 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3061 | engines: {node: '>= 8'} 3062 | hasBin: true 3063 | dependencies: 3064 | isexe: 2.0.0 3065 | dev: true 3066 | 3067 | /word-wrap@1.2.3: 3068 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 3069 | engines: {node: '>=0.10.0'} 3070 | dev: true 3071 | 3072 | /worktop@0.8.0-next.15: 3073 | resolution: {integrity: sha512-0ycNO52P6nVwsjr1y20zuf0nqJatAb8L7MODBfQIxbxndHV5O4s50oZZMHWhJG1RLpHwbK0Epq8aaQK4E2GlgQ==} 3074 | engines: {node: '>=12'} 3075 | dependencies: 3076 | mrmime: 1.0.1 3077 | regexparam: 2.0.1 3078 | dev: true 3079 | 3080 | /wrangler@2.19.0: 3081 | resolution: {integrity: sha512-/XykXkD7dtvBMWq2p84V/aHhkifZA15+HBD7nm/pV62s6MJrJ+DWd1QJB7CF2D7DqknBLxdWpmmZB6YCo0BtMw==} 3082 | engines: {node: '>=16.13.0'} 3083 | hasBin: true 3084 | dependencies: 3085 | '@cloudflare/kv-asset-handler': 0.2.0 3086 | '@esbuild-plugins/node-globals-polyfill': 0.1.1(esbuild@0.16.3) 3087 | '@esbuild-plugins/node-modules-polyfill': 0.1.4(esbuild@0.16.3) 3088 | '@miniflare/core': 2.13.0 3089 | '@miniflare/d1': 2.13.0 3090 | '@miniflare/durable-objects': 2.13.0 3091 | blake3-wasm: 2.1.5 3092 | chokidar: 3.5.3 3093 | esbuild: 0.16.3 3094 | miniflare: 2.13.0 3095 | nanoid: 3.3.6 3096 | path-to-regexp: 6.2.1 3097 | selfsigned: 2.1.1 3098 | source-map: 0.7.4 3099 | xxhash-wasm: 1.0.2 3100 | optionalDependencies: 3101 | fsevents: 2.3.2 3102 | transitivePeerDependencies: 3103 | - '@miniflare/storage-redis' 3104 | - bufferutil 3105 | - cron-schedule 3106 | - ioredis 3107 | - utf-8-validate 3108 | dev: true 3109 | 3110 | /wrappy@1.0.2: 3111 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3112 | dev: true 3113 | 3114 | /ws@8.13.0: 3115 | resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} 3116 | engines: {node: '>=10.0.0'} 3117 | peerDependencies: 3118 | bufferutil: ^4.0.1 3119 | utf-8-validate: '>=5.0.2' 3120 | peerDependenciesMeta: 3121 | bufferutil: 3122 | optional: true 3123 | utf-8-validate: 3124 | optional: true 3125 | dev: true 3126 | 3127 | /xxhash-wasm@1.0.2: 3128 | resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} 3129 | dev: true 3130 | 3131 | /yallist@4.0.0: 3132 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3133 | dev: true 3134 | 3135 | /yaml@1.10.2: 3136 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 3137 | engines: {node: '>= 6'} 3138 | dev: true 3139 | 3140 | /yaml@2.2.2: 3141 | resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} 3142 | engines: {node: '>= 14'} 3143 | dev: true 3144 | 3145 | /yocto-queue@0.1.0: 3146 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3147 | engines: {node: '>=10'} 3148 | dev: true 3149 | 3150 | /youch@2.2.2: 3151 | resolution: {integrity: sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==} 3152 | dependencies: 3153 | '@types/stack-trace': 0.0.29 3154 | cookie: 0.4.2 3155 | mustache: 4.2.0 3156 | stack-trace: 0.0.10 3157 | dev: true 3158 | --------------------------------------------------------------------------------