1
mirror of https://github.com/jakejarvis/domainstack.io.git synced 2025-12-02 19:33:48 -05:00

Random v2 cleanup

This commit is contained in:
2025-10-19 13:38:30 -04:00
parent 54fe3549a8
commit 4528528fb2
8 changed files with 156 additions and 221 deletions

View File

@@ -1,27 +1,26 @@
# Public PostHog keys for analytics/error tracking
NEXT_PUBLIC_POSTHOG_KEY=
# PostHog keys for analytics/error tracking and build-time sourcemap uploads
NEXT_PUBLIC_POSTHOG_HOST=
NEXT_PUBLIC_POSTHOG_KEY=
POSTHOG_API_KEY=
POSTHOG_ENV_ID=
# Postgres credentials (set by Neon integration)
DATABASE_URL=
# Redis credentials (set by Upstash integration)
KV_REST_API_URL=
KV_REST_API_TOKEN=
# UploadThing credentials
UPLOADTHING_SECRET=
UPLOADTHING_APP_ID=
KV_REST_API_URL=
# Inngest credentials (set by Inngest integration)
INNGEST_EVENT_KEY=
INNGEST_SIGNING_KEY=
# Mapbox access token for react-map-gl
# UploadThing credentials
UPLOADTHING_APP_ID=
UPLOADTHING_SECRET=
# Mapbox public token for react-map-gl
NEXT_PUBLIC_MAPBOX_TOKEN=
# Secret used by Vercel to authenticate cron job endpoints
CRON_SECRET=
# Optional: override user agent for upstream fetches
# Optional: override user agent sent with upstream requests
EXTERNAL_USER_AGENT=

View File

