Openstatus www.openstatus.dev

chore: workflows hono app (#1093)

* chore: workflows app

* ci: apply automated fixes

* chore: add dofigen

* chore: fly.toml

* fix: docker

* fix: number coerce

* wip:

* fix: import

* ci: apply automated fixes

* chore: small stuff

* chore: create scripts folder for tb

* chore: cd

* chore: build

* chore: update key replace

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

authored by

Maximilian Kaske
autofix-ci[bot]
and committed by
GitHub
8f9b44d1 33091d22

+1471 -584
+24
.github/workflows/deploy-workflows.yml
··· 1 + name: Fly Deploy Workflows 2 + on: 3 + push: 4 + branches: 5 + - main 6 + paths: 7 + - "apps/workflows/**" 8 + - "packages/db/**" 9 + - "packages/emails/**" 10 + - "packages/utils/**" 11 + - "packages/tsconfig/**" 12 + jobs: 13 + deploy-workflows: 14 + name: Deploy Workflows 15 + runs-on: ubuntu-latest 16 + steps: 17 + - uses: actions/checkout@v4 18 + - uses: superfly/flyctl-actions/setup-flyctl@master 19 + - working-directory: apps/workflows 20 + name: Deploy Workflows 21 + run: | 22 + flyctl deploy --remote-only --wait-timeout=500 23 + env: 24 + FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
+8 -1
apps/server/src/v1/pageSubscribers/post.ts
··· 4 4 import { db } from "@openstatus/db/src/db"; 5 5 import { page, pageSubscriber } from "@openstatus/db/src/schema"; 6 6 import { SubscribeEmail } from "@openstatus/emails"; 7 - import { sendEmail } from "@openstatus/emails/emails/send"; 7 + import { sendEmail } from "@openstatus/emails/src/send"; 8 8 import { HTTPException } from "hono/http-exception"; 9 9 import { openApiErrorResponses } from "../../libs/errors/openapi-error-responses"; 10 10 import type { pageSubscribersApi } from "./index"; ··· 42 42 export function registerPostPageSubscriber(api: typeof pageSubscribersApi) { 43 43 return api.openapi(postRouteSubscriber, async (c) => { 44 44 const workspaceId = c.get("workspaceId"); 45 + const limits = c.get("limits"); 45 46 const input = c.req.valid("json"); 46 47 const { id } = c.req.valid("param"); 48 + 49 + if (!limits["status-subscribers"]) { 50 + throw new HTTPException(403, { 51 + message: "Upgrade for status page subscribers", 52 + }); 53 + } 47 54 48 55 const _page = await db 49 56 .select()
+8 -11
apps/server/src/v1/statusReportUpdates/post.ts
··· 47 47 ) { 48 48 return api.openapi(createStatusUpdate, async (c) => { 49 49 const workspaceId = c.get("workspaceId"); 50 - const workspacePlan = c.get("workspacePlan"); 51 50 const input = c.req.valid("json"); 51 + const limits = c.get("limits"); 52 52 53 53 const _statusReport = await db 54 54 .select() ··· 80 80 81 81 // send email 82 82 83 - if (workspacePlan.limits.notifications && _statusReport.pageId) { 83 + if (limits["status-subscribers"] && _statusReport.pageId) { 84 84 const subscribers = await db 85 85 .select() 86 86 .from(pageSubscriber) ··· 98 98 .where(eq(page.id, _statusReport.pageId)) 99 99 .get(); 100 100 if (pageInfo) { 101 - const subscribersEmails = subscribers.map( 102 - (subscriber) => subscriber.email, 103 - ); 104 - 105 - // TODO: verify if we leak any email data here 106 - await sendEmailHtml({ 107 - to: subscribersEmails, 101 + const subscribersEmails = subscribers.map((subscriber) => ({ 102 + to: subscriber.email, 108 103 subject: `New status update for ${pageInfo.title}`, 109 104 html: `<p>Hi,</p><p>${pageInfo.title} just posted an update on their status page:</p><p>New Status : ${statusReportUpdate.status}</p><p>${statusReportUpdate.message}</p></p><p></p><p>Powered by OpenStatus</p><p></p><p></p><p></p><p></p><p></p> 110 - `, 105 + `, 111 106 from: "Notification OpenStatus <notification@notifications.openstatus.dev>", 112 - }); 107 + })); 108 + 109 + await sendEmailHtml(subscribersEmails); 113 110 } 114 111 } 115 112
+1 -1
apps/server/src/v1/statusReports/post.ts
··· 11 11 } from "@openstatus/db/src/schema"; 12 12 13 13 import { getLimit } from "@openstatus/db/src/schema/plan/utils"; 14 - import { sendBatchEmailHtml } from "@openstatus/emails/emails/send"; 14 + import { sendBatchEmailHtml } from "@openstatus/emails/src/send"; 15 15 import { HTTPException } from "hono/http-exception"; 16 16 import { openApiErrorResponses } from "../../libs/errors/openapi-error-responses"; 17 17 import { isoDate } from "../utils";
+1 -1
apps/server/src/v1/statusReports/update/post.ts
··· 7 7 statusReportUpdate, 8 8 } from "@openstatus/db/src/schema"; 9 9 import { getLimit } from "@openstatus/db/src/schema/plan/utils"; 10 - import { sendBatchEmailHtml } from "@openstatus/emails/emails/send"; 10 + import { sendBatchEmailHtml } from "@openstatus/emails/src/send"; 11 11 import { HTTPException } from "hono/http-exception"; 12 12 import { openApiErrorResponses } from "../../../libs/errors/openapi-error-responses"; 13 13 import { StatusReportUpdateSchema } from "../../statusReportUpdates/schema";
+1 -3
apps/web/src/app/(content)/blog/[slug]/page.tsx
··· 61 61 export default function PostPage({ params }: { params: { slug: string } }) { 62 62 const post = allPosts.find((post) => post.slug === params.slug); 63 63 64 - if (!post) { 65 - notFound(); 66 - } 64 + if (!post) notFound(); 67 65 68 66 return ( 69 67 <>
+1 -1
apps/web/src/lib/auth/index.ts
··· 4 4 import { analytics, trackAnalytics } from "@openstatus/analytics"; 5 5 import { db, eq } from "@openstatus/db"; 6 6 import { user } from "@openstatus/db/src/schema"; 7 - import { sendEmail } from "@openstatus/emails/emails/send"; 7 + import { sendEmail } from "@openstatus/emails/src/send"; 8 8 9 9 import { identifyUser } from "@/providers/posthog"; 10 10 import { WelcomeEmail } from "@openstatus/emails/emails/welcome";
+15
apps/workflows/.dockerignore
··· 1 + # This file is generated by Dofigen v2.1.0 2 + # See https://github.com/lenra-io/dofigen 3 + 4 + node_modules 5 + /apps/docs 6 + /apps/screenshot-service 7 + /apps/server 8 + /apps/web 9 + /packages/analytics 10 + /packages/api 11 + /packages/error 12 + /packages/notifications 13 + /packages/tinybird 14 + /packages/tracker 15 + /packages/upstash
+2
apps/workflows/.gitignore
··· 1 + # deps 2 + node_modules/
+42
apps/workflows/Dockerfile
··· 1 + # syntax=docker/dockerfile:1.7 2 + # This file is generated by Dofigen v2.1.0 3 + # See https://github.com/lenra-io/dofigen 4 + 5 + # install 6 + FROM oven/bun@sha256:e2c0b11e277f0285e089ffb77ad831faeec2833b9c4b04d6d317f054e587ef4e AS install 7 + WORKDIR /app/ 8 + RUN \ 9 + --mount=type=bind,target=package.json,source=package.json \ 10 + --mount=type=bind,target=apps/workflows/package.json,source=apps/workflows/package.json \ 11 + --mount=type=bind,target=packages/assertions/package.json,source=packages/assertions/package.json \ 12 + --mount=type=bind,target=packages/db/package.json,source=packages/db/package.json \ 13 + --mount=type=bind,target=packages/emails/package.json,source=packages/emails/package.json \ 14 + --mount=type=bind,target=packages/utils/package.json,source=packages/utils/package.json \ 15 + --mount=type=bind,target=packages/tsconfig/package.json,source=packages/tsconfig/package.json \ 16 + --mount=type=cache,target=/root/.bun/install/cache,sharing=locked \ 17 + bun install --production --ignore-scripts --frozen-lockfile --verbose 18 + 19 + # build 20 + FROM oven/bun@sha256:e2c0b11e277f0285e089ffb77ad831faeec2833b9c4b04d6d317f054e587ef4e AS build 21 + ENV NODE_ENV="production" 22 + WORKDIR /app/apps/workflows 23 + COPY \ 24 + --link \ 25 + "." "/app/" 26 + COPY \ 27 + --from=install \ 28 + --link \ 29 + "/app/node_modules" "/app/node_modules" 30 + RUN bun build --compile --sourcemap src/index.ts --outfile=app 31 + 32 + # runtime 33 + FROM debian@sha256:610b4c7ad241e66f6e2f9791e3abdf0cc107a69238ab21bf9b4695d51fd6366a AS runtime 34 + COPY \ 35 + --from=build \ 36 + --chown=1000:1000 \ 37 + --chmod=555 \ 38 + --link \ 39 + "/app/apps/workflows/app" "/bin/" 40 + USER 1000:1000 41 + EXPOSE 3000 42 + ENTRYPOINT ["/bin/app"]
+33
apps/workflows/README.md
··· 1 + ## Development 2 + 3 + To install dependencies: 4 + ```sh 5 + bun install 6 + ``` 7 + 8 + To run: 9 + ```sh 10 + bun run dev 11 + ``` 12 + 13 + open http://localhost:3000 14 + 15 + 16 + ## Deploy 17 + 18 + From root 19 + 20 + ```bash 21 + flyctl deploy --config apps/workflows/fly.toml --dockerfile apps/workflows/Dockerfile 22 + ``` 23 + 24 + ## Docker 25 + 26 + The Dockerfile is generated thanks to [Dofigen](https://github.com/lenra-io/dofigen). To generate the Dockerfile, run the following command from the `apps/workflows` directory: 27 + 28 + ```bash 29 + # Update the dependent image versions 30 + dofigen update 31 + # Generate the Dockerfile 32 + dofigen gen 33 + ```
+134
apps/workflows/dofigen.lock
··· 1 + effective: | 2 + ignore: 3 + - node_modules 4 + - /apps/docs 5 + - /apps/screenshot-service 6 + - /apps/server 7 + - /apps/web 8 + - /packages/analytics 9 + - /packages/api 10 + - /packages/error 11 + - /packages/notifications 12 + - /packages/tinybird 13 + - /packages/tracker 14 + - /packages/upstash 15 + builders: 16 + install: 17 + fromImage: 18 + path: oven/bun 19 + digest: sha256:e2c0b11e277f0285e089ffb77ad831faeec2833b9c4b04d6d317f054e587ef4e 20 + workdir: /app/ 21 + run: 22 + - bun install --production --ignore-scripts --frozen-lockfile --verbose 23 + cache: 24 + - target: /root/.bun/install/cache 25 + bind: 26 + - target: package.json 27 + source: package.json 28 + - target: apps/workflows/package.json 29 + source: apps/workflows/package.json 30 + - target: packages/assertions/package.json 31 + source: packages/assertions/package.json 32 + - target: packages/db/package.json 33 + source: packages/db/package.json 34 + - target: packages/emails/package.json 35 + source: packages/emails/package.json 36 + - target: packages/utils/package.json 37 + source: packages/utils/package.json 38 + - target: packages/tsconfig/package.json 39 + source: packages/tsconfig/package.json 40 + build: 41 + fromImage: 42 + path: oven/bun 43 + digest: sha256:e2c0b11e277f0285e089ffb77ad831faeec2833b9c4b04d6d317f054e587ef4e 44 + workdir: /app/apps/workflows 45 + env: 46 + NODE_ENV: production 47 + copy: 48 + - paths: 49 + - . 50 + target: /app/ 51 + - fromBuilder: install 52 + paths: 53 + - /app/node_modules 54 + target: /app/node_modules 55 + run: 56 + - bun build --compile --sourcemap src/index.ts --outfile=app 57 + fromImage: 58 + path: debian 59 + digest: sha256:610b4c7ad241e66f6e2f9791e3abdf0cc107a69238ab21bf9b4695d51fd6366a 60 + copy: 61 + - fromBuilder: build 62 + paths: 63 + - /app/apps/workflows/app 64 + target: /bin/ 65 + chmod: '555' 66 + entrypoint: 67 + - /bin/app 68 + expose: 69 + - port: 3000 70 + images: 71 + registry.hub.docker.com:443: 72 + library: 73 + debian: 74 + bullseye-slim: 75 + digest: sha256:610b4c7ad241e66f6e2f9791e3abdf0cc107a69238ab21bf9b4695d51fd6366a 76 + oven: 77 + bun: 78 + latest: 79 + digest: sha256:e2c0b11e277f0285e089ffb77ad831faeec2833b9c4b04d6d317f054e587ef4e 80 + resources: 81 + dofigen.yml: 82 + hash: d232b15ff842b392611e64b97bf65d642ca573052072490c2f54ea2f4dc4481e 83 + content: | 84 + ignore: 85 + - node_modules 86 + - /apps/docs 87 + - /apps/screenshot-service 88 + - /apps/server 89 + - /apps/web 90 + - /packages/analytics 91 + - /packages/api 92 + - /packages/error 93 + - /packages/notifications 94 + - /packages/tinybird 95 + - /packages/tracker 96 + - /packages/upstash 97 + builders: 98 + install: 99 + fromImage: oven/bun 100 + workdir: /app/ 101 + # Copy project 102 + bind: 103 + - package.json 104 + - apps/workflows/package.json 105 + - packages/assertions/package.json 106 + - packages/db/package.json 107 + - packages/emails/package.json 108 + - packages/utils/package.json 109 + - packages/tsconfig/package.json 110 + # Install dependencies 111 + run: bun install --production --ignore-scripts --frozen-lockfile --verbose 112 + cache: 113 + - /root/.bun/install/cache 114 + build: 115 + fromImage: oven/bun 116 + workdir: /app/apps/workflows 117 + copy: 118 + - . /app/ 119 + - fromBuilder: install 120 + source: /app/node_modules 121 + target: /app/node_modules 122 + # Should set env to production here 123 + # Compile the TypeScript application 124 + env: 125 + NODE_ENV: production 126 + run: bun build --compile --sourcemap src/index.ts --outfile=app 127 + fromImage: debian:bullseye-slim 128 + copy: 129 + - fromBuilder: build 130 + source: /app/apps/workflows/app 131 + target: /bin/ 132 + chmod: "555" 133 + expose: 3000 134 + entrypoint: /bin/app
+51
apps/workflows/dofigen.yml
··· 1 + ignore: 2 + - node_modules 3 + - /apps/docs 4 + - /apps/screenshot-service 5 + - /apps/server 6 + - /apps/web 7 + - /packages/analytics 8 + - /packages/api 9 + - /packages/error 10 + - /packages/notifications 11 + - /packages/tinybird 12 + - /packages/tracker 13 + - /packages/upstash 14 + builders: 15 + install: 16 + fromImage: oven/bun 17 + workdir: /app/ 18 + # Copy project 19 + bind: 20 + - package.json 21 + - apps/workflows/package.json 22 + - packages/assertions/package.json 23 + - packages/db/package.json 24 + - packages/emails/package.json 25 + - packages/utils/package.json 26 + - packages/tsconfig/package.json 27 + # Install dependencies 28 + run: bun install --production --ignore-scripts --frozen-lockfile --verbose 29 + cache: 30 + - /root/.bun/install/cache 31 + build: 32 + fromImage: oven/bun 33 + workdir: /app/apps/workflows 34 + copy: 35 + - . /app/ 36 + - fromBuilder: install 37 + source: /app/node_modules 38 + target: /app/node_modules 39 + # Should set env to production here 40 + # Compile the TypeScript application 41 + env: 42 + NODE_ENV: production 43 + run: bun build --compile --sourcemap src/index.ts --outfile=app 44 + fromImage: debian:bullseye-slim 45 + copy: 46 + - fromBuilder: build 47 + source: /app/apps/workflows/app 48 + target: /bin/ 49 + chmod: "555" 50 + expose: 3000 51 + entrypoint: /bin/app
+42
apps/workflows/fly.toml
··· 1 + # fly.toml app configuration file generated for openstatus-workflows on 2024-11-09T11:20:33+01:00 2 + # 3 + # See https://fly.io/docs/reference/configuration/ for information about how to use this file. 4 + # 5 + 6 + app = 'openstatus-workflows' 7 + primary_region = 'ams' 8 + 9 + [build] 10 + dockerfile = "./Dockerfile" 11 + 12 + [[vm]] 13 + cpu_kind = "shared" 14 + cpus = 1 15 + memory_mb = 256 16 + 17 + [http_service] 18 + internal_port = 3000 19 + force_https = true 20 + auto_stop_machines = "suspend" 21 + auto_start_machines = true 22 + min_machines_running = 1 23 + processes = ["app"] 24 + 25 + [http_service.concurrency] 26 + type = "requests" 27 + hard_limit = 1000 28 + soft_limit = 500 29 + 30 + [deploy] 31 + strategy = "bluegreen" 32 + 33 + [[http_service.checks]] 34 + grace_period = "10s" 35 + interval = "15s" 36 + method = "GET" 37 + timeout = "5s" 38 + path = "/ping" 39 + 40 + [env] 41 + NODE_ENV = "production" 42 + PORT = "3000"
+20
apps/workflows/package.json
··· 1 + { 2 + "name": "@openstatus/workflows", 3 + "scripts": { 4 + "dev": "NODE_ENV=development bun run --hot src/index.ts", 5 + "start": "NODE_ENV=production bun run src/index.ts", 6 + "test": "bun test" 7 + }, 8 + "dependencies": { 9 + "@google-cloud/tasks": "4.0.1", 10 + "@openstatus/db": "workspace:*", 11 + "@openstatus/emails": "workspace:*", 12 + "@openstatus/utils": "workspace:*", 13 + "hono": "4.5.3", 14 + "zod": "3.23.8" 15 + }, 16 + "devDependencies": { 17 + "@openstatus/tsconfig": "workspace:*", 18 + "@types/bun": "latest" 19 + } 20 + }
+214
apps/workflows/src/cron/checker.ts
··· 1 + import { CloudTasksClient } from "@google-cloud/tasks"; 2 + import type { google } from "@google-cloud/tasks/build/protos/protos"; 3 + import { z } from "zod"; 4 + 5 + import { and, db, eq, gte, lte, notInArray } from "@openstatus/db"; 6 + import { 7 + maintenance, 8 + maintenancesToMonitors, 9 + monitor, 10 + type monitorStatusSchema, 11 + monitorStatusTable, 12 + selectMonitorSchema, 13 + selectMonitorStatusSchema, 14 + } from "@openstatus/db/src/schema"; 15 + 16 + import type { monitorPeriodicitySchema } from "@openstatus/db/src/schema/constants"; 17 + import type { httpPayloadSchema, tpcPayloadSchema } from "@openstatus/utils"; 18 + import { env } from "../env"; 19 + 20 + export const isAuthorizedDomain = (url: string) => { 21 + return url.includes(env().SITE_URL); 22 + }; 23 + 24 + const client = new CloudTasksClient({ 25 + projectId: env().GCP_PROJECT_ID, 26 + credentials: { 27 + client_email: env().GCP_CLIENT_EMAIL, 28 + private_key: env().GCP_PRIVATE_KEY.replaceAll("\\n", "\n"), 29 + }, 30 + }); 31 + 32 + export async function sendCheckerTasks( 33 + periodicity: z.infer<typeof monitorPeriodicitySchema>, 34 + ) { 35 + const parent = client.queuePath( 36 + env().GCP_PROJECT_ID, 37 + env().GCP_LOCATION, 38 + periodicity, 39 + ); 40 + 41 + const timestamp = Date.now(); 42 + 43 + const currentMaintenance = db 44 + .select({ id: maintenance.id }) 45 + .from(maintenance) 46 + .where( 47 + and(lte(maintenance.from, new Date()), gte(maintenance.to, new Date())), 48 + ) 49 + .as("currentMaintenance"); 50 + 51 + const currentMaintenanceMonitors = db 52 + .select({ id: maintenancesToMonitors.monitorId }) 53 + .from(maintenancesToMonitors) 54 + .innerJoin( 55 + currentMaintenance, 56 + eq(maintenancesToMonitors.maintenanceId, currentMaintenance.id), 57 + ); 58 + 59 + const result = await db 60 + .select() 61 + .from(monitor) 62 + .where( 63 + and( 64 + eq(monitor.periodicity, periodicity), 65 + eq(monitor.active, true), 66 + notInArray(monitor.id, currentMaintenanceMonitors), 67 + ), 68 + ) 69 + .all(); 70 + 71 + console.log(`Start cron for ${periodicity}`); 72 + 73 + const monitors = z.array(selectMonitorSchema).safeParse(result); 74 + const allResult = []; 75 + 76 + if (!monitors.success) { 77 + console.error(`Error while fetching the monitors ${monitors.error.errors}`); 78 + throw new Error("Error while fetching the monitors"); 79 + } 80 + 81 + for (const row of monitors.data) { 82 + const result = await db 83 + .select() 84 + .from(monitorStatusTable) 85 + .where(eq(monitorStatusTable.monitorId, row.id)) 86 + .all(); 87 + const monitorStatus = z.array(selectMonitorStatusSchema).safeParse(result); 88 + 89 + if (!monitorStatus.success) { 90 + console.error( 91 + `Error while fetching the monitor status ${monitorStatus.error.errors}`, 92 + ); 93 + continue; 94 + } 95 + 96 + for (const region of row.regions) { 97 + const status = 98 + monitorStatus.data.find((m) => region === m.region)?.status || "active"; 99 + 100 + const response = createCronTask({ 101 + monitor: row, 102 + timestamp, 103 + client, 104 + parent, 105 + status, 106 + region, 107 + }); 108 + allResult.push(response); 109 + 110 + // REMINDER: vercel.json cron doesn't support seconds - so we need to schedule another task in 30s 111 + if (periodicity === "30s") { 112 + const response = createCronTask({ 113 + monitor: row, 114 + timestamp: timestamp + 30 * 1000, // we schedule another task in 30s 115 + client, 116 + parent, 117 + status, 118 + region, 119 + }); 120 + allResult.push(response); 121 + } 122 + } 123 + } 124 + 125 + const allRequests = await Promise.allSettled(allResult); 126 + 127 + const success = allRequests.filter((r) => r.status === "fulfilled").length; 128 + const failed = allRequests.filter((r) => r.status === "rejected").length; 129 + 130 + console.log( 131 + `End cron for ${periodicity} with ${allResult.length} jobs with ${success} success and ${failed} failed`, 132 + ); 133 + } 134 + 135 + async function createCronTask({ 136 + monitor, 137 + timestamp, 138 + client, 139 + parent, 140 + status, 141 + region, 142 + }: { 143 + monitor: z.infer<typeof selectMonitorSchema>; 144 + status: z.infer<typeof monitorStatusSchema>; 145 + /** 146 + * timestamp needs to be in ms 147 + */ 148 + timestamp: number; 149 + client: CloudTasksClient; 150 + parent: string; 151 + region: string; 152 + }) { 153 + let payload: 154 + | z.infer<typeof httpPayloadSchema> 155 + | z.infer<typeof tpcPayloadSchema> 156 + | null = null; 157 + let url: string | null = null; 158 + 159 + // 160 + if (monitor.jobType === "http") { 161 + payload = { 162 + workspaceId: String(monitor.workspaceId), 163 + monitorId: String(monitor.id), 164 + url: monitor.url, 165 + method: monitor.method || "GET", 166 + cronTimestamp: timestamp, 167 + body: monitor.body, 168 + headers: monitor.headers, 169 + status: status, 170 + assertions: monitor.assertions ? JSON.parse(monitor.assertions) : null, 171 + degradedAfter: monitor.degradedAfter, 172 + timeout: monitor.timeout, 173 + trigger: "cron", 174 + } satisfies z.infer<typeof httpPayloadSchema>; 175 + url = `https://openstatus-checker.fly.dev/checker/http?monitor_id=${monitor.id}`; 176 + } 177 + if (monitor.jobType === "tcp") { 178 + payload = { 179 + workspaceId: String(monitor.workspaceId), 180 + monitorId: String(monitor.id), 181 + uri: monitor.url, 182 + status: status, 183 + assertions: monitor.assertions ? JSON.parse(monitor.assertions) : null, 184 + cronTimestamp: timestamp, 185 + degradedAfter: monitor.degradedAfter, 186 + timeout: monitor.timeout, 187 + trigger: "cron", 188 + } satisfies z.infer<typeof tpcPayloadSchema>; 189 + url = `https://openstatus-checker.fly.dev/checker/tcp?monitor_id=${monitor.id}`; 190 + } 191 + 192 + if (!payload || !url) { 193 + throw new Error("Invalid jobType"); 194 + } 195 + 196 + const newTask: google.cloud.tasks.v2beta3.ITask = { 197 + httpRequest: { 198 + headers: { 199 + "Content-Type": "application/json", // Set content type to ensure compatibility your application's request parsing 200 + "fly-prefer-region": region, // Specify the region you want the request to be sent to 201 + Authorization: `Basic ${env().CRON_SECRET}`, 202 + }, 203 + httpMethod: "POST", 204 + url, 205 + body: Buffer.from(JSON.stringify(payload)).toString("base64"), 206 + }, 207 + scheduleTime: { 208 + seconds: timestamp / 1000, 209 + }, 210 + }; 211 + 212 + const request = { parent: parent, task: newTask }; 213 + return client.createTask(request); 214 + }
+29
apps/workflows/src/cron/emails.ts
··· 1 + import { and, gte, lte } from "@openstatus/db"; 2 + import { db } from "@openstatus/db/src/db"; 3 + import { user } from "@openstatus/db/src/schema"; 4 + import { EmailClient } from "@openstatus/emails"; 5 + import { env } from "../env"; 6 + 7 + const email = new EmailClient({ apiKey: env().RESEND_API_KEY }); 8 + 9 + export async function sendFollowUpEmails() { 10 + // Get users created 2-3 days ago 11 + const date1 = new Date(); 12 + date1.setDate(date1.getDate() - 3); 13 + const date2 = new Date(); 14 + date2.setDate(date2.getDate() - 2); 15 + 16 + const users = await db 17 + .select() 18 + .from(user) 19 + .where(and(gte(user.createdAt, date1), lte(user.createdAt, date2))) 20 + .all(); 21 + 22 + console.log(`Found ${users.length} users to send follow ups.`); 23 + 24 + for (const user of users) { 25 + if (user.email) { 26 + await email.sendFollowUp({ to: user.email }); 27 + } 28 + } 29 + }
+46
apps/workflows/src/cron/index.ts
··· 1 + import { monitorPeriodicitySchema } from "@openstatus/db/src/schema/constants"; 2 + import { Hono } from "hono"; 3 + import { env } from "../env"; 4 + import { sendCheckerTasks } from "./checker"; 5 + import { sendFollowUpEmails } from "./emails"; 6 + 7 + const app = new Hono({ strict: false }); 8 + 9 + app.use("*", async (c, next) => { 10 + if (c.req.header("authorization") !== env().CRON_SECRET) { 11 + return c.text("Unauthorized", 401); 12 + } 13 + 14 + return next(); 15 + }); 16 + 17 + app.get("/checker/:period", async (c) => { 18 + const period = c.req.param("period"); 19 + 20 + const schema = monitorPeriodicitySchema.safeParse(period); 21 + 22 + if (!schema.success) { 23 + return c.json({ error: schema.error.issues?.[0].message }, 400); 24 + } 25 + 26 + try { 27 + await sendCheckerTasks(schema.data); 28 + 29 + return c.json({ success: schema.data }, 200); 30 + } catch (e) { 31 + console.error(e); 32 + return c.text("Internal Server Error", 500); 33 + } 34 + }); 35 + 36 + app.get("/emails/follow-up", async (c) => { 37 + try { 38 + await sendFollowUpEmails(); 39 + return c.json({ success: true }, 200); 40 + } catch (e) { 41 + console.error(e); 42 + return c.text("Internal Server Error", 500); 43 + } 44 + }); 45 + 46 + export { app as cronRouter };
+19
apps/workflows/src/env.ts
··· 1 + import { z } from "zod"; 2 + 3 + export const env = () => 4 + z 5 + .object({ 6 + NODE_ENV: z.string().default("development"), 7 + PORT: z.coerce.number().default(3000), 8 + GCP_PROJECT_ID: z.string().default(""), 9 + GCP_CLIENT_EMAIL: z.string().default(""), 10 + GCP_PRIVATE_KEY: z.string().default(""), 11 + GCP_LOCATION: z.string().default("europe-west1"), 12 + CRON_SECRET: z.string().default(""), 13 + SITE_URL: z.string().default("http://localhost:3000"), 14 + DATABASE_URL: z.string().default("http://localhost:8080"), 15 + DATABASE_AUTH_TOKEN: z.string().default(""), 16 + RESEND_API_KEY: z.string().default(""), 17 + TINY_BIRD_API_KEY: z.string().default(""), 18 + }) 19 + .parse(process.env);
+33
apps/workflows/src/index.ts
··· 1 + import { Hono } from "hono"; 2 + import { showRoutes } from "hono/dev"; 3 + import { logger } from "hono/logger"; 4 + import { cronRouter } from "./cron"; 5 + import { env } from "./env"; 6 + 7 + const { NODE_ENV, PORT } = env(); 8 + 9 + const app = new Hono({ strict: false }); 10 + 11 + app.use("/*", logger()); 12 + 13 + app.get("/", (c) => c.text("workflows", 200)); 14 + 15 + /** 16 + * Ping Pong 17 + */ 18 + app.get("/ping", (c) => c.json({ ping: "pong" }, 200)); 19 + 20 + /** 21 + * Cron Routes 22 + */ 23 + app.route("/cron", cronRouter); 24 + 25 + if (NODE_ENV === "development") { 26 + showRoutes(app, { verbose: true, colorize: true }); 27 + } 28 + 29 + console.log(`Starting server on port ${PORT}`); 30 + 31 + const server = { port: PORT, fetch: app.fetch }; 32 + 33 + export default server;
+119
apps/workflows/src/scripts/tinybird.ts
··· 1 + import { db, eq } from "@openstatus/db"; 2 + import { type WorkspacePlan, workspace } from "@openstatus/db/src/schema"; 3 + import { env } from "../env"; 4 + 5 + import readline from "node:readline"; 6 + 7 + // Function to prompt user for confirmation 8 + const askConfirmation = async (question: string): Promise<boolean> => { 9 + const rl = readline.createInterface({ 10 + input: process.stdin, 11 + output: process.stdout, 12 + }); 13 + 14 + return new Promise((resolve) => { 15 + rl.question(`${question} (y/n): `, (answer) => { 16 + rl.close(); 17 + resolve(answer.trim().toLowerCase() === "y"); 18 + }); 19 + }); 20 + }; 21 + 22 + /** 23 + * Calculates the unix timestamp in milliseconds for a given number of days in the past. 24 + * @param days The number of days to subtract from the current date. 25 + * @returns The calculated unix timestamp in milliseconds. 26 + */ 27 + function calculatePastTimestamp(days: number) { 28 + const date = new Date(); 29 + date.setDate(date.getDate() - days); 30 + const timestamp = date.getTime(); 31 + console.log(`${days}: ${timestamp}`); 32 + return timestamp; 33 + } 34 + 35 + /** 36 + * Get the array of workspace IDs for a given plan. 37 + * @param plan The plan to filter by. 38 + * @returns The array of workspace IDs. 39 + */ 40 + async function getWorkspaceIdsByPlan(plan: WorkspacePlan) { 41 + const workspaces = await db 42 + .select() 43 + .from(workspace) 44 + .where(eq(workspace.plan, plan)) 45 + .all(); 46 + const workspaceIds = workspaces.map((w) => w.id); 47 + console.log(`${plan}: ${workspaceIds}`); 48 + return workspaceIds; 49 + } 50 + 51 + /** 52 + * 53 + * @param timestamp timestamp to delete logs before (in milliseconds) 54 + * @param workspaceIds array of workspace IDs to delete logs for 55 + * @param reverse allows to NOT delete the logs for the given workspace IDs 56 + * @returns 57 + */ 58 + async function deleteLogs( 59 + timestamp: number, 60 + workspaceIds: number[], 61 + reverse = false, 62 + ) { 63 + const response = await fetch( 64 + "https://api.tinybird.co/v0/datasources/ping_response__v8/delete", 65 + { 66 + method: "POST", 67 + headers: { 68 + "Content-Type": "application/x-www-form-urlencoded", 69 + Authorization: `Bearer ${env().TINY_BIRD_API_KEY}`, 70 + }, 71 + body: new URLSearchParams({ 72 + delete_condition: `timestamp <= ${timestamp} AND ${reverse ? "NOT" : ""} arrayExists(x -> x IN (${workspaceIds.join(", ")}), [workspaceId])`, 73 + }), 74 + }, 75 + ); 76 + const json = await response.json(); 77 + console.log(json); 78 + 79 + return json; 80 + } 81 + 82 + async function main() { 83 + // check if the script is running in production 84 + console.log(`DATABASE_URL: ${env().DATABASE_URL}`); 85 + 86 + const isConfirmed = await askConfirmation( 87 + "Are you sure you want to run this script?", 88 + ); 89 + 90 + if (!isConfirmed) { 91 + console.log("Script execution cancelled."); 92 + return; 93 + } 94 + 95 + const lastTwoWeeks = calculatePastTimestamp(14); 96 + const lastThreeMonths = calculatePastTimestamp(90); 97 + const lastYear = calculatePastTimestamp(365); 98 + const lastTwoYears = calculatePastTimestamp(730); 99 + 100 + const starters = await getWorkspaceIdsByPlan("starter"); 101 + const teams = await getWorkspaceIdsByPlan("team"); 102 + const pros = await getWorkspaceIdsByPlan("pro"); 103 + 104 + // all other workspaces, we need to 'reverse' the deletion here to NOT include those workspaces 105 + const rest = [...starters, ...teams, ...pros]; 106 + 107 + deleteLogs(lastTwoWeeks, rest, true); 108 + deleteLogs(lastThreeMonths, starters); 109 + deleteLogs(lastYear, teams); 110 + deleteLogs(lastYear, pros); 111 + } 112 + 113 + /** 114 + * REMINDER: do it manually (to avoid accidental deletion on dev mode) 115 + * Within the app/workflows folder, run the following command: 116 + * $ bun src/scripts/tinybird.ts 117 + */ 118 + 119 + // main().catch(console.error);
+7
apps/workflows/tsconfig.json
··· 1 + { 2 + "extends": "@openstatus/tsconfig/base.json", 3 + "compilerOptions": { 4 + "jsx": "react-jsx", 5 + "jsxImportSource": "hono/jsx" 6 + } 7 + }
+1 -1
packages/api/src/router/statusReport.ts
··· 16 16 statusReportUpdate, 17 17 workspace, 18 18 } from "@openstatus/db/src/schema"; 19 - import { sendBatchEmailHtml } from "@openstatus/emails/emails/send"; 19 + import { sendBatchEmailHtml } from "@openstatus/emails/src/send"; 20 20 21 21 import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc"; 22 22
+1 -1
packages/emails/emails/alert.tsx
··· 1 - "use client"; 1 + /** @jsxImportSource react */ 2 2 3 3 import { 4 4 Body,
+2
packages/emails/emails/followup.tsx
··· 1 + /** @jsxImportSource react */ 2 + 1 3 import { Body, Head, Html, Link, Preview } from "@react-email/components"; 2 4 3 5 const FollowUpEmail = () => {
+4 -8
packages/emails/emails/send.ts packages/emails/src/send.ts
··· 1 1 import type React from "react"; 2 2 import { Resend } from "resend"; 3 3 4 - import { env } from "../env"; 4 + import { env } from "./env"; 5 5 6 6 export const resend = new Resend(env.RESEND_API_KEY); 7 7 ··· 26 26 await resend.batch.send(emails); 27 27 }; 28 28 29 - export const sendEmailHtml = async (email: EmailHtml) => { 29 + // TODO: delete in favor of sendBatchEmailHtml 30 + export const sendEmailHtml = async (emails: EmailHtml[]) => { 30 31 await fetch("https://api.resend.com/emails/batch", { 31 32 method: "POST", 32 33 headers: { 33 34 "Content-Type": "application/json", 34 35 Authorization: `Bearer ${env.RESEND_API_KEY}`, 35 36 }, 36 - body: JSON.stringify({ 37 - to: email.to, 38 - from: email.from, 39 - subject: email.subject, 40 - html: email.html, 41 - }), 37 + body: JSON.stringify(emails), 42 38 }); 43 39 };
+3 -3
packages/emails/emails/subscribe.tsx
··· 1 + /** @jsxImportSource react */ 2 + 1 3 import { Body, Head, Html, Link, Preview } from "@react-email/components"; 2 4 3 - const SubscribeEmail = ({ 5 + export const SubscribeEmail = ({ 4 6 token, 5 7 page, 6 8 domain, ··· 36 38 </Html> 37 39 ); 38 40 }; 39 - 40 - export default SubscribeEmail;
packages/emails/emails/utils/utils.ts packages/emails/src/utils.ts
-33
packages/emails/emails/waiting-list.tsx
··· 1 - import { Body, Head, Html, Link, Preview } from "@react-email/components"; 2 - 3 - const WaitingList = () => { 4 - return ( 5 - <Html> 6 - <Head> 7 - <title>Thanks for joining OpenStatus waiting list</title> 8 - <Preview>Thanks for joining OpenStatus waiting list</Preview> 9 - <Body> 10 - Hello, 11 - <br /> 12 - <br /> 13 - We're working hard to get you access to OpenStatus. You can track our 14 - progress on our{" "} 15 - <Link href="https://github.com/openstatushq/openstatus"> 16 - Github repository 17 - </Link> 18 - . 19 - <br /> 20 - <br /> 21 - If you have any questions, I'm more than happy to answer them. 22 - <br /> 23 - <br /> 24 - Thank you, 25 - <br /> 26 - Thibault Le Ouay Ducasse 27 - </Body> 28 - </Head> 29 - </Html> 30 - ); 31 - }; 32 - 33 - export default WaitingList;
+2
packages/emails/emails/welcome.tsx
··· 1 + /** @jsxImportSource react */ 2 + 1 3 import { Body, Head, Html, Link, Preview } from "@react-email/components"; 2 4 3 5 const WelcomeEmail = () => {
packages/emails/env.ts packages/emails/src/env.ts
-18
packages/emails/index.ts
··· 1 - import { Alert, EmailDataSchema } from "./emails/alert"; 2 - import { FollowUpEmail } from "./emails/followup"; 3 - import SubscribeEmail from "./emails/subscribe"; 4 - import { validateEmailNotDisposable } from "./emails/utils/utils"; 5 - import WaitingList from "./emails/waiting-list"; 6 - import { WelcomeEmail } from "./emails/welcome"; 7 - 8 - export { 9 - WelcomeEmail, 10 - WaitingList, 11 - validateEmailNotDisposable, 12 - Alert, 13 - EmailDataSchema, 14 - SubscribeEmail, 15 - FollowUpEmail, 16 - }; 17 - 18 - export { sendEmail, sendEmailHtml } from "./emails/send";
+2 -1
packages/emails/package.json
··· 2 2 "name": "@openstatus/emails", 3 3 "version": "1.0.0", 4 4 "description": "", 5 - "main": "./index.ts", 5 + "main": "./src/index.ts", 6 6 "scripts": { 7 7 "dev:email": "email dev" 8 8 }, ··· 14 14 "@react-email/components": "0.0.11", 15 15 "@react-email/head": "0.0.5", 16 16 "@react-email/html": "0.0.4", 17 + "@react-email/render": "0.0.9", 17 18 "@react-email/tailwind": "0.0.9", 18 19 "@t3-oss/env-core": "0.7.0", 19 20 "react-email": "1.10.0",
+36
packages/emails/src/client.tsx
··· 1 + /** @jsxImportSource react */ 2 + 3 + import { render } from "@react-email/render"; 4 + import { Resend } from "resend"; 5 + import { FollowUpEmail } from "../emails/followup"; 6 + 7 + export class EmailClient { 8 + public readonly client: Resend; 9 + 10 + constructor(opts: { apiKey: string }) { 11 + this.client = new Resend(opts.apiKey); 12 + } 13 + 14 + public async sendFollowUp(req: { to: string }) { 15 + if (process.env.NODE_ENV === "development") return; 16 + 17 + const html = render(<FollowUpEmail />); 18 + try { 19 + const result = await this.client.emails.send({ 20 + from: "Thibault Le Ouay Ducasse <thibault@openstatus.dev>", 21 + subject: "How's it going with OpenStatus?", 22 + to: req.to, 23 + html, 24 + }); 25 + 26 + if (!result.error) { 27 + console.log(`Sent follow up email to ${req.to}`); 28 + return; 29 + } 30 + 31 + throw result.error; 32 + } catch (err) { 33 + console.error(`Error sending follow up email to ${req.to}: ${err}`); 34 + } 35 + } 36 + }
+18
packages/emails/src/index.ts
··· 1 + import { Alert, EmailDataSchema } from "../emails/alert"; 2 + import { FollowUpEmail } from "../emails/followup"; 3 + import { SubscribeEmail } from "../emails/subscribe"; 4 + import { WelcomeEmail } from "../emails/welcome"; 5 + import { validateEmailNotDisposable } from "./utils"; 6 + 7 + export { 8 + WelcomeEmail, 9 + validateEmailNotDisposable, 10 + Alert, 11 + EmailDataSchema, 12 + SubscribeEmail, 13 + FollowUpEmail, 14 + }; 15 + 16 + export { sendEmail, sendEmailHtml } from "./send"; 17 + 18 + export { EmailClient } from "./client";
+1 -1
packages/emails/tsconfig.json
··· 1 1 { 2 2 "extends": "@openstatus/tsconfig/react-library.json", 3 - "include": [".", "env.ts"], 3 + "include": [".", "src/env.ts"], 4 4 "exclude": ["dist", "build", "node_modules"] 5 5 }
+551 -500
pnpm-lock.yaml
··· 37 37 version: 3.2.1 38 38 '@astrojs/starlight': 39 39 specifier: 0.29.2 40 - version: 0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 40 + version: 0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 41 41 '@astrojs/starlight-tailwind': 42 42 specifier: 2.0.3 43 - version: 2.0.3(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)))(@astrojs/tailwind@5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3))) 43 + version: 2.0.3(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)))(@astrojs/tailwind@5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3))) 44 44 '@astrojs/tailwind': 45 45 specifier: 5.1.2 46 - version: 5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 46 + version: 5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 47 47 astro: 48 48 specifier: 4.16.14 49 - version: 4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3) 49 + version: 4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3) 50 50 sharp: 51 51 specifier: 0.33.5 52 52 version: 0.33.5 53 53 starlight-showcases: 54 54 specifier: 0.2.0 55 - version: 0.2.0(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)))(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 55 + version: 0.2.0(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)))(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 56 56 starlight-sidebar-topics: 57 57 specifier: 0.2.1 58 - version: 0.2.1(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))) 58 + version: 0.2.1(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))) 59 59 unplugin-icons: 60 60 specifier: 0.20.1 61 61 version: 0.20.1(@vue/compiler-sfc@3.4.31) ··· 92 92 version: 2.6.2 93 93 drizzle-orm: 94 94 specifier: 0.35.3 95 - version: 0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.8)(react@18.3.1) 95 + version: 0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.34)(react@18.3.1) 96 96 hono: 97 97 specifier: 4.5.3 98 98 version: 4.5.3 ··· 162 162 version: link:../../packages/utils 163 163 '@scalar/hono-api-reference': 164 164 specifier: 0.5.131 165 - version: 0.5.131(postcss@8.4.47)(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(typescript@5.6.3) 165 + version: 0.5.131(postcss@8.4.49)(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)))(typescript@5.6.3) 166 166 '@t3-oss/env-core': 167 167 specifier: 0.7.1 168 168 version: 0.7.1(typescript@5.6.3)(zod@3.23.8) ··· 443 443 version: 0.7.3(typescript@5.5.2) 444 444 '@content-collections/mdx': 445 445 specifier: 0.2.0 446 - version: 0.2.0(@content-collections/core@0.7.3(typescript@5.5.2))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 446 + version: 0.2.0(@content-collections/core@0.7.3(typescript@5.5.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 447 447 '@content-collections/next': 448 448 specifier: 0.2.3 449 449 version: 0.2.3(@content-collections/core@0.7.3(typescript@5.5.2))(next@14.2.15(@opentelemetry/api@1.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) ··· 490 490 specifier: 10.1.2 491 491 version: 10.1.2 492 492 493 + apps/workflows: 494 + dependencies: 495 + '@google-cloud/tasks': 496 + specifier: 4.0.1 497 + version: 4.0.1(encoding@0.1.13) 498 + '@openstatus/db': 499 + specifier: workspace:* 500 + version: link:../../packages/db 501 + '@openstatus/emails': 502 + specifier: workspace:* 503 + version: link:../../packages/emails 504 + '@openstatus/utils': 505 + specifier: workspace:* 506 + version: link:../../packages/utils 507 + hono: 508 + specifier: 4.5.3 509 + version: 4.5.3 510 + zod: 511 + specifier: 3.23.8 512 + version: 3.23.8 513 + devDependencies: 514 + '@openstatus/tsconfig': 515 + specifier: workspace:* 516 + version: link:../../packages/tsconfig 517 + '@types/bun': 518 + specifier: latest 519 + version: 1.1.13 520 + 493 521 packages/analytics: 494 522 dependencies: 495 523 '@jitsu/js': ··· 599 627 version: 0.7.0(typescript@5.5.2)(zod@3.23.8) 600 628 drizzle-orm: 601 629 specifier: 0.35.3 602 - version: 0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.8)(react@18.3.1) 630 + version: 0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.34)(react@18.3.1) 603 631 drizzle-zod: 604 632 specifier: 0.5.1 605 - version: 0.5.1(drizzle-orm@0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.8)(react@18.3.1))(zod@3.23.8) 633 + version: 0.5.1(drizzle-orm@0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.34)(react@18.3.1))(zod@3.23.8) 606 634 zod: 607 635 specifier: 3.23.8 608 636 version: 3.23.8 ··· 652 680 '@react-email/html': 653 681 specifier: 0.0.4 654 682 version: 0.0.4 683 + '@react-email/render': 684 + specifier: 0.0.9 685 + version: 0.0.9 655 686 '@react-email/tailwind': 656 687 specifier: 0.0.9 657 688 version: 0.0.9(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) ··· 744 775 version: link:../../tinybird 745 776 '@react-email/components': 746 777 specifier: 0.0.11 747 - version: 0.0.11(@types/react@18.3.3)(react@18.2.0)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 778 + version: 0.0.11(@types/react@18.3.3)(react@18.3.1)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 748 779 '@react-email/render': 749 780 specifier: 0.0.9 750 781 version: 0.0.9 ··· 753 784 version: 0.7.0(typescript@5.5.2)(zod@3.23.8) 754 785 resend: 755 786 specifier: 4.0.0 756 - version: 4.0.0(react-dom@18.3.1(react@18.2.0))(react@18.2.0) 787 + version: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 757 788 zod: 758 789 specifier: 3.23.8 759 790 version: 3.23.8 ··· 772 803 version: 18.3.0 773 804 next: 774 805 specifier: 14.2.15 775 - version: 14.2.15(@opentelemetry/api@1.8.0)(react-dom@18.3.1(react@18.2.0))(react@18.2.0) 806 + version: 14.2.15(@opentelemetry/api@1.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 776 807 typescript: 777 808 specifier: 5.5.2 778 809 version: 5.5.2 ··· 893 924 version: 3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 894 925 tsup: 895 926 specifier: 7.2.0 896 - version: 7.2.0(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))(typescript@5.5.2) 927 + version: 7.2.0(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))(typescript@5.5.2) 897 928 typescript: 898 929 specifier: 5.5.2 899 930 version: 5.5.2 ··· 1118 1149 version: 20.8.0 1119 1150 tsup: 1120 1151 specifier: 7.2.0 1121 - version: 7.2.0(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))(typescript@5.5.2) 1152 + version: 7.2.0(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))(typescript@5.5.2) 1122 1153 typescript: 1123 1154 specifier: 5.5.2 1124 1155 version: 5.5.2 ··· 1601 1632 resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} 1602 1633 engines: {node: '>=6.9.0'} 1603 1634 1635 + '@babel/helper-string-parser@7.24.8': 1636 + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} 1637 + engines: {node: '>=6.9.0'} 1638 + 1604 1639 '@babel/helper-string-parser@7.25.9': 1605 1640 resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 1606 1641 engines: {node: '>=6.9.0'} ··· 2143 2178 2144 2179 '@babel/traverse@7.25.9': 2145 2180 resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} 2181 + engines: {node: '>=6.9.0'} 2182 + 2183 + '@babel/types@7.24.8': 2184 + resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} 2146 2185 engines: {node: '>=6.9.0'} 2147 2186 2148 2187 '@babel/types@7.26.0': ··· 4625 4664 rollup: 4626 4665 optional: true 4627 4666 4628 - '@rollup/rollup-android-arm-eabi@4.24.4': 4629 - resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==} 4667 + '@rollup/rollup-android-arm-eabi@4.27.4': 4668 + resolution: {integrity: sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==} 4630 4669 cpu: [arm] 4631 4670 os: [android] 4632 4671 4633 - '@rollup/rollup-android-arm64@4.24.4': 4634 - resolution: {integrity: sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==} 4672 + '@rollup/rollup-android-arm64@4.27.4': 4673 + resolution: {integrity: sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==} 4635 4674 cpu: [arm64] 4636 4675 os: [android] 4637 4676 4638 - '@rollup/rollup-darwin-arm64@4.24.4': 4639 - resolution: {integrity: sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==} 4677 + '@rollup/rollup-darwin-arm64@4.27.4': 4678 + resolution: {integrity: sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==} 4640 4679 cpu: [arm64] 4641 4680 os: [darwin] 4642 4681 4643 - '@rollup/rollup-darwin-x64@4.24.4': 4644 - resolution: {integrity: sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==} 4682 + '@rollup/rollup-darwin-x64@4.27.4': 4683 + resolution: {integrity: sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==} 4645 4684 cpu: [x64] 4646 4685 os: [darwin] 4647 4686 4648 - '@rollup/rollup-freebsd-arm64@4.24.4': 4649 - resolution: {integrity: sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==} 4687 + '@rollup/rollup-freebsd-arm64@4.27.4': 4688 + resolution: {integrity: sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==} 4650 4689 cpu: [arm64] 4651 4690 os: [freebsd] 4652 4691 4653 - '@rollup/rollup-freebsd-x64@4.24.4': 4654 - resolution: {integrity: sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==} 4692 + '@rollup/rollup-freebsd-x64@4.27.4': 4693 + resolution: {integrity: sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==} 4655 4694 cpu: [x64] 4656 4695 os: [freebsd] 4657 4696 4658 - '@rollup/rollup-linux-arm-gnueabihf@4.24.4': 4659 - resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==} 4697 + '@rollup/rollup-linux-arm-gnueabihf@4.27.4': 4698 + resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==} 4660 4699 cpu: [arm] 4661 4700 os: [linux] 4662 4701 4663 - '@rollup/rollup-linux-arm-musleabihf@4.24.4': 4664 - resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==} 4702 + '@rollup/rollup-linux-arm-musleabihf@4.27.4': 4703 + resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==} 4665 4704 cpu: [arm] 4666 4705 os: [linux] 4667 4706 4668 - '@rollup/rollup-linux-arm64-gnu@4.24.4': 4669 - resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==} 4707 + '@rollup/rollup-linux-arm64-gnu@4.27.4': 4708 + resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==} 4670 4709 cpu: [arm64] 4671 4710 os: [linux] 4672 4711 4673 - '@rollup/rollup-linux-arm64-musl@4.24.4': 4674 - resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==} 4712 + '@rollup/rollup-linux-arm64-musl@4.27.4': 4713 + resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==} 4675 4714 cpu: [arm64] 4676 4715 os: [linux] 4677 4716 4678 - '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': 4679 - resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==} 4717 + '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': 4718 + resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==} 4680 4719 cpu: [ppc64] 4681 4720 os: [linux] 4682 4721 4683 - '@rollup/rollup-linux-riscv64-gnu@4.24.4': 4684 - resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==} 4722 + '@rollup/rollup-linux-riscv64-gnu@4.27.4': 4723 + resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==} 4685 4724 cpu: [riscv64] 4686 4725 os: [linux] 4687 4726 4688 - '@rollup/rollup-linux-s390x-gnu@4.24.4': 4689 - resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==} 4727 + '@rollup/rollup-linux-s390x-gnu@4.27.4': 4728 + resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==} 4690 4729 cpu: [s390x] 4691 4730 os: [linux] 4692 4731 4693 - '@rollup/rollup-linux-x64-gnu@4.24.4': 4694 - resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==} 4732 + '@rollup/rollup-linux-x64-gnu@4.27.4': 4733 + resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==} 4695 4734 cpu: [x64] 4696 4735 os: [linux] 4697 4736 4698 - '@rollup/rollup-linux-x64-musl@4.24.4': 4699 - resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==} 4737 + '@rollup/rollup-linux-x64-musl@4.27.4': 4738 + resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==} 4700 4739 cpu: [x64] 4701 4740 os: [linux] 4702 4741 4703 - '@rollup/rollup-win32-arm64-msvc@4.24.4': 4704 - resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==} 4742 + '@rollup/rollup-win32-arm64-msvc@4.27.4': 4743 + resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==} 4705 4744 cpu: [arm64] 4706 4745 os: [win32] 4707 4746 4708 - '@rollup/rollup-win32-ia32-msvc@4.24.4': 4709 - resolution: {integrity: sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==} 4747 + '@rollup/rollup-win32-ia32-msvc@4.27.4': 4748 + resolution: {integrity: sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==} 4710 4749 cpu: [ia32] 4711 4750 os: [win32] 4712 4751 4713 - '@rollup/rollup-win32-x64-msvc@4.24.4': 4714 - resolution: {integrity: sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==} 4752 + '@rollup/rollup-win32-x64-msvc@4.27.4': 4753 + resolution: {integrity: sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==} 4715 4754 cpu: [x64] 4716 4755 os: [win32] 4717 4756 ··· 4873 4912 resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==} 4874 4913 engines: {node: '>= 8'} 4875 4914 4876 - '@shikijs/core@1.22.2': 4877 - resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} 4915 + '@shikijs/core@1.23.1': 4916 + resolution: {integrity: sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==} 4878 4917 4879 - '@shikijs/engine-javascript@1.22.2': 4880 - resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} 4918 + '@shikijs/engine-javascript@1.23.1': 4919 + resolution: {integrity: sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==} 4881 4920 4882 - '@shikijs/engine-oniguruma@1.22.2': 4883 - resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} 4921 + '@shikijs/engine-oniguruma@1.23.1': 4922 + resolution: {integrity: sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==} 4884 4923 4885 - '@shikijs/types@1.22.2': 4886 - resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} 4924 + '@shikijs/types@1.23.1': 4925 + resolution: {integrity: sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==} 4887 4926 4888 4927 '@shikijs/vscode-textmate@9.3.0': 4889 4928 resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} ··· 5325 5364 '@types/body-parser@1.19.5': 5326 5365 resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} 5327 5366 5367 + '@types/bun@1.1.13': 5368 + resolution: {integrity: sha512-KmQxSBgVWCl6RSuerlLGZlIWfdxkKqat0nxN61+qu4y1KDn0Ll3j7v1Pl8GnaL3a/U6GGWVTJh75ap62kR1E8Q==} 5369 + 5328 5370 '@types/caseless@0.12.4': 5329 5371 resolution: {integrity: sha512-2in/lrHRNmDvHPgyormtEralhPcN3An1gLjJzj2Bw145VBxkQ75JEXW6CTdMAwShiHQcYsl2d10IjQSdJSJz4g==} 5330 5372 ··· 5589 5631 '@vitest/utils@1.6.0': 5590 5632 resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} 5591 5633 5592 - '@volar/kit@2.4.9': 5593 - resolution: {integrity: sha512-9EKvaON/yd9aUXLTVjipK5iBARTml5CLS2C4DYrXUccXrZ64OZKmhg7ShIed1xVrTujVZViG8ejpPlixHMpghg==} 5634 + '@volar/kit@2.4.10': 5635 + resolution: {integrity: sha512-ul+rLeO9RlFDgkY/FhPWMnpFqAsjvjkKz8VZeOY5YCJMwTblmmSBlNJtFNxSBx9t/k1q80nEthLyxiJ50ZbIAg==} 5594 5636 peerDependencies: 5595 5637 typescript: '*' 5596 5638 5597 - '@volar/language-core@2.4.9': 5598 - resolution: {integrity: sha512-t++GIrUeQnKCieZdY9e+Uar2VmTqOE4Z9KcEcdSHKmKZPuqpbbWow1YKe1i3HpU2s1JqLRVM8y/n87WKXyxJAg==} 5639 + '@volar/language-core@2.4.10': 5640 + resolution: {integrity: sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==} 5599 5641 5600 - '@volar/language-server@2.4.9': 5601 - resolution: {integrity: sha512-5YOHMLJqQL8adKYUctePGA9ReZA2FQXS2PjDnNjMq/mwtIgRGq6lqRtgq8PBeZt5NK4Xmxq8p7HafqOtqTQ4Hg==} 5642 + '@volar/language-server@2.4.10': 5643 + resolution: {integrity: sha512-odQsgrJh8hOXfxkSj/BSnpjThb2/KDhbxZnG/XAEx6E3QGDQv4hAOz9GWuKoNs0tkjgwphQGIwDMT1JYaTgRJw==} 5602 5644 5603 - '@volar/language-service@2.4.9': 5604 - resolution: {integrity: sha512-PvraIeBkFcUVhNDMEWNuB0wsN3WMf3hzswaLrpkPMgntTdbiczjsvHIfVR7KTD9SPHka79bYB7CIFlFgvyHV2A==} 5645 + '@volar/language-service@2.4.10': 5646 + resolution: {integrity: sha512-VxUiWS11rnRzakkqw5x1LPhsz+RBfD0CrrFarLGW2/voliYXEdCuSOM3r8JyNRvMvP4uwhD38ccAdTcULQEAIQ==} 5605 5647 5606 - '@volar/source-map@2.4.9': 5607 - resolution: {integrity: sha512-UGE+WgJwk64OcfBwBOBKIzmF+uNx4dC5GzOvaVsHbTBp/IVqeTVsGiO5CwBAt6l3vVXYbMuddG2DU8FEnBRxTg==} 5648 + '@volar/source-map@2.4.10': 5649 + resolution: {integrity: sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==} 5608 5650 5609 - '@volar/typescript@2.4.9': 5610 - resolution: {integrity: sha512-Zmh3Bq8CFD6OANKYsi4vs/l7togwfjFH0kgrT12uAsDff2AJQjbEUKTVUnxmHbnbH2B9ja7Lb6Mu/Wj9wBuJlg==} 5651 + '@volar/typescript@2.4.10': 5652 + resolution: {integrity: sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==} 5611 5653 5612 - '@vscode/emmet-helper@2.9.3': 5613 - resolution: {integrity: sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==} 5654 + '@vscode/emmet-helper@2.11.0': 5655 + resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} 5614 5656 5615 5657 '@vscode/l10n@0.0.18': 5616 5658 resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} ··· 6030 6072 bun-types@1.0.8: 6031 6073 resolution: {integrity: sha512-2dNB+dBwAcFW7RSd4y5vKycRjouKVklSwPk4EjBKWvcMYUBOqZGGNzV7+b2tfKBG3BeRXnozbnegVKR1azuATg==} 6032 6074 6033 - bun-types@1.1.8: 6034 - resolution: {integrity: sha512-dwhfuUKSGK8hm5Llcvb5+ejRh+4mIt8ibObJVKhZBsi0ScpXmt+AlaS1eDW6uRXCHj084Qt0kIqAJ08/7ZGC9Q==} 6075 + bun-types@1.1.34: 6076 + resolution: {integrity: sha512-br5QygTEL/TwB4uQOb96Ky22j4Gq2WxWH/8Oqv20fk5HagwKXo/akB+LiYgSfzexCt6kkcUaVm+bKiPl71xPvw==} 6035 6077 6036 6078 bundle-require@4.0.2: 6037 6079 resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} ··· 6079 6121 caniuse-lite@1.0.30001641: 6080 6122 resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} 6081 6123 6082 - caniuse-lite@1.0.30001678: 6083 - resolution: {integrity: sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw==} 6124 + caniuse-lite@1.0.30001684: 6125 + resolution: {integrity: sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==} 6084 6126 6085 6127 ccount@2.0.1: 6086 6128 resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} ··· 6149 6191 resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} 6150 6192 engines: {node: '>=10'} 6151 6193 6152 - ci-info@4.0.0: 6153 - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} 6194 + ci-info@4.1.0: 6195 + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} 6154 6196 engines: {node: '>=8'} 6155 6197 6156 6198 citty@0.1.6: ··· 6294 6336 6295 6337 confbox@0.1.7: 6296 6338 resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} 6339 + 6340 + confbox@0.1.8: 6341 + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 6297 6342 6298 6343 config-chain@1.1.13: 6299 6344 resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} ··· 6778 6823 electron-to-chromium@1.4.750: 6779 6824 resolution: {integrity: sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==} 6780 6825 6781 - electron-to-chromium@1.5.52: 6782 - resolution: {integrity: sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==} 6826 + electron-to-chromium@1.5.64: 6827 + resolution: {integrity: sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==} 6783 6828 6784 6829 emmet@2.4.11: 6785 6830 resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} 6831 + 6832 + emoji-regex-xs@1.0.0: 6833 + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} 6786 6834 6787 6835 emoji-regex@10.4.0: 6788 6836 resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} ··· 7514 7562 resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 7515 7563 engines: {node: '>=16.17.0'} 7516 7564 7517 - i18next@23.16.4: 7518 - resolution: {integrity: sha512-9NIYBVy9cs4wIqzurf7nLXPyf3R78xYbxExVqHLK9od3038rjpyOEzW+XB130kZ1N4PZ9inTtJ471CRJ4Ituyg==} 7565 + i18next@23.16.8: 7566 + resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} 7519 7567 7520 7568 iconv-lite@0.4.24: 7521 7569 resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} ··· 7551 7599 7552 7600 inflight@1.0.6: 7553 7601 resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 7554 - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 7555 7602 7556 7603 inherits@2.0.4: 7557 7604 resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} ··· 7976 8023 resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} 7977 8024 engines: {node: '>=6'} 7978 8025 7979 - local-pkg@0.5.0: 7980 - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 8026 + local-pkg@0.5.1: 8027 + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} 7981 8028 engines: {node: '>=14'} 7982 8029 7983 8030 localforage@1.10.0: ··· 8097 8144 magic-string@0.30.10: 8098 8145 resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} 8099 8146 8100 - magic-string@0.30.12: 8101 - resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} 8147 + magic-string@0.30.13: 8148 + resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==} 8102 8149 8103 8150 magicast@0.3.5: 8104 8151 resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} ··· 8549 8596 mlly@1.7.1: 8550 8597 resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} 8551 8598 8599 + mlly@1.7.3: 8600 + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} 8601 + 8552 8602 mri@1.2.0: 8553 8603 resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 8554 8604 engines: {node: '>=4'} ··· 8826 8876 resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 8827 8877 engines: {node: '>=18'} 8828 8878 8829 - oniguruma-to-js@0.4.3: 8830 - resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} 8879 + oniguruma-to-es@0.4.1: 8880 + resolution: {integrity: sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==} 8831 8881 8832 8882 openapi3-ts@4.1.2: 8833 8883 resolution: {integrity: sha512-B7gOkwsYMZO7BZXwJzXCuVagym2xhqsrilVvV0dnq2Di4+iLUXKVX9gOK23ZqaAHZOwABXN0QTdW8QnkUTX6DA==} ··· 9043 9093 pkg-types@1.1.3: 9044 9094 resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} 9045 9095 9096 + pkg-types@1.2.1: 9097 + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} 9098 + 9046 9099 playwright-core@1.46.0: 9047 9100 resolution: {integrity: sha512-9Y/d5UIwuJk8t3+lhmMSAJyNP1BUC/DqP3cQJDQQL/oWqAiuPTLgy7Q5dzglmTLwcBRdetzgNM/gni7ckfTr6A==} 9048 9101 engines: {node: '>=18'} ··· 9151 9204 resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 9152 9205 engines: {node: ^10 || ^12 || >=14} 9153 9206 9154 - postcss@8.4.47: 9155 - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 9207 + postcss@8.4.49: 9208 + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 9156 9209 engines: {node: ^10 || ^12 || >=14} 9157 9210 9158 9211 posthog-js@1.136.1: ··· 9502 9555 regenerator-transform@0.15.2: 9503 9556 resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} 9504 9557 9505 - regex@4.4.0: 9506 - resolution: {integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==} 9558 + regex-recursion@4.2.1: 9559 + resolution: {integrity: sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==} 9560 + 9561 + regex-utilities@2.3.0: 9562 + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} 9563 + 9564 + regex@5.0.2: 9565 + resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} 9507 9566 9508 9567 regexpu-core@5.3.2: 9509 9568 resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} ··· 9681 9740 9682 9741 rimraf@3.0.2: 9683 9742 resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 9684 - deprecated: Rimraf versions prior to v4 are no longer supported 9685 9743 hasBin: true 9686 9744 9687 9745 rollup@2.78.0: ··· 9694 9752 engines: {node: '>=14.18.0', npm: '>=8.0.0'} 9695 9753 hasBin: true 9696 9754 9697 - rollup@4.24.4: 9698 - resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==} 9755 + rollup@4.27.4: 9756 + resolution: {integrity: sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==} 9699 9757 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 9700 9758 hasBin: true 9701 9759 ··· 9808 9866 shiki@0.14.4: 9809 9867 resolution: {integrity: sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==} 9810 9868 9811 - shiki@1.22.2: 9812 - resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==} 9869 + shiki@1.23.1: 9870 + resolution: {integrity: sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==} 9813 9871 9814 9872 side-channel@1.0.4: 9815 9873 resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} ··· 10198 10256 resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 10199 10257 engines: {node: '>=0.6.0'} 10200 10258 10259 + to-fast-properties@2.0.0: 10260 + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 10261 + engines: {node: '>=4'} 10262 + 10201 10263 to-no-case@1.0.2: 10202 10264 resolution: {integrity: sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==} 10203 10265 ··· 10376 10438 resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 10377 10439 engines: {node: '>=12.20'} 10378 10440 10379 - type-fest@4.26.1: 10380 - resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} 10441 + type-fest@4.28.0: 10442 + resolution: {integrity: sha512-jXMwges/FVbFRe5lTMJZVEZCrO9kI9c8k0PA/z7nF3bo0JSCCLysvokFjNPIUK/itEMas10MQM+AiHoHt/T/XA==} 10381 10443 engines: {node: '>=16'} 10382 10444 10383 10445 type-is@1.6.18: ··· 10412 10474 10413 10475 ufo@1.5.3: 10414 10476 resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} 10477 + 10478 + ufo@1.5.4: 10479 + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 10415 10480 10416 10481 uglify-js@3.17.4: 10417 10482 resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} ··· 10681 10746 victory-vendor@36.6.11: 10682 10747 resolution: {integrity: sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==} 10683 10748 10684 - vite@5.4.10: 10685 - resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} 10749 + vite@5.4.11: 10750 + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} 10686 10751 engines: {node: ^18.0.0 || >=20.0.0} 10687 10752 hasBin: true 10688 10753 peerDependencies: ··· 10832 10897 vscode-textmate@8.0.0: 10833 10898 resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} 10834 10899 10835 - vscode-uri@2.1.2: 10836 - resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} 10837 - 10838 10900 vscode-uri@3.0.8: 10839 10901 resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} 10840 10902 ··· 10976 11038 resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 10977 11039 engines: {node: '>=0.4'} 10978 11040 10979 - xxhash-wasm@1.0.2: 10980 - resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} 11041 + xxhash-wasm@1.1.0: 11042 + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} 10981 11043 10982 11044 y-codemirror.next@0.3.5: 10983 11045 resolution: {integrity: sha512-VluNu3e5HfEXybnypnsGwKAj+fKLd4iAnR7JuX1Sfyydmn1jCBS5wwEL/uS04Ch2ib0DnMAOF6ZRR/8kK3wyGw==} ··· 11017 11079 engines: {node: '>= 14'} 11018 11080 hasBin: true 11019 11081 11020 - yaml@2.6.0: 11021 - resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} 11082 + yaml@2.6.1: 11083 + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} 11022 11084 engines: {node: '>= 14'} 11023 11085 hasBin: true 11024 11086 ··· 11136 11198 openapi3-ts: 4.1.2 11137 11199 zod: 3.23.8 11138 11200 11139 - '@astro-community/astro-embed-twitter@0.5.8(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))': 11201 + '@astro-community/astro-embed-twitter@0.5.8(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))': 11140 11202 dependencies: 11141 11203 '@astro-community/astro-embed-utils': 0.1.3 11142 - astro: 4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3) 11204 + astro: 4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3) 11143 11205 11144 11206 '@astro-community/astro-embed-utils@0.1.3': 11145 11207 dependencies: 11146 11208 linkedom: 0.14.26 11147 11209 11148 - '@astro-community/astro-embed-youtube@0.5.6(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))': 11210 + '@astro-community/astro-embed-youtube@0.5.6(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))': 11149 11211 dependencies: 11150 - astro: 4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3) 11212 + astro: 4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3) 11151 11213 lite-youtube-embed: 0.3.3 11152 11214 11153 11215 '@astrojs/check@0.9.4(prettier@3.3.2)(typescript@5.6.3)': ··· 11169 11231 dependencies: 11170 11232 '@astrojs/compiler': 2.10.3 11171 11233 '@astrojs/yaml2ts': 0.2.2 11172 - '@jridgewell/sourcemap-codec': 1.5.0 11173 - '@volar/kit': 2.4.9(typescript@5.6.3) 11174 - '@volar/language-core': 2.4.9 11175 - '@volar/language-server': 2.4.9 11176 - '@volar/language-service': 2.4.9 11234 + '@jridgewell/sourcemap-codec': 1.4.15 11235 + '@volar/kit': 2.4.10(typescript@5.6.3) 11236 + '@volar/language-core': 2.4.10 11237 + '@volar/language-server': 2.4.10 11238 + '@volar/language-service': 2.4.10 11177 11239 fast-glob: 3.3.2 11178 11240 muggle-string: 0.4.1 11179 - volar-service-css: 0.0.62(@volar/language-service@2.4.9) 11180 - volar-service-emmet: 0.0.62(@volar/language-service@2.4.9) 11181 - volar-service-html: 0.0.62(@volar/language-service@2.4.9) 11182 - volar-service-prettier: 0.0.62(@volar/language-service@2.4.9)(prettier@3.3.2) 11183 - volar-service-typescript: 0.0.62(@volar/language-service@2.4.9) 11184 - volar-service-typescript-twoslash-queries: 0.0.62(@volar/language-service@2.4.9) 11185 - volar-service-yaml: 0.0.62(@volar/language-service@2.4.9) 11241 + volar-service-css: 0.0.62(@volar/language-service@2.4.10) 11242 + volar-service-emmet: 0.0.62(@volar/language-service@2.4.10) 11243 + volar-service-html: 0.0.62(@volar/language-service@2.4.10) 11244 + volar-service-prettier: 0.0.62(@volar/language-service@2.4.10)(prettier@3.3.2) 11245 + volar-service-typescript: 0.0.62(@volar/language-service@2.4.10) 11246 + volar-service-typescript-twoslash-queries: 0.0.62(@volar/language-service@2.4.10) 11247 + volar-service-yaml: 0.0.62(@volar/language-service@2.4.10) 11186 11248 vscode-html-languageservice: 5.3.1 11187 11249 vscode-uri: 3.0.8 11188 11250 optionalDependencies: ··· 11204 11266 remark-parse: 11.0.0 11205 11267 remark-rehype: 11.1.1 11206 11268 remark-smartypants: 3.0.2 11207 - shiki: 1.22.2 11269 + shiki: 1.23.1 11208 11270 unified: 11.0.5 11209 11271 unist-util-remove-position: 5.0.0 11210 11272 unist-util-visit: 5.0.0 ··· 11213 11275 transitivePeerDependencies: 11214 11276 - supports-color 11215 11277 11216 - '@astrojs/mdx@3.1.9(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))': 11278 + '@astrojs/mdx@3.1.9(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))': 11217 11279 dependencies: 11218 11280 '@astrojs/markdown-remark': 5.3.0 11219 11281 '@mdx-js/mdx': 3.1.0(acorn@8.14.0) 11220 11282 acorn: 8.14.0 11221 - astro: 4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3) 11283 + astro: 4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3) 11222 11284 es-module-lexer: 1.5.4 11223 11285 estree-util-visit: 2.0.0 11224 11286 gray-matter: 4.0.3 ··· 11243 11305 stream-replace-string: 2.0.0 11244 11306 zod: 3.23.8 11245 11307 11246 - '@astrojs/starlight-tailwind@2.0.3(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)))(@astrojs/tailwind@5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))': 11308 + '@astrojs/starlight-tailwind@2.0.3(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)))(@astrojs/tailwind@5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))': 11247 11309 dependencies: 11248 - '@astrojs/starlight': 0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 11249 - '@astrojs/tailwind': 5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 11310 + '@astrojs/starlight': 0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 11311 + '@astrojs/tailwind': 5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 11250 11312 tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 11251 11313 11252 - '@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))': 11314 + '@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))': 11253 11315 dependencies: 11254 - '@astrojs/mdx': 3.1.9(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 11316 + '@astrojs/mdx': 3.1.9(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 11255 11317 '@astrojs/sitemap': 3.2.1 11256 11318 '@pagefind/default-ui': 1.2.0 11257 11319 '@types/hast': 3.0.4 11258 11320 '@types/mdast': 4.0.4 11259 - astro: 4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3) 11260 - astro-expressive-code: 0.38.3(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 11321 + astro: 4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3) 11322 + astro-expressive-code: 0.38.3(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 11261 11323 bcp-47: 2.1.0 11262 - hast-util-from-html: 2.0.3 11324 + hast-util-from-html: 2.0.1 11263 11325 hast-util-select: 6.0.3 11264 11326 hast-util-to-string: 3.0.1 11265 11327 hastscript: 9.0.0 11266 - i18next: 23.16.4 11328 + i18next: 23.16.8 11267 11329 js-yaml: 4.1.0 11268 11330 mdast-util-directive: 3.0.0 11269 11331 mdast-util-to-markdown: 2.1.0 ··· 11278 11340 transitivePeerDependencies: 11279 11341 - supports-color 11280 11342 11281 - '@astrojs/tailwind@5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3))': 11343 + '@astrojs/tailwind@5.1.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3))': 11282 11344 dependencies: 11283 - astro: 4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3) 11284 - autoprefixer: 10.4.20(postcss@8.4.47) 11285 - postcss: 8.4.47 11286 - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 11345 + astro: 4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3) 11346 + autoprefixer: 10.4.20(postcss@8.4.49) 11347 + postcss: 8.4.49 11348 + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 11287 11349 tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 11288 11350 transitivePeerDependencies: 11289 11351 - ts-node 11290 11352 11291 11353 '@astrojs/telemetry@3.1.0': 11292 11354 dependencies: 11293 - ci-info: 4.0.0 11355 + ci-info: 4.1.0 11294 11356 debug: 4.3.7 11295 11357 dlv: 1.1.3 11296 11358 dset: 3.1.4 ··· 11302 11364 11303 11365 '@astrojs/yaml2ts@0.2.2': 11304 11366 dependencies: 11305 - yaml: 2.6.0 11367 + yaml: 2.6.1 11306 11368 11307 11369 '@auth/core@0.30.0': 11308 11370 dependencies: ··· 11865 11927 '@babel/code-frame@7.24.7': 11866 11928 dependencies: 11867 11929 '@babel/highlight': 7.24.7 11868 - picocolors: 1.1.1 11930 + picocolors: 1.0.1 11869 11931 11870 11932 '@babel/code-frame@7.26.2': 11871 11933 dependencies: 11872 11934 '@babel/helper-validator-identifier': 7.25.9 11873 11935 js-tokens: 4.0.0 11874 - picocolors: 1.1.1 11936 + picocolors: 1.0.1 11875 11937 11876 11938 '@babel/compat-data@7.26.2': {} 11877 11939 ··· 12033 12095 dependencies: 12034 12096 '@babel/types': 7.26.0 12035 12097 12098 + '@babel/helper-string-parser@7.24.8': {} 12099 + 12036 12100 '@babel/helper-string-parser@7.25.9': {} 12037 12101 12038 12102 '@babel/helper-validator-identifier@7.22.20': {} ··· 12068 12132 '@babel/helper-validator-identifier': 7.24.7 12069 12133 chalk: 2.4.2 12070 12134 js-tokens: 4.0.0 12071 - picocolors: 1.1.1 12135 + picocolors: 1.0.1 12072 12136 12073 12137 '@babel/parser@7.24.8': 12074 12138 dependencies: 12075 - '@babel/types': 7.26.0 12139 + '@babel/types': 7.24.8 12076 12140 12077 12141 '@babel/parser@7.26.2': 12078 12142 dependencies: ··· 12714 12778 transitivePeerDependencies: 12715 12779 - supports-color 12716 12780 12781 + '@babel/types@7.24.8': 12782 + dependencies: 12783 + '@babel/helper-string-parser': 7.24.8 12784 + '@babel/helper-validator-identifier': 7.24.7 12785 + to-fast-properties: 2.0.0 12786 + 12717 12787 '@babel/types@7.26.0': 12718 12788 dependencies: 12719 12789 '@babel/helper-string-parser': 7.25.9 ··· 12919 12989 dependencies: 12920 12990 '@content-collections/core': 0.7.3(typescript@5.5.2) 12921 12991 12922 - '@content-collections/mdx@0.2.0(@content-collections/core@0.7.3(typescript@5.5.2))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 12992 + '@content-collections/mdx@0.2.0(@content-collections/core@0.7.3(typescript@5.5.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 12923 12993 dependencies: 12924 12994 '@content-collections/core': 0.7.3(typescript@5.5.2) 12925 12995 esbuild: 0.21.5 12926 - mdx-bundler: 10.0.3(acorn@8.14.0)(esbuild@0.21.5) 12996 + mdx-bundler: 10.0.3(esbuild@0.21.5) 12927 12997 react: 18.3.1 12928 12998 react-dom: 18.3.1(react@18.3.1) 12929 12999 unified: 11.0.5 ··· 13040 13110 '@esbuild-plugins/node-resolve@0.2.2(esbuild@0.21.5)': 13041 13111 dependencies: 13042 13112 '@types/resolve': 1.20.4 13043 - debug: 4.3.7 13113 + debug: 4.3.4 13044 13114 esbuild: 0.21.5 13045 13115 escape-string-regexp: 4.0.0 13046 13116 resolve: 1.22.8 ··· 13321 13391 dependencies: 13322 13392 '@ctrl/tinycolor': 4.1.0 13323 13393 hast-util-select: 6.0.3 13324 - hast-util-to-html: 9.0.3 13394 + hast-util-to-html: 9.0.1 13325 13395 hast-util-to-text: 4.0.2 13326 13396 hastscript: 9.0.0 13327 13397 postcss: 8.4.38 ··· 13336 13406 '@expressive-code/plugin-shiki@0.38.3': 13337 13407 dependencies: 13338 13408 '@expressive-code/core': 0.38.3 13339 - shiki: 1.22.2 13409 + shiki: 1.23.1 13340 13410 13341 13411 '@expressive-code/plugin-text-markers@0.38.3': 13342 13412 dependencies: ··· 13433 13503 dependencies: 13434 13504 tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.5.2)) 13435 13505 13436 - '@headlessui/tailwindcss@0.2.0(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))': 13506 + '@headlessui/tailwindcss@0.2.0(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)))': 13437 13507 dependencies: 13438 - tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)) 13508 + tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)) 13439 13509 13440 13510 '@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.5.2)))': 13441 13511 dependencies: ··· 13485 13555 '@iconify/types': 2.0.0 13486 13556 debug: 4.3.7 13487 13557 kolorist: 1.8.0 13488 - local-pkg: 0.5.0 13558 + local-pkg: 0.5.1 13489 13559 mlly: 1.7.1 13490 13560 transitivePeerDependencies: 13491 13561 - supports-color ··· 13769 13839 dependencies: 13770 13840 unist-util-visit: 1.4.1 13771 13841 13772 - '@mdx-js/esbuild@3.1.0(acorn@8.14.0)(esbuild@0.21.5)': 13842 + '@mdx-js/esbuild@3.1.0(esbuild@0.21.5)': 13773 13843 dependencies: 13774 - '@mdx-js/mdx': 3.1.0(acorn@8.14.0) 13844 + '@mdx-js/mdx': 3.1.0 13775 13845 '@types/unist': 3.0.2 13776 13846 esbuild: 0.21.5 13777 13847 source-map: 0.7.4 ··· 13781 13851 - acorn 13782 13852 - supports-color 13783 13853 13854 + '@mdx-js/mdx@3.1.0': 13855 + dependencies: 13856 + '@types/estree': 1.0.3 13857 + '@types/estree-jsx': 1.0.2 13858 + '@types/hast': 3.0.4 13859 + '@types/mdx': 2.0.9 13860 + collapse-white-space: 2.1.0 13861 + devlop: 1.1.0 13862 + estree-util-is-identifier-name: 3.0.0 13863 + estree-util-scope: 1.0.0 13864 + estree-walker: 3.0.3 13865 + hast-util-to-jsx-runtime: 2.3.2 13866 + markdown-extensions: 2.0.0 13867 + recma-build-jsx: 1.0.0 13868 + recma-jsx: 1.0.0 13869 + recma-stringify: 1.0.0 13870 + rehype-recma: 1.0.0 13871 + remark-mdx: 3.1.0 13872 + remark-parse: 11.0.0 13873 + remark-rehype: 11.1.0 13874 + source-map: 0.7.4 13875 + unified: 11.0.5 13876 + unist-util-position-from-estree: 2.0.0 13877 + unist-util-stringify-position: 4.0.0 13878 + unist-util-visit: 5.0.0 13879 + vfile: 6.0.1 13880 + transitivePeerDependencies: 13881 + - acorn 13882 + - supports-color 13883 + 13784 13884 '@mdx-js/mdx@3.1.0(acorn@8.14.0)': 13785 13885 dependencies: 13786 13886 '@types/estree': 1.0.3 ··· 14916 15016 dependencies: 14917 15017 '@babel/runtime': 7.23.2 14918 15018 14919 - '@react-email/body@0.0.4(react@18.2.0)': 14920 - dependencies: 14921 - react: 18.2.0 14922 - 14923 15019 '@react-email/body@0.0.4(react@18.3.1)': 14924 15020 dependencies: 14925 15021 react: 18.3.1 ··· 14928 15024 dependencies: 14929 15025 react: 18.2.0 14930 15026 14931 - '@react-email/button@0.0.11(react@18.2.0)': 14932 - dependencies: 14933 - react: 18.2.0 14934 - 14935 15027 '@react-email/button@0.0.11(react@18.3.1)': 14936 15028 dependencies: 14937 15029 react: 18.3.1 14938 15030 14939 - '@react-email/column@0.0.8(react@18.2.0)': 14940 - dependencies: 14941 - react: 18.2.0 14942 - 14943 15031 '@react-email/column@0.0.8(react@18.3.1)': 14944 15032 dependencies: 14945 15033 react: 18.3.1 14946 15034 14947 - '@react-email/components@0.0.11(@types/react@18.3.3)(react@18.2.0)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))': 14948 - dependencies: 14949 - '@react-email/body': 0.0.4(react@18.2.0) 14950 - '@react-email/button': 0.0.11(react@18.2.0) 14951 - '@react-email/column': 0.0.8(react@18.2.0) 14952 - '@react-email/container': 0.0.10(react@18.2.0) 14953 - '@react-email/font': 0.0.4(react@18.2.0) 14954 - '@react-email/head': 0.0.6(react@18.2.0) 14955 - '@react-email/heading': 0.0.9(@types/react@18.3.3) 14956 - '@react-email/hr': 0.0.6(react@18.2.0) 14957 - '@react-email/html': 0.0.6(react@18.2.0) 14958 - '@react-email/img': 0.0.6(react@18.2.0) 14959 - '@react-email/link': 0.0.6(react@18.2.0) 14960 - '@react-email/preview': 0.0.7(react@18.2.0) 14961 - '@react-email/render': 0.0.9 14962 - '@react-email/row': 0.0.6(react@18.2.0) 14963 - '@react-email/section': 0.0.10(react@18.2.0) 14964 - '@react-email/tailwind': 0.0.12(react@18.2.0)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 14965 - '@react-email/text': 0.0.6(react@18.2.0) 14966 - react: 18.2.0 14967 - transitivePeerDependencies: 14968 - - '@types/react' 14969 - - ts-node 14970 - 14971 15035 '@react-email/components@0.0.11(@types/react@18.3.3)(react@18.3.1)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))': 14972 15036 dependencies: 14973 15037 '@react-email/body': 0.0.4(react@18.3.1) ··· 14991 15055 transitivePeerDependencies: 14992 15056 - '@types/react' 14993 15057 - ts-node 14994 - 14995 - '@react-email/container@0.0.10(react@18.2.0)': 14996 - dependencies: 14997 - react: 18.2.0 14998 15058 14999 15059 '@react-email/container@0.0.10(react@18.3.1)': 15000 15060 dependencies: 15001 15061 react: 18.3.1 15002 15062 15003 - '@react-email/font@0.0.4(react@18.2.0)': 15004 - dependencies: 15005 - react: 18.2.0 15006 - 15007 15063 '@react-email/font@0.0.4(react@18.3.1)': 15008 15064 dependencies: 15009 15065 react: 18.3.1 ··· 15012 15068 dependencies: 15013 15069 react: 18.2.0 15014 15070 15015 - '@react-email/head@0.0.6(react@18.2.0)': 15016 - dependencies: 15017 - react: 18.2.0 15018 - 15019 15071 '@react-email/head@0.0.6(react@18.3.1)': 15020 15072 dependencies: 15021 15073 react: 18.3.1 ··· 15027 15079 transitivePeerDependencies: 15028 15080 - '@types/react' 15029 15081 15030 - '@react-email/hr@0.0.6(react@18.2.0)': 15031 - dependencies: 15032 - react: 18.2.0 15033 - 15034 15082 '@react-email/hr@0.0.6(react@18.3.1)': 15035 15083 dependencies: 15036 15084 react: 18.3.1 15037 15085 15038 15086 '@react-email/html@0.0.4': {} 15039 15087 15040 - '@react-email/html@0.0.6(react@18.2.0)': 15041 - dependencies: 15042 - react: 18.2.0 15043 - 15044 15088 '@react-email/html@0.0.6(react@18.3.1)': 15045 15089 dependencies: 15046 15090 react: 18.3.1 15047 - 15048 - '@react-email/img@0.0.6(react@18.2.0)': 15049 - dependencies: 15050 - react: 18.2.0 15051 15091 15052 15092 '@react-email/img@0.0.6(react@18.3.1)': 15053 15093 dependencies: 15054 15094 react: 18.3.1 15055 15095 15056 - '@react-email/link@0.0.6(react@18.2.0)': 15057 - dependencies: 15058 - react: 18.2.0 15059 - 15060 15096 '@react-email/link@0.0.6(react@18.3.1)': 15061 15097 dependencies: 15062 15098 react: 18.3.1 15063 15099 15064 - '@react-email/preview@0.0.7(react@18.2.0)': 15065 - dependencies: 15066 - react: 18.2.0 15067 - 15068 15100 '@react-email/preview@0.0.7(react@18.3.1)': 15069 15101 dependencies: 15070 15102 react: 18.3.1 ··· 15076 15108 react: 18.2.0 15077 15109 react-dom: 18.2.0(react@18.2.0) 15078 15110 15079 - '@react-email/render@0.0.17(react-dom@18.3.1(react@18.2.0))(react@18.2.0)': 15080 - dependencies: 15081 - html-to-text: 9.0.5 15082 - js-beautify: 1.15.1 15083 - react: 18.2.0 15084 - react-dom: 18.3.1(react@18.2.0) 15085 - react-promise-suspense: 0.3.4 15086 - 15087 15111 '@react-email/render@0.0.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 15088 15112 dependencies: 15089 15113 html-to-text: 9.0.5 ··· 15098 15122 pretty: 2.0.0 15099 15123 react: 18.2.0 15100 15124 react-dom: 18.2.0(react@18.2.0) 15101 - 15102 - '@react-email/row@0.0.6(react@18.2.0)': 15103 - dependencies: 15104 - react: 18.2.0 15105 15125 15106 15126 '@react-email/row@0.0.6(react@18.3.1)': 15107 15127 dependencies: 15108 15128 react: 18.3.1 15109 15129 15110 - '@react-email/section@0.0.10(react@18.2.0)': 15111 - dependencies: 15112 - react: 18.2.0 15113 - 15114 15130 '@react-email/section@0.0.10(react@18.3.1)': 15115 15131 dependencies: 15116 15132 react: 18.3.1 15117 - 15118 - '@react-email/tailwind@0.0.12(react@18.2.0)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))': 15119 - dependencies: 15120 - react: 18.2.0 15121 - react-dom: 18.2.0(react@18.2.0) 15122 - tw-to-css: 0.0.12(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 15123 - transitivePeerDependencies: 15124 - - ts-node 15125 15133 15126 15134 '@react-email/tailwind@0.0.12(react@18.3.1)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))': 15127 15135 dependencies: ··· 15140 15148 transitivePeerDependencies: 15141 15149 - ts-node 15142 15150 15143 - '@react-email/text@0.0.6(react@18.2.0)': 15144 - dependencies: 15145 - react: 18.2.0 15146 - 15147 15151 '@react-email/text@0.0.6(react@18.3.1)': 15148 15152 dependencies: 15149 15153 react: 18.3.1 ··· 15173 15177 optionalDependencies: 15174 15178 rollup: 2.78.0 15175 15179 15176 - '@rollup/pluginutils@5.1.3(rollup@4.24.4)': 15180 + '@rollup/pluginutils@5.1.3(rollup@4.27.4)': 15177 15181 dependencies: 15178 - '@types/estree': 1.0.6 15182 + '@types/estree': 1.0.3 15179 15183 estree-walker: 2.0.2 15180 15184 picomatch: 4.0.2 15181 15185 optionalDependencies: 15182 - rollup: 4.24.4 15186 + rollup: 4.27.4 15183 15187 15184 - '@rollup/rollup-android-arm-eabi@4.24.4': 15188 + '@rollup/rollup-android-arm-eabi@4.27.4': 15185 15189 optional: true 15186 15190 15187 - '@rollup/rollup-android-arm64@4.24.4': 15191 + '@rollup/rollup-android-arm64@4.27.4': 15188 15192 optional: true 15189 15193 15190 - '@rollup/rollup-darwin-arm64@4.24.4': 15194 + '@rollup/rollup-darwin-arm64@4.27.4': 15191 15195 optional: true 15192 15196 15193 - '@rollup/rollup-darwin-x64@4.24.4': 15197 + '@rollup/rollup-darwin-x64@4.27.4': 15194 15198 optional: true 15195 15199 15196 - '@rollup/rollup-freebsd-arm64@4.24.4': 15200 + '@rollup/rollup-freebsd-arm64@4.27.4': 15197 15201 optional: true 15198 15202 15199 - '@rollup/rollup-freebsd-x64@4.24.4': 15203 + '@rollup/rollup-freebsd-x64@4.27.4': 15200 15204 optional: true 15201 15205 15202 - '@rollup/rollup-linux-arm-gnueabihf@4.24.4': 15206 + '@rollup/rollup-linux-arm-gnueabihf@4.27.4': 15203 15207 optional: true 15204 15208 15205 - '@rollup/rollup-linux-arm-musleabihf@4.24.4': 15209 + '@rollup/rollup-linux-arm-musleabihf@4.27.4': 15206 15210 optional: true 15207 15211 15208 - '@rollup/rollup-linux-arm64-gnu@4.24.4': 15212 + '@rollup/rollup-linux-arm64-gnu@4.27.4': 15209 15213 optional: true 15210 15214 15211 - '@rollup/rollup-linux-arm64-musl@4.24.4': 15215 + '@rollup/rollup-linux-arm64-musl@4.27.4': 15212 15216 optional: true 15213 15217 15214 - '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': 15218 + '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': 15215 15219 optional: true 15216 15220 15217 - '@rollup/rollup-linux-riscv64-gnu@4.24.4': 15221 + '@rollup/rollup-linux-riscv64-gnu@4.27.4': 15218 15222 optional: true 15219 15223 15220 - '@rollup/rollup-linux-s390x-gnu@4.24.4': 15224 + '@rollup/rollup-linux-s390x-gnu@4.27.4': 15221 15225 optional: true 15222 15226 15223 - '@rollup/rollup-linux-x64-gnu@4.24.4': 15227 + '@rollup/rollup-linux-x64-gnu@4.27.4': 15224 15228 optional: true 15225 15229 15226 - '@rollup/rollup-linux-x64-musl@4.24.4': 15230 + '@rollup/rollup-linux-x64-musl@4.27.4': 15227 15231 optional: true 15228 15232 15229 - '@rollup/rollup-win32-arm64-msvc@4.24.4': 15233 + '@rollup/rollup-win32-arm64-msvc@4.27.4': 15230 15234 optional: true 15231 15235 15232 - '@rollup/rollup-win32-ia32-msvc@4.24.4': 15236 + '@rollup/rollup-win32-ia32-msvc@4.27.4': 15233 15237 optional: true 15234 15238 15235 - '@rollup/rollup-win32-x64-msvc@4.24.4': 15239 + '@rollup/rollup-win32-x64-msvc@4.27.4': 15236 15240 optional: true 15237 15241 15238 - '@scalar/api-client@2.0.45(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(typescript@5.6.3)': 15242 + '@scalar/api-client@2.0.45(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)))(typescript@5.6.3)': 15239 15243 dependencies: 15240 - '@headlessui/tailwindcss': 0.2.0(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3))) 15244 + '@headlessui/tailwindcss': 0.2.0(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3))) 15241 15245 '@headlessui/vue': 1.7.22(vue@3.4.31(typescript@5.6.3)) 15242 15246 '@scalar/components': 0.12.28(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.3) 15243 15247 '@scalar/draggable': 0.1.4(typescript@5.6.3) ··· 15273 15277 - typescript 15274 15278 - vitest 15275 15279 15276 - '@scalar/api-reference@1.24.70(postcss@8.4.47)(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(typescript@5.6.3)': 15280 + '@scalar/api-reference@1.24.70(postcss@8.4.49)(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)))(typescript@5.6.3)': 15277 15281 dependencies: 15278 15282 '@floating-ui/vue': 1.1.1(vue@3.4.31(typescript@5.6.3)) 15279 15283 '@headlessui/vue': 1.7.22(vue@3.4.31(typescript@5.6.3)) 15280 - '@scalar/api-client': 2.0.45(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(typescript@5.6.3) 15284 + '@scalar/api-client': 2.0.45(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)))(typescript@5.6.3) 15281 15285 '@scalar/components': 0.12.28(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(typescript@5.6.3) 15282 15286 '@scalar/oas-utils': 0.2.26(typescript@5.6.3) 15283 15287 '@scalar/openapi-parser': 0.7.2 ··· 15293 15297 github-slugger: 2.0.0 15294 15298 httpsnippet-lite: 3.0.5 15295 15299 nanoid: 5.0.7 15296 - postcss-nested: 6.0.1(postcss@8.4.47) 15300 + postcss-nested: 6.0.1(postcss@8.4.49) 15297 15301 unhead: 1.9.15 15298 15302 unified: 11.0.4 15299 15303 vue: 3.4.31(typescript@5.6.3) ··· 15362 15366 transitivePeerDependencies: 15363 15367 - typescript 15364 15368 15365 - '@scalar/hono-api-reference@0.5.131(postcss@8.4.47)(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(typescript@5.6.3)': 15369 + '@scalar/hono-api-reference@0.5.131(postcss@8.4.49)(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)))(typescript@5.6.3)': 15366 15370 dependencies: 15367 - '@scalar/api-reference': 1.24.70(postcss@8.4.47)(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)))(typescript@5.6.3) 15371 + '@scalar/api-reference': 1.24.70(postcss@8.4.49)(storybook@8.2.1(@babel/preset-env@7.24.8(@babel/core@7.26.0))(bufferutil@4.0.8)(utf-8-validate@6.0.4))(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)))(typescript@5.6.3) 15368 15372 hono: 4.5.3 15369 15373 transitivePeerDependencies: 15370 15374 - '@jest/globals' ··· 15625 15629 - encoding 15626 15630 - supports-color 15627 15631 15628 - '@shikijs/core@1.22.2': 15632 + '@shikijs/core@1.23.1': 15629 15633 dependencies: 15630 - '@shikijs/engine-javascript': 1.22.2 15631 - '@shikijs/engine-oniguruma': 1.22.2 15632 - '@shikijs/types': 1.22.2 15634 + '@shikijs/engine-javascript': 1.23.1 15635 + '@shikijs/engine-oniguruma': 1.23.1 15636 + '@shikijs/types': 1.23.1 15633 15637 '@shikijs/vscode-textmate': 9.3.0 15634 15638 '@types/hast': 3.0.4 15635 15639 hast-util-to-html: 9.0.3 15636 15640 15637 - '@shikijs/engine-javascript@1.22.2': 15641 + '@shikijs/engine-javascript@1.23.1': 15638 15642 dependencies: 15639 - '@shikijs/types': 1.22.2 15643 + '@shikijs/types': 1.23.1 15640 15644 '@shikijs/vscode-textmate': 9.3.0 15641 - oniguruma-to-js: 0.4.3 15645 + oniguruma-to-es: 0.4.1 15642 15646 15643 - '@shikijs/engine-oniguruma@1.22.2': 15647 + '@shikijs/engine-oniguruma@1.23.1': 15644 15648 dependencies: 15645 - '@shikijs/types': 1.22.2 15649 + '@shikijs/types': 1.23.1 15646 15650 '@shikijs/vscode-textmate': 9.3.0 15647 15651 15648 - '@shikijs/types@1.22.2': 15652 + '@shikijs/types@1.23.1': 15649 15653 dependencies: 15650 15654 '@shikijs/vscode-textmate': 9.3.0 15651 15655 '@types/hast': 3.0.4 ··· 16266 16270 16267 16271 '@types/babel__core@7.20.5': 16268 16272 dependencies: 16269 - '@babel/parser': 7.26.2 16273 + '@babel/parser': 7.24.8 16270 16274 '@babel/types': 7.26.0 16271 16275 '@types/babel__generator': 7.6.8 16272 16276 '@types/babel__template': 7.4.4 ··· 16278 16282 16279 16283 '@types/babel__template@7.4.4': 16280 16284 dependencies: 16281 - '@babel/parser': 7.26.2 16285 + '@babel/parser': 7.24.8 16282 16286 '@babel/types': 7.26.0 16283 16287 16284 16288 '@types/babel__traverse@7.20.6': ··· 16289 16293 dependencies: 16290 16294 '@types/connect': 3.4.38 16291 16295 '@types/node': 20.14.8 16296 + 16297 + '@types/bun@1.1.13': 16298 + dependencies: 16299 + bun-types: 1.1.34 16292 16300 16293 16301 '@types/caseless@0.12.4': {} 16294 16302 ··· 16369 16377 16370 16378 '@types/hast@3.0.4': 16371 16379 dependencies: 16372 - '@types/unist': 3.0.2 16380 + '@types/unist': 2.0.9 16373 16381 16374 16382 '@types/http-errors@2.0.4': {} 16375 16383 ··· 16413 16421 '@types/node@20.12.12': 16414 16422 dependencies: 16415 16423 undici-types: 5.26.5 16416 - optional: true 16417 16424 16418 16425 '@types/node@20.14.8': 16419 16426 dependencies: ··· 16596 16603 loupe: 2.3.7 16597 16604 pretty-format: 29.7.0 16598 16605 16599 - '@volar/kit@2.4.9(typescript@5.6.3)': 16606 + '@volar/kit@2.4.10(typescript@5.6.3)': 16600 16607 dependencies: 16601 - '@volar/language-service': 2.4.9 16602 - '@volar/typescript': 2.4.9 16608 + '@volar/language-service': 2.4.10 16609 + '@volar/typescript': 2.4.10 16603 16610 typesafe-path: 0.2.2 16604 16611 typescript: 5.6.3 16605 16612 vscode-languageserver-textdocument: 1.0.12 16606 16613 vscode-uri: 3.0.8 16607 16614 16608 - '@volar/language-core@2.4.9': 16615 + '@volar/language-core@2.4.10': 16609 16616 dependencies: 16610 - '@volar/source-map': 2.4.9 16617 + '@volar/source-map': 2.4.10 16611 16618 16612 - '@volar/language-server@2.4.9': 16619 + '@volar/language-server@2.4.10': 16613 16620 dependencies: 16614 - '@volar/language-core': 2.4.9 16615 - '@volar/language-service': 2.4.9 16616 - '@volar/typescript': 2.4.9 16621 + '@volar/language-core': 2.4.10 16622 + '@volar/language-service': 2.4.10 16623 + '@volar/typescript': 2.4.10 16617 16624 path-browserify: 1.0.1 16618 16625 request-light: 0.7.0 16619 16626 vscode-languageserver: 9.0.1 ··· 16621 16628 vscode-languageserver-textdocument: 1.0.12 16622 16629 vscode-uri: 3.0.8 16623 16630 16624 - '@volar/language-service@2.4.9': 16631 + '@volar/language-service@2.4.10': 16625 16632 dependencies: 16626 - '@volar/language-core': 2.4.9 16633 + '@volar/language-core': 2.4.10 16627 16634 vscode-languageserver-protocol: 3.17.5 16628 16635 vscode-languageserver-textdocument: 1.0.12 16629 16636 vscode-uri: 3.0.8 16630 16637 16631 - '@volar/source-map@2.4.9': {} 16638 + '@volar/source-map@2.4.10': {} 16632 16639 16633 - '@volar/typescript@2.4.9': 16640 + '@volar/typescript@2.4.10': 16634 16641 dependencies: 16635 - '@volar/language-core': 2.4.9 16642 + '@volar/language-core': 2.4.10 16636 16643 path-browserify: 1.0.1 16637 16644 vscode-uri: 3.0.8 16638 16645 16639 - '@vscode/emmet-helper@2.9.3': 16646 + '@vscode/emmet-helper@2.11.0': 16640 16647 dependencies: 16641 16648 emmet: 2.4.11 16642 16649 jsonc-parser: 2.3.1 16643 16650 vscode-languageserver-textdocument: 1.0.12 16644 16651 vscode-languageserver-types: 3.17.5 16645 - vscode-uri: 2.1.2 16652 + vscode-uri: 3.0.8 16646 16653 16647 16654 '@vscode/l10n@0.0.18': {} 16648 16655 16649 16656 '@vue/compiler-core@3.4.31': 16650 16657 dependencies: 16651 - '@babel/parser': 7.26.2 16658 + '@babel/parser': 7.24.8 16652 16659 '@vue/shared': 3.4.31 16653 16660 entities: 4.5.0 16654 16661 estree-walker: 2.0.2 16655 - source-map-js: 1.2.1 16662 + source-map-js: 1.2.0 16656 16663 16657 16664 '@vue/compiler-dom@3.4.31': 16658 16665 dependencies: ··· 16669 16676 estree-walker: 2.0.2 16670 16677 magic-string: 0.30.10 16671 16678 postcss: 8.4.38 16672 - source-map-js: 1.2.1 16679 + source-map-js: 1.2.0 16673 16680 16674 16681 '@vue/compiler-ssr@3.4.31': 16675 16682 dependencies: ··· 16742 16749 mime-types: 2.1.35 16743 16750 negotiator: 0.6.3 16744 16751 16752 + acorn-jsx@5.3.2(acorn@8.11.3): 16753 + dependencies: 16754 + acorn: 8.11.3 16755 + 16745 16756 acorn-jsx@5.3.2(acorn@8.14.0): 16746 16757 dependencies: 16747 16758 acorn: 8.14.0 ··· 16764 16775 16765 16776 agent-base@6.0.2: 16766 16777 dependencies: 16767 - debug: 4.3.7 16778 + debug: 4.3.4 16768 16779 transitivePeerDependencies: 16769 16780 - supports-color 16770 16781 16771 16782 agent-base@7.1.0: 16772 16783 dependencies: 16773 - debug: 4.3.7 16784 + debug: 4.3.4 16774 16785 transitivePeerDependencies: 16775 16786 - supports-color 16776 16787 ··· 16894 16905 16895 16906 astring@1.8.6: {} 16896 16907 16897 - astro-expressive-code@0.38.3(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)): 16908 + astro-expressive-code@0.38.3(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)): 16898 16909 dependencies: 16899 - astro: 4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3) 16910 + astro: 4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3) 16900 16911 rehype-expressive-code: 0.38.3 16901 16912 16902 - astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3): 16913 + astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3): 16903 16914 dependencies: 16904 16915 '@astrojs/compiler': 2.10.3 16905 16916 '@astrojs/internal-helpers': 0.4.1 ··· 16909 16920 '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) 16910 16921 '@babel/types': 7.26.0 16911 16922 '@oslojs/encoding': 1.1.0 16912 - '@rollup/pluginutils': 5.1.3(rollup@4.24.4) 16923 + '@rollup/pluginutils': 5.1.3(rollup@4.27.4) 16913 16924 '@types/babel__core': 7.20.5 16914 16925 '@types/cookie': 0.6.0 16915 16926 acorn: 8.14.0 16916 16927 aria-query: 5.3.2 16917 16928 axobject-query: 4.1.0 16918 16929 boxen: 8.0.1 16919 - ci-info: 4.0.0 16930 + ci-info: 4.1.0 16920 16931 clsx: 2.1.1 16921 16932 common-ancestor-path: 1.0.1 16922 16933 cookie: 0.7.2 ··· 16938 16949 http-cache-semantics: 4.1.1 16939 16950 js-yaml: 4.1.0 16940 16951 kleur: 4.1.5 16941 - magic-string: 0.30.12 16952 + magic-string: 0.30.13 16942 16953 magicast: 0.3.5 16943 16954 micromatch: 4.0.8 16944 16955 mrmime: 2.0.0 ··· 16950 16961 prompts: 2.4.2 16951 16962 rehype: 13.0.2 16952 16963 semver: 7.6.3 16953 - shiki: 1.22.2 16964 + shiki: 1.23.1 16954 16965 tinyexec: 0.3.1 16955 16966 tsconfck: 3.1.4(typescript@5.6.3) 16956 16967 unist-util-visit: 5.0.0 16957 16968 vfile: 6.0.3 16958 - vite: 5.4.10(@types/node@20.14.8) 16959 - vitefu: 1.0.3(vite@5.4.10(@types/node@20.14.8)) 16969 + vite: 5.4.11(@types/node@20.14.8) 16970 + vitefu: 1.0.3(vite@5.4.11(@types/node@20.14.8)) 16960 16971 which-pm: 3.0.0 16961 - xxhash-wasm: 1.0.2 16972 + xxhash-wasm: 1.1.0 16962 16973 yargs-parser: 21.1.1 16963 16974 zod: 3.23.8 16964 16975 zod-to-json-schema: 3.23.5(zod@3.23.8) ··· 16994 17005 postcss: 8.4.38 16995 17006 postcss-value-parser: 4.2.0 16996 17007 16997 - autoprefixer@10.4.20(postcss@8.4.47): 17008 + autoprefixer@10.4.20(postcss@8.4.49): 16998 17009 dependencies: 16999 17010 browserslist: 4.24.2 17000 - caniuse-lite: 1.0.30001678 17011 + caniuse-lite: 1.0.30001684 17001 17012 fraction.js: 4.3.7 17002 17013 normalize-range: 0.1.2 17003 - picocolors: 1.1.1 17004 - postcss: 8.4.47 17014 + picocolors: 1.0.1 17015 + postcss: 8.4.49 17005 17016 postcss-value-parser: 4.2.0 17006 17017 17007 17018 available-typed-arrays@1.0.5: {} ··· 17115 17126 chalk: 5.3.0 17116 17127 cli-boxes: 3.0.0 17117 17128 string-width: 7.2.0 17118 - type-fest: 4.26.1 17129 + type-fest: 4.28.0 17119 17130 widest-line: 5.0.0 17120 17131 wrap-ansi: 9.0.0 17121 17132 ··· 17147 17158 17148 17159 browserslist@4.24.2: 17149 17160 dependencies: 17150 - caniuse-lite: 1.0.30001678 17151 - electron-to-chromium: 1.5.52 17161 + caniuse-lite: 1.0.30001684 17162 + electron-to-chromium: 1.5.64 17152 17163 node-releases: 2.0.18 17153 17164 update-browserslist-db: 1.1.1(browserslist@4.24.2) 17154 17165 ··· 17173 17184 17174 17185 bun-types@1.0.8: {} 17175 17186 17176 - bun-types@1.1.8: 17187 + bun-types@1.1.34: 17177 17188 dependencies: 17178 17189 '@types/node': 20.12.12 17179 17190 '@types/ws': 8.5.10 17180 - optional: true 17181 17191 17182 17192 bundle-require@4.0.2(esbuild@0.18.20): 17183 17193 dependencies: ··· 17219 17229 17220 17230 caniuse-lite@1.0.30001641: {} 17221 17231 17222 - caniuse-lite@1.0.30001678: {} 17232 + caniuse-lite@1.0.30001684: {} 17223 17233 17224 17234 ccount@2.0.1: {} 17225 17235 ··· 17326 17336 17327 17337 chownr@2.0.0: {} 17328 17338 17329 - ci-info@4.0.0: {} 17339 + ci-info@4.1.0: {} 17330 17340 17331 17341 citty@0.1.6: 17332 17342 dependencies: ··· 17460 17470 17461 17471 confbox@0.1.7: {} 17462 17472 17473 + confbox@0.1.8: {} 17474 + 17463 17475 config-chain@1.1.13: 17464 17476 dependencies: 17465 17477 ini: 1.3.8 ··· 17762 17774 transitivePeerDependencies: 17763 17775 - supports-color 17764 17776 17765 - drizzle-orm@0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.8)(react@18.3.1): 17777 + drizzle-orm@0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.34)(react@18.3.1): 17766 17778 dependencies: 17767 17779 '@libsql/client-wasm': 0.14.0 17768 17780 optionalDependencies: ··· 17771 17783 '@opentelemetry/api': 1.8.0 17772 17784 '@types/react': 18.3.3 17773 17785 better-sqlite3: 11.4.0 17774 - bun-types: 1.1.8 17786 + bun-types: 1.1.34 17775 17787 react: 18.3.1 17776 17788 17777 - drizzle-orm@0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.8)(react@18.3.1): 17789 + drizzle-orm@0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.34)(react@18.3.1): 17778 17790 dependencies: 17779 17791 '@libsql/client-wasm': 0.14.0 17780 17792 optionalDependencies: ··· 17783 17795 '@opentelemetry/api': 1.8.0 17784 17796 '@types/react': 18.3.3 17785 17797 better-sqlite3: 11.4.0 17786 - bun-types: 1.1.8 17798 + bun-types: 1.1.34 17787 17799 react: 18.3.1 17788 17800 17789 - drizzle-zod@0.5.1(drizzle-orm@0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.8)(react@18.3.1))(zod@3.23.8): 17801 + drizzle-zod@0.5.1(drizzle-orm@0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.34)(react@18.3.1))(zod@3.23.8): 17790 17802 dependencies: 17791 - drizzle-orm: 0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.8)(react@18.3.1) 17803 + drizzle-orm: 0.35.3(@cloudflare/workers-types@4.20240512.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.8.0)(@types/react@18.3.3)(better-sqlite3@11.4.0)(bun-types@1.1.34)(react@18.3.1) 17792 17804 zod: 3.23.8 17793 17805 17794 17806 dset@3.1.4: {} ··· 17823 17835 17824 17836 electron-to-chromium@1.4.750: {} 17825 17837 17826 - electron-to-chromium@1.5.52: {} 17838 + electron-to-chromium@1.5.64: {} 17827 17839 17828 17840 emmet@2.4.11: 17829 17841 dependencies: 17830 17842 '@emmetio/abbreviation': 2.3.3 17831 17843 '@emmetio/css-abbreviation': 2.1.8 17844 + 17845 + emoji-regex-xs@1.0.0: {} 17832 17846 17833 17847 emoji-regex@10.4.0: {} 17834 17848 ··· 17866 17880 esast-util-from-js@2.0.1: 17867 17881 dependencies: 17868 17882 '@types/estree-jsx': 1.0.2 17869 - acorn: 8.14.0 17883 + acorn: 8.11.3 17870 17884 esast-util-from-estree: 2.0.0 17871 17885 vfile-message: 4.0.2 17872 17886 ··· 18049 18063 18050 18064 estree-walker@3.0.3: 18051 18065 dependencies: 18052 - '@types/estree': 1.0.6 18066 + '@types/estree': 1.0.3 18053 18067 18054 18068 esutils@2.0.3: {} 18055 18069 ··· 18162 18176 '@nodelib/fs.walk': 1.2.8 18163 18177 glob-parent: 5.1.2 18164 18178 merge2: 1.4.1 18165 - micromatch: 4.0.8 18179 + micromatch: 4.0.5 18166 18180 18167 18181 fast-xml-parser@4.2.5: 18168 18182 dependencies: ··· 18388 18402 dependencies: 18389 18403 basic-ftp: 5.0.3 18390 18404 data-uri-to-buffer: 6.0.1 18391 - debug: 4.3.7 18405 + debug: 4.3.4 18392 18406 fs-extra: 8.1.0 18393 18407 transitivePeerDependencies: 18394 18408 - supports-color ··· 18617 18631 devlop: 1.1.0 18618 18632 hastscript: 8.0.0 18619 18633 property-information: 6.3.0 18620 - vfile: 6.0.3 18634 + vfile: 6.0.1 18621 18635 vfile-location: 5.0.2 18622 18636 web-namespaces: 2.0.1 18623 18637 ··· 18890 18904 dependencies: 18891 18905 '@tootallnate/once': 2.0.0 18892 18906 agent-base: 6.0.2 18893 - debug: 4.3.7 18907 + debug: 4.3.4 18894 18908 transitivePeerDependencies: 18895 18909 - supports-color 18896 18910 18897 18911 http-proxy-agent@7.0.0: 18898 18912 dependencies: 18899 18913 agent-base: 7.1.0 18900 - debug: 4.3.7 18914 + debug: 4.3.4 18901 18915 transitivePeerDependencies: 18902 18916 - supports-color 18903 18917 18904 18918 https-proxy-agent@5.0.1: 18905 18919 dependencies: 18906 18920 agent-base: 6.0.2 18907 - debug: 4.3.7 18921 + debug: 4.3.4 18908 18922 transitivePeerDependencies: 18909 18923 - supports-color 18910 18924 18911 18925 https-proxy-agent@7.0.2: 18912 18926 dependencies: 18913 18927 agent-base: 7.1.0 18914 - debug: 4.3.7 18928 + debug: 4.3.4 18915 18929 transitivePeerDependencies: 18916 18930 - supports-color 18917 18931 ··· 18925 18939 18926 18940 human-signals@5.0.0: {} 18927 18941 18928 - i18next@23.16.4: 18942 + i18next@23.16.8: 18929 18943 dependencies: 18930 18944 '@babel/runtime': 7.23.2 18931 18945 ··· 19355 19369 pify: 4.0.1 19356 19370 strip-bom: 3.0.0 19357 19371 19358 - local-pkg@0.5.0: 19372 + local-pkg@0.5.1: 19359 19373 dependencies: 19360 - mlly: 1.7.1 19361 - pkg-types: 1.1.3 19374 + mlly: 1.7.3 19375 + pkg-types: 1.2.1 19362 19376 19363 19377 localforage@1.10.0: 19364 19378 dependencies: ··· 19465 19479 19466 19480 magic-string@0.30.10: 19467 19481 dependencies: 19468 - '@jridgewell/sourcemap-codec': 1.5.0 19482 + '@jridgewell/sourcemap-codec': 1.4.15 19469 19483 19470 - magic-string@0.30.12: 19484 + magic-string@0.30.13: 19471 19485 dependencies: 19472 19486 '@jridgewell/sourcemap-codec': 1.5.0 19473 19487 ··· 19475 19489 dependencies: 19476 19490 '@babel/parser': 7.26.2 19477 19491 '@babel/types': 7.26.0 19478 - source-map-js: 1.2.1 19492 + source-map-js: 1.2.0 19479 19493 19480 19494 make-dir@2.1.0: 19481 19495 dependencies: ··· 19759 19773 trim-lines: 3.0.1 19760 19774 unist-util-position: 5.0.0 19761 19775 unist-util-visit: 5.0.0 19762 - vfile: 6.0.3 19776 + vfile: 6.0.1 19763 19777 19764 19778 mdast-util-to-markdown@1.5.0: 19765 19779 dependencies: ··· 19791 19805 dependencies: 19792 19806 '@types/mdast': 4.0.4 19793 19807 19794 - mdx-bundler@10.0.3(acorn@8.14.0)(esbuild@0.21.5): 19808 + mdx-bundler@10.0.3(esbuild@0.21.5): 19795 19809 dependencies: 19796 19810 '@babel/runtime': 7.23.2 19797 19811 '@esbuild-plugins/node-resolve': 0.2.2(esbuild@0.21.5) 19798 19812 '@fal-works/esbuild-plugin-global-externals': 2.1.2 19799 - '@mdx-js/esbuild': 3.1.0(acorn@8.14.0)(esbuild@0.21.5) 19813 + '@mdx-js/esbuild': 3.1.0(esbuild@0.21.5) 19800 19814 esbuild: 0.21.5 19801 19815 gray-matter: 4.0.3 19802 19816 remark-frontmatter: 5.0.0 ··· 20045 20059 20046 20060 micromark-extension-mdxjs@3.0.0: 20047 20061 dependencies: 20048 - acorn: 8.14.0 20049 - acorn-jsx: 5.3.2(acorn@8.14.0) 20062 + acorn: 8.11.3 20063 + acorn-jsx: 5.3.2(acorn@8.11.3) 20050 20064 micromark-extension-mdx-expression: 3.0.0 20051 20065 micromark-extension-mdx-jsx: 3.0.1 20052 20066 micromark-extension-mdx-md: 2.0.0 ··· 20264 20278 micromark@3.2.0: 20265 20279 dependencies: 20266 20280 '@types/debug': 4.1.10 20267 - debug: 4.3.7 20281 + debug: 4.3.4 20268 20282 decode-named-character-reference: 1.0.2 20269 20283 micromark-core-commonmark: 1.1.0 20270 20284 micromark-factory-space: 1.1.0 ··· 20286 20300 micromark@4.0.0: 20287 20301 dependencies: 20288 20302 '@types/debug': 4.1.10 20289 - debug: 4.3.7 20303 + debug: 4.3.4 20290 20304 decode-named-character-reference: 1.0.2 20291 20305 devlop: 1.1.0 20292 20306 micromark-core-commonmark: 2.0.1 ··· 20384 20398 20385 20399 mlly@1.7.1: 20386 20400 dependencies: 20387 - acorn: 8.14.0 20401 + acorn: 8.11.3 20388 20402 pathe: 1.1.2 20389 20403 pkg-types: 1.1.3 20390 20404 ufo: 1.5.3 20391 20405 20406 + mlly@1.7.3: 20407 + dependencies: 20408 + acorn: 8.14.0 20409 + pathe: 1.1.2 20410 + pkg-types: 1.2.1 20411 + ufo: 1.5.4 20412 + 20392 20413 mri@1.2.0: {} 20393 20414 20394 20415 mrmime@2.0.0: {} ··· 20454 20475 next: 14.2.4(@opentelemetry/api@1.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 20455 20476 react: 18.3.1 20456 20477 react-dom: 18.3.1(react@18.3.1) 20457 - 20458 - next@14.2.15(@opentelemetry/api@1.8.0)(react-dom@18.3.1(react@18.2.0))(react@18.2.0): 20459 - dependencies: 20460 - '@next/env': 14.2.15 20461 - '@swc/helpers': 0.5.5 20462 - busboy: 1.6.0 20463 - caniuse-lite: 1.0.30001641 20464 - graceful-fs: 4.2.11 20465 - postcss: 8.4.31 20466 - react: 18.2.0 20467 - react-dom: 18.3.1(react@18.2.0) 20468 - styled-jsx: 5.1.1(react@18.2.0) 20469 - optionalDependencies: 20470 - '@next/swc-darwin-arm64': 14.2.15 20471 - '@next/swc-darwin-x64': 14.2.15 20472 - '@next/swc-linux-arm64-gnu': 14.2.15 20473 - '@next/swc-linux-arm64-musl': 14.2.15 20474 - '@next/swc-linux-x64-gnu': 14.2.15 20475 - '@next/swc-linux-x64-musl': 14.2.15 20476 - '@next/swc-win32-arm64-msvc': 14.2.15 20477 - '@next/swc-win32-ia32-msvc': 14.2.15 20478 - '@next/swc-win32-x64-msvc': 14.2.15 20479 - '@opentelemetry/api': 1.8.0 20480 - transitivePeerDependencies: 20481 - - '@babel/core' 20482 - - babel-plugin-macros 20483 20478 20484 20479 next@14.2.15(@opentelemetry/api@1.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 20485 20480 dependencies: ··· 20627 20622 consola: 3.2.3 20628 20623 execa: 8.0.1 20629 20624 pathe: 1.1.2 20630 - pkg-types: 1.1.3 20631 - ufo: 1.5.3 20625 + pkg-types: 1.2.1 20626 + ufo: 1.5.4 20632 20627 20633 20628 oauth4webapi@2.10.4: {} 20634 20629 ··· 20666 20661 dependencies: 20667 20662 mimic-function: 5.0.1 20668 20663 20669 - oniguruma-to-js@0.4.3: 20664 + oniguruma-to-es@0.4.1: 20670 20665 dependencies: 20671 - regex: 4.4.0 20666 + emoji-regex-xs: 1.0.0 20667 + regex: 5.0.2 20668 + regex-recursion: 4.2.1 20672 20669 20673 20670 openapi3-ts@4.1.2: 20674 20671 dependencies: ··· 20756 20753 dependencies: 20757 20754 '@tootallnate/quickjs-emscripten': 0.23.0 20758 20755 agent-base: 7.1.0 20759 - debug: 4.3.7 20756 + debug: 4.3.4 20760 20757 get-uri: 6.0.2 20761 20758 http-proxy-agent: 7.0.0 20762 20759 https-proxy-agent: 7.0.2 ··· 20903 20900 mlly: 1.7.1 20904 20901 pathe: 1.1.2 20905 20902 20903 + pkg-types@1.2.1: 20904 + dependencies: 20905 + confbox: 0.1.8 20906 + mlly: 1.7.3 20907 + pathe: 1.1.2 20908 + 20906 20909 playwright-core@1.46.0: {} 20907 20910 20908 20911 playwright@1.46.0: ··· 20983 20986 postcss: 8.4.38 20984 20987 ts-node: 10.9.2(@types/node@20.8.0)(typescript@5.5.2) 20985 20988 20986 - postcss-load-config@4.0.1(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)): 20989 + postcss-load-config@4.0.1(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)): 20987 20990 dependencies: 20988 20991 lilconfig: 2.1.0 20989 20992 yaml: 2.3.3 20990 20993 optionalDependencies: 20991 - postcss: 8.4.47 20992 - ts-node: 10.9.2(@types/node@20.8.0)(typescript@5.5.2) 20994 + postcss: 8.4.38 20995 + ts-node: 10.9.2(@types/node@20.8.0)(typescript@5.6.3) 20993 20996 20994 - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)): 20997 + postcss-load-config@4.0.1(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)): 20995 20998 dependencies: 20996 - lilconfig: 3.1.2 20997 - yaml: 2.6.0 20999 + lilconfig: 2.1.0 21000 + yaml: 2.3.3 20998 21001 optionalDependencies: 20999 - postcss: 8.4.38 21002 + postcss: 8.4.49 21000 21003 ts-node: 10.9.2(@types/node@20.8.0)(typescript@5.5.2) 21001 21004 21002 - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)): 21005 + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.3)): 21003 21006 dependencies: 21004 21007 lilconfig: 3.1.2 21005 - yaml: 2.6.0 21008 + yaml: 2.4.5 21006 21009 optionalDependencies: 21007 - postcss: 8.4.47 21010 + postcss: 8.4.49 21008 21011 ts-node: 10.9.2(@types/node@20.14.8)(typescript@5.6.3) 21009 21012 21010 21013 postcss-nested@6.0.0(postcss@8.4.21): ··· 21017 21020 postcss: 8.4.38 21018 21021 postcss-selector-parser: 6.0.13 21019 21022 21020 - postcss-nested@6.0.1(postcss@8.4.47): 21023 + postcss-nested@6.0.1(postcss@8.4.49): 21021 21024 dependencies: 21022 - postcss: 8.4.47 21025 + postcss: 8.4.49 21023 21026 postcss-selector-parser: 6.0.13 21024 21027 21025 21028 postcss-selector-parser@6.0.10: ··· 21052 21055 picocolors: 1.0.0 21053 21056 source-map-js: 1.2.0 21054 21057 21055 - postcss@8.4.47: 21058 + postcss@8.4.49: 21056 21059 dependencies: 21057 21060 nanoid: 3.3.7 21058 21061 picocolors: 1.1.1 ··· 21277 21280 dependencies: 21278 21281 loose-envify: 1.4.0 21279 21282 react: 18.3.1 21280 - scheduler: 0.23.2 21281 - 21282 - react-dom@18.3.1(react@18.2.0): 21283 - dependencies: 21284 - loose-envify: 1.4.0 21285 - react: 18.2.0 21286 21283 scheduler: 0.23.2 21287 21284 21288 21285 react-dom@18.3.1(react@18.3.1): ··· 21468 21465 estree-util-build-jsx: 3.0.1 21469 21466 vfile: 6.0.1 21470 21467 21468 + recma-jsx@1.0.0: 21469 + dependencies: 21470 + acorn-jsx: 5.3.2(acorn@8.11.3) 21471 + estree-util-to-js: 2.0.0 21472 + recma-parse: 1.0.0 21473 + recma-stringify: 1.0.0 21474 + unified: 11.0.5 21475 + transitivePeerDependencies: 21476 + - acorn 21477 + 21471 21478 recma-jsx@1.0.0(acorn@8.14.0): 21472 21479 dependencies: 21473 21480 acorn-jsx: 5.3.2(acorn@8.14.0) ··· 21509 21516 dependencies: 21510 21517 '@babel/runtime': 7.23.2 21511 21518 21512 - regex@4.4.0: {} 21519 + regex-recursion@4.2.1: 21520 + dependencies: 21521 + regex-utilities: 2.3.0 21522 + 21523 + regex-utilities@2.3.0: {} 21524 + 21525 + regex@5.0.2: 21526 + dependencies: 21527 + regex-utilities: 2.3.0 21513 21528 21514 21529 regexpu-core@5.3.2: 21515 21530 dependencies: ··· 21634 21649 rehype-stringify@10.0.1: 21635 21650 dependencies: 21636 21651 '@types/hast': 3.0.4 21637 - hast-util-to-html: 9.0.3 21652 + hast-util-to-html: 9.0.1 21638 21653 unified: 11.0.5 21639 21654 21640 21655 rehype@13.0.2: 21641 21656 dependencies: 21642 21657 '@types/hast': 3.0.4 21643 21658 rehype-parse: 9.0.0 21644 - rehype-stringify: 10.0.1 21659 + rehype-stringify: 10.0.0 21645 21660 unified: 11.0.5 21646 21661 21647 21662 remark-directive@3.0.0: ··· 21759 21774 21760 21775 require-from-string@2.0.2: {} 21761 21776 21762 - resend@4.0.0(react-dom@18.3.1(react@18.2.0))(react@18.2.0): 21763 - dependencies: 21764 - '@react-email/render': 0.0.17(react-dom@18.3.1(react@18.2.0))(react@18.2.0) 21765 - transitivePeerDependencies: 21766 - - react 21767 - - react-dom 21768 - 21769 21777 resend@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 21770 21778 dependencies: 21771 21779 '@react-email/render': 0.0.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ··· 21821 21829 retry-request@7.0.1(encoding@0.1.13): 21822 21830 dependencies: 21823 21831 '@types/request': 2.48.11 21824 - debug: 4.3.7 21832 + debug: 4.3.4 21825 21833 extend: 3.0.2 21826 21834 teeny-request: 9.0.0(encoding@0.1.13) 21827 21835 transitivePeerDependencies: ··· 21850 21858 optionalDependencies: 21851 21859 fsevents: 2.3.3 21852 21860 21853 - rollup@4.24.4: 21861 + rollup@4.27.4: 21854 21862 dependencies: 21855 21863 '@types/estree': 1.0.6 21856 21864 optionalDependencies: 21857 - '@rollup/rollup-android-arm-eabi': 4.24.4 21858 - '@rollup/rollup-android-arm64': 4.24.4 21859 - '@rollup/rollup-darwin-arm64': 4.24.4 21860 - '@rollup/rollup-darwin-x64': 4.24.4 21861 - '@rollup/rollup-freebsd-arm64': 4.24.4 21862 - '@rollup/rollup-freebsd-x64': 4.24.4 21863 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.4 21864 - '@rollup/rollup-linux-arm-musleabihf': 4.24.4 21865 - '@rollup/rollup-linux-arm64-gnu': 4.24.4 21866 - '@rollup/rollup-linux-arm64-musl': 4.24.4 21867 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.4 21868 - '@rollup/rollup-linux-riscv64-gnu': 4.24.4 21869 - '@rollup/rollup-linux-s390x-gnu': 4.24.4 21870 - '@rollup/rollup-linux-x64-gnu': 4.24.4 21871 - '@rollup/rollup-linux-x64-musl': 4.24.4 21872 - '@rollup/rollup-win32-arm64-msvc': 4.24.4 21873 - '@rollup/rollup-win32-ia32-msvc': 4.24.4 21874 - '@rollup/rollup-win32-x64-msvc': 4.24.4 21865 + '@rollup/rollup-android-arm-eabi': 4.27.4 21866 + '@rollup/rollup-android-arm64': 4.27.4 21867 + '@rollup/rollup-darwin-arm64': 4.27.4 21868 + '@rollup/rollup-darwin-x64': 4.27.4 21869 + '@rollup/rollup-freebsd-arm64': 4.27.4 21870 + '@rollup/rollup-freebsd-x64': 4.27.4 21871 + '@rollup/rollup-linux-arm-gnueabihf': 4.27.4 21872 + '@rollup/rollup-linux-arm-musleabihf': 4.27.4 21873 + '@rollup/rollup-linux-arm64-gnu': 4.27.4 21874 + '@rollup/rollup-linux-arm64-musl': 4.27.4 21875 + '@rollup/rollup-linux-powerpc64le-gnu': 4.27.4 21876 + '@rollup/rollup-linux-riscv64-gnu': 4.27.4 21877 + '@rollup/rollup-linux-s390x-gnu': 4.27.4 21878 + '@rollup/rollup-linux-x64-gnu': 4.27.4 21879 + '@rollup/rollup-linux-x64-musl': 4.27.4 21880 + '@rollup/rollup-win32-arm64-msvc': 4.27.4 21881 + '@rollup/rollup-win32-ia32-msvc': 4.27.4 21882 + '@rollup/rollup-win32-x64-msvc': 4.27.4 21875 21883 fsevents: 2.3.3 21876 21884 21877 21885 rss@1.2.2: ··· 22024 22032 vscode-oniguruma: 1.7.0 22025 22033 vscode-textmate: 8.0.0 22026 22034 22027 - shiki@1.22.2: 22035 + shiki@1.23.1: 22028 22036 dependencies: 22029 - '@shikijs/core': 1.22.2 22030 - '@shikijs/engine-javascript': 1.22.2 22031 - '@shikijs/engine-oniguruma': 1.22.2 22032 - '@shikijs/types': 1.22.2 22037 + '@shikijs/core': 1.23.1 22038 + '@shikijs/engine-javascript': 1.23.1 22039 + '@shikijs/engine-oniguruma': 1.23.1 22040 + '@shikijs/types': 1.23.1 22033 22041 '@shikijs/vscode-textmate': 9.3.0 22034 22042 '@types/hast': 3.0.4 22035 22043 ··· 22079 22087 socks-proxy-agent@8.0.2: 22080 22088 dependencies: 22081 22089 agent-base: 7.1.0 22082 - debug: 4.3.7 22090 + debug: 4.3.4 22083 22091 socks: 2.7.1 22084 22092 transitivePeerDependencies: 22085 22093 - supports-color ··· 22137 22145 dependencies: 22138 22146 type-fest: 0.7.1 22139 22147 22140 - starlight-showcases@0.2.0(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)))(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)): 22148 + starlight-showcases@0.2.0(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)))(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)): 22141 22149 dependencies: 22142 - '@astro-community/astro-embed-twitter': 0.5.8(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 22143 - '@astro-community/astro-embed-youtube': 0.5.6(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 22144 - '@astrojs/starlight': 0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 22150 + '@astro-community/astro-embed-twitter': 0.5.8(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 22151 + '@astro-community/astro-embed-youtube': 0.5.6(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 22152 + '@astrojs/starlight': 0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 22145 22153 transitivePeerDependencies: 22146 22154 - astro 22147 22155 22148 - starlight-sidebar-topics@0.2.1(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3))): 22156 + starlight-sidebar-topics@0.2.1(@astrojs/starlight@0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3))): 22149 22157 dependencies: 22150 - '@astrojs/starlight': 0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.24.4)(typescript@5.6.3)) 22158 + '@astrojs/starlight': 0.29.2(astro@4.16.14(@types/node@20.14.8)(rollup@4.27.4)(typescript@5.6.3)) 22151 22159 22152 22160 statuses@2.0.1: {} 22153 22161 ··· 22291 22299 dependencies: 22292 22300 inline-style-parser: 0.2.4 22293 22301 22294 - styled-jsx@5.1.1(react@18.2.0): 22295 - dependencies: 22296 - client-only: 0.0.1 22297 - react: 18.2.0 22298 - 22299 22302 styled-jsx@5.1.1(react@18.3.1): 22300 22303 dependencies: 22301 22304 client-only: 0.0.1 ··· 22393 22396 micromatch: 4.0.5 22394 22397 normalize-path: 3.0.0 22395 22398 object-hash: 3.0.0 22396 - picocolors: 1.1.1 22399 + picocolors: 1.0.1 22397 22400 postcss: 8.4.38 22398 22401 postcss-import: 15.1.0(postcss@8.4.38) 22399 22402 postcss-js: 4.0.1(postcss@8.4.38) 22400 - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 22403 + postcss-load-config: 4.0.1(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 22401 22404 postcss-nested: 6.0.1(postcss@8.4.38) 22402 22405 postcss-selector-parser: 6.0.13 22403 22406 postcss-value-parser: 4.2.0 ··· 22487 22490 transitivePeerDependencies: 22488 22491 - ts-node 22489 22492 22493 + tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)): 22494 + dependencies: 22495 + '@alloc/quick-lru': 5.2.0 22496 + arg: 5.0.2 22497 + chokidar: 3.5.3 22498 + didyoumean: 1.2.2 22499 + dlv: 1.1.3 22500 + fast-glob: 3.3.1 22501 + glob-parent: 6.0.2 22502 + is-glob: 4.0.3 22503 + jiti: 1.21.0 22504 + lilconfig: 2.1.0 22505 + micromatch: 4.0.5 22506 + normalize-path: 3.0.0 22507 + object-hash: 3.0.0 22508 + picocolors: 1.0.0 22509 + postcss: 8.4.38 22510 + postcss-import: 15.1.0(postcss@8.4.38) 22511 + postcss-js: 4.0.1(postcss@8.4.38) 22512 + postcss-load-config: 4.0.1(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3)) 22513 + postcss-nested: 6.0.1(postcss@8.4.38) 22514 + postcss-selector-parser: 6.0.13 22515 + resolve: 1.22.8 22516 + sucrase: 3.34.0 22517 + transitivePeerDependencies: 22518 + - ts-node 22519 + 22490 22520 tar-fs@2.1.1: 22491 22521 dependencies: 22492 22522 chownr: 1.1.4 ··· 22576 22606 dependencies: 22577 22607 os-tmpdir: 1.0.2 22578 22608 22609 + to-fast-properties@2.0.0: {} 22610 + 22579 22611 to-no-case@1.0.2: {} 22580 22612 22581 22613 to-pascal-case@1.0.0: ··· 22683 22715 v8-compile-cache-lib: 3.0.1 22684 22716 yn: 3.1.1 22685 22717 22718 + ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.3): 22719 + dependencies: 22720 + '@cspotcode/source-map-support': 0.8.1 22721 + '@tsconfig/node10': 1.0.11 22722 + '@tsconfig/node12': 1.0.11 22723 + '@tsconfig/node14': 1.0.3 22724 + '@tsconfig/node16': 1.0.4 22725 + '@types/node': 20.8.0 22726 + acorn: 8.11.3 22727 + acorn-walk: 8.3.2 22728 + arg: 4.1.3 22729 + create-require: 1.1.1 22730 + diff: 4.0.2 22731 + make-error: 1.3.6 22732 + typescript: 5.6.3 22733 + v8-compile-cache-lib: 3.0.1 22734 + yn: 3.1.1 22735 + optional: true 22736 + 22686 22737 tsconfck@3.1.4(typescript@5.6.3): 22687 22738 optionalDependencies: 22688 22739 typescript: 5.6.3 ··· 22691 22742 22692 22743 tslib@2.6.2: {} 22693 22744 22694 - tsup@7.2.0(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))(typescript@5.5.2): 22745 + tsup@7.2.0(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2))(typescript@5.5.2): 22695 22746 dependencies: 22696 22747 bundle-require: 4.0.2(esbuild@0.18.20) 22697 22748 cac: 6.7.14 ··· 22701 22752 execa: 5.1.1 22702 22753 globby: 11.1.0 22703 22754 joycon: 3.1.1 22704 - postcss-load-config: 4.0.1(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 22755 + postcss-load-config: 4.0.1(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.5.2)) 22705 22756 resolve-from: 5.0.0 22706 22757 rollup: 3.29.4 22707 22758 source-map: 0.8.0-beta.0 22708 22759 sucrase: 3.34.0 22709 22760 tree-kill: 1.2.2 22710 22761 optionalDependencies: 22711 - postcss: 8.4.47 22762 + postcss: 8.4.49 22712 22763 typescript: 5.5.2 22713 22764 transitivePeerDependencies: 22714 22765 - supports-color ··· 22777 22828 22778 22829 type-fest@2.19.0: {} 22779 22830 22780 - type-fest@4.26.1: {} 22831 + type-fest@4.28.0: {} 22781 22832 22782 22833 type-is@1.6.18: 22783 22834 dependencies: ··· 22799 22850 typescript@5.6.3: {} 22800 22851 22801 22852 ufo@1.5.3: {} 22853 + 22854 + ufo@1.5.4: {} 22802 22855 22803 22856 uglify-js@3.17.4: 22804 22857 optional: true ··· 22965 23018 '@iconify/utils': 2.1.33 22966 23019 debug: 4.3.7 22967 23020 kolorist: 1.8.0 22968 - local-pkg: 0.5.0 23021 + local-pkg: 0.5.1 22969 23022 unplugin: 1.16.0 22970 23023 optionalDependencies: 22971 23024 '@vue/compiler-sfc': 3.4.31 ··· 23071 23124 vfile-location@5.0.2: 23072 23125 dependencies: 23073 23126 '@types/unist': 3.0.2 23074 - vfile: 6.0.3 23127 + vfile: 6.0.1 23075 23128 23076 23129 vfile-message@3.1.4: 23077 23130 dependencies: ··· 23118 23171 d3-time: 3.1.0 23119 23172 d3-timer: 3.0.1 23120 23173 23121 - vite@5.4.10(@types/node@20.14.8): 23174 + vite@5.4.11(@types/node@20.14.8): 23122 23175 dependencies: 23123 23176 esbuild: 0.21.5 23124 - postcss: 8.4.47 23125 - rollup: 4.24.4 23177 + postcss: 8.4.49 23178 + rollup: 4.27.4 23126 23179 optionalDependencies: 23127 23180 '@types/node': 20.14.8 23128 23181 fsevents: 2.3.3 23129 23182 23130 - vitefu@1.0.3(vite@5.4.10(@types/node@20.14.8)): 23183 + vitefu@1.0.3(vite@5.4.11(@types/node@20.14.8)): 23131 23184 optionalDependencies: 23132 - vite: 5.4.10(@types/node@20.14.8) 23185 + vite: 5.4.11(@types/node@20.14.8) 23133 23186 23134 23187 vlq@0.2.3: {} 23135 23188 23136 - volar-service-css@0.0.62(@volar/language-service@2.4.9): 23189 + volar-service-css@0.0.62(@volar/language-service@2.4.10): 23137 23190 dependencies: 23138 23191 vscode-css-languageservice: 6.3.1 23139 23192 vscode-languageserver-textdocument: 1.0.12 23140 23193 vscode-uri: 3.0.8 23141 23194 optionalDependencies: 23142 - '@volar/language-service': 2.4.9 23195 + '@volar/language-service': 2.4.10 23143 23196 23144 - volar-service-emmet@0.0.62(@volar/language-service@2.4.9): 23197 + volar-service-emmet@0.0.62(@volar/language-service@2.4.10): 23145 23198 dependencies: 23146 23199 '@emmetio/css-parser': 0.4.0 23147 23200 '@emmetio/html-matcher': 1.3.0 23148 - '@vscode/emmet-helper': 2.9.3 23201 + '@vscode/emmet-helper': 2.11.0 23149 23202 vscode-uri: 3.0.8 23150 23203 optionalDependencies: 23151 - '@volar/language-service': 2.4.9 23204 + '@volar/language-service': 2.4.10 23152 23205 23153 - volar-service-html@0.0.62(@volar/language-service@2.4.9): 23206 + volar-service-html@0.0.62(@volar/language-service@2.4.10): 23154 23207 dependencies: 23155 23208 vscode-html-languageservice: 5.3.1 23156 23209 vscode-languageserver-textdocument: 1.0.12 23157 23210 vscode-uri: 3.0.8 23158 23211 optionalDependencies: 23159 - '@volar/language-service': 2.4.9 23212 + '@volar/language-service': 2.4.10 23160 23213 23161 - volar-service-prettier@0.0.62(@volar/language-service@2.4.9)(prettier@3.3.2): 23214 + volar-service-prettier@0.0.62(@volar/language-service@2.4.10)(prettier@3.3.2): 23162 23215 dependencies: 23163 23216 vscode-uri: 3.0.8 23164 23217 optionalDependencies: 23165 - '@volar/language-service': 2.4.9 23218 + '@volar/language-service': 2.4.10 23166 23219 prettier: 3.3.2 23167 23220 23168 - volar-service-typescript-twoslash-queries@0.0.62(@volar/language-service@2.4.9): 23221 + volar-service-typescript-twoslash-queries@0.0.62(@volar/language-service@2.4.10): 23169 23222 dependencies: 23170 23223 vscode-uri: 3.0.8 23171 23224 optionalDependencies: 23172 - '@volar/language-service': 2.4.9 23225 + '@volar/language-service': 2.4.10 23173 23226 23174 - volar-service-typescript@0.0.62(@volar/language-service@2.4.9): 23227 + volar-service-typescript@0.0.62(@volar/language-service@2.4.10): 23175 23228 dependencies: 23176 23229 path-browserify: 1.0.1 23177 23230 semver: 7.6.3 ··· 23180 23233 vscode-nls: 5.2.0 23181 23234 vscode-uri: 3.0.8 23182 23235 optionalDependencies: 23183 - '@volar/language-service': 2.4.9 23236 + '@volar/language-service': 2.4.10 23184 23237 23185 - volar-service-yaml@0.0.62(@volar/language-service@2.4.9): 23238 + volar-service-yaml@0.0.62(@volar/language-service@2.4.10): 23186 23239 dependencies: 23187 23240 vscode-uri: 3.0.8 23188 23241 yaml-language-server: 1.15.0 23189 23242 optionalDependencies: 23190 - '@volar/language-service': 2.4.9 23243 + '@volar/language-service': 2.4.10 23191 23244 23192 23245 vscode-css-languageservice@6.3.1: 23193 23246 dependencies: ··· 23244 23297 vscode-oniguruma@1.7.0: {} 23245 23298 23246 23299 vscode-textmate@8.0.0: {} 23247 - 23248 - vscode-uri@2.1.2: {} 23249 23300 23250 23301 vscode-uri@3.0.8: {} 23251 23302 ··· 23377 23428 23378 23429 xtend@4.0.2: {} 23379 23430 23380 - xxhash-wasm@1.0.2: {} 23431 + xxhash-wasm@1.1.0: {} 23381 23432 23382 23433 y-codemirror.next@0.3.5(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(yjs@13.6.18): 23383 23434 dependencies: ··· 23416 23467 23417 23468 yaml@2.4.5: {} 23418 23469 23419 - yaml@2.6.0: {} 23470 + yaml@2.6.1: {} 23420 23471 23421 23472 yargs-parser@18.1.3: 23422 23473 dependencies: