From e692213c17aa5b986f6bc7d8da93630bd9a9c6a7 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Thu, 11 Jun 2026 17:27:19 +0200 Subject: [PATCH 1/8] fix(ci): unblock e2e and PR workflows --- .github/workflows/on-pull-request.yml | 7 +++++-- .github/workflows/test-e2e.yaml | 9 ++++++++- .gitignore | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/on-pull-request.yml b/.github/workflows/on-pull-request.yml index 3b02249d..06d64338 100644 --- a/.github/workflows/on-pull-request.yml +++ b/.github/workflows/on-pull-request.yml @@ -13,6 +13,7 @@ jobs: name: Build & Test if: (!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, 'docs:')) runs-on: ubuntu-22.04 + timeout-minutes: 30 steps: - name: Checkout repository @@ -21,7 +22,8 @@ jobs: - name: Use Node.js 24 uses: actions/setup-node@v6 with: - node-version: 24 + # Pinned: on Node 24.16.0 (Linux) `pnpm install` never exits after running + node-version: 24.15.0 - name: Install pnpm and dependencies uses: apify/actions/pnpm-install@v1.1.2 @@ -38,6 +40,7 @@ jobs: lint: name: Lint runs-on: ubuntu-22.04 + timeout-minutes: 30 steps: - name: Checkout repository uses: actions/checkout@v6 @@ -45,7 +48,7 @@ jobs: - name: Use Node.js 24 uses: actions/setup-node@v6 with: - node-version: 24 + node-version: 24.15.0 - name: Install pnpm and dependencies uses: apify/actions/pnpm-install@v1.1.2 diff --git a/.github/workflows/test-e2e.yaml b/.github/workflows/test-e2e.yaml index 404d2d93..0f4c55b5 100644 --- a/.github/workflows/test-e2e.yaml +++ b/.github/workflows/test-e2e.yaml @@ -13,6 +13,7 @@ jobs: build_and_test: name: Build & Test runs-on: ubuntu-22.04 + timeout-minutes: 60 steps: - name: Cancel Workflow Action @@ -26,7 +27,8 @@ jobs: - name: Use Node.js 24 uses: actions/setup-node@v6 with: - node-version: 24 + # Pinned: on Node 24.16.0 (Linux) `pnpm install` never exits after running + node-version: 24.15.0 - name: Turbo cache id: turbo-cache @@ -40,6 +42,11 @@ jobs: - name: Install pnpm and dependencies uses: apify/actions/pnpm-install@v1.1.2 + - name: Install browsers + run: | + pnpm exec puppeteer browsers install chrome + pnpm exec playwright install chromium + - name: Build run: pnpm ci:build diff --git a/.gitignore b/.gitignore index b5a464c7..0704f7e4 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,8 @@ pids .vscode yarn.lock .yarn +# npm locks are generated locally in actor dirs (the monorepo uses pnpm-lock.yaml) +package-lock.json tmp jsconfig.json types From 250178a0dd58e69107e32a17bac369dc1f0dd973 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Thu, 11 Jun 2026 17:40:51 +0200 Subject: [PATCH 2/8] feat(ci): add sitemap-extractor to the release workflow --- .github/workflows/release-generic-actors.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-generic-actors.yaml b/.github/workflows/release-generic-actors.yaml index 84e6a1f2..e9da596c 100644 --- a/.github/workflows/release-generic-actors.yaml +++ b/.github/workflows/release-generic-actors.yaml @@ -34,6 +34,11 @@ on: type: boolean required: false default: true + sitemap-scraper: + description: apify/sitemap-extractor + type: boolean + required: false + default: true build-channel: description: Build channel type: choice @@ -42,7 +47,8 @@ on: - stable - development - custom - default: stable + # development by default so an accidental run cannot publish to stable + default: development version: description: Custom version (only for custom build channel) type: string @@ -95,6 +101,15 @@ jobs: development-version: '0.0' development-build-tag: development should-build: ${{ github.event.inputs.camoufox-scraper }} + # Platform actor is apify/sitemap-extractor (name in .actor/actor.json); + # `actor` is the directory name. Stable tag is `latest` — that is how the + # actor has been published so far, unlike the version-N scheme above. + - actor: sitemap-scraper + stable-version: '0.1' + stable-build-tag: latest + development-version: '0.0' + development-build-tag: development + should-build: ${{ github.event.inputs.sitemap-scraper }} steps: - uses: actions/checkout@v6 From 9accd175b442fe168cc00bb08e46ce1e7ef63403 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Mon, 15 Jun 2026 15:37:38 +0200 Subject: [PATCH 3/8] chore: post-split fixups (crawling depth, repo metadata, docs) --- CONTRIBUTING.md | 6 +++--- package.json | 10 +++++----- packages/actor-scraper/camoufox-scraper/package.json | 4 ++-- packages/actor-scraper/cheerio-scraper/README.md | 2 +- packages/actor-scraper/cheerio-scraper/package.json | 4 ++-- packages/actor-scraper/jsdom-scraper/README.md | 2 +- packages/actor-scraper/jsdom-scraper/package.json | 4 ++-- packages/actor-scraper/playwright-scraper/package.json | 4 ++-- packages/actor-scraper/puppeteer-scraper/package.json | 4 ++-- packages/actor-scraper/web-scraper/package.json | 4 ++-- packages/scraper-tools/package.json | 5 +++-- packages/scraper-tools/src/context.ts | 2 +- 12 files changed, 26 insertions(+), 25 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0342fa25..e373a9c7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,14 +14,14 @@ Please provide steps to reproduce if you found a bug or ideally fork the reposit Before you submit your pull request, consider the following guidelines: -- Search [GitHub](https://github.com/apify/apify-sdk-js/pulls) for an open or closed PR that relates to your submission. You don't want to duplicate effort. +- Search [GitHub](https://github.com/apify/actor-scraper/pulls) for an open or closed PR that relates to your submission. You don't want to duplicate effort. -- Fork the project and install NPM dependencies. +- Fork the project and install dependencies with pnpm. - Run tests before you start working, to be sure they all pass and your setup is working correctly: ```sh - npm run test + pnpm test ``` - Be sure to **include appropriate test cases**. Tests help make it clear what the PR is fixing and also make sure the changes won't break over time. diff --git a/package.json b/package.json index fa8314cc..cf3d065c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "apify-sdk-js", + "name": "actor-scraper", "private": true, - "description": "Apify SDK monorepo", + "description": "Apify generic scrapers monorepo", "keywords": [ "apify", "headless", @@ -23,12 +23,12 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/apify/apify-ts" + "url": "git+https://github.com/apify/actor-scraper.git" }, "bugs": { - "url": "https://github.com/apify/apify-ts/issues" + "url": "https://github.com/apify/actor-scraper/issues" }, - "homepage": "https://sdk.apify.com", + "homepage": "https://github.com/apify/actor-scraper", "scripts": { "prepare": "husky", "prepublishOnly": "turbo run copy", diff --git a/packages/actor-scraper/camoufox-scraper/package.json b/packages/actor-scraper/camoufox-scraper/package.json index b109f7a1..ceb8325e 100644 --- a/packages/actor-scraper/camoufox-scraper/package.json +++ b/packages/actor-scraper/camoufox-scraper/package.json @@ -28,7 +28,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -36,5 +36,5 @@ "url": "https://apify.com" }, "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/cheerio-scraper/README.md b/packages/actor-scraper/cheerio-scraper/README.md index 8370736d..2ade93fd 100644 --- a/packages/actor-scraper/cheerio-scraper/README.md +++ b/packages/actor-scraper/cheerio-scraper/README.md @@ -183,7 +183,7 @@ async function pageFunction(context) { } ``` -The code runs in [Node.js 16](https://nodejs.org/) and the function accepts a single argument, the `context` object, whose properties are listed below. +The code runs in [Node.js 22](https://nodejs.org/) and the function accepts a single argument, the `context` object, whose properties are listed below. The return value of the page function is an object (or an array of objects) representing the data extracted from the web page. The return value must be stringify-able to JSON, i.e. it can only contain basic types and no circular references. If you prefer not to extract any data from the page and skip it in the clean results, simply return `null` or `undefined`. diff --git a/packages/actor-scraper/cheerio-scraper/package.json b/packages/actor-scraper/cheerio-scraper/package.json index 761742d8..2a54a319 100644 --- a/packages/actor-scraper/cheerio-scraper/package.json +++ b/packages/actor-scraper/cheerio-scraper/package.json @@ -26,7 +26,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -38,5 +38,5 @@ "Ondra Urban " ], "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/jsdom-scraper/README.md b/packages/actor-scraper/jsdom-scraper/README.md index d9162c80..d2441f7f 100644 --- a/packages/actor-scraper/jsdom-scraper/README.md +++ b/packages/actor-scraper/jsdom-scraper/README.md @@ -150,7 +150,7 @@ async function pageFunction(context) { } ``` -The code runs in [Node.js 16](https://nodejs.org/) and the function accepts a single argument, the `context` object, whose properties are listed below. +The code runs in [Node.js 22](https://nodejs.org/) and the function accepts a single argument, the `context` object, whose properties are listed below. The return value of the page function is an object (or an array of objects) representing the data extracted from the web page. The return value must be stringify-able to JSON, i.e. it can only contain basic types and no circular references. If you prefer not to extract any data from the page and skip it in the clean results, simply return `null` or `undefined`. diff --git a/packages/actor-scraper/jsdom-scraper/package.json b/packages/actor-scraper/jsdom-scraper/package.json index 71736154..686c49f6 100644 --- a/packages/actor-scraper/jsdom-scraper/package.json +++ b/packages/actor-scraper/jsdom-scraper/package.json @@ -26,7 +26,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -38,5 +38,5 @@ "Ondra Urban " ], "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/playwright-scraper/package.json b/packages/actor-scraper/playwright-scraper/package.json index 4bc099fb..4c0b8774 100644 --- a/packages/actor-scraper/playwright-scraper/package.json +++ b/packages/actor-scraper/playwright-scraper/package.json @@ -27,7 +27,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -35,5 +35,5 @@ "url": "https://apify.com" }, "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/puppeteer-scraper/package.json b/packages/actor-scraper/puppeteer-scraper/package.json index e1d06fae..04e89d38 100644 --- a/packages/actor-scraper/puppeteer-scraper/package.json +++ b/packages/actor-scraper/puppeteer-scraper/package.json @@ -25,7 +25,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -37,5 +37,5 @@ "Ondra Urban " ], "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/actor-scraper/web-scraper/package.json b/packages/actor-scraper/web-scraper/package.json index 3b7343e3..5bd4e5d4 100644 --- a/packages/actor-scraper/web-scraper/package.json +++ b/packages/actor-scraper/web-scraper/package.json @@ -30,7 +30,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/apify/apify-sdk-js" + "url": "https://github.com/apify/actor-scraper" }, "author": { "name": "Apify Technologies", @@ -42,5 +42,5 @@ "Ondra Urban " ], "license": "Apache-2.0", - "homepage": "https://github.com/apify/apify-sdk-js" + "homepage": "https://github.com/apify/actor-scraper" } diff --git a/packages/scraper-tools/package.json b/packages/scraper-tools/package.json index 4d8b4564..c5f8b0b6 100644 --- a/packages/scraper-tools/package.json +++ b/packages/scraper-tools/package.json @@ -21,9 +21,10 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/apify/apify-sdk-js" + "url": "git+https://github.com/apify/actor-scraper.git", + "directory": "packages/scraper-tools" }, - "homepage": "https://github.com/apify/apify-sdk-js", + "homepage": "https://github.com/apify/actor-scraper", "scripts": { "build": "pnpm clean && pnpm compile && pnpm copy", "clean": "rimraf ./dist", diff --git a/packages/scraper-tools/src/context.ts b/packages/scraper-tools/src/context.ts index 4276b8b6..8e21aed0 100644 --- a/packages/scraper-tools/src/context.ts +++ b/packages/scraper-tools/src/context.ts @@ -141,7 +141,7 @@ class Context< const defaultUserData = { [META_KEY]: { parentRequestId: castedRequest.id || castedRequest.uniqueKey, - depth: (castedRequest.userData?.[META_KEY] as RequestMetadata).depth ?? 0 + 1, + depth: ((castedRequest.userData?.[META_KEY] as RequestMetadata | undefined)?.depth ?? 0) + 1, }, }; From c3f6fcee317ca239cf0a3ef94c2688d4c4819e37 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Mon, 15 Jun 2026 16:15:58 +0200 Subject: [PATCH 4/8] fix(docker): ignore local npm lock so isolated builds match the platform --- packages/actor-scraper/camoufox-scraper/.dockerignore | 3 +++ packages/actor-scraper/cheerio-scraper/.dockerignore | 3 +++ packages/actor-scraper/jsdom-scraper/.dockerignore | 3 +++ packages/actor-scraper/playwright-scraper/.dockerignore | 3 +++ packages/actor-scraper/puppeteer-scraper/.dockerignore | 3 +++ packages/actor-scraper/sitemap-scraper/.dockerignore | 3 +++ packages/actor-scraper/web-scraper/.dockerignore | 3 +++ 7 files changed, 21 insertions(+) diff --git a/packages/actor-scraper/camoufox-scraper/.dockerignore b/packages/actor-scraper/camoufox-scraper/.dockerignore index d421f7a7..ab7888bf 100644 --- a/packages/actor-scraper/camoufox-scraper/.dockerignore +++ b/packages/actor-scraper/camoufox-scraper/.dockerignore @@ -10,3 +10,6 @@ dist # installed files node_modules + +# local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) +package-lock.json diff --git a/packages/actor-scraper/cheerio-scraper/.dockerignore b/packages/actor-scraper/cheerio-scraper/.dockerignore index ceb85b1c..b8a10016 100644 --- a/packages/actor-scraper/cheerio-scraper/.dockerignore +++ b/packages/actor-scraper/cheerio-scraper/.dockerignore @@ -8,3 +8,6 @@ storage # installed files node_modules + +# local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) +package-lock.json diff --git a/packages/actor-scraper/jsdom-scraper/.dockerignore b/packages/actor-scraper/jsdom-scraper/.dockerignore index ceb85b1c..b8a10016 100644 --- a/packages/actor-scraper/jsdom-scraper/.dockerignore +++ b/packages/actor-scraper/jsdom-scraper/.dockerignore @@ -8,3 +8,6 @@ storage # installed files node_modules + +# local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) +package-lock.json diff --git a/packages/actor-scraper/playwright-scraper/.dockerignore b/packages/actor-scraper/playwright-scraper/.dockerignore index ceb85b1c..b8a10016 100644 --- a/packages/actor-scraper/playwright-scraper/.dockerignore +++ b/packages/actor-scraper/playwright-scraper/.dockerignore @@ -8,3 +8,6 @@ storage # installed files node_modules + +# local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) +package-lock.json diff --git a/packages/actor-scraper/puppeteer-scraper/.dockerignore b/packages/actor-scraper/puppeteer-scraper/.dockerignore index ceb85b1c..b8a10016 100644 --- a/packages/actor-scraper/puppeteer-scraper/.dockerignore +++ b/packages/actor-scraper/puppeteer-scraper/.dockerignore @@ -8,3 +8,6 @@ storage # installed files node_modules + +# local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) +package-lock.json diff --git a/packages/actor-scraper/sitemap-scraper/.dockerignore b/packages/actor-scraper/sitemap-scraper/.dockerignore index ceb85b1c..b8a10016 100644 --- a/packages/actor-scraper/sitemap-scraper/.dockerignore +++ b/packages/actor-scraper/sitemap-scraper/.dockerignore @@ -8,3 +8,6 @@ storage # installed files node_modules + +# local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) +package-lock.json diff --git a/packages/actor-scraper/web-scraper/.dockerignore b/packages/actor-scraper/web-scraper/.dockerignore index ceb85b1c..b8a10016 100644 --- a/packages/actor-scraper/web-scraper/.dockerignore +++ b/packages/actor-scraper/web-scraper/.dockerignore @@ -8,3 +8,6 @@ storage # installed files node_modules + +# local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) +package-lock.json From 719da43a6d7c504a1fdb5aacbc7b85e41e2d3289 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Tue, 16 Jun 2026 11:13:18 +0200 Subject: [PATCH 5/8] chore(scraper-tools): cover crawling depth in enqueueRequest --- test/scraper-tools/context.test.ts | 56 ++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 test/scraper-tools/context.test.ts diff --git a/test/scraper-tools/context.test.ts b/test/scraper-tools/context.test.ts new file mode 100644 index 00000000..38d842a9 --- /dev/null +++ b/test/scraper-tools/context.test.ts @@ -0,0 +1,56 @@ +import { Request } from '@crawlee/core'; + +import type { CrawlerSetupOptions } from '@apify/scraper-tools'; +import { constants, createContext } from '@apify/scraper-tools'; + +const { META_KEY } = constants; + +function createTestContext(request: Request) { + const addRequest = vi.fn(async (req: unknown) => req); + const crawlerSetup = { + rawInput: '{}', + env: {}, + globalStore: new Map(), + requestQueue: { addRequest }, + keyValueStore: {}, + customData: null, + } as unknown as CrawlerSetupOptions; + const { context } = createContext({ crawlerSetup, pageFunctionArguments: { request } }); + return { context, addRequest }; +} + +describe('Context.enqueueRequest()', () => { + it('increments the crawling depth of the parent request', async () => { + const request = new Request({ url: 'https://www.example.com/parent' }); + request.userData[META_KEY] = { depth: 2, parentRequestId: null }; + const { context, addRequest } = createTestContext(request); + + await context.enqueueRequest({ url: 'https://www.example.com/child' }); + + expect(addRequest).toHaveBeenCalledTimes(1); + const enqueued = addRequest.mock.calls[0][0] as { userData: Record }; + expect(enqueued.userData[META_KEY].depth).toBe(3); + }); + + it('starts at depth 1 when the parent request has no metadata', async () => { + const request = new Request({ url: 'https://www.example.com/parent' }); + const { context, addRequest } = createTestContext(request); + + await context.enqueueRequest({ url: 'https://www.example.com/child' }); + + const enqueued = addRequest.mock.calls[0][0] as { userData: Record }; + expect(enqueued.userData[META_KEY].depth).toBe(1); + }); + + it('links the enqueued request to its parent', async () => { + const request = new Request({ url: 'https://www.example.com/parent' }); + const { context, addRequest } = createTestContext(request); + + await context.enqueueRequest({ url: 'https://www.example.com/child' }); + + const enqueued = addRequest.mock.calls[0][0] as { + userData: Record; + }; + expect(enqueued.userData[META_KEY].parentRequestId).toBe(request.uniqueKey); + }); +}); From bbb7464651ac9a9fb24c5c3d40a8fc96152a59df Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Tue, 16 Jun 2026 11:23:19 +0200 Subject: [PATCH 6/8] fix(ci): keep stable as the default release channel --- .github/workflows/release-generic-actors.yaml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release-generic-actors.yaml b/.github/workflows/release-generic-actors.yaml index e9da596c..ba6c8296 100644 --- a/.github/workflows/release-generic-actors.yaml +++ b/.github/workflows/release-generic-actors.yaml @@ -47,8 +47,7 @@ on: - stable - development - custom - # development by default so an accidental run cannot publish to stable - default: development + default: stable version: description: Custom version (only for custom build channel) type: string @@ -101,9 +100,7 @@ jobs: development-version: '0.0' development-build-tag: development should-build: ${{ github.event.inputs.camoufox-scraper }} - # Platform actor is apify/sitemap-extractor (name in .actor/actor.json); - # `actor` is the directory name. Stable tag is `latest` — that is how the - # actor has been published so far, unlike the version-N scheme above. + # Platform actor is apify/sitemap-extractor (name in .actor/actor.json) - actor: sitemap-scraper stable-version: '0.1' stable-build-tag: latest From 968ca46c65ec9e7eb18a9efd2fcce81c2d4cfa57 Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Tue, 16 Jun 2026 14:36:48 +0200 Subject: [PATCH 7/8] revert: undo enqueueRequest depth fix --- packages/scraper-tools/src/context.ts | 2 +- test/scraper-tools/context.test.ts | 56 --------------------------- 2 files changed, 1 insertion(+), 57 deletions(-) delete mode 100644 test/scraper-tools/context.test.ts diff --git a/packages/scraper-tools/src/context.ts b/packages/scraper-tools/src/context.ts index 8e21aed0..4276b8b6 100644 --- a/packages/scraper-tools/src/context.ts +++ b/packages/scraper-tools/src/context.ts @@ -141,7 +141,7 @@ class Context< const defaultUserData = { [META_KEY]: { parentRequestId: castedRequest.id || castedRequest.uniqueKey, - depth: ((castedRequest.userData?.[META_KEY] as RequestMetadata | undefined)?.depth ?? 0) + 1, + depth: (castedRequest.userData?.[META_KEY] as RequestMetadata).depth ?? 0 + 1, }, }; diff --git a/test/scraper-tools/context.test.ts b/test/scraper-tools/context.test.ts deleted file mode 100644 index 38d842a9..00000000 --- a/test/scraper-tools/context.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Request } from '@crawlee/core'; - -import type { CrawlerSetupOptions } from '@apify/scraper-tools'; -import { constants, createContext } from '@apify/scraper-tools'; - -const { META_KEY } = constants; - -function createTestContext(request: Request) { - const addRequest = vi.fn(async (req: unknown) => req); - const crawlerSetup = { - rawInput: '{}', - env: {}, - globalStore: new Map(), - requestQueue: { addRequest }, - keyValueStore: {}, - customData: null, - } as unknown as CrawlerSetupOptions; - const { context } = createContext({ crawlerSetup, pageFunctionArguments: { request } }); - return { context, addRequest }; -} - -describe('Context.enqueueRequest()', () => { - it('increments the crawling depth of the parent request', async () => { - const request = new Request({ url: 'https://www.example.com/parent' }); - request.userData[META_KEY] = { depth: 2, parentRequestId: null }; - const { context, addRequest } = createTestContext(request); - - await context.enqueueRequest({ url: 'https://www.example.com/child' }); - - expect(addRequest).toHaveBeenCalledTimes(1); - const enqueued = addRequest.mock.calls[0][0] as { userData: Record }; - expect(enqueued.userData[META_KEY].depth).toBe(3); - }); - - it('starts at depth 1 when the parent request has no metadata', async () => { - const request = new Request({ url: 'https://www.example.com/parent' }); - const { context, addRequest } = createTestContext(request); - - await context.enqueueRequest({ url: 'https://www.example.com/child' }); - - const enqueued = addRequest.mock.calls[0][0] as { userData: Record }; - expect(enqueued.userData[META_KEY].depth).toBe(1); - }); - - it('links the enqueued request to its parent', async () => { - const request = new Request({ url: 'https://www.example.com/parent' }); - const { context, addRequest } = createTestContext(request); - - await context.enqueueRequest({ url: 'https://www.example.com/child' }); - - const enqueued = addRequest.mock.calls[0][0] as { - userData: Record; - }; - expect(enqueued.userData[META_KEY].parentRequestId).toBe(request.uniqueKey); - }); -}); From 027ea86cf6468030dc37f40fe0fe7cd679ffeb0d Mon Sep 17 00:00:00 2001 From: nikitachapovskii-dev Date: Fri, 19 Jun 2026 16:24:16 +0200 Subject: [PATCH 8/8] fix(ci): unpin node, update puppeteer & playwright to latest, deterministic pnpm --- .dockerignore | 14 + .github/workflows/on-pull-request.yml | 5 +- .github/workflows/test-e2e.yaml | 3 +- .gitignore | 1 - package.json | 6 +- .../camoufox-scraper/.actor/actor.json | 2 + .../camoufox-scraper/.dockerignore | 1 - .../actor-scraper/camoufox-scraper/Dockerfile | 45 +- .../cheerio-scraper/.actor/actor.json | 2 + .../cheerio-scraper/.dockerignore | 1 - .../actor-scraper/cheerio-scraper/Dockerfile | 37 +- .../jsdom-scraper/.actor/actor.json | 2 + .../actor-scraper/jsdom-scraper/.dockerignore | 1 - .../actor-scraper/jsdom-scraper/Dockerfile | 38 +- .../playwright-scraper/.actor/actor.json | 2 + .../playwright-scraper/.dockerignore | 1 - .../playwright-scraper/Dockerfile | 45 +- .../puppeteer-scraper/.actor/actor.json | 2 + .../puppeteer-scraper/.dockerignore | 1 - .../puppeteer-scraper/Dockerfile | 45 +- .../sitemap-scraper/.actor/actor.json | 2 + .../sitemap-scraper/.dockerignore | 1 - .../actor-scraper/sitemap-scraper/Dockerfile | 37 +- .../web-scraper/.actor/actor.json | 2 + .../actor-scraper/web-scraper/.dockerignore | 1 - packages/actor-scraper/web-scraper/Dockerfile | 45 +- pnpm-lock.yaml | 806 +++++++----------- 27 files changed, 525 insertions(+), 623 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..7c0b07ae --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +# Actor images build from the monorepo root (dockerContextDir in .actor/actor.json). +# Keep the context lean: ship sources + manifests + the pnpm lockfile only. +node_modules +**/node_modules +.git +.turbo +**/dist +**/storage +apify_storage +crawlee_storage +*.log +.DS_Store +.idea +.vscode diff --git a/.github/workflows/on-pull-request.yml b/.github/workflows/on-pull-request.yml index 06d64338..21013d40 100644 --- a/.github/workflows/on-pull-request.yml +++ b/.github/workflows/on-pull-request.yml @@ -22,8 +22,7 @@ jobs: - name: Use Node.js 24 uses: actions/setup-node@v6 with: - # Pinned: on Node 24.16.0 (Linux) `pnpm install` never exits after running - node-version: 24.15.0 + node-version: 24 - name: Install pnpm and dependencies uses: apify/actions/pnpm-install@v1.1.2 @@ -48,7 +47,7 @@ jobs: - name: Use Node.js 24 uses: actions/setup-node@v6 with: - node-version: 24.15.0 + node-version: 24 - name: Install pnpm and dependencies uses: apify/actions/pnpm-install@v1.1.2 diff --git a/.github/workflows/test-e2e.yaml b/.github/workflows/test-e2e.yaml index 0f4c55b5..4b015e3e 100644 --- a/.github/workflows/test-e2e.yaml +++ b/.github/workflows/test-e2e.yaml @@ -27,8 +27,7 @@ jobs: - name: Use Node.js 24 uses: actions/setup-node@v6 with: - # Pinned: on Node 24.16.0 (Linux) `pnpm install` never exits after running - node-version: 24.15.0 + node-version: 24 - name: Turbo cache id: turbo-cache diff --git a/.gitignore b/.gitignore index 0704f7e4..6c3c6516 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,6 @@ pids yarn.lock .yarn # npm locks are generated locally in actor dirs (the monorepo uses pnpm-lock.yaml) -package-lock.json tmp jsconfig.json types diff --git a/package.json b/package.json index cf3d065c..2f446f3b 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "@apify/tsconfig": "^0.1.2", "@commitlint/config-conventional": "^20.0.0", "@isaacs/brace-expansion": "^5.0.1", - "@playwright/browser-chromium": "^1.46.0", + "@playwright/browser-chromium": "^1.61.0", "@types/content-type": "^1.1.8", "@types/fs-extra": "^11.0.4", "@types/node": "^24.0.0", @@ -81,8 +81,8 @@ "oxfmt": "0.46.0", "oxlint": "1.62.0", "oxlint-tsgolint": "0.22.0", - "playwright": "^1.46.0", - "puppeteer": "^24.0.0", + "playwright": "^1.61.0", + "puppeteer": "^25.1.0", "rimraf": "^6.0.1", "tsx": "^4.16.5", "turbo": "2.9.1", diff --git a/packages/actor-scraper/camoufox-scraper/.actor/actor.json b/packages/actor-scraper/camoufox-scraper/.actor/actor.json index 3606f908..bdcd2843 100644 --- a/packages/actor-scraper/camoufox-scraper/.actor/actor.json +++ b/packages/actor-scraper/camoufox-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "camoufox-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/camoufox-scraper/.dockerignore b/packages/actor-scraper/camoufox-scraper/.dockerignore index ab7888bf..2a4de256 100644 --- a/packages/actor-scraper/camoufox-scraper/.dockerignore +++ b/packages/actor-scraper/camoufox-scraper/.dockerignore @@ -12,4 +12,3 @@ dist node_modules # local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) -package-lock.json diff --git a/packages/actor-scraper/camoufox-scraper/Dockerfile b/packages/actor-scraper/camoufox-scraper/Dockerfile index a58adf7a..9bc3d550 100644 --- a/packages/actor-scraper/camoufox-scraper/Dockerfile +++ b/packages/actor-scraper/camoufox-scraper/Dockerfile @@ -1,31 +1,40 @@ +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. FROM apify/actor-node-playwright-camoufox:22 AS builder -COPY --chown=myuser package*.json ./ +# The browser base runs as `myuser`; the build stage needs root for corepack + a writable workdir. +USER root +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable -COPY --chown=myuser . ./ +# Browsers ship with the base image; never let an npm postinstall download them. +# puppeteer is pulled transitively via @crawlee/browser-pool even for non-puppeteer actors. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 -RUN npm run build +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). +COPY . ./ -FROM apify/actor-node-playwright-camoufox:22 +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-camoufox-scraper... -COPY --from=builder --chown=myuser /home/myuser/dist ./dist +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-camoufox-scraper... build -COPY --chown=myuser package*.json ./ +# Self-contained production bundle; inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm config set inject-workspace-packages true \ + && pnpm --filter actor-camoufox-scraper deploy --prod /deploy -RUN npm --quiet set progress=false \ - && npm install --omit=dev \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +FROM apify/actor-node-playwright-camoufox:22 -COPY --chown=myuser . ./ +# Base WORKDIR is /home/myuser and ships a template node_modules plus the Xvfb entrypoint. +# Drop the template's node_modules and overlay only the lean production bundle; the inherited +# ENTRYPOINT (xvfb-entrypoint.sh) still wraps CMD with Xvfb, and the bundled browser is reused. +RUN rm -rf node_modules +COPY --from=builder --chown=myuser /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/cheerio-scraper/.actor/actor.json b/packages/actor-scraper/cheerio-scraper/.actor/actor.json index 5b6865ea..26d612ef 100644 --- a/packages/actor-scraper/cheerio-scraper/.actor/actor.json +++ b/packages/actor-scraper/cheerio-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "cheerio-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/cheerio-scraper/.dockerignore b/packages/actor-scraper/cheerio-scraper/.dockerignore index b8a10016..2424ba3f 100644 --- a/packages/actor-scraper/cheerio-scraper/.dockerignore +++ b/packages/actor-scraper/cheerio-scraper/.dockerignore @@ -10,4 +10,3 @@ storage node_modules # local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) -package-lock.json diff --git a/packages/actor-scraper/cheerio-scraper/Dockerfile b/packages/actor-scraper/cheerio-scraper/Dockerfile index d166d657..082fcd04 100644 --- a/packages/actor-scraper/cheerio-scraper/Dockerfile +++ b/packages/actor-scraper/cheerio-scraper/Dockerfile @@ -1,32 +1,33 @@ +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. FROM apify/actor-node:22 AS builder -COPY package*.json ./ +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). COPY . ./ -RUN npm run build +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-cheerio-scraper... -FROM apify/actor-node:22 +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-cheerio-scraper... build -COPY --from=builder /usr/src/app/dist ./dist +# Self-contained production bundle. inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm config set inject-workspace-packages true \ + && pnpm --filter actor-cheerio-scraper deploy --prod /deploy -COPY package*.json ./ +FROM apify/actor-node:22 -RUN rm -rf node_modules \ - && npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +WORKDIR /usr/src/app -COPY . ./ +# Replace the base image's template with only the lean production bundle. +RUN find /usr/src/app -mindepth 1 -delete +COPY --from=builder /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/jsdom-scraper/.actor/actor.json b/packages/actor-scraper/jsdom-scraper/.actor/actor.json index 9c0ee735..8006d165 100644 --- a/packages/actor-scraper/jsdom-scraper/.actor/actor.json +++ b/packages/actor-scraper/jsdom-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "jsdom-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/jsdom-scraper/.dockerignore b/packages/actor-scraper/jsdom-scraper/.dockerignore index b8a10016..2424ba3f 100644 --- a/packages/actor-scraper/jsdom-scraper/.dockerignore +++ b/packages/actor-scraper/jsdom-scraper/.dockerignore @@ -10,4 +10,3 @@ storage node_modules # local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) -package-lock.json diff --git a/packages/actor-scraper/jsdom-scraper/Dockerfile b/packages/actor-scraper/jsdom-scraper/Dockerfile index 54e0f35f..40c84bce 100644 --- a/packages/actor-scraper/jsdom-scraper/Dockerfile +++ b/packages/actor-scraper/jsdom-scraper/Dockerfile @@ -1,29 +1,33 @@ +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. FROM apify/actor-node:22 AS builder -COPY package*.json ./ +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). COPY . ./ -RUN npm run build +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-jsdom-scraper... -FROM apify/actor-node:22 +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-jsdom-scraper... build + +# Self-contained production bundle; inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm config set inject-workspace-packages true \ + && pnpm --filter actor-jsdom-scraper deploy --prod /deploy -COPY --from=builder /usr/src/app/dist ./dist +FROM apify/actor-node:22 -COPY package*.json ./ +WORKDIR /usr/src/app -RUN npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +# Replace the base image's template with only the lean production bundle. +RUN find /usr/src/app -mindepth 1 -delete +COPY --from=builder /deploy ./ -COPY . ./ +ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/playwright-scraper/.actor/actor.json b/packages/actor-scraper/playwright-scraper/.actor/actor.json index f9eaf9ba..239f360b 100644 --- a/packages/actor-scraper/playwright-scraper/.actor/actor.json +++ b/packages/actor-scraper/playwright-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "playwright-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/playwright-scraper/.dockerignore b/packages/actor-scraper/playwright-scraper/.dockerignore index b8a10016..2424ba3f 100644 --- a/packages/actor-scraper/playwright-scraper/.dockerignore +++ b/packages/actor-scraper/playwright-scraper/.dockerignore @@ -10,4 +10,3 @@ storage node_modules # local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) -package-lock.json diff --git a/packages/actor-scraper/playwright-scraper/Dockerfile b/packages/actor-scraper/playwright-scraper/Dockerfile index 746a0d6d..34d22f22 100644 --- a/packages/actor-scraper/playwright-scraper/Dockerfile +++ b/packages/actor-scraper/playwright-scraper/Dockerfile @@ -1,31 +1,40 @@ +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. FROM apify/actor-node-playwright:22 AS builder -COPY --chown=myuser package*.json ./ +# The browser base runs as `myuser`; the build stage needs root for corepack + a writable workdir. +USER root +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable -COPY --chown=myuser . ./ +# Browsers ship with the base image; never let an npm postinstall download them. +# puppeteer is pulled transitively via @crawlee/browser-pool even for non-puppeteer actors. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 -RUN npm run build +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). +COPY . ./ -FROM apify/actor-node-playwright:22 +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-playwright-scraper... -COPY --from=builder --chown=myuser /home/myuser/dist ./dist +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-playwright-scraper... build -COPY --chown=myuser package*.json ./ +# Self-contained production bundle; inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm config set inject-workspace-packages true \ + && pnpm --filter actor-playwright-scraper deploy --prod /deploy -RUN npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +FROM apify/actor-node-playwright:22 -COPY --chown=myuser . ./ +# Base WORKDIR is /home/myuser and ships a template node_modules plus the Xvfb entrypoint. +# Drop the template's node_modules and overlay only the lean production bundle; the inherited +# ENTRYPOINT (xvfb-entrypoint.sh) still wraps CMD with Xvfb, and the bundled browser is reused. +RUN rm -rf node_modules +COPY --from=builder --chown=myuser /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/puppeteer-scraper/.actor/actor.json b/packages/actor-scraper/puppeteer-scraper/.actor/actor.json index befa39d2..d4e0190a 100644 --- a/packages/actor-scraper/puppeteer-scraper/.actor/actor.json +++ b/packages/actor-scraper/puppeteer-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "puppeteer-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/puppeteer-scraper/.dockerignore b/packages/actor-scraper/puppeteer-scraper/.dockerignore index b8a10016..2424ba3f 100644 --- a/packages/actor-scraper/puppeteer-scraper/.dockerignore +++ b/packages/actor-scraper/puppeteer-scraper/.dockerignore @@ -10,4 +10,3 @@ storage node_modules # local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) -package-lock.json diff --git a/packages/actor-scraper/puppeteer-scraper/Dockerfile b/packages/actor-scraper/puppeteer-scraper/Dockerfile index 8f126a23..a5c21026 100644 --- a/packages/actor-scraper/puppeteer-scraper/Dockerfile +++ b/packages/actor-scraper/puppeteer-scraper/Dockerfile @@ -1,31 +1,40 @@ +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. FROM apify/actor-node-puppeteer-chrome:22 AS builder -COPY --chown=myuser package*.json ./ +# The browser base runs as `myuser`; the build stage needs root for corepack + a writable workdir. +USER root +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable -COPY --chown=myuser . ./ +# Browsers ship with the base image; never let an npm postinstall download them. +# puppeteer is pulled transitively via @crawlee/browser-pool even for non-puppeteer actors. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 -RUN npm run build +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). +COPY . ./ -FROM apify/actor-node-puppeteer-chrome:22 +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-puppeteer-scraper... -COPY --from=builder --chown=myuser /home/myuser/dist ./dist +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-puppeteer-scraper... build -COPY --chown=myuser package*.json ./ +# Self-contained production bundle; inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm config set inject-workspace-packages true \ + && pnpm --filter actor-puppeteer-scraper deploy --prod /deploy -RUN npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +FROM apify/actor-node-puppeteer-chrome:22 -COPY --chown=myuser . ./ +# Base WORKDIR is /home/myuser and ships a template node_modules plus the Xvfb entrypoint. +# Drop the template's node_modules and overlay only the lean production bundle; the inherited +# ENTRYPOINT (xvfb-entrypoint.sh) still wraps CMD with Xvfb, and the bundled browser is reused. +RUN rm -rf node_modules +COPY --from=builder --chown=myuser /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/sitemap-scraper/.actor/actor.json b/packages/actor-scraper/sitemap-scraper/.actor/actor.json index a4918ed5..7102cd45 100644 --- a/packages/actor-scraper/sitemap-scraper/.actor/actor.json +++ b/packages/actor-scraper/sitemap-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "sitemap-extractor", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "output": "./output_schema.json", "defaultMemoryMbytes": 4096, "minMemoryMbytes": 256, diff --git a/packages/actor-scraper/sitemap-scraper/.dockerignore b/packages/actor-scraper/sitemap-scraper/.dockerignore index b8a10016..2424ba3f 100644 --- a/packages/actor-scraper/sitemap-scraper/.dockerignore +++ b/packages/actor-scraper/sitemap-scraper/.dockerignore @@ -10,4 +10,3 @@ storage node_modules # local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) -package-lock.json diff --git a/packages/actor-scraper/sitemap-scraper/Dockerfile b/packages/actor-scraper/sitemap-scraper/Dockerfile index 7a9a21d9..c458c157 100644 --- a/packages/actor-scraper/sitemap-scraper/Dockerfile +++ b/packages/actor-scraper/sitemap-scraper/Dockerfile @@ -1,32 +1,33 @@ +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. FROM apify/actor-node:22 AS builder -COPY package*.json ./ +WORKDIR /app -RUN npm install --include=dev --audit=false --force +RUN corepack enable +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). COPY . ./ -RUN npm run build +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter @apify/actor-sitemap-extractor... -FROM apify/actor-node:22 +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter @apify/actor-sitemap-extractor... build -COPY --from=builder /usr/src/app/dist ./dist +# Self-contained production bundle; inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm config set inject-workspace-packages true \ + && pnpm --filter @apify/actor-sitemap-extractor deploy --prod /deploy -COPY package*.json ./ +FROM apify/actor-node:22 -RUN rm -rf node_modules \ - && npm --quiet set progress=false \ - && npm install --omit=dev --force \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +WORKDIR /usr/src/app -COPY . ./ +# Replace the base image's template with only the lean production bundle. +RUN find /usr/src/app -mindepth 1 -delete +COPY --from=builder /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/packages/actor-scraper/web-scraper/.actor/actor.json b/packages/actor-scraper/web-scraper/.actor/actor.json index ac6aed72..f7fb9862 100644 --- a/packages/actor-scraper/web-scraper/.actor/actor.json +++ b/packages/actor-scraper/web-scraper/.actor/actor.json @@ -3,6 +3,8 @@ "name": "web-scraper", "version": "0.1", "buildTag": "latest", + "dockerContextDir": "../../../..", + "dockerfile": "../Dockerfile", "storages": { "dataset": { "actorSpecification": 1, diff --git a/packages/actor-scraper/web-scraper/.dockerignore b/packages/actor-scraper/web-scraper/.dockerignore index b8a10016..2424ba3f 100644 --- a/packages/actor-scraper/web-scraper/.dockerignore +++ b/packages/actor-scraper/web-scraper/.dockerignore @@ -10,4 +10,3 @@ storage node_modules # local npm lock is a workspace-link lock; it breaks the isolated build (the platform builds without it) -package-lock.json diff --git a/packages/actor-scraper/web-scraper/Dockerfile b/packages/actor-scraper/web-scraper/Dockerfile index 8f126a23..f20aa7b5 100644 --- a/packages/actor-scraper/web-scraper/Dockerfile +++ b/packages/actor-scraper/web-scraper/Dockerfile @@ -1,31 +1,40 @@ +# Build context is the monorepo root (set via dockerContextDir in .actor/actor.json), +# so the build can use the pnpm workspace lockfile for a deterministic install. FROM apify/actor-node-puppeteer-chrome:22 AS builder -COPY --chown=myuser package*.json ./ +# The browser base runs as `myuser`; the build stage needs root for corepack + a writable workdir. +USER root +WORKDIR /app -RUN npm install --include=dev --audit=false +RUN corepack enable -COPY --chown=myuser . ./ +# Browsers ship with the base image; never let an npm postinstall download them. +# puppeteer is pulled transitively via @crawlee/browser-pool even for non-puppeteer actors. +ENV PUPPETEER_SKIP_DOWNLOAD=true \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 -RUN npm run build +# Whole workspace (root .dockerignore keeps node_modules/.git/dist out of the context). +COPY . ./ -FROM apify/actor-node-puppeteer-chrome:22 +# Deterministic install (frozen lockfile, honors minimumReleaseAge) of the actor + its workspace deps. +RUN pnpm install --frozen-lockfile --filter actor-web-scraper... -COPY --from=builder --chown=myuser /home/myuser/dist ./dist +# Build the actor and its workspace dependency @apify/scraper-tools. +RUN pnpm --filter actor-web-scraper... build -COPY --chown=myuser package*.json ./ +# Self-contained production bundle; inject-workspace-packages copies the built +# @apify/scraper-tools (a runtime workspace dep) into node_modules instead of symlinking it. +RUN pnpm config set inject-workspace-packages true \ + && pnpm --filter actor-web-scraper deploy --prod /deploy -RUN npm --quiet set progress=false \ - && npm install --omit=dev --omit=optional \ - && echo "Installed NPM packages:" \ - && (npm list --omit=dev --all || true) \ - && echo "Node.js version:" \ - && node --version \ - && echo "NPM version:" \ - && npm --version \ - && rm -r ~/.npm +FROM apify/actor-node-puppeteer-chrome:22 -COPY --chown=myuser . ./ +# Base WORKDIR is /home/myuser and ships a template node_modules plus the Xvfb entrypoint. +# Drop the template's node_modules and overlay only the lean production bundle; the inherited +# ENTRYPOINT (xvfb-entrypoint.sh) still wraps CMD with Xvfb, and the bundled browser is reused. +RUN rm -rf node_modules +COPY --from=builder --chown=myuser /deploy ./ ENV APIFY_DISABLE_OUTDATED_WARNING=1 -CMD ./start_xvfb_and_run_cmd.sh && npm run start:prod --silent +CMD ["node", "dist/main.js"] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e47499bd..81cf3958 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: ^5.0.1 version: 5.0.1 '@playwright/browser-chromium': - specifier: ^1.46.0 - version: 1.59.1 + specifier: ^1.61.0 + version: 1.61.0 '@types/content-type': specifier: ^1.1.8 version: 1.1.9 @@ -61,7 +61,7 @@ importers: version: 20.5.0(@types/node@24.12.2)(conventional-commits-parser@6.4.0)(typescript@5.9.3) crawlee: specifier: ^3.16.0 - version: 3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0) fs-extra: specifier: ^11.2.0 version: 11.3.4 @@ -90,11 +90,11 @@ importers: specifier: 0.22.0 version: 0.22.0 playwright: - specifier: ^1.46.0 - version: 1.59.1 + specifier: ^1.61.0 + version: 1.61.0 puppeteer: - specifier: ^24.0.0 - version: 24.40.0(typescript@5.9.3) + specifier: ^25.1.0 + version: 25.1.0 rimraf: specifier: ^6.0.1 version: 6.1.3 @@ -124,7 +124,7 @@ importers: version: 3.16.0 '@crawlee/playwright': specifier: ^3.14.1 - version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0) '@crawlee/utils': specifier: ^3.14.1 version: 3.16.0 @@ -133,13 +133,13 @@ importers: version: 3.7.0 camoufox-js: specifier: ^0.9.0 - version: 0.9.3(playwright-core@1.59.1) + version: 0.9.3(playwright-core@1.61.0) idcac-playwright: specifier: ^0.2.0 version: 0.2.0 playwright: specifier: '*' - version: 1.59.1 + version: 1.61.0 devDependencies: '@apify/tsconfig': specifier: ^0.1.0 @@ -220,7 +220,7 @@ importers: version: 3.16.0 '@crawlee/playwright': specifier: ^3.16.0 - version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0) '@crawlee/utils': specifier: ^3.16.0 version: 3.16.0 @@ -232,7 +232,7 @@ importers: version: 0.2.0 playwright: specifier: '*' - version: 1.59.1 + version: 1.61.0 devDependencies: '@apify/tsconfig': specifier: ^0.1.0 @@ -254,7 +254,7 @@ importers: version: link:../../scraper-tools '@crawlee/puppeteer': specifier: ^3.16.0 - version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0) apify: specifier: ^3.2.6 version: 3.7.0 @@ -263,7 +263,7 @@ importers: version: 0.2.0 puppeteer: specifier: '*' - version: 24.40.0(typescript@5.9.3) + version: 25.1.0 devDependencies: '@apify/tsconfig': specifier: ^0.1.0 @@ -322,7 +322,7 @@ importers: version: link:../../scraper-tools '@crawlee/puppeteer': specifier: ^3.16.0 - version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0) apify: specifier: ^3.2.6 version: 3.7.0 @@ -331,7 +331,7 @@ importers: version: 1.0.5 crawlee: specifier: ^3.16.0 - version: 3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0) devtools-server: specifier: ^0.0.2 version: 0.0.2 @@ -340,7 +340,7 @@ importers: version: 0.2.0 puppeteer: specifier: '*' - version: 24.40.0(typescript@5.9.3) + version: 25.1.0 devDependencies: '@apify/tsconfig': specifier: ^0.1.0 @@ -375,7 +375,7 @@ importers: devDependencies: '@crawlee/browser-pool': specifier: ^3.8.2 - version: 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + version: 3.16.0(playwright@1.61.0)(puppeteer@25.1.0) '@crawlee/core': specifier: ^3.8.2 version: 3.16.0 @@ -428,12 +428,16 @@ packages: '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@asamuzakjp/css-color@5.1.10': - resolution: {integrity: sha512-02OhhkKtgNRuicQ/nF3TRnGsxL9wp0r3Y7VlKWyOHHGmGyvXv03y+PnymU8FKFJMTjIr1Bk8U2g1HWSLrpAHww==} + '@asamuzakjp/css-color@5.1.11': + resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/dom-selector@7.1.1': + resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@7.0.9': - resolution: {integrity: sha512-r3ElRr7y8ucyN2KdICwGsmj19RoN13CLCa/pvGydghWK6ZzeKQ+TcDjVdtEZz2ElpndM5jXw//B9CEee0mWnVg==} + '@asamuzakjp/generational-cache@1.0.1': + resolution: {integrity: sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/nwsapi@2.3.9': @@ -679,8 +683,8 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-calc@3.2.0': - resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==} + '@csstools/css-calc@3.2.1': + resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -693,8 +697,8 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-color-parser@4.1.0': - resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==} + '@csstools/css-color-parser@4.1.7': + resolution: {integrity: sha512-CmjJFQTFQx/U/xNJhSjCQ0ilpesPmNQ8+eOUeM/+kDOVW33qsIjeOXc27vrQDdWVkf83ZSWwtg7kXSUvKDJ8cQ==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -712,8 +716,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.3': - resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==} + '@csstools/css-syntax-patches-for-csstree@1.1.5': + resolution: {integrity: sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -893,8 +897,8 @@ packages: cpu: [x64] os: [win32] - '@exodus/bytes@1.15.0': - resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} + '@exodus/bytes@1.15.1': + resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -1571,150 +1575,155 @@ packages: cpu: [x64] os: [win32] - '@playwright/browser-chromium@1.59.1': - resolution: {integrity: sha512-XDwr0qOrzLXAuBAzg4WO/xctVMb+ldJ54yz9KCpFu8G8MVJzUVFO6BvK1tBtBl4DIoFcoFRKHgUGZT+8wOC8BQ==} + '@playwright/browser-chromium@1.61.0': + resolution: {integrity: sha512-bBGzN+jow5uQtYRDCnFv5cpyMjUYTF6WnsfRRrDXIwbaGDtdh0JdOPmlKdJH4OK7TbkrZ35cV7jhQ1zELoX5ew==} engines: {node: '>=18'} - '@puppeteer/browsers@2.13.0': - resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==} - engines: {node: '>=18'} + '@puppeteer/browsers@3.0.4': + resolution: {integrity: sha512-HGM8iAmGTf+Y7t0373szVbTmt3d7vPkYL/1bpOkOFO0YUYLgSeuYBCzESklogNPvOBnZ/MRD5f07OkpqH1trtA==} + engines: {node: '>=22.12.0'} hasBin: true + peerDependencies: + proxy-agent: '>=8.0.1' + peerDependenciesMeta: + proxy-agent: + optional: true - '@rollup/rollup-android-arm-eabi@4.60.1': - resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} + '@rollup/rollup-android-arm-eabi@4.62.0': + resolution: {integrity: sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.1': - resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} + '@rollup/rollup-android-arm64@4.62.0': + resolution: {integrity: sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.1': - resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} + '@rollup/rollup-darwin-arm64@4.62.0': + resolution: {integrity: sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.1': - resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} + '@rollup/rollup-darwin-x64@4.62.0': + resolution: {integrity: sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.1': - resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} + '@rollup/rollup-freebsd-arm64@4.62.0': + resolution: {integrity: sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.1': - resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} + '@rollup/rollup-freebsd-x64@4.62.0': + resolution: {integrity: sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': - resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} + '@rollup/rollup-linux-arm-gnueabihf@4.62.0': + resolution: {integrity: sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.60.1': - resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} + '@rollup/rollup-linux-arm-musleabihf@4.62.0': + resolution: {integrity: sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.1': - resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} + '@rollup/rollup-linux-arm64-gnu@4.62.0': + resolution: {integrity: sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.1': - resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} + '@rollup/rollup-linux-arm64-musl@4.62.0': + resolution: {integrity: sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.1': - resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} + '@rollup/rollup-linux-loong64-gnu@4.62.0': + resolution: {integrity: sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.60.1': - resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} + '@rollup/rollup-linux-loong64-musl@4.62.0': + resolution: {integrity: sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.60.1': - resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} + '@rollup/rollup-linux-ppc64-gnu@4.62.0': + resolution: {integrity: sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.60.1': - resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} + '@rollup/rollup-linux-ppc64-musl@4.62.0': + resolution: {integrity: sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.60.1': - resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} + '@rollup/rollup-linux-riscv64-gnu@4.62.0': + resolution: {integrity: sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.1': - resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} + '@rollup/rollup-linux-riscv64-musl@4.62.0': + resolution: {integrity: sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.60.1': - resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} + '@rollup/rollup-linux-s390x-gnu@4.62.0': + resolution: {integrity: sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.1': - resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} + '@rollup/rollup-linux-x64-gnu@4.62.0': + resolution: {integrity: sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.1': - resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} + '@rollup/rollup-linux-x64-musl@4.62.0': + resolution: {integrity: sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.1': - resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} + '@rollup/rollup-openbsd-x64@4.62.0': + resolution: {integrity: sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.1': - resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} + '@rollup/rollup-openharmony-arm64@4.62.0': + resolution: {integrity: sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.1': - resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} + '@rollup/rollup-win32-arm64-msvc@4.62.0': + resolution: {integrity: sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.1': - resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} + '@rollup/rollup-win32-ia32-msvc@4.62.0': + resolution: {integrity: sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.1': - resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} + '@rollup/rollup-win32-x64-gnu@4.62.0': + resolution: {integrity: sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.1': - resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} + '@rollup/rollup-win32-x64-msvc@4.62.0': + resolution: {integrity: sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==} cpu: [x64] os: [win32] @@ -1858,6 +1867,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -1891,9 +1903,6 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@vitest/expect@4.1.4': resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} @@ -2055,14 +2064,6 @@ packages: axios@1.15.0: resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} - b4a@1.8.0: - resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} - peerDependencies: - react-native-b4a: '*' - peerDependenciesMeta: - react-native-b4a: - optional: true - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2070,47 +2071,6 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} - peerDependencies: - bare-abort-controller: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - - bare-fs@4.7.0: - resolution: {integrity: sha512-xzqKsCFxAek9aezYhjJuJRXBIaYlg/0OGDTZp+T8eYmYMlm66cs6cYko02drIyjN2CBbi+I6L7YfXyqpqtKRXA==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.8.7: - resolution: {integrity: sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.13.0: - resolution: {integrity: sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==} - peerDependencies: - bare-abort-controller: '*' - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.4.0: - resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2169,9 +2129,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2273,8 +2230,9 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - chromium-bidi@14.0.0: - resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==} + chromium-bidi@16.0.1: + resolution: {integrity: sha512-J63PGu/9PpeCwLIcKYyzWP6yaVL5pxuBc0shlYCYM8BaAkmlwiQboXO1iNbOgSDbVklEyYFfNEcHD8oOAWacUA==} + engines: {node: '>=20.19.0 <22.0.0 || >=22.12.0'} peerDependencies: devtools-protocol: '*' @@ -2621,12 +2579,12 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - devtools-protocol@0.0.1581282: - resolution: {integrity: sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==} - devtools-protocol@0.0.1612613: resolution: {integrity: sha512-hp32aOyalF3vGZiTPA3CiKCgpIH7QOj+S0dRVMmEReagtmWQYigiCQWp7OGWrgaW2IHNlSzCwfDneZe16DlBCQ==} + devtools-protocol@0.0.1624250: + resolution: {integrity: sha512-YFAat/lOiIk0ARmBweG+ygrEcbZrq5B9urRyUoeQKp53MlidHXE2TmTbxKcaXoQj7u/aX+jebDO4BW55rs0WwA==} + devtools-server@0.0.2: resolution: {integrity: sha512-ZHfQVaJelu0dwEYf26jyppuDwpC0oyOkqzoGEnHhSa4mC0Y3WiWAxsMTBzDao/iLd15+0XlYCJxLilK2uALjvQ==} @@ -2713,6 +2671,10 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2794,9 +2756,6 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} - execa@5.0.0: resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==} engines: {node: '>=10'} @@ -2812,11 +2771,6 @@ packages: exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - 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==} @@ -2824,9 +2778,6 @@ packages: resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} engines: {node: '>=6.0.0'} - 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'} @@ -2837,9 +2788,6 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2987,10 +2935,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - get-stream@6.0.0: resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==} engines: {node: '>=10'} @@ -3622,6 +3566,10 @@ packages: resolution: {integrity: sha512-tNcU3cLH7toloAzhOOrBDhjzgbxpyuYvkf+BPPnnJCdc5EIcdJ8JcT+SglvCQKKyZ6m9dVXtCVlJcA6csxKdEA==} engines: {node: ^20.17.0 || >=22.9.0} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -3713,6 +3661,10 @@ packages: resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} engines: {node: 20 || >=22} + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} + engines: {node: 20 || >=22} + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -3904,6 +3856,10 @@ packages: resolution: {integrity: sha512-7e87vk0DdWT647wjcfEtWeMtjm+zVGqNohN/aeIymbUfjHQ2T4Sx5kM+1irVDBSloNC3CkGKxswdMoo8yhqTDg==} engines: {node: '>=10', npm: '>=6'} + modern-tar@0.7.6: + resolution: {integrity: sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==} + engines: {node: '>=18.0.0'} + modify-values@1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} engines: {node: '>=0.10.0'} @@ -3927,6 +3883,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} @@ -4245,8 +4206,8 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} @@ -4281,9 +4242,6 @@ packages: pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -4307,13 +4265,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.59.1: - resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} + playwright-core@1.61.0: + resolution: {integrity: sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==} engines: {node: '>=18'} hasBin: true - playwright@1.59.1: - resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} + playwright@1.61.0: + resolution: {integrity: sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==} engines: {node: '>=18'} hasBin: true @@ -4321,8 +4279,8 @@ packages: resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} - postcss@8.5.9: - resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} prebuild-install@7.1.3: @@ -4354,10 +4312,6 @@ packages: resolution: {integrity: sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q==} engines: {node: ^18.17.0 || >=20.5.0} - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - promise-all-reject-late@1.0.1: resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} @@ -4400,13 +4354,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.40.0: - resolution: {integrity: sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==} - engines: {node: '>=18'} + puppeteer-core@25.1.0: + resolution: {integrity: sha512-jKzy5y4WG6uNuFbTWgW1D7mqoT9o0nllc/6a1DGF775T1mPmgw3scdFEtEq67yVFikavQmbYq6NLfbTfxHSlqQ==} + engines: {node: '>=22.12.0'} - puppeteer@24.40.0: - resolution: {integrity: sha512-IxQbDq93XHVVLWHrAkFP7F7iHvb9o0mgfsSIMlhHb+JM+JjM1V4v4MNSQfcRWJopx9dsNOr9adYv0U5fm9BJBQ==} - engines: {node: '>=18'} + puppeteer@25.1.0: + resolution: {integrity: sha512-7L6/0JM7XStK99lIL4xQySyNEXNfII6pk0BxkI5kKBTOhR7AsoQiv067YTsE/rIXxQiq9ajlO4WcqBjS/FWK1A==} + engines: {node: '>=22.12.0'} hasBin: true queue-microtask@1.2.3: @@ -4552,8 +4506,8 @@ packages: resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==} engines: {node: '>=10.0.0'} - rollup@4.60.1: - resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} + rollup@4.62.0: + resolution: {integrity: sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4737,9 +4691,6 @@ packages: stream-json@1.9.1: resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} - streamx@2.25.0: - resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} - string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4824,26 +4775,14 @@ packages: tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.1.2: - resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar-stream@3.1.8: - resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} - tar@7.5.11: resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} engines: {node: '>=18'} - teex@1.0.1: - resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - - text-decoder@1.2.7: - resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} - text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -4880,6 +4819,10 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} @@ -5003,8 +4946,8 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typed-query-selector@2.12.1: - resolution: {integrity: sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==} + typed-query-selector@2.12.2: + resolution: {integrity: sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==} typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -5040,6 +4983,10 @@ packages: resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==} engines: {node: '>=20.18.1'} + undici@7.28.0: + resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + engines: {node: '>=20.18.1'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -5178,8 +5125,8 @@ packages: web-worker@1.5.0: resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} - webdriver-bidi-protocol@0.4.1: - resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} + webdriver-bidi-protocol@0.4.2: + resolution: {integrity: sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==} webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -5271,6 +5218,18 @@ packages: utf-8-validate: optional: true + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + 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 + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -5325,9 +5284,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -5389,20 +5345,24 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 - '@asamuzakjp/css-color@5.1.10': + '@asamuzakjp/css-color@5.1.11': dependencies: - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@asamuzakjp/generational-cache': 1.0.1 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.7(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@asamuzakjp/dom-selector@7.0.9': + '@asamuzakjp/dom-selector@7.1.1': dependencies: + '@asamuzakjp/generational-cache': 1.0.1 '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 + '@asamuzakjp/generational-cache@1.0.1': {} + '@asamuzakjp/nwsapi@2.3.9': {} '@babel/code-frame@7.29.0': @@ -5576,14 +5536,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@crawlee/browser-pool@3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3))': + '@crawlee/browser-pool@3.16.0(playwright@1.61.0)(puppeteer@25.1.0)': dependencies: '@apify/log': 2.5.34 '@apify/timeout': 0.3.2 '@crawlee/core': 3.16.0 '@crawlee/types': 3.16.0 fingerprint-generator: 2.1.82 - fingerprint-injector: 2.1.82(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + fingerprint-injector: 2.1.82(playwright@1.61.0)(puppeteer@25.1.0) lodash.merge: 4.6.2 nanoid: 3.3.11 ow: 0.28.2 @@ -5593,24 +5553,24 @@ snapshots: tiny-typed-emitter: 2.1.0 tslib: 2.8.1 optionalDependencies: - playwright: 1.59.1 - puppeteer: 24.40.0(typescript@5.9.3) + playwright: 1.61.0 + puppeteer: 25.1.0 transitivePeerDependencies: - supports-color - '@crawlee/browser@3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3))': + '@crawlee/browser@3.16.0(playwright@1.61.0)(puppeteer@25.1.0)': dependencies: '@apify/timeout': 0.3.2 '@crawlee/basic': 3.16.0 - '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/browser-pool': 3.16.0(playwright@1.61.0)(puppeteer@25.1.0) '@crawlee/types': 3.16.0 '@crawlee/utils': 3.16.0 ow: 0.28.2 tslib: 2.8.1 type-fest: 4.41.0 optionalDependencies: - playwright: 1.59.1 - puppeteer: 24.40.0(typescript@5.9.3) + playwright: 1.61.0 + puppeteer: 25.1.0 transitivePeerDependencies: - supports-color @@ -5803,13 +5763,13 @@ snapshots: proper-lockfile: 4.1.2 tslib: 2.8.1 - '@crawlee/playwright@3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3))': + '@crawlee/playwright@3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0)': dependencies: '@apify/datastructures': 2.0.3 '@apify/log': 2.5.34 '@apify/timeout': 0.3.2 - '@crawlee/browser': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) - '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/browser': 3.16.0(playwright@1.61.0)(puppeteer@25.1.0) + '@crawlee/browser-pool': 3.16.0(playwright@1.61.0)(puppeteer@25.1.0) '@crawlee/core': 3.16.0 '@crawlee/types': 3.16.0 '@crawlee/utils': 3.16.0 @@ -5823,17 +5783,17 @@ snapshots: tslib: 2.8.1 optionalDependencies: idcac-playwright: 0.2.0 - playwright: 1.59.1 + playwright: 1.61.0 transitivePeerDependencies: - puppeteer - supports-color - '@crawlee/puppeteer@3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3))': + '@crawlee/puppeteer@3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0)': dependencies: '@apify/datastructures': 2.0.3 '@apify/log': 2.5.34 - '@crawlee/browser': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) - '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/browser': 3.16.0(playwright@1.61.0)(puppeteer@25.1.0) + '@crawlee/browser-pool': 3.16.0(playwright@1.61.0)(puppeteer@25.1.0) '@crawlee/types': 3.16.0 '@crawlee/utils': 3.16.0 cheerio: 1.0.0-rc.12 @@ -5843,7 +5803,7 @@ snapshots: tslib: 2.8.1 optionalDependencies: idcac-playwright: 0.2.0 - puppeteer: 24.40.0(typescript@5.9.3) + puppeteer: 25.1.0 transitivePeerDependencies: - playwright - supports-color @@ -5910,7 +5870,7 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -5922,10 +5882,10 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.1.7(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/color-helpers': 6.0.2 - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -5937,7 +5897,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.5(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -6036,7 +5996,7 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@exodus/bytes@1.15.0': {} + '@exodus/bytes@1.15.1': {} '@gar/promise-retry@1.0.3': {} @@ -6599,98 +6559,88 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.62.0': optional: true - '@playwright/browser-chromium@1.59.1': + '@playwright/browser-chromium@1.61.0': dependencies: - playwright-core: 1.59.1 + playwright-core: 1.61.0 - '@puppeteer/browsers@2.13.0': + '@puppeteer/browsers@3.0.4': dependencies: - debug: 4.4.3 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.7.4 - tar-fs: 3.1.2 + modern-tar: 0.7.6 yargs: 17.7.2 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - '@rollup/rollup-android-arm-eabi@4.60.1': + '@rollup/rollup-android-arm-eabi@4.62.0': optional: true - '@rollup/rollup-android-arm64@4.60.1': + '@rollup/rollup-android-arm64@4.62.0': optional: true - '@rollup/rollup-darwin-arm64@4.60.1': + '@rollup/rollup-darwin-arm64@4.62.0': optional: true - '@rollup/rollup-darwin-x64@4.60.1': + '@rollup/rollup-darwin-x64@4.62.0': optional: true - '@rollup/rollup-freebsd-arm64@4.60.1': + '@rollup/rollup-freebsd-arm64@4.62.0': optional: true - '@rollup/rollup-freebsd-x64@4.60.1': + '@rollup/rollup-freebsd-x64@4.62.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + '@rollup/rollup-linux-arm-gnueabihf@4.62.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.1': + '@rollup/rollup-linux-arm-musleabihf@4.62.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.1': + '@rollup/rollup-linux-arm64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.1': + '@rollup/rollup-linux-arm64-musl@4.62.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.1': + '@rollup/rollup-linux-loong64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.1': + '@rollup/rollup-linux-loong64-musl@4.62.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.1': + '@rollup/rollup-linux-ppc64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.1': + '@rollup/rollup-linux-ppc64-musl@4.62.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.1': + '@rollup/rollup-linux-riscv64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.1': + '@rollup/rollup-linux-riscv64-musl@4.62.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.1': + '@rollup/rollup-linux-s390x-gnu@4.62.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.1': + '@rollup/rollup-linux-x64-gnu@4.62.0': optional: true - '@rollup/rollup-linux-x64-musl@4.60.1': + '@rollup/rollup-linux-x64-musl@4.62.0': optional: true - '@rollup/rollup-openbsd-x64@4.60.1': + '@rollup/rollup-openbsd-x64@4.62.0': optional: true - '@rollup/rollup-openharmony-arm64@4.60.1': + '@rollup/rollup-openharmony-arm64@4.62.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.1': + '@rollup/rollup-win32-arm64-msvc@4.62.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.1': + '@rollup/rollup-win32-ia32-msvc@4.62.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.1': + '@rollup/rollup-win32-x64-gnu@4.62.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.1': + '@rollup/rollup-win32-x64-msvc@4.62.0': optional: true '@sapphire/async-queue@1.5.5': {} @@ -6818,6 +6768,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 @@ -6855,11 +6807,6 @@ snapshots: dependencies: '@types/node': 24.12.2 - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 24.12.2 - optional: true - '@vitest/expect@4.1.4': dependencies: '@standard-schema/spec': 1.1.0 @@ -7067,44 +7014,10 @@ snapshots: transitivePeerDependencies: - debug - b4a@1.8.0: {} - balanced-match@1.0.2: {} balanced-match@4.0.4: {} - bare-events@2.8.2: {} - - bare-fs@4.7.0: - dependencies: - bare-events: 2.8.2 - bare-path: 3.0.0 - bare-stream: 2.13.0(bare-events@2.8.2) - bare-url: 2.4.0 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - bare-os@3.8.7: {} - - bare-path@3.0.0: - dependencies: - bare-os: 3.8.7 - - bare-stream@2.13.0(bare-events@2.8.2): - dependencies: - streamx: 2.25.0 - teex: 1.0.1 - optionalDependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - react-native-b4a - - bare-url@2.4.0: - dependencies: - bare-path: 3.0.0 - base64-js@1.5.1: {} baseline-browser-mapping@2.10.18: {} @@ -7169,8 +7082,6 @@ snapshots: node-releases: 2.0.37 update-browserslist-db: 1.2.3(browserslist@4.28.2) - buffer-crc32@0.2.13: {} - buffer-from@1.1.2: {} buffer@5.7.1: @@ -7236,7 +7147,7 @@ snapshots: camelcase@5.3.1: {} - camoufox-js@0.9.3(playwright-core@1.59.1): + camoufox-js@0.9.3(playwright-core@1.61.0): dependencies: adm-zip: 0.5.17 better-sqlite3: 12.9.0 @@ -7247,7 +7158,7 @@ snapshots: impit: 0.11.0 language-tags: 2.1.0 maxmind: 5.0.6 - playwright-core: 1.59.1 + playwright-core: 1.61.0 pretty-bytes: 7.1.0 ua-parser-js: 2.0.9 xml2js: 0.6.2 @@ -7313,9 +7224,9 @@ snapshots: chownr@3.0.0: {} - chromium-bidi@14.0.0(devtools-protocol@0.0.1581282): + chromium-bidi@16.0.1(devtools-protocol@0.0.1624250): dependencies: - devtools-protocol: 0.0.1581282 + devtools-protocol: 0.0.1624250 mitt: 3.0.1 zod: 3.25.76 @@ -7515,26 +7426,26 @@ snapshots: optionalDependencies: typescript: 5.9.3 - crawlee@3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)): + crawlee@3.16.0(@types/node@24.12.2)(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0): dependencies: '@crawlee/basic': 3.16.0 - '@crawlee/browser': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) - '@crawlee/browser-pool': 3.16.0(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/browser': 3.16.0(playwright@1.61.0)(puppeteer@25.1.0) + '@crawlee/browser-pool': 3.16.0(playwright@1.61.0)(puppeteer@25.1.0) '@crawlee/cheerio': 3.16.0 '@crawlee/cli': 3.16.0(@types/node@24.12.2) '@crawlee/core': 3.16.0 '@crawlee/http': 3.16.0 '@crawlee/jsdom': 3.16.0 '@crawlee/linkedom': 3.16.0 - '@crawlee/playwright': 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) - '@crawlee/puppeteer': 3.16.0(idcac-playwright@0.2.0)(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)) + '@crawlee/playwright': 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0) + '@crawlee/puppeteer': 3.16.0(idcac-playwright@0.2.0)(playwright@1.61.0)(puppeteer@25.1.0) '@crawlee/utils': 3.16.0 import-local: 3.2.0 tslib: 2.8.1 optionalDependencies: idcac-playwright: 0.2.0 - playwright: 1.59.1 - puppeteer: 24.40.0(typescript@5.9.3) + playwright: 1.61.0 + puppeteer: 25.1.0 transitivePeerDependencies: - '@types/node' - bufferutil @@ -7657,10 +7568,10 @@ snapshots: detect-node@2.1.0: {} - devtools-protocol@0.0.1581282: {} - devtools-protocol@0.0.1612613: {} + devtools-protocol@0.0.1624250: {} + devtools-server@0.0.2: dependencies: async-retry: 1.3.3 @@ -7750,6 +7661,8 @@ snapshots: entities@7.0.1: {} + entities@8.0.0: {} + env-paths@2.2.1: {} envinfo@7.13.0: {} @@ -7844,12 +7757,6 @@ snapshots: eventemitter3@5.0.4: {} - events-universal@1.0.1: - dependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - execa@5.0.0: dependencies: cross-spawn: 7.0.6 @@ -7868,22 +7775,10 @@ snapshots: exponential-backoff@3.1.3: {} - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - 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-equals@5.4.0: {} - fast-fifo@1.3.2: {} - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7898,10 +7793,6 @@ snapshots: dependencies: reusify: 1.1.0 - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -7955,13 +7846,13 @@ snapshots: header-generator: 2.1.82 tslib: 2.8.1 - fingerprint-injector@2.1.82(playwright@1.59.1)(puppeteer@24.40.0(typescript@5.9.3)): + fingerprint-injector@2.1.82(playwright@1.61.0)(puppeteer@25.1.0): dependencies: fingerprint-generator: 2.1.82 tslib: 2.8.1 optionalDependencies: - playwright: 1.59.1 - puppeteer: 24.40.0(typescript@5.9.3) + playwright: 1.61.0 + puppeteer: 25.1.0 flat@5.0.2: {} @@ -8048,10 +7939,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@5.2.0: - dependencies: - pump: 3.0.4 - get-stream@6.0.0: {} get-stream@9.0.1: @@ -8242,7 +8129,7 @@ snapshots: html-encoding-sniffer@6.0.0: dependencies: - '@exodus/bytes': 1.15.0 + '@exodus/bytes': 1.15.1 transitivePeerDependencies: - '@noble/hashes' @@ -8614,7 +8501,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.20.0 + ws: 8.21.0 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -8623,22 +8510,22 @@ snapshots: jsdom@29.0.2: dependencies: - '@asamuzakjp/css-color': 5.1.10 - '@asamuzakjp/dom-selector': 7.0.9 + '@asamuzakjp/css-color': 5.1.11 + '@asamuzakjp/dom-selector': 7.1.1 '@bramus/specificity': 2.4.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) - '@exodus/bytes': 1.15.0 + '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1) + '@exodus/bytes': 1.15.1 css-tree: 3.2.1 data-urls: 7.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.3.5 - parse5: 8.0.0 + lru-cache: 11.5.1 + parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.1 - undici: 7.24.8 + undici: 7.28.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -8785,6 +8672,8 @@ snapshots: transitivePeerDependencies: - supports-color + lilconfig@3.1.3: {} + lines-and-columns@1.2.4: {} lines-and-columns@2.0.3: {} @@ -8877,6 +8766,8 @@ snapshots: lru-cache@11.3.5: {} + lru-cache@11.5.1: {} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -9089,6 +8980,8 @@ snapshots: mmdb-lib@3.0.2: {} + modern-tar@0.7.6: {} + modify-values@1.0.1: {} ms@2.1.3: {} @@ -9101,6 +8994,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.12: {} + napi-build-utils@2.0.0: {} negotiator@1.0.0: {} @@ -9589,9 +9484,9 @@ snapshots: dependencies: entities: 6.0.1 - parse5@8.0.0: + parse5@8.0.1: dependencies: - entities: 6.0.1 + entities: 8.0.0 path-exists@3.0.0: {} @@ -9618,8 +9513,6 @@ snapshots: dependencies: through: 2.3.8 - pend@1.2.0: {} - picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -9634,11 +9527,11 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.59.1: {} + playwright-core@1.61.0: {} - playwright@1.59.1: + playwright@1.61.0: dependencies: - playwright-core: 1.59.1 + playwright-core: 1.61.0 optionalDependencies: fsevents: 2.3.2 @@ -9647,9 +9540,9 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.9: + postcss@8.5.15: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -9684,8 +9577,6 @@ snapshots: proggy@3.0.0: {} - progress@2.0.3: {} - promise-all-reject-late@1.0.1: {} promise-call-limit@3.0.2: {} @@ -9739,38 +9630,30 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.40.0: + puppeteer-core@25.1.0: dependencies: - '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) - debug: 4.4.3 - devtools-protocol: 0.0.1581282 - typed-query-selector: 2.12.1 - webdriver-bidi-protocol: 0.4.1 - ws: 8.20.0 + '@puppeteer/browsers': 3.0.4 + chromium-bidi: 16.0.1(devtools-protocol@0.0.1624250) + devtools-protocol: 0.0.1624250 + typed-query-selector: 2.12.2 + webdriver-bidi-protocol: 0.4.2 + ws: 8.21.0 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - - react-native-b4a - - supports-color + - proxy-agent - utf-8-validate - puppeteer@24.40.0(typescript@5.9.3): + puppeteer@25.1.0: dependencies: - '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) - cosmiconfig: 9.0.1(typescript@5.9.3) - devtools-protocol: 0.0.1581282 - puppeteer-core: 24.40.0 - typed-query-selector: 2.12.1 + '@puppeteer/browsers': 3.0.4 + chromium-bidi: 16.0.1(devtools-protocol@0.0.1624250) + devtools-protocol: 0.0.1624250 + lilconfig: 3.1.3 + puppeteer-core: 25.1.0 + typed-query-selector: 2.12.2 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - - react-native-b4a - - supports-color - - typescript + - proxy-agent - utf-8-validate queue-microtask@1.2.3: {} @@ -9910,35 +9793,35 @@ snapshots: robots-parser@3.0.1: {} - rollup@4.60.1: + rollup@4.62.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.1 - '@rollup/rollup-android-arm64': 4.60.1 - '@rollup/rollup-darwin-arm64': 4.60.1 - '@rollup/rollup-darwin-x64': 4.60.1 - '@rollup/rollup-freebsd-arm64': 4.60.1 - '@rollup/rollup-freebsd-x64': 4.60.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 - '@rollup/rollup-linux-arm-musleabihf': 4.60.1 - '@rollup/rollup-linux-arm64-gnu': 4.60.1 - '@rollup/rollup-linux-arm64-musl': 4.60.1 - '@rollup/rollup-linux-loong64-gnu': 4.60.1 - '@rollup/rollup-linux-loong64-musl': 4.60.1 - '@rollup/rollup-linux-ppc64-gnu': 4.60.1 - '@rollup/rollup-linux-ppc64-musl': 4.60.1 - '@rollup/rollup-linux-riscv64-gnu': 4.60.1 - '@rollup/rollup-linux-riscv64-musl': 4.60.1 - '@rollup/rollup-linux-s390x-gnu': 4.60.1 - '@rollup/rollup-linux-x64-gnu': 4.60.1 - '@rollup/rollup-linux-x64-musl': 4.60.1 - '@rollup/rollup-openbsd-x64': 4.60.1 - '@rollup/rollup-openharmony-arm64': 4.60.1 - '@rollup/rollup-win32-arm64-msvc': 4.60.1 - '@rollup/rollup-win32-ia32-msvc': 4.60.1 - '@rollup/rollup-win32-x64-gnu': 4.60.1 - '@rollup/rollup-win32-x64-msvc': 4.60.1 + '@rollup/rollup-android-arm-eabi': 4.62.0 + '@rollup/rollup-android-arm64': 4.62.0 + '@rollup/rollup-darwin-arm64': 4.62.0 + '@rollup/rollup-darwin-x64': 4.62.0 + '@rollup/rollup-freebsd-arm64': 4.62.0 + '@rollup/rollup-freebsd-x64': 4.62.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.0 + '@rollup/rollup-linux-arm-musleabihf': 4.62.0 + '@rollup/rollup-linux-arm64-gnu': 4.62.0 + '@rollup/rollup-linux-arm64-musl': 4.62.0 + '@rollup/rollup-linux-loong64-gnu': 4.62.0 + '@rollup/rollup-linux-loong64-musl': 4.62.0 + '@rollup/rollup-linux-ppc64-gnu': 4.62.0 + '@rollup/rollup-linux-ppc64-musl': 4.62.0 + '@rollup/rollup-linux-riscv64-gnu': 4.62.0 + '@rollup/rollup-linux-riscv64-musl': 4.62.0 + '@rollup/rollup-linux-s390x-gnu': 4.62.0 + '@rollup/rollup-linux-x64-gnu': 4.62.0 + '@rollup/rollup-linux-x64-musl': 4.62.0 + '@rollup/rollup-openbsd-x64': 4.62.0 + '@rollup/rollup-openharmony-arm64': 4.62.0 + '@rollup/rollup-win32-arm64-msvc': 4.62.0 + '@rollup/rollup-win32-ia32-msvc': 4.62.0 + '@rollup/rollup-win32-x64-gnu': 4.62.0 + '@rollup/rollup-win32-x64-msvc': 4.62.0 fsevents: 2.3.3 rrweb-cssom@0.8.0: {} @@ -10110,15 +9993,6 @@ snapshots: dependencies: stream-chain: 2.2.5 - streamx@2.25.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.7 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - string-argv@0.3.2: {} string-comparison@1.3.0: {} @@ -10199,18 +10073,6 @@ snapshots: pump: 3.0.4 tar-stream: 2.2.0 - tar-fs@3.1.2: - dependencies: - pump: 3.0.4 - tar-stream: 3.1.8 - optionalDependencies: - bare-fs: 4.7.0 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -10219,17 +10081,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar-stream@3.1.8: - dependencies: - b4a: 1.8.0 - bare-fs: 4.7.0 - fast-fifo: 1.3.2 - streamx: 2.25.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar@7.5.11: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -10238,19 +10089,6 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - teex@1.0.1: - dependencies: - streamx: 2.25.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - text-decoder@1.2.7: - dependencies: - b4a: 1.8.0 - transitivePeerDependencies: - - react-native-b4a - text-extensions@1.9.0: {} through2@2.0.5: @@ -10282,6 +10120,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinypool@2.1.0: {} tinyrainbow@3.1.0: {} @@ -10386,7 +10229,7 @@ snapshots: type-fest@4.41.0: {} - typed-query-selector@2.12.1: {} + typed-query-selector@2.12.2: {} typedarray@0.0.6: {} @@ -10411,6 +10254,8 @@ snapshots: undici@7.24.8: {} + undici@7.28.0: {} + unicorn-magic@0.3.0: {} universal-user-agent@6.0.1: {} @@ -10455,9 +10300,9 @@ snapshots: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.9 - rollup: 4.60.1 - tinyglobby: 0.2.16 + postcss: 8.5.15 + rollup: 4.62.0 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 24.12.2 fsevents: 2.3.3 @@ -10505,7 +10350,7 @@ snapshots: web-worker@1.5.0: {} - webdriver-bidi-protocol@0.4.1: {} + webdriver-bidi-protocol@0.4.2: {} webidl-conversions@7.0.0: {} @@ -10526,7 +10371,7 @@ snapshots: whatwg-url@16.0.1: dependencies: - '@exodus/bytes': 1.15.0 + '@exodus/bytes': 1.15.1 tr46: 6.0.0 webidl-conversions: 8.0.1 transitivePeerDependencies: @@ -10587,6 +10432,8 @@ snapshots: ws@8.20.0: {} + ws@8.21.0: {} + xml-name-validator@5.0.0: {} xml2js@0.6.2: @@ -10638,11 +10485,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 - yocto-queue@0.1.0: {} yocto-queue@1.2.2: {}