@@ -1,97 +0,0 @@
# GitHub Copilot Instructions for Domainstack
This repository contains Domainstack, a domain intelligence tool built with Next.js 15 and React 19. Please follow these guidelines when assisting with code in this repository.
## Additional Resources
- **AGENTS.md** - Contains detailed repository guidelines for project structure, coding conventions, testing, and security
- **README.md** - Project overview, features, tech stack, and getting started instructions
Refer to these files for comprehensive information about the repository's architecture and development practices.
## Project Overview
Domainstack is an all-in-one app for exploring domain names, providing instant insights including WHOIS info, DNS records, SSL certificates, HTTP headers, hosting details, and geolocation. The app features a modern, interactive UI with dark mode support and fast, privacy-focused data fetching with caching.
## Project Structure & Module Organization
- `app/` - Next.js App Router with server components by default. Keep `app/page.tsx` and `app/api/*` thin and delegate to `server/` or `lib/`.
- `components/` - Reusable UI primitives (kebab-case files, PascalCase exports).
- `hooks/` - Shared stateful helpers (camelCase named exports).
- `lib/` - Domain utilities and caching (`lib/cache`). Import via `@/...` aliases.
- `server/` - Backend integrations and tRPC routers. Isolate DNS, RDAP/WHOIS, TLS, headers, and screenshot services.
- `public/` - Static assets. Tailwind v4 tokens live in `app/globals.css`. Update `instrumentation-client.ts` when adding analytics.
## Tech Stack
- **Next.js 15** with Turbopack
- **React 19** with React Compiler
- **TypeScript** (strict mode enabled)
- **Tailwind CSS v4**
- **tRPC** for API endpoints
- **Upstash Redis** for caching
- **UploadThing** for favicon and screenshot storage
- **Puppeteer Core + @sparticuz/chromium** for server screenshots (fallback to `puppeteer` locally)
- **Biome** for linting and formatting
## Development Commands
- `pnpm dev` - Start dev server at http://localhost:3000
- `pnpm build` - Compile production bundle
- `pnpm start` - Serve compiled output for smoke tests
- `pnpm lint` - Run Biome lint + type-aware checks (`--write` to fix)
- `pnpm format` - Apply Biome formatting
- `pnpm typecheck` - Run `tsc --noEmit` for stricter diagnostics
- `pnpm test:run` - Run test suite
## Coding Style & Conventions
- **TypeScript only** with `strict` mode enabled
- Prefer small, pure modules (≈≤300 LOC)
- **2-space indentation**
- Files/folders: **kebab-case**
- Exports: **PascalCase** for components, **camelCase** for helpers
- Client components must begin with `"use client"`
- Consolidate imports via `@/...` aliases
- Keep page roots lean, delegate to `server/` or `lib/`
## Key Domain Analysis Features
### Data Sources & Services
- **RDAP/WHOIS** - Domain registration information via `rdapper`
- **DNS Resolution** - A/AAAA/MX/NS/TXT via Cloudflare DoH
- **TLS/SSL Certificates** - Chain analysis
- **HTTP Headers** - Security headers and tech detection
- **Geolocation** - IP → map
- **Favicon & Screenshot Storage** - UploadThing with Redis index
- Service: `server/services/screenshot.ts` using Puppeteer.
- Storage: `lib/storage.ts` uploads via UploadThing and returns `{ url, key }` stored in Redis with TTLs.
- Client UI: `components/domain/screenshot.tsx` and `components/domain/screenshot-tooltip.tsx` with optimized loading state and one-time fetch gating.
- Router: `server/routers/domain.ts` exposes `domain.screenshot` via `createDomainProcedure`.
- Config: prefer `puppeteer-core` + `@sparticuz/chromium` on Vercel; fallback to `puppeteer` locally. In `next.config.ts`, `serverExternalPackages: ["@sparticuz/chromium", "puppeteer-core"]`.
- Env:
- `UPLOADTHING_SECRET` (required)
- `UPLOADTHING_APP_ID` (recommended)
- `SCREENSHOT_TTL_SECONDS` (optional, default 7 days)
- `EXTERNAL_USER_AGENT` (optional UA override)
- `PUPPETEER_SKIP_DOWNLOAD=1` on Vercel to skip full puppeteer install
### Cron Upload Pruning
- Route: `app/api/cron/blob-prune/route.ts` (GET only, Bearer auth via `CRON_SECRET`).
- Deletes expired UploadThing files by key from `purge:favicon` and `purge:screenshot` ZSETs; batch size configurable via `PURGE_BATCH`.
## Testing Guidelines
- Runner: **Vitest**; environment `jsdom` by default; Node tests with `/* @vitest-environment node */`.
- Setup: `vitest.setup.ts` mocks analytics, `server-only`, and Redis.
- UI tests: prefer behavior tests; mock Radix primitives and TRPC/React Query as needed.
- Server tests: hoisted ESM mocks; unique cache domains; reset Redis between tests.
- New tests:
- `server/services/screenshot.test.ts` mocks puppeteer and UploadThing storage.
- `lib/storage.test.ts` covers upload helpers.
## Security & Configuration
- Keep secrets in `.env.local`
- Review `server/trpc.ts` when extending routers
- Validate all external inputs with Zod
- Use `server-only` imports for sensitive modules

6
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"recommendations": [
"biomejs.biome",
"vitest.explorer"
]
}

View File

