From c70d64d4cde2bf2acc5c4164eef79c40fd58aa42 Mon Sep 17 00:00:00 2001 From: Mael Date: Sun, 22 Jun 2025 19:08:21 +0200 Subject: feat(workers): migrate from puppeteer to playwright (#1296) * feat: convert to playwright Convert crawling to use Playwright instead of Chrome. - Update Dockerfile to include Playwright - Update crawler worker to use Playwright API - Update dependencies * feat: convert from Puppeteer to Playwright for crawling * feat: update docker-compose * use separate browser context for better isolation * skip chrome download in linux script * readd the stealth plugin --------- Co-authored-by: Mohamed Bassem --- apps/workers/package.json | 6 +- apps/workers/workers/crawlerWorker.ts | 67 ++-- docker/Dockerfile | 2 +- docker/Dockerfile.dev | 2 +- docker/docker-compose.dev.yml | 2 + karakeep-linux.sh | 4 +- pnpm-lock.yaml | 602 ++++++---------------------------- tooling/oxlint/package.json | 5 + 8 files changed, 151 insertions(+), 539 deletions(-) create mode 100644 tooling/oxlint/package.json diff --git a/apps/workers/package.json b/apps/workers/package.json index c888350e..2ed6f9df 100644 --- a/apps/workers/package.json +++ b/apps/workers/package.json @@ -4,7 +4,7 @@ "version": "0.1.0", "private": true, "dependencies": { - "@ghostery/adblocker-puppeteer": "^2.5.1", + "@ghostery/adblocker-playwright": "^2.5.1", "@karakeep/db": "workspace:^0.1.0", "@karakeep/shared": "workspace:^0.1.0", "@karakeep/trpc": "workspace:^0.1.0", @@ -36,8 +36,8 @@ "pdf2json": "^3.1.5", "pdf2pic": "^3.1.3", "pdfjs-dist": "^4.2.67", - "puppeteer": "^22.0.0", - "puppeteer-extra": "^3.3.6", + "playwright": "^1.42.1", + "playwright-extra": "^4.3.6", "puppeteer-extra-plugin-stealth": "^2.11.2", "rss-parser": "^3.13.0", "tesseract.js": "^5.1.1", diff --git a/apps/workers/workers/crawlerWorker.ts b/apps/workers/workers/crawlerWorker.ts index f0e831c2..d884d149 100644 --- a/apps/workers/workers/crawlerWorker.ts +++ b/apps/workers/workers/crawlerWorker.ts @@ -2,8 +2,7 @@ import * as dns from "dns"; import { promises as fs } from "fs"; import * as path from "node:path"; import * as os from "os"; -import type { Browser } from "puppeteer"; -import { PuppeteerBlocker } from "@ghostery/adblocker-puppeteer"; +import { PlaywrightBlocker } from "@ghostery/adblocker-playwright"; import { Readability } from "@mozilla/readability"; import { Mutex } from "async-mutex"; import DOMPurify from "dompurify"; @@ -25,7 +24,8 @@ import metascraperTitle from "metascraper-title"; import metascraperTwitter from "metascraper-twitter"; import metascraperUrl from "metascraper-url"; import fetch from "node-fetch"; -import puppeteer from "puppeteer-extra"; +import { Browser } from "playwright"; +import { chromium } from "playwright-extra"; import StealthPlugin from "puppeteer-extra-plugin-stealth"; import { withTimeout } from "utils"; import { getBookmarkDetails, updateAsset } from "workerUtils"; @@ -81,38 +81,37 @@ const metascraperParser = metascraper([ ]); let globalBrowser: Browser | undefined; -let globalBlocker: PuppeteerBlocker | undefined; +let globalBlocker: PlaywrightBlocker | undefined; // Guards the interactions with the browser instance. // This is needed given that most of the browser APIs are async. const browserMutex = new Mutex(); async function startBrowserInstance() { - const defaultViewport = { - width: 1440, - height: 900, - }; if (serverConfig.crawler.browserWebSocketUrl) { logger.info( `[Crawler] Connecting to existing browser websocket address: ${serverConfig.crawler.browserWebSocketUrl}`, ); - return puppeteer.connect({ - browserWSEndpoint: serverConfig.crawler.browserWebSocketUrl, - defaultViewport, + return await chromium.connect(serverConfig.crawler.browserWebSocketUrl, { + // Important: using slowMo to ensure stability with remote browser + slowMo: 100, + timeout: 5000, }); } else if (serverConfig.crawler.browserWebUrl) { logger.info( `[Crawler] Connecting to existing browser instance: ${serverConfig.crawler.browserWebUrl}`, ); + const webUrl = new URL(serverConfig.crawler.browserWebUrl); - // We need to resolve the ip address as a workaround for https://github.com/puppeteer/puppeteer/issues/2242 const { address } = await dns.promises.lookup(webUrl.hostname); webUrl.hostname = address; logger.info( `[Crawler] Successfully resolved IP address, new address: ${webUrl.toString()}`, ); - return puppeteer.connect({ - browserURL: webUrl.toString(), - defaultViewport, + + return await chromium.connectOverCDP(webUrl.toString(), { + // Important: using slowMo to ensure stability with remote browser + slowMo: 100, + timeout: 5000, }); } else { logger.info(`Running in browserless mode`); @@ -141,12 +140,12 @@ async function launchBrowser() { globalBrowser?.on("disconnected", () => { if (isShuttingDown) { logger.info( - "[Crawler] The puppeteer browser got disconnected. But we're shutting down so won't restart it.", + "[Crawler] The Playwright browser got disconnected. But we're shutting down so won't restart it.", ); return; } logger.info( - "[Crawler] The puppeteer browser got disconnected. Will attempt to launch it again.", + "[Crawler] The Playwright browser got disconnected. Will attempt to launch it again.", ); launchBrowser(); }); @@ -155,11 +154,11 @@ async function launchBrowser() { export class CrawlerWorker { static async build() { - puppeteer.use(StealthPlugin()); + chromium.use(StealthPlugin()); if (serverConfig.crawler.enableAdblocker) { try { logger.info("[crawler] Loading adblocker ..."); - globalBlocker = await PuppeteerBlocker.fromPrebuiltFull(fetch, { + globalBlocker = await PlaywrightBlocker.fromPrebuiltFull(fetch, { path: path.join(os.tmpdir(), "karakeep_adblocker.bin"), read: fs.readFile, write: fs.writeFile, @@ -287,39 +286,45 @@ async function crawlPage( if (!browser) { return browserlessCrawlPage(jobId, url, abortSignal); } - const context = await browser.createBrowserContext(); + const context = await browser.newContext({ + viewport: { width: 1440, height: 900 }, + userAgent: + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", + }); try { + // Create a new page in the context const page = await context.newPage(); + + // Apply ad blocking if (globalBlocker) { await globalBlocker.enableBlockingInPage(page); } - await page.setUserAgent( - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", - ); + // Navigate to the target URL + logger.info(`[Crawler][${jobId}] Navigating to "${url}"`); const response = await page.goto(url, { timeout: serverConfig.crawler.navigateTimeoutSec * 1000, + waitUntil: "domcontentloaded", }); + logger.info( `[Crawler][${jobId}] Successfully navigated to "${url}". Waiting for the page to load ...`, ); - // Wait until there's at most two connections for 2 seconds - // Attempt to wait only for 5 seconds + // Wait until network is relatively idle or timeout after 5 seconds await Promise.race([ - page.waitForNetworkIdle({ - idleTime: 1000, // 1 sec - concurrency: 2, - }), - new Promise((f) => setTimeout(f, 5000)), + page.waitForLoadState("networkidle", { timeout: 5000 }).catch(() => ({})), + new Promise((resolve) => setTimeout(resolve, 5000)), ]); logger.info(`[Crawler][${jobId}] Finished waiting for the page to load.`); + // Extract content from the page const htmlContent = await page.content(); logger.info(`[Crawler][${jobId}] Successfully fetched the page content.`); + // Take a screenshot if configured let screenshot: Buffer | undefined = undefined; if (serverConfig.crawler.storeScreenshot) { try { @@ -327,7 +332,6 @@ async function crawlPage( page.screenshot({ // If you change this, you need to change the asset type in the store function. type: "png", - encoding: "binary", fullPage: serverConfig.crawler.fullPageScreenshot, }), new Promise((_, reject) => @@ -358,6 +362,7 @@ async function crawlPage( }; } finally { await context.close(); + // Only close the browser if it was created on demand if (serverConfig.crawler.browserConnectOnDemand) { await browser.close(); } diff --git a/docker/Dockerfile b/docker/Dockerfile index 54e337f5..7a3f4cb2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -13,7 +13,7 @@ RUN apk add --no-cache libc6-compat make g++ py3-pip linux-headers COPY . . ENV NEXT_TELEMETRY_DISABLED 1 -ENV PUPPETEER_SKIP_DOWNLOAD true +ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 RUN pnpm install --frozen-lockfile # Build the db migration script diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 50048a6d..d4051cc5 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -11,4 +11,4 @@ RUN corepack enable COPY . . ENV NEXT_TELEMETRY_DISABLED 1 -ENV PUPPETEER_SKIP_DOWNLOAD true +ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 0384ced5..3eb62030 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -20,6 +20,8 @@ services: chrome: image: gcr.io/zenika-hub/alpine-chrome:123 restart: unless-stopped + ports: + - 9222:9222 command: - --no-sandbox - --disable-gpu diff --git a/karakeep-linux.sh b/karakeep-linux.sh index e07b3bd3..073c3908 100644 --- a/karakeep-linux.sh +++ b/karakeep-linux.sh @@ -223,7 +223,7 @@ install_karakeep() { mv karakeep-"$RELEASE" "$INSTALL_DIR" && cd "$APP_DIR"/web corepack enable export NEXT_TELEMETRY_DISABLED=1 - export PUPPETEER_SKIP_DOWNLOAD="true" + export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true" export CI="true" $shh pnpm i --frozen-lockfile $shh pnpm build @@ -433,7 +433,7 @@ update_karakeep() { fi corepack enable export NEXT_TELEMETRY_DISABLED=1 - export PUPPETEER_SKIP_DOWNLOAD="true" + export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true" export CI="true" cd "$APP_DIR"/web && $shh pnpm i --frozen-lockfile $shh pnpm build diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3253a3bf..20c65a62 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -750,9 +750,9 @@ importers: apps/workers: dependencies: - '@ghostery/adblocker-puppeteer': + '@ghostery/adblocker-playwright': specifier: ^2.5.1 - version: 2.5.1(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2)) + version: 2.7.0(playwright@1.53.1) '@karakeep/db': specifier: workspace:^0.1.0 version: link:../../packages/db @@ -846,15 +846,15 @@ importers: pdfjs-dist: specifier: ^4.2.67 version: 4.10.38 - puppeteer: - specifier: ^22.0.0 - version: 22.3.0(encoding@0.1.13)(typescript@5.8.2) - puppeteer-extra: - specifier: ^3.3.6 - version: 3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2)) + playwright: + specifier: ^1.42.1 + version: 1.53.1 + playwright-extra: + specifier: ^4.3.6 + version: 4.3.6(playwright-core@1.53.1)(playwright@1.53.1) puppeteer-extra-plugin-stealth: specifier: ^2.11.2 - version: 2.11.2(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))) + version: 2.11.2(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)) rss-parser: specifier: ^3.13.0 version: 3.13.0 @@ -1214,8 +1214,12 @@ importers: specifier: ^1.6.1 version: 1.6.1(@types/node@22.15.30)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.1)(terser@5.41.0) + tooling/eslint: {} + tooling/github: {} + tooling/oxlint: {} + tooling/prettier: dependencies: '@ianvs/prettier-plugin-sort-imports': @@ -3109,19 +3113,22 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@ghostery/adblocker-content@2.6.1': - resolution: {integrity: sha512-R0/X+16r1qsGSbef2UPWC35dq2+iObljLZ04lSYWz5s2fVgSu6g+qlmuPMOdB3mm/YLd+ZyQOQ/8UuSi65afGg==} + '@ghostery/adblocker-content@2.7.0': + resolution: {integrity: sha512-NZN4XyQ2bXBC86qFEevw8GEXoVXuzAvvj9urgHu+Ud/JfAzW5agaLUoXNz5gT/ZU6fVZScwOVvbL48AI66JUUg==} - '@ghostery/adblocker-extended-selectors@2.6.1': - resolution: {integrity: sha512-ZNVmSan8gMaUfC6TWN/m7gErXtCMVTTWJQ7fkpd3na/GCOGMv3NbSV8fed50eK2ck2qGTNqLVPEQp+h/u/pE0w==} + '@ghostery/adblocker-extended-selectors@2.7.0': + resolution: {integrity: sha512-6lmdm3ydxpiIGwwsD8kjcFPY3IPHkveQaunZW6bHaAbN7a1eYhPZZRjNmNjhwHvu+Noa5eb2bJ4x3YnFp2TKpQ==} - '@ghostery/adblocker-puppeteer@2.5.1': - resolution: {integrity: sha512-K9v8LzUkUBmV51vYeBH9EcmIBABpq4fd6Yi+iEZYQdqzDTYsr4z/yKbuD3wN5s2QVZycLoeWBeaUwVZlAgnlrQ==} + '@ghostery/adblocker-playwright@2.7.0': + resolution: {integrity: sha512-kS4Jug8PgYB8Ejfm9H3sWidzdX6g/lu2NsF6GrpOWyyMsoUcnT+03131+gOu19ZYnZ7mJxKWJweGuviADl8fVw==} peerDependencies: - puppeteer: '>5' + playwright: ^1.x - '@ghostery/adblocker@2.6.1': - resolution: {integrity: sha512-D9sLqx+StZ3JASDqKtTWUmVXRacbtZAcMUnooU0TQKcMmIeSF20TbIwde2bc+zoz1q+dV/qtYx2ngWf1Jb9KbA==} + '@ghostery/adblocker@2.7.0': + resolution: {integrity: sha512-OzOKr8PwT6oE5qh5dpF9qJgmNUKlK/781Pm18oEMCho+6CSseCWrTk5+m+2QNGE3Fs+QjQb7DZdMoQisZ6r3uA==} + + '@ghostery/url-parser@1.3.0': + resolution: {integrity: sha512-FEzdSeiva0Mt3bR4xePFzthhjT4IzvA5QTvS1xXkNyLpMGeq40mb3V2fSs0ZItRaP9IybZthDfHUSbQ1HLdx4Q==} '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -3791,11 +3798,6 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@puppeteer/browsers@2.1.0': - resolution: {integrity: sha512-xloWvocjvryHdUjDam/ZuGMh7zn4Sn3ZAaV4Ah2e2EwEt90N3XphZlSsU3n0VDc1F7kggCjMuH0UuxfPQ5mD9w==} - engines: {node: '>=18'} - hasBin: true - '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -4830,9 +4832,6 @@ packages: peerDependencies: react: ^18 || ^19 - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@trpc/client@11.0.0': resolution: {integrity: sha512-U2THlxsdr4ykAX5lpTU8k5WRADPQ+68Ex2gfUht3MlCxGK7njBmNSSzjpQSWNt7tMI/xsYrddFiRlmEPrh+Cbg==} peerDependencies: @@ -5172,9 +5171,6 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@uidotdev/usehooks@2.4.1': resolution: {integrity: sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==} engines: {node: '>=16'} @@ -5535,10 +5531,6 @@ packages: assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} @@ -5596,9 +5588,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - babel-core@7.0.0-bridge.0: resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: @@ -5694,39 +5683,12 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} - - bare-fs@2.3.5: - resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} - - bare-os@2.4.4: - resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} - - bare-path@2.1.3: - resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} - - bare-stream@2.6.5: - resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true - base-64@0.1.0: resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -5820,9 +5782,6 @@ packages: buffer-alloc@1.2.0: resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-fill@1.0.0: resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} @@ -6034,11 +5993,6 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - chromium-bidi@0.5.10: - resolution: {integrity: sha512-4hsPE1VaLLM/sgNK/SlLbI24Ra7ZOuWAjA3rhw1lVCZ8ZiUgccS6cL5L/iqo4hjRcl5vwgYJ8xTtbXdulA9b6Q==} - peerDependencies: - devtools-protocol: '*' - chromium-edge-launcher@0.2.0: resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==} @@ -6367,21 +6321,9 @@ packages: typescript: optional: true - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} - cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} - cross-spawn@6.0.6: resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} engines: {node: '>=4.8'} @@ -6552,10 +6494,6 @@ packages: resolution: {integrity: sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==} engines: {node: '>= 14'} - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - data-uri-utils@1.0.8: resolution: {integrity: sha512-LHm6O/aHmTdSsIKGI6d/BJ8gQyBiai/5g57s1XKDHFecVWbq0HYlEXheohwiLbpsEHjpdHNf+D50Q/onMnNIYQ==} engines: {node: '>= 14'} @@ -6612,15 +6550,6 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -6690,10 +6619,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - del@4.1.1: resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} engines: {node: '>=6'} @@ -6757,9 +6682,6 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - devtools-protocol@0.0.1249869: - resolution: {integrity: sha512-Ctp4hInA0BEavlUoRy9mhGq0i+JSo/AwVyX2EFgZmV1kYB+Zq+EMBAn52QWu6FbRr10hRb6pBl420upbp4++vg==} - didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -7233,11 +7155,6 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -7621,17 +7538,9 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -7677,9 +7586,6 @@ packages: fbjs@3.0.5: resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.4.5: resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} peerDependencies: @@ -7949,6 +7855,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -8026,10 +7937,6 @@ packages: get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} - engines: {node: '>= 14'} - getenv@1.0.0: resolution: {integrity: sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==} engines: {node: '>=6'} @@ -9388,10 +9295,6 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} @@ -10106,9 +10009,6 @@ packages: ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -10168,10 +10068,6 @@ packages: nested-error-stacks@2.0.1: resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - next-auth@4.24.11: resolution: {integrity: sha512-pCFXzIDQX7xmHFs4KVH4luCjaCbuPRtZ9oBUjUhOk84mZ9WVPf94n87TxYI4rSRf9HmfHEF8Yep3JrYDVOo3Cw==} peerDependencies: @@ -10603,14 +10499,6 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -10773,9 +10661,6 @@ packages: resolution: {integrity: sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==} engines: {node: '>=20'} - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -10837,6 +10722,28 @@ packages: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} + playwright-core@1.53.1: + resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==} + engines: {node: '>=18'} + hasBin: true + + playwright-extra@4.3.6: + resolution: {integrity: sha512-q2rVtcE8V8K3vPVF1zny4pvwZveHLH8KBuVU2MoE3Jw4OKVoBWsHI9CH9zPydovHHOCDxjGN2Vg+2m644q3ijA==} + engines: {node: '>=12'} + peerDependencies: + playwright: '*' + playwright-core: '*' + peerDependenciesMeta: + playwright: + optional: true + playwright-core: + optional: true + + playwright@1.53.1: + resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==} + engines: {node: '>=18'} + hasBin: true + plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} @@ -11463,13 +11370,6 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-agent@6.4.0: - resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -11491,10 +11391,6 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} - puppeteer-core@22.3.0: - resolution: {integrity: sha512-Ho5Vdpdro05ZyCx/l5Hkc5vHiibKTaY37fIAD9NF9Gi/vDxkVTeX40U/mFnEmeoxyuYALvWCJfi7JTT82R6Tuw==} - engines: {node: '>=18'} - puppeteer-extra-plugin-stealth@2.11.2: resolution: {integrity: sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==} engines: {node: '>=8'} @@ -11543,27 +11439,6 @@ packages: puppeteer-extra: optional: true - puppeteer-extra@3.3.6: - resolution: {integrity: sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==} - engines: {node: '>=8'} - peerDependencies: - '@types/puppeteer': '*' - puppeteer: '*' - puppeteer-core: '*' - peerDependenciesMeta: - '@types/puppeteer': - optional: true - puppeteer: - optional: true - puppeteer-core: - optional: true - - puppeteer@22.3.0: - resolution: {integrity: sha512-GC+tyjzYKjaNjhlDAuqRgDM+IOsqOG75Da4L28G4eULNLLxKDt+79x2OOSQ47HheJBgGq7ATSExNE6gayxP6cg==} - engines: {node: '>=18'} - deprecated: < 22.8.2 is no longer supported - hasBin: true - qrcode-terminal@0.11.0: resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} hasBin: true @@ -12409,11 +12284,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} @@ -12788,9 +12658,6 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - streamx@2.22.1: - resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} - strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} @@ -12993,16 +12860,10 @@ packages: tar-fs@2.1.3: resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} - tar-fs@3.0.5: - resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} @@ -13062,9 +12923,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -13081,9 +12939,6 @@ packages: throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -13122,9 +12977,6 @@ packages: tldts-core@7.0.8: resolution: {integrity: sha512-Ze39mm8EtocSXPbH6cv5rDeBBhehp8OLxWJKZXLEyv2dKMlblJsoAw2gmA0ZaU6iOwNlCZ4LrmaTW1reUQEmJw==} - tldts-experimental@6.1.86: - resolution: {integrity: sha512-X3N3+SrwSajvANDyIBFa6tf/nO0VoqaXvvINSnQkZMGbzNlD+9G7Xb24Mtk3ZBVZJRGY7UynAJJL8kRVt6Z46Q==} - tldts-experimental@7.0.8: resolution: {integrity: sha512-47LInzMIelfHqD1Gx5+PRYQBl6vU3Xt5KYY6AhqITIKldzu/ctwzdUpbm7AdmsRyzxnly9YH4GLHTtXPwhQhTw==} @@ -13328,9 +13180,6 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -13493,9 +13342,6 @@ packages: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} - urlpattern-polyfill@10.0.0: - resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} - use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -14025,18 +13871,6 @@ packages: utf-8-validate: optional: true - ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.18.2: resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} engines: {node: '>=10.0.0'} @@ -14137,9 +13971,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yjs@13.6.27: resolution: {integrity: sha512-OIDwaflOaq4wC6YlPBy2L6ceKeKuF7DeTxx+jPzv1FHn9tCZ0ZwSRnUBxD05E3yed46fv/FWJbvR+Ud7x0L7zw==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} @@ -17670,28 +17501,33 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@ghostery/adblocker-content@2.6.1': + '@ghostery/adblocker-content@2.7.0': dependencies: - '@ghostery/adblocker-extended-selectors': 2.6.1 + '@ghostery/adblocker-extended-selectors': 2.7.0 - '@ghostery/adblocker-extended-selectors@2.6.1': {} + '@ghostery/adblocker-extended-selectors@2.7.0': {} - '@ghostery/adblocker-puppeteer@2.5.1(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))': + '@ghostery/adblocker-playwright@2.7.0(playwright@1.53.1)': dependencies: - '@ghostery/adblocker': 2.6.1 - '@ghostery/adblocker-content': 2.6.1 - puppeteer: 22.3.0(encoding@0.1.13)(typescript@5.8.2) - tldts-experimental: 6.1.86 + '@ghostery/adblocker': 2.7.0 + '@ghostery/adblocker-content': 2.7.0 + playwright: 1.53.1 + tldts-experimental: 7.0.8 - '@ghostery/adblocker@2.6.1': + '@ghostery/adblocker@2.7.0': dependencies: - '@ghostery/adblocker-content': 2.6.1 - '@ghostery/adblocker-extended-selectors': 2.6.1 + '@ghostery/adblocker-content': 2.7.0 + '@ghostery/adblocker-extended-selectors': 2.7.0 + '@ghostery/url-parser': 1.3.0 '@remusao/guess-url-type': 2.1.0 '@remusao/small': 2.1.0 '@remusao/smaz': 2.2.0 tldts-experimental: 7.0.8 + '@ghostery/url-parser@1.3.0': + dependencies: + tldts-experimental: 7.0.8 + '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': @@ -18454,20 +18290,6 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@puppeteer/browsers@2.1.0': - dependencies: - debug: 4.3.4 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.4.0 - semver: 7.6.0 - tar-fs: 3.0.5 - unbzip2-stream: 1.4.3 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-buffer - - supports-color - '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.2': {} @@ -19702,8 +19524,6 @@ snapshots: '@tanstack/query-core': 5.69.0 react: 18.3.1 - '@tootallnate/quickjs-emscripten@0.23.0': {} - '@trpc/client@11.0.0(@trpc/server@11.0.0(typescript@5.8.2))(typescript@5.8.2)': dependencies: '@trpc/server': 11.0.0(typescript@5.8.2) @@ -20088,11 +19908,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 22.15.30 - optional: true - '@uidotdev/usehooks@2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 @@ -20511,10 +20326,6 @@ snapshots: assertion-error@1.1.0: {} - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - ast-types@0.15.2: dependencies: tslib: 2.8.1 @@ -20559,8 +20370,6 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - b4a@1.6.7: {} - babel-core@7.0.0-bridge.0(@babel/core@7.26.0): dependencies: '@babel/core': 7.26.0 @@ -20774,39 +20583,10 @@ snapshots: balanced-match@1.0.2: {} - bare-events@2.5.4: - optional: true - - bare-fs@2.3.5: - dependencies: - bare-events: 2.5.4 - bare-path: 2.1.3 - bare-stream: 2.6.5(bare-events@2.5.4) - transitivePeerDependencies: - - bare-buffer - optional: true - - bare-os@2.4.4: - optional: true - - bare-path@2.1.3: - dependencies: - bare-os: 2.4.4 - optional: true - - bare-stream@2.6.5(bare-events@2.5.4): - dependencies: - streamx: 2.22.1 - optionalDependencies: - bare-events: 2.5.4 - optional: true - base-64@0.1.0: {} base64-js@1.5.1: {} - basic-ftp@5.0.5: {} - batch@0.6.1: {} bcryptjs@2.4.3: {} @@ -20945,8 +20725,6 @@ snapshots: buffer-alloc-unsafe: 1.1.0 buffer-fill: 1.0.0 - buffer-crc32@0.2.13: {} - buffer-fill@1.0.0: {} buffer-from@1.1.2: {} @@ -21199,12 +20977,6 @@ snapshots: chrome-trace-event@1.0.4: {} - chromium-bidi@0.5.10(devtools-protocol@0.0.1249869): - dependencies: - devtools-protocol: 0.0.1249869 - mitt: 3.0.1 - urlpattern-polyfill: 10.0.0 - chromium-edge-launcher@0.2.0: dependencies: '@types/node': 22.15.30 @@ -21537,27 +21309,12 @@ snapshots: optionalDependencies: typescript: 5.8.2 - cosmiconfig@9.0.0(typescript@5.8.2): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.8.2 - cross-fetch@3.2.0(encoding@0.1.13): dependencies: node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding - cross-fetch@4.0.0(encoding@0.1.13): - dependencies: - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - cross-spawn@6.0.6: dependencies: nice-try: 1.0.5 @@ -21749,8 +21506,6 @@ snapshots: data-uri-to-buffer@5.0.1: {} - data-uri-to-buffer@6.0.2: {} - data-uri-utils@1.0.8: dependencies: data-uri-to-buffer: 5.0.1 @@ -21810,10 +21565,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.4.1(supports-color@10.0.0): dependencies: ms: 2.1.3 @@ -21893,12 +21644,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - del@4.1.1: dependencies: '@types/glob': 7.2.0 @@ -21966,8 +21711,6 @@ snapshots: dependencies: dequal: 2.0.3 - devtools-protocol@0.0.1249869: {} - didyoumean@1.2.2: {} diff-sequences@29.6.3: {} @@ -22440,14 +22183,6 @@ snapshots: escape-string-regexp@5.0.0: {} - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 @@ -22999,20 +22734,8 @@ snapshots: extend@3.0.2: {} - extract-zip@2.0.1: - dependencies: - debug: 4.4.1(supports-color@10.0.0) - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - fast-deep-equal@3.1.3: {} - fast-fifo@1.3.2: {} - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -23072,10 +22795,6 @@ snapshots: transitivePeerDependencies: - encoding - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - fdir@6.4.5(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -23355,6 +23074,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -23439,14 +23161,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.4: - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.4.1(supports-color@10.0.0) - transitivePeerDependencies: - - supports-color - getenv@1.0.0: {} github-from-package@0.0.0: {} @@ -24982,8 +24696,6 @@ snapshots: dependencies: yallist: 4.0.0 - lru-cache@7.18.3: {} - lru-queue@0.1.0: dependencies: es5-ext: 0.10.64 @@ -26341,8 +26053,6 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} muggle-string@0.4.1: {} @@ -26409,8 +26119,6 @@ snapshots: nested-error-stacks@2.0.1: {} - netmask@2.0.2: {} - next-auth@4.24.11(next@14.2.25(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.89.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.27.6 @@ -26899,24 +26607,6 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 - debug: 4.4.1(supports-color@10.0.0) - get-uri: 6.0.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6(supports-color@10.0.0) - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - package-json-from-dist@1.0.1: {} package-json@8.1.1: @@ -27073,8 +26763,6 @@ snapshots: optionalDependencies: '@napi-rs/canvas': 0.1.70 - pend@1.2.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -27125,6 +26813,23 @@ snapshots: dependencies: find-up: 3.0.0 + playwright-core@1.53.1: {} + + playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1): + dependencies: + debug: 4.4.1(supports-color@10.0.0) + optionalDependencies: + playwright: 1.53.1 + playwright-core: 1.53.1 + transitivePeerDependencies: + - supports-color + + playwright@1.53.1: + dependencies: + playwright-core: 1.53.1 + optionalDependencies: + fsevents: 2.3.2 + plist@3.1.0: dependencies: '@xmldom/xmldom': 0.8.10 @@ -27756,21 +27461,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-agent@6.4.0: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1(supports-color@10.0.0) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6(supports-color@10.0.0) - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - psl@1.15.0: dependencies: punycode: 2.3.1 @@ -27790,87 +27480,48 @@ snapshots: dependencies: escape-goat: 4.0.0 - puppeteer-core@22.3.0(encoding@0.1.13): - dependencies: - '@puppeteer/browsers': 2.1.0 - chromium-bidi: 0.5.10(devtools-protocol@0.0.1249869) - cross-fetch: 4.0.0(encoding@0.1.13) - debug: 4.3.4 - devtools-protocol: 0.0.1249869 - ws: 8.16.0 - transitivePeerDependencies: - - bare-buffer - - bufferutil - - encoding - - supports-color - - utf-8-validate - - puppeteer-extra-plugin-stealth@2.11.2(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))): + puppeteer-extra-plugin-stealth@2.11.2(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)): dependencies: debug: 4.4.1(supports-color@10.0.0) - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))) - puppeteer-extra-plugin-user-preferences: 2.4.1(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))) + puppeteer-extra-plugin: 3.2.3(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)) + puppeteer-extra-plugin-user-preferences: 2.4.1(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)) optionalDependencies: - puppeteer-extra: 3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2)) + playwright-extra: 4.3.6(playwright-core@1.53.1)(playwright@1.53.1) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin-user-data-dir@2.4.1(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))): + puppeteer-extra-plugin-user-data-dir@2.4.1(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)): dependencies: debug: 4.4.1(supports-color@10.0.0) fs-extra: 10.1.0 - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))) + puppeteer-extra-plugin: 3.2.3(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)) rimraf: 3.0.2 optionalDependencies: - puppeteer-extra: 3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2)) + playwright-extra: 4.3.6(playwright-core@1.53.1)(playwright@1.53.1) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin-user-preferences@2.4.1(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))): + puppeteer-extra-plugin-user-preferences@2.4.1(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)): dependencies: debug: 4.4.1(supports-color@10.0.0) deepmerge: 4.3.1 - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))) - puppeteer-extra-plugin-user-data-dir: 2.4.1(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))) + puppeteer-extra-plugin: 3.2.3(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)) + puppeteer-extra-plugin-user-data-dir: 2.4.1(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)) optionalDependencies: - puppeteer-extra: 3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2)) + playwright-extra: 4.3.6(playwright-core@1.53.1)(playwright@1.53.1) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2))): + puppeteer-extra-plugin@3.2.3(playwright-extra@4.3.6(playwright-core@1.53.1)(playwright@1.53.1)): dependencies: '@types/debug': 4.1.12 debug: 4.4.1(supports-color@10.0.0) merge-deep: 3.0.3 optionalDependencies: - puppeteer-extra: 3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2)) + playwright-extra: 4.3.6(playwright-core@1.53.1)(playwright@1.53.1) transitivePeerDependencies: - supports-color - puppeteer-extra@3.3.6(puppeteer-core@22.3.0(encoding@0.1.13))(puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2)): - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.1(supports-color@10.0.0) - deepmerge: 4.3.1 - optionalDependencies: - puppeteer: 22.3.0(encoding@0.1.13)(typescript@5.8.2) - puppeteer-core: 22.3.0(encoding@0.1.13) - transitivePeerDependencies: - - supports-color - - puppeteer@22.3.0(encoding@0.1.13)(typescript@5.8.2): - dependencies: - '@puppeteer/browsers': 2.1.0 - cosmiconfig: 9.0.0(typescript@5.8.2) - puppeteer-core: 22.3.0(encoding@0.1.13) - transitivePeerDependencies: - - bare-buffer - - bufferutil - - encoding - - supports-color - - typescript - - utf-8-validate - qrcode-terminal@0.11.0: {} qs@6.13.0: @@ -29074,10 +28725,6 @@ snapshots: dependencies: lru-cache: 6.0.0 - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - semver@7.6.3: {} semver@7.7.2: {} @@ -29542,13 +29189,6 @@ snapshots: streamsearch@1.1.0: {} - streamx@2.22.1: - dependencies: - fast-fifo: 1.3.2 - text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.5.4 - strict-uri-encode@2.0.0: {} string-argv@0.3.2: {} @@ -29803,16 +29443,6 @@ snapshots: pump: 3.0.2 tar-stream: 2.2.0 - tar-fs@3.0.5: - dependencies: - pump: 3.0.2 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 2.3.5 - bare-path: 2.1.3 - transitivePeerDependencies: - - bare-buffer - tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -29821,12 +29451,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar-stream@3.1.7: - dependencies: - b4a: 1.6.7 - fast-fifo: 1.3.2 - streamx: 2.22.1 - tar@6.2.1: dependencies: chownr: 2.0.0 @@ -29910,10 +29534,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-decoder@1.2.3: - dependencies: - b4a: 1.6.7 - text-hex@1.0.0: {} text-table@0.2.0: {} @@ -29928,8 +29548,6 @@ snapshots: throat@5.0.0: {} - through@2.3.8: {} - thunky@1.1.0: {} timers-ext@0.1.8: @@ -29958,10 +29576,6 @@ snapshots: tldts-core@7.0.8: {} - tldts-experimental@6.1.86: - dependencies: - tldts-core: 6.1.86 - tldts-experimental@7.0.8: dependencies: tldts-core: 7.0.8 @@ -30149,11 +29763,6 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - unbzip2-stream@1.4.3: - dependencies: - buffer: 5.7.1 - through: 2.3.8 - undici-types@5.26.5: {} undici-types@6.21.0: {} @@ -30343,8 +29952,6 @@ snapshots: punycode: 1.4.1 qs: 6.14.0 - urlpattern-polyfill@10.0.0: {} - use-callback-ref@1.3.3(@types/react@18.3.12)(react@18.3.1): dependencies: react: 18.3.1 @@ -31042,8 +30649,6 @@ snapshots: ws@7.5.10: {} - ws@8.16.0: {} - ws@8.18.2: {} xcode@3.0.1(patch_hash=kvggi4abfe6iel7wt6iiemonyq): @@ -31113,11 +30718,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - yjs@13.6.27: dependencies: lib0: 0.2.108 diff --git a/tooling/oxlint/package.json b/tooling/oxlint/package.json new file mode 100644 index 00000000..6d24420b --- /dev/null +++ b/tooling/oxlint/package.json @@ -0,0 +1,5 @@ +{ + "name": "oxlint", + "version": "0.0.0", + "private": true +} \ No newline at end of file -- cgit v1.2.3-70-g09d2