1
mirror of https://github.com/jakejarvis/hoot.git synced 2025-10-18 20:14:25 -04:00

Update dependencies and refactor Puppeteer integration for improved local development support

This commit is contained in:
2025-10-10 10:11:40 -04:00
parent 91f6d5a175
commit 40f9b666ba
5 changed files with 308 additions and 122 deletions

View File

@@ -51,25 +51,27 @@ export function Screenshot({
return (
<div className={className}>
{url && failedUrl !== url ? (
<Image
key={url}
src={url}
alt={`Homepage preview of ${domain}`}
width={width}
height={height}
className={cn(
"h-auto w-full object-cover",
aspectClassName,
imageClassName,
"transition-opacity duration-200",
isLoaded ? "opacity-100" : "opacity-0",
)}
unoptimized
priority={false}
draggable={false}
onError={() => setFailedUrl(url)}
onLoad={() => setIsLoaded(true)}
/>
<a href={`https://${domain}`} target="_blank" rel="noopener noreferrer">
<Image
key={url}
src={url}
alt={`Homepage preview of ${domain}`}
width={width}
height={height}
className={cn(
"h-auto w-full object-cover",
aspectClassName,
imageClassName,
"transition-opacity duration-200",
isLoaded ? "opacity-100" : "opacity-0",
)}
unoptimized
priority={false}
draggable={false}
onError={() => setFailedUrl(url)}
onLoad={() => setIsLoaded(true)}
/>
</a>
) : (
<div
className={`h-auto w-full ${aspectClassName} flex items-center justify-center bg-muted/50`}

View File

@@ -3,17 +3,9 @@ import "server-only";
export async function launchChromium(
overrides: Record<string, unknown> = {},
): Promise<import("puppeteer-core").Browser> {
const chromium = (await import("@sparticuz/chromium")).default;
const { launch } = await import("puppeteer-core");
const isVercel = Boolean(process.env.VERCEL);
const executablePath = await chromium.executablePath();
// Merge Chromium default args with a minimal set of stability flags and any caller overrides.
const baseArgs = Array.isArray(
(chromium as unknown as { args?: unknown }).args,
)
? (chromium.args as string[])
: [];
// Always include a minimal set of stability flags; merge with env-specific args
const stabilityArgs = [
"--disable-dev-shm-usage", // avoid tiny /dev/shm; use /tmp instead
"--no-first-run",
@@ -24,27 +16,93 @@ export async function launchChromium(
? (overrideArgs as string[])
: [];
// Dedupe while preserving order: base -> stability -> overrides
const seen = new Set<string>();
const mergedArgs = [...baseArgs, ...stabilityArgs, ...extraArgs].filter(
(arg) => {
if (typeof arg !== "string") return false;
if (seen.has(arg)) return false;
seen.add(arg);
return true;
},
);
const { args: _ignoredArgs, ...restOverrides } = overrides as {
args?: unknown;
[key: string]: unknown;
};
return launch({
headless: true,
args: mergedArgs,
executablePath,
defaultViewport: null,
...restOverrides,
});
if (isVercel) {
// Vercel: use @sparticuz/chromium + puppeteer-core
const chromium = (await import("@sparticuz/chromium")).default;
const { launch } = await import("puppeteer-core");
const executablePath = await chromium.executablePath();
const baseArgs = Array.isArray(
(chromium as unknown as { args?: unknown }).args,
)
? (chromium.args as string[])
: [];
// Dedupe while preserving order: base -> stability -> overrides
const seen = new Set<string>();
const mergedArgs = [...baseArgs, ...stabilityArgs, ...extraArgs].filter(
(arg) => {
if (typeof arg !== "string") return false;
if (seen.has(arg)) return false;
seen.add(arg);
return true;
},
);
return launch({
headless: true,
args: mergedArgs,
executablePath,
defaultViewport: null,
...restOverrides,
});
}
// Local development: prefer full puppeteer (bundled Chromium) if available,
// otherwise fall back to puppeteer-core with a provided executable path.
try {
// Attempt to use full puppeteer locally for convenience
const puppeteer = await import("puppeteer");
const seen = new Set<string>();
const mergedArgs = [...stabilityArgs, ...extraArgs].filter((arg) => {
if (typeof arg !== "string") return false;
if (seen.has(arg)) return false;
seen.add(arg);
return true;
});
const browser = await puppeteer.launch({
headless: true,
args: mergedArgs,
defaultViewport: null,
...restOverrides,
} as never);
return browser as unknown as import("puppeteer-core").Browser;
} catch {
// Fallback: require an explicit executable path for a locally installed Chrome/Chromium
const { launch } = await import("puppeteer-core");
const executablePath =
(process.env.PUPPETEER_EXECUTABLE_PATH &&
String(process.env.PUPPETEER_EXECUTABLE_PATH)) ||
(process.env.CHROME_EXECUTABLE_PATH &&
String(process.env.CHROME_EXECUTABLE_PATH)) ||
undefined;
if (!executablePath) {
throw new Error(
"Missing PUPPETEER_EXECUTABLE_PATH for local Chrome/Chromium. Install 'puppeteer' or set the env var.",
);
}
const seen = new Set<string>();
const mergedArgs = [...stabilityArgs, ...extraArgs].filter((arg) => {
if (typeof arg !== "string") return false;
if (seen.has(arg)) return false;
seen.add(arg);
return true;
});
return launch({
headless: true,
args: mergedArgs,
executablePath,
defaultViewport: null,
...restOverrides,
});
}
}

View File

@@ -25,7 +25,7 @@
},
"dependencies": {
"@date-fns/utc": "^2.1.1",
"@posthog/nextjs-config": "^1.3.1",
"@posthog/nextjs-config": "^1.3.2",
"@sparticuz/chromium": "140.0.0",
"@tanstack/react-query": "^5.90.2",
"@tanstack/react-query-devtools": "^5.90.2",
@@ -45,11 +45,11 @@
"ipaddr.js": "^2.2.0",
"lucide-react": "^0.545.0",
"mapbox-gl": "^3.15.0",
"motion": "^12.23.22",
"motion": "^12.23.24",
"next": "15.6.0-canary.39",
"next-themes": "^0.4.6",
"posthog-js": "^1.273.1",
"posthog-node": "^5.9.3",
"posthog-js": "^1.275.0",
"posthog-node": "^5.9.5",
"puppeteer-core": "24.22.3",
"radix-ui": "^1.4.3",
"rdapper": "^0.4.1",
@@ -61,7 +61,7 @@
"sonner": "^2.0.7",
"superjson": "^2.2.2",
"tailwind-merge": "^3.3.1",
"tldts": "^7.0.16",
"tldts": "^7.0.17",
"uploadthing": "^7.7.4",
"uuid": "^13.0.0",
"vaul": "^1.1.2",
@@ -74,7 +74,7 @@
"@testing-library/jest-dom": "6.9.1",
"@testing-library/react": "16.3.0",
"@testing-library/user-event": "14.6.1",
"@types/node": "24.7.0",
"@types/node": "24.7.1",
"@types/react": "19.1.16",
"@types/react-dom": "19.1.9",
"@vitejs/plugin-react": "^5.0.4",
@@ -82,6 +82,7 @@
"@vitest/ui": "^3.2.4",
"babel-plugin-react-compiler": "19.1.0-rc.3",
"jsdom": "^27.0.0",
"puppeteer": "24.22.3",
"tailwindcss": "^4.1.14",
"tw-animate-css": "^1.4.0",
"typescript": "5.9.3",

262
pnpm-lock.yaml generated
View File

@@ -12,8 +12,8 @@ importers:
specifier: ^2.1.1
version: 2.1.1
'@posthog/nextjs-config':
specifier: ^1.3.1
version: 1.3.1(next@15.6.0-canary.39(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))
specifier: ^1.3.2
version: 1.3.2(next@15.6.0-canary.39(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))
'@sparticuz/chromium':
specifier: 140.0.0
version: 140.0.0
@@ -72,8 +72,8 @@ importers:
specifier: ^3.15.0
version: 3.15.0
motion:
specifier: ^12.23.22
version: 12.23.22(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
specifier: ^12.23.24
version: 12.23.24(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
next:
specifier: 15.6.0-canary.39
version: 15.6.0-canary.39(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
@@ -81,11 +81,11 @@ importers:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
posthog-js:
specifier: ^1.273.1
version: 1.273.1
specifier: ^1.275.0
version: 1.275.0
posthog-node:
specifier: ^5.9.3
version: 5.9.3
specifier: ^5.9.5
version: 5.9.5
puppeteer-core:
specifier: 24.22.3
version: 24.22.3
@@ -120,8 +120,8 @@ importers:
specifier: ^3.3.1
version: 3.3.1
tldts:
specifier: ^7.0.16
version: 7.0.16
specifier: ^7.0.17
version: 7.0.17
uploadthing:
specifier: ^7.7.4
version: 7.7.4(next@15.6.0-canary.39(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tailwindcss@4.1.14)
@@ -154,8 +154,8 @@ importers:
specifier: 14.6.1
version: 14.6.1(@testing-library/dom@10.4.1)
'@types/node':
specifier: 24.7.0
version: 24.7.0
specifier: 24.7.1
version: 24.7.1
'@types/react':
specifier: 19.1.16
version: 19.1.16
@@ -164,7 +164,7 @@ importers:
version: 19.1.9(@types/react@19.1.16)
'@vitejs/plugin-react':
specifier: ^5.0.4
version: 5.0.4(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1))
version: 5.0.4(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1))
'@vitest/coverage-v8':
specifier: ^3.2.4
version: 3.2.4(vitest@3.2.4)
@@ -177,6 +177,9 @@ importers:
jsdom:
specifier: ^27.0.0
version: 27.0.0(postcss@8.5.6)
puppeteer:
specifier: 24.22.3
version: 24.22.3(typescript@5.9.3)
tailwindcss:
specifier: ^4.1.14
version: 4.1.14
@@ -188,10 +191,10 @@ importers:
version: 5.9.3
vite-tsconfig-paths:
specifier: ^5.1.4
version: 5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1))
version: 5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1))
vitest:
specifier: ^3.2.4
version: 3.2.4(@types/node@24.7.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)
version: 3.2.4(@types/node@24.7.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)
packages:
@@ -881,11 +884,11 @@ packages:
engines: {node: '>=14', npm: '>=6'}
hasBin: true
'@posthog/core@1.2.2':
resolution: {integrity: sha512-f16Ozx6LIigRG+HsJdt+7kgSxZTHeX5f1JlCGKI1lXcvlZgfsCR338FuMI2QRYXGl+jg/vYFzGOTQBxl90lnBg==}
'@posthog/core@1.2.4':
resolution: {integrity: sha512-o2TkycuV98PtAkcqE8B1DJv5LBvHEDTWirK5TlkQMeF2MJg0BYliY95CeRZFILNgZJCbI3k/fhahSMRQlpXOMg==}
'@posthog/nextjs-config@1.3.1':
resolution: {integrity: sha512-0CKzXX7Oh9tgFdqTQMq9FUMDIBhu0td9NYsyU20y+pu4meh9xSCcJI7GIcwxRTBoDIJvR//YU98niMlnu+uObQ==}
'@posthog/nextjs-config@1.3.2':
resolution: {integrity: sha512-choIfJv6aNOTJLC+4a1XLTblVfhxtoNXCTV3izvz9lkdqHWoXJtdX+wGtbW4qvOb383rh5Pw06ZzmZ64KgyO8Q==}
engines: {node: '>=20'}
peerDependencies:
next: '>12.1.0'
@@ -1908,8 +1911,8 @@ packages:
'@types/mapbox__point-geometry@0.1.4':
resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==}
'@types/node@24.7.0':
resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==}
'@types/node@24.7.1':
resolution: {integrity: sha512-CmyhGZanP88uuC5GpWU9q+fI61j2SkhO3UGMUdfYRE6Bcy0ccyzn1Rqj9YAB/ZY4kOXmNf0ocah5GtphmLMP6Q==}
'@types/pbf@3.0.5':
resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==}
@@ -2076,6 +2079,9 @@ packages:
any-base@1.1.0:
resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
aria-hidden@1.2.6:
resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
engines: {node: '>=10'}
@@ -2213,6 +2219,10 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
caniuse-lite@1.0.30001748:
resolution: {integrity: sha512-5P5UgAr0+aBmNiplks08JLw+AW/XG/SurlgZLgB1dDLfAw7EfRGxIwzPHxdSCGY/BTKDqIVyJL87cCN6s0ZR0w==}
@@ -2292,6 +2302,15 @@ packages:
core-js@3.45.1:
resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==}
cosmiconfig@9.0.0:
resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
engines: {node: '>=14'}
peerDependencies:
typescript: '>=4.9.5'
peerDependenciesMeta:
typescript:
optional: true
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -2442,6 +2461,13 @@ packages:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -2578,8 +2604,8 @@ packages:
resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
engines: {node: '>= 6'}
framer-motion@12.23.22:
resolution: {integrity: sha512-ZgGvdxXCw55ZYvhoZChTlG6pUuehecgvEAJz0BHoC5pQKW1EC5xf1Mul1ej5+ai+pVY0pylyFfdl45qnM1/GsA==}
framer-motion@12.23.24:
resolution: {integrity: sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -2714,6 +2740,10 @@ packages:
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
indent-string@4.0.0:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
@@ -2726,6 +2756,9 @@ packages:
resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
engines: {node: '>= 10'}
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-extendable@0.1.1:
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
engines: {node: '>=0.10.0'}
@@ -2799,6 +2832,10 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
jsdom@27.0.0:
resolution: {integrity: sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==}
engines: {node: '>=20'}
@@ -2813,6 +2850,9 @@ packages:
engines: {node: '>=6'}
hasBin: true
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
json-stringify-pretty-compact@3.0.0:
resolution: {integrity: sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==}
@@ -2888,6 +2928,9 @@ packages:
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
engines: {node: '>= 12.0.0'}
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
loupe@3.2.1:
resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
@@ -2971,14 +3014,14 @@ packages:
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
motion-dom@12.23.21:
resolution: {integrity: sha512-5xDXx/AbhrfgsQmSE7YESMn4Dpo6x5/DTZ4Iyy4xqDvVHWvFVoV+V2Ri2S/ksx+D40wrZ7gPYiMWshkdoqNgNQ==}
motion-dom@12.23.23:
resolution: {integrity: sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==}
motion-utils@12.23.6:
resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==}
motion@12.23.22:
resolution: {integrity: sha512-iSq6X9vLHbeYwmHvhK//+U74ROaPnZmBuy60XZzqNl0QtZkWfoZyMDHYnpKuWFv0sNMqHgED8aCXk94LCoQPGg==}
motion@12.23.24:
resolution: {integrity: sha512-Rc5E7oe2YZ72N//S3QXGzbnXgqNrTESv8KKxABR20q2FLch9gHLo0JLyYo2hZ238bZ9Gx6cWhj9VO0IgwbMjCw==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -3080,6 +3123,14 @@ packages:
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
parse5-htmlparser2-tree-adapter@7.1.0:
resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
@@ -3150,8 +3201,8 @@ packages:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
posthog-js@1.273.1:
resolution: {integrity: sha512-6w3j6nAWJj7W7/iksWLXRpdLrLZrQA8jTsEQ71bvmyw4bwCqhgPfxutrmeoAUNaxot2FB1JHc9Lagslg35h61g==}
posthog-js@1.275.0:
resolution: {integrity: sha512-pobnKPqsJoCpv9FnjJZ54QwRBMWqrp5BjXF5TXsh2H81RaRh9Fkaj43BkUIbYzFsVahb8ZHPYv/AywlnJlzR2A==}
peerDependencies:
'@rrweb/types': 2.0.0-alpha.17
rrweb-snapshot: 2.0.0-alpha.17
@@ -3161,8 +3212,8 @@ packages:
rrweb-snapshot:
optional: true
posthog-node@5.9.3:
resolution: {integrity: sha512-YA32jx4MfL5uLiVU4ynNoSzRqAigG11pkbwEI3UlqyWJpWnp8Nvpzh59b8lpmm2+5Y+kJ99sKyWLGnNZ7K1ryA==}
posthog-node@5.9.5:
resolution: {integrity: sha512-Rv82jMVhnxlBNf8wDbP+iAJdZrhU0aHul0LaFrQ/JGxxDiK3EkclIqr+QUwA9CulleTtXf6AIFz22tLvbVs/HA==}
engines: {node: '>=20'}
potpack@2.1.0:
@@ -3207,6 +3258,11 @@ packages:
resolution: {integrity: sha512-M/Jhg4PWRANSbL/C9im//Yb55wsWBS5wdp+h59iwM+EPicVQQCNs56iC5aEAO7avfDPRfxs4MM16wHjOYHNJEw==}
engines: {node: '>=18'}
puppeteer@24.22.3:
resolution: {integrity: sha512-mnhXzIqSYSJ1SMv1RYH07YMzWP81xCmmQj91Q8iQMZqnf97eVzeHgsGL6kpywiGCi+nQafta/+NkwM4URMy/XQ==}
engines: {node: '>=18'}
hasBin: true
pure-rand@6.1.0:
resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
@@ -3312,6 +3368,10 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
resolve-protobuf-schema@2.1.0:
resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==}
@@ -3566,11 +3626,11 @@ packages:
resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
engines: {node: '>=14.0.0'}
tldts-core@7.0.16:
resolution: {integrity: sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA==}
tldts-core@7.0.17:
resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==}
tldts@7.0.16:
resolution: {integrity: sha512-5bdPHSwbKTeHmXrgecID4Ljff8rQjv7g8zKQPkCozRo2HWWni+p310FSn5ImI+9kWw9kK4lzOB5q/a6iv0IJsw==}
tldts@7.0.17:
resolution: {integrity: sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==}
hasBin: true
to-data-view@1.1.0:
@@ -4467,11 +4527,12 @@ snapshots:
transitivePeerDependencies:
- debug
'@posthog/core@1.2.2': {}
'@posthog/core@1.2.4': {}
'@posthog/nextjs-config@1.3.1(next@15.6.0-canary.39(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))':
'@posthog/nextjs-config@1.3.2(next@15.6.0-canary.39(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))':
dependencies:
'@posthog/cli': 0.4.8
'@posthog/core': 1.2.4
next: 15.6.0-canary.39(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
semver: 7.7.3
transitivePeerDependencies:
@@ -5507,7 +5568,7 @@ snapshots:
'@types/mapbox__point-geometry@0.1.4': {}
'@types/node@24.7.0':
'@types/node@24.7.1':
dependencies:
undici-types: 7.14.0
@@ -5527,7 +5588,7 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
'@types/node': 24.7.0
'@types/node': 24.7.1
optional: true
'@uploadthing/mime-types@0.3.6': {}
@@ -5566,7 +5627,7 @@ snapshots:
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
'@vitejs/plugin-react@5.0.4(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1))':
'@vitejs/plugin-react@5.0.4(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1))':
dependencies:
'@babel/core': 7.28.4
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4)
@@ -5574,7 +5635,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.38
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)
vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)
transitivePeerDependencies:
- supports-color
@@ -5593,7 +5654,7 @@ snapshots:
std-env: 3.9.0
test-exclude: 7.0.1
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/node@24.7.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)
vitest: 3.2.4(@types/node@24.7.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)
transitivePeerDependencies:
- supports-color
@@ -5605,13 +5666,13 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
'@vitest/mocker@3.2.4(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1))':
'@vitest/mocker@3.2.4(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.19
optionalDependencies:
vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)
vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -5642,7 +5703,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/node@24.7.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)
vitest: 3.2.4(@types/node@24.7.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1)
'@vitest/utils@3.2.4':
dependencies:
@@ -5670,6 +5731,8 @@ snapshots:
any-base@1.1.0: {}
argparse@2.0.1: {}
aria-hidden@1.2.6:
dependencies:
tslib: 2.8.1
@@ -5807,6 +5870,8 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
callsites@3.1.0: {}
caniuse-lite@1.0.30001748: {}
chai@5.3.3:
@@ -5903,6 +5968,15 @@ snapshots:
core-js@3.45.1: {}
cosmiconfig@9.0.0(typescript@5.9.3):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
typescript: 5.9.3
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -6052,6 +6126,12 @@ snapshots:
entities@6.0.1: {}
env-paths@2.2.1: {}
error-ex@1.3.4:
dependencies:
is-arrayish: 0.2.1
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
@@ -6199,9 +6279,9 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
framer-motion@12.23.22(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
framer-motion@12.23.24(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
motion-dom: 12.23.21
motion-dom: 12.23.23
motion-utils: 12.23.6
tslib: 2.8.1
optionalDependencies:
@@ -6346,12 +6426,19 @@ snapshots:
ieee754@1.2.1: {}
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
indent-string@4.0.0: {}
ip-address@10.0.1: {}
ipaddr.js@2.2.0: {}
is-arrayish@0.2.1: {}
is-extendable@0.1.1: {}
is-extendable@1.0.1:
@@ -6420,6 +6507,10 @@ snapshots:
js-tokens@9.0.1: {}
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
jsdom@27.0.0(postcss@8.5.6):
dependencies:
'@asamuzakjp/dom-selector': 6.6.1
@@ -6450,6 +6541,8 @@ snapshots:
jsesc@3.1.0: {}
json-parse-even-better-errors@2.3.1: {}
json-stringify-pretty-compact@3.0.0: {}
json5@2.2.3: {}
@@ -6501,6 +6594,8 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.30.1
lightningcss-win32-x64-msvc: 1.30.1
lines-and-columns@1.2.4: {}
loupe@3.2.1: {}
lru-cache@10.4.3: {}
@@ -6599,15 +6694,15 @@ snapshots:
mitt@3.0.1: {}
motion-dom@12.23.21:
motion-dom@12.23.23:
dependencies:
motion-utils: 12.23.6
motion-utils@12.23.6: {}
motion@12.23.22(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
motion@12.23.24(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
framer-motion: 12.23.22(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
framer-motion: 12.23.24(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
tslib: 2.8.1
optionalDependencies:
react: 19.1.1
@@ -6709,6 +6804,17 @@ snapshots:
package-json-from-dist@1.0.1: {}
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.27.1
error-ex: 1.3.4
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
parse5-htmlparser2-tree-adapter@7.1.0:
dependencies:
domhandler: 5.0.3
@@ -6772,17 +6878,17 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
posthog-js@1.273.1:
posthog-js@1.275.0:
dependencies:
'@posthog/core': 1.2.2
'@posthog/core': 1.2.4
core-js: 3.45.1
fflate: 0.4.8
preact: 10.27.2
web-vitals: 4.2.4
posthog-node@5.9.3:
posthog-node@5.9.5:
dependencies:
'@posthog/core': 1.2.2
'@posthog/core': 1.2.4
potpack@2.1.0: {}
@@ -6842,6 +6948,22 @@ snapshots:
- supports-color
- utf-8-validate
puppeteer@24.22.3(typescript@5.9.3):
dependencies:
'@puppeteer/browsers': 2.10.10
chromium-bidi: 9.1.0(devtools-protocol@0.0.1495869)
cosmiconfig: 9.0.0(typescript@5.9.3)
devtools-protocol: 0.0.1495869
puppeteer-core: 24.22.3
typed-query-selector: 2.12.0
transitivePeerDependencies:
- bare-buffer
- bufferutil
- react-native-b4a
- supports-color
- typescript
- utf-8-validate
pure-rand@6.1.0: {}
quickselect@3.0.0: {}
@@ -6983,6 +7105,8 @@ snapshots:
require-from-string@2.0.2: {}
resolve-from@4.0.0: {}
resolve-protobuf-schema@2.1.0:
dependencies:
protocol-buffers-schema: 3.6.0
@@ -7283,11 +7407,11 @@ snapshots:
tinyspy@4.0.4: {}
tldts-core@7.0.16: {}
tldts-core@7.0.17: {}
tldts@7.0.16:
tldts@7.0.17:
dependencies:
tldts-core: 7.0.16
tldts-core: 7.0.17
to-data-view@1.1.0: {}
@@ -7308,7 +7432,7 @@ snapshots:
tough-cookie@6.0.0:
dependencies:
tldts: 7.0.16
tldts: 7.0.17
tr46@0.0.3: {}
@@ -7398,13 +7522,13 @@ snapshots:
- '@types/react'
- '@types/react-dom'
vite-node@3.2.4(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1):
vite-node@3.2.4(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 2.0.3
vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)
vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -7419,18 +7543,18 @@ snapshots:
- tsx
- yaml
vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)):
vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)):
dependencies:
debug: 4.4.3
globrex: 0.1.2
tsconfck: 3.1.6(typescript@5.9.3)
optionalDependencies:
vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)
vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)
transitivePeerDependencies:
- supports-color
- typescript
vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1):
vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1):
dependencies:
esbuild: 0.25.10
fdir: 6.5.0(picomatch@4.0.3)
@@ -7439,16 +7563,16 @@ snapshots:
rollup: 4.52.4
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 24.7.0
'@types/node': 24.7.1
fsevents: 2.3.3
jiti: 2.6.1
lightningcss: 1.30.1
vitest@3.2.4(@types/node@24.7.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1):
vitest@3.2.4(@types/node@24.7.1)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.1):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.4
'@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1))
'@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -7466,11 +7590,11 @@ snapshots:
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)
vite-node: 3.2.4(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)
vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)
vite-node: 3.2.4(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 24.7.0
'@types/node': 24.7.1
'@vitest/ui': 3.2.4(vitest@3.2.4)
jsdom: 27.0.0(postcss@8.5.6)
transitivePeerDependencies:

View File

@@ -50,6 +50,7 @@
"ignoreDeps": [
"@types/node",
"@sparticuz/chromium",
"puppeteer",
"puppeteer-core",
"lucide-react"
]