@@ -6,6 +6,8 @@
- `hooks/` shared stateful helpers (camelCase named exports).
- `lib/` domain utilities and caching (`lib/cache`); import via `@/...` aliases.
- `server/` backend integrations and tRPC routers; isolate DNS, RDAP/WHOIS, TLS, and header probing services.
- `server/db/` Drizzle ORM schema, migrations, and repository layer for Postgres persistence.
- `server/inngest/` Inngest functions for background jobs and scheduled section revalidation.
- `public/` static assets; Tailwind v4 tokens live in `app/globals.css`. Update `instrumentation-client.ts` when adding analytics.
## Build, Test, and Development Commands
@@ -15,6 +17,12 @@
- `pnpm lint` — run Biome lint + type-aware checks (`--write` to fix).
- `pnpm format` — apply Biome formatting.
- `pnpm typecheck` — run `tsc --noEmit` for stricter diagnostics.
- `pnpm db:generate` — generate Drizzle migrations.
- `pnpm db:push` — push the current schema to the database.
- `pnpm db:migrate` — apply migrations to the database.
- `pnpm db:studio` — open Drizzle Studio.
- `pnpm db:seed:providers` — seed known provider rules.
- Requires Node.js >= 22 (see `package.json` engines).
## Coding Style & Naming Conventions
- TypeScript only, `strict` enabled; prefer small, pure modules (≈≤300 LOC).
@@ -27,6 +35,7 @@
- Mocks analytics clients/servers and `server-only`.
- Centralized Redis mock exposed via `global.__redisTestHelper` for consistent state and resets.
- `unstable_cache` mocked as a no-op; caching behavior is not under test.
- Database in tests: Drizzle client is not globally mocked. Replace `@/server/db/client` with a PGlite-backed instance when needed.
- UI tests:
- Do not add direct tests for `components/ui/*` (shadcn).
- Mock Radix primitives (Accordion, Tooltip) when testing domain sections.
@@ -46,5 +55,6 @@
## Security & Configuration Tips
- Keep secrets in `.env.local`.
- Screenshots (Puppeteer): prefer `puppeteer-core` + `@sparticuz/chromium` on Vercel.
- Cache Cloudflare DoH, RDAP, TLS, and header probes via `lib/cache`; apply retry backoff to respect provider limits.
- Persist domain data in Postgres via Drizzle; use Redis for short-lived caching/locks. Apply retry backoff to respect provider limits.
- Background revalidation runs via Inngest functions (scheduled and event-driven).
- Review `server/trpc.ts` when extending procedures to ensure auth/context remain intact.

View File

