diff --git a/.eslintrc.json b/.eslintrc.json index dd8d795..bf919bc 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,5 +4,8 @@ "node": true }, "plugins": ["solid"], - "extends": ["eslint:recommended", "plugin:solid/typescript"] + "extends": [ + "plugin:@typescript-eslint/recommended", + "plugin:solid/typescript" + ] } diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 0000000..992f00f --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,27 @@ +name: Playwright Tests +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] +jobs: + test: + timeout-minutes: 60 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - name: Install dependencies + run: npm install -g pnpm && pnpm install + - name: Install Playwright Browsers + run: pnpm exec playwright install --with-deps + - name: Run Playwright tests + run: pnpm exec playwright test + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.gitignore b/.gitignore index 9044b40..89ddf1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ src/drizzle/migrations +log dist .vinxi @@ -27,3 +28,9 @@ gitignore # System Files .DS_Store Thumbs.db + +# Playwright +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/README.md b/README.md index 1fa87ab..5618e6f 100644 --- a/README.md +++ b/README.md @@ -46,26 +46,24 @@ To get started with li'l Judd, follow the instructions below. Create a `.env` file in the root directory and add the following variables: ```env - VITE_DISCORD_CLIENT=your_discord_client_id + VITE_DISCORD_CLIENT_ID=your_discord_client_id VITE_DISCORD_CLIENT_SECRET=your_discord_client_secret VITE_DISCORD_BOT_TOKEN=your_discord_bot_token - VITE_DISCORD_BOT_PERMISSIONS=18977581952080 + VITE_DISCORD_OAUTH2_PERMISSIONS=18977581952080 VITE_AUTH_SECRET=your_auth_secret VITE_DATABASE_URL=your_database_url ``` -Recieve your discord applications client id & secret, as well as the bot token from the [Applications dashboard](https://discord.com/developers/applications/). +Recieve your discord applications `CLIENT_ID` & `CLIENT_SECRET`, as well as the bot token from the [Applications dashboard](https://discord.com/developers/applications/). -How to generate your `VITE_AUTH_SECRET` with [`openssl rand -base64 32`](https://authjs.dev/reference/core#secret). +Your `VITE_AUTH_REDIRECT_URL` should look like this: `https:///api/auth/callback/discord`. Composite your `VITE_DATABASE_URL` like [`postgres://postgres:adminadmin@0.0.0.0:5432/db`](https://orm.drizzle.team/docs/get-started-postgresql#postgresjs). #### Development -Specify `VITE_AUTH_REDIRECT_PROXY_URL` only if necessary, particularly when setting up a reverse proxy to test authentication with callbacks to your development box. [Auth.js Docs Reference](https://authjs.dev/reference/nextjs/#redirectproxyurl) - The duplicate `DATABASE_URL` is only needed for Drizzle Studio. ``` diff --git a/app.config.ts b/app.config.ts new file mode 100644 index 0000000..0279479 --- /dev/null +++ b/app.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from "@solidjs/start/config"; + +export default defineConfig({ + middleware: "./src/middleware.ts", +}); diff --git a/discord_client_testing.http b/discord_client_testing.http deleted file mode 100644 index 523e72f..0000000 --- a/discord_client_testing.http +++ /dev/null @@ -1,25 +0,0 @@ -GET https://discord.com/api/users/@me -Authorization: Bearer {{$dotenv DISCORD_ACCESS_TOKEN}} - -### - -GET https://discord.com/api/users/@me/guilds -Authorization: Bearer {{$dotenv DISCORD_ACCESS_TOKEN}} - -### - -GET https://discord.com/api/users/@me/guilds/{{$dotenv DISCORD_GUILD_ID}}/member -Authorization: Bearer {{$dotenv DISCORD_ACCESS_TOKEN}} - -### - -GET https://discord.com/api/guilds/{{$dotenv DISCORD_GUILD_ID}} -Authorization: Bot {{$dotenv DISCORD_BOT_TOKEN}} - -### - -POST https://discord.com/api/oauth2/token/revoke -Content-Type: application/x-www-form-urlencoded -Authorization: Basic {{$dotenv DISCORD_CLIENT_ID}}:{{$dotenv DISCORD_CLIENT_SECRET}} - -token={{$dotenv DISCORD_ACCESS_TOKEN}}&token_type_hint=access_token diff --git a/drizzle.config.ts b/drizzle.config.ts index 62a54ef..01c0471 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -6,6 +6,6 @@ export default { out: "./src/drizzle/migrations", driver: "pg", dbCredentials: { - connectionString: process.env.DATABASE_URL ?? "", + connectionString: process.env.DATABASE_URL!, }, } satisfies Config; diff --git a/e2e/auth.spec.ts b/e2e/auth.spec.ts new file mode 100644 index 0000000..f713feb --- /dev/null +++ b/e2e/auth.spec.ts @@ -0,0 +1,270 @@ +import { DrizzlePostgreSQLAdapter } from "@lucia-auth/adapter-drizzle"; +import { createId } from "@paralleldrive/cuid2"; +import { expect, test, type BrowserContext, type Page } from "@playwright/test"; +import "dotenv/config"; +import { eq } from "drizzle-orm"; +import { drizzle } from "drizzle-orm/postgres-js"; +import { Lucia, type Cookie } from "lucia"; +import createClient from "openapi-fetch"; +import postgres from "postgres"; +import * as schema from "~/drizzle/schema"; +import type * as discord from "~/types/discord"; +import type * as liljudd from "~/types/liljudd"; + +const unencoded = `${process.env.DISCORD_CLIENT_ID}:${process.env.DISCORD_CLIENT_SECRET}`; +const encoded = btoa(unencoded); + +const queryClient = postgres(process.env.DATABASE_URL!); +const db = drizzle(queryClient, { + schema, +}); + +const adapter = new DrizzlePostgreSQLAdapter(db, schema.sessions, schema.users); +export const lucia = new Lucia(adapter, { + getUserAttributes: (attributes) => attributes, +}); + +let context: BrowserContext; +let page: Page; + +let sessionCookie: Cookie | undefined; + +let userId = createId(); +let guildId: bigint; + +test.describe.serial("User auth process", () => { + test.beforeAll(() => { + expect( + [ + "DISCORD_CLIENT_ID", + "DISCORD_CLIENT_SECRET", + "DATABASE_URL", + "DISCORD_BOT_TOKEN", + ].filter((e) => typeof process.env[e] === "undefined").length, + { message: "Please specify all env vars." }, + ).toBeFalsy(); + }); + + test.beforeAll(async ({ browser }) => { + context = await browser.newContext(); + page = await context.newPage(); + }); + + test.beforeEach(async () => { + if (!sessionCookie) return; + + const sameSiteProps = { + lax: "Lax", + strict: "Strict", + none: "None", + } as const; + const expires = sessionCookie.attributes.expires + ? sessionCookie.attributes.expires.getTime() / 1000 + : undefined; + const sameSite = sessionCookie.attributes.sameSite + ? sameSiteProps[sessionCookie.attributes.sameSite] + : undefined; + await context.addCookies([ + { + name: sessionCookie.name, + value: sessionCookie.value, + ...sessionCookie.attributes, + sameSite, + expires, + secure: false, + domain: "localhost", + path: "/", + }, + ]); + }); + + test.afterAll("Delete DB entries", async () => { + await db.delete(schema.users).where(eq(schema.users.id, userId)).execute(); + await db + .delete(schema.guilds) + .where(eq(schema.guilds.id, guildId)) + .execute(); + }); + + test.afterAll(async () => { + await context.close(); + }); + + test("Landing page", async () => { + await page.goto("/"); + await page.waitForLoadState("load"); + + expect(await page.screenshot()).toMatchSnapshot("landing_page.png"); + }); + + test("Unauthorized Access Redirect Test", async () => { + await page.goto("/config"); + await page.waitForURL("/"); + }); + + test("Generate auth session for further tests", async ({ browser }) => { + const { GET } = createClient({ + baseUrl: "https://discord.com/api/v10", + }); + const discordUserResponse = await GET("/users/@me", { + headers: { + Authorization: `Bot ${process.env.DISCORD_BOT_TOKEN}`, + }, + }); + if (discordUserResponse.error) throw discordUserResponse.error; + const discordUser = discordUserResponse.data; + + const browserName = browser.browserType().name() as + | "chromium" + | "webkit" + | "firefox"; + + userId = discordUser.id + userId.slice(discordUser.id.length); + userId = userId.slice(0, -browserName.length) + browserName; + + enum BrowserIds { + chromium, + webkit, + firefox, + } + guildId = BigInt(discordUser.id) ^ BigInt(BrowserIds[browserName]); + + await db.insert(schema.users).values({ + id: userId, + discord_id: discordUser.id, + name: discordUser.global_name, + image: discordUser.avatar, + }); + const session = await lucia.createSession( + userId, + {}, + { sessionId: createId() }, + ); + sessionCookie = lucia.createSessionCookie(session.id); + await db + .insert(schema.discordTokens) + .values({ + userId, + accessToken: "tokens.accessToken", + expiresAt: sessionCookie.attributes.expires ?? new Date(), + refreshToken: "tokens.refreshToken", + }) + .returning() + .execute(); + }); + + test("Landing page when logged in", async () => { + await page.goto("/"); + await page.waitForLoadState("load"); + + expect(await page.screenshot()).toMatchSnapshot( + "landing_page_logged_in.png", + ); + }); + + test("Test Api", async () => { + const { GET, POST, PUT } = createClient({ + baseUrl: "http://localhost:3000/", + }); + + const createConfigResponse = await POST("/api/{guildId}/config", { + params: { + path: { + guildId: guildId.toString(), + }, + }, + headers: { + Authorization: `Basic ${encoded}`, + Origin: "http://localhost:3000", + }, + }); + + if (createConfigResponse.error) + throw new Error(createConfigResponse.error.error); + + let getConfigResponse = await GET("/api/{guildId}/config", { + params: { + path: { + guildId: guildId.toString(), + }, + }, + headers: { + Authorization: `Basic ${encoded}`, + Origin: "http://localhost:3000", + }, + }); + + if (getConfigResponse.error) throw new Error(getConfigResponse.error.error); + + switch (getConfigResponse.data?.checksum) { + case "209a644c31a5ef123c432c2885d231a2e0efc4de": // chromium + case "aead21e132a94ab897ec28e0f0c337a66207bad3": // webkit + case "c3e2ff2ce5a8936234552125a54c2fe1ce1a35da": // firefox + break; + + default: + throw new Error( + "Before guild GET checksum didn't matched known ones: " + + getConfigResponse.data?.checksum, + ); + } + + const putTimePlanningResponse = await PUT("/api/{guildId}/timePlanning", { + body: { + enabled: true, + channelId: "1234567890123456789", + rolesEnabled: true, + isAvailableRoleId: "1234567890123456789", + wantsToBeNotifieRoledId: "1234567890123456789", + messageIds: { + "0": "1234567890123456789", + "1": "1234567890123456789", + "2": "1234567890123456789", + "3": "1234567890123456789", + "4": "1234567890123456789", + "5": "1234567890123456789", + "6": "1234567890123456789", + }, + }, + params: { + path: { + guildId: guildId.toString(), + }, + }, + headers: { + Authorization: `Basic ${encoded}`, + Origin: "http://localhost:3000", + }, + }); + + if (putTimePlanningResponse.error) + throw new Error(putTimePlanningResponse.error.error); + + getConfigResponse = await GET("/api/{guildId}/config", { + params: { + path: { + guildId: guildId.toString(), + }, + }, + headers: { + Authorization: `Basic ${encoded}`, + Origin: "http://localhost:3000", + }, + }); + + if (getConfigResponse.error) throw new Error(getConfigResponse.error.error); + + switch (getConfigResponse.data?.checksum) { + case "681c8324b21096255d942bb78bd6655da90d352e": // chromium + case "a2fb3601b7d0949b1ceada3b3ac0ba408c6159bb": // webkit + case "bf20daba95e8f3ddd17cc64e8a7ba184b68ad37b": // firefox + break; + + default: + throw new Error( + "After guild GET checksum didn't matched known ones: " + + getConfigResponse.data?.checksum, + ); + } + }); +}); diff --git a/e2e/auth.spec.ts-snapshots/landing-page-chromium-linux.png b/e2e/auth.spec.ts-snapshots/landing-page-chromium-linux.png new file mode 100644 index 0000000..e936eb3 Binary files /dev/null and b/e2e/auth.spec.ts-snapshots/landing-page-chromium-linux.png differ diff --git a/e2e/auth.spec.ts-snapshots/landing-page-firefox-linux.png b/e2e/auth.spec.ts-snapshots/landing-page-firefox-linux.png new file mode 100644 index 0000000..89dd0ec Binary files /dev/null and b/e2e/auth.spec.ts-snapshots/landing-page-firefox-linux.png differ diff --git a/e2e/auth.spec.ts-snapshots/landing-page-logged-in-chromium-linux.png b/e2e/auth.spec.ts-snapshots/landing-page-logged-in-chromium-linux.png new file mode 100644 index 0000000..ceadef9 Binary files /dev/null and b/e2e/auth.spec.ts-snapshots/landing-page-logged-in-chromium-linux.png differ diff --git a/e2e/auth.spec.ts-snapshots/landing-page-logged-in-firefox-linux.png b/e2e/auth.spec.ts-snapshots/landing-page-logged-in-firefox-linux.png new file mode 100644 index 0000000..aa20fc8 Binary files /dev/null and b/e2e/auth.spec.ts-snapshots/landing-page-logged-in-firefox-linux.png differ diff --git a/e2e/auth.spec.ts-snapshots/landing-page-logged-in-webkit-linux.png b/e2e/auth.spec.ts-snapshots/landing-page-logged-in-webkit-linux.png new file mode 100644 index 0000000..4203c20 Binary files /dev/null and b/e2e/auth.spec.ts-snapshots/landing-page-logged-in-webkit-linux.png differ diff --git a/e2e/auth.spec.ts-snapshots/landing-page-webkit-linux.png b/e2e/auth.spec.ts-snapshots/landing-page-webkit-linux.png new file mode 100644 index 0000000..4dd1e5a Binary files /dev/null and b/e2e/auth.spec.ts-snapshots/landing-page-webkit-linux.png differ diff --git a/package.json b/package.json index 1fe46ff..9ff0521 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,11 @@ "discord-openapi-gen": "openapi-typescript https://raw.githubusercontent.com/discord/discord-api-spec/main/specs/openapi.json -o ./src/types/discord.d.ts", "liljudd-openapi-gen": "openapi-typescript ./public/api/specs/liljudd.json -o ./src/types/liljudd.d.ts", "typecheck": "tsc --noEmit --checkJs false --skipLibCheck --preserveSymLinks", - "drizzle-studio": "drizzle-kit studio" + "drizzle-studio": "drizzle-kit studio", + "test": "pnpm exec playwright test", + "test-ui": "pnpm exec playwright test --ui" }, "dependencies": { - "@auth/core": "^0.19.0", - "@auth/drizzle-adapter": "^0.6.3", - "@auth/solid-start": "0.1.2", "@fortawesome/fontawesome-svg-core": "^6.5.1", "@fortawesome/pro-duotone-svg-icons": "^6.5.1", "@fortawesome/pro-light-svg-icons": "^6.5.1", @@ -23,29 +22,42 @@ "@fortawesome/pro-solid-svg-icons": "^6.5.1", "@fortawesome/pro-thin-svg-icons": "^6.5.1", "@fortawesome/sharp-solid-svg-icons": "^6.5.1", + "@lucia-auth/adapter-drizzle": "^1.0.2", + "@paralleldrive/cuid2": "^2.2.2", "@solidjs/meta": "^0.29.3", - "@solidjs/router": "^0.12.0", - "@solidjs/start": "^0.5.4", - "drizzle-orm": "^0.29.3", + "@solidjs/router": "^0.12.4", + "@solidjs/start": "^0.6.0", + "arctic": "^1.2.1", + "colors": "^1.4.0", + "drizzle-orm": "^0.29.4", + "http-status": "^1.7.4", + "json-stable-stringify": "^1.1.1", + "lucia": "^3.0.1", "moment-timezone": "^0.5.45", - "openapi-fetch": "^0.8.2", + "object-hash": "^3.0.0", + "openapi-fetch": "^0.9.2", "postgres": "^3.4.3", - "solid-js": "^1.8.14", - "vinxi": "^0.2.1" + "solid-js": "^1.8.15", + "vinxi": "^0.3.4" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^6.21.0", - "dotenv": "^16.4.2", + "@playwright/test": "^1.42.0", + "@types/json-stable-stringify": "^1.0.36", + "@types/node": "^20.11.22", + "@types/object-hash": "^3.0.6", + "@typescript-eslint/eslint-plugin": "^7.1.0", + "dotenv": "^16.4.5", "drizzle-kit": "^0.20.14", "drizzle-zod": "^0.5.1", - "eslint": "^8.56.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-solid": "^0.13.1", + "h3": "^1.11.1", "openapi-typescript": "^6.7.4", "pg": "^8.11.3", "prettier": "^3.2.5", "prettier-plugin-organize-imports": "^3.2.4", - "sass": "^1.70.0", + "sass": "^1.71.1", "typescript": "^5.3.3", "zod": "3.22.4" }, diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..6bbf1ef --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,77 @@ +import { defineConfig, devices } from "@playwright/test"; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: "./e2e", + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: "html", + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: "http://localhost:3000", + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: "on-first-retry", + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + + { + name: "firefox", + use: { ...devices["Desktop Firefox"] }, + }, + + { + name: "webkit", + use: { ...devices["Desktop Safari"] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: "pnpm start", + url: "http://localhost:3000", + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76cddcd..9f175cd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,15 +5,6 @@ settings: excludeLinksFromLockfile: false dependencies: - '@auth/core': - specifier: ^0.19.0 - version: 0.19.1 - '@auth/drizzle-adapter': - specifier: ^0.6.3 - version: 0.6.3 - '@auth/solid-start': - specifier: 0.1.2 - version: 0.1.2(@auth/core@0.19.1)(solid-js@1.8.14)(solid-start@0.2.32) '@fortawesome/fontawesome-svg-core': specifier: ^6.5.1 version: 6.5.1 @@ -35,56 +26,95 @@ dependencies: '@fortawesome/sharp-solid-svg-icons': specifier: ^6.5.1 version: 6.5.1 + '@lucia-auth/adapter-drizzle': + specifier: ^1.0.2 + version: 1.0.2(lucia@3.0.1) + '@paralleldrive/cuid2': + specifier: ^2.2.2 + version: 2.2.2 '@solidjs/meta': specifier: ^0.29.3 - version: 0.29.3(solid-js@1.8.14) + version: 0.29.3(solid-js@1.8.15) '@solidjs/router': - specifier: ^0.12.0 - version: 0.12.0(solid-js@1.8.14) + specifier: ^0.12.4 + version: 0.12.4(solid-js@1.8.15) '@solidjs/start': - specifier: ^0.5.4 - version: 0.5.4(rollup@3.29.4)(solid-js@1.8.14)(vinxi@0.2.1)(vite@5.1.1) + specifier: ^0.6.0 + version: 0.6.0(solid-js@1.8.15)(vinxi@0.3.4)(vite@5.1.4) + arctic: + specifier: ^1.2.1 + version: 1.2.1 + colors: + specifier: ^1.4.0 + version: 1.4.0 drizzle-orm: - specifier: ^0.29.3 - version: 0.29.3(pg@8.11.3)(postgres@3.4.3) + specifier: ^0.29.4 + version: 0.29.4(pg@8.11.3)(postgres@3.4.3) + http-status: + specifier: ^1.7.4 + version: 1.7.4 + json-stable-stringify: + specifier: ^1.1.1 + version: 1.1.1 + lucia: + specifier: ^3.0.1 + version: 3.0.1 moment-timezone: specifier: ^0.5.45 version: 0.5.45 + object-hash: + specifier: ^3.0.0 + version: 3.0.0 openapi-fetch: - specifier: ^0.8.2 - version: 0.8.2 + specifier: ^0.9.2 + version: 0.9.2 postgres: specifier: ^3.4.3 version: 3.4.3 solid-js: - specifier: ^1.8.14 - version: 1.8.14 + specifier: ^1.8.15 + version: 1.8.15 vinxi: - specifier: ^0.2.1 - version: 0.2.1(preact@10.19.4)(rollup@3.29.4)(sass@1.70.0) + specifier: ^0.3.4 + version: 0.3.4(@types/node@20.11.22)(preact@10.19.6)(sass@1.71.1) devDependencies: + '@playwright/test': + specifier: ^1.42.0 + version: 1.42.0 + '@types/json-stable-stringify': + specifier: ^1.0.36 + version: 1.0.36 + '@types/node': + specifier: ^20.11.22 + version: 20.11.22 + '@types/object-hash': + specifier: ^3.0.6 + version: 3.0.6 '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: ^7.1.0 + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) dotenv: - specifier: ^16.4.2 - version: 16.4.2 + specifier: ^16.4.5 + version: 16.4.5 drizzle-kit: specifier: ^0.20.14 version: 0.20.14 drizzle-zod: specifier: ^0.5.1 - version: 0.5.1(drizzle-orm@0.29.3)(zod@3.22.4) + version: 0.5.1(drizzle-orm@0.29.4)(zod@3.22.4) eslint: - specifier: ^8.56.0 - version: 8.56.0 + specifier: ^8.57.0 + version: 8.57.0 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) + version: 9.1.0(eslint@8.57.0) eslint-plugin-solid: specifier: ^0.13.1 - version: 0.13.1(eslint@8.56.0)(typescript@5.3.3) + version: 0.13.1(eslint@8.57.0)(typescript@5.3.3) + h3: + specifier: ^1.11.1 + version: 1.11.1 openapi-typescript: specifier: ^6.7.4 version: 6.7.4 @@ -98,8 +128,8 @@ devDependencies: specifier: ^3.2.4 version: 3.2.4(prettier@3.2.5)(typescript@5.3.3) sass: - specifier: ^1.70.0 - version: 1.70.0 + specifier: ^1.71.1 + version: 1.71.1 typescript: specifier: ^5.3.3 version: 5.3.3 @@ -118,76 +148,14 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/trace-mapping': 0.3.23 dev: false /@antfu/utils@0.7.7: resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==} dev: false - /@auth/core@0.19.1: - resolution: {integrity: sha512-teirzfIp1MWSEX8SN4kNCfD9BOBnX8bL02WyWCOk4TVSucvRxG9GEWcUPRd8KcX4yZ0xVOGiQq7R6JkB2brjVQ==} - peerDependencies: - nodemailer: ^6.8.0 - peerDependenciesMeta: - nodemailer: - optional: true - dependencies: - '@panva/hkdf': 1.1.1 - '@types/cookie': 0.6.0 - cookie: 0.6.0 - jose: 5.2.2 - oauth4webapi: 2.10.3 - preact: 10.11.3 - preact-render-to-string: 5.2.3(preact@10.11.3) - dev: false - - /@auth/core@0.26.3: - resolution: {integrity: sha512-Ka6rMjWMdiQCvLW/CnYZxj4Rq2bhQ/ZtU32NLxmtyAaixGb0mRXQ9MxJUBZA7GHovbghdzu55p2Cb54qNlVFzw==} - peerDependencies: - '@simplewebauthn/browser': ^9.0.1 - '@simplewebauthn/server': ^9.0.1 - nodemailer: ^6.8.0 - peerDependenciesMeta: - '@simplewebauthn/browser': - optional: true - '@simplewebauthn/server': - optional: true - nodemailer: - optional: true - dependencies: - '@panva/hkdf': 1.1.1 - '@types/cookie': 0.6.0 - cookie: 0.6.0 - jose: 5.2.2 - oauth4webapi: 2.10.3 - preact: 10.11.3 - preact-render-to-string: 5.2.3(preact@10.11.3) - dev: false - - /@auth/drizzle-adapter@0.6.3: - resolution: {integrity: sha512-iQPNRgNXiQYMDxd2KtXIp+h/jEdoC73HhkY1S5pCMEPLfxhnqdK6TUGTrDKufmZtebbD7a+jyoLAex/xJBvVxw==} - dependencies: - '@auth/core': 0.26.3 - transitivePeerDependencies: - - '@simplewebauthn/browser' - - '@simplewebauthn/server' - - nodemailer - dev: false - - /@auth/solid-start@0.1.2(@auth/core@0.19.1)(solid-js@1.8.14)(solid-start@0.2.32): - resolution: {integrity: sha512-qNo/Rw0NgvMXI6h3UeNprZ+2+92piZpCm+KxZQhtFnV3HU2FzT3wwuWG9TFevs3FJ5Fpr+PD89TUTE2Jj+/4OQ==} - peerDependencies: - '@auth/core': ~0.2.2 || ^0.2.2 - solid-js: ^1.5.7 - solid-start: ^0.2.14 - dependencies: - '@auth/core': 0.19.1 - solid-js: 1.8.14 - solid-start: 0.2.32(@solidjs/meta@0.29.3)(@solidjs/router@0.12.0)(solid-js@1.8.14)(vite@5.1.1) - dev: false - /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -201,20 +169,20 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/core@7.23.9: - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} + /@babel/core@7.24.0: + resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helpers': 7.24.0 + '@babel/parser': 7.24.0 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -228,9 +196,9 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/trace-mapping': 0.3.23 jsesc: 2.5.2 dev: false @@ -238,14 +206,7 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 - dev: false - - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false /@babel/helper-compilation-targets@7.23.6: @@ -254,56 +215,11 @@ packages: dependencies: '@babel/compat-data': 7.23.5 '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.3 + browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 dev: false - /@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.9): - resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: false - - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.9): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: false - - /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.9): - resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -313,45 +229,38 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 dev: false /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 - dev: false - - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false /@babel/helper-module-imports@7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -359,61 +268,23 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: false - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: false - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.9): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 - dev: false - - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 dev: false /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 - dev: false - - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false /@babel/helper-string-parser@7.23.4: @@ -431,22 +302,13 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + /@babel/helpers@7.24.0: + resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 - dev: false - - /@babel/helpers@7.23.9: - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color dev: false @@ -460,952 +322,68 @@ packages: js-tokens: 4.0.0 dev: false - /@babel/parser@7.23.9: - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + /@babel/parser@7.24.0: + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) - dev: false - - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.9): - resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - dev: false - - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.9): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.9): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: false - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.9): - resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - dev: false - - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.23.9 - dev: false - - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.9): - resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: false - - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - dev: false - - /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - dev: false - - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.9): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.9): + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.0): resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) dev: false - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/types': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) + '@babel/types': 7.24.0 dev: false - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.2 - dev: false - - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: false - - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.9): - resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) - dev: false - - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/preset-env@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.9) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.9) - babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) - babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) - babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) - core-js-compat: 3.35.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.9): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.9 - esutils: 2.0.3 - dev: false - - /@babel/preset-typescript@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) - dev: false - - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: false - - /@babel/runtime@7.23.9: - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: false - - /@babel/template@7.23.9: - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 dev: false - /@babel/traverse@7.23.9: - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + /@babel/traverse@7.24.0: + resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 @@ -1414,16 +392,16 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: false - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 @@ -1437,12 +415,39 @@ packages: mime: 3.0.0 dev: false + /@deno/shim-deno-test@0.5.0: + resolution: {integrity: sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==} + dev: false + + /@deno/shim-deno@0.19.1: + resolution: {integrity: sha512-8hYIpmDqpG76sn+UY1853RCi+CI7ZWz9tt37nfyDL8rwr6xbW0+GHUwCLcsGbh1uMIKURuJy6xtrIcnW+a0duA==} + dependencies: + '@deno/shim-deno-test': 0.5.0 + which: 4.0.0 + dev: false + /@drizzle-team/studio@0.0.39: resolution: {integrity: sha512-c5Hkm7MmQC2n5qAsKShjQrHoqlfGslB8+qWzsGGZ+2dHMRTNG60UuzalF0h0rvBax5uzPXuGkYLGaQ+TUX3yMw==} dependencies: superjson: 2.2.1 dev: true + /@emnapi/core@0.45.0: + resolution: {integrity: sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@emnapi/runtime@0.45.0: + resolution: {integrity: sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + /@esbuild-kit/core-utils@3.3.2: resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} dependencies: @@ -1465,15 +470,6 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -1490,15 +486,6 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -1515,15 +502,6 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -1540,15 +518,6 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -1565,15 +534,6 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -1590,15 +550,6 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -1615,15 +566,6 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -1640,15 +582,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -1665,15 +598,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -1690,15 +614,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -1715,15 +630,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -1740,15 +646,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -1765,15 +662,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -1790,15 +678,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -1815,15 +694,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -1840,15 +710,6 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -1865,15 +726,6 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -1890,15 +742,6 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -1915,15 +758,6 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false - optional: true - /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -1940,15 +774,6 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -1965,15 +790,6 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -1990,15 +806,6 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -2015,13 +822,13 @@ packages: requiresBuild: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.56.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2047,13 +854,13 @@ packages: - supports-color dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@fastify/busboy@2.1.0: - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} + /@fastify/busboy@2.1.1: + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} /@fortawesome/fontawesome-common-types@6.5.1: @@ -2118,16 +925,6 @@ packages: '@fortawesome/fontawesome-common-types': 6.5.1 dev: false - /@hapi/hoek@9.3.0: - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - dev: false - - /@hapi/topo@5.1.0: - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - dependencies: - '@hapi/hoek': 9.3.0 - dev: false - /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -2152,17 +949,17 @@ packages: resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} dev: false - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.4: + resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.23 dev: false - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: false @@ -2174,24 +971,31 @@ packages: /@jridgewell/source-map@0.3.5: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/trace-mapping': 0.3.23 dev: false /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: false - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.23: + resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: false + /@lucia-auth/adapter-drizzle@1.0.2(lucia@3.0.1): + resolution: {integrity: sha512-GT2Mp0NaUZ5O4OAvzoNcX9bGotoxBfADo6mTzIEKKJ+uar3HgtQVn/m5Ogj3I2iMv0YBHWgMmlnkUHXN5xFNow==} + peerDependencies: + lucia: 3.x + dependencies: + lucia: 3.0.1 + dev: false + /@mapbox/node-pre-gyp@1.0.11: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} - hasBin: true dependencies: detect-libc: 2.0.2 https-proxy-agent: 5.0.1 @@ -2207,12 +1011,21 @@ packages: - supports-color dev: false - /@netlify/functions@2.5.1: - resolution: {integrity: sha512-7//hmiFHXGusAzuzEuXvRT9ItaeRjRs5lRs6lYUkaAXO1jnTWYDB2XdqFq5X4yMRX+/A96nrQ2HwCE+Pd0YMwg==} + /@napi-rs/wasm-runtime@0.1.1: + resolution: {integrity: sha512-ATj9ua659JgrkICjJscaeZdmPr44cb/KFjNWuD0N6pux0SpzaM7+iOuuK11mAnQM2N9q0DT4REu6NkL8ZEhopw==} + requiresBuild: true + dependencies: + '@emnapi/core': 0.45.0 + '@emnapi/runtime': 0.45.0 + '@tybys/wasm-util': 0.8.1 + dev: false + optional: true + + /@netlify/functions@2.6.0: + resolution: {integrity: sha512-vU20tij0fb4nRGACqb+5SQvKd50JYyTyEhQetCMHdakcJFzjLDivvRR16u1G2Oy4A7xNAtGJF1uz8reeOtTVcQ==} engines: {node: '>=14.0.0'} dependencies: - '@netlify/serverless-functions-api': 1.13.0 - is-promise: 4.0.0 + '@netlify/serverless-functions-api': 1.14.0 dev: false /@netlify/node-cookies@0.1.0: @@ -2220,14 +1033,313 @@ packages: engines: {node: ^14.16.0 || >=16.0.0} dev: false - /@netlify/serverless-functions-api@1.13.0: - resolution: {integrity: sha512-H3SMpHw24jWjnEMqbXgILWdo3/Iv/2DRzOZZevqqEswRTOWcQJGlU35Dth72VAOxhPyWXjulogG1zJNRw8m2sQ==} + /@netlify/serverless-functions-api@1.14.0: + resolution: {integrity: sha512-HUNETLNvNiC2J+SB/YuRwJA9+agPrc0azSoWVk8H85GC+YE114hcS5JW+dstpKwVerp2xILE3vNWN7IMXP5Q5Q==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@netlify/node-cookies': 0.1.0 urlpattern-polyfill: 8.0.2 dev: false + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: false + + /@node-rs/argon2-android-arm-eabi@1.7.2: + resolution: {integrity: sha512-WhW84XOzdR4AOGc4BJvIg5lCRVBL0pXp/PPCe8QCyWw493p7VdNCdYpr2xdtjS/0zImmY85HNB/6zpzjLRTT/A==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-android-arm64@1.7.2: + resolution: {integrity: sha512-CdtayHSMIyDuVhSYFirwA757c4foQuyTjpysgFJLHweP9C7uDiBf9WBYij+UyabpaCadJ0wPyK6Vakinvlk4/g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-darwin-arm64@1.7.2: + resolution: {integrity: sha512-hUOhtgYHTEyzX5sgMZVdXunONOus2HWpWydF5D/RYJ1mZ76FXRnFpQE40DqbzisdPIraKdn40m7JqkPP7wqdyg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-darwin-x64@1.7.2: + resolution: {integrity: sha512-lfs5HX+t542yUfcv6Aa/NeGD1nUCwyQNgnPEGcik71Ow6V13hkR1bHgmT1u3CHN4fBts0gW+DQEDsq1xlVgkvw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-freebsd-x64@1.7.2: + resolution: {integrity: sha512-ROoF+4VaCBJUjddrTN1hjuqSl89ppRcjVXJscSPJjWzTlbzFmGGovJvIzUBmCr/Oq3yM1zKHj6MP9oRD5cB+/g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm-gnueabihf@1.7.2: + resolution: {integrity: sha512-CBSB8KPI8LS74Bcz3dYaa2/khULutz4vSDvFWUERlSLX+mPdDhoZi6UPuUPPF9e01w8AbiK1YCqlLUTm3tIMfw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm64-gnu@1.7.2: + resolution: {integrity: sha512-6LBTug6ZiWFakP3X3Nqs7ZTM03gmcSWX4YvEn20HhhQE5NDrsrw3zNqGj0cJiNzKKIMSDDuj7uGy+ITEfNo4CA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm64-musl@1.7.2: + resolution: {integrity: sha512-KjhQ+ZPne29t9VRVeIif7JdKwQba+tM6CBNYBoJB1iON0CUKeqSQtZcHuTj9gkf2SNRG5bsU4ABcfxd0OKsKHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-x64-gnu@1.7.2: + resolution: {integrity: sha512-BQvp+iLtKqomHz4q5t1aKoni9osgvUDU5sZtHAlFm5dRTlGHnympcQVATRE5GHyH9C6MIM9W7P1kqEeCLGPolQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-x64-musl@1.7.2: + resolution: {integrity: sha512-yXJudpBZQ98g+lWaHn9EzZ5KsAyqRdlpub/K+5NP7gHehb8wzBRIFAejIHAG0fvzQEEc86VOnV2koWIVZxWAvw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-wasm32-wasi@1.7.2: + resolution: {integrity: sha512-diXlVjJZY2GIV8ZDwUqXPhacXsFR0klGSv5D9f+XidwWXK4udtzDhkM/7N/Mb7h1HAWaxZ6IN9spYFjvWH1wqg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@napi-rs/wasm-runtime': 0.1.1 + dev: false + optional: true + + /@node-rs/argon2-win32-arm64-msvc@1.7.2: + resolution: {integrity: sha512-dhIBrY04P9nbmwzBpgERQDmmSu4YBZyeEE32t4TikMz5rQ07iaVC+JpGmtCBZoDIsLDHGC8cikENd3YEqpqIcA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-win32-ia32-msvc@1.7.2: + resolution: {integrity: sha512-o1tfqr8gyALCzuxBoQfvhxkeYMaw/0H8Gmt7klTYyEIBvEFu7SD5qytXO9Px7t5420nZL/Wy5cflg3IB1s57Pg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-win32-x64-msvc@1.7.2: + resolution: {integrity: sha512-v0h53XUc7hNgWiWi0qcMcHvj9/kwuItI9NwLK4C+gtzT3UB0cedhfIL8HFMKThMXasy41ZdbpCF2Bi0kJoLNEg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2@1.7.2: + resolution: {integrity: sha512-+H6pc3M1vIX9YnG59YW7prHhhpv19P8YyxlXHnnFzTimf2q+kKDF7mGWbhvN9STqIY+P70Patn0Q6qb6Ib5/4g==} + engines: {node: '>= 10'} + optionalDependencies: + '@node-rs/argon2-android-arm-eabi': 1.7.2 + '@node-rs/argon2-android-arm64': 1.7.2 + '@node-rs/argon2-darwin-arm64': 1.7.2 + '@node-rs/argon2-darwin-x64': 1.7.2 + '@node-rs/argon2-freebsd-x64': 1.7.2 + '@node-rs/argon2-linux-arm-gnueabihf': 1.7.2 + '@node-rs/argon2-linux-arm64-gnu': 1.7.2 + '@node-rs/argon2-linux-arm64-musl': 1.7.2 + '@node-rs/argon2-linux-x64-gnu': 1.7.2 + '@node-rs/argon2-linux-x64-musl': 1.7.2 + '@node-rs/argon2-wasm32-wasi': 1.7.2 + '@node-rs/argon2-win32-arm64-msvc': 1.7.2 + '@node-rs/argon2-win32-ia32-msvc': 1.7.2 + '@node-rs/argon2-win32-x64-msvc': 1.7.2 + dev: false + + /@node-rs/bcrypt-android-arm-eabi@1.9.2: + resolution: {integrity: sha512-er/Q2khwpan9pczvTTqY/DJE4UU65u31xd0NkZlHUTKyB7djRhWfzoGexGx2GN+k831/RR3U8kKE/8QUHeO3hQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-android-arm64@1.9.2: + resolution: {integrity: sha512-OUYatOEG5vbLbF73q2TC8UqrDO81zUQxnaFD/OAB1hcm6J+ur0zJ8E53c35/DIqkTp7JarPMraC4rouJ2ugN4w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-darwin-arm64@1.9.2: + resolution: {integrity: sha512-svJKsGbzMAxOB5oluOYneN4YkKUy26WSMgm3KOIhgoX30IeMilj+2jFN/5qrI0oDZ0Iczb3XyL5DuZFtEkdP8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-darwin-x64@1.9.2: + resolution: {integrity: sha512-9OrySjBi/rWix8NZWD/TrNbNcwMY0pAiMHdL09aJnJ07uPih83GGh1pq4UHCYFCMy7iTX8swOmDlGBUImkOZbg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-freebsd-x64@1.9.2: + resolution: {integrity: sha512-/djXV71RO6g5L1mI2pVvmp3x3pH7G4uKI3ODG1JBIXoz334oOcCMh40sB0uq0ljP8WEadker01p4T1rJE98fpg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-arm-gnueabihf@1.9.2: + resolution: {integrity: sha512-F7wP950OTAooxEleUN4I2hqryGZK7hi1cSgRF13Wvbc597RFux35KiSxIXUA3mNt2DE7lV2PeceEtCOScaThWQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-arm64-gnu@1.9.2: + resolution: {integrity: sha512-MehG+yQ0TgKMgKR1rO4hdvHkVsTM91Cof8qI9EJlS5+7+QSwfFA5O0zGwCkISD7bsyauJ5uJgcByGjpEobAHOg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-arm64-musl@1.9.2: + resolution: {integrity: sha512-PRZTAJjOwKEGsIhmBvfNh81So+wGl4QyCFAt23j+KwBujLStjC0N3YaqtTlWVKG9tcriPtmMYiAQtXWIyIgg/w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-x64-gnu@1.9.2: + resolution: {integrity: sha512-5WfGO+O1m7nJ55WZ8XDq+ItA98Z4O7sNWsR+1nIj9YGT+Tx5zkQ2RBhpK6oCWZMluuZ0eKQ0FDmyP6K+2NDRIA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-x64-musl@1.9.2: + resolution: {integrity: sha512-VjCn0388p6PMCVUYHgYmHZrKNc7WwNJRr2WLJsHbQRGDOKbpNL6YolCjQxUchcSPDhzwrq1cIdy4j0fpoXEsdw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-wasm32-wasi@1.9.2: + resolution: {integrity: sha512-P06aHfMzm9makwU+nM7WA65yQnS1xuqJ8l/6I/LvXjnl+lfB3DtJ2B0CSLtjnUGpUgcHbWl5gEbNnTPxSAirjQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@napi-rs/wasm-runtime': 0.1.1 + dev: false + optional: true + + /@node-rs/bcrypt-win32-arm64-msvc@1.9.2: + resolution: {integrity: sha512-Iyo/Q5/eNw27VRd3mLBgh1b9b5fnT3QHTVwxv3Siv/MRAIfJXH/cTOe18qSwYQzNh0ZioW4yemFPYCWSZi7szA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-win32-ia32-msvc@1.9.2: + resolution: {integrity: sha512-6LHWMaPylyyHoS5863YpxAACVB8DWCxro5W6pQ4h8WKSgHpJp8Um9jphTdN0A2w45HZjUnfcFuiFFC+TbftjCw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-win32-x64-msvc@1.9.2: + resolution: {integrity: sha512-vZ9T1MOaYkLO9FTyl28YX0SYJneiYTKNFgM8PUv8nas8xrD+7OzokA0fEtlNp6413T7IKSD/iG9qi8nTWsiyGg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt@1.9.2: + resolution: {integrity: sha512-FKUo9iCSIti+ldwoOlY1ztyIFhZxEgT7jZ/UCt/9bg1rLmNdbQQD2JKIMImDCqmTWuLPY4ZF4Q5MyOMIfDCd8Q==} + engines: {node: '>= 10'} + optionalDependencies: + '@node-rs/bcrypt-android-arm-eabi': 1.9.2 + '@node-rs/bcrypt-android-arm64': 1.9.2 + '@node-rs/bcrypt-darwin-arm64': 1.9.2 + '@node-rs/bcrypt-darwin-x64': 1.9.2 + '@node-rs/bcrypt-freebsd-x64': 1.9.2 + '@node-rs/bcrypt-linux-arm-gnueabihf': 1.9.2 + '@node-rs/bcrypt-linux-arm64-gnu': 1.9.2 + '@node-rs/bcrypt-linux-arm64-musl': 1.9.2 + '@node-rs/bcrypt-linux-x64-gnu': 1.9.2 + '@node-rs/bcrypt-linux-x64-musl': 1.9.2 + '@node-rs/bcrypt-wasm32-wasi': 1.9.2 + '@node-rs/bcrypt-win32-arm64-msvc': 1.9.2 + '@node-rs/bcrypt-win32-ia32-msvc': 1.9.2 + '@node-rs/bcrypt-win32-x64-msvc': 1.9.2 + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2246,12 +1358,14 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - /@panva/hkdf@1.1.1: - resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==} + /@paralleldrive/cuid2@2.2.2: + resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + dependencies: + '@noble/hashes': 1.3.3 dev: false - /@parcel/watcher-android-arm64@2.4.0: - resolution: {integrity: sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA==} + /@parcel/watcher-android-arm64@2.4.1: + resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] @@ -2259,8 +1373,8 @@ packages: dev: false optional: true - /@parcel/watcher-darwin-arm64@2.4.0: - resolution: {integrity: sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA==} + /@parcel/watcher-darwin-arm64@2.4.1: + resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] @@ -2268,8 +1382,8 @@ packages: dev: false optional: true - /@parcel/watcher-darwin-x64@2.4.0: - resolution: {integrity: sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q==} + /@parcel/watcher-darwin-x64@2.4.1: + resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] @@ -2277,8 +1391,8 @@ packages: dev: false optional: true - /@parcel/watcher-freebsd-x64@2.4.0: - resolution: {integrity: sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA==} + /@parcel/watcher-freebsd-x64@2.4.1: + resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] @@ -2286,8 +1400,8 @@ packages: dev: false optional: true - /@parcel/watcher-linux-arm-glibc@2.4.0: - resolution: {integrity: sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ==} + /@parcel/watcher-linux-arm-glibc@2.4.1: + resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] @@ -2295,8 +1409,8 @@ packages: dev: false optional: true - /@parcel/watcher-linux-arm64-glibc@2.4.0: - resolution: {integrity: sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg==} + /@parcel/watcher-linux-arm64-glibc@2.4.1: + resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] @@ -2304,8 +1418,8 @@ packages: dev: false optional: true - /@parcel/watcher-linux-arm64-musl@2.4.0: - resolution: {integrity: sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng==} + /@parcel/watcher-linux-arm64-musl@2.4.1: + resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] @@ -2313,8 +1427,8 @@ packages: dev: false optional: true - /@parcel/watcher-linux-x64-glibc@2.4.0: - resolution: {integrity: sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ==} + /@parcel/watcher-linux-x64-glibc@2.4.1: + resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] @@ -2322,8 +1436,8 @@ packages: dev: false optional: true - /@parcel/watcher-linux-x64-musl@2.4.0: - resolution: {integrity: sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA==} + /@parcel/watcher-linux-x64-musl@2.4.1: + resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] @@ -2341,8 +1455,8 @@ packages: bundledDependencies: - napi-wasm - /@parcel/watcher-wasm@2.4.0: - resolution: {integrity: sha512-MNgQ4WCbBybqQ97KwR/hqJGYTg3+s8qHpgIyFWB2qJOBvoJWbXuJGmm4ZkPLq2bMaANqCZqrXwmKYagZTkMKZA==} + /@parcel/watcher-wasm@2.4.1: + resolution: {integrity: sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA==} engines: {node: '>= 10.0.0'} dependencies: is-glob: 4.0.3 @@ -2351,8 +1465,8 @@ packages: bundledDependencies: - napi-wasm - /@parcel/watcher-win32-arm64@2.4.0: - resolution: {integrity: sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg==} + /@parcel/watcher-win32-arm64@2.4.1: + resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] @@ -2360,8 +1474,8 @@ packages: dev: false optional: true - /@parcel/watcher-win32-ia32@2.4.0: - resolution: {integrity: sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA==} + /@parcel/watcher-win32-ia32@2.4.1: + resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] @@ -2369,8 +1483,8 @@ packages: dev: false optional: true - /@parcel/watcher-win32-x64@2.4.0: - resolution: {integrity: sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA==} + /@parcel/watcher-win32-x64@2.4.1: + resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] @@ -2378,8 +1492,8 @@ packages: dev: false optional: true - /@parcel/watcher@2.4.0: - resolution: {integrity: sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg==} + /@parcel/watcher@2.4.1: + resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} engines: {node: '>= 10.0.0'} dependencies: detect-libc: 1.0.3 @@ -2387,42 +1501,49 @@ packages: micromatch: 4.0.5 node-addon-api: 7.1.0 optionalDependencies: - '@parcel/watcher-android-arm64': 2.4.0 - '@parcel/watcher-darwin-arm64': 2.4.0 - '@parcel/watcher-darwin-x64': 2.4.0 - '@parcel/watcher-freebsd-x64': 2.4.0 - '@parcel/watcher-linux-arm-glibc': 2.4.0 - '@parcel/watcher-linux-arm64-glibc': 2.4.0 - '@parcel/watcher-linux-arm64-musl': 2.4.0 - '@parcel/watcher-linux-x64-glibc': 2.4.0 - '@parcel/watcher-linux-x64-musl': 2.4.0 - '@parcel/watcher-win32-arm64': 2.4.0 - '@parcel/watcher-win32-ia32': 2.4.0 - '@parcel/watcher-win32-x64': 2.4.0 + '@parcel/watcher-android-arm64': 2.4.1 + '@parcel/watcher-darwin-arm64': 2.4.1 + '@parcel/watcher-darwin-x64': 2.4.1 + '@parcel/watcher-freebsd-x64': 2.4.1 + '@parcel/watcher-linux-arm-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-musl': 2.4.1 + '@parcel/watcher-linux-x64-glibc': 2.4.1 + '@parcel/watcher-linux-x64-musl': 2.4.1 + '@parcel/watcher-win32-arm64': 2.4.1 + '@parcel/watcher-win32-ia32': 2.4.1 + '@parcel/watcher-win32-x64': 2.4.1 dev: false + /@playwright/test@1.42.0: + resolution: {integrity: sha512-2k1HzC28Fs+HiwbJOQDUwrWMttqSLUVdjCqitBOjdCD0svWOMQUVqrXX6iFD7POps6xXAojsX/dGBpKnjZctLA==} + engines: {node: '>=16'} + dependencies: + playwright: 1.42.0 + dev: true + /@polka/url@1.0.0-next.24: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} dev: false - /@preact/preset-vite@2.8.1(@babel/core@7.23.9)(preact@10.19.4)(vite@4.5.0): + /@preact/preset-vite@2.8.1(@babel/core@7.24.0)(preact@10.19.6)(vite@5.1.1): resolution: {integrity: sha512-a9KV4opdj17X2gOFuGup0aE+sXYABX/tJi/QDptOrleX4FlnoZgDWvz45tHOdVfrZX+3uvVsIYPHxRsTerkDNA==} peerDependencies: '@babel/core': 7.x vite: 2.x || 3.x || 4.x || 5.x dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.9) - '@prefresh/vite': 2.4.5(preact@10.19.4)(vite@4.5.0) + '@babel/core': 7.24.0 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.0) + '@prefresh/vite': 2.4.5(preact@10.19.6)(vite@5.1.1) '@rollup/pluginutils': 4.2.1 - babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.23.9) + babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.24.0) debug: 4.3.4 kolorist: 1.8.0 magic-string: 0.30.5 node-html-parser: 6.1.12 resolve: 1.22.8 - vite: 4.5.0(sass@1.70.0) + vite: 5.1.1(@types/node@20.11.22)(sass@1.71.1) transitivePeerDependencies: - preact - supports-color @@ -2432,36 +1553,36 @@ packages: resolution: {integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==} dev: false - /@prefresh/core@1.5.2(preact@10.19.4): + /@prefresh/core@1.5.2(preact@10.19.6): resolution: {integrity: sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==} peerDependencies: preact: ^10.0.0 dependencies: - preact: 10.19.4 + preact: 10.19.6 dev: false /@prefresh/utils@1.2.0: resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} dev: false - /@prefresh/vite@2.4.5(preact@10.19.4)(vite@4.5.0): + /@prefresh/vite@2.4.5(preact@10.19.6)(vite@5.1.1): resolution: {integrity: sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==} peerDependencies: preact: ^10.4.0 vite: '>=2.0.0' dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@prefresh/babel-plugin': 0.5.1 - '@prefresh/core': 1.5.2(preact@10.19.4) + '@prefresh/core': 1.5.2(preact@10.19.6) '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 - preact: 10.19.4 - vite: 4.5.0(sass@1.70.0) + preact: 10.19.6 + vite: 5.1.1(@types/node@20.11.22)(sass@1.71.1) transitivePeerDependencies: - supports-color dev: false - /@rollup/plugin-alias@5.1.0(rollup@4.10.0): + /@rollup/plugin-alias@5.1.0(rollup@4.12.0): resolution: {integrity: sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2470,11 +1591,11 @@ packages: rollup: optional: true dependencies: - rollup: 4.10.0 + rollup: 4.12.0 slash: 4.0.0 dev: false - /@rollup/plugin-commonjs@25.0.7(rollup@4.10.0): + /@rollup/plugin-commonjs@25.0.7(rollup@4.12.0): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2483,16 +1604,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.10.0) + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.7 - rollup: 4.10.0 + rollup: 4.12.0 dev: false - /@rollup/plugin-inject@5.0.5(rollup@4.10.0): + /@rollup/plugin-inject@5.0.5(rollup@4.12.0): resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2501,13 +1622,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.10.0) + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) estree-walker: 2.0.2 magic-string: 0.30.7 - rollup: 4.10.0 + rollup: 4.12.0 dev: false - /@rollup/plugin-json@6.1.0(rollup@4.10.0): + /@rollup/plugin-json@6.1.0(rollup@4.12.0): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2516,11 +1637,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.10.0) - rollup: 4.10.0 + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) + rollup: 4.12.0 dev: false - /@rollup/plugin-node-resolve@15.2.3(rollup@4.10.0): + /@rollup/plugin-node-resolve@15.2.3(rollup@4.12.0): resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2529,16 +1650,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.10.0) + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 4.10.0 + rollup: 4.12.0 dev: false - /@rollup/plugin-replace@5.0.5(rollup@4.10.0): + /@rollup/plugin-replace@5.0.5(rollup@4.12.0): resolution: {integrity: sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2547,12 +1668,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.10.0) + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) magic-string: 0.30.7 - rollup: 4.10.0 + rollup: 4.12.0 dev: false - /@rollup/plugin-terser@0.4.4(rollup@4.10.0): + /@rollup/plugin-terser@0.4.4(rollup@4.12.0): resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2561,13 +1682,13 @@ packages: rollup: optional: true dependencies: - rollup: 4.10.0 + rollup: 4.12.0 serialize-javascript: 6.0.2 smob: 1.4.1 - terser: 5.27.0 + terser: 5.28.1 dev: false - /@rollup/plugin-wasm@6.2.2(rollup@4.10.0): + /@rollup/plugin-wasm@6.2.2(rollup@4.12.0): resolution: {integrity: sha512-gpC4R1G9Ni92ZIRTexqbhX7U+9estZrbhP+9SRb0DW9xpB9g7j34r+J2hqrcW/lRI7dJaU84MxZM0Rt82tqYPQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2576,8 +1697,8 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.10.0) - rollup: 4.10.0 + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) + rollup: 4.12.0 dev: false /@rollup/pluginutils@4.2.1: @@ -2588,7 +1709,7 @@ packages: picomatch: 2.3.1 dev: false - /@rollup/pluginutils@5.1.0(rollup@3.29.4): + /@rollup/pluginutils@5.1.0(rollup@4.12.0): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2600,177 +1721,148 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.29.4 + rollup: 4.12.0 dev: false - /@rollup/pluginutils@5.1.0(rollup@4.10.0): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 4.10.0 - dev: false - - /@rollup/rollup-android-arm-eabi@4.10.0: - resolution: {integrity: sha512-/MeDQmcD96nVoRumKUljsYOLqfv1YFJps+0pTrb2Z9Nl/w5qNUysMaWQsrd1mvAlNT4yza1iVyIu4Q4AgF6V3A==} + /@rollup/rollup-android-arm-eabi@4.12.0: + resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} cpu: [arm] os: [android] requiresBuild: true dev: false optional: true - /@rollup/rollup-android-arm64@4.10.0: - resolution: {integrity: sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ==} + /@rollup/rollup-android-arm64@4.12.0: + resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} cpu: [arm64] os: [android] requiresBuild: true dev: false optional: true - /@rollup/rollup-darwin-arm64@4.10.0: - resolution: {integrity: sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg==} + /@rollup/rollup-darwin-arm64@4.12.0: + resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} cpu: [arm64] os: [darwin] requiresBuild: true dev: false optional: true - /@rollup/rollup-darwin-x64@4.10.0: - resolution: {integrity: sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q==} + /@rollup/rollup-darwin-x64@4.12.0: + resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} cpu: [x64] os: [darwin] requiresBuild: true dev: false optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.10.0: - resolution: {integrity: sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw==} + /@rollup/rollup-linux-arm-gnueabihf@4.12.0: + resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} cpu: [arm] os: [linux] requiresBuild: true dev: false optional: true - /@rollup/rollup-linux-arm64-gnu@4.10.0: - resolution: {integrity: sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q==} + /@rollup/rollup-linux-arm64-gnu@4.12.0: + resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} cpu: [arm64] os: [linux] requiresBuild: true dev: false optional: true - /@rollup/rollup-linux-arm64-musl@4.10.0: - resolution: {integrity: sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ==} + /@rollup/rollup-linux-arm64-musl@4.12.0: + resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: false optional: true - /@rollup/rollup-linux-riscv64-gnu@4.10.0: - resolution: {integrity: sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA==} + /@rollup/rollup-linux-riscv64-gnu@4.12.0: + resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} cpu: [riscv64] os: [linux] requiresBuild: true dev: false optional: true - /@rollup/rollup-linux-x64-gnu@4.10.0: - resolution: {integrity: sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw==} + /@rollup/rollup-linux-x64-gnu@4.12.0: + resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} cpu: [x64] os: [linux] requiresBuild: true dev: false optional: true - /@rollup/rollup-linux-x64-musl@4.10.0: - resolution: {integrity: sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw==} + /@rollup/rollup-linux-x64-musl@4.12.0: + resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} cpu: [x64] os: [linux] requiresBuild: true dev: false optional: true - /@rollup/rollup-win32-arm64-msvc@4.10.0: - resolution: {integrity: sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ==} + /@rollup/rollup-win32-arm64-msvc@4.12.0: + resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} cpu: [arm64] os: [win32] requiresBuild: true dev: false optional: true - /@rollup/rollup-win32-ia32-msvc@4.10.0: - resolution: {integrity: sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg==} + /@rollup/rollup-win32-ia32-msvc@4.12.0: + resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} cpu: [ia32] os: [win32] requiresBuild: true dev: false optional: true - /@rollup/rollup-win32-x64-msvc@4.10.0: - resolution: {integrity: sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ==} + /@rollup/rollup-win32-x64-msvc@4.12.0: + resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} cpu: [x64] os: [win32] requiresBuild: true dev: false optional: true - /@sideway/address@4.1.5: - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - dependencies: - '@hapi/hoek': 9.3.0 - dev: false - - /@sideway/formula@3.0.1: - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - dev: false - - /@sideway/pinpoint@2.0.0: - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - dev: false - - /@sindresorhus/merge-streams@2.2.0: - resolution: {integrity: sha512-UTce8mUwUW0RikMb/eseJ7ys0BRkZVFB86orHzrfW12ZmFtym5zua8joZ4L7okH2dDFHkcFjqnZ5GocWBXOFtA==} + /@sindresorhus/merge-streams@2.3.0: + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} dev: false - /@solidjs/meta@0.29.3(solid-js@1.8.14): + /@solidjs/meta@0.29.3(solid-js@1.8.15): resolution: {integrity: sha512-R2uirgjgyh3FPFh+rb840plF701N6GvM5w81/QeI61QwjXb4QzLkyI/uzXfC5UW8favpUn9KK9ILQeoTl6pX0A==} peerDependencies: solid-js: '>=1.8.4' dependencies: - solid-js: 1.8.14 + solid-js: 1.8.15 dev: false - /@solidjs/router@0.12.0(solid-js@1.8.14): - resolution: {integrity: sha512-9dyBL35T7x86RBSJBMu9jLGytBTmWQehb0uxez7TfzYtwI+v9poo2fzRbcCCrWVTQkwGD/rWvqmxUvczp2at3A==} + /@solidjs/router@0.12.4(solid-js@1.8.15): + resolution: {integrity: sha512-2S5QWYmpWSIWn5ei85eoStEMmECERX2BiBkEvmqYDrgX79I8D95YaWVdHbcFGOxISPTY4TP7RxjRiofs/AIFJQ==} peerDependencies: solid-js: ^1.8.6 dependencies: - solid-js: 1.8.14 + solid-js: 1.8.15 dev: false - /@solidjs/router@0.8.4(solid-js@1.8.14): + /@solidjs/router@0.8.4(solid-js@1.8.15): resolution: {integrity: sha512-Gi/WVoVseGMKS1DBdT3pNAMgOzEOp6Q3dpgNd2mW9GUEnVocPmtyBjDvXwN6m7tjSGsqqfqJFXk7bm1hxabSRw==} peerDependencies: solid-js: ^1.5.3 dependencies: - solid-js: 1.8.14 + solid-js: 1.8.15 dev: false - /@solidjs/start@0.5.4(rollup@3.29.4)(solid-js@1.8.14)(vinxi@0.2.1)(vite@5.1.1): - resolution: {integrity: sha512-et6fu8GPRlzPz1nE0jJrB4QWEqKNzCMh62+FbmnZjOHA0eUldy47Aniki5RO6288eX5Oj4S6BWnvYcu1/iWkMw==} + /@solidjs/start@0.6.0(solid-js@1.8.15)(vinxi@0.3.4)(vite@5.1.4): + resolution: {integrity: sha512-djHVrUCv7AH8q5HOXX+EZ3zdXOibMCQmCG8xNRkOgEbyhB/vp+MtbhCpvoLROgnHm/5pHDLwVKVkYiTsDBUsOA==} dependencies: - '@vinxi/plugin-directives': 0.2.0(vinxi@0.2.1) - '@vinxi/server-components': 0.2.0(vinxi@0.2.1) - '@vinxi/server-functions': 0.2.1(vinxi@0.2.1) + '@vinxi/plugin-directives': 0.3.0(vinxi@0.3.4) + '@vinxi/server-components': 0.3.0(vinxi@0.3.4) + '@vinxi/server-functions': 0.3.0(vinxi@0.3.4) defu: 6.1.4 error-stack-parser: 2.1.4 html-to-image: 1.11.11 @@ -2779,9 +1871,9 @@ packages: seroval-plugins: 1.0.4(seroval@1.0.4) shikiji: 0.9.19 source-map-js: 1.0.2 - terracotta: 1.0.5(solid-js@1.8.14) - vite-plugin-inspect: 0.7.42(rollup@3.29.4)(vite@5.1.1) - vite-plugin-solid: 2.9.1(solid-js@1.8.14)(vite@5.1.1) + terracotta: 1.0.5(solid-js@1.8.15) + vite-plugin-inspect: 0.7.42(vite@5.1.4) + vite-plugin-solid: 2.9.1(solid-js@1.8.15)(vite@5.1.4) transitivePeerDependencies: - '@nuxt/kit' - '@testing-library/jest-dom' @@ -2792,11 +1884,19 @@ packages: - vite dev: false + /@tybys/wasm-util@0.8.1: + resolution: {integrity: sha512-GSsTwyBl4pIzsxAY5wroZdyQKyhXk0d8PCRZtrSZ2WEB1cBdrp2EgGBwHOGCZtIIPun/DL3+AykCv+J6fyRH4Q==} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 @@ -2805,40 +1905,26 @@ packages: /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 dev: false /@types/babel__traverse@7.20.5: resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: false /@types/braces@3.0.4: resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} dev: false - /@types/cookie@0.5.4: - resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==} - dev: false - - /@types/cookie@0.6.0: - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - dev: false - - /@types/debug@4.1.12: - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - dependencies: - '@types/ms': 0.7.34 - dev: false - /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: false @@ -2850,13 +1936,17 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 20.11.17 + '@types/node': 20.11.22 dev: false /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true + /@types/json-stable-stringify@1.0.36: + resolution: {integrity: sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw==} + dev: true + /@types/micromatch@4.0.6: resolution: {integrity: sha512-2eulCHWqjEpk9/vyic4tBhI8a9qQEl6DaK2n/sF7TweX9YESlypgKyhXMDGt4DAOy/jhLPvVrZc8pTDAMsplJA==} dependencies: @@ -2867,22 +1957,21 @@ packages: resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} dev: false - /@types/ms@0.7.34: - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - dev: false - - /@types/node@20.11.17: - resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==} + /@types/node@20.11.22: + resolution: {integrity: sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==} dependencies: undici-types: 5.26.5 - dev: false + + /@types/object-hash@3.0.6: + resolution: {integrity: sha512-fOBV8C1FIu2ELinoILQ+ApxcUKz4ngq+IWUYrxSGjXzzjUALijilampwkMgEtJ+h2njAW3pi853QpzNVCHB73w==} + dev: true /@types/resolve@1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: false - /@types/semver@7.5.7: - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /@types/serve-static@1.15.5: @@ -2890,34 +1979,34 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.17 + '@types/node': 20.11.22 dev: false /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.11.17 + '@types/node': 20.11.22 dev: false - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 - eslint: 8.56.0 + eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -2928,22 +2017,22 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 - eslint: 8.56.0 + eslint: 8.57.0 typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -2957,20 +2046,28 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + /@typescript-eslint/scope-manager@7.1.0: + resolution: {integrity: sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/visitor-keys': 7.1.0 + dev: true + + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.56.0 + eslint: 8.57.0 ts-api-utils: 1.2.1(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: @@ -2982,6 +2079,11 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true + /@typescript-eslint/types@7.1.0: + resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3004,19 +2106,60 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): + resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/visitor-keys': 7.1.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.2.1(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.3.3): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.7 + '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) - eslint: 8.56.0 + eslint: 8.57.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: - supports-color @@ -3031,6 +2174,14 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys@7.1.0: + resolution: {integrity: sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.1.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true @@ -3038,7 +2189,6 @@ packages: /@vercel/nft@0.24.4: resolution: {integrity: sha512-KjYAZty7boH5fi5udp6p+lNu6nawgs++pHW+3koErMgbRkkHuToGX/FwjN5clV1FcaM3udfd4zW/sUapkMgpZw==} engines: {node: '>=16'} - hasBin: true dependencies: '@mapbox/node-pre-gyp': 1.0.11 '@rollup/pluginutils': 4.2.1 @@ -3056,15 +2206,15 @@ packages: - supports-color dev: false - /@vinxi/devtools@0.2.0(@babel/core@7.23.9)(preact@10.19.4)(rollup@3.29.4)(vite@4.5.0): + /@vinxi/devtools@0.2.0(@babel/core@7.24.0)(preact@10.19.6)(vite@5.1.1): resolution: {integrity: sha512-LpQp5zbiBhV4eo2w6AiJFtpZZj4LaRBOnzggIPTeSJYvgrxRMAqe/34Har3vVo+b7sPOjxFbE1zHZhLzaAcidw==} dependencies: - '@preact/preset-vite': 2.8.1(@babel/core@7.23.9)(preact@10.19.4)(vite@4.5.0) - '@solidjs/router': 0.8.4(solid-js@1.8.14) - birpc: 0.2.15 - solid-js: 1.8.14 - vite-plugin-inspect: 0.7.42(rollup@3.29.4)(vite@4.5.0) - vite-plugin-solid: 2.9.1(solid-js@1.8.14)(vite@4.5.0) + '@preact/preset-vite': 2.8.1(@babel/core@7.24.0)(preact@10.19.6)(vite@5.1.1) + '@solidjs/router': 0.8.4(solid-js@1.8.15) + birpc: 0.2.17 + solid-js: 1.8.15 + vite-plugin-inspect: 0.7.42(vite@5.1.1) + vite-plugin-solid: 2.10.1(solid-js@1.8.15)(vite@5.1.1) ws: 8.16.0 transitivePeerDependencies: - '@babel/core' @@ -3080,33 +2230,34 @@ packages: /@vinxi/listhen@1.5.6: resolution: {integrity: sha512-WSN1z931BtasZJlgPp704zJFnQFRg7yzSjkm3MzAWQYe4uXFXlFr1hc5Ac2zae5/HDOz5x1/zDM5Cb54vTCnWw==} - hasBin: true dependencies: - '@parcel/watcher': 2.4.0 + '@parcel/watcher': 2.4.1 '@parcel/watcher-wasm': 2.3.0 - citty: 0.1.5 + citty: 0.1.6 clipboardy: 4.0.0 consola: 3.2.3 defu: 6.1.4 get-port-please: 3.1.2 - h3: 1.10.1 + h3: 1.11.1 http-shutdown: 1.2.2 jiti: 1.21.0 - mlly: 1.5.0 + mlly: 1.6.1 node-forge: 1.3.1 pathe: 1.1.2 std-env: 3.7.0 ufo: 1.4.0 untun: 0.1.3 uqr: 0.1.2 + transitivePeerDependencies: + - uWebSockets.js dev: false - /@vinxi/plugin-directives@0.2.0(vinxi@0.2.1): - resolution: {integrity: sha512-DoYuIuvdylU+0XNOipvcbw08XDBBbEksc3euCsbApNVpmQ/mC+2CjoErHtjb4zX1RqNwe1sJ8awMK6fKUMLGRA==} + /@vinxi/plugin-directives@0.3.0(vinxi@0.3.4): + resolution: {integrity: sha512-diwK2D6mZGffF5z+CgG7DcRnpKrOgqyv8SfxdbOTLGQcxtrQ9IpuHfX+mbOttaIJFvoZ3pHGUKe7Gfgd0BuQ1A==} peerDependencies: - vinxi: ^0.2.0 + vinxi: ^0.3.0 dependencies: - '@babel/parser': 7.23.9 + '@babel/parser': 7.24.0 acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) acorn-loose: 8.4.0 @@ -3115,51 +2266,43 @@ packages: magicast: 0.2.11 recast: 0.23.4 tslib: 2.6.2 - vinxi: 0.2.1(preact@10.19.4)(rollup@3.29.4)(sass@1.70.0) + vinxi: 0.3.4(@types/node@20.11.22)(preact@10.19.6)(sass@1.71.1) dev: false - /@vinxi/server-components@0.2.0(vinxi@0.2.1): - resolution: {integrity: sha512-U3z6pxK5CWBxaUmyg7zdDMTl1AMa47MpYCUcs0QVOz/C8kKlT6C9Ozh5pZWuzAO0cTeueNpQumDWhQ4YTXTsZw==} + /@vinxi/server-components@0.3.0(vinxi@0.3.4): + resolution: {integrity: sha512-S10O0ZKu8skBfL6BmUzIgiwD1HclKtUfXc7G0jmJAJ4qsvfBbUBwfT9Su7ppsuAjl96i7V1ipt5En4CidSpPlQ==} peerDependencies: - vinxi: ^0.2.0 + vinxi: ^0.3.0 dependencies: - '@vinxi/plugin-directives': 0.2.0(vinxi@0.2.1) + '@vinxi/plugin-directives': 0.3.0(vinxi@0.3.4) acorn: 8.11.3 acorn-loose: 8.4.0 acorn-typescript: 1.4.13(acorn@8.11.3) astring: 1.8.6 magicast: 0.2.11 recast: 0.23.4 - vinxi: 0.2.1(preact@10.19.4)(rollup@3.29.4)(sass@1.70.0) + vinxi: 0.3.4(@types/node@20.11.22)(preact@10.19.6)(sass@1.71.1) dev: false - /@vinxi/server-functions@0.2.1(vinxi@0.2.1): - resolution: {integrity: sha512-ir06Q6nEpJFU1uXqHdKE2OXqZFjChAIgAHpCJzMunHiutRNyYTJ7ZhbFCUk5xOx+StMpWKtqOv72TDeP/xTLtA==} + /@vinxi/server-functions@0.3.0(vinxi@0.3.4): + resolution: {integrity: sha512-WuYiXUyaxEzsXE2A5lrABHWap68jIynR/5tQTTdxcAPEkxUTchSBrakiXusUy1yU4BchqCwMGwwuoGb9qL54CQ==} peerDependencies: - vinxi: ^0.2.1 + vinxi: ^0.3.0 dependencies: - '@vinxi/plugin-directives': 0.2.0(vinxi@0.2.1) + '@vinxi/plugin-directives': 0.3.0(vinxi@0.3.4) acorn: 8.11.3 acorn-loose: 8.4.0 acorn-typescript: 1.4.13(acorn@8.11.3) astring: 1.8.6 magicast: 0.2.11 recast: 0.23.4 - vinxi: 0.2.1(preact@10.19.4)(rollup@3.29.4)(sass@1.70.0) + vinxi: 0.3.4(@types/node@20.11.22)(preact@10.19.6)(sass@1.71.1) dev: false /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: false - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: false - /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3185,7 +2328,6 @@ packages: /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} - hasBin: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -3265,8 +2407,8 @@ packages: readable-stream: 3.6.2 dev: false - /archiver@6.0.1: - resolution: {integrity: sha512-CXGy4poOLBKptiZH//VlWdFuUC1RESbdZjGjILwBuZ73P7WkAUN0htfSfBq/7k6FRFlpu7bg4JOkj1vU9G6jcQ==} + /archiver@6.0.2: + resolution: {integrity: sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw==} engines: {node: '>= 12.0.0'} dependencies: archiver-utils: 4.0.1 @@ -3275,7 +2417,13 @@ packages: readable-stream: 3.6.2 readdir-glob: 1.1.3 tar-stream: 3.1.7 - zip-stream: 5.0.1 + zip-stream: 5.0.2 + dev: false + + /arctic@1.2.1: + resolution: {integrity: sha512-Pahp2ZhXH7fqrsQKRkvcsVBTFXkpUzfxSuJcyHR5Zz83a2S8yNX3w3w5rbozezO3i0w5q1zgR27VMoiuR/hB/Q==} + dependencies: + oslo: 1.0.1 dev: false /are-we-there-yet@2.0.0: @@ -3297,9 +2445,9 @@ packages: /assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 is-nan: 1.3.2 - object-is: 1.1.5 + object-is: 1.1.6 object.assign: 4.1.5 util: 0.12.5 dev: false @@ -3313,7 +2461,6 @@ packages: /astring@1.8.6: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} - hasBin: true dev: false /async-sema@3.1.1: @@ -3324,87 +2471,45 @@ packages: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: false - /available-typed-arrays@1.0.6: - resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - dev: false - - /axios@0.25.0(debug@4.3.4): - resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} dependencies: - follow-redirects: 1.15.5(debug@4.3.4) - transitivePeerDependencies: - - debug + possible-typed-array-names: 1.0.0 dev: false /b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} dev: false - /babel-plugin-jsx-dom-expressions@0.37.16(@babel/core@7.23.9): - resolution: {integrity: sha512-ItMD16axbk+FqVb9vIbc7AOpNowy46VaSUHaMYPn+erPGpMCxsahQ1Iv+qhPMthjxtn5ROVMZ5AJtQvzjxjiNA==} + /babel-plugin-jsx-dom-expressions@0.37.17(@babel/core@7.24.0): + resolution: {integrity: sha512-1bv8rOTzs6TR3DVyVZ7ElxyPEhnS556FMWRIsB3gBPfkn/cSKaLvXLGk+X1lvI+SzcUo4G+UcmJrn3vr1ig8mQ==} peerDependencies: '@babel/core': ^7.20.12 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/types': 7.23.9 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) + '@babel/types': 7.24.0 html-entities: 2.3.3 validate-html-nesting: 1.2.2 dev: false - /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): - resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.9): - resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) - core-js-compat: 3.35.1 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.9): - resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-transform-hook-names@1.0.2(@babel/core@7.23.9): + /babel-plugin-transform-hook-names@1.0.2(@babel/core@7.24.0): resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} peerDependencies: '@babel/core': ^7.12.10 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: false - /babel-preset-solid@1.8.12(@babel/core@7.23.9): - resolution: {integrity: sha512-Fx1dYokeRwouWqjLkdobA6qvTAPxFSEU2c5PlkfJjlNyONlSMJQPaX0Bae5pc+5/LNteb9BseOp4UHwQu6VC9Q==} + /babel-preset-solid@1.8.15(@babel/core@7.24.0): + resolution: {integrity: sha512-P2yOQbB7Hn/m4YvpXV6ExHIMcgNWXWXcvY4kJzG3yqAB3hKS58OZRsvJ7RObsZWqXRvZTITBIwnpK0BMGu+ZIQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - babel-plugin-jsx-dom-expressions: 0.37.16(@babel/core@7.23.9) + '@babel/core': 7.24.0 + babel-plugin-jsx-dom-expressions: 0.37.17(@babel/core@7.24.0) dev: false /balanced-match@1.0.2: @@ -3431,8 +2536,8 @@ packages: file-uri-to-path: 1.0.0 dev: false - /birpc@0.2.15: - resolution: {integrity: sha512-LuZgWLW6DB1zenkfJuF4/kfSZdazOR2xaMSzeqgvfbNIwECwV1AJso9wpNje79uaRU86Obbujv4qtDnwoOLQww==} + /birpc@0.2.17: + resolution: {integrity: sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==} dev: false /boolbase@1.0.0: @@ -3477,15 +2582,14 @@ packages: dependencies: fill-range: 7.0.1 - /browserslist@4.22.3: - resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: - caniuse-lite: 1.0.30001587 - electron-to-chromium: 1.4.666 + caniuse-lite: 1.0.30001591 + electron-to-chromium: 1.4.686 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.3) + update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: false /buffer-crc32@0.2.13: @@ -3511,22 +2615,16 @@ packages: run-applescript: 5.0.0 dev: false - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: false - - /c12@1.7.0: - resolution: {integrity: sha512-luqIHUs5S5s4vcSa1TVIGxSC1dH8mBT8cxzRvrlHN/iZs+G/PkxsOb300ODuAdvRzUopyXYqg7cmdOGpcYaxwg==} + /c12@1.9.0: + resolution: {integrity: sha512-7KTCZXdIbOA2hLRQ+1KzJ15Qp9Wn58one74dkihMVp2H6EzKTa3OYBy0BSfS1CCcmxYyqeX8L02m40zjQ+dstg==} dependencies: chokidar: 3.6.0 + confbox: 0.1.3 defu: 6.1.4 - dotenv: 16.4.2 + dotenv: 16.4.5 giget: 1.2.1 jiti: 1.21.0 - json5: 2.2.3 - jsonc-parser: 3.2.1 - mlly: 1.5.0 + mlly: 1.6.1 ohash: 1.1.3 pathe: 1.1.2 perfect-debounce: 1.0.0 @@ -3534,10 +2632,11 @@ packages: rc9: 2.1.1 dev: false - /call-bind@1.0.6: - resolution: {integrity: sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 @@ -3553,8 +2652,8 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - /caniuse-lite@1.0.30001587: - resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} + /caniuse-lite@1.0.30001591: + resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} dev: false /chalk@2.4.2: @@ -3597,8 +2696,8 @@ packages: engines: {node: '>=10'} dev: false - /citty@0.1.5: - resolution: {integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==} + /citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} dependencies: consola: 3.2.3 dev: false @@ -3613,7 +2712,7 @@ packages: engines: {node: '>=0.10'} dependencies: d: 1.0.1 - es5-ext: 0.10.62 + es5-ext: 0.10.64 es6-iterator: 2.0.3 memoizee: 0.4.15 timers-ext: 0.1.7 @@ -3663,7 +2762,11 @@ packages: /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true + dev: false + + /colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} dev: false /commander@2.20.3: @@ -3679,8 +2782,8 @@ packages: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: false - /compress-commons@5.0.1: - resolution: {integrity: sha512-MPh//1cERdLtqwO3pOFLeXtpuai0Y2WCd5AhtKxznqM7WtaMYaOEMSgn45d9D10sIHSfIKE603HlOp8OPGrvag==} + /compress-commons@5.0.3: + resolution: {integrity: sha512-/UIcLWvwAQyVibgpQDPtfNM3SvqN7G9elAPAV7GM0L53EbNWwWiCsWtK8Fwed/APEbptPHXs5PuW+y8Bq8lFTA==} engines: {node: '>= 12.0.0'} dependencies: crc-32: 1.2.2 @@ -3689,47 +2792,16 @@ packages: readable-stream: 3.6.2 dev: false - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /connect@3.7.0: - resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} - engines: {node: '>= 0.10.0'} - dependencies: - debug: 2.6.9 - finalhandler: 1.1.2 - parseurl: 1.3.3 - utils-merge: 1.0.1 - transitivePeerDependencies: - - supports-color + /confbox@0.1.3: + resolution: {integrity: sha512-eH3ZxAihl1PhKfpr4VfEN6/vUd87fmgb6JkldHgg/YR6aEBhW63qUDgzP2Y6WM0UumdsYp5H3kibalXAdHfbgg==} dev: false /consola@3.2.3: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} - dev: false /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -3741,12 +2813,6 @@ packages: /cookie-es@1.0.0: resolution: {integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==} - dev: false - - /cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - dev: false /copy-anything@3.0.5: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} @@ -3755,12 +2821,6 @@ packages: is-what: 4.1.16 dev: true - /core-js-compat@3.35.1: - resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} - dependencies: - browserslist: 4.22.3 - dev: false - /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false @@ -3768,7 +2828,6 @@ packages: /crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} - hasBin: true dev: false /crc32-stream@5.0.0: @@ -3787,9 +2846,13 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /crossws@0.1.1: - resolution: {integrity: sha512-c9c/o7bS3OjsdpSkvexpka0JNlesBF2JU9B2V1yNsYGwRbAafxhJQ7VI9b48D5bpONz/oxbPGMzBojy9sXoQIQ==} - dev: false + /crossws@0.2.4: + resolution: {integrity: sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg==} + peerDependencies: + uWebSockets.js: '*' + peerDependenciesMeta: + uWebSockets.js: + optional: true /css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} @@ -3813,10 +2876,17 @@ packages: /d@1.0.1: resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: - es5-ext: 0.10.62 + es5-ext: 0.10.64 type: 1.2.0 dev: true + /dax-sh@0.39.2: + resolution: {integrity: sha512-gpuGEkBQM+5y6p4cWaw9+ePy5TNon+fdwFVtTI8leU3UhwhsBfPewRxMXGuQNC+M2b/MDGMlfgpqynkcd0C3FQ==} + dependencies: + '@deno/shim-deno': 0.19.1 + undici-types: 5.28.3 + dev: false + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3866,14 +2936,13 @@ packages: titleize: 3.0.0 dev: false - /define-data-property@1.1.2: - resolution: {integrity: sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 es-errors: 1.3.0 - get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 dev: false /define-lazy-prop@2.0.0: @@ -3890,14 +2959,13 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.2 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: false /defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - dev: false /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} @@ -3913,14 +2981,8 @@ packages: engines: {node: '>= 0.8'} dev: false - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: false - - /destr@2.0.2: - resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} - dev: false + /destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} @@ -3930,7 +2992,6 @@ packages: /detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} - hasBin: true dev: false /detect-libc@2.0.2: @@ -3992,8 +3053,8 @@ packages: type-fest: 3.13.1 dev: false - /dotenv@16.4.2: - resolution: {integrity: sha512-rZSSFxke7d9nYQ5NeMIwp5PP+f8wXgKNljpOb7KtH6SKW1cEqcXAz9VSJYVLKe7Jhup/gUYOkaeSVyK8GJ+nBg==} + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} /dreamopt@0.8.0: @@ -4005,7 +3066,6 @@ packages: /drizzle-kit@0.20.14: resolution: {integrity: sha512-0fHv3YIEaUcSVPSGyaaBfOi9bmpajjhbJNdPsRMIUvYdLVxBu9eGjH8mRc3Qk7HVmEidFc/lhG1YyJhoXrn5yA==} - hasBin: true dependencies: '@drizzle-team/studio': 0.0.39 '@esbuild-kit/esm-loader': 2.6.5 @@ -4025,8 +3085,8 @@ packages: - supports-color dev: true - /drizzle-orm@0.29.3(pg@8.11.3)(postgres@3.4.3): - resolution: {integrity: sha512-uSE027csliGSGYD0pqtM+SAQATMREb3eSM/U8s6r+Y0RFwTKwftnwwSkqx3oS65UBgqDOM0gMTl5UGNpt6lW0A==} + /drizzle-orm@0.29.4(pg@8.11.3)(postgres@3.4.3): + resolution: {integrity: sha512-ZnSM8TAxFhzH7p1s3+w3pRE/eKaOeNkH9SKitm717pubDVVcV2I0BCDBPGKV+pe02+wMfw37ntlTcCyo2rA3IA==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' @@ -4099,19 +3159,18 @@ packages: pg: 8.11.3 postgres: 3.4.3 - /drizzle-zod@0.5.1(drizzle-orm@0.29.3)(zod@3.22.4): + /drizzle-zod@0.5.1(drizzle-orm@0.29.4)(zod@3.22.4): resolution: {integrity: sha512-C/8bvzUH/zSnVfwdSibOgFjLhtDtbKYmkbPbUCq46QZyZCH6kODIMSOgZ8R7rVjoI+tCj3k06MRJMDqsIeoS4A==} peerDependencies: drizzle-orm: '>=0.23.13' zod: '*' dependencies: - drizzle-orm: 0.29.3(pg@8.11.3)(postgres@3.4.3) + drizzle-orm: 0.29.4(pg@8.11.3)(postgres@3.4.3) zod: 3.22.4 dev: true /dts-buddy@0.2.5: resolution: {integrity: sha512-66HTWHyXS3JwgpRwcu88rsDyZfPUb0oPYmiNg5f4BgCAFTVorJXpygf339QyXOXX1PuqHpvB+qo7O+8Ni1vXUQ==} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 '@jridgewell/sourcemap-codec': 1.4.15 @@ -4137,8 +3196,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /electron-to-chromium@1.4.666: - resolution: {integrity: sha512-q4lkcbQrUdlzWCUOxk6fwEza6bNCfV12oi4AJph5UibguD1aTfL4uD0nuzFv9hbPANXQMuUS0MxPSHQ1gqq5dg==} + /electron-to-chromium@1.4.686: + resolution: {integrity: sha512-3avY1B+vUzNxEgkBDpKOP8WarvUAEwpRaiCL0He5OKWEFxzaOFiq4WoZEZe7qh0ReS7DiWoHMnYoQCKxNZNzSg==} dev: false /emoji-regex@8.0.0: @@ -4174,6 +3233,13 @@ packages: stackframe: 1.3.4 dev: false + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: false + /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -4183,13 +3249,14 @@ packages: resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} dev: false - /es5-ext@0.10.62: - resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + /es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} engines: {node: '>=0.10'} requiresBuild: true dependencies: es6-iterator: 2.0.3 es6-symbol: 3.1.3 + esniff: 2.0.1 next-tick: 1.1.0 dev: true @@ -4197,7 +3264,7 @@ packages: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: d: 1.0.1 - es5-ext: 0.10.62 + es5-ext: 0.10.64 es6-symbol: 3.1.3 dev: true @@ -4212,26 +3279,11 @@ packages: resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} dependencies: d: 1.0.1 - es5-ext: 0.10.62 + es5-ext: 0.10.64 es6-iterator: 2.0.3 es6-symbol: 3.1.3 dev: true - /esbuild-plugin-solid@0.5.0(esbuild@0.17.19)(solid-js@1.8.14): - resolution: {integrity: sha512-ITK6n+0ayGFeDVUZWNMxX+vLsasEN1ILrg4pISsNOQ+mq4ljlJJiuXotInd+HE0MzwTcA9wExT1yzDE2hsqPsg==} - peerDependencies: - esbuild: '>=0.12' - solid-js: '>= 1.0' - dependencies: - '@babel/core': 7.23.9 - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.9) - babel-preset-solid: 1.8.12(@babel/core@7.23.9) - esbuild: 0.17.19 - solid-js: 1.8.14 - transitivePeerDependencies: - - supports-color - dev: false - /esbuild-register@3.5.0(esbuild@0.19.12): resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} peerDependencies: @@ -4243,40 +3295,9 @@ packages: - supports-color dev: true - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - dev: false - /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -4305,7 +3326,6 @@ packages: /esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.19.12 @@ -4356,23 +3376,23 @@ packages: engines: {node: '>=12'} dev: false - /eslint-config-prettier@9.1.0(eslint@8.56.0): + /eslint-config-prettier@9.1.0(eslint@8.57.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.56.0 + eslint: 8.57.0 dev: true - /eslint-plugin-solid@0.13.1(eslint@8.56.0)(typescript@5.3.3): + /eslint-plugin-solid@0.13.1(eslint@8.57.0)(typescript@5.3.3): resolution: {integrity: sha512-PdNrAylFzeh/SbnLc2pQ432l+bXFGzXj/qNqkh5QNVZCoWIdSs0CJA2D7hqW0DloztwUrzkVZCDWFWc3iRAm/Q==} engines: {node: '>=12.0.0'} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3) + eslint: 8.57.0 is-html: 2.0.0 kebab-case: 1.0.2 known-css-properties: 0.24.0 @@ -4395,15 +3415,14 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 + '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -4442,6 +3461,16 @@ packages: - supports-color dev: true + /esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.1 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.2 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4454,7 +3483,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true dev: false /esquery@1.5.0: @@ -4489,6 +3517,7 @@ packages: /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + dev: true /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} @@ -4499,7 +3528,7 @@ packages: resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} dependencies: d: 1.0.1 - es5-ext: 0.10.62 + es5-ext: 0.10.64 dev: true /eventemitter3@4.0.7: @@ -4530,7 +3559,7 @@ packages: human-signals: 4.3.1 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.2.0 + npm-run-path: 5.3.0 onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 @@ -4545,7 +3574,7 @@ packages: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.2.0 + npm-run-path: 5.3.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 @@ -4605,21 +3634,6 @@ packages: dependencies: to-regex-range: 5.0.1 - /finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -4632,21 +3646,20 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 dev: true /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true dev: false - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true - /follow-redirects@1.15.5(debug@4.3.4): + /follow-redirects@1.15.5: resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} peerDependencies: @@ -4654,8 +3667,6 @@ packages: peerDependenciesMeta: debug: optional: true - dependencies: - debug: 4.3.4 dev: false /for-each@0.3.3: @@ -4688,6 +3699,14 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -4730,7 +3749,7 @@ packages: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.1 dev: false @@ -4762,9 +3781,8 @@ packages: /giget@1.2.1: resolution: {integrity: sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==} - hasBin: true dependencies: - citty: 0.1.5 + citty: 0.1.6 consola: 3.2.3 defu: 6.1.4 node-fetch-native: 1.6.2 @@ -4839,7 +3857,7 @@ packages: resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} engines: {node: '>=18'} dependencies: - '@sindresorhus/merge-streams': 2.2.0 + '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.2 ignore: 5.3.1 path-type: 5.0.0 @@ -4877,7 +3895,7 @@ packages: dependencies: cookie-es: 1.0.0 defu: 6.1.4 - destr: 2.0.2 + destr: 2.0.3 iron-webcrypto: 1.0.0 ohash: 1.1.3 radix3: 1.1.0 @@ -4886,6 +3904,22 @@ packages: unenv: 1.9.0 dev: false + /h3@1.11.1: + resolution: {integrity: sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==} + dependencies: + cookie-es: 1.0.0 + crossws: 0.2.4 + defu: 6.1.4 + destr: 2.0.3 + iron-webcrypto: 1.0.0 + ohash: 1.1.3 + radix3: 1.1.0 + ufo: 1.4.0 + uncrypto: 0.1.3 + unenv: 1.9.0 + transitivePeerDependencies: + - uWebSockets.js + /hanji@0.0.5: resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} dependencies: @@ -4903,14 +3937,14 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.4 + es-define-property: 1.0.0 dev: false - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} dev: false @@ -4939,7 +3973,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true dev: false /heap@0.2.7: @@ -4979,7 +4012,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.5(debug@4.3.4) + follow-redirects: 1.15.5 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -4990,6 +4023,11 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: false + /http-status@1.7.4: + resolution: {integrity: sha512-c2qSwNtTlHVYAhMj9JpGdyo0No/+DiKXCJ9pHtZ2Yf3QmPnBIytKSRT7BuyIiQ7icXLynavGmxUqkOjSrAuMuA==} + engines: {node: '>= 0.4.0'} + dev: false + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -5071,13 +4109,12 @@ packages: /iron-webcrypto@1.0.0: resolution: {integrity: sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==} - dev: false /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 has-tostringtag: 1.0.2 dev: false @@ -5108,13 +4145,11 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true dev: false /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true dev: false /is-extglob@2.1.1: @@ -5149,7 +4184,6 @@ packages: /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} - hasBin: true dependencies: is-docker: 3.0.0 dev: false @@ -5162,7 +4196,7 @@ packages: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 dev: false @@ -5184,10 +4218,6 @@ packages: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} dev: true - /is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - dev: false - /is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} dependencies: @@ -5240,26 +4270,20 @@ packages: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: false + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + dev: false + /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: false - - /joi@17.12.1: - resolution: {integrity: sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==} - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - dev: false - - /jose@5.2.2: - resolution: {integrity: sha512-/WByRr4jDcsKlvMd1dRJnPfS1GVO3WuKyaurJ/vvXcOaUQO8rnNObCQMlv/5uCceVQIq5Q4WLF44ohsdiTohdg==} dev: false /js-tokens@4.0.0: @@ -5268,19 +4292,12 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: false - /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true dev: false /json-buffer@3.0.1: @@ -5289,7 +4306,6 @@ packages: /json-diff@0.9.0: resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} - hasBin: true dependencies: cli-color: 2.0.3 difflib: 0.2.4 @@ -5304,10 +4320,19 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /json-stable-stringify@1.1.1: + resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + dev: false + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - hasBin: true dev: false /jsonc-parser@3.2.1: @@ -5322,6 +4347,10 @@ packages: graceful-fs: 4.2.11 dev: false + /jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: false + /kebab-case@1.0.2: resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==} dev: true @@ -5369,35 +4398,36 @@ packages: type-check: 0.4.0 dev: true - /listhen@1.6.0: - resolution: {integrity: sha512-z0RcEXVX5oTpY1bO02SKoTU/kmZSrFSngNNzHRM6KICR17PTq7ANush6AE6ztGJwJD4RLpBrVHd9GnV51J7s3w==} - hasBin: true + /listhen@1.7.2: + resolution: {integrity: sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==} dependencies: - '@parcel/watcher': 2.4.0 - '@parcel/watcher-wasm': 2.4.0 - citty: 0.1.5 + '@parcel/watcher': 2.4.1 + '@parcel/watcher-wasm': 2.4.1 + citty: 0.1.6 clipboardy: 4.0.0 consola: 3.2.3 - crossws: 0.1.1 + crossws: 0.2.4 defu: 6.1.4 get-port-please: 3.1.2 - h3: 1.10.1 + h3: 1.11.1 http-shutdown: 1.2.2 jiti: 1.21.0 - mlly: 1.5.0 + mlly: 1.6.1 node-forge: 1.3.1 pathe: 1.1.2 std-env: 3.7.0 ufo: 1.4.0 untun: 0.1.3 uqr: 0.1.2 + transitivePeerDependencies: + - uWebSockets.js dev: false /local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} dependencies: - mlly: 1.5.0 + mlly: 1.6.1 pkg-types: 1.0.3 dev: false @@ -5412,10 +4442,6 @@ packages: p-locate: 5.0.0 dev: true - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: false - /lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} dev: false @@ -5456,9 +4482,15 @@ packages: /lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} dependencies: - es5-ext: 0.10.62 + es5-ext: 0.10.64 dev: true + /lucia@3.0.1: + resolution: {integrity: sha512-srwUkTCGgr6N4mFpaKZVZy5kwiRZdsrbIDv9Wrjar+xyw1MjojYQQ7oRbegjRWOZ3yI8xOOclK3sz/rga2J7/w==} + dependencies: + oslo: 1.0.1 + dev: false + /magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -5476,8 +4508,8 @@ packages: /magicast@0.2.11: resolution: {integrity: sha512-6saXbRDA1HMkqbsvHOU6HBjCVgZT460qheRkLhJQHWAbhXoWESI3Kn/dGGXyKs15FFKR85jsUqFx2sMK0wy/5g==} dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 recast: 0.23.4 dev: false @@ -5492,7 +4524,7 @@ packages: resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} dependencies: d: 1.0.1 - es5-ext: 0.10.62 + es5-ext: 0.10.64 es6-weak-map: 2.0.3 event-emitter: 0.3.5 is-promise: 2.2.2 @@ -5523,29 +4555,14 @@ packages: braces: 3.0.2 picomatch: 2.3.1 - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} - hasBin: true dev: false /mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} - hasBin: true - dev: false /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -5582,10 +4599,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: false - /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -5609,11 +4622,10 @@ packages: /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} - hasBin: true dev: false - /mlly@1.5.0: - resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} + /mlly@1.6.1: + resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} dependencies: acorn: 8.11.3 pathe: 1.1.2 @@ -5655,18 +4667,12 @@ packages: /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true dev: false /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false - /next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: true @@ -5682,27 +4688,27 @@ packages: optional: true dependencies: '@cloudflare/kv-asset-handler': 0.3.1 - '@netlify/functions': 2.5.1 - '@rollup/plugin-alias': 5.1.0(rollup@4.10.0) - '@rollup/plugin-commonjs': 25.0.7(rollup@4.10.0) - '@rollup/plugin-inject': 5.0.5(rollup@4.10.0) - '@rollup/plugin-json': 6.1.0(rollup@4.10.0) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.10.0) - '@rollup/plugin-replace': 5.0.5(rollup@4.10.0) - '@rollup/plugin-terser': 0.4.4(rollup@4.10.0) - '@rollup/plugin-wasm': 6.2.2(rollup@4.10.0) - '@rollup/pluginutils': 5.1.0(rollup@4.10.0) + '@netlify/functions': 2.6.0 + '@rollup/plugin-alias': 5.1.0(rollup@4.12.0) + '@rollup/plugin-commonjs': 25.0.7(rollup@4.12.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.12.0) + '@rollup/plugin-json': 6.1.0(rollup@4.12.0) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.12.0) + '@rollup/plugin-replace': 5.0.5(rollup@4.12.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.12.0) + '@rollup/plugin-wasm': 6.2.2(rollup@4.12.0) + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) '@types/http-proxy': 1.17.14 '@vercel/nft': 0.24.4 - archiver: 6.0.1 - c12: 1.7.0 + archiver: 6.0.2 + c12: 1.9.0 chalk: 5.3.0 chokidar: 3.6.0 - citty: 0.1.5 + citty: 0.1.6 consola: 3.2.3 cookie-es: 1.0.0 defu: 6.1.4 - destr: 2.0.2 + destr: 2.0.3 dot-prop: 8.0.2 esbuild: 0.19.12 escape-string-regexp: 5.0.0 @@ -5711,17 +4717,17 @@ packages: fs-extra: 11.2.0 globby: 14.0.1 gzip-size: 7.0.0 - h3: 1.10.1 + h3: 1.11.1 hookable: 5.5.3 httpxy: 0.1.5 is-primitive: 3.0.1 jiti: 1.21.0 klona: 2.0.6 knitwork: 1.0.0 - listhen: 1.6.0 + listhen: 1.7.2 magic-string: 0.30.7 mime: 3.0.0 - mlly: 1.5.0 + mlly: 1.6.1 mri: 1.2.0 node-fetch-native: 1.6.2 ofetch: 1.3.3 @@ -5732,8 +4738,8 @@ packages: pkg-types: 1.0.3 pretty-bytes: 6.1.1 radix3: 1.1.0 - rollup: 4.10.0 - rollup-plugin-visualizer: 5.12.0(rollup@4.10.0) + rollup: 4.12.0 + rollup-plugin-visualizer: 5.12.0(rollup@4.12.0) scule: 1.3.0 semver: 7.6.0 serve-placeholder: 2.0.1 @@ -5743,7 +4749,7 @@ packages: uncrypto: 0.1.3 unctx: 2.3.1 unenv: 1.9.0 - unimport: 3.7.1(rollup@4.10.0) + unimport: 3.7.1(rollup@4.12.0) unstorage: 1.10.1 transitivePeerDependencies: - '@azure/app-configuration' @@ -5760,6 +4766,7 @@ packages: - encoding - idb-keyval - supports-color + - uWebSockets.js dev: false /node-addon-api@7.1.0: @@ -5769,7 +4776,6 @@ packages: /node-fetch-native@1.6.2: resolution: {integrity: sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w==} - dev: false /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} @@ -5790,7 +4796,6 @@ packages: /node-gyp-build@4.8.0: resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} - hasBin: true dev: false /node-html-parser@6.1.12: @@ -5807,7 +4812,6 @@ packages: /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} - hasBin: true dependencies: abbrev: 1.1.1 dev: false @@ -5823,8 +4827,8 @@ packages: path-key: 3.1.1 dev: false - /npm-run-path@5.2.0: - resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 @@ -5848,28 +4852,28 @@ packages: /nypm@0.3.6: resolution: {integrity: sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ==} engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true dependencies: - citty: 0.1.5 + citty: 0.1.6 execa: 8.0.1 pathe: 1.1.2 ufo: 1.4.0 dev: false - /oauth4webapi@2.10.3: - resolution: {integrity: sha512-9FkXEXfzVKzH63GUOZz1zMr3wBaICSzk6DLXx+CGdrQ10ItNk2ePWzYYc1fdmKq1ayGFb2aX97sRCoZ2s0mkDw==} - dev: false - /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: false - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 dev: false @@ -5882,7 +4886,7 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.6 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -5891,21 +4895,13 @@ packages: /ofetch@1.3.3: resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} dependencies: - destr: 2.0.2 + destr: 2.0.3 node-fetch-native: 1.6.2 ufo: 1.4.0 dev: false /ohash@1.1.3: resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} - dev: false - - /on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -5914,11 +4910,6 @@ packages: ee-first: 1.1.1 dev: false - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: false - /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -5957,19 +4948,18 @@ packages: is-wsl: 2.2.0 dev: false - /openapi-fetch@0.8.2: - resolution: {integrity: sha512-4g+NLK8FmQ51RW6zLcCBOVy/lwYmFJiiT+ckYZxJWxUxH4XFhsNcX2eeqVMfVOi+mDNFja6qDXIZAz2c5J/RVw==} + /openapi-fetch@0.9.2: + resolution: {integrity: sha512-EEzVCoGAbGP1Z3eTZXI0urHtvb+JRKLnPbnemsUzeTWcHCaAXsdhAWYfdLAx4fTNNUaL23BQLup8dQjMMkCRqA==} dependencies: - openapi-typescript-helpers: 0.0.5 + openapi-typescript-helpers: 0.0.7 dev: false - /openapi-typescript-helpers@0.0.5: - resolution: {integrity: sha512-MRffg93t0hgGZbYTxg60hkRIK2sRuEOHEtCUgMuLgbCC33TMQ68AmxskzUlauzZYD47+ENeGV/ElI7qnWqrAxA==} + /openapi-typescript-helpers@0.0.7: + resolution: {integrity: sha512-7nwlAtdA1fULipibFRBWE/rnF114q6ejRYzNvhdA/x+qTWAZhXGLc/368dlwMlyJDvCQMCnADjpzb5BS5ZmNSA==} dev: false /openapi-typescript@6.7.4: resolution: {integrity: sha512-EZyeW9Wy7UDCKv0iYmKrq2pVZtquXiD/YHiUClAKqiMi42nodx/EQH11K6fLqjt1IZlJmVokrAsExsBMM2RROQ==} - hasBin: true dependencies: ansi-colors: 4.1.3 fast-glob: 3.3.2 @@ -5990,6 +4980,13 @@ packages: type-check: 0.4.0 dev: true + /oslo@1.0.1: + resolution: {integrity: sha512-esfzZry+HfGgK/GCYkg7BRlLd3RH5aHa08wgLJPYjENXybi0BvXxGk0LbUj+lXfz2TkjPDHe4rB/o6JxRLHxBg==} + dependencies: + '@node-rs/argon2': 1.7.2 + '@node-rs/bcrypt': 1.9.2 + dev: false + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -6014,10 +5011,6 @@ packages: callsites: 3.1.0 dev: true - /parse-multipart-data@1.5.0: - resolution: {integrity: sha512-ck5zaMF0ydjGfejNMnlo5YU2oJ+pT+80Jb1y4ybanT27j+zbVP/jkYmCrUGsEln0Ox/hZmuvgy8Ra7AxbXP2Mw==} - dev: false - /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -6061,7 +5054,6 @@ packages: /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: false /perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -6135,10 +5127,29 @@ packages: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.1 - mlly: 1.5.0 + mlly: 1.6.1 pathe: 1.1.2 dev: false + /playwright-core@1.42.0: + resolution: {integrity: sha512-0HD9y8qEVlcbsAjdpBaFjmaTHf+1FeIddy8VJLeiqwhcNqGCBe4Wp2e8knpqiYbzxtxarxiXyNDw2cG8sCaNMQ==} + engines: {node: '>=16'} + dev: true + + /playwright@1.42.0: + resolution: {integrity: sha512-Ko7YRUgj5xBHbntrgt4EIw/nE//XBHOKVKnBjO1KuZkmkhlbgyggTe5s9hjqQ1LpN+Xg+kHsQyt5Pa0Bw5XpvQ==} + engines: {node: '>=16'} + dependencies: + playwright-core: 1.42.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: false + /postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} @@ -6170,21 +5181,8 @@ packages: resolution: {integrity: sha512-iHJn4+M9vbTdHSdDzNkC0crHq+1CUdFhx+YqCE+SqWxPjm+Zu63jq7yZborOBF64c8pc58O5uMudyL1FQcHacA==} engines: {node: '>=12'} - /preact-render-to-string@5.2.3(preact@10.11.3): - resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==} - peerDependencies: - preact: '>=10' - dependencies: - preact: 10.11.3 - pretty-format: 3.8.0 - dev: false - - /preact@10.11.3: - resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} - dev: false - - /preact@10.19.4: - resolution: {integrity: sha512-dwaX5jAh0Ga8uENBX1hSOujmKWgx9RtL80KaKUFLc6jb4vCEAc3EeZ0rnQO/FO4VgjfPMfoLFWnNG8bHuZ9VLw==} + /preact@10.19.6: + resolution: {integrity: sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==} dev: false /prelude-ls@1.2.1: @@ -6212,7 +5210,6 @@ packages: /prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} - hasBin: true dev: true /pretty-bytes@6.1.1: @@ -6220,10 +5217,6 @@ packages: engines: {node: ^14.13.1 || >=16.0.0} dev: false - /pretty-format@3.8.0: - resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} - dev: false - /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false @@ -6242,7 +5235,6 @@ packages: /radix3@1.1.0: resolution: {integrity: sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==} - dev: false /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -6259,7 +5251,7 @@ packages: resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} dependencies: defu: 6.1.4 - destr: 2.0.2 + destr: 2.0.3 flat: 5.0.2 dev: false @@ -6319,46 +5311,6 @@ packages: redis-errors: 1.2.0 dev: false - /regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: false - - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: false - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false - - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - dependencies: - '@babel/runtime': 7.23.9 - dev: false - - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: false - - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: false - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6384,7 +5336,6 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 @@ -6397,11 +5348,10 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 - /rollup-plugin-visualizer@5.12.0(rollup@3.29.4): + /rollup-plugin-visualizer@5.12.0(rollup@4.12.0): resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} engines: {node: '>=14'} hasBin: true @@ -6413,74 +5363,33 @@ packages: dependencies: open: 8.4.2 picomatch: 2.3.1 - rollup: 3.29.4 + rollup: 4.12.0 source-map: 0.7.4 yargs: 17.7.2 dev: false - /rollup-plugin-visualizer@5.12.0(rollup@4.10.0): - resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} - engines: {node: '>=14'} - hasBin: true - peerDependencies: - rollup: 2.x || 3.x || 4.x - peerDependenciesMeta: - rollup: - optional: true - dependencies: - open: 8.4.2 - picomatch: 2.3.1 - rollup: 4.10.0 - source-map: 0.7.4 - yargs: 17.7.2 - dev: false - - /rollup-route-manifest@1.0.0(rollup@3.29.4): - resolution: {integrity: sha512-3CmcMmCLAzJDUXiO3z6386/Pt8/k9xTZv8gIHyXI8hYGoAInnYdOsFXiGGzQRMy6TXR1jUZme2qbdwjH2nFMjg==} - engines: {node: '>=8'} - peerDependencies: - rollup: '>=2.0.0' - dependencies: - rollup: 3.29.4 - route-sort: 1.0.0 - dev: false - - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: false - - /rollup@4.10.0: - resolution: {integrity: sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==} + /rollup@4.12.0: + resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.10.0 - '@rollup/rollup-android-arm64': 4.10.0 - '@rollup/rollup-darwin-arm64': 4.10.0 - '@rollup/rollup-darwin-x64': 4.10.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.10.0 - '@rollup/rollup-linux-arm64-gnu': 4.10.0 - '@rollup/rollup-linux-arm64-musl': 4.10.0 - '@rollup/rollup-linux-riscv64-gnu': 4.10.0 - '@rollup/rollup-linux-x64-gnu': 4.10.0 - '@rollup/rollup-linux-x64-musl': 4.10.0 - '@rollup/rollup-win32-arm64-msvc': 4.10.0 - '@rollup/rollup-win32-ia32-msvc': 4.10.0 - '@rollup/rollup-win32-x64-msvc': 4.10.0 + '@rollup/rollup-android-arm-eabi': 4.12.0 + '@rollup/rollup-android-arm64': 4.12.0 + '@rollup/rollup-darwin-arm64': 4.12.0 + '@rollup/rollup-darwin-x64': 4.12.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 + '@rollup/rollup-linux-arm64-gnu': 4.12.0 + '@rollup/rollup-linux-arm64-musl': 4.12.0 + '@rollup/rollup-linux-riscv64-gnu': 4.12.0 + '@rollup/rollup-linux-x64-gnu': 4.12.0 + '@rollup/rollup-linux-x64-musl': 4.12.0 + '@rollup/rollup-win32-arm64-msvc': 4.12.0 + '@rollup/rollup-win32-ia32-msvc': 4.12.0 + '@rollup/rollup-win32-x64-msvc': 4.12.0 fsevents: 2.3.3 dev: false - /route-sort@1.0.0: - resolution: {integrity: sha512-SFgmvjoIhp5S4iBEDW3XnbT+7PRuZ55oRuNjY+CDB1SGZkyCG9bqQ3/dhaZTctTBYMAvDxd2Uy9dStuaUfgJqQ==} - engines: {node: '>= 6'} - dev: false - /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -6493,12 +5402,6 @@ packages: dependencies: queue-microtask: 1.2.3 - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.6.2 - dev: false - /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -6514,10 +5417,9 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false - /sass@1.70.0: - resolution: {integrity: sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==} + /sass@1.71.1: + resolution: {integrity: sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==} engines: {node: '>=14.0.0'} - hasBin: true dependencies: chokidar: 3.6.0 immutable: 4.3.5 @@ -6529,13 +5431,11 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true dev: false /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 @@ -6602,20 +5502,16 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: false - /set-cookie-parser@2.6.0: - resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - dev: false - /set-function-length@1.2.1: resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.2 + define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: false /setprototypeof@1.2.0: @@ -6683,108 +5579,32 @@ packages: resolution: {integrity: sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==} dev: false - /solid-js@1.8.14: - resolution: {integrity: sha512-kDfgHBm+ROVLDVuqaXh/jYz0ZVJ29TYfVsKsgDPtNcjoyaPtOvDX2l0tVnthjLdEXr7vDTYeqEYFfMkZakDsOQ==} + /solid-js@1.8.15: + resolution: {integrity: sha512-d0QP/efr3UVcwGgWVPveQQ0IHOH6iU7yUhc2piy8arNG8wxKmvUy1kFxyF8owpmfCWGB87usDKMaVnsNYZm+Vw==} dependencies: csstype: 3.1.3 seroval: 1.0.4 seroval-plugins: 1.0.4(seroval@1.0.4) dev: false - /solid-refresh@0.6.3(solid-js@1.8.14): + /solid-refresh@0.6.3(solid-js@1.8.15): resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} peerDependencies: solid-js: ^1.3 dependencies: '@babel/generator': 7.23.6 '@babel/helper-module-imports': 7.22.15 - '@babel/types': 7.23.9 - solid-js: 1.8.14 + '@babel/types': 7.24.0 + solid-js: 1.8.15 dev: false - /solid-start@0.2.32(@solidjs/meta@0.29.3)(@solidjs/router@0.12.0)(solid-js@1.8.14)(vite@5.1.1): - resolution: {integrity: sha512-5z8s7l2PiCbbqSuz+MAVSVIJ4/rnifesM9g0G/VldBVKdfwWet7noQdso0HC2xXkidFYKdD/mJG2M05o2bYiqw==} - hasBin: true - peerDependencies: - '@solidjs/meta': ^0.28.0 - '@solidjs/router': ^0.8.2 - solid-js: ^1.6.2 - solid-start-aws: '*' - solid-start-cloudflare-pages: '*' - solid-start-cloudflare-workers: '*' - solid-start-deno: '*' - solid-start-netlify: '*' - solid-start-node: '*' - solid-start-static: '*' - solid-start-vercel: '*' - vite: ^4.4.6 - peerDependenciesMeta: - solid-start-aws: - optional: true - solid-start-cloudflare-pages: - optional: true - solid-start-cloudflare-workers: - optional: true - solid-start-deno: - optional: true - solid-start-netlify: - optional: true - solid-start-node: - optional: true - solid-start-static: - optional: true - solid-start-vercel: - optional: true - dependencies: - '@babel/core': 7.23.9 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/preset-env': 7.23.9(@babel/core@7.23.9) - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.9) - '@babel/template': 7.23.9 - '@solidjs/meta': 0.29.3(solid-js@1.8.14) - '@solidjs/router': 0.12.0(solid-js@1.8.14) - '@types/cookie': 0.5.4 - '@types/debug': 4.1.12 - chokidar: 3.6.0 - compression: 1.7.4 - connect: 3.7.0 - debug: 4.3.4 - dequal: 2.0.3 - dotenv: 16.4.2 - es-module-lexer: 1.4.1 - esbuild: 0.17.19 - esbuild-plugin-solid: 0.5.0(esbuild@0.17.19)(solid-js@1.8.14) - fast-glob: 3.3.2 - get-port: 6.1.2 - parse-multipart-data: 1.5.0 - picocolors: 1.0.0 - rollup: 3.29.4 - rollup-plugin-visualizer: 5.12.0(rollup@3.29.4) - rollup-route-manifest: 1.0.0(rollup@3.29.4) - sade: 1.8.1 - set-cookie-parser: 2.6.0 - sirv: 2.0.4 - solid-js: 1.8.14 - terser: 5.27.0 - undici: 5.28.3 - vite: 5.1.1(sass@1.70.0) - vite-plugin-inspect: 0.7.42(rollup@3.29.4)(vite@5.1.1) - vite-plugin-solid: 2.9.1(solid-js@1.8.14)(vite@5.1.1) - wait-on: 6.0.1(debug@4.3.4) - transitivePeerDependencies: - - '@nuxt/kit' - - '@testing-library/jest-dom' - - supports-color - dev: false - - /solid-use@0.8.0(solid-js@1.8.14): + /solid-use@0.8.0(solid-js@1.8.15): resolution: {integrity: sha512-YX+XmcKLvSx3bwMimMhFy40ZkDnShnUcEw6cW6fSscwKEgl1TG3GlgAvkBmQ3AeWjvQSd8+HGTr82ImsrjkkqA==} engines: {node: '>=10'} peerDependencies: solid-js: ^1.7 dependencies: - solid-js: 1.8.14 + solid-js: 1.8.15 dev: false /source-map-js@1.0.2: @@ -6818,11 +5638,6 @@ packages: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} dev: false - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: false - /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -6832,8 +5647,8 @@ packages: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} dev: false - /streamx@2.15.8: - resolution: {integrity: sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ==} + /streamx@2.16.1: + resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==} dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 @@ -6951,7 +5766,7 @@ packages: dependencies: b4a: 1.6.6 fast-fifo: 1.3.2 - streamx: 2.15.8 + streamx: 2.16.1 dev: false /tar@6.2.0: @@ -6966,20 +5781,19 @@ packages: yallist: 4.0.0 dev: false - /terracotta@1.0.5(solid-js@1.8.14): + /terracotta@1.0.5(solid-js@1.8.15): resolution: {integrity: sha512-4jkpXGKemeWjsBGDoBK1tnovGfIEMM8+Fa99T0TD4VYUaZq6hXHEWMfHshxy1h+DzsanDAwSBIBM0NnOohzijw==} engines: {node: '>=10'} peerDependencies: solid-js: ^1.8 dependencies: - solid-js: 1.8.14 - solid-use: 0.8.0(solid-js@1.8.14) + solid-js: 1.8.15 + solid-use: 0.8.0(solid-js@1.8.15) dev: false - /terser@5.27.0: - resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} + /terser@5.28.1: + resolution: {integrity: sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==} engines: {node: '>=10'} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 acorn: 8.11.3 @@ -6994,7 +5808,7 @@ packages: /timers-ext@0.1.7: resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} dependencies: - es5-ext: 0.10.62 + es5-ext: 0.10.64 next-tick: 1.1.0 dev: true @@ -7090,22 +5904,18 @@ packages: /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} - hasBin: true dev: false /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} - hasBin: true dev: true /ufo@1.4.0: resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} - dev: false /uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - dev: false /unctx@2.3.1: resolution: {integrity: sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==} @@ -7118,13 +5928,16 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /undici-types@5.28.3: + resolution: {integrity: sha512-VJD0un4i6M1/lFOJPhacHdq6FadtlkdhKBed2W6yBqmrAr/W58oqENaOIX031stDVFwz9AemOLkIj/2AXAMLCg==} dev: false /undici@5.28.3: resolution: {integrity: sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==} engines: {node: '>=14.0'} dependencies: - '@fastify/busboy': 2.1.0 + '@fastify/busboy': 2.1.1 /unenv@1.9.0: resolution: {integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==} @@ -7134,67 +5947,23 @@ packages: mime: 3.0.0 node-fetch-native: 1.6.2 pathe: 1.1.2 - dev: false - - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: false - - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: false - - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: false - - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: false /unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} dev: false - /unimport@3.7.1(rollup@3.29.4): + /unimport@3.7.1(rollup@4.12.0): resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==} dependencies: - '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) acorn: 8.11.3 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 fast-glob: 3.3.2 local-pkg: 0.5.0 magic-string: 0.30.7 - mlly: 1.5.0 - pathe: 1.1.2 - pkg-types: 1.0.3 - scule: 1.3.0 - strip-literal: 1.3.0 - unplugin: 1.7.1 - transitivePeerDependencies: - - rollup - dev: false - - /unimport@3.7.1(rollup@4.10.0): - resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==} - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.10.0) - acorn: 8.11.3 - escape-string-regexp: 5.0.0 - estree-walker: 3.0.3 - fast-glob: 3.3.2 - local-pkg: 0.5.0 - magic-string: 0.30.7 - mlly: 1.5.0 + mlly: 1.6.1 pathe: 1.1.2 pkg-types: 1.0.3 scule: 1.3.0 @@ -7209,11 +5978,6 @@ packages: engines: {node: '>= 10.0.0'} dev: false - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: false - /unplugin@1.7.1: resolution: {integrity: sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw==} dependencies: @@ -7266,10 +6030,10 @@ packages: dependencies: anymatch: 3.1.3 chokidar: 3.6.0 - destr: 2.0.2 - h3: 1.10.1 + destr: 2.0.3 + h3: 1.11.1 ioredis: 5.3.2 - listhen: 1.6.0 + listhen: 1.7.2 lru-cache: 10.2.0 mri: 1.2.0 node-fetch-native: 1.6.2 @@ -7277,6 +6041,7 @@ packages: ufo: 1.4.0 transitivePeerDependencies: - supports-color + - uWebSockets.js dev: false /untildify@4.0.0: @@ -7286,20 +6051,19 @@ packages: /untun@0.1.3: resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} - hasBin: true dependencies: - citty: 0.1.5 + citty: 0.1.6 consola: 3.2.3 pathe: 1.1.2 dev: false - /update-browserslist-db@1.0.13(browserslist@4.22.3): + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.3 + browserslist: 4.23.0 escalade: 3.1.2 picocolors: 1.0.0 dev: false @@ -7332,38 +6096,28 @@ packages: which-typed-array: 1.1.14 dev: false - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: false - /validate-html-nesting@1.2.2: resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} dev: false - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: false - - /vinxi@0.2.1(preact@10.19.4)(rollup@3.29.4)(sass@1.70.0): - resolution: {integrity: sha512-zrgFO2XuKpdoW5VwlbieeQ0YhzMuuYCJyFWFyj41h9BnymHZ5dnKElALvFQn5JVzHhyrsdmlm8GU7tIuH786hw==} - hasBin: true + /vinxi@0.3.4(@types/node@20.11.22)(preact@10.19.6)(sass@1.71.1): + resolution: {integrity: sha512-WAQbutVIX9zE2U5jraq+uvW2ytzb59HtX+/KVKqZSgjfQQpCHyi3XNxRkf46WTM5gASDEDFaG0l5ZHunmf7/cw==} dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) '@types/micromatch': 4.0.6 '@types/serve-static': 1.15.5 '@types/ws': 8.5.10 - '@vinxi/devtools': 0.2.0(@babel/core@7.23.9)(preact@10.19.4)(rollup@3.29.4)(vite@4.5.0) + '@vinxi/devtools': 0.2.0(@babel/core@7.24.0)(preact@10.19.6)(vite@5.1.1) '@vinxi/listhen': 1.5.6 boxen: 7.1.1 - c12: 1.7.0 + c12: 1.9.0 chokidar: 3.6.0 - citty: 0.1.5 + citty: 0.1.6 consola: 3.2.3 cookie-es: 1.0.0 + dax-sh: 0.39.2 defu: 6.1.4 dts-buddy: 0.2.5 es-module-lexer: 1.4.1 @@ -7383,16 +6137,16 @@ packages: perfect-debounce: 1.0.0 radix3: 1.1.0 resolve: 1.22.8 - rollup-plugin-visualizer: 5.12.0(rollup@3.29.4) + rollup-plugin-visualizer: 5.12.0(rollup@4.12.0) serve-placeholder: 2.0.1 serve-static: 1.15.0 ufo: 1.4.0 uncrypto: 0.1.3 unctx: 2.3.1 unenv: 1.9.0 - unimport: 3.7.1(rollup@3.29.4) + unimport: 3.7.1(rollup@4.12.0) unstorage: 1.10.1 - vite: 4.5.0(sass@1.70.0) + vite: 5.1.1(@types/node@20.11.22)(sass@1.71.1) ws: 8.16.0 zod: 3.22.4 transitivePeerDependencies: @@ -7423,11 +6177,12 @@ packages: - sugarss - supports-color - terser + - uWebSockets.js - utf-8-validate - xml2js dev: false - /vite-plugin-inspect@0.7.42(rollup@3.29.4)(vite@4.5.0): + /vite-plugin-inspect@0.7.42(vite@5.1.1): resolution: {integrity: sha512-JCyX86wr3siQc+p9Kd0t8VkFHAJag0RaQVIpdFGSv5FEaePEVB6+V/RGtz2dQkkGSXQzRWrPs4cU3dRKg32bXw==} engines: {node: '>=14'} peerDependencies: @@ -7438,20 +6193,20 @@ packages: optional: true dependencies: '@antfu/utils': 0.7.7 - '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) debug: 4.3.4 error-stack-parser-es: 0.1.1 fs-extra: 11.2.0 open: 9.1.0 picocolors: 1.0.0 sirv: 2.0.4 - vite: 4.5.0(sass@1.70.0) + vite: 5.1.1(@types/node@20.11.22)(sass@1.71.1) transitivePeerDependencies: - rollup - supports-color dev: false - /vite-plugin-inspect@0.7.42(rollup@3.29.4)(vite@5.1.1): + /vite-plugin-inspect@0.7.42(vite@5.1.4): resolution: {integrity: sha512-JCyX86wr3siQc+p9Kd0t8VkFHAJag0RaQVIpdFGSv5FEaePEVB6+V/RGtz2dQkkGSXQzRWrPs4cU3dRKg32bXw==} engines: {node: '>=14'} peerDependencies: @@ -7462,21 +6217,21 @@ packages: optional: true dependencies: '@antfu/utils': 0.7.7 - '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@4.12.0) debug: 4.3.4 error-stack-parser-es: 0.1.1 fs-extra: 11.2.0 open: 9.1.0 picocolors: 1.0.0 sirv: 2.0.4 - vite: 5.1.1(sass@1.70.0) + vite: 5.1.4(@types/node@20.11.22)(sass@1.71.1) transitivePeerDependencies: - rollup - supports-color dev: false - /vite-plugin-solid@2.9.1(solid-js@1.8.14)(vite@4.5.0): - resolution: {integrity: sha512-RC4hj+lbvljw57BbMGDApvEOPEh14lwrr/GeXRLNQLcR1qnOdzOwwTSFy13Gj/6FNIZpBEl0bWPU+VYFawrqUw==} + /vite-plugin-solid@2.10.1(solid-js@1.8.15)(vite@5.1.1): + resolution: {integrity: sha512-kfVdNLWaJqaJVL52U6iCCKNW/nXE7bS1VVGOWPGllOkJfcNILymVSY0LCBLSnyy0iYnRtrXpiHm14rMuzeC7CA==} peerDependencies: '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* solid-js: ^1.7.2 @@ -7485,77 +6240,41 @@ packages: '@testing-library/jest-dom': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@types/babel__core': 7.20.5 - babel-preset-solid: 1.8.12(@babel/core@7.23.9) + babel-preset-solid: 1.8.15(@babel/core@7.24.0) merge-anything: 5.1.7 - solid-js: 1.8.14 - solid-refresh: 0.6.3(solid-js@1.8.14) - vite: 4.5.0(sass@1.70.0) - vitefu: 0.2.5(vite@4.5.0) - transitivePeerDependencies: - - supports-color - dev: false - - /vite-plugin-solid@2.9.1(solid-js@1.8.14)(vite@5.1.1): - resolution: {integrity: sha512-RC4hj+lbvljw57BbMGDApvEOPEh14lwrr/GeXRLNQLcR1qnOdzOwwTSFy13Gj/6FNIZpBEl0bWPU+VYFawrqUw==} - peerDependencies: - '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* - solid-js: ^1.7.2 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - '@testing-library/jest-dom': - optional: true - dependencies: - '@babel/core': 7.23.9 - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.8.12(@babel/core@7.23.9) - merge-anything: 5.1.7 - solid-js: 1.8.14 - solid-refresh: 0.6.3(solid-js@1.8.14) - vite: 5.1.1(sass@1.70.0) + solid-js: 1.8.15 + solid-refresh: 0.6.3(solid-js@1.8.15) + vite: 5.1.1(@types/node@20.11.22)(sass@1.71.1) vitefu: 0.2.5(vite@5.1.1) transitivePeerDependencies: - supports-color dev: false - /vite@4.5.0(sass@1.70.0): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true + /vite-plugin-solid@2.9.1(solid-js@1.8.15)(vite@5.1.4): + resolution: {integrity: sha512-RC4hj+lbvljw57BbMGDApvEOPEh14lwrr/GeXRLNQLcR1qnOdzOwwTSFy13Gj/6FNIZpBEl0bWPU+VYFawrqUw==} peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* + solid-js: ^1.7.2 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: + '@testing-library/jest-dom': optional: true dependencies: - esbuild: 0.18.20 - postcss: 8.4.35 - rollup: 3.29.4 - sass: 1.70.0 - optionalDependencies: - fsevents: 2.3.3 + '@babel/core': 7.24.0 + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.8.15(@babel/core@7.24.0) + merge-anything: 5.1.7 + solid-js: 1.8.15 + solid-refresh: 0.6.3(solid-js@1.8.15) + vite: 5.1.4(@types/node@20.11.22)(sass@1.71.1) + vitefu: 0.2.5(vite@5.1.4) + transitivePeerDependencies: + - supports-color dev: false - /vite@5.1.1(sass@1.70.0): + /vite@5.1.1(@types/node@20.11.22)(sass@1.71.1): resolution: {integrity: sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -7583,23 +6302,50 @@ packages: terser: optional: true dependencies: + '@types/node': 20.11.22 esbuild: 0.19.12 postcss: 8.4.35 - rollup: 4.10.0 - sass: 1.70.0 + rollup: 4.12.0 + sass: 1.71.1 optionalDependencies: fsevents: 2.3.3 dev: false - /vitefu@0.2.5(vite@4.5.0): - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + /vite@5.1.4(@types/node@20.11.22)(sass@1.71.1): + resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 peerDependenciesMeta: - vite: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: optional: true dependencies: - vite: 4.5.0(sass@1.70.0) + '@types/node': 20.11.22 + esbuild: 0.19.12 + postcss: 8.4.35 + rollup: 4.12.0 + sass: 1.71.1 + optionalDependencies: + fsevents: 2.3.3 dev: false /vitefu@0.2.5(vite@5.1.1): @@ -7610,21 +6356,18 @@ packages: vite: optional: true dependencies: - vite: 5.1.1(sass@1.70.0) + vite: 5.1.1(@types/node@20.11.22)(sass@1.71.1) dev: false - /wait-on@6.0.1(debug@4.3.4): - resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==} - engines: {node: '>=10.0.0'} - hasBin: true + /vitefu@0.2.5(vite@5.1.4): + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true dependencies: - axios: 0.25.0(debug@4.3.4) - joi: 17.12.1 - lodash: 4.17.21 - minimist: 1.2.8 - rxjs: 7.8.1 - transitivePeerDependencies: - - debug + vite: 5.1.4(@types/node@20.11.22)(sass@1.71.1) dev: false /webidl-conversions@3.0.1: @@ -7651,8 +6394,8 @@ packages: resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.6 - call-bind: 1.0.6 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 @@ -7661,10 +6404,16 @@ packages: /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 + /which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + dependencies: + isexe: 3.1.1 + dev: false + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: @@ -7754,12 +6503,12 @@ packages: engines: {node: '>=10'} dev: true - /zip-stream@5.0.1: - resolution: {integrity: sha512-UfZ0oa0C8LI58wJ+moL46BDIMgCQbnsb+2PoiJYtonhBsMh2bq1eRBVkvjfVsqbEHd9/EgKPUuL9saSSsec8OA==} + /zip-stream@5.0.2: + resolution: {integrity: sha512-LfOdrUvPB8ZoXtvOBz6DlNClfvi//b5d56mSWyJi7XbH/HfhOHfUhOqxhT/rUiR7yiktlunqRo+jY6y/cWC/5g==} engines: {node: '>= 12.0.0'} dependencies: archiver-utils: 4.0.1 - compress-commons: 5.0.1 + compress-commons: 5.0.3 readable-stream: 3.6.2 dev: false diff --git a/public/api/specs/liljudd.json b/public/api/specs/liljudd.json index faa29e4..8a6e2de 100644 --- a/public/api/specs/liljudd.json +++ b/public/api/specs/liljudd.json @@ -10,40 +10,67 @@ "version": "0.0.0" }, "paths": { - "/api/boot/config": { + "/api/boot": { "get": { - "tags": ["Guild configs"], - "summary": "Find a guild's config by ID", - "description": "Returns a single guild's config.", - "operationId": "getGuildsFromBoot", + "tags": ["Bot bootup"], + "summary": "Retrieve all guild's configs", + "description": "Returns all guild's configs.", + "operationId": "getGuildsForBoot", "responses": { "200": { "description": "successful operation", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/bootConfig" + "type": "array", + "items": { + "$ref": "#/components/schemas/guildConfig" + } } } } }, "400": { - "description": "Invalid ID supplied" + "description": "Invalid ID supplied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } }, "404": { - "description": "Guild not found" + "description": "Guild not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } } }, "security": [ { - "api_key": [] + "basicAuth": [] } ] } }, "/api/{guildId}/config": { "get": { - "tags": ["Guild configs"], + "tags": ["Guild config"], "summary": "Find a guild's config by ID", "description": "Returns a single guild's config.", "operationId": "getGuildById", @@ -71,28 +98,52 @@ } }, "400": { - "description": "Invalid ID supplied" + "description": "Invalid ID supplied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } }, "404": { - "description": "Guild not found" + "description": "Guild not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } } }, "security": [ { - "api_key": [] + "basicAuth": [] } ] }, - "delete": { - "tags": ["Guild configs"], - "summary": "Deletes a guild's config by ID", - "description": "Delete a guild's config when the bot is removed from the guild.", - "operationId": "deleteGuildById", + "post": { + "tags": ["Guild config"], + "summary": "Creates a guild's config by ID", + "description": "Create a guild's config when the bot is has joined a new guild.", + "operationId": "postGuildById", "parameters": [ { "name": "guildId", "in": "path", - "description": "ID of guild config to delete", + "description": "ID of guild's config to create", "required": true, "schema": { "type": "string", @@ -105,30 +156,112 @@ "description": "successful operation" }, "400": { - "description": "Invalid ID supplied" + "description": "Invalid ID supplied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } }, "404": { - "description": "Guild not found" + "description": "Guild not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } } }, "security": [ { - "api_key": [] + "basicAuth": [] } ] - } - }, - "/api/{guildId}/tp_messages": { - "get": { - "tags": ["Time planning messages"], - "summary": "Find the tp_messages of guild by ID", - "description": "Returns tp_messages for a guild", - "operationId": "getTp_messagesOfGuildById", + }, + "delete": { + "tags": ["Guild config"], + "summary": "Deletes a guild's config by ID", + "description": "Delete a guild's config when the bot is removed from the guild.", + "operationId": "deleteGuildById", "parameters": [ { "name": "guildId", "in": "path", - "description": "ID of guild's tp_messages to return", + "description": "ID of guild's config to delete", + "required": true, + "schema": { + "type": "string", + "format": "varchar(20)" + } + } + ], + "responses": { + "204": { + "description": "successful operation" + }, + "400": { + "description": "Invalid ID supplied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "404": { + "description": "Guild not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + } + ] + } + }, + "/api/{guildId}/timePlanning": { + "get": { + "tags": ["Time planning messages"], + "summary": "Find the timePlanning of guild by ID", + "description": "Returns timePlanning for a guild", + "operationId": "gettimePlanningOfGuildById", + "parameters": [ + { + "name": "guildId", + "in": "path", + "description": "ID of guild's timePlanning to return", "required": true, "schema": { "type": "string", @@ -142,37 +275,58 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tp_messages" + "$ref": "#/components/schemas/timePlanning" } } } }, - "204": { - "description": "Time planning not enabled for this guild" - }, "400": { - "description": "Invalid ID supplied" + "description": "Invalid ID supplied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } }, "404": { - "description": "Guild not found" + "description": "Guild not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } } }, "security": [ { - "api_key": [] + "basicAuth": [] } ] }, "put": { "tags": ["Time planning messages"], - "summary": "Put message IDs for tp_messages of guild by ID", - "description": "Returns tp_messages for a guild", - "operationId": "putTp_messagesOfGuildById", + "summary": "Put new message IDs for timePlanning of guild by ID", + "description": "Returns timePlanning for a guild", + "operationId": "puttimePlanningOfGuildById", "parameters": [ { "name": "guildId", "in": "path", - "description": "ID of guild's tp_messages to return", + "description": "ID of guild's timePlanning to return", "required": true, "schema": { "type": "string", @@ -180,30 +334,55 @@ } } ], + "requestBody": { + "description": "Put new message IDs for timePlanning in channel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/timePlanning" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "successful operation", + "204": { + "description": "successful operation" + }, + "400": { + "description": "Invalid ID supplied", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tp_messages" + "$ref": "#/components/schemas/error" } } } }, - "204": { - "description": "Time planning not enabled for this guild" - }, - "400": { - "description": "Invalid ID supplied" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } }, "404": { - "description": "Guild not found" + "description": "Guild not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } } }, "security": [ { - "api_key": [] + "basicAuth": [] } ] } @@ -212,13 +391,13 @@ "get": { "tags": ["Matches"], "summary": "Find all matches of guild by ID", - "description": "Returns tp_messages for a guild", + "description": "Returns timePlanning for a guild", "operationId": "getMatchesOfGuildById", "parameters": [ { "name": "guildId", "in": "path", - "description": "ID of guild's tp_messages to return", + "description": "ID of guild's timePlanning to return", "required": true, "schema": { "type": "string", @@ -232,36 +411,66 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tp_messages" + "type": "object", + "required": ["matches", "timezone"], + "properties": { + "matches": { + "type": "array", + "items": { + "$ref": "#/components/schemas/match" + } + }, + "timezone": { + "type": "string", + "format": "text", + "example": "Europe/Berlin" + } } } } } }, - "204": { - "description": "Time planning not enabled for this guild" - }, "400": { - "description": "Invalid ID supplied" + "description": "Invalid ID supplied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } }, "404": { - "description": "Guild not found" + "description": "Guild not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } } }, "security": [ { - "api_key": [] + "basicAuth": [] } ] - } - }, - "/api/{guildId}/matches/{channelId}": { + }, "post": { "tags": ["Matches"], - "summary": "Save a new created match in channel of guild by IDs", - "description": "Returns tp_messages for a guild", + "summary": "Save a new created match of guild by ID", + "description": "Returns timePlanning for a guild", "operationId": "postMatchOfGuildById", "parameters": [ { @@ -273,108 +482,69 @@ "type": "string", "format": "varchar(20)" } - }, - { - "name": "channelId", - "in": "path", - "description": "ID of match's channel to set", - "required": true, - "schema": { - "type": "string", - "format": "varchar(20)" - } } ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tp_messages" + "requestBody": { + "description": "Save a new created match in channel", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["match", "timezone"], + "properties": { + "match": { + "$ref": "#/components/schemas/match" + }, + "timezone": { + "type": "string", + "format": "text", + "example": "Europe/Berlin", + "description": "Has to match guild tz" + } } } } }, + "required": true + }, + "responses": { "204": { - "description": "Time planning not enabled for this guild" + "description": "successful operation" }, "400": { - "description": "Invalid ID supplied" - }, - "404": { - "description": "Guild not found" - } - }, - "security": [ - { - "api_key": [] - } - ] - } - }, - "/api/{guildId}/matches/{channelId}/{matchMessageId}": { - "put": { - "tags": ["Matches"], - "summary": "Set state for match of guild by IDs", - "description": "Returns tp_messages for a guild", - "operationId": "putMatchOfGuildById", - "parameters": [ - { - "name": "guildId", - "in": "path", - "description": "ID of guild's tp_messages to return", - "required": true, - "schema": { - "type": "string", - "format": "varchar(20)" - } - }, - { - "name": "channelId", - "in": "path", - "description": "ID of match's channel to set", - "required": true, - "schema": { - "type": "string", - "format": "varchar(20)" - } - }, - { - "name": "matchMessageId", - "in": "path", - "description": "ID of match's message Id to set", - "required": true, - "schema": { - "type": "string", - "format": "varchar(20)" - } - } - ], - "responses": { - "200": { - "description": "successful operation", + "description": "Invalid ID supplied", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tp_messages" + "$ref": "#/components/schemas/error" } } } }, - "204": { - "description": "Time planning not enabled for this guild" - }, - "400": { - "description": "Invalid ID supplied" + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } }, "404": { - "description": "Guild not found" + "description": "Guild not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } } }, "security": [ { - "api_key": [] + "basicAuth": [] } ] } @@ -382,27 +552,12 @@ }, "components": { "schemas": { - "bootConfig": { - "type": "object", - "properties": { - "guilds": { - "type": "array", - "items": { - "$ref": "#/components/schemas/guildConfig" - } - }, - "accessToken": { - "type": "string" - } - } - }, "guildConfig": { "type": "object", + "required": ["guildId", "timezone", "features", "matches", "checksum"], "properties": { - "guildID": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789" + "guildId": { + "$ref": "#/components/schemas/id" }, "timezone": { "type": "string", @@ -411,14 +566,24 @@ }, "features": { "type": "object", + "required": ["timePlanning"], "properties": { - "time_planning": { + "timePlanning": { "type": "object", + "required": [ + "enabled", + "channelId", + "targetMinute", + "targetHour", + "targetDay", + "roles" + ], "properties": { - "channelID": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789" + "enabled": { + "type": "boolean" + }, + "channelId": { + "$ref": "#/components/schemas/idOrNull" }, "targetMinute": { "type": "number", @@ -434,21 +599,20 @@ }, "roles": { "type": "object", + "required": [ + "enabled", + "isAvailableRoleId", + "wantsToBeNotifieRoledId" + ], "properties": { "enabled": { "type": "boolean" }, "isAvailableRoleId": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789", - "nullable": true + "$ref": "#/components/schemas/idOrNull" }, "wantsToBeNotifieRoledId": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789", - "nullable": true + "$ref": "#/components/schemas/idOrNull" } } } @@ -461,85 +625,132 @@ "items": { "$ref": "#/components/schemas/match" } + }, + "checksum": { + "type": "string" } } }, "match": { "type": "object", + "required": [ + "channelId", + "matchType", + "createrId", + "roleId", + "opponentName", + "messageId", + "utc_ts" + ], "properties": { - "channelID": { - "type": "string", - "format": "varcharq(20)", - "example": "1234567890123456789" + "channelId": { + "$ref": "#/components/schemas/id" + }, + "createrId": { + "$ref": "#/components/schemas/id" + }, + "roleId": { + "$ref": "#/components/schemas/id" + }, + "messageId": { + "$ref": "#/components/schemas/id" }, "matchType": { "type": "string", "format": "varchar(50)", "example": "Scrim" }, - "createrId": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789" - }, - "roleId": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789" - }, "opponentName": { "type": "string", "format": "varchar(100)", "example": "?" }, - "messsageId": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789" - }, "utc_ts": { "type": "string", - "example": "1706180188" + "example": "2020-01-01T00:00:00Z" } } }, - "tp_messages": { + "timePlanning": { "type": "object", + "required": [ + "enabled", + "channelId", + "rolesEnabled", + "isAvailableRoleId", + "wantsToBeNotifieRoledId", + "messageIds" + ], "properties": { - "guildId": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789" + "enabled": { + "type": "boolean" }, "channelId": { - "type": "string", - "format": "varchar(20)", - "example": "1234567890123456789" + "$ref": "#/components/schemas/idOrNull" + }, + "rolesEnabled": { + "type": "boolean" + }, + "isAvailableRoleId": { + "$ref": "#/components/schemas/idOrNull" + }, + "wantsToBeNotifieRoledId": { + "$ref": "#/components/schemas/idOrNull" }, "messageIds": { - "type": "array", - "items": { - "type": "string", - "format": "varchar(20)" - }, - "example": [ - "1234567890123456789", - "1234567890123456789", - "1234567890123456789", - "1234567890123456789", - "1234567890123456789", - "1234567890123456789", - "1234567890123456789" - ] + "type": "object", + "required": ["0", "1", "2", "3", "4", "5", "6"], + "properties": { + "0": { + "$ref": "#/components/schemas/idOrNull" + }, + "1": { + "$ref": "#/components/schemas/idOrNull" + }, + "2": { + "$ref": "#/components/schemas/idOrNull" + }, + "3": { + "$ref": "#/components/schemas/idOrNull" + }, + "4": { + "$ref": "#/components/schemas/idOrNull" + }, + "5": { + "$ref": "#/components/schemas/idOrNull" + }, + "6": { + "$ref": "#/components/schemas/idOrNull" + } + } + } + } + }, + "id": { + "type": "string", + "pattern": "^\\d{7,20}$", + "example": "1234567890123456789" + }, + "idOrNull": { + "type": "string", + "pattern": "^\\d{7,20}$", + "example": "1234567890123456789", + "nullable": true + }, + "error": { + "type": "object", + "required": "error", + "properties": { + "error": { + "type": "string" } } } }, "securitySchemes": { - "api_key": { - "type": "apiKey", - "name": "api_key", - "in": "header" + "basicAuth": { + "type": "http", + "scheme": "basic" } } } diff --git a/sample_conf.json b/sample_conf.json deleted file mode 100644 index 539c5b4..0000000 --- a/sample_conf.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "data": { - "guilds": [ - { - "guildID": "some ID", - "UTCOffset": 0, - "features": { - "time_planning": { - "channelID": "some ID", - "targetWeekday": 0, - "targetHour": 0, - "targetMinute": 0, - "isAvailableRoleId": "some ID", - "wantsToBeNotifieRoledId": "some ID" - } - }, - "matches": [ - { - "channelID": "some ID", - "matchType": "", - "createrId": "some ID", - "roleId": "some ID", - "opponentName": "", - "messsageId": "", - "plannedFor": 1704314625000 - } - ] - } - ] - }, - "accessToken": "some Token" -} diff --git a/src/components/NavBar.tsx b/src/components/NavBar.tsx index fffda85..82d9bfc 100644 --- a/src/components/NavBar.tsx +++ b/src/components/NavBar.tsx @@ -1,22 +1,24 @@ import { faCirclePlus } from "@fortawesome/pro-regular-svg-icons"; -import { JSX, Show, Suspense } from "solid-js"; +import { JSX, Show } from "solid-js"; import "../styles/components/NavBar.scss"; import { FontAwesomeIcon } from "./FontAwesomeIcon"; import NavUser from "./NavUser"; +if (typeof import.meta.env.VITE_DISCORD_CLIENT_ID === "undefined") + throw new Error("No env VITE_DISCORD_CLIENT_ID found!"); + +if (typeof import.meta.env.VITE_DISCORD_OAUTH2_PERMISSIONS === "undefined") + throw new Error("No env VITE_DISCORD_OAUTH2_PERMISSIONS found!"); + export function Li(props: { href: string; - action?: () => void; + rel?: string; name?: string; children?: JSX.Element; }) { return (
  • - User pfp + User pfp
  • -
  • signOut({ callbackUrl: "/" })}> +
  • diff --git a/src/drizzle/index.ts b/src/drizzle/index.ts index 5838965..a470b90 100644 --- a/src/drizzle/index.ts +++ b/src/drizzle/index.ts @@ -2,7 +2,10 @@ import { drizzle } from "drizzle-orm/postgres-js"; import postgres from "postgres"; import * as schema from "./schema"; -const queryClient = postgres(import.meta.env.VITE_DATABASE_URL ?? ""); +if (typeof import.meta.env.VITE_DATABASE_URL === "undefined") + throw new Error("No env VITE_DATABASE_URL found!"); + +const queryClient = postgres(import.meta.env.VITE_DATABASE_URL); const db = drizzle(queryClient, { schema, }); diff --git a/src/drizzle/schema.ts b/src/drizzle/schema.ts index 1539c41..cf96bab 100644 --- a/src/drizzle/schema.ts +++ b/src/drizzle/schema.ts @@ -1,8 +1,7 @@ -import type { AdapterAccount } from "@auth/core/adapters"; import { relations } from "drizzle-orm"; import { + bigint, boolean, - integer, pgTable, primaryKey, serial, @@ -13,130 +12,90 @@ import { } from "drizzle-orm/pg-core"; export const users = pgTable("user", { - id: text("id").notNull().primaryKey(), + id: varchar("id", { length: 24 }).primaryKey(), + discord_id: text("discord_id").notNull(), name: text("name"), - email: text("email").notNull(), - emailVerified: timestamp("emailVerified", { mode: "date" }), image: text("image"), }); -export const accounts = pgTable( - "account", - { - userId: text("userId") - .notNull() - .references(() => users.id, { onDelete: "cascade" }), - type: text("type").$type().notNull(), - provider: text("provider").notNull(), - providerAccountId: text("providerAccountId").notNull(), - refresh_token: text("refresh_token"), - access_token: text("access_token"), - expires_at: integer("expires_at"), - token_type: text("token_type"), - scope: text("scope"), - id_token: text("id_token"), - session_state: text("session_state"), - }, - (account) => ({ - compoundKey: primaryKey({ - columns: [account.provider, account.providerAccountId], - }), - }), -); - export const sessions = pgTable("session", { - sessionToken: text("sessionToken").notNull().primaryKey(), - userId: text("userId") + id: varchar("id", { length: 24 }).primaryKey(), + userId: varchar("user_id", { length: 24 }) .notNull() .references(() => users.id, { onDelete: "cascade" }), - expires: timestamp("expires", { mode: "date" }).notNull(), + expiresAt: timestamp("expires_at", { + withTimezone: true, + mode: "date", + }).notNull(), }); -export const verificationTokens = pgTable( - "verificationToken", - { - identifier: text("identifier").notNull(), - token: text("token").notNull(), - expires: timestamp("expires", { mode: "date" }).notNull(), - }, - (vt) => ({ - compoundKey: primaryKey({ columns: [vt.identifier, vt.token] }), +export const discordTokens = pgTable("tokens", { + userId: varchar("user_id", { length: 24 }) + .primaryKey() + .references(() => users.id, { onDelete: "cascade" }), + refreshToken: text("refresh_token").notNull(), + accessToken: text("access_token").notNull(), + expiresAt: timestamp("expires_at", { mode: "date" }).notNull(), +}); + +export const guilds = pgTable("guilds", { + id: bigint("id", { mode: "bigint" }).primaryKey(), + timezone: text("timezone").notNull().default("Etc/UTC"), + tpEnabled: boolean("tp_enabled").notNull().default(false), + tpChannelId: bigint("tp_channel_id", { mode: "bigint" }), + tpInterval: smallint("target_interval").notNull().default(64), + tpRolesEnabled: boolean("tp_roles_enabled").notNull().default(false), + isAvailableRoleId: bigint("is_available_role_id", { mode: "bigint" }), + wantsToBeNotifieRoledId: bigint("wants_to_be_notified_role_id", { + mode: "bigint", }), +}); + +export const guildsRelations = relations(guilds, ({ many }) => ({ + tpMessages: many(tpMessages), + matches: many(matches), +})); + +export const tpMessages = pgTable( + "tp_messages", + { + messageId: bigint("message_id", { mode: "bigint" }), + day: smallint("day").notNull(), + guildId: bigint("guild_id", { mode: "bigint" }) + .notNull() + .references(() => guilds.id, { onDelete: "cascade" }), + }, + (table) => { + return { + pk: primaryKey({ columns: [table.guildId, table.day] }), + }; + }, ); -export const matchPlannings = pgTable("match_planning", { - id: serial("id").primaryKey(), - channelId: varchar("channel_id", { length: 20 }).notNull(), - matchtype: varchar("match_type", { length: 50 }).notNull(), - createrId: varchar("creater_id", { length: 20 }).notNull(), - roleId: varchar("role_id", { length: 20 }).notNull(), - opponentName: varchar("opponent_name", { length: 100 }).notNull(), - messageId: varchar("message_id", { length: 20 }).notNull(), - utc_ts: timestamp("utc_ts").notNull(), - guildId: varchar("guild_id", { length: 20 }) - .notNull() - .references(() => guilds.id, { onDelete: "cascade" }), -}); - -export const matchPlanningsRelations = relations(matchPlannings, ({ one }) => ({ +export const tpMessagesRelations = relations(tpMessages, ({ one }) => ({ guild: one(guilds, { - fields: [matchPlannings.guildId], + fields: [tpMessages.guildId], references: [guilds.id], }), })); -export const guilds = pgTable("guild", { - id: varchar("id", { length: 20 }).primaryKey(), - timezone: text("timezone").notNull(), -}); - -export const guildsRelations = relations(guilds, ({ one, many }) => ({ - matches: many(matchPlannings), - timePlanning: one(timePlannings, { - fields: [guilds.id], - references: [timePlannings.guildId], - }), -})); - -export const timePlannings = pgTable("time_planning", { +export const matches = pgTable("matches", { id: serial("id").primaryKey(), - guildId: varchar("guild_id", { length: 20 }) + channelId: bigint("channel_id", { mode: "bigint" }).notNull(), + matchType: varchar("match_type", { length: 50 }).notNull(), + createrId: bigint("creater_id", { mode: "bigint" }).notNull(), + roleId: bigint("role_id", { mode: "bigint" }).notNull(), + opponentName: varchar("opponent_name", { length: 100 }).notNull(), + messageId: bigint("message_id", { mode: "bigint" }).notNull(), + utc_ts: timestamp("utc_ts").notNull(), + guildId: bigint("guild_id", { mode: "bigint" }) .notNull() - .unique() - .references(() => guilds.id, { - onDelete: "cascade", - }), - channelId: varchar("channel_id", { length: 20 }).notNull(), - target_interval: smallint("target_interval").notNull(), - roles: boolean("roles").notNull(), - isAvailableRoleId: varchar("is_available_role_id", { length: 20 }), - wantsToBeNotifieRoledId: varchar("wants_to_be_notified_role_id", { - length: 20, - }), + .references(() => guilds.id, { onDelete: "cascade" }), }); -export const timePlanningsRelations = relations( - timePlannings, - ({ one, many }) => ({ - guild: one(guilds, { - fields: [timePlannings.guildId], - references: [guilds.id], - }), - messages: many(tpMessages), - }), -); - -export const tpMessages = pgTable("tp_message", { - messageId: varchar("message_id", { length: 20 }).primaryKey(), - day: smallint("day").notNull(), - planId: integer("plan_id") - .notNull() - .references(() => timePlannings.id, { onDelete: "cascade" }), -}); - -export const tpMessagesRelations = relations(tpMessages, ({ one }) => ({ - plan: one(timePlannings, { - fields: [tpMessages.planId], - references: [timePlannings.id], +export const matchPlanningsRelations = relations(matches, ({ one }) => ({ + guild: one(guilds, { + fields: [matches.guildId], + references: [guilds.id], }), })); diff --git a/src/entry-client.tsx b/src/entry-client.tsx index e10a0fd..93211d7 100644 --- a/src/entry-client.tsx +++ b/src/entry-client.tsx @@ -1,3 +1,3 @@ import { mount, StartClient } from "@solidjs/start/client"; -mount(() => , document.getElementById("app")); +mount(() => , document.getElementById("app")!); diff --git a/src/lib/auth.ts b/src/lib/auth.ts new file mode 100644 index 0000000..e2a725c --- /dev/null +++ b/src/lib/auth.ts @@ -0,0 +1,43 @@ +import { DrizzlePostgreSQLAdapter } from "@lucia-auth/adapter-drizzle"; +import { Discord } from "arctic"; +import { Lucia } from "lucia"; +import db from "~/drizzle"; +import { sessions, users } from "~/drizzle/schema"; + +if (typeof import.meta.env.PROD === "undefined") + throw new Error("No env PROD found!"); + +if (typeof import.meta.env.VITE_DISCORD_CLIENT_ID === "undefined") + throw new Error("No env VITE_DISCORD_CLIENT_ID found!"); + +if (typeof import.meta.env.VITE_DISCORD_CLIENT_SECRET === "undefined") + throw new Error("No env PROD found!"); + +if (typeof import.meta.env.VITE_AUTH_REDIRECT_URL === "undefined") + throw new Error("No env VITE_AUTH_REDIRECT_URL found!"); + +const adapter = new DrizzlePostgreSQLAdapter(db, sessions, users); + +export const lucia = new Lucia(adapter, { + sessionCookie: { + attributes: { + // set to `true` when using HTTPS + secure: import.meta.env.PROD, + }, + }, + getUserAttributes: (attributes) => attributes, +}); + +export const discord = new Discord( + import.meta.env.VITE_DISCORD_CLIENT_ID, + import.meta.env.VITE_DISCORD_CLIENT_SECRET, + import.meta.env.VITE_AUTH_REDIRECT_URL, +); + +const unencoded = `${import.meta.env.VITE_DISCORD_CLIENT_ID}:${import.meta.env.VITE_DISCORD_CLIENT_SECRET}`; +const encoded = btoa(unencoded); + +export const BasicAuth = { + unencoded: `Basic ${unencoded}`, + encoded: `Basic ${encoded}`, +}; diff --git a/src/lib/responseBuilders.ts b/src/lib/responseBuilders.ts new file mode 100644 index 0000000..fe8f4a6 --- /dev/null +++ b/src/lib/responseBuilders.ts @@ -0,0 +1,74 @@ +import stringify from "json-stable-stringify"; +import objectHash from "object-hash"; +import { guilds, matches, tpMessages } from "~/drizzle/schema"; +import { ExtractDataTypes, GetColumns } from "~/types/db"; +import { components } from "~/types/liljudd"; + +export const buildMatches = ( + queryMatches: ExtractDataTypes>[], +): components["schemas"]["match"][] => + queryMatches.map( + ({ + channelId, + createrId, + roleId, + messageId, + matchType, + opponentName, + utc_ts, + }) => ({ + channelId: channelId.toString(), + createrId: createrId.toString(), + roleId: roleId.toString(), + messageId: messageId.toString(), + matchType, + opponentName, + utc_ts: utc_ts.toISOString(), + }), + ); + +export function buildConfig( + guildQuery: ExtractDataTypes> & { + tpMessages: ExtractDataTypes>[]; + matches: ExtractDataTypes>[]; + }, +): components["schemas"]["guildConfig"] { + const { + id, + timezone, + tpEnabled, + tpChannelId, + tpInterval, + tpRolesEnabled: tpRoles, + isAvailableRoleId, + wantsToBeNotifieRoledId, + } = guildQuery; + + const targetMinute = tpInterval & 63; + const targetHour = (tpInterval >> 6) & 31; + const targetDay = (tpInterval >> 11) & 7; + + const payload = { + guildId: id.toString(), + timezone, + features: { + timePlanning: { + enabled: tpEnabled, + channelId: tpChannelId?.toString() ?? null, + targetMinute, + targetHour, + targetDay, + roles: { + enabled: tpRoles, + isAvailableRoleId: isAvailableRoleId?.toString() ?? null, + wantsToBeNotifieRoledId: wantsToBeNotifieRoledId?.toString() ?? null, + }, + }, + }, + matches: buildMatches(guildQuery.matches), + }; + + // generate checksum from payload because + // from guildQuery results in bigint serialization error + return { ...payload, checksum: objectHash(stringify(payload)) }; +} diff --git a/src/lib/responses.ts b/src/lib/responses.ts new file mode 100644 index 0000000..4b4f541 --- /dev/null +++ b/src/lib/responses.ts @@ -0,0 +1,39 @@ +import httpStatus from "http-status"; +import { + APIResponse, + Methods, + MyPaths, + ResponseSchemas, + StatusCodes, +} from "~/types/backend"; + +export function ErrorResponse< + P extends MyPaths, + M extends Methods

    , + C extends StatusCodes = StatusCodes, +>(code: C, error?: string): APIResponse { + console.log(code, error); + const responseData = { + error: error ?? httpStatus[`${httpStatus[code]}_NAME`], + }; + + return new Response(JSON.stringify(responseData), { + status: httpStatus[code], + headers: { + "Content-Type": "application/json", + }, + }); +} + +export function Res< + P extends MyPaths, + M extends Methods

    , + C extends StatusCodes = StatusCodes, +>(code: C, payload: ResponseSchemas): APIResponse { + return new Response(payload === null ? null : JSON.stringify(payload), { + status: httpStatus[code], + headers: { + "Content-Type": "application/json", + }, + }); +} diff --git a/src/lib/zod.ts b/src/lib/zod.ts new file mode 100644 index 0000000..13a85f4 --- /dev/null +++ b/src/lib/zod.ts @@ -0,0 +1,42 @@ +import moment from "moment-timezone"; +import { z } from "zod"; + +const zodId = z + .string() + .refine((value) => /^\d{7,20}$/.test(value), "Invalid ID supplied"); +export const zodBigIntId = zodId.transform((value) => BigInt(value)); + +export const zodTpMessages = z.object({ + enabled: z.boolean(), + channelId: zodId.nullable(), + rolesEnabled: z.boolean(), + isAvailableRoleId: zodId.nullable(), + wantsToBeNotifieRoledId: zodId.nullable(), + messageIds: z.object({ + "0": zodId.nullable(), + "1": zodId.nullable(), + "2": zodId.nullable(), + "3": zodId.nullable(), + "4": zodId.nullable(), + "5": zodId.nullable(), + "6": zodId.nullable(), + }), +}); + +export const zodMatch = z.object({ + match: z.object({ + channelId: zodId, + createrId: zodId, + messageId: zodId, + roleId: zodId, + matchType: z.string(), + opponentName: z.string(), + utc_ts: z.string().datetime(), + }), + timezone: z + .string() + .refine( + (value) => moment.tz.names().includes(value), + "Unknown timezone supplied", + ), +}); diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 0000000..d344e7e --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,100 @@ +import { createMiddleware } from "@solidjs/start/middleware"; +import colors from "colors"; +import fs from "fs"; +import { verifyRequestOrigin } from "lucia"; +import { appendHeader, getCookie, getHeader } from "vinxi/http"; +import { lucia } from "./lib/auth"; + +colors.enable(); + +let started: boolean = false; + +export default createMiddleware({ + onRequest: async (event) => { + if (event.nativeEvent.node.req.method !== "GET") { + const originHeader = getHeader(event, "Origin") ?? null; + const hostHeader = getHeader(event, "Host") ?? null; + if ( + !originHeader || + !hostHeader || + !verifyRequestOrigin(originHeader, [hostHeader]) + ) { + event.nativeEvent.node.res.writeHead(403).end(); + return; + } + } + + const sessionId = getCookie(event, lucia.sessionCookieName) ?? null; + if (!sessionId) { + event.nativeEvent.context.session = null; + event.nativeEvent.context.user = null; + return; + } + + const { session, user } = await lucia.validateSession(sessionId); + if (session && session.fresh) { + appendHeader( + event, + "Set-Cookie", + lucia.createSessionCookie(session.id).serialize(), + ); + } + if (!session) { + appendHeader( + event, + "Set-Cookie", + lucia.createBlankSessionCookie().serialize(), + ); + } + event.nativeEvent.context.session = session; + event.nativeEvent.context.user = user; + }, + onBeforeResponse: async (event, response) => { + let consoleLog = "", + fileLog = ""; + + if (!started) { + try { + await fs.promises.mkdir("log"); + console.log("Created 'log' Folder."); + } catch {} + started = true; + } + + const currentDate = new Date(); + const year = currentDate.getFullYear(); + const month = String(currentDate.getMonth() + 1).padStart(2, "0"); + const day = String(currentDate.getDate()).padStart(2, "0"); + const hours = String(currentDate.getHours()).padStart(2, "0"); + const minutes = String(currentDate.getMinutes()).padStart(2, "0"); + const seconds = String(currentDate.getSeconds()).padStart(2, "0"); + + // Create a short and numeric representation + const date = `[${year}-${month}-${day}_${hours}:${minutes}:${seconds}]`; + const xForwardedFor = event.request.headers.get("x-forwarded-for"); + const ip = (xForwardedFor || "127.0.0.1, 192.168.178.1").split(","); + const route = event.request.url; + const frontend = !new URL(event.request.url).pathname.startsWith("/api"); + const method = frontend ? "Frontend" : event.request.method; + const code = + (response.body as Response | undefined)?.status ?? event.response.status; + consoleLog += [ + date, + ip[0].yellow, + method, + code, + route?.green, + event.nativeEvent.context.user?.discord_id.rainbow, + ].join(" "); + fileLog += [ + date, + ip[0], + method, + code, + route, + event.nativeEvent.context.user?.discord_id, + ].join(" "); + await fs.promises.appendFile("log/log.txt", fileLog + "\n"); + console.log(consoleLog); + }, +}); diff --git a/src/routes/api/[guildId]/config.ts b/src/routes/api/[guildId]/config.ts index 25fdaf9..ad269ee 100644 --- a/src/routes/api/[guildId]/config.ts +++ b/src/routes/api/[guildId]/config.ts @@ -2,47 +2,100 @@ import { APIEvent } from "@solidjs/start/server/types"; import { eq } from "drizzle-orm"; import db from "~/drizzle"; import { guilds } from "~/drizzle/schema"; +import { BasicAuth } from "~/lib/auth"; +import { buildConfig } from "~/lib/responseBuilders"; +import { ErrorResponse, Res } from "~/lib/responses"; +import { zodBigIntId } from "~/lib/zod"; +import { APIResponse } from "~/types/backend"; -export const GET = async ({ params }: APIEvent) => { - const guild = await db.query.guilds - .findFirst({ - where: eq(guilds.id, params.guildId), - with: { - timePlanning: { with: { messages: true } }, - matches: true, - }, - }) - .execute(); +type Path = "/api/{guildId}/config"; - if (!guild) - return new Response(JSON.stringify({ error: "No such guild found." }), { - status: 404, - }); +export const GET = async ( + event: APIEvent, +): Promise> => { + switch (event.request.headers.get("authorization")) { + case BasicAuth.unencoded: + case BasicAuth.encoded: + break; - return guild; -}; + default: + return ErrorResponse("UNAUTHORIZED"); + } + + let guildId: bigint; + try { + guildId = zodBigIntId.parse(event.params.guildId); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } -export const DELETE = async ({ params }: APIEvent) => { const guildQuery = await db.query.guilds .findFirst({ - where: eq(guilds.id, params.guildId), - with: { - timePlanning: { with: { messages: true } }, - matches: true, - }, + where: eq(guilds.id, guildId), + with: { tpMessages: true, matches: true }, }) .execute(); - if (!guildQuery) - return new Response(JSON.stringify({ error: "No such guild found." }), { - status: 404, - }); + if (!guildQuery) return ErrorResponse("NOT_FOUND"); - const guild = await db - .delete(guilds) - .where(eq(guilds.id, params.guildId)) - .returning() + return Res("OK", buildConfig(guildQuery)); +}; + +export const POST = async ( + event: APIEvent, +): Promise> => { + switch (event.request.headers.get("authorization")) { + case BasicAuth.unencoded: + case BasicAuth.encoded: + break; + + default: + return ErrorResponse("UNAUTHORIZED"); + } + + let guildId: bigint; + try { + guildId = zodBigIntId.parse(event.params.guildId); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + const guildQuery = await db.insert(guilds).values({ id: guildId }).execute(); + + if (!guildQuery) return ErrorResponse("NOT_FOUND"); + + return Res("NO_CONTENT", null); +}; + +export const DELETE = async ( + event: APIEvent, +): Promise> => { + switch (event.request.headers.get("authorization")) { + case BasicAuth.unencoded: + case BasicAuth.encoded: + break; + + default: + return ErrorResponse("UNAUTHORIZED"); + } + + let guildId: bigint; + try { + guildId = zodBigIntId.parse(event.params.guildId); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + const guildQuery = await db.query.guilds + .findFirst({ + where: eq(guilds.id, guildId), + with: { tpMessages: true, matches: true }, + }) .execute(); - return guild; + if (!guildQuery) return ErrorResponse("NOT_FOUND"); + + await db.delete(guilds).where(eq(guilds.id, guildId)).execute(); + + return Res("NO_CONTENT", null); }; diff --git a/src/routes/api/[guildId]/matches.ts b/src/routes/api/[guildId]/matches.ts new file mode 100644 index 0000000..c47ddd3 --- /dev/null +++ b/src/routes/api/[guildId]/matches.ts @@ -0,0 +1,108 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { eq } from "drizzle-orm"; +import db from "~/drizzle"; +import { guilds, matches } from "~/drizzle/schema"; +import { BasicAuth } from "~/lib/auth"; +import { buildMatches } from "~/lib/responseBuilders"; +import { ErrorResponse, Res } from "~/lib/responses"; +import { zodBigIntId, zodMatch } from "~/lib/zod"; +import { APIResponse, RequestBody } from "~/types/backend"; + +type Path = "/api/{guildId}/matches"; + +export const GET = async ( + event: APIEvent, +): Promise> => { + switch (event.request.headers.get("authorization")) { + case BasicAuth.unencoded: + case BasicAuth.encoded: + break; + + default: + return ErrorResponse("UNAUTHORIZED"); + } + + let guildId: bigint; + try { + guildId = zodBigIntId.parse(event.params.guildId); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + const guild = await db.query.guilds + .findFirst({ + where: eq(guilds.id, guildId), + with: { + matches: true, + }, + }) + .execute(); + + if (!guild) return ErrorResponse("NOT_FOUND"); + + if (guild.matches.length < 1) return Res("NO_CONTENT", null); + + return Res("OK", { + matches: buildMatches(guild.matches), + timezone: guild.timezone, + }); +}; + +export const POST = async ( + event: APIEvent, +): Promise> => { + switch (event.request.headers.get("authorization")) { + case BasicAuth.unencoded: + case BasicAuth.encoded: + break; + + default: + return ErrorResponse("UNAUTHORIZED"); + } + + let guildId: bigint; + try { + guildId = zodBigIntId.parse(event.params.guildId); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + const guild = await db.query.guilds + .findFirst({ + where: eq(guilds.id, guildId), + with: { + matches: true, + }, + }) + .execute(); + + if (!guild) return ErrorResponse("NOT_FOUND"); + + const unparsedBody = await new Response(event.request.body).json(); + + let body: RequestBody; + try { + body = zodMatch.parse(unparsedBody); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + if (body.timezone !== guild.timezone) + return ErrorResponse( + "BAD_REQUEST", + "Match's timezone is different from guild's timezone", + ); + + await db.insert(matches).values({ + guildId: guild.id, + channelId: BigInt(body.match.channelId), + roleId: BigInt(body.match.roleId), + createrId: BigInt(body.match.createrId), + messageId: BigInt(body.match.messageId), + matchType: body.match.matchType, + opponentName: body.match.opponentName, + utc_ts: new Date(body.match.utc_ts), + }); + + return Res("NO_CONTENT", null); +}; diff --git a/src/routes/api/[guildId]/matches/[channelId]/[matchMessageId].ts b/src/routes/api/[guildId]/matches/[channelId]/[matchMessageId].ts deleted file mode 100644 index c701f81..0000000 --- a/src/routes/api/[guildId]/matches/[channelId]/[matchMessageId].ts +++ /dev/null @@ -1,24 +0,0 @@ -import { APIEvent } from "@solidjs/start/server/types"; -import { eq } from "drizzle-orm"; -import db from "~/drizzle"; -import { guilds } from "~/drizzle/schema"; - -export const PUT = async ({ params }: APIEvent) => { - const guild = await db.query.guilds - .findFirst({ - where: eq(guilds.id, params.guildId), - with: { - timePlanning: { with: { messages: true } }, - matches: true, - }, - }) - .execute(); - - if (!guild) - return new Response(JSON.stringify({ error: "No such guild found." }), { - status: 404, - }); - - return "TODO"; - // return guild.timePlanning; -}; diff --git a/src/routes/api/[guildId]/matches/[channelId]/index.ts b/src/routes/api/[guildId]/matches/[channelId]/index.ts deleted file mode 100644 index bf84d60..0000000 --- a/src/routes/api/[guildId]/matches/[channelId]/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { APIEvent } from "@solidjs/start/server/types"; -import { eq } from "drizzle-orm"; -import db from "~/drizzle"; -import { guilds } from "~/drizzle/schema"; - -export const POST = async ({ params }: APIEvent) => { - const guild = await db.query.guilds - .findFirst({ - where: eq(guilds.id, params.guildId), - with: { - timePlanning: { with: { messages: true } }, - matches: true, - }, - }) - .execute(); - - if (!guild) - return new Response(JSON.stringify({ error: "No such guild found." }), { - status: 404, - }); - - return "TODO"; - // return guild.timePlanning; -}; diff --git a/src/routes/api/[guildId]/matches/index.ts b/src/routes/api/[guildId]/matches/index.ts deleted file mode 100644 index 403aab3..0000000 --- a/src/routes/api/[guildId]/matches/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { APIEvent } from "@solidjs/start/server/types"; -import { eq } from "drizzle-orm"; -import db from "~/drizzle"; -import { guilds } from "~/drizzle/schema"; - -export const GET = async ({ params }: APIEvent) => { - const guild = await db.query.guilds - .findFirst({ - where: eq(guilds.id, params.guildId), - with: { - timePlanning: { with: { messages: true } }, - matches: true, - }, - }) - .execute(); - - if (!guild) - return new Response(JSON.stringify({ error: "No such guild found." }), { - status: 404, - }); - - return "TODO"; - // return guild.timePlanning; -}; diff --git a/src/routes/api/[guildId]/timePlanning.ts b/src/routes/api/[guildId]/timePlanning.ts new file mode 100644 index 0000000..ddf4255 --- /dev/null +++ b/src/routes/api/[guildId]/timePlanning.ts @@ -0,0 +1,145 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { and, eq } from "drizzle-orm"; +import db from "~/drizzle"; +import { guilds, tpMessages } from "~/drizzle/schema"; +import { BasicAuth } from "~/lib/auth"; +import { ErrorResponse, Res } from "~/lib/responses"; +import { zodBigIntId, zodTpMessages } from "~/lib/zod"; +import { APIResponse, RequestBody } from "~/types/backend"; + +type Path = "/api/{guildId}/timePlanning"; + +const DayKeys = ["0", "1", "2", "3", "4", "5", "6"] as const; +type DayKeys = (typeof DayKeys)[number]; +type Messages = Record; + +export const GET = async ( + event: APIEvent, +): Promise> => { + switch (event.request.headers.get("authorization")) { + case BasicAuth.unencoded: + case BasicAuth.encoded: + break; + + default: + return ErrorResponse("UNAUTHORIZED"); + } + + let guildId: bigint; + try { + guildId = zodBigIntId.parse(event.params.guildId); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + const guild = await db.query.guilds.findFirst({ + where: eq(guilds.id, guildId), + with: { + tpMessages: true, + }, + }); + + if (!guild) return ErrorResponse("NOT_FOUND"); + + const tpMessages = guild.tpMessages.reduce( + (acc, message) => { + const day = message.day.toString() as DayKeys; + if (!/^[0-6]$/.test(day)) return acc; + acc[day] = message.messageId?.toString() ?? null; + return acc; + }, + { + "0": null, + "1": null, + "2": null, + "3": null, + "4": null, + "5": null, + "6": null, + } as Messages, + ); + + return Res("OK", { + enabled: guild.tpEnabled, + channelId: guild.tpChannelId?.toString() ?? null, + rolesEnabled: guild.tpRolesEnabled, + isAvailableRoleId: guild.isAvailableRoleId?.toString() ?? null, + wantsToBeNotifieRoledId: guild.wantsToBeNotifieRoledId?.toString() ?? null, + messageIds: tpMessages, + }); +}; + +export const PUT = async ( + event: APIEvent, +): Promise> => { + switch (event.request.headers.get("authorization")) { + case BasicAuth.unencoded: + case BasicAuth.encoded: + break; + + default: + return ErrorResponse("UNAUTHORIZED"); + } + + let guildId: bigint; + try { + guildId = zodBigIntId.parse(event.params.guildId); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + const guild = await db.query.guilds + .findFirst({ + where: eq(guilds.id, guildId), + with: { tpMessages: true }, + }) + .execute(); + + if (!guild) return ErrorResponse("NOT_FOUND"); + + const unparsedBody = await new Response(event.request.body).json(); + + let body: RequestBody; + try { + body = zodTpMessages.parse(unparsedBody); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + const { + enabled, + channelId, + rolesEnabled, + isAvailableRoleId, + wantsToBeNotifieRoledId, + messageIds, + } = body; + if (guild.tpChannelId !== channelId) + await db + .update(guilds) + .set({ + tpEnabled: enabled, + tpChannelId: channelId ? BigInt(channelId) : null, + tpRolesEnabled: rolesEnabled, + isAvailableRoleId: isAvailableRoleId ? BigInt(isAvailableRoleId) : null, + wantsToBeNotifieRoledId: wantsToBeNotifieRoledId + ? BigInt(wantsToBeNotifieRoledId) + : null, + }) + .where(eq(guilds.id, guild.id)) + .execute(); + + await Promise.all( + DayKeys.map(async (dayStr) => { + const day = parseInt(dayStr); + const messageId = messageIds[dayStr]; + await db + .update(tpMessages) + .set({ messageId: messageId ? BigInt(messageId) : null }) + .where(and(eq(tpMessages.guildId, guild.id), eq(tpMessages.day, day))) + .execute(); + }), + ); + + return Res("NO_CONTENT", null); +}; diff --git a/src/routes/api/[guildId]/tp_messages.ts b/src/routes/api/[guildId]/tp_messages.ts deleted file mode 100644 index 8ede1ed..0000000 --- a/src/routes/api/[guildId]/tp_messages.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { APIEvent } from "@solidjs/start/server/types"; -import { eq } from "drizzle-orm"; -import db from "~/drizzle"; -import { guilds } from "~/drizzle/schema"; - -export const GET = async ({ params }: APIEvent) => { - const guild = await db.query.guilds - .findFirst({ - where: eq(guilds.id, params.guildId), - with: { - timePlanning: { with: { messages: true } }, - matches: true, - }, - }) - .execute(); - - if (!guild) - return new Response(JSON.stringify({ error: "No such guild found." }), { - status: 404, - }); - - return "TODO"; - // return guild.timePlanning; -}; - -export const PUT = async () => { - return "TODO"; -}; diff --git a/src/routes/api/auth/[...solidauth].ts b/src/routes/api/auth/[...solidauth].ts deleted file mode 100644 index 724f269..0000000 --- a/src/routes/api/auth/[...solidauth].ts +++ /dev/null @@ -1,4 +0,0 @@ -import { SolidAuth } from "@auth/solid-start" -import { authOptions } from "~/server/auth" - -export const { GET, POST } = SolidAuth(authOptions) diff --git a/src/routes/api/auth/callback/discord.ts b/src/routes/api/auth/callback/discord.ts new file mode 100644 index 0000000..d0f5cce --- /dev/null +++ b/src/routes/api/auth/callback/discord.ts @@ -0,0 +1,130 @@ +import { createId } from "@paralleldrive/cuid2"; +import { APIEvent } from "@solidjs/start/server/types"; +import { OAuth2RequestError } from "arctic"; +import { eq } from "drizzle-orm"; +import httpStatus from "http-status"; +import createClient from "openapi-fetch"; +import { getCookie, setCookie } from "vinxi/http"; +import db from "~/drizzle"; +import { discordTokens, users } from "~/drizzle/schema"; +import { discord, lucia } from "~/lib/auth"; +import { paths } from "~/types/discord"; + +export async function GET(event: APIEvent): Promise { + const url = new URL(event.request.url); + const code = url.searchParams.get("code"); + const state = url.searchParams.get("state"); + const error = url.searchParams.get("error"); + const error_description = url.searchParams.get("error_description"); + if (error) + switch (error) { + case "access_denied": + return new Response(null, { + status: httpStatus.FOUND, + headers: { Location: "/" }, + }); + default: + console.log("Discord oauth error:", error_description); + return new Response(decodeURI(error_description ?? ""), { + status: httpStatus.BAD_REQUEST, + }); + } + + const storedState = getCookie("discord_oauth_state") ?? null; + if (!code || !state || !storedState || state !== storedState) { + return new Response(null, { + status: httpStatus.BAD_REQUEST, + }); + } + + try { + const tokens = await discord.validateAuthorizationCode(code); + const { GET } = createClient({ + baseUrl: "https://discord.com/api/v10", + }); + const discordUserResponse = await GET("/users/@me", { + headers: { Authorization: `Bearer ${tokens.accessToken}` }, + }); + if (discordUserResponse.error) throw discordUserResponse.error; + const discordUser = discordUserResponse.data; + const existingUser = await db.query.users + .findFirst({ + where: eq(users.discord_id, discordUser.id), + }) + .execute(); + + if (existingUser) { + const session = await lucia.createSession( + existingUser.id, + {}, + { sessionId: createId() }, + ); + const sessionCookie = lucia.createSessionCookie(session.id); + setCookie( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes, + ); + await db + .update(users) + .set({ + name: discordUser.global_name, + image: discordUser.avatar, + }) + .where(eq(users.discord_id, discordUser.id)) + .returning() + .execute(); + + return new Response(null, { + status: httpStatus.FOUND, + headers: { Location: "/config" }, + }); + } + + const userId = createId(); + await db.insert(users).values({ + id: userId, + discord_id: discordUser.id, + name: discordUser.global_name, + image: discordUser.avatar, + }); + await db + .insert(discordTokens) + .values({ + userId, + accessToken: tokens.accessToken, + expiresAt: tokens.accessTokenExpiresAt, + refreshToken: tokens.refreshToken, + }) + .returning() + .execute(); + const session = await lucia.createSession( + userId, + {}, + { sessionId: createId() }, + ); + const sessionCookie = lucia.createSessionCookie(session.id); + setCookie( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes, + ); + return new Response(null, { + status: httpStatus.FOUND, + headers: { Location: "/config" }, + }); + } catch (e) { + // the specific error message depends on the provider + if (e instanceof OAuth2RequestError) { + // invalid code + return new Response(null, { + status: httpStatus.BAD_REQUEST, + }); + } + console.error("Unknown error on callback."); + console.error(e); + return new Response(null, { + status: httpStatus.INTERNAL_SERVER_ERROR, + }); + } +} diff --git a/src/routes/api/auth/login.ts b/src/routes/api/auth/login.ts new file mode 100644 index 0000000..47a74d9 --- /dev/null +++ b/src/routes/api/auth/login.ts @@ -0,0 +1,28 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { generateState } from "arctic"; +import httpStatus from "http-status"; +import { setCookie } from "vinxi/http"; +import { discord } from "~/lib/auth"; + +if (typeof import.meta.env.PROD === "undefined") + throw new Error("No env PROD found!"); + +export async function GET(event: APIEvent) { + const state = generateState(); + const url = await discord.createAuthorizationURL(state, { + scopes: ["identify", "guilds", "guilds.members.read"], + }); + + setCookie(event, "discord_oauth_state", state, { + path: "/", + secure: import.meta.env.PROD, + httpOnly: true, + maxAge: 60 * 10, + sameSite: "lax", + }); + + return new Response(null, { + status: httpStatus.FOUND, + headers: { Location: url.toString() }, + }); +} diff --git a/src/routes/api/auth/logout.ts b/src/routes/api/auth/logout.ts new file mode 100644 index 0000000..ece785d --- /dev/null +++ b/src/routes/api/auth/logout.ts @@ -0,0 +1,20 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import httpStatus from "http-status"; +import { appendHeader } from "vinxi/http"; +import { lucia } from "~/lib/auth"; + +export const GET = async (event: APIEvent) => { + if (!event.nativeEvent.context.session) { + return new Error("Unauthorized"); + } + await lucia.invalidateSession(event.nativeEvent.context.session.id); + appendHeader( + event, + "Set-Cookie", + lucia.createBlankSessionCookie().serialize(), + ); + return new Response(null, { + status: httpStatus.FOUND, + headers: { Location: "/" }, + }); +}; diff --git a/src/routes/api/boot.ts b/src/routes/api/boot.ts new file mode 100644 index 0000000..fdd375b --- /dev/null +++ b/src/routes/api/boot.ts @@ -0,0 +1,43 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { eq } from "drizzle-orm"; +import db from "~/drizzle"; +import { guilds } from "~/drizzle/schema"; +import { BasicAuth } from "~/lib/auth"; +import { buildConfig } from "~/lib/responseBuilders"; +import { ErrorResponse, Res } from "~/lib/responses"; +import { zodBigIntId } from "~/lib/zod"; +import { APIResponse } from "~/types/backend"; + +type Path = "/api/boot"; + +export const GET = async ( + event: APIEvent, +): Promise> => { + switch (event.request.headers.get("authorization")) { + case BasicAuth.unencoded: + case BasicAuth.encoded: + break; + + default: + return ErrorResponse("UNAUTHORIZED"); + } + + let guildId: bigint; + try { + guildId = zodBigIntId.parse(event.params.guildId); + } catch (e) { + return ErrorResponse("BAD_REQUEST", JSON.stringify(e)); + } + + const guildQuery = await db.query.guilds + .findMany({ + where: eq(guilds.id, guildId), + with: { tpMessages: true, matches: true }, + }) + .execute(); + + return Res( + "OK", + guildQuery.map((e) => buildConfig(e)), + ); +}; diff --git a/src/routes/api/boot/config.ts b/src/routes/api/boot/config.ts deleted file mode 100644 index c93810c..0000000 --- a/src/routes/api/boot/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import db from "~/drizzle"; - -export const GET = async () => { - const guilds = await db.query.guilds - .findMany({ - with: { - timePlanning: { with: { messages: true } }, - matches: true, - }, - }) - .execute(); - - return { guilds }; -}; diff --git a/src/routes/config/[guildId].tsx b/src/routes/config/[guildId].tsx index a39d85e..4f173f4 100644 --- a/src/routes/config/[guildId].tsx +++ b/src/routes/config/[guildId].tsx @@ -1,4 +1,3 @@ -import { getSession } from "@auth/solid-start"; import { faToggleOff, faToggleOn } from "@fortawesome/pro-regular-svg-icons"; import { useLocation, useNavigate, useParams } from "@solidjs/router"; import { eq } from "drizzle-orm"; @@ -16,11 +15,13 @@ import { getRequestEvent } from "solid-js/web"; import { FontAwesomeIcon } from "~/components/FontAwesomeIcon"; import Layout from "~/components/Layout"; import db from "~/drizzle"; -import { accounts } from "~/drizzle/schema"; -import { authOptions } from "~/server/auth"; +import { discordTokens } from "~/drizzle/schema"; import { paths } from "~/types/discord"; import "../../styles/pages/config.scss"; +if (typeof import.meta.env.VITE_DISCORD_BOT_TOKEN === "undefined") + throw new Error("No env VITE_DISCORD_BOT_TOKEN found!"); + const guessTZ = () => Intl.DateTimeFormat().resolvedOptions().timeZone; const initialValue = (params: ReturnType) => ({ @@ -47,26 +48,21 @@ const getPayload = async ( if (!event) return { success: false, message: "No request event!" }; const pathname = new URL(event.request.url).pathname; - const session = await getSession(event.request, authOptions); - if (!session?.user?.id) - return { success: false, message: "No user with id!" }; + const { user } = event.nativeEvent.context; + if (!user) return { success: false, message: "User not logged in!" }; - const { DISCORD_ACCESS_TOKEN } = ( - await db - .selectDistinct({ DISCORD_ACCESS_TOKEN: accounts.access_token }) - .from(accounts) - .where(eq(accounts.userId, session.user?.id)) - .limit(1) - .execute() - )[0]; - if (!DISCORD_ACCESS_TOKEN) - return { success: false, message: "No discord access token!" }; + const tokens = await db.query.discordTokens + .findFirst({ + where: eq(discordTokens.userId, user.id), + }) + .execute(); + if (!tokens) return { success: false, message: "No discord access token!" }; const { GET } = createClient({ baseUrl: "https://discord.com/api/v10", }); const guildsRequest = await GET("/users/@me/guilds", { - headers: { Authorization: `Bearer ${DISCORD_ACCESS_TOKEN}` }, + headers: { Authorization: `Bearer ${tokens.accessToken}` }, }); const channelsRequest = await GET("/guilds/{guild_id}/channels", { params: { @@ -98,7 +94,7 @@ const getPayload = async ( "User is no MANAGE_GUILD permissions on this guild with requested id!", }; - let channels: ReturnType["guild"]["channels"] = []; + const channels: ReturnType["guild"]["channels"] = []; channelsRequest.data?.forEach((channel) => { if (channel.type !== 0) return; channels.push({ @@ -115,7 +111,6 @@ const getPayload = async ( id: guild.id, name: guild.name, icon: guild.icon, - // channel: "1162917335275950180", channel: "", channels, }, diff --git a/src/routes/config/index.tsx b/src/routes/config/index.tsx index a6931ac..475651e 100644 --- a/src/routes/config/index.tsx +++ b/src/routes/config/index.tsx @@ -1,4 +1,3 @@ -import { getSession } from "@auth/solid-start"; import { faBadgeCheck, faCircleExclamation, @@ -12,11 +11,16 @@ import { getRequestEvent } from "solid-js/web"; import { FontAwesomeIcon } from "~/components/FontAwesomeIcon"; import Layout from "~/components/Layout"; import db from "~/drizzle"; -import { accounts } from "~/drizzle/schema"; -import { authOptions } from "~/server/auth"; +import { discordTokens } from "~/drizzle/schema"; import { paths } from "~/types/discord"; import "../../styles/pages/config.scss"; +if (typeof import.meta.env.VITE_DISCORD_CLIENT_ID === "undefined") + throw new Error("No env VITE_DISCORD_CLIENT_ID found!"); + +if (typeof import.meta.env.VITE_DISCORD_OAUTH2_PERMISSIONS === "undefined") + throw new Error("No env VITE_DISCORD_OAUTH2_PERMISSIONS found!"); + const initialValue = () => ({ success: null as boolean | null, guilds: [] as { @@ -36,26 +40,21 @@ const getPayload = async (): Promise< if (!event) return { success: false, message: "No request event!" }; const pathname = new URL(event.request.url).pathname; - const session = await getSession(event.request, authOptions); - if (!session?.user?.id) - return { success: false, message: "No user with id!" }; + const { user } = event.nativeEvent.context; + if (!user) return { success: false, message: "User not logged in!" }; - const { DISCORD_ACCESS_TOKEN } = ( - await db - .selectDistinct({ DISCORD_ACCESS_TOKEN: accounts.access_token }) - .from(accounts) - .where(eq(accounts.userId, session.user?.id)) - .limit(1) - .execute() - )[0]; - if (!DISCORD_ACCESS_TOKEN) - return { success: false, message: "No discord access token!" }; + const tokens = await db.query.discordTokens + .findFirst({ + where: eq(discordTokens.userId, user.id), + }) + .execute(); + if (!tokens) return { success: false, message: "No discord access token!" }; const { GET } = createClient({ baseUrl: "https://discord.com/api/v10", }); const { data: guilds, error } = await GET("/users/@me/guilds", { - headers: { Authorization: `Bearer ${DISCORD_ACCESS_TOKEN}` }, + headers: { Authorization: `Bearer ${tokens.accessToken}` }, }); if (error) { @@ -112,7 +111,7 @@ function index() { href={ i() % 3 === 0 ? `/config/${guild.id}` - : `https://discord.com/api/oauth2/authorize?client_id=${import.meta.env.VITE_DISCORD_CLIENT_ID}&permissions=${import.meta.env.VITE_DISCORD_BOT_PERMISSIONS}&scope=bot&guild_id=${guild.id}` + : `https://discord.com/api/oauth2/authorize?client_id=${import.meta.env.VITE_DISCORD_CLIENT_ID}&permissions=${import.meta.env.VITE_DISCORD_OAUTH2_PERMISSIONS}&scope=bot&guild_id=${guild.id}` } class="flex-row centered" > diff --git a/src/server/auth.ts b/src/server/auth.ts deleted file mode 100644 index 907d6d2..0000000 --- a/src/server/auth.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Discord from "@auth/core/providers/discord"; -import { DrizzleAdapter } from "@auth/drizzle-adapter"; -import { type SolidAuthConfig } from "@auth/solid-start"; -import db from "~/drizzle"; - -export const authOptions: SolidAuthConfig = { - providers: [ - { - ...Discord({ - clientId: import.meta.env.VITE_DISCORD_CLIENT_ID, - clientSecret: import.meta.env.VITE_DISCORD_CLIENT_SECRET, - }), - authorization: - "https://discord.com/api/oauth2/authorize?scope=identify+email+guilds+guilds.members.read", - }, - ], - adapter: DrizzleAdapter(db), - secret: import.meta.env.VITE_AUTH_SECRET, - callbacks: { - // @ts-ignore - session: ({ session, user }) => { - if (session?.user) { - session.user.id = user.id; - } - return session; - }, - }, - pages: { - // signIn: "/signin", - // signOut: "/signout", - // error: '/auth/error', // Error code passed in query string as ?error= - // verifyRequest: '/auth/verify-request', // (used for check email message) - // newUser: '/auth/new-user' // New users will be directed here on first sign in (leave the property out if not of interest) - }, - redirectProxyUrl: import.meta.env.DEV - ? import.meta.env.VITE_AUTH_REDIRECT_PROXY_URL - : undefined, -}; diff --git a/src/types/authjs.d.ts b/src/types/authjs.d.ts deleted file mode 100644 index 18d303c..0000000 --- a/src/types/authjs.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { DefaultSession as DSession } from "@auth/core/types" - -declare module "@auth/core/types" { - /** - * Returned by `useSession`, `getSession` and received as a prop on the `SessionProvider` React Context - */ - interface Session extends DSession { - user?: { - id: string - name?: string | null - email?: string | null - image?: string | null - } - } -} diff --git a/src/types/backend.d.ts b/src/types/backend.d.ts new file mode 100644 index 0000000..0d605b6 --- /dev/null +++ b/src/types/backend.d.ts @@ -0,0 +1,70 @@ +import { HttpStatus } from "http-status"; +import { paths } from "./liljudd"; + +export type MyPaths = keyof paths; + +export type Methods = keyof paths[Path]; + +export type Responses< + Path extends MyPaths, + Method extends Methods, +> = "responses" extends keyof paths[Path][Method] + ? paths[Path][Method]["responses"] + : never; + +type StatusCodes

    > = { + [CodeName in keyof HttpStatus]: HttpStatus[CodeName] extends number + ? HttpStatus[CodeName] extends keyof Responses + ? CodeName + : never + : never; +}[keyof HttpStatus]; + +export type ResponseSchemas< + Path extends MyPaths, + Method extends Methods, + Code extends StatusCodes, +> = Code extends keyof HttpStatus + ? HttpStatus[Code] extends keyof Responses + ? "content" extends keyof Responses[HttpStatus[Code]] + ? "application/json" extends keyof Responses< + Path, + Method + >[HttpStatus[Code]]["content"] + ? Responses< + Path, + Method + >[HttpStatus[Code]]["content"]["application/json"] extends never + ? null + : Responses< + Path, + Method + >[HttpStatus[Code]]["content"]["application/json"] + : never + : never + : never + : never; + +export type Parameters< + Path extends MyPaths, + Method extends Methods, +> = "parameters" extends keyof paths[Path][Method] + ? "path" extends keyof paths[Path][Method]["parameters"] + ? paths[Path][Method]["parameters"]["path"] + : never + : never; + +export type RequestBody< + Path extends MyPaths, + Method extends Methods, +> = "requestBody" extends keyof paths[Path][Method] + ? "content" extends keyof paths[Path][Method]["requestBody"] + ? "application/json" extends keyof paths[Path][Method]["requestBody"]["content"] + ? paths[Path][Method]["requestBody"]["content"]["application/json"] + : never + : never + : never; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export interface APIResponse> + extends Response {} diff --git a/src/types/db.d.ts b/src/types/db.d.ts new file mode 100644 index 0000000..7be0310 --- /dev/null +++ b/src/types/db.d.ts @@ -0,0 +1,13 @@ +import { PgColumn, PgTableWithColumns } from "drizzle-orm/pg-core"; + +export type GetColumns = + T extends PgTableWithColumns ? Table["columns"] : never; + +export type ExtractDataTypes = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [K in keyof T]: T[K] extends PgColumn + ? ColumnConfig["notNull"] extends true + ? ColumnConfig["data"] + : ColumnConfig["data"] | null + : unknown; +}; diff --git a/src/types/env.d.ts b/src/types/env.d.ts index 9395712..98ff518 100644 --- a/src/types/env.d.ts +++ b/src/types/env.d.ts @@ -4,7 +4,7 @@ interface ImportMetaEnv { readonly VITE_DISCORD_CLIENT_ID: string; readonly VITE_DISCORD_CLIENT_SECRET: string; readonly VITE_DISCORD_BOT_TOKEN: string; - readonly VITE_DISCORD_BOT_PERMISSIONS: string; + readonly VITE_DISCORD_OAUTH2_PERMISSIONS: string; readonly VITE_AUTH_SECRET: string; readonly VITE_AUTH_REDIRECT_PROXY_URL: string | undefined; @@ -12,7 +12,6 @@ interface ImportMetaEnv { readonly VITE_DATABASE_URL: string; } -// eslint-disable-next-line no-unused-vars interface ImportMeta { readonly env: ImportMetaEnv; } diff --git a/src/global.d.ts b/src/types/global.d.ts similarity index 100% rename from src/global.d.ts rename to src/types/global.d.ts diff --git a/src/types/liljudd.d.ts b/src/types/liljudd.d.ts index 97f3c89..3aeb1ca 100644 --- a/src/types/liljudd.d.ts +++ b/src/types/liljudd.d.ts @@ -5,24 +5,53 @@ export interface paths { - "/api/config/{guildId}": { + "/api/boot": { /** - * Find guild config by ID - * @description Returns a single guild config + * Retrieve all guild's configs + * @description Returns all guild's configs. + */ + get: operations["getGuildsForBoot"]; + }; + "/api/{guildId}/config": { + /** + * Find a guild's config by ID + * @description Returns a single guild's config. */ get: operations["getGuildById"]; /** - * Deletes a guild config by ID - * @description Delete a guild's config + * Creates a guild's config by ID + * @description Create a guild's config when the bot is has joined a new guild. + */ + post: operations["postGuildById"]; + /** + * Deletes a guild's config by ID + * @description Delete a guild's config when the bot is removed from the guild. */ delete: operations["deleteGuildById"]; }; - "/api/tp_messages/{guildId}": { + "/api/{guildId}/timePlanning": { /** - * Find guild by ID for it's tp_messages - * @description Returns tp_messages for a guild + * Find the timePlanning of guild by ID + * @description Returns timePlanning for a guild */ - get: operations["getTp_messagesOfGuildById"]; + get: operations["gettimePlanningOfGuildById"]; + /** + * Put new message IDs for timePlanning of guild by ID + * @description Returns timePlanning for a guild + */ + put: operations["puttimePlanningOfGuildById"]; + }; + "/api/{guildId}/matches": { + /** + * Find all matches of guild by ID + * @description Returns timePlanning for a guild + */ + get: operations["getMatchesOfGuildById"]; + /** + * Save a new created match of guild by ID + * @description Returns timePlanning for a guild + */ + post: operations["postMatchOfGuildById"]; }; } @@ -31,67 +60,72 @@ export type webhooks = Record; export interface components { schemas: { guildConfig: { + guildId: components["schemas"]["id"]; /** - * Format: varchar(19) - * @example 1234567890123456789 + * Format: text + * @example Europe/Berlin */ - guildID?: string; - features?: { - time_planning?: { - /** - * Format: varchar(19) - * @example 1234567890123456789 - */ - channelID?: string; - /** @example 0 0 1 * * * 60o 1w */ - cron?: string; - /** - * Format: varchar(19) - * @example 1234567890123456789 - */ - isAvailableRoleId?: string; - /** - * Format: varchar(19) - * @example 1234567890123456789 - */ - wantsToBeNotifieRoledId?: string; + timezone: string; + features: { + timePlanning: { + enabled: boolean; + channelId: components["schemas"]["idOrNull"]; + /** @example 0 */ + targetMinute: number; + /** @example 1 */ + targetHour: number; + /** @example 1 */ + targetDay: number; + roles: { + enabled: boolean; + isAvailableRoleId: components["schemas"]["idOrNull"]; + wantsToBeNotifieRoledId: components["schemas"]["idOrNull"]; + }; }; }; - matches?: components["schemas"]["match"][]; + matches: components["schemas"]["match"][]; + checksum: string; }; match: { - /** - * Format: varchar(19) - * @example 1234567890123456789 - */ - channelID?: string; + channelId: components["schemas"]["id"]; + createrId: components["schemas"]["id"]; + roleId: components["schemas"]["id"]; + messageId: components["schemas"]["id"]; /** * Format: varchar(50) * @example Scrim */ - matchType?: string; - /** - * Format: varchar(19) - * @example 1234567890123456789 - */ - createrId?: string; - /** - * Format: varchar(19) - * @example 1234567890123456789 - */ - roleId?: string; + matchType: string; /** * Format: varchar(100) * @example ? */ - opponentName?: string; - /** - * Format: varchar(19) - * @example 1234567890123456789 - */ - messsageId?: string; - /** @example 0 0 1 5 2 2023 60o */ - cron?: string; + opponentName: string; + /** @example 2020-01-01T00:00:00Z */ + utc_ts: string; + }; + timePlanning: { + enabled: boolean; + channelId: components["schemas"]["idOrNull"]; + rolesEnabled: boolean; + isAvailableRoleId: components["schemas"]["idOrNull"]; + wantsToBeNotifieRoledId: components["schemas"]["idOrNull"]; + messageIds: { + 0: components["schemas"]["idOrNull"]; + 1: components["schemas"]["idOrNull"]; + 2: components["schemas"]["idOrNull"]; + 3: components["schemas"]["idOrNull"]; + 4: components["schemas"]["idOrNull"]; + 5: components["schemas"]["idOrNull"]; + 6: components["schemas"]["idOrNull"]; + }; + }; + /** @example 1234567890123456789 */ + id: string; + /** @example 1234567890123456789 */ + idOrNull: string | null; + error: { + error?: string; }; }; responses: never; @@ -108,8 +142,40 @@ export type external = Record; export interface operations { /** - * Find guild config by ID - * @description Returns a single guild config + * Retrieve all guild's configs + * @description Returns all guild's configs. + */ + getGuildsForBoot: { + responses: { + /** @description successful operation */ + 200: { + content: { + "application/json": components["schemas"]["guildConfig"][]; + }; + }; + /** @description Invalid ID supplied */ + 400: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Unauthorized */ + 401: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Guild not found */ + 404: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + }; + }; + /** + * Find a guild's config by ID + * @description Returns a single guild's config. */ getGuildById: { parameters: { @@ -127,22 +193,32 @@ export interface operations { }; /** @description Invalid ID supplied */ 400: { - content: never; + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Unauthorized */ + 401: { + content: { + "application/json": components["schemas"]["error"]; + }; }; /** @description Guild not found */ 404: { - content: never; + content: { + "application/json": components["schemas"]["error"]; + }; }; }; }; /** - * Deletes a guild config by ID - * @description Delete a guild's config + * Creates a guild's config by ID + * @description Create a guild's config when the bot is has joined a new guild. */ - deleteGuildById: { + postGuildById: { parameters: { path: { - /** @description ID of guild config to delete */ + /** @description ID of guild's config to create */ guildId: string; }; }; @@ -153,22 +229,68 @@ export interface operations { }; /** @description Invalid ID supplied */ 400: { - content: never; + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Unauthorized */ + 401: { + content: { + "application/json": components["schemas"]["error"]; + }; }; /** @description Guild not found */ 404: { - content: never; + content: { + "application/json": components["schemas"]["error"]; + }; }; }; }; /** - * Find guild by ID for it's tp_messages - * @description Returns tp_messages for a guild + * Deletes a guild's config by ID + * @description Delete a guild's config when the bot is removed from the guild. */ - getTp_messagesOfGuildById: { + deleteGuildById: { parameters: { path: { - /** @description ID of guild's tp_messages to return */ + /** @description ID of guild's config to delete */ + guildId: string; + }; + }; + responses: { + /** @description successful operation */ + 204: { + content: never; + }; + /** @description Invalid ID supplied */ + 400: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Unauthorized */ + 401: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Guild not found */ + 404: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + }; + }; + /** + * Find the timePlanning of guild by ID + * @description Returns timePlanning for a guild + */ + gettimePlanningOfGuildById: { + parameters: { + path: { + /** @description ID of guild's timePlanning to return */ guildId: string; }; }; @@ -176,21 +298,164 @@ export interface operations { /** @description successful operation */ 200: { content: { - "application/json": components["schemas"]["guildConfig"]; + "application/json": components["schemas"]["timePlanning"]; }; }; - /** @description Time planning not enabled for this guild */ + /** @description Invalid ID supplied */ + 400: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Unauthorized */ + 401: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Guild not found */ + 404: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + }; + }; + /** + * Put new message IDs for timePlanning of guild by ID + * @description Returns timePlanning for a guild + */ + puttimePlanningOfGuildById: { + parameters: { + path: { + /** @description ID of guild's timePlanning to return */ + guildId: string; + }; + }; + /** @description Put new message IDs for timePlanning in channel */ + requestBody: { + content: { + "application/json": components["schemas"]["timePlanning"]; + }; + }; + responses: { + /** @description successful operation */ 204: { content: never; }; /** @description Invalid ID supplied */ 400: { - content: never; + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Unauthorized */ + 401: { + content: { + "application/json": components["schemas"]["error"]; + }; }; /** @description Guild not found */ 404: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + }; + }; + /** + * Find all matches of guild by ID + * @description Returns timePlanning for a guild + */ + getMatchesOfGuildById: { + parameters: { + path: { + /** @description ID of guild's timePlanning to return */ + guildId: string; + }; + }; + responses: { + /** @description successful operation */ + 200: { + content: { + "application/json": { + matches: components["schemas"]["match"][]; + /** + * Format: text + * @example Europe/Berlin + */ + timezone: string; + }; + }; + }; + /** @description Invalid ID supplied */ + 400: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Unauthorized */ + 401: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Guild not found */ + 404: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + }; + }; + /** + * Save a new created match of guild by ID + * @description Returns timePlanning for a guild + */ + postMatchOfGuildById: { + parameters: { + path: { + /** @description ID of match's guild to set */ + guildId: string; + }; + }; + /** @description Save a new created match in channel */ + requestBody: { + content: { + "application/json": { + match: components["schemas"]["match"]; + /** + * Format: text + * @description Has to match guild tz + * @example Europe/Berlin + */ + timezone: string; + }; + }; + }; + responses: { + /** @description successful operation */ + 204: { content: never; }; + /** @description Invalid ID supplied */ + 400: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Unauthorized */ + 401: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; + /** @description Guild not found */ + 404: { + content: { + "application/json": components["schemas"]["error"]; + }; + }; }; }; } diff --git a/src/types/lucia-auth.d.ts b/src/types/lucia-auth.d.ts new file mode 100644 index 0000000..c998aa0 --- /dev/null +++ b/src/types/lucia-auth.d.ts @@ -0,0 +1,13 @@ +import { users } from "~/drizzle/schema"; +import { lucia } from "~/lib/auth"; +import { ExtractDataTypes, GetColumns } from "./db"; + +declare module "lucia" { + interface Register { + Lucia: typeof lucia; + DatabaseUserAttributes: DatabaseUserAttributes; + } +} + +interface DatabaseUserAttributes + extends ExtractDataTypes> {} diff --git a/src/types/vinxi.d.ts b/src/types/vinxi.d.ts new file mode 100644 index 0000000..266cfa9 --- /dev/null +++ b/src/types/vinxi.d.ts @@ -0,0 +1,12 @@ +import { H3EventContext as EventContext } from "h3/dist"; +import { Session, User } from "lucia"; + +declare module "vinxi/http" { + interface H3EventContext extends EventContext { + user: User | null; + session: Session | null; + } + class H3Eventt { + context: H3EventContext; + } +} diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index de7f831..0000000 --- a/vite.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { defineConfig } from "@solidjs/start/config"; - -export default defineConfig({});