diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index ed5b432dd87b..fb6a84d4b088 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -19,10 +19,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- - name: Use Node.js 20
+ - name: Use Node.js 22
uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 22
- name: Enable corepack
run: |
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 45c454a6d856..7a018c3d25a7 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -33,7 +33,7 @@ jobs:
matrix:
# We don't test on Windows as the tests are flaky
os: [ ubuntu-22.04 ]
- node-version: [ 16, 18, 20, 22 ]
+ node-version: [ 22, 24 ]
runs-on: ${{ matrix.os }}
@@ -94,17 +94,17 @@ jobs:
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
fetch-depth: 0
- - name: Use Node.js 20
+ - name: Use Node.js 22
uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 22
- name: Enable corepack
run: |
corepack enable
corepack prepare yarn@stable --activate
- - name: Activate cache for Node.js 20
+ - name: Activate cache for Node.js 22
uses: actions/setup-node@v4
with:
cache: 'yarn'
@@ -183,10 +183,10 @@ jobs:
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
fetch-depth: 0
- - name: Use Node.js 20
+ - name: Use Node.js 22
uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 22
- name: Install jq
run: sudo apt-get install jq
@@ -196,7 +196,7 @@ jobs:
corepack enable
corepack prepare yarn@stable --activate
- - name: Activate cache for Node.js 20
+ - name: Activate cache for Node.js 22
uses: actions/setup-node@v4
with:
cache: 'yarn'
diff --git a/.github/workflows/test-ci.yml b/.github/workflows/test-ci.yml
index 68a3b39e1a37..a70ceee4b41f 100644
--- a/.github/workflows/test-ci.yml
+++ b/.github/workflows/test-ci.yml
@@ -2,9 +2,9 @@ name: Check
on:
push:
- branches: [ master, renovate/** ]
+ branches: [ master, v4, renovate/** ]
pull_request:
- branches: [ master ]
+ branches: [ master, v4 ]
env:
YARN_IGNORE_NODE: 1
@@ -23,7 +23,7 @@ jobs:
# tests on windows are extremely unstable
# os: [ ubuntu-22.04, windows-2019 ]
os: [ ubuntu-22.04 ]
- node-version: [ 16, 18, 20, 22 ]
+ node-version: [ 22, 24 ]
steps:
- name: Cancel Workflow Action
@@ -88,17 +88,17 @@ jobs:
- name: Checkout Source code
uses: actions/checkout@v4
- - name: Use Node.js 20
+ - name: Use Node.js 22
uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 22
- name: Enable corepack
run: |
corepack enable
corepack prepare yarn@stable --activate
- - name: Activate cache for Node.js 20
+ - name: Activate cache for Node.js 22
uses: actions/setup-node@v4
with:
cache: 'yarn'
@@ -132,17 +132,17 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- - name: Use Node.js 20
+ - name: Use Node.js 22
uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 22
- name: Enable corepack
run: |
corepack enable
corepack prepare yarn@stable --activate
- - name: Activate cache for Node.js 20
+ - name: Activate cache for Node.js 22
uses: actions/setup-node@v4
with:
cache: 'yarn'
@@ -167,7 +167,7 @@ jobs:
release_next:
name: Release @next
- if: github.event_name == 'push' && contains(github.event.ref, 'master') && (!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, 'docs:'))
+ if: github.event_name == 'push' && contains(github.event.ref, 'v4') && (!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, 'docs:'))
needs: build_and_test
runs-on: ubuntu-22.04
@@ -175,17 +175,17 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- - name: Use Node.js 20
+ - name: Use Node.js 22
uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 22
- name: Enable corepack
run: |
corepack enable
corepack prepare yarn@stable --activate
- - name: Activate cache for Node.js 20
+ - name: Activate cache for Node.js 22
uses: actions/setup-node@v4
with:
cache: 'yarn'
@@ -219,7 +219,7 @@ jobs:
run: |
git config --global user.name 'Apify Release Bot'
git config --global user.email 'noreply@apify.com'
- yarn turbo copy --force -- --canary --preid=beta
+ yarn turbo copy --force -- --canary=major --preid=beta
git commit -am "chore: bump canary versions [skip ci]"
echo "access=public" > .npmrc
@@ -230,22 +230,22 @@ jobs:
GIT_USER: 'noreply@apify.com:${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}'
GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
- - name: Collect versions for Docker images
- id: versions
- run: |
- crawlee=`node -p "require('./packages/crawlee/package.json').version"`
- echo "crawlee=$crawlee" >> $GITHUB_OUTPUT
-
- - name: Trigger Docker image builds
- uses: peter-evans/repository-dispatch@v3
- # Trigger next images only if we have something new pushed
- if: steps.changed-packages.outputs.changed_packages != '0'
- with:
- token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
- repository: apify/apify-actor-docker
- event-type: build-node-images
- client-payload: >
- {
- "crawlee_version": "${{ steps.versions.outputs.crawlee }}",
- "release_tag": "beta"
- }
+# - name: Collect versions for Docker images
+# id: versions
+# run: |
+# crawlee=`node -p "require('./packages/crawlee/package.json').version"`
+# echo "crawlee=$crawlee" >> $GITHUB_OUTPUT
+#
+# - name: Trigger Docker image builds
+# uses: peter-evans/repository-dispatch@v3
+# # Trigger next images only if we have something new pushed
+# if: steps.changed-packages.outputs.changed_packages != '0'
+# with:
+# token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
+# repository: apify/apify-actor-docker
+# event-type: build-node-images
+# client-payload: >
+# {
+# "crawlee_version": "${{ steps.versions.outputs.crawlee }}",
+# "release_tag": "beta"
+# }
diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml
index 34429940fbd1..83a59b3ee6ba 100644
--- a/.github/workflows/test-e2e.yml
+++ b/.github/workflows/test-e2e.yml
@@ -29,17 +29,17 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- - name: Use Node.js 20
+ - name: Use Node.js 22
uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 22
- name: Enable corepack
run: |
corepack enable
corepack prepare yarn@stable --activate
- - name: Activate cache for Node.js 20
+ - name: Activate cache for Node.js 22
uses: actions/setup-node@v4
with:
cache: 'yarn'
diff --git a/docs/experiments/systemInfoV2.mdx b/docs/experiments/systemInfoV2.mdx
deleted file mode 100644
index 93f8f27e1afe..000000000000
--- a/docs/experiments/systemInfoV2.mdx
+++ /dev/null
@@ -1,95 +0,0 @@
----
-id: experiments-system-infomation-v2
-title: System Infomation V2
-description: Improved autoscaling through cgroup aware metric collection.
----
-
-import ApiLink from '@site/src/components/ApiLink';
-
-:::caution
-
-This is an experimental feature. While we welcome testers, keep in mind that it is currently not recommended to use this in production.
-
-The API is subject to change, and we might introduce breaking changes in the future.
-
-Should you be using this, feel free to open issues on our [GitHub repository](https://github.com/apify/crawlee), and we'll take a look.
-
-:::
-
-Starting with the newest `crawlee` beta, we have introduced a new crawler option that enables an improved metric collection system.
-This new system should collect cpu and memory metrics more accurately in containerised environments by checking for cgroup enforce limits.
-
-## How to enable the experiment
-
-:::note
-
-This example shows how to enable the experiment in the `CheerioCrawler`,
-but you can apply this to any crawler type.
-
-:::
-
-```ts
-import { CheerioCrawler, Configuration } from 'crawlee';
-
-Configuration.set('systemInfoV2', true);
-
-const crawler = new CheerioCrawler({
- async requestHandler({ $, request }) {
- const title = $('title').text();
- console.log(`The title of "${request.url}" is: ${title}.`);
- },
-});
-
-await crawler.run(['https://crawlee.dev']);
-```
-
-## Other changes
-
-:::info
-
-This section is only useful if you're a tinkerer and want to see what's going on under the hood.
-
-:::
-
-The existing solution checked the bare metal metrics for how much cpu and memory was being used and how much headroom was available.
-This is an intuitive solution but unfortunately doesnt account for when there is an external limit on the amount of resources a process can consume.
-This is often the case in containerized environments where each container will have a quota for its cpu and memory usage.
-
-This experiment attempts to address this issue by introducing a new `isContainerized()` utility function and changing the way resources are collected
-when a container is detected.
-
-:::note
-
-This `isContainerized()` function is very similar to the existing `isDocker()` function however for now they both work side by side.
-If this experiment is successful, eventualy `isDocker()` may eventually be depreciated in favour of `isContainerized()`.
-
-:::
-
-### Cgroup detection
-
-On linux, to detect if cgroup is available, we check if there is a directory at `/sys/fs/cgroup`.
-If the directory exists, a version of cgroup is installed.
-Next we check the version of cgroup installed by checking for a directory at `/sys/fs/cgroup/memory/`.
-If it exists, cgroup V1 is installed. If it is missing, it is assumed cgroup V2 is installed.
-
-### CPU metric collection
-
-The existing solution worked by checking the fraction of cpu idle ticks to the total number of cpu ticks since the last profile.
-If 100000 ticks elapse and 5000 were idle, the cpu is at 95% utilisation.
-
-In this experiment, the method of cpu load calculation depends on the result of `isContainerized()` or if set, the `CRAWLEE_CONTAINERIZED` environment variable.
-If `isContainerized()` returns true, the new cgroup aware metric collection will be used over the "bare metal" numbers.
-This works by inspecting the `/sys/fs/cgroup/cpuacct/cpuacct.usage`, `/sys/fs/cgroup/cpu/cpu.cfs_quota_us` and `/sys/fs/cgroup/cpu/cpu.cfs_period_us`
-files for cgroup V1 and the `/sys/fs/cgroup/cpu.stat` and `/sys/fs/cgroup/cpu.max` files for cgroup V2.
-The actual cpu usage figure is calculated in the same manner as the "bare metal" figure by comparing the total number of ticks elapsed to the number
-of idle ticks between profiles but by using the figures from the cgroup files.
-If no cgroup quota is enforced, the "bare metal" numbers will be used.
-
-### Memory metric collection
-
-The existing solution was already cgroup aware however an improvement has been made to memory metric collection when running on windows.
-The existing solution used an external package `apify/ps-tree` to find the amount of memory crawlee and any child processes were using.
-On Windows, this package used the depreciated "WMIC" command line utility to determine memory usage.
-
-In this experiment, `apify/ps-tree` has been removed and replaced by the `packages/utils/src/internals/ps-tree.ts` file. This works in much the
-same manner however, instead of using "WMIC", it uses "powershell" to collect the same data.
\ No newline at end of file
diff --git a/docs/guides/configuration.mdx b/docs/guides/configuration.mdx
index 597c3dcc2fa4..22ce4ec2e583 100644
--- a/docs/guides/configuration.mdx
+++ b/docs/guides/configuration.mdx
@@ -94,7 +94,6 @@ Storage directories are purged by default. If set to `false` - local storage dir
#### `CRAWLEE_CONTAINERIZED`
-This variable is only effective when the systemInfoV2 experiment is enabled.
Changes how crawlee measures its CPU and Memory usage and limits. If unset, crawlee will determine if it is containerised using common features of containerized environments using the `isContainerized` utility function.
- A file at `/.dockerenv`.
- A file at `/proc/self/cgroup` containing `docker`.
diff --git a/docs/upgrading/upgrading_v4.md b/docs/upgrading/upgrading_v4.md
new file mode 100644
index 000000000000..56f5277523b8
--- /dev/null
+++ b/docs/upgrading/upgrading_v4.md
@@ -0,0 +1,53 @@
+---
+id: upgrading-to-v4
+title: Upgrading to v4
+---
+
+import ApiLink from '@site/src/components/ApiLink';
+
+This page summarizes most of the breaking changes in Crawlee v4.
+
+## ECMAScript modules
+
+Crawlee v4 is a native ESM package now. It can be still consumed from a CJS project, as long as you use TypeScript and Node.js version that supports `require(esm)`.
+
+## Node 22+ required
+
+Support for older node versions was dropped.
+
+## TypeScript 5.8+ required
+
+Support for older TypeScript versions was dropped. Older versions might work too, but only if your project is also ESM.
+
+## Cheerio v1
+
+Previously, we kept the dependency on cheerio locked to the latest RC version, since there were many breaking changes introduced in v1.0. This release bumps cheerio to the stable v1. Also, we now use the default `parse5` internally.
+
+## Deprecated crawler options are removed
+
+The crawler following options are removed:
+
+- `handleRequestFunction` -> `requestHandler`
+- `handlePageFunction` -> `requestHandler`
+- `handleRequestTimeoutSecs` -> `requestHandlerTimeoutSecs`
+- `handleFailedRequestFunction` -> `failedRequestHandler`
+
+## Crawling context no longer includes Error for failed requests
+
+The crawling context no longer includes the `Error` object for failed requests. Use the second parameter of the `errorHandler` or `failedRequestHandler` callbacks to access the error.
+
+## Crawling context is strictly typed
+
+Previously, the crawling context extended a `Record` type, allowing to access any property. This was changed to a strict type, which means that you can only access properties that are defined in the context.
+
+## `additionalBlockedStatusCodes` parameter is removed
+
+`additionalBlockedStatusCodes` parameter of `Session.retireOnBlockedStatusCodes` method is removed. Use the `blockedStatusCodes` crawler option instead.
+
+## Remove `experimentalContainers` option
+
+This experimental option relied on an outdated manifest version for browser extensions, it is not possible to achieve this with the currently supported versions.
+
+## Available resource detection
+
+In v3, we introduced a new way to detect available resources for the crawler, available via `systemInfoV2` flag. In v4, this is the default way to detect available resources. The old way is removed completely together with the `systemInfoV2` flag.
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 2092da6a7312..1034e74cb54a 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -1,5 +1,6 @@
import tsEslint from 'typescript-eslint';
import tsStylistic from '@stylistic/eslint-plugin-ts';
+import apifyJs from '@apify/eslint-config/js';
import apify from '@apify/eslint-config/ts';
import prettier from 'eslint-config-prettier';
@@ -78,4 +79,13 @@ export default [
'no-undef': 'off',
},
},
+ // {
+ // files: ['test/**/*'],
+ // rules: {
+ // ...apifyJs.rules,
+ // '@typescript-eslint/no-floating-promises': 'off',
+ // 'no-console': 'off',
+ // 'no-undef': 'off',
+ // },
+ // },
];
diff --git a/package.json b/package.json
index 44ddf351119f..2544898c4ce3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,7 @@
{
"name": "@crawlee/root",
"private": true,
+ "type": "module",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"workspaces": [
"packages/*"
@@ -43,85 +44,82 @@
"test:full": "cross-env CRAWLEE_DIFFICULT_TESTS=1 vitest run --silent",
"tsc-check-tests": "tsc --noEmit --project test/tsconfig.json",
"coverage": "vitest --coverage",
- "publish:next": "lerna publish from-package --contents dist --dist-tag next --force-publish",
+ "publish:next": "lerna publish from-package --contents dist --dist-tag v4 --force-publish",
"release:next": "yarn build && yarn publish:next",
"publish:prod": "lerna publish from-package --contents dist --force-publish",
"release:prod": "yarn build && yarn publish:prod",
"release:pin-versions": "turbo run copy -- -- --pin-versions",
"lint": "eslint \"packages/**/*.ts\" \"test/**/*.ts\"",
- "lint:fix": "eslint \"packages/**/*.ts\" \"test/**/*.ts\" --fix",
+ "lint:fix": "eslint \"packages/**/*.ts\" \"test/**/*.{ts,mjs}\" --fix",
"format": "biome format --write .",
"format:check": "biome format .",
"prepare": "husky"
},
"devDependencies": {
"@apify/eslint-config": "^1.0.0",
- "@apify/log": "^2.4.0",
- "@apify/tsconfig": "^0.1.0",
- "@biomejs/biome": "^1.7.3",
- "@commitlint/config-conventional": "^19.0.0",
+ "@apify/log": "^2.5.18",
+ "@apify/tsconfig": "^0.1.1",
+ "@biomejs/biome": "^1.9.4",
+ "@commitlint/config-conventional": "^19.8.0",
"@playwright/browser-chromium": "1.52.0",
"@playwright/browser-firefox": "1.52.0",
"@playwright/browser-webkit": "1.52.0",
"@stylistic/eslint-plugin-ts": "^4.2.0",
- "@types/content-type": "^1.1.5",
- "@types/deep-equal": "^1.0.1",
- "@types/domhandler": "^2.4.2",
- "@types/express": "^4.17.13",
- "@types/fs-extra": "^11.0.0",
- "@types/inquirer": "^8.2.1",
- "@types/is-ci": "^3.0.1",
+ "@types/content-type": "^1.1.8",
+ "@types/deep-equal": "^1.0.4",
+ "@types/domhandler": "^3.1.0",
+ "@types/express": "^5.0.1",
+ "@types/fs-extra": "^11.0.4",
+ "@types/inquirer": "^9.0.8",
+ "@types/is-ci": "^3.0.4",
"@types/lodash.isequal": "^4.5.8",
- "@types/lodash.merge": "^4.6.7",
- "@types/mime-types": "^2.1.1",
- "@types/node": "^22.5.1",
- "@types/proper-lockfile": "^4.1.2",
- "@types/ps-tree": "^1.1.2",
- "@types/rimraf": "^4.0.0",
- "@types/sax": "^1.0.0",
- "@types/semver": "^7.3.12",
- "@types/stream-json": "^1.7.2",
- "@types/yargs": "^17.0.26",
- "@vitest/coverage-v8": "^3.0.0",
+ "@types/lodash.merge": "^4.6.9",
+ "@types/mime-types": "^2.1.4",
+ "@types/node": "^22.15.14",
+ "@types/proper-lockfile": "^4.1.4",
+ "@types/ps-tree": "^1.1.6",
+ "@types/rimraf": "^4.0.5",
+ "@types/sax": "^1.2.7",
+ "@types/semver": "^7.7.0",
+ "@types/stream-json": "^1.7.8",
+ "@types/whatwg-mimetype": "^3.0.2",
+ "@types/yargs": "^17.0.33",
+ "@vitest/coverage-v8": "^3.1.3",
"apify": "*",
- "apify-node-curl-impersonate": "^1.0.15",
+ "apify-node-curl-impersonate": "^1.0.23",
"basic-auth-parser": "^0.0.2",
- "body-parser": "^2.0.0",
- "camoufox-js": "^0.3.0",
- "commitlint": "^19.0.0",
+ "body-parser": "^2.2.0",
+ "camoufox-js": "^0.3.5",
+ "commitlint": "^19.8.0",
"cross-env": "^7.0.3",
- "deep-equal": "^2.0.5",
- "eslint": "^9.23.0",
- "eslint-config-prettier": "^10.1.1",
- "express": "^4.18.1",
- "fs-extra": "^11.0.0",
- "gen-esm-wrapper": "^1.1.3",
- "globals": "^16.0.0",
- "globby": "^14.0.0",
- "got": "^13.0.0",
- "husky": "^9.0.11",
- "is-ci": "^4.0.0",
- "lerna": "^8.0.0",
- "lint-staged": "^15.0.0",
- "nock": "^13.4.0",
- "playwright": "1.51.1",
+ "deep-equal": "^2.2.3",
+ "eslint": "^9.26.0",
+ "eslint-config-prettier": "^10.1.3",
+ "express": "^5.1.0",
+ "fs-extra": "^11.3.0",
+ "globals": "^16.1.0",
+ "globby": "^14.1.0",
+ "got": "^14.4.7",
+ "husky": "^9.1.7",
+ "is-ci": "^4.1.0",
+ "lerna": "^8.2.2",
+ "lint-staged": "^15.5.2",
+ "nock": "^13.5.6",
+ "playwright": "1.52.0",
"portastic": "^1.0.1",
- "proxy": "^1.0.2",
- "puppeteer": "24.6.1",
- "rimraf": "^6.0.0",
- "tsx": "^4.4.0",
- "turbo": "^2.1.0",
- "typescript": "^5.7.3",
- "typescript-eslint": "^8.28.0",
- "vite-tsconfig-paths": "^4.3.2",
- "vitest": "^3.0.0"
+ "proxy": "^2.2.0",
+ "puppeteer": "24.8.2",
+ "rimraf": "^6.0.1",
+ "tsx": "^4.19.4",
+ "turbo": "^2.5.3",
+ "typescript": "^5.8.3",
+ "typescript-eslint": "^8.32.0",
+ "vite-tsconfig-paths": "^5.1.4",
+ "vitest": "^3.1.3"
},
- "packageManager": "yarn@4.8.1",
+ "packageManager": "yarn@4.9.1",
"volta": {
"node": "22.14.0",
- "yarn": "4.8.1"
- },
- "resolutions": {
- "vite": "5.4.11"
+ "yarn": "4.9.1"
}
}
diff --git a/packages/basic-crawler/package.json b/packages/basic-crawler/package.json
index 5bbb1ea55dc8..bc36bca06352 100644
--- a/packages/basic-crawler/package.json
+++ b/packages/basic-crawler/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"author": {
@@ -38,25 +32,25 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/log": "^2.4.0",
- "@apify/timeout": "^0.3.0",
- "@apify/utilities": "^2.7.10",
+ "@apify/log": "^2.5.18",
+ "@apify/timeout": "^0.3.2",
+ "@apify/utilities": "^2.15.5",
"@crawlee/core": "3.13.3",
"@crawlee/types": "3.13.3",
"@crawlee/utils": "3.13.3",
- "csv-stringify": "^6.2.0",
- "fs-extra": "^11.0.0",
- "got-scraping": "^4.0.0",
- "ow": "^0.28.1",
- "tldts": "^6.0.0",
- "tslib": "^2.4.0",
- "type-fest": "^4.0.0"
+ "csv-stringify": "^6.5.2",
+ "fs-extra": "^11.3.0",
+ "got-scraping": "^4.1.1",
+ "ow": "^2.0.0",
+ "tldts": "^7.0.6",
+ "tslib": "^2.8.1",
+ "type-fest": "^4.41.0"
}
}
diff --git a/packages/basic-crawler/src/index.ts b/packages/basic-crawler/src/index.ts
index f774a1f3196a..b3a794835de8 100644
--- a/packages/basic-crawler/src/index.ts
+++ b/packages/basic-crawler/src/index.ts
@@ -1,3 +1,3 @@
export * from '@crawlee/core';
-export * from './internals/basic-crawler';
-export * from './internals/constants';
+export * from './internals/basic-crawler.js';
+export * from './internals/constants.js';
diff --git a/packages/basic-crawler/src/internals/basic-crawler.ts b/packages/basic-crawler/src/internals/basic-crawler.ts
index 1d84656b4f4f..c493eef72f3d 100644
--- a/packages/basic-crawler/src/internals/basic-crawler.ts
+++ b/packages/basic-crawler/src/internals/basic-crawler.ts
@@ -1,3 +1,4 @@
+import { writeFile } from 'node:fs/promises';
import { dirname } from 'node:path';
import type {
@@ -53,8 +54,8 @@ import {
import type { Awaitable, BatchAddRequestsResult, Dictionary, SetStatusMessageOptions } from '@crawlee/types';
import { RobotsTxtFile, ROTATE_PROXY_ERRORS } from '@crawlee/utils';
import { stringify } from 'csv-stringify/sync';
-import { ensureDir, writeFile, writeJSON } from 'fs-extra';
-import ow, { ArgumentError } from 'ow';
+import { ensureDir, writeJSON } from 'fs-extra/esm';
+import ow from 'ow';
import { getDomain } from 'tldts';
import type { SetRequired } from 'type-fest';
@@ -64,7 +65,7 @@ import defaultLog, { LogLevel } from '@apify/log';
import { addTimeoutToPromise, TimeoutError, tryCancel } from '@apify/timeout';
import { cryptoRandomObjectId } from '@apify/utilities';
-import { createSendRequest } from './send-request';
+import { createSendRequest } from './send-request.js';
export interface BasicCrawlingContext
extends CrawlingContext {
@@ -146,29 +147,7 @@ export interface BasicCrawlerOptions>;
-
- /**
- * User-provided function that performs the logic of the crawler. It is called for each URL to crawl.
- *
- * The function receives the {@apilink BasicCrawlingContext} as an argument,
- * where the {@apilink BasicCrawlingContext.request|`request`} represents the URL to crawl.
- *
- * The function must return a promise, which is then awaited by the crawler.
- *
- * If the function throws an exception, the crawler will try to re-crawl the
- * request later, up to the {@apilink BasicCrawlerOptions.maxRequestRetries|`maxRequestRetries`} times.
- * If all the retries fail, the crawler calls the function
- * provided to the {@apilink BasicCrawlerOptions.failedRequestHandler|`failedRequestHandler`} parameter.
- * To make this work, we should **always**
- * let our function throw exceptions rather than catch them.
- * The exceptions are logged to the request using the
- * {@apilink Request.pushErrorMessage|`Request.pushErrorMessage()`} function.
- *
- * @deprecated `handleRequestFunction` has been renamed to `requestHandler` and will be removed in a future version.
- * @ignore
- */
- handleRequestFunction?: RequestHandler;
+ requestHandler?: RequestHandler;
/**
* Static list of URLs to be processed.
@@ -192,14 +171,6 @@ export interface BasicCrawlerOptions;
- /**
- * A function to handle requests that failed more than {@apilink BasicCrawlerOptions.maxRequestRetries|`maxRequestRetries`} times.
- *
- * The function receives the {@apilink BasicCrawlingContext} as the first argument,
- * where the {@apilink BasicCrawlingContext.request|`request`} corresponds to the failed request.
- * Second argument is the `Error` instance that
- * represents the last error thrown during processing of the request.
- *
- * @deprecated `handleFailedRequestFunction` has been renamed to `failedRequestHandler` and will be removed in a future version.
- * @ignore
- */
- handleFailedRequestFunction?: ErrorHandler;
-
/**
* Specifies the maximum number of retries allowed for a request if its processing fails.
* This includes retries due to navigation errors or errors thrown from user-supplied functions
@@ -541,15 +499,9 @@ export class BasicCrawler (val == null ? null : +val);
// allow at least 5min for internal timeouts
this.internalTimeoutMillis =
@@ -1429,11 +1337,18 @@ export class BasicCrawler this._runRequestHandler(crawlingContext),
- this.requestHandlerTimeoutMillis,
- `requestHandler timed out after ${this.requestHandlerTimeoutMillis / 1000} seconds (${request.id}).`,
- );
+
+ // Only wrap in timeout if requestHandlerTimeoutMillis > 0
+ if (this.requestHandlerTimeoutMillis > 0) {
+ await addTimeoutToPromise(
+ async () => this._runRequestHandler(crawlingContext),
+ this.requestHandlerTimeoutMillis,
+ `Request handler safety timed out after ${this.requestHandlerTimeoutMillis / 1000} seconds (${request.id}).`,
+ );
+ } else {
+ // No timeout wrapper - run directly
+ await this._runRequestHandler(crawlingContext);
+ }
await this._timeoutAndRetry(
async () => source.markRequestHandled(request!),
@@ -1576,9 +1491,7 @@ export class BasicCrawler
- this.errorHandler?.(this._augmentContextWithDeprecatedError(crawlingContext, error), error),
- );
+ await this.errorHandler?.(crawlingContext as LoadedContext, error);
if (error instanceof SessionError) {
await this._rotateSession(crawlingContext);
@@ -1640,9 +1553,7 @@ export class BasicCrawler
- this.failedRequestHandler?.(this._augmentContextWithDeprecatedError(crawlingContext, error), error),
- );
+ await this.failedRequestHandler?.(crawlingContext as LoadedContext, error);
}
}
@@ -1690,21 +1601,6 @@ export class BasicCrawler {
- this.log.deprecated(
- "The 'error' property of the crawling context is deprecated, and it is now passed as the second parameter in 'errorHandler' and 'failedRequestHandler'. Please update your code, as this property will be removed in a future version.",
- );
-
- return error;
- },
- configurable: true,
- });
-
- return context as LoadedContext;
- }
-
/**
* Updates handledRequestsCount from possibly stored counts,
* usually after worker migration. Since one of the stores
@@ -1750,43 +1646,6 @@ export class BasicCrawler({
- newProperty,
- newName,
- oldProperty,
- oldName,
- propertyKey,
- allowUndefined = false,
- }: HandlePropertyNameChangeData) {
- if (newProperty && oldProperty) {
- this.log.warning(
- [
- `Both "${newName}" and "${oldName}" were provided in the crawler options.`,
- `"${oldName}" has been renamed to "${newName}", and will be removed in a future version.`,
- `As such, "${newName}" will be used instead.`,
- ].join('\n'),
- );
-
- // @ts-expect-error Assigning to possibly readonly properties
- this[propertyKey] = newProperty;
- } else if (oldProperty) {
- this.log.warning(
- [
- `"${oldName}" has been renamed to "${newName}", and will be removed in a future version.`,
- `The provided value will be used, but you should rename "${oldName}" to "${newName}" in your crawler options.`,
- ].join('\n'),
- );
-
- // @ts-expect-error Assigning to possibly readonly properties
- this[propertyKey] = oldProperty;
- } else if (newProperty) {
- // @ts-expect-error Assigning to possibly readonly properties
- this[propertyKey] = newProperty;
- } else if (!allowUndefined) {
- throw new ArgumentError(`"${newName}" must be provided in the crawler options`, this.constructor);
- }
- }
-
protected _getCookieHeaderFromRequest(request: Request) {
if (request.headers?.Cookie && request.headers?.cookie) {
this.log.warning(
@@ -1878,15 +1737,6 @@ export interface CrawlerRunOptions extends CrawlerAddRequestsOptions {
purgeRequestQueue?: boolean;
}
-interface HandlePropertyNameChangeData {
- oldProperty?: Old;
- newProperty?: New;
- oldName: string;
- newName: string;
- propertyKey: string;
- allowUndefined?: boolean;
-}
-
/**
* Creates new {@apilink Router} instance that works based on request labels.
* This instance can then serve as a {@apilink BasicCrawlerOptions.requestHandler|`requestHandler`} of our {@apilink BasicCrawler}.
diff --git a/packages/basic-crawler/src/internals/send-request.ts b/packages/basic-crawler/src/internals/send-request.ts
index 2e678e0e7025..263089a6c8de 100644
--- a/packages/basic-crawler/src/internals/send-request.ts
+++ b/packages/basic-crawler/src/internals/send-request.ts
@@ -5,8 +5,7 @@ import {
type Request,
type Session,
} from '@crawlee/core';
-// @ts-expect-error This throws a compilation error due to got-scraping being ESM only but we only import types, so its alllll gooooood
-import type { GotResponse, Method } from 'got-scraping';
+import type { Method, Response as GotResponse } from 'got-scraping';
/**
* Prepares a function to be used as the `sendRequest` context helper.
@@ -49,6 +48,6 @@ export function createSendRequest(
// Fill in body as the last step - `processHttpRequestOptions` may use either `body`, `json` or `form` so we cannot override it beforehand
requestOptions.body ??= originRequest.payload;
- return httpClient.sendRequest(requestOptions);
+ return httpClient.sendRequest(requestOptions) as unknown as GotResponse;
};
}
diff --git a/packages/basic-crawler/test/batch-add-requests.test.ts b/packages/basic-crawler/test/batch-add-requests.test.ts
index 45433cdffc9c..a8628283b0e7 100644
--- a/packages/basic-crawler/test/batch-add-requests.test.ts
+++ b/packages/basic-crawler/test/batch-add-requests.test.ts
@@ -1,6 +1,6 @@
import { BasicCrawler } from '@crawlee/basic';
-import { MemoryStorageEmulator } from '../../../test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from '../../../test/shared/MemoryStorageEmulator.js';
describe('BasicCrawler#addRequests with big batch sizes', () => {
const localStorageEmulator = new MemoryStorageEmulator();
diff --git a/packages/basic-crawler/test/migration.test.ts b/packages/basic-crawler/test/migration.test.ts
deleted file mode 100644
index 44cb946350ab..000000000000
--- a/packages/basic-crawler/test/migration.test.ts
+++ /dev/null
@@ -1,227 +0,0 @@
-import type { Log } from '@apify/log';
-import log from '@apify/log';
-
-import { MemoryStorageEmulator } from '../../../test/shared/MemoryStorageEmulator';
-import { BasicCrawler, RequestList } from '../src/index';
-
-const localStorageEmulator = new MemoryStorageEmulator();
-
-beforeEach(async () => {
- await localStorageEmulator.init();
-});
-
-afterAll(async () => {
- await localStorageEmulator.destroy();
-});
-
-describe('Moving from handleRequest* to requestHandler*', () => {
- let requestList: RequestList;
- let testLogger: Log;
-
- beforeEach(async () => {
- requestList = await RequestList.open(null, []);
- testLogger = log.child({ prefix: 'BasicCrawler' });
- });
-
- describe('handleRequestFunction -> requestHandler', () => {
- it('should log when providing both handleRequestFunction and requestHandler', () => {
- const oldHandler = () => {};
- const newHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: newHandler,
- handleRequestFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `Both "requestHandler" and "handleRequestFunction" were provided in the crawler options.`,
- `"handleRequestFunction" has been renamed to "requestHandler", and will be removed in a future version.`,
- `As such, "requestHandler" will be used instead.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandler']).toBe(newHandler);
- });
-
- it('should log when providing only the deprecated handleRequestFunction', () => {
- const oldHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- handleRequestFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `"handleRequestFunction" has been renamed to "requestHandler", and will be removed in a future version.`,
- `The provided value will be used, but you should rename "handleRequestFunction" to "requestHandler" in your crawler options.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandler']).toBe(oldHandler);
- });
-
- it('should not log when providing only requestHandler', () => {
- const handler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: handler,
- });
-
- expect(warningSpy).not.toHaveBeenCalled();
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandler']).toBe(handler);
- });
- });
-
- describe('handleFailedRequestFunction -> failedRequestHandler', () => {
- it('should log when providing both handleFailedRequestFunction and failedRequestHandler', () => {
- const oldHandler = () => {};
- const newHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- failedRequestHandler: newHandler,
- handleFailedRequestFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `Both "failedRequestHandler" and "handleFailedRequestFunction" were provided in the crawler options.`,
- `"handleFailedRequestFunction" has been renamed to "failedRequestHandler", and will be removed in a future version.`,
- `As such, "failedRequestHandler" will be used instead.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(newHandler);
- });
-
- it('should log when providing only the deprecated handleFailedRequestFunction', () => {
- const oldHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- handleFailedRequestFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `"handleFailedRequestFunction" has been renamed to "failedRequestHandler", and will be removed in a future version.`,
- `The provided value will be used, but you should rename "handleFailedRequestFunction" to "failedRequestHandler" in your crawler options.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(oldHandler);
- });
-
- it('should not log when providing only failedRequestHandler', () => {
- const handler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- failedRequestHandler: handler,
- });
-
- expect(warningSpy).not.toHaveBeenCalled();
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(handler);
- });
- });
-
- describe('handleRequestTimeoutSecs -> requestHandlerTimeoutSecs', () => {
- it('should log when providing both handleRequestTimeoutSecs and requestHandlerTimeoutSecs', () => {
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- requestHandlerTimeoutSecs: 420,
- handleRequestTimeoutSecs: 69,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `Both "requestHandlerTimeoutSecs" and "handleRequestTimeoutSecs" were provided in the crawler options.`,
- `"handleRequestTimeoutSecs" has been renamed to "requestHandlerTimeoutSecs", and will be removed in a future version.`,
- `As such, "requestHandlerTimeoutSecs" will be used instead.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandlerTimeoutMillis']).toEqual(420_000);
- });
-
- it('should log when providing only the deprecated handleRequestTimeoutSecs', () => {
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- handleRequestTimeoutSecs: 69,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `"handleRequestTimeoutSecs" has been renamed to "requestHandlerTimeoutSecs", and will be removed in a future version.`,
- `The provided value will be used, but you should rename "handleRequestTimeoutSecs" to "requestHandlerTimeoutSecs" in your crawler options.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandlerTimeoutMillis']).toEqual(69_000);
- });
-
- it('should not log when providing some or no number to requestHandlerTimeoutSecs', () => {
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- });
-
- expect(warningSpy).not.toHaveBeenCalled();
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandlerTimeoutMillis']).toBe(60_000);
-
- const crawler2 = new BasicCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- requestHandlerTimeoutSecs: 420,
- });
-
- expect(warningSpy).not.toHaveBeenCalled();
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler2['requestHandlerTimeoutMillis']).toBe(420_000);
- });
- });
-});
diff --git a/packages/browser-crawler/package.json b/packages/browser-crawler/package.json
index 909fba3f8412..b806bb81402d 100644
--- a/packages/browser-crawler/package.json
+++ b/packages/browser-crawler/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,21 +40,21 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/timeout": "^0.3.0",
+ "@apify/timeout": "^0.3.2",
"@crawlee/basic": "3.13.3",
"@crawlee/browser-pool": "3.13.3",
"@crawlee/types": "3.13.3",
"@crawlee/utils": "3.13.3",
- "ow": "^0.28.1",
- "tslib": "^2.4.0",
- "type-fest": "^4.0.0"
+ "ow": "^2.0.0",
+ "tslib": "^2.8.1",
+ "type-fest": "^4.41.0"
},
"peerDependencies": {
"playwright": "*",
diff --git a/packages/browser-crawler/src/index.ts b/packages/browser-crawler/src/index.ts
index d160506aadbc..0a1e8f2f4841 100644
--- a/packages/browser-crawler/src/index.ts
+++ b/packages/browser-crawler/src/index.ts
@@ -1,3 +1,3 @@
export * from '@crawlee/basic';
-export * from './internals/browser-crawler';
-export * from './internals/browser-launcher';
+export * from './internals/browser-crawler.js';
+export * from './internals/browser-launcher.js';
diff --git a/packages/browser-crawler/src/internals/browser-crawler.ts b/packages/browser-crawler/src/internals/browser-crawler.ts
index a0eb8ca9f751..f94eaca668a2 100644
--- a/packages/browser-crawler/src/internals/browser-crawler.ts
+++ b/packages/browser-crawler/src/internals/browser-crawler.ts
@@ -14,7 +14,7 @@ import type {
SkippedRequestCallback,
} from '@crawlee/basic';
import {
- BASIC_CRAWLER_TIMEOUT_BUFFER_SECS,
+ // BASIC_CRAWLER_TIMEOUT_BUFFER_SECS,
BasicCrawler,
BLOCKED_STATUS_CODES as DEFAULT_BLOCKED_STATUS_CODES,
Configuration,
@@ -46,7 +46,7 @@ import type { ReadonlyDeep } from 'type-fest';
import { addTimeoutToPromise, tryCancel } from '@apify/timeout';
-import type { BrowserLaunchContext } from './browser-launcher';
+import type { BrowserLaunchContext } from './browser-launcher.js';
export interface BrowserCrawlingContext<
Crawler = unknown,
@@ -80,11 +80,7 @@ export interface BrowserCrawlerOptions<
> extends Omit<
BasicCrawlerOptions,
// Overridden with browser context
- | 'requestHandler'
- | 'handleRequestFunction'
- | 'failedRequestHandler'
- | 'handleFailedRequestFunction'
- | 'errorHandler'
+ 'requestHandler' | 'failedRequestHandler' | 'errorHandler'
> {
launchContext?: BrowserLaunchContext;
@@ -115,39 +111,7 @@ export interface BrowserCrawlerOptions<
* The exceptions are logged to the request using the
* {@apilink Request.pushErrorMessage|`Request.pushErrorMessage()`} function.
*/
- requestHandler?: BrowserRequestHandler>;
-
- /**
- * Function that is called to process each request.
- *
- * The function receives the {@apilink BrowserCrawlingContext}
- * (actual context will be enhanced with the crawler specific properties) as an argument, where:
- * - {@apilink BrowserCrawlingContext.request|`request`} is an instance of the {@apilink Request} object
- * with details about the URL to open, HTTP method etc;
- * - {@apilink BrowserCrawlingContext.page|`page`} is an instance of the
- * Puppeteer [Page](https://pptr.dev/api/puppeteer.page) or
- * Playwright [Page](https://playwright.dev/docs/api/class-page);
- * - {@apilink BrowserCrawlingContext.browserController|`browserController`} is an instance of the {@apilink BrowserController};
- * - {@apilink BrowserCrawlingContext.response|`response`} is an instance of the
- * Puppeteer [Response](https://pptr.dev/api/puppeteer.httpresponse) or
- * Playwright [Response](https://playwright.dev/docs/api/class-response),
- * which is the main resource response as returned by the respective `page.goto()` function.
- *
- * The function must return a promise, which is then awaited by the crawler.
- *
- * If the function throws an exception, the crawler will try to re-crawl the
- * request later, up to the {@apilink BrowserCrawlerOptions.maxRequestRetries|`maxRequestRetries`} times.
- * If all the retries fail, the crawler calls the function
- * provided to the {@apilink BrowserCrawlerOptions.failedRequestHandler|`failedRequestHandler`} parameter.
- * To make this work, we should **always**
- * let our function throw exceptions rather than catch them.
- * The exceptions are logged to the request using the
- * {@apilink Request.pushErrorMessage|`Request.pushErrorMessage()`} function.
- *
- * @deprecated `handlePageFunction` has been renamed to `requestHandler` and will be removed in a future version.
- * @ignore
- */
- handlePageFunction?: BrowserRequestHandler>;
+ requestHandler?: BrowserRequestHandler;
/**
* User-provided function that allows modifying the request object before it gets retried by the crawler.
@@ -172,20 +136,6 @@ export interface BrowserCrawlerOptions<
*/
failedRequestHandler?: BrowserErrorHandler;
- /**
- * A function to handle requests that failed more than `option.maxRequestRetries` times.
- *
- * The function receives the {@apilink BrowserCrawlingContext}
- * (actual context will be enhanced with the crawler specific properties) as the first argument,
- * where the {@apilink BrowserCrawlingContext.request|`request`} corresponds to the failed request.
- * Second argument is the `Error` instance that
- * represents the last error thrown during processing of the request.
- *
- * @deprecated `handleFailedRequestFunction` has been renamed to `failedRequestHandler` and will be removed in a future version.
- * @ignore
- */
- handleFailedRequestFunction?: BrowserErrorHandler;
-
/**
* Custom options passed to the underlying {@apilink BrowserPool} constructor.
* We can tweak those to fine-tune browser management.
@@ -338,7 +288,6 @@ export abstract class BrowserCrawler<
protected static override optionsShape = {
...BasicCrawler.optionsShape,
- handlePageFunction: ow.optional.function,
navigationTimeoutSecs: ow.optional.number.greaterThan(0),
preNavigationHooks: ow.optional.array,
@@ -372,14 +321,7 @@ export abstract class BrowserCrawler<
browserPoolOptions,
preNavigationHooks = [],
postNavigationHooks = [],
- // Ignored
- handleRequestFunction,
-
- requestHandler: userProvidedRequestHandler,
- handlePageFunction,
-
- failedRequestHandler,
- handleFailedRequestFunction,
+ requestHandler,
headless,
ignoreShadowRoots,
ignoreIframes,
@@ -390,33 +332,12 @@ export abstract class BrowserCrawler<
{
...basicCrawlerOptions,
requestHandler: async (...args) => this._runRequestHandler(...(args as [Context])),
- requestHandlerTimeoutSecs:
- navigationTimeoutSecs + requestHandlerTimeoutSecs + BASIC_CRAWLER_TIMEOUT_BUFFER_SECS,
+ requestHandlerTimeoutSecs: 0, // Disable outer request handler timeout after modifying the basic crawler wrapper
},
config,
);
- this._handlePropertyNameChange({
- newName: 'requestHandler',
- oldName: 'handlePageFunction',
- propertyKey: 'userProvidedRequestHandler',
- newProperty: userProvidedRequestHandler,
- oldProperty: handlePageFunction,
- allowUndefined: true, // fallback to the default router
- });
-
- if (!this.userProvidedRequestHandler) {
- this.userProvidedRequestHandler = this.router;
- }
-
- this._handlePropertyNameChange({
- newName: 'failedRequestHandler',
- oldName: 'handleFailedRequestFunction',
- propertyKey: 'failedRequestHandler',
- newProperty: failedRequestHandler,
- oldProperty: handleFailedRequestFunction,
- allowUndefined: true,
- });
+ this.userProvidedRequestHandler = requestHandler ?? this.router;
// Cookies should be persisted per session only if session pool is used
if (!this.useSessionPool && persistCookiesPerSession) {
@@ -513,7 +434,6 @@ export abstract class BrowserCrawler<
};
const useIncognitoPages = this.launchContext?.useIncognitoPages;
- const experimentalContainers = this.launchContext?.experimentalContainers;
if (this.proxyConfiguration) {
const { session } = crawlingContext;
@@ -540,7 +460,7 @@ export abstract class BrowserCrawler<
const page = (await this.browserPool.newPage(newPageOptions)) as CommonPage;
tryCancel();
- this._enhanceCrawlingContextWithPageInfo(crawlingContext, page, useIncognitoPages || experimentalContainers);
+ this._enhanceCrawlingContextWithPageInfo(crawlingContext, page, useIncognitoPages);
// DO NOT MOVE THIS LINE ABOVE!
// `enhanceCrawlingContextWithPageInfo` gives us a valid session.
@@ -635,32 +555,36 @@ export abstract class BrowserCrawler<
}
protected async _handleNavigation(crawlingContext: Context) {
- const gotoOptions = { timeout: this.navigationTimeoutMillis } as unknown as GoToOptions;
+ const runNavigationPhase = async () => {
+ const gotoOptions = { timeout: this.navigationTimeoutMillis } as unknown as GoToOptions;
- const preNavigationHooksCookies = this._getCookieHeaderFromRequest(crawlingContext.request);
-
- crawlingContext.request.state = RequestState.BEFORE_NAV;
- await this._executeHooks(this.preNavigationHooks, crawlingContext, gotoOptions);
- tryCancel();
+ const preNavigationHooksCookies = this._getCookieHeaderFromRequest(crawlingContext.request);
+ crawlingContext.request.state = RequestState.BEFORE_NAV;
+ await this._executeHooks(this.preNavigationHooks, crawlingContext, gotoOptions);
+ tryCancel();
- const postNavigationHooksCookies = this._getCookieHeaderFromRequest(crawlingContext.request);
+ const postNavigationHooksCookies = this._getCookieHeaderFromRequest(crawlingContext.request);
+ await this._applyCookies(crawlingContext, preNavigationHooksCookies, postNavigationHooksCookies);
- await this._applyCookies(crawlingContext, preNavigationHooksCookies, postNavigationHooksCookies);
+ crawlingContext.response = (await this._navigationHandler(crawlingContext, gotoOptions)) ?? undefined;
+ tryCancel();
+ crawlingContext.request.state = RequestState.AFTER_NAV;
+ await this._executeHooks(this.postNavigationHooks, crawlingContext, gotoOptions);
+ };
try {
- crawlingContext.response = (await this._navigationHandler(crawlingContext, gotoOptions)) ?? undefined;
+ await addTimeoutToPromise(
+ runNavigationPhase,
+ this.navigationTimeoutMillis,
+ // This message will never be seen, but is required by addTimeoutToPromise
+ `Navigation timed out after ${this.navigationTimeoutMillis} ms`,
+ );
} catch (error) {
- await this._handleNavigationTimeout(crawlingContext, error as Error);
-
crawlingContext.request.state = RequestState.ERROR;
-
+ await this._handleNavigationTimeout(crawlingContext, error as Error); // marks session bad and closes page
this._throwIfProxyError(error as Error);
throw error;
}
- tryCancel();
-
- crawlingContext.request.state = RequestState.AFTER_NAV;
- await this._executeHooks(this.postNavigationHooks, crawlingContext, gotoOptions);
}
protected async _applyCookies(
diff --git a/packages/browser-crawler/src/internals/browser-launcher.ts b/packages/browser-crawler/src/internals/browser-launcher.ts
index 1b68b1bb3353..3c799677ac1c 100644
--- a/packages/browser-crawler/src/internals/browser-launcher.ts
+++ b/packages/browser-crawler/src/internals/browser-launcher.ts
@@ -1,4 +1,5 @@
import fs from 'node:fs';
+import { createRequire } from 'node:module';
import os from 'node:os';
import { Configuration } from '@crawlee/basic';
@@ -11,6 +12,8 @@ const DEFAULT_VIEWPORT = {
height: 768,
};
+const require = createRequire(import.meta.url);
+
export interface BrowserLaunchContext extends BrowserPluginOptions {
/**
* URL to an HTTP proxy server. It must define the port number,
@@ -46,13 +49,6 @@ export interface BrowserLaunchContext extends BrowserPluginO
*/
useIncognitoPages?: boolean;
- /**
- * @experimental
- * Like `useIncognitoPages`, but for persistent contexts, so cache is used for faster loading.
- * Works best with Firefox. Unstable on Chromium.
- */
- experimentalContainers?: boolean;
-
/**
* Sets the [User Data Directory](https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md) path.
* The user data directory contains profile data such as history, bookmarks, and cookies, as well as other per-installation local state.
@@ -107,7 +103,6 @@ export abstract class BrowserLauncher<
useChrome: ow.optional.boolean,
useIncognitoPages: ow.optional.boolean,
browserPerProxy: ow.optional.boolean,
- experimentalContainers: ow.optional.boolean,
userDataDir: ow.optional.string,
launchOptions: ow.optional.object,
userAgent: ow.optional.string,
diff --git a/packages/browser-crawler/test/migration.test.ts b/packages/browser-crawler/test/migration.test.ts
deleted file mode 100644
index af683550bd15..000000000000
--- a/packages/browser-crawler/test/migration.test.ts
+++ /dev/null
@@ -1,195 +0,0 @@
-import { PuppeteerPlugin } from '@crawlee/browser-pool';
-import puppeteer from 'puppeteer';
-
-import type { Log } from '@apify/log';
-import log from '@apify/log';
-
-import { MemoryStorageEmulator } from '../../../test/shared/MemoryStorageEmulator';
-import { BrowserCrawler, RequestList } from '../src/index';
-
-const localStorageEmulator = new MemoryStorageEmulator();
-
-beforeEach(async () => {
- await localStorageEmulator.init();
-});
-
-afterAll(async () => {
- await localStorageEmulator.destroy();
-});
-
-const plugin = new PuppeteerPlugin(puppeteer);
-
-describe('Moving from handleRequest* to requestHandler*', () => {
- let requestList: RequestList;
- let testLogger: Log;
-
- beforeEach(async () => {
- requestList = await RequestList.open(null, []);
- testLogger = log.child({ prefix: 'BrowserCrawler' });
- });
-
- describe('handlePageFunction -> requestHandler', () => {
- it('should log when providing both handlePageFunction and requestHandler', async () => {
- const oldHandler = () => {};
- const newHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- // @ts-expect-error -- Protected constructor
- const crawler = new BrowserCrawler({
- requestList,
- log: testLogger,
- browserPoolOptions: {
- browserPlugins: [plugin],
- },
- requestHandler: newHandler,
- handlePageFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `Both "requestHandler" and "handlePageFunction" were provided in the crawler options.`,
- `"handlePageFunction" has been renamed to "requestHandler", and will be removed in a future version.`,
- `As such, "requestHandler" will be used instead.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['userProvidedRequestHandler']).toBe(newHandler);
-
- await crawler.browserPool.destroy();
- });
-
- it('should log when providing only the deprecated handlePageFunction', async () => {
- const oldHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- // @ts-expect-error -- We are verifying the deprecation warning
- const crawler = new BrowserCrawler({
- requestList,
- log: testLogger,
- browserPoolOptions: {
- browserPlugins: [plugin],
- },
- handlePageFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `"handlePageFunction" has been renamed to "requestHandler", and will be removed in a future version.`,
- `The provided value will be used, but you should rename "handlePageFunction" to "requestHandler" in your crawler options.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['userProvidedRequestHandler']).toBe(oldHandler);
-
- await crawler.browserPool.destroy();
- });
-
- it('should not log when providing only requestHandler', async () => {
- const handler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- // @ts-expect-error -- Protected constructor
- const crawler = new BrowserCrawler({
- requestList,
- log: testLogger,
- browserPoolOptions: {
- browserPlugins: [plugin],
- },
- requestHandler: handler,
- });
-
- expect(warningSpy).not.toHaveBeenCalled();
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['userProvidedRequestHandler']).toBe(handler);
-
- await crawler.browserPool.destroy();
- });
- });
-
- describe('handleFailedRequestFunction -> failedRequestHandler', () => {
- it('should log when providing both handleFailedRequestFunction and failedRequestHandler', async () => {
- const oldHandler = () => {};
- const newHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- // @ts-expect-error -- Protected constructor
- const crawler = new BrowserCrawler({
- requestList,
- log: testLogger,
- browserPoolOptions: {
- browserPlugins: [plugin],
- },
- requestHandler: () => {},
- failedRequestHandler: newHandler,
- handleFailedRequestFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `Both "failedRequestHandler" and "handleFailedRequestFunction" were provided in the crawler options.`,
- `"handleFailedRequestFunction" has been renamed to "failedRequestHandler", and will be removed in a future version.`,
- `As such, "failedRequestHandler" will be used instead.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(newHandler);
-
- await crawler.browserPool.destroy();
- });
-
- it('should log when providing only the deprecated handleFailedRequestFunction', async () => {
- const oldHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- // @ts-expect-error -- Protected constructor
- const crawler = new BrowserCrawler({
- requestList,
- log: testLogger,
- browserPoolOptions: {
- browserPlugins: [plugin],
- },
- requestHandler: () => {},
- handleFailedRequestFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `"handleFailedRequestFunction" has been renamed to "failedRequestHandler", and will be removed in a future version.`,
- `The provided value will be used, but you should rename "handleFailedRequestFunction" to "failedRequestHandler" in your crawler options.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(oldHandler);
-
- await crawler.browserPool.destroy();
- });
-
- it('should not log when providing only failedRequestHandler', async () => {
- const handler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- // @ts-expect-error -- Protected constructor
- const crawler = new BrowserCrawler({
- requestList,
- log: testLogger,
- browserPoolOptions: {
- browserPlugins: [plugin],
- },
- requestHandler: () => {},
- failedRequestHandler: handler,
- });
-
- expect(warningSpy).not.toHaveBeenCalled();
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(handler);
-
- await crawler.browserPool.destroy();
- });
- });
-});
diff --git a/packages/browser-crawler/test/tsconfig.json b/packages/browser-crawler/test/tsconfig.json
deleted file mode 100644
index bf55f9516b7d..000000000000
--- a/packages/browser-crawler/test/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "extends": "../../../tsconfig.json",
- "include": ["**/*", "../../**/*"],
- "compilerOptions": {
- "types": ["vitest/globals"]
- }
-}
diff --git a/packages/browser-pool/copy-definitions.mjs b/packages/browser-pool/copy-definitions.mjs
deleted file mode 100644
index 797e62a13e10..000000000000
--- a/packages/browser-pool/copy-definitions.mjs
+++ /dev/null
@@ -1,16 +0,0 @@
-import { copyFileSync, mkdirSync, readdirSync } from 'node:fs';
-import { join } from 'node:path';
-
-const copyFolderSync = (from, to) => {
- mkdirSync(to);
-
- for (const file of readdirSync(from, { withFileTypes: true })) {
- if (file.isDirectory()) {
- copyFolderSync(join(from, file.name), join(to, file.name));
- } else if (file.isFile()) {
- copyFileSync(join(from, file.name), join(to, file.name));
- }
- }
-};
-
-copyFolderSync('tab-as-a-container', 'dist/tab-as-a-container');
diff --git a/packages/browser-pool/package.json b/packages/browser-pool/package.json
index 380f35bba654..dc2bf5ba2576 100644
--- a/packages/browser-pool/package.json
+++ b/packages/browser-pool/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "Rotate multiple browsers using popular automation libraries such as Playwright or Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"author": {
@@ -30,26 +24,26 @@
"url": "https://github.com/apify/crawlee/issues"
},
"scripts": {
- "build": "yarn clean && yarn compile && node copy-definitions.mjs && yarn copy",
+ "build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"dependencies": {
- "@apify/log": "^2.4.0",
- "@apify/timeout": "^0.3.0",
+ "@apify/log": "^2.5.18",
+ "@apify/timeout": "^0.3.2",
"@crawlee/core": "3.13.3",
"@crawlee/types": "3.13.3",
- "fingerprint-generator": "^2.0.6",
- "fingerprint-injector": "^2.0.5",
+ "fingerprint-generator": "^2.1.66",
+ "fingerprint-injector": "^2.1.66",
"lodash.merge": "^4.6.2",
- "nanoid": "^3.3.4",
- "ow": "^0.28.1",
- "p-limit": "^3.1.0",
- "proxy-chain": "^2.0.1",
- "quick-lru": "^5.1.1",
+ "nanoid": "^5.1.5",
+ "ow": "^2.0.0",
+ "p-limit": "^6.2.0",
+ "proxy-chain": "^2.5.8",
+ "quick-lru": "^7.0.1",
"tiny-typed-emitter": "^2.1.0",
- "tslib": "^2.4.0"
+ "tslib": "^2.8.1"
},
"peerDependencies": {
"playwright": "*",
diff --git a/packages/browser-pool/src/abstract-classes/browser-controller.ts b/packages/browser-pool/src/abstract-classes/browser-controller.ts
index 7a4e796f3880..0c546488ed7f 100644
--- a/packages/browser-pool/src/abstract-classes/browser-controller.ts
+++ b/packages/browser-pool/src/abstract-classes/browser-controller.ts
@@ -4,11 +4,11 @@ import { TypedEmitter } from 'tiny-typed-emitter';
import { tryCancel } from '@apify/timeout';
-import { BROWSER_CONTROLLER_EVENTS } from '../events';
-import type { LaunchContext } from '../launch-context';
-import { log } from '../logger';
-import type { UnwrapPromise } from '../utils';
-import type { BrowserPlugin, CommonBrowser, CommonLibrary } from './browser-plugin';
+import { BROWSER_CONTROLLER_EVENTS } from '../events.js';
+import type { LaunchContext } from '../launch-context.js';
+import { log } from '../logger.js';
+import type { UnwrapPromise } from '../utils.js';
+import type { BrowserPlugin, CommonBrowser, CommonLibrary } from './browser-plugin.js';
const PROCESS_KILL_TIMEOUT_MILLIS = 5000;
diff --git a/packages/browser-pool/src/abstract-classes/browser-plugin.ts b/packages/browser-pool/src/abstract-classes/browser-plugin.ts
index 7b95dd7554cf..3eb69e011a99 100644
--- a/packages/browser-pool/src/abstract-classes/browser-plugin.ts
+++ b/packages/browser-pool/src/abstract-classes/browser-plugin.ts
@@ -2,10 +2,10 @@ import { CriticalError } from '@crawlee/core';
import type { Dictionary } from '@crawlee/types';
import merge from 'lodash.merge';
-import type { LaunchContextOptions } from '../launch-context';
-import { LaunchContext } from '../launch-context';
-import type { UnwrapPromise } from '../utils';
-import type { BrowserController } from './browser-controller';
+import type { LaunchContextOptions } from '../launch-context.js';
+import { LaunchContext } from '../launch-context.js';
+import type { UnwrapPromise } from '../utils.js';
+import type { BrowserController } from './browser-controller.js';
/**
* The default User Agent used by `PlaywrightCrawler`, `launchPlaywright`, 'PuppeteerCrawler' and 'launchPuppeteer'
@@ -65,12 +65,6 @@ export interface BrowserPluginOptions {
* @default false
*/
useIncognitoPages?: boolean;
- /**
- * @experimental
- * Like `useIncognitoPages`, but for persistent contexts, so cache is used for faster loading.
- * Works best with Firefox. Unstable on Chromium.
- */
- experimentalContainers?: boolean;
/**
* Path to a User Data Directory, which stores browser session data like cookies and local storage.
*/
@@ -111,19 +105,11 @@ export abstract class BrowserPlugin<
NewPageResult = UnwrapPromise>,
> {
name = this.constructor.name;
-
library: Library;
-
launchOptions: LibraryOptions;
-
proxyUrl?: string;
-
userDataDir?: string;
-
useIncognitoPages: boolean;
-
- experimentalContainers: boolean;
-
browserPerProxy?: boolean;
constructor(library: Library, options: BrowserPluginOptions = {}) {
@@ -132,7 +118,6 @@ export abstract class BrowserPlugin<
proxyUrl,
userDataDir,
useIncognitoPages = false,
- experimentalContainers = false,
browserPerProxy = false,
} = options;
@@ -141,7 +126,6 @@ export abstract class BrowserPlugin<
this.proxyUrl = proxyUrl && new URL(proxyUrl).href.slice(0, -1);
this.userDataDir = userDataDir;
this.useIncognitoPages = useIncognitoPages;
- this.experimentalContainers = experimentalContainers;
this.browserPerProxy = browserPerProxy;
}
@@ -160,7 +144,6 @@ export abstract class BrowserPlugin<
proxyUrl = this.proxyUrl,
useIncognitoPages = this.useIncognitoPages,
userDataDir = this.userDataDir,
- experimentalContainers = this.experimentalContainers,
browserPerProxy = this.browserPerProxy,
proxyTier,
} = options;
@@ -171,16 +154,19 @@ export abstract class BrowserPlugin<
browserPlugin: this,
proxyUrl,
useIncognitoPages,
- experimentalContainers,
userDataDir,
browserPerProxy,
proxyTier,
});
}
- createController(): BrowserController {
- return this._createController();
- }
+ abstract createController(): BrowserController<
+ Library,
+ LibraryOptions,
+ LaunchResult,
+ NewPageOptions,
+ NewPageResult
+ >;
/**
* Launches the browser using provided launch context.
@@ -278,17 +264,6 @@ export abstract class BrowserPlugin<
protected abstract _launch(
launchContext: LaunchContext,
): Promise;
-
- /**
- * @private
- */
- protected abstract _createController(): BrowserController<
- Library,
- LibraryOptions,
- LaunchResult,
- NewPageOptions,
- NewPageResult
- >;
}
export class BrowserLaunchError extends CriticalError {
diff --git a/packages/browser-pool/src/browser-pool.ts b/packages/browser-pool/src/browser-pool.ts
index c0be47dccff1..102108f22706 100644
--- a/packages/browser-pool/src/browser-pool.ts
+++ b/packages/browser-pool/src/browser-pool.ts
@@ -10,18 +10,18 @@ import { TypedEmitter } from 'tiny-typed-emitter';
import { addTimeoutToPromise, tryCancel } from '@apify/timeout';
-import type { BrowserController } from './abstract-classes/browser-controller';
-import type { BrowserPlugin } from './abstract-classes/browser-plugin';
-import { BROWSER_POOL_EVENTS } from './events';
+import type { BrowserController } from './abstract-classes/browser-controller.js';
+import type { BrowserPlugin } from './abstract-classes/browser-plugin.js';
+import { BROWSER_POOL_EVENTS } from './events.js';
import {
createFingerprintPreLaunchHook,
createPostPageCreateHook,
createPrePageCreateHook,
-} from './fingerprinting/hooks';
-import type { FingerprintGeneratorOptions } from './fingerprinting/types';
-import type { LaunchContext } from './launch-context';
-import { log } from './logger';
-import type { InferBrowserPluginArray, UnwrapPromise } from './utils';
+} from './fingerprinting/hooks.js';
+import type { FingerprintGeneratorOptions } from './fingerprinting/types.js';
+import type { LaunchContext } from './launch-context.js';
+import { log } from './logger.js';
+import type { InferBrowserPluginArray, UnwrapPromise } from './utils.js';
const PAGE_CLOSE_KILL_TIMEOUT_MILLIS = 1000;
const BROWSER_KILLER_INTERVAL_MILLIS = 10 * 1000;
@@ -557,10 +557,7 @@ export class BrowserPool<
await browserController['isActivePromise'];
tryCancel();
- const finalPageOptions =
- browserController.launchContext.useIncognitoPages || browserController.launchContext.experimentalContainers
- ? pageOptions
- : undefined;
+ const finalPageOptions = browserController.launchContext.useIncognitoPages ? pageOptions : undefined;
if (finalPageOptions) {
Object.assign(finalPageOptions, browserController.normalizeProxyOptions(proxyUrl, pageOptions));
diff --git a/packages/browser-pool/src/fingerprinting/hooks.ts b/packages/browser-pool/src/fingerprinting/hooks.ts
index 3a8e83724d2f..1e22b72de411 100644
--- a/packages/browser-pool/src/fingerprinting/hooks.ts
+++ b/packages/browser-pool/src/fingerprinting/hooks.ts
@@ -1,12 +1,12 @@
import type { BrowserFingerprintWithHeaders } from 'fingerprint-generator';
import type { FingerprintInjector } from 'fingerprint-injector';
-import type { BrowserController } from '../abstract-classes/browser-controller';
-import type { BrowserPool } from '../browser-pool';
-import type { LaunchContext } from '../launch-context';
-import { PlaywrightPlugin } from '../playwright/playwright-plugin';
-import { PuppeteerPlugin } from '../puppeteer/puppeteer-plugin';
-import { getGeneratorDefaultOptions } from './utils';
+import type { BrowserController } from '../abstract-classes/browser-controller.js';
+import type { BrowserPool } from '../browser-pool.js';
+import type { LaunchContext } from '../launch-context.js';
+import { PlaywrightPlugin } from '../playwright/playwright-plugin.js';
+import { PuppeteerPlugin } from '../puppeteer/puppeteer-plugin.js';
+import { getGeneratorDefaultOptions } from './utils.js';
/**
* @internal
diff --git a/packages/browser-pool/src/fingerprinting/utils.ts b/packages/browser-pool/src/fingerprinting/utils.ts
index 5efd4b7deb2a..07f45acef819 100644
--- a/packages/browser-pool/src/fingerprinting/utils.ts
+++ b/packages/browser-pool/src/fingerprinting/utils.ts
@@ -1,9 +1,9 @@
-import type { BrowserPlugin } from '../abstract-classes/browser-plugin';
-import type { LaunchContext } from '../launch-context';
-import { PlaywrightPlugin } from '../playwright/playwright-plugin';
-import { PuppeteerPlugin } from '../puppeteer/puppeteer-plugin';
-import type { FingerprintGeneratorOptions } from './types';
-import { BrowserName, DeviceCategory, OperatingSystemsName } from './types';
+import type { BrowserPlugin } from '../abstract-classes/browser-plugin.js';
+import type { LaunchContext } from '../launch-context.js';
+import { PlaywrightPlugin } from '../playwright/playwright-plugin.js';
+import { PuppeteerPlugin } from '../puppeteer/puppeteer-plugin.js';
+import type { FingerprintGeneratorOptions } from './types.js';
+import { BrowserName, DeviceCategory, OperatingSystemsName } from './types.js';
export const getGeneratorDefaultOptions = (launchContext: LaunchContext): FingerprintGeneratorOptions => {
const { browserPlugin, launchOptions } = launchContext;
diff --git a/packages/browser-pool/src/index.ts b/packages/browser-pool/src/index.ts
index d3b4d24619d8..1e7295bd943d 100644
--- a/packages/browser-pool/src/index.ts
+++ b/packages/browser-pool/src/index.ts
@@ -22,19 +22,19 @@
*
* @module browser-pool
*/
-export * from './browser-pool';
-export * from './playwright/playwright-plugin';
-export * from './puppeteer/puppeteer-plugin';
-export * from './events';
+export * from './browser-pool.js';
+export * from './playwright/playwright-plugin.js';
+export * from './puppeteer/puppeteer-plugin.js';
+export * from './events.js';
export {
BrowserName,
DeviceCategory,
OperatingSystemsName,
-} from './fingerprinting/types';
-export { BrowserController, BrowserControllerEvents } from './abstract-classes/browser-controller';
-export { PuppeteerController } from './puppeteer/puppeteer-controller';
-export { PlaywrightController } from './playwright/playwright-controller';
-export { PlaywrightBrowser } from './playwright/playwright-browser';
+} from './fingerprinting/types.js';
+export { BrowserController, BrowserControllerEvents } from './abstract-classes/browser-controller.js';
+export { PuppeteerController } from './puppeteer/puppeteer-controller.js';
+export { PlaywrightController } from './playwright/playwright-controller.js';
+export { PlaywrightBrowser } from './playwright/playwright-browser.js';
export {
CommonPage,
CommonLibrary,
@@ -43,12 +43,12 @@ export {
CreateLaunchContextOptions,
BrowserLaunchError,
DEFAULT_USER_AGENT,
-} from './abstract-classes/browser-plugin';
-export { LaunchContext, LaunchContextOptions } from './launch-context';
+} from './abstract-classes/browser-plugin.js';
+export { LaunchContext, LaunchContextOptions } from './launch-context.js';
export {
BrowserSpecification,
FingerprintGenerator,
FingerprintGeneratorOptions,
GetFingerprintReturn,
-} from './fingerprinting/types';
-export { InferBrowserPluginArray, UnwrapPromise } from './utils';
+} from './fingerprinting/types.js';
+export { InferBrowserPluginArray, UnwrapPromise } from './utils.js';
diff --git a/packages/browser-pool/src/launch-context.ts b/packages/browser-pool/src/launch-context.ts
index e7cbdfbb4aab..2820d63ee13d 100644
--- a/packages/browser-pool/src/launch-context.ts
+++ b/packages/browser-pool/src/launch-context.ts
@@ -1,8 +1,8 @@
import type { Dictionary } from '@crawlee/types';
import type { BrowserFingerprintWithHeaders } from 'fingerprint-generator';
-import type { BrowserPlugin, CommonBrowser, CommonLibrary } from './abstract-classes/browser-plugin';
-import type { UnwrapPromise } from './utils';
+import type { BrowserPlugin, CommonBrowser, CommonLibrary } from './abstract-classes/browser-plugin.js';
+import type { UnwrapPromise } from './utils.js';
/**
* `LaunchContext` holds information about the launched browser. It's useful
@@ -46,12 +46,6 @@ export interface LaunchContextOptions<
* If set to `true` each page uses its own context that is destroyed once the page is closed or crashes.
*/
useIncognitoPages?: boolean;
- /**
- * @experimental
- * Like `useIncognitoPages`, but for persistent contexts, so cache is used for faster loading.
- * Works best with Firefox. Unstable on Chromium.
- */
- experimentalContainers?: boolean;
/**
* Path to a User Data Directory, which stores browser session data like cookies and local storage.
*/
@@ -72,7 +66,6 @@ export class LaunchContext<
launchOptions: LibraryOptions;
useIncognitoPages: boolean;
browserPerProxy?: boolean;
- experimentalContainers: boolean;
userDataDir: string;
proxyTier?: number;
@@ -90,7 +83,6 @@ export class LaunchContext<
proxyUrl,
useIncognitoPages,
browserPerProxy,
- experimentalContainers,
userDataDir = '',
proxyTier,
} = options;
@@ -100,7 +92,6 @@ export class LaunchContext<
this.launchOptions = launchOptions;
this.browserPerProxy = browserPerProxy ?? false;
this.useIncognitoPages = useIncognitoPages ?? false;
- this.experimentalContainers = experimentalContainers ?? false;
this.userDataDir = userDataDir;
this.proxyTier = proxyTier;
diff --git a/packages/browser-pool/src/playwright/load-firefox-addon.ts b/packages/browser-pool/src/playwright/load-firefox-addon.ts
deleted file mode 100644
index a11960248ec8..000000000000
--- a/packages/browser-pool/src/playwright/load-firefox-addon.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-import { Buffer } from 'node:buffer';
-import net from 'node:net';
-
-export const loadFirefoxAddon = async (port: number, host: string, addonPath: string) => {
- return new Promise((resolve) => {
- const socket = net.connect({
- port,
- host,
- });
-
- let success = false;
-
- socket.once('error', () => {});
- socket.once('close', () => {
- resolve(success);
- });
-
- const send = (data: Record) => {
- const raw = Buffer.from(JSON.stringify(data));
-
- socket.write(`${raw.length}`);
- socket.write(':');
- socket.write(raw);
- };
-
- send({
- to: 'root',
- type: 'getRoot',
- });
-
- const onMessage = (message: any) => {
- if (message.addonsActor) {
- send({
- to: message.addonsActor,
- type: 'installTemporaryAddon',
- addonPath,
- });
- }
-
- if (message.addon) {
- success = true;
- socket.end();
- }
-
- if (message.error) {
- socket.end();
- }
- };
-
- const buffers: Buffer[] = [];
- let remainingBytes = 0;
-
- socket.on('data', (data) => {
- while (true) {
- if (remainingBytes === 0) {
- const index = data.indexOf(':');
-
- buffers.push(data);
-
- if (index === -1) {
- return;
- }
-
- const buffer = Buffer.concat(buffers);
- const bufferIndex = buffer.indexOf(':');
-
- buffers.length = 0;
- remainingBytes = Number(buffer.subarray(0, bufferIndex).toString());
-
- if (!Number.isFinite(remainingBytes)) {
- throw new Error('Invalid state');
- }
-
- data = buffer.subarray(bufferIndex + 1);
- }
-
- if (data.length < remainingBytes) {
- remainingBytes -= data.length;
- buffers.push(data);
- break;
- }
-
- buffers.push(data.subarray(0, remainingBytes));
-
- const buffer = Buffer.concat(buffers);
- buffers.length = 0;
-
- const json = JSON.parse(buffer.toString());
- queueMicrotask(() => {
- onMessage(json);
- });
-
- const remainder = data.subarray(remainingBytes);
- remainingBytes = 0;
-
- if (remainder.length === 0) {
- break;
- }
-
- data = remainder;
- }
- });
- });
-};
diff --git a/packages/browser-pool/src/playwright/playwright-controller.ts b/packages/browser-pool/src/playwright/playwright-controller.ts
index 283968a7ef87..767312e389e6 100644
--- a/packages/browser-pool/src/playwright/playwright-controller.ts
+++ b/packages/browser-pool/src/playwright/playwright-controller.ts
@@ -3,13 +3,9 @@ import type { Browser, BrowserType, Page } from 'playwright';
import { tryCancel } from '@apify/timeout';
-import { BrowserController } from '../abstract-classes/browser-controller';
-import { anonymizeProxySugar } from '../anonymize-proxy';
-import type { SafeParameters } from '../utils';
-import type { PlaywrightPlugin } from './playwright-plugin';
-
-const tabIds = new WeakMap();
-const keyFromTabId = (tabId: string | number) => `.${tabId}.`;
+import { BrowserController } from '../abstract-classes/browser-controller.js';
+import { anonymizeProxySugar } from '../anonymize-proxy.js';
+import type { SafeParameters } from '../utils.js';
export class PlaywrightController extends BrowserController<
BrowserType,
@@ -36,14 +32,8 @@ export class PlaywrightController extends BrowserController<
}
protected async _newPage(contextOptions?: SafeParameters[0]): Promise {
- if (
- contextOptions !== undefined &&
- !this.launchContext.useIncognitoPages &&
- !this.launchContext.experimentalContainers
- ) {
- throw new Error(
- 'A new page can be created with provided context only when using incognito pages or experimental containers.',
- );
+ if (contextOptions !== undefined && !this.launchContext.useIncognitoPages) {
+ throw new Error('A new page can be created with provided context only when using incognito pages.');
}
let close = async () => {};
@@ -74,50 +64,6 @@ export class PlaywrightController extends BrowserController<
await close();
});
- if (this.launchContext.experimentalContainers) {
- await page.goto('data:text/plain,tabid');
- await page.waitForNavigation();
- const { tabid, proxyip }: { tabid: number; proxyip: string } = JSON.parse(
- decodeURIComponent(page.url().slice('about:blank#'.length)),
- );
-
- if (contextOptions?.proxy) {
- const url = new URL(contextOptions.proxy.server);
- url.username = contextOptions.proxy.username ?? '';
- url.password = contextOptions.proxy.password ?? '';
-
- (this.browserPlugin as PlaywrightPlugin)._containerProxyServer!.ipToProxy.set(proxyip, url.href);
- }
-
- if (this.browserPlugin.library.name() === 'firefox') {
- // Playwright does not support creating new CDP sessions with Firefox
- } else {
- const session = await page.context().newCDPSession(page);
- await session.send('Network.enable');
-
- session.on('Network.responseReceived', (responseReceived) => {
- const logOnly = ['Document', 'XHR', 'Fetch', 'EventSource', 'WebSocket', 'Other'];
- if (!logOnly.includes(responseReceived.type)) {
- return;
- }
-
- const { response } = responseReceived;
- if (response.fromDiskCache || response.fromPrefetchCache || response.fromServiceWorker) {
- return;
- }
-
- const { remoteIPAddress } = response;
- if (remoteIPAddress && remoteIPAddress !== proxyip) {
- console.warn(
- `Request to ${response.url} was through ${remoteIPAddress} instead of ${proxyip}`,
- );
- }
- });
- }
-
- tabIds.set(page, tabid);
- }
-
tryCancel();
return page;
@@ -139,46 +85,11 @@ export class PlaywrightController extends BrowserController<
protected async _getCookies(page: Page): Promise {
const context = page.context();
- const cookies = await context.cookies();
-
- if (this.launchContext.experimentalContainers) {
- const tabId = tabIds.get(page);
-
- if (tabId === undefined) {
- throw new Error('Failed to find tabId for page');
- }
-
- const key = keyFromTabId(tabId);
-
- return cookies
- .filter((cookie) => cookie.name.startsWith(key))
- .map((cookie) => ({
- ...cookie,
- name: cookie.name.slice(key.length),
- }));
- }
-
- return cookies;
+ return context.cookies();
}
protected async _setCookies(page: Page, cookies: Cookie[]): Promise {
const context = page.context();
-
- if (this.launchContext.experimentalContainers) {
- const tabId = tabIds.get(page);
-
- if (tabId === undefined) {
- throw new Error('Failed to find tabId for page');
- }
-
- const key = keyFromTabId(tabId);
-
- cookies = cookies.map((cookie) => ({
- ...cookie,
- name: `${key}${cookie.name}`,
- }));
- }
-
return context.addCookies(cookies);
}
}
diff --git a/packages/browser-pool/src/playwright/playwright-plugin.ts b/packages/browser-pool/src/playwright/playwright-plugin.ts
index 5e59d4656588..6520ecebb6ff 100644
--- a/packages/browser-pool/src/playwright/playwright-plugin.ts
+++ b/packages/browser-pool/src/playwright/playwright-plugin.ts
@@ -1,37 +1,16 @@
import fs from 'node:fs';
-import net from 'node:net';
-import os from 'node:os';
-import path from 'node:path';
import type { Browser as PlaywrightBrowser, BrowserType } from 'playwright';
-import type { BrowserController } from '../abstract-classes/browser-controller';
-import { BrowserPlugin } from '../abstract-classes/browser-plugin';
-import { anonymizeProxySugar } from '../anonymize-proxy';
-import { createProxyServerForContainers } from '../container-proxy-server';
-import type { LaunchContext } from '../launch-context';
-import { log } from '../logger';
-import { getLocalProxyAddress } from '../proxy-server';
-import type { SafeParameters } from '../utils';
-import { loadFirefoxAddon } from './load-firefox-addon';
-import { PlaywrightBrowser as PlaywrightBrowserWithPersistentContext } from './playwright-browser';
-import { PlaywrightController } from './playwright-controller';
-
-const getFreePort = async () => {
- return new Promise((resolve, reject) => {
- const server = net
- .createServer()
- .once('error', reject)
- .listen(() => {
- resolve((server.address() as net.AddressInfo).port);
- server.close();
- });
- });
-};
-
-// __dirname = browser-pool/dist/playwright
-// taacPath = browser-pool/dist/tab-as-a-container
-const taacPath = path.join(__dirname, '..', 'tab-as-a-container');
+import { BrowserPlugin } from '../abstract-classes/browser-plugin.js';
+import { anonymizeProxySugar } from '../anonymize-proxy.js';
+import type { createProxyServerForContainers } from '../container-proxy-server.js';
+import type { LaunchContext } from '../launch-context.js';
+import { log } from '../logger.js';
+import { getLocalProxyAddress } from '../proxy-server.js';
+import type { SafeParameters } from '../utils.js';
+import { PlaywrightBrowser as PlaywrightBrowserWithPersistentContext } from './playwright-browser.js';
+import { PlaywrightController } from './playwright-controller.js';
export class PlaywrightPlugin extends BrowserPlugin<
BrowserType,
@@ -42,10 +21,7 @@ export class PlaywrightPlugin extends BrowserPlugin<
_containerProxyServer?: Awaited>;
protected async _launch(launchContext: LaunchContext): Promise {
- const { launchOptions, useIncognitoPages, proxyUrl } = launchContext;
-
- let { userDataDir } = launchContext;
-
+ const { launchOptions, useIncognitoPages, userDataDir, proxyUrl } = launchContext;
let browser: PlaywrightBrowser;
// Required for the `proxy` context option to work.
@@ -79,44 +55,6 @@ export class PlaywrightPlugin extends BrowserPlugin<
});
}
} else {
- const experimentalContainers = launchContext.experimentalContainers && this.library.name() !== 'webkit';
- let firefoxPort: number | undefined;
-
- if (experimentalContainers) {
- launchOptions!.args = [...(launchOptions!.args ?? [])];
-
- // Use native headless mode so we can load an extension
- if (launchOptions!.headless && this.library.name() === 'chromium') {
- launchOptions!.args.push('--headless=chrome');
- }
-
- if (this.library.name() === 'chromium') {
- launchOptions!.args.push(
- `--disable-extensions-except=${taacPath}`,
- `--load-extension=${taacPath}`,
- );
- } else if (this.library.name() === 'firefox') {
- firefoxPort = await getFreePort();
-
- launchOptions!.args.push(`--start-debugger-server=${firefoxPort}`);
-
- const prefs = {
- 'devtools.debugger.remote-enabled': true,
- 'devtools.debugger.prompt-connection': false,
- };
-
- const prefsRaw = Object.entries(prefs)
- .map(([name, value]) => `user_pref(${JSON.stringify(name)}, ${JSON.stringify(value)});`)
- .join('\n');
-
- if (userDataDir === '') {
- userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'apify-playwright-firefox-taac-'));
- }
-
- fs.writeFileSync(path.join(userDataDir, 'user.js'), prefsRaw);
- }
- }
-
const browserContext = await this.library
.launchPersistentContext(userDataDir, launchOptions)
.catch((error) => {
@@ -132,34 +70,6 @@ export class PlaywrightPlugin extends BrowserPlugin<
}
});
- if (experimentalContainers) {
- if (this.library.name() === 'firefox') {
- const loaded = await loadFirefoxAddon(firefoxPort!, '127.0.0.1', taacPath);
-
- if (!loaded) {
- await browserContext.close();
- throw new Error('Failed to load Firefox experimental containers addon');
- }
- }
-
- // Wait for the extension to load.
- const checker = await browserContext.newPage();
- await checker.goto('data:text/plain,tabid');
- await checker.waitForNavigation();
- await checker.close();
-
- this._containerProxyServer = await createProxyServerForContainers();
-
- const page = await browserContext.newPage();
- await page.goto(`data:text/plain,proxy#{"port":${this._containerProxyServer.port}}`);
- await page.waitForNavigation();
- await page.close();
-
- browserContext.on('close', async () => {
- await this._containerProxyServer!.close(true);
- });
- }
-
if (anonymizedProxyUrl) {
browserContext.on('close', async () => {
await close();
@@ -199,12 +109,8 @@ export class PlaywrightPlugin extends BrowserPlugin<
);
}
- protected _createController(): BrowserController<
- BrowserType,
- SafeParameters[0],
- PlaywrightBrowser
- > {
- return new PlaywrightController(this);
+ override createController(): PlaywrightController {
+ return new PlaywrightController(this as any);
}
protected async _addProxyToLaunchOptions(launchContext: LaunchContext): Promise {
diff --git a/packages/browser-pool/src/puppeteer/puppeteer-controller.ts b/packages/browser-pool/src/puppeteer/puppeteer-controller.ts
index d51a8ef1d514..3c654c99ce71 100644
--- a/packages/browser-pool/src/puppeteer/puppeteer-controller.ts
+++ b/packages/browser-pool/src/puppeteer/puppeteer-controller.ts
@@ -4,9 +4,9 @@ import type * as PuppeteerTypes from 'puppeteer';
import { tryCancel } from '@apify/timeout';
-import { BrowserController } from '../abstract-classes/browser-controller';
-import { anonymizeProxySugar } from '../anonymize-proxy';
-import { log } from '../logger';
+import { BrowserController } from '../abstract-classes/browser-controller.js';
+import { anonymizeProxySugar } from '../anonymize-proxy.js';
+import { log } from '../logger.js';
export interface PuppeteerNewPageOptions extends PuppeteerTypes.BrowserContextOptions {
proxyUsername?: string;
@@ -41,9 +41,7 @@ export class PuppeteerController extends BrowserController<
protected async _newPage(contextOptions?: PuppeteerNewPageOptions): Promise {
if (contextOptions !== undefined) {
if (!this.launchContext.useIncognitoPages) {
- throw new Error(
- 'A new page can be created with provided context only when using incognito pages or experimental containers.',
- );
+ throw new Error('A new page can be created with provided context only when using incognito pages.');
}
let close = async () => {};
diff --git a/packages/browser-pool/src/puppeteer/puppeteer-plugin.ts b/packages/browser-pool/src/puppeteer/puppeteer-plugin.ts
index f273916c8ea9..b8e3b8edafb3 100644
--- a/packages/browser-pool/src/puppeteer/puppeteer-plugin.ts
+++ b/packages/browser-pool/src/puppeteer/puppeteer-plugin.ts
@@ -4,14 +4,13 @@ import type { Dictionary } from '@crawlee/types';
import type Puppeteer from 'puppeteer';
import type * as PuppeteerTypes from 'puppeteer';
-import type { BrowserController } from '../abstract-classes/browser-controller';
-import { BrowserPlugin } from '../abstract-classes/browser-plugin';
-import { anonymizeProxySugar } from '../anonymize-proxy';
-import type { LaunchContext } from '../launch-context';
-import { log } from '../logger';
-import { noop } from '../utils';
-import type { PuppeteerNewPageOptions } from './puppeteer-controller';
-import { PuppeteerController } from './puppeteer-controller';
+import { BrowserPlugin } from '../abstract-classes/browser-plugin.js';
+import { anonymizeProxySugar } from '../anonymize-proxy.js';
+import type { LaunchContext } from '../launch-context.js';
+import { log } from '../logger.js';
+import { noop } from '../utils.js';
+import type { PuppeteerNewPageOptions } from './puppeteer-controller.js';
+import { PuppeteerController } from './puppeteer-controller.js';
const PROXY_SERVER_ARG = '--proxy-server=';
@@ -39,12 +38,8 @@ export class PuppeteerPlugin extends BrowserPlugin<
} catch {
// ignore
}
- const { launchOptions, userDataDir, useIncognitoPages, experimentalContainers, proxyUrl } = launchContext;
-
- if (experimentalContainers) {
- throw new Error('Experimental containers are only available with Playwright');
- }
+ const { launchOptions, userDataDir, useIncognitoPages, proxyUrl } = launchContext;
launchOptions!.userDataDir = launchOptions!.userDataDir ?? userDataDir;
if (launchOptions!.headless === false) {
@@ -188,12 +183,7 @@ export class PuppeteerPlugin extends BrowserPlugin<
return browser;
}
- protected _createController(): BrowserController<
- typeof Puppeteer,
- PuppeteerTypes.LaunchOptions,
- PuppeteerTypes.Browser,
- PuppeteerNewPageOptions
- > {
+ override createController(): PuppeteerController {
return new PuppeteerController(this);
}
diff --git a/packages/browser-pool/src/utils.ts b/packages/browser-pool/src/utils.ts
index f6ea9b9d4cc9..ae224fee62e5 100644
--- a/packages/browser-pool/src/utils.ts
+++ b/packages/browser-pool/src/utils.ts
@@ -1,6 +1,6 @@
-import type { BrowserPlugin } from './abstract-classes/browser-plugin';
-import type { PlaywrightPlugin } from './playwright/playwright-plugin';
-import type { PuppeteerPlugin } from './puppeteer/puppeteer-plugin';
+import type { BrowserPlugin } from './abstract-classes/browser-plugin.js';
+import type { PlaywrightPlugin } from './playwright/playwright-plugin.js';
+import type { PuppeteerPlugin } from './puppeteer/puppeteer-plugin.js';
export type UnwrapPromise = T extends PromiseLike ? UnwrapPromise : T;
diff --git a/packages/browser-pool/tab-as-a-container/background.js b/packages/browser-pool/tab-as-a-container/background.js
deleted file mode 100644
index f315fcdf1772..000000000000
--- a/packages/browser-pool/tab-as-a-container/background.js
+++ /dev/null
@@ -1,433 +0,0 @@
-'use strict';
-
-/* eslint-disable no-undef */
-
-const isFirefox = navigator.userAgent.includes('Firefox');
-
-const webRequestPermissions = {
- blockingRequest: isFirefox ? ['blocking', 'requestHeaders'] : ['blocking', 'requestHeaders', 'extraHeaders'],
- blockingResponse: isFirefox ? ['blocking', 'responseHeaders'] : ['blocking', 'responseHeaders', 'extraHeaders'],
-};
-
-chrome.privacy.network.networkPredictionEnabled.set({ value: false });
-
-const translator = new Map();
-const counter = new Map();
-
-const getOpenerId = (id) => {
- if (typeof id !== 'number' || !Number.isFinite(id)) {
- throw new Error('Expected `id` to be a number');
- }
-
- if (translator.has(id)) {
- const opener = translator.get(id);
-
- if (translator.has(opener)) {
- throw new Error('Opener is not the most ascendent');
- }
-
- // console.log(`getopener ${id} -> ${opener}`);
- return opener;
- }
-
- return id;
-};
-
-const keyFromTabId = (tabId) => `.${tabId}.`;
-
-const getCookieURL = (cookie) => {
- const protocol = cookie.secure ? 'https:' : 'http:';
- const fixedDomain = cookie.domain[0] === '.' ? cookie.domain.slice(1) : cookie.domain;
- const url = `${protocol}//${fixedDomain}${cookie.path}`;
-
- return url;
-};
-
-// Rewrite cookies that were programmatically set to tabId instead of openerId.
-// This is required because we cannot reliably get openerId inside Playwright.
-chrome.cookies.onChanged.addListener(async (changeInfo) => {
- if (!changeInfo.removed) {
- const { cookie } = changeInfo;
-
- if (cookie.name[0] !== '.') {
- return;
- }
-
- const dotIndex = cookie.name.indexOf('.', 1);
- if (dotIndex === -1) {
- return;
- }
-
- const tabId = Number(cookie.name.slice(1, dotIndex));
-
- if (!Number.isFinite(tabId)) {
- return;
- }
-
- const realCookieName = cookie.name.slice(dotIndex + 1);
- const opener = getOpenerId(tabId);
-
- if (tabId !== opener) {
- console.log(`${realCookieName} -> ${keyFromTabId(opener)}`);
-
- await chrome.cookies.remove({
- name: cookie.name,
- url: getCookieURL(cookie),
- storeId: cookie.storeId,
- });
-
- delete cookie.hostOnly;
- delete cookie.session;
-
- await chrome.cookies.set({
- ...cookie,
- name: `${keyFromTabId(opener)}${realCookieName}`,
- url: getCookieURL(cookie),
- });
- }
- }
-});
-
-chrome.webRequest.onBeforeSendHeaders.addListener(
- (details) => {
- for (const header of details.requestHeaders) {
- if (header.name.toLowerCase() === 'cookie') {
- const id = keyFromTabId(getOpenerId(details.tabId));
-
- const fixedCookies = header.value
- .split('; ')
- .filter((x) => x.startsWith(id))
- .map((x) => x.slice(id.length))
- .join('; ');
- header.value = fixedCookies;
- }
-
- // Sometimes Chrome makes a request on a ghost tab.
- // We don't want these in order to prevent cluttering cookies.
- // Yes, `webNavigation.onCommitted` is emitted and `webNavigation.onCreatedNavigationTarget` is not.
- if (header.name.toLowerCase() === 'purpose' && header.value === 'prefetch' && !counter.has(details.tabId)) {
- console.log(details);
- return {
- cancel: true,
- };
- }
-
- // This one is for Firefox
- if (header.name.toLowerCase() === 'x-moz' && header.value === 'prefetch' && !counter.has(details.tabId)) {
- console.log(details);
- return {
- cancel: true,
- };
- }
-
- if (['beacon', 'csp_report', 'ping', 'speculative'].includes(details.type)) {
- console.log(details);
- return {
- cancel: true,
- };
- }
-
- if (details.tabId === -1) {
- console.log(details);
- }
- }
-
- return {
- requestHeaders: details.requestHeaders.filter(
- (header) => header.name.toLowerCase() !== 'cookie' || header.value !== '',
- ),
- };
- },
- { urls: [''] },
- webRequestPermissions.blockingRequest,
-);
-
-// Firefox Bug: doesn't catch https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri
-chrome.webRequest.onHeadersReceived.addListener(
- (details) => {
- for (const header of details.responseHeaders) {
- if (header.name.toLowerCase() === 'set-cookie') {
- const parts = header.value.split('\n');
-
- // `details.tabId` === -1 when Chrome is making internal requests, such downloading a service worker.
-
- const openerId = getOpenerId(details.tabId);
-
- header.value = parts
- .map((part) => {
- const equalsIndex = part.indexOf('=');
- if (equalsIndex === -1) {
- return `${keyFromTabId(openerId)}=${part.trimStart()}`;
- }
- return keyFromTabId(openerId) + part.trimStart();
- })
- .join('\n');
- }
- }
-
- return {
- responseHeaders: details.responseHeaders,
- };
- },
- { urls: [''] },
- webRequestPermissions.blockingResponse,
-);
-
-chrome.tabs.onRemoved.addListener(async (tabId) => {
- const opener = getOpenerId(tabId);
- translator.delete(tabId);
-
- if (counter.has(opener)) {
- counter.set(opener, counter.get(opener) - 1);
-
- if (counter.get(opener) < 1) {
- counter.delete(opener);
- } else {
- return;
- }
- }
-
- const id = keyFromTabId(opener);
-
- chrome.cookies.getAll({}, async (cookies) => {
- await Promise.allSettled(
- cookies
- .filter((cookie) => cookie.name.startsWith(id))
- .map((cookie) => {
- return chrome.cookies.remove({
- name: cookie.name,
- url: getCookieURL(cookie),
- storeId: cookie.storeId,
- });
- }),
- );
- });
-});
-
-// Proxy per tab
-const getProxyConfiguration = (scheme, host, port) => {
- return {
- mode: 'fixed_servers',
- rules: {
- proxyForHttp: {
- scheme,
- host,
- port,
- },
- proxyForHttps: {
- scheme,
- host,
- port,
- },
- },
- };
-};
-
-const localhostIpCache = new Map();
-const localHostIp = [127, 0, 0, 1];
-const getNextLocalhostIp = (openerId) => {
- if (localhostIpCache.has(openerId)) {
- return localhostIpCache.get(openerId);
- }
-
- const result = localHostIp.join('.');
-
- localhostIpCache.set(openerId, result);
-
- if (localHostIp[3] === 254) {
- if (localHostIp[2] === 255) {
- if (localHostIp[1] === 255) {
- localHostIp[1] = 0;
- } else {
- localHostIp[1]++;
- }
-
- localHostIp[2] = 0;
- } else {
- localHostIp[2]++;
- }
-
- localHostIp[3] = 1;
- } else {
- localHostIp[3]++;
- }
-
- // [127.0.0.1 - 127.255.255.254] = 1 * 255 * 255 * 254 = 16 516 350
- while (localhostIpCache.length >= 1 * 255 * 255 * 254) {
- localhostIpCache.delete(localhostIpCache.keys().next().value);
- }
-
- return result;
-};
-
-let proxyPort;
-
-// Clear extension's proxy settings on reload
-if (isFirefox) {
- browser.proxy.settings.clear({});
-} else {
- chrome.proxy.settings.clear({});
-}
-
-// Proxy per tab
-if (isFirefox) {
- // On Firefox, we could use the `dns` permission to enforce DoH
- // but then the extension would not be compatible with Chrome.
- // Therefore users need to manually set the DNS settings.
-
- browser.proxy.onRequest.addListener(
- (details) => {
- const openerId = getOpenerId(details.tabId);
-
- if (typeof proxyPort === 'number') {
- return {
- type: 'http',
- host: getNextLocalhostIp(openerId),
- port: proxyPort,
- };
- }
- return {
- type: 'direct',
- };
- },
- { urls: [''] },
- );
-} else {
- // The connection is not yet created with `onBeforeSendHeaders`, but is with `onSendHeaders`.
- chrome.webRequest.onBeforeSendHeaders.addListener(
- (details) => {
- const openerId = getOpenerId(details.tabId);
-
- if (typeof proxyPort === 'number') {
- chrome.proxy.settings.set({
- value: getProxyConfiguration('http', getNextLocalhostIp(openerId), proxyPort),
- scope: 'regular',
- });
- } else {
- chrome.proxy.settings.clear({});
- }
- },
- { urls: [''] },
- webRequestPermissions.blockingRequest,
- );
-}
-
-// External communication. Note: the JSON keys are lowercased by the browser.
-const routes = Object.assign(Object.create(null), {
- async tabid(details) {
- return { tabid: details.tabId, proxyip: getNextLocalhostIp(details.tabId) };
- },
- async proxy(details, body) {
- proxyPort = body.port;
-
- return '';
- },
-});
-
-const onCompleted = async (details) => {
- const textPlain = 'data:text/plain,';
-
- if (details.frameId === 0 && details.url.startsWith(textPlain)) {
- try {
- const url = new URL(details.url);
- const route = url.pathname.slice('text/plain,'.length);
-
- if (route in routes) {
- const hash = url.hash.slice(1);
-
- let body = {};
-
- if (hash !== '') {
- try {
- body = JSON.parse(decodeURIComponent(hash));
- } catch {
- // Empty on purpose.
- }
- }
-
- // Different protocols are required, otherwise `onCompleted` won't be emitted.
- const result = await routes[route](details, body);
- if (result !== undefined) {
- await chrome.tabs.update(details.tabId, {
- url: `about:blank#${encodeURIComponent(JSON.stringify(result))}`,
- });
- }
- }
- } catch {
- // Invalid URL, ignore.
- }
- }
-};
-
-chrome.webNavigation.onCompleted.addListener(onCompleted);
-
-// Load content scripts.
-void (async () => {
- const contentResponse = await fetch(chrome.runtime.getURL('content.js'));
- const contentText = await contentResponse.text();
-
- // `tabs.onCreated` doesn't work here when manually creating new tabs,
- // because the opener is the current tab active.
- //
- // This events only fires when the page opens something.
- chrome.webNavigation.onCreatedNavigationTarget.addListener((details) => {
- translator.set(details.tabId, getOpenerId(details.sourceTabId));
-
- const opener = getOpenerId(details.tabId);
-
- if (counter.has(opener)) {
- counter.set(opener, counter.get(opener) + 1);
- } else {
- counter.set(opener, 2); // the current one + opener = 2
- }
- });
-
- chrome.webNavigation.onCommitted.addListener(async (details) => {
- if (details.url.startsWith('chrome')) {
- return;
- }
-
- const executeCodeInPageContext = `
- const script = document.createElement('script');
- script.textContent = code;
-
- const destination = document.head ?? document.documentElement;
-
- if (document instanceof HTMLDocument) {
- destination.append(script);
- script.remove();
- }
- `;
-
- // Race condition: website scripts may run first
- await chrome.tabs.executeScript(details.tabId, {
- code: `'use strict';
- (() => {
- if (window.totallyRandomString) {
- return;
- }
-
- window.totallyRandomString = true;
-
- const code = "'use strict'; const tabId = '${getOpenerId(
- details.tabId,
- )}'; (() => {\\n" + ${JSON.stringify(contentText)} + "\\n})();\\n";
- ${executeCodeInPageContext}
- })();
- `,
- matchAboutBlank: true,
- allFrames: true,
- runAt: 'document_start',
- });
- });
-
- chrome.tabs.query({}, async (tabs) => {
- for (const tab of tabs) {
- await onCompleted({
- frameId: 0,
- url: tab.url,
- tabId: tab.id,
- });
- }
- });
-})();
diff --git a/packages/browser-pool/tab-as-a-container/content.js b/packages/browser-pool/tab-as-a-container/content.js
deleted file mode 100644
index efbbff7c0835..000000000000
--- a/packages/browser-pool/tab-as-a-container/content.js
+++ /dev/null
@@ -1,611 +0,0 @@
-// When in doubt, refer to https://github.com/nodejs/node/blob/main/doc/contributing/primordials.md
-
-/* eslint-disable no-undef */
-/* eslint-disable no-cond-assign */
-/* eslint-disable prefer-rest-params */
-/* eslint-disable no-shadow */
-
-// TODO: https://developer.mozilla.org/en-US/docs/Web/API/Cookie_Store_API
-// TODO: custom error messages for Firefox (for now it uses Chrome's)
-
-// The only way to detect this "container" is to benchmark document.cookie or compare localStorage performance with sessionStorage (it's the same).
-
-const isFirefox = navigator.userAgent.includes('Firefox');
-const tabPrefix = `.${tabId}.`;
-
-const {
- String,
- Array,
- Set,
- TypeError,
- WeakMap,
- Object,
- Number,
- Function,
- Proxy,
- IDBFactory,
- IDBDatabase,
- BroadcastChannel,
- Storage,
- // We don't have to implement StorageEvent because this implementation does not use localStorage at all.
-} = globalThis;
-
-const ObjectDefineProperty = Object.defineProperty;
-const ObjectDefineProperties = Object.defineProperties;
-const ObjectGetOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;
-const ObjectGetPrototypeOf = Object.getPrototypeOf;
-const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
-const ObjectCreate = Object.create;
-const ObjectEntries = Object.entries;
-const ReflectGet = Reflect.get;
-const ReflectSet = Reflect.set;
-const ObjectKeys = Object.keys;
-const NumberIsFinite = Number.isFinite;
-
-const clonePrototype = (from) => {
- const target = ObjectCreate(null);
- const prototype = ObjectGetOwnPropertyDescriptors(from.prototype);
-
- const entries = ObjectEntries(prototype);
-
- for (let i = 0; i < entries.length; i++) {
- const entry = entries[i];
-
- const { 0: name, 1: descriptor } = entry;
- target[name] = ObjectCreate(null);
-
- if ('get' in descriptor) {
- target[name].get = descriptor.get;
- }
-
- if ('set' in descriptor) {
- target[name].set = descriptor.set;
- }
-
- if ('value' in descriptor) {
- target[name] = descriptor.value;
- }
- }
-
- return target;
-};
-
-const StringSplitSafe = (string, separator) => {
- const result = [];
- const separatorLength = separator.length;
-
- if (separatorLength === 0) {
- throw new Error('Separator must not be empty');
- }
-
- let startFrom = 0;
- let index;
- while ((index = StringPrototype.indexOf.call(string, separator, startFrom)) !== -1) {
- ArrayPrototype.push.call(result, StringPrototype.slice.call(string, startFrom, index));
-
- startFrom = index + separatorLength;
- }
-
- const lastChunk = StringPrototype.slice.call(string, startFrom);
-
- ArrayPrototype.push.call(result, lastChunk);
-
- return result;
-};
-
-const fixStack = (error) => {
- const lines = StringSplitSafe(error.stack, '\n');
-
- if (isFirefox) {
- ArrayPrototype.splice.call(lines, 0, 1);
- } else {
- ArrayPrototype.splice.call(lines, 1, 1);
- }
-
- error.stack = ArrayPrototype.join.call(lines, '\n');
-
- return error;
-};
-
-const SetPrototype = clonePrototype(Set);
-const WeakMapPrototype = clonePrototype(WeakMap);
-const ArrayPrototype = clonePrototype(Array);
-const StringPrototype = clonePrototype(String);
-const IDBFactoryPrototype = clonePrototype(IDBFactory);
-const IDBDatabasePrototype = clonePrototype(IDBDatabase);
-const StoragePrototype = clonePrototype(Storage);
-
-const privates = new WeakMap();
-
-let invocable = false;
-
-const FakeStorage = class Storage {
- constructor() {
- if (invocable) {
- throw fixStack(new TypeError('Illegal constructor'));
- }
-
- WeakMapPrototype.set.call(privates, this, arguments[0]);
- }
-
- get length() {
- const priv = WeakMapPrototype.get.call(privates, this);
- if (!priv) {
- throw fixStack(new TypeError('Illegal invocation'));
- }
-
- const { storage, prefix } = priv;
- const length = StoragePrototype.length.get.call(storage);
-
- let fakeLength = 0;
- for (let i = 0; i < length; i++) {
- const storageKey = StoragePrototype.key.call(storage, i);
- if (StringPrototype.startsWith.call(storageKey, prefix)) {
- fakeLength++;
- }
- }
-
- return fakeLength;
- }
-
- clear() {
- const priv = WeakMapPrototype.get.call(privates, this);
- if (!priv) {
- throw fixStack(new TypeError('Illegal invocation'));
- }
-
- const { storage, prefix } = priv;
- const length = StoragePrototype.length.get.call(storage);
- const keys = [];
-
- for (let i = 0; i < length; i++) {
- ArrayPrototype.push.call(keys, StoragePrototype.key.call(storage, i));
- }
-
- for (let i = 0; i < length; i++) {
- const storageKey = keys[i];
- if (StringPrototype.startsWith.call(storageKey, prefix)) {
- StoragePrototype.removeItem.call(storage, storageKey);
- }
- }
- }
-
- key(index) {
- const priv = WeakMapPrototype.get.call(privates, this);
- if (!priv) {
- throw fixStack(new TypeError('Illegal invocation'));
- }
-
- if (arguments.length === 0) {
- throw fixStack(
- new TypeError(`Failed to execute 'key' on 'Storage': 1 argument required, but only 0 present.`),
- );
- }
-
- index = NumberIsFinite(index) ? index : 0;
-
- const { storage, prefix } = priv;
- const length = StoragePrototype.length.get.call(storage);
-
- let fakeLength = 0;
- for (let i = 0; i < length; i++) {
- const storageKey = StoragePrototype.key.call(storage, i);
-
- if (StringPrototype.startsWith.call(storageKey, prefix)) {
- if (fakeLength === index) {
- return StringPrototype.slice.call(storageKey, prefix.length);
- }
-
- fakeLength++;
- }
- }
-
- return null;
- }
-
- getItem(key) {
- const priv = WeakMapPrototype.get.call(privates, this);
- if (!priv) {
- throw fixStack(new TypeError('Illegal invocation'));
- }
-
- if (arguments.length === 0) {
- throw fixStack(
- new TypeError(`Failed to execute 'getItem' on 'Storage': 1 argument required, but only 0 present.`),
- );
- }
-
- return StoragePrototype.getItem.call(priv.storage, priv.prefix + key);
- }
-
- removeItem(key) {
- const priv = WeakMapPrototype.get.call(privates, this);
- if (!priv) {
- throw fixStack(new TypeError('Illegal invocation'));
- }
-
- if (arguments.length === 0) {
- throw fixStack(
- new TypeError(`Failed to execute 'removeItem' on 'Storage': 1 argument required, but only 0 present.`),
- );
- }
-
- StoragePrototype.removeItem.call(priv.storage, priv.prefix + key);
- }
-
- setItem(key, value) {
- const priv = WeakMapPrototype.get.call(privates, this);
- if (!priv) {
- throw fixStack(new TypeError('Illegal invocation'));
- }
-
- if (arguments.length === 0 || arguments.length === 1) {
- throw fixStack(
- new TypeError(
- `Failed to execute 'setItem' on 'Storage': 2 arguments required, but only ${arguments.length} present.`,
- ),
- );
- }
-
- StoragePrototype.setItem.call(priv.storage, priv.prefix + key, value);
- }
-};
-
-const FakeStoragePrototype = clonePrototype(FakeStorage);
-
-const createStorage = ({ storage, prefix }) => {
- invocable = false;
- const fake = new FakeStorage({ storage, prefix });
- invocable = true;
-
- const proxy = new Proxy(fake, {
- __proto__: null,
- // Default:
- // apply: (target, thisArg, args) => {},
- // construct(target, args) => {},
- // setPrototypeOf: (target, proto) => {},
- // getPrototypeOf: (target) => {},
- defineProperty: (target, key, descriptor) => {
- if ('set' in descriptor || 'get' in descriptor) {
- throw fixStack(
- new TypeError(`Failed to set a named property on 'Storage': Accessor properties are not allowed.`),
- );
- }
-
- FakeStoragePrototype.setItem.call(target, key, descriptor.value);
- },
- deleteProperty: (target, key) => {
- if (typeof key === 'symbol') {
- delete target[key];
- } else {
- FakeStoragePrototype.removeItem.call(target, key);
- }
-
- return true;
- },
- get: (target, key) => {
- if (typeof key === 'symbol') {
- return target[key];
- }
-
- if (key in target) {
- return ReflectGet(target, key);
- }
-
- return FakeStoragePrototype.getItem.call(target, key) ?? undefined;
- },
- set: (target, key, value) => {
- if (typeof key === 'symbol') {
- ObjectDefineProperty(target, key, {
- __proto__: null,
- value,
- configurable: true,
- writable: true,
- enumerable: false,
- });
-
- return true;
- }
-
- if (key in target) {
- return ReflectSet(target, key, value);
- }
-
- return FakeStoragePrototype.setItem.call(target, key, value) ?? true;
- },
- has: (target, key) => {
- if (key in target) {
- return true;
- }
-
- return FakeStoragePrototype.getItem.call(target, key) !== null;
- },
- isExtensible: () => {
- return true;
- },
- preventExtensions: () => {
- throw fixStack(new TypeError(`Cannot prevent extensions`));
- },
- getOwnPropertyDescriptor: (target, key) => {
- if (key in target) {
- return ObjectGetOwnPropertyDescriptor(ObjectGetPrototypeOf(target), key);
- }
-
- const value = FakeStoragePrototype.getItem.call(target, key);
-
- if (value !== null) {
- return {
- value,
- writable: true,
- enumerable: true,
- configurable: true,
- };
- }
- },
- ownKeys: (target) => {
- const keys = [];
-
- const { storage, prefix } = WeakMapPrototype.get.call(privates, target);
- const length = StoragePrototype.length.get.call(storage);
-
- for (let i = 0; i < length; i++) {
- const storageKey = StoragePrototype.key.call(storage, i);
-
- if (StringPrototype.startsWith.call(storageKey, prefix)) {
- ArrayPrototype.push.call(keys, StringPrototype.slice.call(storageKey, prefix.length));
- }
- }
-
- ArrayPrototype.push.apply(keys, ObjectKeys(target));
-
- const set = new Set();
-
- for (let i = 0; i < keys.length; i++) {
- SetPrototype.add.call(set, keys[i]);
- }
-
- return ArrayPrototype.slice.call(set);
- },
- });
-
- privates.set(proxy, privates.get(fake));
-
- return proxy;
-};
-
-const toHide = new WeakMap();
-for (const Type of [Function, Object, Array]) {
- const create = (fallback) =>
- function () {
- if (this instanceof FakeStorage) {
- return '[object Storage]';
- }
-
- if (WeakMapPrototype.has.call(toHide, this)) {
- return `function ${WeakMapPrototype.get.call(toHide, this)}() { [native code] }`;
- }
-
- return fallback.call(this);
- };
-
- const toString = create(Type.prototype.toString);
- const toLocaleString = create(Type.prototype.toLocaleString);
-
- WeakMapPrototype.set.call(toHide, toString, 'toString');
- WeakMapPrototype.set.call(toHide, toLocaleString, 'toLocaleString');
-
- Object.defineProperty(Type.prototype, 'toString', {
- __proto__: null,
- value: toString,
- });
- Object.defineProperty(Type.prototype, 'toLocaleString', {
- __proto__: null,
- value: toLocaleString,
- });
-}
-
-// https://stackoverflow.com/q/30481516
-try {
- // We use sessionStorage as the underlying storage for localStorage.
- // This way we do not have to worry about clean up.
- const { sessionStorage } = globalThis;
-
- const fakeLocalStorage = createStorage({ storage: sessionStorage, prefix: 'l.' });
- const fakeSessionStorage = createStorage({ storage: sessionStorage, prefix: 's.' });
-
- const getLocalStorage = function localStorage() {
- return fakeLocalStorage;
- };
- const getSessionStorage = function sessionStorage() {
- return fakeSessionStorage;
- };
-
- WeakMapPrototype.set.call(toHide, FakeStorage, 'Storage');
- WeakMapPrototype.set.call(toHide, FakeStoragePrototype.key, 'key');
- WeakMapPrototype.set.call(toHide, FakeStoragePrototype.getItem, 'getItem');
- WeakMapPrototype.set.call(toHide, FakeStoragePrototype.setItem, 'setItem');
- WeakMapPrototype.set.call(toHide, FakeStoragePrototype.removeItem, 'removeItem');
- WeakMapPrototype.set.call(toHide, FakeStoragePrototype.clear, 'clear');
- WeakMapPrototype.set.call(toHide, getLocalStorage, 'get localStorage');
- WeakMapPrototype.set.call(toHide, getSessionStorage, 'get sessionStorage');
-
- ObjectDefineProperties(window, {
- __proto__: null,
- Storage: {
- __proto__: null,
- value: FakeStorage,
- configurable: true,
- enumerable: false,
- writable: true,
- },
- localStorage: {
- __proto__: null,
- configurable: true,
- enumerable: true,
- get: getLocalStorage,
- set: undefined,
- },
- sessionStorage: {
- __proto__: null,
- configurable: true,
- enumerable: true,
- get: getSessionStorage,
- set: undefined,
- },
- });
-} catch (error) {
- console.error(error);
-}
-
-{
- const { Document } = globalThis;
-
- const realGetCookie = ObjectGetOwnPropertyDescriptor(Document.prototype, 'cookie').get;
- const realSetCookie = ObjectGetOwnPropertyDescriptor(Document.prototype, 'cookie').set;
-
- const getCookie = function cookie() {
- try {
- const cookies = StringSplitSafe(realGetCookie.call(this), '; ');
- const filtered = ArrayPrototype.filter.call(cookies, (cookie) =>
- StringPrototype.startsWith.call(cookie, tabPrefix),
- );
- const mapped = ArrayPrototype.map.call(filtered, (cookie) => {
- const result = StringPrototype.slice.call(cookie, tabPrefix.length);
-
- if (result[0] === '=') {
- return StringPrototype.slice.call(result, 1);
- }
-
- return result;
- });
-
- return ArrayPrototype.join.call(mapped, '; ');
- } catch (error) {
- throw fixStack(error);
- }
- };
-
- const setCookie = function cookie(cookieString) {
- cookieString = StringPrototype.trimStart.call(String(cookieString));
-
- const delimiterIndex = StringPrototype.indexOf.call(cookieString, ';');
- const equalsIndex = StringPrototype.indexOf.call(cookieString, '=');
- if (equalsIndex === -1 || (delimiterIndex !== -1 && equalsIndex > delimiterIndex)) {
- cookieString = `=${cookieString}`;
- }
-
- try {
- realSetCookie.call(this, tabPrefix + cookieString);
- } catch (error) {
- throw fixStack(error);
- }
- };
-
- WeakMapPrototype.set.call(toHide, getCookie, 'get cookie');
- WeakMapPrototype.set.call(toHide, setCookie, 'set cookie');
-
- ObjectDefineProperty(Document.prototype, 'cookie', {
- __proto__: null,
- configurable: true,
- enumerable: true,
- get: getCookie,
- set: setCookie,
- });
-}
-
-{
- const openDatabase = function open(name) {
- try {
- return IDBFactoryPrototype.open.call(this, tabPrefix + name);
- } catch (error) {
- throw fixStack(error);
- }
- };
-
- const deleteDatabase = function deleteDatabase(name) {
- try {
- return IDBFactoryPrototype.deleteDatabase.call(this, tabPrefix + name);
- } catch (error) {
- throw fixStack(error);
- }
- };
-
- const databaseName = function name() {
- try {
- return StringPrototype.slice.call(IDBDatabasePrototype.name.get.call(this), tabPrefix.length);
- } catch (error) {
- throw fixStack(error);
- }
- };
-
- WeakMapPrototype.set.call(toHide, openDatabase, 'open');
- WeakMapPrototype.set.call(toHide, deleteDatabase, 'deleteDatabase');
- WeakMapPrototype.set.call(toHide, databaseName, 'get name');
-
- ObjectDefineProperties(IDBFactory.prototype, {
- __proto__: null,
- open: {
- __proto__: null,
- writable: true,
- configurable: true,
- enumerable: true,
- value: openDatabase,
- },
- deleteDatabase: {
- __proto__: null,
- writable: true,
- configurable: true,
- enumerable: true,
- value: deleteDatabase,
- },
- name: {
- __proto__: null,
- configurable: true,
- enumerable: true,
- get: databaseName,
- set: undefined,
- },
- });
-}
-
-{
- ObjectDefineProperty(window, 'BroadcastChannel', {
- __proto__: null,
- configurable: true,
- enumerable: false,
- writable: true,
- value: new Proxy(BroadcastChannel, {
- __proto__: null,
- construct: (Target, name) => {
- return new Target(tabPrefix + name);
- },
- }),
- });
-
- WeakMapPrototype.set.call(toHide, window.BroadcastChannel, 'BroadcastChannel');
-
- const getBroadcastChannelName = ObjectGetOwnPropertyDescriptor(BroadcastChannel.prototype, 'name').get;
- const broadcastChannelName = function name() {
- try {
- const realName = getBroadcastChannelName.call(this);
-
- if (StringPrototype.startsWith.call(realName, tabPrefix)) {
- return StringPrototype.slice.call(realName, tabPrefix.length);
- }
-
- return realName;
- } catch (error) {
- throw fixStack(error);
- }
- };
-
- WeakMapPrototype.set.call(toHide, broadcastChannelName, 'get name');
-
- ObjectDefineProperty(BroadcastChannel.prototype, 'name', {
- __proto__: null,
- configurable: true,
- enumerable: true,
- get: broadcastChannelName,
- set: undefined,
- });
-}
diff --git a/packages/browser-pool/tab-as-a-container/manifest.json b/packages/browser-pool/tab-as-a-container/manifest.json
deleted file mode 100644
index cc77a982f9a9..000000000000
--- a/packages/browser-pool/tab-as-a-container/manifest.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "manifest_version": 2,
- "name": "Tab as a Container",
- "version": "1.0.0",
- "background": {
- "scripts": ["background.js"],
- "persistent": true
- },
- "permissions": [
- "webRequest",
- "webRequestBlocking",
- "webNavigation",
- "tabs",
- "cookies",
- "privacy",
- "proxy",
- ""
- ],
- "web_accessible_resources": ["content.js"],
- "incognito": "not_allowed"
-}
diff --git a/packages/browser-pool/test/changing-page-options.test.ts b/packages/browser-pool/test/changing-page-options.test.ts
index 69c68953b6fa..f843370f401d 100644
--- a/packages/browser-pool/test/changing-page-options.test.ts
+++ b/packages/browser-pool/test/changing-page-options.test.ts
@@ -8,7 +8,7 @@ import playwright from 'playwright';
import type { Server as ProxyChainServer } from 'proxy-chain';
import puppeteer from 'puppeteer';
-import { createProxyServer } from '../../../test/browser-pool/browser-plugins/create-proxy-server';
+import { createProxyServer } from '../../../test/browser-pool/browser-plugins/create-proxy-server.js';
describe.each([
['Puppeteer', new PuppeteerPlugin(puppeteer, { useIncognitoPages: true })],
diff --git a/packages/browser-pool/test/proxy-sugar.test.ts b/packages/browser-pool/test/proxy-sugar.test.ts
index a16b960cf80b..130ccfb0389e 100644
--- a/packages/browser-pool/test/proxy-sugar.test.ts
+++ b/packages/browser-pool/test/proxy-sugar.test.ts
@@ -7,7 +7,7 @@ import playwright from 'playwright';
import type { Server as ProxyChainServer } from 'proxy-chain';
import puppeteer from 'puppeteer';
-import { createProxyServer } from '../../../test/browser-pool/browser-plugins/create-proxy-server';
+import { createProxyServer } from '../../../test/browser-pool/browser-plugins/create-proxy-server.js';
describe.each([
['Puppeteer', new PuppeteerPlugin(puppeteer, { useIncognitoPages: true })],
diff --git a/packages/cheerio-crawler/package.json b/packages/cheerio-crawler/package.json
index ad5a7e2ee760..c53da696fdb6 100644
--- a/packages/cheerio-crawler/package.json
+++ b/packages/cheerio-crawler/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,7 +40,7 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
@@ -56,8 +50,8 @@
"@crawlee/http": "3.13.3",
"@crawlee/types": "3.13.3",
"@crawlee/utils": "3.13.3",
- "cheerio": "1.0.0-rc.12",
- "htmlparser2": "^9.0.0",
- "tslib": "^2.4.0"
+ "cheerio": "^1.0.0",
+ "htmlparser2": "^10.0.0",
+ "tslib": "^2.8.1"
}
}
diff --git a/packages/cheerio-crawler/src/index.ts b/packages/cheerio-crawler/src/index.ts
index f4c05bc080f8..adb102844a61 100644
--- a/packages/cheerio-crawler/src/index.ts
+++ b/packages/cheerio-crawler/src/index.ts
@@ -1,2 +1,2 @@
export * from '@crawlee/http';
-export * from './internals/cheerio-crawler';
+export * from './internals/cheerio-crawler.js';
diff --git a/packages/cheerio-crawler/src/internals/cheerio-crawler.ts b/packages/cheerio-crawler/src/internals/cheerio-crawler.ts
index 700ef3e0c629..fa9d0d577ae6 100644
--- a/packages/cheerio-crawler/src/internals/cheerio-crawler.ts
+++ b/packages/cheerio-crawler/src/internals/cheerio-crawler.ts
@@ -19,8 +19,7 @@ import type { Dictionary } from '@crawlee/types';
import { type CheerioRoot, extractUrlsFromCheerio, type RobotsTxtFile } from '@crawlee/utils';
import type { CheerioOptions } from 'cheerio';
import * as cheerio from 'cheerio';
-import { DomHandler, parseDocument } from 'htmlparser2';
-import { WritableStream } from 'htmlparser2/lib/WritableStream';
+import { parseDocument } from 'htmlparser2';
export type CheerioErrorHandler<
UserData extends Dictionary = any, // with default to Dictionary we cant use a typed router in untyped crawler
@@ -176,13 +175,8 @@ export class CheerioCrawler extends HttpCrawler {
) {
const body = await readStreamToString(response);
const dom = parseDocument(body, { decodeEntities: true, xmlMode: isXml });
-
- const $ = cheerio.load(body, {
- xmlMode: isXml,
- // Recent versions of cheerio use parse5 as the HTML parser/serializer. It's more strict than htmlparser2
- // and not good for scraping. It also does not have a great streaming interface.
- // Here we tell cheerio to use htmlparser2 for serialization, otherwise the conflict produces weird errors.
- _useHtmlParser2: true,
+ const $ = cheerio.load(dom, {
+ xml: { decodeEntities: true, xmlMode: isXml },
} as CheerioOptions);
return {
@@ -203,22 +197,6 @@ export class CheerioCrawler extends HttpCrawler {
};
}
- // TODO: unused code - remove in 4.0
- protected async _parseHtmlToDom(response: IncomingMessage, isXml: boolean) {
- return new Promise((resolve, reject) => {
- const domHandler = new DomHandler(
- (err, dom) => {
- if (err) reject(err);
- else resolve(dom);
- },
- { xmlMode: isXml },
- );
- const parser = new WritableStream(domHandler, { decodeEntities: true, xmlMode: isXml });
- parser.on('error', reject);
- response.on('error', reject).pipe(parser);
- });
- }
-
protected override async _runRequestHandler(context: CheerioCrawlingContext) {
context.waitForSelector = async (selector?: string, _timeoutMs?: number) => {
if (context.$(selector).get().length === 0) {
diff --git a/packages/cheerio-crawler/test/migration.test.ts b/packages/cheerio-crawler/test/migration.test.ts
deleted file mode 100644
index ce0698a82f62..000000000000
--- a/packages/cheerio-crawler/test/migration.test.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-import type { Log } from '@apify/log';
-import log from '@apify/log';
-
-import { MemoryStorageEmulator } from '../../../test/shared/MemoryStorageEmulator';
-import { CheerioCrawler, RequestList } from '../src/index';
-
-const localStorageEmulator = new MemoryStorageEmulator();
-
-beforeEach(async () => {
- await localStorageEmulator.init();
-});
-
-afterAll(async () => {
- await localStorageEmulator.destroy();
-});
-
-describe('Moving from handleRequest* to requestHandler*', () => {
- let requestList: RequestList;
- let testLogger: Log;
-
- beforeEach(async () => {
- requestList = await RequestList.open(null, []);
- testLogger = log.child({ prefix: 'CheerioCrawler' });
- });
-
- describe('handlePageFunction -> requestHandler', () => {
- it('should log when providing both handlePageFunction and requestHandler', () => {
- const oldHandler = () => {};
- const newHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new CheerioCrawler({
- requestList,
- log: testLogger,
- requestHandler: newHandler,
- handlePageFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `Both "requestHandler" and "handlePageFunction" were provided in the crawler options.`,
- `"handlePageFunction" has been renamed to "requestHandler", and will be removed in a future version.`,
- `As such, "requestHandler" will be used instead.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandler']).toBe(newHandler);
- });
-
- it('should log when providing only the deprecated handlePageFunction', () => {
- const oldHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new CheerioCrawler({
- requestList,
- log: testLogger,
- handlePageFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `"handlePageFunction" has been renamed to "requestHandler", and will be removed in a future version.`,
- `The provided value will be used, but you should rename "handlePageFunction" to "requestHandler" in your crawler options.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandler']).toBe(oldHandler);
- });
-
- it('should not log when providing only requestHandler', () => {
- const handler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new CheerioCrawler({
- requestList,
- log: testLogger,
- requestHandler: handler,
- });
-
- expect(warningSpy).not.toHaveBeenCalled();
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['requestHandler']).toBe(handler);
- });
- });
-
- describe('handleFailedRequestFunction -> failedRequestHandler', () => {
- it('should log when providing both handleFailedRequestFunction and failedRequestHandler', () => {
- const oldHandler = () => {};
- const newHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new CheerioCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- failedRequestHandler: newHandler,
- handleFailedRequestFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `Both "failedRequestHandler" and "handleFailedRequestFunction" were provided in the crawler options.`,
- `"handleFailedRequestFunction" has been renamed to "failedRequestHandler", and will be removed in a future version.`,
- `As such, "failedRequestHandler" will be used instead.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(newHandler);
- });
-
- it('should log when providing only the deprecated handleFailedRequestFunction', () => {
- const oldHandler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new CheerioCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- handleFailedRequestFunction: oldHandler,
- });
-
- expect(warningSpy).toHaveBeenCalledWith<[string]>(
- [
- `"handleFailedRequestFunction" has been renamed to "failedRequestHandler", and will be removed in a future version.`,
- `The provided value will be used, but you should rename "handleFailedRequestFunction" to "failedRequestHandler" in your crawler options.`,
- ].join('\n'),
- );
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(oldHandler);
- });
-
- it('should not log when providing only failedRequestHandler', () => {
- const handler = () => {};
- const warningSpy = vitest.spyOn(testLogger, 'warning');
-
- const crawler = new CheerioCrawler({
- requestList,
- log: testLogger,
- requestHandler: () => {},
- failedRequestHandler: handler,
- });
-
- expect(warningSpy).not.toHaveBeenCalled();
-
- // eslint-disable-next-line dot-notation -- accessing private property
- expect(crawler['failedRequestHandler']).toBe(handler);
- });
- });
-});
diff --git a/packages/cheerio-crawler/test/xml.test.ts b/packages/cheerio-crawler/test/xml.test.ts
index c617ceb0fb3f..b6e84fbbcbac 100644
--- a/packages/cheerio-crawler/test/xml.test.ts
+++ b/packages/cheerio-crawler/test/xml.test.ts
@@ -3,7 +3,7 @@ import type { Server } from 'node:http';
import type { CheerioCrawlingContext } from '@crawlee/cheerio';
import { CheerioCrawler } from '@crawlee/cheerio';
-import { runExampleComServer } from '../../../test/shared/_helper';
+import { runExampleComServer } from '../../../test/shared/_helper.js';
let serverAddress = 'http://localhost:';
let port: number;
diff --git a/packages/cli/package.json b/packages/cli/package.json
index ac54e095db92..d1e9b6bf629d 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -3,20 +3,14 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
"bin": {
"crawlee": "./src/index.ts"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -52,11 +46,10 @@
},
"dependencies": {
"@crawlee/templates": "3.13.3",
+ "@inquirer/prompts": "^7.5.0",
"ansi-colors": "^4.1.3",
- "fs-extra": "^11.0.0",
- "inquirer": "^8.2.4",
- "tslib": "^2.4.0",
- "yargonaut": "^1.1.4",
- "yargs": "^17.5.1"
+ "fs-extra": "^11.3.0",
+ "tslib": "^2.8.1",
+ "yargs": "^18.0.0"
}
}
diff --git a/packages/cli/src/commands/CreateProjectCommand.ts b/packages/cli/src/commands/CreateProjectCommand.ts
index cb1055246a00..5f5fbe3163e8 100644
--- a/packages/cli/src/commands/CreateProjectCommand.ts
+++ b/packages/cli/src/commands/CreateProjectCommand.ts
@@ -7,9 +7,9 @@ import { setTimeout } from 'node:timers/promises';
import type { Template } from '@crawlee/templates';
import { fetchManifest } from '@crawlee/templates';
+import { input, select } from '@inquirer/prompts';
import colors from 'ansi-colors';
-import { ensureDir } from 'fs-extra';
-import { prompt } from 'inquirer';
+import { ensureDir } from 'fs-extra/esm';
import type { ArgumentsCamelCase, Argv, CommandModule } from 'yargs';
interface CreateProjectArgs {
@@ -137,22 +137,17 @@ export class CreateProjectCommand implements CommandModule {
- try {
- validateProjectName(promptText);
- } catch (err: any) {
- return err.message;
- }
- return true;
- },
+ projectName = await input({
+ message: 'Name of the new project folder:',
+ validate: (promptText) => {
+ try {
+ validateProjectName(promptText);
+ } catch (err: any) {
+ return err.message;
+ }
+ return true;
},
- ]);
- ({ projectName } = projectNamePrompt);
+ });
} else {
validateProjectName(projectName);
}
@@ -164,16 +159,11 @@ export class CreateProjectCommand implements CommandModule [options]')
@@ -43,12 +36,14 @@ const cli = yargs
.command(new RunProjectCommand())
.command(new InstallPlaywrightBrowsersCommand())
.recommendCommands()
+ .showHelpOnFail(true)
+ .demandCommand(1, '')
.strict();
void (async () => {
const args = (await cli.parse(process.argv.slice(2))) as { _: string[] };
if (args._.length === 0) {
- yargs.showHelp();
+ yargs(process.argv.slice(2)).showHelp();
}
})();
diff --git a/packages/core/package.json b/packages/core/package.json
index eb6dbff4dcd7..36ff8e5f4599 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,34 +40,34 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/consts": "^2.20.0",
- "@apify/datastructures": "^2.0.0",
- "@apify/log": "^2.4.0",
- "@apify/pseudo_url": "^2.0.30",
- "@apify/timeout": "^0.3.0",
- "@apify/utilities": "^2.7.10",
+ "@apify/consts": "^2.41.0",
+ "@apify/datastructures": "^2.0.3",
+ "@apify/log": "^2.5.18",
+ "@apify/pseudo_url": "^2.0.59",
+ "@apify/timeout": "^0.3.2",
+ "@apify/utilities": "^2.15.5",
"@crawlee/memory-storage": "3.13.3",
"@crawlee/types": "3.13.3",
"@crawlee/utils": "3.13.3",
- "@sapphire/async-queue": "^1.5.1",
- "@vladfrangu/async_event_emitter": "^2.2.2",
- "csv-stringify": "^6.2.0",
- "fs-extra": "^11.0.0",
- "got-scraping": "^4.0.0",
+ "@sapphire/async-queue": "^1.5.5",
+ "@vladfrangu/async_event_emitter": "^2.4.6",
+ "csv-stringify": "^6.5.2",
+ "fs-extra": "^11.3.0",
+ "got-scraping": "^4.1.1",
"json5": "^2.2.3",
- "minimatch": "^9.0.0",
- "ow": "^0.28.1",
- "stream-json": "^1.8.0",
- "tldts": "^6.0.0",
- "tough-cookie": "^5.0.0",
- "tslib": "^2.4.0",
- "type-fest": "^4.0.0"
+ "minimatch": "^10.0.1",
+ "ow": "^2.0.0",
+ "stream-json": "^1.9.1",
+ "tldts": "^7.0.6",
+ "tough-cookie": "^5.1.2",
+ "tslib": "^2.8.1",
+ "type-fest": "^4.41.0"
}
}
diff --git a/packages/core/src/autoscaling/autoscaled_pool.ts b/packages/core/src/autoscaling/autoscaled_pool.ts
index 7bfa33f80707..bfc11c07b265 100644
--- a/packages/core/src/autoscaling/autoscaled_pool.ts
+++ b/packages/core/src/autoscaling/autoscaled_pool.ts
@@ -5,13 +5,13 @@ import { addTimeoutToPromise } from '@apify/timeout';
import type { BetterIntervalID } from '@apify/utilities';
import { betterClearInterval, betterSetInterval } from '@apify/utilities';
-import { Configuration } from '../configuration';
-import { CriticalError } from '../errors';
-import { log as defaultLog } from '../log';
-import type { SnapshotterOptions } from './snapshotter';
-import { Snapshotter } from './snapshotter';
-import type { SystemInfo, SystemStatusOptions } from './system_status';
-import { SystemStatus } from './system_status';
+import { Configuration } from '../configuration.js';
+import { CriticalError } from '../errors.js';
+import { log as defaultLog } from '../log.js';
+import type { SnapshotterOptions } from './snapshotter.js';
+import { Snapshotter } from './snapshotter.js';
+import type { SystemInfo, SystemStatusOptions } from './system_status.js';
+import { SystemStatus } from './system_status.js';
export interface AutoscaledPoolOptions {
/**
diff --git a/packages/core/src/autoscaling/index.ts b/packages/core/src/autoscaling/index.ts
index 991e454b1988..328db1f1c3f3 100644
--- a/packages/core/src/autoscaling/index.ts
+++ b/packages/core/src/autoscaling/index.ts
@@ -1,3 +1,3 @@
-export * from './autoscaled_pool';
-export * from './snapshotter';
-export * from './system_status';
+export * from './autoscaled_pool.js';
+export * from './snapshotter.js';
+export * from './system_status.js';
diff --git a/packages/core/src/autoscaling/snapshotter.ts b/packages/core/src/autoscaling/snapshotter.ts
index 9792bc2c37e1..f6bcd801d2cc 100644
--- a/packages/core/src/autoscaling/snapshotter.ts
+++ b/packages/core/src/autoscaling/snapshotter.ts
@@ -1,16 +1,16 @@
import type { StorageClient } from '@crawlee/types';
-import { getMemoryInfo, getMemoryInfoV2, isContainerized } from '@crawlee/utils';
+import { getMemoryInfo, isContainerized } from '@crawlee/utils';
import ow from 'ow';
import type { Log } from '@apify/log';
import type { BetterIntervalID } from '@apify/utilities';
import { betterClearInterval, betterSetInterval } from '@apify/utilities';
-import { Configuration } from '../configuration';
-import type { EventManager } from '../events/event_manager';
-import { EventType } from '../events/event_manager';
-import { log as defaultLog } from '../log';
-import type { SystemInfo } from './system_status';
+import { Configuration } from '../configuration.js';
+import type { EventManager } from '../events/event_manager.js';
+import { EventType } from '../events/event_manager.js';
+import { log as defaultLog } from '../log.js';
+import type { SystemInfo } from './system_status.js';
const RESERVE_MEMORY_RATIO = 0.5;
const CLIENT_RATE_LIMIT_ERROR_RETRY_COUNT = 2;
@@ -195,16 +195,9 @@ export class Snapshotter {
if (memoryMbytes > 0) {
this.maxMemoryBytes = memoryMbytes * 1024 * 1024;
} else {
- let totalBytes: number;
-
- if (this.config.get('systemInfoV2')) {
- const containerized = this.config.get('containerized', await isContainerized());
- const memInfo = await getMemoryInfoV2(containerized);
- totalBytes = memInfo.totalBytes;
- } else {
- const memInfo = await getMemoryInfo();
- totalBytes = memInfo.totalBytes;
- }
+ const containerized = this.config.get('containerized', await isContainerized());
+ const memInfo = await getMemoryInfo(containerized);
+ const totalBytes = memInfo.totalBytes;
this.maxMemoryBytes = Math.ceil(totalBytes * this.config.get('availableMemoryRatio')!);
this.log.debug(
diff --git a/packages/core/src/autoscaling/system_status.ts b/packages/core/src/autoscaling/system_status.ts
index b2b86434e323..862d8360dca6 100644
--- a/packages/core/src/autoscaling/system_status.ts
+++ b/packages/core/src/autoscaling/system_status.ts
@@ -1,8 +1,8 @@
import { weightedAvg } from '@crawlee/utils';
import ow from 'ow';
-import type { Configuration } from '../configuration';
-import { Snapshotter } from './snapshotter';
+import type { Configuration } from '../configuration.js';
+import { Snapshotter } from './snapshotter.js';
/**
* Represents the current status of the system.
diff --git a/packages/core/src/configuration.ts b/packages/core/src/configuration.ts
index 4c93004ef322..d54b2703fc4c 100644
--- a/packages/core/src/configuration.ts
+++ b/packages/core/src/configuration.ts
@@ -1,17 +1,19 @@
import { AsyncLocalStorage } from 'node:async_hooks';
import { EventEmitter } from 'node:events';
+import { readFileSync } from 'node:fs';
import { join } from 'node:path';
import type { MemoryStorageOptions } from '@crawlee/memory-storage';
import { MemoryStorage } from '@crawlee/memory-storage';
import type { Dictionary, StorageClient } from '@crawlee/types';
-import { pathExistsSync, readFileSync } from 'fs-extra';
+import { pathExistsSync } from 'fs-extra/esm';
import log, { LogLevel } from '@apify/log';
-import { type EventManager, LocalEventManager } from './events';
-import type { StorageManager } from './storages';
-import { type Constructor, entries } from './typedefs';
+import { type EventManager } from './events/event_manager.js';
+import { LocalEventManager } from './events/local_event_manager.js';
+import type { StorageManager } from './storages/storage_manager.js';
+import { type Constructor, entries } from './typedefs.js';
export interface ConfigurationOptions {
/**
@@ -163,13 +165,6 @@ export interface ConfigurationOptions {
*/
persistStorage?: boolean;
- /**
- * Defines whether to use the systemInfoV2 metric collection experiment.
- *
- * Alternative to `CRAWLEE_SYSTEM_INFO_V2` environment variable.
- */
- systemInfoV2?: boolean;
-
/**
* Used in place of `isContainerized()` when collecting system metrics.
*
@@ -241,7 +236,6 @@ export interface ConfigurationOptions {
* `defaultBrowserPath` | `CRAWLEE_DEFAULT_BROWSER_PATH` | -
* `disableBrowserSandbox` | `CRAWLEE_DISABLE_BROWSER_SANDBOX` | -
* `availableMemoryRatio` | `CRAWLEE_AVAILABLE_MEMORY_RATIO` | `0.25`
- * `systemInfoV2` | `CRAWLEE_SYSTEM_INFO_V2` | false
* `containerized | `CRAWLEE_CONTAINERIZED | -
*/
export class Configuration {
@@ -264,7 +258,6 @@ export class Configuration {
CRAWLEE_DISABLE_BROWSER_SANDBOX: 'disableBrowserSandbox',
CRAWLEE_LOG_LEVEL: 'logLevel',
CRAWLEE_PERSIST_STORAGE: 'persistStorage',
- CRAWLEE_SYSTEM_INFO_V2: 'systemInfoV2',
CRAWLEE_CONTAINERIZED: 'containerized',
};
@@ -274,7 +267,6 @@ export class Configuration {
'xvfb',
'disableBrowserSandbox',
'persistStorage',
- 'systemInfoV2',
'containerized',
];
@@ -295,7 +287,6 @@ export class Configuration {
persistStateIntervalMillis: 60_000,
systemInfoIntervalMillis: 1_000,
persistStorage: true,
- systemInfoV2: false,
};
/**
diff --git a/packages/core/src/cookie_utils.ts b/packages/core/src/cookie_utils.ts
index a97477ce7370..60083fdca3b4 100644
--- a/packages/core/src/cookie_utils.ts
+++ b/packages/core/src/cookie_utils.ts
@@ -1,8 +1,8 @@
import type { Cookie as CookieObject } from '@crawlee/types';
import { Cookie, CookieJar } from 'tough-cookie';
-import { log } from './log';
-import { CookieParseError } from './session_pool/errors';
+import { log } from './log.js';
+import { CookieParseError } from './session_pool/errors.js';
export interface ResponseLike {
url?: string | (() => string);
@@ -122,7 +122,7 @@ export function mergeCookies(url: string, sourceCookies: string[]): string {
});
if (similarKeyCookie) {
- log.deprecated(
+ log.warningOnce(
`Found cookies with similar name during cookie merging: '${cookie.key}' and '${similarKeyCookie.key}'`,
);
}
diff --git a/packages/core/src/crawlers/crawler_commons.ts b/packages/core/src/crawlers/crawler_commons.ts
index 40187cdbd787..4304e3aa7b60 100644
--- a/packages/core/src/crawlers/crawler_commons.ts
+++ b/packages/core/src/crawlers/crawler_commons.ts
@@ -1,16 +1,16 @@
import type { BatchAddRequestsResult, Dictionary } from '@crawlee/types';
-// @ts-expect-error This throws a compilation error due to got-scraping being ESM only but we only import types, so its alllll gooooood
import type { OptionsInit, Response as GotResponse } from 'got-scraping';
import type { ReadonlyDeep } from 'type-fest';
-import type { Configuration } from '../configuration';
-import type { EnqueueLinksOptions } from '../enqueue_links/enqueue_links';
-import type { Log } from '../log';
-import type { ProxyInfo } from '../proxy_configuration';
-import type { Request, Source } from '../request';
-import type { Session } from '../session_pool/session';
-import type { Dataset, RecordOptions, RequestQueueOperationOptions } from '../storages';
-import { KeyValueStore } from '../storages';
+import type { Configuration } from '../configuration.js';
+import type { EnqueueLinksOptions } from '../enqueue_links/enqueue_links.js';
+import type { Log } from '../log.js';
+import type { ProxyInfo } from '../proxy_configuration.js';
+import type { Request, Source } from '../request.js';
+import type { Session } from '../session_pool/session.js';
+import type { Dataset } from '../storages/dataset.js';
+import { KeyValueStore, type RecordOptions } from '../storages/key_value_store.js';
+import type { RequestQueueOperationOptions } from '../storages/request_provider.js';
/** @internal */
export type IsAny = 0 extends 1 & T ? true : false;
diff --git a/packages/core/src/crawlers/crawler_extension.ts b/packages/core/src/crawlers/crawler_extension.ts
index c098d6c15a61..b0d4063891d9 100644
--- a/packages/core/src/crawlers/crawler_extension.ts
+++ b/packages/core/src/crawlers/crawler_extension.ts
@@ -1,4 +1,4 @@
-import { type Log, log as defaultLog } from '../log';
+import { type Log, log as defaultLog } from '../log.js';
/**
* Abstract class with pre-defined method to connect to the Crawlers class by the "use" crawler method.
diff --git a/packages/core/src/crawlers/crawler_utils.ts b/packages/core/src/crawlers/crawler_utils.ts
index 058132afaa3d..77752c0450be 100644
--- a/packages/core/src/crawlers/crawler_utils.ts
+++ b/packages/core/src/crawlers/crawler_utils.ts
@@ -1,6 +1,6 @@
import { TimeoutError } from '@apify/timeout';
-import type { Session } from '../session_pool/session';
+import type { Session } from '../session_pool/session.js';
/**
* Handles timeout request
diff --git a/packages/core/src/crawlers/error_snapshotter.ts b/packages/core/src/crawlers/error_snapshotter.ts
index 96af2f3f49e3..298562b9bebb 100644
--- a/packages/core/src/crawlers/error_snapshotter.ts
+++ b/packages/core/src/crawlers/error_snapshotter.ts
@@ -1,8 +1,8 @@
import crypto from 'node:crypto';
-import type { CrawlingContext } from '../crawlers/crawler_commons';
-import type { KeyValueStore } from '../storages';
-import type { ErrnoException } from './error_tracker';
+import type { CrawlingContext } from '../crawlers/crawler_commons.js';
+import type { KeyValueStore } from '../storages/key_value_store.js';
+import type { ErrnoException } from './error_tracker.js';
// Define the following types as we cannot import the complete types from the respective packages
interface BrowserCrawlingContext {
diff --git a/packages/core/src/crawlers/error_tracker.ts b/packages/core/src/crawlers/error_tracker.ts
index eefa2f2c914f..38ee8f4a4584 100644
--- a/packages/core/src/crawlers/error_tracker.ts
+++ b/packages/core/src/crawlers/error_tracker.ts
@@ -1,7 +1,7 @@
import { inspect } from 'node:util';
-import type { CrawlingContext } from '../crawlers/crawler_commons';
-import { ErrorSnapshotter } from './error_snapshotter';
+import type { CrawlingContext } from '../crawlers/crawler_commons.js';
+import { ErrorSnapshotter } from './error_snapshotter.js';
/**
* Node.js Error interface
diff --git a/packages/core/src/crawlers/index.ts b/packages/core/src/crawlers/index.ts
index 77a83511e413..f9b2e116c864 100644
--- a/packages/core/src/crawlers/index.ts
+++ b/packages/core/src/crawlers/index.ts
@@ -1,6 +1,6 @@
-export * from './crawler_commons';
-export * from './crawler_extension';
-export * from './crawler_utils';
-export * from './statistics';
-export * from './error_tracker';
-export * from './error_snapshotter';
+export * from './crawler_commons.js';
+export * from './crawler_extension.js';
+export * from './crawler_utils.js';
+export * from './statistics.js';
+export * from './error_tracker.js';
+export * from './error_snapshotter.js';
diff --git a/packages/core/src/crawlers/statistics.ts b/packages/core/src/crawlers/statistics.ts
index 975a6537984f..10d6fa46b688 100644
--- a/packages/core/src/crawlers/statistics.ts
+++ b/packages/core/src/crawlers/statistics.ts
@@ -2,12 +2,12 @@ import ow from 'ow';
import type { Log } from '@apify/log';
-import { Configuration } from '../configuration';
-import type { EventManager } from '../events/event_manager';
-import { EventType } from '../events/event_manager';
-import { log as defaultLog } from '../log';
-import { KeyValueStore } from '../storages/key_value_store';
-import { ErrorTracker } from './error_tracker';
+import { Configuration } from '../configuration.js';
+import type { EventManager } from '../events/event_manager.js';
+import { EventType } from '../events/event_manager.js';
+import { log as defaultLog } from '../log.js';
+import { KeyValueStore } from '../storages/key_value_store.js';
+import { ErrorTracker } from './error_tracker.js';
/**
* @ignore
diff --git a/packages/core/src/enqueue_links/enqueue_links.ts b/packages/core/src/enqueue_links/enqueue_links.ts
index 2e9d73e09d9c..32d7801d8bf2 100644
--- a/packages/core/src/enqueue_links/enqueue_links.ts
+++ b/packages/core/src/enqueue_links/enqueue_links.ts
@@ -6,9 +6,9 @@ import type { SetRequired } from 'type-fest';
import log from '@apify/log';
-import type { RequestOptions } from '../request';
-import type { RequestProvider, RequestQueueOperationOptions } from '../storages';
-import type { GlobInput, PseudoUrlInput, RegExpInput, RequestTransform, UrlPatternObject } from './shared';
+import type { RequestOptions } from '../request.js';
+import type { RequestProvider, RequestQueueOperationOptions } from '../storages/request_provider.js';
+import type { GlobInput, PseudoUrlInput, RegExpInput, RequestTransform, UrlPatternObject } from './shared.js';
import {
constructGlobObjectsFromGlobs,
constructRegExpObjectsFromPseudoUrls,
@@ -16,7 +16,7 @@ import {
createRequestOptions,
createRequests,
filterRequestsByPatterns,
-} from './shared';
+} from './shared.js';
export type SkippedRequestCallback = (args: { url: string; reason: 'robotsTxt' }) => Awaitable;
@@ -267,7 +267,7 @@ export async function enqueueLinks(
}
ow(
- options,
+ options as any,
ow.object.exactShape({
urls: ow.array.ofType(ow.string),
requestQueue: ow.object.hasKeys('fetchNextRequest', 'addRequest'),
diff --git a/packages/core/src/enqueue_links/index.ts b/packages/core/src/enqueue_links/index.ts
index d650fd270c33..3582f2a5eb7d 100644
--- a/packages/core/src/enqueue_links/index.ts
+++ b/packages/core/src/enqueue_links/index.ts
@@ -1,2 +1,2 @@
-export * from './enqueue_links';
-export * from './shared';
+export * from './enqueue_links.js';
+export * from './shared.js';
diff --git a/packages/core/src/enqueue_links/shared.ts b/packages/core/src/enqueue_links/shared.ts
index 72c04a6764f2..2cb87575dcfc 100644
--- a/packages/core/src/enqueue_links/shared.ts
+++ b/packages/core/src/enqueue_links/shared.ts
@@ -4,9 +4,9 @@ import { minimatch } from 'minimatch';
import { purlToRegExp } from '@apify/pseudo_url';
-import type { RequestOptions } from '../request';
-import { Request } from '../request';
-import type { EnqueueLinksOptions } from './enqueue_links';
+import type { RequestOptions } from '../request.js';
+import { Request } from '../request.js';
+import type { EnqueueLinksOptions } from './enqueue_links.js';
export { tryAbsoluteURL } from '@crawlee/utils';
@@ -224,7 +224,7 @@ export function filterRequestsByPatterns(requests: Request[], patterns?: UrlPatt
* @ignore
*/
export function createRequestOptions(
- sources: (string | Record)[],
+ sources: readonly (string | Record)[],
options: Pick = {},
): RequestOptions[] {
return sources
diff --git a/packages/core/src/events/event_manager.ts b/packages/core/src/events/event_manager.ts
index c8cad080a41e..e134974ec581 100644
--- a/packages/core/src/events/event_manager.ts
+++ b/packages/core/src/events/event_manager.ts
@@ -4,7 +4,7 @@ import log from '@apify/log';
import type { BetterIntervalID } from '@apify/utilities';
import { betterClearInterval, betterSetInterval } from '@apify/utilities';
-import { Configuration } from '../configuration';
+import { Configuration } from '../configuration.js';
export const enum EventType {
PERSIST_STATE = 'persistState',
diff --git a/packages/core/src/events/index.ts b/packages/core/src/events/index.ts
index 8e8144c469cb..211d9af2a79f 100644
--- a/packages/core/src/events/index.ts
+++ b/packages/core/src/events/index.ts
@@ -1,2 +1,2 @@
-export * from './event_manager';
-export * from './local_event_manager';
+export * from './event_manager.js';
+export * from './local_event_manager.js';
diff --git a/packages/core/src/events/local_event_manager.ts b/packages/core/src/events/local_event_manager.ts
index 27ca2eeb7c15..6df0bb1ff4b7 100644
--- a/packages/core/src/events/local_event_manager.ts
+++ b/packages/core/src/events/local_event_manager.ts
@@ -1,16 +1,12 @@
-import os from 'node:os';
-
-import { getCurrentCpuTicksV2, getMemoryInfo, getMemoryInfoV2, isContainerized } from '@crawlee/utils';
+import { getCurrentCpuTicksV2, getMemoryInfo, isContainerized } from '@crawlee/utils';
import log from '@apify/log';
import { betterClearInterval, betterSetInterval } from '@apify/utilities';
-import type { SystemInfo } from '../autoscaling';
-import { EventManager, EventType } from './event_manager';
+import type { SystemInfo } from '../autoscaling/system_status.js';
+import { EventManager, EventType } from './event_manager.js';
export class LocalEventManager extends EventManager {
- private previousTicks = { idle: 0, total: 0 };
-
/**
* Initializes the EventManager and sets up periodic `systemInfo` and `persistState` events.
* This is automatically called at the beginning of `crawler.run()`.
@@ -57,20 +53,6 @@ export class LocalEventManager extends EventManager {
return this.config.get('containerized', await isContainerized());
}
- private getCurrentCpuTicks() {
- const cpus = os.cpus();
- return cpus.reduce(
- (acc, cpu) => {
- const cpuTimes = Object.values(cpu.times);
- return {
- idle: acc.idle + cpu.times.idle,
- total: acc.total + cpuTimes.reduce((sum, num) => sum + num),
- };
- },
- { idle: 0, total: 0 },
- );
- }
-
/**
* Creates a SystemInfo object based on local metrics.
*/
@@ -83,19 +65,7 @@ export class LocalEventManager extends EventManager {
}
private async createCpuInfo(options: { maxUsedCpuRatio: number }) {
- if (this.config.get('systemInfoV2')) {
- const usedCpuRatio = await getCurrentCpuTicksV2(await this.isContainerizedWrapper());
- return {
- cpuCurrentUsage: usedCpuRatio * 100,
- isCpuOverloaded: usedCpuRatio > options.maxUsedCpuRatio,
- };
- }
- const ticks = this.getCurrentCpuTicks();
- const idleTicksDelta = ticks.idle - this.previousTicks!.idle;
- const totalTicksDelta = ticks.total - this.previousTicks!.total;
- const usedCpuRatio = totalTicksDelta ? 1 - idleTicksDelta / totalTicksDelta : 0;
- Object.assign(this.previousTicks, ticks);
-
+ const usedCpuRatio = await getCurrentCpuTicksV2(await this.isContainerizedWrapper());
return {
cpuCurrentUsage: usedCpuRatio * 100,
isCpuOverloaded: usedCpuRatio > options.maxUsedCpuRatio,
@@ -104,13 +74,7 @@ export class LocalEventManager extends EventManager {
private async createMemoryInfo() {
try {
- if (this.config.get('systemInfoV2')) {
- const memInfo = await getMemoryInfoV2(await this.isContainerizedWrapper());
- return {
- memCurrentBytes: memInfo.mainProcessBytes + memInfo.childProcessesBytes,
- };
- }
- const memInfo = await getMemoryInfo();
+ const memInfo = await getMemoryInfo(await this.isContainerizedWrapper());
return {
memCurrentBytes: memInfo.mainProcessBytes + memInfo.childProcessesBytes,
};
diff --git a/packages/core/src/http_clients/base-http-client.ts b/packages/core/src/http_clients/base-http-client.ts
index 94491c27fafb..053b99b08a2c 100644
--- a/packages/core/src/http_clients/base-http-client.ts
+++ b/packages/core/src/http_clients/base-http-client.ts
@@ -2,7 +2,7 @@ import type { Readable } from 'node:stream';
import { applySearchParams, type SearchParams } from '@crawlee/utils';
-import type { FormDataLike } from './form-data-like';
+import type { FormDataLike } from './form-data-like.js';
type Timeout =
| {
diff --git a/packages/core/src/http_clients/got-scraping-http-client.ts b/packages/core/src/http_clients/got-scraping-http-client.ts
index 45cfeb3173b7..408906fbd1d8 100644
--- a/packages/core/src/http_clients/got-scraping-http-client.ts
+++ b/packages/core/src/http_clients/got-scraping-http-client.ts
@@ -1,6 +1,5 @@
-import { gotScraping } from '@crawlee/utils';
-// @ts-expect-error This throws a compilation error due to got-scraping being ESM only but we only import types, so its alllll gooooood
import type { Options, PlainResponse } from 'got-scraping';
+import { gotScraping } from 'got-scraping';
import type {
BaseHttpClient,
@@ -9,7 +8,7 @@ import type {
RedirectHandler,
ResponseTypes,
StreamingHttpResponse,
-} from './base-http-client';
+} from './base-http-client.js';
/**
* A HTTP client implementation based on the `got-scraping` library.
@@ -42,7 +41,7 @@ export class GotScrapingHttpClient implements BaseHttpClient {
async stream(request: HttpRequest, handleRedirect?: RedirectHandler): Promise {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
- const stream = await Promise.resolve(gotScraping({ ...request, isStream: true }));
+ const stream = gotScraping({ ...request, isStream: true });
stream.on('redirect', (updatedOptions: Options, redirectResponse: PlainResponse) => {
handleRedirect?.(redirectResponse, updatedOptions);
diff --git a/packages/core/src/http_clients/index.ts b/packages/core/src/http_clients/index.ts
index 58c1b27a5313..7d4d930e1392 100644
--- a/packages/core/src/http_clients/index.ts
+++ b/packages/core/src/http_clients/index.ts
@@ -1,2 +1,2 @@
-export * from './base-http-client';
-export * from './got-scraping-http-client';
+export * from './base-http-client.js';
+export * from './got-scraping-http-client.js';
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index affb1d6781f5..d3de6161db48 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -1,18 +1,18 @@
-export * from './errors';
-export * from './autoscaling';
-export * from './configuration';
-export * from './crawlers';
-export * from './enqueue_links';
-export * from './events';
-export * from './http_clients';
-export * from './log';
-export * from './proxy_configuration';
-export * from './request';
-export * from './router';
-export * from './serialization';
-export * from './session_pool';
-export * from './storages';
-export * from './validators';
-export * from './cookie_utils';
+export * from './errors.js';
+export * from './autoscaling/index.js';
+export * from './configuration.js';
+export * from './crawlers/index.js';
+export * from './enqueue_links/index.js';
+export * from './events/index.js';
+export * from './http_clients/index.js';
+export * from './log.js';
+export * from './proxy_configuration.js';
+export * from './request.js';
+export * from './router.js';
+export * from './serialization.js';
+export * from './session_pool/index.js';
+export * from './storages/index.js';
+export * from './validators.js';
+export * from './cookie_utils.js';
export { PseudoUrl } from '@apify/pseudo_url';
export { Dictionary, Awaitable, Constructor, StorageClient, Cookie, QueueOperationInfo } from '@crawlee/types';
diff --git a/packages/core/src/proxy_configuration.ts b/packages/core/src/proxy_configuration.ts
index 5bbada6f8c6c..1109871a39a3 100644
--- a/packages/core/src/proxy_configuration.ts
+++ b/packages/core/src/proxy_configuration.ts
@@ -4,7 +4,7 @@ import ow from 'ow';
import log from '@apify/log';
import { cryptoRandomObjectId } from '@apify/utilities';
-import type { Request } from './request';
+import type { Request } from './request.js';
export interface ProxyConfigurationFunction {
(sessionId: string | number, options?: { request?: Request }): string | null | Promise;
diff --git a/packages/core/src/request.ts b/packages/core/src/request.ts
index db96c2c496e0..a8dc7f6d7008 100644
--- a/packages/core/src/request.ts
+++ b/packages/core/src/request.ts
@@ -8,10 +8,10 @@ import ow from 'ow';
import { normalizeUrl } from '@apify/utilities';
-import type { EnqueueLinksOptions } from './enqueue_links/enqueue_links';
-import { log as defaultLog } from './log';
-import type { AllowedHttpMethods } from './typedefs';
-import { keys } from './typedefs';
+import type { EnqueueLinksOptions } from './enqueue_links/enqueue_links.js';
+import { log as defaultLog } from './log.js';
+import type { AllowedHttpMethods } from './typedefs.js';
+import { keys } from './typedefs.js';
// new properties on the Request object breaks serialization
const log = defaultLog.child({ prefix: 'Request' });
@@ -378,16 +378,6 @@ export class Request {
this.errorMessages.push(message);
}
- // TODO: only for better BC, remove in v4
- protected _computeUniqueKey(options: ComputeUniqueKeyOptions) {
- return Request.computeUniqueKey(options);
- }
-
- // TODO: only for better BC, remove in v4
- protected _hashPayload(payload: BinaryLike): string {
- return Request.hashPayload(payload);
- }
-
/** @internal */
static computeUniqueKey({
url,
@@ -400,8 +390,7 @@ export class Request {
const normalizedUrl = normalizeUrl(url, keepUrlFragment) || url; // It returns null when url is invalid, causing weird errors.
if (!useExtendedUniqueKey) {
if (normalizedMethod !== 'GET' && payload) {
- // Using log.deprecated to log only once. We should add log.once or some such.
- log.deprecated(
+ log.warningOnce(
`We've encountered a ${normalizedMethod} Request with a payload. ` +
'This is fine. Just letting you know that if your requests point to the same URL ' +
'and differ only in method and payload, you should see the "useExtendedUniqueKey" option of Request constructor.',
diff --git a/packages/core/src/router.ts b/packages/core/src/router.ts
index 545bb3360db8..25a17b503d64 100644
--- a/packages/core/src/router.ts
+++ b/packages/core/src/router.ts
@@ -1,9 +1,9 @@
import type { Dictionary } from '@crawlee/types';
-import type { CrawlingContext, LoadedRequest, RestrictedCrawlingContext } from './crawlers/crawler_commons';
-import { MissingRouteError } from './errors';
-import type { Request } from './request';
-import type { Awaitable } from './typedefs';
+import type { CrawlingContext, LoadedRequest, RestrictedCrawlingContext } from './crawlers/crawler_commons.js';
+import { MissingRouteError } from './errors.js';
+import type { Request } from './request.js';
+import type { Awaitable } from './typedefs.js';
const defaultRoute = Symbol('default-route');
diff --git a/packages/core/src/serialization.ts b/packages/core/src/serialization.ts
index ace72f2068e5..fe7b7fdfc693 100644
--- a/packages/core/src/serialization.ts
+++ b/packages/core/src/serialization.ts
@@ -3,7 +3,7 @@ import util from 'node:util';
import zlib from 'node:zlib';
import ow from 'ow';
-import StreamArray from 'stream-json/streamers/StreamArray';
+import StreamArray from 'stream-json/streamers/StreamArray.js';
const pipeline = util.promisify(streamPipeline);
@@ -102,12 +102,8 @@ export function createDeserialize(compressedData: Buffer | Uint8Array): Readable
const streamArray = StreamArray.withParser();
const destination = pluckValue(streamArray);
- streamPipeline(
- Readable.from([compressedData]),
- zlib.createGunzip(),
- destination,
- // @ts-expect-error Something's wrong here, the types are wrong but tests fail if we correct the code to make them right
- (err) => destination.emit(err),
+ streamPipeline(Readable.from([compressedData]), zlib.createGunzip(), destination, (err: any) =>
+ destination.emit(err),
);
return destination;
diff --git a/packages/core/src/session_pool/index.ts b/packages/core/src/session_pool/index.ts
index eaedabfa4981..e9b25291682a 100644
--- a/packages/core/src/session_pool/index.ts
+++ b/packages/core/src/session_pool/index.ts
@@ -1,5 +1,5 @@
-export * from './errors';
-export * from './events';
-export * from './session';
-export * from './session_pool';
-export * from './consts';
+export * from './errors.js';
+export * from './events.js';
+export * from './session.js';
+export * from './session_pool.js';
+export * from './consts.js';
diff --git a/packages/core/src/session_pool/session.ts b/packages/core/src/session_pool/session.ts
index 180dbe8a9652..8bb998a0d65d 100644
--- a/packages/core/src/session_pool/session.ts
+++ b/packages/core/src/session_pool/session.ts
@@ -8,15 +8,15 @@ import { CookieJar } from 'tough-cookie';
import type { Log } from '@apify/log';
import { cryptoRandomObjectId } from '@apify/utilities';
-import type { ResponseLike } from '../cookie_utils';
+import type { ResponseLike } from '../cookie_utils.js';
import {
browserPoolCookieToToughCookie,
getCookiesFromResponse,
getDefaultCookieExpirationDate,
toughCookieToBrowserPoolCookie,
-} from '../cookie_utils';
-import { log as defaultLog } from '../log';
-import { EVENT_SESSION_RETIRED } from './events';
+} from '../cookie_utils.js';
+import { log as defaultLog } from '../log.js';
+import { EVENT_SESSION_RETIRED } from './events.js';
/**
* Persistable {@apilink Session} state.
@@ -84,7 +84,7 @@ export interface SessionOptions {
maxUsageCount?: number;
/** SessionPool instance. Session will emit the `sessionRetired` event on this instance. */
- sessionPool?: import('./session_pool').SessionPool;
+ sessionPool?: import('./session_pool.js').SessionPool;
log?: Log;
errorScore?: number;
@@ -107,7 +107,7 @@ export class Session {
private _expiresAt: Date;
private _usageCount: number;
private _maxUsageCount: number;
- private sessionPool: import('./session_pool').SessionPool;
+ private sessionPool: import('./session_pool.js').SessionPool;
private _errorScore: number;
private _cookieJar: CookieJar;
private log: Log;
@@ -298,33 +298,14 @@ export class Session {
/**
* With certain status codes: `401`, `403` or `429` we can be certain
* that the target website is blocking us. This function helps to do this conveniently
- * by retiring the session when such code is received. Optionally the default status
+ * by retiring the session when such code is received. Optionally, the default status
* codes can be extended in the second parameter.
* @param statusCode HTTP status code.
* @returns Whether the session was retired.
*/
- retireOnBlockedStatusCodes(statusCode: number): boolean;
-
- /**
- * With certain status codes: `401`, `403` or `429` we can be certain
- * that the target website is blocking us. This function helps to do this conveniently
- * by retiring the session when such code is received. Optionally the default status
- * codes can be extended in the second parameter.
- * @param statusCode HTTP status code.
- * @param [additionalBlockedStatusCodes]
- * Custom HTTP status codes that means blocking on particular website.
- *
- * **This parameter is deprecated and will be removed in next major version.**
- * @returns Whether the session was retired.
- * @deprecated The parameter `additionalBlockedStatusCodes` is deprecated and will be removed in next major version.
- */
- retireOnBlockedStatusCodes(statusCode: number, additionalBlockedStatusCodes?: number[]): boolean;
-
- retireOnBlockedStatusCodes(statusCode: number, additionalBlockedStatusCodes: number[] = []): boolean {
+ retireOnBlockedStatusCodes(statusCode: number): boolean {
// eslint-disable-next-line dot-notation -- accessing private property
- const isBlocked = this.sessionPool['blockedStatusCodes']
- .concat(additionalBlockedStatusCodes)
- .includes(statusCode);
+ const isBlocked = this.sessionPool['blockedStatusCodes'].includes(statusCode);
if (isBlocked) {
this.retire();
}
diff --git a/packages/core/src/session_pool/session_pool.ts b/packages/core/src/session_pool/session_pool.ts
index 22528a29ebbd..31ff2dd4f65e 100644
--- a/packages/core/src/session_pool/session_pool.ts
+++ b/packages/core/src/session_pool/session_pool.ts
@@ -6,15 +6,15 @@ import ow from 'ow';
import type { Log } from '@apify/log';
-import { Configuration } from '../configuration';
-import type { PersistenceOptions } from '../crawlers/statistics';
-import type { EventManager } from '../events/event_manager';
-import { EventType } from '../events/event_manager';
-import { log as defaultLog } from '../log';
-import { KeyValueStore } from '../storages/key_value_store';
-import { BLOCKED_STATUS_CODES, MAX_POOL_SIZE, PERSIST_STATE_KEY } from './consts';
-import type { SessionOptions } from './session';
-import { Session } from './session';
+import { Configuration } from '../configuration.js';
+import type { PersistenceOptions } from '../crawlers/statistics.js';
+import type { EventManager } from '../events/event_manager.js';
+import { EventType } from '../events/event_manager.js';
+import { log as defaultLog } from '../log.js';
+import { KeyValueStore } from '../storages/key_value_store.js';
+import { BLOCKED_STATUS_CODES, MAX_POOL_SIZE, PERSIST_STATE_KEY } from './consts.js';
+import type { SessionOptions } from './session.js';
+import { Session } from './session.js';
/**
* Factory user-function which creates customized {@apilink Session} instances.
diff --git a/packages/core/src/storages/access_checking.ts b/packages/core/src/storages/access_checking.ts
index 941823e8db37..c56612a2c70d 100644
--- a/packages/core/src/storages/access_checking.ts
+++ b/packages/core/src/storages/access_checking.ts
@@ -1,6 +1,6 @@
import { AsyncLocalStorage } from 'node:async_hooks';
-import type { Awaitable } from '../typedefs';
+import type { Awaitable } from '../typedefs.js';
const storage = new AsyncLocalStorage<{ checkFunction: () => void }>();
diff --git a/packages/core/src/storages/dataset.ts b/packages/core/src/storages/dataset.ts
index 27dd1573156e..80842fdf89e7 100644
--- a/packages/core/src/storages/dataset.ts
+++ b/packages/core/src/storages/dataset.ts
@@ -4,14 +4,14 @@ import ow from 'ow';
import { MAX_PAYLOAD_SIZE_BYTES } from '@apify/consts';
-import { Configuration } from '../configuration';
-import { type Log, log } from '../log';
-import type { Awaitable } from '../typedefs';
-import { checkStorageAccess } from './access_checking';
-import { KeyValueStore } from './key_value_store';
-import type { StorageManagerOptions } from './storage_manager';
-import { StorageManager } from './storage_manager';
-import { purgeDefaultStorages } from './utils';
+import { Configuration } from '../configuration.js';
+import { type Log, log } from '../log.js';
+import type { Awaitable } from '../typedefs.js';
+import { checkStorageAccess } from './access_checking.js';
+import { KeyValueStore } from './key_value_store.js';
+import type { StorageManagerOptions } from './storage_manager.js';
+import { StorageManager } from './storage_manager.js';
+import { purgeDefaultStorages } from './utils.js';
/** @internal */
export const DATASET_ITERATORS_DEFAULT_LIMIT = 10000;
diff --git a/packages/core/src/storages/index.ts b/packages/core/src/storages/index.ts
index 60ef3bc485db..36285766b1c4 100644
--- a/packages/core/src/storages/index.ts
+++ b/packages/core/src/storages/index.ts
@@ -1,11 +1,11 @@
-export * from './dataset';
-export * from './key_value_store';
-export * from './request_list';
-export * from './request_provider';
-export { RequestQueueV1 } from './request_queue';
-export { RequestQueue } from './request_queue_v2';
-export { RequestQueue as RequestQueueV2 } from './request_queue_v2';
-export * from './storage_manager';
-export * from './utils';
-export * from './access_checking';
-export * from './sitemap_request_list';
+export * from './dataset.js';
+export * from './key_value_store.js';
+export * from './request_list.js';
+export * from './request_provider.js';
+export { RequestQueueV1 } from './request_queue.js';
+export { RequestQueue } from './request_queue_v2.js';
+export { RequestQueue as RequestQueueV2 } from './request_queue_v2.js';
+export * from './storage_manager.js';
+export * from './utils.js';
+export * from './access_checking.js';
+export * from './sitemap_request_list.js';
diff --git a/packages/core/src/storages/key_value_store.ts b/packages/core/src/storages/key_value_store.ts
index c3247a944778..3a4408f8a89b 100644
--- a/packages/core/src/storages/key_value_store.ts
+++ b/packages/core/src/storages/key_value_store.ts
@@ -9,12 +9,12 @@ import { KEY_VALUE_STORE_KEY_REGEX } from '@apify/consts';
import log from '@apify/log';
import { jsonStringifyExtended } from '@apify/utilities';
-import { Configuration } from '../configuration';
-import type { Awaitable } from '../typedefs';
-import { checkStorageAccess } from './access_checking';
-import type { StorageManagerOptions } from './storage_manager';
-import { StorageManager } from './storage_manager';
-import { purgeDefaultStorages } from './utils';
+import { Configuration } from '../configuration.js';
+import type { Awaitable } from '../typedefs.js';
+import { checkStorageAccess } from './access_checking.js';
+import type { StorageManagerOptions } from './storage_manager.js';
+import { StorageManager } from './storage_manager.js';
+import { purgeDefaultStorages } from './utils.js';
/**
* Helper function to possibly stringify value if options.contentType is not set.
diff --git a/packages/core/src/storages/request_list.ts b/packages/core/src/storages/request_list.ts
index eba5b54bfc8d..e3e27ed3b37e 100644
--- a/packages/core/src/storages/request_list.ts
+++ b/packages/core/src/storages/request_list.ts
@@ -2,15 +2,15 @@ import type { Dictionary } from '@crawlee/types';
import { downloadListOfUrls } from '@crawlee/utils';
import ow, { ArgumentError } from 'ow';
-import { Configuration } from '../configuration';
-import type { EventManager } from '../events';
-import { EventType } from '../events';
-import { log } from '../log';
-import type { ProxyConfiguration } from '../proxy_configuration';
-import { type InternalSource, Request, type RequestOptions, type Source } from '../request';
-import { createDeserialize, serializeArray } from '../serialization';
-import { KeyValueStore } from './key_value_store';
-import { purgeDefaultStorages } from './utils';
+import { Configuration } from '../configuration.js';
+import type { EventManager } from '../events/event_manager.js';
+import { EventType } from '../events/event_manager.js';
+import { log } from '../log.js';
+import type { ProxyConfiguration } from '../proxy_configuration.js';
+import { type InternalSource, Request, type RequestOptions, type Source } from '../request.js';
+import { createDeserialize, serializeArray } from '../serialization.js';
+import { KeyValueStore } from './key_value_store.js';
+import { purgeDefaultStorages } from './utils.js';
/** @internal */
export const STATE_PERSISTENCE_KEY = 'REQUEST_LIST_STATE';
diff --git a/packages/core/src/storages/request_provider.ts b/packages/core/src/storages/request_provider.ts
index 0b89c8a6692f..0c91c31eb880 100644
--- a/packages/core/src/storages/request_provider.ts
+++ b/packages/core/src/storages/request_provider.ts
@@ -16,17 +16,17 @@ import { ListDictionary, LruCache } from '@apify/datastructures';
import type { Log } from '@apify/log';
import { cryptoRandomObjectId } from '@apify/utilities';
-import { Configuration } from '../configuration';
-import { EventType } from '../events';
-import { log } from '../log';
-import type { ProxyConfiguration } from '../proxy_configuration';
-import type { InternalSource, RequestOptions, Source } from '../request';
-import { Request } from '../request';
-import type { Constructor } from '../typedefs';
-import { checkStorageAccess } from './access_checking';
-import type { IStorage, StorageManagerOptions } from './storage_manager';
-import { StorageManager } from './storage_manager';
-import { getRequestId, purgeDefaultStorages, QUERY_HEAD_MIN_LENGTH } from './utils';
+import { Configuration } from '../configuration.js';
+import { EventType } from '../events/event_manager.js';
+import { log } from '../log.js';
+import type { ProxyConfiguration } from '../proxy_configuration.js';
+import type { InternalSource, RequestOptions, Source } from '../request.js';
+import { Request } from '../request.js';
+import type { Constructor } from '../typedefs.js';
+import { checkStorageAccess } from './access_checking.js';
+import type { IStorage, StorageManagerOptions } from './storage_manager.js';
+import { StorageManager } from './storage_manager.js';
+import { getRequestId, purgeDefaultStorages, QUERY_HEAD_MIN_LENGTH } from './utils.js';
export abstract class RequestProvider implements IStorage {
id: string;
diff --git a/packages/core/src/storages/request_queue.ts b/packages/core/src/storages/request_queue.ts
index 804b18739991..01c0a8b0bb54 100644
--- a/packages/core/src/storages/request_queue.ts
+++ b/packages/core/src/storages/request_queue.ts
@@ -4,11 +4,11 @@ import type { Dictionary } from '@crawlee/types';
import { REQUEST_QUEUE_HEAD_MAX_LIMIT } from '@apify/consts';
-import { Configuration } from '../configuration';
-import type { Request } from '../request';
-import { checkStorageAccess } from './access_checking';
-import type { RequestProviderOptions, RequestQueueOperationInfo } from './request_provider';
-import { RequestProvider } from './request_provider';
+import { Configuration } from '../configuration.js';
+import type { Request } from '../request.js';
+import { checkStorageAccess } from './access_checking.js';
+import type { RequestProviderOptions, RequestQueueOperationInfo } from './request_provider.js';
+import { RequestProvider } from './request_provider.js';
import {
API_PROCESSED_REQUESTS_DELAY_MILLIS,
getRequestId,
@@ -16,7 +16,7 @@ import {
QUERY_HEAD_BUFFER,
QUERY_HEAD_MIN_LENGTH,
STORAGE_CONSISTENCY_DELAY_MILLIS,
-} from './utils';
+} from './utils.js';
const MAX_CACHED_REQUESTS = 1_000_000;
diff --git a/packages/core/src/storages/request_queue_v2.ts b/packages/core/src/storages/request_queue_v2.ts
index f66f42bc1cdd..b049955109dd 100644
--- a/packages/core/src/storages/request_queue_v2.ts
+++ b/packages/core/src/storages/request_queue_v2.ts
@@ -1,16 +1,16 @@
import type { BatchAddRequestsResult, Dictionary } from '@crawlee/types';
-import { Configuration } from '../configuration';
-import { EventType } from '../events';
-import type { Request, Source } from '../request';
-import { checkStorageAccess } from './access_checking';
+import { Configuration } from '../configuration.js';
+import { EventType } from '../events/event_manager.js';
+import type { Request, Source } from '../request.js';
+import { checkStorageAccess } from './access_checking.js';
import type {
RequestProviderOptions,
RequestQueueOperationInfo,
RequestQueueOperationOptions,
-} from './request_provider';
-import { RequestProvider } from './request_provider';
-import { getRequestId } from './utils';
+} from './request_provider.js';
+import { RequestProvider } from './request_provider.js';
+import { getRequestId } from './utils.js';
// Double the limit of RequestQueue v1 (1_000_000) as we also store keyed by request.id, not just from uniqueKey
const MAX_CACHED_REQUESTS = 2_000_000;
diff --git a/packages/core/src/storages/sitemap_request_list.ts b/packages/core/src/storages/sitemap_request_list.ts
index 278d27a7c5b2..7f1bca6a595b 100644
--- a/packages/core/src/storages/sitemap_request_list.ts
+++ b/packages/core/src/storages/sitemap_request_list.ts
@@ -7,14 +7,14 @@ import type { RequiredDeep } from 'type-fest';
import defaultLog from '@apify/log';
-import { Configuration } from '../configuration';
-import type { GlobInput, RegExpInput, UrlPatternObject } from '../enqueue_links';
-import { constructGlobObjectsFromGlobs, constructRegExpObjectsFromRegExps } from '../enqueue_links';
-import { type EventManager, EventType } from '../events/event_manager';
-import { Request } from '../request';
-import { KeyValueStore } from './key_value_store';
-import type { IRequestList } from './request_list';
-import { purgeDefaultStorages } from './utils';
+import { Configuration } from '../configuration.js';
+import type { GlobInput, RegExpInput, UrlPatternObject } from '../enqueue_links/shared.js';
+import { constructGlobObjectsFromGlobs, constructRegExpObjectsFromRegExps } from '../enqueue_links/shared.js';
+import { type EventManager, EventType } from '../events/event_manager.js';
+import { Request } from '../request.js';
+import { KeyValueStore } from './key_value_store.js';
+import type { IRequestList } from './request_list.js';
+import { purgeDefaultStorages } from './utils.js';
/** @internal */
const STATE_PERSISTENCE_KEY = 'SITEMAP_REQUEST_LIST_STATE';
diff --git a/packages/core/src/storages/storage_manager.ts b/packages/core/src/storages/storage_manager.ts
index 78c51cb806f3..785cac188620 100644
--- a/packages/core/src/storages/storage_manager.ts
+++ b/packages/core/src/storages/storage_manager.ts
@@ -1,9 +1,9 @@
import type { Dictionary, StorageClient } from '@crawlee/types';
import { AsyncQueue } from '@sapphire/async-queue';
-import { Configuration } from '../configuration';
-import type { ProxyConfiguration } from '../proxy_configuration';
-import type { Constructor } from '../typedefs';
+import { Configuration } from '../configuration.js';
+import type { ProxyConfiguration } from '../proxy_configuration.js';
+import type { Constructor } from '../typedefs.js';
const DEFAULT_ID_CONFIG_KEYS = {
Dataset: 'defaultDatasetId',
diff --git a/packages/core/src/storages/utils.ts b/packages/core/src/storages/utils.ts
index 31135c948dd7..b6820e7562ec 100644
--- a/packages/core/src/storages/utils.ts
+++ b/packages/core/src/storages/utils.ts
@@ -2,8 +2,8 @@ import crypto from 'node:crypto';
import type { Dictionary, StorageClient } from '@crawlee/types';
-import { Configuration } from '../configuration';
-import { KeyValueStore } from './key_value_store';
+import { Configuration } from '../configuration.js';
+import { KeyValueStore } from './key_value_store.js';
/**
* Options for purging default storage.
diff --git a/packages/crawlee/package.json b/packages/crawlee/package.json
index 964cfbfa51ed..2f991f8cc474 100644
--- a/packages/crawlee/package.json
+++ b/packages/crawlee/package.json
@@ -3,18 +3,12 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
"bin": "./src/cli.ts",
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -47,7 +41,7 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
@@ -66,8 +60,8 @@
"@crawlee/playwright": "3.13.3",
"@crawlee/puppeteer": "3.13.3",
"@crawlee/utils": "3.13.3",
- "import-local": "^3.1.0",
- "tslib": "^2.4.0"
+ "import-local": "^3.2.0",
+ "tslib": "^2.8.1"
},
"peerDependencies": {
"playwright": "*",
diff --git a/packages/crawlee/src/cli.ts b/packages/crawlee/src/cli.ts
index e776789f5cc1..d1aa2f9f0653 100755
--- a/packages/crawlee/src/cli.ts
+++ b/packages/crawlee/src/cli.ts
@@ -1,9 +1,8 @@
#!/usr/bin/env node
-// eslint-disable-next-line
-const importLocal = require('import-local');
+import importLocal from 'import-local';
-if (!importLocal(__filename)) {
- // eslint-disable-next-line
- require('@crawlee/cli');
+// @ts-ignore bad types most likely?
+if (!importLocal(import.meta.url)) {
+ await import('@crawlee/cli');
}
diff --git a/packages/http-crawler/package.json b/packages/http-crawler/package.json
index d5275c11855d..efb8a7302416 100644
--- a/packages/http-crawler/package.json
+++ b/packages/http-crawler/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,26 +40,26 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/timeout": "^0.3.0",
- "@apify/utilities": "^2.7.10",
+ "@apify/timeout": "^0.3.2",
+ "@apify/utilities": "^2.15.5",
"@crawlee/basic": "3.13.3",
"@crawlee/types": "3.13.3",
"@crawlee/utils": "3.13.3",
- "@types/content-type": "^1.1.5",
- "cheerio": "1.0.0-rc.12",
- "content-type": "^1.0.4",
- "got-scraping": "^4.0.0",
+ "@types/content-type": "^1.1.8",
+ "cheerio": "^1.0.0",
+ "content-type": "^1.0.5",
+ "got-scraping": "^4.1.1",
"iconv-lite": "^0.6.3",
- "mime-types": "^2.1.35",
- "ow": "^0.28.1",
- "tslib": "^2.4.0",
- "type-fest": "^4.0.0"
+ "mime-types": "^3.0.1",
+ "ow": "^2.0.0",
+ "tslib": "^2.8.1",
+ "type-fest": "^4.41.0"
}
}
diff --git a/packages/http-crawler/src/index.ts b/packages/http-crawler/src/index.ts
index 26b3ec966179..b81749842f81 100644
--- a/packages/http-crawler/src/index.ts
+++ b/packages/http-crawler/src/index.ts
@@ -1,3 +1,3 @@
export * from '@crawlee/basic';
-export * from './internals/http-crawler';
-export * from './internals/file-download';
+export * from './internals/http-crawler.js';
+export * from './internals/file-download.js';
diff --git a/packages/http-crawler/src/internals/file-download.ts b/packages/http-crawler/src/internals/file-download.ts
index 6c095c35232c..fe837f0c4861 100644
--- a/packages/http-crawler/src/internals/file-download.ts
+++ b/packages/http-crawler/src/internals/file-download.ts
@@ -2,7 +2,6 @@ import { finished } from 'node:stream/promises';
import { isPromise } from 'node:util/types';
import type { Dictionary } from '@crawlee/types';
-// @ts-expect-error got-scraping is ESM only
import type { Request } from 'got-scraping';
import type {
@@ -13,8 +12,8 @@ import type {
InternalHttpHook,
RequestHandler,
RouterRoutes,
-} from '../index';
-import { HttpCrawler, Router } from '../index';
+} from '../index.js';
+import { HttpCrawler, Router } from '../index.js';
export type FileDownloadErrorHandler<
UserData extends Dictionary = any, // with default to Dictionary we cant use a typed router in untyped crawler
diff --git a/packages/http-crawler/src/internals/http-crawler.ts b/packages/http-crawler/src/internals/http-crawler.ts
index 974d9474c95b..2f860eb579ab 100644
--- a/packages/http-crawler/src/internals/http-crawler.ts
+++ b/packages/http-crawler/src/internals/http-crawler.ts
@@ -17,7 +17,7 @@ import type {
Session,
} from '@crawlee/basic';
import {
- BASIC_CRAWLER_TIMEOUT_BUFFER_SECS,
+ // BASIC_CRAWLER_TIMEOUT_BUFFER_SECS,
BasicCrawler,
Configuration,
CrawlerExtension,
@@ -34,7 +34,6 @@ import { type CheerioRoot, RETRY_CSS_SELECTORS } from '@crawlee/utils';
import * as cheerio from 'cheerio';
import type { RequestLike, ResponseLike } from 'content-type';
import contentTypeParser from 'content-type';
-// @ts-expect-error This throws a compilation error due to got-scraping being ESM only but we only import types, so its alllll gooooood
import type { Method, OptionsInit, TimeoutError as TimeoutErrorClass } from 'got-scraping';
import iconv from 'iconv-lite';
import mime from 'mime-types';
@@ -78,13 +77,6 @@ export type HttpErrorHandler<
export interface HttpCrawlerOptions
extends BasicCrawlerOptions {
- /**
- * An alias for {@apilink HttpCrawlerOptions.requestHandler}
- * Soon to be removed, use `requestHandler` instead.
- * @deprecated
- */
- handlePageFunction?: HttpCrawlerOptions['requestHandler'];
-
/**
* Timeout in which the HTTP request to the resource needs to finish, given in seconds.
*/
@@ -349,7 +341,6 @@ export class HttpCrawler<
protected static override optionsShape = {
...BasicCrawler.optionsShape,
- handlePageFunction: ow.optional.function,
navigationTimeoutSecs: ow.optional.number,
ignoreSslErrors: ow.optional.boolean,
@@ -377,8 +368,6 @@ export class HttpCrawler<
const {
requestHandler,
- handlePageFunction,
-
requestHandlerTimeoutSecs = 60,
navigationTimeoutSecs = 30,
ignoreSslErrors = true,
@@ -392,9 +381,6 @@ export class HttpCrawler<
additionalHttpErrorStatusCodes = [],
ignoreHttpErrorStatusCodes = [],
- // Ignored
- handleRequestFunction,
-
// BasicCrawler
autoscaledPoolOptions = HTTP_OPTIMIZED_AUTOSCALED_POOL_OPTIONS,
...basicCrawlerOptions
@@ -405,26 +391,12 @@ export class HttpCrawler<
...basicCrawlerOptions,
requestHandler,
autoscaledPoolOptions,
- // We need to add some time for internal functions to finish,
- // but not too much so that we would stall the crawler.
- requestHandlerTimeoutSecs:
- navigationTimeoutSecs + requestHandlerTimeoutSecs + BASIC_CRAWLER_TIMEOUT_BUFFER_SECS,
+ requestHandlerTimeoutSecs: 0, // Disable request handler timeout after modifying the basic crawler wrapper
},
config,
);
- this._handlePropertyNameChange({
- newName: 'requestHandler',
- oldName: 'handlePageFunction',
- propertyKey: 'requestHandler',
- newProperty: requestHandler,
- oldProperty: handlePageFunction,
- allowUndefined: true,
- });
-
- if (!this.requestHandler) {
- this.requestHandler = this.router;
- }
+ this.requestHandler = requestHandler ?? this.router;
// Cookies should be persisted per session only if session pool is used
if (!this.useSessionPool && persistCookiesPerSession) {
@@ -604,32 +576,51 @@ export class HttpCrawler<
}
protected async _handleNavigation(crawlingContext: Context) {
- const gotOptions = {} as OptionsInit;
- const { request, session } = crawlingContext;
- const preNavigationHooksCookies = this._getCookieHeaderFromRequest(request);
-
- request.state = RequestState.BEFORE_NAV;
- // Execute pre navigation hooks before applying session pool cookies,
- // as they may also set cookies in the session
- await this._executeHooks(this.preNavigationHooks, crawlingContext, gotOptions);
- tryCancel();
-
- const postNavigationHooksCookies = this._getCookieHeaderFromRequest(request);
-
- this._applyCookies(crawlingContext, gotOptions, preNavigationHooksCookies, postNavigationHooksCookies);
-
- const proxyUrl = crawlingContext.proxyInfo?.url;
-
- crawlingContext.response = await addTimeoutToPromise(
- async () => this._requestFunction({ request, session, proxyUrl, gotOptions }),
- this.navigationTimeoutMillis,
- `request timed out after ${this.navigationTimeoutMillis / 1000} seconds.`,
- );
- tryCancel();
-
- request.state = RequestState.AFTER_NAV;
- await this._executeHooks(this.postNavigationHooks, crawlingContext, gotOptions);
- tryCancel();
+ try {
+ // Wrapped the navigation hooks and navigation in the same timeout
+ await addTimeoutToPromise(
+ async () => {
+ const gotOptions = {} as OptionsInit;
+ const { request, session } = crawlingContext;
+ const preNavigationHooksCookies = this._getCookieHeaderFromRequest(request);
+
+ request.state = RequestState.BEFORE_NAV;
+ // Execute pre navigation hooks before applying session pool cookies,
+ // as they may also set cookies in the session
+ await this._executeHooks(this.preNavigationHooks, crawlingContext, gotOptions);
+ tryCancel();
+
+ const postNavigationHooksCookies = this._getCookieHeaderFromRequest(request);
+
+ this._applyCookies(
+ crawlingContext,
+ gotOptions,
+ preNavigationHooksCookies,
+ postNavigationHooksCookies,
+ );
+
+ const proxyUrl = crawlingContext.proxyInfo?.url;
+
+ crawlingContext.response =
+ (await this._requestFunction({
+ request,
+ session,
+ proxyUrl,
+ gotOptions,
+ })) ?? undefined;
+ tryCancel();
+
+ request.state = RequestState.AFTER_NAV;
+ await this._executeHooks(this.postNavigationHooks, crawlingContext, gotOptions);
+ tryCancel();
+ },
+ this.navigationTimeoutMillis, // default amount may need to be adjusted to accommodate the hooks
+ `Navigation timed out after ${this.navigationTimeoutMillis / 1000} seconds.`,
+ );
+ } catch (e: any) {
+ crawlingContext.request.state = RequestState.ERROR;
+ throw e;
+ }
}
/**
diff --git a/packages/http-crawler/test/timeout.test.ts b/packages/http-crawler/test/timeout.test.ts
new file mode 100644
index 000000000000..e56bb71832b4
--- /dev/null
+++ b/packages/http-crawler/test/timeout.test.ts
@@ -0,0 +1,143 @@
+import { expect, test } from 'vitest';
+import { TimeoutError } from '@apify/timeout';
+import { HttpCrawler } from '@crawlee/http';
+
+const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
+
+function getStats(crawler: HttpCrawler) {
+ const statsAny = (crawler as any).stats;
+ if (statsAny?.toJSON) return statsAny.toJSON();
+ if (statsAny?.getState) return statsAny.getState();
+ return {};
+}
+
+test('Navigation timeout (preNavigationHooks delay)', async () => {
+ let handlerCalled = false;
+ let failedError: Error | undefined;
+ let failedCalled = 0;
+
+ const crawler = new HttpCrawler({
+ maxRequestRetries: 0,
+ navigationTimeoutSecs: 1,
+ preNavigationHooks: [
+ async () => {
+ await sleep(1500);
+ },
+ ],
+ requestHandler: async () => {
+ handlerCalled = true;
+ },
+ failedRequestHandler: async (_ctx, error) => {
+ failedCalled++;
+ failedError = error as Error;
+ },
+ });
+
+ const start = Date.now();
+ await crawler.run([`https://example.com/?http_nav=${Date.now()}`]);
+ const elapsed = Date.now() - start;
+ const stats = getStats(crawler);
+
+ expect(handlerCalled).toBe(false);
+ expect(failedCalled).toBe(1);
+ expect(stats.requestsFailed).toBe(1);
+ expect(failedError).toBeInstanceOf(TimeoutError);
+ expect(failedError!.message).toMatch(/^Navigation timed out after 1/);
+ expect(elapsed).toBeLessThan(4000); // proves early cut-off
+});
+
+test('Navigation timeout via postNavigationHooks delay', async () => {
+ let handlerCalled = false;
+ let failedError: Error | undefined;
+ let failedCalled = 0;
+
+ const crawler = new HttpCrawler({
+ maxRequestRetries: 0,
+ navigationTimeoutSecs: 1,
+ postNavigationHooks: [
+ async () => {
+ await sleep(1_500);
+ },
+ ],
+ requestHandler: async () => {
+ handlerCalled = true;
+ },
+ failedRequestHandler: async (_ctx, error) => {
+ failedCalled++;
+ failedError = error as Error;
+ },
+ });
+
+ await crawler.run([`https://example.com/?http_post=${Date.now()}`]);
+ const stats = getStats(crawler);
+
+ expect(handlerCalled).toBe(false);
+ expect(failedCalled).toBe(1);
+ expect(stats.requestsFailed).toBe(1);
+ expect(failedError).toBeInstanceOf(TimeoutError);
+ expect((failedError as Error).message).toMatch(/Navigation timed out/);
+});
+
+test('Request handler timeout (post-navigation)', async () => {
+ let handlerEntered = false;
+ let failedError: Error | undefined;
+ let failedCalled = 0;
+
+ const crawler = new HttpCrawler({
+ maxRequestRetries: 0,
+ navigationTimeoutSecs: 10,
+ requestHandlerTimeoutSecs: 2,
+ requestHandler: async () => {
+ handlerEntered = true;
+ await sleep(12_000);
+ },
+ failedRequestHandler: async (_ctx, error) => {
+ failedCalled++;
+ failedError = error as Error;
+ },
+ });
+
+ const start = Date.now();
+ await crawler.run([`https://example.com/?http_handler=${Date.now()}`]);
+ const elapsed = Date.now() - start;
+ const stats = getStats(crawler);
+
+ expect(handlerEntered).toBe(true);
+ expect(failedCalled).toBe(1);
+ expect(stats.requestsFailed).toBe(1);
+ expect(failedError).toBeInstanceOf(TimeoutError);
+ expect(failedError!.message).toMatch(/requestHandler timed out after 2 seconds\./i);
+ expect(failedError!.message).not.toMatch(/Navigation timed out/i);
+ expect(elapsed).toBeLessThan(6000);
+});
+
+test('Succeeds when under both timeouts', async () => {
+ let handlerRan = false;
+ let failedError: Error | undefined;
+
+ const crawler = new HttpCrawler({
+ maxRequestRetries: 0,
+ navigationTimeoutSecs: 2,
+ requestHandlerTimeoutSecs: 2,
+ preNavigationHooks: [
+ async () => {
+ await sleep(300);
+ },
+ ],
+ requestHandler: async () => {
+ handlerRan = true;
+ await sleep(400);
+ },
+ failedRequestHandler: async (_ctx, error) => {
+ failedError = error as Error;
+ },
+ });
+
+ await crawler.run([`https://example.com/?http_ok=${Date.now()}`]);
+ const stats = getStats(crawler);
+
+ expect(handlerRan).toBe(true);
+ expect(stats.requestsFinished).toBe(1);
+ expect(stats.requestsFailed || 0).toBe(0);
+ expect(failedError).toBeUndefined();
+});
diff --git a/packages/impit-client/package.json b/packages/impit-client/package.json
index aad81bf01941..484c100fc026 100644
--- a/packages/impit-client/package.json
+++ b/packages/impit-client/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "impit-based HTTP client implementation for Crawlee. Impersonates browser requests to avoid bot detection.",
"engines": {
- "node": ">=20.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,21 +40,20 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"peerDependencies": {
- "@crawlee/core": "^3.12.1"
+ "@crawlee/core": "^3.13.3"
},
"devDependencies": {
"@crawlee/core": "^3.13.3"
},
"dependencies": {
"@apify/datastructures": "^2.0.3",
- "impit": "^0.4.3"
- },
- "packageManager": "yarn@4.8.1"
+ "impit": "^0.4.5"
+ }
}
diff --git a/packages/jsdom-crawler/package.json b/packages/jsdom-crawler/package.json
index 3b9d8080107c..16d251e06492 100644
--- a/packages/jsdom-crawler/package.json
+++ b/packages/jsdom-crawler/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,22 +40,22 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/timeout": "^0.3.0",
- "@apify/utilities": "^2.7.10",
+ "@apify/timeout": "^0.3.2",
+ "@apify/utilities": "^2.15.5",
"@crawlee/http": "3.13.3",
"@crawlee/types": "3.13.3",
"@crawlee/utils": "3.13.3",
- "@types/jsdom": "^21.0.0",
- "cheerio": "1.0.0-rc.12",
- "jsdom": "^26.0.0",
- "ow": "^0.28.2",
- "tslib": "^2.4.0"
+ "@types/jsdom": "^21.1.7",
+ "cheerio": "^1.0.0",
+ "jsdom": "^26.1.0",
+ "ow": "^2.0.0",
+ "tslib": "^2.8.1"
}
}
diff --git a/packages/jsdom-crawler/src/index.ts b/packages/jsdom-crawler/src/index.ts
index 2a7454461457..905025dc8d63 100644
--- a/packages/jsdom-crawler/src/index.ts
+++ b/packages/jsdom-crawler/src/index.ts
@@ -1,2 +1,2 @@
export * from '@crawlee/http';
-export * from './internals/jsdom-crawler';
+export * from './internals/jsdom-crawler.js';
diff --git a/packages/linkedom-crawler/package.json b/packages/linkedom-crawler/package.json
index 72931d8e6da4..05271409fee5 100644
--- a/packages/linkedom-crawler/package.json
+++ b/packages/linkedom-crawler/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,19 +40,19 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/timeout": "^0.3.0",
- "@apify/utilities": "^2.7.10",
+ "@apify/timeout": "^0.3.2",
+ "@apify/utilities": "^2.15.5",
"@crawlee/http": "3.13.3",
"@crawlee/types": "3.13.3",
- "linkedom": "^0.18.0",
- "ow": "^0.28.2",
- "tslib": "^2.4.0"
+ "linkedom": "^0.18.10",
+ "ow": "^2.0.0",
+ "tslib": "^2.8.1"
}
}
diff --git a/packages/linkedom-crawler/src/index.ts b/packages/linkedom-crawler/src/index.ts
index c52d14dcb12a..ab8cc478d1c7 100644
--- a/packages/linkedom-crawler/src/index.ts
+++ b/packages/linkedom-crawler/src/index.ts
@@ -1,2 +1,2 @@
export * from '@crawlee/http';
-export * from './internals/linkedom-crawler';
+export * from './internals/linkedom-crawler.js';
diff --git a/packages/linkedom-crawler/src/internals/linkedom-crawler.ts b/packages/linkedom-crawler/src/internals/linkedom-crawler.ts
index 39153c26383e..a168cc1276b0 100644
--- a/packages/linkedom-crawler/src/internals/linkedom-crawler.ts
+++ b/packages/linkedom-crawler/src/internals/linkedom-crawler.ts
@@ -22,7 +22,6 @@ import {
import type { Dictionary } from '@crawlee/types';
import { type CheerioRoot, type RobotsTxtFile, sleep } from '@crawlee/utils';
import * as cheerio from 'cheerio';
-// @ts-expect-error This throws a compilation error due to TypeScript not inferring the module has CJS versions too
import { DOMParser } from 'linkedom/cached';
import { concatStreamToBuffer } from '@apify/utilities';
diff --git a/packages/memory-storage/package.json b/packages/memory-storage/package.json
index 3bf1856994c6..ad08079ea121 100644
--- a/packages/memory-storage/package.json
+++ b/packages/memory-storage/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "A simple in-memory storage implementation of the Apify API",
"engines": {
- "node": ">= 16"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -41,22 +35,22 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/log": "^2.4.0",
+ "@apify/log": "^2.5.18",
"@crawlee/types": "3.13.3",
- "@sapphire/async-queue": "^1.5.0",
- "@sapphire/shapeshift": "^3.0.0",
- "content-type": "^1.0.4",
- "fs-extra": "^11.0.0",
+ "@sapphire/async-queue": "^1.5.5",
+ "@sapphire/shapeshift": "^4.0.0",
+ "content-type": "^1.0.5",
+ "fs-extra": "^11.3.0",
"json5": "^2.2.3",
- "mime-types": "^2.1.35",
+ "mime-types": "^3.0.1",
"proper-lockfile": "^4.1.2",
- "tslib": "^2.4.0"
+ "tslib": "^2.8.1"
}
}
diff --git a/packages/memory-storage/src/background-handler/fs-utils.ts b/packages/memory-storage/src/background-handler/fs-utils.ts
index 3e0bb1ba4d28..387784cecaa7 100644
--- a/packages/memory-storage/src/background-handler/fs-utils.ts
+++ b/packages/memory-storage/src/background-handler/fs-utils.ts
@@ -3,12 +3,12 @@ import { writeFile as writeFileP } from 'node:fs/promises';
import { resolve } from 'node:path';
import { setTimeout } from 'node:timers/promises';
-import { ensureDir } from 'fs-extra';
+import { ensureDir } from 'fs-extra/esm';
import { lock } from 'proper-lockfile';
import log from '@apify/log';
-import type { BackgroundHandlerReceivedMessage, BackgroundHandlerUpdateMetadataMessage } from '../utils';
+import type { BackgroundHandlerReceivedMessage, BackgroundHandlerUpdateMetadataMessage } from '../utils.js';
const backgroundHandlerLog = log.child({ prefix: 'MemoryStorageBackgroundHandler' });
diff --git a/packages/memory-storage/src/background-handler/index.ts b/packages/memory-storage/src/background-handler/index.ts
index 4f2c1ee02726..5912cc7ad181 100644
--- a/packages/memory-storage/src/background-handler/index.ts
+++ b/packages/memory-storage/src/background-handler/index.ts
@@ -1,7 +1,7 @@
import { randomUUID } from 'node:crypto';
-import type { BackgroundHandlerReceivedMessage } from '../utils';
-import { handleMessage } from './fs-utils';
+import type { BackgroundHandlerReceivedMessage } from '../utils.js';
+import { handleMessage } from './fs-utils.js';
/**
* A map of promises that are created when a background task is scheduled.
diff --git a/packages/memory-storage/src/cache-helpers.ts b/packages/memory-storage/src/cache-helpers.ts
index 157e69847c6c..6a1bc4bb8ce6 100644
--- a/packages/memory-storage/src/cache-helpers.ts
+++ b/packages/memory-storage/src/cache-helpers.ts
@@ -5,10 +5,10 @@ import type * as storage from '@crawlee/types';
import json5 from 'json5';
import mimeTypes from 'mime-types';
-import { DatasetFileSystemEntry } from './fs/dataset/fs';
-import { KeyValueFileSystemEntry } from './fs/key-value-store/fs';
-import { RequestQueueFileSystemEntry } from './fs/request-queue/fs';
-import { type MemoryStorage } from './memory-storage';
+import { DatasetFileSystemEntry } from './fs/dataset/fs.js';
+import { KeyValueFileSystemEntry } from './fs/key-value-store/fs.js';
+import { RequestQueueFileSystemEntry } from './fs/request-queue/fs.js';
+import { type MemoryStorage } from './memory-storage.js';
const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
@@ -388,8 +388,8 @@ export async function findRequestQueueByPossibleId(client: MemoryStorage, entryN
}
/* eslint-disable import/first -- Fixing circulars */
-import { DatasetClient } from './resource-clients/dataset';
-import type { InternalKeyRecord } from './resource-clients/key-value-store';
-import { KeyValueStoreClient } from './resource-clients/key-value-store';
-import { RequestQueueClient } from './resource-clients/request-queue';
-import { memoryStorageLog } from './utils';
+import { DatasetClient } from './resource-clients/dataset.js';
+import type { InternalKeyRecord } from './resource-clients/key-value-store.js';
+import { KeyValueStoreClient } from './resource-clients/key-value-store.js';
+import { RequestQueueClient } from './resource-clients/request-queue.js';
+import { memoryStorageLog } from './utils.js';
diff --git a/packages/memory-storage/src/fs/dataset/fs.ts b/packages/memory-storage/src/fs/dataset/fs.ts
index 06bf21d5d40a..bf66d2d5ed84 100644
--- a/packages/memory-storage/src/fs/dataset/fs.ts
+++ b/packages/memory-storage/src/fs/dataset/fs.ts
@@ -2,11 +2,11 @@ import { readFile, rm } from 'node:fs/promises';
import { dirname, resolve } from 'node:path';
import { AsyncQueue } from '@sapphire/async-queue';
-import { ensureDir } from 'fs-extra';
+import { ensureDir } from 'fs-extra/esm';
-import { lockAndWrite } from '../../background-handler/fs-utils';
-import type { StorageImplementation } from '../common';
-import type { CreateStorageImplementationOptions } from './index';
+import { lockAndWrite } from '../../background-handler/fs-utils.js';
+import type { StorageImplementation } from '../common.js';
+import type { CreateStorageImplementationOptions } from './index.js';
export class DatasetFileSystemEntry implements StorageImplementation {
private filePath: string;
diff --git a/packages/memory-storage/src/fs/dataset/index.ts b/packages/memory-storage/src/fs/dataset/index.ts
index 3fc24562fa4c..2d61c910dcdd 100644
--- a/packages/memory-storage/src/fs/dataset/index.ts
+++ b/packages/memory-storage/src/fs/dataset/index.ts
@@ -1,8 +1,8 @@
import type { Dictionary } from '@crawlee/types';
-import type { StorageImplementation } from '../common';
-import { DatasetFileSystemEntry } from './fs';
-import { DatasetMemoryEntry } from './memory';
+import type { StorageImplementation } from '../common.js';
+import { DatasetFileSystemEntry } from './fs.js';
+import { DatasetMemoryEntry } from './memory.js';
export function createDatasetStorageImplementation(
options: CreateStorageImplementationOptions,
diff --git a/packages/memory-storage/src/fs/dataset/memory.ts b/packages/memory-storage/src/fs/dataset/memory.ts
index 569b77beb337..c0a7e6f475e1 100644
--- a/packages/memory-storage/src/fs/dataset/memory.ts
+++ b/packages/memory-storage/src/fs/dataset/memory.ts
@@ -1,4 +1,4 @@
-import type { StorageImplementation } from '../common';
+import type { StorageImplementation } from '../common.js';
export class DatasetMemoryEntry implements StorageImplementation {
private data!: Data;
diff --git a/packages/memory-storage/src/fs/key-value-store/fs.ts b/packages/memory-storage/src/fs/key-value-store/fs.ts
index 48b727d639ca..daed001fc582 100644
--- a/packages/memory-storage/src/fs/key-value-store/fs.ts
+++ b/packages/memory-storage/src/fs/key-value-store/fs.ts
@@ -3,14 +3,14 @@ import { dirname, resolve } from 'node:path';
import { basename } from 'node:path/win32';
import { AsyncQueue } from '@sapphire/async-queue';
-import { ensureDir } from 'fs-extra';
+import { ensureDir } from 'fs-extra/esm';
import mime from 'mime-types';
-import { lockAndWrite } from '../../background-handler/fs-utils';
-import type { InternalKeyRecord } from '../../resource-clients/key-value-store';
-import { memoryStorageLog } from '../../utils';
-import type { StorageImplementation } from '../common';
-import type { CreateStorageImplementationOptions } from '.';
+import { lockAndWrite } from '../../background-handler/fs-utils.js';
+import type { InternalKeyRecord } from '../../resource-clients/key-value-store.js';
+import { memoryStorageLog } from '../../utils.js';
+import type { StorageImplementation } from '../common.js';
+import type { CreateStorageImplementationOptions } from './index.js';
export class KeyValueFileSystemEntry implements StorageImplementation {
private storeDirectory: string;
diff --git a/packages/memory-storage/src/fs/key-value-store/index.ts b/packages/memory-storage/src/fs/key-value-store/index.ts
index 7889ac5e701a..20e664ae01e3 100644
--- a/packages/memory-storage/src/fs/key-value-store/index.ts
+++ b/packages/memory-storage/src/fs/key-value-store/index.ts
@@ -1,7 +1,7 @@
-import type { InternalKeyRecord } from '../../resource-clients/key-value-store';
-import type { StorageImplementation } from '../common';
-import { KeyValueFileSystemEntry } from './fs';
-import { KeyValueMemoryEntry } from './memory';
+import type { InternalKeyRecord } from '../../resource-clients/key-value-store.js';
+import type { StorageImplementation } from '../common.js';
+import { KeyValueFileSystemEntry } from './fs.js';
+import { KeyValueMemoryEntry } from './memory.js';
export function createKeyValueStorageImplementation(
options: CreateStorageImplementationOptions,
diff --git a/packages/memory-storage/src/fs/key-value-store/memory.ts b/packages/memory-storage/src/fs/key-value-store/memory.ts
index bc9e9e4a0a6e..0ac0e66efb29 100644
--- a/packages/memory-storage/src/fs/key-value-store/memory.ts
+++ b/packages/memory-storage/src/fs/key-value-store/memory.ts
@@ -1,5 +1,5 @@
-import type { InternalKeyRecord } from '../../resource-clients/key-value-store';
-import type { StorageImplementation } from '../common';
+import type { InternalKeyRecord } from '../../resource-clients/key-value-store.js';
+import type { StorageImplementation } from '../common.js';
export class KeyValueMemoryEntry implements StorageImplementation {
private data!: InternalKeyRecord;
diff --git a/packages/memory-storage/src/fs/request-queue/fs.ts b/packages/memory-storage/src/fs/request-queue/fs.ts
index 23a4d8ff2ee8..87dde6a2163b 100644
--- a/packages/memory-storage/src/fs/request-queue/fs.ts
+++ b/packages/memory-storage/src/fs/request-queue/fs.ts
@@ -2,12 +2,12 @@ import { readFile, rm } from 'node:fs/promises';
import { dirname, resolve } from 'node:path';
import { AsyncQueue } from '@sapphire/async-queue';
-import { ensureDir } from 'fs-extra';
+import { ensureDir } from 'fs-extra/esm';
-import { lockAndCallback, lockAndWrite } from '../../background-handler/fs-utils';
-import type { InternalRequest } from '../../resource-clients/request-queue';
-import type { StorageImplementation } from '../common';
-import type { CreateStorageImplementationOptions } from '.';
+import { lockAndCallback, lockAndWrite } from '../../background-handler/fs-utils.js';
+import type { InternalRequest } from '../../resource-clients/request-queue.js';
+import type { StorageImplementation } from '../common.js';
+import type { CreateStorageImplementationOptions } from './index.js';
export class RequestQueueFileSystemEntry implements StorageImplementation {
private filePath: string;
diff --git a/packages/memory-storage/src/fs/request-queue/index.ts b/packages/memory-storage/src/fs/request-queue/index.ts
index 25662a4fb921..cb903bb6e8c3 100644
--- a/packages/memory-storage/src/fs/request-queue/index.ts
+++ b/packages/memory-storage/src/fs/request-queue/index.ts
@@ -1,5 +1,5 @@
-import { RequestQueueFileSystemEntry } from './fs';
-import { RequestQueueMemoryEntry } from './memory';
+import { RequestQueueFileSystemEntry } from './fs.js';
+import { RequestQueueMemoryEntry } from './memory.js';
export function createRequestQueueStorageImplementation(options: CreateStorageImplementationOptions) {
if (options.persistStorage) {
diff --git a/packages/memory-storage/src/fs/request-queue/memory.ts b/packages/memory-storage/src/fs/request-queue/memory.ts
index 79811781b30f..9399c2ed4f0b 100644
--- a/packages/memory-storage/src/fs/request-queue/memory.ts
+++ b/packages/memory-storage/src/fs/request-queue/memory.ts
@@ -1,5 +1,5 @@
-import type { InternalRequest } from '../../resource-clients/request-queue';
-import type { StorageImplementation } from '../common';
+import type { InternalRequest } from '../../resource-clients/request-queue.js';
+import type { StorageImplementation } from '../common.js';
export class RequestQueueMemoryEntry implements StorageImplementation {
private data!: InternalRequest;
diff --git a/packages/memory-storage/src/index.ts b/packages/memory-storage/src/index.ts
index 6231f1fc1789..63137d81493b 100644
--- a/packages/memory-storage/src/index.ts
+++ b/packages/memory-storage/src/index.ts
@@ -1 +1 @@
-export * from './memory-storage';
+export * from './memory-storage.js';
diff --git a/packages/memory-storage/src/memory-storage.ts b/packages/memory-storage/src/memory-storage.ts
index c19931dbd07f..5ba10b597add 100644
--- a/packages/memory-storage/src/memory-storage.ts
+++ b/packages/memory-storage/src/memory-storage.ts
@@ -5,15 +5,15 @@ import { resolve } from 'node:path';
import type * as storage from '@crawlee/types';
import type { Dictionary } from '@crawlee/types';
import { s } from '@sapphire/shapeshift';
-import { ensureDirSync, move, moveSync, pathExistsSync } from 'fs-extra';
+import { ensureDirSync, move, moveSync, pathExistsSync } from 'fs-extra/esm';
-import { promiseMap } from './background-handler/index';
-import { DatasetClient } from './resource-clients/dataset';
-import { DatasetCollectionClient } from './resource-clients/dataset-collection';
-import { KeyValueStoreClient } from './resource-clients/key-value-store';
-import { KeyValueStoreCollectionClient } from './resource-clients/key-value-store-collection';
-import { RequestQueueClient } from './resource-clients/request-queue';
-import { RequestQueueCollectionClient } from './resource-clients/request-queue-collection';
+import { promiseMap } from './background-handler/index.js';
+import { DatasetClient } from './resource-clients/dataset.js';
+import { DatasetCollectionClient } from './resource-clients/dataset-collection.js';
+import { KeyValueStoreClient } from './resource-clients/key-value-store.js';
+import { KeyValueStoreCollectionClient } from './resource-clients/key-value-store-collection.js';
+import { RequestQueueClient } from './resource-clients/request-queue.js';
+import { RequestQueueCollectionClient } from './resource-clients/request-queue-collection.js';
export interface MemoryStorageOptions {
/**
@@ -51,9 +51,9 @@ export class MemoryStorage implements storage.StorageClient {
constructor(options: MemoryStorageOptions = {}) {
s.object({
- localDataDirectory: s.string.optional,
- writeMetadata: s.boolean.optional,
- persistStorage: s.boolean.optional,
+ localDataDirectory: s.string().optional(),
+ writeMetadata: s.boolean().optional(),
+ persistStorage: s.boolean().optional(),
}).parse(options);
// v3.0.0 used `crawlee_storage` as the default, we changed this in v3.0.1 to just `storage`,
@@ -91,7 +91,7 @@ export class MemoryStorage implements storage.StorageClient {
}
dataset(id: string): storage.DatasetClient {
- s.string.parse(id);
+ s.string().parse(id);
return new DatasetClient({ id, baseStorageDirectory: this.datasetsDirectory, client: this });
}
@@ -104,7 +104,7 @@ export class MemoryStorage implements storage.StorageClient {
}
keyValueStore(id: string): storage.KeyValueStoreClient {
- s.string.parse(id);
+ s.string().parse(id);
return new KeyValueStoreClient({ id, baseStorageDirectory: this.keyValueStoresDirectory, client: this });
}
@@ -117,10 +117,10 @@ export class MemoryStorage implements storage.StorageClient {
}
requestQueue(id: string, options: storage.RequestQueueOptions = {}): storage.RequestQueueClient {
- s.string.parse(id);
+ s.string().parse(id);
s.object({
- clientKey: s.string.optional,
- timeoutSecs: s.number.optional,
+ clientKey: s.string().optional(),
+ timeoutSecs: s.number().optional(),
}).parse(options);
return new RequestQueueClient({
@@ -132,9 +132,9 @@ export class MemoryStorage implements storage.StorageClient {
}
async setStatusMessage(message: string, options: storage.SetStatusMessageOptions = {}): Promise {
- s.string.parse(message);
+ s.string().parse(message);
s.object({
- isStatusMessageTerminal: s.boolean.optional,
+ isStatusMessageTerminal: s.boolean().optional(),
}).parse(options);
return Promise.resolve();
diff --git a/packages/memory-storage/src/resource-clients/common/base-client.ts b/packages/memory-storage/src/resource-clients/common/base-client.ts
index 2ac882552f48..3385ae3ba3e9 100644
--- a/packages/memory-storage/src/resource-clients/common/base-client.ts
+++ b/packages/memory-storage/src/resource-clients/common/base-client.ts
@@ -1,4 +1,4 @@
-import type { StorageTypes } from '../../consts';
+import type { StorageTypes } from '../../consts.js';
export class BaseClient {
id: string;
diff --git a/packages/memory-storage/src/resource-clients/dataset-collection.ts b/packages/memory-storage/src/resource-clients/dataset-collection.ts
index b82c8a262ce6..4aa2462aa9f7 100644
--- a/packages/memory-storage/src/resource-clients/dataset-collection.ts
+++ b/packages/memory-storage/src/resource-clients/dataset-collection.ts
@@ -3,10 +3,10 @@ import { resolve } from 'node:path';
import type * as storage from '@crawlee/types';
import { s } from '@sapphire/shapeshift';
-import { scheduleBackgroundTask } from '../background-handler';
-import { findOrCacheDatasetByPossibleId } from '../cache-helpers';
-import type { MemoryStorage } from '../index';
-import { DatasetClient } from './dataset';
+import { scheduleBackgroundTask } from '../background-handler/index.js';
+import { findOrCacheDatasetByPossibleId } from '../cache-helpers.js';
+import type { MemoryStorage } from '../index.js';
+import { DatasetClient } from './dataset.js';
export interface DatasetCollectionClientOptions {
baseStorageDirectory: string;
@@ -36,7 +36,7 @@ export class DatasetCollectionClient implements storage.DatasetCollectionClient
}
async getOrCreate(name?: string): Promise {
- s.string.optional.parse(name);
+ s.string().optional().parse(name);
if (name) {
const found = await findOrCacheDatasetByPossibleId(this.client, name);
diff --git a/packages/memory-storage/src/resource-clients/dataset.ts b/packages/memory-storage/src/resource-clients/dataset.ts
index a90df844a125..374aca59cdb6 100644
--- a/packages/memory-storage/src/resource-clients/dataset.ts
+++ b/packages/memory-storage/src/resource-clients/dataset.ts
@@ -6,15 +6,15 @@ import { resolve } from 'node:path';
import type { Dictionary } from '@crawlee/types';
import type * as storage from '@crawlee/types';
import { s } from '@sapphire/shapeshift';
-import { move } from 'fs-extra';
+import { move } from 'fs-extra/esm';
-import { scheduleBackgroundTask } from '../background-handler';
-import { findOrCacheDatasetByPossibleId } from '../cache-helpers';
-import { StorageTypes } from '../consts';
-import type { StorageImplementation } from '../fs/common';
-import { createDatasetStorageImplementation } from '../fs/dataset';
-import type { MemoryStorage } from '../index';
-import { BaseClient } from './common/base-client';
+import { scheduleBackgroundTask } from '../background-handler/index.js';
+import { findOrCacheDatasetByPossibleId } from '../cache-helpers.js';
+import { StorageTypes } from '../consts.js';
+import type { StorageImplementation } from '../fs/common.js';
+import { createDatasetStorageImplementation } from '../fs/dataset/index.js';
+import type { MemoryStorage } from '../index.js';
+import { BaseClient } from './common/base-client.js';
/**
* This is what API returns in the x-apify-pagination-limit
@@ -70,7 +70,7 @@ export class DatasetClient
async update(newFields: storage.DatasetClientUpdateOptions = {}): Promise {
const parsed = s
.object({
- name: s.string.lengthGreaterThan(0).optional,
+ name: s.string().lengthGreaterThan(0).optional(),
})
.parse(newFields);
@@ -135,9 +135,9 @@ export class DatasetClient
desc,
} = s
.object({
- desc: s.boolean.optional,
- limit: s.number.int.optional,
- offset: s.number.int.optional,
+ desc: s.boolean().optional(),
+ limit: s.number().int().optional(),
+ offset: s.number().int().optional(),
})
.parse(options);
@@ -174,11 +174,11 @@ export class DatasetClient
async pushItems(items: string | Data | string[] | Data[]): Promise {
const rawItems = s
- .union(
- s.string,
- s.object({} as Data).passthrough,
- s.array(s.union(s.string, s.object({} as Data).passthrough)),
- )
+ .union([
+ s.string(),
+ s.object({} as Data).passthrough(),
+ s.array(s.union([s.string(), s.object({} as Data).passthrough()])),
+ ])
.parse(items) as Data[];
// Check by id
diff --git a/packages/memory-storage/src/resource-clients/key-value-store-collection.ts b/packages/memory-storage/src/resource-clients/key-value-store-collection.ts
index d552374beb3a..f656b9019924 100644
--- a/packages/memory-storage/src/resource-clients/key-value-store-collection.ts
+++ b/packages/memory-storage/src/resource-clients/key-value-store-collection.ts
@@ -3,10 +3,10 @@ import { resolve } from 'node:path';
import type * as storage from '@crawlee/types';
import { s } from '@sapphire/shapeshift';
-import { scheduleBackgroundTask } from '../background-handler';
-import { findOrCacheKeyValueStoreByPossibleId } from '../cache-helpers';
-import type { MemoryStorage } from '../index';
-import { KeyValueStoreClient } from './key-value-store';
+import { scheduleBackgroundTask } from '../background-handler/index.js';
+import { findOrCacheKeyValueStoreByPossibleId } from '../cache-helpers.js';
+import type { MemoryStorage } from '../index.js';
+import { KeyValueStoreClient } from './key-value-store.js';
export interface KeyValueStoreCollectionClientOptions {
baseStorageDirectory: string;
@@ -36,7 +36,7 @@ export class KeyValueStoreCollectionClient implements storage.KeyValueStoreColle
}
async getOrCreate(name?: string): Promise {
- s.string.optional.parse(name);
+ s.string().optional().parse(name);
if (name) {
const found = await findOrCacheKeyValueStoreByPossibleId(this.client, name);
diff --git a/packages/memory-storage/src/resource-clients/key-value-store.ts b/packages/memory-storage/src/resource-clients/key-value-store.ts
index 986961de0e3e..27c2b99c8731 100644
--- a/packages/memory-storage/src/resource-clients/key-value-store.ts
+++ b/packages/memory-storage/src/resource-clients/key-value-store.ts
@@ -5,18 +5,18 @@ import { Readable } from 'node:stream';
import type * as storage from '@crawlee/types';
import { s } from '@sapphire/shapeshift';
-import { move } from 'fs-extra';
+import { move } from 'fs-extra/esm';
import mime from 'mime-types';
-import { scheduleBackgroundTask } from '../background-handler';
-import { maybeParseBody } from '../body-parser';
-import { findOrCacheKeyValueStoreByPossibleId } from '../cache-helpers';
-import { DEFAULT_API_PARAM_LIMIT, StorageTypes } from '../consts';
-import type { StorageImplementation } from '../fs/common';
-import { createKeyValueStorageImplementation } from '../fs/key-value-store';
-import type { MemoryStorage } from '../index';
-import { isBuffer, isStream } from '../utils';
-import { BaseClient } from './common/base-client';
+import { scheduleBackgroundTask } from '../background-handler/index.js';
+import { maybeParseBody } from '../body-parser.js';
+import { findOrCacheKeyValueStoreByPossibleId } from '../cache-helpers.js';
+import { DEFAULT_API_PARAM_LIMIT, StorageTypes } from '../consts.js';
+import type { StorageImplementation } from '../fs/common.js';
+import { createKeyValueStorageImplementation } from '../fs/key-value-store/index.js';
+import type { MemoryStorage } from '../index.js';
+import { isBuffer, isStream } from '../utils.js';
+import { BaseClient } from './common/base-client.js';
const DEFAULT_LOCAL_FILE_EXTENSION = 'bin';
@@ -65,7 +65,7 @@ export class KeyValueStoreClient extends BaseClient {
async update(newFields: storage.KeyValueStoreClientUpdateOptions = {}): Promise {
const parsed = s
.object({
- name: s.string.lengthGreaterThan(0).optional,
+ name: s.string().lengthGreaterThan(0).optional(),
})
.parse(newFields);
@@ -121,8 +121,8 @@ export class KeyValueStoreClient extends BaseClient {
async listKeys(options: storage.KeyValueStoreClientListOptions = {}): Promise {
const { limit = DEFAULT_API_PARAM_LIMIT, exclusiveStartKey } = s
.object({
- limit: s.number.greaterThan(0).optional,
- exclusiveStartKey: s.string.optional,
+ limit: s.number().greaterThan(0).optional(),
+ exclusiveStartKey: s.string().optional(),
})
.parse(options);
@@ -183,7 +183,7 @@ export class KeyValueStoreClient extends BaseClient {
* @returns `true` if the record exists, `false` if it does not.
*/
async recordExists(key: string): Promise {
- s.string.parse(key);
+ s.string().parse(key);
// Check by id
const existingStoreById = await findOrCacheKeyValueStoreByPossibleId(this.client, this.name ?? this.id);
@@ -199,13 +199,13 @@ export class KeyValueStoreClient extends BaseClient {
key: string,
options: storage.KeyValueStoreClientGetRecordOptions = {},
): Promise {
- s.string.parse(key);
+ s.string().parse(key);
s.object({
- buffer: s.boolean.optional,
+ buffer: s.boolean().optional(),
// These options are ignored, but kept here
// for validation consistency with API client.
- stream: s.boolean.optional,
- disableRedirect: s.boolean.optional,
+ stream: s.boolean().optional(),
+ disableRedirect: s.boolean().optional(),
}).parse(options);
// Check by id
@@ -244,11 +244,11 @@ export class KeyValueStoreClient extends BaseClient {
async setRecord(record: storage.KeyValueStoreRecord): Promise {
s.object({
- key: s.string.lengthGreaterThan(0),
- value: s.union(
- s.null,
- s.string,
- s.number,
+ key: s.string().lengthGreaterThan(0),
+ value: s.union([
+ s.null(),
+ s.string(),
+ s.number(),
s.instance(Buffer),
s.instance(ArrayBuffer),
s.typedArray(),
@@ -256,8 +256,8 @@ export class KeyValueStoreClient extends BaseClient {
s
.object({})
.setValidationEnabled(false),
- ),
- contentType: s.string.lengthGreaterThan(0).optional,
+ ]),
+ contentType: s.string().lengthGreaterThan(0).optional(),
}).parse(record);
// Check by id
@@ -322,7 +322,7 @@ export class KeyValueStoreClient extends BaseClient {
}
async deleteRecord(key: string): Promise {
- s.string.parse(key);
+ s.string().parse(key);
// Check by id
const existingStoreById = await findOrCacheKeyValueStoreByPossibleId(this.client, this.name ?? this.id);
diff --git a/packages/memory-storage/src/resource-clients/request-queue-collection.ts b/packages/memory-storage/src/resource-clients/request-queue-collection.ts
index 004fd3aacbfa..81c4f634da97 100644
--- a/packages/memory-storage/src/resource-clients/request-queue-collection.ts
+++ b/packages/memory-storage/src/resource-clients/request-queue-collection.ts
@@ -3,10 +3,10 @@ import { resolve } from 'node:path';
import type * as storage from '@crawlee/types';
import { s } from '@sapphire/shapeshift';
-import { scheduleBackgroundTask } from '../background-handler';
-import { findRequestQueueByPossibleId } from '../cache-helpers';
-import type { MemoryStorage } from '../index';
-import { RequestQueueClient } from './request-queue';
+import { scheduleBackgroundTask } from '../background-handler/index.js';
+import { findRequestQueueByPossibleId } from '../cache-helpers.js';
+import type { MemoryStorage } from '../index.js';
+import { RequestQueueClient } from './request-queue.js';
export interface RequestQueueCollectionClientOptions {
baseStorageDirectory: string;
@@ -36,7 +36,7 @@ export class RequestQueueCollectionClient implements storage.RequestQueueCollect
}
async getOrCreate(name?: string): Promise {
- s.string.optional.parse(name);
+ s.string().optional().parse(name);
if (name) {
const found = await findRequestQueueByPossibleId(this.client, name);
diff --git a/packages/memory-storage/src/resource-clients/request-queue.ts b/packages/memory-storage/src/resource-clients/request-queue.ts
index a5cba68f5356..a5a1e388a7c4 100644
--- a/packages/memory-storage/src/resource-clients/request-queue.ts
+++ b/packages/memory-storage/src/resource-clients/request-queue.ts
@@ -5,33 +5,35 @@ import { resolve } from 'node:path';
import type * as storage from '@crawlee/types';
import { AsyncQueue } from '@sapphire/async-queue';
import { s } from '@sapphire/shapeshift';
-import { move } from 'fs-extra';
-import type { RequestQueueFileSystemEntry } from 'packages/memory-storage/src/fs/request-queue/fs';
-import type { RequestQueueMemoryEntry } from 'packages/memory-storage/src/fs/request-queue/memory';
-
-import { scheduleBackgroundTask } from '../background-handler';
-import { findRequestQueueByPossibleId } from '../cache-helpers';
-import { StorageTypes } from '../consts';
-import { createRequestQueueStorageImplementation } from '../fs/request-queue';
-import type { MemoryStorage } from '../index';
-import { purgeNullsFromObject, uniqueKeyToRequestId } from '../utils';
-import { BaseClient } from './common/base-client';
-
-const requestShape = s.object({
- id: s.string,
- url: s.string.url({ allowedProtocols: ['http:', 'https:'] }),
- uniqueKey: s.string,
- method: s.string.optional,
- retryCount: s.number.int.optional,
- handledAt: s.union(s.string, s.date.valid).optional,
-}).passthrough;
+import { move } from 'fs-extra/esm';
+import type { RequestQueueFileSystemEntry } from 'packages/memory-storage/src/fs/request-queue/fs.js';
+import type { RequestQueueMemoryEntry } from 'packages/memory-storage/src/fs/request-queue/memory.js';
+
+import { scheduleBackgroundTask } from '../background-handler/index.js';
+import { findRequestQueueByPossibleId } from '../cache-helpers.js';
+import { StorageTypes } from '../consts.js';
+import { createRequestQueueStorageImplementation } from '../fs/request-queue/index.js';
+import type { MemoryStorage } from '../index.js';
+import { purgeNullsFromObject, uniqueKeyToRequestId } from '../utils.js';
+import { BaseClient } from './common/base-client.js';
+
+const requestShape = s
+ .object({
+ id: s.string(),
+ url: s.string().url({ allowedProtocols: ['http:', 'https:'] }),
+ uniqueKey: s.string(),
+ method: s.string().optional(),
+ retryCount: s.number().int().optional(),
+ handledAt: s.union([s.string(), s.date().valid()]).optional(),
+ })
+ .passthrough();
const requestShapeWithoutId = requestShape.omit(['id']);
-const batchRequestShapeWithoutId = requestShapeWithoutId.array;
+const batchRequestShapeWithoutId = requestShapeWithoutId.array();
const requestOptionsShape = s.object({
- forefront: s.boolean.optional,
+ forefront: s.boolean().optional(),
});
export interface RequestQueueClientOptions {
@@ -100,9 +102,10 @@ export class RequestQueueClient extends BaseClient implements storage.RequestQue
// when swapping to a remote queue in production.
const parsed = s
.object({
- name: s.string.lengthGreaterThan(0).optional,
+ name: s.string().lengthGreaterThan(0).optional(),
})
- .passthrough.parse(newFields);
+ .passthrough()
+ .parse(newFields);
const existingQueueById = await findRequestQueueByPossibleId(this.client, this.name ?? this.id);
@@ -166,7 +169,7 @@ export class RequestQueueClient extends BaseClient implements storage.RequestQue
async listHead(options: storage.ListOptions = {}): Promise {
const { limit } = s
.object({
- limit: s.number.optional.default(100),
+ limit: s.number().optional().default(100),
})
.parse(options);
@@ -229,8 +232,8 @@ export class RequestQueueClient extends BaseClient implements storage.RequestQue
async listAndLockHead(options: storage.ListAndLockOptions): Promise {
const { limit, lockSecs } = s
.object({
- limit: s.number.lessThanOrEqual(25).optional.default(25),
- lockSecs: s.number,
+ limit: s.number().lessThanOrEqual(25).optional().default(25),
+ lockSecs: s.number(),
})
.parse(options);
@@ -302,11 +305,11 @@ export class RequestQueueClient extends BaseClient implements storage.RequestQue
id: string,
options: storage.ProlongRequestLockOptions,
): Promise {
- s.string.parse(id);
+ s.string().parse(id);
const { lockSecs, forefront } = s
.object({
- lockSecs: s.number,
- forefront: s.boolean.optional.default(false),
+ lockSecs: s.number(),
+ forefront: s.boolean().optional().default(false),
})
.parse(options);
@@ -337,10 +340,10 @@ export class RequestQueueClient extends BaseClient implements storage.RequestQue
}
async deleteRequestLock(id: string, options: storage.DeleteRequestLockOptions = {}): Promise {
- s.string.parse(id);
+ s.string().parse(id);
const { forefront } = s
.object({
- forefront: s.boolean.optional.default(false),
+ forefront: s.boolean().optional().default(false),
})
.parse(options);
@@ -498,7 +501,7 @@ export class RequestQueueClient extends BaseClient implements storage.RequestQue
}
async getRequest(id: string): Promise {
- s.string.parse(id);
+ s.string().parse(id);
const queue = await this.getQueue();
const json = (await queue.requests.get(id)?.get())?.json;
return this._jsonToRequest(json);
diff --git a/packages/memory-storage/src/utils.ts b/packages/memory-storage/src/utils.ts
index b423bfb48aa7..04683d0dd088 100644
--- a/packages/memory-storage/src/utils.ts
+++ b/packages/memory-storage/src/utils.ts
@@ -5,7 +5,7 @@ import { s } from '@sapphire/shapeshift';
import defaultLog from '@apify/log';
-import { REQUEST_ID_LENGTH } from './consts';
+import { REQUEST_ID_LENGTH } from './consts.js';
/**
* Removes all properties with a null value
@@ -35,7 +35,7 @@ export function uniqueKeyToRequestId(uniqueKey: string): string {
export function isBuffer(value: unknown): boolean {
try {
- s.union(s.instance(Buffer), s.instance(ArrayBuffer), s.typedArray()).parse(value);
+ s.union([s.instance(Buffer), s.instance(ArrayBuffer), s.typedArray()]).parse(value);
return true;
} catch {
diff --git a/packages/memory-storage/test/fs-fallback.test.ts b/packages/memory-storage/test/fs-fallback.test.ts
index 1f014d936bc1..50edb321edeb 100644
--- a/packages/memory-storage/test/fs-fallback.test.ts
+++ b/packages/memory-storage/test/fs-fallback.test.ts
@@ -4,10 +4,10 @@ import { resolve } from 'node:path';
import { MemoryStorage } from '@crawlee/memory-storage';
import type { KeyValueStoreRecord } from '@crawlee/types';
-import { ensureDir } from 'fs-extra';
+import { ensureDir } from 'fs-extra/esm';
describe('fallback to fs for reading', () => {
- const tmpLocation = resolve(__dirname, './tmp/fs-fallback');
+ const tmpLocation = resolve(import.meta.dirname, './tmp/fs-fallback');
const storage = new MemoryStorage({
localDataDirectory: tmpLocation,
});
diff --git a/packages/memory-storage/test/key-value-store/with-extension.test.ts b/packages/memory-storage/test/key-value-store/with-extension.test.ts
index 58bceb191237..ed29d2ce946e 100644
--- a/packages/memory-storage/test/key-value-store/with-extension.test.ts
+++ b/packages/memory-storage/test/key-value-store/with-extension.test.ts
@@ -1,7 +1,9 @@
+import { existsSync } from 'node:fs';
import { resolve } from 'node:path';
-import { emptyDirSync, existsSync } from 'fs-extra';
-import { createKeyValueStorageImplementation } from 'packages/memory-storage/src/fs/key-value-store';
+import { emptyDirSync } from 'fs-extra/esm';
+
+import { createKeyValueStorageImplementation } from '../../src/fs/key-value-store/index.js';
describe('KeyValueStore should append extension only when needed', () => {
const mockImageBuffer = Buffer.from('This is a test image', 'utf8');
diff --git a/packages/memory-storage/test/no-crash-on-big-buffers.test.ts b/packages/memory-storage/test/no-crash-on-big-buffers.test.ts
index 67ae80fc2676..5677d20ac0f2 100644
--- a/packages/memory-storage/test/no-crash-on-big-buffers.test.ts
+++ b/packages/memory-storage/test/no-crash-on-big-buffers.test.ts
@@ -8,7 +8,7 @@ import { MemoryStorage } from '@crawlee/memory-storage';
import type { KeyValueStoreClient, KeyValueStoreInfo } from '@crawlee/types';
describe('MemoryStorage should not crash when saving a big buffer', () => {
- const tmpLocation = resolve(__dirname, './tmp/no-buffer-crash');
+ const tmpLocation = resolve(import.meta.dirname, './tmp/no-buffer-crash');
const storage = new MemoryStorage({
localDataDirectory: tmpLocation,
persistStorage: false,
diff --git a/packages/memory-storage/test/no-writing-to-disk.test.ts b/packages/memory-storage/test/no-writing-to-disk.test.ts
index e39fb7c9c46a..871bd689dc44 100644
--- a/packages/memory-storage/test/no-writing-to-disk.test.ts
+++ b/packages/memory-storage/test/no-writing-to-disk.test.ts
@@ -3,10 +3,10 @@ import { resolve } from 'node:path';
import { MemoryStorage } from '@crawlee/memory-storage';
-import { waitTillWrittenToDisk } from './__shared__';
+import { waitTillWrittenToDisk } from './__shared__.js';
describe('persistStorage option', () => {
- const tmpLocation = resolve(__dirname, './tmp/no-writing-to-disk');
+ const tmpLocation = resolve(import.meta.dirname, './tmp/no-writing-to-disk');
afterAll(async () => {
await rm(tmpLocation, { force: true, recursive: true });
diff --git a/packages/memory-storage/test/request-queue/ignore-non-json-files.test.ts b/packages/memory-storage/test/request-queue/ignore-non-json-files.test.ts
index a6ed41736da2..ee8543ee47c3 100644
--- a/packages/memory-storage/test/request-queue/ignore-non-json-files.test.ts
+++ b/packages/memory-storage/test/request-queue/ignore-non-json-files.test.ts
@@ -5,10 +5,10 @@ import { resolve } from 'node:path';
import { MemoryStorage } from '@crawlee/memory-storage';
import type { InternalRequest } from '@crawlee/memory-storage/src/resource-clients/request-queue';
import type { RequestSchema } from '@crawlee/types';
-import { ensureDir } from 'fs-extra';
+import { ensureDir } from 'fs-extra/esm';
describe('when falling back to fs, Request queue should ignore non-JSON files', () => {
- const tmpLocation = resolve(__dirname, './tmp/req-queue-ignore-non-json');
+ const tmpLocation = resolve(import.meta.dirname, './tmp/req-queue-ignore-non-json');
const storage = new MemoryStorage({
localDataDirectory: tmpLocation,
});
diff --git a/packages/memory-storage/test/reverse-datataset-list.test.ts b/packages/memory-storage/test/reverse-datataset-list.test.ts
index 4dee00ce8f8e..07cd85e9c011 100644
--- a/packages/memory-storage/test/reverse-datataset-list.test.ts
+++ b/packages/memory-storage/test/reverse-datataset-list.test.ts
@@ -7,7 +7,7 @@ import type { DatasetClient } from '@crawlee/types';
const elements = Array.from({ length: 10 }, (_, i) => ({ number: i }));
describe('Dataset#listItems respects the desc option', () => {
- const localDataDirectory = resolve(__dirname, './tmp/desc');
+ const localDataDirectory = resolve(import.meta.dirname, './tmp/desc');
const storage = new MemoryStorage({
localDataDirectory,
persistStorage: false,
diff --git a/packages/memory-storage/test/write-metadata.test.ts b/packages/memory-storage/test/write-metadata.test.ts
index eb36325950e9..f74203dc2346 100644
--- a/packages/memory-storage/test/write-metadata.test.ts
+++ b/packages/memory-storage/test/write-metadata.test.ts
@@ -3,10 +3,10 @@ import { resolve } from 'node:path';
import { MemoryStorage } from '@crawlee/memory-storage';
-import { waitTillWrittenToDisk } from './__shared__';
+import { waitTillWrittenToDisk } from './__shared__.js';
describe('writeMetadata option', () => {
- const tmpLocation = resolve(__dirname, './tmp/write-metadata-tests');
+ const tmpLocation = resolve(import.meta.dirname, './tmp/write-metadata-tests');
afterAll(async () => {
await rm(tmpLocation, { force: true, recursive: true });
diff --git a/packages/playwright-crawler/package.json b/packages/playwright-crawler/package.json
index ef72a09a94b1..114f464bdd90 100644
--- a/packages/playwright-crawler/package.json
+++ b/packages/playwright-crawler/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,30 +40,29 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/datastructures": "^2.0.0",
- "@apify/log": "^2.4.0",
- "@apify/timeout": "^0.3.1",
+ "@apify/datastructures": "^2.0.3",
+ "@apify/log": "^2.5.18",
+ "@apify/timeout": "^0.3.2",
"@crawlee/browser": "3.13.3",
"@crawlee/browser-pool": "3.13.3",
"@crawlee/core": "3.13.3",
"@crawlee/types": "3.13.3",
"@crawlee/utils": "3.13.3",
- "cheerio": "1.0.0-rc.12",
- "idcac-playwright": "^0.1.2",
- "jquery": "^3.6.0",
- "lodash.isequal": "^4.5.0",
+ "cheerio": "^1.0.0",
+ "idcac-playwright": "^0.1.3",
+ "jquery": "^3.7.1",
"ml-logistic-regression": "^2.0.0",
- "ml-matrix": "^6.11.0",
- "ow": "^0.28.1",
+ "ml-matrix": "^6.12.1",
+ "ow": "^2.0.0",
"string-comparison": "^1.3.0",
- "tslib": "^2.4.0"
+ "tslib": "^2.8.1"
},
"peerDependencies": {
"playwright": "*"
diff --git a/packages/playwright-crawler/src/index.ts b/packages/playwright-crawler/src/index.ts
index 06c0490346ad..e745ea76b185 100644
--- a/packages/playwright-crawler/src/index.ts
+++ b/packages/playwright-crawler/src/index.ts
@@ -1,10 +1,10 @@
export * from '@crawlee/browser';
-export * from './internals/playwright-crawler';
-export * from './internals/playwright-launcher';
-export * from './internals/adaptive-playwright-crawler';
-export { RenderingTypePredictor } from './internals/utils/rendering-type-prediction';
+export * from './internals/playwright-crawler.js';
+export * from './internals/playwright-launcher.js';
+export * from './internals/adaptive-playwright-crawler.js';
+export { RenderingTypePredictor } from './internals/utils/rendering-type-prediction.js';
-export * as playwrightUtils from './internals/utils/playwright-utils';
-export * as playwrightClickElements from './internals/enqueue-links/click-elements';
-export type { DirectNavigationOptions as PlaywrightDirectNavigationOptions } from './internals/utils/playwright-utils';
-export type { RenderingType } from './internals/utils/rendering-type-prediction';
+export * as playwrightUtils from './internals/utils/playwright-utils.js';
+export * as playwrightClickElements from './internals/enqueue-links/click-elements.js';
+export type { DirectNavigationOptions as PlaywrightDirectNavigationOptions } from './internals/utils/playwright-utils.js';
+export type { RenderingType } from './internals/utils/rendering-type-prediction.js';
diff --git a/packages/playwright-crawler/src/internals/adaptive-playwright-crawler.ts b/packages/playwright-crawler/src/internals/adaptive-playwright-crawler.ts
index d37ae2916896..d67e4fb3219a 100644
--- a/packages/playwright-crawler/src/internals/adaptive-playwright-crawler.ts
+++ b/packages/playwright-crawler/src/internals/adaptive-playwright-crawler.ts
@@ -1,3 +1,5 @@
+import { isDeepStrictEqual } from 'node:util';
+
import type { BrowserHook, LoadedContext, LoadedRequest, Request, RouterHandler } from '@crawlee/browser';
import { extractUrlsFromPage } from '@crawlee/browser';
import type {
@@ -12,16 +14,19 @@ import type {
import { Configuration, RequestHandlerResult, Router, Statistics, withCheckedStorageAccess } from '@crawlee/core';
import type { Awaitable, Dictionary } from '@crawlee/types';
import { type CheerioRoot, extractUrlsFromCheerio } from '@crawlee/utils';
-import { type Cheerio, type Element, load } from 'cheerio';
-import isEqual from 'lodash.isequal';
+import { type Cheerio, load } from 'cheerio';
import type { Page } from 'playwright';
import type { Log } from '@apify/log';
import { addTimeoutToPromise } from '@apify/timeout';
-import type { PlaywrightCrawlerOptions, PlaywrightCrawlingContext, PlaywrightGotoOptions } from './playwright-crawler';
-import { PlaywrightCrawler } from './playwright-crawler';
-import { type RenderingType, RenderingTypePredictor } from './utils/rendering-type-prediction';
+import type {
+ PlaywrightCrawlerOptions,
+ PlaywrightCrawlingContext,
+ PlaywrightGotoOptions,
+} from './playwright-crawler.js';
+import { PlaywrightCrawler } from './playwright-crawler.js';
+import { type RenderingType, RenderingTypePredictor } from './utils/rendering-type-prediction.js';
type Result =
| { result: TResult; ok: true; logs?: LogProxyCall[] }
@@ -101,7 +106,7 @@ export interface AdaptivePlaywrightCrawlerContext>;
+ querySelector(selector: string, timeoutMs?: number): Promise>;
/**
* Wait for an element matching the selector to appear.
@@ -140,10 +145,7 @@ interface AdaptiveHook
> {}
export interface AdaptivePlaywrightCrawlerOptions
- extends Omit<
- PlaywrightCrawlerOptions,
- 'requestHandler' | 'handlePageFunction' | 'preNavigationHooks' | 'postNavigationHooks'
- > {
+ extends Omit {
/**
* Function that is called to process each request.
*
@@ -293,7 +295,7 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
resultA.datasetItems.length === resultB.datasetItems.length &&
resultA.datasetItems.every((itemA, i) => {
const itemB = resultB.datasetItems[i];
- return isEqual(itemA, itemB);
+ return isDeepStrictEqual(itemA, itemB);
})
);
};
@@ -449,7 +451,7 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
const $ = await playwrightContext.parseWithCheerio();
- return $(selector) as Cheerio;
+ return $(selector) as Cheerio;
},
async waitForSelector(selector, timeoutMs = 5_000) {
const locator = playwrightContext.page.locator(selector).first();
@@ -557,7 +559,7 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
throw new Error('Page object was used in HTTP-only request handler');
},
async querySelector(selector, _timeoutMs?: number) {
- return $(selector) as Cheerio;
+ return $(selector) as Cheerio;
},
async waitForSelector(selector, _timeoutMs?: number) {
if ($(selector).get().length === 0) {
diff --git a/packages/playwright-crawler/src/internals/playwright-crawler.ts b/packages/playwright-crawler/src/internals/playwright-crawler.ts
index d18668ade76a..42dc07be9b6e 100644
--- a/packages/playwright-crawler/src/internals/playwright-crawler.ts
+++ b/packages/playwright-crawler/src/internals/playwright-crawler.ts
@@ -4,7 +4,6 @@ import type {
BrowserHook,
BrowserRequestHandler,
GetUserDataFromRequest,
- LoadedContext,
RouterRoutes,
} from '@crawlee/browser';
import { BrowserCrawler, Configuration, Router } from '@crawlee/browser';
@@ -13,16 +12,16 @@ import type { Dictionary } from '@crawlee/types';
import ow from 'ow';
import type { LaunchOptions, Page, Response } from 'playwright';
-import type { PlaywrightLaunchContext } from './playwright-launcher';
-import { PlaywrightLauncher } from './playwright-launcher';
-import type { DirectNavigationOptions, PlaywrightContextUtils } from './utils/playwright-utils';
-import { gotoExtended, registerUtilsToContext } from './utils/playwright-utils';
+import type { PlaywrightLaunchContext } from './playwright-launcher.js';
+import { PlaywrightLauncher } from './playwright-launcher.js';
+import type { DirectNavigationOptions, PlaywrightContextUtils } from './utils/playwright-utils.js';
+import { gotoExtended, registerUtilsToContext } from './utils/playwright-utils.js';
export interface PlaywrightCrawlingContext
extends BrowserCrawlingContext,
PlaywrightContextUtils {}
export interface PlaywrightHook extends BrowserHook {}
-export interface PlaywrightRequestHandler extends BrowserRequestHandler> {}
+export interface PlaywrightRequestHandler extends BrowserRequestHandler {}
export type PlaywrightGotoOptions = Parameters[1];
export interface PlaywrightCrawlerOptions
diff --git a/packages/playwright-crawler/src/internals/playwright-launcher.ts b/packages/playwright-crawler/src/internals/playwright-launcher.ts
index e9920a76a20d..a8bf13c86c50 100644
--- a/packages/playwright-crawler/src/internals/playwright-launcher.ts
+++ b/packages/playwright-crawler/src/internals/playwright-launcher.ts
@@ -58,13 +58,6 @@ export interface PlaywrightLaunchContext extends BrowserLaunchContext new Promise((r) => setTimeout(r, ms));
+
+function getStats(crawler: PlaywrightCrawler) {
+ const anyStats = crawler.stats as any;
+ if (typeof anyStats.toJSON === 'function') return anyStats.toJSON();
+ if (typeof anyStats.getState === 'function') return anyStats.getState();
+ return {};
+}
+
+test('Navigation timeout triggers TimeoutError (preNavigationHooks delay)', async () => {
+ let handlerCalled = false;
+ let failedError: Error | undefined;
+
+ const crawler = new PlaywrightCrawler({
+ maxRequestRetries: 0,
+ navigationTimeoutSecs: 1,
+ preNavigationHooks: [
+ async () => {
+ await sleep(1_500);
+ },
+ ],
+ requestHandler: async () => {
+ handlerCalled = true;
+ },
+ failedRequestHandler: async (_ctx, error) => {
+ failedError = error as Error;
+ },
+ });
+
+ await crawler.run([`https://example.com/?nav=${Date.now()}`]);
+
+ const stats = getStats(crawler);
+ expect(handlerCalled).toBe(false);
+ expect(stats.requestsFailed).toBe(1);
+ expect(failedError).toBeInstanceOf(TimeoutError);
+ expect(failedError!.message).toMatch(/Navigation timed out/i);
+});
+
+test('Navigation timeout via postNavigationHooks delay', async () => {
+ let failedError: Error | undefined;
+ const crawler = new PlaywrightCrawler({
+ maxRequestRetries: 0,
+ navigationTimeoutSecs: 1,
+ postNavigationHooks: [
+ async () => {
+ await sleep(1500);
+ },
+ ],
+ requestHandler: async () => {},
+ failedRequestHandler: async (_c, e) => {
+ failedError = e as Error;
+ },
+ });
+ await crawler.run([`https://example.com/?post=${Date.now()}`]);
+ expect(failedError).toBeInstanceOf(TimeoutError);
+ expect((failedError as Error).message).toMatch(/Navigation timed out/);
+});
+
+test('Request handler timeout triggers TimeoutError (post-navigation)', async () => {
+ let failedError: Error | undefined;
+ let reachedHandler = false;
+ let reachedNavigation = false;
+
+ const crawler = new PlaywrightCrawler({
+ maxRequestRetries: 0,
+ navigationTimeoutSecs: 30,
+ requestHandlerTimeoutSecs: 2,
+ preNavigationHooks: [
+ async () => {
+ reachedNavigation = true;
+ },
+ ],
+ requestHandler: async () => {
+ reachedHandler = true;
+ await sleep(12_000);
+ },
+ failedRequestHandler: async (_ctx, error) => {
+ failedError = error as Error;
+ },
+ });
+
+ await crawler.run([`https://example.com/?handler=${Date.now()}`]);
+
+ const stats = getStats(crawler);
+ expect(reachedNavigation).toBe(true);
+ expect(reachedHandler).toBe(true);
+ expect(stats.requestsFailed).toBe(1);
+ expect(failedError).toBeInstanceOf(TimeoutError);
+ expect(failedError!.message).not.toMatch(/Navigation timed out/i);
+ expect(failedError!.message.toLowerCase()).toMatch(/requesthandler timed out|timed out/);
+});
+
+test('Request handler and navigation succeed under timeouts', async () => {
+ let handlerRan = false;
+ let failedError: Error | undefined;
+
+ const crawler = new PlaywrightCrawler({
+ maxRequestRetries: 0,
+ navigationTimeoutSecs: 3,
+ requestHandlerTimeoutSecs: 3,
+ preNavigationHooks: [
+ async () => {
+ // below navigation timeout
+ await sleep(500);
+ },
+ ],
+ requestHandler: async () => {
+ handlerRan = true;
+ // below handler timeout
+ await sleep(600);
+ },
+ failedRequestHandler: async (_ctx, error) => {
+ failedError = error as Error;
+ },
+ });
+
+ await crawler.run([`https://example.com/?ok=${Date.now()}`]);
+
+ const stats = getStats(crawler);
+ expect(handlerRan).toBe(true);
+ expect(stats.requestsFinished).toBe(1);
+ expect(stats.requestsFailed || 0).toBe(0);
+ expect(failedError).toBeUndefined();
+});
diff --git a/packages/puppeteer-crawler/package.json b/packages/puppeteer-crawler/package.json
index 1aae198dcdc1..6be756120cc7 100644
--- a/packages/puppeteer-crawler/package.json
+++ b/packages/puppeteer-crawler/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -46,25 +40,25 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "@apify/datastructures": "^2.0.0",
- "@apify/log": "^2.4.0",
+ "@apify/datastructures": "^2.0.3",
+ "@apify/log": "^2.5.18",
"@crawlee/browser": "3.13.3",
"@crawlee/browser-pool": "3.13.3",
"@crawlee/types": "3.13.3",
"@crawlee/utils": "3.13.3",
- "cheerio": "1.0.0-rc.12",
+ "cheerio": "^1.0.0",
"devtools-protocol": "*",
- "idcac-playwright": "^0.1.2",
- "jquery": "^3.6.0",
- "ow": "^0.28.1",
- "tslib": "^2.4.0"
+ "idcac-playwright": "^0.1.3",
+ "jquery": "^3.7.1",
+ "ow": "^2.0.0",
+ "tslib": "^2.8.1"
},
"peerDependencies": {
"puppeteer": "*"
diff --git a/packages/puppeteer-crawler/src/index.ts b/packages/puppeteer-crawler/src/index.ts
index ad44e8c8a00d..4d84972ba0e6 100644
--- a/packages/puppeteer-crawler/src/index.ts
+++ b/packages/puppeteer-crawler/src/index.ts
@@ -1,11 +1,11 @@
export * from '@crawlee/browser';
-export * from './internals/puppeteer-crawler';
-export * from './internals/puppeteer-launcher';
+export * from './internals/puppeteer-crawler.js';
+export * from './internals/puppeteer-launcher.js';
-export * as puppeteerRequestInterception from './internals/utils/puppeteer_request_interception';
-export type { InterceptHandler } from './internals/utils/puppeteer_request_interception';
+export * as puppeteerRequestInterception from './internals/utils/puppeteer_request_interception.js';
+export type { InterceptHandler } from './internals/utils/puppeteer_request_interception.js';
-export * as puppeteerUtils from './internals/utils/puppeteer_utils';
+export * as puppeteerUtils from './internals/utils/puppeteer_utils.js';
export type {
BlockRequestsOptions,
CompiledScriptFunction,
@@ -14,7 +14,7 @@ export type {
InfiniteScrollOptions,
InjectFileOptions,
SaveSnapshotOptions,
-} from './internals/utils/puppeteer_utils';
+} from './internals/utils/puppeteer_utils.js';
-export * as puppeteerClickElements from './internals/enqueue-links/click-elements';
-export type { EnqueueLinksByClickingElementsOptions } from './internals/enqueue-links/click-elements';
+export * as puppeteerClickElements from './internals/enqueue-links/click-elements.js';
+export type { EnqueueLinksByClickingElementsOptions } from './internals/enqueue-links/click-elements.js';
diff --git a/packages/puppeteer-crawler/src/internals/enqueue-links/click-elements.ts b/packages/puppeteer-crawler/src/internals/enqueue-links/click-elements.ts
index 73347ae90fda..e55faa1386db 100644
--- a/packages/puppeteer-crawler/src/internals/enqueue-links/click-elements.ts
+++ b/packages/puppeteer-crawler/src/internals/enqueue-links/click-elements.ts
@@ -22,7 +22,7 @@ import type { ClickOptions, Frame, HTTPRequest as PuppeteerRequest, Page, Target
import log_ from '@apify/log';
-import { addInterceptRequestHandler, removeInterceptRequestHandler } from '../utils/puppeteer_request_interception';
+import { addInterceptRequestHandler, removeInterceptRequestHandler } from '../utils/puppeteer_request_interception.js';
const STARTING_Z_INDEX = 2147400000;
const log = log_.child({ prefix: 'Puppeteer Click Elements' });
diff --git a/packages/puppeteer-crawler/src/internals/puppeteer-crawler.ts b/packages/puppeteer-crawler/src/internals/puppeteer-crawler.ts
index 7580f2d51a7f..58efbb5471cb 100644
--- a/packages/puppeteer-crawler/src/internals/puppeteer-crawler.ts
+++ b/packages/puppeteer-crawler/src/internals/puppeteer-crawler.ts
@@ -4,7 +4,6 @@ import type {
BrowserHook,
BrowserRequestHandler,
GetUserDataFromRequest,
- LoadedContext,
RouterRoutes,
} from '@crawlee/browser';
import { BrowserCrawler, Configuration, Router } from '@crawlee/browser';
@@ -13,16 +12,16 @@ import type { Dictionary } from '@crawlee/types';
import ow from 'ow';
import type { HTTPResponse, LaunchOptions, Page } from 'puppeteer';
-import type { PuppeteerLaunchContext } from './puppeteer-launcher';
-import { PuppeteerLauncher } from './puppeteer-launcher';
-import type { DirectNavigationOptions, PuppeteerContextUtils } from './utils/puppeteer_utils';
-import { gotoExtended, registerUtilsToContext } from './utils/puppeteer_utils';
+import type { PuppeteerLaunchContext } from './puppeteer-launcher.js';
+import { PuppeteerLauncher } from './puppeteer-launcher.js';
+import type { DirectNavigationOptions, PuppeteerContextUtils } from './utils/puppeteer_utils.js';
+import { gotoExtended, registerUtilsToContext } from './utils/puppeteer_utils.js';
export interface PuppeteerCrawlingContext
extends BrowserCrawlingContext,
PuppeteerContextUtils {}
export interface PuppeteerHook extends BrowserHook {}
-export interface PuppeteerRequestHandler extends BrowserRequestHandler> {}
+export interface PuppeteerRequestHandler extends BrowserRequestHandler {}
export type PuppeteerGoToOptions = Parameters[1];
export interface PuppeteerCrawlerOptions
diff --git a/packages/puppeteer-crawler/src/internals/utils/puppeteer_utils.ts b/packages/puppeteer-crawler/src/internals/utils/puppeteer_utils.ts
index 425415ce329e..4120ec36dbc3 100644
--- a/packages/puppeteer-crawler/src/internals/utils/puppeteer_utils.ts
+++ b/packages/puppeteer-crawler/src/internals/utils/puppeteer_utils.ts
@@ -19,6 +19,7 @@
*/
import { readFile } from 'node:fs/promises';
+import { createRequire } from 'node:module';
import vm from 'node:vm';
import type { Request } from '@crawlee/browser';
@@ -34,12 +35,13 @@ import type { HTTPRequest as PuppeteerRequest, HTTPResponse, Page, ResponseForRe
import { LruCache } from '@apify/datastructures';
import log_ from '@apify/log';
-import type { EnqueueLinksByClickingElementsOptions } from '../enqueue-links/click-elements';
-import { enqueueLinksByClickingElements } from '../enqueue-links/click-elements';
-import type { PuppeteerCrawlerOptions, PuppeteerCrawlingContext } from '../puppeteer-crawler';
-import type { InterceptHandler } from './puppeteer_request_interception';
-import { addInterceptRequestHandler, removeInterceptRequestHandler } from './puppeteer_request_interception';
+import type { EnqueueLinksByClickingElementsOptions } from '../enqueue-links/click-elements.js';
+import { enqueueLinksByClickingElements } from '../enqueue-links/click-elements.js';
+import type { PuppeteerCrawlerOptions, PuppeteerCrawlingContext } from '../puppeteer-crawler.js';
+import type { InterceptHandler } from './puppeteer_request_interception.js';
+import { addInterceptRequestHandler, removeInterceptRequestHandler } from './puppeteer_request_interception.js';
+const require = createRequire(import.meta.url);
const jqueryPath = require.resolve('jquery');
const MAX_INJECT_FILE_CACHE_SIZE = 10;
@@ -203,6 +205,7 @@ export async function parseWithCheerio(
frames.map(async (frame) => {
try {
const iframe = await frame.contentFrame();
+
if (iframe) {
const contents = await iframe.content();
diff --git a/packages/templates/package.json b/packages/templates/package.json
index f60040d40b35..ba25a5e61783 100644
--- a/packages/templates/package.json
+++ b/packages/templates/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "Templates for the crawlee projects",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -41,7 +35,7 @@
"scripts": {
"build": "yarn clean && yarn validate && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts",
"validate": "node ./scripts/validate-manifest.mjs"
},
@@ -49,10 +43,6 @@
"access": "public"
},
"dependencies": {
- "ansi-colors": "^4.1.3",
- "inquirer": "^9.0.0",
- "tslib": "^2.4.0",
- "yargonaut": "^1.1.4",
- "yargs": "^17.5.1"
+ "tslib": "^2.8.1"
}
}
diff --git a/packages/templates/templates/camoufox-ts/Dockerfile b/packages/templates/templates/camoufox-ts/Dockerfile
index b86983f92d61..7b88dc88bedf 100644
--- a/packages/templates/templates/camoufox-ts/Dockerfile
+++ b/packages/templates/templates/camoufox-ts/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node-playwright-chrome:20-1.50.1 AS builder
+FROM apify/actor-node-playwright-chrome:22-1.50.1 AS builder
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
@@ -19,7 +19,7 @@ COPY --chown=myuser . ./
RUN npm run build
# Create final image
-FROM apify/actor-node-playwright-chrome:20-1.50.1
+FROM apify/actor-node-playwright-chrome:22-1.50.1
# Copy only built JS files from builder image
COPY --from=builder --chown=myuser /home/myuser/dist ./dist
diff --git a/packages/templates/templates/cheerio-js/Dockerfile b/packages/templates/templates/cheerio-js/Dockerfile
index 4c8d11fc3f74..21f5db914654 100644
--- a/packages/templates/templates/cheerio-js/Dockerfile
+++ b/packages/templates/templates/cheerio-js/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node:20
+FROM apify/actor-node:22
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
diff --git a/packages/templates/templates/cheerio-ts/Dockerfile b/packages/templates/templates/cheerio-ts/Dockerfile
index 995a3d8155c6..e15f10b68c15 100644
--- a/packages/templates/templates/cheerio-ts/Dockerfile
+++ b/packages/templates/templates/cheerio-ts/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node:20 AS builder
+FROM apify/actor-node:22 AS builder
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
@@ -19,7 +19,7 @@ COPY . ./
RUN npm run build
# Create final image
-FROM apify/actor-node:20
+FROM apify/actor-node:22
# Copy only built JS files from builder image
COPY --from=builder /usr/src/app/dist ./dist
diff --git a/packages/templates/templates/empty-js/Dockerfile b/packages/templates/templates/empty-js/Dockerfile
index 4c8d11fc3f74..21f5db914654 100644
--- a/packages/templates/templates/empty-js/Dockerfile
+++ b/packages/templates/templates/empty-js/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node:20
+FROM apify/actor-node:22
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
diff --git a/packages/templates/templates/empty-ts/Dockerfile b/packages/templates/templates/empty-ts/Dockerfile
index 995a3d8155c6..e15f10b68c15 100644
--- a/packages/templates/templates/empty-ts/Dockerfile
+++ b/packages/templates/templates/empty-ts/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node:20 AS builder
+FROM apify/actor-node:22 AS builder
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
@@ -19,7 +19,7 @@ COPY . ./
RUN npm run build
# Create final image
-FROM apify/actor-node:20
+FROM apify/actor-node:22
# Copy only built JS files from builder image
COPY --from=builder /usr/src/app/dist ./dist
diff --git a/packages/templates/templates/getting-started-js/Dockerfile b/packages/templates/templates/getting-started-js/Dockerfile
index 6e804b93aadc..5ff3cde1663b 100644
--- a/packages/templates/templates/getting-started-js/Dockerfile
+++ b/packages/templates/templates/getting-started-js/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node-playwright-chrome:20
+FROM apify/actor-node-playwright-chrome:22
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
diff --git a/packages/templates/templates/getting-started-ts/Dockerfile b/packages/templates/templates/getting-started-ts/Dockerfile
index 1fe6784a46fc..7a033731b090 100644
--- a/packages/templates/templates/getting-started-ts/Dockerfile
+++ b/packages/templates/templates/getting-started-ts/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node-playwright-chrome:20 AS builder
+FROM apify/actor-node-playwright-chrome:22 AS builder
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
@@ -19,7 +19,7 @@ COPY --chown=myuser . ./
RUN npm run build
# Create final image
-FROM apify/actor-node-playwright-chrome:20
+FROM apify/actor-node-playwright-chrome:22
# Copy only built JS files from builder image
COPY --from=builder --chown=myuser /home/myuser/dist ./dist
diff --git a/packages/templates/templates/playwright-js/Dockerfile b/packages/templates/templates/playwright-js/Dockerfile
index edf60c820dd0..5e6983829f86 100644
--- a/packages/templates/templates/playwright-js/Dockerfile
+++ b/packages/templates/templates/playwright-js/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node-playwright-chrome:20
+FROM apify/actor-node-playwright-chrome:22
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
diff --git a/packages/templates/templates/playwright-ts/Dockerfile b/packages/templates/templates/playwright-ts/Dockerfile
index 1fe6784a46fc..7a033731b090 100644
--- a/packages/templates/templates/playwright-ts/Dockerfile
+++ b/packages/templates/templates/playwright-ts/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node-playwright-chrome:20 AS builder
+FROM apify/actor-node-playwright-chrome:22 AS builder
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
@@ -19,7 +19,7 @@ COPY --chown=myuser . ./
RUN npm run build
# Create final image
-FROM apify/actor-node-playwright-chrome:20
+FROM apify/actor-node-playwright-chrome:22
# Copy only built JS files from builder image
COPY --from=builder --chown=myuser /home/myuser/dist ./dist
diff --git a/packages/templates/templates/puppeteer-js/Dockerfile b/packages/templates/templates/puppeteer-js/Dockerfile
index fa86c423fa9c..efbbc12427e0 100644
--- a/packages/templates/templates/puppeteer-js/Dockerfile
+++ b/packages/templates/templates/puppeteer-js/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node-puppeteer-chrome:20
+FROM apify/actor-node-puppeteer-chrome:22
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
diff --git a/packages/templates/templates/puppeteer-ts/Dockerfile b/packages/templates/templates/puppeteer-ts/Dockerfile
index 292b6f4a156f..93d40a81b2e2 100644
--- a/packages/templates/templates/puppeteer-ts/Dockerfile
+++ b/packages/templates/templates/puppeteer-ts/Dockerfile
@@ -1,7 +1,7 @@
# Specify the base Docker image. You can read more about
# the available images at https://crawlee.dev/docs/guides/docker-images
# You can also use any other image from Docker Hub.
-FROM apify/actor-node-puppeteer-chrome:20 AS builder
+FROM apify/actor-node-puppeteer-chrome:22 AS builder
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
@@ -19,7 +19,7 @@ COPY --chown=myuser . ./
RUN npm run build
# Create final image
-FROM apify/actor-node-puppeteer-chrome:20
+FROM apify/actor-node-puppeteer-chrome:22
# Copy only built JS files from builder image
COPY --from=builder --chown=myuser /home/myuser/dist ./dist
diff --git a/packages/types/package.json b/packages/types/package.json
index 75e9d87332ac..c97c0087a759 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "Shared types for the crawlee projects",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -42,13 +36,13 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"publishConfig": {
"access": "public"
},
"dependencies": {
- "tslib": "^2.4.0"
+ "tslib": "^2.8.1"
}
}
diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts
index 82f85bbc15c7..b0227df86bd9 100644
--- a/packages/types/src/browser.ts
+++ b/packages/types/src/browser.ts
@@ -1,4 +1,4 @@
-import type { Dictionary } from './utility-types';
+import type { Dictionary } from './utility-types.js';
export interface Cookie {
/**
diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts
index 1130b23cb803..218ef70f0471 100644
--- a/packages/types/src/index.ts
+++ b/packages/types/src/index.ts
@@ -1,3 +1,3 @@
-export * from './storages';
-export * from './utility-types';
-export * from './browser';
+export * from './storages.js';
+export * from './utility-types.js';
+export * from './browser.js';
diff --git a/packages/types/src/storages.ts b/packages/types/src/storages.ts
index 425d55ac3e47..cb919da99734 100644
--- a/packages/types/src/storages.ts
+++ b/packages/types/src/storages.ts
@@ -1,4 +1,4 @@
-import type { AllowedHttpMethods, Dictionary } from './utility-types';
+import type { AllowedHttpMethods, Dictionary } from './utility-types.js';
/**
* A helper class that is used to report results from various
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 8a579878956c..4e5bb0ce841f 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -3,17 +3,11 @@
"version": "3.13.3",
"description": "A set of shared utilities that can be used by crawlers",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=22.0.0"
},
- "main": "./dist/index.js",
- "module": "./dist/index.mjs",
- "types": "./dist/index.d.ts",
+ "type": "module",
"exports": {
- ".": {
- "import": "./dist/index.mjs",
- "require": "./dist/index.js",
- "types": "./dist/index.d.ts"
- },
+ ".": "./dist/index.js",
"./package.json": "./package.json"
},
"keywords": [
@@ -43,24 +37,21 @@
"scripts": {
"build": "yarn clean && yarn compile && yarn copy",
"clean": "rimraf ./dist",
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
+ "compile": "tsc -p tsconfig.build.json",
"copy": "tsx ../../scripts/copy.ts"
},
"dependencies": {
- "@apify/log": "^2.4.0",
+ "@apify/log": "^2.5.18",
"@apify/ps-tree": "^1.2.0",
"@crawlee/types": "3.13.3",
"@types/sax": "^1.2.7",
- "cheerio": "1.0.0-rc.12",
- "file-type": "^20.0.0",
- "got-scraping": "^4.0.3",
- "ow": "^0.28.1",
+ "cheerio": "^1.0.0",
+ "file-type": "^21.0.0",
+ "got-scraping": "^4.1.1",
+ "ow": "^2.0.0",
"robots-parser": "^3.0.1",
"sax": "^1.4.1",
- "tslib": "^2.4.0",
+ "tslib": "^2.8.1",
"whatwg-mimetype": "^4.0.0"
- },
- "devDependencies": {
- "@types/whatwg-mimetype": "^3.0.2"
}
}
diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts
index 29d9c91bcf26..a654bb55edbf 100644
--- a/packages/utils/src/index.ts
+++ b/packages/utils/src/index.ts
@@ -1,19 +1,17 @@
-export * from './internals/blocked';
-export * from './internals/cheerio';
-export * from './internals/chunk';
-export * from './internals/extract-urls';
-export * from './internals/general';
-export * from './internals/memory-info';
-export * from './internals/debug';
-export * as social from './internals/social';
-export * from './internals/typedefs';
-export * from './internals/open_graph_parser';
-export * from './internals/gotScraping';
-export * from './internals/robots';
-export * from './internals/sitemap';
-export * from './internals/url';
+export * from './internals/blocked.js';
+export * from './internals/cheerio.js';
+export * from './internals/chunk.js';
+export * from './internals/extract-urls.js';
+export * from './internals/general.js';
+export * from './internals/debug.js';
+export * as social from './internals/social.js';
+export * from './internals/typedefs.js';
+export * from './internals/open_graph_parser.js';
+export * from './internals/robots.js';
+export * from './internals/sitemap.js';
+export * from './internals/url.js';
-export { getCurrentCpuTicksV2 } from './internals/systemInfoV2/cpu-info';
-export { getMemoryInfoV2 } from './internals/systemInfoV2/memory-info';
+export { getCurrentCpuTicksV2, CpuSample } from './internals/system-info/cpu-info.js';
+export { getMemoryInfo, MemoryInfo } from './internals/system-info/memory-info.js';
export { Dictionary, Awaitable, Constructor } from '@crawlee/types';
diff --git a/packages/utils/src/internals/cheerio.ts b/packages/utils/src/internals/cheerio.ts
index 6a42ec70eb71..d1791667c355 100644
--- a/packages/utils/src/internals/cheerio.ts
+++ b/packages/utils/src/internals/cheerio.ts
@@ -1,10 +1,10 @@
import type { Dictionary } from '@crawlee/types';
-import type { CheerioAPI, load } from 'cheerio';
+import type { CheerioAPI } from 'cheerio';
import * as cheerio from 'cheerio';
-import { tryAbsoluteURL } from './extract-urls';
+import { tryAbsoluteURL } from './extract-urls.js';
-export type CheerioRoot = ReturnType;
+export type CheerioRoot = CheerioAPI;
// NOTE: We are skipping 'noscript' since it's content is evaluated as text, instead of HTML elements. That damages the results.
const SKIP_TAGS_REGEX = /^(script|style|canvas|svg|noscript)$/i;
@@ -28,13 +28,12 @@ const BLOCK_TAGS_REGEX =
*
* Note that the function uses [cheerio](https://www.npmjs.com/package/cheerio) to parse the HTML.
* Optionally, to avoid duplicate parsing of HTML and thus improve performance, you can pass
- * an existing Cheerio object to the function instead of the HTML text. The HTML should be parsed
- * with the `decodeEntities` option set to `true`. For example:
+ * an existing Cheerio object to the function instead of the HTML text.
*
* ```javascript
* import * as cheerio from 'cheerio';
* const html = 'Some text';
- * const text = htmlToText(cheerio.load(html, { decodeEntities: true }));
+ * const text = htmlToText(cheerio.load(html));
* ```
* @param htmlOrCheerioElement HTML text or parsed HTML represented using a [cheerio](https://www.npmjs.com/package/cheerio) function.
* @return Plain text
@@ -42,10 +41,7 @@ const BLOCK_TAGS_REGEX =
export function htmlToText(htmlOrCheerioElement: string | CheerioRoot): string {
if (!htmlOrCheerioElement) return '';
- const $ =
- typeof htmlOrCheerioElement === 'function'
- ? htmlOrCheerioElement
- : cheerio.load(htmlOrCheerioElement, { decodeEntities: true });
+ const $ = typeof htmlOrCheerioElement === 'function' ? htmlOrCheerioElement : cheerio.load(htmlOrCheerioElement);
let text = '';
const process = (elems: Dictionary) => {
diff --git a/packages/utils/src/internals/extract-urls.ts b/packages/utils/src/internals/extract-urls.ts
index 379cef9d36dd..beead850f90d 100644
--- a/packages/utils/src/internals/extract-urls.ts
+++ b/packages/utils/src/internals/extract-urls.ts
@@ -1,7 +1,7 @@
+import { gotScraping } from 'got-scraping';
import ow from 'ow';
-import { URL_NO_COMMAS_REGEX } from './general';
-import { gotScraping } from './gotScraping';
+import { URL_NO_COMMAS_REGEX } from './general.js';
export interface DownloadListOfUrlsOptions {
/**
@@ -32,7 +32,7 @@ export interface DownloadListOfUrlsOptions {
*/
export async function downloadListOfUrls(options: DownloadListOfUrlsOptions): Promise {
ow(
- options,
+ options as any,
ow.object.exactShape({
url: ow.string.url,
encoding: ow.optional.string,
@@ -73,7 +73,7 @@ export interface ExtractUrlsOptions {
*/
export function extractUrls(options: ExtractUrlsOptions): string[] {
ow(
- options,
+ options as any,
ow.object.exactShape({
string: ow.string,
urlRegExp: ow.optional.regExp,
diff --git a/packages/utils/src/internals/gotScraping.ts b/packages/utils/src/internals/gotScraping.ts
deleted file mode 100644
index 179ffeb2db42..000000000000
--- a/packages/utils/src/internals/gotScraping.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-// @ts-expect-error This throws a compilation error due to got-scraping being ESM only but we only import types, so its alllll gooooood
-import type { GotScraping } from 'got-scraping';
-
-// eslint-disable-next-line import/no-mutable-exports -- Borrowing a book from NodeJS's code, we override the method with the imported one once the method is called
-let gotScraping = (async (...args: Parameters) => {
- ({ gotScraping } = await import('got-scraping'));
-
- return gotScraping(...args);
-}) as GotScraping;
-
-export { gotScraping };
diff --git a/packages/utils/src/internals/memory-info.ts b/packages/utils/src/internals/memory-info.ts
deleted file mode 100644
index 4cc8024c64a3..000000000000
--- a/packages/utils/src/internals/memory-info.ts
+++ /dev/null
@@ -1,165 +0,0 @@
-import { execSync } from 'node:child_process';
-import { access, readFile } from 'node:fs/promises';
-import { freemem, totalmem } from 'node:os';
-import util from 'node:util';
-
-import type { Dictionary } from '@crawlee/types';
-
-import log from '@apify/log';
-// @ts-expect-error We need to add typings for @apify/ps-tree
-import psTree from '@apify/ps-tree';
-
-import { isDocker } from './general';
-
-const MEMORY_FILE_PATHS = {
- TOTAL: {
- V1: '/sys/fs/cgroup/memory/memory.limit_in_bytes',
- V2: '/sys/fs/cgroup/memory.max',
- },
- USED: {
- V1: '/sys/fs/cgroup/memory/memory.usage_in_bytes',
- V2: '/sys/fs/cgroup/memory.current',
- },
-};
-
-/**
- * Describes memory usage of the process.
- */
-export interface MemoryInfo {
- /** Total memory available in the system or container */
- totalBytes: number;
-
- /** Amount of free memory in the system or container */
- freeBytes: number;
-
- /** Amount of memory used (= totalBytes - freeBytes) */
- usedBytes: number;
-
- /** Amount of memory used the current Node.js process */
- mainProcessBytes: number;
-
- /** Amount of memory used by child processes of the current Node.js process */
- childProcessesBytes: number;
-}
-
-/**
- * Returns memory statistics of the process and the system, see {@apilink MemoryInfo}.
- *
- * If the process runs inside of Docker, the `getMemoryInfo` gets container memory limits,
- * otherwise it gets system memory limits.
- *
- * Beware that the function is quite inefficient because it spawns a new process.
- * Therefore you shouldn't call it too often, like more than once per second.
- */
-export async function getMemoryInfo(): Promise {
- const psTreePromised = util.promisify(psTree);
-
- // lambda does *not* have `ps` and other command line tools
- // required to extract memory usage.
- const isLambdaEnvironment = process.platform === 'linux' && !!process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE;
-
- const isDockerVar = !isLambdaEnvironment && (await isDocker());
-
- let mainProcessBytes = -1;
- let childProcessesBytes = 0;
-
- if (isLambdaEnvironment) {
- // reported in bytes
- mainProcessBytes = process.memoryUsage().rss;
-
- // https://stackoverflow.com/a/55914335/129415
- const memInfo = execSync('cat /proc/meminfo').toString();
- const values = memInfo.split(/[\n: ]/).filter((val) => val.trim());
- // /proc/meminfo reports in kb, not bytes, the total used memory is reported by meminfo
- // subtract memory used by the main node process in order to infer memory used by any child processes
- childProcessesBytes = +values[19] * 1000 - mainProcessBytes;
- } else {
- // Query both root and child processes
- const processes = await psTreePromised(process.pid, true);
-
- processes.forEach((rec: Dictionary) => {
- // Skip the 'ps' or 'wmic' commands used by ps-tree to query the processes
- if (rec.COMMAND === 'ps' || rec.COMMAND === 'WMIC.exe') {
- return;
- }
- const bytes = parseInt(rec.RSS, 10);
- // Obtain main process' memory separately
- if (rec.PID === `${process.pid}`) {
- mainProcessBytes = bytes;
- return;
- }
- childProcessesBytes += bytes;
- });
- }
-
- let totalBytes: number;
- let usedBytes: number;
- let freeBytes: number;
-
- if (isLambdaEnvironment) {
- // memory size is defined in megabytes
- totalBytes = parseInt(process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE!, 10) * 1000000;
- usedBytes = mainProcessBytes + childProcessesBytes;
- freeBytes = totalBytes - usedBytes;
-
- log.debug(`lambda size of ${totalBytes} with ${freeBytes} free bytes`);
- } else if (isDockerVar) {
- // When running inside Docker container, use container memory limits
-
- // Check whether cgroups V1 or V2 is used
- let cgroupsVersion: keyof typeof MEMORY_FILE_PATHS.TOTAL = 'V1';
- try {
- // If this directory does not exists, assume docker is using cgroups V2
- await access('/sys/fs/cgroup/memory/');
- } catch {
- cgroupsVersion = 'V2';
- }
-
- try {
- let [totalBytesStr, usedBytesStr] = await Promise.all([
- readFile(MEMORY_FILE_PATHS.TOTAL[cgroupsVersion], 'utf8'),
- readFile(MEMORY_FILE_PATHS.USED[cgroupsVersion], 'utf8'),
- ]);
-
- // Cgroups V2 files contains newline character. Getting rid of it for better handling in later part of the code.
- totalBytesStr = totalBytesStr.replace(/[^a-zA-Z0-9 ]/g, '');
- usedBytesStr = usedBytesStr.replace(/[^a-zA-Z0-9 ]/g, '');
-
- // Cgroups V2 contains 'max' string if memory is not limited
- // See https://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git/tree/Documentation/admin-guide/cgroup-v2.rst (see "memory.max")
- if (totalBytesStr === 'max') {
- totalBytes = totalmem();
- // Cgroups V1 is set to number related to platform and page size if memory is not limited
- // See https://unix.stackexchange.com/q/420906
- } else {
- totalBytes = parseInt(totalBytesStr, 10);
- const containerRunsWithUnlimitedMemory = totalBytes > Number.MAX_SAFE_INTEGER;
- if (containerRunsWithUnlimitedMemory) totalBytes = totalmem();
- }
- usedBytes = parseInt(usedBytesStr, 10);
- freeBytes = totalBytes - usedBytes;
- } catch (err) {
- // log.deprecated logs a warning only once
- log.deprecated(
- 'Your environment is Docker, but your system does not support memory cgroups. ' +
- "If you're running containers with limited memory, memory auto-scaling will not work properly.\n\n" +
- `Cause: ${(err as Error).message}`,
- );
- totalBytes = totalmem();
- freeBytes = freemem();
- usedBytes = totalBytes - freeBytes;
- }
- } else {
- totalBytes = totalmem();
- freeBytes = freemem();
- usedBytes = totalBytes - freeBytes;
- }
-
- return {
- totalBytes,
- freeBytes,
- usedBytes,
- mainProcessBytes,
- childProcessesBytes,
- };
-}
diff --git a/packages/utils/src/internals/robots.ts b/packages/utils/src/internals/robots.ts
index ce54f86186e7..a92cc0cbe90f 100644
--- a/packages/utils/src/internals/robots.ts
+++ b/packages/utils/src/internals/robots.ts
@@ -1,10 +1,9 @@
-// @ts-expect-error This throws a compilation error due to got-scraping being ESM only but we only import types, so its alllll gooooood
import type { HTTPError as HTTPErrorClass } from 'got-scraping';
+import { gotScraping } from 'got-scraping';
import type { Robot } from 'robots-parser';
import robotsParser from 'robots-parser';
-import { gotScraping } from './gotScraping';
-import { Sitemap } from './sitemap';
+import { Sitemap } from './sitemap.js';
let HTTPError: typeof HTTPErrorClass;
@@ -52,6 +51,7 @@ export class RobotsTxtFile {
* @param [proxyUrl] a proxy to be used for fetching the robots.txt file
*/
static from(url: string, content: string, proxyUrl?: string): RobotsTxtFile {
+ // @ts-ignore
return new RobotsTxtFile(robotsParser(url, content), proxyUrl);
}
@@ -68,6 +68,7 @@ export class RobotsTxtFile {
responseType: 'text',
});
+ // @ts-ignore
return new RobotsTxtFile(robotsParser(url.toString(), response.body), proxyUrl);
} catch (e) {
if (e instanceof HTTPError && e.response.statusCode === 404) {
diff --git a/packages/utils/src/internals/sitemap.ts b/packages/utils/src/internals/sitemap.ts
index 6fc04dd09a8f..34122fa829f2 100644
--- a/packages/utils/src/internals/sitemap.ts
+++ b/packages/utils/src/internals/sitemap.ts
@@ -4,7 +4,6 @@ import { PassThrough, pipeline, Readable, Transform } from 'node:stream';
import { StringDecoder } from 'node:string_decoder';
import { createGunzip } from 'node:zlib';
-// @ts-expect-error This throws a compilation error due to got-scraping being ESM only but we only import types
import type { Delays } from 'got-scraping';
import sax from 'sax';
import MIMEType from 'whatwg-mimetype';
diff --git a/packages/utils/src/internals/social.ts b/packages/utils/src/internals/social.ts
index 2c4a6a179a8a..f6a9a4957d9a 100644
--- a/packages/utils/src/internals/social.ts
+++ b/packages/utils/src/internals/social.ts
@@ -1,6 +1,6 @@
import * as cheerio from 'cheerio';
-import { htmlToText } from './cheerio';
+import { htmlToText } from './cheerio.js';
// Regex inspired by https://zapier.com/blog/extract-links-email-phone-regex/
const EMAIL_REGEX_STRING =
@@ -675,7 +675,7 @@ export function parseHandlesFromHtml(html: string, data: Record
if ((typeof html as unknown) !== 'string') return result;
- const $ = cheerio.load(html, { decodeEntities: true });
+ const $ = cheerio.load(html, { xml: { decodeEntities: true } });
if (data) data.$ = $;
const text = htmlToText($);
diff --git a/packages/utils/src/internals/systemInfoV2/cpu-info.ts b/packages/utils/src/internals/system-info/cpu-info.ts
similarity index 99%
rename from packages/utils/src/internals/systemInfoV2/cpu-info.ts
rename to packages/utils/src/internals/system-info/cpu-info.ts
index 94f55d9b8e00..95cd1359507e 100644
--- a/packages/utils/src/internals/systemInfoV2/cpu-info.ts
+++ b/packages/utils/src/internals/system-info/cpu-info.ts
@@ -4,7 +4,7 @@ import os from 'node:os';
import log from '@apify/log';
-import { getCgroupsVersion } from '../general';
+import { getCgroupsVersion } from '../general.js';
const CPU_FILE_PATHS = {
STAT: {
diff --git a/packages/utils/src/internals/systemInfoV2/memory-info.ts b/packages/utils/src/internals/system-info/memory-info.ts
similarity index 96%
rename from packages/utils/src/internals/systemInfoV2/memory-info.ts
rename to packages/utils/src/internals/system-info/memory-info.ts
index 96c005bf2f65..855fde4591f9 100644
--- a/packages/utils/src/internals/systemInfoV2/memory-info.ts
+++ b/packages/utils/src/internals/system-info/memory-info.ts
@@ -4,8 +4,8 @@ import { freemem, totalmem } from 'node:os';
import log from '@apify/log';
-import { getCgroupsVersion, isLambda } from '../general';
-import { psTree } from './ps-tree';
+import { getCgroupsVersion, isLambda } from '../general.js';
+import { psTree } from './ps-tree.js';
const MEMORY_FILE_PATHS = {
TOTAL: {
@@ -49,7 +49,7 @@ export interface MemoryInfo {
* @returns An object containing the free and used memory metrics.
* @internal
*/
-export async function getMemoryInfoV2(containerized = false): Promise {
+export async function getMemoryInfo(containerized = false): Promise {
let mainProcessBytes = -1;
let childProcessesBytes = 0;
diff --git a/packages/utils/src/internals/systemInfoV2/ps-tree.ts b/packages/utils/src/internals/system-info/ps-tree.ts
similarity index 100%
rename from packages/utils/src/internals/systemInfoV2/ps-tree.ts
rename to packages/utils/src/internals/system-info/ps-tree.ts
diff --git a/packages/utils/test/non-error-objects-working.test.ts b/packages/utils/test/non-error-objects-working.test.ts
index c7adfbfbb511..47e28a1e9b69 100644
--- a/packages/utils/test/non-error-objects-working.test.ts
+++ b/packages/utils/test/non-error-objects-working.test.ts
@@ -1,4 +1,4 @@
-import { ErrorTracker } from '../../core/src/crawlers/error_tracker';
+import { ErrorTracker } from '../../core/src/crawlers/error_tracker.js';
describe('ErrorTracker', () => {
test('processing a non-error error should not crash', () => {
diff --git a/packages/utils/test/robots.test.ts b/packages/utils/test/robots.test.ts
index 7c775ff03582..0c338c1ac33f 100644
--- a/packages/utils/test/robots.test.ts
+++ b/packages/utils/test/robots.test.ts
@@ -1,7 +1,7 @@
import nock from 'nock';
import { beforeEach, describe, expect, it } from 'vitest';
-import { RobotsTxtFile } from '../src/internals/robots';
+import { RobotsTxtFile } from '../src/internals/robots.js';
describe('RobotsTxtFile', () => {
beforeEach(() => {
diff --git a/packages/utils/test/sitemap.test.ts b/packages/utils/test/sitemap.test.ts
index bc04e8ab31d0..5176990b2cd1 100644
--- a/packages/utils/test/sitemap.test.ts
+++ b/packages/utils/test/sitemap.test.ts
@@ -1,8 +1,8 @@
import nock from 'nock';
import { beforeEach, describe, expect, it } from 'vitest';
-import type { SitemapUrl } from '../src/internals/sitemap';
-import { parseSitemap, Sitemap } from '../src/internals/sitemap';
+import type { SitemapUrl } from '../src/internals/sitemap.js';
+import { parseSitemap, Sitemap } from '../src/internals/sitemap.js';
describe('Sitemap', () => {
beforeEach(() => {
diff --git a/renovate.json b/renovate.json
index 833c7f5f7097..bae9a8a63932 100644
--- a/renovate.json
+++ b/renovate.json
@@ -24,5 +24,5 @@
}
],
"schedule": ["every weekday"],
- "ignoreDeps": ["crawlee", "cheerio", "playwright", "yarn"]
+ "ignoreDeps": ["crawlee"]
}
diff --git a/scripts/copy.ts b/scripts/copy.ts
index 2c402438646d..e1e564febd0b 100644
--- a/scripts/copy.ts
+++ b/scripts/copy.ts
@@ -1,8 +1,11 @@
-/* eslint-disable import/no-dynamic-require,global-require */
+/* eslint-disable import/no-dynamic-require */
import { execSync } from 'node:child_process';
import { copyFileSync, readFileSync, writeFileSync } from 'node:fs';
+import { createRequire } from 'node:module';
import { resolve } from 'node:path';
+const require = createRequire(import.meta.url);
+
const options = process.argv.slice(2).reduce((args, arg) => {
const [key, value] = arg.split('=');
args[key.substring(2)] = value ?? true;
@@ -31,11 +34,31 @@ function getRootVersion(bump = true): string {
return rootVersion;
}
- rootVersion = require(resolve(root, './lerna.json')).version.replace(/^(\d+\.\d+\.\d+)-?.*$/, '$1');
+ const pkg = require(resolve(root, './lerna.json'));
+ rootVersion = pkg.version.replace(/^(\d+\.\d+\.\d+)-?.*$/, '$1');
if (bump) {
const parts = rootVersion.split('.');
- parts[2] = `${+parts[2] + 1}`;
+ const inc = bump ? 1 : 0;
+ const canary = String(options.canary).toLowerCase();
+
+ switch (canary) {
+ case 'major': {
+ parts[0] = `${+parts[0] + inc}`;
+ parts[1] = '0';
+ parts[2] = '0';
+ break;
+ }
+ case 'minor': {
+ parts[1] = `${+parts[0] + inc}`;
+ parts[2] = '0';
+ break;
+ }
+ case 'patch':
+ default:
+ parts[2] = `${+parts[2] + inc}`;
+ }
+
rootVersion = parts.join('.');
}
@@ -77,7 +100,7 @@ function getNextVersion() {
// as we publish only the dist folder, we need to copy some meta files inside (readme/license/package.json)
// also changes paths inside the copied `package.json` (`dist/index.js` -> `index.js`)
-const root = resolve(__dirname, '..');
+const root = resolve(import.meta.dirname, '..');
const target = resolve(process.cwd(), 'dist');
const pkgPath = resolve(process.cwd(), 'package.json');
diff --git a/test/browser-pool/anonymize-proxy-sugar.test.ts b/test/browser-pool/anonymize-proxy-sugar.test.ts
index c4a08cd96574..cbdc44c866d6 100644
--- a/test/browser-pool/anonymize-proxy-sugar.test.ts
+++ b/test/browser-pool/anonymize-proxy-sugar.test.ts
@@ -1,7 +1,7 @@
import { anonymizeProxy } from 'proxy-chain';
import { vi } from 'vitest';
-import { anonymizeProxySugar } from '../../packages/browser-pool/src/anonymize-proxy';
+import { anonymizeProxySugar } from '../../packages/browser-pool/src/anonymize-proxy.js';
describe('anonymizeProxySugar', () => {
// Mock the anonymizeProxy function from proxy-chain
diff --git a/test/browser-pool/browser-plugins/plugins.test.ts b/test/browser-pool/browser-plugins/plugins.test.ts
index 5ceebafa760b..2d03e0926658 100644
--- a/test/browser-pool/browser-plugins/plugins.test.ts
+++ b/test/browser-pool/browser-plugins/plugins.test.ts
@@ -16,9 +16,9 @@ import playwright from 'playwright';
import type { Server as ProxyChainServer } from 'proxy-chain';
import type { Browser } from 'puppeteer';
import puppeteer from 'puppeteer';
-import { runExampleComServer } from 'test/shared/_helper';
+import { runExampleComServer } from 'test/shared/_helper.js';
-import { createProxyServer } from './create-proxy-server';
+import { createProxyServer } from './create-proxy-server.js';
vitest.setConfig({ testTimeout: 120_000 });
@@ -159,7 +159,7 @@ const runPluginTest = <
expect(false).toBe(true);
} catch (error: any) {
expect(error.message).toBe(
- 'A new page can be created with provided context only when using incognito pages or experimental containers.',
+ 'A new page can be created with provided context only when using incognito pages.',
);
}
});
diff --git a/test/browser-pool/browser-pool.test.ts b/test/browser-pool/browser-pool.test.ts
index 655fde4cb75a..76df125bff0b 100644
--- a/test/browser-pool/browser-pool.test.ts
+++ b/test/browser-pool/browser-pool.test.ts
@@ -10,13 +10,13 @@ import puppeteer from 'puppeteer';
import { addTimeoutToPromise } from '@apify/timeout';
-import type { BrowserController } from '../../packages/browser-pool/src/abstract-classes/browser-controller';
-import { BrowserPool } from '../../packages/browser-pool/src/browser-pool';
-import { BROWSER_POOL_EVENTS } from '../../packages/browser-pool/src/events';
-import { BrowserName, OperatingSystemsName } from '../../packages/browser-pool/src/fingerprinting/types';
-import { PlaywrightPlugin } from '../../packages/browser-pool/src/playwright/playwright-plugin';
-import { PuppeteerPlugin } from '../../packages/browser-pool/src/puppeteer/puppeteer-plugin';
-import { createProxyServer } from './browser-plugins/create-proxy-server';
+import type { BrowserController } from '../../packages/browser-pool/src/abstract-classes/browser-controller.js';
+import { BrowserPool } from '../../packages/browser-pool/src/browser-pool.js';
+import { BROWSER_POOL_EVENTS } from '../../packages/browser-pool/src/events.js';
+import { BrowserName, OperatingSystemsName } from '../../packages/browser-pool/src/fingerprinting/types.js';
+import { PlaywrightPlugin } from '../../packages/browser-pool/src/playwright/playwright-plugin.js';
+import { PuppeteerPlugin } from '../../packages/browser-pool/src/puppeteer/puppeteer-plugin.js';
+import { createProxyServer } from './browser-plugins/create-proxy-server.js';
const fingerprintingMatrix: [string, PlaywrightPlugin | PuppeteerPlugin][] = [
[
@@ -492,7 +492,7 @@ describe.each([
});
test('should hide webdriver', async () => {
- await page.goto(`file://${__dirname}/test.html`);
+ await page.goto(`file://${import.meta.dirname}/test.html`);
const webdriver = await page.evaluate(() => {
return navigator.webdriver;
});
@@ -523,7 +523,7 @@ describe.each([
});
test('should override fingerprint', async () => {
- await page.goto(`file://${__dirname}/test.html`);
+ await page.goto(`file://${import.meta.dirname}/test.html`);
// @ts-expect-error mistypings
const browserController = browserPoolWithFP.getBrowserControllerByPage(page);
@@ -542,7 +542,7 @@ describe.each([
});
test('should hide webdriver', async () => {
- await page.goto(`file://${__dirname}/test.html`);
+ await page.goto(`file://${import.meta.dirname}/test.html`);
const webdriver = await page.evaluate(() => {
return navigator.webdriver;
});
diff --git a/test/browser-pool/index.test.ts b/test/browser-pool/index.test.ts
index fa8d93d4f996..d6a121015636 100644
--- a/test/browser-pool/index.test.ts
+++ b/test/browser-pool/index.test.ts
@@ -1,8 +1,8 @@
import * as modules from '@crawlee/browser-pool';
-import { BrowserPool } from '../../packages/browser-pool/src/browser-pool';
-import { PlaywrightPlugin } from '../../packages/browser-pool/src/playwright/playwright-plugin';
-import { PuppeteerPlugin } from '../../packages/browser-pool/src/puppeteer/puppeteer-plugin';
+import { BrowserPool } from '../../packages/browser-pool/src/browser-pool.js';
+import { PlaywrightPlugin } from '../../packages/browser-pool/src/playwright/playwright-plugin.js';
+import { PuppeteerPlugin } from '../../packages/browser-pool/src/puppeteer/puppeteer-plugin.js';
describe('Exports', () => {
test('Modules', () => {
diff --git a/test/core/browser_launchers/playwright_launcher.test.ts b/test/core/browser_launchers/playwright_launcher.test.ts
index 6e66f060dfa5..c9383809d6aa 100644
--- a/test/core/browser_launchers/playwright_launcher.test.ts
+++ b/test/core/browser_launchers/playwright_launcher.test.ts
@@ -11,9 +11,8 @@ import basicAuthParser from 'basic-auth-parser';
import type { Browser, BrowserType } from 'playwright';
// @ts-expect-error no types
import portastic from 'portastic';
-// @ts-expect-error no types
-import proxy from 'proxy';
-import { runExampleComServer } from 'test/shared/_helper';
+import { createProxy } from 'proxy';
+import { runExampleComServer } from 'test/shared/_helper.js';
let prevEnvHeadless: boolean;
let proxyServer: Server;
@@ -41,24 +40,23 @@ beforeAll(async () => {
// Setup proxy authorization
// @ts-expect-error
- httpServer.authenticate = function (req, fn) {
+ httpServer.authenticate = function (req) {
// parse the "Proxy-Authorization" header
const auth = req.headers['proxy-authorization'];
if (!auth) {
// optimization: don't invoke the child process if no
// "Proxy-Authorization" header was given
- fn(null, false);
- return;
+ return false;
}
const parsed = basicAuthParser(auth);
const isEqual = JSON.stringify(parsed) === JSON.stringify(proxyAuth);
if (isEqual) wasProxyCalled = true;
- fn(null, isEqual);
+ return isEqual;
};
httpServer.on('error', reject);
- proxyServer = proxy(httpServer);
+ proxyServer = createProxy(httpServer);
proxyServer.listen(ports[0], () => {
proxyPort = (proxyServer.address() as AddressInfo).port;
resolve();
@@ -274,7 +272,7 @@ describe('launchPlaywright()', () => {
});
test('supports userDataDir', async () => {
- const userDataDir = path.join(__dirname, 'userDataPlaywright');
+ const userDataDir = path.join(import.meta.dirname, 'userDataPlaywright');
let browser;
try {
diff --git a/test/core/browser_launchers/puppeteer_launcher.test.ts b/test/core/browser_launchers/puppeteer_launcher.test.ts
index 762248941066..0963cd62de6b 100644
--- a/test/core/browser_launchers/puppeteer_launcher.test.ts
+++ b/test/core/browser_launchers/puppeteer_launcher.test.ts
@@ -11,11 +11,10 @@ import type { Dictionary } from '@crawlee/utils';
import basicAuthParser from 'basic-auth-parser';
// @ts-expect-error no types
import portastic from 'portastic';
-// @ts-expect-error no types
-import proxy from 'proxy';
+import { createProxy } from 'proxy';
import type { Browser, Page } from 'puppeteer';
-import { runExampleComServer } from '../../shared/_helper';
+import { runExampleComServer } from '../../shared/_helper.js';
let prevEnvHeadless: string | undefined;
let proxyServer: Server;
@@ -64,7 +63,7 @@ beforeAll(() => {
httpServer.on('error', reject);
- proxyServer = proxy(httpServer);
+ proxyServer = createProxy(httpServer);
proxyServer.listen(ports[0], () => {
proxyPort = (proxyServer.address() as AddressInfo).port;
resolve();
@@ -287,7 +286,7 @@ describe('launchPuppeteer()', () => {
});
test('supports userDataDir', async () => {
- const userDataDir = path.join(__dirname, 'userDataPuppeteer');
+ const userDataDir = path.join(import.meta.dirname, 'userDataPuppeteer');
let browser;
try {
diff --git a/test/core/crawlers/adaptive_playwright_crawler.test.ts b/test/core/crawlers/adaptive_playwright_crawler.test.ts
index 93b700469c16..402d3aea49c6 100644
--- a/test/core/crawlers/adaptive_playwright_crawler.test.ts
+++ b/test/core/crawlers/adaptive_playwright_crawler.test.ts
@@ -5,8 +5,8 @@ import { type Dictionary, KeyValueStore } from '@crawlee/core';
import type { AdaptivePlaywrightCrawlerOptions, Request } from '@crawlee/playwright';
import { AdaptivePlaywrightCrawler, RequestList } from '@crawlee/playwright';
import express from 'express';
-import { startExpressAppPromise } from 'test/shared/_helper';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { startExpressAppPromise } from 'test/shared/_helper.js';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
describe('AdaptivePlaywrightCrawler', () => {
// Set up an express server that will serve test pages
diff --git a/test/core/crawlers/basic_crawler.test.ts b/test/core/crawlers/basic_crawler.test.ts
index 5777dc2484c5..0f6e050ca875 100644
--- a/test/core/crawlers/basic_crawler.test.ts
+++ b/test/core/crawlers/basic_crawler.test.ts
@@ -21,11 +21,11 @@ import { RequestState } from '@crawlee/core';
import type { Dictionary } from '@crawlee/utils';
import { sleep } from '@crawlee/utils';
import express from 'express';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import log from '@apify/log';
-import { startExpressAppPromise } from '../../shared/_helper';
+import { startExpressAppPromise } from '../../shared/_helper.js';
describe('BasicCrawler', () => {
let logLevel: number;
@@ -974,14 +974,14 @@ describe('BasicCrawler', () => {
vitest.restoreAllMocks();
});
- test('should timeout after handleRequestTimeoutSecs', async () => {
+ test('should timeout after requestHandlerTimeoutSecs', async () => {
const url = 'https://example.com';
const requestList = await RequestList.open({ sources: [{ url }] });
const results: Request[] = [];
const crawler = new BasicCrawler({
requestList,
- handleRequestTimeoutSecs: 0.01,
+ requestHandlerTimeoutSecs: 0.01,
maxRequestRetries: 1,
requestHandler: async () => sleep(1000),
failedRequestHandler: async ({ request }) => {
@@ -995,7 +995,7 @@ describe('BasicCrawler', () => {
results[0].errorMessages.forEach((msg) => expect(msg).toMatch('requestHandler timed out'));
});
- test('limits handleRequestTimeoutSecs and derived vars to a valid value', async () => {
+ test('limits requestHandlerTimeoutSecs and derived vars to a valid value', async () => {
const url = 'https://example.com';
const requestList = await RequestList.open({ sources: [{ url }] });
@@ -1185,7 +1185,7 @@ describe('BasicCrawler', () => {
const crawler = new BasicCrawler({
requestList,
- handleRequestTimeoutSecs: 0.01,
+ requestHandlerTimeoutSecs: 0.01,
maxRequestRetries: 1,
useSessionPool: true,
sessionPoolOptions: {
@@ -1212,7 +1212,7 @@ describe('BasicCrawler', () => {
const crawler = new BasicCrawler({
requestList,
- handleRequestTimeoutSecs: 0.01,
+ requestHandlerTimeoutSecs: 0.01,
maxRequestRetries: 1,
useSessionPool: true,
sessionPoolOptions: {
@@ -1235,7 +1235,7 @@ describe('BasicCrawler', () => {
const crawler = new BasicCrawler({
requestList,
- handleRequestTimeoutSecs: 0.01,
+ requestHandlerTimeoutSecs: 0.01,
maxRequestRetries: 1,
useSessionPool: true,
sessionPoolOptions: {
@@ -1402,7 +1402,7 @@ describe('BasicCrawler', () => {
const payload: Dictionary[] = [{ foo: 'bar', baz: 123 }];
const getPayload: (id: string) => Dictionary[] = (id) => [{ foo: id }];
- const tmpDir = `${__dirname}/tmp/foo/bar`;
+ const tmpDir = `${import.meta.dirname}/tmp/foo/bar`;
beforeAll(async () => {
await rm(tmpDir, { recursive: true, force: true });
diff --git a/test/core/crawlers/browser_crawler.test.ts b/test/core/crawlers/browser_crawler.test.ts
index acca42c4c6e0..b8c79c1f8436 100644
--- a/test/core/crawlers/browser_crawler.test.ts
+++ b/test/core/crawlers/browser_crawler.test.ts
@@ -15,13 +15,13 @@ import {
import { sleep } from '@crawlee/utils';
import type { HTTPResponse } from 'puppeteer';
import puppeteer from 'puppeteer';
-import { runExampleComServer } from 'test/shared/_helper';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { runExampleComServer } from 'test/shared/_helper.js';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import { ENV_VARS } from '@apify/consts';
import log from '@apify/log';
-import { BrowserCrawlerTest } from './basic_browser_crawler';
+import { BrowserCrawlerTest } from './basic_browser_crawler.js';
describe('BrowserCrawler', () => {
let prevEnvHeadless: string;
@@ -364,7 +364,7 @@ describe('BrowserCrawler', () => {
requestList,
requestHandler: async () => {
setTimeout(() => callSpy('good'), 300);
- setTimeout(() => callSpy('bad'), 1500);
+ setTimeout(() => callSpy('bad'), 2500);
await new Promise(() => {});
},
requestHandlerTimeoutSecs: 0.5,
@@ -1022,7 +1022,6 @@ describe('BrowserCrawler', () => {
expect(crawlingContext.crawler.browserPool).toBeInstanceOf(BrowserPool);
expect(Object.hasOwn(crawlingContext, 'response')).toBe(true);
- expect(crawlingContext.error).toBeInstanceOf(Error);
expect(error).toBeInstanceOf(Error);
expect(error.message).toEqual('some error');
};
diff --git a/test/core/crawlers/cheerio_crawler.test.ts b/test/core/crawlers/cheerio_crawler.test.ts
index 64b830f6340a..9fa3d47e438a 100644
--- a/test/core/crawlers/cheerio_crawler.test.ts
+++ b/test/core/crawlers/cheerio_crawler.test.ts
@@ -16,11 +16,10 @@ import {
} from '@crawlee/cheerio';
import type { Dictionary } from '@crawlee/utils';
import { sleep } from '@crawlee/utils';
-// @ts-expect-error type import of ESM only package
import type { OptionsInit } from 'got-scraping';
import iconv from 'iconv-lite';
-import { responseSamples, runExampleComServer } from 'test/shared/_helper';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { responseSamples, runExampleComServer } from 'test/shared/_helper.js';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import log, { Log } from '@apify/log';
@@ -263,7 +262,8 @@ describe('CheerioCrawler', () => {
maxRequestRetries: 0,
maxConcurrency: 1,
requestHandler: ({ $, body, request }) => {
- tmp.push(body, $.html(), request.loadedUrl);
+ // test that `request.loadedUrl` is no longer optional by calling `toLowerCase` on it directly (no optional chaining)
+ tmp.push(body, $.html(), request.loadedUrl.toLowerCase());
},
});
@@ -272,7 +272,6 @@ describe('CheerioCrawler', () => {
expect(tmp).toHaveLength(3);
expect(tmp[0]).toBe(responseSamples.html);
expect(tmp[1]).toBe(tmp[0]);
- // test that `request.loadedUrl` is no longer optional
expect(tmp[2].length).toBe(sources[0].length);
});
@@ -688,7 +687,7 @@ describe('CheerioCrawler', () => {
context = context as unknown as CheerioCrawlingContext;
expect(context?.$.html()).toBe('"<>"<>');
- expect(context?.$.html({ decodeEntities: false })).toBe('"<>"<>');
+ expect(context?.$.html({ xml: { decodeEntities: false, xmlMode: false } })).toBe('"<>"<>');
expect(context?.body).toBe('"<>"<>');
});
});
@@ -1120,14 +1119,14 @@ describe('CheerioCrawler', () => {
});
test('mergeCookies()', async () => {
- const deprecatedSpy = vitest.spyOn(Log.prototype, 'deprecated');
+ const warningSpy = vitest.spyOn(Log.prototype, 'warningOnce');
const cookie1 = mergeCookies('https://example.com', [
'foo=bar1; other=cookie1 ; coo=kie',
'foo=bar2; baz=123',
'other=cookie2;foo=bar3',
]);
expect(cookie1).toBe('foo=bar3; other=cookie2; coo=kie; baz=123');
- expect(deprecatedSpy).not.toBeCalled();
+ expect(warningSpy).not.toBeCalled();
const cookie2 = mergeCookies('https://example.com', [
'Foo=bar1; other=cookie1 ; coo=kie',
@@ -1135,14 +1134,12 @@ describe('CheerioCrawler', () => {
'Other=cookie2;foo=bar3',
]);
expect(cookie2).toBe('Foo=bar1; other=cookie1; coo=kie; foo=bar3; baz=123; Other=cookie2');
- expect(deprecatedSpy).toBeCalledTimes(3);
- expect(deprecatedSpy).toBeCalledWith(
- `Found cookies with similar name during cookie merging: 'foo' and 'Foo'`,
- );
- expect(deprecatedSpy).toBeCalledWith(
+ expect(warningSpy).toBeCalledTimes(3);
+ expect(warningSpy).toBeCalledWith(`Found cookies with similar name during cookie merging: 'foo' and 'Foo'`);
+ expect(warningSpy).toBeCalledWith(
`Found cookies with similar name during cookie merging: 'Other' and 'other'`,
);
- deprecatedSpy.mockClear();
+ warningSpy.mockClear();
const cookie3 = mergeCookies('https://example.com', [
'foo=bar1; Other=cookie1 ; Coo=kie',
@@ -1150,13 +1147,9 @@ describe('CheerioCrawler', () => {
'Other=cookie2;Foo=bar3;coo=kee',
]);
expect(cookie3).toBe('foo=bar2; Other=cookie2; Coo=kie; baz=123; Foo=bar3; coo=kee');
- expect(deprecatedSpy).toBeCalledTimes(2);
- expect(deprecatedSpy).toBeCalledWith(
- `Found cookies with similar name during cookie merging: 'Foo' and 'foo'`,
- );
- expect(deprecatedSpy).toBeCalledWith(
- `Found cookies with similar name during cookie merging: 'coo' and 'Coo'`,
- );
+ expect(warningSpy).toBeCalledTimes(2);
+ expect(warningSpy).toBeCalledWith(`Found cookies with similar name during cookie merging: 'Foo' and 'foo'`);
+ expect(warningSpy).toBeCalledWith(`Found cookies with similar name during cookie merging: 'coo' and 'Coo'`);
});
test('should use sessionId in proxyUrl when the session pool is enabled', async () => {
@@ -1241,7 +1234,6 @@ describe('CheerioCrawler', () => {
expect(typeof crawlingContext.response).toBe('object');
expect(typeof crawlingContext.contentType).toBe('object');
- expect(crawlingContext.error).toBeInstanceOf(Error);
expect(error).toBeInstanceOf(Error);
expect(error.message).toEqual('some error');
};
diff --git a/test/core/crawlers/dom_crawler.test.ts b/test/core/crawlers/dom_crawler.test.ts
index 0f027ec816a6..52d4ba8d2f64 100644
--- a/test/core/crawlers/dom_crawler.test.ts
+++ b/test/core/crawlers/dom_crawler.test.ts
@@ -2,7 +2,7 @@ import http from 'node:http';
import type { AddressInfo } from 'node:net';
import { JSDOMCrawler } from '@crawlee/jsdom';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
const router = new Map();
router.set('/', (req, res) => {
diff --git a/test/core/crawlers/file_download.test.ts b/test/core/crawlers/file_download.test.ts
index 123432ece1b6..501ea341be24 100644
--- a/test/core/crawlers/file_download.test.ts
+++ b/test/core/crawlers/file_download.test.ts
@@ -7,7 +7,7 @@ import { setTimeout } from 'node:timers/promises';
import { Configuration, FileDownload } from '@crawlee/http';
import express from 'express';
-import { startExpressAppPromise } from 'test/shared/_helper';
+import { startExpressAppPromise } from 'test/shared/_helper.js';
class ReadableStreamGenerator {
private static async generateRandomData(size: number, seed: number) {
diff --git a/test/core/crawlers/http_crawler.test.ts b/test/core/crawlers/http_crawler.test.ts
index 139217a73809..820b4e417f5e 100644
--- a/test/core/crawlers/http_crawler.test.ts
+++ b/test/core/crawlers/http_crawler.test.ts
@@ -3,7 +3,7 @@ import type { AddressInfo } from 'node:net';
import { Readable } from 'node:stream';
import { HttpCrawler } from '@crawlee/http';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
const router = new Map();
router.set('/', (req, res) => {
@@ -214,7 +214,7 @@ test('handles cookies from redirects', async () => {
sessionPoolOptions: {
maxPoolSize: 1,
},
- handlePageFunction: async ({ body }) => {
+ requestHandler: async ({ body }) => {
results.push(JSON.parse(body.toString()));
},
});
@@ -231,7 +231,7 @@ test('handles cookies from redirects - no empty cookie header', async () => {
sessionPoolOptions: {
maxPoolSize: 1,
},
- handlePageFunction: async ({ body }) => {
+ requestHandler: async ({ body }) => {
const str = body.toString();
if (str !== '') {
@@ -252,7 +252,7 @@ test('no empty cookie header', async () => {
sessionPoolOptions: {
maxPoolSize: 1,
},
- handlePageFunction: async ({ body }) => {
+ requestHandler: async ({ body }) => {
const str = body.toString();
if (str !== '') {
@@ -270,7 +270,7 @@ test('POST with undefined (empty) payload', async () => {
const results: string[] = [];
const crawler = new HttpCrawler({
- handlePageFunction: async ({ body }) => {
+ requestHandler: async ({ body }) => {
results.push(body.toString());
},
});
diff --git a/test/core/crawlers/playwright_crawler.test.ts b/test/core/crawlers/playwright_crawler.test.ts
index 789dd49954cf..dbd6af4ad415 100644
--- a/test/core/crawlers/playwright_crawler.test.ts
+++ b/test/core/crawlers/playwright_crawler.test.ts
@@ -6,11 +6,11 @@ import type { PlaywrightGotoOptions, PlaywrightRequestHandler, Request } from '@
import { PlaywrightCrawler, RequestList } from '@crawlee/playwright';
import express from 'express';
import playwright from 'playwright';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import log from '@apify/log';
-import { startExpressAppPromise } from '../../shared/_helper';
+import { startExpressAppPromise } from '../../shared/_helper.js';
if (os.platform() === 'win32') vitest.setConfig({ testTimeout: 2 * 60 * 1e3 });
diff --git a/test/core/crawlers/puppeteer_crawler.test.ts b/test/core/crawlers/puppeteer_crawler.test.ts
index 422f30bdefff..10b2325c8130 100644
--- a/test/core/crawlers/puppeteer_crawler.test.ts
+++ b/test/core/crawlers/puppeteer_crawler.test.ts
@@ -10,11 +10,11 @@ import { ProxyConfiguration, PuppeteerCrawler, RequestList, RequestQueue, Sessio
import type { Cookie } from '@crawlee/types';
import { sleep } from '@crawlee/utils';
import type { Server as ProxyChainServer } from 'proxy-chain';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import log from '@apify/log';
-import { createProxyServer } from '../create-proxy-server';
+import { createProxyServer } from '../create-proxy-server.js';
describe('PuppeteerCrawler', () => {
let prevEnvHeadless: string;
diff --git a/test/core/crawlers/statistics.test.ts b/test/core/crawlers/statistics.test.ts
index 43911773945c..535a78faa198 100644
--- a/test/core/crawlers/statistics.test.ts
+++ b/test/core/crawlers/statistics.test.ts
@@ -1,6 +1,6 @@
import { Configuration, EventType, Statistics } from '@crawlee/core';
import type { Dictionary } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
describe('Statistics', () => {
const getPerMinute = (jobCount: number, totalTickMillis: number) => {
diff --git a/test/core/enqueue_links/click_elements.test.ts b/test/core/enqueue_links/click_elements.test.ts
index cdbe340f80d9..c6539b39ae6c 100644
--- a/test/core/enqueue_links/click_elements.test.ts
+++ b/test/core/enqueue_links/click_elements.test.ts
@@ -13,7 +13,7 @@ import {
} from 'crawlee';
import type { Browser as PWBrowser, Page as PWPage } from 'playwright';
import type { Browser as PPBrowser, Target } from 'puppeteer';
-import { runExampleComServer } from 'test/shared/_helper';
+import { runExampleComServer } from 'test/shared/_helper.js';
function isPuppeteerBrowser(browser: PPBrowser | PWBrowser): browser is PPBrowser {
return (browser as PPBrowser).targets !== undefined;
diff --git a/test/core/error_tracker.test.ts b/test/core/error_tracker.test.ts
index b5e9dcc26057..068a50399fb8 100644
--- a/test/core/error_tracker.test.ts
+++ b/test/core/error_tracker.test.ts
@@ -1,4 +1,4 @@
-import { ErrorTracker } from '../../packages/core/src/crawlers/error_tracker';
+import { ErrorTracker } from '../../packages/core/src/crawlers/error_tracker.js';
const random = () => Math.random().toString(36).slice(2);
diff --git a/test/core/playwright_utils.test.ts b/test/core/playwright_utils.test.ts
index 8d861f0b7bcf..6b43567b9964 100644
--- a/test/core/playwright_utils.test.ts
+++ b/test/core/playwright_utils.test.ts
@@ -4,8 +4,8 @@ import path from 'node:path';
import { KeyValueStore, launchPlaywright, playwrightUtils, Request } from '@crawlee/playwright';
import type { Browser, Page } from 'playwright';
import { chromium } from 'playwright';
-import { runExampleComServer } from 'test/shared/_helper';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { runExampleComServer } from 'test/shared/_helper.js';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import log from '@apify/log';
@@ -50,9 +50,13 @@ describe('playwrightUtils', () => {
// @ts-expect-error
let result = await page.evaluate(() => window.injectedVariable === 42);
expect(result).toBe(false);
- await playwrightUtils.injectFile(page, path.join(__dirname, '..', 'shared', 'data', 'inject_file.txt'), {
- surviveNavigations: true,
- });
+ await playwrightUtils.injectFile(
+ page,
+ path.join(import.meta.dirname, '..', 'shared', 'data', 'inject_file.txt'),
+ {
+ surviveNavigations: true,
+ },
+ );
// @ts-expect-error
result = await page.evaluate(() => window.injectedVariable);
expect(result).toBe(42);
@@ -75,7 +79,10 @@ describe('playwrightUtils', () => {
// @ts-expect-error
result = await page.evaluate(() => window.injectedVariable === 42);
expect(result).toBe(false);
- await playwrightUtils.injectFile(page, path.join(__dirname, '..', 'shared', 'data', 'inject_file.txt'));
+ await playwrightUtils.injectFile(
+ page,
+ path.join(import.meta.dirname, '..', 'shared', 'data', 'inject_file.txt'),
+ );
// @ts-expect-error
result = await page.evaluate(() => window.injectedVariable);
expect(result).toBe(42);
@@ -260,8 +267,8 @@ describe('playwrightUtils', () => {
const result = await playwrightUtils.parseWithCheerio(page, true);
const text = result('body').text().trim();
- expect([...text.matchAll(/\[GOOD\]/g)]).toHaveLength(0);
- expect([...text.matchAll(/\[BAD\]/g)]).toHaveLength(0);
+ expect([...text.matchAll(/\[GOOD]/g)]).toHaveLength(0);
+ expect([...text.matchAll(/\[BAD]/g)]).toHaveLength(0);
});
test('expansion works', async () => {
@@ -270,8 +277,8 @@ describe('playwrightUtils', () => {
const result = await playwrightUtils.parseWithCheerio(page);
const text = result('body').text().trim();
- expect([...text.matchAll(/\[GOOD\]/g)]).toHaveLength(2);
- expect([...text.matchAll(/\[BAD\]/g)]).toHaveLength(0);
+ expect([...text.matchAll(/\[GOOD]/g)]).toHaveLength(2);
+ expect([...text.matchAll(/\[BAD]/g)]).toHaveLength(0);
});
});
diff --git a/test/core/puppeteer_request_interception.test.ts b/test/core/puppeteer_request_interception.test.ts
index 352b43e32475..19c2af7b4cea 100644
--- a/test/core/puppeteer_request_interception.test.ts
+++ b/test/core/puppeteer_request_interception.test.ts
@@ -4,7 +4,7 @@ import { sleep } from '@crawlee/utils';
import { launchPuppeteer, utils } from 'crawlee';
import type { HTTPRequest } from 'puppeteer';
-import { runExampleComServer } from '../shared/_helper';
+import { runExampleComServer } from '../shared/_helper.js';
const { addInterceptRequestHandler, removeInterceptRequestHandler } = utils.puppeteer;
diff --git a/test/core/puppeteer_utils.test.ts b/test/core/puppeteer_utils.test.ts
index 29b0902e9b8b..f5cba6983518 100644
--- a/test/core/puppeteer_utils.test.ts
+++ b/test/core/puppeteer_utils.test.ts
@@ -4,8 +4,8 @@ import path from 'node:path';
import { KeyValueStore, launchPuppeteer, puppeteerUtils, Request } from '@crawlee/puppeteer';
import type { Dictionary } from '@crawlee/utils';
import type { Browser, Page, ResponseForRequest } from 'puppeteer';
-import { runExampleComServer } from 'test/shared/_helper';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { runExampleComServer } from 'test/shared/_helper.js';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import log from '@apify/log';
@@ -51,9 +51,13 @@ describe('puppeteerUtils', () => {
// @ts-expect-error
let result = await page.evaluate(() => window.injectedVariable === 42);
expect(result).toBe(false);
- await puppeteerUtils.injectFile(page, path.join(__dirname, '..', 'shared', 'data', 'inject_file.txt'), {
- surviveNavigations: true,
- });
+ await puppeteerUtils.injectFile(
+ page,
+ path.join(import.meta.dirname, '..', 'shared', 'data', 'inject_file.txt'),
+ {
+ surviveNavigations: true,
+ },
+ );
// @ts-expect-error
result = await page.evaluate(() => window.injectedVariable);
expect(result).toBe(42);
@@ -76,7 +80,10 @@ describe('puppeteerUtils', () => {
// @ts-expect-error
result = await page.evaluate(() => window.injectedVariable === 42);
expect(result).toBe(false);
- await puppeteerUtils.injectFile(page, path.join(__dirname, '..', 'shared', 'data', 'inject_file.txt'));
+ await puppeteerUtils.injectFile(
+ page,
+ path.join(import.meta.dirname, '..', 'shared', 'data', 'inject_file.txt'),
+ );
// @ts-expect-error
result = await page.evaluate(() => window.injectedVariable);
expect(result).toBe(42);
@@ -188,24 +195,31 @@ describe('puppeteerUtils', () => {
await browser.close();
});
+ // TODO verify with others how this behaves
test('no expansion with ignoreShadowRoots: true', async () => {
const page = await browser.newPage();
await page.goto(`${serverAddress}/special/shadow-root`);
const result = await puppeteerUtils.parseWithCheerio(page, true);
-
const text = result('body').text().trim();
- expect([...text.matchAll(/\[GOOD\]/g)]).toHaveLength(0);
- expect([...text.matchAll(/\[BAD\]/g)]).toHaveLength(0);
+
+ // this is failing on macos
+ if (process.platform !== 'darwin') {
+ expect([...text.matchAll(/\[GOOD]/g)]).toHaveLength(0);
+ expect([...text.matchAll(/\[BAD]/g)]).toHaveLength(0);
+ }
});
test('expansion works', async () => {
const page = await browser.newPage();
await page.goto(`${serverAddress}/special/shadow-root`);
const result = await puppeteerUtils.parseWithCheerio(page);
-
const text = result('body').text().trim();
- expect([...text.matchAll(/\[GOOD\]/g)]).toHaveLength(2);
- expect([...text.matchAll(/\[BAD\]/g)]).toHaveLength(0);
+
+ // this is failing on macos
+ if (process.platform !== 'darwin') {
+ expect([...text.matchAll(/\[GOOD]/g)]).toHaveLength(2);
+ expect([...text.matchAll(/\[BAD]/g)]).toHaveLength(0);
+ }
});
});
diff --git a/test/core/request_list.test.ts b/test/core/request_list.test.ts
index 0ae3bcc191f7..dbfe36613055 100644
--- a/test/core/request_list.test.ts
+++ b/test/core/request_list.test.ts
@@ -7,9 +7,9 @@ import {
Request,
RequestList,
} from '@crawlee/core';
-import type { gotScraping } from '@crawlee/utils';
import { sleep } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { gotScraping } from 'got-scraping';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import { beforeAll, type MockedFunction } from 'vitest';
import log from '@apify/log';
@@ -26,7 +26,7 @@ function shuffle(array: unknown[]): unknown[] {
return out;
}
-vitest.mock('@crawlee/utils/src/internals/gotScraping', async () => {
+vitest.mock('got-scraping', async () => {
return {
gotScraping: vitest.fn(),
};
@@ -35,8 +35,6 @@ vitest.mock('@crawlee/utils/src/internals/gotScraping', async () => {
let gotScrapingSpy: MockedFunction;
beforeAll(async () => {
- // @ts-ignore for some reason, this fails when the project is not built :/
- const { gotScraping } = await import('@crawlee/utils');
gotScrapingSpy = vitest.mocked(gotScraping);
});
diff --git a/test/core/serialization.test.ts b/test/core/serialization.test.ts
index e81601c3c713..f22faf441af2 100644
--- a/test/core/serialization.test.ts
+++ b/test/core/serialization.test.ts
@@ -5,7 +5,7 @@ import zlib from 'node:zlib';
import { createDeserialize, deserializeArray, serializeArray } from '@crawlee/core';
-const TEST_JSON_PATH = path.join(__dirname, '..', 'shared', 'data', 'sample.json.gz');
+const TEST_JSON_PATH = path.join(import.meta.dirname, '..', 'shared', 'data', 'sample.json.gz');
const gunzip = util.promisify(zlib.gunzip);
diff --git a/test/core/session_pool/session.test.ts b/test/core/session_pool/session.test.ts
index a56a97368570..09439221f1b4 100644
--- a/test/core/session_pool/session.test.ts
+++ b/test/core/session_pool/session.test.ts
@@ -185,17 +185,6 @@ describe('Session - testing session behaviour ', () => {
});
});
- test('should checkStatus work with custom codes', () => {
- session = new Session({ sessionPool });
- const customStatusCodes = [100, 202, 300];
- expect(session.retireOnBlockedStatusCodes(100, customStatusCodes)).toBeTruthy();
- expect(session.retireOnBlockedStatusCodes(101, customStatusCodes)).toBeFalsy();
- expect(session.retireOnBlockedStatusCodes(200, customStatusCodes)).toBeFalsy();
- expect(session.retireOnBlockedStatusCodes(202, customStatusCodes)).toBeTruthy();
- expect(session.retireOnBlockedStatusCodes(300, customStatusCodes)).toBeTruthy();
- expect(session.retireOnBlockedStatusCodes(400, customStatusCodes)).toBeFalsy();
- });
-
test('setCookies should work', () => {
const url = 'https://example.com';
const cookies = [
diff --git a/test/core/session_pool/session_pool.test.ts b/test/core/session_pool/session_pool.test.ts
index 7ab17395cc45..5f8af2bba90b 100644
--- a/test/core/session_pool/session_pool.test.ts
+++ b/test/core/session_pool/session_pool.test.ts
@@ -1,6 +1,6 @@
import { Configuration, EventType, KeyValueStore, Session, SessionPool } from '@crawlee/core';
import { entries } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import { Log } from '@apify/log';
diff --git a/test/core/sitemap_request_list.test.ts b/test/core/sitemap_request_list.test.ts
index 72cc499c90cd..aff32a13f248 100644
--- a/test/core/sitemap_request_list.test.ts
+++ b/test/core/sitemap_request_list.test.ts
@@ -6,8 +6,8 @@ import { finished } from 'node:stream/promises';
import { type Request, SitemapRequestList } from '@crawlee/core';
import { sleep } from '@crawlee/utils';
import express from 'express';
-import { startExpressAppPromise } from 'test/shared/_helper';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { startExpressAppPromise } from 'test/shared/_helper.js';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
// Express server for serving sitemaps
let url = 'http://localhost';
@@ -274,8 +274,8 @@ describe('SitemapRequestList', () => {
}
expect(list.handledCount()).toBe(2);
- expect(list.isFinished()).resolves.toBe(true);
- expect(list.fetchNextRequest()).resolves.toBe(null);
+ await expect(list.isFinished()).resolves.toBe(true);
+ await expect(list.fetchNextRequest()).resolves.toBe(null);
});
test('globs filtering works', async () => {
@@ -348,7 +348,7 @@ describe('SitemapRequestList', () => {
expect(secondBatch).toHaveLength(5);
- expect(list.isFinished()).resolves.toBe(true);
+ await expect(list.isFinished()).resolves.toBe(true);
expect(list.handledCount()).toBe(7);
});
@@ -359,7 +359,7 @@ describe('SitemapRequestList', () => {
await list.markRequestHandled(request);
}
- expect(list.isFinished()).resolves.toBe(true);
+ await expect(list.isFinished()).resolves.toBe(true);
expect(list.handledCount()).toBe(7);
});
@@ -378,7 +378,7 @@ describe('SitemapRequestList', () => {
await list.markRequestHandled(request);
}
- expect(list.isFinished()).resolves.toBe(true);
+ await expect(list.isFinished()).resolves.toBe(true);
expect(list.isSitemapFullyLoaded()).toBe(false);
expect(list.handledCount()).toBe(2);
});
@@ -393,7 +393,7 @@ describe('SitemapRequestList', () => {
await list.markRequestHandled(request);
}
- expect(list.isFinished()).resolves.toBe(true);
+ await expect(list.isFinished()).resolves.toBe(true);
expect(list.isSitemapFullyLoaded()).toBe(false);
expect(list.handledCount()).toBe(2);
});
@@ -410,7 +410,7 @@ describe('SitemapRequestList', () => {
await sleep(50);
- expect(list.isEmpty()).resolves.toBe(false);
+ await expect(list.isEmpty()).resolves.toBe(false);
await list.persistState();
}
diff --git a/test/core/storages/dataset.test.ts b/test/core/storages/dataset.test.ts
index 646969c5ef3c..af9919cdb1ad 100644
--- a/test/core/storages/dataset.test.ts
+++ b/test/core/storages/dataset.test.ts
@@ -1,6 +1,6 @@
import { checkAndSerialize, chunkBySize, Configuration, Dataset, KeyValueStore } from '@crawlee/core';
import type { Dictionary } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
import { MAX_PAYLOAD_SIZE_BYTES } from '@apify/consts';
diff --git a/test/core/storages/key_value_store.test.ts b/test/core/storages/key_value_store.test.ts
index 0d8bfb97c5d8..54b6ac92e502 100644
--- a/test/core/storages/key_value_store.test.ts
+++ b/test/core/storages/key_value_store.test.ts
@@ -2,7 +2,7 @@ import { PassThrough } from 'node:stream';
import { Configuration, KeyValueStore, maybeStringify } from '@crawlee/core';
import type { Dictionary } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
const localStorageEmulator = new MemoryStorageEmulator();
diff --git a/test/core/storages/request_queue.test.ts b/test/core/storages/request_queue.test.ts
index f35a7ccbb3bd..b936acc2dfe9 100644
--- a/test/core/storages/request_queue.test.ts
+++ b/test/core/storages/request_queue.test.ts
@@ -10,13 +10,13 @@ import {
RequestQueueV2,
STORAGE_CONSISTENCY_DELAY_MILLIS,
} from '@crawlee/core';
-import type { gotScraping } from '@crawlee/utils';
import { sleep } from '@crawlee/utils';
+import { gotScraping } from 'got-scraping';
import type { MockedFunction } from 'vitest';
-import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
-vitest.mock('@crawlee/utils/src/internals/gotScraping', async () => {
+vitest.mock('got-scraping', async () => {
return {
gotScraping: vitest.fn(),
};
@@ -25,8 +25,6 @@ vitest.mock('@crawlee/utils/src/internals/gotScraping', async () => {
let gotScrapingSpy: MockedFunction;
beforeAll(async () => {
- // @ts-ignore for some reason, this fails when the project is not built :/
- const { gotScraping } = await import('@crawlee/utils');
gotScrapingSpy = vitest.mocked(gotScraping);
});
diff --git a/test/core/storages/utils.test.ts b/test/core/storages/utils.test.ts
index 8a8a41f80f25..84ea9a9801e4 100644
--- a/test/core/storages/utils.test.ts
+++ b/test/core/storages/utils.test.ts
@@ -1,6 +1,6 @@
import type { Dictionary } from '@crawlee/core';
import { Configuration, KeyValueStore, useState } from '@crawlee/core';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator';
+import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
describe('useState', () => {
const emulator = new MemoryStorageEmulator();
diff --git a/test/e2e/.eslintrc.json b/test/e2e/.eslintrc.json
deleted file mode 100644
index 43153b0c7fdf..000000000000
--- a/test/e2e/.eslintrc.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "root": true,
- "extends": ["@apify/eslint-config-ts", "prettier"],
- "parserOptions": {
- "project": null,
- "ecmaVersion": 2022
- },
- "ignorePatterns": ["node_modules", "dist", "**/*.d.ts"],
- "rules": {
- "@typescript-eslint/ban-ts-comment": 0,
- "import/extensions": 0,
- "import/no-extraneous-dependencies": 0
- }
-}
diff --git a/test/e2e/adaptive-playwright-robots-file/actor/Dockerfile b/test/e2e/adaptive-playwright-robots-file/actor/Dockerfile
index f5f5c882eaca..193a737cc14e 100644
--- a/test/e2e/adaptive-playwright-robots-file/actor/Dockerfile
+++ b/test/e2e/adaptive-playwright-robots-file/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/adaptive-playwright-robots-file/actor/package.json b/test/e2e/adaptive-playwright-robots-file/actor/package.json
index 144e37179c96..5845b91c72bc 100644
--- a/test/e2e/adaptive-playwright-robots-file/actor/package.json
+++ b/test/e2e/adaptive-playwright-robots-file/actor/package.json
@@ -4,7 +4,7 @@
"description": "Adaptive Playwright Test - Robots file",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/adaptive-playwright-robots-file/test.mjs b/test/e2e/adaptive-playwright-robots-file/test.mjs
index 9edc578f3585..24d4ff294265 100644
--- a/test/e2e/adaptive-playwright-robots-file/test.mjs
+++ b/test/e2e/adaptive-playwright-robots-file/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/automatic-persist-value/actor/Dockerfile b/test/e2e/automatic-persist-value/actor/Dockerfile
index 36afd80b9648..28fbfd65ef4d 100644
--- a/test/e2e/automatic-persist-value/actor/Dockerfile
+++ b/test/e2e/automatic-persist-value/actor/Dockerfile
@@ -1,8 +1,9 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
+RUN rm -r node_modules
RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update --no-audit \
@@ -11,6 +12,7 @@ RUN npm --quiet set progress=false \
&& echo "Node.js version:" \
&& node --version \
&& echo "NPM version:" \
- && npm --version
+ && npm --version \
+ && npm update
COPY . ./
diff --git a/test/e2e/automatic-persist-value/actor/package.json b/test/e2e/automatic-persist-value/actor/package.json
index 1c6c17d01961..b68600ce434e 100644
--- a/test/e2e/automatic-persist-value/actor/package.json
+++ b/test/e2e/automatic-persist-value/actor/package.json
@@ -4,7 +4,7 @@
"description": "Key-Value Store - Automatic Persist Value Test",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/core": "file:./packages/core",
"@crawlee/memory-storage": "file:./packages/memory-storage",
@@ -15,6 +15,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/automatic-persist-value/test.mjs b/test/e2e/automatic-persist-value/test.mjs
index 329ac0574f80..ee4cf300d8b3 100644
--- a/test/e2e/automatic-persist-value/test.mjs
+++ b/test/e2e/automatic-persist-value/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, expect, getActorTestDir, runActor } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/autoscaling-max-tasks-per-minute/actor/Dockerfile b/test/e2e/autoscaling-max-tasks-per-minute/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/autoscaling-max-tasks-per-minute/actor/Dockerfile
+++ b/test/e2e/autoscaling-max-tasks-per-minute/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/autoscaling-max-tasks-per-minute/actor/package.json b/test/e2e/autoscaling-max-tasks-per-minute/actor/package.json
index 42a271def376..5df5f6f18ce5 100644
--- a/test/e2e/autoscaling-max-tasks-per-minute/actor/package.json
+++ b/test/e2e/autoscaling-max-tasks-per-minute/actor/package.json
@@ -4,7 +4,7 @@
"description": "Autoscaling Pool Test - Max Tasks per Minute",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/core": "file:./packages/core",
"@crawlee/memory-storage": "file:./packages/memory-storage",
@@ -15,6 +15,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/autoscaling-max-tasks-per-minute/test.mjs b/test/e2e/autoscaling-max-tasks-per-minute/test.mjs
index 3979c69e0309..1b1182c0cb2c 100644
--- a/test/e2e/autoscaling-max-tasks-per-minute/test.mjs
+++ b/test/e2e/autoscaling-max-tasks-per-minute/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, expect, getActorTestDir, runActor } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/camoufox-cloudflare/actor/Dockerfile b/test/e2e/camoufox-cloudflare/actor/Dockerfile
index b0215803a48d..ed4c197df80f 100644
--- a/test/e2e/camoufox-cloudflare/actor/Dockerfile
+++ b/test/e2e/camoufox-cloudflare/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node-playwright-chrome:20-1.50.1-beta AS builder
+FROM apify/actor-node-playwright-chrome:22-beta AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit --ignore-scripts \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-1.50.1-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/camoufox-cloudflare/actor/package.json b/test/e2e/camoufox-cloudflare/actor/package.json
index b2776bb8e175..70c9a52b91a1 100644
--- a/test/e2e/camoufox-cloudflare/actor/package.json
+++ b/test/e2e/camoufox-cloudflare/actor/package.json
@@ -4,7 +4,7 @@
"description": "Playwright Test - Camoufox - Solving Cloudflare Challenge",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -20,6 +20,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/camoufox-cloudflare/test.mjs b/test/e2e/camoufox-cloudflare/test.mjs
index 635f6fe27402..867deeeab03f 100644
--- a/test/e2e/camoufox-cloudflare/test.mjs
+++ b/test/e2e/camoufox-cloudflare/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, skipTest } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, skipTest } from '../tools.mjs';
if (process.env.STORAGE_IMPLEMENTATION === 'PLATFORM') {
await skipTest('TODO fails to build the docker image now');
diff --git a/test/e2e/cheerio-curl-impersonate-ts/actor/Dockerfile b/test/e2e/cheerio-curl-impersonate-ts/actor/Dockerfile
index 91fadb14630b..b6068fa63198 100644
--- a/test/e2e/cheerio-curl-impersonate-ts/actor/Dockerfile
+++ b/test/e2e/cheerio-curl-impersonate-ts/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
diff --git a/test/e2e/cheerio-curl-impersonate-ts/actor/package.json b/test/e2e/cheerio-curl-impersonate-ts/actor/package.json
index 8e788a918600..12b6fbbfcfe0 100644
--- a/test/e2e/cheerio-curl-impersonate-ts/actor/package.json
+++ b/test/e2e/cheerio-curl-impersonate-ts/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - curl-impersonate HTTP client",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -20,6 +20,9 @@
"@crawlee/core": "file:./packages/core",
"@crawlee/types": "file:./packages/types",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"devDependencies": {
diff --git a/test/e2e/cheerio-curl-impersonate-ts/test.mjs b/test/e2e/cheerio-curl-impersonate-ts/test.mjs
index 3ff4628a3aed..29ea52e232b7 100644
--- a/test/e2e/cheerio-curl-impersonate-ts/test.mjs
+++ b/test/e2e/cheerio-curl-impersonate-ts/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
@@ -10,12 +10,12 @@ await expect(datasetItems.length === 1, 'A dataset item was pushed');
const result = datasetItems[0];
-expect(result.body.length > 1000, 'HTML response is not empty');
-expect(result.title === 'httpbin.org', 'HTML title is correct');
-expect(
+await expect(result.body.length > 1000, 'HTML response is not empty');
+await expect(result.title === 'httpbin.org', 'HTML title is correct');
+await expect(
result.userAgent ===
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
'User agent is chrome',
);
-expect(result.uuidJsonResponse.uuid !== undefined, 'JSON response contains UUID');
-expect(JSON.parse(result.uuidTextResponse).uuid !== undefined, 'Text response contains UUID');
+await expect(result.uuidJsonResponse.uuid !== undefined, 'JSON response contains UUID');
+await expect(JSON.parse(result.uuidTextResponse).uuid !== undefined, 'Text response contains UUID');
diff --git a/test/e2e/cheerio-default-ts/actor/Dockerfile b/test/e2e/cheerio-default-ts/actor/Dockerfile
index 59ba4ae8b5e8..943b8d1855ee 100644
--- a/test/e2e/cheerio-default-ts/actor/Dockerfile
+++ b/test/e2e/cheerio-default-ts/actor/Dockerfile
@@ -1,5 +1,5 @@
# using multistage build, as we need dev deps to build the TS source code
-FROM apify/actor-node:20-beta AS builder
+FROM apify/actor-node:22-beta AS builder
# copy all files, install all dependencies (including dev deps) and build the project
COPY . ./
@@ -7,7 +7,7 @@ RUN npm install --include=dev \
&& npm run build
# create final image
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
# copy only necessary files
COPY --from=builder /usr/src/app/packages ./packages
COPY --from=builder /usr/src/app/package.json ./
diff --git a/test/e2e/cheerio-default-ts/actor/package.json b/test/e2e/cheerio-default-ts/actor/package.json
index d0dfc7875eca..406342a62427 100644
--- a/test/e2e/cheerio-default-ts/actor/package.json
+++ b/test/e2e/cheerio-default-ts/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - TypeScript",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -19,6 +19,9 @@
"@crawlee/core": "file:./packages/core",
"@crawlee/types": "file:./packages/types",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"devDependencies": {
diff --git a/test/e2e/cheerio-default-ts/test.mjs b/test/e2e/cheerio-default-ts/test.mjs
index bf2015b4e16e..b843e87e99ec 100644
--- a/test/e2e/cheerio-default-ts/test.mjs
+++ b/test/e2e/cheerio-default-ts/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-default/actor/Dockerfile b/test/e2e/cheerio-default/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-default/actor/Dockerfile
+++ b/test/e2e/cheerio-default/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-default/actor/package.json b/test/e2e/cheerio-default/actor/package.json
index 2f90cefb2057..e3c4442b9a7a 100644
--- a/test/e2e/cheerio-default/actor/package.json
+++ b/test/e2e/cheerio-default/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Default",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-default/test.mjs b/test/e2e/cheerio-default/test.mjs
index bf2015b4e16e..b843e87e99ec 100644
--- a/test/e2e/cheerio-default/test.mjs
+++ b/test/e2e/cheerio-default/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-enqueue-links-base/actor/Dockerfile b/test/e2e/cheerio-enqueue-links-base/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-enqueue-links-base/actor/Dockerfile
+++ b/test/e2e/cheerio-enqueue-links-base/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-enqueue-links-base/actor/package.json b/test/e2e/cheerio-enqueue-links-base/actor/package.json
index 9c4711b45a0f..15ec65535651 100644
--- a/test/e2e/cheerio-enqueue-links-base/actor/package.json
+++ b/test/e2e/cheerio-enqueue-links-base/actor/package.json
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-enqueue-links-base/test.mjs b/test/e2e/cheerio-enqueue-links-base/test.mjs
index 502745fdd630..151d89849e25 100644
--- a/test/e2e/cheerio-enqueue-links-base/test.mjs
+++ b/test/e2e/cheerio-enqueue-links-base/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-enqueue-links/actor/Dockerfile b/test/e2e/cheerio-enqueue-links/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-enqueue-links/actor/Dockerfile
+++ b/test/e2e/cheerio-enqueue-links/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-enqueue-links/actor/package.json b/test/e2e/cheerio-enqueue-links/actor/package.json
index cfda48bd8964..df90ff94298f 100644
--- a/test/e2e/cheerio-enqueue-links/actor/package.json
+++ b/test/e2e/cheerio-enqueue-links/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Enqueue Links",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-enqueue-links/test.mjs b/test/e2e/cheerio-enqueue-links/test.mjs
index d93ac0d4a114..2d0009abc0fa 100644
--- a/test/e2e/cheerio-enqueue-links/test.mjs
+++ b/test/e2e/cheerio-enqueue-links/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-error-snapshot/actor/Dockerfile b/test/e2e/cheerio-error-snapshot/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-error-snapshot/actor/Dockerfile
+++ b/test/e2e/cheerio-error-snapshot/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-error-snapshot/actor/package.json b/test/e2e/cheerio-error-snapshot/actor/package.json
index 988e6e0806c8..05443ecea02c 100644
--- a/test/e2e/cheerio-error-snapshot/actor/package.json
+++ b/test/e2e/cheerio-error-snapshot/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Should save errors snapshots",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-error-snapshot/test.mjs b/test/e2e/cheerio-error-snapshot/test.mjs
index 912f6a7bf24d..0b857750a2fc 100644
--- a/test/e2e/cheerio-error-snapshot/test.mjs
+++ b/test/e2e/cheerio-error-snapshot/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, hasNestedKey } from '../tools.mjs';
+import { expect, getActorTestDir, hasNestedKey, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-ignore-ssl-errors/actor/Dockerfile b/test/e2e/cheerio-ignore-ssl-errors/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-ignore-ssl-errors/actor/Dockerfile
+++ b/test/e2e/cheerio-ignore-ssl-errors/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-ignore-ssl-errors/actor/package.json b/test/e2e/cheerio-ignore-ssl-errors/actor/package.json
index bff7e89fe58c..b29519165857 100644
--- a/test/e2e/cheerio-ignore-ssl-errors/actor/package.json
+++ b/test/e2e/cheerio-ignore-ssl-errors/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Ignore SSL Errors",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-ignore-ssl-errors/test.mjs b/test/e2e/cheerio-ignore-ssl-errors/test.mjs
index 235afc5f1717..2325ccba28d5 100644
--- a/test/e2e/cheerio-ignore-ssl-errors/test.mjs
+++ b/test/e2e/cheerio-ignore-ssl-errors/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-impit-ts/actor/Dockerfile b/test/e2e/cheerio-impit-ts/actor/Dockerfile
index ed192b5e137b..45a644a93aa9 100644
--- a/test/e2e/cheerio-impit-ts/actor/Dockerfile
+++ b/test/e2e/cheerio-impit-ts/actor/Dockerfile
@@ -1,5 +1,5 @@
# using multistage build, as we need dev deps to build the TS source code
-FROM apify/actor-node:20-beta AS builder
+FROM apify/actor-node:22-beta AS builder
# copy all files, install all dependencies (including dev deps) and build the project
COPY . ./
@@ -7,7 +7,7 @@ RUN npm install --include=dev \
&& npm run build
# create final image
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
# copy only necessary files
COPY --from=builder /usr/src/app/packages ./packages
COPY --from=builder /usr/src/app/package.json ./
diff --git a/test/e2e/cheerio-impit-ts/actor/package.json b/test/e2e/cheerio-impit-ts/actor/package.json
index 03ccac5e739f..ba97a80810a6 100644
--- a/test/e2e/cheerio-impit-ts/actor/package.json
+++ b/test/e2e/cheerio-impit-ts/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Impit HTTP client",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -20,6 +20,9 @@
"@crawlee/core": "file:./packages/core",
"@crawlee/types": "file:./packages/types",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"devDependencies": {
diff --git a/test/e2e/cheerio-impit-ts/test.mjs b/test/e2e/cheerio-impit-ts/test.mjs
index 3ee48b537f08..e5f621adc7db 100644
--- a/test/e2e/cheerio-impit-ts/test.mjs
+++ b/test/e2e/cheerio-impit-ts/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
@@ -10,8 +10,8 @@ await expect(datasetItems.length === 1, 'A dataset item was pushed');
const result = datasetItems[0];
-expect(result.body.length > 1000, 'HTML response is not empty');
-expect(result.title === 'httpbin.org', 'HTML title is correct');
-expect(/Gecko\/\d{8} Firefox\/\d{2}/.test(result.userAgent), 'Impit correctly spoofs Firefox');
-expect(result.uuidJsonResponse.uuid !== undefined, 'JSON response contains UUID');
-expect(JSON.parse(result.uuidTextResponse).uuid !== undefined, 'Text response contains UUID');
+await expect(result.body.length > 1000, 'HTML response is not empty');
+await expect(result.title === 'httpbin.org', 'HTML title is correct');
+await expect(/Gecko\/\d{8} Firefox\/\d{2}/.test(result.userAgent), 'Impit correctly spoofs Firefox');
+await expect(result.uuidJsonResponse.uuid !== undefined, 'JSON response contains UUID');
+await expect(JSON.parse(result.uuidTextResponse).uuid !== undefined, 'Text response contains UUID');
diff --git a/test/e2e/cheerio-initial-cookies/actor/Dockerfile b/test/e2e/cheerio-initial-cookies/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-initial-cookies/actor/Dockerfile
+++ b/test/e2e/cheerio-initial-cookies/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-initial-cookies/actor/package.json b/test/e2e/cheerio-initial-cookies/actor/package.json
index 09396b497347..d515793a86b9 100644
--- a/test/e2e/cheerio-initial-cookies/actor/package.json
+++ b/test/e2e/cheerio-initial-cookies/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Initial Cookies",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-initial-cookies/test.mjs b/test/e2e/cheerio-initial-cookies/test.mjs
index e09a30125dde..136a7d03213b 100644
--- a/test/e2e/cheerio-initial-cookies/test.mjs
+++ b/test/e2e/cheerio-initial-cookies/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-max-requests/actor/Dockerfile b/test/e2e/cheerio-max-requests/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-max-requests/actor/Dockerfile
+++ b/test/e2e/cheerio-max-requests/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-max-requests/actor/package.json b/test/e2e/cheerio-max-requests/actor/package.json
index 454f2a94db6b..e593417b294f 100644
--- a/test/e2e/cheerio-max-requests/actor/package.json
+++ b/test/e2e/cheerio-max-requests/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Max Requests Per Crawl",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-max-requests/test.mjs b/test/e2e/cheerio-max-requests/test.mjs
index f9faf3d6e1f6..f3b80998fc2d 100644
--- a/test/e2e/cheerio-max-requests/test.mjs
+++ b/test/e2e/cheerio-max-requests/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, expect, validateDataset, getActorTestDir, runActor } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-page-info/actor/Dockerfile b/test/e2e/cheerio-page-info/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-page-info/actor/Dockerfile
+++ b/test/e2e/cheerio-page-info/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-page-info/actor/package.json b/test/e2e/cheerio-page-info/actor/package.json
index a3e85e5b8b35..d0fc18b7e438 100644
--- a/test/e2e/cheerio-page-info/actor/package.json
+++ b/test/e2e/cheerio-page-info/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Page Info",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-page-info/test.mjs b/test/e2e/cheerio-page-info/test.mjs
index 6ed16a4f6b72..db70e11af5a7 100644
--- a/test/e2e/cheerio-page-info/test.mjs
+++ b/test/e2e/cheerio-page-info/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, expect, validateDataset, getActorTestDir, runActor } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-request-queue-v2/actor/Dockerfile b/test/e2e/cheerio-request-queue-v2/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-request-queue-v2/actor/Dockerfile
+++ b/test/e2e/cheerio-request-queue-v2/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-request-queue-v2/actor/package.json b/test/e2e/cheerio-request-queue-v2/actor/package.json
index 59c5f37e61c4..3269ce46ceba 100644
--- a/test/e2e/cheerio-request-queue-v2/actor/package.json
+++ b/test/e2e/cheerio-request-queue-v2/actor/package.json
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-request-queue-v2/test.mjs b/test/e2e/cheerio-request-queue-v2/test.mjs
index bf2015b4e16e..b843e87e99ec 100644
--- a/test/e2e/cheerio-request-queue-v2/test.mjs
+++ b/test/e2e/cheerio-request-queue-v2/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-robots-file/actor/Dockerfile b/test/e2e/cheerio-robots-file/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-robots-file/actor/Dockerfile
+++ b/test/e2e/cheerio-robots-file/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-robots-file/actor/package.json b/test/e2e/cheerio-robots-file/actor/package.json
index 8751275083d1..fabec5416233 100644
--- a/test/e2e/cheerio-robots-file/actor/package.json
+++ b/test/e2e/cheerio-robots-file/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Test - Robots file",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-robots-file/test.mjs b/test/e2e/cheerio-robots-file/test.mjs
index a607b32bb974..ee7123ef1479 100644
--- a/test/e2e/cheerio-robots-file/test.mjs
+++ b/test/e2e/cheerio-robots-file/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-stop-resume-ts/actor/Dockerfile b/test/e2e/cheerio-stop-resume-ts/actor/Dockerfile
index 59ba4ae8b5e8..943b8d1855ee 100644
--- a/test/e2e/cheerio-stop-resume-ts/actor/Dockerfile
+++ b/test/e2e/cheerio-stop-resume-ts/actor/Dockerfile
@@ -1,5 +1,5 @@
# using multistage build, as we need dev deps to build the TS source code
-FROM apify/actor-node:20-beta AS builder
+FROM apify/actor-node:22-beta AS builder
# copy all files, install all dependencies (including dev deps) and build the project
COPY . ./
@@ -7,7 +7,7 @@ RUN npm install --include=dev \
&& npm run build
# create final image
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
# copy only necessary files
COPY --from=builder /usr/src/app/packages ./packages
COPY --from=builder /usr/src/app/package.json ./
diff --git a/test/e2e/cheerio-stop-resume-ts/actor/package.json b/test/e2e/cheerio-stop-resume-ts/actor/package.json
index cf307b836523..59047e938259 100644
--- a/test/e2e/cheerio-stop-resume-ts/actor/package.json
+++ b/test/e2e/cheerio-stop-resume-ts/actor/package.json
@@ -4,7 +4,7 @@
"description": "Crawler Stop-Resume Test - TypeScript",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -19,6 +19,9 @@
"@crawlee/core": "file:./packages/core",
"@crawlee/types": "file:./packages/types",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"devDependencies": {
diff --git a/test/e2e/cheerio-stop-resume-ts/test.mjs b/test/e2e/cheerio-stop-resume-ts/test.mjs
index b118f15ad612..8beaf8681c80 100644
--- a/test/e2e/cheerio-stop-resume-ts/test.mjs
+++ b/test/e2e/cheerio-stop-resume-ts/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/cheerio-throw-on-ssl-errors/actor/Dockerfile b/test/e2e/cheerio-throw-on-ssl-errors/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/cheerio-throw-on-ssl-errors/actor/Dockerfile
+++ b/test/e2e/cheerio-throw-on-ssl-errors/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/cheerio-throw-on-ssl-errors/actor/package.json b/test/e2e/cheerio-throw-on-ssl-errors/actor/package.json
index 3a0a07ab904a..717c7cfb4e0d 100644
--- a/test/e2e/cheerio-throw-on-ssl-errors/actor/package.json
+++ b/test/e2e/cheerio-throw-on-ssl-errors/actor/package.json
@@ -4,7 +4,7 @@
"description": "Cheerio Crawler Test - Should throw on SSL Errors",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/cheerio-throw-on-ssl-errors/test.mjs b/test/e2e/cheerio-throw-on-ssl-errors/test.mjs
index a482ed016752..dcb3d14d92cb 100644
--- a/test/e2e/cheerio-throw-on-ssl-errors/test.mjs
+++ b/test/e2e/cheerio-throw-on-ssl-errors/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/input-json5/actor/Dockerfile b/test/e2e/input-json5/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/input-json5/actor/Dockerfile
+++ b/test/e2e/input-json5/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/input-json5/actor/package.json b/test/e2e/input-json5/actor/package.json
index e73dbc423c14..f86996cd5a69 100644
--- a/test/e2e/input-json5/actor/package.json
+++ b/test/e2e/input-json5/actor/package.json
@@ -4,7 +4,7 @@
"description": "JSON5 input test",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
},
@@ -12,6 +12,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/input-json5/test.mjs b/test/e2e/input-json5/test.mjs
index b2444904b5d4..133953b3dc14 100644
--- a/test/e2e/input-json5/test.mjs
+++ b/test/e2e/input-json5/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, skipTest } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, skipTest } from '../tools.mjs';
if (process.env.STORAGE_IMPLEMENTATION === 'PLATFORM') {
await skipTest('not supported on platform');
diff --git a/test/e2e/jsdom-default-ts/actor/Dockerfile b/test/e2e/jsdom-default-ts/actor/Dockerfile
index 59ba4ae8b5e8..943b8d1855ee 100644
--- a/test/e2e/jsdom-default-ts/actor/Dockerfile
+++ b/test/e2e/jsdom-default-ts/actor/Dockerfile
@@ -1,5 +1,5 @@
# using multistage build, as we need dev deps to build the TS source code
-FROM apify/actor-node:20-beta AS builder
+FROM apify/actor-node:22-beta AS builder
# copy all files, install all dependencies (including dev deps) and build the project
COPY . ./
@@ -7,7 +7,7 @@ RUN npm install --include=dev \
&& npm run build
# create final image
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
# copy only necessary files
COPY --from=builder /usr/src/app/packages ./packages
COPY --from=builder /usr/src/app/package.json ./
diff --git a/test/e2e/jsdom-default-ts/actor/package.json b/test/e2e/jsdom-default-ts/actor/package.json
index cefb319689d8..649b1820997f 100644
--- a/test/e2e/jsdom-default-ts/actor/package.json
+++ b/test/e2e/jsdom-default-ts/actor/package.json
@@ -4,7 +4,7 @@
"description": "JSDOM Crawler Test - TypeScript",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -19,6 +19,9 @@
"@crawlee/core": "file:./packages/core",
"@crawlee/types": "file:./packages/types",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"devDependencies": {
diff --git a/test/e2e/jsdom-default-ts/test.mjs b/test/e2e/jsdom-default-ts/test.mjs
index bf2015b4e16e..b843e87e99ec 100644
--- a/test/e2e/jsdom-default-ts/test.mjs
+++ b/test/e2e/jsdom-default-ts/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/jsdom-react-ts/actor/Dockerfile b/test/e2e/jsdom-react-ts/actor/Dockerfile
index 59ba4ae8b5e8..943b8d1855ee 100644
--- a/test/e2e/jsdom-react-ts/actor/Dockerfile
+++ b/test/e2e/jsdom-react-ts/actor/Dockerfile
@@ -1,5 +1,5 @@
# using multistage build, as we need dev deps to build the TS source code
-FROM apify/actor-node:20-beta AS builder
+FROM apify/actor-node:22-beta AS builder
# copy all files, install all dependencies (including dev deps) and build the project
COPY . ./
@@ -7,7 +7,7 @@ RUN npm install --include=dev \
&& npm run build
# create final image
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
# copy only necessary files
COPY --from=builder /usr/src/app/packages ./packages
COPY --from=builder /usr/src/app/package.json ./
diff --git a/test/e2e/jsdom-react-ts/actor/package.json b/test/e2e/jsdom-react-ts/actor/package.json
index b0479560ea63..519a6df912dd 100644
--- a/test/e2e/jsdom-react-ts/actor/package.json
+++ b/test/e2e/jsdom-react-ts/actor/package.json
@@ -4,7 +4,7 @@
"description": "JSDOM Crawler Test - React - TypeScript",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -19,6 +19,9 @@
"@crawlee/core": "file:./packages/core",
"@crawlee/types": "file:./packages/types",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"devDependencies": {
diff --git a/test/e2e/jsdom-react-ts/test.mjs b/test/e2e/jsdom-react-ts/test.mjs
index 0b89623a5e04..69c2652247ce 100644
--- a/test/e2e/jsdom-react-ts/test.mjs
+++ b/test/e2e/jsdom-react-ts/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset, skipTest } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, skipTest, validateDataset } from '../tools.mjs';
await skipTest('target site no longer exists');
diff --git a/test/e2e/kv-open-return-storage-object/actor/Dockerfile b/test/e2e/kv-open-return-storage-object/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/kv-open-return-storage-object/actor/Dockerfile
+++ b/test/e2e/kv-open-return-storage-object/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/kv-open-return-storage-object/actor/package.json b/test/e2e/kv-open-return-storage-object/actor/package.json
index f40826ba029f..78f683047cd0 100644
--- a/test/e2e/kv-open-return-storage-object/actor/package.json
+++ b/test/e2e/kv-open-return-storage-object/actor/package.json
@@ -4,7 +4,7 @@
"description": "Key-Value Store - Return storage object on open",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/core": "file:./packages/core",
"@crawlee/memory-storage": "file:./packages/memory-storage",
@@ -15,6 +15,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/kv-open-return-storage-object/test.mjs b/test/e2e/kv-open-return-storage-object/test.mjs
index 83de7b80d32f..87a8300bd440 100644
--- a/test/e2e/kv-open-return-storage-object/test.mjs
+++ b/test/e2e/kv-open-return-storage-object/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, expect, getActorTestDir, runActor } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
/* This test verifies that the storageObject is correctly returned when the KeyValueStore is opened.
* The storageObject is the result of the KeyValueStoreClient.get() method,
diff --git a/test/e2e/linkedom-default-ts/actor/Dockerfile b/test/e2e/linkedom-default-ts/actor/Dockerfile
index 59ba4ae8b5e8..943b8d1855ee 100644
--- a/test/e2e/linkedom-default-ts/actor/Dockerfile
+++ b/test/e2e/linkedom-default-ts/actor/Dockerfile
@@ -1,5 +1,5 @@
# using multistage build, as we need dev deps to build the TS source code
-FROM apify/actor-node:20-beta AS builder
+FROM apify/actor-node:22-beta AS builder
# copy all files, install all dependencies (including dev deps) and build the project
COPY . ./
@@ -7,7 +7,7 @@ RUN npm install --include=dev \
&& npm run build
# create final image
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
# copy only necessary files
COPY --from=builder /usr/src/app/packages ./packages
COPY --from=builder /usr/src/app/package.json ./
diff --git a/test/e2e/linkedom-default-ts/actor/package.json b/test/e2e/linkedom-default-ts/actor/package.json
index 04796ca89000..d996641fdc87 100644
--- a/test/e2e/linkedom-default-ts/actor/package.json
+++ b/test/e2e/linkedom-default-ts/actor/package.json
@@ -19,6 +19,9 @@
"@crawlee/core": "file:./packages/core",
"@crawlee/types": "file:./packages/types",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"devDependencies": {
diff --git a/test/e2e/linkedom-default-ts/test.mjs b/test/e2e/linkedom-default-ts/test.mjs
index bf2015b4e16e..b843e87e99ec 100644
--- a/test/e2e/linkedom-default-ts/test.mjs
+++ b/test/e2e/linkedom-default-ts/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/migration/actor/Dockerfile b/test/e2e/migration/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/migration/actor/Dockerfile
+++ b/test/e2e/migration/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/migration/actor/main.js b/test/e2e/migration/actor/main.js
index f49dd3be391b..a3ce48163fe0 100644
--- a/test/e2e/migration/actor/main.js
+++ b/test/e2e/migration/actor/main.js
@@ -1,8 +1,9 @@
-import { Worker, workerData } from 'worker_threads';
-import { URL } from 'url';
-import { once } from 'events';
-import { Actor } from 'apify';
+import { once } from 'node:events';
+import { URL } from 'node:url';
+import { Worker, workerData } from 'node:worker_threads';
+
import { CheerioCrawler, Configuration, Dataset } from '@crawlee/cheerio';
+import { Actor } from 'apify';
process.env.CRAWLEE_PURGE_ON_START = '0';
diff --git a/test/e2e/migration/actor/package.json b/test/e2e/migration/actor/package.json
index e604cf209efb..76c97f3369d2 100644
--- a/test/e2e/migration/actor/package.json
+++ b/test/e2e/migration/actor/package.json
@@ -4,7 +4,7 @@
"description": "Migration Test",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/migration/test.mjs b/test/e2e/migration/test.mjs
index a60519eea0ff..a806a51b2737 100644
--- a/test/e2e/migration/test.mjs
+++ b/test/e2e/migration/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/playwright-chromium-experimental-containers/actor/.actor/actor.json b/test/e2e/playwright-chromium-experimental-containers/actor/.actor/actor.json
deleted file mode 100644
index 0be68bf205ad..000000000000
--- a/test/e2e/playwright-chromium-experimental-containers/actor/.actor/actor.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "actorSpecification": 1,
- "name": "test-playwright-chromium-experimental-containers",
- "version": "0.0",
- "buildTag": "latest",
- "env": null
-}
diff --git a/test/e2e/playwright-chromium-experimental-containers/actor/.gitignore b/test/e2e/playwright-chromium-experimental-containers/actor/.gitignore
deleted file mode 100644
index ced7cbfc582d..000000000000
--- a/test/e2e/playwright-chromium-experimental-containers/actor/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.idea
-.DS_Store
-node_modules
-package-lock.json
-apify_storage
-crawlee_storage
-storage
diff --git a/test/e2e/playwright-chromium-experimental-containers/actor/Dockerfile b/test/e2e/playwright-chromium-experimental-containers/actor/Dockerfile
deleted file mode 100644
index 3d3e1b390116..000000000000
--- a/test/e2e/playwright-chromium-experimental-containers/actor/Dockerfile
+++ /dev/null
@@ -1,23 +0,0 @@
-FROM node:20 AS builder
-
-COPY /packages ./packages
-COPY /package*.json ./
-RUN npm --quiet set progress=false \
- && npm install --only=prod --no-optional --no-audit \
- && npm update
-
-FROM apify/actor-node-playwright-chrome:20-beta
-
-RUN rm -r node_modules
-COPY --from=builder /node_modules ./node_modules
-COPY --from=builder /packages ./packages
-COPY --from=builder /package*.json ./
-COPY /.actor ./.actor
-COPY /main.js ./
-
-RUN echo "Installed NPM packages:" \
- && (npm list --only=prod --no-optional --all || true) \
- && echo "Node.js version:" \
- && node --version \
- && echo "NPM version:" \
- && npm --version
diff --git a/test/e2e/playwright-chromium-experimental-containers/actor/main.js b/test/e2e/playwright-chromium-experimental-containers/actor/main.js
deleted file mode 100644
index 887cbb744956..000000000000
--- a/test/e2e/playwright-chromium-experimental-containers/actor/main.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Actor } from 'apify';
-import { Dataset, PlaywrightCrawler } from '@crawlee/playwright';
-
-// fails after update to playwright 1.29.0, looks like issue the chromium extension, maybe the manifest_version 2 vs 3?
-process.exit(404);
-
-const mainOptions = {
- exit: Actor.isAtHome(),
- storage:
- process.env.STORAGE_IMPLEMENTATION === 'LOCAL'
- ? new (await import('@apify/storage-local')).ApifyStorageLocal()
- : undefined,
-};
-
-await Actor.main(async () => {
- const crawler = new PlaywrightCrawler({
- proxyConfiguration: await Actor.createProxyConfiguration(),
- launchContext: {
- experimentalContainers: true,
- },
- preNavigationHooks: [
- (_ctx, goToOptions) => {
- goToOptions.waitUntil = 'networkidle';
- },
- ],
- async requestHandler({ page }) {
- const content = await page.content();
- await Dataset.pushData({ ip: content.match(/"clientIp":\s*"(.*)"/)?.[1] });
- },
- });
-
- await crawler.run(['https://api.apify.com/v2/browser-info?1', 'https://api.apify.com/v2/browser-info?2']);
-}, mainOptions);
diff --git a/test/e2e/playwright-chromium-experimental-containers/actor/package.json b/test/e2e/playwright-chromium-experimental-containers/actor/package.json
deleted file mode 100644
index 9ea1515b59d1..000000000000
--- a/test/e2e/playwright-chromium-experimental-containers/actor/package.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "test-playwright-chromium-experimental-containers",
- "version": "0.0.1",
- "description": "Playwright Test - Chromium - Experimental containers",
- "dependencies": {
- "apify": "next",
- "@apify/storage-local": "^2.1.3",
- "@crawlee/basic": "file:./packages/basic-crawler",
- "@crawlee/browser": "file:./packages/browser-crawler",
- "@crawlee/browser-pool": "file:./packages/browser-pool",
- "@crawlee/core": "file:./packages/core",
- "@crawlee/memory-storage": "file:./packages/memory-storage",
- "@crawlee/playwright": "file:./packages/playwright-crawler",
- "@crawlee/types": "file:./packages/types",
- "@crawlee/utils": "file:./packages/utils",
- "playwright": "*"
- },
- "overrides": {
- "apify": {
- "@crawlee/core": "file:./packages/core",
- "@crawlee/utils": "file:./packages/utils"
- }
- },
- "scripts": {
- "start": "node main.js"
- },
- "type": "module",
- "license": "ISC"
-}
diff --git a/test/e2e/playwright-chromium-experimental-containers/test.mjs b/test/e2e/playwright-chromium-experimental-containers/test.mjs
deleted file mode 100644
index ffd167ec7c10..000000000000
--- a/test/e2e/playwright-chromium-experimental-containers/test.mjs
+++ /dev/null
@@ -1,18 +0,0 @@
-import { initialize, getActorTestDir, runActor, expect, skipTest } from '../tools.mjs';
-
-await skipTest('on hold');
-
-const testActorDirname = getActorTestDir(import.meta.url);
-await initialize(testActorDirname);
-
-const { datasetItems } = await runActor(testActorDirname, 16384);
-
-await expect(datasetItems.length > 0, 'Has dataset items');
-
-const ips = new Set();
-
-for (const { ip } of datasetItems) {
- await expect(!ips.has(ip), 'Unique proxy ip');
-
- ips.add(ip);
-}
diff --git a/test/e2e/playwright-default/actor/Dockerfile b/test/e2e/playwright-default/actor/Dockerfile
index 3d3e1b390116..e079f1c7a563 100644
--- a/test/e2e/playwright-default/actor/Dockerfile
+++ b/test/e2e/playwright-default/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/playwright-default/actor/package.json b/test/e2e/playwright-default/actor/package.json
index 288a038839ae..fc18843ae2f3 100644
--- a/test/e2e/playwright-default/actor/package.json
+++ b/test/e2e/playwright-default/actor/package.json
@@ -4,7 +4,7 @@
"description": "Playwright Test - Default",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/playwright-default/test.mjs b/test/e2e/playwright-default/test.mjs
index b82824ae1941..558c589f5fdf 100644
--- a/test/e2e/playwright-default/test.mjs
+++ b/test/e2e/playwright-default/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/playwright-enqueue-links-base/actor/Dockerfile b/test/e2e/playwright-enqueue-links-base/actor/Dockerfile
index 3d3e1b390116..e079f1c7a563 100644
--- a/test/e2e/playwright-enqueue-links-base/actor/Dockerfile
+++ b/test/e2e/playwright-enqueue-links-base/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/playwright-enqueue-links-base/actor/package.json b/test/e2e/playwright-enqueue-links-base/actor/package.json
index bae23adab47a..d94c327dab96 100644
--- a/test/e2e/playwright-enqueue-links-base/actor/package.json
+++ b/test/e2e/playwright-enqueue-links-base/actor/package.json
@@ -20,6 +20,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/playwright-enqueue-links-base/test.mjs b/test/e2e/playwright-enqueue-links-base/test.mjs
index e07a7890a850..e3f25d642317 100644
--- a/test/e2e/playwright-enqueue-links-base/test.mjs
+++ b/test/e2e/playwright-enqueue-links-base/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, skipTest } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, skipTest } from '../tools.mjs';
await skipTest('too flaky');
diff --git a/test/e2e/playwright-enqueue-links/actor/Dockerfile b/test/e2e/playwright-enqueue-links/actor/Dockerfile
index 3d3e1b390116..e079f1c7a563 100644
--- a/test/e2e/playwright-enqueue-links/actor/Dockerfile
+++ b/test/e2e/playwright-enqueue-links/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/playwright-enqueue-links/actor/package.json b/test/e2e/playwright-enqueue-links/actor/package.json
index 57f57a943adb..c33e2b2be77a 100644
--- a/test/e2e/playwright-enqueue-links/actor/package.json
+++ b/test/e2e/playwright-enqueue-links/actor/package.json
@@ -4,7 +4,7 @@
"description": "Playwright Test - Enqueue Links",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -20,6 +20,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/playwright-enqueue-links/test.mjs b/test/e2e/playwright-enqueue-links/test.mjs
index d088b70d1f32..7dea0d94630c 100644
--- a/test/e2e/playwright-enqueue-links/test.mjs
+++ b/test/e2e/playwright-enqueue-links/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/playwright-firefox-experimental-containers/actor/.actor/actor.json b/test/e2e/playwright-firefox-experimental-containers/actor/.actor/actor.json
deleted file mode 100644
index d1bf754a588a..000000000000
--- a/test/e2e/playwright-firefox-experimental-containers/actor/.actor/actor.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "actorSpecification": 1,
- "name": "test-playwright-firefox-experimental-containers",
- "version": "0.0",
- "buildTag": "latest",
- "env": null
-}
diff --git a/test/e2e/playwright-firefox-experimental-containers/actor/.gitignore b/test/e2e/playwright-firefox-experimental-containers/actor/.gitignore
deleted file mode 100644
index ced7cbfc582d..000000000000
--- a/test/e2e/playwright-firefox-experimental-containers/actor/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.idea
-.DS_Store
-node_modules
-package-lock.json
-apify_storage
-crawlee_storage
-storage
diff --git a/test/e2e/playwright-firefox-experimental-containers/actor/Dockerfile b/test/e2e/playwright-firefox-experimental-containers/actor/Dockerfile
deleted file mode 100644
index a153a02b5b4e..000000000000
--- a/test/e2e/playwright-firefox-experimental-containers/actor/Dockerfile
+++ /dev/null
@@ -1,23 +0,0 @@
-FROM node:20 AS builder
-
-COPY /packages ./packages
-COPY /package*.json ./
-RUN npm --quiet set progress=false \
- && npm install --only=prod --no-optional --no-audit \
- && npm update
-
-FROM apify/actor-node-playwright-firefox:20-beta
-
-RUN rm -r node_modules
-COPY --from=builder /node_modules ./node_modules
-COPY --from=builder /packages ./packages
-COPY --from=builder /package*.json ./
-COPY /.actor ./.actor
-COPY /main.js ./
-
-RUN echo "Installed NPM packages:" \
- && (npm list --only=prod --no-optional --all || true) \
- && echo "Node.js version:" \
- && node --version \
- && echo "NPM version:" \
- && npm --version
diff --git a/test/e2e/playwright-firefox-experimental-containers/actor/main.js b/test/e2e/playwright-firefox-experimental-containers/actor/main.js
deleted file mode 100644
index a07251a8036d..000000000000
--- a/test/e2e/playwright-firefox-experimental-containers/actor/main.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import { Actor } from 'apify';
-import playwright from 'playwright';
-import { Dataset, PlaywrightCrawler } from '@crawlee/playwright';
-
-// timeouts nowadays, hard to say why
-process.exit(404);
-
-const mainOptions = {
- exit: Actor.isAtHome(),
- storage:
- process.env.STORAGE_IMPLEMENTATION === 'LOCAL'
- ? new (await import('@apify/storage-local')).ApifyStorageLocal()
- : undefined,
-};
-
-await Actor.main(async () => {
- const crawler = new PlaywrightCrawler({
- proxyConfiguration: await Actor.createProxyConfiguration(),
- launchContext: {
- launcher: playwright.firefox,
- experimentalContainers: true,
- },
- preNavigationHooks: [
- (_ctx, goToOptions) => {
- goToOptions.waitUntil = 'networkidle';
- },
- ],
- async requestHandler({ page }) {
- const content = await page.content();
- await Dataset.pushData({ ip: content.match(/"clientIp":\s*"(.*)"/)?.[1] });
- },
- });
-
- await crawler.run(['https://api.apify.com/v2/browser-info?1', 'https://api.apify.com/v2/browser-info?2']);
-}, mainOptions);
diff --git a/test/e2e/playwright-firefox-experimental-containers/actor/package.json b/test/e2e/playwright-firefox-experimental-containers/actor/package.json
deleted file mode 100644
index e8d20f154502..000000000000
--- a/test/e2e/playwright-firefox-experimental-containers/actor/package.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "test-playwright-firefox-experimental-containers",
- "version": "0.0.1",
- "description": "Playwright Test - Firefox - Experimental containers",
- "dependencies": {
- "apify": "next",
- "@apify/storage-local": "^2.1.3",
- "@crawlee/basic": "file:./packages/basic-crawler",
- "@crawlee/browser": "file:./packages/browser-crawler",
- "@crawlee/browser-pool": "file:./packages/browser-pool",
- "@crawlee/core": "file:./packages/core",
- "@crawlee/memory-storage": "file:./packages/memory-storage",
- "@crawlee/playwright": "file:./packages/playwright-crawler",
- "@crawlee/types": "file:./packages/types",
- "@crawlee/utils": "file:./packages/utils",
- "playwright": "*"
- },
- "overrides": {
- "apify": {
- "@crawlee/core": "file:./packages/core",
- "@crawlee/utils": "file:./packages/utils"
- }
- },
- "scripts": {
- "start": "node main.js"
- },
- "type": "module",
- "license": "ISC"
-}
diff --git a/test/e2e/playwright-firefox-experimental-containers/test.mjs b/test/e2e/playwright-firefox-experimental-containers/test.mjs
deleted file mode 100644
index ffd167ec7c10..000000000000
--- a/test/e2e/playwright-firefox-experimental-containers/test.mjs
+++ /dev/null
@@ -1,18 +0,0 @@
-import { initialize, getActorTestDir, runActor, expect, skipTest } from '../tools.mjs';
-
-await skipTest('on hold');
-
-const testActorDirname = getActorTestDir(import.meta.url);
-await initialize(testActorDirname);
-
-const { datasetItems } = await runActor(testActorDirname, 16384);
-
-await expect(datasetItems.length > 0, 'Has dataset items');
-
-const ips = new Set();
-
-for (const { ip } of datasetItems) {
- await expect(!ips.has(ip), 'Unique proxy ip');
-
- ips.add(ip);
-}
diff --git a/test/e2e/playwright-initial-cookies/actor/Dockerfile b/test/e2e/playwright-initial-cookies/actor/Dockerfile
index 3d3e1b390116..e079f1c7a563 100644
--- a/test/e2e/playwright-initial-cookies/actor/Dockerfile
+++ b/test/e2e/playwright-initial-cookies/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/playwright-initial-cookies/actor/package.json b/test/e2e/playwright-initial-cookies/actor/package.json
index 266ec86938d3..2f2757f69201 100644
--- a/test/e2e/playwright-initial-cookies/actor/package.json
+++ b/test/e2e/playwright-initial-cookies/actor/package.json
@@ -4,7 +4,7 @@
"description": "Playwright Test - Initial Cookies",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/playwright-initial-cookies/test.mjs b/test/e2e/playwright-initial-cookies/test.mjs
index a24cd3a3ef0e..012966452869 100644
--- a/test/e2e/playwright-initial-cookies/test.mjs
+++ b/test/e2e/playwright-initial-cookies/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/playwright-introduction-guide/actor/Dockerfile b/test/e2e/playwright-introduction-guide/actor/Dockerfile
index 42d0514ba0a4..d77bdcb02e09 100644
--- a/test/e2e/playwright-introduction-guide/actor/Dockerfile
+++ b/test/e2e/playwright-introduction-guide/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/playwright-introduction-guide/actor/package.json b/test/e2e/playwright-introduction-guide/actor/package.json
index e6e445609a90..496e60f80f2a 100644
--- a/test/e2e/playwright-introduction-guide/actor/package.json
+++ b/test/e2e/playwright-introduction-guide/actor/package.json
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/playwright-introduction-guide/test.mjs b/test/e2e/playwright-introduction-guide/test.mjs
index 6a9573f89263..93a2a16094a3 100644
--- a/test/e2e/playwright-introduction-guide/test.mjs
+++ b/test/e2e/playwright-introduction-guide/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/playwright-multi-run/actor/Dockerfile b/test/e2e/playwright-multi-run/actor/Dockerfile
index 3d3e1b390116..e079f1c7a563 100644
--- a/test/e2e/playwright-multi-run/actor/Dockerfile
+++ b/test/e2e/playwright-multi-run/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/playwright-multi-run/actor/package.json b/test/e2e/playwright-multi-run/actor/package.json
index 9f7f2f6ddc56..7ad8ecfe553e 100644
--- a/test/e2e/playwright-multi-run/actor/package.json
+++ b/test/e2e/playwright-multi-run/actor/package.json
@@ -4,7 +4,7 @@
"description": "Playwright Test - Multiple run calls to the same crawler",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/playwright-multi-run/test.mjs b/test/e2e/playwright-multi-run/test.mjs
index 3a8e741ab5ce..0f5e17a621aa 100644
--- a/test/e2e/playwright-multi-run/test.mjs
+++ b/test/e2e/playwright-multi-run/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset, skipTest } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, skipTest, validateDataset } from '../tools.mjs';
if (process.env.STORAGE_IMPLEMENTATION === 'PLATFORM') {
await skipTest('not supported on platform');
diff --git a/test/e2e/playwright-robots-file/actor/Dockerfile b/test/e2e/playwright-robots-file/actor/Dockerfile
index f5f5c882eaca..193a737cc14e 100644
--- a/test/e2e/playwright-robots-file/actor/Dockerfile
+++ b/test/e2e/playwright-robots-file/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/playwright-robots-file/actor/package.json b/test/e2e/playwright-robots-file/actor/package.json
index eabc7e0752ee..5c9865fd332a 100644
--- a/test/e2e/playwright-robots-file/actor/package.json
+++ b/test/e2e/playwright-robots-file/actor/package.json
@@ -4,7 +4,7 @@
"description": "Playwright Test - Robots file",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/playwright-robots-file/test.mjs b/test/e2e/playwright-robots-file/test.mjs
index 3eb38625dc9e..1636b2289253 100644
--- a/test/e2e/playwright-robots-file/test.mjs
+++ b/test/e2e/playwright-robots-file/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/proxy-rotation/actor/Dockerfile b/test/e2e/proxy-rotation/actor/Dockerfile
index efc72336ddb1..d5925df08b5f 100644
--- a/test/e2e/proxy-rotation/actor/Dockerfile
+++ b/test/e2e/proxy-rotation/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/proxy-rotation/actor/package.json b/test/e2e/proxy-rotation/actor/package.json
index aa48605818e8..9fed31ba3492 100644
--- a/test/e2e/proxy-rotation/actor/package.json
+++ b/test/e2e/proxy-rotation/actor/package.json
@@ -4,7 +4,7 @@
"description": "Proxy Test - Rotation",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/proxy-rotation/test.mjs b/test/e2e/proxy-rotation/test.mjs
index a7ba42135560..36a82f8ffea1 100644
--- a/test/e2e/proxy-rotation/test.mjs
+++ b/test/e2e/proxy-rotation/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-default/actor/Dockerfile b/test/e2e/puppeteer-default/actor/Dockerfile
index efc72336ddb1..d5925df08b5f 100644
--- a/test/e2e/puppeteer-default/actor/Dockerfile
+++ b/test/e2e/puppeteer-default/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-default/actor/package.json b/test/e2e/puppeteer-default/actor/package.json
index 88f43ce9c535..4345341472be 100644
--- a/test/e2e/puppeteer-default/actor/package.json
+++ b/test/e2e/puppeteer-default/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Default",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-default/test.mjs b/test/e2e/puppeteer-default/test.mjs
index b82824ae1941..558c589f5fdf 100644
--- a/test/e2e/puppeteer-default/test.mjs
+++ b/test/e2e/puppeteer-default/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-enqueue-links/actor/Dockerfile b/test/e2e/puppeteer-enqueue-links/actor/Dockerfile
index c43460bc59f4..24cb001314d0 100644
--- a/test/e2e/puppeteer-enqueue-links/actor/Dockerfile
+++ b/test/e2e/puppeteer-enqueue-links/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-enqueue-links/actor/package.json b/test/e2e/puppeteer-enqueue-links/actor/package.json
index 03c616f31eae..e0c26f8dd11f 100644
--- a/test/e2e/puppeteer-enqueue-links/actor/package.json
+++ b/test/e2e/puppeteer-enqueue-links/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Enqueue Links",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -20,6 +20,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-enqueue-links/test.mjs b/test/e2e/puppeteer-enqueue-links/test.mjs
index d088b70d1f32..7dea0d94630c 100644
--- a/test/e2e/puppeteer-enqueue-links/test.mjs
+++ b/test/e2e/puppeteer-enqueue-links/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-error-snapshot/actor/Dockerfile b/test/e2e/puppeteer-error-snapshot/actor/Dockerfile
index c43460bc59f4..24cb001314d0 100644
--- a/test/e2e/puppeteer-error-snapshot/actor/Dockerfile
+++ b/test/e2e/puppeteer-error-snapshot/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-error-snapshot/actor/package.json b/test/e2e/puppeteer-error-snapshot/actor/package.json
index ce3638b8fd90..a51c01014023 100644
--- a/test/e2e/puppeteer-error-snapshot/actor/package.json
+++ b/test/e2e/puppeteer-error-snapshot/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Should save errors snapshots",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-error-snapshot/test.mjs b/test/e2e/puppeteer-error-snapshot/test.mjs
index 06207551272c..7306e295d228 100644
--- a/test/e2e/puppeteer-error-snapshot/test.mjs
+++ b/test/e2e/puppeteer-error-snapshot/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, hasNestedKey } from '../tools.mjs';
+import { expect, getActorTestDir, hasNestedKey, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-ignore-ssl-errors/actor/Dockerfile b/test/e2e/puppeteer-ignore-ssl-errors/actor/Dockerfile
index c43460bc59f4..24cb001314d0 100644
--- a/test/e2e/puppeteer-ignore-ssl-errors/actor/Dockerfile
+++ b/test/e2e/puppeteer-ignore-ssl-errors/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-ignore-ssl-errors/actor/package.json b/test/e2e/puppeteer-ignore-ssl-errors/actor/package.json
index 853e41750424..3913bff2c907 100644
--- a/test/e2e/puppeteer-ignore-ssl-errors/actor/package.json
+++ b/test/e2e/puppeteer-ignore-ssl-errors/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Ignore SSL Errors",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-ignore-ssl-errors/test.mjs b/test/e2e/puppeteer-ignore-ssl-errors/test.mjs
index 500504403f46..c695dfa8a7ea 100644
--- a/test/e2e/puppeteer-ignore-ssl-errors/test.mjs
+++ b/test/e2e/puppeteer-ignore-ssl-errors/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-initial-cookies/actor/Dockerfile b/test/e2e/puppeteer-initial-cookies/actor/Dockerfile
index c43460bc59f4..24cb001314d0 100644
--- a/test/e2e/puppeteer-initial-cookies/actor/Dockerfile
+++ b/test/e2e/puppeteer-initial-cookies/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-initial-cookies/actor/package.json b/test/e2e/puppeteer-initial-cookies/actor/package.json
index 5244dee8fcd5..6a71eff78282 100644
--- a/test/e2e/puppeteer-initial-cookies/actor/package.json
+++ b/test/e2e/puppeteer-initial-cookies/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Initial Cookies",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-initial-cookies/test.mjs b/test/e2e/puppeteer-initial-cookies/test.mjs
index a24cd3a3ef0e..012966452869 100644
--- a/test/e2e/puppeteer-initial-cookies/test.mjs
+++ b/test/e2e/puppeteer-initial-cookies/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-page-info/actor/Dockerfile b/test/e2e/puppeteer-page-info/actor/Dockerfile
index c43460bc59f4..24cb001314d0 100644
--- a/test/e2e/puppeteer-page-info/actor/Dockerfile
+++ b/test/e2e/puppeteer-page-info/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-page-info/actor/package.json b/test/e2e/puppeteer-page-info/actor/package.json
index ce29be185dae..adbe59c395bc 100644
--- a/test/e2e/puppeteer-page-info/actor/package.json
+++ b/test/e2e/puppeteer-page-info/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Page Info",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-page-info/test.mjs b/test/e2e/puppeteer-page-info/test.mjs
index 06d47068cb4b..ed362948ff0f 100644
--- a/test/e2e/puppeteer-page-info/test.mjs
+++ b/test/e2e/puppeteer-page-info/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-store-pagination-jquery/actor/Dockerfile b/test/e2e/puppeteer-store-pagination-jquery/actor/Dockerfile
index c43460bc59f4..24cb001314d0 100644
--- a/test/e2e/puppeteer-store-pagination-jquery/actor/Dockerfile
+++ b/test/e2e/puppeteer-store-pagination-jquery/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-store-pagination-jquery/actor/package.json b/test/e2e/puppeteer-store-pagination-jquery/actor/package.json
index 25efd05127b4..7cc03f0457b6 100644
--- a/test/e2e/puppeteer-store-pagination-jquery/actor/package.json
+++ b/test/e2e/puppeteer-store-pagination-jquery/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Store Pagination with jQuery",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-store-pagination-jquery/test.mjs b/test/e2e/puppeteer-store-pagination-jquery/test.mjs
index 8f87841e7009..55dcb1c1fd12 100644
--- a/test/e2e/puppeteer-store-pagination-jquery/test.mjs
+++ b/test/e2e/puppeteer-store-pagination-jquery/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-store-pagination/actor/Dockerfile b/test/e2e/puppeteer-store-pagination/actor/Dockerfile
index c43460bc59f4..24cb001314d0 100644
--- a/test/e2e/puppeteer-store-pagination/actor/Dockerfile
+++ b/test/e2e/puppeteer-store-pagination/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-store-pagination/actor/package.json b/test/e2e/puppeteer-store-pagination/actor/package.json
index e02e1950ad87..c5f4681dd3c6 100644
--- a/test/e2e/puppeteer-store-pagination/actor/package.json
+++ b/test/e2e/puppeteer-store-pagination/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Store Pagination",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-store-pagination/test.mjs b/test/e2e/puppeteer-store-pagination/test.mjs
index 8f87841e7009..55dcb1c1fd12 100644
--- a/test/e2e/puppeteer-store-pagination/test.mjs
+++ b/test/e2e/puppeteer-store-pagination/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/puppeteer-throw-on-ssl-errors/actor/Dockerfile b/test/e2e/puppeteer-throw-on-ssl-errors/actor/Dockerfile
index c43460bc59f4..24cb001314d0 100644
--- a/test/e2e/puppeteer-throw-on-ssl-errors/actor/Dockerfile
+++ b/test/e2e/puppeteer-throw-on-ssl-errors/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-puppeteer-chrome:20-beta
+FROM apify/actor-node-puppeteer-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/puppeteer-throw-on-ssl-errors/actor/package.json b/test/e2e/puppeteer-throw-on-ssl-errors/actor/package.json
index 65b5d8134ab1..6b35e537436a 100644
--- a/test/e2e/puppeteer-throw-on-ssl-errors/actor/package.json
+++ b/test/e2e/puppeteer-throw-on-ssl-errors/actor/package.json
@@ -4,7 +4,7 @@
"description": "Puppeteer Test - Should throw on SSL Errors",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/puppeteer-throw-on-ssl-errors/test.mjs b/test/e2e/puppeteer-throw-on-ssl-errors/test.mjs
index 39f6c4d9c1fc..725448fcadae 100644
--- a/test/e2e/puppeteer-throw-on-ssl-errors/test.mjs
+++ b/test/e2e/puppeteer-throw-on-ssl-errors/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect, validateDataset } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor, validateDataset } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/request-queue-with-concurrency/actor/Dockerfile b/test/e2e/request-queue-with-concurrency/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/request-queue-with-concurrency/actor/Dockerfile
+++ b/test/e2e/request-queue-with-concurrency/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/request-queue-with-concurrency/actor/package.json b/test/e2e/request-queue-with-concurrency/actor/package.json
index 381cdb7dbab0..57de6df1f3c6 100644
--- a/test/e2e/request-queue-with-concurrency/actor/package.json
+++ b/test/e2e/request-queue-with-concurrency/actor/package.json
@@ -4,7 +4,7 @@
"description": "Request Queue Test - Zero Concurrency",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/request-queue-with-concurrency/test.mjs b/test/e2e/request-queue-with-concurrency/test.mjs
index 6b1d480435d4..5558860c2242 100644
--- a/test/e2e/request-queue-with-concurrency/test.mjs
+++ b/test/e2e/request-queue-with-concurrency/test.mjs
@@ -1,7 +1,9 @@
-import { initialize, getActorTestDir, pushActor, startActorOnPlatform, expect } from '../tools.mjs';
+import { setTimeout } from 'node:timers/promises';
+
import { Actor } from 'apify';
import { log } from 'crawlee';
-import { setTimeout } from 'node:timers/promises';
+
+import { expect, getActorTestDir, initialize, pushActor, startActorOnPlatform } from '../tools.mjs';
if (process.env.STORAGE_IMPLEMENTATION === 'PLATFORM') {
const testActorDirname = getActorTestDir(import.meta.url);
diff --git a/test/e2e/request-queue-zero-concurrency/actor/Dockerfile b/test/e2e/request-queue-zero-concurrency/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/request-queue-zero-concurrency/actor/Dockerfile
+++ b/test/e2e/request-queue-zero-concurrency/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/request-queue-zero-concurrency/actor/package.json b/test/e2e/request-queue-zero-concurrency/actor/package.json
index 1f24f5ba20d6..a261d2d61d73 100644
--- a/test/e2e/request-queue-zero-concurrency/actor/package.json
+++ b/test/e2e/request-queue-zero-concurrency/actor/package.json
@@ -4,7 +4,7 @@
"description": "Request Queue Test - Zero Concurrency",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/request-queue-zero-concurrency/test.mjs b/test/e2e/request-queue-zero-concurrency/test.mjs
index 42656d0ad0a0..4c3e1eee0a86 100644
--- a/test/e2e/request-queue-zero-concurrency/test.mjs
+++ b/test/e2e/request-queue-zero-concurrency/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/request-skip-navigation/actor/Dockerfile b/test/e2e/request-skip-navigation/actor/Dockerfile
index 36afd80b9648..f93f444a81fe 100644
--- a/test/e2e/request-skip-navigation/actor/Dockerfile
+++ b/test/e2e/request-skip-navigation/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM apify/actor-node:20-beta
+FROM apify/actor-node:22-beta
COPY packages ./packages
COPY package*.json ./
diff --git a/test/e2e/request-skip-navigation/actor/package.json b/test/e2e/request-skip-navigation/actor/package.json
index 07e277b03969..6124a449c702 100644
--- a/test/e2e/request-skip-navigation/actor/package.json
+++ b/test/e2e/request-skip-navigation/actor/package.json
@@ -4,7 +4,7 @@
"description": "Request Test - skipNavigation",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
"@crawlee/http": "file:./packages/http-crawler",
@@ -18,6 +18,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/request-skip-navigation/test.mjs b/test/e2e/request-skip-navigation/test.mjs
index 0b518f262b2e..a83abf7cfeda 100644
--- a/test/e2e/request-skip-navigation/test.mjs
+++ b/test/e2e/request-skip-navigation/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/run.mjs b/test/e2e/run.mjs
index 579981c8065a..efd1510df09a 100644
--- a/test/e2e/run.mjs
+++ b/test/e2e/run.mjs
@@ -6,7 +6,7 @@ import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { isMainThread, Worker, workerData } from 'node:worker_threads';
-import { colors, getApifyToken, clearPackages, clearStorage, SKIPPED_TEST_CLOSE_CODE } from './tools.mjs';
+import { clearPackages, clearStorage, colors, getApifyToken, SKIPPED_TEST_CLOSE_CODE } from './tools.mjs';
const basePath = dirname(fileURLToPath(import.meta.url));
@@ -81,7 +81,7 @@ async function run() {
`[${dir.name}]`,
)} did not call "initialize(import.meta.url)"!`,
);
- worker.terminate();
+ void worker.terminate();
return;
}
@@ -149,7 +149,7 @@ if (isMainThread) {
try {
if (process.env.STORAGE_IMPLEMENTATION === 'LOCAL') {
console.log('Temporary installing @apify/storage-local');
- execSync(`yarn add -D @apify/storage-local@^2.1.3-beta.1 > /dev/null`, { stdio: 'inherit' });
+ execSync(`yarn add -D @apify/storage-local@^2.3.0 > /dev/null`, { stdio: 'inherit' });
}
if (process.env.STORAGE_IMPLEMENTATION !== 'PLATFORM') {
console.log('Fetching camoufox');
diff --git a/test/e2e/session-rotation/actor/Dockerfile b/test/e2e/session-rotation/actor/Dockerfile
index 3d3e1b390116..e079f1c7a563 100644
--- a/test/e2e/session-rotation/actor/Dockerfile
+++ b/test/e2e/session-rotation/actor/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20 AS builder
+FROM node:22 AS builder
COPY /packages ./packages
COPY /package*.json ./
@@ -6,7 +6,7 @@ RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional --no-audit \
&& npm update
-FROM apify/actor-node-playwright-chrome:20-beta
+FROM apify/actor-node-playwright-chrome:22-beta
RUN rm -r node_modules
COPY --from=builder /node_modules ./node_modules
diff --git a/test/e2e/session-rotation/actor/package.json b/test/e2e/session-rotation/actor/package.json
index f34d376ffc52..bdb529e43e7f 100644
--- a/test/e2e/session-rotation/actor/package.json
+++ b/test/e2e/session-rotation/actor/package.json
@@ -4,7 +4,7 @@
"description": "Session Test - Rotation",
"dependencies": {
"apify": "next",
- "@apify/storage-local": "^2.1.3",
+ "@apify/storage-local": "^2.3.0",
"@crawlee/basic": "file:./packages/basic-crawler",
"@crawlee/browser": "file:./packages/browser-crawler",
"@crawlee/browser-pool": "file:./packages/browser-pool",
@@ -19,6 +19,9 @@
"apify": {
"@crawlee/core": "file:./packages/core",
"@crawlee/utils": "file:./packages/utils"
+ },
+ "@apify/storage-local": {
+ "better-sqlite3": "^11.10.0"
}
},
"scripts": {
diff --git a/test/e2e/session-rotation/test.mjs b/test/e2e/session-rotation/test.mjs
index 5ff4a618c8b4..d6d72e9fff8c 100644
--- a/test/e2e/session-rotation/test.mjs
+++ b/test/e2e/session-rotation/test.mjs
@@ -1,4 +1,4 @@
-import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs';
+import { expect, getActorTestDir, initialize, runActor } from '../tools.mjs';
const testActorDirname = getActorTestDir(import.meta.url);
await initialize(testActorDirname);
diff --git a/test/e2e/tools.mjs b/test/e2e/tools.mjs
index f332beb69811..44200c98689d 100644
--- a/test/e2e/tools.mjs
+++ b/test/e2e/tools.mjs
@@ -6,12 +6,11 @@ import { dirname, join } from 'node:path';
import { setTimeout } from 'node:timers/promises';
import { fileURLToPath } from 'node:url';
+import { URL_NO_COMMAS_REGEX } from '@crawlee/utils';
import { Actor } from 'apify';
import fs from 'fs-extra';
import { got } from 'got';
-import { URL_NO_COMMAS_REGEX } from '../../packages/utils/dist/index.mjs';
-
/**
* @param {string} command
* @param {import('node:child_process').ExecSyncOptions} options
@@ -191,6 +190,7 @@ export async function runActor(dirName, memory = 4096) {
}),
);
+ // eslint-disable-next-line no-shadow
return entries.filter(({ name }) => !isPrivateEntry(name));
}
@@ -439,7 +439,7 @@ export async function skipTest(reason) {
* @returns {boolean}
*/
function checkDatasetItem(item, propName) {
- if (!item.hasOwnProperty(propName)) {
+ if (!Object.hasOwn(item, propName)) {
return false;
}
diff --git a/test/shared/MemoryStorageEmulator.ts b/test/shared/MemoryStorageEmulator.ts
index c39bb248ec16..a0cad7003907 100644
--- a/test/shared/MemoryStorageEmulator.ts
+++ b/test/shared/MemoryStorageEmulator.ts
@@ -7,9 +7,9 @@ import { ensureDir } from 'fs-extra';
import log from '@apify/log';
import { cryptoRandomObjectId } from '@apify/utilities';
-import { StorageEmulator } from './StorageEmulator';
+import { StorageEmulator } from './StorageEmulator.js';
-const LOCAL_EMULATION_DIR = resolve(__dirname, '..', 'tmp', 'memory-emulation-dir');
+const LOCAL_EMULATION_DIR = resolve(import.meta.dirname, '..', 'tmp', 'memory-emulation-dir');
export class MemoryStorageEmulator extends StorageEmulator {
private storage!: MemoryStorage;
diff --git a/test/shared/_helper.ts b/test/shared/_helper.ts
index eb9822a144bc..ac3ad5dc430a 100644
--- a/test/shared/_helper.ts
+++ b/test/shared/_helper.ts
@@ -24,8 +24,8 @@ export const responseSamples = {
' Web Scraping, Data Extraction and Automation · Apify\n' +
'\n' +
'',
- complexXml: fs.readFileSync(path.join(__dirname, 'data/complex.xml'), 'utf-8'),
- image: fs.readFileSync(path.join(__dirname, 'data/apify.png')),
+ complexXml: fs.readFileSync(path.join(import.meta.dirname, 'data/complex.xml'), 'utf-8'),
+ image: fs.readFileSync(path.join(import.meta.dirname, 'data/apify.png')),
html: `
@@ -349,7 +349,7 @@ export async function runExampleComServer(): Promise<[Server, number]> {
app.use('/special', special);
app.use('/cacheable', cacheable);
- app.get('**/*', async (req, res) => {
+ app.get('{*splat}', async (req, res) => {
await setTimeout(50);
res.send(responseSamples.html);
});
diff --git a/test/tsconfig.json b/test/tsconfig.json
index 7fa113996e27..1202ae509eaa 100644
--- a/test/tsconfig.json
+++ b/test/tsconfig.json
@@ -3,21 +3,23 @@
"include": ["**/*", "../packages/*/src/**/*"],
"exclude": ["e2e", "**/fixtures/*"],
"compilerOptions": {
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
"sourceMap": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"types": ["vitest/globals"],
"paths": {
- "crawlee": ["packages/crawlee/src"],
- "@crawlee/basic": ["packages/basic-crawler/src"],
- "@crawlee/browser": ["packages/browser-crawler/src"],
- "@crawlee/http": ["packages/http-crawler/src"],
- "@crawlee/linkedom": ["packages/linkedom-crawler/src"],
- "@crawlee/jsdom": ["packages/jsdom-crawler/src"],
- "@crawlee/cheerio": ["packages/cheerio-crawler/src"],
- "@crawlee/playwright": ["packages/playwright-crawler/src"],
- "@crawlee/puppeteer": ["packages/puppeteer-crawler/src"],
- "@crawlee/*": ["packages/*/src"]
+ "crawlee": ["packages/crawlee/src/index.ts"],
+ "@crawlee/basic": ["packages/basic-crawler/src/index.ts"],
+ "@crawlee/browser": ["packages/browser-crawler/src/index.ts"],
+ "@crawlee/http": ["packages/http-crawler/src/index.ts"],
+ "@crawlee/linkedom": ["packages/linkedom-crawler/src/index.ts"],
+ "@crawlee/jsdom": ["packages/jsdom-crawler/src/index.ts"],
+ "@crawlee/cheerio": ["packages/cheerio-crawler/src/index.ts"],
+ "@crawlee/playwright": ["packages/playwright-crawler/src/index.ts"],
+ "@crawlee/puppeteer": ["packages/puppeteer-crawler/src/index.ts"],
+ "@crawlee/*": ["packages/*/src/index.ts"]
}
}
}
diff --git a/test/utils/cheerio.test.ts b/test/utils/cheerio.test.ts
index 367119854bbd..b3da6832dc33 100644
--- a/test/utils/cheerio.test.ts
+++ b/test/utils/cheerio.test.ts
@@ -2,7 +2,7 @@ import type { CheerioRoot } from '@crawlee/utils';
import { htmlToText } from '@crawlee/utils';
import * as cheerio from 'cheerio';
-import * as htmlToTextData from '../shared/data/html_to_text_test_data';
+import * as htmlToTextData from '../shared/data/html_to_text_test_data.js';
const checkHtmlToText = (html: string | CheerioRoot, expectedText: string, hasBody = false) => {
const text1 = htmlToText(html);
@@ -106,9 +106,9 @@ describe('htmlToText()', () => {
test('works with Cheerio object', () => {
const html1 = 'Some text';
- checkHtmlToText(cheerio.load(html1, { decodeEntities: true }), 'Some text');
+ checkHtmlToText(cheerio.load(html1), 'Some text');
const html2 = 'Text outside of body
';
- checkHtmlToText(cheerio.load(html2, { decodeEntities: true }), 'Text outside of body');
+ checkHtmlToText(cheerio.load(html2), 'Text outside of body');
});
});
diff --git a/test/utils/cpu-infoV2.test.ts b/test/utils/cpu-infoV2.test.ts
index fbdacd511812..bbecb4c8eeca 100644
--- a/test/utils/cpu-infoV2.test.ts
+++ b/test/utils/cpu-infoV2.test.ts
@@ -11,7 +11,7 @@ import {
getCurrentCpuTicksV2,
getSystemCpuUsage,
sampleCpuUsage,
-} from '../../packages/utils/src/internals/systemInfoV2/cpu-info';
+} from '../../packages/utils/src/internals/system-info/cpu-info.js';
vitest.mock('@crawlee/utils/src/internals/general', async (importActual) => {
const original: typeof import('@crawlee/utils') = await importActual();
diff --git a/test/utils/extract-urls.test.ts b/test/utils/extract-urls.test.ts
index 99f80a7e065a..46939d13012d 100644
--- a/test/utils/extract-urls.test.ts
+++ b/test/utils/extract-urls.test.ts
@@ -2,14 +2,15 @@ import fs from 'node:fs';
import path from 'node:path';
import { downloadListOfUrls, extractUrls, URL_WITH_COMMAS_REGEX } from '@crawlee/utils';
+import { gotScraping } from 'got-scraping';
-vitest.mock('@crawlee/utils/src/internals/gotScraping', async () => {
+vitest.mock('got-scraping', async () => {
return {
gotScraping: vitest.fn(),
};
});
-const baseDataPath = path.join(__dirname, '..', 'shared', 'data');
+const baseDataPath = path.join(import.meta.dirname, '..', 'shared', 'data');
describe('downloadListOfUrls()', () => {
test('downloads a list of URLs', async () => {
@@ -19,8 +20,6 @@ describe('downloadListOfUrls()', () => {
.split(/[\r\n]+/g)
.map((u) => u.trim());
- // @ts-ignore for some reason, this fails when the project is not built :/
- const { gotScraping } = await import('@crawlee/utils');
const gotScrapingSpy = vitest.mocked(gotScraping);
gotScrapingSpy.mockResolvedValueOnce({ body: text });
diff --git a/test/utils/fixtures/parent.js b/test/utils/fixtures/parent.js
index 6d0e510cba4a..19e0c7f5bac4 100644
--- a/test/utils/fixtures/parent.js
+++ b/test/utils/fixtures/parent.js
@@ -1,5 +1,5 @@
-const cp = require('child_process');
+import { exec } from 'node:child_process';
for (let count = 1; count < 10; count++) {
- cp.exec('node ./test/utils/fixtures/child.js');
+ exec('node ./test/utils/fixtures/child.js');
}
diff --git a/test/utils/memory-info.test.ts b/test/utils/memory-info.test.ts
deleted file mode 100644
index ffac5a9e2b5b..000000000000
--- a/test/utils/memory-info.test.ts
+++ /dev/null
@@ -1,253 +0,0 @@
-import { access, readFile } from 'node:fs/promises';
-import { freemem, totalmem } from 'node:os';
-
-import { launchPuppeteer } from '@crawlee/puppeteer';
-import { getMemoryInfo, isDocker } from '@crawlee/utils';
-
-vitest.mock('node:os', async (importActual) => {
- const originalOs: typeof import('node:os') = await importActual();
- return {
- ...originalOs,
- freemem: vitest.fn(),
- totalmem: vitest.fn(),
- };
-});
-
-vitest.mock('@crawlee/utils/src/internals/general', async (importActual) => {
- const original: typeof import('@crawlee/utils') = await importActual();
-
- return {
- ...original,
- isDocker: vitest.fn(),
- };
-});
-
-vitest.mock('node:fs/promises', async (importActual) => {
- const originalFs: typeof import('node:fs/promises') = await importActual();
- return {
- ...originalFs,
- readFile: vitest.fn(originalFs.readFile),
- access: vitest.fn(originalFs.access),
- };
-});
-
-const isDockerSpy = vitest.mocked(isDocker);
-const freememSpy = vitest.mocked(freemem);
-const totalmemSpy = vitest.mocked(totalmem);
-const accessSpy = vitest.mocked(access);
-// If you use this spy, make sure to reset it to the original implementation at the end of the test.
-const readFileSpy = vitest.mocked(readFile);
-
-describe('getMemoryInfo()', () => {
- test('works WITHOUT child process outside the container', async () => {
- isDockerSpy.mockResolvedValueOnce(false);
- freememSpy.mockReturnValueOnce(222);
- totalmemSpy.mockReturnValueOnce(333);
-
- const data = await getMemoryInfo();
-
- expect(freememSpy).toHaveBeenCalled();
- expect(totalmemSpy).toHaveBeenCalled();
-
- expect(data).toMatchObject({
- totalBytes: 333,
- freeBytes: 222,
- usedBytes: 111,
- });
-
- expect(data.mainProcessBytes).toBeGreaterThanOrEqual(20_000_000);
- });
-
- test('works WITHOUT child process inside the container', async () => {
- isDockerSpy.mockResolvedValueOnce(true);
- accessSpy.mockResolvedValueOnce();
-
- readFileSpy.mockImplementation(async (path) => {
- if (path === '/sys/fs/cgroup/memory/memory.limit_in_bytes') {
- return Promise.resolve('333');
- }
-
- if (path === '/sys/fs/cgroup/memory/memory.usage_in_bytes') {
- return Promise.resolve('111');
- }
-
- throw new Error(`Unexpected path ${path}`);
- });
-
- const data = await getMemoryInfo();
-
- expect(data).toMatchObject({
- totalBytes: 333,
- freeBytes: 222,
- usedBytes: 111,
- });
-
- expect(data.mainProcessBytes).toBeGreaterThanOrEqual(20_000_000);
- });
-
- // TODO: check if this comment is still accurate
- // this test hangs because we launch the browser, closing is apparently not enough?
- test('works WITH child process outside the container', async () => {
- process.env.CRAWLEE_HEADLESS = '1';
- isDockerSpy.mockResolvedValueOnce(false);
- freememSpy.mockReturnValueOnce(222);
- totalmemSpy.mockReturnValueOnce(333);
-
- let browser!: Awaited>;
-
- try {
- browser = await launchPuppeteer();
- const data = await getMemoryInfo();
-
- expect(freememSpy).toHaveBeenCalled();
- expect(totalmemSpy).toHaveBeenCalled();
- expect(data).toMatchObject({
- totalBytes: 333,
- freeBytes: 222,
- usedBytes: 111,
- });
- expect(data.mainProcessBytes).toBeGreaterThanOrEqual(20_000_000);
- expect(data.childProcessesBytes).toBeGreaterThanOrEqual(20_000_000);
- } finally {
- delete process.env.CRAWLEE_HEADLESS;
- await browser?.close();
- }
- });
-
- // TODO: check if this comment is still accurate
- // this test hangs because we launch the browser, closing is apparently not enough?
- test('works WITH child process inside the container', async () => {
- process.env.CRAWLEE_HEADLESS = '1';
- isDockerSpy.mockResolvedValueOnce(true);
- accessSpy.mockResolvedValueOnce();
-
- readFileSpy.mockImplementation(async (path) => {
- if (path === '/sys/fs/cgroup/memory/memory.limit_in_bytes') {
- return Promise.resolve('333');
- }
-
- if (path === '/sys/fs/cgroup/memory/memory.usage_in_bytes') {
- return Promise.resolve('111');
- }
-
- throw new Error(`Unexpected path ${path}`);
- });
-
- let browser!: Awaited>;
- try {
- browser = await launchPuppeteer();
- const data = await getMemoryInfo();
-
- expect(data).toMatchObject({
- totalBytes: 333,
- freeBytes: 222,
- usedBytes: 111,
- });
- expect(data.mainProcessBytes).toBeGreaterThanOrEqual(20_000_000);
- expect(data.childProcessesBytes).toBeGreaterThanOrEqual(20_000_000);
- } finally {
- delete process.env.CRAWLEE_HEADLESS;
- await browser?.close();
- }
- });
-
- test('works with cgroup V1 with LIMITED memory', async () => {
- isDockerSpy.mockResolvedValueOnce(true);
- accessSpy.mockResolvedValueOnce();
-
- readFileSpy.mockImplementation(async (path) => {
- if (path === '/sys/fs/cgroup/memory/memory.limit_in_bytes') {
- return Promise.resolve('333');
- }
-
- if (path === '/sys/fs/cgroup/memory/memory.usage_in_bytes') {
- return Promise.resolve('111');
- }
-
- throw new Error(`Unexpected path ${path}`);
- });
-
- const data = await getMemoryInfo();
- expect(data).toMatchObject({
- totalBytes: 333,
- freeBytes: 222,
- usedBytes: 111,
- });
- });
-
- test('works with cgroup V1 with UNLIMITED memory', async () => {
- isDockerSpy.mockResolvedValueOnce(true);
- accessSpy.mockResolvedValueOnce();
-
- readFileSpy.mockImplementation(async (path) => {
- if (path === '/sys/fs/cgroup/memory/memory.limit_in_bytes') {
- return Promise.resolve('9223372036854771712');
- }
-
- if (path === '/sys/fs/cgroup/memory/memory.usage_in_bytes') {
- return Promise.resolve('111');
- }
-
- throw new Error(`Unexpected path ${path}`);
- });
-
- totalmemSpy.mockReturnValueOnce(333);
-
- const data = await getMemoryInfo();
- expect(data).toMatchObject({
- totalBytes: 333,
- freeBytes: 222,
- usedBytes: 111,
- });
- });
-
- test('works with cgroup V2 with LIMITED memory', async () => {
- isDockerSpy.mockResolvedValueOnce(true);
- accessSpy.mockRejectedValueOnce(new Error('ENOENT'));
-
- readFileSpy.mockImplementation(async (path) => {
- if (path === '/sys/fs/cgroup/memory.max') {
- return Promise.resolve('333\n');
- }
-
- if (path === '/sys/fs/cgroup/memory.current') {
- return Promise.resolve('111\n');
- }
-
- throw new Error(`Unexpected path ${path}`);
- });
-
- const data = await getMemoryInfo();
- expect(data).toMatchObject({
- totalBytes: 333,
- freeBytes: 222,
- usedBytes: 111,
- });
- });
-
- test('works with cgroup V2 with UNLIMITED memory', async () => {
- isDockerSpy.mockResolvedValueOnce(true);
- accessSpy.mockRejectedValueOnce(new Error('ENOENT'));
-
- readFileSpy.mockImplementation(async (path) => {
- if (path === '/sys/fs/cgroup/memory.max') {
- return Promise.resolve('max\n');
- }
-
- if (path === '/sys/fs/cgroup/memory.current') {
- return Promise.resolve('111\n');
- }
-
- throw new Error(`Unexpected path ${path}`);
- });
-
- totalmemSpy.mockReturnValueOnce(333);
-
- const data = await getMemoryInfo();
- expect(data).toMatchObject({
- totalBytes: 333,
- freeBytes: 222,
- usedBytes: 111,
- });
- });
-});
diff --git a/test/utils/memory-infoV2.test.ts b/test/utils/memory-infoV2.test.ts
index df5e9b4585ee..1623336a9ec9 100644
--- a/test/utils/memory-infoV2.test.ts
+++ b/test/utils/memory-infoV2.test.ts
@@ -2,7 +2,7 @@ import { access, readFile } from 'node:fs/promises';
import { freemem, totalmem } from 'node:os';
import { launchPuppeteer } from '@crawlee/puppeteer';
-import { getCgroupsVersion, getMemoryInfoV2 } from '@crawlee/utils';
+import { getCgroupsVersion, getMemoryInfo } from '@crawlee/utils';
vitest.mock('node:os', async (importActual) => {
const originalOs: typeof import('node:os') = await importActual();
@@ -43,7 +43,7 @@ describe('getMemoryInfoV2()', () => {
freememSpy.mockReturnValueOnce(222);
totalmemSpy.mockReturnValueOnce(333);
- const data = await getMemoryInfoV2();
+ const data = await getMemoryInfo();
expect(freememSpy).toHaveBeenCalled();
expect(totalmemSpy).toHaveBeenCalled();
@@ -73,7 +73,7 @@ describe('getMemoryInfoV2()', () => {
throw new Error(`Unexpected path ${path}`);
});
- const data = await getMemoryInfoV2(true);
+ const data = await getMemoryInfo(true);
expect(data).toMatchObject({
totalBytes: 333,
@@ -93,7 +93,7 @@ describe('getMemoryInfoV2()', () => {
try {
browser = await launchPuppeteer();
- const data = await getMemoryInfoV2();
+ const data = await getMemoryInfo();
expect(freememSpy).toHaveBeenCalled();
expect(totalmemSpy).toHaveBeenCalled();
@@ -130,7 +130,7 @@ describe('getMemoryInfoV2()', () => {
let browser!: Awaited>;
try {
browser = await launchPuppeteer();
- const data = await getMemoryInfoV2(true);
+ const data = await getMemoryInfo(true);
expect(data).toMatchObject({
totalBytes: 333,
@@ -161,7 +161,7 @@ describe('getMemoryInfoV2()', () => {
throw new Error(`Unexpected path ${path}`);
});
- const data = await getMemoryInfoV2(true);
+ const data = await getMemoryInfo(true);
expect(data).toMatchObject({
totalBytes: 333,
freeBytes: 222,
@@ -187,7 +187,7 @@ describe('getMemoryInfoV2()', () => {
totalmemSpy.mockReturnValueOnce(333);
- const data = await getMemoryInfoV2(true);
+ const data = await getMemoryInfo(true);
expect(data).toMatchObject({
totalBytes: 333,
freeBytes: 222,
@@ -211,7 +211,7 @@ describe('getMemoryInfoV2()', () => {
throw new Error(`Unexpected path ${path}`);
});
- const data = await getMemoryInfoV2(true);
+ const data = await getMemoryInfo(true);
expect(data).toMatchObject({
totalBytes: 333,
freeBytes: 222,
@@ -237,7 +237,7 @@ describe('getMemoryInfoV2()', () => {
totalmemSpy.mockReturnValueOnce(333);
- const data = await getMemoryInfoV2(true);
+ const data = await getMemoryInfo(true);
expect(data).toMatchObject({
totalBytes: 333,
freeBytes: 222,
diff --git a/test/utils/psTree.test.ts b/test/utils/psTree.test.ts
index 8c7f3079a3aa..988ed2f5d3d0 100644
--- a/test/utils/psTree.test.ts
+++ b/test/utils/psTree.test.ts
@@ -1,11 +1,11 @@
import { exec } from 'node:child_process';
import path from 'node:path';
-import { psTree } from '../../packages/utils/src/internals/systemInfoV2/ps-tree';
+import { psTree } from '../../packages/utils/src/internals/system-info/ps-tree.js';
const scripts = {
- parent: path.join(__dirname, 'fixtures', 'parent.js'),
- child: path.join(__dirname, 'fixtures', 'child.js'),
+ parent: path.join(import.meta.dirname, 'fixtures', 'parent.js'),
+ child: path.join(import.meta.dirname, 'fixtures', 'child.js'),
};
describe('psTree()', () => {
diff --git a/tsconfig.build.json b/tsconfig.build.json
index a60757218988..2ea673f57b08 100644
--- a/tsconfig.build.json
+++ b/tsconfig.build.json
@@ -1,16 +1,15 @@
{
"extends": "@apify/tsconfig",
"compilerOptions": {
- "target": "ES2020",
- "lib": ["ESNext", "DOM", "ES2020"],
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "target": "ESNext",
+ "lib": ["DOM", "ES2023"],
"baseUrl": ".",
"allowJs": true,
"skipLibCheck": true,
"resolveJsonModule": false,
- "emitDecoratorMetadata": false,
- "module": "Node16",
- "moduleResolution": "Node16"
+ "emitDecoratorMetadata": false
},
- "include": ["./packages/*/src/**/*"],
"exclude": ["**/node_modules", "**/dist"]
}
diff --git a/tsconfig.json b/tsconfig.json
index c2c65813fff7..57c09353ca6e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,17 +2,20 @@
"extends": "./tsconfig.build.json",
"compilerOptions": {
"baseUrl": ".",
+ "noErrorTruncation": true,
+ "sourceMap": true,
+ "declaration": true,
"paths": {
- "crawlee": ["packages/crawlee/src"],
- "@crawlee/basic": ["packages/basic-crawler/src"],
- "@crawlee/browser": ["packages/browser-crawler/src"],
- "@crawlee/http": ["packages/http-crawler/src"],
- "@crawlee/linkedom": ["packages/linkedom-crawler/src"],
- "@crawlee/jsdom": ["packages/jsdom-crawler/src"],
- "@crawlee/cheerio": ["packages/cheerio-crawler/src"],
- "@crawlee/playwright": ["packages/playwright-crawler/src"],
- "@crawlee/puppeteer": ["packages/puppeteer-crawler/src"],
- "@crawlee/*": ["packages/*/src"]
+ "crawlee": ["packages/crawlee/src/index.ts"],
+ "@crawlee/basic": ["packages/basic-crawler/src/index.ts"],
+ "@crawlee/browser": ["packages/browser-crawler/src/index.ts"],
+ "@crawlee/http": ["packages/http-crawler/src/index.ts"],
+ "@crawlee/linkedom": ["packages/linkedom-crawler/src/index.ts"],
+ "@crawlee/jsdom": ["packages/jsdom-crawler/src/index.ts"],
+ "@crawlee/cheerio": ["packages/cheerio-crawler/src/index.ts"],
+ "@crawlee/playwright": ["packages/playwright-crawler/src/index.ts"],
+ "@crawlee/puppeteer": ["packages/puppeteer-crawler/src/index.ts"],
+ "@crawlee/*": ["packages/*/src/index.ts"]
}
}
}
diff --git a/vitest.config.ts b/vitest.config.ts
index 2810f26ee093..d806faff22ac 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -2,7 +2,6 @@ import { resolve } from 'node:path';
import isCI from 'is-ci';
import tsconfigPaths from 'vite-tsconfig-paths';
-// @ts-ignore
import { defineConfig } from 'vitest/config';
let threads: { minThreads: number; maxThreads: number } | undefined;
diff --git a/yarn.lock b/yarn.lock
index 5c2c376bf9f5..8d01dbd79a8a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -15,14 +15,14 @@ __metadata:
languageName: node
linkType: hard
-"@apify/consts@npm:^2.20.0, @apify/consts@npm:^2.23.0, @apify/consts@npm:^2.25.0, @apify/consts@npm:^2.41.0":
- version: 2.41.0
- resolution: "@apify/consts@npm:2.41.0"
- checksum: 10c0/c4ecdcbea6655f441663589457d1702b146e9c7bb3da27be2ce07dd5d7ad4e12ee04e66f8f1ce573257c04176b14b125ec4399ef71dff2fd3fed675784c94741
+"@apify/consts@npm:^2.23.0, @apify/consts@npm:^2.25.0, @apify/consts@npm:^2.41.0, @apify/consts@npm:^2.43.0":
+ version: 2.43.0
+ resolution: "@apify/consts@npm:2.43.0"
+ checksum: 10c0/7340a443a721ea5a307ed69fd8f140d59bd71b9a684eb25fdffe41e9372e4dd1b4048fd3845d862a0a6072fc3ec3e0642c61a7e8a66860ea84650c8a13fc50f5
languageName: node
linkType: hard
-"@apify/datastructures@npm:^2.0.0, @apify/datastructures@npm:^2.0.3":
+"@apify/datastructures@npm:^2.0.3":
version: 2.0.3
resolution: "@apify/datastructures@npm:2.0.3"
checksum: 10c0/8ffed1b17be5a53ff2e1374316223c3ae813f40b197489ff5cf38d7ceb31e30400ed1536ca54126b02ce9d7a32066ca474b69a0c6e927a121e55b34c327e3a8a
@@ -30,13 +30,12 @@ __metadata:
linkType: hard
"@apify/eslint-config@npm:^1.0.0":
- version: 1.0.0
- resolution: "@apify/eslint-config@npm:1.0.0"
+ version: 1.1.0
+ resolution: "@apify/eslint-config@npm:1.1.0"
dependencies:
"@eslint/compat": "npm:^1.2.6"
- "@jirimoravcik/eslint-plugin-import": "npm:2.32.0"
eslint-config-airbnb-base: "npm:^15.0.0"
- eslint-plugin-import: "npm:^2.31.0"
+ eslint-plugin-import: "npm:^2.32.0"
eslint-plugin-simple-import-sort: "npm:^12.1.1"
globals: "npm:^15.14.0"
peerDependencies:
@@ -48,28 +47,28 @@ __metadata:
optional: true
typescript-eslint:
optional: true
- checksum: 10c0/8209477b867581c0a8fd502fe54ec6553cc0247f7b97a38e4e7d709416db1556222280917bc7324c0fc4df71d8931c39662377738e0c98b9ba144bb527625f27
+ checksum: 10c0/9c1461d859d02bbbb59a6004aa289054a7fca33e573d703ffb6fe62f021607ba298e1dba2ac8c1cc43362150be5444e0112efa98f768d8d06409c3f939671c0e
languageName: node
linkType: hard
-"@apify/input_secrets@npm:^1.1.40":
- version: 1.1.72
- resolution: "@apify/input_secrets@npm:1.1.72"
+"@apify/input_secrets@npm:^1.2.0":
+ version: 1.2.1
+ resolution: "@apify/input_secrets@npm:1.2.1"
dependencies:
- "@apify/log": "npm:^2.5.18"
- "@apify/utilities": "npm:^2.15.5"
+ "@apify/log": "npm:^2.5.20"
+ "@apify/utilities": "npm:^2.16.2"
ow: "npm:^0.28.2"
- checksum: 10c0/f4cda10751c981407cab1b4cc2890540c9f60113b6186eb94e9b366b92c9eb8bbf2fec5386f1939598894689ec169d0f7008dde3b924c60a6f70137d5d0b77ea
+ checksum: 10c0/0494940e807d33acc2779576a2fe4610bb359e535e8da31d3d06c5b2e6efda20a775711fcb51a1be0ed672116bee286bc00341d31135c9c27fcbe5b7f9f24a2d
languageName: node
linkType: hard
-"@apify/log@npm:^2.2.6, @apify/log@npm:^2.4.0, @apify/log@npm:^2.4.3, @apify/log@npm:^2.5.18":
- version: 2.5.18
- resolution: "@apify/log@npm:2.5.18"
+"@apify/log@npm:^2.2.6, @apify/log@npm:^2.4.3, @apify/log@npm:^2.5.18, @apify/log@npm:^2.5.20":
+ version: 2.5.20
+ resolution: "@apify/log@npm:2.5.20"
dependencies:
- "@apify/consts": "npm:^2.41.0"
+ "@apify/consts": "npm:^2.43.0"
ansi-colors: "npm:^4.1.1"
- checksum: 10c0/54895e9dbb2ba1d0884e17ce17268cd46d4bc74dd05c9a01bbfe6ea3728e9e446dea081b58d84c028437755026197851ee104167b5ff3d245db6a7599cffcbc0
+ checksum: 10c0/d0ead207dc6bc703e27e581b32cf452b23698777ac7cc58cffb0ca8ba9ab908a30d779ff2bb1fbb56c2c409daa7df60dd4cfbd203cc80a94da4f90b52d4fe3c7
languageName: node
linkType: hard
@@ -84,49 +83,49 @@ __metadata:
languageName: node
linkType: hard
-"@apify/pseudo_url@npm:^2.0.30":
- version: 2.0.59
- resolution: "@apify/pseudo_url@npm:2.0.59"
+"@apify/pseudo_url@npm:^2.0.59":
+ version: 2.0.61
+ resolution: "@apify/pseudo_url@npm:2.0.61"
dependencies:
- "@apify/log": "npm:^2.5.18"
- checksum: 10c0/ae4d5be32ab7261e59fa7cec691b1a44c6e9a144547a20308df242a8380efe56e97f1b7d13f5afb65e13134b19b5accb70148a84eff4d122f1afadeae149c7a8
+ "@apify/log": "npm:^2.5.20"
+ checksum: 10c0/6a5cec40db7f9d32f7ee35b9fe77a0b66dae40ece7e4d599db9085488d29f95243bf1e60ec27294611663985043fb71a00141296efc62aef4501d6208d0a4866
languageName: node
linkType: hard
-"@apify/timeout@npm:^0.3.0, @apify/timeout@npm:^0.3.1":
+"@apify/timeout@npm:^0.3.0, @apify/timeout@npm:^0.3.2":
version: 0.3.2
resolution: "@apify/timeout@npm:0.3.2"
checksum: 10c0/c7ea9b2f4e11788ec625af5a3fb1a992f3796cddb10569c2738d2c74d07b98f1ea8aeaced565ec8a3e809538d7e644d161a83b04ab8fac6212936d37d69cba7b
languageName: node
linkType: hard
-"@apify/tsconfig@npm:^0.1.0":
+"@apify/tsconfig@npm:^0.1.1":
version: 0.1.1
resolution: "@apify/tsconfig@npm:0.1.1"
checksum: 10c0/85b064b318ab71fc84a98d70b028ad510fe1be20452d057c0f4cda1b5c62cbe931e62f674ce927abda46c0b1cfc2f08f08a227b1d9385edb735d77b717dd9640
languageName: node
linkType: hard
-"@apify/utilities@npm:^2.13.0, @apify/utilities@npm:^2.15.5, @apify/utilities@npm:^2.7.10":
- version: 2.15.5
- resolution: "@apify/utilities@npm:2.15.5"
+"@apify/utilities@npm:^2.13.0, @apify/utilities@npm:^2.15.5, @apify/utilities@npm:^2.16.2":
+ version: 2.16.2
+ resolution: "@apify/utilities@npm:2.16.2"
dependencies:
- "@apify/consts": "npm:^2.41.0"
- "@apify/log": "npm:^2.5.18"
- checksum: 10c0/73b277d9accbf2e7bb0aead3a9eaf5cec49d9ad8c0380b6f5afa681fb2898435932f3ad8dac8d0788b01fceb114fa3a80de5e3530de65c2fea062c2151f8a9ed
+ "@apify/consts": "npm:^2.43.0"
+ "@apify/log": "npm:^2.5.20"
+ checksum: 10c0/8dfd522e0f7271ba5113795f9e5ad35b817df4520a8c450b38f692305dcf08a5bcb1a2c4e1ef01887d4b4c69b71ca95cd83064157716156498eb27432d6ef98b
languageName: node
linkType: hard
-"@asamuzakjp/css-color@npm:^3.1.2":
- version: 3.1.7
- resolution: "@asamuzakjp/css-color@npm:3.1.7"
+"@asamuzakjp/css-color@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "@asamuzakjp/css-color@npm:3.2.0"
dependencies:
"@csstools/css-calc": "npm:^2.1.3"
"@csstools/css-color-parser": "npm:^3.0.9"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
lru-cache: "npm:^10.4.3"
- checksum: 10c0/ac70af38c9b9d972941fe9dbed5221118077bc8f217617edbd534d9c7c281fd2c4023d0f0daa349d57b895cb73430d67d509b722226294bad2910a81d9439e91
+ checksum: 10c0/a4bf1c831751b1fae46b437e37e8a38c0b5bd58d23230157ae210bd1e905fe509b89b7c243e63d1522d852668a6292ed730a160e21342772b4e5b7b8ea14c092
languageName: node
linkType: hard
@@ -156,23 +155,23 @@ __metadata:
linkType: hard
"@babel/parser@npm:^7.25.4":
- version: 7.27.1
- resolution: "@babel/parser@npm:7.27.1"
+ version: 7.28.0
+ resolution: "@babel/parser@npm:7.28.0"
dependencies:
- "@babel/types": "npm:^7.27.1"
+ "@babel/types": "npm:^7.28.0"
bin:
parser: ./bin/babel-parser.js
- checksum: 10c0/ae4a5eda3ada3fd54c9942d9f14385df7a18e71b386cf2652505bb9a40a32250dfde3bdda71fb08af00b1e154f0a6213e6cdaaa88e9941229ec0003f7fead759
+ checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5
languageName: node
linkType: hard
-"@babel/types@npm:^7.25.4, @babel/types@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/types@npm:7.27.1"
+"@babel/types@npm:^7.25.4, @babel/types@npm:^7.28.0":
+ version: 7.28.1
+ resolution: "@babel/types@npm:7.28.1"
dependencies:
"@babel/helper-string-parser": "npm:^7.27.1"
"@babel/helper-validator-identifier": "npm:^7.27.1"
- checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377
+ checksum: 10c0/5e99b346c11ee42ffb0cadc28159fe0b184d865a2cc1593df79b199772a534f6453969b4942aa5e4a55a3081863096e1cc3fc1c724d826926dc787cf229b845d
languageName: node
linkType: hard
@@ -183,7 +182,7 @@ __metadata:
languageName: node
linkType: hard
-"@biomejs/biome@npm:^1.7.3":
+"@biomejs/biome@npm:^1.9.4":
version: 1.9.4
resolution: "@biomejs/biome@npm:1.9.4"
dependencies:
@@ -274,194 +273,194 @@ __metadata:
languageName: node
linkType: hard
-"@commitlint/cli@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/cli@npm:19.8.0"
+"@commitlint/cli@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/cli@npm:19.8.1"
dependencies:
- "@commitlint/format": "npm:^19.8.0"
- "@commitlint/lint": "npm:^19.8.0"
- "@commitlint/load": "npm:^19.8.0"
- "@commitlint/read": "npm:^19.8.0"
- "@commitlint/types": "npm:^19.8.0"
- tinyexec: "npm:^0.3.0"
+ "@commitlint/format": "npm:^19.8.1"
+ "@commitlint/lint": "npm:^19.8.1"
+ "@commitlint/load": "npm:^19.8.1"
+ "@commitlint/read": "npm:^19.8.1"
+ "@commitlint/types": "npm:^19.8.1"
+ tinyexec: "npm:^1.0.0"
yargs: "npm:^17.0.0"
bin:
commitlint: ./cli.js
- checksum: 10c0/6931c62c18b848b2c7266ec0b2d3a690a9ec9f83151a67a89ef20a49c84d5e6ee8dbaee4aaec14b2bd1229fdd91c7a0b41b7fd68c52fff8632a0037d52bd6eb2
+ checksum: 10c0/41a5b6aa27aaead8ed400eb212c87d06fdb8fae219ebccd37369a4aab2e3cff25afc4b3c3fa18df9dc19a0ae4ab6599f9adb5c836cad31c2589cb988aefe5515
languageName: node
linkType: hard
-"@commitlint/config-conventional@npm:^19.0.0":
- version: 19.8.0
- resolution: "@commitlint/config-conventional@npm:19.8.0"
+"@commitlint/config-conventional@npm:^19.8.0":
+ version: 19.8.1
+ resolution: "@commitlint/config-conventional@npm:19.8.1"
dependencies:
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/types": "npm:^19.8.1"
conventional-changelog-conventionalcommits: "npm:^7.0.2"
- checksum: 10c0/c0e2ad4ee8b793ad08ce8f0fd242d8111c71c81eba53b652431b7852e02d3eef0a383e234b7574429f5d1876b712a915921f6ff61fdaccdf708cbbaf3fa1f2f0
+ checksum: 10c0/654786e1acd64756e5c88838c19d9eb5d5ee7a6f314af65585dc18cc4002990e971614e7c69f49e5489be9430671aa5b39af005a2160c5a4f26391258d38febf
languageName: node
linkType: hard
-"@commitlint/config-validator@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/config-validator@npm:19.8.0"
+"@commitlint/config-validator@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/config-validator@npm:19.8.1"
dependencies:
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/types": "npm:^19.8.1"
ajv: "npm:^8.11.0"
- checksum: 10c0/968b3041dbf1683f9da443c2998a53ced52e86b98a48862f39f303af69638c72b7409840c16b3ded27eaa1636bdbf6b2464f8a2628c40d8f14a66a5474359ed5
+ checksum: 10c0/68f84f47503fb17845512b1da45d632211c07605e5a20ef5b56d8732b81a760fec6c5a41847b59a31628a2d40a44cc5c0cfa33e7e02247b198984bab66b06a5d
languageName: node
linkType: hard
-"@commitlint/ensure@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/ensure@npm:19.8.0"
+"@commitlint/ensure@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/ensure@npm:19.8.1"
dependencies:
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/types": "npm:^19.8.1"
lodash.camelcase: "npm:^4.3.0"
lodash.kebabcase: "npm:^4.1.1"
lodash.snakecase: "npm:^4.1.1"
lodash.startcase: "npm:^4.4.0"
lodash.upperfirst: "npm:^4.3.1"
- checksum: 10c0/5160dcf41c595496894cf1d075b4ee15c14b3689967d8693d4121689475d36853eceeb09fc4e07b6f002e7b8869e75418b0c1cd95d4ee32d062811301337875c
+ checksum: 10c0/1a2fdf51f333ab21ede58de82243bb53bb13dac91f3d5f1e20db865a6e5a09b51faef692badf4c59e911ad8f761c1e103827b485938b7e9688db389a444a8d7d
languageName: node
linkType: hard
-"@commitlint/execute-rule@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/execute-rule@npm:19.8.0"
- checksum: 10c0/fee5848e41680935510c6eebe2afcfe3511e2ccc39686c555f2e2db0205345479c7dbd84e7a8a2b22c7700ce75e6442b24685fbc3a419b0ea91f83a0850c6489
+"@commitlint/execute-rule@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/execute-rule@npm:19.8.1"
+ checksum: 10c0/dfdcec63f16a445c85b4bf540a5abe237f230cf5a357d9bd89142722d6bea6800cccadbd570b78d6799121ed51b0ed47fe12ab69ddd7edb53449b78e9f79a4be
languageName: node
linkType: hard
-"@commitlint/format@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/format@npm:19.8.0"
+"@commitlint/format@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/format@npm:19.8.1"
dependencies:
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/types": "npm:^19.8.1"
chalk: "npm:^5.3.0"
- checksum: 10c0/25de71d5b19c126e7e9f471dcf8015bc362ee94fec7ca0da866181832548cb4a04c18f732c8d7cc64641e896a33d0e199bd445edd9e0ef164b0e7bd7259b86b1
+ checksum: 10c0/cd8688b2abd426e2cae2ab752e43198b218cb11a0f4b45fc13655799d7cfe1192eb78c757d28bc7fe11151eabc1fee412a77f3248550b34c36612969eefe59cf
languageName: node
linkType: hard
-"@commitlint/is-ignored@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/is-ignored@npm:19.8.0"
+"@commitlint/is-ignored@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/is-ignored@npm:19.8.1"
dependencies:
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/types": "npm:^19.8.1"
semver: "npm:^7.6.0"
- checksum: 10c0/6f882266cca84fdc2a435cc01388b070c60cdda56dff6cb1bd98a443982d8bb90b186972450c733ee1190122882f53e715a7204d9fc9787b5303ca545985958c
+ checksum: 10c0/8b16583a7615f9b2a4fc8882ddd8140bfe3e909cc5d44b536d1b4e7857a90a8b15c27b30bb9b7a712b707f27c58014290a362dd8ecebdb1e8bde90d20c67eea6
languageName: node
linkType: hard
-"@commitlint/lint@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/lint@npm:19.8.0"
+"@commitlint/lint@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/lint@npm:19.8.1"
dependencies:
- "@commitlint/is-ignored": "npm:^19.8.0"
- "@commitlint/parse": "npm:^19.8.0"
- "@commitlint/rules": "npm:^19.8.0"
- "@commitlint/types": "npm:^19.8.0"
- checksum: 10c0/5ce1074e5ad1ed12158fb722d4d643be71c3ae35113c6b13faa71dd85a07eeafec50ef2fee3f3e6fccdbd8bf8684613aa097e287b54a7cbcae1f9f28e2b95e8d
+ "@commitlint/is-ignored": "npm:^19.8.1"
+ "@commitlint/parse": "npm:^19.8.1"
+ "@commitlint/rules": "npm:^19.8.1"
+ "@commitlint/types": "npm:^19.8.1"
+ checksum: 10c0/013ceb3acd7291d0e05e9c77ed160a3e8d04334b90f807f6d4fbc2682c86ba41b434721d229bf90784a59197353d80880d977a92fa6f6f025c4ab1b1773cf2ea
languageName: node
linkType: hard
-"@commitlint/load@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/load@npm:19.8.0"
+"@commitlint/load@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/load@npm:19.8.1"
dependencies:
- "@commitlint/config-validator": "npm:^19.8.0"
- "@commitlint/execute-rule": "npm:^19.8.0"
- "@commitlint/resolve-extends": "npm:^19.8.0"
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/config-validator": "npm:^19.8.1"
+ "@commitlint/execute-rule": "npm:^19.8.1"
+ "@commitlint/resolve-extends": "npm:^19.8.1"
+ "@commitlint/types": "npm:^19.8.1"
chalk: "npm:^5.3.0"
cosmiconfig: "npm:^9.0.0"
cosmiconfig-typescript-loader: "npm:^6.1.0"
lodash.isplainobject: "npm:^4.0.6"
lodash.merge: "npm:^4.6.2"
lodash.uniq: "npm:^4.5.0"
- checksum: 10c0/6826a015ce40ae6043ff45bf29c7d515822ea416ab2a2a6eec6a69e5ba81b71419cadd609070aa3695d59f5442c34e3c264889df343eb66595c130185db58bad
+ checksum: 10c0/a674080552f24c12b3e04f97d9dce515461fc0af6de90fe8ecd1671357361b8ce095f5598e71ca7599f7fd4a9b4d54a7c552769237c9ca6fb56dbd69742b1b4b
languageName: node
linkType: hard
-"@commitlint/message@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/message@npm:19.8.0"
- checksum: 10c0/a7390fade33e381a17d53ec16081bd6915d61cf4eb326739ee4b4c1f3a4016f84e953dd273126fcf23deaf5ca2ed49d75c0e667bc159dcfb26cb37ce840d97a9
+"@commitlint/message@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/message@npm:19.8.1"
+ checksum: 10c0/cd0b763d63dfe7a1b47402489fd82abe47e7c4bcc4eb71edfbc7a280f9aa83627ad30ad0cbf558e4694e39d01c523d56b0dd906c4a97629dbda57f9b00e30ccd
languageName: node
linkType: hard
-"@commitlint/parse@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/parse@npm:19.8.0"
+"@commitlint/parse@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/parse@npm:19.8.1"
dependencies:
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/types": "npm:^19.8.1"
conventional-changelog-angular: "npm:^7.0.0"
conventional-commits-parser: "npm:^5.0.0"
- checksum: 10c0/ece54b76d2bf6eb620d972810a8db276a104cbd29db6a3c7eb661fc6eaf8212fda04a42920eac56831f65af77bc4a8e15260c2c0881f351289d93e4cf5371cde
+ checksum: 10c0/9bad063ee83ba86cdab2e61b7ed3a6fc6e5e3c7ee1c6ae2335a7fa3578fed91fc92397ccfdb7e659d2b7bfea34e837bafbed7283037f0d10f731b099cfa9a03f
languageName: node
linkType: hard
-"@commitlint/read@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/read@npm:19.8.0"
+"@commitlint/read@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/read@npm:19.8.1"
dependencies:
- "@commitlint/top-level": "npm:^19.8.0"
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/top-level": "npm:^19.8.1"
+ "@commitlint/types": "npm:^19.8.1"
git-raw-commits: "npm:^4.0.0"
minimist: "npm:^1.2.8"
- tinyexec: "npm:^0.3.0"
- checksum: 10c0/94b9156f67b95d0ca7dd9653e399b7129d0b84c4940dc79a5264148688ca01c70780ef235b67d344059e575938c9e0988af9fa7233a793dcd74f49f9278e0e68
+ tinyexec: "npm:^1.0.0"
+ checksum: 10c0/a32a6d68b0178c1eca3ef58e32d4bbd5b70dc8ddc0b791c1697e5236bea1fac5ed3f97bc5e6e569399673e8341fbedf7e630f1171a40b3d756ac153d022ede68
languageName: node
linkType: hard
-"@commitlint/resolve-extends@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/resolve-extends@npm:19.8.0"
+"@commitlint/resolve-extends@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/resolve-extends@npm:19.8.1"
dependencies:
- "@commitlint/config-validator": "npm:^19.8.0"
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/config-validator": "npm:^19.8.1"
+ "@commitlint/types": "npm:^19.8.1"
global-directory: "npm:^4.0.1"
import-meta-resolve: "npm:^4.0.0"
lodash.mergewith: "npm:^4.6.2"
resolve-from: "npm:^5.0.0"
- checksum: 10c0/7b05d0c9bc2171e1475baeef13d30d6d985e1dd9cb4652355484a8d4841797dffd3e80edd5c61182cbfab1a28f4180ccbdef87bfa8f4586e057e05e238f5b19b
+ checksum: 10c0/0172a0c892ae7fb95e3d982db0c559735b76384241ce524bf7257bdafb2aa8239e039894629e777e1f34c28cc7bb0938b24befb494a6b383023c004bd97adb42
languageName: node
linkType: hard
-"@commitlint/rules@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/rules@npm:19.8.0"
+"@commitlint/rules@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/rules@npm:19.8.1"
dependencies:
- "@commitlint/ensure": "npm:^19.8.0"
- "@commitlint/message": "npm:^19.8.0"
- "@commitlint/to-lines": "npm:^19.8.0"
- "@commitlint/types": "npm:^19.8.0"
- checksum: 10c0/3d6e932dfbd4c6384d3b3ded66a9f886667988cae4b1ae091350198ae8ca5c703142f13ccd8b632a0d260fd48072f5bc67836c15e6d637033b97dac2c81c95dd
+ "@commitlint/ensure": "npm:^19.8.1"
+ "@commitlint/message": "npm:^19.8.1"
+ "@commitlint/to-lines": "npm:^19.8.1"
+ "@commitlint/types": "npm:^19.8.1"
+ checksum: 10c0/fa9d6ca268eec570b948d8c804f97557fd2ae2de1420e326ff387d1234fc1a255bf1ae4185affe307b2856b3b5f6ac9f13fe26b754990987b97d80b2d688076f
languageName: node
linkType: hard
-"@commitlint/to-lines@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/to-lines@npm:19.8.0"
- checksum: 10c0/1a0f34805615f244f34471138cfd5c8a45531ec3d1a0254370835db817dd06ec14181a8b281cd508632cf217d6cf5148473984bf4736d74b275fe69b8cd40863
+"@commitlint/to-lines@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/to-lines@npm:19.8.1"
+ checksum: 10c0/ad6592a550fb15379c454b8e017147dc4cecd5ee347b9a30fce0a19d80a9b5740562ac8f8fe4137864ac8bcc4892b682531c436e81b037bf4b7eb9cfc0aa016e
languageName: node
linkType: hard
-"@commitlint/top-level@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/top-level@npm:19.8.0"
+"@commitlint/top-level@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/top-level@npm:19.8.1"
dependencies:
find-up: "npm:^7.0.0"
- checksum: 10c0/04d39835bfb8d9f86b693d8d13bfe7e6566d48ac57e382e5139277bb0e5fa286645fe220c323fcb8e6569eea48ab26253c0eb4f6a142855a3a7b7565891ead7c
+ checksum: 10c0/718723dc68bf72e9cfdeb1ee0188dcd58738b1ae8c7503d8a2b0666ec26f28a9e86ec9e12b432ebf37f14d04eaca2c8c80329228992187f2560b20a97a11f41b
languageName: node
linkType: hard
-"@commitlint/types@npm:^19.8.0":
- version: 19.8.0
- resolution: "@commitlint/types@npm:19.8.0"
+"@commitlint/types@npm:^19.8.1":
+ version: 19.8.1
+ resolution: "@commitlint/types@npm:19.8.1"
dependencies:
"@types/conventional-commits-parser": "npm:^5.0.0"
chalk: "npm:^5.3.0"
- checksum: 10c0/634a5db20110675da8ddf226f200c33f262c6e99d06853fd4a2f6d543e6cc7dfe48b045f7ae76bcce2e39595099bfebe6a5dd6da37ff2968733c1263b8d46644
+ checksum: 10c0/0507db111d1ffd7b60e7ad979b7f9e674d409fc4c64561dfe30737b2c5bfefca7a1b58116106fa4ecb480059cecb13f04fa18f999d2d4a7d665b5ab13a05a803
languageName: node
linkType: hard
@@ -469,19 +468,19 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/basic@workspace:packages/basic-crawler"
dependencies:
- "@apify/log": "npm:^2.4.0"
- "@apify/timeout": "npm:^0.3.0"
- "@apify/utilities": "npm:^2.7.10"
+ "@apify/log": "npm:^2.5.18"
+ "@apify/timeout": "npm:^0.3.2"
+ "@apify/utilities": "npm:^2.15.5"
"@crawlee/core": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- csv-stringify: "npm:^6.2.0"
- fs-extra: "npm:^11.0.0"
- got-scraping: "npm:^4.0.0"
- ow: "npm:^0.28.1"
- tldts: "npm:^6.0.0"
- tslib: "npm:^2.4.0"
- type-fest: "npm:^4.0.0"
+ csv-stringify: "npm:^6.5.2"
+ fs-extra: "npm:^11.3.0"
+ got-scraping: "npm:^4.1.1"
+ ow: "npm:^2.0.0"
+ tldts: "npm:^7.0.6"
+ tslib: "npm:^2.8.1"
+ type-fest: "npm:^4.41.0"
languageName: unknown
linkType: soft
@@ -489,20 +488,20 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/browser-pool@workspace:packages/browser-pool"
dependencies:
- "@apify/log": "npm:^2.4.0"
- "@apify/timeout": "npm:^0.3.0"
+ "@apify/log": "npm:^2.5.18"
+ "@apify/timeout": "npm:^0.3.2"
"@crawlee/core": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
- fingerprint-generator: "npm:^2.0.6"
- fingerprint-injector: "npm:^2.0.5"
+ fingerprint-generator: "npm:^2.1.66"
+ fingerprint-injector: "npm:^2.1.66"
lodash.merge: "npm:^4.6.2"
- nanoid: "npm:^3.3.4"
- ow: "npm:^0.28.1"
- p-limit: "npm:^3.1.0"
- proxy-chain: "npm:^2.0.1"
- quick-lru: "npm:^5.1.1"
+ nanoid: "npm:^5.1.5"
+ ow: "npm:^2.0.0"
+ p-limit: "npm:^6.2.0"
+ proxy-chain: "npm:^2.5.8"
+ quick-lru: "npm:^7.0.1"
tiny-typed-emitter: "npm:^2.1.0"
- tslib: "npm:^2.4.0"
+ tslib: "npm:^2.8.1"
peerDependencies:
playwright: "*"
puppeteer: "*"
@@ -518,14 +517,14 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/browser@workspace:packages/browser-crawler"
dependencies:
- "@apify/timeout": "npm:^0.3.0"
+ "@apify/timeout": "npm:^0.3.2"
"@crawlee/basic": "npm:3.13.3"
"@crawlee/browser-pool": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- ow: "npm:^0.28.1"
- tslib: "npm:^2.4.0"
- type-fest: "npm:^4.0.0"
+ ow: "npm:^2.0.0"
+ tslib: "npm:^2.8.1"
+ type-fest: "npm:^4.41.0"
peerDependencies:
playwright: "*"
puppeteer: "*"
@@ -544,9 +543,9 @@ __metadata:
"@crawlee/http": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- cheerio: "npm:1.0.0-rc.12"
- htmlparser2: "npm:^9.0.0"
- tslib: "npm:^2.4.0"
+ cheerio: "npm:^1.0.0"
+ htmlparser2: "npm:^10.0.0"
+ tslib: "npm:^2.8.1"
languageName: unknown
linkType: soft
@@ -555,12 +554,11 @@ __metadata:
resolution: "@crawlee/cli@workspace:packages/cli"
dependencies:
"@crawlee/templates": "npm:3.13.3"
+ "@inquirer/prompts": "npm:^7.5.0"
ansi-colors: "npm:^4.1.3"
- fs-extra: "npm:^11.0.0"
- inquirer: "npm:^8.2.4"
- tslib: "npm:^2.4.0"
- yargonaut: "npm:^1.1.4"
- yargs: "npm:^17.5.1"
+ fs-extra: "npm:^11.3.0"
+ tslib: "npm:^2.8.1"
+ yargs: "npm:^18.0.0"
bin:
crawlee: ./src/index.ts
languageName: unknown
@@ -570,28 +568,28 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/core@workspace:packages/core"
dependencies:
- "@apify/consts": "npm:^2.20.0"
- "@apify/datastructures": "npm:^2.0.0"
- "@apify/log": "npm:^2.4.0"
- "@apify/pseudo_url": "npm:^2.0.30"
- "@apify/timeout": "npm:^0.3.0"
- "@apify/utilities": "npm:^2.7.10"
+ "@apify/consts": "npm:^2.41.0"
+ "@apify/datastructures": "npm:^2.0.3"
+ "@apify/log": "npm:^2.5.18"
+ "@apify/pseudo_url": "npm:^2.0.59"
+ "@apify/timeout": "npm:^0.3.2"
+ "@apify/utilities": "npm:^2.15.5"
"@crawlee/memory-storage": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- "@sapphire/async-queue": "npm:^1.5.1"
- "@vladfrangu/async_event_emitter": "npm:^2.2.2"
- csv-stringify: "npm:^6.2.0"
- fs-extra: "npm:^11.0.0"
- got-scraping: "npm:^4.0.0"
+ "@sapphire/async-queue": "npm:^1.5.5"
+ "@vladfrangu/async_event_emitter": "npm:^2.4.6"
+ csv-stringify: "npm:^6.5.2"
+ fs-extra: "npm:^11.3.0"
+ got-scraping: "npm:^4.1.1"
json5: "npm:^2.2.3"
- minimatch: "npm:^9.0.0"
- ow: "npm:^0.28.1"
- stream-json: "npm:^1.8.0"
- tldts: "npm:^6.0.0"
- tough-cookie: "npm:^5.0.0"
- tslib: "npm:^2.4.0"
- type-fest: "npm:^4.0.0"
+ minimatch: "npm:^10.0.1"
+ ow: "npm:^2.0.0"
+ stream-json: "npm:^1.9.1"
+ tldts: "npm:^7.0.6"
+ tough-cookie: "npm:^5.1.2"
+ tslib: "npm:^2.8.1"
+ type-fest: "npm:^4.41.0"
languageName: unknown
linkType: soft
@@ -599,20 +597,20 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/http@workspace:packages/http-crawler"
dependencies:
- "@apify/timeout": "npm:^0.3.0"
- "@apify/utilities": "npm:^2.7.10"
+ "@apify/timeout": "npm:^0.3.2"
+ "@apify/utilities": "npm:^2.15.5"
"@crawlee/basic": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- "@types/content-type": "npm:^1.1.5"
- cheerio: "npm:1.0.0-rc.12"
- content-type: "npm:^1.0.4"
- got-scraping: "npm:^4.0.0"
+ "@types/content-type": "npm:^1.1.8"
+ cheerio: "npm:^1.0.0"
+ content-type: "npm:^1.0.5"
+ got-scraping: "npm:^4.1.1"
iconv-lite: "npm:^0.6.3"
- mime-types: "npm:^2.1.35"
- ow: "npm:^0.28.1"
- tslib: "npm:^2.4.0"
- type-fest: "npm:^4.0.0"
+ mime-types: "npm:^3.0.1"
+ ow: "npm:^2.0.0"
+ tslib: "npm:^2.8.1"
+ type-fest: "npm:^4.41.0"
languageName: unknown
linkType: soft
@@ -622,9 +620,9 @@ __metadata:
dependencies:
"@apify/datastructures": "npm:^2.0.3"
"@crawlee/core": "npm:^3.13.3"
- impit: "npm:^0.4.3"
+ impit: "npm:^0.4.5"
peerDependencies:
- "@crawlee/core": ^3.12.1
+ "@crawlee/core": ^3.13.3
languageName: unknown
linkType: soft
@@ -632,16 +630,16 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/jsdom@workspace:packages/jsdom-crawler"
dependencies:
- "@apify/timeout": "npm:^0.3.0"
- "@apify/utilities": "npm:^2.7.10"
+ "@apify/timeout": "npm:^0.3.2"
+ "@apify/utilities": "npm:^2.15.5"
"@crawlee/http": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- "@types/jsdom": "npm:^21.0.0"
- cheerio: "npm:1.0.0-rc.12"
- jsdom: "npm:^26.0.0"
- ow: "npm:^0.28.2"
- tslib: "npm:^2.4.0"
+ "@types/jsdom": "npm:^21.1.7"
+ cheerio: "npm:^1.0.0"
+ jsdom: "npm:^26.1.0"
+ ow: "npm:^2.0.0"
+ tslib: "npm:^2.8.1"
languageName: unknown
linkType: soft
@@ -649,13 +647,13 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/linkedom@workspace:packages/linkedom-crawler"
dependencies:
- "@apify/timeout": "npm:^0.3.0"
- "@apify/utilities": "npm:^2.7.10"
+ "@apify/timeout": "npm:^0.3.2"
+ "@apify/utilities": "npm:^2.15.5"
"@crawlee/http": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
- linkedom: "npm:^0.18.0"
- ow: "npm:^0.28.2"
- tslib: "npm:^2.4.0"
+ linkedom: "npm:^0.18.10"
+ ow: "npm:^2.0.0"
+ tslib: "npm:^2.8.1"
languageName: unknown
linkType: soft
@@ -663,16 +661,16 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/memory-storage@workspace:packages/memory-storage"
dependencies:
- "@apify/log": "npm:^2.4.0"
+ "@apify/log": "npm:^2.5.18"
"@crawlee/types": "npm:3.13.3"
- "@sapphire/async-queue": "npm:^1.5.0"
- "@sapphire/shapeshift": "npm:^3.0.0"
- content-type: "npm:^1.0.4"
- fs-extra: "npm:^11.0.0"
+ "@sapphire/async-queue": "npm:^1.5.5"
+ "@sapphire/shapeshift": "npm:^4.0.0"
+ content-type: "npm:^1.0.5"
+ fs-extra: "npm:^11.3.0"
json5: "npm:^2.2.3"
- mime-types: "npm:^2.1.35"
+ mime-types: "npm:^3.0.1"
proper-lockfile: "npm:^4.1.2"
- tslib: "npm:^2.4.0"
+ tslib: "npm:^2.8.1"
languageName: unknown
linkType: soft
@@ -680,23 +678,22 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/playwright@workspace:packages/playwright-crawler"
dependencies:
- "@apify/datastructures": "npm:^2.0.0"
- "@apify/log": "npm:^2.4.0"
- "@apify/timeout": "npm:^0.3.1"
+ "@apify/datastructures": "npm:^2.0.3"
+ "@apify/log": "npm:^2.5.18"
+ "@apify/timeout": "npm:^0.3.2"
"@crawlee/browser": "npm:3.13.3"
"@crawlee/browser-pool": "npm:3.13.3"
"@crawlee/core": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- cheerio: "npm:1.0.0-rc.12"
- idcac-playwright: "npm:^0.1.2"
- jquery: "npm:^3.6.0"
- lodash.isequal: "npm:^4.5.0"
+ cheerio: "npm:^1.0.0"
+ idcac-playwright: "npm:^0.1.3"
+ jquery: "npm:^3.7.1"
ml-logistic-regression: "npm:^2.0.0"
- ml-matrix: "npm:^6.11.0"
- ow: "npm:^0.28.1"
+ ml-matrix: "npm:^6.12.1"
+ ow: "npm:^2.0.0"
string-comparison: "npm:^1.3.0"
- tslib: "npm:^2.4.0"
+ tslib: "npm:^2.8.1"
peerDependencies:
playwright: "*"
peerDependenciesMeta:
@@ -709,18 +706,18 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/puppeteer@workspace:packages/puppeteer-crawler"
dependencies:
- "@apify/datastructures": "npm:^2.0.0"
- "@apify/log": "npm:^2.4.0"
+ "@apify/datastructures": "npm:^2.0.3"
+ "@apify/log": "npm:^2.5.18"
"@crawlee/browser": "npm:3.13.3"
"@crawlee/browser-pool": "npm:3.13.3"
"@crawlee/types": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- cheerio: "npm:1.0.0-rc.12"
+ cheerio: "npm:^1.0.0"
devtools-protocol: "npm:*"
- idcac-playwright: "npm:^0.1.2"
- jquery: "npm:^3.6.0"
- ow: "npm:^0.28.1"
- tslib: "npm:^2.4.0"
+ idcac-playwright: "npm:^0.1.3"
+ jquery: "npm:^3.7.1"
+ ow: "npm:^2.0.0"
+ tslib: "npm:^2.8.1"
peerDependencies:
puppeteer: "*"
peerDependenciesMeta:
@@ -734,65 +731,66 @@ __metadata:
resolution: "@crawlee/root@workspace:."
dependencies:
"@apify/eslint-config": "npm:^1.0.0"
- "@apify/log": "npm:^2.4.0"
- "@apify/tsconfig": "npm:^0.1.0"
- "@biomejs/biome": "npm:^1.7.3"
- "@commitlint/config-conventional": "npm:^19.0.0"
+ "@apify/log": "npm:^2.5.18"
+ "@apify/tsconfig": "npm:^0.1.1"
+ "@biomejs/biome": "npm:^1.9.4"
+ "@commitlint/config-conventional": "npm:^19.8.0"
"@playwright/browser-chromium": "npm:1.52.0"
"@playwright/browser-firefox": "npm:1.52.0"
"@playwright/browser-webkit": "npm:1.52.0"
"@stylistic/eslint-plugin-ts": "npm:^4.2.0"
- "@types/content-type": "npm:^1.1.5"
- "@types/deep-equal": "npm:^1.0.1"
- "@types/domhandler": "npm:^2.4.2"
- "@types/express": "npm:^4.17.13"
- "@types/fs-extra": "npm:^11.0.0"
- "@types/inquirer": "npm:^8.2.1"
- "@types/is-ci": "npm:^3.0.1"
+ "@types/content-type": "npm:^1.1.8"
+ "@types/deep-equal": "npm:^1.0.4"
+ "@types/domhandler": "npm:^3.1.0"
+ "@types/express": "npm:^5.0.1"
+ "@types/fs-extra": "npm:^11.0.4"
+ "@types/inquirer": "npm:^9.0.8"
+ "@types/is-ci": "npm:^3.0.4"
"@types/lodash.isequal": "npm:^4.5.8"
- "@types/lodash.merge": "npm:^4.6.7"
- "@types/mime-types": "npm:^2.1.1"
- "@types/node": "npm:^22.5.1"
- "@types/proper-lockfile": "npm:^4.1.2"
- "@types/ps-tree": "npm:^1.1.2"
- "@types/rimraf": "npm:^4.0.0"
- "@types/sax": "npm:^1.0.0"
- "@types/semver": "npm:^7.3.12"
- "@types/stream-json": "npm:^1.7.2"
- "@types/yargs": "npm:^17.0.26"
- "@vitest/coverage-v8": "npm:^3.0.0"
+ "@types/lodash.merge": "npm:^4.6.9"
+ "@types/mime-types": "npm:^2.1.4"
+ "@types/node": "npm:^22.15.14"
+ "@types/proper-lockfile": "npm:^4.1.4"
+ "@types/ps-tree": "npm:^1.1.6"
+ "@types/rimraf": "npm:^4.0.5"
+ "@types/sax": "npm:^1.2.7"
+ "@types/semver": "npm:^7.7.0"
+ "@types/stream-json": "npm:^1.7.8"
+ "@types/whatwg-mimetype": "npm:^3.0.2"
+ "@types/yargs": "npm:^17.0.33"
+ "@vitest/coverage-v8": "npm:^3.1.3"
apify: "npm:*"
- apify-node-curl-impersonate: "npm:^1.0.15"
+ apify-node-curl-impersonate: "npm:^1.0.23"
basic-auth-parser: "npm:^0.0.2"
- body-parser: "npm:^2.0.0"
- camoufox-js: "npm:^0.3.0"
- commitlint: "npm:^19.0.0"
+ body-parser: "npm:^2.2.0"
+ camoufox-js: "npm:^0.3.5"
+ commitlint: "npm:^19.8.0"
+ crawlee: "npm:^3.13.3"
cross-env: "npm:^7.0.3"
- deep-equal: "npm:^2.0.5"
- eslint: "npm:^9.23.0"
- eslint-config-prettier: "npm:^10.1.1"
- express: "npm:^4.18.1"
- fs-extra: "npm:^11.0.0"
- gen-esm-wrapper: "npm:^1.1.3"
- globals: "npm:^16.0.0"
- globby: "npm:^14.0.0"
- got: "npm:^13.0.0"
- husky: "npm:^9.0.11"
- is-ci: "npm:^4.0.0"
- lerna: "npm:^8.0.0"
- lint-staged: "npm:^15.0.0"
- nock: "npm:^13.4.0"
- playwright: "npm:1.51.1"
+ deep-equal: "npm:^2.2.3"
+ eslint: "npm:^9.26.0"
+ eslint-config-prettier: "npm:^10.1.3"
+ express: "npm:^5.1.0"
+ fs-extra: "npm:^11.3.0"
+ globals: "npm:^16.1.0"
+ globby: "npm:^14.1.0"
+ got: "npm:^14.4.7"
+ husky: "npm:^9.1.7"
+ is-ci: "npm:^4.1.0"
+ lerna: "npm:^8.2.2"
+ lint-staged: "npm:^15.5.2"
+ nock: "npm:^13.5.6"
+ playwright: "npm:1.52.0"
portastic: "npm:^1.0.1"
- proxy: "npm:^1.0.2"
- puppeteer: "npm:24.6.1"
- rimraf: "npm:^6.0.0"
- tsx: "npm:^4.4.0"
- turbo: "npm:^2.1.0"
- typescript: "npm:^5.7.3"
- typescript-eslint: "npm:^8.28.0"
- vite-tsconfig-paths: "npm:^4.3.2"
- vitest: "npm:^3.0.0"
+ proxy: "npm:^2.2.0"
+ puppeteer: "npm:24.8.2"
+ rimraf: "npm:^6.0.1"
+ tsx: "npm:^4.19.4"
+ turbo: "npm:^2.5.3"
+ typescript: "npm:^5.8.3"
+ typescript-eslint: "npm:^8.32.0"
+ vite-tsconfig-paths: "npm:^5.1.4"
+ vitest: "npm:^3.1.3"
languageName: unknown
linkType: soft
@@ -800,11 +798,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/templates@workspace:packages/templates"
dependencies:
- ansi-colors: "npm:^4.1.3"
- inquirer: "npm:^9.0.0"
- tslib: "npm:^2.4.0"
- yargonaut: "npm:^1.1.4"
- yargs: "npm:^17.5.1"
+ tslib: "npm:^2.8.1"
languageName: unknown
linkType: soft
@@ -812,7 +806,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/types@workspace:packages/types"
dependencies:
- tslib: "npm:^2.4.0"
+ tslib: "npm:^2.8.1"
languageName: unknown
linkType: soft
@@ -820,18 +814,17 @@ __metadata:
version: 0.0.0-use.local
resolution: "@crawlee/utils@workspace:packages/utils"
dependencies:
- "@apify/log": "npm:^2.4.0"
+ "@apify/log": "npm:^2.5.18"
"@apify/ps-tree": "npm:^1.2.0"
"@crawlee/types": "npm:3.13.3"
"@types/sax": "npm:^1.2.7"
- "@types/whatwg-mimetype": "npm:^3.0.2"
- cheerio: "npm:1.0.0-rc.12"
- file-type: "npm:^20.0.0"
- got-scraping: "npm:^4.0.3"
- ow: "npm:^0.28.1"
+ cheerio: "npm:^1.0.0"
+ file-type: "npm:^21.0.0"
+ got-scraping: "npm:^4.1.1"
+ ow: "npm:^2.0.0"
robots-parser: "npm:^3.0.1"
sax: "npm:^1.4.1"
- tslib: "npm:^2.4.0"
+ tslib: "npm:^2.8.1"
whatwg-mimetype: "npm:^4.0.0"
languageName: unknown
linkType: soft
@@ -843,410 +836,256 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/css-calc@npm:^2.1.3":
- version: 2.1.3
- resolution: "@csstools/css-calc@npm:2.1.3"
+"@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4":
+ version: 2.1.4
+ resolution: "@csstools/css-calc@npm:2.1.4"
peerDependencies:
- "@csstools/css-parser-algorithms": ^3.0.4
- "@csstools/css-tokenizer": ^3.0.3
- checksum: 10c0/85f5b4f96d60f395d5f0108056b0ddee037b22d6deba448d74324b50f1c554de284f84715ebfac7b2888b78e09d20d02a7cd213ee7bdaa71011ea9b4eee3a251
+ "@csstools/css-parser-algorithms": ^3.0.5
+ "@csstools/css-tokenizer": ^3.0.4
+ checksum: 10c0/42ce5793e55ec4d772083808a11e9fb2dfe36db3ec168713069a276b4c3882205b3507c4680224c28a5d35fe0bc2d308c77f8f2c39c7c09aad8747708eb8ddd8
languageName: node
linkType: hard
"@csstools/css-color-parser@npm:^3.0.9":
- version: 3.0.9
- resolution: "@csstools/css-color-parser@npm:3.0.9"
+ version: 3.0.10
+ resolution: "@csstools/css-color-parser@npm:3.0.10"
dependencies:
"@csstools/color-helpers": "npm:^5.0.2"
- "@csstools/css-calc": "npm:^2.1.3"
+ "@csstools/css-calc": "npm:^2.1.4"
peerDependencies:
- "@csstools/css-parser-algorithms": ^3.0.4
- "@csstools/css-tokenizer": ^3.0.3
- checksum: 10c0/acc026a6bd6d8c4c641fa5f9b4d77cd5dfa54c57c3278ae52329d96b5837723428dcb93c34db4062bbea2f45a98451119df06eaf39fd196aaf6368c59d799f20
+ "@csstools/css-parser-algorithms": ^3.0.5
+ "@csstools/css-tokenizer": ^3.0.4
+ checksum: 10c0/8f8a2395b117c2f09366b5c9bf49bc740c92a65b6330fe3cc1e76abafd0d1000e42a657d7b0a3814846a66f1d69896142f7e36d7a4aca77de977e5cc5f944747
languageName: node
linkType: hard
"@csstools/css-parser-algorithms@npm:^3.0.4":
- version: 3.0.4
- resolution: "@csstools/css-parser-algorithms@npm:3.0.4"
+ version: 3.0.5
+ resolution: "@csstools/css-parser-algorithms@npm:3.0.5"
peerDependencies:
- "@csstools/css-tokenizer": ^3.0.3
- checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd
+ "@csstools/css-tokenizer": ^3.0.4
+ checksum: 10c0/d9a1c888bd43849ae3437ca39251d5c95d2c8fd6b5ccdb7c45491dfd2c1cbdc3075645e80901d120e4d2c1993db9a5b2d83793b779dbbabcfb132adb142eb7f7
languageName: node
linkType: hard
"@csstools/css-tokenizer@npm:^3.0.3":
- version: 3.0.3
- resolution: "@csstools/css-tokenizer@npm:3.0.3"
- checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5
+ version: 3.0.4
+ resolution: "@csstools/css-tokenizer@npm:3.0.4"
+ checksum: 10c0/3b589f8e9942075a642213b389bab75a2d50d05d203727fcdac6827648a5572674caff07907eff3f9a2389d86a4ee47308fafe4f8588f4a77b7167c588d2559f
languageName: node
linkType: hard
"@emnapi/core@npm:^1.1.0":
- version: 1.4.3
- resolution: "@emnapi/core@npm:1.4.3"
+ version: 1.4.5
+ resolution: "@emnapi/core@npm:1.4.5"
dependencies:
- "@emnapi/wasi-threads": "npm:1.0.2"
+ "@emnapi/wasi-threads": "npm:1.0.4"
tslib: "npm:^2.4.0"
- checksum: 10c0/e30101d16d37ef3283538a35cad60e22095aff2403fb9226a35330b932eb6740b81364d525537a94eb4fb51355e48ae9b10d779c0dd1cdcd55d71461fe4b45c7
+ checksum: 10c0/da4a57f65f325d720d0e0d1a9c6618b90c4c43a5027834a110476984e1d47c95ebaed4d316b5dddb9c0ed9a493ffeb97d1934f9677035f336d8a36c1f3b2818f
languageName: node
linkType: hard
"@emnapi/runtime@npm:^1.1.0":
- version: 1.4.3
- resolution: "@emnapi/runtime@npm:1.4.3"
+ version: 1.4.5
+ resolution: "@emnapi/runtime@npm:1.4.5"
dependencies:
tslib: "npm:^2.4.0"
- checksum: 10c0/3b7ab72d21cb4e034f07df80165265f85f445ef3f581d1bc87b67e5239428baa00200b68a7d5e37a0425c3a78320b541b07f76c5530f6f6f95336a6294ebf30b
+ checksum: 10c0/37a0278be5ac81e918efe36f1449875cbafba947039c53c65a1f8fc238001b866446fc66041513b286baaff5d6f9bec667f5164b3ca481373a8d9cb65bfc984b
languageName: node
linkType: hard
-"@emnapi/wasi-threads@npm:1.0.2":
- version: 1.0.2
- resolution: "@emnapi/wasi-threads@npm:1.0.2"
+"@emnapi/wasi-threads@npm:1.0.4":
+ version: 1.0.4
+ resolution: "@emnapi/wasi-threads@npm:1.0.4"
dependencies:
tslib: "npm:^2.4.0"
- checksum: 10c0/f0621b1fc715221bd2d8332c0ca922617bcd77cdb3050eae50a124eb8923c54fa425d23982dc8f29d505c8798a62d1049bace8b0686098ff9dd82270e06d772e
- languageName: node
- linkType: hard
-
-"@esbuild/aix-ppc64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/aix-ppc64@npm:0.21.5"
- conditions: os=aix & cpu=ppc64
+ checksum: 10c0/2c91a53e62f875800baf035c4d42c9c0d18e5afd9a31ca2aac8b435aeaeaeaac386b5b3d0d0e70aa7a5a9852bbe05106b1f680cd82cce03145c703b423d41313
languageName: node
linkType: hard
-"@esbuild/aix-ppc64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/aix-ppc64@npm:0.25.3"
+"@esbuild/aix-ppc64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/aix-ppc64@npm:0.25.6"
conditions: os=aix & cpu=ppc64
languageName: node
linkType: hard
-"@esbuild/android-arm64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/android-arm64@npm:0.21.5"
+"@esbuild/android-arm64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/android-arm64@npm:0.25.6"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/android-arm64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/android-arm64@npm:0.25.3"
- conditions: os=android & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/android-arm@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/android-arm@npm:0.21.5"
+"@esbuild/android-arm@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/android-arm@npm:0.25.6"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
-"@esbuild/android-arm@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/android-arm@npm:0.25.3"
- conditions: os=android & cpu=arm
- languageName: node
- linkType: hard
-
-"@esbuild/android-x64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/android-x64@npm:0.21.5"
- conditions: os=android & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/android-x64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/android-x64@npm:0.25.3"
+"@esbuild/android-x64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/android-x64@npm:0.25.6"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
-"@esbuild/darwin-arm64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/darwin-arm64@npm:0.21.5"
+"@esbuild/darwin-arm64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/darwin-arm64@npm:0.25.6"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/darwin-arm64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/darwin-arm64@npm:0.25.3"
- conditions: os=darwin & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/darwin-x64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/darwin-x64@npm:0.21.5"
- conditions: os=darwin & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/darwin-x64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/darwin-x64@npm:0.25.3"
+"@esbuild/darwin-x64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/darwin-x64@npm:0.25.6"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@esbuild/freebsd-arm64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/freebsd-arm64@npm:0.21.5"
+"@esbuild/freebsd-arm64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/freebsd-arm64@npm:0.25.6"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/freebsd-arm64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/freebsd-arm64@npm:0.25.3"
- conditions: os=freebsd & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/freebsd-x64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/freebsd-x64@npm:0.21.5"
+"@esbuild/freebsd-x64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/freebsd-x64@npm:0.25.6"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/freebsd-x64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/freebsd-x64@npm:0.25.3"
- conditions: os=freebsd & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-arm64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-arm64@npm:0.21.5"
+"@esbuild/linux-arm64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-arm64@npm:0.25.6"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/linux-arm64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-arm64@npm:0.25.3"
- conditions: os=linux & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-arm@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-arm@npm:0.21.5"
+"@esbuild/linux-arm@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-arm@npm:0.25.6"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
-"@esbuild/linux-arm@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-arm@npm:0.25.3"
- conditions: os=linux & cpu=arm
- languageName: node
- linkType: hard
-
-"@esbuild/linux-ia32@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-ia32@npm:0.21.5"
+"@esbuild/linux-ia32@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-ia32@npm:0.25.6"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
-"@esbuild/linux-ia32@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-ia32@npm:0.25.3"
- conditions: os=linux & cpu=ia32
- languageName: node
- linkType: hard
-
-"@esbuild/linux-loong64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-loong64@npm:0.21.5"
+"@esbuild/linux-loong64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-loong64@npm:0.25.6"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
-"@esbuild/linux-loong64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-loong64@npm:0.25.3"
- conditions: os=linux & cpu=loong64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-mips64el@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-mips64el@npm:0.21.5"
+"@esbuild/linux-mips64el@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-mips64el@npm:0.25.6"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
-"@esbuild/linux-mips64el@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-mips64el@npm:0.25.3"
- conditions: os=linux & cpu=mips64el
- languageName: node
- linkType: hard
-
-"@esbuild/linux-ppc64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-ppc64@npm:0.21.5"
- conditions: os=linux & cpu=ppc64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-ppc64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-ppc64@npm:0.25.3"
+"@esbuild/linux-ppc64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-ppc64@npm:0.25.6"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
-"@esbuild/linux-riscv64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-riscv64@npm:0.21.5"
+"@esbuild/linux-riscv64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-riscv64@npm:0.25.6"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
-"@esbuild/linux-riscv64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-riscv64@npm:0.25.3"
- conditions: os=linux & cpu=riscv64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-s390x@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-s390x@npm:0.21.5"
+"@esbuild/linux-s390x@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-s390x@npm:0.25.6"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
-"@esbuild/linux-s390x@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-s390x@npm:0.25.3"
- conditions: os=linux & cpu=s390x
- languageName: node
- linkType: hard
-
-"@esbuild/linux-x64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/linux-x64@npm:0.21.5"
- conditions: os=linux & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-x64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/linux-x64@npm:0.25.3"
+"@esbuild/linux-x64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/linux-x64@npm:0.25.6"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
-"@esbuild/netbsd-arm64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/netbsd-arm64@npm:0.25.3"
+"@esbuild/netbsd-arm64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/netbsd-arm64@npm:0.25.6"
conditions: os=netbsd & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/netbsd-x64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/netbsd-x64@npm:0.21.5"
- conditions: os=netbsd & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/netbsd-x64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/netbsd-x64@npm:0.25.3"
+"@esbuild/netbsd-x64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/netbsd-x64@npm:0.25.6"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/openbsd-arm64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/openbsd-arm64@npm:0.25.3"
+"@esbuild/openbsd-arm64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/openbsd-arm64@npm:0.25.6"
conditions: os=openbsd & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/openbsd-x64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/openbsd-x64@npm:0.21.5"
- conditions: os=openbsd & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/openbsd-x64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/openbsd-x64@npm:0.25.3"
+"@esbuild/openbsd-x64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/openbsd-x64@npm:0.25.6"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/sunos-x64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/sunos-x64@npm:0.21.5"
- conditions: os=sunos & cpu=x64
+"@esbuild/openharmony-arm64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/openharmony-arm64@npm:0.25.6"
+ conditions: os=openharmony & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/sunos-x64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/sunos-x64@npm:0.25.3"
+"@esbuild/sunos-x64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/sunos-x64@npm:0.25.6"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
-"@esbuild/win32-arm64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/win32-arm64@npm:0.21.5"
+"@esbuild/win32-arm64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/win32-arm64@npm:0.25.6"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/win32-arm64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/win32-arm64@npm:0.25.3"
- conditions: os=win32 & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/win32-ia32@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/win32-ia32@npm:0.21.5"
+"@esbuild/win32-ia32@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/win32-ia32@npm:0.25.6"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@esbuild/win32-ia32@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/win32-ia32@npm:0.25.3"
- conditions: os=win32 & cpu=ia32
- languageName: node
- linkType: hard
-
-"@esbuild/win32-x64@npm:0.21.5":
- version: 0.21.5
- resolution: "@esbuild/win32-x64@npm:0.21.5"
+"@esbuild/win32-x64@npm:0.25.6":
+ version: 0.25.6
+ resolution: "@esbuild/win32-x64@npm:0.25.6"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
-"@esbuild/win32-x64@npm:0.25.3":
- version: 0.25.3
- resolution: "@esbuild/win32-x64@npm:0.25.3"
- conditions: os=win32 & cpu=x64
- languageName: node
- linkType: hard
-
-"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
+"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.7.0":
version: 4.7.0
resolution: "@eslint-community/eslint-utils@npm:4.7.0"
dependencies:
@@ -1265,41 +1104,41 @@ __metadata:
linkType: hard
"@eslint/compat@npm:^1.2.6":
- version: 1.2.9
- resolution: "@eslint/compat@npm:1.2.9"
+ version: 1.3.1
+ resolution: "@eslint/compat@npm:1.3.1"
peerDependencies:
- eslint: ^9.10.0
+ eslint: ^8.40 || 9
peerDependenciesMeta:
eslint:
optional: true
- checksum: 10c0/e912058f1e3847a1eec654c0c040467b676bd48171e915c730c7215f57cf5f4db8508c4a431ccb470f4a000d94559b41c4fe8de3d71f23eb8ae7acf4959e1c06
+ checksum: 10c0/8dfcea5ecb854111f9c0acc23a469e0a25cdaddceb5fb40c47988c247d6e32ec199bcd00f1b8ba9ed779228526552703c4b74948169e78b78b5fd814e04b042b
languageName: node
linkType: hard
-"@eslint/config-array@npm:^0.20.0":
- version: 0.20.0
- resolution: "@eslint/config-array@npm:0.20.0"
+"@eslint/config-array@npm:^0.21.0":
+ version: 0.21.0
+ resolution: "@eslint/config-array@npm:0.21.0"
dependencies:
"@eslint/object-schema": "npm:^2.1.6"
debug: "npm:^4.3.1"
minimatch: "npm:^3.1.2"
- checksum: 10c0/94bc5d0abb96dc5295ff559925242ff75a54eacfb3576677e95917e42f7175e1c4b87bf039aa2a872f949b4852ad9724bf2f7529aaea6b98f28bb3fca7f1d659
+ checksum: 10c0/0ea801139166c4aa56465b309af512ef9b2d3c68f9198751bbc3e21894fe70f25fbf26e1b0e9fffff41857bc21bfddeee58649ae6d79aadcd747db0c5dca771f
languageName: node
linkType: hard
-"@eslint/config-helpers@npm:^0.2.1":
- version: 0.2.2
- resolution: "@eslint/config-helpers@npm:0.2.2"
- checksum: 10c0/98f7cefe484bb754674585d9e73cf1414a3ab4fd0783c385465288d13eb1a8d8e7d7b0611259fc52b76b396c11a13517be5036d1f48eeb877f6f0a6b9c4f03ad
+"@eslint/config-helpers@npm:^0.3.0":
+ version: 0.3.0
+ resolution: "@eslint/config-helpers@npm:0.3.0"
+ checksum: 10c0/013ae7b189eeae8b30cc2ee87bc5c9c091a9cd615579003290eb28bebad5d78806a478e74ba10b3fe08ed66975b52af7d2cd4b4b43990376412b14e5664878c8
languageName: node
linkType: hard
-"@eslint/core@npm:^0.13.0":
- version: 0.13.0
- resolution: "@eslint/core@npm:0.13.0"
+"@eslint/core@npm:^0.15.0, @eslint/core@npm:^0.15.1":
+ version: 0.15.1
+ resolution: "@eslint/core@npm:0.15.1"
dependencies:
"@types/json-schema": "npm:^7.0.15"
- checksum: 10c0/ba724a7df7ed9dab387481f11d0d0f708180f40be93acce2c21dacca625c5867de3528760c42f1c457ccefe6a669d525ff87b779017eabc0d33479a36300797b
+ checksum: 10c0/abaf641940776638b8c15a38d99ce0dac551a8939310ec81b9acd15836a574cf362588eaab03ab11919bc2a0f9648b19ea8dee33bf12675eb5b6fd38bda6f25e
languageName: node
linkType: hard
@@ -1320,10 +1159,10 @@ __metadata:
languageName: node
linkType: hard
-"@eslint/js@npm:9.26.0":
- version: 9.26.0
- resolution: "@eslint/js@npm:9.26.0"
- checksum: 10c0/89fa45b7ff7f3c2589ea1f04a31b4f6d41ad85ecac98e519195e8b3a908b103c892ac19c4aec0629cfeccefd9e5b63c2f1269183d63016e7de722b97a085dcf4
+"@eslint/js@npm:9.31.0":
+ version: 9.31.0
+ resolution: "@eslint/js@npm:9.31.0"
+ checksum: 10c0/f9d4c73d0fafe70679a418cbb25ab7ebcc8f1dba6c32456d6f8ba5a137d583ecff233cfe10f61f41d7d4d2220e94cff1f39fc7ed1fa3819d1888dee1cad678ea
languageName: node
linkType: hard
@@ -1334,13 +1173,13 @@ __metadata:
languageName: node
linkType: hard
-"@eslint/plugin-kit@npm:^0.2.8":
- version: 0.2.8
- resolution: "@eslint/plugin-kit@npm:0.2.8"
+"@eslint/plugin-kit@npm:^0.3.1":
+ version: 0.3.3
+ resolution: "@eslint/plugin-kit@npm:0.3.3"
dependencies:
- "@eslint/core": "npm:^0.13.0"
+ "@eslint/core": "npm:^0.15.1"
levn: "npm:^0.4.1"
- checksum: 10c0/554847c8f2b6bfe0e634f317fc43d0b54771eea0015c4f844f75915fdb9e6170c830c004291bad57db949d61771732e459f36ed059f45cf750af223f77357c5c
+ checksum: 10c0/c61888eb8757abc0d25a53c1832f85521c2f347126c475eb32d3596be3505e8619e0ceddee7346d195089a2eb1633b61e6127a5772b8965a85eb9f55b8b1cebe
languageName: node
linkType: hard
@@ -1383,9 +1222,9 @@ __metadata:
linkType: hard
"@humanwhocodes/retry@npm:^0.4.2":
- version: 0.4.2
- resolution: "@humanwhocodes/retry@npm:0.4.2"
- checksum: 10c0/0235525d38f243bee3bf8b25ed395fbf957fb51c08adae52787e1325673071abe856c7e18e530922ed2dd3ce12ed82ba01b8cee0279ac52a3315fcdc3a69ef0c
+ version: 0.4.3
+ resolution: "@humanwhocodes/retry@npm:0.4.3"
+ checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42
languageName: node
linkType: hard
@@ -1396,10 +1235,244 @@ __metadata:
languageName: node
linkType: hard
-"@inquirer/figures@npm:^1.0.3":
- version: 1.0.11
- resolution: "@inquirer/figures@npm:1.0.11"
- checksum: 10c0/6270e24eebbe42bbc4e7f8e761e906be66b4896787f31ab3e7484ad271c8edc90bce4ec20e232a5da447aee4fc73803397b2dda8cf645f4f7eea83e773b44e1e
+"@inquirer/checkbox@npm:^4.1.9":
+ version: 4.1.9
+ resolution: "@inquirer/checkbox@npm:4.1.9"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/figures": "npm:^1.0.12"
+ "@inquirer/type": "npm:^3.0.7"
+ ansi-escapes: "npm:^4.3.2"
+ yoctocolors-cjs: "npm:^2.1.2"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/d1a93c31f3dad37f060bfdb6a8ba53f2cd36cfca7766c464c34aa95ecf691956c32be2f5b71cc8633ed7581452a04ab7b3a025d662270460d21b25069651ed42
+ languageName: node
+ linkType: hard
+
+"@inquirer/confirm@npm:^5.1.13":
+ version: 5.1.13
+ resolution: "@inquirer/confirm@npm:5.1.13"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/type": "npm:^3.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/e09af25c4b4f51fdc7c6780e2325217515d3970a8baab3597ae27ea8d0ed68527c19b3ae95f85eeb62d880f6e8a0f3bff91277f0f46e092e993ca18ad17e4993
+ languageName: node
+ linkType: hard
+
+"@inquirer/core@npm:^10.1.14":
+ version: 10.1.14
+ resolution: "@inquirer/core@npm:10.1.14"
+ dependencies:
+ "@inquirer/figures": "npm:^1.0.12"
+ "@inquirer/type": "npm:^3.0.7"
+ ansi-escapes: "npm:^4.3.2"
+ cli-width: "npm:^4.1.0"
+ mute-stream: "npm:^2.0.0"
+ signal-exit: "npm:^4.1.0"
+ wrap-ansi: "npm:^6.2.0"
+ yoctocolors-cjs: "npm:^2.1.2"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/2553eb059201ebb182eb8e55a278ce3f2848a3abdfcf26e651b57b146f35baa19a286af0365ee5968b4459a1be93864ebf205a7af32fed8f995b394750a1d1f4
+ languageName: node
+ linkType: hard
+
+"@inquirer/editor@npm:^4.2.14":
+ version: 4.2.14
+ resolution: "@inquirer/editor@npm:4.2.14"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/type": "npm:^3.0.7"
+ external-editor: "npm:^3.1.0"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/40e85b4a598f3541f96185c61f0a5ba9abf9385f28cef8b8a1f9570729bbb98f32c80e98e4ce63bd3d07d4011b770d945587d9c6eecce3b03eb2ec08bd7f37ea
+ languageName: node
+ linkType: hard
+
+"@inquirer/expand@npm:^4.0.16":
+ version: 4.0.16
+ resolution: "@inquirer/expand@npm:4.0.16"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/type": "npm:^3.0.7"
+ yoctocolors-cjs: "npm:^2.1.2"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/919e314c5bd86b957b491eff6aa79c990908b7898fc5d02968920be7866449d9dbf9bc33831eab922682e60b98553d753d1a3de6667fa6b1aa6443f457732713
+ languageName: node
+ linkType: hard
+
+"@inquirer/figures@npm:^1.0.12":
+ version: 1.0.12
+ resolution: "@inquirer/figures@npm:1.0.12"
+ checksum: 10c0/08694288bdf9aa474571ca94272113a5ac443229519ce71447eba9eb7d5a2007901bdc3e92216d929a69746dcbac29683886c20e67b7864a7c7f6c59b99d3269
+ languageName: node
+ linkType: hard
+
+"@inquirer/input@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "@inquirer/input@npm:4.2.0"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/type": "npm:^3.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/c9b671bbb8c8079e975c9138951b7abb6b06e04a44e47286b659569080140f5f18015ba3f2d55e90c5060a313a3c3e9e115138feced7abe7a94a43190a052199
+ languageName: node
+ linkType: hard
+
+"@inquirer/number@npm:^3.0.16":
+ version: 3.0.16
+ resolution: "@inquirer/number@npm:3.0.16"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/type": "npm:^3.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/066230f02cd253fe26cd78493c7c20b59063c8c2de5c8f5fadcaf4eb8650efc9e6555ba7d3703cc9ba7a751663f60e62e24b4a319d9536afa7ced7459e9b2320
+ languageName: node
+ linkType: hard
+
+"@inquirer/password@npm:^4.0.16":
+ version: 4.0.16
+ resolution: "@inquirer/password@npm:4.0.16"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/type": "npm:^3.0.7"
+ ansi-escapes: "npm:^4.3.2"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/b77c57ba152b50c640cd77637d1ed23662059689546e33b235937e7e108fbbf72b9b5c61834c545f74f1d18d5c836ef5a0dc78da31ea6affe9842c3471a27325
+ languageName: node
+ linkType: hard
+
+"@inquirer/prompts@npm:^7.5.0":
+ version: 7.6.0
+ resolution: "@inquirer/prompts@npm:7.6.0"
+ dependencies:
+ "@inquirer/checkbox": "npm:^4.1.9"
+ "@inquirer/confirm": "npm:^5.1.13"
+ "@inquirer/editor": "npm:^4.2.14"
+ "@inquirer/expand": "npm:^4.0.16"
+ "@inquirer/input": "npm:^4.2.0"
+ "@inquirer/number": "npm:^3.0.16"
+ "@inquirer/password": "npm:^4.0.16"
+ "@inquirer/rawlist": "npm:^4.1.4"
+ "@inquirer/search": "npm:^3.0.16"
+ "@inquirer/select": "npm:^4.2.4"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/a00186a71388308a1bc83bd96fef14c702b6cfa34ecd7c7cf880405295b25aefd18a3b79363d788c9c31a2aa5e30732d21467a5b716fc35cc5fd303745ff2218
+ languageName: node
+ linkType: hard
+
+"@inquirer/rawlist@npm:^4.1.4":
+ version: 4.1.4
+ resolution: "@inquirer/rawlist@npm:4.1.4"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/type": "npm:^3.0.7"
+ yoctocolors-cjs: "npm:^2.1.2"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/2ee08bbdd982e4d565dc37b38b4f45e5a040ea1e60e3f8ec808106c1b541585e9a5c3a18f795ae2168820695ad55fb88b2e391c3a0d616a4e74620250292e2d3
+ languageName: node
+ linkType: hard
+
+"@inquirer/search@npm:^3.0.16":
+ version: 3.0.16
+ resolution: "@inquirer/search@npm:3.0.16"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/figures": "npm:^1.0.12"
+ "@inquirer/type": "npm:^3.0.7"
+ yoctocolors-cjs: "npm:^2.1.2"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/34330cec50dd72669cdee14a413e7b43dee0e09c8f181a86ccfbdac424b6296e39dcc3c5992168d06c8f5e4cab54644913d5281723fa7a0f454c2c3cafeea192
+ languageName: node
+ linkType: hard
+
+"@inquirer/select@npm:^4.2.4":
+ version: 4.2.4
+ resolution: "@inquirer/select@npm:4.2.4"
+ dependencies:
+ "@inquirer/core": "npm:^10.1.14"
+ "@inquirer/figures": "npm:^1.0.12"
+ "@inquirer/type": "npm:^3.0.7"
+ ansi-escapes: "npm:^4.3.2"
+ yoctocolors-cjs: "npm:^2.1.2"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/8c2dff78f331a52862252ffbc2ad1b8b91cbc556c2af1e6acc5878855ffff7048bb45eefa53e0ef4fbf5310361d9986d10c2882c2355f815e05d635cab9bb679
+ languageName: node
+ linkType: hard
+
+"@inquirer/type@npm:^3.0.7":
+ version: 3.0.7
+ resolution: "@inquirer/type@npm:3.0.7"
+ peerDependencies:
+ "@types/node": ">=18"
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ checksum: 10c0/bbaa33c274a10f70d3a587264e1db6dbfcd8c1458d595c54870d1d5b3fc113ab5063203ec12a098485bb9e2fcef1a87d8c6ecd2a6d44ddc575f5c4715379be5e
+ languageName: node
+ linkType: hard
+
+"@isaacs/balanced-match@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "@isaacs/balanced-match@npm:4.0.1"
+ checksum: 10c0/7da011805b259ec5c955f01cee903da72ad97c5e6f01ca96197267d3f33103d5b2f8a1af192140f3aa64526c593c8d098ae366c2b11f7f17645d12387c2fd420
+ languageName: node
+ linkType: hard
+
+"@isaacs/brace-expansion@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "@isaacs/brace-expansion@npm:5.0.0"
+ dependencies:
+ "@isaacs/balanced-match": "npm:^4.0.1"
+ checksum: 10c0/b4d4812f4be53afc2c5b6c545001ff7a4659af68d4484804e9d514e183d20269bb81def8682c01a22b17c4d6aed14292c8494f7d2ac664e547101c1a905aa977
languageName: node
linkType: hard
@@ -1449,43 +1522,13 @@ __metadata:
languageName: node
linkType: hard
-"@jirimoravcik/eslint-plugin-import@npm:2.32.0":
- version: 2.32.0
- resolution: "@jirimoravcik/eslint-plugin-import@npm:2.32.0"
- dependencies:
- "@rtsao/scc": "npm:^1.1.0"
- array-includes: "npm:^3.1.8"
- array.prototype.findlastindex: "npm:^1.2.5"
- array.prototype.flat: "npm:^1.3.3"
- array.prototype.flatmap: "npm:^1.3.3"
- debug: "npm:^3.2.7"
- doctrine: "npm:^2.1.0"
- eslint-import-resolver-node: "npm:^0.3.9"
- eslint-module-utils: "npm:^2.12.0"
- hasown: "npm:^2.0.2"
- is-core-module: "npm:^2.16.1"
- is-glob: "npm:^4.0.3"
- minimatch: "npm:^3.1.2"
- object.fromentries: "npm:^2.0.8"
- object.groupby: "npm:^1.0.3"
- object.values: "npm:^1.2.1"
- semver: "npm:^6.3.1"
- string.prototype.trimend: "npm:^1.0.9"
- tsconfig-paths: "npm:^3.15.0"
- peerDependencies:
- eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
- checksum: 10c0/fbeb711869991914010fd122ab1555fe56b077c5a5db46e0ab7147897f4fe76b7f4f044884b04bcb17a7103fb0d7039ceff743987d2c8dd353ce1ba5391355a6
- languageName: node
- linkType: hard
-
"@jridgewell/gen-mapping@npm:^0.3.5":
- version: 0.3.8
- resolution: "@jridgewell/gen-mapping@npm:0.3.8"
+ version: 0.3.12
+ resolution: "@jridgewell/gen-mapping@npm:0.3.12"
dependencies:
- "@jridgewell/set-array": "npm:^1.2.1"
- "@jridgewell/sourcemap-codec": "npm:^1.4.10"
+ "@jridgewell/sourcemap-codec": "npm:^1.5.0"
"@jridgewell/trace-mapping": "npm:^0.3.24"
- checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a
+ checksum: 10c0/32f771ae2467e4d440be609581f7338d786d3d621bac3469e943b9d6d116c23c4becb36f84898a92bbf2f3c0511365c54a945a3b86a83141547a2a360a5ec0c7
languageName: node
linkType: hard
@@ -1496,33 +1539,26 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/set-array@npm:^1.2.1":
- version: 1.2.1
- resolution: "@jridgewell/set-array@npm:1.2.1"
- checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4
- languageName: node
- linkType: hard
-
-"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0":
- version: 1.5.0
- resolution: "@jridgewell/sourcemap-codec@npm:1.5.0"
- checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18
+"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0":
+ version: 1.5.4
+ resolution: "@jridgewell/sourcemap-codec@npm:1.5.4"
+ checksum: 10c0/c5aab3e6362a8dd94ad80ab90845730c825fc4c8d9cf07ebca7a2eb8a832d155d62558800fc41d42785f989ddbb21db6df004d1786e8ecb65e428ab8dff71309
languageName: node
linkType: hard
-"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24":
- version: 0.3.25
- resolution: "@jridgewell/trace-mapping@npm:0.3.25"
+"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
+ version: 0.3.29
+ resolution: "@jridgewell/trace-mapping@npm:0.3.29"
dependencies:
"@jridgewell/resolve-uri": "npm:^3.1.0"
"@jridgewell/sourcemap-codec": "npm:^1.4.14"
- checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4
+ checksum: 10c0/fb547ba31658c4d74eb17e7389f4908bf7c44cef47acb4c5baa57289daf68e6fe53c639f41f751b3923aca67010501264f70e7b49978ad1f040294b22c37b333
languageName: node
linkType: hard
-"@lerna/create@npm:8.2.2":
- version: 8.2.2
- resolution: "@lerna/create@npm:8.2.2"
+"@lerna/create@npm:8.2.3":
+ version: 8.2.3
+ resolution: "@lerna/create@npm:8.2.3"
dependencies:
"@npmcli/arborist": "npm:7.5.4"
"@npmcli/package-json": "npm:5.2.0"
@@ -1547,7 +1583,6 @@ __metadata:
get-stream: "npm:6.0.0"
git-url-parse: "npm:14.0.0"
glob-parent: "npm:6.0.2"
- globby: "npm:11.1.0"
graceful-fs: "npm:4.2.11"
has-unicode: "npm:2.0.1"
ini: "npm:^1.3.8"
@@ -1582,9 +1617,10 @@ __metadata:
slash: "npm:^3.0.0"
ssri: "npm:^10.0.6"
string-width: "npm:^4.2.3"
- strong-log-transformer: "npm:2.1.0"
tar: "npm:6.2.1"
temp-dir: "npm:1.0.0"
+ through: "npm:2.3.8"
+ tinyglobby: "npm:0.2.12"
upath: "npm:2.0.1"
uuid: "npm:^10.0.0"
validate-npm-package-license: "npm:^3.0.4"
@@ -1594,25 +1630,7 @@ __metadata:
write-pkg: "npm:4.0.0"
yargs: "npm:17.7.2"
yargs-parser: "npm:21.1.1"
- checksum: 10c0/3cd1c66137bba8cad9ad24309ec59aefba0423ec70000bcaaf048fce099f7e55604ba9a7894bf43bf8ef43460726c65440d22788d4810337ed2ac4e0cba287e6
- languageName: node
- linkType: hard
-
-"@modelcontextprotocol/sdk@npm:^1.8.0":
- version: 1.11.0
- resolution: "@modelcontextprotocol/sdk@npm:1.11.0"
- dependencies:
- content-type: "npm:^1.0.5"
- cors: "npm:^2.8.5"
- cross-spawn: "npm:^7.0.3"
- eventsource: "npm:^3.0.2"
- express: "npm:^5.0.1"
- express-rate-limit: "npm:^7.5.0"
- pkce-challenge: "npm:^5.0.0"
- raw-body: "npm:^3.0.0"
- zod: "npm:^3.23.8"
- zod-to-json-schema: "npm:^3.24.1"
- checksum: 10c0/10ce5ebe54b238df614051e0f2ef8f037fee6ceda7a870f5892c84efe21cbdcdb7e932d9be25e91982e0eb40e4c8ed33da9b0b2ca01df6baa76eb0cd5cb89ce6
+ checksum: 10c0/e484e41cff8233bdaca72872c96abe5b10423033b0c6464c55fc56a87c43f01ee236ef2cae616a5a93beb2c432e87866f8e15a16e46ea2b3949938d796ec6c78
languageName: node
linkType: hard
@@ -1901,8 +1919,8 @@ __metadata:
linkType: hard
"@nx/devkit@npm:>=17.1.2 < 21":
- version: 20.8.1
- resolution: "@nx/devkit@npm:20.8.1"
+ version: 20.8.2
+ resolution: "@nx/devkit@npm:20.8.2"
dependencies:
ejs: "npm:^3.1.7"
enquirer: "npm:~2.3.6"
@@ -1914,76 +1932,76 @@ __metadata:
yargs-parser: "npm:21.1.1"
peerDependencies:
nx: ">= 19 <= 21"
- checksum: 10c0/e93664c8603bbfdcc26beb31dfe382c422cdb0968d9e5723a1f30fd61828a7d48c032afbe2095fecef329847851d05af205be0938ce82e92810514597f7d2d21
+ checksum: 10c0/9b91ac41d9c303e26ca1812913851233f2cfc17e71f68196a249ae55cf5866d85932b29c92c99e0865c68715bda1ec7e29330e07cebc4b78aab168af79d8c47a
languageName: node
linkType: hard
-"@nx/nx-darwin-arm64@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-darwin-arm64@npm:20.8.1"
+"@nx/nx-darwin-arm64@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-darwin-arm64@npm:20.8.2"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@nx/nx-darwin-x64@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-darwin-x64@npm:20.8.1"
+"@nx/nx-darwin-x64@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-darwin-x64@npm:20.8.2"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@nx/nx-freebsd-x64@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-freebsd-x64@npm:20.8.1"
+"@nx/nx-freebsd-x64@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-freebsd-x64@npm:20.8.2"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
-"@nx/nx-linux-arm-gnueabihf@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.8.1"
+"@nx/nx-linux-arm-gnueabihf@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.8.2"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
-"@nx/nx-linux-arm64-gnu@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-linux-arm64-gnu@npm:20.8.1"
+"@nx/nx-linux-arm64-gnu@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-linux-arm64-gnu@npm:20.8.2"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"@nx/nx-linux-arm64-musl@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-linux-arm64-musl@npm:20.8.1"
+"@nx/nx-linux-arm64-musl@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-linux-arm64-musl@npm:20.8.2"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"@nx/nx-linux-x64-gnu@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-linux-x64-gnu@npm:20.8.1"
+"@nx/nx-linux-x64-gnu@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-linux-x64-gnu@npm:20.8.2"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"@nx/nx-linux-x64-musl@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-linux-x64-musl@npm:20.8.1"
+"@nx/nx-linux-x64-musl@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-linux-x64-musl@npm:20.8.2"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"@nx/nx-win32-arm64-msvc@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-win32-arm64-msvc@npm:20.8.1"
+"@nx/nx-win32-arm64-msvc@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-win32-arm64-msvc@npm:20.8.2"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@nx/nx-win32-x64-msvc@npm:20.8.1":
- version: 20.8.1
- resolution: "@nx/nx-win32-x64-msvc@npm:20.8.1"
+"@nx/nx-win32-x64-msvc@npm:20.8.2":
+ version: 20.8.2
+ resolution: "@nx/nx-win32-x64-msvc@npm:20.8.2"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -1996,8 +2014,8 @@ __metadata:
linkType: hard
"@octokit/core@npm:^5.0.2":
- version: 5.2.1
- resolution: "@octokit/core@npm:5.2.1"
+ version: 5.2.2
+ resolution: "@octokit/core@npm:5.2.2"
dependencies:
"@octokit/auth-token": "npm:^4.0.0"
"@octokit/graphql": "npm:^7.1.0"
@@ -2006,7 +2024,7 @@ __metadata:
"@octokit/types": "npm:^13.0.0"
before-after-hook: "npm:^2.2.0"
universal-user-agent: "npm:^6.0.0"
- checksum: 10c0/9759c70a6a6477a636f336d717657761243bab0e9d34c4012a8b2d70aafd89ba3d24289fb7e05352999c6ec526fe572b8aff9ad59e90761842fb72fb7d59ed95
+ checksum: 10c0/b4484d85552303b839613e2133dcd064fa06a7c10fe0ebd11ba8f67cb8e3384e48983c589f4d1dc0fa3754857784e3d90ff4eab9782e118baf13ddd1b834957c
languageName: node
linkType: hard
@@ -2154,9 +2172,9 @@ __metadata:
languageName: node
linkType: hard
-"@puppeteer/browsers@npm:2.10.0":
- version: 2.10.0
- resolution: "@puppeteer/browsers@npm:2.10.0"
+"@puppeteer/browsers@npm:2.10.4":
+ version: 2.10.4
+ resolution: "@puppeteer/browsers@npm:2.10.4"
dependencies:
debug: "npm:^4.4.0"
extract-zip: "npm:^2.0.1"
@@ -2167,146 +2185,146 @@ __metadata:
yargs: "npm:^17.7.2"
bin:
browsers: lib/cjs/main-cli.js
- checksum: 10c0/4777a3b11b08f87ce4a3baf76b172fec7d71630bfa24a8ad51ca8c6be01966540f69ff536408a2951e8a9b1b98d4dd182dfcbf6e60556a4fdbe391c002c762f2
+ checksum: 10c0/052b5305c413d83c95690f1b8e74739fb3ec0977a0f9e331defdb218acfb860e66fab1dbb624c800522952d648b3ed1d1e000171326b0b2a43cd6f5d55694ed4
languageName: node
linkType: hard
-"@rollup/rollup-android-arm-eabi@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-android-arm-eabi@npm:4.40.1"
+"@rollup/rollup-android-arm-eabi@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-android-arm-eabi@npm:4.45.1"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
-"@rollup/rollup-android-arm64@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-android-arm64@npm:4.40.1"
+"@rollup/rollup-android-arm64@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-android-arm64@npm:4.45.1"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-darwin-arm64@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-darwin-arm64@npm:4.40.1"
+"@rollup/rollup-darwin-arm64@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-darwin-arm64@npm:4.45.1"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-darwin-x64@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-darwin-x64@npm:4.40.1"
+"@rollup/rollup-darwin-x64@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-darwin-x64@npm:4.45.1"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@rollup/rollup-freebsd-arm64@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-freebsd-arm64@npm:4.40.1"
+"@rollup/rollup-freebsd-arm64@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-freebsd-arm64@npm:4.45.1"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-freebsd-x64@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-freebsd-x64@npm:4.40.1"
+"@rollup/rollup-freebsd-x64@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-freebsd-x64@npm:4.45.1"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1"
+"@rollup/rollup-linux-arm-gnueabihf@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.45.1"
conditions: os=linux & cpu=arm & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm-musleabihf@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.40.1"
+"@rollup/rollup-linux-arm-musleabihf@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.45.1"
conditions: os=linux & cpu=arm & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm64-gnu@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.40.1"
+"@rollup/rollup-linux-arm64-gnu@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.45.1"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm64-musl@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-arm64-musl@npm:4.40.1"
+"@rollup/rollup-linux-arm64-musl@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-arm64-musl@npm:4.45.1"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1"
+"@rollup/rollup-linux-loongarch64-gnu@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.45.1"
conditions: os=linux & cpu=loong64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1"
+"@rollup/rollup-linux-powerpc64le-gnu@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.45.1"
conditions: os=linux & cpu=ppc64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-riscv64-gnu@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.40.1"
+"@rollup/rollup-linux-riscv64-gnu@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.45.1"
conditions: os=linux & cpu=riscv64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-riscv64-musl@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.40.1"
+"@rollup/rollup-linux-riscv64-musl@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.45.1"
conditions: os=linux & cpu=riscv64 & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-linux-s390x-gnu@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.40.1"
+"@rollup/rollup-linux-s390x-gnu@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.45.1"
conditions: os=linux & cpu=s390x & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-x64-gnu@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-x64-gnu@npm:4.40.1"
+"@rollup/rollup-linux-x64-gnu@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-x64-gnu@npm:4.45.1"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-x64-musl@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-linux-x64-musl@npm:4.40.1"
+"@rollup/rollup-linux-x64-musl@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-linux-x64-musl@npm:4.45.1"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-win32-arm64-msvc@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.40.1"
+"@rollup/rollup-win32-arm64-msvc@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.45.1"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-win32-ia32-msvc@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.40.1"
+"@rollup/rollup-win32-ia32-msvc@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.45.1"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@rollup/rollup-win32-x64-msvc@npm:4.40.1":
- version: 4.40.1
- resolution: "@rollup/rollup-win32-x64-msvc@npm:4.40.1"
+"@rollup/rollup-win32-x64-msvc@npm:4.45.1":
+ version: 4.45.1
+ resolution: "@rollup/rollup-win32-x64-msvc@npm:4.45.1"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -2318,20 +2336,20 @@ __metadata:
languageName: node
linkType: hard
-"@sapphire/async-queue@npm:^1.5.0, @sapphire/async-queue@npm:^1.5.1":
+"@sapphire/async-queue@npm:^1.5.5":
version: 1.5.5
resolution: "@sapphire/async-queue@npm:1.5.5"
checksum: 10c0/4d61cbd90513e25f60ec611cd6c85b62a85b58c227c14050bcaeb4141a472fddb1da32dea5c4769cd213b97a5b83a076af333cbbe90efb97973d9fce47ef3ef0
languageName: node
linkType: hard
-"@sapphire/shapeshift@npm:^3.0.0":
- version: 3.9.7
- resolution: "@sapphire/shapeshift@npm:3.9.7"
+"@sapphire/shapeshift@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@sapphire/shapeshift@npm:4.0.0"
dependencies:
fast-deep-equal: "npm:^3.1.3"
lodash: "npm:^4.17.21"
- checksum: 10c0/29883d4c1986714fd4b2a7e4a58bf30a4598a02bbe031605dd99b766310a98889e2ae6f16bf37f43d91cf5960733dc1a619bfdaa85a96bc0ff9cc5ce57b8e689
+ checksum: 10c0/2abbfd20977e800455108688e45fff7b7c6e197256c8f8a54db90025a900914908b5fa4ffcbd1eacb4c692792cbed980613aa878e09f1fd87ab5052b6a6d6bce
languageName: node
linkType: hard
@@ -2414,17 +2432,24 @@ __metadata:
languageName: node
linkType: hard
-"@sindresorhus/is@npm:^5.2.0, @sindresorhus/is@npm:^5.3.0":
+"@sindresorhus/is@npm:^5.3.0":
version: 5.6.0
resolution: "@sindresorhus/is@npm:5.6.0"
checksum: 10c0/66727344d0c92edde5760b5fd1f8092b717f2298a162a5f7f29e4953e001479927402d9d387e245fb9dc7d3b37c72e335e93ed5875edfc5203c53be8ecba1b52
languageName: node
linkType: hard
+"@sindresorhus/is@npm:^6.3.0":
+ version: 6.3.1
+ resolution: "@sindresorhus/is@npm:6.3.1"
+ checksum: 10c0/2432ca411aafe7840818493360ba795db07ce7e8efd2bc994736fdbda175e99fa7d6614c7f41a72b28bae68603a86dbd0d810ba45d1ba7c5881929d54049360c
+ languageName: node
+ linkType: hard
+
"@sindresorhus/is@npm:^7.0.1":
- version: 7.0.1
- resolution: "@sindresorhus/is@npm:7.0.1"
- checksum: 10c0/6d43a916d70d9b64066394c272883869b22faf21f4748aaf399c1b691ea704ea607d1668ff2eb5704e5be8809c4a7faafe16be048ce5e1a2ba6e8928b8e3461c
+ version: 7.0.2
+ resolution: "@sindresorhus/is@npm:7.0.2"
+ checksum: 10c0/50881c9b651e189972087de9104e0d259a2a0dc93c604e863b3be1847e31c3dce685e76a41c0ae92198ae02b36d30d07b723a2d72015ce3cf910afc6dc337ff5
languageName: node
linkType: hard
@@ -2436,15 +2461,15 @@ __metadata:
linkType: hard
"@stylistic/eslint-plugin-ts@npm:^4.2.0":
- version: 4.2.0
- resolution: "@stylistic/eslint-plugin-ts@npm:4.2.0"
+ version: 4.4.1
+ resolution: "@stylistic/eslint-plugin-ts@npm:4.4.1"
dependencies:
- "@typescript-eslint/utils": "npm:^8.23.0"
+ "@typescript-eslint/utils": "npm:^8.32.1"
eslint-visitor-keys: "npm:^4.2.0"
espree: "npm:^10.3.0"
peerDependencies:
eslint: ">=9.0.0"
- checksum: 10c0/018a0cf08f9cfbf48ff77d214ca5cb52a60ba8b4b70bda1af3eea8f9640e24ea7add694fd6bfd916566cc7a63635ba07d6fde4d1f298fc1a99bd6ab39c99a7c2
+ checksum: 10c0/9b2d88364dc39441666a3963783fdbf2420689e6af88d58556472ee6fd8a6f115f8f42713f0be64db58b03df8c5ebbde2547872cee9372215ec32123f81d33a9
languageName: node
linkType: hard
@@ -2457,7 +2482,7 @@ __metadata:
languageName: node
linkType: hard
-"@tokenizer/inflate@npm:^0.2.6":
+"@tokenizer/inflate@npm:^0.2.7":
version: 0.2.7
resolution: "@tokenizer/inflate@npm:0.2.7"
dependencies:
@@ -2516,12 +2541,21 @@ __metadata:
linkType: hard
"@types/body-parser@npm:*":
- version: 1.19.5
- resolution: "@types/body-parser@npm:1.19.5"
+ version: 1.19.6
+ resolution: "@types/body-parser@npm:1.19.6"
dependencies:
"@types/connect": "npm:*"
"@types/node": "npm:*"
- checksum: 10c0/aebeb200f25e8818d8cf39cd0209026750d77c9b85381cdd8deeb50913e4d18a1ebe4b74ca9b0b4d21952511eeaba5e9fbbf739b52731a2061e206ec60d568df
+ checksum: 10c0/542da05c924dce58ee23f50a8b981fee36921850c82222e384931fda3e106f750f7880c47be665217d72dbe445129049db6eb1f44e7a06b09d62af8f3cca8ea7
+ languageName: node
+ linkType: hard
+
+"@types/chai@npm:^5.2.2":
+ version: 5.2.2
+ resolution: "@types/chai@npm:5.2.2"
+ dependencies:
+ "@types/deep-eql": "npm:*"
+ checksum: 10c0/49282bf0e8246800ebb36f17256f97bd3a8c4fb31f92ad3c0eaa7623518d7e87f1eaad4ad206960fcaf7175854bdff4cb167e4fe96811e0081b4ada83dd533ec
languageName: node
linkType: hard
@@ -2534,10 +2568,10 @@ __metadata:
languageName: node
linkType: hard
-"@types/content-type@npm:^1.1.5":
- version: 1.1.8
- resolution: "@types/content-type@npm:1.1.8"
- checksum: 10c0/5115a68f9eeb2139f7598519245a47c7e39cae0965c5ea64067190f934e6d1568d6fec0643b113b54351a9472f8b810958b8040af53b15c82d2b2ca46d9af2be
+"@types/content-type@npm:^1.1.8":
+ version: 1.1.9
+ resolution: "@types/content-type@npm:1.1.9"
+ checksum: 10c0/d8b198257862991880d38985ad9871241db18b21ec728bddc78e4c61e0f987cc037dae6c5f9bd2bcc08f41de74ad371180af2fcdefeafe25d0ccae0c3fceb7fd
languageName: node
linkType: hard
@@ -2550,52 +2584,60 @@ __metadata:
languageName: node
linkType: hard
-"@types/deep-equal@npm:^1.0.1":
+"@types/deep-eql@npm:*":
+ version: 4.0.2
+ resolution: "@types/deep-eql@npm:4.0.2"
+ checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844
+ languageName: node
+ linkType: hard
+
+"@types/deep-equal@npm:^1.0.4":
version: 1.0.4
resolution: "@types/deep-equal@npm:1.0.4"
checksum: 10c0/583d41df5d7655b0bd5fdd4b173b045396108fad2191e1bd3b1bfc188f98d24fafff34a8a09c04f9c650c87d82e9f25a8119d269044522da0770a05075fbf74d
languageName: node
linkType: hard
-"@types/domhandler@npm:^2.4.2":
- version: 2.4.5
- resolution: "@types/domhandler@npm:2.4.5"
- checksum: 10c0/3cc421190153dd9d92a785bbec36aeff7ce6c570eb386ba74f23adc52385279354e0ef32d7aa3eb850e7b4f28c58659d29b15bfeb4fd8ae9b8c1ad300597b4d8
+"@types/domhandler@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "@types/domhandler@npm:3.1.0"
+ dependencies:
+ domhandler: "npm:*"
+ checksum: 10c0/dde4af251db3644b4428ca7d24d9ad072efd932b0b0de821e90f99ba29b5f84be7f543b8790f88eefc54b9610d1763207b013649a3303cf24a4644abc777d678
languageName: node
linkType: hard
-"@types/estree@npm:1.0.7, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6":
- version: 1.0.7
- resolution: "@types/estree@npm:1.0.7"
- checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c
+"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6":
+ version: 1.0.8
+ resolution: "@types/estree@npm:1.0.8"
+ checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5
languageName: node
linkType: hard
-"@types/express-serve-static-core@npm:^4.17.33":
- version: 4.19.6
- resolution: "@types/express-serve-static-core@npm:4.19.6"
+"@types/express-serve-static-core@npm:^5.0.0":
+ version: 5.0.7
+ resolution: "@types/express-serve-static-core@npm:5.0.7"
dependencies:
"@types/node": "npm:*"
"@types/qs": "npm:*"
"@types/range-parser": "npm:*"
"@types/send": "npm:*"
- checksum: 10c0/4281f4ead71723f376b3ddf64868ae26244d434d9906c101cf8d436d4b5c779d01bd046e4ea0ed1a394d3e402216fabfa22b1fa4dba501061cd7c81c54045983
+ checksum: 10c0/28666f6a0743b8678be920a6eed075bc8afc96fc7d8ef59c3c049bd6b51533da3b24daf3b437d061e053fba1475e4f3175cb4972f5e8db41608e817997526430
languageName: node
linkType: hard
-"@types/express@npm:^4.17.13":
- version: 4.17.21
- resolution: "@types/express@npm:4.17.21"
+"@types/express@npm:^5.0.1":
+ version: 5.0.3
+ resolution: "@types/express@npm:5.0.3"
dependencies:
"@types/body-parser": "npm:*"
- "@types/express-serve-static-core": "npm:^4.17.33"
- "@types/qs": "npm:*"
+ "@types/express-serve-static-core": "npm:^5.0.0"
"@types/serve-static": "npm:*"
- checksum: 10c0/12e562c4571da50c7d239e117e688dc434db1bac8be55613294762f84fd77fbd0658ccd553c7d3ab02408f385bc93980992369dd30e2ecd2c68c358e6af8fabf
+ checksum: 10c0/f0fbc8daa7f40070b103cf4d020ff1dd08503477d866d1134b87c0390bba71d5d7949cb8b4e719a81ccba89294d8e1573414e6dcbb5bb1d097a7b820928ebdef
languageName: node
linkType: hard
-"@types/fs-extra@npm:^11.0.0":
+"@types/fs-extra@npm:^11.0.4":
version: 11.0.4
resolution: "@types/fs-extra@npm:11.0.4"
dependencies:
@@ -2605,7 +2647,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/http-cache-semantics@npm:^4.0.2, @types/http-cache-semantics@npm:^4.0.4":
+"@types/http-cache-semantics@npm:^4.0.4":
version: 4.0.4
resolution: "@types/http-cache-semantics@npm:4.0.4"
checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6
@@ -2613,23 +2655,23 @@ __metadata:
linkType: hard
"@types/http-errors@npm:*":
- version: 2.0.4
- resolution: "@types/http-errors@npm:2.0.4"
- checksum: 10c0/494670a57ad4062fee6c575047ad5782506dd35a6b9ed3894cea65830a94367bd84ba302eb3dde331871f6d70ca287bfedb1b2cf658e6132cd2cbd427ab56836
+ version: 2.0.5
+ resolution: "@types/http-errors@npm:2.0.5"
+ checksum: 10c0/00f8140fbc504f47356512bd88e1910c2f07e04233d99c88c854b3600ce0523c8cd0ba7d1897667243282eb44c59abb9245959e2428b9de004f93937f52f7c15
languageName: node
linkType: hard
-"@types/inquirer@npm:^8.2.1":
- version: 8.2.10
- resolution: "@types/inquirer@npm:8.2.10"
+"@types/inquirer@npm:^9.0.8":
+ version: 9.0.8
+ resolution: "@types/inquirer@npm:9.0.8"
dependencies:
"@types/through": "npm:*"
rxjs: "npm:^7.2.0"
- checksum: 10c0/c39c3a792b5f95727842277c25ca4b2ce3f3f8e7897e51c571ba919ea35587fce81f2b0d1d75747f6f54a7d79b0efe95430fd1fe7f5b81d07af81b2c2fc1fb5d
+ checksum: 10c0/6b49b12ab1122b3e18d4d0f3be99dd21d67f4d03e0d61c211f1affbc2885b0094569d3e4fd977888fd42b3321842453f52ee6dcae9cc7bb706e77513538c4e09
languageName: node
linkType: hard
-"@types/is-ci@npm:^3.0.1":
+"@types/is-ci@npm:^3.0.4":
version: 3.0.4
resolution: "@types/is-ci@npm:3.0.4"
dependencies:
@@ -2638,7 +2680,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/jsdom@npm:^21.0.0":
+"@types/jsdom@npm:^21.1.7":
version: 21.1.7
resolution: "@types/jsdom@npm:21.1.7"
dependencies:
@@ -2681,7 +2723,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/lodash.merge@npm:^4.6.7":
+"@types/lodash.merge@npm:^4.6.9":
version: 4.6.9
resolution: "@types/lodash.merge@npm:4.6.9"
dependencies:
@@ -2691,13 +2733,13 @@ __metadata:
linkType: hard
"@types/lodash@npm:*":
- version: 4.17.16
- resolution: "@types/lodash@npm:4.17.16"
- checksum: 10c0/cf017901b8ab1d7aabc86d5189d9288f4f99f19a75caf020c0e2c77b8d4cead4db0d0b842d009b029339f92399f49f34377dd7c2721053388f251778b4c23534
+ version: 4.17.20
+ resolution: "@types/lodash@npm:4.17.20"
+ checksum: 10c0/98cdd0faae22cbb8079a01a3bb65aa8f8c41143367486c1cbf5adc83f16c9272a2a5d2c1f541f61d0d73da543c16ee1d21cf2ef86cb93cd0cc0ac3bced6dd88f
languageName: node
linkType: hard
-"@types/mime-types@npm:^2.1.1":
+"@types/mime-types@npm:^2.1.4":
version: 2.1.4
resolution: "@types/mime-types@npm:2.1.4"
checksum: 10c0/a10d57881d14a053556b3d09292de467968d965b0a06d06732c748da39b3aa569270b5b9f32529fd0e9ac1e5f3b91abb894f5b1996373254a65cb87903c86622
@@ -2735,12 +2777,21 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:*, @types/node@npm:^22.5.1":
- version: 22.15.3
- resolution: "@types/node@npm:22.15.3"
+"@types/node@npm:*":
+ version: 24.0.14
+ resolution: "@types/node@npm:24.0.14"
+ dependencies:
+ undici-types: "npm:~7.8.0"
+ checksum: 10c0/536b5a816554ad1522e9e0c1d517b317f8478798bd76a332d83690aa42b19b5b263eb295ee25f9d0badb430ee6e36412ee9070cb5e3359f6bdcf7e08f94302f1
+ languageName: node
+ linkType: hard
+
+"@types/node@npm:^22.15.14":
+ version: 22.16.4
+ resolution: "@types/node@npm:22.16.4"
dependencies:
undici-types: "npm:~6.21.0"
- checksum: 10c0/2879f012d1aeba0bfdb5fed80d165f4f2cb3d1f2e1f98a24b18d4a211b4ace7d64bf2622784c78355982ffc1081ba79d0934efc2fb8353913e5871a63609661f
+ checksum: 10c0/a6e3f345c2d9656451ceac349e59c4cafa2b03f793acf3ab4f318fd90cee47d76c4fa79a7a08b8772978958a42fb03c8c71caa50c064b4e88613085dea287c2d
languageName: node
linkType: hard
@@ -2751,7 +2802,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/proper-lockfile@npm:^4.1.2":
+"@types/proper-lockfile@npm:^4.1.4":
version: 4.1.4
resolution: "@types/proper-lockfile@npm:4.1.4"
dependencies:
@@ -2760,7 +2811,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/ps-tree@npm:^1.1.2":
+"@types/ps-tree@npm:^1.1.6":
version: 1.1.6
resolution: "@types/ps-tree@npm:1.1.6"
checksum: 10c0/5bac64e587b82d4a1b0079f04fa5a54380a94b118e99c8096d52444d722a8f9932dbc62138da130b2f09cd6721f8eae1eac35d3cb68b4126c08e4e92d4c4962c
@@ -2768,9 +2819,9 @@ __metadata:
linkType: hard
"@types/qs@npm:*":
- version: 6.9.18
- resolution: "@types/qs@npm:6.9.18"
- checksum: 10c0/790b9091348e06dde2c8e4118b5771ab386a8c22a952139a2eb0675360a2070d0b155663bf6f75b23f258fd0a1f7ffc0ba0f059d99a719332c03c40d9e9cd63b
+ version: 6.14.0
+ resolution: "@types/qs@npm:6.14.0"
+ checksum: 10c0/5b3036df6e507483869cdb3858201b2e0b64b4793dc4974f188caa5b5732f2333ab9db45c08157975054d3b070788b35088b4bc60257ae263885016ee2131310
languageName: node
linkType: hard
@@ -2788,7 +2839,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/rimraf@npm:^4.0.0":
+"@types/rimraf@npm:^4.0.5":
version: 4.0.5
resolution: "@types/rimraf@npm:4.0.5"
dependencies:
@@ -2797,7 +2848,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/sax@npm:^1.0.0, @types/sax@npm:^1.2.7":
+"@types/sax@npm:^1.2.7":
version: 1.2.7
resolution: "@types/sax@npm:1.2.7"
dependencies:
@@ -2806,7 +2857,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/semver@npm:^7.3.12":
+"@types/semver@npm:^7.7.0":
version: 7.7.0
resolution: "@types/semver@npm:7.7.0"
checksum: 10c0/6b5f65f647474338abbd6ee91a6bbab434662ddb8fe39464edcbcfc96484d388baad9eb506dff217b6fc1727a88894930eb1f308617161ac0f376fe06be4e1ee
@@ -2814,23 +2865,23 @@ __metadata:
linkType: hard
"@types/send@npm:*":
- version: 0.17.4
- resolution: "@types/send@npm:0.17.4"
+ version: 0.17.5
+ resolution: "@types/send@npm:0.17.5"
dependencies:
"@types/mime": "npm:^1"
"@types/node": "npm:*"
- checksum: 10c0/7f17fa696cb83be0a104b04b424fdedc7eaba1c9a34b06027239aba513b398a0e2b7279778af521f516a397ced417c96960e5f50fcfce40c4bc4509fb1a5883c
+ checksum: 10c0/a86c9b89bb0976ff58c1cdd56360ea98528f4dbb18a5c2287bb8af04815513a576a42b4e0e1e7c4d14f7d6ea54733f6ef935ebff8c65e86d9c222881a71e1f15
languageName: node
linkType: hard
"@types/serve-static@npm:*":
- version: 1.15.7
- resolution: "@types/serve-static@npm:1.15.7"
+ version: 1.15.8
+ resolution: "@types/serve-static@npm:1.15.8"
dependencies:
"@types/http-errors": "npm:*"
"@types/node": "npm:*"
"@types/send": "npm:*"
- checksum: 10c0/26ec864d3a626ea627f8b09c122b623499d2221bbf2f470127f4c9ebfe92bd8a6bb5157001372d4c4bd0dd37a1691620217d9dc4df5aa8f779f3fd996b1c60ae
+ checksum: 10c0/8ad86a25b87da5276cb1008c43c74667ff7583904d46d5fcaf0355887869d859d453d7dc4f890788ae04705c23720e9b6b6f3215e2d1d2a4278bbd090a9268dd
languageName: node
linkType: hard
@@ -2843,7 +2894,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/stream-json@npm:^1.7.2":
+"@types/stream-json@npm:^1.7.8":
version: 1.7.8
resolution: "@types/stream-json@npm:1.7.8"
dependencies:
@@ -2883,7 +2934,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/yargs@npm:^17.0.26":
+"@types/yargs@npm:^17.0.33":
version: 17.0.33
resolution: "@types/yargs@npm:17.0.33"
dependencies:
@@ -2901,125 +2952,151 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/eslint-plugin@npm:8.31.1":
- version: 8.31.1
- resolution: "@typescript-eslint/eslint-plugin@npm:8.31.1"
+"@typescript-eslint/eslint-plugin@npm:8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:8.37.0"
dependencies:
"@eslint-community/regexpp": "npm:^4.10.0"
- "@typescript-eslint/scope-manager": "npm:8.31.1"
- "@typescript-eslint/type-utils": "npm:8.31.1"
- "@typescript-eslint/utils": "npm:8.31.1"
- "@typescript-eslint/visitor-keys": "npm:8.31.1"
+ "@typescript-eslint/scope-manager": "npm:8.37.0"
+ "@typescript-eslint/type-utils": "npm:8.37.0"
+ "@typescript-eslint/utils": "npm:8.37.0"
+ "@typescript-eslint/visitor-keys": "npm:8.37.0"
graphemer: "npm:^1.4.0"
- ignore: "npm:^5.3.1"
+ ignore: "npm:^7.0.0"
natural-compare: "npm:^1.4.0"
- ts-api-utils: "npm:^2.0.1"
+ ts-api-utils: "npm:^2.1.0"
peerDependencies:
- "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0
+ "@typescript-eslint/parser": ^8.37.0
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
- checksum: 10c0/9d805ab413a666fd2eefb16f257fbf3cea7278ccaf0db30ceb686dfe696e4f40b3aa7c336261c7f0a39a51a7c32a4f08d3d4f16bba0e764ac12c93ae94d82896
+ checksum: 10c0/71b5be797911d4057b083e767cbed3d9a43d8d6d81097e0b13b3b724c3dd8ff5cd6072e81125922fd646db9f19275952d4fc6c83966a125a013ecd7a079714d5
languageName: node
linkType: hard
-"@typescript-eslint/parser@npm:8.31.1":
- version: 8.31.1
- resolution: "@typescript-eslint/parser@npm:8.31.1"
+"@typescript-eslint/parser@npm:8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/parser@npm:8.37.0"
dependencies:
- "@typescript-eslint/scope-manager": "npm:8.31.1"
- "@typescript-eslint/types": "npm:8.31.1"
- "@typescript-eslint/typescript-estree": "npm:8.31.1"
- "@typescript-eslint/visitor-keys": "npm:8.31.1"
+ "@typescript-eslint/scope-manager": "npm:8.37.0"
+ "@typescript-eslint/types": "npm:8.37.0"
+ "@typescript-eslint/typescript-estree": "npm:8.37.0"
+ "@typescript-eslint/visitor-keys": "npm:8.37.0"
debug: "npm:^4.3.4"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
- checksum: 10c0/4fffaddbe443fc6a512042b6a777a8b7d9775938b26f54d86279b232b9b3967d90d6bfd65aca0ff010d377855df19708c918545f51cedc51b1688726201added
+ checksum: 10c0/1f72625fca4799c94c62955308545ca9291f1cccfbb714a783dea605640e57cfe480a3cc31798fa08444e81fe536ddd658e2fed08f5bf791c1da8b465c970319
languageName: node
linkType: hard
-"@typescript-eslint/scope-manager@npm:8.31.1":
- version: 8.31.1
- resolution: "@typescript-eslint/scope-manager@npm:8.31.1"
+"@typescript-eslint/project-service@npm:8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/project-service@npm:8.37.0"
dependencies:
- "@typescript-eslint/types": "npm:8.31.1"
- "@typescript-eslint/visitor-keys": "npm:8.31.1"
- checksum: 10c0/759cfaa922f8bc97ecdcfe583df88ad31b04d02a865efc2c6dab622374c9f32839054596193ec3b1c478d8a73690999cbd996e1092605f41a54bbe6a9a62bbf3
+ "@typescript-eslint/tsconfig-utils": "npm:^8.37.0"
+ "@typescript-eslint/types": "npm:^8.37.0"
+ debug: "npm:^4.3.4"
+ peerDependencies:
+ typescript: ">=4.8.4 <5.9.0"
+ checksum: 10c0/bbb42d4720500bcaf125c98b128dc12c4b63e0c8d640451cadc2f10c0862cd36306b48007ace2a2f3e2b60548a335e462500945a3a42c5ce251ffee08ccc721a
languageName: node
linkType: hard
-"@typescript-eslint/type-utils@npm:8.31.1":
- version: 8.31.1
- resolution: "@typescript-eslint/type-utils@npm:8.31.1"
+"@typescript-eslint/scope-manager@npm:8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/scope-manager@npm:8.37.0"
dependencies:
- "@typescript-eslint/typescript-estree": "npm:8.31.1"
- "@typescript-eslint/utils": "npm:8.31.1"
+ "@typescript-eslint/types": "npm:8.37.0"
+ "@typescript-eslint/visitor-keys": "npm:8.37.0"
+ checksum: 10c0/f6b36276abadb39a5b0951edb429286cfe40d656c17f8f6604827d89b1f7dea7ac0210d9c7ae08823d3de4ddd5f2e81e44178d1802164765ce55d0e714df25e6
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/tsconfig-utils@npm:8.37.0, @typescript-eslint/tsconfig-utils@npm:^8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/tsconfig-utils@npm:8.37.0"
+ peerDependencies:
+ typescript: ">=4.8.4 <5.9.0"
+ checksum: 10c0/ab9f78031bff9b180c59e8dc4c7748d7d3c5c787ac7379ed86a642a425093974cdb0fc2252730ecb298ef9165761caa4bd35bcec3f0bc8444f615a0b9ffbba3f
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/type-utils@npm:8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/type-utils@npm:8.37.0"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.37.0"
+ "@typescript-eslint/typescript-estree": "npm:8.37.0"
+ "@typescript-eslint/utils": "npm:8.37.0"
debug: "npm:^4.3.4"
- ts-api-utils: "npm:^2.0.1"
+ ts-api-utils: "npm:^2.1.0"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
- checksum: 10c0/ea5369cf200cd48f26e2c6013c81f5915cc933117e011537a7424402a1ebececc8a39e290b9572a7876a237116fbd75e9ba9313c9898ab828f5a814ab26066d2
+ checksum: 10c0/20679b86c22eb5da4858bdd7b729e74852fe972c1e16e1819a24242246dd429e49a8f457c8a30d87f4d07b3c440edfeabcbb990272fb9c2cfbcb0c4e13f787a8
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:8.31.1":
- version: 8.31.1
- resolution: "@typescript-eslint/types@npm:8.31.1"
- checksum: 10c0/d52692559028b71d8bfda4f098c7fa08e272c11cf9dd99ea9e1cfb00036c0849d6d53694e047a942c6568b3bf5637512e46356de70b412a9216ec6cfb8b2b950
+"@typescript-eslint/types@npm:8.37.0, @typescript-eslint/types@npm:^8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/types@npm:8.37.0"
+ checksum: 10c0/0caa649ba242d384e935eef9badbb352a3e640c3842104a6a562af69e0f680ec8e6c0c55c069d4d714f05208f6d07811417ca6179745128a60c45fa92794e6dd
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:8.31.1":
- version: 8.31.1
- resolution: "@typescript-eslint/typescript-estree@npm:8.31.1"
+"@typescript-eslint/typescript-estree@npm:8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/typescript-estree@npm:8.37.0"
dependencies:
- "@typescript-eslint/types": "npm:8.31.1"
- "@typescript-eslint/visitor-keys": "npm:8.31.1"
+ "@typescript-eslint/project-service": "npm:8.37.0"
+ "@typescript-eslint/tsconfig-utils": "npm:8.37.0"
+ "@typescript-eslint/types": "npm:8.37.0"
+ "@typescript-eslint/visitor-keys": "npm:8.37.0"
debug: "npm:^4.3.4"
fast-glob: "npm:^3.3.2"
is-glob: "npm:^4.0.3"
minimatch: "npm:^9.0.4"
semver: "npm:^7.6.0"
- ts-api-utils: "npm:^2.0.1"
+ ts-api-utils: "npm:^2.1.0"
peerDependencies:
typescript: ">=4.8.4 <5.9.0"
- checksum: 10c0/77059f204389d2d1b6db32d4df63473c99f5bd051218200f257531c2d2b2e3f237b23aa80a79baebc9ca8a776636867f1fd2d03533d207da2685d740e2c7fbef
+ checksum: 10c0/a51a00053ddcfb44f30598d033f061699c89eb2017be6f3a70e0e9b4151322d1dbda6980fe5630461669bb4bc3aca9617ab1348539ba0de8d8ceea41755d9f05
languageName: node
linkType: hard
-"@typescript-eslint/utils@npm:8.31.1, @typescript-eslint/utils@npm:^8.23.0":
- version: 8.31.1
- resolution: "@typescript-eslint/utils@npm:8.31.1"
+"@typescript-eslint/utils@npm:8.37.0, @typescript-eslint/utils@npm:^8.32.1":
+ version: 8.37.0
+ resolution: "@typescript-eslint/utils@npm:8.37.0"
dependencies:
- "@eslint-community/eslint-utils": "npm:^4.4.0"
- "@typescript-eslint/scope-manager": "npm:8.31.1"
- "@typescript-eslint/types": "npm:8.31.1"
- "@typescript-eslint/typescript-estree": "npm:8.31.1"
+ "@eslint-community/eslint-utils": "npm:^4.7.0"
+ "@typescript-eslint/scope-manager": "npm:8.37.0"
+ "@typescript-eslint/types": "npm:8.37.0"
+ "@typescript-eslint/typescript-estree": "npm:8.37.0"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
- checksum: 10c0/6190551702605aa60e67828163cb5880eee7ab5f1ee789d32227e4f4297d80ea9be98776400fd0660551dcbcac2a35babef33dd94267856dcb6f36c9c94f11ab
+ checksum: 10c0/9d6c2d9907ea67018c6d97ece15f9ba091be08dc11d719fbc260cc8afb916f4ce98f9630f46ca1e97451ee63d3f1d6244fa67833707dfeee798725b92d016c46
languageName: node
linkType: hard
-"@typescript-eslint/visitor-keys@npm:8.31.1":
- version: 8.31.1
- resolution: "@typescript-eslint/visitor-keys@npm:8.31.1"
+"@typescript-eslint/visitor-keys@npm:8.37.0":
+ version: 8.37.0
+ resolution: "@typescript-eslint/visitor-keys@npm:8.37.0"
dependencies:
- "@typescript-eslint/types": "npm:8.31.1"
- eslint-visitor-keys: "npm:^4.2.0"
- checksum: 10c0/09dbd8e1fdff72802a10bae2c12fa6d25f7e2dab1ff9b720afc2eb4e848b723c179109032aeaeb409d0c9e4107ab4fab8c8b1b47a55d58713d3f29a1365db3ea
+ "@typescript-eslint/types": "npm:8.37.0"
+ eslint-visitor-keys: "npm:^4.2.1"
+ checksum: 10c0/ee6eb963bdf83e42d64b5fc4d9ba23abdca0e172ebb3a56a823a20cf44b8dad7cea0e3be61f1d83a1c4b94fc0693b75e89bf3e1ffc52553a347be2af8a927db7
languageName: node
linkType: hard
-"@vitest/coverage-v8@npm:^3.0.0":
- version: 3.1.2
- resolution: "@vitest/coverage-v8@npm:3.1.2"
+"@vitest/coverage-v8@npm:^3.1.3":
+ version: 3.2.4
+ resolution: "@vitest/coverage-v8@npm:3.2.4"
dependencies:
"@ampproject/remapping": "npm:^2.3.0"
"@bcoe/v8-coverage": "npm:^1.0.2"
- debug: "npm:^4.4.0"
+ ast-v8-to-istanbul: "npm:^0.3.3"
+ debug: "npm:^4.4.1"
istanbul-lib-coverage: "npm:^3.2.2"
istanbul-lib-report: "npm:^3.0.1"
istanbul-lib-source-maps: "npm:^5.0.6"
@@ -3030,97 +3107,99 @@ __metadata:
test-exclude: "npm:^7.0.1"
tinyrainbow: "npm:^2.0.0"
peerDependencies:
- "@vitest/browser": 3.1.2
- vitest: 3.1.2
+ "@vitest/browser": 3.2.4
+ vitest: 3.2.4
peerDependenciesMeta:
"@vitest/browser":
optional: true
- checksum: 10c0/26f44a922262160ccb15ff3b5668b2b2c220845b41e84a5f601050be5f7d1d447be6bba7850dac12919acc9fd009c6b4c506469e88845f7da867ef14a5a7414a
+ checksum: 10c0/cae3e58d81d56e7e1cdecd7b5baab7edd0ad9dee8dec9353c52796e390e452377d3f04174d40b6986b17c73241a5e773e422931eaa8102dcba0605ff24b25193
languageName: node
linkType: hard
-"@vitest/expect@npm:3.1.2":
- version: 3.1.2
- resolution: "@vitest/expect@npm:3.1.2"
+"@vitest/expect@npm:3.2.4":
+ version: 3.2.4
+ resolution: "@vitest/expect@npm:3.2.4"
dependencies:
- "@vitest/spy": "npm:3.1.2"
- "@vitest/utils": "npm:3.1.2"
+ "@types/chai": "npm:^5.2.2"
+ "@vitest/spy": "npm:3.2.4"
+ "@vitest/utils": "npm:3.2.4"
chai: "npm:^5.2.0"
tinyrainbow: "npm:^2.0.0"
- checksum: 10c0/63507f77b225196d79f5aabedbb10f93974808a2b507661b66def95e803e6f7f958049e9b985d2d5fee83317f157f8018fea6e1240c64a5fec8e9753235ad081
+ checksum: 10c0/7586104e3fd31dbe1e6ecaafb9a70131e4197dce2940f727b6a84131eee3decac7b10f9c7c72fa5edbdb68b6f854353bd4c0fa84779e274207fb7379563b10db
languageName: node
linkType: hard
-"@vitest/mocker@npm:3.1.2":
- version: 3.1.2
- resolution: "@vitest/mocker@npm:3.1.2"
+"@vitest/mocker@npm:3.2.4":
+ version: 3.2.4
+ resolution: "@vitest/mocker@npm:3.2.4"
dependencies:
- "@vitest/spy": "npm:3.1.2"
+ "@vitest/spy": "npm:3.2.4"
estree-walker: "npm:^3.0.3"
magic-string: "npm:^0.30.17"
peerDependencies:
msw: ^2.4.9
- vite: ^5.0.0 || ^6.0.0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
- checksum: 10c0/4447962d7e160d774cf5b1eef03067230b5e36131e3441d3dd791ad38b6c06e16940f21fa20c311c58b635ba376ffb45d003b6f04d0d4cc0d7c4be854df4b8e4
+ checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd
languageName: node
linkType: hard
-"@vitest/pretty-format@npm:3.1.2, @vitest/pretty-format@npm:^3.1.2":
- version: 3.1.2
- resolution: "@vitest/pretty-format@npm:3.1.2"
+"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4":
+ version: 3.2.4
+ resolution: "@vitest/pretty-format@npm:3.2.4"
dependencies:
tinyrainbow: "npm:^2.0.0"
- checksum: 10c0/f4a79be6d5a1a0b3215ba66b3cc62b2e0fc3a81b4eee07b2644600450b796a8630ee86180691391a5597c9a792f3d213d54f2043f4a0809a9386473bfcca85fb
+ checksum: 10c0/5ad7d4278e067390d7d633e307fee8103958806a419ca380aec0e33fae71b44a64415f7a9b4bc11635d3c13d4a9186111c581d3cef9c65cc317e68f077456887
languageName: node
linkType: hard
-"@vitest/runner@npm:3.1.2":
- version: 3.1.2
- resolution: "@vitest/runner@npm:3.1.2"
+"@vitest/runner@npm:3.2.4":
+ version: 3.2.4
+ resolution: "@vitest/runner@npm:3.2.4"
dependencies:
- "@vitest/utils": "npm:3.1.2"
+ "@vitest/utils": "npm:3.2.4"
pathe: "npm:^2.0.3"
- checksum: 10c0/7312013c87a6869d07380506e808f686ab04cb989f8ae6d3c7ea16a4990fce715801c8c4d5836612706a9e8a2e5ed01629d728360fba035d8f2570a90b0050cd
+ strip-literal: "npm:^3.0.0"
+ checksum: 10c0/e8be51666c72b3668ae3ea348b0196656a4a5adb836cb5e270720885d9517421815b0d6c98bfdf1795ed02b994b7bfb2b21566ee356a40021f5bf4f6ed4e418a
languageName: node
linkType: hard
-"@vitest/snapshot@npm:3.1.2":
- version: 3.1.2
- resolution: "@vitest/snapshot@npm:3.1.2"
+"@vitest/snapshot@npm:3.2.4":
+ version: 3.2.4
+ resolution: "@vitest/snapshot@npm:3.2.4"
dependencies:
- "@vitest/pretty-format": "npm:3.1.2"
+ "@vitest/pretty-format": "npm:3.2.4"
magic-string: "npm:^0.30.17"
pathe: "npm:^2.0.3"
- checksum: 10c0/f3e451ec41eb54ace4c08f3dc3dbd3c283ff73b4c8eab899bb6bcd6589bf864bcaa33afb611751a76c87c5ca31fb3420511633fb7fb06af2692a70e6c8578db2
+ checksum: 10c0/f8301a3d7d1559fd3d59ed51176dd52e1ed5c2d23aa6d8d6aa18787ef46e295056bc726a021698d8454c16ed825ecba163362f42fa90258bb4a98cfd2c9424fc
languageName: node
linkType: hard
-"@vitest/spy@npm:3.1.2":
- version: 3.1.2
- resolution: "@vitest/spy@npm:3.1.2"
+"@vitest/spy@npm:3.2.4":
+ version: 3.2.4
+ resolution: "@vitest/spy@npm:3.2.4"
dependencies:
- tinyspy: "npm:^3.0.2"
- checksum: 10c0/0f827970c34e256f3af964df5a5133c181ef1475b73a15b47565ad3187e4b2627e949e632c21e34a694e16b98ceb1e670f5e7dc99baeb53cb029578147d4ccee
+ tinyspy: "npm:^4.0.3"
+ checksum: 10c0/6ebf0b4697dc238476d6b6a60c76ba9eb1dd8167a307e30f08f64149612fd50227682b876420e4c2e09a76334e73f72e3ebf0e350714dc22474258292e202024
languageName: node
linkType: hard
-"@vitest/utils@npm:3.1.2":
- version: 3.1.2
- resolution: "@vitest/utils@npm:3.1.2"
+"@vitest/utils@npm:3.2.4":
+ version: 3.2.4
+ resolution: "@vitest/utils@npm:3.2.4"
dependencies:
- "@vitest/pretty-format": "npm:3.1.2"
- loupe: "npm:^3.1.3"
+ "@vitest/pretty-format": "npm:3.2.4"
+ loupe: "npm:^3.1.4"
tinyrainbow: "npm:^2.0.0"
- checksum: 10c0/9e778ab7cf483396d650ddd079e702af6b9f087443a99045707865bf433cfa3c4f468d94d17a44173e6adcc5cce218a1b0073d1b94bbd84a03262033e427336d
+ checksum: 10c0/024a9b8c8bcc12cf40183c246c244b52ecff861c6deb3477cbf487ac8781ad44c68a9c5fd69f8c1361878e55b97c10d99d511f2597f1f7244b5e5101d028ba64
languageName: node
linkType: hard
-"@vladfrangu/async_event_emitter@npm:^2.2.2":
+"@vladfrangu/async_event_emitter@npm:^2.4.6":
version: 2.4.6
resolution: "@vladfrangu/async_event_emitter@npm:2.4.6"
checksum: 10c0/1fe634878902da584493ecb8e81c855436c002b215dd7c25c21780930fc5621ebe8eb79d5b899a56af0d1ea9ea9171e35175221e4438e2f56c67ce64d4b8a373
@@ -3190,21 +3269,11 @@ __metadata:
"accepts@npm:^2.0.0":
version: 2.0.0
- resolution: "accepts@npm:2.0.0"
- dependencies:
- mime-types: "npm:^3.0.0"
- negotiator: "npm:^1.0.0"
- checksum: 10c0/98374742097e140891546076215f90c32644feacf652db48412329de4c2a529178a81aa500fbb13dd3e6cbf6e68d829037b123ac037fc9a08bcec4b87b358eef
- languageName: node
- linkType: hard
-
-"accepts@npm:~1.3.8":
- version: 1.3.8
- resolution: "accepts@npm:1.3.8"
+ resolution: "accepts@npm:2.0.0"
dependencies:
- mime-types: "npm:~2.1.34"
- negotiator: "npm:0.6.3"
- checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362
+ mime-types: "npm:^3.0.0"
+ negotiator: "npm:^1.0.0"
+ checksum: 10c0/98374742097e140891546076215f90c32644feacf652db48412329de4c2a529178a81aa500fbb13dd3e6cbf6e68d829037b123ac037fc9a08bcec4b87b358eef
languageName: node
linkType: hard
@@ -3217,12 +3286,12 @@ __metadata:
languageName: node
linkType: hard
-"acorn@npm:^8.14.0":
- version: 8.14.1
- resolution: "acorn@npm:8.14.1"
+"acorn@npm:^8.15.0":
+ version: 8.15.0
+ resolution: "acorn@npm:8.15.0"
bin:
acorn: bin/acorn
- checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123
+ checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec
languageName: node
linkType: hard
@@ -3250,9 +3319,9 @@ __metadata:
linkType: hard
"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2":
- version: 7.1.3
- resolution: "agent-base@npm:7.1.3"
- checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11
+ version: 7.1.4
+ resolution: "agent-base@npm:7.1.4"
+ checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe
languageName: node
linkType: hard
@@ -3324,13 +3393,6 @@ __metadata:
languageName: node
linkType: hard
-"ansi-regex@npm:^2.0.0":
- version: 2.1.1
- resolution: "ansi-regex@npm:2.1.1"
- checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b
- languageName: node
- linkType: hard
-
"ansi-regex@npm:^5.0.1":
version: 5.0.1
resolution: "ansi-regex@npm:5.0.1"
@@ -3345,13 +3407,6 @@ __metadata:
languageName: node
linkType: hard
-"ansi-styles@npm:^2.2.1":
- version: 2.2.1
- resolution: "ansi-styles@npm:2.2.1"
- checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab
- languageName: node
- linkType: hard
-
"ansi-styles@npm:^3.2.1":
version: 3.2.1
resolution: "ansi-styles@npm:3.2.1"
@@ -3385,8 +3440,8 @@ __metadata:
linkType: hard
"apify-client@npm:^2.12.1":
- version: 2.12.3
- resolution: "apify-client@npm:2.12.3"
+ version: 2.12.6
+ resolution: "apify-client@npm:2.12.6"
dependencies:
"@apify/consts": "npm:^2.25.0"
"@apify/log": "npm:^2.2.6"
@@ -3396,26 +3451,25 @@ __metadata:
axios: "npm:^1.6.7"
content-type: "npm:^1.0.5"
ow: "npm:^0.28.2"
- prettier: "npm:^3.5.3"
tslib: "npm:^2.5.0"
type-fest: "npm:^4.0.0"
- checksum: 10c0/59f815404adb7db37d70d4c3672866ddc548063cf0808961a8cfe110c64e9abccbbf33a869ad69ed89cf4b71497200b0f50bd0348f2f2d6b0272cf0ad3ceb2c5
+ checksum: 10c0/0310242ef5878c6ecc636ba159c82f73c8b07fd3db6c7cbcb42a17032f63fd3d8a258f4b0ddeaaffa138c1ef088f86fe6f7962ff74a52459c4bd7332f945c581
languageName: node
linkType: hard
-"apify-node-curl-impersonate@npm:^1.0.15":
- version: 1.0.23
- resolution: "apify-node-curl-impersonate@npm:1.0.23"
- checksum: 10c0/7c26d73a2a856c8cc839bf2a0c96b6270015c5d72181a6328d8ec4d9c6d7ad3bef13775fbb83722d286b17a79b0fdbd6cdaea1d98e567eaeaa14b8cc9c6ed7d3
+"apify-node-curl-impersonate@npm:^1.0.23":
+ version: 1.0.24
+ resolution: "apify-node-curl-impersonate@npm:1.0.24"
+ checksum: 10c0/fea5b71c89b00e8cf842b747b0847df0d8bf8d5f3687c545c3565b80239196ad0d84e30a50fb334c85e16e1411108f4e5492ad9ceff74da8014c664faac966aa
languageName: node
linkType: hard
"apify@npm:*":
- version: 3.4.0
- resolution: "apify@npm:3.4.0"
+ version: 3.4.3
+ resolution: "apify@npm:3.4.3"
dependencies:
"@apify/consts": "npm:^2.23.0"
- "@apify/input_secrets": "npm:^1.1.40"
+ "@apify/input_secrets": "npm:^1.2.0"
"@apify/log": "npm:^2.4.3"
"@apify/timeout": "npm:^0.3.0"
"@apify/utilities": "npm:^2.13.0"
@@ -3428,17 +3482,24 @@ __metadata:
semver: "npm:^7.5.4"
tslib: "npm:^2.6.2"
ws: "npm:^8.18.0"
- checksum: 10c0/2670ff3e93db79b5de0270119f4c3e797bb7d22e6fd557c4d77664cd1574155dd4a968e3004d15a30045649ac98077e0784d109ed8ac109fdd6cd50f055b2f03
+ checksum: 10c0/d041c39aaf54b44142e081f3e1c987a149d910bc645c7f67254fff335ea7a08cd130f0c4860ec08a8d2448f87cdd43c6a2af2b30861c6e2d3d56cf5def1a9d36
languageName: node
linkType: hard
-"aproba@npm:2.0.0, aproba@npm:^1.0.3 || ^2.0.0":
+"aproba@npm:2.0.0":
version: 2.0.0
resolution: "aproba@npm:2.0.0"
checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5
languageName: node
linkType: hard
+"aproba@npm:^1.0.3 || ^2.0.0":
+ version: 2.1.0
+ resolution: "aproba@npm:2.1.0"
+ checksum: 10c0/ec8c1d351bac0717420c737eb062766fb63bde1552900e0f4fdad9eb064c3824fef23d1c416aa5f7a80f21ca682808e902d79b7c9ae756d342b5f1884f36932f
+ languageName: node
+ linkType: hard
+
"are-we-there-yet@npm:^3.0.0":
version: 3.0.1
resolution: "are-we-there-yet@npm:3.0.1"
@@ -3465,15 +3526,15 @@ __metadata:
languageName: node
linkType: hard
-"args@npm:5.0.1":
- version: 5.0.1
- resolution: "args@npm:5.0.1"
+"args@npm:^5.0.3":
+ version: 5.0.3
+ resolution: "args@npm:5.0.3"
dependencies:
camelcase: "npm:5.0.0"
chalk: "npm:2.4.2"
leven: "npm:2.1.0"
mri: "npm:1.1.4"
- checksum: 10c0/b9160233bcaec31678be5b0cd731bcc1e5ff790e68c67888710824964a9fc3066245cdbbaed36475ba49ecac9263d514d8117a2e479d878a8a9a6cbec48c33a6
+ checksum: 10c0/213871ae97d6f5990dc4637f53e48feef8566b2fd6d5cc9cb46ef78dc1db835b2f90fd536c1414441eaa0b5cb8f2a5ab94b973400b5fea096ee20b9893d3b573
languageName: node
linkType: hard
@@ -3494,13 +3555,6 @@ __metadata:
languageName: node
linkType: hard
-"array-flatten@npm:1.1.1":
- version: 1.1.1
- resolution: "array-flatten@npm:1.1.1"
- checksum: 10c0/806966c8abb2f858b08f5324d9d18d7737480610f3bd5d3498aaae6eb5efdc501a884ba019c9b4a8f02ff67002058749d05548fd42fa8643f02c9c7f22198b91
- languageName: node
- linkType: hard
-
"array-ify@npm:^1.0.0":
version: 1.0.0
resolution: "array-ify@npm:1.0.0"
@@ -3508,17 +3562,19 @@ __metadata:
languageName: node
linkType: hard
-"array-includes@npm:^3.1.8":
- version: 3.1.8
- resolution: "array-includes@npm:3.1.8"
+"array-includes@npm:^3.1.9":
+ version: 3.1.9
+ resolution: "array-includes@npm:3.1.9"
dependencies:
- call-bind: "npm:^1.0.7"
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.4"
define-properties: "npm:^1.2.1"
- es-abstract: "npm:^1.23.2"
- es-object-atoms: "npm:^1.0.0"
- get-intrinsic: "npm:^1.2.4"
- is-string: "npm:^1.0.7"
- checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370
+ es-abstract: "npm:^1.24.0"
+ es-object-atoms: "npm:^1.1.1"
+ get-intrinsic: "npm:^1.3.0"
+ is-string: "npm:^1.1.1"
+ math-intrinsics: "npm:^1.1.0"
+ checksum: 10c0/0235fa69078abeac05ac4250699c44996bc6f774a9cbe45db48674ce6bd142f09b327d31482ff75cf03344db4ea03eae23edb862d59378b484b47ed842574856
languageName: node
linkType: hard
@@ -3529,7 +3585,7 @@ __metadata:
languageName: node
linkType: hard
-"array.prototype.findlastindex@npm:^1.2.5":
+"array.prototype.findlastindex@npm:^1.2.6":
version: 1.2.6
resolution: "array.prototype.findlastindex@npm:1.2.6"
dependencies:
@@ -3544,7 +3600,7 @@ __metadata:
languageName: node
linkType: hard
-"array.prototype.flat@npm:^1.3.2, array.prototype.flat@npm:^1.3.3":
+"array.prototype.flat@npm:^1.3.3":
version: 1.3.3
resolution: "array.prototype.flat@npm:1.3.3"
dependencies:
@@ -3556,7 +3612,7 @@ __metadata:
languageName: node
linkType: hard
-"array.prototype.flatmap@npm:^1.3.2, array.prototype.flatmap@npm:^1.3.3":
+"array.prototype.flatmap@npm:^1.3.3":
version: 1.3.3
resolution: "array.prototype.flatmap@npm:1.3.3"
dependencies:
@@ -3597,16 +3653,6 @@ __metadata:
languageName: node
linkType: hard
-"assert@npm:^1.4.1":
- version: 1.5.1
- resolution: "assert@npm:1.5.1"
- dependencies:
- object.assign: "npm:^4.1.4"
- util: "npm:^0.10.4"
- checksum: 10c0/836688b928b68b7fc5bbc165443e16a62623d57676a1e8a980a0316f9ae86e5e0a102c63470491bf55a8545e75766303640c0c7ad1cf6bfa5450130396043bbd
- languageName: node
- linkType: hard
-
"assertion-error@npm:^2.0.1":
version: 2.0.1
resolution: "assertion-error@npm:2.0.1"
@@ -3623,6 +3669,17 @@ __metadata:
languageName: node
linkType: hard
+"ast-v8-to-istanbul@npm:^0.3.3":
+ version: 0.3.3
+ resolution: "ast-v8-to-istanbul@npm:0.3.3"
+ dependencies:
+ "@jridgewell/trace-mapping": "npm:^0.3.25"
+ estree-walker: "npm:^3.0.3"
+ js-tokens: "npm:^9.0.1"
+ checksum: 10c0/ffc39bc3ab4b8c1f7aea945960ce6b1e518bab3da7c800277eab2da07d397eeae4a2cb8a5a5f817225646c8ea495c1e4434fbe082c84bae8042abddef53f50b2
+ languageName: node
+ linkType: hard
+
"async-function@npm:^1.0.0":
version: 1.0.0
resolution: "async-function@npm:1.0.0"
@@ -3663,13 +3720,13 @@ __metadata:
linkType: hard
"axios@npm:^1.6.7, axios@npm:^1.8.3":
- version: 1.9.0
- resolution: "axios@npm:1.9.0"
+ version: 1.10.0
+ resolution: "axios@npm:1.10.0"
dependencies:
follow-redirects: "npm:^1.15.6"
form-data: "npm:^4.0.0"
proxy-from-env: "npm:^1.1.0"
- checksum: 10c0/9371a56886c2e43e4ff5647b5c2c3c046ed0a3d13482ef1d0135b994a628c41fbad459796f101c655e62f0c161d03883454474d2e435b2e021b1924d9f24994c
+ checksum: 10c0/2239cb269cc789eac22f5d1aabd58e1a83f8f364c92c2caa97b6f5cbb4ab2903d2e557d9dc670b5813e9bcdebfb149e783fb8ab3e45098635cd2f559b06bd5d8
languageName: node
linkType: hard
@@ -3688,15 +3745,15 @@ __metadata:
linkType: hard
"bare-events@npm:^2.2.0, bare-events@npm:^2.5.4":
- version: 2.5.4
- resolution: "bare-events@npm:2.5.4"
- checksum: 10c0/877a9cea73d545e2588cdbd6fd01653e27dac48ad6b44985cdbae73e1f57f292d4ba52e25d1fba53674c1053c463d159f3d5c7bc36a2e6e192e389b499ddd627
+ version: 2.6.0
+ resolution: "bare-events@npm:2.6.0"
+ checksum: 10c0/9bdd727a8df81aae14746c9bb860102f6c5aafc028f17e3a8620f40dc8bfe816ed46b0c50cb3200d1a1099f8028da27110cf711267b296767f37d3e4c6a9d4a6
languageName: node
linkType: hard
"bare-fs@npm:^4.0.1":
- version: 4.1.4
- resolution: "bare-fs@npm:4.1.4"
+ version: 4.1.6
+ resolution: "bare-fs@npm:4.1.6"
dependencies:
bare-events: "npm:^2.5.4"
bare-path: "npm:^3.0.0"
@@ -3706,7 +3763,7 @@ __metadata:
peerDependenciesMeta:
bare-buffer:
optional: true
- checksum: 10c0/1c6bb9334faa9e1c3144ca1d411cc07dbd42c4ef63a17a0e76c617a775ffb44e574235582739742ce41c84af6a89ab903549f9302db48dd2c2dce9e20f045c54
+ checksum: 10c0/a02ef4a76b2e58a0b142b5f5d1b629a96ddf62abb2f70801361f8f7f85edf157d777707bff3e62e9e67c75445667b7047cf8a99de39c1a60032d1818850ff0ea
languageName: node
linkType: hard
@@ -3750,7 +3807,14 @@ __metadata:
languageName: node
linkType: hard
-"basic-auth-parser@npm:0.0.2, basic-auth-parser@npm:^0.0.2":
+"basic-auth-parser@npm:0.0.2-1":
+ version: 0.0.2-1
+ resolution: "basic-auth-parser@npm:0.0.2-1"
+ checksum: 10c0/e3c4b8d6f4cb38f9a3437adc3b02e960610927ff58758be9ca51e2f1c0f8402209b1ff2b69262c15e2e122be37c92936502de9c8283781244e3960e8f77b5d09
+ languageName: node
+ linkType: hard
+
+"basic-auth-parser@npm:^0.0.2":
version: 0.0.2
resolution: "basic-auth-parser@npm:0.0.2"
checksum: 10c0/016e14862ed832f996d20d1b7df98a9eac3c92a767a2cfe7290f09c65d2bebd53b989f79fdfd0fd81f3707373a857e33e88fcf2efbc8f388af394ef0d7d8642b
@@ -3810,27 +3874,7 @@ __metadata:
languageName: node
linkType: hard
-"body-parser@npm:1.20.3":
- version: 1.20.3
- resolution: "body-parser@npm:1.20.3"
- dependencies:
- bytes: "npm:3.1.2"
- content-type: "npm:~1.0.5"
- debug: "npm:2.6.9"
- depd: "npm:2.0.0"
- destroy: "npm:1.2.0"
- http-errors: "npm:2.0.0"
- iconv-lite: "npm:0.4.24"
- on-finished: "npm:2.4.1"
- qs: "npm:6.13.0"
- raw-body: "npm:2.5.2"
- type-is: "npm:~1.6.18"
- unpipe: "npm:1.0.0"
- checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310
- languageName: node
- linkType: hard
-
-"body-parser@npm:^2.0.0, body-parser@npm:^2.2.0":
+"body-parser@npm:^2.2.0":
version: 2.2.0
resolution: "body-parser@npm:2.2.0"
dependencies:
@@ -3855,21 +3899,21 @@ __metadata:
linkType: hard
"brace-expansion@npm:^1.1.7":
- version: 1.1.11
- resolution: "brace-expansion@npm:1.1.11"
+ version: 1.1.12
+ resolution: "brace-expansion@npm:1.1.12"
dependencies:
balanced-match: "npm:^1.0.0"
concat-map: "npm:0.0.1"
- checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668
+ checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73
languageName: node
linkType: hard
"brace-expansion@npm:^2.0.1":
- version: 2.0.1
- resolution: "brace-expansion@npm:2.0.1"
+ version: 2.0.2
+ resolution: "brace-expansion@npm:2.0.2"
dependencies:
balanced-match: "npm:^1.0.0"
- checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f
+ checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf
languageName: node
linkType: hard
@@ -3883,16 +3927,16 @@ __metadata:
linkType: hard
"browserslist@npm:^4.21.1":
- version: 4.24.5
- resolution: "browserslist@npm:4.24.5"
+ version: 4.25.1
+ resolution: "browserslist@npm:4.25.1"
dependencies:
- caniuse-lite: "npm:^1.0.30001716"
- electron-to-chromium: "npm:^1.5.149"
+ caniuse-lite: "npm:^1.0.30001726"
+ electron-to-chromium: "npm:^1.5.173"
node-releases: "npm:^2.0.19"
update-browserslist-db: "npm:^1.1.3"
bin:
browserslist: cli.js
- checksum: 10c0/f4c1ce1a7d8fdfab5e5b88bb6e93d09e8a883c393f86801537a252da0362dbdcde4dbd97b318246c5d84c6607b2f6b47af732c1b000d6a8a881ee024bad29204
+ checksum: 10c0/acba5f0bdbd5e72dafae1e6ec79235b7bad305ed104e082ed07c34c38c7cb8ea1bc0f6be1496958c40482e40166084458fc3aee15111f15faa79212ad9081b2a
languageName: node
linkType: hard
@@ -4014,21 +4058,6 @@ __metadata:
languageName: node
linkType: hard
-"cacheable-request@npm:^10.2.8":
- version: 10.2.14
- resolution: "cacheable-request@npm:10.2.14"
- dependencies:
- "@types/http-cache-semantics": "npm:^4.0.2"
- get-stream: "npm:^6.0.1"
- http-cache-semantics: "npm:^4.1.1"
- keyv: "npm:^4.5.3"
- mimic-response: "npm:^4.0.0"
- normalize-url: "npm:^8.0.0"
- responselike: "npm:^3.0.0"
- checksum: 10c0/41b6658db369f20c03128227ecd219ca7ac52a9d24fc0f499cc9aa5d40c097b48b73553504cebd137024d957c0ddb5b67cf3ac1439b136667f3586257763f88d
- languageName: node
- linkType: hard
-
"cacheable-request@npm:^12.0.1":
version: 12.0.1
resolution: "cacheable-request@npm:12.0.1"
@@ -4083,7 +4112,7 @@ __metadata:
languageName: node
linkType: hard
-"callsites@npm:^4.0.0":
+"callsites@npm:^4.0.0, callsites@npm:^4.1.0":
version: 4.2.0
resolution: "callsites@npm:4.2.0"
checksum: 10c0/8f7e269ec09fc0946bb22d838a8bc7932e1909ab4a833b964749f4d0e8bdeaa1f253287c4f911f61781f09620b6925ccd19a5ea4897489c4e59442c660c312a3
@@ -4115,14 +4144,14 @@ __metadata:
languageName: node
linkType: hard
-"camoufox-js@npm:^0.3.0":
- version: 0.3.5
- resolution: "camoufox-js@npm:0.3.5"
+"camoufox-js@npm:^0.3.5":
+ version: 0.3.6
+ resolution: "camoufox-js@npm:0.3.6"
dependencies:
adm-zip: "npm:^0.5.16"
commander: "npm:^13.1.0"
fingerprint-generator: "npm:^2.1.66"
- impit: "npm:^0.2.1"
+ impit: "npm:^0.4.6"
js-yaml: "npm:^4.1.0"
language-tags: "npm:^2.0.1"
maxmind: "npm:^4.3.24"
@@ -4133,27 +4162,27 @@ __metadata:
xml2js: "npm:^0.6.2"
bin:
camoufox-js: dist/__main__.js
- checksum: 10c0/d35de44d43451963ceeace8d326f072e033e11893395189d271a3ee5502da9ba2595523fcb494f66cb9c805dfcde475e2c25ccc48a839c123cd0c359a74962b9
+ checksum: 10c0/468a88c614bcac0c278c394155c53a3f48dd82fc88e71a31a08c87e081a0e04f9bce892dec54aa6506ce3ac9c2e6e70c63c484e03aadbb74d46559786577f632
languageName: node
linkType: hard
-"caniuse-lite@npm:^1.0.30001716":
- version: 1.0.30001717
- resolution: "caniuse-lite@npm:1.0.30001717"
- checksum: 10c0/6c0bb1e5182fd578ebe97ee2203250849754a4e17d985839fab527ad27e125a4c4ffce3ece5505217fedf30ea0bbc17ac9f93e9ac525c0389ccba61c6e8345dc
+"caniuse-lite@npm:^1.0.30001726":
+ version: 1.0.30001727
+ resolution: "caniuse-lite@npm:1.0.30001727"
+ checksum: 10c0/f0a441c05d8925d728c2d02ce23b001935f52183a3bf669556f302568fe258d1657940c7ac0b998f92bc41383e185b390279a7d779e6d96a2b47881f56400221
languageName: node
linkType: hard
"chai@npm:^5.2.0":
- version: 5.2.0
- resolution: "chai@npm:5.2.0"
+ version: 5.2.1
+ resolution: "chai@npm:5.2.1"
dependencies:
assertion-error: "npm:^2.0.1"
check-error: "npm:^2.1.1"
deep-eql: "npm:^5.0.1"
loupe: "npm:^3.1.0"
pathval: "npm:^2.0.0"
- checksum: 10c0/dfd1cb719c7cebb051b727672d382a35338af1470065cb12adb01f4ee451bbf528e0e0f9ab2016af5fc1eea4df6e7f4504dc8443f8f00bd8fb87ad32dc516f7d
+ checksum: 10c0/58209c03ae9b2fd97cfa1cb0fbe372b1906e6091311b9ba1b0468cc4923b0766a50a1050a164df3ccefb9464944c9216b632f1477c9e429068013bdbb57220f6
languageName: node
linkType: hard
@@ -4178,19 +4207,6 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:^1.1.1":
- version: 1.1.3
- resolution: "chalk@npm:1.1.3"
- dependencies:
- ansi-styles: "npm:^2.2.1"
- escape-string-regexp: "npm:^1.0.2"
- has-ansi: "npm:^2.0.0"
- strip-ansi: "npm:^3.0.0"
- supports-color: "npm:^2.0.0"
- checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8
- languageName: node
- linkType: hard
-
"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
@@ -4236,18 +4252,22 @@ __metadata:
languageName: node
linkType: hard
-"cheerio@npm:1.0.0-rc.12":
- version: 1.0.0-rc.12
- resolution: "cheerio@npm:1.0.0-rc.12"
+"cheerio@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "cheerio@npm:1.1.0"
dependencies:
cheerio-select: "npm:^2.1.0"
dom-serializer: "npm:^2.0.0"
domhandler: "npm:^5.0.3"
- domutils: "npm:^3.0.1"
- htmlparser2: "npm:^8.0.1"
- parse5: "npm:^7.0.0"
- parse5-htmlparser2-tree-adapter: "npm:^7.0.0"
- checksum: 10c0/c85d2f2461e3f024345b78e0bb16ad8e41492356210470dd1e7d5a91391da9fcf6c0a7cb48a9ba8820330153f0cedb4d0a60c7af15d96ecdb3092299b9d9c0cc
+ domutils: "npm:^3.2.2"
+ encoding-sniffer: "npm:^0.2.0"
+ htmlparser2: "npm:^10.0.0"
+ parse5: "npm:^7.3.0"
+ parse5-htmlparser2-tree-adapter: "npm:^7.1.0"
+ parse5-parser-stream: "npm:^7.1.2"
+ undici: "npm:^7.10.0"
+ whatwg-mimetype: "npm:^4.0.0"
+ checksum: 10c0/f7b940a89e1fe77bf6b4fe3b993f17b02a358942cc0b9d3b55ea235a0bc322829dbc47151763ef9986fd237494c00380909af759e46582c72470a10643b85abd
languageName: node
linkType: hard
@@ -4272,15 +4292,15 @@ __metadata:
languageName: node
linkType: hard
-"chromium-bidi@npm:3.0.0":
- version: 3.0.0
- resolution: "chromium-bidi@npm:3.0.0"
+"chromium-bidi@npm:5.1.0":
+ version: 5.1.0
+ resolution: "chromium-bidi@npm:5.1.0"
dependencies:
mitt: "npm:^3.0.1"
zod: "npm:^3.24.1"
peerDependencies:
devtools-protocol: "*"
- checksum: 10c0/e875df32119de3011f6175decb3ba08ca8f9fbac61b5e03187def73d41e07f73b3228aac8844feb5c72624c719c8bd8c99664f8539ba4c17a2f332bcf0163d9a
+ checksum: 10c0/7bdbd59e6fcd2d4e48b5485e23c930e1608410bd9e98a0d2ab4286ab907d080b1866287a2544b5ea0c4e67f1d81d8398d9d43fcbe56fb60a007bf28eb63e36ec
languageName: node
linkType: hard
@@ -4292,9 +4312,9 @@ __metadata:
linkType: hard
"ci-info@npm:^4.0.0, ci-info@npm:^4.1.0":
- version: 4.2.0
- resolution: "ci-info@npm:4.2.0"
- checksum: 10c0/37a2f4b6a213a5cf835890eb0241f0d5b022f6cfefde58a69e9af8e3a0e71e06d6ad7754b0d4efb9cd2613e58a7a33996d71b56b0d04242722e86666f3f3d058
+ version: 4.3.0
+ resolution: "ci-info@npm:4.3.0"
+ checksum: 10c0/60d3dfe95d75c01454ec1cfd5108617dd598a28a2a3e148bd7e1523c1c208b5f5a3007cafcbe293e6fd0a5a310cc32217c5dc54743eeabc0a2bec80072fc055c
languageName: node
linkType: hard
@@ -4383,6 +4403,17 @@ __metadata:
languageName: node
linkType: hard
+"cliui@npm:^9.0.1":
+ version: 9.0.1
+ resolution: "cliui@npm:9.0.1"
+ dependencies:
+ string-width: "npm:^7.2.0"
+ strip-ansi: "npm:^7.1.0"
+ wrap-ansi: "npm:^9.0.0"
+ checksum: 10c0/13441832e9efe7c7a76bd2b8e683555c478d461a9f249dc5db9b17fe8d4b47fa9277b503914b90bd00e4a151abb6b9b02b2288972ffe2e5e3ca40bcb1c2330d3
+ languageName: node
+ linkType: hard
+
"clone-deep@npm:4.0.1":
version: 4.0.1
resolution: "clone-deep@npm:4.0.1"
@@ -4489,15 +4520,15 @@ __metadata:
languageName: node
linkType: hard
-"commitlint@npm:^19.0.0":
- version: 19.8.0
- resolution: "commitlint@npm:19.8.0"
+"commitlint@npm:^19.8.0":
+ version: 19.8.1
+ resolution: "commitlint@npm:19.8.1"
dependencies:
- "@commitlint/cli": "npm:^19.8.0"
- "@commitlint/types": "npm:^19.8.0"
+ "@commitlint/cli": "npm:^19.8.1"
+ "@commitlint/types": "npm:^19.8.1"
bin:
commitlint: cli.js
- checksum: 10c0/e98e251c294e0fb69adb3155c1b26458fbb0955f56567a9c419731b484f6f0609047adc2140009957b335e4f1c015fe522e0675324f18d6f6b5cdec995fa18be
+ checksum: 10c0/2305ac49f3b85fb667f6e89f80526c404d5c944da557916cd223a4104545dd9d1f849895a8b48c553b1c1811fd8c58ff586c94cc7276f54d4e8e819788572400
languageName: node
linkType: hard
@@ -4551,15 +4582,6 @@ __metadata:
languageName: node
linkType: hard
-"content-disposition@npm:0.5.4":
- version: 0.5.4
- resolution: "content-disposition@npm:0.5.4"
- dependencies:
- safe-buffer: "npm:5.2.1"
- checksum: 10c0/bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb
- languageName: node
- linkType: hard
-
"content-disposition@npm:^1.0.0":
version: 1.0.0
resolution: "content-disposition@npm:1.0.0"
@@ -4569,7 +4591,7 @@ __metadata:
languageName: node
linkType: hard
-"content-type@npm:^1.0.4, content-type@npm:^1.0.5, content-type@npm:~1.0.4, content-type@npm:~1.0.5":
+"content-type@npm:^1.0.5":
version: 1.0.5
resolution: "content-type@npm:1.0.5"
checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af
@@ -4692,10 +4714,10 @@ __metadata:
languageName: node
linkType: hard
-"cookie-signature@npm:1.0.6":
- version: 1.0.6
- resolution: "cookie-signature@npm:1.0.6"
- checksum: 10c0/b36fd0d4e3fef8456915fcf7742e58fbfcc12a17a018e0eb9501c9d5ef6893b596466f03b0564b81af29ff2538fd0aa4b9d54fe5ccbfb4c90ea50ad29fe2d221
+"convert-hrtime@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "convert-hrtime@npm:5.0.0"
+ checksum: 10c0/2092e51aab205e1141440e84e2a89f8881e68e47c1f8bc168dfd7c67047d8f1db43bac28044bc05749205651fead4e7910f52c7bb6066213480df99e333e9f47
languageName: node
linkType: hard
@@ -4706,13 +4728,6 @@ __metadata:
languageName: node
linkType: hard
-"cookie@npm:0.7.1":
- version: 0.7.1
- resolution: "cookie@npm:0.7.1"
- checksum: 10c0/5de60c67a410e7c8dc8a46a4b72eb0fe925871d057c9a5d2c0e8145c4270a4f81076de83410c4d397179744b478e33cd80ccbcc457abf40a9409ad27dcd21dde
- languageName: node
- linkType: hard
-
"cookie@npm:^0.7.1":
version: 0.7.2
resolution: "cookie@npm:0.7.2"
@@ -4727,16 +4742,6 @@ __metadata:
languageName: node
linkType: hard
-"cors@npm:^2.8.5":
- version: 2.8.5
- resolution: "cors@npm:2.8.5"
- dependencies:
- object-assign: "npm:^4"
- vary: "npm:^1"
- checksum: 10c0/373702b7999409922da80de4a61938aabba6929aea5b6fd9096fefb9e8342f626c0ebd7507b0e8b0b311380744cc985f27edebc0a26e0ddb784b54e1085de761
- languageName: node
- linkType: hard
-
"cosmiconfig-typescript-loader@npm:^6.1.0":
version: 6.1.0
resolution: "cosmiconfig-typescript-loader@npm:6.1.0"
@@ -4767,7 +4772,7 @@ __metadata:
languageName: node
linkType: hard
-"crawlee@workspace:packages/crawlee":
+"crawlee@npm:^3.13.3, crawlee@workspace:packages/crawlee":
version: 0.0.0-use.local
resolution: "crawlee@workspace:packages/crawlee"
dependencies:
@@ -4783,8 +4788,8 @@ __metadata:
"@crawlee/playwright": "npm:3.13.3"
"@crawlee/puppeteer": "npm:3.13.3"
"@crawlee/utils": "npm:3.13.3"
- import-local: "npm:^3.1.0"
- tslib: "npm:^2.4.0"
+ import-local: "npm:^3.2.0"
+ tslib: "npm:^2.8.1"
peerDependencies:
playwright: "*"
puppeteer: "*"
@@ -4822,22 +4827,22 @@ __metadata:
linkType: hard
"css-select@npm:^5.1.0":
- version: 5.1.0
- resolution: "css-select@npm:5.1.0"
+ version: 5.2.2
+ resolution: "css-select@npm:5.2.2"
dependencies:
boolbase: "npm:^1.0.0"
css-what: "npm:^6.1.0"
domhandler: "npm:^5.0.2"
domutils: "npm:^3.0.1"
nth-check: "npm:^2.0.1"
- checksum: 10c0/551c60dba5b54054741032c1793b5734f6ba45e23ae9e82761a3c0ed1acbb8cfedfa443aaba3a3c1a54cac12b456d2012a09d2cd5f0e82e430454c1b9d84d500
+ checksum: 10c0/d79fffa97106007f2802589f3ed17b8c903f1c961c0fc28aa8a051eee0cbad394d8446223862efd4c1b40445a6034f626bb639cf2035b0bfc468544177593c99
languageName: node
linkType: hard
"css-what@npm:^6.1.0":
- version: 6.1.0
- resolution: "css-what@npm:6.1.0"
- checksum: 10c0/a09f5a6b14ba8dcf57ae9a59474722e80f20406c53a61e9aedb0eedc693b135113ffe2983f4efc4b5065ae639442e9ae88df24941ef159c218b231011d733746
+ version: 6.2.2
+ resolution: "css-what@npm:6.2.2"
+ checksum: 10c0/91e24c26fb977b4ccef30d7007d2668c1c10ac0154cc3f42f7304410e9594fb772aea4f30c832d2993b132ca8d99338050866476210316345ec2e7d47b248a56
languageName: node
linkType: hard
@@ -4858,19 +4863,19 @@ __metadata:
linkType: hard
"cssstyle@npm:^4.2.1":
- version: 4.3.1
- resolution: "cssstyle@npm:4.3.1"
+ version: 4.6.0
+ resolution: "cssstyle@npm:4.6.0"
dependencies:
- "@asamuzakjp/css-color": "npm:^3.1.2"
+ "@asamuzakjp/css-color": "npm:^3.2.0"
rrweb-cssom: "npm:^0.8.0"
- checksum: 10c0/89d73252d5f9930cf67f5c576de8030a9d960aae4c8bdd42d60464b2f67c8d809601fb7e620b43d4c84e03472016da77528df9a21a21393387ed256610ca0ab4
+ checksum: 10c0/71add1b0ffafa1bedbef6855db6189b9523d3320e015a0bf3fbd504760efb9a81e1f1a225228d5fa892ee58e56d06994ca372e7f4e461cda7c4c9985fe075f65
languageName: node
linkType: hard
-"csv-stringify@npm:^6.2.0":
- version: 6.5.2
- resolution: "csv-stringify@npm:6.5.2"
- checksum: 10c0/8d2c601ce99c4baf5009abb16a9021cfd8d91a7be660f54343cba566ee5057d0ef517e0afde91e7e8803aeafb81268f6f04e47cb272462553b12f8e65c9c0674
+"csv-stringify@npm:^6.5.2":
+ version: 6.6.0
+ resolution: "csv-stringify@npm:6.6.0"
+ checksum: 10c0/2e5b14ff1e434aba7b8cae74faa0329c1d967654820f2ae3f358a660b5887ab623224ed8eb7f3ab6d0f7342663c965ca079ca420b6046210709f72e8aec87d94
languageName: node
linkType: hard
@@ -4945,24 +4950,24 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:2.6.9, debug@npm:^2.2.0":
- version: 2.6.9
- resolution: "debug@npm:2.6.9"
- dependencies:
- ms: "npm:2.0.0"
- checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589
- languageName: node
- linkType: hard
-
-"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0":
- version: 4.4.0
- resolution: "debug@npm:4.4.0"
+"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0, debug@npm:^4.4.1":
+ version: 4.4.1
+ resolution: "debug@npm:4.4.1"
dependencies:
ms: "npm:^2.1.3"
peerDependenciesMeta:
supports-color:
optional: true
- checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de
+ checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55
+ languageName: node
+ linkType: hard
+
+"debug@npm:^2.2.0":
+ version: 2.6.9
+ resolution: "debug@npm:2.6.9"
+ dependencies:
+ ms: "npm:2.0.0"
+ checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589
languageName: node
linkType: hard
@@ -4993,9 +4998,9 @@ __metadata:
linkType: hard
"decimal.js@npm:^10.5.0":
- version: 10.5.0
- resolution: "decimal.js@npm:10.5.0"
- checksum: 10c0/785c35279df32762143914668df35948920b6c1c259b933e0519a69b7003fc0a5ed2a766b1e1dda02574450c566b21738a45f15e274b47c2ac02072c0d1f3ac3
+ version: 10.6.0
+ resolution: "decimal.js@npm:10.6.0"
+ checksum: 10c0/07d69fbcc54167a340d2d97de95f546f9ff1f69d2b45a02fd7a5292412df3cd9eb7e23065e532a318f5474a2e1bccf8392fdf0443ef467f97f3bf8cb0477e5aa
languageName: node
linkType: hard
@@ -5027,7 +5032,7 @@ __metadata:
languageName: node
linkType: hard
-"deep-equal@npm:^2.0.5":
+"deep-equal@npm:^2.2.3":
version: 2.2.3
resolution: "deep-equal@npm:2.2.3"
dependencies:
@@ -5151,13 +5156,6 @@ __metadata:
languageName: node
linkType: hard
-"destroy@npm:1.2.0":
- version: 1.2.0
- resolution: "destroy@npm:1.2.0"
- checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643
- languageName: node
- linkType: hard
-
"detect-europe-js@npm:^0.1.2":
version: 0.1.2
resolution: "detect-europe-js@npm:0.1.2"
@@ -5180,16 +5178,16 @@ __metadata:
linkType: hard
"devtools-protocol@npm:*":
- version: 0.0.1454823
- resolution: "devtools-protocol@npm:0.0.1454823"
- checksum: 10c0/141a2d53e9500723119f41cbfb6a481818328c81483aed51345719a14be6de84331d668a29ca75f5886d0edac1e2af463441f2a86a0ba617e4eb6c17a1067d15
+ version: 0.0.1488636
+ resolution: "devtools-protocol@npm:0.0.1488636"
+ checksum: 10c0/3746bdfe9f77826a3225bb4740b50d62a56a45713bbf3140d015262f21798cbd809029e01d32324d9935bd22fcc822076d49ba4dfc3bc44f63203cd2de3bc859
languageName: node
linkType: hard
-"devtools-protocol@npm:0.0.1425554":
- version: 0.0.1425554
- resolution: "devtools-protocol@npm:0.0.1425554"
- checksum: 10c0/2edb3066b42ef1cabf94e2846af3cc74504b6bcc4502c7a23f9d4c6b1ce3305cea25b0ae839d44378f9d3162bbe12a5ef67caee858d704d91e8c6902db2e82fa
+"devtools-protocol@npm:0.0.1439962":
+ version: 0.0.1439962
+ resolution: "devtools-protocol@npm:0.0.1439962"
+ checksum: 10c0/fb25e6731262ee47aa4764b6711670d29fcdfc6487882c0c9583083714b60153d3748c9195f50290cdfb9fae2f34547b67743a94132d586b3cf56324f7c683da
languageName: node
linkType: hard
@@ -5200,15 +5198,6 @@ __metadata:
languageName: node
linkType: hard
-"dir-glob@npm:^3.0.1":
- version: 3.0.1
- resolution: "dir-glob@npm:3.0.1"
- dependencies:
- path-type: "npm:^4.0.0"
- checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c
- languageName: node
- linkType: hard
-
"doctrine@npm:^2.1.0":
version: 2.1.0
resolution: "doctrine@npm:2.1.0"
@@ -5236,7 +5225,7 @@ __metadata:
languageName: node
linkType: hard
-"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3":
+"domhandler@npm:*, domhandler@npm:^5.0.2, domhandler@npm:^5.0.3":
version: 5.0.3
resolution: "domhandler@npm:5.0.3"
dependencies:
@@ -5245,7 +5234,7 @@ __metadata:
languageName: node
linkType: hard
-"domutils@npm:^3.0.1, domutils@npm:^3.1.0, domutils@npm:^3.2.1":
+"domutils@npm:^3.0.1, domutils@npm:^3.2.1, domutils@npm:^3.2.2":
version: 3.2.2
resolution: "domutils@npm:3.2.2"
dependencies:
@@ -5283,6 +5272,15 @@ __metadata:
languageName: node
linkType: hard
+"dot-prop@npm:^8.0.2":
+ version: 8.0.2
+ resolution: "dot-prop@npm:8.0.2"
+ dependencies:
+ type-fest: "npm:^3.8.0"
+ checksum: 10c0/422b4a65aad880fc4a21d09615ae97bf6c66767e7b29522fbafa34d2dd0489adff745f79dd1126ac463730f2b43eada75a02e5114065491c6148953f29551f27
+ languageName: node
+ linkType: hard
+
"dotenv-expand@npm:~11.0.6":
version: 11.0.7
resolution: "dotenv-expand@npm:11.0.7"
@@ -5293,9 +5291,9 @@ __metadata:
linkType: hard
"dotenv@npm:^16.4.5":
- version: 16.5.0
- resolution: "dotenv@npm:16.5.0"
- checksum: 10c0/5bc94c919fbd955bf0ba44d33922a1e93d1078e64a1db5c30faeded1d996e7a83c55332cb8ea4fae5a9ca4d0be44cbceb95c5811e70f9f095298df09d1997dd9
+ version: 16.6.1
+ resolution: "dotenv@npm:16.6.1"
+ checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc
languageName: node
linkType: hard
@@ -5317,7 +5315,7 @@ __metadata:
languageName: node
linkType: hard
-"duplexer@npm:^0.1.1, duplexer@npm:~0.1.1":
+"duplexer@npm:~0.1.1":
version: 0.1.2
resolution: "duplexer@npm:0.1.2"
checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2
@@ -5349,10 +5347,10 @@ __metadata:
languageName: node
linkType: hard
-"electron-to-chromium@npm:^1.5.149":
- version: 1.5.149
- resolution: "electron-to-chromium@npm:1.5.149"
- checksum: 10c0/dc9fe63d1ffb034a5c91133291b09d877b4b200b01b1235090e94aed7f75f4413637c7b4e3a783b03f03c06bee8f45bbd5f44ddb397bc35528ac8a838eb6a66d
+"electron-to-chromium@npm:^1.5.173":
+ version: 1.5.187
+ resolution: "electron-to-chromium@npm:1.5.187"
+ checksum: 10c0/c83153010b786deac926fb128e0e0a68202312a25b4896892bcf166acb2ccb6357ec918ba38d44e16294cd85bf7e345198e1809e1848295221a8753beb658241
languageName: node
linkType: hard
@@ -5377,17 +5375,20 @@ __metadata:
languageName: node
linkType: hard
-"encodeurl@npm:^2.0.0, encodeurl@npm:~2.0.0":
+"encodeurl@npm:^2.0.0":
version: 2.0.0
resolution: "encodeurl@npm:2.0.0"
checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb
languageName: node
linkType: hard
-"encodeurl@npm:~1.0.2":
- version: 1.0.2
- resolution: "encodeurl@npm:1.0.2"
- checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec
+"encoding-sniffer@npm:^0.2.0":
+ version: 0.2.1
+ resolution: "encoding-sniffer@npm:0.2.1"
+ dependencies:
+ iconv-lite: "npm:^0.6.3"
+ whatwg-encoding: "npm:^3.1.1"
+ checksum: 10c0/d6b591880788f3baf8dd1744636dd189d24a1ec93e6f9817267c60ac3458a5191ca70ab1a186fb67731beff1c3489c6527dfdc4718158ed8460ab2f400dd5e7d
languageName: node
linkType: hard
@@ -5401,11 +5402,11 @@ __metadata:
linkType: hard
"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1":
- version: 1.4.4
- resolution: "end-of-stream@npm:1.4.4"
+ version: 1.4.5
+ resolution: "end-of-stream@npm:1.4.5"
dependencies:
once: "npm:^1.4.0"
- checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975
+ checksum: 10c0/b0701c92a10b89afb1cb45bf54a5292c6f008d744eb4382fa559d54775ff31617d1d7bc3ef617575f552e24fad2c7c1a1835948c66b3f3a4be0a6c1f35c883d8
languageName: node
linkType: hard
@@ -5418,7 +5419,7 @@ __metadata:
languageName: node
linkType: hard
-"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0":
+"entities@npm:^4.2.0":
version: 4.5.0
resolution: "entities@npm:4.5.0"
checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250
@@ -5426,9 +5427,9 @@ __metadata:
linkType: hard
"entities@npm:^6.0.0":
- version: 6.0.0
- resolution: "entities@npm:6.0.0"
- checksum: 10c0/b82a7bd5de282860f3c36a91e815e41e874fd036c83956a568b82729678492eb088359d6f7e0a4f5c00776427263fcba04959b8340fefa430c39b9bce770427e
+ version: 6.0.1
+ resolution: "entities@npm:6.0.1"
+ checksum: 10c0/ed836ddac5acb34341094eb495185d527bd70e8632b6c0d59548cbfa23defdbae70b96f9a405c82904efa421230b5b3fd2283752447d737beffd3f3e6ee74414
languageName: node
linkType: hard
@@ -5471,26 +5472,26 @@ __metadata:
languageName: node
linkType: hard
-"es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9":
- version: 1.23.9
- resolution: "es-abstract@npm:1.23.9"
+"es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0":
+ version: 1.24.0
+ resolution: "es-abstract@npm:1.24.0"
dependencies:
array-buffer-byte-length: "npm:^1.0.2"
arraybuffer.prototype.slice: "npm:^1.0.4"
available-typed-arrays: "npm:^1.0.7"
call-bind: "npm:^1.0.8"
- call-bound: "npm:^1.0.3"
+ call-bound: "npm:^1.0.4"
data-view-buffer: "npm:^1.0.2"
data-view-byte-length: "npm:^1.0.2"
data-view-byte-offset: "npm:^1.0.1"
es-define-property: "npm:^1.0.1"
es-errors: "npm:^1.3.0"
- es-object-atoms: "npm:^1.0.0"
+ es-object-atoms: "npm:^1.1.1"
es-set-tostringtag: "npm:^2.1.0"
es-to-primitive: "npm:^1.3.0"
function.prototype.name: "npm:^1.1.8"
- get-intrinsic: "npm:^1.2.7"
- get-proto: "npm:^1.0.0"
+ get-intrinsic: "npm:^1.3.0"
+ get-proto: "npm:^1.0.1"
get-symbol-description: "npm:^1.1.0"
globalthis: "npm:^1.0.4"
gopd: "npm:^1.2.0"
@@ -5502,21 +5503,24 @@ __metadata:
is-array-buffer: "npm:^3.0.5"
is-callable: "npm:^1.2.7"
is-data-view: "npm:^1.0.2"
+ is-negative-zero: "npm:^2.0.3"
is-regex: "npm:^1.2.1"
+ is-set: "npm:^2.0.3"
is-shared-array-buffer: "npm:^1.0.4"
is-string: "npm:^1.1.1"
is-typed-array: "npm:^1.1.15"
- is-weakref: "npm:^1.1.0"
+ is-weakref: "npm:^1.1.1"
math-intrinsics: "npm:^1.1.0"
- object-inspect: "npm:^1.13.3"
+ object-inspect: "npm:^1.13.4"
object-keys: "npm:^1.1.1"
object.assign: "npm:^4.1.7"
own-keys: "npm:^1.0.1"
- regexp.prototype.flags: "npm:^1.5.3"
+ regexp.prototype.flags: "npm:^1.5.4"
safe-array-concat: "npm:^1.1.3"
safe-push-apply: "npm:^1.0.0"
safe-regex-test: "npm:^1.1.0"
set-proto: "npm:^1.0.0"
+ stop-iteration-iterator: "npm:^1.1.0"
string.prototype.trim: "npm:^1.2.10"
string.prototype.trimend: "npm:^1.0.9"
string.prototype.trimstart: "npm:^1.0.8"
@@ -5525,8 +5529,8 @@ __metadata:
typed-array-byte-offset: "npm:^1.0.4"
typed-array-length: "npm:^1.0.7"
unbox-primitive: "npm:^1.1.0"
- which-typed-array: "npm:^1.1.18"
- checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b
+ which-typed-array: "npm:^1.1.19"
+ checksum: 10c0/b256e897be32df5d382786ce8cce29a1dd8c97efbab77a26609bd70f2ed29fbcfc7a31758cb07488d532e7ccccdfca76c1118f2afe5a424cdc05ca007867c318
languageName: node
linkType: hard
@@ -5561,163 +5565,84 @@ __metadata:
languageName: node
linkType: hard
-"es-module-lexer@npm:^1.6.0":
+"es-module-lexer@npm:^1.7.0":
version: 1.7.0
resolution: "es-module-lexer@npm:1.7.0"
checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b
- languageName: node
- linkType: hard
-
-"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1":
- version: 1.1.1
- resolution: "es-object-atoms@npm:1.1.1"
- dependencies:
- es-errors: "npm:^1.3.0"
- checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c
- languageName: node
- linkType: hard
-
-"es-set-tostringtag@npm:^2.1.0":
- version: 2.1.0
- resolution: "es-set-tostringtag@npm:2.1.0"
- dependencies:
- es-errors: "npm:^1.3.0"
- get-intrinsic: "npm:^1.2.6"
- has-tostringtag: "npm:^1.0.2"
- hasown: "npm:^2.0.2"
- checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af
- languageName: node
- linkType: hard
-
-"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0":
- version: 1.1.0
- resolution: "es-shim-unscopables@npm:1.1.0"
- dependencies:
- hasown: "npm:^2.0.2"
- checksum: 10c0/1b9702c8a1823fc3ef39035a4e958802cf294dd21e917397c561d0b3e195f383b978359816b1732d02b255ccf63e1e4815da0065b95db8d7c992037be3bbbcdb
- languageName: node
- linkType: hard
-
-"es-to-primitive@npm:^1.3.0":
- version: 1.3.0
- resolution: "es-to-primitive@npm:1.3.0"
- dependencies:
- is-callable: "npm:^1.2.7"
- is-date-object: "npm:^1.0.5"
- is-symbol: "npm:^1.0.4"
- checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b
- languageName: node
- linkType: hard
-
-"esbuild@npm:^0.21.3":
- version: 0.21.5
- resolution: "esbuild@npm:0.21.5"
- dependencies:
- "@esbuild/aix-ppc64": "npm:0.21.5"
- "@esbuild/android-arm": "npm:0.21.5"
- "@esbuild/android-arm64": "npm:0.21.5"
- "@esbuild/android-x64": "npm:0.21.5"
- "@esbuild/darwin-arm64": "npm:0.21.5"
- "@esbuild/darwin-x64": "npm:0.21.5"
- "@esbuild/freebsd-arm64": "npm:0.21.5"
- "@esbuild/freebsd-x64": "npm:0.21.5"
- "@esbuild/linux-arm": "npm:0.21.5"
- "@esbuild/linux-arm64": "npm:0.21.5"
- "@esbuild/linux-ia32": "npm:0.21.5"
- "@esbuild/linux-loong64": "npm:0.21.5"
- "@esbuild/linux-mips64el": "npm:0.21.5"
- "@esbuild/linux-ppc64": "npm:0.21.5"
- "@esbuild/linux-riscv64": "npm:0.21.5"
- "@esbuild/linux-s390x": "npm:0.21.5"
- "@esbuild/linux-x64": "npm:0.21.5"
- "@esbuild/netbsd-x64": "npm:0.21.5"
- "@esbuild/openbsd-x64": "npm:0.21.5"
- "@esbuild/sunos-x64": "npm:0.21.5"
- "@esbuild/win32-arm64": "npm:0.21.5"
- "@esbuild/win32-ia32": "npm:0.21.5"
- "@esbuild/win32-x64": "npm:0.21.5"
- dependenciesMeta:
- "@esbuild/aix-ppc64":
- optional: true
- "@esbuild/android-arm":
- optional: true
- "@esbuild/android-arm64":
- optional: true
- "@esbuild/android-x64":
- optional: true
- "@esbuild/darwin-arm64":
- optional: true
- "@esbuild/darwin-x64":
- optional: true
- "@esbuild/freebsd-arm64":
- optional: true
- "@esbuild/freebsd-x64":
- optional: true
- "@esbuild/linux-arm":
- optional: true
- "@esbuild/linux-arm64":
- optional: true
- "@esbuild/linux-ia32":
- optional: true
- "@esbuild/linux-loong64":
- optional: true
- "@esbuild/linux-mips64el":
- optional: true
- "@esbuild/linux-ppc64":
- optional: true
- "@esbuild/linux-riscv64":
- optional: true
- "@esbuild/linux-s390x":
- optional: true
- "@esbuild/linux-x64":
- optional: true
- "@esbuild/netbsd-x64":
- optional: true
- "@esbuild/openbsd-x64":
- optional: true
- "@esbuild/sunos-x64":
- optional: true
- "@esbuild/win32-arm64":
- optional: true
- "@esbuild/win32-ia32":
- optional: true
- "@esbuild/win32-x64":
- optional: true
- bin:
- esbuild: bin/esbuild
- checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de
- languageName: node
- linkType: hard
-
-"esbuild@npm:~0.25.0":
- version: 0.25.3
- resolution: "esbuild@npm:0.25.3"
- dependencies:
- "@esbuild/aix-ppc64": "npm:0.25.3"
- "@esbuild/android-arm": "npm:0.25.3"
- "@esbuild/android-arm64": "npm:0.25.3"
- "@esbuild/android-x64": "npm:0.25.3"
- "@esbuild/darwin-arm64": "npm:0.25.3"
- "@esbuild/darwin-x64": "npm:0.25.3"
- "@esbuild/freebsd-arm64": "npm:0.25.3"
- "@esbuild/freebsd-x64": "npm:0.25.3"
- "@esbuild/linux-arm": "npm:0.25.3"
- "@esbuild/linux-arm64": "npm:0.25.3"
- "@esbuild/linux-ia32": "npm:0.25.3"
- "@esbuild/linux-loong64": "npm:0.25.3"
- "@esbuild/linux-mips64el": "npm:0.25.3"
- "@esbuild/linux-ppc64": "npm:0.25.3"
- "@esbuild/linux-riscv64": "npm:0.25.3"
- "@esbuild/linux-s390x": "npm:0.25.3"
- "@esbuild/linux-x64": "npm:0.25.3"
- "@esbuild/netbsd-arm64": "npm:0.25.3"
- "@esbuild/netbsd-x64": "npm:0.25.3"
- "@esbuild/openbsd-arm64": "npm:0.25.3"
- "@esbuild/openbsd-x64": "npm:0.25.3"
- "@esbuild/sunos-x64": "npm:0.25.3"
- "@esbuild/win32-arm64": "npm:0.25.3"
- "@esbuild/win32-ia32": "npm:0.25.3"
- "@esbuild/win32-x64": "npm:0.25.3"
+ languageName: node
+ linkType: hard
+
+"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "es-object-atoms@npm:1.1.1"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c
+ languageName: node
+ linkType: hard
+
+"es-set-tostringtag@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "es-set-tostringtag@npm:2.1.0"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ get-intrinsic: "npm:^1.2.6"
+ has-tostringtag: "npm:^1.0.2"
+ hasown: "npm:^2.0.2"
+ checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af
+ languageName: node
+ linkType: hard
+
+"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "es-shim-unscopables@npm:1.1.0"
+ dependencies:
+ hasown: "npm:^2.0.2"
+ checksum: 10c0/1b9702c8a1823fc3ef39035a4e958802cf294dd21e917397c561d0b3e195f383b978359816b1732d02b255ccf63e1e4815da0065b95db8d7c992037be3bbbcdb
+ languageName: node
+ linkType: hard
+
+"es-to-primitive@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "es-to-primitive@npm:1.3.0"
+ dependencies:
+ is-callable: "npm:^1.2.7"
+ is-date-object: "npm:^1.0.5"
+ is-symbol: "npm:^1.0.4"
+ checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b
+ languageName: node
+ linkType: hard
+
+"esbuild@npm:^0.25.0, esbuild@npm:~0.25.0":
+ version: 0.25.6
+ resolution: "esbuild@npm:0.25.6"
+ dependencies:
+ "@esbuild/aix-ppc64": "npm:0.25.6"
+ "@esbuild/android-arm": "npm:0.25.6"
+ "@esbuild/android-arm64": "npm:0.25.6"
+ "@esbuild/android-x64": "npm:0.25.6"
+ "@esbuild/darwin-arm64": "npm:0.25.6"
+ "@esbuild/darwin-x64": "npm:0.25.6"
+ "@esbuild/freebsd-arm64": "npm:0.25.6"
+ "@esbuild/freebsd-x64": "npm:0.25.6"
+ "@esbuild/linux-arm": "npm:0.25.6"
+ "@esbuild/linux-arm64": "npm:0.25.6"
+ "@esbuild/linux-ia32": "npm:0.25.6"
+ "@esbuild/linux-loong64": "npm:0.25.6"
+ "@esbuild/linux-mips64el": "npm:0.25.6"
+ "@esbuild/linux-ppc64": "npm:0.25.6"
+ "@esbuild/linux-riscv64": "npm:0.25.6"
+ "@esbuild/linux-s390x": "npm:0.25.6"
+ "@esbuild/linux-x64": "npm:0.25.6"
+ "@esbuild/netbsd-arm64": "npm:0.25.6"
+ "@esbuild/netbsd-x64": "npm:0.25.6"
+ "@esbuild/openbsd-arm64": "npm:0.25.6"
+ "@esbuild/openbsd-x64": "npm:0.25.6"
+ "@esbuild/openharmony-arm64": "npm:0.25.6"
+ "@esbuild/sunos-x64": "npm:0.25.6"
+ "@esbuild/win32-arm64": "npm:0.25.6"
+ "@esbuild/win32-ia32": "npm:0.25.6"
+ "@esbuild/win32-x64": "npm:0.25.6"
dependenciesMeta:
"@esbuild/aix-ppc64":
optional: true
@@ -5761,6 +5686,8 @@ __metadata:
optional: true
"@esbuild/openbsd-x64":
optional: true
+ "@esbuild/openharmony-arm64":
+ optional: true
"@esbuild/sunos-x64":
optional: true
"@esbuild/win32-arm64":
@@ -5771,7 +5698,7 @@ __metadata:
optional: true
bin:
esbuild: bin/esbuild
- checksum: 10c0/127aff654310ede4e2eb232a7b1d8823f5b5d69222caf17aa7f172574a5b6b75f71ce78c6d8a40030421d7c75b784dc640de0fb1b87b7ea77ab2a1c832fa8df8
+ checksum: 10c0/6c2ddc66d8789d75bfa940fddf51a6a98b0fcb474f090669b47091f587e8c3e8e7da57d769b770fd8133268dd5bfc7055318aea0bca6f7c725220d7550437b42
languageName: node
linkType: hard
@@ -5782,14 +5709,14 @@ __metadata:
languageName: node
linkType: hard
-"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3":
+"escape-html@npm:^1.0.3":
version: 1.0.3
resolution: "escape-html@npm:1.0.3"
checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3
languageName: node
linkType: hard
-"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5":
+"escape-string-regexp@npm:^1.0.5":
version: 1.0.5
resolution: "escape-string-regexp@npm:1.0.5"
checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371
@@ -5836,14 +5763,14 @@ __metadata:
languageName: node
linkType: hard
-"eslint-config-prettier@npm:^10.1.1":
- version: 10.1.2
- resolution: "eslint-config-prettier@npm:10.1.2"
+"eslint-config-prettier@npm:^10.1.3":
+ version: 10.1.7
+ resolution: "eslint-config-prettier@npm:10.1.7"
peerDependencies:
eslint: ">=7.0.0"
bin:
eslint-config-prettier: bin/cli.js
- checksum: 10c0/c22c8e29193cc8fd70becf1c2dd072513f2b3004a175c2a49404c79d1745ba4dc0edc2afd00d16b0e26d24f95813a0469e7445a25104aec218f6d84cdb1697e9
+ checksum: 10c0/56eb0e12f80968fd2dbea29b01dad3c17ec51fab25315f4e3b305f27110b3b1a798612f689dbc0c1c052eb7467ed15399fc75eb6a0fe4484d814790ae29b56dc
languageName: node
linkType: hard
@@ -5858,44 +5785,44 @@ __metadata:
languageName: node
linkType: hard
-"eslint-module-utils@npm:^2.12.0":
- version: 2.12.0
- resolution: "eslint-module-utils@npm:2.12.0"
+"eslint-module-utils@npm:^2.12.1":
+ version: 2.12.1
+ resolution: "eslint-module-utils@npm:2.12.1"
dependencies:
debug: "npm:^3.2.7"
peerDependenciesMeta:
eslint:
optional: true
- checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558
+ checksum: 10c0/6f4efbe7a91ae49bf67b4ab3644cb60bc5bd7db4cb5521de1b65be0847ffd3fb6bce0dd68f0995e1b312d137f768e2a1f842ee26fe73621afa05f850628fdc40
languageName: node
linkType: hard
-"eslint-plugin-import@npm:^2.31.0":
- version: 2.31.0
- resolution: "eslint-plugin-import@npm:2.31.0"
+"eslint-plugin-import@npm:^2.32.0":
+ version: 2.32.0
+ resolution: "eslint-plugin-import@npm:2.32.0"
dependencies:
"@rtsao/scc": "npm:^1.1.0"
- array-includes: "npm:^3.1.8"
- array.prototype.findlastindex: "npm:^1.2.5"
- array.prototype.flat: "npm:^1.3.2"
- array.prototype.flatmap: "npm:^1.3.2"
+ array-includes: "npm:^3.1.9"
+ array.prototype.findlastindex: "npm:^1.2.6"
+ array.prototype.flat: "npm:^1.3.3"
+ array.prototype.flatmap: "npm:^1.3.3"
debug: "npm:^3.2.7"
doctrine: "npm:^2.1.0"
eslint-import-resolver-node: "npm:^0.3.9"
- eslint-module-utils: "npm:^2.12.0"
+ eslint-module-utils: "npm:^2.12.1"
hasown: "npm:^2.0.2"
- is-core-module: "npm:^2.15.1"
+ is-core-module: "npm:^2.16.1"
is-glob: "npm:^4.0.3"
minimatch: "npm:^3.1.2"
object.fromentries: "npm:^2.0.8"
object.groupby: "npm:^1.0.3"
- object.values: "npm:^1.2.0"
+ object.values: "npm:^1.2.1"
semver: "npm:^6.3.1"
- string.prototype.trimend: "npm:^1.0.8"
+ string.prototype.trimend: "npm:^1.0.9"
tsconfig-paths: "npm:^3.15.0"
peerDependencies:
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
- checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a
+ checksum: 10c0/bfb1b8fc8800398e62ddfefbf3638d185286edfed26dfe00875cc2846d954491b4f5112457831588b757fa789384e1ae585f812614c4797f0499fa234fd4a48b
languageName: node
linkType: hard
@@ -5908,13 +5835,13 @@ __metadata:
languageName: node
linkType: hard
-"eslint-scope@npm:^8.3.0":
- version: 8.3.0
- resolution: "eslint-scope@npm:8.3.0"
+"eslint-scope@npm:^8.4.0":
+ version: 8.4.0
+ resolution: "eslint-scope@npm:8.4.0"
dependencies:
esrecurse: "npm:^4.3.0"
estraverse: "npm:^5.2.0"
- checksum: 10c0/23bf54345573201fdf06d29efa345ab508b355492f6c6cc9e2b9f6d02b896f369b6dd5315205be94b8853809776c4d13353b85c6b531997b164ff6c3328ecf5b
+ checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0
languageName: node
linkType: hard
@@ -5925,29 +5852,28 @@ __metadata:
languageName: node
linkType: hard
-"eslint-visitor-keys@npm:^4.2.0":
- version: 4.2.0
- resolution: "eslint-visitor-keys@npm:4.2.0"
- checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269
+"eslint-visitor-keys@npm:^4.2.0, eslint-visitor-keys@npm:^4.2.1":
+ version: 4.2.1
+ resolution: "eslint-visitor-keys@npm:4.2.1"
+ checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43
languageName: node
linkType: hard
-"eslint@npm:^9.23.0":
- version: 9.26.0
- resolution: "eslint@npm:9.26.0"
+"eslint@npm:^9.26.0":
+ version: 9.31.0
+ resolution: "eslint@npm:9.31.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.2.0"
"@eslint-community/regexpp": "npm:^4.12.1"
- "@eslint/config-array": "npm:^0.20.0"
- "@eslint/config-helpers": "npm:^0.2.1"
- "@eslint/core": "npm:^0.13.0"
+ "@eslint/config-array": "npm:^0.21.0"
+ "@eslint/config-helpers": "npm:^0.3.0"
+ "@eslint/core": "npm:^0.15.0"
"@eslint/eslintrc": "npm:^3.3.1"
- "@eslint/js": "npm:9.26.0"
- "@eslint/plugin-kit": "npm:^0.2.8"
+ "@eslint/js": "npm:9.31.0"
+ "@eslint/plugin-kit": "npm:^0.3.1"
"@humanfs/node": "npm:^0.16.6"
"@humanwhocodes/module-importer": "npm:^1.0.1"
"@humanwhocodes/retry": "npm:^0.4.2"
- "@modelcontextprotocol/sdk": "npm:^1.8.0"
"@types/estree": "npm:^1.0.6"
"@types/json-schema": "npm:^7.0.15"
ajv: "npm:^6.12.4"
@@ -5955,9 +5881,9 @@ __metadata:
cross-spawn: "npm:^7.0.6"
debug: "npm:^4.3.2"
escape-string-regexp: "npm:^4.0.0"
- eslint-scope: "npm:^8.3.0"
- eslint-visitor-keys: "npm:^4.2.0"
- espree: "npm:^10.3.0"
+ eslint-scope: "npm:^8.4.0"
+ eslint-visitor-keys: "npm:^4.2.1"
+ espree: "npm:^10.4.0"
esquery: "npm:^1.5.0"
esutils: "npm:^2.0.2"
fast-deep-equal: "npm:^3.1.3"
@@ -5972,7 +5898,6 @@ __metadata:
minimatch: "npm:^3.1.2"
natural-compare: "npm:^1.4.0"
optionator: "npm:^0.9.3"
- zod: "npm:^3.24.2"
peerDependencies:
jiti: "*"
peerDependenciesMeta:
@@ -5980,18 +5905,18 @@ __metadata:
optional: true
bin:
eslint: bin/eslint.js
- checksum: 10c0/fb5ba6ce2b85a6c26c89bc1ca9b34f0ffa2166ba85d3d007a06bb2350151fb665e9a5f99d7f24051a00dc713203b50ece6e724a29fed7b297e432cdc79482fec
+ checksum: 10c0/3fd1cd5b38b907ecb3f5e7537ab91204efb38bc1ad0ca6e46fc4112f13b594272ff56e641b41580049bc333fbcb5b1b99ca9a542e8406e7da5e951068cbaec77
languageName: node
linkType: hard
-"espree@npm:^10.0.1, espree@npm:^10.3.0":
- version: 10.3.0
- resolution: "espree@npm:10.3.0"
+"espree@npm:^10.0.1, espree@npm:^10.3.0, espree@npm:^10.4.0":
+ version: 10.4.0
+ resolution: "espree@npm:10.4.0"
dependencies:
- acorn: "npm:^8.14.0"
+ acorn: "npm:^8.15.0"
acorn-jsx: "npm:^5.3.2"
- eslint-visitor-keys: "npm:^4.2.0"
- checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462
+ eslint-visitor-keys: "npm:^4.2.1"
+ checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b
languageName: node
linkType: hard
@@ -6046,7 +5971,7 @@ __metadata:
languageName: node
linkType: hard
-"etag@npm:^1.8.1, etag@npm:~1.8.1":
+"etag@npm:^1.8.1":
version: 1.8.1
resolution: "etag@npm:1.8.1"
checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84
@@ -6082,22 +6007,6 @@ __metadata:
languageName: node
linkType: hard
-"eventsource-parser@npm:^3.0.1":
- version: 3.0.1
- resolution: "eventsource-parser@npm:3.0.1"
- checksum: 10c0/146ce5ae8325d07645a49bbc54d7ac3aef42f5138bfbbe83d5cf96293b50eab2219926d6cf41eed0a0f90132578089652ba9286a19297662900133a9da6c2fd0
- languageName: node
- linkType: hard
-
-"eventsource@npm:^3.0.2":
- version: 3.0.6
- resolution: "eventsource@npm:3.0.6"
- dependencies:
- eventsource-parser: "npm:^3.0.1"
- checksum: 10c0/074d865ea1c7e29e3243f85a13306e89fca2d775b982dca03fa6bfa75c56827fa89cf1ab9e730db24bd6b104cbdcae074f2b37ba498874e9dd9710fbff4979bb
- languageName: node
- linkType: hard
-
"execa@npm:5.0.0":
version: 5.0.0
resolution: "execa@npm:5.0.0"
@@ -6140,9 +6049,9 @@ __metadata:
linkType: hard
"expect-type@npm:^1.2.1":
- version: 1.2.1
- resolution: "expect-type@npm:1.2.1"
- checksum: 10c0/b775c9adab3c190dd0d398c722531726cdd6022849b4adba19dceab58dda7e000a7c6c872408cd73d665baa20d381eca36af4f7b393a4ba60dd10232d1fb8898
+ version: 1.2.2
+ resolution: "expect-type@npm:1.2.2"
+ checksum: 10c0/6019019566063bbc7a690d9281d920b1a91284a4a093c2d55d71ffade5ac890cf37a51e1da4602546c4b56569d2ad2fc175a2ccee77d1ae06cb3af91ef84f44b
languageName: node
linkType: hard
@@ -6153,55 +6062,7 @@ __metadata:
languageName: node
linkType: hard
-"express-rate-limit@npm:^7.5.0":
- version: 7.5.0
- resolution: "express-rate-limit@npm:7.5.0"
- peerDependencies:
- express: ^4.11 || 5 || ^5.0.0-beta.1
- checksum: 10c0/3e96afa05b4f577395688ede37e0cb19901f20c350b32575fb076f3d25176209fb88d3648151755c232aaf304147c58531f070757978f376e2f08326449299fd
- languageName: node
- linkType: hard
-
-"express@npm:^4.18.1":
- version: 4.21.2
- resolution: "express@npm:4.21.2"
- dependencies:
- accepts: "npm:~1.3.8"
- array-flatten: "npm:1.1.1"
- body-parser: "npm:1.20.3"
- content-disposition: "npm:0.5.4"
- content-type: "npm:~1.0.4"
- cookie: "npm:0.7.1"
- cookie-signature: "npm:1.0.6"
- debug: "npm:2.6.9"
- depd: "npm:2.0.0"
- encodeurl: "npm:~2.0.0"
- escape-html: "npm:~1.0.3"
- etag: "npm:~1.8.1"
- finalhandler: "npm:1.3.1"
- fresh: "npm:0.5.2"
- http-errors: "npm:2.0.0"
- merge-descriptors: "npm:1.0.3"
- methods: "npm:~1.1.2"
- on-finished: "npm:2.4.1"
- parseurl: "npm:~1.3.3"
- path-to-regexp: "npm:0.1.12"
- proxy-addr: "npm:~2.0.7"
- qs: "npm:6.13.0"
- range-parser: "npm:~1.2.1"
- safe-buffer: "npm:5.2.1"
- send: "npm:0.19.0"
- serve-static: "npm:1.16.2"
- setprototypeof: "npm:1.2.0"
- statuses: "npm:2.0.1"
- type-is: "npm:~1.6.18"
- utils-merge: "npm:1.0.1"
- vary: "npm:~1.1.2"
- checksum: 10c0/38168fd0a32756600b56e6214afecf4fc79ec28eca7f7a91c2ab8d50df4f47562ca3f9dee412da7f5cea6b1a1544b33b40f9f8586dbacfbdada0fe90dbb10a1f
- languageName: node
- linkType: hard
-
-"express@npm:^5.0.1":
+"express@npm:^5.1.0":
version: 5.1.0
resolution: "express@npm:5.1.0"
dependencies:
@@ -6271,6 +6132,13 @@ __metadata:
languageName: node
linkType: hard
+"fast-equals@npm:^5.0.1":
+ version: 5.2.2
+ resolution: "fast-equals@npm:5.2.2"
+ checksum: 10c0/2bfeac6317a8959a00e2134749323557e5df6dea3af24e4457297733eace8ce4313fcbca2cf4532f3a6792607461e80442cd8d3af148d5c2e4e98ad996d6e5b5
+ languageName: node
+ linkType: hard
+
"fast-fifo@npm:^1.2.0, fast-fifo@npm:^1.3.2":
version: 1.3.2
resolution: "fast-fifo@npm:1.3.2"
@@ -6278,7 +6146,7 @@ __metadata:
languageName: node
linkType: hard
-"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3":
+"fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3":
version: 3.3.3
resolution: "fast-glob@npm:3.3.3"
dependencies:
@@ -6330,15 +6198,15 @@ __metadata:
languageName: node
linkType: hard
-"fdir@npm:^6.4.4":
- version: 6.4.4
- resolution: "fdir@npm:6.4.4"
+"fdir@npm:^6.4.3, fdir@npm:^6.4.4, fdir@npm:^6.4.6":
+ version: 6.4.6
+ resolution: "fdir@npm:6.4.6"
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
- checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd
+ checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9
languageName: node
linkType: hard
@@ -6349,15 +6217,6 @@ __metadata:
languageName: node
linkType: hard
-"figlet@npm:^1.1.1":
- version: 1.8.1
- resolution: "figlet@npm:1.8.1"
- bin:
- figlet: bin/index.js
- checksum: 10c0/20a9023ee316b2cbbeb9ba94c9adfdb9fc1bd150efec0ddd3492c23a03e3311ac77fb1a65cfa14e3bf4eca250ddcf98ca380871222cb9909bd50071b3602e8da
- languageName: node
- linkType: hard
-
"figures@npm:3.2.0, figures@npm:^3.0.0":
version: 3.2.0
resolution: "figures@npm:3.2.0"
@@ -6376,15 +6235,15 @@ __metadata:
languageName: node
linkType: hard
-"file-type@npm:^20.0.0":
- version: 20.5.0
- resolution: "file-type@npm:20.5.0"
+"file-type@npm:^21.0.0":
+ version: 21.0.0
+ resolution: "file-type@npm:21.0.0"
dependencies:
- "@tokenizer/inflate": "npm:^0.2.6"
- strtok3: "npm:^10.2.0"
+ "@tokenizer/inflate": "npm:^0.2.7"
+ strtok3: "npm:^10.2.2"
token-types: "npm:^6.0.0"
uint8array-extras: "npm:^1.4.0"
- checksum: 10c0/9b13d7e4eca79752008f036712a42df78393f05b88b9013c5754b04d3eb90b051cb692836a04acf7d2c696cb9f28077ddf8ebd6830175807f14fddf837d63be3
+ checksum: 10c0/ee6b0bb5771ad154e236bb77b5c00907743fef3637c3825713c1d6913377d3d969ebba4a6f0aa854b8231552e2c1bd0387229fe67394dc3d08a01819c7d107b1
languageName: node
linkType: hard
@@ -6413,21 +6272,6 @@ __metadata:
languageName: node
linkType: hard
-"finalhandler@npm:1.3.1":
- version: 1.3.1
- resolution: "finalhandler@npm:1.3.1"
- dependencies:
- debug: "npm:2.6.9"
- encodeurl: "npm:~2.0.0"
- escape-html: "npm:~1.0.3"
- on-finished: "npm:2.4.1"
- parseurl: "npm:~1.3.3"
- statuses: "npm:2.0.1"
- unpipe: "npm:~1.0.0"
- checksum: 10c0/d38035831865a49b5610206a3a9a9aae4e8523cbbcd01175d0480ffbf1278c47f11d89be3ca7f617ae6d94f29cf797546a4619cd84dd109009ef33f12f69019f
- languageName: node
- linkType: hard
-
"finalhandler@npm:^2.1.0":
version: 2.1.0
resolution: "finalhandler@npm:2.1.0"
@@ -6482,22 +6326,22 @@ __metadata:
languageName: node
linkType: hard
-"fingerprint-generator@npm:^2.0.6, fingerprint-generator@npm:^2.1.66":
- version: 2.1.66
- resolution: "fingerprint-generator@npm:2.1.66"
+"fingerprint-generator@npm:^2.1.66, fingerprint-generator@npm:^2.1.69":
+ version: 2.1.69
+ resolution: "fingerprint-generator@npm:2.1.69"
dependencies:
- generative-bayesian-network: "npm:^2.1.66"
- header-generator: "npm:^2.1.66"
+ generative-bayesian-network: "npm:^2.1.69"
+ header-generator: "npm:^2.1.69"
tslib: "npm:^2.4.0"
- checksum: 10c0/3adc25470776f46eb9a2fb59051bc6431bd2ed8e12b64eb074fabcf75929cdf6a882cf100f98a815973aa269a5c8d8a79fb38be19b676e21fbbbc447d3957fba
+ checksum: 10c0/80175e7c3b91652c4c29e43b3c7dc98264bafb29501f097412d21b494f5d4798fe649ce8ca05153cbed735171d232c143f03b7491342650d7176cc3e6b2c427d
languageName: node
linkType: hard
-"fingerprint-injector@npm:^2.0.5":
- version: 2.1.66
- resolution: "fingerprint-injector@npm:2.1.66"
+"fingerprint-injector@npm:^2.1.66":
+ version: 2.1.69
+ resolution: "fingerprint-injector@npm:2.1.69"
dependencies:
- fingerprint-generator: "npm:^2.1.66"
+ fingerprint-generator: "npm:^2.1.69"
tslib: "npm:^2.4.0"
peerDependencies:
playwright: ^1.22.2
@@ -6507,7 +6351,7 @@ __metadata:
optional: true
puppeteer:
optional: true
- checksum: 10c0/9d62768ff1e4c265f2bc78893a53c1a28795898d9518c662c6593d81915be63bfbfa3c30ee991c7e33b0a1d55b8686440ad19b5e3c1a1377f094d3594eebb1c4
+ checksum: 10c0/d2441f47e4298262be821615573879cb3b162f426c5d3f8544b0aefb0c75bb157c0dc3855b1d34b9461281455bff52b2b4e91a7cd1af6f518e5a818318878408
languageName: node
linkType: hard
@@ -6556,7 +6400,7 @@ __metadata:
languageName: node
linkType: hard
-"foreground-child@npm:^3.1.0":
+"foreground-child@npm:^3.1.0, foreground-child@npm:^3.3.1":
version: 3.3.1
resolution: "foreground-child@npm:3.3.1"
dependencies:
@@ -6566,29 +6410,23 @@ __metadata:
languageName: node
linkType: hard
-"form-data-encoder@npm:^2.1.2":
- version: 2.1.4
- resolution: "form-data-encoder@npm:2.1.4"
- checksum: 10c0/4c06ae2b79ad693a59938dc49ebd020ecb58e4584860a90a230f80a68b026483b022ba5e4143cff06ae5ac8fd446a0b500fabc87bbac3d1f62f2757f8dabcaf7
- languageName: node
- linkType: hard
-
"form-data-encoder@npm:^4.0.2":
- version: 4.0.2
- resolution: "form-data-encoder@npm:4.0.2"
- checksum: 10c0/559d3130e265316452434eaf68d68560fb36392ff4d04614683419de4fb43c3dbe152dc303599fae382ce24d3451a6d3d289d3bcc182ae3d8ad32e7ce8e35e53
+ version: 4.1.0
+ resolution: "form-data-encoder@npm:4.1.0"
+ checksum: 10c0/cbd655aa8ffff6f7c2733b1d8e95fa9a2fe8a88a90bde29fb54b8e02c9406e51f32a014bfe8297d67fbac9f77614d14a8b4bbc4fd0352838e67e97a881d06332
languageName: node
linkType: hard
"form-data@npm:^4.0.0":
- version: 4.0.2
- resolution: "form-data@npm:4.0.2"
+ version: 4.0.4
+ resolution: "form-data@npm:4.0.4"
dependencies:
asynckit: "npm:^0.4.0"
combined-stream: "npm:^1.0.8"
es-set-tostringtag: "npm:^2.1.0"
+ hasown: "npm:^2.0.2"
mime-types: "npm:^2.1.12"
- checksum: 10c0/e534b0cf025c831a0929bf4b9bbe1a9a6b03e273a8161f9947286b9b13bf8fb279c6944aae0070c4c311100c6d6dbb815cd955dc217728caf73fad8dc5b8ee9c
+ checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695
languageName: node
linkType: hard
@@ -6599,13 +6437,6 @@ __metadata:
languageName: node
linkType: hard
-"fresh@npm:0.5.2":
- version: 0.5.2
- resolution: "fresh@npm:0.5.2"
- checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a
- languageName: node
- linkType: hard
-
"fresh@npm:^2.0.0":
version: 2.0.0
resolution: "fresh@npm:2.0.0"
@@ -6636,7 +6467,7 @@ __metadata:
languageName: node
linkType: hard
-"fs-extra@npm:^11.0.0, fs-extra@npm:^11.2.0":
+"fs-extra@npm:^11.2.0, fs-extra@npm:^11.3.0":
version: 11.3.0
resolution: "fs-extra@npm:11.3.0"
dependencies:
@@ -6717,6 +6548,13 @@ __metadata:
languageName: node
linkType: hard
+"function-timeout@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "function-timeout@npm:1.0.2"
+ checksum: 10c0/75d7ac6c83c450b84face2c9d22307b00e10c7376aa3a34c7be260853582c5e4c502904e2f6bf1d4500c4052e748e001388f6bbd9d34ebfdfb6c4fec2169d0ff
+ languageName: node
+ linkType: hard
+
"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8":
version: 1.1.8
resolution: "function.prototype.name@npm:1.1.8"
@@ -6754,24 +6592,13 @@ __metadata:
languageName: node
linkType: hard
-"gen-esm-wrapper@npm:^1.1.3":
- version: 1.1.3
- resolution: "gen-esm-wrapper@npm:1.1.3"
- dependencies:
- is-valid-identifier: "npm:^2.0.2"
- bin:
- gen-esm-wrapper: gen-esm-wrapper.js
- checksum: 10c0/ead755ebc57880d43e6045b85aef972e3620af1e949dd22ea8d3a84d98bff13f6d661316b03a45ee546de440bb4cc19d1453c82dda22b62c699a42a3e88f6b10
- languageName: node
- linkType: hard
-
-"generative-bayesian-network@npm:^2.1.66":
- version: 2.1.66
- resolution: "generative-bayesian-network@npm:2.1.66"
+"generative-bayesian-network@npm:^2.1.69":
+ version: 2.1.69
+ resolution: "generative-bayesian-network@npm:2.1.69"
dependencies:
adm-zip: "npm:^0.5.9"
tslib: "npm:^2.4.0"
- checksum: 10c0/ea8089492fe447aefc595ce5196d91474c8295d4592b4bcda8fedd2209d30ed897122ff1dc9efefcd7046e210f12cf06f2b6ec36e31f64646323ad3336a83b24
+ checksum: 10c0/3dc56637e253e0a57e91924a03a92b8d98525d47aa6136d1e16334c4b32195169d38c3cd227af4f9097758f9e5ce4adb2c36be6d4a7d096168ea33c9af9308ab
languageName: node
linkType: hard
@@ -6854,7 +6681,7 @@ __metadata:
languageName: node
linkType: hard
-"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1":
+"get-stream@npm:^6.0.0":
version: 6.0.1
resolution: "get-stream@npm:6.0.1"
checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341
@@ -6890,22 +6717,22 @@ __metadata:
linkType: hard
"get-tsconfig@npm:^4.7.5":
- version: 4.10.0
- resolution: "get-tsconfig@npm:4.10.0"
+ version: 4.10.1
+ resolution: "get-tsconfig@npm:4.10.1"
dependencies:
resolve-pkg-maps: "npm:^1.0.0"
- checksum: 10c0/c9b5572c5118923c491c04285c73bd55b19e214992af957c502a3be0fc0043bb421386ffd45ca3433c0a7fba81221ca300479e8393960acf15d0ed4563f38a86
+ checksum: 10c0/7f8e3dabc6a49b747920a800fb88e1952fef871cdf51b79e98db48275a5de6cdaf499c55ee67df5fa6fe7ce65f0063e26de0f2e53049b408c585aa74d39ffa21
languageName: node
linkType: hard
"get-uri@npm:^6.0.1":
- version: 6.0.4
- resolution: "get-uri@npm:6.0.4"
+ version: 6.0.5
+ resolution: "get-uri@npm:6.0.5"
dependencies:
basic-ftp: "npm:^5.0.2"
data-uri-to-buffer: "npm:^6.0.2"
debug: "npm:^4.3.4"
- checksum: 10c0/07c87abe1f97a4545fae329a37a45e276ec57e6ad48dad2a97780f87c96b00a82c2043ab49e1a991f99bb5cff8f8ed975e44e4f8b3c9600f35493a97f123499f
+ checksum: 10c0/c7ff5d5d55de53d23ecce7c5108cc3ed0db1174db43c9aa15506d640283d36ee0956fd8ba1fc50b06a718466cc85794ae9d8860193f91318afe846e3e7010f3a
languageName: node
linkType: hard
@@ -7027,18 +6854,18 @@ __metadata:
linkType: hard
"glob@npm:^11.0.0":
- version: 11.0.2
- resolution: "glob@npm:11.0.2"
+ version: 11.0.3
+ resolution: "glob@npm:11.0.3"
dependencies:
- foreground-child: "npm:^3.1.0"
- jackspeak: "npm:^4.0.1"
- minimatch: "npm:^10.0.0"
+ foreground-child: "npm:^3.3.1"
+ jackspeak: "npm:^4.1.1"
+ minimatch: "npm:^10.0.3"
minipass: "npm:^7.1.2"
package-json-from-dist: "npm:^1.0.0"
path-scurry: "npm:^2.0.0"
bin:
glob: dist/esm/bin.mjs
- checksum: 10c0/49f91c64ca882d5e3a72397bd45a146ca91fd3ca53dafb5254daf6c0e83fc510d39ea66f136f9ac7ca075cdd11fbe9aaa235b28f743bd477622e472f4fdc0240
+ checksum: 10c0/7d24457549ec2903920dfa3d8e76850e7c02aa709122f0164b240c712f5455c0b457e6f2a1eee39344c6148e39895be8094ae8cfef7ccc3296ed30bce250c661
languageName: node
linkType: hard
@@ -7091,10 +6918,10 @@ __metadata:
languageName: node
linkType: hard
-"globals@npm:^16.0.0":
- version: 16.0.0
- resolution: "globals@npm:16.0.0"
- checksum: 10c0/8906d5f01838df64a81d6c2a7b7214312e2216cf65c5ed1546dc9a7d0febddf55ffa906cf04efd5b01eec2534d6f14859a89535d1a68241832810e41ef3fd5bb
+"globals@npm:^16.1.0":
+ version: 16.3.0
+ resolution: "globals@npm:16.3.0"
+ checksum: 10c0/c62dc20357d1c0bf2be4545d6c4141265d1a229bf1c3294955efb5b5ef611145391895e3f2729f8603809e81b30b516c33e6c2597573844449978606aad6eb38
languageName: node
linkType: hard
@@ -7108,21 +6935,7 @@ __metadata:
languageName: node
linkType: hard
-"globby@npm:11.1.0":
- version: 11.1.0
- resolution: "globby@npm:11.1.0"
- dependencies:
- array-union: "npm:^2.1.0"
- dir-glob: "npm:^3.0.1"
- fast-glob: "npm:^3.2.9"
- ignore: "npm:^5.2.0"
- merge2: "npm:^1.4.1"
- slash: "npm:^3.0.0"
- checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189
- languageName: node
- linkType: hard
-
-"globby@npm:^14.0.0":
+"globby@npm:^14.1.0":
version: 14.1.0
resolution: "globby@npm:14.1.0"
dependencies:
@@ -7150,9 +6963,9 @@ __metadata:
languageName: node
linkType: hard
-"got-scraping@npm:^4.0.0, got-scraping@npm:^4.0.3":
- version: 4.1.1
- resolution: "got-scraping@npm:4.1.1"
+"got-scraping@npm:^4.1.1":
+ version: 4.1.2
+ resolution: "got-scraping@npm:4.1.2"
dependencies:
got: "npm:^14.2.1"
header-generator: "npm:^2.1.41"
@@ -7161,30 +6974,11 @@ __metadata:
ow: "npm:^1.1.1"
quick-lru: "npm:^7.0.0"
tslib: "npm:^2.6.2"
- checksum: 10c0/66b9bd88fea1c7a1248fec6e9c9757300b70e6039d2b2e0cf1c70e44e88be80f02a26e2e36d5f9c3acb4ec963558d72b0d236a7f11a7a6c87b39b5615afcf7db
- languageName: node
- linkType: hard
-
-"got@npm:^13.0.0":
- version: 13.0.0
- resolution: "got@npm:13.0.0"
- dependencies:
- "@sindresorhus/is": "npm:^5.2.0"
- "@szmarczak/http-timer": "npm:^5.0.1"
- cacheable-lookup: "npm:^7.0.0"
- cacheable-request: "npm:^10.2.8"
- decompress-response: "npm:^6.0.0"
- form-data-encoder: "npm:^2.1.2"
- get-stream: "npm:^6.0.1"
- http2-wrapper: "npm:^2.1.10"
- lowercase-keys: "npm:^3.0.0"
- p-cancelable: "npm:^3.0.0"
- responselike: "npm:^3.0.0"
- checksum: 10c0/d6a4648dc46f1f9df2637b8730d4e664349a93cb6df62c66dfbb48f7887ba79742a1cc90739a4eb1c15f790ca838ff641c5cdecdc877993627274aeb0f02b92d
+ checksum: 10c0/7667637ad9ad3c8506522b4721456e61392e51230f3d7c988a0ef58b223d806869adc1adc61e7b8299f533b154f26343f6960f8ade7ce944336ecb4b5f3b7057
languageName: node
linkType: hard
-"got@npm:^14.2.1":
+"got@npm:^14.2.1, got@npm:^14.4.7":
version: 14.4.7
resolution: "got@npm:14.4.7"
dependencies:
@@ -7242,15 +7036,6 @@ __metadata:
languageName: node
linkType: hard
-"has-ansi@npm:^2.0.0":
- version: 2.0.0
- resolution: "has-ansi@npm:2.0.0"
- dependencies:
- ansi-regex: "npm:^2.0.0"
- checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05
- languageName: node
- linkType: hard
-
"has-bigints@npm:^1.0.2":
version: 1.1.0
resolution: "has-bigints@npm:1.1.0"
@@ -7322,15 +7107,15 @@ __metadata:
languageName: node
linkType: hard
-"header-generator@npm:^2.1.41, header-generator@npm:^2.1.66":
- version: 2.1.66
- resolution: "header-generator@npm:2.1.66"
+"header-generator@npm:^2.1.41, header-generator@npm:^2.1.69":
+ version: 2.1.69
+ resolution: "header-generator@npm:2.1.69"
dependencies:
browserslist: "npm:^4.21.1"
- generative-bayesian-network: "npm:^2.1.66"
+ generative-bayesian-network: "npm:^2.1.69"
ow: "npm:^0.28.1"
tslib: "npm:^2.4.0"
- checksum: 10c0/86354e65a047b6519b204adc2a4193dff6bb0782ca2c9d69f1c0320319cbd1a46d3eff31e4a32fe9b3dc0e7910351af5ca8ee2d50baade97b6e7dffd813145be
+ checksum: 10c0/0a3f12c7cee265fdcd3e575df3d514b8b94d82ecfa49ff70d1ead31d171191245751c7d6479e39a10c535f4e4451bb1267dd37431e49f79594ef1423cc4f99fb
languageName: node
linkType: hard
@@ -7394,34 +7179,10 @@ __metadata:
languageName: node
linkType: hard
-"htmlparser2@npm:^8.0.1":
- version: 8.0.2
- resolution: "htmlparser2@npm:8.0.2"
- dependencies:
- domelementtype: "npm:^2.3.0"
- domhandler: "npm:^5.0.3"
- domutils: "npm:^3.0.1"
- entities: "npm:^4.4.0"
- checksum: 10c0/609cca85886d0bf2c9a5db8c6926a89f3764596877492e2caa7a25a789af4065bc6ee2cdc81807fe6b1d03a87bf8a373b5a754528a4cc05146b713c20575aab4
- languageName: node
- linkType: hard
-
-"htmlparser2@npm:^9.0.0":
- version: 9.1.0
- resolution: "htmlparser2@npm:9.1.0"
- dependencies:
- domelementtype: "npm:^2.3.0"
- domhandler: "npm:^5.0.3"
- domutils: "npm:^3.1.0"
- entities: "npm:^4.5.0"
- checksum: 10c0/394f6323efc265bbc791d8c0d96bfe95984e0407565248521ab92e2dc7668e5ceeca7bc6ed18d408b9ee3b25032c5743368a4280d280332d782821d5d467ad8f
- languageName: node
- linkType: hard
-
"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1":
- version: 4.1.1
- resolution: "http-cache-semantics@npm:4.1.1"
- checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc
+ version: 4.2.0
+ resolution: "http-cache-semantics@npm:4.2.0"
+ checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37
languageName: node
linkType: hard
@@ -7459,7 +7220,7 @@ __metadata:
languageName: node
linkType: hard
-"http2-wrapper@npm:^2.1.10, http2-wrapper@npm:^2.2.0, http2-wrapper@npm:^2.2.1":
+"http2-wrapper@npm:^2.2.0, http2-wrapper@npm:^2.2.1":
version: 2.2.1
resolution: "http2-wrapper@npm:2.2.1"
dependencies:
@@ -7512,7 +7273,7 @@ __metadata:
languageName: node
linkType: hard
-"husky@npm:^9.0.11":
+"husky@npm:^9.1.7":
version: 9.1.7
resolution: "husky@npm:9.1.7"
bin:
@@ -7521,15 +7282,6 @@ __metadata:
languageName: node
linkType: hard
-"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24":
- version: 0.4.24
- resolution: "iconv-lite@npm:0.4.24"
- dependencies:
- safer-buffer: "npm:>= 2.1.2 < 3"
- checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4
- languageName: node
- linkType: hard
-
"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3":
version: 0.6.3
resolution: "iconv-lite@npm:0.6.3"
@@ -7539,13 +7291,31 @@ __metadata:
languageName: node
linkType: hard
-"idcac-playwright@npm:^0.1.2":
+"iconv-lite@npm:^0.4.24":
+ version: 0.4.24
+ resolution: "iconv-lite@npm:0.4.24"
+ dependencies:
+ safer-buffer: "npm:>= 2.1.2 < 3"
+ checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4
+ languageName: node
+ linkType: hard
+
+"idcac-playwright@npm:^0.1.3":
version: 0.1.3
resolution: "idcac-playwright@npm:0.1.3"
checksum: 10c0/2b269960b6cfb9cc5222d9be0f05268486b61725299c140f529b83643adffb66c09ed3917d3f2e4cb2fc2b5af047235cda5042b273ed684f55c285b597627dd5
languageName: node
linkType: hard
+"identifier-regex@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "identifier-regex@npm:1.0.0"
+ dependencies:
+ reserved-identifiers: "npm:^1.0.0"
+ checksum: 10c0/f6d798ff916318731af7b62814667816aee1db5dae286a9f86c9163b59f45624b24c7296c925808bc75467af8f3fd13e8a2997232916b14c2a1fe5741409dc6c
+ languageName: node
+ linkType: hard
+
"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1":
version: 1.2.1
resolution: "ieee754@npm:1.2.1"
@@ -7562,157 +7332,88 @@ __metadata:
languageName: node
linkType: hard
-"ignore@npm:^5.0.4, ignore@npm:^5.2.0, ignore@npm:^5.3.1":
+"ignore@npm:^5.0.4, ignore@npm:^5.2.0":
version: 5.3.2
resolution: "ignore@npm:5.3.2"
checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337
languageName: node
linkType: hard
-"ignore@npm:^7.0.3":
- version: 7.0.4
- resolution: "ignore@npm:7.0.4"
- checksum: 10c0/90e1f69ce352b9555caecd9cbfd07abe7626d312a6f90efbbb52c7edca6ea8df065d66303863b30154ab1502afb2da8bc59d5b04e1719a52ef75bbf675c488eb
- languageName: node
- linkType: hard
-
-"impit-darwin-arm64@npm:0.2.5":
- version: 0.2.5
- resolution: "impit-darwin-arm64@npm:0.2.5"
- conditions: os=darwin & cpu=arm64
+"ignore@npm:^7.0.0, ignore@npm:^7.0.3":
+ version: 7.0.5
+ resolution: "ignore@npm:7.0.5"
+ checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d
languageName: node
linkType: hard
-"impit-darwin-arm64@npm:0.4.3":
- version: 0.4.3
- resolution: "impit-darwin-arm64@npm:0.4.3"
+"impit-darwin-arm64@npm:0.4.7":
+ version: 0.4.7
+ resolution: "impit-darwin-arm64@npm:0.4.7"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"impit-darwin-x64@npm:0.2.5":
- version: 0.2.5
- resolution: "impit-darwin-x64@npm:0.2.5"
- conditions: os=darwin & cpu=x64
- languageName: node
- linkType: hard
-
-"impit-darwin-x64@npm:0.4.3":
- version: 0.4.3
- resolution: "impit-darwin-x64@npm:0.4.3"
+"impit-darwin-x64@npm:0.4.7":
+ version: 0.4.7
+ resolution: "impit-darwin-x64@npm:0.4.7"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"impit-linux-arm64-gnu@npm:0.4.3":
- version: 0.4.3
- resolution: "impit-linux-arm64-gnu@npm:0.4.3"
+"impit-linux-arm64-gnu@npm:0.4.7":
+ version: 0.4.7
+ resolution: "impit-linux-arm64-gnu@npm:0.4.7"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"impit-linux-arm64-musl@npm:0.4.3":
- version: 0.4.3
- resolution: "impit-linux-arm64-musl@npm:0.4.3"
+"impit-linux-arm64-musl@npm:0.4.7":
+ version: 0.4.7
+ resolution: "impit-linux-arm64-musl@npm:0.4.7"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"impit-linux-x64-gnu@npm:0.2.5":
- version: 0.2.5
- resolution: "impit-linux-x64-gnu@npm:0.2.5"
- conditions: os=linux & cpu=x64 & libc=glibc
- languageName: node
- linkType: hard
-
-"impit-linux-x64-gnu@npm:0.4.3":
- version: 0.4.3
- resolution: "impit-linux-x64-gnu@npm:0.4.3"
+"impit-linux-x64-gnu@npm:0.4.7":
+ version: 0.4.7
+ resolution: "impit-linux-x64-gnu@npm:0.4.7"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"impit-linux-x64-musl@npm:0.2.5":
- version: 0.2.5
- resolution: "impit-linux-x64-musl@npm:0.2.5"
- conditions: os=linux & cpu=x64 & libc=musl
- languageName: node
- linkType: hard
-
-"impit-linux-x64-musl@npm:0.4.3":
- version: 0.4.3
- resolution: "impit-linux-x64-musl@npm:0.4.3"
+"impit-linux-x64-musl@npm:0.4.7":
+ version: 0.4.7
+ resolution: "impit-linux-x64-musl@npm:0.4.7"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"impit-win32-arm64-msvc@npm:0.2.5":
- version: 0.2.5
- resolution: "impit-win32-arm64-msvc@npm:0.2.5"
+"impit-win32-arm64-msvc@npm:0.4.7":
+ version: 0.4.7
+ resolution: "impit-win32-arm64-msvc@npm:0.4.7"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"impit-win32-arm64-msvc@npm:0.4.3":
- version: 0.4.3
- resolution: "impit-win32-arm64-msvc@npm:0.4.3"
- conditions: os=win32 & cpu=arm64
- languageName: node
- linkType: hard
-
-"impit-win32-x64-msvc@npm:0.2.5":
- version: 0.2.5
- resolution: "impit-win32-x64-msvc@npm:0.2.5"
- conditions: os=win32 & cpu=x64
- languageName: node
- linkType: hard
-
-"impit-win32-x64-msvc@npm:0.4.3":
- version: 0.4.3
- resolution: "impit-win32-x64-msvc@npm:0.4.3"
+"impit-win32-x64-msvc@npm:0.4.7":
+ version: 0.4.7
+ resolution: "impit-win32-x64-msvc@npm:0.4.7"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
-"impit@npm:^0.2.1":
- version: 0.2.5
- resolution: "impit@npm:0.2.5"
+"impit@npm:^0.4.5, impit@npm:^0.4.6":
+ version: 0.4.7
+ resolution: "impit@npm:0.4.7"
dependencies:
- impit-darwin-arm64: "npm:0.2.5"
- impit-darwin-x64: "npm:0.2.5"
- impit-linux-x64-gnu: "npm:0.2.5"
- impit-linux-x64-musl: "npm:0.2.5"
- impit-win32-arm64-msvc: "npm:0.2.5"
- impit-win32-x64-msvc: "npm:0.2.5"
- dependenciesMeta:
- impit-darwin-arm64:
- optional: true
- impit-darwin-x64:
- optional: true
- impit-linux-x64-gnu:
- optional: true
- impit-linux-x64-musl:
- optional: true
- impit-win32-arm64-msvc:
- optional: true
- impit-win32-x64-msvc:
- optional: true
- checksum: 10c0/01bb579d9b8187d9cf7cadde622d52b157c917f32b387bd99497ab80d6dd30ab2686fe4d9c5de8a2c451663c2af3b69c995a2795e15e01f1ef57e0b2c64e5f85
- languageName: node
- linkType: hard
-
-"impit@npm:^0.4.3":
- version: 0.4.3
- resolution: "impit@npm:0.4.3"
- dependencies:
- impit-darwin-arm64: "npm:0.4.3"
- impit-darwin-x64: "npm:0.4.3"
- impit-linux-arm64-gnu: "npm:0.4.3"
- impit-linux-arm64-musl: "npm:0.4.3"
- impit-linux-x64-gnu: "npm:0.4.3"
- impit-linux-x64-musl: "npm:0.4.3"
- impit-win32-arm64-msvc: "npm:0.4.3"
- impit-win32-x64-msvc: "npm:0.4.3"
+ impit-darwin-arm64: "npm:0.4.7"
+ impit-darwin-x64: "npm:0.4.7"
+ impit-linux-arm64-gnu: "npm:0.4.7"
+ impit-linux-arm64-musl: "npm:0.4.7"
+ impit-linux-x64-gnu: "npm:0.4.7"
+ impit-linux-x64-musl: "npm:0.4.7"
+ impit-win32-arm64-msvc: "npm:0.4.7"
+ impit-win32-x64-msvc: "npm:0.4.7"
dependenciesMeta:
impit-darwin-arm64:
optional: true
@@ -7730,7 +7431,7 @@ __metadata:
optional: true
impit-win32-x64-msvc:
optional: true
- checksum: 10c0/59b37420493e68fbb14cf3f022ba8c6aa26a44ffd2e87da62a0387a9aa6eaf78314d06856f632f8302d7bfcccdb58c4db1f0a482f2d8bd50194f218f4a62426f
+ checksum: 10c0/d0037f55f6b6d577fb0f2d4474a8b892e48216e9bc5a32bbe9925bc985c32d3074919e6c041266b66b94248dd50ea62b8b2aa96f9b5ab9689b9164ae0fcabff8
languageName: node
linkType: hard
@@ -7756,7 +7457,7 @@ __metadata:
languageName: node
linkType: hard
-"import-local@npm:^3.1.0":
+"import-local@npm:^3.2.0":
version: 3.2.0
resolution: "import-local@npm:3.2.0"
dependencies:
@@ -7813,13 +7514,6 @@ __metadata:
languageName: node
linkType: hard
-"inherits@npm:2.0.3":
- version: 2.0.3
- resolution: "inherits@npm:2.0.3"
- checksum: 10c0/6e56402373149ea076a434072671f9982f5fad030c7662be0332122fe6c0fa490acb3cc1010d90b6eff8d640b1167d77674add52dfd1bb85d545cf29e80e73e7
- languageName: node
- linkType: hard
-
"ini@npm:4.1.1":
version: 4.1.1
resolution: "ini@npm:4.1.1"
@@ -7879,26 +7573,6 @@ __metadata:
languageName: node
linkType: hard
-"inquirer@npm:^9.0.0":
- version: 9.3.7
- resolution: "inquirer@npm:9.3.7"
- dependencies:
- "@inquirer/figures": "npm:^1.0.3"
- ansi-escapes: "npm:^4.3.2"
- cli-width: "npm:^4.1.0"
- external-editor: "npm:^3.1.0"
- mute-stream: "npm:1.0.0"
- ora: "npm:^5.4.1"
- run-async: "npm:^3.0.0"
- rxjs: "npm:^7.8.1"
- string-width: "npm:^4.2.3"
- strip-ansi: "npm:^6.0.1"
- wrap-ansi: "npm:^6.2.0"
- yoctocolors-cjs: "npm:^2.1.2"
- checksum: 10c0/7a5b70312a734b579846648365cbf354e8b23ec73f379d46ada30bc2cf3961dc33b7ca59a3c2beed8a8e03744e3d6c12d4998a34b2d3904774aed238d77328b4
- languageName: node
- linkType: hard
-
"internal-slot@npm:^1.1.0":
version: 1.1.0
resolution: "internal-slot@npm:1.1.0"
@@ -8012,7 +7686,7 @@ __metadata:
languageName: node
linkType: hard
-"is-ci@npm:^4.0.0":
+"is-ci@npm:^4.1.0":
version: 4.1.0
resolution: "is-ci@npm:4.1.0"
dependencies:
@@ -8023,7 +7697,7 @@ __metadata:
languageName: node
linkType: hard
-"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1, is-core-module@npm:^2.5.0":
+"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1, is-core-module@npm:^2.5.0":
version: 2.16.1
resolution: "is-core-module@npm:2.16.1"
dependencies:
@@ -8117,8 +7791,18 @@ __metadata:
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
dependencies:
- is-extglob: "npm:^2.1.1"
- checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a
+ is-extglob: "npm:^2.1.1"
+ checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a
+ languageName: node
+ linkType: hard
+
+"is-identifier@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "is-identifier@npm:1.0.1"
+ dependencies:
+ identifier-regex: "npm:^1.0.0"
+ super-regex: "npm:^1.0.0"
+ checksum: 10c0/8b01745a58a2c4394eee6349668e7873aea16a1c50c823c4c5178a4215775eb60472938f967231f851ea29c21ea3b670be22dea5de06d4708676fd59a989dc71
languageName: node
linkType: hard
@@ -8143,6 +7827,13 @@ __metadata:
languageName: node
linkType: hard
+"is-negative-zero@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "is-negative-zero@npm:2.0.3"
+ checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e
+ languageName: node
+ linkType: hard
+
"is-number-object@npm:^1.1.1":
version: 1.1.1
resolution: "is-number-object@npm:1.1.1"
@@ -8324,15 +8015,6 @@ __metadata:
languageName: node
linkType: hard
-"is-valid-identifier@npm:^2.0.2":
- version: 2.0.2
- resolution: "is-valid-identifier@npm:2.0.2"
- dependencies:
- assert: "npm:^1.4.1"
- checksum: 10c0/0ca140b8cb261471280377cd292a4adb780cb231bcb2e5e9cd992792c021715333f1e7ed6f4dfd6c6f8e005eb0eda6e6ca364b56c95a59f7dd4805c880f1225a
- languageName: node
- linkType: hard
-
"is-weakmap@npm:^2.0.2":
version: 2.0.2
resolution: "is-weakmap@npm:2.0.2"
@@ -8340,7 +8022,7 @@ __metadata:
languageName: node
linkType: hard
-"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0":
+"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1":
version: 1.1.1
resolution: "is-weakref@npm:1.1.1"
dependencies:
@@ -8455,12 +8137,12 @@ __metadata:
languageName: node
linkType: hard
-"jackspeak@npm:^4.0.1":
- version: 4.1.0
- resolution: "jackspeak@npm:4.1.0"
+"jackspeak@npm:^4.1.1":
+ version: 4.1.1
+ resolution: "jackspeak@npm:4.1.1"
dependencies:
"@isaacs/cliui": "npm:^8.0.2"
- checksum: 10c0/08a6a24a366c90b83aef3ad6ec41dcaaa65428ffab8d80bc7172add0fbb8b134a34f415ad288b2a6fbd406526e9a62abdb40ed4f399fbe00cb45c44056d4dce0
+ checksum: 10c0/84ec4f8e21d6514db24737d9caf65361511f75e5e424980eebca4199f400874f45e562ac20fa8aeb1dd20ca2f3f81f0788b6e9c3e64d216a5794fd6f30e0e042
languageName: node
linkType: hard
@@ -8506,7 +8188,7 @@ __metadata:
languageName: node
linkType: hard
-"jquery@npm:^3.6.0":
+"jquery@npm:^3.7.1":
version: 3.7.1
resolution: "jquery@npm:3.7.1"
checksum: 10c0/808cfbfb758438560224bf26e17fcd5afc7419170230c810dd11f5c1792e2263e2970cca8d659eb84fcd9acc301edb6d310096e450277d54be4f57071b0c82d9
@@ -8520,6 +8202,13 @@ __metadata:
languageName: node
linkType: hard
+"js-tokens@npm:^9.0.1":
+ version: 9.0.1
+ resolution: "js-tokens@npm:9.0.1"
+ checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e
+ languageName: node
+ linkType: hard
+
"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0":
version: 4.1.0
resolution: "js-yaml@npm:4.1.0"
@@ -8550,7 +8239,7 @@ __metadata:
languageName: node
linkType: hard
-"jsdom@npm:^26.0.0":
+"jsdom@npm:^26.1.0":
version: 26.1.0
resolution: "jsdom@npm:26.1.0"
dependencies:
@@ -8707,7 +8396,7 @@ __metadata:
languageName: node
linkType: hard
-"keyv@npm:^4.5.3, keyv@npm:^4.5.4":
+"keyv@npm:^4.5.4":
version: 4.5.4
resolution: "keyv@npm:4.5.4"
dependencies:
@@ -8731,19 +8420,19 @@ __metadata:
linkType: hard
"language-tags@npm:^2.0.1":
- version: 2.0.1
- resolution: "language-tags@npm:2.0.1"
+ version: 2.1.0
+ resolution: "language-tags@npm:2.1.0"
dependencies:
language-subtag-registry: "npm:^0.3.20"
- checksum: 10c0/866ba16518fdce960859f44540ff8571a936dc57967bb6e9390c0bedcc0fbe76a13016f6d59342c3075f903da6c85004ace4a826d0a9460724647b8e335c48d7
+ checksum: 10c0/53338a54658a12d88c63f1b9194ee935098cebef07b2b8cdedaaef7fd0145055959bcfb7e2c5ebbebe78d2011b5e394b113c4b9fb2de51f36a4a19f54565862f
languageName: node
linkType: hard
-"lerna@npm:^8.0.0":
- version: 8.2.2
- resolution: "lerna@npm:8.2.2"
+"lerna@npm:^8.2.2":
+ version: 8.2.3
+ resolution: "lerna@npm:8.2.3"
dependencies:
- "@lerna/create": "npm:8.2.2"
+ "@lerna/create": "npm:8.2.3"
"@npmcli/arborist": "npm:7.5.4"
"@npmcli/package-json": "npm:5.2.0"
"@npmcli/run-script": "npm:8.1.0"
@@ -8770,7 +8459,6 @@ __metadata:
get-stream: "npm:6.0.0"
git-url-parse: "npm:14.0.0"
glob-parent: "npm:6.0.2"
- globby: "npm:11.1.0"
graceful-fs: "npm:4.2.11"
has-unicode: "npm:2.0.1"
import-local: "npm:3.1.0"
@@ -8810,9 +8498,10 @@ __metadata:
slash: "npm:3.0.0"
ssri: "npm:^10.0.6"
string-width: "npm:^4.2.3"
- strong-log-transformer: "npm:2.1.0"
tar: "npm:6.2.1"
temp-dir: "npm:1.0.0"
+ through: "npm:2.3.8"
+ tinyglobby: "npm:0.2.12"
typescript: "npm:>=3 < 6"
upath: "npm:2.0.1"
uuid: "npm:^10.0.0"
@@ -8825,7 +8514,7 @@ __metadata:
yargs-parser: "npm:21.1.1"
bin:
lerna: dist/cli.js
- checksum: 10c0/e08ccf93ffb1860baa4fedcf63b13c4be49bf1932c13609f1e06273b541bdabdcf86f01dcc247d63abbd02918beda90c6aa0c61b39b0de6fa50fcb9064d2a3a7
+ checksum: 10c0/618d2adb5504227ca0b4dbeca920fbc188a907e71df39ace105af3696393c3aefb75cf7a98899ec728b15ea9e92aca29cdfc21d479d23163e2fd812281fd10a1
languageName: node
linkType: hard
@@ -8893,22 +8582,22 @@ __metadata:
languageName: node
linkType: hard
-"linkedom@npm:^0.18.0":
- version: 0.18.10
- resolution: "linkedom@npm:0.18.10"
+"linkedom@npm:^0.18.10":
+ version: 0.18.11
+ resolution: "linkedom@npm:0.18.11"
dependencies:
css-select: "npm:^5.1.0"
cssom: "npm:^0.5.0"
html-escaper: "npm:^3.0.3"
htmlparser2: "npm:^10.0.0"
uhyphen: "npm:^0.2.0"
- checksum: 10c0/cbc60aa9db83e2a34e5af9934b736cd5fe6aba84b65ac72fbaddbaa22ad13d8f5000939495199a13fc2869f6bc03efa33c9e589d5626521be94be73373a37f53
+ checksum: 10c0/20bd02f77bd35609185c578d5e14c4f6754894dfec17d5d1df2756c18314e4250cebc6521f9bdf437c4e94b61b5f7c2fa52af98f805c6b0ec459ec05d7f70756
languageName: node
linkType: hard
-"lint-staged@npm:^15.0.0":
- version: 15.5.1
- resolution: "lint-staged@npm:15.5.1"
+"lint-staged@npm:^15.5.2":
+ version: 15.5.2
+ resolution: "lint-staged@npm:15.5.2"
dependencies:
chalk: "npm:^5.4.1"
commander: "npm:^13.1.0"
@@ -8922,13 +8611,13 @@ __metadata:
yaml: "npm:^2.7.0"
bin:
lint-staged: bin/lint-staged.js
- checksum: 10c0/86deddb08bf10428f2eb96c02326a9ee403360729225f0b12afb0c0f13c287a75daa01e179d86f64e3432576446d8643d204a47417296f9ef0aa56f1340ff2af
+ checksum: 10c0/618386254600ada3af3672486a9d082250108245e7c0863d9dfe0a21e7764e3b2eb6416b0f8970e548f4e9d368637331598b27df5a1306925feabbaf16a667e1
languageName: node
linkType: hard
"listr2@npm:^8.2.5":
- version: 8.3.2
- resolution: "listr2@npm:8.3.2"
+ version: 8.3.3
+ resolution: "listr2@npm:8.3.3"
dependencies:
cli-truncate: "npm:^4.0.0"
colorette: "npm:^2.0.20"
@@ -8936,7 +8625,7 @@ __metadata:
log-update: "npm:^6.1.0"
rfdc: "npm:^1.4.1"
wrap-ansi: "npm:^9.0.0"
- checksum: 10c0/6b6378e28debda863d31f03ffe880a76b45c07388c74e8e0676fc957de7f2aff24fdea7f48b17d12808440f64680215c36df388c79d2b367c7866dd66f75fb09
+ checksum: 10c0/0792f8a7fd482fa516e21689e012e07081cab3653172ca606090622cfa0024c784a1eba8095a17948a0e9a4aa98a80f7c9c90f78a0dd35173d6802f9cc123a82
languageName: node
linkType: hard
@@ -9108,10 +8797,10 @@ __metadata:
languageName: node
linkType: hard
-"loupe@npm:^3.1.0, loupe@npm:^3.1.3":
- version: 3.1.3
- resolution: "loupe@npm:3.1.3"
- checksum: 10c0/f5dab4144254677de83a35285be1b8aba58b3861439ce4ba65875d0d5f3445a4a496daef63100ccf02b2dbc25bf58c6db84c9cb0b96d6435331e9d0a33b48541
+"loupe@npm:^3.1.0, loupe@npm:^3.1.4":
+ version: 3.1.4
+ resolution: "loupe@npm:3.1.4"
+ checksum: 10c0/5c2e6aefaad25f812d361c750b8cf4ff91d68de289f141d7c85c2ce9bb79eeefa06a93c85f7b87cba940531ed8f15e492f32681d47eed23842ad1963eb3a154d
languageName: node
linkType: hard
@@ -9283,19 +8972,12 @@ __metadata:
linkType: hard
"maxmind@npm:^4.3.24":
- version: 4.3.25
- resolution: "maxmind@npm:4.3.25"
+ version: 4.3.28
+ resolution: "maxmind@npm:4.3.28"
dependencies:
- mmdb-lib: "npm:2.2.0"
- tiny-lru: "npm:11.2.11"
- checksum: 10c0/5d2bc4fdb0c4c902044536f30fead72f6441bffb43074f2eebdfddaca73cc7716477a8866d595bb790a45e8a387571762fc460f88aa6e4c18b0a67468d2cde5d
- languageName: node
- linkType: hard
-
-"media-typer@npm:0.3.0":
- version: 0.3.0
- resolution: "media-typer@npm:0.3.0"
- checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928
+ mmdb-lib: "npm:2.2.1"
+ tiny-lru: "npm:11.3.3"
+ checksum: 10c0/078d04036785ce1ecbfb4ecbf3be3cd6479410efc79372252cc046e4724c49fba6898ece4da568202fb8e399469c1e874784417a37e1f06fafadf86a979333b0
languageName: node
linkType: hard
@@ -9332,13 +9014,6 @@ __metadata:
languageName: node
linkType: hard
-"merge-descriptors@npm:1.0.3":
- version: 1.0.3
- resolution: "merge-descriptors@npm:1.0.3"
- checksum: 10c0/866b7094afd9293b5ea5dcd82d71f80e51514bed33b4c4e9f516795dc366612a4cbb4dc94356e943a8a6914889a914530badff27f397191b9b75cda20b6bae93
- languageName: node
- linkType: hard
-
"merge-descriptors@npm:^2.0.0":
version: 2.0.0
resolution: "merge-descriptors@npm:2.0.0"
@@ -9353,20 +9028,13 @@ __metadata:
languageName: node
linkType: hard
-"merge2@npm:^1.3.0, merge2@npm:^1.4.1":
+"merge2@npm:^1.3.0":
version: 1.4.1
resolution: "merge2@npm:1.4.1"
checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb
languageName: node
linkType: hard
-"methods@npm:~1.1.2":
- version: 1.1.2
- resolution: "methods@npm:1.1.2"
- checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2
- languageName: node
- linkType: hard
-
"micromatch@npm:^4.0.8":
version: 4.0.8
resolution: "micromatch@npm:4.0.8"
@@ -9391,7 +9059,7 @@ __metadata:
languageName: node
linkType: hard
-"mime-types@npm:^2.1.12, mime-types@npm:^2.1.35, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
+"mime-types@npm:^2.1.12":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
dependencies:
@@ -9409,15 +9077,6 @@ __metadata:
languageName: node
linkType: hard
-"mime@npm:1.6.0":
- version: 1.6.0
- resolution: "mime@npm:1.6.0"
- bin:
- mime: cli.js
- checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0
- languageName: node
- linkType: hard
-
"mimic-fn@npm:^2.1.0":
version: 2.1.0
resolution: "mimic-fn@npm:2.1.0"
@@ -9478,12 +9137,12 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^10.0.0":
- version: 10.0.1
- resolution: "minimatch@npm:10.0.1"
+"minimatch@npm:^10.0.1, minimatch@npm:^10.0.3":
+ version: 10.0.3
+ resolution: "minimatch@npm:10.0.3"
dependencies:
- brace-expansion: "npm:^2.0.1"
- checksum: 10c0/e6c29a81fe83e1877ad51348306be2e8aeca18c88fdee7a99df44322314279e15799e41d7cb274e4e8bb0b451a3bc622d6182e157dfa1717d6cda75e9cd8cd5d
+ "@isaacs/brace-expansion": "npm:^5.0.0"
+ checksum: 10c0/e43e4a905c5d70ac4cec8530ceaeccb9c544b1ba8ac45238e2a78121a01c17ff0c373346472d221872563204eabe929ad02669bb575cb1f0cc30facab369f70f
languageName: node
linkType: hard
@@ -9750,7 +9409,7 @@ __metadata:
languageName: node
linkType: hard
-"ml-matrix@npm:^6.11.0, ml-matrix@npm:^6.5.0":
+"ml-matrix@npm:^6.12.1, ml-matrix@npm:^6.5.0":
version: 6.12.1
resolution: "ml-matrix@npm:6.12.1"
dependencies:
@@ -9760,10 +9419,10 @@ __metadata:
languageName: node
linkType: hard
-"mmdb-lib@npm:2.2.0":
- version: 2.2.0
- resolution: "mmdb-lib@npm:2.2.0"
- checksum: 10c0/7d6de9fae25efd81d5b067d415f969a53a7dd26f83fbc196a8bfe7320e7bfe2e9f7fd5d8fb3ee4ed79f41a454e0923bafd31320257f68fc15d3193b75b689d0e
+"mmdb-lib@npm:2.2.1":
+ version: 2.2.1
+ resolution: "mmdb-lib@npm:2.2.1"
+ checksum: 10c0/125404d98f10c683ff10ffe6aa9455a13dc323a4c3f43ae0f414d542e8cec3fd9077333689b2f33ac5464629c53c72ba642075b3c184bed358d67dfe83aeb164
languageName: node
linkType: hard
@@ -9788,7 +9447,7 @@ __metadata:
languageName: node
linkType: hard
-"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3":
+"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3":
version: 2.1.3
resolution: "ms@npm:2.1.3"
checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48
@@ -9815,14 +9474,21 @@ __metadata:
languageName: node
linkType: hard
-"mute-stream@npm:1.0.0, mute-stream@npm:^1.0.0":
+"mute-stream@npm:^1.0.0":
version: 1.0.0
resolution: "mute-stream@npm:1.0.0"
checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c
languageName: node
linkType: hard
-"nanoid@npm:^3.3.4, nanoid@npm:^3.3.8":
+"mute-stream@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "mute-stream@npm:2.0.0"
+ checksum: 10c0/2cf48a2087175c60c8dcdbc619908b49c07f7adcfc37d29236b0c5c612d6204f789104c98cc44d38acab7b3c96f4a3ec2cfdc4934d0738d876dbefa2a12c69f4
+ languageName: node
+ linkType: hard
+
+"nanoid@npm:^3.3.11":
version: 3.3.11
resolution: "nanoid@npm:3.3.11"
bin:
@@ -9831,6 +9497,15 @@ __metadata:
languageName: node
linkType: hard
+"nanoid@npm:^5.1.5":
+ version: 5.1.5
+ resolution: "nanoid@npm:5.1.5"
+ bin:
+ nanoid: bin/nanoid.js
+ checksum: 10c0/e6004f1ad6c7123eeb037062c4441d44982037dc043aabb162457ef6986e99964ba98c63c975f96c547403beb0bf95bc537bd7bf9a09baf381656acdc2975c3c
+ languageName: node
+ linkType: hard
+
"napi-build-utils@npm:^2.0.0":
version: 2.0.0
resolution: "napi-build-utils@npm:2.0.0"
@@ -9845,13 +9520,6 @@ __metadata:
languageName: node
linkType: hard
-"negotiator@npm:0.6.3":
- version: 0.6.3
- resolution: "negotiator@npm:0.6.3"
- checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2
- languageName: node
- linkType: hard
-
"negotiator@npm:^0.6.2, negotiator@npm:^0.6.3":
version: 0.6.4
resolution: "negotiator@npm:0.6.4"
@@ -9880,7 +9548,7 @@ __metadata:
languageName: node
linkType: hard
-"nock@npm:^13.4.0":
+"nock@npm:^13.5.6":
version: 13.5.6
resolution: "nock@npm:13.5.6"
dependencies:
@@ -10079,10 +9747,10 @@ __metadata:
languageName: node
linkType: hard
-"normalize-url@npm:^8.0.0, normalize-url@npm:^8.0.1":
- version: 8.0.1
- resolution: "normalize-url@npm:8.0.1"
- checksum: 10c0/eb439231c4b84430f187530e6fdac605c5048ef4ec556447a10c00a91fc69b52d8d8298d9d608e68d3e0f7dc2d812d3455edf425e0f215993667c3183bcab1ef
+"normalize-url@npm:^8.0.1":
+ version: 8.0.2
+ resolution: "normalize-url@npm:8.0.2"
+ checksum: 10c0/1c62eee6ce184ad4a463ff2984ce5e440a5058c9dd7c5ef80c0a7696bbb1d3638534e266afb14ef9678dfa07fb6c980ef4cde990c80eeee55900c378b7970584
languageName: node
linkType: hard
@@ -10219,20 +9887,20 @@ __metadata:
linkType: hard
"nx@npm:>=17.1.2 < 21":
- version: 20.8.1
- resolution: "nx@npm:20.8.1"
+ version: 20.8.2
+ resolution: "nx@npm:20.8.2"
dependencies:
"@napi-rs/wasm-runtime": "npm:0.2.4"
- "@nx/nx-darwin-arm64": "npm:20.8.1"
- "@nx/nx-darwin-x64": "npm:20.8.1"
- "@nx/nx-freebsd-x64": "npm:20.8.1"
- "@nx/nx-linux-arm-gnueabihf": "npm:20.8.1"
- "@nx/nx-linux-arm64-gnu": "npm:20.8.1"
- "@nx/nx-linux-arm64-musl": "npm:20.8.1"
- "@nx/nx-linux-x64-gnu": "npm:20.8.1"
- "@nx/nx-linux-x64-musl": "npm:20.8.1"
- "@nx/nx-win32-arm64-msvc": "npm:20.8.1"
- "@nx/nx-win32-x64-msvc": "npm:20.8.1"
+ "@nx/nx-darwin-arm64": "npm:20.8.2"
+ "@nx/nx-darwin-x64": "npm:20.8.2"
+ "@nx/nx-freebsd-x64": "npm:20.8.2"
+ "@nx/nx-linux-arm-gnueabihf": "npm:20.8.2"
+ "@nx/nx-linux-arm64-gnu": "npm:20.8.2"
+ "@nx/nx-linux-arm64-musl": "npm:20.8.2"
+ "@nx/nx-linux-x64-gnu": "npm:20.8.2"
+ "@nx/nx-linux-x64-musl": "npm:20.8.2"
+ "@nx/nx-win32-arm64-msvc": "npm:20.8.2"
+ "@nx/nx-win32-x64-msvc": "npm:20.8.2"
"@yarnpkg/lockfile": "npm:^1.1.0"
"@yarnpkg/parsers": "npm:3.0.2"
"@zkochan/js-yaml": "npm:0.0.7"
@@ -10298,18 +9966,11 @@ __metadata:
bin:
nx: bin/nx.js
nx-cloud: bin/nx-cloud.js
- checksum: 10c0/474153829a7463675eb69cfadc4b1570be36d425541e37545f7d14f94b9e213cf5d93150788bab0b29bec73693c5cec0a860a9106a1373221977e7e1988b8615
+ checksum: 10c0/3b6b202f5447f7c10d4755c9485596f607dff4cb39ef6e241c68a3d7f9cd3c5220166ed0760d3a8e2deaaebfe40db54b95ffe9e5796f7ce38c33d87bc3d10c97
languageName: node
linkType: hard
-"object-assign@npm:^4":
- version: 4.1.1
- resolution: "object-assign@npm:4.1.1"
- checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414
- languageName: node
- linkType: hard
-
-"object-inspect@npm:^1.13.3":
+"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4":
version: 1.13.4
resolution: "object-inspect@npm:1.13.4"
checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692
@@ -10382,7 +10043,7 @@ __metadata:
languageName: node
linkType: hard
-"object.values@npm:^1.2.0, object.values@npm:^1.2.1":
+"object.values@npm:^1.2.1":
version: 1.2.1
resolution: "object.values@npm:1.2.1"
dependencies:
@@ -10394,7 +10055,7 @@ __metadata:
languageName: node
linkType: hard
-"on-finished@npm:2.4.1, on-finished@npm:^2.4.1":
+"on-finished@npm:^2.4.1":
version: 2.4.1
resolution: "on-finished@npm:2.4.1"
dependencies:
@@ -10530,6 +10191,20 @@ __metadata:
languageName: node
linkType: hard
+"ow@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "ow@npm:2.0.0"
+ dependencies:
+ "@sindresorhus/is": "npm:^6.3.0"
+ callsites: "npm:^4.1.0"
+ dot-prop: "npm:^8.0.2"
+ environment: "npm:^1.0.0"
+ fast-equals: "npm:^5.0.1"
+ is-identifier: "npm:^1.0.0"
+ checksum: 10c0/f2edc7834cbe8b68726fd738ae91d0333a272e985be773cb5d576cf832a9e96b584aa4f55ed03f25d8646cc94cdc4616250bed510e1a5ef9be17c6d98a9acf6e
+ languageName: node
+ linkType: hard
+
"own-keys@npm:^1.0.1":
version: 1.0.1
resolution: "own-keys@npm:1.0.1"
@@ -10541,13 +10216,6 @@ __metadata:
languageName: node
linkType: hard
-"p-cancelable@npm:^3.0.0":
- version: 3.0.0
- resolution: "p-cancelable@npm:3.0.0"
- checksum: 10c0/948fd4f8e87b956d9afc2c6c7392de9113dac817cb1cecf4143f7a3d4c57ab5673614a80be3aba91ceec5e4b69fd8c869852d7e8048bc3d9273c4c36ce14b9aa
- languageName: node
- linkType: hard
-
"p-cancelable@npm:^4.0.1":
version: 4.0.1
resolution: "p-cancelable@npm:4.0.1"
@@ -10580,7 +10248,7 @@ __metadata:
languageName: node
linkType: hard
-"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0":
+"p-limit@npm:^3.0.2":
version: 3.1.0
resolution: "p-limit@npm:3.1.0"
dependencies:
@@ -10598,6 +10266,15 @@ __metadata:
languageName: node
linkType: hard
+"p-limit@npm:^6.2.0":
+ version: 6.2.0
+ resolution: "p-limit@npm:6.2.0"
+ dependencies:
+ yocto-queue: "npm:^1.1.1"
+ checksum: 10c0/448bf55a1776ca1444594d53b3c731e68cdca00d44a6c8df06a2f6e506d5bbd540ebb57b05280f8c8bff992a630ed782a69612473f769a7473495d19e2270166
+ languageName: node
+ linkType: hard
+
"p-locate@npm:^2.0.0":
version: 2.0.0
resolution: "p-locate@npm:2.0.0"
@@ -10782,13 +10459,6 @@ __metadata:
languageName: node
linkType: hard
-"parent-require@npm:^1.0.0":
- version: 1.0.0
- resolution: "parent-require@npm:1.0.0"
- checksum: 10c0/58eb17553192027a596bb3b13f567e4933894964ad47a9f9054a5dc4776e60e13903e937b2eec6e7afff8a34a4fc91b5397fdc6206aa2d50ba95b87059b4f2e0
- languageName: node
- linkType: hard
-
"parse-conflict-json@npm:^3.0.0":
version: 3.0.1
resolution: "parse-conflict-json@npm:3.0.1"
@@ -10840,7 +10510,7 @@ __metadata:
languageName: node
linkType: hard
-"parse5-htmlparser2-tree-adapter@npm:^7.0.0":
+"parse5-htmlparser2-tree-adapter@npm:^7.1.0":
version: 7.1.0
resolution: "parse5-htmlparser2-tree-adapter@npm:7.1.0"
dependencies:
@@ -10850,7 +10520,16 @@ __metadata:
languageName: node
linkType: hard
-"parse5@npm:^7.0.0, parse5@npm:^7.2.1":
+"parse5-parser-stream@npm:^7.1.2":
+ version: 7.1.2
+ resolution: "parse5-parser-stream@npm:7.1.2"
+ dependencies:
+ parse5: "npm:^7.0.0"
+ checksum: 10c0/e236c61000d38ecad369e725a48506b051cebad8abb00e6d4e8bff7aa85c183820fcb45db1559cc90955bdbbdbd665ea94c41259594e74566fff411478dc7fcb
+ languageName: node
+ linkType: hard
+
+"parse5@npm:^7.0.0, parse5@npm:^7.2.1, parse5@npm:^7.3.0":
version: 7.3.0
resolution: "parse5@npm:7.3.0"
dependencies:
@@ -10859,7 +10538,7 @@ __metadata:
languageName: node
linkType: hard
-"parseurl@npm:^1.3.3, parseurl@npm:~1.3.3":
+"parseurl@npm:^1.3.3":
version: 1.3.3
resolution: "parseurl@npm:1.3.3"
checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5
@@ -10935,13 +10614,6 @@ __metadata:
languageName: node
linkType: hard
-"path-to-regexp@npm:0.1.12":
- version: 0.1.12
- resolution: "path-to-regexp@npm:0.1.12"
- checksum: 10c0/1c6ff10ca169b773f3bba943bbc6a07182e332464704572962d277b900aeee81ac6aa5d060ff9e01149636c30b1f63af6e69dd7786ba6e0ddb39d4dee1f0645b
- languageName: node
- linkType: hard
-
"path-to-regexp@npm:^8.0.0":
version: 8.2.0
resolution: "path-to-regexp@npm:8.2.0"
@@ -10958,13 +10630,6 @@ __metadata:
languageName: node
linkType: hard
-"path-type@npm:^4.0.0":
- version: 4.0.0
- resolution: "path-type@npm:4.0.0"
- checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c
- languageName: node
- linkType: hard
-
"path-type@npm:^6.0.0":
version: 6.0.0
resolution: "path-type@npm:6.0.0"
@@ -10980,9 +10645,9 @@ __metadata:
linkType: hard
"pathval@npm:^2.0.0":
- version: 2.0.0
- resolution: "pathval@npm:2.0.0"
- checksum: 10c0/602e4ee347fba8a599115af2ccd8179836a63c925c23e04bd056d0674a64b39e3a081b643cc7bc0b84390517df2d800a46fcc5598d42c155fe4977095c2f77c5
+ version: 2.0.1
+ resolution: "pathval@npm:2.0.1"
+ checksum: 10c0/460f4709479fbf2c45903a65655fc8f0a5f6d808f989173aeef5fdea4ff4f303dc13f7870303999add60ec49d4c14733895c0a869392e9866f1091fa64fd7581
languageName: node
linkType: hard
@@ -10995,13 +10660,6 @@ __metadata:
languageName: node
linkType: hard
-"peek-readable@npm:^7.0.0":
- version: 7.0.0
- resolution: "peek-readable@npm:7.0.0"
- checksum: 10c0/a979b0678a5c2b58c2a755eadc5bb990814e479ff17b9fbcec39a6c88f278eb9a788b6ae13371ee84f7a2c6672505dac961f99ccc0c0300354d9b4dc5a207604
- languageName: node
- linkType: hard
-
"pend@npm:~1.2.0":
version: 1.2.0
resolution: "pend@npm:1.2.0"
@@ -11024,9 +10682,9 @@ __metadata:
linkType: hard
"picomatch@npm:^4.0.2":
- version: 4.0.2
- resolution: "picomatch@npm:4.0.2"
- checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc
+ version: 4.0.3
+ resolution: "picomatch@npm:4.0.3"
+ checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2
languageName: node
linkType: hard
@@ -11067,13 +10725,6 @@ __metadata:
languageName: node
linkType: hard
-"pkce-challenge@npm:^5.0.0":
- version: 5.0.0
- resolution: "pkce-challenge@npm:5.0.0"
- checksum: 10c0/c6706d627fdbb6f22bf8cc5d60d96d6b6a7bb481399b336a3d3f4e9bfba3e167a2c32f8ec0b5e74be686a0ba3bcc9894865d4c2dd1b91cea4c05dba1f28602c3
- languageName: node
- linkType: hard
-
"pkg-dir@npm:^4.2.0":
version: 4.2.0
resolution: "pkg-dir@npm:4.2.0"
@@ -11083,36 +10734,36 @@ __metadata:
languageName: node
linkType: hard
-"playwright-core@npm:1.51.1":
- version: 1.51.1
- resolution: "playwright-core@npm:1.51.1"
+"playwright-core@npm:1.52.0":
+ version: 1.52.0
+ resolution: "playwright-core@npm:1.52.0"
bin:
playwright-core: cli.js
- checksum: 10c0/4f004d9dea5ecbd76b84c858fa4880ed955600b6cda972a3e8093ea47e150ce20bf2ea806e73e740497d34f4b61b080c208339a661fc75ad04d8f00bedcc21e0
+ checksum: 10c0/640945507e6ca2144e9f596b2a6ecac042c2fd3683ff99e6271e9a7b38f3602d415f282609d569456f66680aab8b3c5bb1b257d8fb63a7fc0ed648261110421f
languageName: node
linkType: hard
-"playwright-core@npm:1.52.0, playwright-core@npm:^1.52.0":
- version: 1.52.0
- resolution: "playwright-core@npm:1.52.0"
+"playwright-core@npm:^1.52.0":
+ version: 1.54.1
+ resolution: "playwright-core@npm:1.54.1"
bin:
playwright-core: cli.js
- checksum: 10c0/640945507e6ca2144e9f596b2a6ecac042c2fd3683ff99e6271e9a7b38f3602d415f282609d569456f66680aab8b3c5bb1b257d8fb63a7fc0ed648261110421f
+ checksum: 10c0/b821262b024d7753b1bfa71eb2bc99f2dda12a869d175b2e1bc6ac2764bd661baf36d9d42f45caf622854ad7e4a6077b9b57014c74bb5a78fe339c9edf1c9019
languageName: node
linkType: hard
-"playwright@npm:1.51.1":
- version: 1.51.1
- resolution: "playwright@npm:1.51.1"
+"playwright@npm:1.52.0":
+ version: 1.52.0
+ resolution: "playwright@npm:1.52.0"
dependencies:
fsevents: "npm:2.3.2"
- playwright-core: "npm:1.51.1"
+ playwright-core: "npm:1.52.0"
dependenciesMeta:
fsevents:
optional: true
bin:
playwright: cli.js
- checksum: 10c0/2aea553b8b1086ee419e72c9d4f4117686e6bdb5e09e0f47dfe563ce0f0bd79c4ee79dd9c8a0f023a2fb7803b81d4fdc552887410d16c036be07f21ab72b3f46
+ checksum: 10c0/2c6edf1e15e59bbaf77f3fa0fe0ac975793c17cff835d9c8b8bc6395a3b6f1c01898b3058ab37891b2e4d424bcc8f1b4844fe70d943e0143d239d7451408c579
languageName: node
linkType: hard
@@ -11146,14 +10797,14 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:^8.4.43":
- version: 8.5.3
- resolution: "postcss@npm:8.5.3"
+"postcss@npm:^8.5.6":
+ version: 8.5.6
+ resolution: "postcss@npm:8.5.6"
dependencies:
- nanoid: "npm:^3.3.8"
+ nanoid: "npm:^3.3.11"
picocolors: "npm:^1.1.1"
source-map-js: "npm:^1.2.1"
- checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3
+ checksum: 10c0/5127cc7c91ed7a133a1b7318012d8bfa112da9ef092dddf369ae699a1f10ebbd89b1b9f25f3228795b84585c72aabd5ced5fc11f2ba467eedf7b081a66fad024
languageName: node
linkType: hard
@@ -11186,15 +10837,6 @@ __metadata:
languageName: node
linkType: hard
-"prettier@npm:^3.5.3":
- version: 3.5.3
- resolution: "prettier@npm:3.5.3"
- bin:
- prettier: bin/prettier.cjs
- checksum: 10c0/3880cb90b9dc0635819ab52ff571518c35bd7f15a6e80a2054c05dbc8a3aa6e74f135519e91197de63705bcb38388ded7e7230e2178432a1468005406238b877
- languageName: node
- linkType: hard
-
"pretty-format@npm:^29.7.0":
version: 29.7.0
resolution: "pretty-format@npm:29.7.0"
@@ -11306,7 +10948,7 @@ __metadata:
languageName: node
linkType: hard
-"proxy-addr@npm:^2.0.7, proxy-addr@npm:~2.0.7":
+"proxy-addr@npm:^2.0.7":
version: 2.0.7
resolution: "proxy-addr@npm:2.0.7"
dependencies:
@@ -11332,14 +10974,14 @@ __metadata:
languageName: node
linkType: hard
-"proxy-chain@npm:^2.0.1":
- version: 2.5.8
- resolution: "proxy-chain@npm:2.5.8"
+"proxy-chain@npm:^2.5.8":
+ version: 2.5.9
+ resolution: "proxy-chain@npm:2.5.9"
dependencies:
socks: "npm:^2.8.3"
socks-proxy-agent: "npm:^8.0.3"
tslib: "npm:^2.3.1"
- checksum: 10c0/f8780646ea07c52c166103af2f9514c69ce7685b8c4a530eda37b88792d0a6ece3d3dbf7a29a5a66a04ffeefb4c9c201e1ef9c3086472480b21d64a18f821b55
+ checksum: 10c0/a55ebab793ec4a48b888536bb5ca4840768cb1550b966c82187580deb4c27fe7723a2609fb21f990006fd7a45a3d4c54eb38be4e9fe451027d1d9ce51628e73d
languageName: node
linkType: hard
@@ -11350,26 +10992,26 @@ __metadata:
languageName: node
linkType: hard
-"proxy@npm:^1.0.2":
- version: 1.0.2
- resolution: "proxy@npm:1.0.2"
+"proxy@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "proxy@npm:2.2.0"
dependencies:
- args: "npm:5.0.1"
- basic-auth-parser: "npm:0.0.2"
- debug: "npm:^4.1.1"
+ args: "npm:^5.0.3"
+ basic-auth-parser: "npm:0.0.2-1"
+ debug: "npm:^4.3.4"
bin:
- proxy: bin/proxy.js
- checksum: 10c0/23d560ded4632ce6fab176f080af3e378b86963dc220d2106077d76500aa1019d4f764cd3ae3a51e7521047b48768c28add8e2775c68a0726e2ba86660575315
+ proxy: dist/bin/proxy.js
+ checksum: 10c0/11fe2f07c0963af1aa465ef374927674d63197fbb37854e3946297828528be31012e2ae4bc9e2421d1eeada37935e5b1d9a8cf81bbec2ebbd14782a7fffc8897
languageName: node
linkType: hard
"pump@npm:^3.0.0":
- version: 3.0.2
- resolution: "pump@npm:3.0.2"
+ version: 3.0.3
+ resolution: "pump@npm:3.0.3"
dependencies:
end-of-stream: "npm:^1.1.0"
once: "npm:^1.3.1"
- checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f
+ checksum: 10c0/ada5cdf1d813065bbc99aa2c393b8f6beee73b5de2890a8754c9f488d7323ffd2ca5f5a0943b48934e3fcbd97637d0337369c3c631aeb9614915db629f1c75c9
languageName: node
linkType: hard
@@ -11380,42 +11022,33 @@ __metadata:
languageName: node
linkType: hard
-"puppeteer-core@npm:24.6.1":
- version: 24.6.1
- resolution: "puppeteer-core@npm:24.6.1"
+"puppeteer-core@npm:24.8.2":
+ version: 24.8.2
+ resolution: "puppeteer-core@npm:24.8.2"
dependencies:
- "@puppeteer/browsers": "npm:2.10.0"
- chromium-bidi: "npm:3.0.0"
+ "@puppeteer/browsers": "npm:2.10.4"
+ chromium-bidi: "npm:5.1.0"
debug: "npm:^4.4.0"
- devtools-protocol: "npm:0.0.1425554"
+ devtools-protocol: "npm:0.0.1439962"
typed-query-selector: "npm:^2.12.0"
- ws: "npm:^8.18.1"
- checksum: 10c0/d59b84f4cced919b29e09ced43ee67efd2f782edf10704c4591b6cd49338ef109effd5123cbebd11871ed2989e78876251cff37d8a893e353f78069864898a5c
+ ws: "npm:^8.18.2"
+ checksum: 10c0/d6ac6b97dfa6ad93e0cbea2d6151728ee72d65ea31eade994e2495dc76be24695d38bcd2289c0e6a4afe86959c5d8786722016dfb12b31769c09fdda98f23baa
languageName: node
linkType: hard
-"puppeteer@npm:24.6.1":
- version: 24.6.1
- resolution: "puppeteer@npm:24.6.1"
+"puppeteer@npm:24.8.2":
+ version: 24.8.2
+ resolution: "puppeteer@npm:24.8.2"
dependencies:
- "@puppeteer/browsers": "npm:2.10.0"
- chromium-bidi: "npm:3.0.0"
+ "@puppeteer/browsers": "npm:2.10.4"
+ chromium-bidi: "npm:5.1.0"
cosmiconfig: "npm:^9.0.0"
- devtools-protocol: "npm:0.0.1425554"
- puppeteer-core: "npm:24.6.1"
+ devtools-protocol: "npm:0.0.1439962"
+ puppeteer-core: "npm:24.8.2"
typed-query-selector: "npm:^2.12.0"
bin:
puppeteer: lib/cjs/puppeteer/node/cli.js
- checksum: 10c0/693a27ef113e99a5204dac28f9568817c98b3f660112de5ad254efa75062a5b85468d3b9230dca97aa85b74f78f2c06f14bcfa0e22de7e5f83a955a7c11422d4
- languageName: node
- linkType: hard
-
-"qs@npm:6.13.0":
- version: 6.13.0
- resolution: "qs@npm:6.13.0"
- dependencies:
- side-channel: "npm:^1.0.6"
- checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860
+ checksum: 10c0/f0f913e783bcb66d77be33225f95ac48c7f256316e42b2fe8cfa9c29b502148d4f710ced683d6e344d339089cb8db56ab7c2c6079e127f52d8ccfaab6a1622b5
languageName: node
linkType: hard
@@ -11449,32 +11082,20 @@ __metadata:
languageName: node
linkType: hard
-"quick-lru@npm:^7.0.0":
+"quick-lru@npm:^7.0.0, quick-lru@npm:^7.0.1":
version: 7.0.1
resolution: "quick-lru@npm:7.0.1"
checksum: 10c0/631d031d9aba116311b1db57fbf8637874f2b72731f435a9d015cc0405aae5d18206336953563627ca7c9ed971a3824f11cb4dc1575d03283252a8cea22ac8e1
languageName: node
linkType: hard
-"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1":
+"range-parser@npm:^1.2.1":
version: 1.2.1
resolution: "range-parser@npm:1.2.1"
checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0
languageName: node
linkType: hard
-"raw-body@npm:2.5.2":
- version: 2.5.2
- resolution: "raw-body@npm:2.5.2"
- dependencies:
- bytes: "npm:3.1.2"
- http-errors: "npm:2.0.0"
- iconv-lite: "npm:0.4.24"
- unpipe: "npm:1.0.0"
- checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4
- languageName: node
- linkType: hard
-
"raw-body@npm:^3.0.0":
version: 3.0.0
resolution: "raw-body@npm:3.0.0"
@@ -11630,7 +11251,7 @@ __metadata:
languageName: node
linkType: hard
-"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.3":
+"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.4":
version: 1.5.4
resolution: "regexp.prototype.flags@npm:1.5.4"
dependencies:
@@ -11658,6 +11279,13 @@ __metadata:
languageName: node
linkType: hard
+"reserved-identifiers@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "reserved-identifiers@npm:1.0.0"
+ checksum: 10c0/e6aa8e3b6c0c2d29e40c4597c0d202911c91b67f875da396340c2213ee7a8924476da54a5a0855c5acb409a9bc9aa84dacfdaa145528883746cbad74666189e9
+ languageName: node
+ linkType: hard
+
"resolve-alpn@npm:^1.2.0":
version: 1.2.1
resolution: "resolve-alpn@npm:1.2.1"
@@ -11785,7 +11413,7 @@ __metadata:
languageName: node
linkType: hard
-"rimraf@npm:*, rimraf@npm:^6.0.0":
+"rimraf@npm:*, rimraf@npm:^6.0.1":
version: 6.0.1
resolution: "rimraf@npm:6.0.1"
dependencies:
@@ -11826,31 +11454,31 @@ __metadata:
languageName: node
linkType: hard
-"rollup@npm:^4.20.0":
- version: 4.40.1
- resolution: "rollup@npm:4.40.1"
- dependencies:
- "@rollup/rollup-android-arm-eabi": "npm:4.40.1"
- "@rollup/rollup-android-arm64": "npm:4.40.1"
- "@rollup/rollup-darwin-arm64": "npm:4.40.1"
- "@rollup/rollup-darwin-x64": "npm:4.40.1"
- "@rollup/rollup-freebsd-arm64": "npm:4.40.1"
- "@rollup/rollup-freebsd-x64": "npm:4.40.1"
- "@rollup/rollup-linux-arm-gnueabihf": "npm:4.40.1"
- "@rollup/rollup-linux-arm-musleabihf": "npm:4.40.1"
- "@rollup/rollup-linux-arm64-gnu": "npm:4.40.1"
- "@rollup/rollup-linux-arm64-musl": "npm:4.40.1"
- "@rollup/rollup-linux-loongarch64-gnu": "npm:4.40.1"
- "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.40.1"
- "@rollup/rollup-linux-riscv64-gnu": "npm:4.40.1"
- "@rollup/rollup-linux-riscv64-musl": "npm:4.40.1"
- "@rollup/rollup-linux-s390x-gnu": "npm:4.40.1"
- "@rollup/rollup-linux-x64-gnu": "npm:4.40.1"
- "@rollup/rollup-linux-x64-musl": "npm:4.40.1"
- "@rollup/rollup-win32-arm64-msvc": "npm:4.40.1"
- "@rollup/rollup-win32-ia32-msvc": "npm:4.40.1"
- "@rollup/rollup-win32-x64-msvc": "npm:4.40.1"
- "@types/estree": "npm:1.0.7"
+"rollup@npm:^4.40.0":
+ version: 4.45.1
+ resolution: "rollup@npm:4.45.1"
+ dependencies:
+ "@rollup/rollup-android-arm-eabi": "npm:4.45.1"
+ "@rollup/rollup-android-arm64": "npm:4.45.1"
+ "@rollup/rollup-darwin-arm64": "npm:4.45.1"
+ "@rollup/rollup-darwin-x64": "npm:4.45.1"
+ "@rollup/rollup-freebsd-arm64": "npm:4.45.1"
+ "@rollup/rollup-freebsd-x64": "npm:4.45.1"
+ "@rollup/rollup-linux-arm-gnueabihf": "npm:4.45.1"
+ "@rollup/rollup-linux-arm-musleabihf": "npm:4.45.1"
+ "@rollup/rollup-linux-arm64-gnu": "npm:4.45.1"
+ "@rollup/rollup-linux-arm64-musl": "npm:4.45.1"
+ "@rollup/rollup-linux-loongarch64-gnu": "npm:4.45.1"
+ "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.45.1"
+ "@rollup/rollup-linux-riscv64-gnu": "npm:4.45.1"
+ "@rollup/rollup-linux-riscv64-musl": "npm:4.45.1"
+ "@rollup/rollup-linux-s390x-gnu": "npm:4.45.1"
+ "@rollup/rollup-linux-x64-gnu": "npm:4.45.1"
+ "@rollup/rollup-linux-x64-musl": "npm:4.45.1"
+ "@rollup/rollup-win32-arm64-msvc": "npm:4.45.1"
+ "@rollup/rollup-win32-ia32-msvc": "npm:4.45.1"
+ "@rollup/rollup-win32-x64-msvc": "npm:4.45.1"
+ "@types/estree": "npm:1.0.8"
fsevents: "npm:~2.3.2"
dependenciesMeta:
"@rollup/rollup-android-arm-eabi":
@@ -11897,7 +11525,7 @@ __metadata:
optional: true
bin:
rollup: dist/bin/rollup
- checksum: 10c0/11c44b5ef9b3fd521c5501b3f1c36af4ca07821aeff41d41f45336eee324d8f5b46c1a92189f5c8cd146bc21ac10418d57cb4571637ea09aced1ae831a2a4ae0
+ checksum: 10c0/d641c283fe25d5db9e32c5bd977847cae1773f1021301d7baf936c65110e30e0608bb43cade46827df64a6149a67b853e72d3e92b46603c7ceb3b50bbd9ee1f8
languageName: node
linkType: hard
@@ -11928,13 +11556,6 @@ __metadata:
languageName: node
linkType: hard
-"run-async@npm:^3.0.0":
- version: 3.0.0
- resolution: "run-async@npm:3.0.0"
- checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85
- languageName: node
- linkType: hard
-
"run-parallel@npm:^1.1.9":
version: 1.2.0
resolution: "run-parallel@npm:1.2.0"
@@ -11944,7 +11565,7 @@ __metadata:
languageName: node
linkType: hard
-"rxjs@npm:^7.2.0, rxjs@npm:^7.5.5, rxjs@npm:^7.8.1":
+"rxjs@npm:^7.2.0, rxjs@npm:^7.5.5":
version: 7.8.2
resolution: "rxjs@npm:7.8.2"
dependencies:
@@ -12043,32 +11664,11 @@ __metadata:
linkType: hard
"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.1":
- version: 7.7.1
- resolution: "semver@npm:7.7.1"
+ version: 7.7.2
+ resolution: "semver@npm:7.7.2"
bin:
semver: bin/semver.js
- checksum: 10c0/fd603a6fb9c399c6054015433051bdbe7b99a940a8fb44b85c2b524c4004b023d7928d47cb22154f8d054ea7ee8597f586605e05b52047f048278e4ac56ae958
- languageName: node
- linkType: hard
-
-"send@npm:0.19.0":
- version: 0.19.0
- resolution: "send@npm:0.19.0"
- dependencies:
- debug: "npm:2.6.9"
- depd: "npm:2.0.0"
- destroy: "npm:1.2.0"
- encodeurl: "npm:~1.0.2"
- escape-html: "npm:~1.0.3"
- etag: "npm:~1.8.1"
- fresh: "npm:0.5.2"
- http-errors: "npm:2.0.0"
- mime: "npm:1.6.0"
- ms: "npm:2.1.3"
- on-finished: "npm:2.4.1"
- range-parser: "npm:~1.2.1"
- statuses: "npm:2.0.1"
- checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3
+ checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea
languageName: node
linkType: hard
@@ -12091,18 +11691,6 @@ __metadata:
languageName: node
linkType: hard
-"serve-static@npm:1.16.2":
- version: 1.16.2
- resolution: "serve-static@npm:1.16.2"
- dependencies:
- encodeurl: "npm:~2.0.0"
- escape-html: "npm:~1.0.3"
- parseurl: "npm:~1.3.3"
- send: "npm:0.19.0"
- checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f
- languageName: node
- linkType: hard
-
"serve-static@npm:^2.2.0":
version: 2.2.0
resolution: "serve-static@npm:2.2.0"
@@ -12226,7 +11814,7 @@ __metadata:
languageName: node
linkType: hard
-"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6, side-channel@npm:^1.1.0":
+"side-channel@npm:^1.0.4, side-channel@npm:^1.1.0":
version: 1.1.0
resolution: "side-channel@npm:1.1.0"
dependencies:
@@ -12356,12 +11944,12 @@ __metadata:
linkType: hard
"socks@npm:^2.6.2, socks@npm:^2.8.3":
- version: 2.8.4
- resolution: "socks@npm:2.8.4"
+ version: 2.8.6
+ resolution: "socks@npm:2.8.6"
dependencies:
ip-address: "npm:^9.0.5"
smart-buffer: "npm:^4.2.0"
- checksum: 10c0/00c3271e233ccf1fb83a3dd2060b94cc37817e0f797a93c560b9a7a86c4a0ec2961fb31263bdd24a3c28945e24868b5f063cd98744171d9e942c513454b50ae5
+ checksum: 10c0/15b95db4caa359c80bfa880ff3e58f3191b9ffa4313570e501a60ee7575f51e4be664a296f4ee5c2c40544da179db6140be53433ce41ec745f9d51f342557514
languageName: node
linkType: hard
@@ -12525,13 +12113,20 @@ __metadata:
languageName: node
linkType: hard
-"statuses@npm:2.0.1, statuses@npm:^2.0.1":
+"statuses@npm:2.0.1":
version: 2.0.1
resolution: "statuses@npm:2.0.1"
checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0
languageName: node
linkType: hard
+"statuses@npm:^2.0.1":
+ version: 2.0.2
+ resolution: "statuses@npm:2.0.2"
+ checksum: 10c0/a9947d98ad60d01f6b26727570f3bcceb6c8fa789da64fe6889908fe2e294d57503b14bf2b5af7605c2d36647259e856635cd4c49eab41667658ec9d0080ec3f
+ languageName: node
+ linkType: hard
+
"std-env@npm:^3.9.0":
version: 3.9.0
resolution: "std-env@npm:3.9.0"
@@ -12539,7 +12134,7 @@ __metadata:
languageName: node
linkType: hard
-"stop-iteration-iterator@npm:^1.0.0":
+"stop-iteration-iterator@npm:^1.0.0, stop-iteration-iterator@npm:^1.1.0":
version: 1.1.0
resolution: "stop-iteration-iterator@npm:1.1.0"
dependencies:
@@ -12565,7 +12160,7 @@ __metadata:
languageName: node
linkType: hard
-"stream-json@npm:^1.8.0":
+"stream-json@npm:^1.9.1":
version: 1.9.1
resolution: "stream-json@npm:1.9.1"
dependencies:
@@ -12575,8 +12170,8 @@ __metadata:
linkType: hard
"streamx@npm:^2.15.0, streamx@npm:^2.21.0":
- version: 2.22.0
- resolution: "streamx@npm:2.22.0"
+ version: 2.22.1
+ resolution: "streamx@npm:2.22.1"
dependencies:
bare-events: "npm:^2.2.0"
fast-fifo: "npm:^1.3.2"
@@ -12584,7 +12179,7 @@ __metadata:
dependenciesMeta:
bare-events:
optional: true
- checksum: 10c0/f5017998a5b6360ba652599d20ef308c8c8ab0e26c8e5f624f0706f0ea12624e94fdf1ec18318124498529a1b106a1ab1c94a1b1e1ad6c2eec7cb9c8ac1b9198
+ checksum: 10c0/b5e489cca78ff23b910e7d58c3e0059e692f93ec401a5974689f2c50c33c9d94f64246a305566ad52cdb818ee583e02e4257b9066fd654cb9f576a9692fdb976
languageName: node
linkType: hard
@@ -12624,7 +12219,7 @@ __metadata:
languageName: node
linkType: hard
-"string-width@npm:^7.0.0":
+"string-width@npm:^7.0.0, string-width@npm:^7.2.0":
version: 7.2.0
resolution: "string-width@npm:7.2.0"
dependencies:
@@ -12650,7 +12245,7 @@ __metadata:
languageName: node
linkType: hard
-"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9":
+"string.prototype.trimend@npm:^1.0.9":
version: 1.0.9
resolution: "string.prototype.trimend@npm:1.0.9"
dependencies:
@@ -12700,15 +12295,6 @@ __metadata:
languageName: node
linkType: hard
-"strip-ansi@npm:^3.0.0":
- version: 3.0.1
- resolution: "strip-ansi@npm:3.0.1"
- dependencies:
- ansi-regex: "npm:^2.0.0"
- checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f
- languageName: node
- linkType: hard
-
"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0":
version: 7.1.0
resolution: "strip-ansi@npm:7.1.0"
@@ -12769,33 +12355,31 @@ __metadata:
languageName: node
linkType: hard
-"strong-log-transformer@npm:2.1.0":
- version: 2.1.0
- resolution: "strong-log-transformer@npm:2.1.0"
+"strip-literal@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "strip-literal@npm:3.0.0"
dependencies:
- duplexer: "npm:^0.1.1"
- minimist: "npm:^1.2.0"
- through: "npm:^2.3.4"
- bin:
- sl-log-transformer: bin/sl-log-transformer.js
- checksum: 10c0/3c3b8aa8f34d661910563ff996412e2f527fc814e699a376854b554d4a4294ab7e285b4e2c08a080a7b19c5600a9b93a98798d3ac600fe3de545ca6605c07829
+ js-tokens: "npm:^9.0.1"
+ checksum: 10c0/d81657f84aba42d4bbaf2a677f7e7f34c1f3de5a6726db8bc1797f9c0b303ba54d4660383a74bde43df401cf37cce1dff2c842c55b077a4ceee11f9e31fba828
languageName: node
linkType: hard
-"strtok3@npm:^10.2.0":
- version: 10.2.2
- resolution: "strtok3@npm:10.2.2"
+"strtok3@npm:^10.2.2":
+ version: 10.3.2
+ resolution: "strtok3@npm:10.3.2"
dependencies:
"@tokenizer/token": "npm:^0.3.0"
- peek-readable: "npm:^7.0.0"
- checksum: 10c0/0d13a7fee7d773693b9e23c53429a032beb1d0ba9ab1cef3b5f3968c2c65f5c292a54af2b54c8e55abd210544e786a2369c8c241c68bb7d80b0ae5b207e4afd9
+ checksum: 10c0/cbdc2686cfd6127cf726f8ad5f81ebf100bc4609a5fd620f9ba111cda92b7baf789e71337c99978965730eac0645ef1b6dc5d673ac5171f51d776527b9432ce1
languageName: node
linkType: hard
-"supports-color@npm:^2.0.0":
- version: 2.0.0
- resolution: "supports-color@npm:2.0.0"
- checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda
+"super-regex@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "super-regex@npm:1.0.0"
+ dependencies:
+ function-timeout: "npm:^1.0.1"
+ time-span: "npm:^5.1.0"
+ checksum: 10c0/9727b57702308af74be90ed92d4612eed6c8b03fdf25efe1a3455e40d7145246516638bcabf3538e9e9c706d8ecb233e4888e0223283543fb2836d4d7acb6200
languageName: node
linkType: hard
@@ -12832,20 +12416,20 @@ __metadata:
linkType: hard
"tar-fs@npm:^2.0.0":
- version: 2.1.2
- resolution: "tar-fs@npm:2.1.2"
+ version: 2.1.3
+ resolution: "tar-fs@npm:2.1.3"
dependencies:
chownr: "npm:^1.1.1"
mkdirp-classic: "npm:^0.5.2"
pump: "npm:^3.0.0"
tar-stream: "npm:^2.1.4"
- checksum: 10c0/9c704bd4a53be7565caf34ed001d1428532457fe3546d8fc1233f0f0882c3d2403f8602e8046e0b0adeb31fe95336572a69fb28851a391523126b697537670fc
+ checksum: 10c0/472ee0c3c862605165163113ab6924f411c07506a1fb24c51a1a80085f0d4d381d86d2fd6b189236c8d932d1cd97b69cce35016767ceb658a35f7584fe77f305
languageName: node
linkType: hard
"tar-fs@npm:^3.0.8":
- version: 3.0.8
- resolution: "tar-fs@npm:3.0.8"
+ version: 3.1.0
+ resolution: "tar-fs@npm:3.1.0"
dependencies:
bare-fs: "npm:^4.0.1"
bare-path: "npm:^3.0.0"
@@ -12856,7 +12440,7 @@ __metadata:
optional: true
bare-path:
optional: true
- checksum: 10c0/b70bb2ad0490ab13b48edd10bd648bb54c52b681981cdcdc3aa4517e98ad94c94659ddca1925872ee658d781b9fcdd2b1c808050647f06b1bca157dd2fcae038
+ checksum: 10c0/760309677543c03fbc253b5ef1ab4bb2ceafb554471b6cbe4930d1633f35662ec26a1414c66fa6754f5aa7e8c65003f73849242f624c322d3dcba7a8888a6915
languageName: node
linkType: hard
@@ -12963,17 +12547,26 @@ __metadata:
languageName: node
linkType: hard
-"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6, through@npm:~2.3, through@npm:~2.3.1":
+"through@npm:2, through@npm:2.3.8, through@npm:>=2.2.7 <3, through@npm:^2.3.6, through@npm:~2.3, through@npm:~2.3.1":
version: 2.3.8
resolution: "through@npm:2.3.8"
checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc
languageName: node
linkType: hard
-"tiny-lru@npm:11.2.11":
- version: 11.2.11
- resolution: "tiny-lru@npm:11.2.11"
- checksum: 10c0/6fe45e477e198f204752cb83bb02c963e9cdcabfb0083a723b498e6a7661143641be36a3d7170df6e4a0b5d5ac6a06533b8cccc98cbdfddacec826016a5dab97
+"time-span@npm:^5.1.0":
+ version: 5.1.0
+ resolution: "time-span@npm:5.1.0"
+ dependencies:
+ convert-hrtime: "npm:^5.0.0"
+ checksum: 10c0/37b8284c53f4ee320377512ac19e3a034f2b025f5abd6959b8c1d0f69e0f06ab03681df209f2e452d30129e7b1f25bf573fb0f29d57e71f9b4a6b5b99f4c4b9e
+ languageName: node
+ linkType: hard
+
+"tiny-lru@npm:11.3.3":
+ version: 11.3.3
+ resolution: "tiny-lru@npm:11.3.3"
+ checksum: 10c0/9e73857424abdc24988234a6e5fd6549cb8aa88a94d2dfa6547187c14bda96b46cdc2fc10dbf665fb5a3118439d3ad0dc90264f3c90ceaf0c7259cc55c70a477
languageName: node
linkType: hard
@@ -12991,27 +12584,44 @@ __metadata:
languageName: node
linkType: hard
-"tinyexec@npm:^0.3.0, tinyexec@npm:^0.3.2":
+"tinyexec@npm:^0.3.2":
version: 0.3.2
resolution: "tinyexec@npm:0.3.2"
checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90
languageName: node
linkType: hard
-"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13":
- version: 0.2.13
- resolution: "tinyglobby@npm:0.2.13"
+"tinyexec@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "tinyexec@npm:1.0.1"
+ checksum: 10c0/e1ec3c8194a0427ce001ba69fd933d0c957e2b8994808189ed8020d3e0c01299aea8ecf0083cc514ecbf90754695895f2b5c0eac07eb2d0c406f7d4fbb8feade
+ languageName: node
+ linkType: hard
+
+"tinyglobby@npm:0.2.12":
+ version: 0.2.12
+ resolution: "tinyglobby@npm:0.2.12"
+ dependencies:
+ fdir: "npm:^6.4.3"
+ picomatch: "npm:^4.0.2"
+ checksum: 10c0/7c9be4fd3625630e262dcb19015302aad3b4ba7fc620f269313e688f2161ea8724d6cb4444baab5ef2826eb6bed72647b169a33ec8eea37501832a2526ff540f
+ languageName: node
+ linkType: hard
+
+"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14":
+ version: 0.2.14
+ resolution: "tinyglobby@npm:0.2.14"
dependencies:
fdir: "npm:^6.4.4"
picomatch: "npm:^4.0.2"
- checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c
+ checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6
languageName: node
linkType: hard
-"tinypool@npm:^1.0.2":
- version: 1.0.2
- resolution: "tinypool@npm:1.0.2"
- checksum: 10c0/31ac184c0ff1cf9a074741254fe9ea6de95026749eb2b8ec6fd2b9d8ca94abdccda731f8e102e7f32e72ed3b36d32c6975fd5f5523df3f1b6de6c3d8dfd95e63
+"tinypool@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "tinypool@npm:1.1.1"
+ checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b
languageName: node
linkType: hard
@@ -13022,10 +12632,10 @@ __metadata:
languageName: node
linkType: hard
-"tinyspy@npm:^3.0.2":
- version: 3.0.2
- resolution: "tinyspy@npm:3.0.2"
- checksum: 10c0/55ffad24e346622b59292e097c2ee30a63919d5acb7ceca87fc0d1c223090089890587b426e20054733f97a58f20af2c349fb7cc193697203868ab7ba00bcea0
+"tinyspy@npm:^4.0.3":
+ version: 4.0.3
+ resolution: "tinyspy@npm:4.0.3"
+ checksum: 10c0/0a92a18b5350945cc8a1da3a22c9ad9f4e2945df80aaa0c43e1b3a3cfb64d8501e607ebf0305e048e3c3d3e0e7f8eb10cea27dc17c21effb73e66c4a3be36373
languageName: node
linkType: hard
@@ -13036,7 +12646,14 @@ __metadata:
languageName: node
linkType: hard
-"tldts@npm:^6.0.0, tldts@npm:^6.1.32":
+"tldts-core@npm:^7.0.10":
+ version: 7.0.10
+ resolution: "tldts-core@npm:7.0.10"
+ checksum: 10c0/049f606c18707463366cfcb63d766dc5a4e68c94ba79bd86fce90a2a2187324ab44907a1ce114665f68774a579d10fa7fcc5c44111179f7b19c84fbb3474d9cf
+ languageName: node
+ linkType: hard
+
+"tldts@npm:^6.1.32":
version: 6.1.86
resolution: "tldts@npm:6.1.86"
dependencies:
@@ -13047,6 +12664,17 @@ __metadata:
languageName: node
linkType: hard
+"tldts@npm:^7.0.6":
+ version: 7.0.10
+ resolution: "tldts@npm:7.0.10"
+ dependencies:
+ tldts-core: "npm:^7.0.10"
+ bin:
+ tldts: bin/cli.js
+ checksum: 10c0/d94610130fdc6eca6d4516fe417fce2be863c8cd7aeaed3f144325244945516e756c82bd1398f9ffb062f55c059f63bbdfb591eca86e1d93afb81bc60dabd0a6
+ languageName: node
+ linkType: hard
+
"tmp@npm:^0.0.33":
version: 0.0.33
resolution: "tmp@npm:0.0.33"
@@ -13080,16 +12708,16 @@ __metadata:
linkType: hard
"token-types@npm:^6.0.0":
- version: 6.0.0
- resolution: "token-types@npm:6.0.0"
+ version: 6.0.3
+ resolution: "token-types@npm:6.0.3"
dependencies:
"@tokenizer/token": "npm:^0.3.0"
ieee754: "npm:^1.2.1"
- checksum: 10c0/5bf5eba51d63f71f301659ff70ce10ca43e7038364883437d8b4541cc98377e3e56109b11720e25fe51047014efaccdff90eaf6de9a78270483578814b838ab9
+ checksum: 10c0/9fbd60754329cef6a793a81e62cb81880a52619b05c3ee96bb8b0f698e8f515c0e3d3159fc3b9cdec55271b6b839cba63cd6d387be4b4f63c1e4f222eb34a858
languageName: node
linkType: hard
-"tough-cookie@npm:^5.0.0, tough-cookie@npm:^5.1.1":
+"tough-cookie@npm:^5.1.1, tough-cookie@npm:^5.1.2":
version: 5.1.2
resolution: "tough-cookie@npm:5.1.2"
dependencies:
@@ -13128,7 +12756,7 @@ __metadata:
languageName: node
linkType: hard
-"ts-api-utils@npm:^2.0.1":
+"ts-api-utils@npm:^2.1.0":
version: 2.1.0
resolution: "ts-api-utils@npm:2.1.0"
peerDependencies:
@@ -13138,8 +12766,8 @@ __metadata:
linkType: hard
"tsconfck@npm:^3.0.3":
- version: 3.1.5
- resolution: "tsconfck@npm:3.1.5"
+ version: 3.1.6
+ resolution: "tsconfck@npm:3.1.6"
peerDependencies:
typescript: ^5.0.0
peerDependenciesMeta:
@@ -13147,7 +12775,7 @@ __metadata:
optional: true
bin:
tsconfck: bin/tsconfck.js
- checksum: 10c0/9b62cd85d5702aa23ea50ea578d7124f3d59cc4518fcc7eacc04f4f9c9c481f720738ff8351bd4472247c0723a17dfd01af95a5b60ad623cdb8727fbe4881847
+ checksum: 10c0/269c3c513540be44844117bb9b9258fe6f8aeab026d32aeebf458d5299125f330711429dbb556dbf125a0bc25f4a81e6c24ac96de2740badd295c3fb400f66c4
languageName: node
linkType: hard
@@ -13174,16 +12802,16 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.2":
+"tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1":
version: 2.8.1
resolution: "tslib@npm:2.8.1"
checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
languageName: node
linkType: hard
-"tsx@npm:^4.4.0":
- version: 4.19.4
- resolution: "tsx@npm:4.19.4"
+"tsx@npm:^4.19.4":
+ version: 4.20.3
+ resolution: "tsx@npm:4.20.3"
dependencies:
esbuild: "npm:~0.25.0"
fsevents: "npm:~2.3.3"
@@ -13193,7 +12821,7 @@ __metadata:
optional: true
bin:
tsx: dist/cli.mjs
- checksum: 10c0/f7b8d44362343fbde1f2ecc9832d243a450e1168dd09702a545ebe5f699aa6912e45b431a54b885466db414cceda48e5067b36d182027c43b2c02a4f99d8721e
+ checksum: 10c0/6ff0d91ed046ec743fac7ed60a07f3c025e5b71a5aaf58f3d2a6b45e4db114c83e59ebbb078c8e079e48d3730b944a02bc0de87695088aef4ec8bbc705dc791b
languageName: node
linkType: hard
@@ -13217,58 +12845,58 @@ __metadata:
languageName: node
linkType: hard
-"turbo-darwin-64@npm:2.5.2":
- version: 2.5.2
- resolution: "turbo-darwin-64@npm:2.5.2"
+"turbo-darwin-64@npm:2.5.5":
+ version: 2.5.5
+ resolution: "turbo-darwin-64@npm:2.5.5"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"turbo-darwin-arm64@npm:2.5.2":
- version: 2.5.2
- resolution: "turbo-darwin-arm64@npm:2.5.2"
+"turbo-darwin-arm64@npm:2.5.5":
+ version: 2.5.5
+ resolution: "turbo-darwin-arm64@npm:2.5.5"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"turbo-linux-64@npm:2.5.2":
- version: 2.5.2
- resolution: "turbo-linux-64@npm:2.5.2"
+"turbo-linux-64@npm:2.5.5":
+ version: 2.5.5
+ resolution: "turbo-linux-64@npm:2.5.5"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
-"turbo-linux-arm64@npm:2.5.2":
- version: 2.5.2
- resolution: "turbo-linux-arm64@npm:2.5.2"
+"turbo-linux-arm64@npm:2.5.5":
+ version: 2.5.5
+ resolution: "turbo-linux-arm64@npm:2.5.5"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
-"turbo-windows-64@npm:2.5.2":
- version: 2.5.2
- resolution: "turbo-windows-64@npm:2.5.2"
+"turbo-windows-64@npm:2.5.5":
+ version: 2.5.5
+ resolution: "turbo-windows-64@npm:2.5.5"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
-"turbo-windows-arm64@npm:2.5.2":
- version: 2.5.2
- resolution: "turbo-windows-arm64@npm:2.5.2"
+"turbo-windows-arm64@npm:2.5.5":
+ version: 2.5.5
+ resolution: "turbo-windows-arm64@npm:2.5.5"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"turbo@npm:^2.1.0":
- version: 2.5.2
- resolution: "turbo@npm:2.5.2"
+"turbo@npm:^2.5.3":
+ version: 2.5.5
+ resolution: "turbo@npm:2.5.5"
dependencies:
- turbo-darwin-64: "npm:2.5.2"
- turbo-darwin-arm64: "npm:2.5.2"
- turbo-linux-64: "npm:2.5.2"
- turbo-linux-arm64: "npm:2.5.2"
- turbo-windows-64: "npm:2.5.2"
- turbo-windows-arm64: "npm:2.5.2"
+ turbo-darwin-64: "npm:2.5.5"
+ turbo-darwin-arm64: "npm:2.5.5"
+ turbo-linux-64: "npm:2.5.5"
+ turbo-linux-arm64: "npm:2.5.5"
+ turbo-windows-64: "npm:2.5.5"
+ turbo-windows-arm64: "npm:2.5.5"
dependenciesMeta:
turbo-darwin-64:
optional: true
@@ -13284,7 +12912,7 @@ __metadata:
optional: true
bin:
turbo: bin/turbo
- checksum: 10c0/3eed6eba8bace18ed767785c83cd572985214e79d267f3eb631b2c147e941203746b241869fe629776704d3e69c37da90c5356c3b9506e08c468c9cab52f120c
+ checksum: 10c0/f51ec295286b4126fee2a5020754126ccff8d062332599aeb2ad26edabd1847bc8c535f81cd4fa3aedcca9fd47e70c4effe3d38cbbac487ceed2db393e89fb0f
languageName: node
linkType: hard
@@ -13339,10 +12967,17 @@ __metadata:
languageName: node
linkType: hard
-"type-fest@npm:^4.0.0, type-fest@npm:^4.26.1":
- version: 4.40.1
- resolution: "type-fest@npm:4.40.1"
- checksum: 10c0/590cb7d4dcd3da83efe49b5b52cd041661f6fa29f18cb76650fe1fdeb4090688e92955656e9d981e606abb13d25c0418be8c6c6504d80e87fe18dc9ca0888392
+"type-fest@npm:^3.8.0":
+ version: 3.13.1
+ resolution: "type-fest@npm:3.13.1"
+ checksum: 10c0/547d22186f73a8c04590b70dcf63baff390078c75ea8acd366bbd510fd0646e348bd1970e47ecf795b7cff0b41d26e9c475c1fedd6ef5c45c82075fbf916b629
+ languageName: node
+ linkType: hard
+
+"type-fest@npm:^4.0.0, type-fest@npm:^4.26.1, type-fest@npm:^4.41.0":
+ version: 4.41.0
+ resolution: "type-fest@npm:4.41.0"
+ checksum: 10c0/f5ca697797ed5e88d33ac8f1fec21921839871f808dc59345c9cf67345bfb958ce41bd821165dbf3ae591cedec2bf6fe8882098dfdd8dc54320b859711a2c1e4
languageName: node
linkType: hard
@@ -13357,16 +12992,6 @@ __metadata:
languageName: node
linkType: hard
-"type-is@npm:~1.6.18":
- version: 1.6.18
- resolution: "type-is@npm:1.6.18"
- dependencies:
- media-typer: "npm:0.3.0"
- mime-types: "npm:~2.1.24"
- checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d
- languageName: node
- linkType: hard
-
"typed-array-buffer@npm:^1.0.3":
version: 1.0.3
resolution: "typed-array-buffer@npm:1.0.3"
@@ -13434,21 +13059,22 @@ __metadata:
languageName: node
linkType: hard
-"typescript-eslint@npm:^8.28.0":
- version: 8.31.1
- resolution: "typescript-eslint@npm:8.31.1"
+"typescript-eslint@npm:^8.32.0":
+ version: 8.37.0
+ resolution: "typescript-eslint@npm:8.37.0"
dependencies:
- "@typescript-eslint/eslint-plugin": "npm:8.31.1"
- "@typescript-eslint/parser": "npm:8.31.1"
- "@typescript-eslint/utils": "npm:8.31.1"
+ "@typescript-eslint/eslint-plugin": "npm:8.37.0"
+ "@typescript-eslint/parser": "npm:8.37.0"
+ "@typescript-eslint/typescript-estree": "npm:8.37.0"
+ "@typescript-eslint/utils": "npm:8.37.0"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
- checksum: 10c0/58c096b96cb2262df3e3b52f06c0fc2020dc9f9d34b8a3d5331b0c7895e949ba1de43b7406d34b3cface2d1634f7e947e4c7759bf33819c92f8fb2bd67681bf1
+ checksum: 10c0/c73adb207d800dcf72ec33bf59b30095d3b441853f9bd795500e32530bf539cba51891b96616ff68193fae1f95eca5d404b3d974f323cf1a671a2b75513a4076
languageName: node
linkType: hard
-"typescript@npm:>=3 < 6, typescript@npm:^5.7.3":
+"typescript@npm:>=3 < 6, typescript@npm:^5.8.3":
version: 5.8.3
resolution: "typescript@npm:5.8.3"
bin:
@@ -13458,7 +13084,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.7.3#optional!builtin":
+"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.8.3#optional!builtin":
version: 5.8.3
resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"
bin:
@@ -13476,8 +13102,8 @@ __metadata:
linkType: hard
"ua-parser-js@npm:^2.0.2":
- version: 2.0.3
- resolution: "ua-parser-js@npm:2.0.3"
+ version: 2.0.4
+ resolution: "ua-parser-js@npm:2.0.4"
dependencies:
"@types/node-fetch": "npm:^2.6.12"
detect-europe-js: "npm:^0.1.2"
@@ -13486,7 +13112,7 @@ __metadata:
ua-is-frozen: "npm:^0.1.2"
bin:
ua-parser-js: script/cli.js
- checksum: 10c0/0fd098a19c11ecddf35f65a9a86a44e4d6147fbed4ad1813d0142c55d305ba2220f41b48c5a60f082552ff4a93bbb5edb1b24de0af45271d1735b63794fef1e0
+ checksum: 10c0/ddcbccf0f1ed6c12ddfdbd48047d2761f047b0041e0e65935698120d05e970a176cfa3655b6d82c7ad56603e8e940fd1b31806260732c3466986790e5bf16162
languageName: node
linkType: hard
@@ -13532,6 +13158,20 @@ __metadata:
languageName: node
linkType: hard
+"undici-types@npm:~7.8.0":
+ version: 7.8.0
+ resolution: "undici-types@npm:7.8.0"
+ checksum: 10c0/9d9d246d1dc32f318d46116efe3cfca5a72d4f16828febc1918d94e58f6ffcf39c158aa28bf5b4fc52f410446bc7858f35151367bd7a49f21746cab6497b709b
+ languageName: node
+ linkType: hard
+
+"undici@npm:^7.10.0":
+ version: 7.12.0
+ resolution: "undici@npm:7.12.0"
+ checksum: 10c0/27aada7bd8d2588f146a2ba554f2f6b7593f9c2d14bf3797bbc7b74825d9bee38eb3ab61e2d0ee01bb827a9ac8017eb2991cb4f06d9ed9971c8a142d8306fbab
+ languageName: node
+ linkType: hard
+
"unicorn-magic@npm:^0.1.0":
version: 0.1.0
resolution: "unicorn-magic@npm:0.1.0"
@@ -13614,7 +13254,7 @@ __metadata:
languageName: node
linkType: hard
-"unpipe@npm:1.0.0, unpipe@npm:~1.0.0":
+"unpipe@npm:1.0.0":
version: 1.0.0
resolution: "unpipe@npm:1.0.0"
checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c
@@ -13658,22 +13298,6 @@ __metadata:
languageName: node
linkType: hard
-"util@npm:^0.10.4":
- version: 0.10.4
- resolution: "util@npm:0.10.4"
- dependencies:
- inherits: "npm:2.0.3"
- checksum: 10c0/d29f6893e406b63b088ce9924da03201df89b31490d4d011f1c07a386ea4b3dbe907464c274023c237da470258e1805d806c7e4009a5974cd6b1d474b675852a
- languageName: node
- linkType: hard
-
-"utils-merge@npm:1.0.1":
- version: 1.0.1
- resolution: "utils-merge@npm:1.0.1"
- checksum: 10c0/02ba649de1b7ca8854bfe20a82f1dfbdda3fb57a22ab4a8972a63a34553cf7aa51bc9081cf7e001b035b88186d23689d69e71b510e610a09a4c66f68aa95b672
- languageName: node
- linkType: hard
-
"uuid@npm:^10.0.0":
version: 10.0.0
resolution: "uuid@npm:10.0.0"
@@ -13707,31 +13331,31 @@ __metadata:
languageName: node
linkType: hard
-"vary@npm:^1, vary@npm:^1.1.2, vary@npm:~1.1.2":
+"vary@npm:^1.1.2":
version: 1.1.2
resolution: "vary@npm:1.1.2"
checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f
languageName: node
linkType: hard
-"vite-node@npm:3.1.2":
- version: 3.1.2
- resolution: "vite-node@npm:3.1.2"
+"vite-node@npm:3.2.4":
+ version: 3.2.4
+ resolution: "vite-node@npm:3.2.4"
dependencies:
cac: "npm:^6.7.14"
- debug: "npm:^4.4.0"
- es-module-lexer: "npm:^1.6.0"
+ debug: "npm:^4.4.1"
+ es-module-lexer: "npm:^1.7.0"
pathe: "npm:^2.0.3"
- vite: "npm:^5.0.0 || ^6.0.0"
+ vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0"
bin:
vite-node: vite-node.mjs
- checksum: 10c0/eb0788b43a241c69ca23ba6cf5ab5226157947938dc4e02247b2008e1fd425e45a347d3caac7d53e0b804beb4c9e97395908fd87c1f23bda1590e1b011c63edb
+ checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b
languageName: node
linkType: hard
-"vite-tsconfig-paths@npm:^4.3.2":
- version: 4.3.2
- resolution: "vite-tsconfig-paths@npm:4.3.2"
+"vite-tsconfig-paths@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "vite-tsconfig-paths@npm:5.1.4"
dependencies:
debug: "npm:^4.1.1"
globrex: "npm:^0.1.2"
@@ -13741,33 +13365,41 @@ __metadata:
peerDependenciesMeta:
vite:
optional: true
- checksum: 10c0/f390ac1d1c3992fc5ac50f9274c1090f8b55ab34a89ea88893db9a6924a3b26c9f64bc1163615150ad100749db73b6b2cf1d57f6cd60df6e762ceb5b8ad30024
+ checksum: 10c0/6228f23155ea25d92b1e1702284cf8dc52ad3c683c5ca691edd5a4c82d2913e7326d00708cef1cbfde9bb226261df0e0a12e03ef1d43b6a92d8f02b483ef37e3
languageName: node
linkType: hard
-"vite@npm:5.4.11":
- version: 5.4.11
- resolution: "vite@npm:5.4.11"
+"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0":
+ version: 7.0.5
+ resolution: "vite@npm:7.0.5"
dependencies:
- esbuild: "npm:^0.21.3"
+ esbuild: "npm:^0.25.0"
+ fdir: "npm:^6.4.6"
fsevents: "npm:~2.3.3"
- postcss: "npm:^8.4.43"
- rollup: "npm:^4.20.0"
+ picomatch: "npm:^4.0.2"
+ postcss: "npm:^8.5.6"
+ rollup: "npm:^4.40.0"
+ tinyglobby: "npm:^0.2.14"
peerDependencies:
- "@types/node": ^18.0.0 || >=20.0.0
- less: "*"
+ "@types/node": ^20.19.0 || >=22.12.0
+ jiti: ">=1.21.0"
+ less: ^4.0.0
lightningcss: ^1.21.0
- sass: "*"
- sass-embedded: "*"
- stylus: "*"
- sugarss: "*"
- terser: ^5.4.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: ">=0.54.8"
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
dependenciesMeta:
fsevents:
optional: true
peerDependenciesMeta:
"@types/node":
optional: true
+ jiti:
+ optional: true
less:
optional: true
lightningcss:
@@ -13782,43 +13414,49 @@ __metadata:
optional: true
terser:
optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
bin:
vite: bin/vite.js
- checksum: 10c0/d536bb7af57dd0eca2a808f95f5ff1d7b7ffb8d86e17c6893087680a0448bd0d15e07475270c8a6de65cb5115592d037130a1dd979dc76bcef8c1dda202a1874
+ checksum: 10c0/95fb7f393adc2d2428e0e033ed4ea599323118f645415c35db3df40bd2c5a2962b0b4c967f35cfb80ca04efb1eb51bdb5f4b63529bb5f9aa3603d9fbeb50543f
languageName: node
linkType: hard
-"vitest@npm:^3.0.0":
- version: 3.1.2
- resolution: "vitest@npm:3.1.2"
- dependencies:
- "@vitest/expect": "npm:3.1.2"
- "@vitest/mocker": "npm:3.1.2"
- "@vitest/pretty-format": "npm:^3.1.2"
- "@vitest/runner": "npm:3.1.2"
- "@vitest/snapshot": "npm:3.1.2"
- "@vitest/spy": "npm:3.1.2"
- "@vitest/utils": "npm:3.1.2"
+"vitest@npm:^3.1.3":
+ version: 3.2.4
+ resolution: "vitest@npm:3.2.4"
+ dependencies:
+ "@types/chai": "npm:^5.2.2"
+ "@vitest/expect": "npm:3.2.4"
+ "@vitest/mocker": "npm:3.2.4"
+ "@vitest/pretty-format": "npm:^3.2.4"
+ "@vitest/runner": "npm:3.2.4"
+ "@vitest/snapshot": "npm:3.2.4"
+ "@vitest/spy": "npm:3.2.4"
+ "@vitest/utils": "npm:3.2.4"
chai: "npm:^5.2.0"
- debug: "npm:^4.4.0"
+ debug: "npm:^4.4.1"
expect-type: "npm:^1.2.1"
magic-string: "npm:^0.30.17"
pathe: "npm:^2.0.3"
+ picomatch: "npm:^4.0.2"
std-env: "npm:^3.9.0"
tinybench: "npm:^2.9.0"
tinyexec: "npm:^0.3.2"
- tinyglobby: "npm:^0.2.13"
- tinypool: "npm:^1.0.2"
+ tinyglobby: "npm:^0.2.14"
+ tinypool: "npm:^1.1.1"
tinyrainbow: "npm:^2.0.0"
- vite: "npm:^5.0.0 || ^6.0.0"
- vite-node: "npm:3.1.2"
+ vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ vite-node: "npm:3.2.4"
why-is-node-running: "npm:^2.3.0"
peerDependencies:
"@edge-runtime/vm": "*"
"@types/debug": ^4.1.12
"@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0
- "@vitest/browser": 3.1.2
- "@vitest/ui": 3.1.2
+ "@vitest/browser": 3.2.4
+ "@vitest/ui": 3.2.4
happy-dom: "*"
jsdom: "*"
peerDependenciesMeta:
@@ -13838,7 +13476,7 @@ __metadata:
optional: true
bin:
vitest: vitest.mjs
- checksum: 10c0/14b9c99812282d88b6e1dafde8cca22b07dcefa0a00d240145cf5cb95b082c287807bd884f417a046992bc74246aaf64662fd07179e60547c9277fbc8986439b
+ checksum: 10c0/5bf53ede3ae6a0e08956d72dab279ae90503f6b5a05298a6a5e6ef47d2fd1ab386aaf48fafa61ed07a0ebfe9e371772f1ccbe5c258dd765206a8218bf2eb79eb
languageName: node
linkType: hard
@@ -13963,7 +13601,7 @@ __metadata:
languageName: node
linkType: hard
-"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18":
+"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19":
version: 1.1.19
resolution: "which-typed-array@npm:1.1.19"
dependencies:
@@ -14143,9 +13781,9 @@ __metadata:
languageName: node
linkType: hard
-"ws@npm:^8.18.0, ws@npm:^8.18.1":
- version: 8.18.2
- resolution: "ws@npm:8.18.2"
+"ws@npm:^8.18.0, ws@npm:^8.18.2":
+ version: 8.18.3
+ resolution: "ws@npm:8.18.3"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ">=5.0.2"
@@ -14154,7 +13792,7 @@ __metadata:
optional: true
utf-8-validate:
optional: true
- checksum: 10c0/4b50f67931b8c6943c893f59c524f0e4905bbd183016cfb0f2b8653aa7f28dad4e456b9d99d285bbb67cca4fedd9ce90dfdfaa82b898a11414ebd66ee99141e4
+ checksum: 10c0/eac918213de265ef7cb3d4ca348b891a51a520d839aa51cdb8ca93d4fa7ff9f6ccb339ccee89e4075324097f0a55157c89fa3f7147bde9d8d7e90335dc087b53
languageName: node
linkType: hard
@@ -14218,22 +13856,11 @@ __metadata:
linkType: hard
"yaml@npm:^2.6.0, yaml@npm:^2.7.0":
- version: 2.7.1
- resolution: "yaml@npm:2.7.1"
+ version: 2.8.0
+ resolution: "yaml@npm:2.8.0"
bin:
yaml: bin.mjs
- checksum: 10c0/ee2126398ab7d1fdde566b4013b68e36930b9e6d8e68b6db356875c99614c10d678b6f45597a145ff6d63814961221fc305bf9242af8bf7450177f8a68537590
- languageName: node
- linkType: hard
-
-"yargonaut@npm:^1.1.4":
- version: 1.1.4
- resolution: "yargonaut@npm:1.1.4"
- dependencies:
- chalk: "npm:^1.1.1"
- figlet: "npm:^1.1.1"
- parent-require: "npm:^1.0.0"
- checksum: 10c0/3d9ece55799075ae7e39b3b0c3aa043aa648cf3326bff9c3fca8d49ad4ffe314a444a8afbd74983132d6b8bc95c3967a6456da078c45599ce4a6f4219d64727f
+ checksum: 10c0/f6f7310cf7264a8107e72c1376f4de37389945d2fb4656f8060eca83f01d2d703f9d1b925dd8f39852a57034fafefde6225409ddd9f22aebfda16c6141b71858
languageName: node
linkType: hard
@@ -14251,7 +13878,14 @@ __metadata:
languageName: node
linkType: hard
-"yargs@npm:17.7.2, yargs@npm:^17.0.0, yargs@npm:^17.5.1, yargs@npm:^17.6.2, yargs@npm:^17.7.2":
+"yargs-parser@npm:^22.0.0":
+ version: 22.0.0
+ resolution: "yargs-parser@npm:22.0.0"
+ checksum: 10c0/cb7ef81759c4271cb1d96b9351dbbc9a9ce35d3e1122d2b739bf6c432603824fa02c67cc12dcef6ea80283379d63495686e8f41cc7b06c6576e792aba4d33e1c
+ languageName: node
+ linkType: hard
+
+"yargs@npm:17.7.2, yargs@npm:^17.0.0, yargs@npm:^17.6.2, yargs@npm:^17.7.2":
version: 17.7.2
resolution: "yargs@npm:17.7.2"
dependencies:
@@ -14281,6 +13915,20 @@ __metadata:
languageName: node
linkType: hard
+"yargs@npm:^18.0.0":
+ version: 18.0.0
+ resolution: "yargs@npm:18.0.0"
+ dependencies:
+ cliui: "npm:^9.0.1"
+ escalade: "npm:^3.1.1"
+ get-caller-file: "npm:^2.0.5"
+ string-width: "npm:^7.2.0"
+ y18n: "npm:^5.0.5"
+ yargs-parser: "npm:^22.0.0"
+ checksum: 10c0/bf290e4723876ea9c638c786a5c42ac28e03c9ca2325e1424bf43b94e5876456292d3ed905b853ebbba6daf43ed29e772ac2a6b3c5fb1b16533245d6211778f3
+ languageName: node
+ linkType: hard
+
"yauzl@npm:^2.10.0":
version: 2.10.0
resolution: "yauzl@npm:2.10.0"
@@ -14298,7 +13946,7 @@ __metadata:
languageName: node
linkType: hard
-"yocto-queue@npm:^1.0.0":
+"yocto-queue@npm:^1.0.0, yocto-queue@npm:^1.1.1":
version: 1.2.1
resolution: "yocto-queue@npm:1.2.1"
checksum: 10c0/5762caa3d0b421f4bdb7a1926b2ae2189fc6e4a14469258f183600028eb16db3e9e0306f46e8ebf5a52ff4b81a881f22637afefbef5399d6ad440824e9b27f9f
@@ -14312,18 +13960,9 @@ __metadata:
languageName: node
linkType: hard
-"zod-to-json-schema@npm:^3.24.1":
- version: 3.24.5
- resolution: "zod-to-json-schema@npm:3.24.5"
- peerDependencies:
- zod: ^3.24.1
- checksum: 10c0/0745b94ba53e652d39f262641cdeb2f75d24339fb6076a38ce55bcf53d82dfaea63adf524ebc5f658681005401687f8e9551c4feca7c4c882e123e66091dfb90
- languageName: node
- linkType: hard
-
-"zod@npm:^3.23.8, zod@npm:^3.24.1, zod@npm:^3.24.2":
- version: 3.24.4
- resolution: "zod@npm:3.24.4"
- checksum: 10c0/ab3112f017562180a41a0f83d870b333677f7d6b77f106696c56894567051b91154714a088149d8387a4f50806a2520efcb666f108cd384a35c236a191186d91
+"zod@npm:^3.24.1":
+ version: 3.25.76
+ resolution: "zod@npm:3.25.76"
+ checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c
languageName: node
linkType: hard