@@ -7,7 +7,18 @@
},
"files": {
"ignoreUnknown": true,
"includes": ["**", "!node_modules", "!.next", "!dist", "!build", "!drizzle"]
"includes": [
"**",
"!node_modules",
"!.next",
"!dist",
"!build",
"!coverage",
"!drizzle",
"!public",
"!.github",
"!.vscode"
]
},
"formatter": {
"enabled": true,

View File

@@ -91,7 +91,7 @@
"@vitest/ui": "^3.2.4",
"babel-plugin-react-compiler": "19.1.0-rc.3",
"drizzle-kit": "^0.31.5",
"jsdom": "^27.0.0",
"jsdom": "^27.0.1",
"puppeteer": "24.22.3",
"tailwindcss": "^4.1.14",
"tsx": "^4.20.6",

221
pnpm-lock.yaml generated
View File

@@ -190,8 +190,8 @@ importers:
specifier: ^0.31.5
version: 0.31.5
jsdom:
specifier: ^27.0.0
version: 27.0.0(postcss@8.5.6)
specifier: ^27.0.1
version: 27.0.1(postcss@8.5.6)
puppeteer:
specifier: 24.22.3
version: 24.22.3(typescript@5.9.3)
@@ -212,7 +212,7 @@ importers:
version: 5.1.4(typescript@5.9.3)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6))
vitest:
specifier: ^3.2.4
version: 3.2.4(@types/debug@4.1.12)(@types/node@24.8.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)(tsx@4.20.6)
version: 3.2.4(@types/debug@4.1.12)(@types/node@24.8.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.1)(tsx@4.20.6)
packages:
@@ -2258,113 +2258,113 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.38':
resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==}
'@rollup/rollup-android-arm-eabi@4.52.4':
resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==}
'@rollup/rollup-android-arm-eabi@4.52.5':
resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.52.4':
resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==}
'@rollup/rollup-android-arm64@4.52.5':
resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.52.4':
resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==}
'@rollup/rollup-darwin-arm64@4.52.5':
resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.52.4':
resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==}
'@rollup/rollup-darwin-x64@4.52.5':
resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.52.4':
resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==}
'@rollup/rollup-freebsd-arm64@4.52.5':
resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.52.4':
resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==}
'@rollup/rollup-freebsd-x64@4.52.5':
resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.52.4':
resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==}
'@rollup/rollup-linux-arm-gnueabihf@4.52.5':
resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.52.4':
resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==}
'@rollup/rollup-linux-arm-musleabihf@4.52.5':
resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.52.4':
resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==}
'@rollup/rollup-linux-arm64-gnu@4.52.5':
resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.52.4':
resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==}
'@rollup/rollup-linux-arm64-musl@4.52.5':
resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-loong64-gnu@4.52.4':
resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==}
'@rollup/rollup-linux-loong64-gnu@4.52.5':
resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.52.4':
resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==}
'@rollup/rollup-linux-ppc64-gnu@4.52.5':
resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.52.4':
resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==}
'@rollup/rollup-linux-riscv64-gnu@4.52.5':
resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.52.4':
resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==}
'@rollup/rollup-linux-riscv64-musl@4.52.5':
resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.52.4':
resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==}
'@rollup/rollup-linux-s390x-gnu@4.52.5':
resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
cpu: [s390x]
os: [linux]
'@rollup/rollup-linux-x64-gnu@4.52.4':
resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==}
'@rollup/rollup-linux-x64-gnu@4.52.5':
resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
cpu: [x64]
os: [linux]
'@rollup/rollup-linux-x64-musl@4.52.4':
resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==}
'@rollup/rollup-linux-x64-musl@4.52.5':
resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
cpu: [x64]
os: [linux]
'@rollup/rollup-openharmony-arm64@4.52.4':
resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==}
'@rollup/rollup-openharmony-arm64@4.52.5':
resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==}
cpu: [arm64]
os: [openharmony]
'@rollup/rollup-win32-arm64-msvc@4.52.4':
resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==}
'@rollup/rollup-win32-arm64-msvc@4.52.5':
resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.52.4':
resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==}
'@rollup/rollup-win32-ia32-msvc@4.52.5':
resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-gnu@4.52.4':
resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==}
'@rollup/rollup-win32-x64-gnu@4.52.5':
resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==}
cpu: [x64]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.52.4':
resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==}
'@rollup/rollup-win32-x64-msvc@4.52.5':
resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==}
cpu: [x64]
os: [win32]
@@ -2897,8 +2897,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
baseline-browser-mapping@2.8.17:
resolution: {integrity: sha512-j5zJcx6golJYTG6c05LUZ3Z8Gi+M62zRT/ycz4Xq4iCOdpcxwg7ngEYD4KA0eWZC7U17qh/Smq8bYbACJ0ipBA==}
baseline-browser-mapping@2.8.18:
resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==}
hasBin: true
basic-ftp@5.0.5:
@@ -3757,8 +3757,8 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
jsdom@27.0.0:
resolution: {integrity: sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==}
jsdom@27.0.1:
resolution: {integrity: sha512-SNSQteBL1IlV2zqhwwolaG9CwhIhTvVHWg3kTss/cLE7H/X4644mtPQqYvCfsSrGQWt9hSZcgOXX8bOZaMN+kA==}
engines: {node: '>=20'}
peerDependencies:
canvas: ^3.0.0
@@ -4079,6 +4079,9 @@ packages:
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
parse5@8.0.0:
resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==}
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -4362,8 +4365,8 @@ packages:
robust-predicates@2.0.4:
resolution: {integrity: sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==}
rollup@4.52.4:
resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==}
rollup@4.52.5:
resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -7122,70 +7125,70 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.38': {}
'@rollup/rollup-android-arm-eabi@4.52.4':
'@rollup/rollup-android-arm-eabi@4.52.5':
optional: true
'@rollup/rollup-android-arm64@4.52.4':
'@rollup/rollup-android-arm64@4.52.5':
optional: true
'@rollup/rollup-darwin-arm64@4.52.4':
'@rollup/rollup-darwin-arm64@4.52.5':
optional: true
'@rollup/rollup-darwin-x64@4.52.4':
'@rollup/rollup-darwin-x64@4.52.5':
optional: true
'@rollup/rollup-freebsd-arm64@4.52.4':
'@rollup/rollup-freebsd-arm64@4.52.5':
optional: true
'@rollup/rollup-freebsd-x64@4.52.4':
'@rollup/rollup-freebsd-x64@4.52.5':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.52.4':
'@rollup/rollup-linux-arm-gnueabihf@4.52.5':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.52.4':
'@rollup/rollup-linux-arm-musleabihf@4.52.5':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.52.4':
'@rollup/rollup-linux-arm64-gnu@4.52.5':
optional: true
'@rollup/rollup-linux-arm64-musl@4.52.4':
'@rollup/rollup-linux-arm64-musl@4.52.5':
optional: true
'@rollup/rollup-linux-loong64-gnu@4.52.4':
'@rollup/rollup-linux-loong64-gnu@4.52.5':
optional: true
'@rollup/rollup-linux-ppc64-gnu@4.52.4':
'@rollup/rollup-linux-ppc64-gnu@4.52.5':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.52.4':
'@rollup/rollup-linux-riscv64-gnu@4.52.5':
optional: true
'@rollup/rollup-linux-riscv64-musl@4.52.4':
'@rollup/rollup-linux-riscv64-musl@4.52.5':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.52.4':
'@rollup/rollup-linux-s390x-gnu@4.52.5':
optional: true
'@rollup/rollup-linux-x64-gnu@4.52.4':
'@rollup/rollup-linux-x64-gnu@4.52.5':
optional: true
'@rollup/rollup-linux-x64-musl@4.52.4':
'@rollup/rollup-linux-x64-musl@4.52.5':
optional: true
'@rollup/rollup-openharmony-arm64@4.52.4':
'@rollup/rollup-openharmony-arm64@4.52.5':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.52.4':
'@rollup/rollup-win32-arm64-msvc@4.52.5':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.52.4':
'@rollup/rollup-win32-ia32-msvc@4.52.5':
optional: true
'@rollup/rollup-win32-x64-gnu@4.52.4':
'@rollup/rollup-win32-x64-gnu@4.52.5':
optional: true
'@rollup/rollup-win32-x64-msvc@4.52.4':
'@rollup/rollup-win32-x64-msvc@4.52.5':
optional: true
'@sparticuz/chromium@140.0.0':
@@ -7532,7 +7535,7 @@ snapshots:
std-env: 3.10.0
test-exclude: 7.0.1
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.8.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)(tsx@4.20.6)
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.8.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.1)(tsx@4.20.6)
transitivePeerDependencies:
- supports-color
@@ -7581,7 +7584,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.8.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)(tsx@4.20.6)
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.8.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.1)(tsx@4.20.6)
'@vitest/utils@3.2.4':
dependencies:
@@ -7706,7 +7709,7 @@ snapshots:
base64-js@1.5.1: {}
baseline-browser-mapping@2.8.17: {}
baseline-browser-mapping@2.8.18: {}
basic-ftp@5.0.5: {}
@@ -7726,7 +7729,7 @@ snapshots:
browserslist@4.26.3:
dependencies:
baseline-browser-mapping: 2.8.17
baseline-browser-mapping: 2.8.18
caniuse-lite: 1.0.30001751
electron-to-chromium: 1.5.237
node-releases: 2.0.25
@@ -8549,7 +8552,7 @@ snapshots:
dependencies:
argparse: 2.0.1
jsdom@27.0.0(postcss@8.5.6):
jsdom@27.0.1(postcss@8.5.6):
dependencies:
'@asamuzakjp/dom-selector': 6.7.2
cssstyle: 5.3.1(postcss@8.5.6)
@@ -8559,7 +8562,7 @@ snapshots:
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.6
is-potential-custom-element-name: 1.0.1
parse5: 7.3.0
parse5: 8.0.0
rrweb-cssom: 0.8.0
saxes: 6.0.0
symbol-tree: 3.2.4
@@ -8881,6 +8884,10 @@ snapshots:
dependencies:
entities: 6.0.1
parse5@8.0.0:
dependencies:
entities: 6.0.1
path-key@3.1.1: {}
path-parse@1.0.7: {}
@@ -9222,32 +9229,32 @@ snapshots:
robust-predicates@2.0.4: {}
rollup@4.52.4:
rollup@4.52.5:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.52.4
'@rollup/rollup-android-arm64': 4.52.4
'@rollup/rollup-darwin-arm64': 4.52.4
'@rollup/rollup-darwin-x64': 4.52.4
'@rollup/rollup-freebsd-arm64': 4.52.4
'@rollup/rollup-freebsd-x64': 4.52.4
'@rollup/rollup-linux-arm-gnueabihf': 4.52.4
'@rollup/rollup-linux-arm-musleabihf': 4.52.4
'@rollup/rollup-linux-arm64-gnu': 4.52.4
'@rollup/rollup-linux-arm64-musl': 4.52.4
'@rollup/rollup-linux-loong64-gnu': 4.52.4
'@rollup/rollup-linux-ppc64-gnu': 4.52.4
'@rollup/rollup-linux-riscv64-gnu': 4.52.4
'@rollup/rollup-linux-riscv64-musl': 4.52.4
'@rollup/rollup-linux-s390x-gnu': 4.52.4
'@rollup/rollup-linux-x64-gnu': 4.52.4
'@rollup/rollup-linux-x64-musl': 4.52.4
'@rollup/rollup-openharmony-arm64': 4.52.4
'@rollup/rollup-win32-arm64-msvc': 4.52.4
'@rollup/rollup-win32-ia32-msvc': 4.52.4
'@rollup/rollup-win32-x64-gnu': 4.52.4
'@rollup/rollup-win32-x64-msvc': 4.52.4
'@rollup/rollup-android-arm-eabi': 4.52.5
'@rollup/rollup-android-arm64': 4.52.5
'@rollup/rollup-darwin-arm64': 4.52.5
'@rollup/rollup-darwin-x64': 4.52.5
'@rollup/rollup-freebsd-arm64': 4.52.5
'@rollup/rollup-freebsd-x64': 4.52.5
'@rollup/rollup-linux-arm-gnueabihf': 4.52.5
'@rollup/rollup-linux-arm-musleabihf': 4.52.5
'@rollup/rollup-linux-arm64-gnu': 4.52.5
'@rollup/rollup-linux-arm64-musl': 4.52.5
'@rollup/rollup-linux-loong64-gnu': 4.52.5
'@rollup/rollup-linux-ppc64-gnu': 4.52.5
'@rollup/rollup-linux-riscv64-gnu': 4.52.5
'@rollup/rollup-linux-riscv64-musl': 4.52.5
'@rollup/rollup-linux-s390x-gnu': 4.52.5
'@rollup/rollup-linux-x64-gnu': 4.52.5
'@rollup/rollup-linux-x64-musl': 4.52.5
'@rollup/rollup-openharmony-arm64': 4.52.5
'@rollup/rollup-win32-arm64-msvc': 4.52.5
'@rollup/rollup-win32-ia32-msvc': 4.52.5
'@rollup/rollup-win32-x64-gnu': 4.52.5
'@rollup/rollup-win32-x64-msvc': 4.52.5
fsevents: 2.3.3
rrweb-cssom@0.8.0: {}
@@ -9697,7 +9704,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
rollup: 4.52.4
rollup: 4.52.5
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 24.8.1
@@ -9706,7 +9713,7 @@ snapshots:
lightningcss: 1.30.1
tsx: 4.20.6
vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.8.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)(tsx@4.20.6):
vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.8.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.1)(tsx@4.20.6):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.4
@@ -9735,7 +9742,7 @@ snapshots:
'@types/debug': 4.1.12
'@types/node': 24.8.1
'@vitest/ui': 3.2.4(vitest@3.2.4)
jsdom: 27.0.0(postcss@8.5.6)
jsdom: 27.0.1(postcss@8.5.6)
transitivePeerDependencies:
- jiti
- less

View File

@@ -5,6 +5,5 @@
"ENABLE_EXPERIMENTAL_COREPACK": "1",
"PUPPETEER_SKIP_DOWNLOAD": "1"
}
},
"crons": []
}
}