From 72703b2677f4a4abb8dfb09d9d38e7b8fa416254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Wed, 15 Apr 2026 15:40:27 +0200 Subject: [PATCH 1/4] chore: migrate formatter from biome to oxfmt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace Biome with Oxfmt. Oxfmt is configured for 120 column width, 4-space indent, single quotes, trailing commas, LF line endings — matching the previous Biome setup. Markdown/MDX and release-managed files (CHANGELOGs, READMEs, package.json) stay in the ignore list so oxfmt doesn't touch docs or generated content. Applies the resulting formatter pass across packages, test, and docs. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/test-ci.yml | 2 +- .oxfmtrc.json | 27 ++ biome.json | 28 -- docs/tsconfig.json | 12 +- package.json | 10 +- packages/basic-crawler/test/tsconfig.json | 10 +- packages/basic-crawler/tsconfig.build.json | 12 +- packages/basic-crawler/tsconfig.json | 4 +- .../src/internals/browser-crawler.ts | 8 +- packages/browser-crawler/tsconfig.build.json | 12 +- packages/browser-crawler/tsconfig.json | 4 +- .../src/abstract-classes/browser-plugin.ts | 7 +- packages/browser-pool/test/tsconfig.json | 12 +- packages/browser-pool/tsconfig.build.json | 12 +- packages/browser-pool/tsconfig.json | 4 +- packages/cheerio-crawler/test/tsconfig.json | 10 +- packages/cheerio-crawler/tsconfig.build.json | 12 +- packages/cheerio-crawler/tsconfig.json | 4 +- packages/cli/tsconfig.build.json | 12 +- packages/cli/tsconfig.json | 4 +- packages/core/src/recoverable_state.ts | 5 +- packages/core/src/router.ts | 5 +- packages/core/src/storages/dataset.ts | 6 +- packages/core/test/tsconfig.json | 10 +- packages/core/tsconfig.build.json | 12 +- packages/core/tsconfig.json | 4 +- packages/crawlee/tsconfig.build.json | 12 +- packages/crawlee/tsconfig.json | 4 +- .../got-scraping-client/tsconfig.build.json | 12 +- packages/got-scraping-client/tsconfig.json | 4 +- packages/http-client/tsconfig.build.json | 12 +- packages/http-client/tsconfig.json | 4 +- .../src/internals/http-crawler.ts | 6 +- packages/http-crawler/tsconfig.build.json | 12 +- packages/http-crawler/tsconfig.json | 4 +- packages/impit-client/tsconfig.build.json | 12 +- packages/impit-client/tsconfig.json | 4 +- packages/jsdom-crawler/tsconfig.build.json | 12 +- packages/jsdom-crawler/tsconfig.json | 4 +- packages/linkedom-crawler/tsconfig.build.json | 12 +- packages/linkedom-crawler/tsconfig.json | 4 +- .../src/resource-clients/key-value-store.ts | 4 +- packages/memory-storage/test/tsconfig.json | 10 +- packages/memory-storage/tsconfig.build.json | 12 +- packages/memory-storage/tsconfig.json | 4 +- .../internals/adaptive-playwright-crawler.ts | 26 +- .../src/internals/playwright-crawler.ts | 19 +- .../playwright-crawler/tsconfig.build.json | 12 +- packages/playwright-crawler/tsconfig.json | 4 +- .../src/internals/puppeteer-crawler.ts | 19 +- .../puppeteer-crawler/tsconfig.build.json | 12 +- packages/puppeteer-crawler/tsconfig.json | 4 +- packages/stagehand-crawler/src/index.ts | 5 +- .../src/internals/stagehand-crawler.ts | 24 +- .../stagehand-crawler/tsconfig.build.json | 12 +- packages/stagehand-crawler/tsconfig.json | 4 +- packages/templates/.eslintrc.json | 14 +- packages/templates/manifest.json | 280 ++++++++-------- .../templates/camoufox-ts/tsconfig.json | 20 +- .../templates/cheerio-ts/tsconfig.json | 20 +- .../templates/empty-ts/tsconfig.json | 20 +- .../getting-started-ts/tsconfig.json | 20 +- .../templates/playwright-ts/tsconfig.json | 20 +- .../templates/puppeteer-ts/tsconfig.json | 20 +- packages/templates/tsconfig.build.json | 12 +- packages/templates/tsconfig.json | 4 +- packages/types/tsconfig.build.json | 12 +- packages/types/tsconfig.json | 4 +- .../utils/src/internals/open_graph_parser.ts | 15 +- packages/utils/test/tsconfig.json | 10 +- packages/utils/tsconfig.build.json | 12 +- packages/utils/tsconfig.json | 4 +- .../anonymize-proxy-sugar.test.ts | 15 +- test/browser-pool/test.html | 4 +- .../adaptive_playwright_crawler.test.ts | 118 +++---- test/core/crawlers/basic_crawler.test.ts | 94 +++--- test/core/crawlers/playwright_crawler.test.ts | 78 ++--- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.eslintrc.json | 22 +- .../actor/tsconfig.json | 18 +- .../actor/.actor/actor.json | 10 +- .../cheerio-default-ts/actor/.eslintrc.json | 12 +- .../cheerio-default-ts/actor/tsconfig.json | 16 +- .../cheerio-default/actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../cheerio-impit-ts/actor/.actor/actor.json | 10 +- .../e2e/cheerio-impit-ts/actor/.eslintrc.json | 22 +- test/e2e/cheerio-impit-ts/actor/tsconfig.json | 20 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../cheerio-page-info/actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.eslintrc.json | 12 +- .../actor/tsconfig.json | 16 +- .../actor/.actor/actor.json | 10 +- test/e2e/input-json5/actor/.actor/actor.json | 10 +- .../jsdom-default-ts/actor/.actor/actor.json | 10 +- .../e2e/jsdom-default-ts/actor/.eslintrc.json | 12 +- test/e2e/jsdom-default-ts/actor/tsconfig.json | 16 +- .../jsdom-react-ts/actor/.actor/actor.json | 10 +- test/e2e/jsdom-react-ts/actor/.eslintrc.json | 12 +- test/e2e/jsdom-react-ts/actor/tsconfig.json | 16 +- .../actor/.actor/actor.json | 10 +- .../linkedom-default-ts/actor/.eslintrc.json | 12 +- .../linkedom-default-ts/actor/tsconfig.json | 16 +- test/e2e/migration/actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../proxy-rotation/actor/.actor/actor.json | 10 +- .../puppeteer-default/actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../actor/.actor/actor.json | 10 +- .../session-rotation/actor/.actor/actor.json | 10 +- .../stagehand-claude/actor/.actor/actor.json | 14 +- .../actor/.actor/actor.json | 14 +- .../actor/.actor/actor.json | 10 +- test/e2e/tsconfig.json | 16 +- test/tsconfig.json | 46 +-- yarn.lock | 312 ++++++++++++------ 143 files changed, 1264 insertions(+), 1163 deletions(-) create mode 100644 .oxfmtrc.json delete mode 100644 biome.json diff --git a/.github/workflows/test-ci.yml b/.github/workflows/test-ci.yml index 4233736a1bf6..89307e2db0a0 100644 --- a/.github/workflows/test-ci.yml +++ b/.github/workflows/test-ci.yml @@ -173,7 +173,7 @@ jobs: - name: ESLint run: yarn lint - - name: Biome format + - name: Oxfmt format check run: yarn format:check release_next: diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 000000000000..498b10256503 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxfmt/configuration_schema.json", + "printWidth": 120, + "tabWidth": 4, + "useTabs": false, + "singleQuote": true, + "semi": true, + "trailingComma": "all", + "quoteProps": "preserve", + "endOfLine": "lf", + "ignorePatterns": [ + "**/node_modules", + "**/dist", + "**/coverage", + "**/.turbo", + "**/website/build", + "**/website/.docusaurus", + "**/*.d.ts", + "**/package.json", + "**/lerna.json", + "**/CHANGELOG.md", + "**/README.md", + "**/*.md", + "**/*.mdx", + "scripts/actions/docker-images/state.json" + ] +} diff --git a/biome.json b/biome.json deleted file mode 100644 index 8c23acdb00cb..000000000000 --- a/biome.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "formatter": { - "includes": [ - "**", - "!**/website/**", - "!**/packages/**/*/dist/**", - "!**/package.json", - "!**/lerna.json", - "!**/scripts/actions/docker-images/state.json" - ], - "formatWithErrors": true - }, - "javascript": { - "formatter": { - "quoteStyle": "single", - "semicolons": "always", - "trailingCommas": "all", - "lineWidth": 120, - "indentStyle": "space", - "indentWidth": 4, - "quoteProperties": "preserve", - "lineEnding": "lf" - } - }, - "linter": { - "enabled": false - } -} diff --git a/docs/tsconfig.json b/docs/tsconfig.json index 3340498019b6..68a912f0b368 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -1,8 +1,8 @@ { - "extends": "../tsconfig.build.json", - "include": ["./**/*.ts"], - "compilerOptions": { - "lib": ["ES2022", "DOM.AsyncIterable"], - "noUnusedLocals": false - } + "extends": "../tsconfig.build.json", + "include": ["./**/*.ts"], + "compilerOptions": { + "lib": ["ES2022", "DOM.AsyncIterable"], + "noUnusedLocals": false + } } diff --git a/package.json b/package.json index 973550f7ad49..1d8017c3c58f 100644 --- a/package.json +++ b/package.json @@ -51,15 +51,14 @@ "release:pin-versions": "turbo run copy -- -- --pin-versions", "lint": "eslint \"packages/**/*.ts\" \"test/**/*.ts\"", "lint:fix": "eslint \"packages/**/*.ts\" \"test/**/*.{ts,mjs}\" --fix", - "format": "biome format --write .", - "format:check": "biome format .", + "format": "oxfmt packages test docs --write", + "format:check": "oxfmt packages test docs", "prepare": "husky" }, "devDependencies": { "@apify/eslint-config": "^1.0.0", "@apify/log": "^2.5.18", - "@apify/tsconfig": "^0.1.1", - "@biomejs/biome": "^2.3.11", + "@apify/tsconfig": "^0.1.2", "@commitlint/config-conventional": "^20.0.0", "@playwright/browser-chromium": "1.58.1", "@playwright/browser-firefox": "1.58.1", @@ -107,6 +106,7 @@ "lerna": "^9.0.0", "lint-staged": "^16.0.0", "nock": "^14.0.10", + "oxfmt": "^0.45.0", "playwright": "1.58.1", "portastic": "^1.0.1", "proxy": "^2.2.0", @@ -120,7 +120,7 @@ "vitest": "^4.1.0-beta.6" }, "lint-staged": { - "**/*.{js,ts,mjs,mts,cjs,cts,json,css}": "biome format --write --no-errors-on-unmatched" + "*.ts": "oxfmt --write --no-error-on-unmatched-pattern" }, "packageManager": "yarn@4.10.3", "volta": { diff --git a/packages/basic-crawler/test/tsconfig.json b/packages/basic-crawler/test/tsconfig.json index bf55f9516b7d..eb8cbab58123 100644 --- a/packages/basic-crawler/test/tsconfig.json +++ b/packages/basic-crawler/test/tsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../../../tsconfig.json", - "include": ["**/*", "../../**/*"], - "compilerOptions": { - "types": ["vitest/globals"] - } + "extends": "../../../tsconfig.json", + "include": ["**/*", "../../**/*"], + "compilerOptions": { + "types": ["vitest/globals"] + } } diff --git a/packages/basic-crawler/tsconfig.build.json b/packages/basic-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/basic-crawler/tsconfig.build.json +++ b/packages/basic-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/basic-crawler/tsconfig.json b/packages/basic-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/basic-crawler/tsconfig.json +++ b/packages/basic-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/browser-crawler/src/internals/browser-crawler.ts b/packages/browser-crawler/src/internals/browser-crawler.ts index 8793468a427b..7d1d5b5ca21a 100644 --- a/packages/browser-crawler/src/internals/browser-crawler.ts +++ b/packages/browser-crawler/src/internals/browser-crawler.ts @@ -107,10 +107,10 @@ export interface BrowserCrawlerOptions< __BrowserControllerReturn extends BrowserController = ReturnType<__BrowserPlugins[number]['createController']>, __LaunchContextReturn extends LaunchContext = ReturnType<__BrowserPlugins[number]['createLaunchContext']>, > extends Omit< - BasicCrawlerOptions, - // Overridden with browser context - 'requestHandler' | 'failedRequestHandler' | 'errorHandler' - > { + BasicCrawlerOptions, + // Overridden with browser context + 'requestHandler' | 'failedRequestHandler' | 'errorHandler' +> { launchContext?: BrowserLaunchContext; /** diff --git a/packages/browser-crawler/tsconfig.build.json b/packages/browser-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/browser-crawler/tsconfig.build.json +++ b/packages/browser-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/browser-crawler/tsconfig.json b/packages/browser-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/browser-crawler/tsconfig.json +++ b/packages/browser-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/browser-pool/src/abstract-classes/browser-plugin.ts b/packages/browser-pool/src/abstract-classes/browser-plugin.ts index bc75ff2fde41..f6cfe77bd8c1 100644 --- a/packages/browser-pool/src/abstract-classes/browser-plugin.ts +++ b/packages/browser-pool/src/abstract-classes/browser-plugin.ts @@ -90,11 +90,8 @@ export interface CreateLaunchContextOptions< NewPageOptions = Parameters[0], NewPageResult = UnwrapPromise>, > extends Partial< - Omit< - LaunchContextOptions, - 'browserPlugin' - > - > {} + Omit, 'browserPlugin'> +> {} /** * The `BrowserPlugin` serves two purposes. First, it is the base class that diff --git a/packages/browser-pool/test/tsconfig.json b/packages/browser-pool/test/tsconfig.json index 64962b1ced00..ea894b0bcc76 100644 --- a/packages/browser-pool/test/tsconfig.json +++ b/packages/browser-pool/test/tsconfig.json @@ -1,8 +1,8 @@ { - "extends": "../tsconfig.json", - "compilerOptions": { - "noEmit": true, - "incremental": false, - "types": ["vitest/globals"] - } + "extends": "../tsconfig.json", + "compilerOptions": { + "noEmit": true, + "incremental": false, + "types": ["vitest/globals"] + } } diff --git a/packages/browser-pool/tsconfig.build.json b/packages/browser-pool/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/browser-pool/tsconfig.build.json +++ b/packages/browser-pool/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/browser-pool/tsconfig.json b/packages/browser-pool/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/browser-pool/tsconfig.json +++ b/packages/browser-pool/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/cheerio-crawler/test/tsconfig.json b/packages/cheerio-crawler/test/tsconfig.json index bf55f9516b7d..eb8cbab58123 100644 --- a/packages/cheerio-crawler/test/tsconfig.json +++ b/packages/cheerio-crawler/test/tsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../../../tsconfig.json", - "include": ["**/*", "../../**/*"], - "compilerOptions": { - "types": ["vitest/globals"] - } + "extends": "../../../tsconfig.json", + "include": ["**/*", "../../**/*"], + "compilerOptions": { + "types": ["vitest/globals"] + } } diff --git a/packages/cheerio-crawler/tsconfig.build.json b/packages/cheerio-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/cheerio-crawler/tsconfig.build.json +++ b/packages/cheerio-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/cheerio-crawler/tsconfig.json b/packages/cheerio-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/cheerio-crawler/tsconfig.json +++ b/packages/cheerio-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/cli/tsconfig.build.json b/packages/cli/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/cli/tsconfig.build.json +++ b/packages/cli/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/core/src/recoverable_state.ts b/packages/core/src/recoverable_state.ts index cff79a8d0f89..76e28eb8a161 100644 --- a/packages/core/src/recoverable_state.ts +++ b/packages/core/src/recoverable_state.ts @@ -28,8 +28,9 @@ export interface RecoverableStatePersistenceOptions { /** * Options for configuring the RecoverableState */ -export interface RecoverableStateOptions> - extends RecoverableStatePersistenceOptions { +export interface RecoverableStateOptions< + TStateModel = Record, +> extends RecoverableStatePersistenceOptions { /** * The default state used if no persisted state is found. * A deep copy is made each time the state is used. diff --git a/packages/core/src/router.ts b/packages/core/src/router.ts index 25a17b503d64..4d0897389746 100644 --- a/packages/core/src/router.ts +++ b/packages/core/src/router.ts @@ -7,8 +7,9 @@ import type { Awaitable } from './typedefs.js'; const defaultRoute = Symbol('default-route'); -export interface RouterHandler = CrawlingContext> - extends Router { +export interface RouterHandler< + Context extends Omit = CrawlingContext, +> extends Router { (ctx: Context): Awaitable; } diff --git a/packages/core/src/storages/dataset.ts b/packages/core/src/storages/dataset.ts index 8d0e10f7c51e..697e21554096 100644 --- a/packages/core/src/storages/dataset.ts +++ b/packages/core/src/storages/dataset.ts @@ -150,8 +150,10 @@ export interface DatasetExportOptions extends Omit { +export interface DatasetIteratorOptions extends Omit< + DatasetDataOptions, + 'offset' | 'limit' | 'clean' | 'skipHidden' | 'skipEmpty' +> { /** @internal */ offset?: number; diff --git a/packages/core/test/tsconfig.json b/packages/core/test/tsconfig.json index bf55f9516b7d..eb8cbab58123 100644 --- a/packages/core/test/tsconfig.json +++ b/packages/core/test/tsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../../../tsconfig.json", - "include": ["**/*", "../../**/*"], - "compilerOptions": { - "types": ["vitest/globals"] - } + "extends": "../../../tsconfig.json", + "include": ["**/*", "../../**/*"], + "compilerOptions": { + "types": ["vitest/globals"] + } } diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/core/tsconfig.build.json +++ b/packages/core/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/crawlee/tsconfig.build.json b/packages/crawlee/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/crawlee/tsconfig.build.json +++ b/packages/crawlee/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/crawlee/tsconfig.json b/packages/crawlee/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/crawlee/tsconfig.json +++ b/packages/crawlee/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/got-scraping-client/tsconfig.build.json b/packages/got-scraping-client/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/got-scraping-client/tsconfig.build.json +++ b/packages/got-scraping-client/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/got-scraping-client/tsconfig.json b/packages/got-scraping-client/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/got-scraping-client/tsconfig.json +++ b/packages/got-scraping-client/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/http-client/tsconfig.build.json b/packages/http-client/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/http-client/tsconfig.build.json +++ b/packages/http-client/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/http-client/tsconfig.json b/packages/http-client/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/http-client/tsconfig.json +++ b/packages/http-client/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/http-crawler/src/internals/http-crawler.ts b/packages/http-crawler/src/internals/http-crawler.ts index beb1024093fe..31eaacf25af8 100644 --- a/packages/http-crawler/src/internals/http-crawler.ts +++ b/packages/http-crawler/src/internals/http-crawler.ts @@ -222,8 +222,10 @@ export interface InternalHttpCrawlingContext< parseWithCheerio(selector?: string, timeoutMs?: number): Promise; } -export interface HttpCrawlingContext - extends InternalHttpCrawlingContext {} +export interface HttpCrawlingContext< + UserData extends Dictionary = any, + JSONData extends JsonValue = any, +> extends InternalHttpCrawlingContext {} export type HttpRequestHandler< UserData extends Dictionary = any, // with default to Dictionary we cant use a typed router in untyped crawler diff --git a/packages/http-crawler/tsconfig.build.json b/packages/http-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/http-crawler/tsconfig.build.json +++ b/packages/http-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/http-crawler/tsconfig.json b/packages/http-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/http-crawler/tsconfig.json +++ b/packages/http-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/impit-client/tsconfig.build.json b/packages/impit-client/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/impit-client/tsconfig.build.json +++ b/packages/impit-client/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/impit-client/tsconfig.json b/packages/impit-client/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/impit-client/tsconfig.json +++ b/packages/impit-client/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/jsdom-crawler/tsconfig.build.json b/packages/jsdom-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/jsdom-crawler/tsconfig.build.json +++ b/packages/jsdom-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/jsdom-crawler/tsconfig.json b/packages/jsdom-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/jsdom-crawler/tsconfig.json +++ b/packages/jsdom-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/linkedom-crawler/tsconfig.build.json b/packages/linkedom-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/linkedom-crawler/tsconfig.build.json +++ b/packages/linkedom-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/linkedom-crawler/tsconfig.json b/packages/linkedom-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/linkedom-crawler/tsconfig.json +++ b/packages/linkedom-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } 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 33073c5d0c6e..1e980eddc700 100644 --- a/packages/memory-storage/src/resource-clients/key-value-store.ts +++ b/packages/memory-storage/src/resource-clients/key-value-store.ts @@ -422,9 +422,7 @@ export class KeyValueStoreClient extends BaseClient { s.instance(ArrayBuffer), s.typedArray(), // disabling validation will make shapeshift only check the object given is an actual object, not null, nor array - s - .object({}) - .setValidationEnabled(false), + s.object({}).setValidationEnabled(false), ]), contentType: s.string().lengthGreaterThan(0).optional(), }).parse(record); diff --git a/packages/memory-storage/test/tsconfig.json b/packages/memory-storage/test/tsconfig.json index bf55f9516b7d..eb8cbab58123 100644 --- a/packages/memory-storage/test/tsconfig.json +++ b/packages/memory-storage/test/tsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../../../tsconfig.json", - "include": ["**/*", "../../**/*"], - "compilerOptions": { - "types": ["vitest/globals"] - } + "extends": "../../../tsconfig.json", + "include": ["**/*", "../../**/*"], + "compilerOptions": { + "types": ["vitest/globals"] + } } diff --git a/packages/memory-storage/tsconfig.build.json b/packages/memory-storage/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/memory-storage/tsconfig.build.json +++ b/packages/memory-storage/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/memory-storage/tsconfig.json b/packages/memory-storage/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/memory-storage/tsconfig.json +++ b/packages/memory-storage/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/playwright-crawler/src/internals/adaptive-playwright-crawler.ts b/packages/playwright-crawler/src/internals/adaptive-playwright-crawler.ts index c61a0836e939..0008d92bd7fb 100644 --- a/packages/playwright-crawler/src/internals/adaptive-playwright-crawler.ts +++ b/packages/playwright-crawler/src/internals/adaptive-playwright-crawler.ts @@ -102,8 +102,9 @@ class AdaptivePlaywrightCrawlerStatistics extends Statistics { } } -export interface AdaptivePlaywrightCrawlerContext - extends CrawlingContext { +export interface AdaptivePlaywrightCrawlerContext< + UserData extends Dictionary = Dictionary, +> extends CrawlingContext { request: LoadedRequest>; /** * The HTTP response, either from the HTTP client or from the initial request from playwright's navigation. @@ -153,21 +154,20 @@ export interface AdaptivePlaywrightCrawlerContext; } -interface AdaptiveHook - extends BrowserHook< - Pick & { - page?: Page; - request: Request; - }, - PlaywrightGotoOptions - > {} +interface AdaptiveHook extends BrowserHook< + Pick & { + page?: Page; + request: Request; + }, + PlaywrightGotoOptions +> {} export interface AdaptivePlaywrightCrawlerOptions< ExtendedContext extends AdaptivePlaywrightCrawlerContext = AdaptivePlaywrightCrawlerContext, > extends Omit< - BasicCrawlerOptions, - 'preNavigationHooks' | 'postNavigationHooks' - > { + BasicCrawlerOptions, + 'preNavigationHooks' | 'postNavigationHooks' +> { /** * Async functions that are sequentially evaluated before the navigation. Good for setting additional cookies. * The function accepts a subset of the crawling context. If you attempt to access the `page` property during HTTP-only crawling, diff --git a/packages/playwright-crawler/src/internals/playwright-crawler.ts b/packages/playwright-crawler/src/internals/playwright-crawler.ts index 0fc97caf339e..753f2273be67 100644 --- a/packages/playwright-crawler/src/internals/playwright-crawler.ts +++ b/packages/playwright-crawler/src/internals/playwright-crawler.ts @@ -27,8 +27,7 @@ import type { import { gotoExtended, playwrightUtils } from './utils/playwright-utils.js'; export interface PlaywrightCrawlingContext - extends BrowserCrawlingContext, - PlaywrightContextUtils {} + extends BrowserCrawlingContext, PlaywrightContextUtils {} export interface PlaywrightHook extends BrowserHook {} export type PlaywrightGotoOptions = Parameters[1]; @@ -36,14 +35,14 @@ export interface PlaywrightCrawlerOptions< ContextExtension = Dictionary, ExtendedContext extends PlaywrightCrawlingContext = PlaywrightCrawlingContext & ContextExtension, > extends BrowserCrawlerOptions< - Page, - Response, - PlaywrightController, - PlaywrightCrawlingContext, - ContextExtension, - ExtendedContext, - { browserPlugins: [PlaywrightPlugin] } - > { + Page, + Response, + PlaywrightController, + PlaywrightCrawlingContext, + ContextExtension, + ExtendedContext, + { browserPlugins: [PlaywrightPlugin] } +> { /** * The same options as used by {@apilink launchPlaywright}. */ diff --git a/packages/playwright-crawler/tsconfig.build.json b/packages/playwright-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/playwright-crawler/tsconfig.build.json +++ b/packages/playwright-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/playwright-crawler/tsconfig.json b/packages/playwright-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/playwright-crawler/tsconfig.json +++ b/packages/playwright-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/puppeteer-crawler/src/internals/puppeteer-crawler.ts b/packages/puppeteer-crawler/src/internals/puppeteer-crawler.ts index 8d86cfe0f188..1ab8385f88c6 100644 --- a/packages/puppeteer-crawler/src/internals/puppeteer-crawler.ts +++ b/packages/puppeteer-crawler/src/internals/puppeteer-crawler.ts @@ -27,8 +27,7 @@ import type { import { gotoExtended, puppeteerUtils } from './utils/puppeteer_utils.js'; export interface PuppeteerCrawlingContext - extends BrowserCrawlingContext, - PuppeteerContextUtils {} + extends BrowserCrawlingContext, PuppeteerContextUtils {} export interface PuppeteerHook extends BrowserHook {} export type PuppeteerGoToOptions = Parameters[1]; @@ -36,14 +35,14 @@ export interface PuppeteerCrawlerOptions< ContextExtension = Dictionary, ExtendedContext extends PuppeteerCrawlingContext = PuppeteerCrawlingContext & ContextExtension, > extends BrowserCrawlerOptions< - Page, - HTTPResponse, - PuppeteerController, - PuppeteerCrawlingContext, - ContextExtension, - ExtendedContext, - { browserPlugins: [PuppeteerPlugin] } - > { + Page, + HTTPResponse, + PuppeteerController, + PuppeteerCrawlingContext, + ContextExtension, + ExtendedContext, + { browserPlugins: [PuppeteerPlugin] } +> { /** * Options used by {@apilink launchPuppeteer} to start new Puppeteer instances. */ diff --git a/packages/puppeteer-crawler/tsconfig.build.json b/packages/puppeteer-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/puppeteer-crawler/tsconfig.build.json +++ b/packages/puppeteer-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/puppeteer-crawler/tsconfig.json b/packages/puppeteer-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/puppeteer-crawler/tsconfig.json +++ b/packages/puppeteer-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/stagehand-crawler/src/index.ts b/packages/stagehand-crawler/src/index.ts index acc11f82c3a5..53cb7e3e63d6 100644 --- a/packages/stagehand-crawler/src/index.ts +++ b/packages/stagehand-crawler/src/index.ts @@ -54,10 +54,7 @@ export * from '@crawlee/browser'; // Export main crawler class -export { - StagehandCrawler, - createStagehandRouter, -} from './internals/stagehand-crawler'; +export { StagehandCrawler, createStagehandRouter } from './internals/stagehand-crawler'; // Export types export type { diff --git a/packages/stagehand-crawler/src/internals/stagehand-crawler.ts b/packages/stagehand-crawler/src/internals/stagehand-crawler.ts index fb71d6e9cabb..15901a141af6 100644 --- a/packages/stagehand-crawler/src/internals/stagehand-crawler.ts +++ b/packages/stagehand-crawler/src/internals/stagehand-crawler.ts @@ -207,8 +207,12 @@ export interface StagehandPage extends Page { /** * Crawling context for StagehandCrawler with enhanced page object. */ -export interface StagehandCrawlingContext - extends BrowserCrawlingContext { +export interface StagehandCrawlingContext extends BrowserCrawlingContext< + StagehandPage, + Response, + StagehandController, + UserData +> { /** * Enhanced Playwright page with Stagehand AI methods. * Use page.act(), page.extract(), page.observe(), page.agent() for AI-powered operations. @@ -244,14 +248,14 @@ export interface StagehandCrawlerOptions< ContextExtension = Dictionary, ExtendedContext extends StagehandCrawlingContext = StagehandCrawlingContext & ContextExtension, > extends BrowserCrawlerOptions< - StagehandPage, - Response, - StagehandController, - StagehandCrawlingContext, - ContextExtension, - ExtendedContext, - { browserPlugins: [StagehandPlugin] } - > { + StagehandPage, + Response, + StagehandController, + StagehandCrawlingContext, + ContextExtension, + ExtendedContext, + { browserPlugins: [StagehandPlugin] } +> { /** * Stagehand-specific configuration options. * These options configure the AI behavior and Browserbase integration. diff --git a/packages/stagehand-crawler/tsconfig.build.json b/packages/stagehand-crawler/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/stagehand-crawler/tsconfig.build.json +++ b/packages/stagehand-crawler/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/stagehand-crawler/tsconfig.json b/packages/stagehand-crawler/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/stagehand-crawler/tsconfig.json +++ b/packages/stagehand-crawler/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/templates/.eslintrc.json b/packages/templates/.eslintrc.json index b4c4cbd98a86..a1e94417375c 100644 --- a/packages/templates/.eslintrc.json +++ b/packages/templates/.eslintrc.json @@ -1,9 +1,9 @@ { - "root": true, - "extends": "../../.eslintrc.json", - "rules": { - "no-console": 0, - "@typescript-eslint/no-shadow": 0, - "@typescript-eslint/consistent-type-imports": 0 - } + "root": true, + "extends": "../../.eslintrc.json", + "rules": { + "no-console": 0, + "@typescript-eslint/no-shadow": 0, + "@typescript-eslint/consistent-type-imports": 0 + } } diff --git a/packages/templates/manifest.json b/packages/templates/manifest.json index 769b2369ebf8..bad96fb8bbd3 100644 --- a/packages/templates/manifest.json +++ b/packages/templates/manifest.json @@ -1,149 +1,135 @@ { - "templates": [ - { - "name": "getting-started-ts", - "description": "Getting started example [TypeScript]", - "files": [ - "src/main.ts", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md", - "tsconfig.json" - ] - }, - { - "name": "getting-started-js", - "description": "Getting started example [JavaScript]", - "files": [ - "src/main.js", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md" - ] - }, - { - "name": "empty-ts", - "description": "Empty project [TypeScript]", - "files": [ - "src/main.ts", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md", - "tsconfig.json" - ] - }, - { - "name": "empty-js", - "description": "Empty project [JavaScript]", - "files": [ - "src/main.js", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md" - ] - }, - { - "name": "cheerio-ts", - "description": "CheerioCrawler template project [TypeScript]", - "files": [ - "src/main.ts", - "src/routes.ts", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md", - "tsconfig.json" - ] - }, - { - "name": "playwright-ts", - "description": "PlaywrightCrawler template project [TypeScript]", - "files": [ - "src/main.ts", - "src/routes.ts", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md", - "tsconfig.json" - ] - }, - { - "name": "camoufox-ts", - "description": "Camoufox-based PlaywrightCrawler template project [TypeScript]", - "files": [ - "src/main.ts", - "src/routes.ts", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md", - "tsconfig.json" - ] - }, - { - "name": "puppeteer-ts", - "description": "PuppeteerCrawler template project [TypeScript]", - "files": [ - "src/main.ts", - "src/routes.ts", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md", - "tsconfig.json" - ] - }, - { - "name": "cheerio-js", - "description": "CheerioCrawler template project [JavaScript]", - "files": [ - "src/main.js", - "src/routes.js", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md" - ] - }, - { - "name": "playwright-js", - "description": "PlaywrightCrawler template project [JavaScript]", - "files": [ - "src/main.js", - "src/routes.js", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md" - ] - }, - { - "name": "puppeteer-js", - "description": "PuppeteerCrawler template project [JavaScript]", - "files": [ - "src/main.js", - "src/routes.js", - ".dockerignore", - ".gitignore", - "Dockerfile", - "package.json", - "README.md" - ] - } - ] + "templates": [ + { + "name": "getting-started-ts", + "description": "Getting started example [TypeScript]", + "files": [ + "src/main.ts", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md", + "tsconfig.json" + ] + }, + { + "name": "getting-started-js", + "description": "Getting started example [JavaScript]", + "files": ["src/main.js", ".dockerignore", ".gitignore", "Dockerfile", "package.json", "README.md"] + }, + { + "name": "empty-ts", + "description": "Empty project [TypeScript]", + "files": [ + "src/main.ts", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md", + "tsconfig.json" + ] + }, + { + "name": "empty-js", + "description": "Empty project [JavaScript]", + "files": ["src/main.js", ".dockerignore", ".gitignore", "Dockerfile", "package.json", "README.md"] + }, + { + "name": "cheerio-ts", + "description": "CheerioCrawler template project [TypeScript]", + "files": [ + "src/main.ts", + "src/routes.ts", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md", + "tsconfig.json" + ] + }, + { + "name": "playwright-ts", + "description": "PlaywrightCrawler template project [TypeScript]", + "files": [ + "src/main.ts", + "src/routes.ts", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md", + "tsconfig.json" + ] + }, + { + "name": "camoufox-ts", + "description": "Camoufox-based PlaywrightCrawler template project [TypeScript]", + "files": [ + "src/main.ts", + "src/routes.ts", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md", + "tsconfig.json" + ] + }, + { + "name": "puppeteer-ts", + "description": "PuppeteerCrawler template project [TypeScript]", + "files": [ + "src/main.ts", + "src/routes.ts", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md", + "tsconfig.json" + ] + }, + { + "name": "cheerio-js", + "description": "CheerioCrawler template project [JavaScript]", + "files": [ + "src/main.js", + "src/routes.js", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md" + ] + }, + { + "name": "playwright-js", + "description": "PlaywrightCrawler template project [JavaScript]", + "files": [ + "src/main.js", + "src/routes.js", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md" + ] + }, + { + "name": "puppeteer-js", + "description": "PuppeteerCrawler template project [JavaScript]", + "files": [ + "src/main.js", + "src/routes.js", + ".dockerignore", + ".gitignore", + "Dockerfile", + "package.json", + "README.md" + ] + } + ] } diff --git a/packages/templates/templates/camoufox-ts/tsconfig.json b/packages/templates/templates/camoufox-ts/tsconfig.json index cc141ac628cb..c1be191a6fc6 100644 --- a/packages/templates/templates/camoufox-ts/tsconfig.json +++ b/packages/templates/templates/camoufox-ts/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "outDir": "dist", - "noUnusedLocals": false, - "lib": ["DOM"] - }, - "include": ["./src/**/*"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "outDir": "dist", + "noUnusedLocals": false, + "lib": ["DOM"] + }, + "include": ["./src/**/*"] } diff --git a/packages/templates/templates/cheerio-ts/tsconfig.json b/packages/templates/templates/cheerio-ts/tsconfig.json index cc141ac628cb..c1be191a6fc6 100644 --- a/packages/templates/templates/cheerio-ts/tsconfig.json +++ b/packages/templates/templates/cheerio-ts/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "outDir": "dist", - "noUnusedLocals": false, - "lib": ["DOM"] - }, - "include": ["./src/**/*"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "outDir": "dist", + "noUnusedLocals": false, + "lib": ["DOM"] + }, + "include": ["./src/**/*"] } diff --git a/packages/templates/templates/empty-ts/tsconfig.json b/packages/templates/templates/empty-ts/tsconfig.json index cc141ac628cb..c1be191a6fc6 100644 --- a/packages/templates/templates/empty-ts/tsconfig.json +++ b/packages/templates/templates/empty-ts/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "outDir": "dist", - "noUnusedLocals": false, - "lib": ["DOM"] - }, - "include": ["./src/**/*"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "outDir": "dist", + "noUnusedLocals": false, + "lib": ["DOM"] + }, + "include": ["./src/**/*"] } diff --git a/packages/templates/templates/getting-started-ts/tsconfig.json b/packages/templates/templates/getting-started-ts/tsconfig.json index cc141ac628cb..c1be191a6fc6 100644 --- a/packages/templates/templates/getting-started-ts/tsconfig.json +++ b/packages/templates/templates/getting-started-ts/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "outDir": "dist", - "noUnusedLocals": false, - "lib": ["DOM"] - }, - "include": ["./src/**/*"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "outDir": "dist", + "noUnusedLocals": false, + "lib": ["DOM"] + }, + "include": ["./src/**/*"] } diff --git a/packages/templates/templates/playwright-ts/tsconfig.json b/packages/templates/templates/playwright-ts/tsconfig.json index cc141ac628cb..c1be191a6fc6 100644 --- a/packages/templates/templates/playwright-ts/tsconfig.json +++ b/packages/templates/templates/playwright-ts/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "outDir": "dist", - "noUnusedLocals": false, - "lib": ["DOM"] - }, - "include": ["./src/**/*"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "outDir": "dist", + "noUnusedLocals": false, + "lib": ["DOM"] + }, + "include": ["./src/**/*"] } diff --git a/packages/templates/templates/puppeteer-ts/tsconfig.json b/packages/templates/templates/puppeteer-ts/tsconfig.json index cc141ac628cb..c1be191a6fc6 100644 --- a/packages/templates/templates/puppeteer-ts/tsconfig.json +++ b/packages/templates/templates/puppeteer-ts/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "outDir": "dist", - "noUnusedLocals": false, - "lib": ["DOM"] - }, - "include": ["./src/**/*"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "outDir": "dist", + "noUnusedLocals": false, + "lib": ["DOM"] + }, + "include": ["./src/**/*"] } diff --git a/packages/templates/tsconfig.build.json b/packages/templates/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/templates/tsconfig.build.json +++ b/packages/templates/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/templates/tsconfig.json b/packages/templates/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/templates/tsconfig.json +++ b/packages/templates/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/types/tsconfig.build.json b/packages/types/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/types/tsconfig.build.json +++ b/packages/types/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/types/tsconfig.json +++ b/packages/types/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/packages/utils/src/internals/open_graph_parser.ts b/packages/utils/src/internals/open_graph_parser.ts index ad6d8a371cf0..5323fbc3efa8 100644 --- a/packages/utils/src/internals/open_graph_parser.ts +++ b/packages/utils/src/internals/open_graph_parser.ts @@ -400,13 +400,10 @@ export function parseOpenGraph($: CheerioAPI, additionalProperties?: OpenGraphPr export function parseOpenGraph(item: CheerioAPI | string, additionalProperties?: OpenGraphProperty[]) { const $ = typeof item === 'string' ? load(item) : item; - return [...(additionalProperties || []), ...OPEN_GRAPH_PROPERTIES].reduce( - (acc, curr) => { - return { - ...acc, - ...optionalSpread(curr.outputName, parseOpenGraphProperty(curr, $)), - }; - }, - {} as Dictionary, - ); + return [...(additionalProperties || []), ...OPEN_GRAPH_PROPERTIES].reduce((acc, curr) => { + return { + ...acc, + ...optionalSpread(curr.outputName, parseOpenGraphProperty(curr, $)), + }; + }, {} as Dictionary); } diff --git a/packages/utils/test/tsconfig.json b/packages/utils/test/tsconfig.json index bf55f9516b7d..eb8cbab58123 100644 --- a/packages/utils/test/tsconfig.json +++ b/packages/utils/test/tsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../../../tsconfig.json", - "include": ["**/*", "../../**/*"], - "compilerOptions": { - "types": ["vitest/globals"] - } + "extends": "../../../tsconfig.json", + "include": ["**/*", "../../**/*"], + "compilerOptions": { + "types": ["vitest/globals"] + } } diff --git a/packages/utils/tsconfig.build.json b/packages/utils/tsconfig.build.json index 9bc5ad54c68b..5f63b6d3df40 100644 --- a/packages/utils/tsconfig.build.json +++ b/packages/utils/tsconfig.build.json @@ -1,8 +1,8 @@ { - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json index 2e6a4ce4084f..66bb87a91ee7 100644 --- a/packages/utils/tsconfig.json +++ b/packages/utils/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "extends": "../../tsconfig.json", + "include": ["src/**/*"] } diff --git a/test/browser-pool/anonymize-proxy-sugar.test.ts b/test/browser-pool/anonymize-proxy-sugar.test.ts index 3ca43b0eeb7b..c21bc7be17ca 100644 --- a/test/browser-pool/anonymize-proxy-sugar.test.ts +++ b/test/browser-pool/anonymize-proxy-sugar.test.ts @@ -20,12 +20,15 @@ describe('anonymizeProxySugar', () => { ['http://username:password@proxy:1000/', 'http://username:password@proxy:1000'], ['socks://username:password@proxy:1000', 'socks://username:password@proxy:1000'], ['socks://username:password@proxy:1000/', 'socks://username:password@proxy:1000'], - ])('should call anonymizeProxy from proxy-chain with correctly pre-processed URL: %s', async (input, expectedOutput) => { - const [anonymized] = await anonymizeProxySugar(input); - - expect(anonymizeProxy).toHaveBeenCalledWith(expect.objectContaining({ url: expectedOutput })); - expect(anonymized).toBeTypeOf('string'); - }); + ])( + 'should call anonymizeProxy from proxy-chain with correctly pre-processed URL: %s', + async (input, expectedOutput) => { + const [anonymized] = await anonymizeProxySugar(input); + + expect(anonymizeProxy).toHaveBeenCalledWith(expect.objectContaining({ url: expectedOutput })); + expect(anonymized).toBeTypeOf('string'); + }, + ); test('should pass ignoreProxyCertificate to anonymizeProxy', async () => { await anonymizeProxySugar('http://username:password@proxy:1000', undefined, undefined, { diff --git a/test/browser-pool/test.html b/test/browser-pool/test.html index 58950dc844bf..27f16e7378ef 100644 --- a/test/browser-pool/test.html +++ b/test/browser-pool/test.html @@ -1,7 +1,5 @@ -

- Test Page -

+

Test Page

diff --git a/test/core/crawlers/adaptive_playwright_crawler.test.ts b/test/core/crawlers/adaptive_playwright_crawler.test.ts index e7184896032c..eef3b2a1ba01 100644 --- a/test/core/crawlers/adaptive_playwright_crawler.test.ts +++ b/test/core/crawlers/adaptive_playwright_crawler.test.ts @@ -234,34 +234,34 @@ describe('AdaptivePlaywrightCrawler', () => { expect(resultChecker).toHaveBeenCalledTimes(1); }); - test.each([ - ['static'], - ['clientOnly'], - ] as const)('crawlingContext.addRequests() should add requests correctly (%s)', async (renderingType) => { - const renderingTypePredictor = makeRiggedRenderingTypePredictor({ - detectionProbabilityRecommendation: 0, - renderingType, - }); - const url = new URL(`http://${HOSTNAME}:${port}`).toString(); + test.each([['static'], ['clientOnly']] as const)( + 'crawlingContext.addRequests() should add requests correctly (%s)', + async (renderingType) => { + const renderingTypePredictor = makeRiggedRenderingTypePredictor({ + detectionProbabilityRecommendation: 0, + renderingType, + }); + const url = new URL(`http://${HOSTNAME}:${port}`).toString(); - let requestContext: LoadedContext | undefined; - const requestHandler: AdaptivePlaywrightCrawlerOptions['requestHandler'] = async (context) => { - const isStartUrl = context.request.url === url; + let requestContext: LoadedContext | undefined; + const requestHandler: AdaptivePlaywrightCrawlerOptions['requestHandler'] = async (context) => { + const isStartUrl = context.request.url === url; - if (isStartUrl) await context.addRequests([`${url}/1`]); - else requestContext = context; - }; + if (isStartUrl) await context.addRequests([`${url}/1`]); + else requestContext = context; + }; - const crawler = await makeOneshotCrawler( - { requestHandler, renderingTypePredictor, maxRequestsPerCrawl: 10 }, - [], - ); + const crawler = await makeOneshotCrawler( + { requestHandler, renderingTypePredictor, maxRequestsPerCrawl: 10 }, + [], + ); - await crawler.run([{ url, crawlDepth: 2 }]); + await crawler.run([{ url, crawlDepth: 2 }]); - assert(requestContext); - expect(requestContext.request).toMatchObject({ url: `${url}/1`, crawlDepth: 3 }); - }); + assert(requestContext); + expect(requestContext.request).toMatchObject({ url: `${url}/1`, crawlDepth: 3 }); + }, + ); describe('should enqueue links correctly', () => { test.each([ @@ -315,49 +315,49 @@ describe('AdaptivePlaywrightCrawler', () => { }); }); - test.each([ - ['static'], - ['clientOnly'], - ] as const)('should respect the strategy option for enqueueLinks (%s)', async (renderingType) => { - const renderingTypePredictor = makeRiggedRenderingTypePredictor({ - detectionProbabilityRecommendation: 0, - renderingType, - }); - const url = new URL(`http://${HOSTNAME}:${port}/external-links`); - const enqueuedUrls = new Set(); - const visitedUrls = new Set(); + test.each([['static'], ['clientOnly']] as const)( + 'should respect the strategy option for enqueueLinks (%s)', + async (renderingType) => { + const renderingTypePredictor = makeRiggedRenderingTypePredictor({ + detectionProbabilityRecommendation: 0, + renderingType, + }); + const url = new URL(`http://${HOSTNAME}:${port}/external-links`); + const enqueuedUrls = new Set(); + const visitedUrls = new Set(); - const requestHandler: AdaptivePlaywrightCrawlerOptions['requestHandler'] = vi.fn( - async ({ enqueueLinks, request }) => { - visitedUrls.add(request.loadedUrl); + const requestHandler: AdaptivePlaywrightCrawlerOptions['requestHandler'] = vi.fn( + async ({ enqueueLinks, request }) => { + visitedUrls.add(request.loadedUrl); - if (!request.label) { - const result = await enqueueLinks({ - label: 'enqueued-url', - strategy: 'same-hostname', - }); + if (!request.label) { + const result = await enqueueLinks({ + label: 'enqueued-url', + strategy: 'same-hostname', + }); - for (const processedRequest of result.processedRequests) { - enqueuedUrls.add(processedRequest.uniqueKey); + for (const processedRequest of result.processedRequests) { + enqueuedUrls.add(processedRequest.uniqueKey); + } } - } - }, - ); + }, + ); - const crawler = await makeOneshotCrawler( - { - requestHandler, - renderingTypePredictor, - maxRequestsPerCrawl: 10, - }, - [url.toString()], - ); + const crawler = await makeOneshotCrawler( + { + requestHandler, + renderingTypePredictor, + maxRequestsPerCrawl: 10, + }, + [url.toString()], + ); - await crawler.run(); + await crawler.run(); - expect(new Set(visitedUrls)).toEqual(new Set([`http://${HOSTNAME}:${port}/external-links`])); - expect(new Set(enqueuedUrls)).toEqual(new Set([`http://${HOSTNAME}:${port}/external-redirect`])); - }); + expect(new Set(visitedUrls)).toEqual(new Set([`http://${HOSTNAME}:${port}/external-links`])); + expect(new Set(enqueuedUrls)).toEqual(new Set([`http://${HOSTNAME}:${port}/external-redirect`])); + }, + ); test('should persist crawler state', async () => { const renderingTypePredictor = makeRiggedRenderingTypePredictor({ diff --git a/test/core/crawlers/basic_crawler.test.ts b/test/core/crawlers/basic_crawler.test.ts index 6f72c9e949d5..48ba573333d5 100644 --- a/test/core/crawlers/basic_crawler.test.ts +++ b/test/core/crawlers/basic_crawler.test.ts @@ -519,61 +519,61 @@ describe('BasicCrawler', () => { expect(state2.urls).toContain(`http://${HOSTNAME}:${port}/?page=2`); }); - test.each([ - EventType.MIGRATING, - EventType.ABORTING, - ])('should pause on %s event and persist RequestList state', async (event) => { - const sources = [...Array(500).keys()].map((index) => ({ url: `https://example.com/${index + 1}` })); - - let persistResolve!: (value?: unknown) => void; - const persistPromise = new Promise((res) => { - persistResolve = res; - }); + test.each([EventType.MIGRATING, EventType.ABORTING])( + 'should pause on %s event and persist RequestList state', + async (event) => { + const sources = [...Array(500).keys()].map((index) => ({ url: `https://example.com/${index + 1}` })); + + let persistResolve!: (value?: unknown) => void; + const persistPromise = new Promise((res) => { + persistResolve = res; + }); - // Mock the calls to persist sources. - const getValueSpy = vitest.spyOn(KeyValueStore.prototype, 'getValue'); - const setValueSpy = vitest.spyOn(KeyValueStore.prototype, 'setValue'); - getValueSpy.mockResolvedValue(null); + // Mock the calls to persist sources. + const getValueSpy = vitest.spyOn(KeyValueStore.prototype, 'getValue'); + const setValueSpy = vitest.spyOn(KeyValueStore.prototype, 'setValue'); + getValueSpy.mockResolvedValue(null); - const processed: { url: string }[] = []; - const requestList = await RequestList.open('reqList', sources); - const requestHandler: RequestHandler = async ({ request }) => { - if (request.url.endsWith('200')) serviceLocator.getEventManager().emit(event); - processed.push({ url: request.url }); - }; + const processed: { url: string }[] = []; + const requestList = await RequestList.open('reqList', sources); + const requestHandler: RequestHandler = async ({ request }) => { + if (request.url.endsWith('200')) serviceLocator.getEventManager().emit(event); + processed.push({ url: request.url }); + }; - const basicCrawler = new BasicCrawler({ - requestList, - minConcurrency: 25, - maxConcurrency: 25, - requestHandler, - }); + const basicCrawler = new BasicCrawler({ + requestList, + minConcurrency: 25, + maxConcurrency: 25, + requestHandler, + }); - let finished = false; - // Mock the call to persist state. - setValueSpy.mockImplementationOnce(persistResolve as any); - // The crawler will pause after 200 requests - const runPromise = basicCrawler.run(); - void runPromise.then(() => { - finished = true; - }); + let finished = false; + // Mock the call to persist state. + setValueSpy.mockImplementationOnce(persistResolve as any); + // The crawler will pause after 200 requests + const runPromise = basicCrawler.run(); + void runPromise.then(() => { + finished = true; + }); - // need to monkeypatch the stats class, otherwise it will never finish - basicCrawler.stats.persistState = async () => Promise.resolve(); - await persistPromise; + // need to monkeypatch the stats class, otherwise it will never finish + basicCrawler.stats.persistState = async () => Promise.resolve(); + await persistPromise; - expect(finished).toBe(false); - expect(await requestList.isFinished()).toBe(false); - expect(await requestList.isEmpty()).toBe(false); - expect(processed.length).toBe(200); + expect(finished).toBe(false); + expect(await requestList.isFinished()).toBe(false); + expect(await requestList.isEmpty()).toBe(false); + expect(processed.length).toBe(200); - expect(getValueSpy).toBeCalled(); - expect(setValueSpy).toBeCalled(); + expect(getValueSpy).toBeCalled(); + expect(setValueSpy).toBeCalled(); - // clean up - // @ts-expect-error Accessing private method - await basicCrawler.autoscaledPool!._destroy(); - }); + // clean up + // @ts-expect-error Accessing private method + await basicCrawler.autoscaledPool!._destroy(); + }, + ); test('should retry failed requests', async () => { const sources = [ diff --git a/test/core/crawlers/playwright_crawler.test.ts b/test/core/crawlers/playwright_crawler.test.ts index 8caf0e106a28..e45bf9b36e22 100644 --- a/test/core/crawlers/playwright_crawler.test.ts +++ b/test/core/crawlers/playwright_crawler.test.ts @@ -150,49 +150,49 @@ describe('PlaywrightCrawler', () => { expect(Object.keys(options.browserPoolOptions).length).toBe(0); }); - test.each([ - { useIncognitoPages: true }, - { useIncognitoPages: false }, - ])('should apply launchOptions with useIncognitoPages: $useIncognitoPages', async ({ useIncognitoPages }) => { - // Some launch options apply to the browser, while some apply to the context. - // Here we use some context options to verify that those are actually applied. - const launchOptions = { - locale: 'cz-CZ', - reducedMotion: 'reduce' as const, - timezoneId: 'Pacific/Tahiti', - }; + test.each([{ useIncognitoPages: true }, { useIncognitoPages: false }])( + 'should apply launchOptions with useIncognitoPages: $useIncognitoPages', + async ({ useIncognitoPages }) => { + // Some launch options apply to the browser, while some apply to the context. + // Here we use some context options to verify that those are actually applied. + const launchOptions = { + locale: 'cz-CZ', + reducedMotion: 'reduce' as const, + timezoneId: 'Pacific/Tahiti', + }; - let [timezone, locale, reducedMotion] = ['', '', '']; + let [timezone, locale, reducedMotion] = ['', '', '']; - const playwrightCrawler = new PlaywrightCrawler({ - maxConcurrency: 1, - launchContext: { - useIncognitoPages, - launchOptions, - }, - browserPoolOptions: { - // don't overwrite locale with fingerprint's locale - useFingerprints: false, - }, - requestHandler: async ({ page }) => { - [timezone, locale, reducedMotion] = await Promise.all([ - page.evaluate(() => Intl.DateTimeFormat().resolvedOptions().timeZone), - page.evaluate(() => navigator.language), - page.evaluate(() => { - return window.matchMedia('(prefers-reduced-motion: reduce)').matches - ? 'reduce' - : 'no-preference'; - }), - ]); - }, - }); + const playwrightCrawler = new PlaywrightCrawler({ + maxConcurrency: 1, + launchContext: { + useIncognitoPages, + launchOptions, + }, + browserPoolOptions: { + // don't overwrite locale with fingerprint's locale + useFingerprints: false, + }, + requestHandler: async ({ page }) => { + [timezone, locale, reducedMotion] = await Promise.all([ + page.evaluate(() => Intl.DateTimeFormat().resolvedOptions().timeZone), + page.evaluate(() => navigator.language), + page.evaluate(() => { + return window.matchMedia('(prefers-reduced-motion: reduce)').matches + ? 'reduce' + : 'no-preference'; + }), + ]); + }, + }); - await playwrightCrawler.run([`http://${HOSTNAME}:${port}/`]); + await playwrightCrawler.run([`http://${HOSTNAME}:${port}/`]); - expect(timezone).toBe(launchOptions.timezoneId); - expect(locale).toBe(launchOptions.locale); - expect(reducedMotion).toBe(launchOptions.reducedMotion); - }); + expect(timezone).toBe(launchOptions.timezoneId); + expect(locale).toBe(launchOptions.locale); + expect(reducedMotion).toBe(launchOptions.reducedMotion); + }, + ); test('should have correct types in crawling context', async () => { const requestHandler = async (crawlingContext: PlaywrightCrawlingContext) => { diff --git a/test/e2e/adaptive-playwright-default/actor/.actor/actor.json b/test/e2e/adaptive-playwright-default/actor/.actor/actor.json index f7b6d2f5fb23..2b9034769c76 100644 --- a/test/e2e/adaptive-playwright-default/actor/.actor/actor.json +++ b/test/e2e/adaptive-playwright-default/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-adaptive-playwright-default", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-adaptive-playwright-default", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/adaptive-playwright-robots-file/actor/.actor/actor.json b/test/e2e/adaptive-playwright-robots-file/actor/.actor/actor.json index 20711660031a..0d9872b06efd 100644 --- a/test/e2e/adaptive-playwright-robots-file/actor/.actor/actor.json +++ b/test/e2e/adaptive-playwright-robots-file/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-adaptive-playwright-robots-file", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-adaptive-playwright-robots-file", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/automatic-persist-value/actor/.actor/actor.json b/test/e2e/automatic-persist-value/actor/.actor/actor.json index 7f7835da440e..33d7b074eedf 100644 --- a/test/e2e/automatic-persist-value/actor/.actor/actor.json +++ b/test/e2e/automatic-persist-value/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-automatic-persist-value", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-automatic-persist-value", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/autoscaling-max-tasks-per-minute/actor/.actor/actor.json b/test/e2e/autoscaling-max-tasks-per-minute/actor/.actor/actor.json index e6e0c1ed5aea..048affcccaa9 100644 --- a/test/e2e/autoscaling-max-tasks-per-minute/actor/.actor/actor.json +++ b/test/e2e/autoscaling-max-tasks-per-minute/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-autoscaling-max-tasks-per-minute", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-autoscaling-max-tasks-per-minute", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/camoufox-cloudflare/actor/.actor/actor.json b/test/e2e/camoufox-cloudflare/actor/.actor/actor.json index 9b1d8b078605..ad64aaefe40e 100644 --- a/test/e2e/camoufox-cloudflare/actor/.actor/actor.json +++ b/test/e2e/camoufox-cloudflare/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-camoufox-cloudflare", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-camoufox-cloudflare", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-curl-impersonate-ts/actor/.actor/actor.json b/test/e2e/cheerio-curl-impersonate-ts/actor/.actor/actor.json index 323bccbddf4a..84638bda0456 100644 --- a/test/e2e/cheerio-curl-impersonate-ts/actor/.actor/actor.json +++ b/test/e2e/cheerio-curl-impersonate-ts/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-curl-impersonate-ts", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-curl-impersonate-ts", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-curl-impersonate-ts/actor/.eslintrc.json b/test/e2e/cheerio-curl-impersonate-ts/actor/.eslintrc.json index 26237587ed40..cdd6cb0449b7 100644 --- a/test/e2e/cheerio-curl-impersonate-ts/actor/.eslintrc.json +++ b/test/e2e/cheerio-curl-impersonate-ts/actor/.eslintrc.json @@ -1,13 +1,13 @@ { - "root": true, - "extends": "../../.eslintrc.json", - "parserOptions": { - "project": "./test/e2e/cheerio-curl-impersonate-ts/actor/tsconfig.json", - "ecmaVersion": 2022 - }, - "rules": { - "no-empty-function": "off", - "@typescript-eslint/no-explicit-any": "off", - "no-constant-condition": "off" - } + "root": true, + "extends": "../../.eslintrc.json", + "parserOptions": { + "project": "./test/e2e/cheerio-curl-impersonate-ts/actor/tsconfig.json", + "ecmaVersion": 2022 + }, + "rules": { + "no-empty-function": "off", + "@typescript-eslint/no-explicit-any": "off", + "no-constant-condition": "off" + } } diff --git a/test/e2e/cheerio-curl-impersonate-ts/actor/tsconfig.json b/test/e2e/cheerio-curl-impersonate-ts/actor/tsconfig.json index f6f2e9d778a5..61f6d29848b8 100644 --- a/test/e2e/cheerio-curl-impersonate-ts/actor/tsconfig.json +++ b/test/e2e/cheerio-curl-impersonate-ts/actor/tsconfig.json @@ -1,11 +1,11 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "ES2022", - "target": "ES2022", - "lib": ["DOM"], - "skipLibCheck": true, - "incremental": false - }, - "include": ["./**/*.ts"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "ES2022", + "target": "ES2022", + "lib": ["DOM"], + "skipLibCheck": true, + "incremental": false + }, + "include": ["./**/*.ts"] } diff --git a/test/e2e/cheerio-default-ts/actor/.actor/actor.json b/test/e2e/cheerio-default-ts/actor/.actor/actor.json index d1802658a3ee..f28e46d07e83 100644 --- a/test/e2e/cheerio-default-ts/actor/.actor/actor.json +++ b/test/e2e/cheerio-default-ts/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-default-ts", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-default-ts", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-default-ts/actor/.eslintrc.json b/test/e2e/cheerio-default-ts/actor/.eslintrc.json index 337ad01eb73e..fc2d76d9efe3 100644 --- a/test/e2e/cheerio-default-ts/actor/.eslintrc.json +++ b/test/e2e/cheerio-default-ts/actor/.eslintrc.json @@ -1,8 +1,8 @@ { - "root": true, - "extends": "../../.eslintrc.json", - "parserOptions": { - "project": "./test/e2e/cheerio-default-ts/actor/tsconfig.json", - "ecmaVersion": 2022 - } + "root": true, + "extends": "../../.eslintrc.json", + "parserOptions": { + "project": "./test/e2e/cheerio-default-ts/actor/tsconfig.json", + "ecmaVersion": 2022 + } } diff --git a/test/e2e/cheerio-default-ts/actor/tsconfig.json b/test/e2e/cheerio-default-ts/actor/tsconfig.json index c34e1edeacae..370e50c0ac13 100644 --- a/test/e2e/cheerio-default-ts/actor/tsconfig.json +++ b/test/e2e/cheerio-default-ts/actor/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "lib": ["DOM"] - }, - "include": ["./**/*.ts"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "lib": ["DOM"] + }, + "include": ["./**/*.ts"] } diff --git a/test/e2e/cheerio-default/actor/.actor/actor.json b/test/e2e/cheerio-default/actor/.actor/actor.json index 69e8b83b6d07..419c5519c8c4 100644 --- a/test/e2e/cheerio-default/actor/.actor/actor.json +++ b/test/e2e/cheerio-default/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-default", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-default", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-enqueue-links-base/actor/.actor/actor.json b/test/e2e/cheerio-enqueue-links-base/actor/.actor/actor.json index 0087602ef0b6..a6c5a8632f05 100644 --- a/test/e2e/cheerio-enqueue-links-base/actor/.actor/actor.json +++ b/test/e2e/cheerio-enqueue-links-base/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-enqueue-links-base", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-enqueue-links-base", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-enqueue-links/actor/.actor/actor.json b/test/e2e/cheerio-enqueue-links/actor/.actor/actor.json index d51768db2b9e..1b5dcae96bcb 100644 --- a/test/e2e/cheerio-enqueue-links/actor/.actor/actor.json +++ b/test/e2e/cheerio-enqueue-links/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-enqueue-links", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-enqueue-links", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-error-snapshot/actor/.actor/actor.json b/test/e2e/cheerio-error-snapshot/actor/.actor/actor.json index 13d855466bf0..b855df9194f5 100644 --- a/test/e2e/cheerio-error-snapshot/actor/.actor/actor.json +++ b/test/e2e/cheerio-error-snapshot/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-error-snapshot", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-error-snapshot", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-ignore-ssl-errors/actor/.actor/actor.json b/test/e2e/cheerio-ignore-ssl-errors/actor/.actor/actor.json index fbf791bef611..ba8b992332c5 100644 --- a/test/e2e/cheerio-ignore-ssl-errors/actor/.actor/actor.json +++ b/test/e2e/cheerio-ignore-ssl-errors/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-ignore-ssl-errors", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-ignore-ssl-errors", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-impit-ts/actor/.actor/actor.json b/test/e2e/cheerio-impit-ts/actor/.actor/actor.json index 99324939c355..07aa8f40a8ef 100644 --- a/test/e2e/cheerio-impit-ts/actor/.actor/actor.json +++ b/test/e2e/cheerio-impit-ts/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-impit-ts", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-impit-ts", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-impit-ts/actor/.eslintrc.json b/test/e2e/cheerio-impit-ts/actor/.eslintrc.json index 629299be5fe5..2c338acb650c 100644 --- a/test/e2e/cheerio-impit-ts/actor/.eslintrc.json +++ b/test/e2e/cheerio-impit-ts/actor/.eslintrc.json @@ -1,13 +1,13 @@ { - "root": true, - "extends": "../../.eslintrc.json", - "parserOptions": { - "project": "./test/e2e/cheerio-impit-ts/actor/tsconfig.json", - "ecmaVersion": 2022 - }, - "rules": { - "no-empty-function": "off", - "@typescript-eslint/no-explicit-any": "off", - "no-constant-condition": "off" - } + "root": true, + "extends": "../../.eslintrc.json", + "parserOptions": { + "project": "./test/e2e/cheerio-impit-ts/actor/tsconfig.json", + "ecmaVersion": 2022 + }, + "rules": { + "no-empty-function": "off", + "@typescript-eslint/no-explicit-any": "off", + "no-constant-condition": "off" + } } diff --git a/test/e2e/cheerio-impit-ts/actor/tsconfig.json b/test/e2e/cheerio-impit-ts/actor/tsconfig.json index 790caec65245..3d4d42c61a98 100644 --- a/test/e2e/cheerio-impit-ts/actor/tsconfig.json +++ b/test/e2e/cheerio-impit-ts/actor/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "lib": ["DOM"], - "skipLibCheck": true, - "incremental": false - }, - "include": ["./**/*.ts"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "lib": ["DOM"], + "skipLibCheck": true, + "incremental": false + }, + "include": ["./**/*.ts"] } diff --git a/test/e2e/cheerio-initial-cookies/actor/.actor/actor.json b/test/e2e/cheerio-initial-cookies/actor/.actor/actor.json index e3df9a5b52fe..3674c17ad1ec 100644 --- a/test/e2e/cheerio-initial-cookies/actor/.actor/actor.json +++ b/test/e2e/cheerio-initial-cookies/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-initial-cookies", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-initial-cookies", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-max-requests/actor/.actor/actor.json b/test/e2e/cheerio-max-requests/actor/.actor/actor.json index 28134cf02c23..ca31dbb5e387 100644 --- a/test/e2e/cheerio-max-requests/actor/.actor/actor.json +++ b/test/e2e/cheerio-max-requests/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-max-requests", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-max-requests", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-page-info/actor/.actor/actor.json b/test/e2e/cheerio-page-info/actor/.actor/actor.json index 448dc8868465..bf3e6122646c 100644 --- a/test/e2e/cheerio-page-info/actor/.actor/actor.json +++ b/test/e2e/cheerio-page-info/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-page-info", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-page-info", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-request-queue-v2/actor/.actor/actor.json b/test/e2e/cheerio-request-queue-v2/actor/.actor/actor.json index b3d9a2c67e4b..b5c7204ca66f 100644 --- a/test/e2e/cheerio-request-queue-v2/actor/.actor/actor.json +++ b/test/e2e/cheerio-request-queue-v2/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-request-queue-v2", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-request-queue-v2", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-robots-file/actor/.actor/actor.json b/test/e2e/cheerio-robots-file/actor/.actor/actor.json index e2e289d1fe0c..4ae4fb83c433 100644 --- a/test/e2e/cheerio-robots-file/actor/.actor/actor.json +++ b/test/e2e/cheerio-robots-file/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-robots-file", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-robots-file", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-stop-resume-ts/actor/.actor/actor.json b/test/e2e/cheerio-stop-resume-ts/actor/.actor/actor.json index 67b63ddeba6e..067ca7f2f729 100644 --- a/test/e2e/cheerio-stop-resume-ts/actor/.actor/actor.json +++ b/test/e2e/cheerio-stop-resume-ts/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-stop-resume-ts", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-stop-resume-ts", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/cheerio-stop-resume-ts/actor/.eslintrc.json b/test/e2e/cheerio-stop-resume-ts/actor/.eslintrc.json index 20fde449cb45..9bf32088edc9 100644 --- a/test/e2e/cheerio-stop-resume-ts/actor/.eslintrc.json +++ b/test/e2e/cheerio-stop-resume-ts/actor/.eslintrc.json @@ -1,8 +1,8 @@ { - "root": true, - "extends": "../../.eslintrc.json", - "parserOptions": { - "project": "./test/e2e/cheerio-stop-resume-ts/actor/tsconfig.json", - "ecmaVersion": 2022 - } + "root": true, + "extends": "../../.eslintrc.json", + "parserOptions": { + "project": "./test/e2e/cheerio-stop-resume-ts/actor/tsconfig.json", + "ecmaVersion": 2022 + } } diff --git a/test/e2e/cheerio-stop-resume-ts/actor/tsconfig.json b/test/e2e/cheerio-stop-resume-ts/actor/tsconfig.json index c34e1edeacae..370e50c0ac13 100644 --- a/test/e2e/cheerio-stop-resume-ts/actor/tsconfig.json +++ b/test/e2e/cheerio-stop-resume-ts/actor/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "lib": ["DOM"] - }, - "include": ["./**/*.ts"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "lib": ["DOM"] + }, + "include": ["./**/*.ts"] } diff --git a/test/e2e/cheerio-throw-on-ssl-errors/actor/.actor/actor.json b/test/e2e/cheerio-throw-on-ssl-errors/actor/.actor/actor.json index 051de11176db..0c98039d536b 100644 --- a/test/e2e/cheerio-throw-on-ssl-errors/actor/.actor/actor.json +++ b/test/e2e/cheerio-throw-on-ssl-errors/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-cheerio-throw-on-ssl-errors", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-cheerio-throw-on-ssl-errors", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/input-json5/actor/.actor/actor.json b/test/e2e/input-json5/actor/.actor/actor.json index c3a5b0ca6a7c..ddf7a9fc6c8e 100644 --- a/test/e2e/input-json5/actor/.actor/actor.json +++ b/test/e2e/input-json5/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-input-json5", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-input-json5", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/jsdom-default-ts/actor/.actor/actor.json b/test/e2e/jsdom-default-ts/actor/.actor/actor.json index 976cd31c4f1d..c2269107db2c 100644 --- a/test/e2e/jsdom-default-ts/actor/.actor/actor.json +++ b/test/e2e/jsdom-default-ts/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-jsdom-default-ts", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-jsdom-default-ts", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/jsdom-default-ts/actor/.eslintrc.json b/test/e2e/jsdom-default-ts/actor/.eslintrc.json index 2e68e8d4d57f..fb55b4b7f42b 100644 --- a/test/e2e/jsdom-default-ts/actor/.eslintrc.json +++ b/test/e2e/jsdom-default-ts/actor/.eslintrc.json @@ -1,8 +1,8 @@ { - "root": true, - "extends": "../../.eslintrc.json", - "parserOptions": { - "project": "./test/e2e/jsdom-default-ts/actor/tsconfig.json", - "ecmaVersion": 2022 - } + "root": true, + "extends": "../../.eslintrc.json", + "parserOptions": { + "project": "./test/e2e/jsdom-default-ts/actor/tsconfig.json", + "ecmaVersion": 2022 + } } diff --git a/test/e2e/jsdom-default-ts/actor/tsconfig.json b/test/e2e/jsdom-default-ts/actor/tsconfig.json index c34e1edeacae..370e50c0ac13 100644 --- a/test/e2e/jsdom-default-ts/actor/tsconfig.json +++ b/test/e2e/jsdom-default-ts/actor/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "lib": ["DOM"] - }, - "include": ["./**/*.ts"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "lib": ["DOM"] + }, + "include": ["./**/*.ts"] } diff --git a/test/e2e/jsdom-react-ts/actor/.actor/actor.json b/test/e2e/jsdom-react-ts/actor/.actor/actor.json index 9fe495397a2d..c34385d2e879 100644 --- a/test/e2e/jsdom-react-ts/actor/.actor/actor.json +++ b/test/e2e/jsdom-react-ts/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-jsdom-react-ts", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-jsdom-react-ts", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/jsdom-react-ts/actor/.eslintrc.json b/test/e2e/jsdom-react-ts/actor/.eslintrc.json index 06b4e5962341..3e1e87a6e299 100644 --- a/test/e2e/jsdom-react-ts/actor/.eslintrc.json +++ b/test/e2e/jsdom-react-ts/actor/.eslintrc.json @@ -1,8 +1,8 @@ { - "root": true, - "extends": "../../.eslintrc.json", - "parserOptions": { - "project": "./test/e2e/jsdom-react-ts/actor/tsconfig.json", - "ecmaVersion": 2022 - } + "root": true, + "extends": "../../.eslintrc.json", + "parserOptions": { + "project": "./test/e2e/jsdom-react-ts/actor/tsconfig.json", + "ecmaVersion": 2022 + } } diff --git a/test/e2e/jsdom-react-ts/actor/tsconfig.json b/test/e2e/jsdom-react-ts/actor/tsconfig.json index c34e1edeacae..370e50c0ac13 100644 --- a/test/e2e/jsdom-react-ts/actor/tsconfig.json +++ b/test/e2e/jsdom-react-ts/actor/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "lib": ["DOM"] - }, - "include": ["./**/*.ts"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "lib": ["DOM"] + }, + "include": ["./**/*.ts"] } diff --git a/test/e2e/linkedom-default-ts/actor/.actor/actor.json b/test/e2e/linkedom-default-ts/actor/.actor/actor.json index f83df08dcc74..a7cd6f005bc6 100644 --- a/test/e2e/linkedom-default-ts/actor/.actor/actor.json +++ b/test/e2e/linkedom-default-ts/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-linkedom-default-ts", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-linkedom-default-ts", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/linkedom-default-ts/actor/.eslintrc.json b/test/e2e/linkedom-default-ts/actor/.eslintrc.json index 05856d29ddad..7bbe18228902 100644 --- a/test/e2e/linkedom-default-ts/actor/.eslintrc.json +++ b/test/e2e/linkedom-default-ts/actor/.eslintrc.json @@ -1,8 +1,8 @@ { - "root": true, - "extends": "../../.eslintrc.json", - "parserOptions": { - "project": "./test/e2e/linkedom-default-ts/actor/tsconfig.json", - "ecmaVersion": 2022 - } + "root": true, + "extends": "../../.eslintrc.json", + "parserOptions": { + "project": "./test/e2e/linkedom-default-ts/actor/tsconfig.json", + "ecmaVersion": 2022 + } } diff --git a/test/e2e/linkedom-default-ts/actor/tsconfig.json b/test/e2e/linkedom-default-ts/actor/tsconfig.json index c34e1edeacae..370e50c0ac13 100644 --- a/test/e2e/linkedom-default-ts/actor/tsconfig.json +++ b/test/e2e/linkedom-default-ts/actor/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "@apify/tsconfig", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2022", - "lib": ["DOM"] - }, - "include": ["./**/*.ts"] + "extends": "@apify/tsconfig", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "lib": ["DOM"] + }, + "include": ["./**/*.ts"] } diff --git a/test/e2e/migration/actor/.actor/actor.json b/test/e2e/migration/actor/.actor/actor.json index 29134d82e811..5cffe3b336a4 100644 --- a/test/e2e/migration/actor/.actor/actor.json +++ b/test/e2e/migration/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-migration", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-migration", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/playwright-default/actor/.actor/actor.json b/test/e2e/playwright-default/actor/.actor/actor.json index 9ed1dfad0f92..01ffaf8a8bec 100644 --- a/test/e2e/playwright-default/actor/.actor/actor.json +++ b/test/e2e/playwright-default/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-playwright-default", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-playwright-default", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/playwright-enqueue-links-base/actor/.actor/actor.json b/test/e2e/playwright-enqueue-links-base/actor/.actor/actor.json index e40f74e8a67a..6f9a6274b801 100644 --- a/test/e2e/playwright-enqueue-links-base/actor/.actor/actor.json +++ b/test/e2e/playwright-enqueue-links-base/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-playwright-enqueue-links-base", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-playwright-enqueue-links-base", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/playwright-enqueue-links/actor/.actor/actor.json b/test/e2e/playwright-enqueue-links/actor/.actor/actor.json index 7294db34b97a..2f4387bffb9e 100644 --- a/test/e2e/playwright-enqueue-links/actor/.actor/actor.json +++ b/test/e2e/playwright-enqueue-links/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-playwright-enqueue-links", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-playwright-enqueue-links", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/playwright-initial-cookies/actor/.actor/actor.json b/test/e2e/playwright-initial-cookies/actor/.actor/actor.json index 0404c8af3b89..24cbd3ac26cc 100644 --- a/test/e2e/playwright-initial-cookies/actor/.actor/actor.json +++ b/test/e2e/playwright-initial-cookies/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-playwright-initial-cookies", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-playwright-initial-cookies", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/playwright-introduction-guide/actor/.actor/actor.json b/test/e2e/playwright-introduction-guide/actor/.actor/actor.json index a1ad641fb86b..32cf768329e4 100644 --- a/test/e2e/playwright-introduction-guide/actor/.actor/actor.json +++ b/test/e2e/playwright-introduction-guide/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-playwright-introduction-guide", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-playwright-introduction-guide", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/playwright-multi-run/actor/.actor/actor.json b/test/e2e/playwright-multi-run/actor/.actor/actor.json index 46cf4e07f7ab..28976780d31a 100644 --- a/test/e2e/playwright-multi-run/actor/.actor/actor.json +++ b/test/e2e/playwright-multi-run/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-playwright-multi-run", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-playwright-multi-run", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/playwright-robots-file/actor/.actor/actor.json b/test/e2e/playwright-robots-file/actor/.actor/actor.json index 0454d98f8981..5e1ab6b674b4 100644 --- a/test/e2e/playwright-robots-file/actor/.actor/actor.json +++ b/test/e2e/playwright-robots-file/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-playwright-robots-file", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-playwright-robots-file", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/proxy-rotation/actor/.actor/actor.json b/test/e2e/proxy-rotation/actor/.actor/actor.json index 4af4d048905f..e4faf478826b 100644 --- a/test/e2e/proxy-rotation/actor/.actor/actor.json +++ b/test/e2e/proxy-rotation/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-proxy-rotation", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-proxy-rotation", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-default/actor/.actor/actor.json b/test/e2e/puppeteer-default/actor/.actor/actor.json index f2fa978c5cd6..3f19c88453b8 100644 --- a/test/e2e/puppeteer-default/actor/.actor/actor.json +++ b/test/e2e/puppeteer-default/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-default", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-default", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-enqueue-links/actor/.actor/actor.json b/test/e2e/puppeteer-enqueue-links/actor/.actor/actor.json index 7beecb4304d4..482ad1baa54b 100644 --- a/test/e2e/puppeteer-enqueue-links/actor/.actor/actor.json +++ b/test/e2e/puppeteer-enqueue-links/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-enqueue-links", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-enqueue-links", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-error-snapshot/actor/.actor/actor.json b/test/e2e/puppeteer-error-snapshot/actor/.actor/actor.json index 827dc94c4e26..b7260837321d 100644 --- a/test/e2e/puppeteer-error-snapshot/actor/.actor/actor.json +++ b/test/e2e/puppeteer-error-snapshot/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-error-snapshot", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-error-snapshot", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-ignore-ssl-errors/actor/.actor/actor.json b/test/e2e/puppeteer-ignore-ssl-errors/actor/.actor/actor.json index abbeda5d965d..1ae15904de5c 100644 --- a/test/e2e/puppeteer-ignore-ssl-errors/actor/.actor/actor.json +++ b/test/e2e/puppeteer-ignore-ssl-errors/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-ignore-ssl-errors", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-ignore-ssl-errors", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-initial-cookies/actor/.actor/actor.json b/test/e2e/puppeteer-initial-cookies/actor/.actor/actor.json index 328c5bb8a8c3..4ba5830e21b8 100644 --- a/test/e2e/puppeteer-initial-cookies/actor/.actor/actor.json +++ b/test/e2e/puppeteer-initial-cookies/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-initial-cookies", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-initial-cookies", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-page-info/actor/.actor/actor.json b/test/e2e/puppeteer-page-info/actor/.actor/actor.json index 285cbce737d3..362a048a371c 100644 --- a/test/e2e/puppeteer-page-info/actor/.actor/actor.json +++ b/test/e2e/puppeteer-page-info/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-page-info", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-page-info", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-store-pagination-jquery/actor/.actor/actor.json b/test/e2e/puppeteer-store-pagination-jquery/actor/.actor/actor.json index 8d6941f71f80..51183f88fef9 100644 --- a/test/e2e/puppeteer-store-pagination-jquery/actor/.actor/actor.json +++ b/test/e2e/puppeteer-store-pagination-jquery/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-store-pagination-jquery", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-store-pagination-jquery", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-store-pagination/actor/.actor/actor.json b/test/e2e/puppeteer-store-pagination/actor/.actor/actor.json index 0fd41a53d7f3..6cfd4ad3b5cf 100644 --- a/test/e2e/puppeteer-store-pagination/actor/.actor/actor.json +++ b/test/e2e/puppeteer-store-pagination/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-store-pagination", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-store-pagination", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/puppeteer-throw-on-ssl-errors/actor/.actor/actor.json b/test/e2e/puppeteer-throw-on-ssl-errors/actor/.actor/actor.json index 224de98d2f9e..2114c2353230 100644 --- a/test/e2e/puppeteer-throw-on-ssl-errors/actor/.actor/actor.json +++ b/test/e2e/puppeteer-throw-on-ssl-errors/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-puppeteer-throw-on-ssl-errors", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-puppeteer-throw-on-ssl-errors", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/request-queue-with-concurrency/actor/.actor/actor.json b/test/e2e/request-queue-with-concurrency/actor/.actor/actor.json index 972ffaa33f16..a5244b4c1514 100644 --- a/test/e2e/request-queue-with-concurrency/actor/.actor/actor.json +++ b/test/e2e/request-queue-with-concurrency/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-request-queue-with-concurrency", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-request-queue-with-concurrency", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/request-queue-zero-concurrency/actor/.actor/actor.json b/test/e2e/request-queue-zero-concurrency/actor/.actor/actor.json index 959ec7eaa2b0..62320bb40dba 100644 --- a/test/e2e/request-queue-zero-concurrency/actor/.actor/actor.json +++ b/test/e2e/request-queue-zero-concurrency/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-request-queue-zero-concurrency", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-request-queue-zero-concurrency", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/request-skip-navigation/actor/.actor/actor.json b/test/e2e/request-skip-navigation/actor/.actor/actor.json index 0f06a7057474..9a081e12f076 100644 --- a/test/e2e/request-skip-navigation/actor/.actor/actor.json +++ b/test/e2e/request-skip-navigation/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-request-skip-navigation", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-request-skip-navigation", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/session-rotation/actor/.actor/actor.json b/test/e2e/session-rotation/actor/.actor/actor.json index 7308531edb0f..835daebbcb08 100644 --- a/test/e2e/session-rotation/actor/.actor/actor.json +++ b/test/e2e/session-rotation/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-session-rotation", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-session-rotation", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/stagehand-claude/actor/.actor/actor.json b/test/e2e/stagehand-claude/actor/.actor/actor.json index 0cb717eb668f..3f0a2098208e 100644 --- a/test/e2e/stagehand-claude/actor/.actor/actor.json +++ b/test/e2e/stagehand-claude/actor/.actor/actor.json @@ -1,9 +1,9 @@ { - "actorSpecification": 1, - "name": "test-stagehand-claude", - "version": "0.0", - "buildTag": "latest", - "environmentVariables": { - "ANTHROPIC_API_KEY": "@anthropicApiKey" - } + "actorSpecification": 1, + "name": "test-stagehand-claude", + "version": "0.0", + "buildTag": "latest", + "environmentVariables": { + "ANTHROPIC_API_KEY": "@anthropicApiKey" + } } diff --git a/test/e2e/stagehand-concurrent/actor/.actor/actor.json b/test/e2e/stagehand-concurrent/actor/.actor/actor.json index 24cb060cb9e2..aeee6a4340fe 100644 --- a/test/e2e/stagehand-concurrent/actor/.actor/actor.json +++ b/test/e2e/stagehand-concurrent/actor/.actor/actor.json @@ -1,9 +1,9 @@ { - "actorSpecification": 1, - "name": "test-stagehand-concurrent", - "version": "0.0", - "buildTag": "latest", - "environmentVariables": { - "ANTHROPIC_API_KEY": "@anthropicApiKey" - } + "actorSpecification": 1, + "name": "test-stagehand-concurrent", + "version": "0.0", + "buildTag": "latest", + "environmentVariables": { + "ANTHROPIC_API_KEY": "@anthropicApiKey" + } } diff --git a/test/e2e/storage-open-return-storage-object/actor/.actor/actor.json b/test/e2e/storage-open-return-storage-object/actor/.actor/actor.json index 7faf158a7159..b9ac0d8f9f4f 100644 --- a/test/e2e/storage-open-return-storage-object/actor/.actor/actor.json +++ b/test/e2e/storage-open-return-storage-object/actor/.actor/actor.json @@ -1,7 +1,7 @@ { - "actorSpecification": 1, - "name": "test-kv-open-return-storage-object", - "version": "0.0", - "buildTag": "latest", - "env": null + "actorSpecification": 1, + "name": "test-kv-open-return-storage-object", + "version": "0.0", + "buildTag": "latest", + "env": null } diff --git a/test/e2e/tsconfig.json b/test/e2e/tsconfig.json index 327de21b08cf..a669fdc139ad 100644 --- a/test/e2e/tsconfig.json +++ b/test/e2e/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../tsconfig.json", - "compilerOptions": { - "module": "ESNext", - "target": "ESNext", - "allowJs": true, - "checkJs": true - }, - "include": ["./**/*.mjs", "./**/*.ts"] + "extends": "../tsconfig.json", + "compilerOptions": { + "module": "ESNext", + "target": "ESNext", + "allowJs": true, + "checkJs": true + }, + "include": ["./**/*.mjs", "./**/*.ts"] } diff --git a/test/tsconfig.json b/test/tsconfig.json index 1202ae509eaa..894a57b040a4 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,25 +1,25 @@ { - "extends": "../tsconfig.json", - "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/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"] - } - } + "extends": "../tsconfig.json", + "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/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/yarn.lock b/yarn.lock index 275b25a2ddcf..268f01d48a55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -345,10 +345,10 @@ __metadata: languageName: node linkType: hard -"@apify/tsconfig@npm:^0.1.1": - version: 0.1.1 - resolution: "@apify/tsconfig@npm:0.1.1" - checksum: 10c0/85b064b318ab71fc84a98d70b028ad510fe1be20452d057c0f4cda1b5c62cbe931e62f674ce927abda46c0b1cfc2f08f08a227b1d9385edb735d77b717dd9640 +"@apify/tsconfig@npm:^0.1.2": + version: 0.1.2 + resolution: "@apify/tsconfig@npm:0.1.2" + checksum: 10c0/5d877f16c3728c93d619714261c9e007a72d91a586ae0820b9ee52a71fb55e6402a45b3e78a8c03ef0d2fd639089786775761168620c51451a11053643af508c languageName: node linkType: hard @@ -448,97 +448,6 @@ __metadata: languageName: node linkType: hard -"@biomejs/biome@npm:^2.3.11": - version: 2.3.11 - resolution: "@biomejs/biome@npm:2.3.11" - dependencies: - "@biomejs/cli-darwin-arm64": "npm:2.3.11" - "@biomejs/cli-darwin-x64": "npm:2.3.11" - "@biomejs/cli-linux-arm64": "npm:2.3.11" - "@biomejs/cli-linux-arm64-musl": "npm:2.3.11" - "@biomejs/cli-linux-x64": "npm:2.3.11" - "@biomejs/cli-linux-x64-musl": "npm:2.3.11" - "@biomejs/cli-win32-arm64": "npm:2.3.11" - "@biomejs/cli-win32-x64": "npm:2.3.11" - dependenciesMeta: - "@biomejs/cli-darwin-arm64": - optional: true - "@biomejs/cli-darwin-x64": - optional: true - "@biomejs/cli-linux-arm64": - optional: true - "@biomejs/cli-linux-arm64-musl": - optional: true - "@biomejs/cli-linux-x64": - optional: true - "@biomejs/cli-linux-x64-musl": - optional: true - "@biomejs/cli-win32-arm64": - optional: true - "@biomejs/cli-win32-x64": - optional: true - bin: - biome: bin/biome - checksum: 10c0/b9764070c3d1583466a8861d37dc480c18103f7bb52115db0f265a38e6343d69792c9beea094e0b3db0905cb365b9a82ad2a0f3f05b7f04873a8f9b444263140 - languageName: node - linkType: hard - -"@biomejs/cli-darwin-arm64@npm:2.3.11": - version: 2.3.11 - resolution: "@biomejs/cli-darwin-arm64@npm:2.3.11" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@biomejs/cli-darwin-x64@npm:2.3.11": - version: 2.3.11 - resolution: "@biomejs/cli-darwin-x64@npm:2.3.11" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@biomejs/cli-linux-arm64-musl@npm:2.3.11": - version: 2.3.11 - resolution: "@biomejs/cli-linux-arm64-musl@npm:2.3.11" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@biomejs/cli-linux-arm64@npm:2.3.11": - version: 2.3.11 - resolution: "@biomejs/cli-linux-arm64@npm:2.3.11" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@biomejs/cli-linux-x64-musl@npm:2.3.11": - version: 2.3.11 - resolution: "@biomejs/cli-linux-x64-musl@npm:2.3.11" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@biomejs/cli-linux-x64@npm:2.3.11": - version: 2.3.11 - resolution: "@biomejs/cli-linux-x64@npm:2.3.11" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@biomejs/cli-win32-arm64@npm:2.3.11": - version: 2.3.11 - resolution: "@biomejs/cli-win32-arm64@npm:2.3.11" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@biomejs/cli-win32-x64@npm:2.3.11": - version: 2.3.11 - resolution: "@biomejs/cli-win32-x64@npm:2.3.11" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@borewit/text-codec@npm:^0.1.0": version: 0.1.1 resolution: "@borewit/text-codec@npm:0.1.1" @@ -1183,8 +1092,7 @@ __metadata: dependencies: "@apify/eslint-config": "npm:^1.0.0" "@apify/log": "npm:^2.5.18" - "@apify/tsconfig": "npm:^0.1.1" - "@biomejs/biome": "npm:^2.3.11" + "@apify/tsconfig": "npm:^0.1.2" "@commitlint/config-conventional": "npm:^20.0.0" "@playwright/browser-chromium": "npm:1.58.1" "@playwright/browser-firefox": "npm:1.58.1" @@ -1232,6 +1140,7 @@ __metadata: lerna: "npm:^9.0.0" lint-staged: "npm:^16.0.0" nock: "npm:^14.0.10" + oxfmt: "npm:^0.45.0" playwright: "npm:1.58.1" portastic: "npm:^1.0.1" proxy: "npm:^2.2.0" @@ -3130,6 +3039,139 @@ __metadata: languageName: node linkType: hard +"@oxfmt/binding-android-arm-eabi@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-android-arm-eabi@npm:0.45.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-android-arm64@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-android-arm64@npm:0.45.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-darwin-arm64@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-darwin-arm64@npm:0.45.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-darwin-x64@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-darwin-x64@npm:0.45.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxfmt/binding-freebsd-x64@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-freebsd-x64@npm:0.45.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm-gnueabihf@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-arm-gnueabihf@npm:0.45.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm-musleabihf@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-arm-musleabihf@npm:0.45.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm64-gnu@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-arm64-gnu@npm:0.45.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm64-musl@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-arm64-musl@npm:0.45.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-linux-ppc64-gnu@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-ppc64-gnu@npm:0.45.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-riscv64-gnu@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-riscv64-gnu@npm:0.45.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-riscv64-musl@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-riscv64-musl@npm:0.45.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-linux-s390x-gnu@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-s390x-gnu@npm:0.45.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-x64-gnu@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-x64-gnu@npm:0.45.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-x64-musl@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-linux-x64-musl@npm:0.45.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-openharmony-arm64@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-openharmony-arm64@npm:0.45.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-arm64-msvc@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-win32-arm64-msvc@npm:0.45.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-ia32-msvc@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-win32-ia32-msvc@npm:0.45.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-x64-msvc@npm:0.45.0": + version: 0.45.0 + resolution: "@oxfmt/binding-win32-x64-msvc@npm:0.45.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@pinojs/redact@npm:^0.4.0": version: 0.4.0 resolution: "@pinojs/redact@npm:0.4.0" @@ -11984,6 +12026,75 @@ __metadata: languageName: node linkType: hard +"oxfmt@npm:^0.45.0": + version: 0.45.0 + resolution: "oxfmt@npm:0.45.0" + dependencies: + "@oxfmt/binding-android-arm-eabi": "npm:0.45.0" + "@oxfmt/binding-android-arm64": "npm:0.45.0" + "@oxfmt/binding-darwin-arm64": "npm:0.45.0" + "@oxfmt/binding-darwin-x64": "npm:0.45.0" + "@oxfmt/binding-freebsd-x64": "npm:0.45.0" + "@oxfmt/binding-linux-arm-gnueabihf": "npm:0.45.0" + "@oxfmt/binding-linux-arm-musleabihf": "npm:0.45.0" + "@oxfmt/binding-linux-arm64-gnu": "npm:0.45.0" + "@oxfmt/binding-linux-arm64-musl": "npm:0.45.0" + "@oxfmt/binding-linux-ppc64-gnu": "npm:0.45.0" + "@oxfmt/binding-linux-riscv64-gnu": "npm:0.45.0" + "@oxfmt/binding-linux-riscv64-musl": "npm:0.45.0" + "@oxfmt/binding-linux-s390x-gnu": "npm:0.45.0" + "@oxfmt/binding-linux-x64-gnu": "npm:0.45.0" + "@oxfmt/binding-linux-x64-musl": "npm:0.45.0" + "@oxfmt/binding-openharmony-arm64": "npm:0.45.0" + "@oxfmt/binding-win32-arm64-msvc": "npm:0.45.0" + "@oxfmt/binding-win32-ia32-msvc": "npm:0.45.0" + "@oxfmt/binding-win32-x64-msvc": "npm:0.45.0" + tinypool: "npm:2.1.0" + dependenciesMeta: + "@oxfmt/binding-android-arm-eabi": + optional: true + "@oxfmt/binding-android-arm64": + optional: true + "@oxfmt/binding-darwin-arm64": + optional: true + "@oxfmt/binding-darwin-x64": + optional: true + "@oxfmt/binding-freebsd-x64": + optional: true + "@oxfmt/binding-linux-arm-gnueabihf": + optional: true + "@oxfmt/binding-linux-arm-musleabihf": + optional: true + "@oxfmt/binding-linux-arm64-gnu": + optional: true + "@oxfmt/binding-linux-arm64-musl": + optional: true + "@oxfmt/binding-linux-ppc64-gnu": + optional: true + "@oxfmt/binding-linux-riscv64-gnu": + optional: true + "@oxfmt/binding-linux-riscv64-musl": + optional: true + "@oxfmt/binding-linux-s390x-gnu": + optional: true + "@oxfmt/binding-linux-x64-gnu": + optional: true + "@oxfmt/binding-linux-x64-musl": + optional: true + "@oxfmt/binding-openharmony-arm64": + optional: true + "@oxfmt/binding-win32-arm64-msvc": + optional: true + "@oxfmt/binding-win32-ia32-msvc": + optional: true + "@oxfmt/binding-win32-x64-msvc": + optional: true + bin: + oxfmt: bin/oxfmt + checksum: 10c0/bb839d8a95b56a0e9d8a89104114a609e6ee6631c22434a80d5d682fa4758d69ade81a558172d503ee051196cff5609e2f523d904ffa49db2acd31178ec8f768 + languageName: node + linkType: hard + "p-cancelable@npm:^4.0.1": version: 4.0.1 resolution: "p-cancelable@npm:4.0.1" @@ -14494,6 +14605,13 @@ __metadata: languageName: node linkType: hard +"tinypool@npm:2.1.0": + version: 2.1.0 + resolution: "tinypool@npm:2.1.0" + checksum: 10c0/9fb1c760558c6264e0f4cfde96a63b12450b43f1730fbe6274aa24ddbdf488745c08924d0dea7a1303b47d555416a6415f2113898c69b6ecf731e75ac95238a5 + languageName: node + linkType: hard + "tinyrainbow@npm:^3.0.3": version: 3.0.3 resolution: "tinyrainbow@npm:3.0.3" From 100eceb663b2c2e4a7c445a72af97e5938c90599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Wed, 15 Apr 2026 15:42:49 +0200 Subject: [PATCH 2/4] chore: migrate linter from eslint to oxlint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace ESLint with Oxlint. Type-aware linting is enabled via oxlint-tsgolint and the --type-aware flag. Config is modeled after mikro-orm's oxlint setup. Lint scope covers packages, test, and docs. Key rule choices: - no-misused-promises is configured with checksVoidReturn.arguments disabled because event-listener and timer callbacks routinely take async functions on purpose (setInterval(async), page.on(async)). - no-deprecated stays at warn — internal back-compat support for APIs we ourselves deprecated (pseudoUrls, experiments.requestLocking) uses inline oxlint-disable comments so it doesn't hide real issues. - Rules known to produce unsafe auto-fixes (no-useless-default-assignment, return-await, no-inferrable-types) are disabled so lint-staged can run oxlint --fix without risk of stripping destructuring defaults or semantically-significant await keywords. tsconfig adjustments required by tsgolint: - Drop baseUrl (tsgolint removed support); the one non-relative import in memory-storage was switched to a relative path. - Prefix tsconfig paths with ./ so tsgolint accepts them. - Add noEmit to the root tsconfig.json so type-aware lint doesn't try to emit over JS files in packages/templates. - Drop tsconfig.eslint.json — oxlint auto-discovers per-file tsconfigs. Source fixes for newly-promoted rules: - Removed dead code after a throw in dataset.ts. - let→const where oxlint could see the variable was assigned once. - Stripped unnecessary template expressions in tests. - Rewrote docs examples to use node: protocol, RegExp#exec, etc. - Bumped z.ZodSchema → z.ZodType in stagehand (the former is deprecated). - Made arrow callbacks in puppeteer/playwright click-elements async so Promise.all() sees explicit Promise return types. CI's lint job runs yarn lint followed by yarn format:check. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/test-ci.yml | 2 +- .oxlintrc.json | 201 ++ docs/examples/file_download_stream.ts | 2 +- .../running-in-web-server/web-server.mjs | 2 +- docs/guides/session_management_basic.ts | 2 +- docs/guides/session_management_http.ts | 2 +- eslint.config.mjs | 91 - package.json | 17 +- packages/basic-crawler/src/index.ts | 2 +- .../src/internals/basic-crawler.ts | 7 +- .../src/internals/browser-crawler.ts | 2 +- packages/browser-pool/src/index.ts | 20 +- .../cli/src/commands/CreateProjectCommand.ts | 2 +- packages/core/src/crawlers/crawler_utils.ts | 2 +- .../core/src/enqueue_links/enqueue_links.ts | 1 + packages/core/src/index.ts | 2 +- packages/core/src/serialization.ts | 1 + .../core/src/session_pool/session_pool.ts | 2 +- packages/core/src/storages/dataset.ts | 2 - packages/core/src/storages/request_list.ts | 2 + .../core/src/storages/request_provider.ts | 2 +- packages/core/src/typedefs.ts | 2 +- .../src/resource-clients/request-queue.ts | 4 +- .../test/no-writing-to-disk.test.ts | 2 +- .../test/write-metadata.test.ts | 8 +- .../internals/enqueue-links/click-elements.ts | 13 +- .../internals/enqueue-links/click-elements.ts | 12 +- .../src/internals/stagehand-crawler.ts | 2 +- .../src/internals/utils/stagehand-utils.ts | 4 +- packages/types/src/index.ts | 12 +- packages/utils/src/index.ts | 8 +- packages/utils/src/internals/cheerio.ts | 2 +- packages/utils/src/internals/debug.ts | 2 +- packages/utils/src/internals/extract-urls.ts | 2 +- .../browser-plugins/plugins.test.ts | 2 +- test/browser-pool/browser-pool.test.ts | 2 +- .../playwright_launcher.test.ts | 2 +- .../adaptive_playwright_crawler.test.ts | 4 +- test/core/crawlers/basic_crawler.test.ts | 2 +- test/core/crawlers/browser_crawler.test.ts | 4 +- test/core/crawlers/cheerio_crawler.test.ts | 4 +- test/core/crawlers/dom_crawler.test.ts | 2 +- test/core/crawlers/file_download.test.ts | 2 +- test/core/crawlers/http_crawler.test.ts | 4 +- test/core/crawlers/playwright_crawler.test.ts | 2 +- test/core/crawlers/puppeteer_crawler.test.ts | 9 +- test/core/crawlers/statistics.test.ts | 2 +- .../core/enqueue_links/click_elements.test.ts | 2 +- test/core/enqueue_links/enqueue_links.test.ts | 16 +- test/core/playwright_utils.test.ts | 4 +- test/core/puppeteer_utils.test.ts | 4 +- test/core/request_list.test.ts | 14 +- test/core/session_pool/session_pool.test.ts | 2 +- test/core/sitemap_request_list.test.ts | 4 +- test/core/storages/dataset.test.ts | 2 +- test/core/storages/key_value_store.test.ts | 2 +- test/core/storages/utils.test.ts | 2 +- test/tsconfig.json | 20 +- tsconfig.build.json | 1 - tsconfig.eslint.json | 18 - tsconfig.json | 24 +- yarn.lock | 1738 +++-------------- 62 files changed, 663 insertions(+), 1670 deletions(-) create mode 100644 .oxlintrc.json delete mode 100644 eslint.config.mjs delete mode 100644 tsconfig.eslint.json diff --git a/.github/workflows/test-ci.yml b/.github/workflows/test-ci.yml index 89307e2db0a0..8d4a2b316912 100644 --- a/.github/workflows/test-ci.yml +++ b/.github/workflows/test-ci.yml @@ -170,7 +170,7 @@ jobs: - name: Install Dependencies run: yarn - - name: ESLint + - name: Oxlint run: yarn lint - name: Oxfmt format check diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 000000000000..7b6c06023725 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,201 @@ +{ + "$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxlint/configuration_schema.json", + "ignorePatterns": [ + "**/node_modules", + "**/dist", + "**/coverage", + "**/.turbo", + "**/website/build", + "**/website/.docusaurus", + "**/*.d.ts", + "packages/templates/templates/**", + "packages/templates/scripts/**", + "test/e2e/**" + ], + "plugins": [ + "typescript", + "import", + "unicorn" + ], + "env": { + "browser": true, + "node": true + }, + "globals": { + "vi": "readonly", + "vitest": "readonly", + "describe": "readonly", + "it": "readonly", + "test": "readonly", + "expect": "readonly", + "expectTypeOf": "readonly", + "beforeAll": "readonly", + "afterAll": "readonly", + "beforeEach": "readonly", + "afterEach": "readonly" + }, + "rules": { + "no-var": "error", + "prefer-const": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "constructor-super": "error", + "for-direction": "error", + "getter-return": "error", + "no-async-promise-executor": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-const-assign": "error", + "no-constant-condition": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-class-members": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-pattern": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": "error", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-new-native-nonconstructor": "error", + "no-obj-calls": "error", + "no-prototype-builtins": "error", + "no-self-assign": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-this-before-super": "error", + "no-undef": "off", + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unused-labels": "error", + "no-useless-catch": "error", + "no-useless-escape": "error", + "no-with": "error", + "require-yield": "error", + "use-isnan": "error", + "valid-typeof": "error", + "eqeqeq": ["error", "smart"], + "no-console": "off", + "no-throw-literal": "error", + "yoda": "error", + + "typescript/consistent-type-imports": ["error", { "disallowTypeAnnotations": false }], + "typescript/consistent-type-definitions": ["error", "interface"], + "typescript/array-type": "error", + "typescript/no-floating-promises": "error", + "typescript/no-explicit-any": "off", + "typescript/no-non-null-assertion": "off", + "typescript/ban-ts-comment": "off", + "typescript/no-unused-vars": "off", + "typescript/no-empty-function": "off", + "typescript/no-empty-object-type": "off", + "typescript/no-empty-interface": "off", + "typescript/no-useless-constructor": "off", + "no-useless-constructor": "off", + "typescript/no-namespace": ["error", { "allowDeclarations": true }], + "typescript/no-this-alias": "error", + "typescript/no-var-requires": "error", + "typescript/no-require-imports": "off", + "typescript/adjacent-overload-signatures": "error", + "typescript/consistent-type-assertions": "error", + "typescript/no-array-constructor": "error", + "typescript/no-misused-new": "error", + "typescript/triple-slash-reference": "error", + "typescript/no-redeclare": "error", + "typescript/no-unnecessary-qualifier": "error", + "typescript/no-inferrable-types": "off", + "typescript/no-useless-default-assignment": "off", + "typescript/no-unsafe-declaration-merging": "off", + "typescript/no-unnecessary-parameter-property-assignment": "off", + + "typescript/await-thenable": "error", + "typescript/no-for-in-array": "error", + "typescript/no-implied-eval": "error", + "typescript/no-mixed-enums": "error", + "typescript/no-unsafe-unary-minus": "error", + "typescript/related-getter-setter-pairs": "error", + "typescript/only-throw-error": "error", + "typescript/no-deprecated": "warn", + "typescript/prefer-find": "error", + "typescript/prefer-includes": "error", + "typescript/prefer-string-starts-ends-with": "error", + "typescript/no-duplicate-type-constituents": "error", + "typescript/consistent-type-exports": "error", + + "typescript/prefer-optional-chain": "error", + "typescript/prefer-regexp-exec": "error", + "typescript/no-misused-promises": ["error", { "checksVoidReturn": { "arguments": false } }], + "typescript/no-unnecessary-template-expression": "error", + "typescript/no-unnecessary-boolean-literal-compare": "error", + "typescript/no-array-delete": "error", + "typescript/return-await": "off", + "typescript/use-unknown-in-catch-callback-variable": "off", + "typescript/no-unnecessary-condition": "off", + "typescript/no-confusing-void-expression": "off", + "typescript/switch-exhaustiveness-check": "off", + "typescript/no-unnecessary-type-assertion": "off", + "typescript/no-redundant-type-constituents": "off", + "typescript/no-misused-spread": "off", + "typescript/no-unsafe-enum-comparison": "off", + "typescript/unbound-method": "off", + "typescript/no-unsafe-argument": "off", + "typescript/no-unsafe-assignment": "off", + "typescript/no-unsafe-call": "off", + "typescript/no-unsafe-member-access": "off", + "typescript/no-unsafe-return": "off", + "typescript/no-unsafe-type-assertion": "off", + "typescript/strict-boolean-expressions": "off", + "typescript/prefer-readonly-parameter-types": "off", + "typescript/promise-function-async": "off", + "typescript/require-await": "off", + "typescript/strict-void-return": "off", + "typescript/require-array-sort-compare": "off", + "typescript/restrict-template-expressions": "off", + "typescript/restrict-plus-operands": "off", + "typescript/no-base-to-string": "off", + "typescript/no-use-before-define": "off", + + "import/no-duplicates": "error", + + "unicorn/prefer-node-protocol": "error", + "unicorn/no-new-array": "off", + "unicorn/no-empty-file": "off", + "unicorn/no-useless-spread": "off" + }, + "overrides": [ + { + "files": ["test/**/*", "packages/*/test/**/*"], + "rules": { + "typescript/consistent-type-imports": "off", + "typescript/no-floating-promises": "off", + "typescript/only-throw-error": "off", + "typescript/await-thenable": "off", + "typescript/no-deprecated": "off", + "typescript/no-array-delete": "off", + "typescript/no-mixed-enums": "off", + "typescript/no-implied-eval": "off", + "no-console": "off", + "no-control-regex": "off", + "no-empty": "off", + "import/no-duplicates": "off" + } + }, + { + "files": ["packages/templates/**/*"], + "rules": { + "typescript/no-unused-vars": "off", + "no-unused-vars": "off" + } + } + ] +} diff --git a/docs/examples/file_download_stream.ts b/docs/examples/file_download_stream.ts index fa3d3d59ad9d..9517531b5bd2 100644 --- a/docs/examples/file_download_stream.ts +++ b/docs/examples/file_download_stream.ts @@ -1,4 +1,4 @@ -import { pipeline, Transform } from 'stream'; +import { pipeline, Transform } from 'node:stream'; import { FileDownload, type CrawleeLogger } from 'crawlee'; diff --git a/docs/guides/running-in-web-server/web-server.mjs b/docs/guides/running-in-web-server/web-server.mjs index 7c677db912bd..29e6b27367bd 100644 --- a/docs/guides/running-in-web-server/web-server.mjs +++ b/docs/guides/running-in-web-server/web-server.mjs @@ -1,6 +1,6 @@ import { randomUUID } from 'node:crypto'; import { CheerioCrawler, log } from 'crawlee'; -import { createServer } from 'http'; +import { createServer } from 'node:http'; // We will bind an HTTP response that we want to send to the Request.uniqueKey const requestsToResponses = new Map(); diff --git a/docs/guides/session_management_basic.ts b/docs/guides/session_management_basic.ts index b579f3a31a43..3e6f96f7a0e1 100644 --- a/docs/guides/session_management_basic.ts +++ b/docs/guides/session_management_basic.ts @@ -52,7 +52,7 @@ const crawler = new BasicCrawler({ newCookies?.forEach((cookie) => { if (cookie) { - session?.cookieJar?.setCookie(cookie, url); + void session?.cookieJar?.setCookie(cookie, url); } }); } diff --git a/docs/guides/session_management_http.ts b/docs/guides/session_management_http.ts index 5a556ea73408..3aae8426886d 100644 --- a/docs/guides/session_management_http.ts +++ b/docs/guides/session_management_http.ts @@ -13,7 +13,7 @@ const crawler = new HttpCrawler({ // and set the cookie header to request automatically (default is true). persistCookiesPerSession: true, async requestHandler({ session, body }) { - const title = (body as string).match(/(.*?)<\/title>/)?.[1]; + const title = /(.*?)<\/title>/.exec(body as string)?.[1]; if (title === 'Blocked') { session?.retire(); diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index 1aab676d10e8..000000000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,91 +0,0 @@ -import tsEslint from 'typescript-eslint'; -import apifyJs from '@apify/eslint-config/js'; -import apify from '@apify/eslint-config/ts'; -import stylistic from '@stylistic/eslint-plugin'; -import prettier from 'eslint-config-prettier'; - -export default [ - { - ignores: ['**/dist', 'node_modules', 'coverage', 'website/{build,.docusaurus}', '**/*.d.ts'], - }, - ...apify, - prettier, - { - languageOptions: { - parser: tsEslint.parser, - parserOptions: { - project: 'tsconfig.eslint.json', - }, - }, - }, - { - plugins: { - '@typescript-eslint': tsEslint.plugin, - '@stylistic': stylistic, - }, - rules: { - '@typescript-eslint/no-empty-object-type': 'off', - '@typescript-eslint/no-explicit-any': 'off', - 'max-classes-per-file': 'off', - 'no-empty-function': 'off', - 'import/order': 'off', // TODO - 'no-use-before-define': 'off', // TODO - 'no-param-reassign': 'off', - 'no-void': 'off', - 'no-underscore-dangle': 'off', - 'no-console': 'off', - 'import/no-extraneous-dependencies': 'off', - 'import/extensions': 'off', - 'import/no-default-export': 'off', - '@typescript-eslint/array-type': 'error', - '@typescript-eslint/ban-ts-comment': 0, - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - 'disallowTypeAnnotations': false, - }, - ], - '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], - '@stylistic/member-delimiter-style': [ - 'error', - { - 'multiline': { 'delimiter': 'semi', 'requireLast': true }, - 'singleline': { 'delimiter': 'semi', 'requireLast': false }, - }, - ], - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/promise-function-async': 'off', - 'no-promise-executor-return': 'off', - '@typescript-eslint/prefer-destructuring': 'off', - 'prefer-destructuring': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-floating-promises': 'error', - '@typescript-eslint/no-unused-vars': 'off', - '@stylistic/comma-dangle': ['error', 'always-multiline'], - }, - }, - { - files: ['packages/templates/**/*'], - rules: { - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': 'off', - }, - }, - { - files: ['website/**/*'], - rules: { - '@typescript-eslint/no-shadow': 'off', - 'no-console': 'off', - '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 1d8017c3c58f..e6f5664563ac 100644 --- a/package.json +++ b/package.json @@ -49,21 +49,19 @@ "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,mjs}\" --fix", + "lint": "oxlint packages test docs --tsconfig=tsconfig.json --type-aware", + "lint:fix": "oxlint packages test docs --tsconfig=tsconfig.json --type-aware --fix", "format": "oxfmt packages test docs --write", "format:check": "oxfmt packages test docs", "prepare": "husky" }, "devDependencies": { - "@apify/eslint-config": "^1.0.0", "@apify/log": "^2.5.18", "@apify/tsconfig": "^0.1.2", "@commitlint/config-conventional": "^20.0.0", "@playwright/browser-chromium": "1.58.1", "@playwright/browser-firefox": "1.58.1", "@playwright/browser-webkit": "1.58.1", - "@stylistic/eslint-plugin": "^5.0.0", "@types/content-type": "^1.1.8", "@types/deep-equal": "^1.0.4", "@types/domhandler": "^3.1.0", @@ -92,12 +90,9 @@ "commitlint": "^20.0.0", "cross-env": "^10.0.0", "deep-equal": "^2.2.3", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.3", "express": "^5.1.0", "fs-extra": "^11.3.0", "gen-esm-wrapper": "^1.1.3", - "globals": "^17.0.0", "globby": "^15.0.0", "got": "^14.4.7", "husky": "^9.1.7", @@ -107,6 +102,8 @@ "lint-staged": "^16.0.0", "nock": "^14.0.10", "oxfmt": "^0.45.0", + "oxlint": "^1.59.0", + "oxlint-tsgolint": "^0.20.0", "playwright": "1.58.1", "portastic": "^1.0.1", "proxy": "^2.2.0", @@ -115,12 +112,14 @@ "tsx": "^4.19.4", "turbo": "^2.5.3", "typescript": "^5.8.3", - "typescript-eslint": "^8.32.0", "vite-tsconfig-paths": "^5.1.4", "vitest": "^4.1.0-beta.6" }, "lint-staged": { - "*.ts": "oxfmt --write --no-error-on-unmatched-pattern" + "*.ts": [ + "oxlint --fix", + "oxfmt --write --no-error-on-unmatched-pattern" + ] }, "packageManager": "yarn@4.10.3", "volta": { diff --git a/packages/basic-crawler/src/index.ts b/packages/basic-crawler/src/index.ts index ab98a100405a..e0df1299633b 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.js'; -export { CheerioRoot, CheerioAPI, Cheerio, Element } from '@crawlee/utils'; +export type { CheerioRoot, CheerioAPI, Cheerio, Element } from '@crawlee/utils'; diff --git a/packages/basic-crawler/src/internals/basic-crawler.ts b/packages/basic-crawler/src/internals/basic-crawler.ts index b980ccea6765..bcc3b4c3923d 100644 --- a/packages/basic-crawler/src/internals/basic-crawler.ts +++ b/packages/basic-crawler/src/internals/basic-crawler.ts @@ -1601,8 +1601,8 @@ export class BasicCrawler< async exportData(path: string, format?: 'json' | 'csv', options?: DatasetExportOptions): Promise { const supportedFormats = ['json', 'csv']; - if (!format && path.match(/\.(json|csv)$/i)) { - format = path.toLowerCase().match(/\.(json|csv)$/)![1] as 'json' | 'csv'; + if (!format && /\.(json|csv)$/i.exec(path)) { + format = /\.(json|csv)$/.exec(path.toLowerCase())![1] as 'json' | 'csv'; } if (!format) { @@ -2245,9 +2245,12 @@ export class BasicCrawler< private async _getRequestQueue() { // Check if it's explicitly disabled + // oxlint-disable-next-line typescript/no-deprecated -- still honored for opt-out until the flag is removed if (this.experiments.requestLocking === false) { + // oxlint-disable-next-line typescript/no-deprecated if (!this._experimentWarnings.requestLocking) { this.log.info('Using the old RequestQueue implementation without request locking.'); + // oxlint-disable-next-line typescript/no-deprecated this._experimentWarnings.requestLocking = true; } diff --git a/packages/browser-crawler/src/internals/browser-crawler.ts b/packages/browser-crawler/src/internals/browser-crawler.ts index 7d1d5b5ca21a..245e37f032c0 100644 --- a/packages/browser-crawler/src/internals/browser-crawler.ts +++ b/packages/browser-crawler/src/internals/browser-crawler.ts @@ -615,7 +615,7 @@ export abstract class BrowserCrawler< protected async _handleNavigationTimeout(crawlingContext: BrowserCrawlingContext, error: Error): Promise { const { session } = crawlingContext; - if (error && error.constructor.name === 'TimeoutError') { + if (error?.constructor.name === 'TimeoutError') { handleRequestTimeout({ session, errorMessage: error.message }); } diff --git a/packages/browser-pool/src/index.ts b/packages/browser-pool/src/index.ts index 6f7a185e63c0..3b3ff37f60f8 100644 --- a/packages/browser-pool/src/index.ts +++ b/packages/browser-pool/src/index.ts @@ -26,28 +26,26 @@ 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, +export type { BrowserSpecification, FingerprintGenerator, FingerprintGeneratorOptions, GetFingerprintReturn, } from './fingerprinting/types.js'; -export { BrowserController, BrowserControllerEvents } from './abstract-classes/browser-controller.js'; +export { BrowserName, DeviceCategory, OperatingSystemsName } from './fingerprinting/types.js'; +export type { BrowserControllerEvents } from './abstract-classes/browser-controller.js'; +export { BrowserController } 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 { +export type { CommonPage, CommonLibrary, - BrowserPlugin, BrowserPluginOptions, CreateLaunchContextOptions, - BrowserLaunchError, - DEFAULT_USER_AGENT, } from './abstract-classes/browser-plugin.js'; -export { LaunchContext, LaunchContextOptions } from './launch-context.js'; -export { InferBrowserPluginArray, UnwrapPromise } from './utils.js'; +export { BrowserPlugin, BrowserLaunchError, DEFAULT_USER_AGENT } from './abstract-classes/browser-plugin.js'; +export type { LaunchContextOptions } from './launch-context.js'; +export { LaunchContext } from './launch-context.js'; +export type { InferBrowserPluginArray, UnwrapPromise } from './utils.js'; export { anonymizeProxySugar, type AnonymizeProxySugarOptions } from './anonymize-proxy.js'; diff --git a/packages/cli/src/commands/CreateProjectCommand.ts b/packages/cli/src/commands/CreateProjectCommand.ts index dd1f89d047f3..8163b9879728 100644 --- a/packages/cli/src/commands/CreateProjectCommand.ts +++ b/packages/cli/src/commands/CreateProjectCommand.ts @@ -188,7 +188,7 @@ export class CreateProjectCommand implements CommandModule( function pluckValue(streamArray: Chain) { const realPush = streamArray.push.bind(streamArray); + // oxlint-disable-next-line typescript/prefer-optional-chain -- stream-json terminates on null push; `?.` returns undefined instead which breaks the pipeline streamArray.push = (obj) => realPush(obj && obj.value); return streamArray; } diff --git a/packages/core/src/session_pool/session_pool.ts b/packages/core/src/session_pool/session_pool.ts index 0444a840a1b6..967a5cdf91ad 100644 --- a/packages/core/src/session_pool/session_pool.ts +++ b/packages/core/src/session_pool/session_pool.ts @@ -297,7 +297,7 @@ export class SessionPool extends EventEmitter { try { if (sessionId) { const session = this.sessionMap.get(sessionId); - if (session && session.isUsable()) return session; + if (session?.isUsable()) return session; return undefined; } diff --git a/packages/core/src/storages/dataset.ts b/packages/core/src/storages/dataset.ts index 697e21554096..4a8e93833eaa 100644 --- a/packages/core/src/storages/dataset.ts +++ b/packages/core/src/storages/dataset.ts @@ -387,8 +387,6 @@ export class Dataset { } throw new Error(`Unsupported content type: ${contentType}`); - - return items; } /** diff --git a/packages/core/src/storages/request_list.ts b/packages/core/src/storages/request_list.ts index 7690f6ece0e2..a95ec0d594c7 100644 --- a/packages/core/src/storages/request_list.ts +++ b/packages/core/src/storages/request_list.ts @@ -454,6 +454,7 @@ export class RequestList implements IRequestList { // We don't need the sources so we purge them to // prevent them from hanging in memory. for (let i = 0; i < this.sources.length; i++) { + // oxlint-disable-next-line typescript/no-array-delete -- intentional, drop the slot so V8 can collect the object delete this.sources[i]; } this.sources = []; @@ -478,6 +479,7 @@ export class RequestList implements IRequestList { const source = this.sources[i]; // Using delete here to drop the original object ASAP to free memory // .pop would reverse the array and .shift is SLOW. + // oxlint-disable-next-line typescript/no-array-delete delete this.sources[i]; if (typeof source === 'object' && (source as Dictionary).requestsFromUrl) { diff --git a/packages/core/src/storages/request_provider.ts b/packages/core/src/storages/request_provider.ts index c2f940b2f088..3e5dbf06af90 100644 --- a/packages/core/src/storages/request_provider.ts +++ b/packages/core/src/storages/request_provider.ts @@ -901,7 +901,7 @@ export abstract class RequestProvider implements IStorage, IRequestManager { declare class BuiltRequestProvider extends RequestProvider { override fetchNextRequest( - options?: RequestOptions | undefined, + options?: RequestOptions, ): Promise | null>; protected override ensureHeadIsNonEmpty(): Promise; diff --git a/packages/core/src/typedefs.ts b/packages/core/src/typedefs.ts index 9564cda5fa86..0d6b811dd9ce 100644 --- a/packages/core/src/typedefs.ts +++ b/packages/core/src/typedefs.ts @@ -14,4 +14,4 @@ export function keys(obj: T) { return Object.keys(obj) as (keyof T)[]; } -export { AllowedHttpMethods } from '@crawlee/types'; +export type { AllowedHttpMethods } from '@crawlee/types'; diff --git a/packages/memory-storage/src/resource-clients/request-queue.ts b/packages/memory-storage/src/resource-clients/request-queue.ts index 1b56ea374d49..7a10b0267cb2 100644 --- a/packages/memory-storage/src/resource-clients/request-queue.ts +++ b/packages/memory-storage/src/resource-clients/request-queue.ts @@ -6,8 +6,8 @@ import type * as storage from '@crawlee/types'; import { AsyncQueue } from '@sapphire/async-queue'; import { s } from '@sapphire/shapeshift'; 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 type { RequestQueueFileSystemEntry } from '../fs/request-queue/fs.js'; +import type { RequestQueueMemoryEntry } from '../fs/request-queue/memory.js'; import { scheduleBackgroundTask } from '../background-handler/index.js'; import { findRequestQueueByPossibleId } from '../cache-helpers.js'; 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 871bd689dc44..83692d66decb 100644 --- a/packages/memory-storage/test/no-writing-to-disk.test.ts +++ b/packages/memory-storage/test/no-writing-to-disk.test.ts @@ -44,7 +44,7 @@ describe('persistStorage option', () => { const keyValueStore = storage.keyValueStore(keyValueStoreInfo.id); await keyValueStore.setRecord({ key: 'foo', value: 'test' }); - const storePath = resolve(storage.keyValueStoresDirectory, `${keyValueStoreInfo.id}`); + const storePath = resolve(storage.keyValueStoresDirectory, keyValueStoreInfo.id); await waitTillWrittenToDisk(storePath); diff --git a/packages/memory-storage/test/write-metadata.test.ts b/packages/memory-storage/test/write-metadata.test.ts index f74203dc2346..a11e1726ef3e 100644 --- a/packages/memory-storage/test/write-metadata.test.ts +++ b/packages/memory-storage/test/write-metadata.test.ts @@ -21,7 +21,7 @@ describe('writeMetadata option', () => { test('creating a data store should not write __metadata__.json file', async () => { const keyValueStore = await storage.keyValueStores().getOrCreate(); - const expectedPath = resolve(storage.keyValueStoresDirectory, `${keyValueStore.id}`); + const expectedPath = resolve(storage.keyValueStoresDirectory, keyValueStore.id); // We check that reading the directory for the store throws an error, which means it wasn't created on disk await expect(async () => readdir(expectedPath)).rejects.toThrow(); @@ -36,7 +36,7 @@ describe('writeMetadata option', () => { const expectedFilePath = resolve(storage.keyValueStoresDirectory, `${keyValueStoreInfo.id}/foo.txt`); await waitTillWrittenToDisk(expectedFilePath); - const directoryFiles = await readdir(resolve(storage.keyValueStoresDirectory, `${keyValueStoreInfo.id}`)); + const directoryFiles = await readdir(resolve(storage.keyValueStoresDirectory, keyValueStoreInfo.id)); expect(directoryFiles).toHaveLength(1); }); @@ -51,7 +51,7 @@ describe('writeMetadata option', () => { test('creating a data store should write __metadata__.json file', async () => { const keyValueStore = await storage.keyValueStores().getOrCreate(); - const expectedPath = resolve(storage.keyValueStoresDirectory, `${keyValueStore.id}`); + const expectedPath = resolve(storage.keyValueStoresDirectory, keyValueStore.id); await waitTillWrittenToDisk(expectedPath); const directoryFiles = await readdir(expectedPath); @@ -72,7 +72,7 @@ describe('writeMetadata option', () => { ); await Promise.all([waitTillWrittenToDisk(expectedFilePath), waitTillWrittenToDisk(expectedMetadataPath)]); - const directoryFiles = await readdir(resolve(storage.keyValueStoresDirectory, `${keyValueStoreInfo.id}`)); + const directoryFiles = await readdir(resolve(storage.keyValueStoresDirectory, keyValueStoreInfo.id)); expect(directoryFiles).toHaveLength(3); }); diff --git a/packages/playwright-crawler/src/internals/enqueue-links/click-elements.ts b/packages/playwright-crawler/src/internals/enqueue-links/click-elements.ts index aad88a8b4d49..6a766b37d329 100644 --- a/packages/playwright-crawler/src/internals/enqueue-links/click-elements.ts +++ b/packages/playwright-crawler/src/internals/enqueue-links/click-elements.ts @@ -266,6 +266,7 @@ export async function enqueueLinksByClickingElements( requestQueue, selector, clickOptions, + // oxlint-disable-next-line typescript/no-deprecated -- still accepted for backwards compat pseudoUrls, globs, regexps, @@ -324,7 +325,7 @@ export async function enqueueLinksByClickingElements( ); if (onSkippedRequest && skippedByFilters.length > 0) { - await Promise.all(skippedByFilters.map((url) => onSkippedRequest({ url, reason: 'filters' }))); + await Promise.all(skippedByFilters.map(async (url) => onSkippedRequest({ url, reason: 'filters' }))); } if (transformRequestFunction) { @@ -333,7 +334,9 @@ export async function enqueueLinksByClickingElements( skippedByTransform.push(r), ); if (onSkippedRequest && skippedByTransform.length > 0) { - await Promise.all(skippedByTransform.map((r) => onSkippedRequest({ url: r.url, reason: 'transform' }))); + await Promise.all( + skippedByTransform.map(async (r) => onSkippedRequest({ url: r.url, reason: 'transform' })), + ); } } @@ -566,9 +569,6 @@ async function waitForPageIdle({ }: WaitForPageIdleOptions): Promise { return new Promise((resolve) => { let timeout: NodeJS.Timeout; - let maxTimeout: NodeJS.Timeout; - - page.on('popup', activityHandler); function activityHandler() { clearTimeout(timeout); @@ -591,7 +591,8 @@ async function waitForPageIdle({ resolve(); } - maxTimeout = setTimeout(maxTimeoutHandler, maxWaitForPageIdleMillis); + const maxTimeout = setTimeout(maxTimeoutHandler, maxWaitForPageIdleMillis); + page.on('popup', activityHandler); activityHandler(); // We call this once manually in case there would be no requests at all. page.on('request', activityHandler); page.on('framenavigated', activityHandler); 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 44cb0efae004..9d579d83c289 100644 --- a/packages/puppeteer-crawler/src/internals/enqueue-links/click-elements.ts +++ b/packages/puppeteer-crawler/src/internals/enqueue-links/click-elements.ts @@ -266,6 +266,7 @@ export async function enqueueLinksByClickingElements( requestQueue, selector, clickOptions, + // oxlint-disable-next-line typescript/no-deprecated -- still accepted for backwards compat pseudoUrls, globs, regexps, @@ -324,7 +325,7 @@ export async function enqueueLinksByClickingElements( ); if (onSkippedRequest && skippedByFilters.length > 0) { - await Promise.all(skippedByFilters.map((url) => onSkippedRequest({ url, reason: 'filters' }))); + await Promise.all(skippedByFilters.map(async (url) => onSkippedRequest({ url, reason: 'filters' }))); } if (transformRequestFunction) { @@ -333,7 +334,9 @@ export async function enqueueLinksByClickingElements( skippedByTransform.push(r), ); if (onSkippedRequest && skippedByTransform.length > 0) { - await Promise.all(skippedByTransform.map((r) => onSkippedRequest({ url: r.url, reason: 'transform' }))); + await Promise.all( + skippedByTransform.map(async (r) => onSkippedRequest({ url: r.url, reason: 'transform' })), + ); } } const requests = filteredOptions.map((opts) => new Request(opts)); @@ -402,6 +405,7 @@ function createInterceptRequestHandler(page: Page, requests: Set): (req: url, headers: req.headers(), method: req.method(), + // oxlint-disable-next-line typescript/no-deprecated -- fetchPostData() is async and adds a CDP roundtrip per request; keep the sync page-cached read payload: req.postData(), }), ); @@ -450,6 +454,7 @@ function createTargetCreatedHandler(page: Page, requests: Set): (target: * There will generally be a lot of other targets being created in the browser. */ export function isTargetRelevant(page: Page, target: Target): boolean { + // oxlint-disable-next-line typescript/no-deprecated -- the non-deprecated replacement (opener.page()) is async and would force every call site to await, including EventEmitter callbacks return target.type() === 'page' && page.target() === target.opener(); } @@ -575,7 +580,6 @@ async function waitForPageIdle({ }: WaitForPageIdleOptions): Promise { return new Promise((resolve) => { let timeout: NodeJS.Timeout; - let maxTimeout: NodeJS.Timeout; const context = page.browserContext(); function newTabTracker(target: Target) { @@ -605,7 +609,7 @@ async function waitForPageIdle({ resolve(); } - maxTimeout = setTimeout(maxTimeoutHandler, maxWaitForPageIdleMillis); + const maxTimeout = setTimeout(maxTimeoutHandler, maxWaitForPageIdleMillis); activityHandler(); // We call this once manually in case there would be no requests at all. page.on('request', activityHandler); page.on('framenavigated', activityHandler); diff --git a/packages/stagehand-crawler/src/internals/stagehand-crawler.ts b/packages/stagehand-crawler/src/internals/stagehand-crawler.ts index 15901a141af6..0bab236d164d 100644 --- a/packages/stagehand-crawler/src/internals/stagehand-crawler.ts +++ b/packages/stagehand-crawler/src/internals/stagehand-crawler.ts @@ -172,7 +172,7 @@ export interface StagehandPage extends Page { * ); * ``` */ - extract(instruction: string, schema: z.ZodSchema, options?: Omit): Promise; + extract(instruction: string, schema: z.ZodType, options?: Omit): Promise; /** * Observe the page and get AI-suggested actions. diff --git a/packages/stagehand-crawler/src/internals/utils/stagehand-utils.ts b/packages/stagehand-crawler/src/internals/utils/stagehand-utils.ts index d622bd182e64..6b7ee11af168 100644 --- a/packages/stagehand-crawler/src/internals/utils/stagehand-utils.ts +++ b/packages/stagehand-crawler/src/internals/utils/stagehand-utils.ts @@ -1,6 +1,6 @@ import type { ActOptions, AgentConfig, ExtractOptions, ObserveOptions, Stagehand } from '@browserbasehq/stagehand'; import type { Page } from 'playwright'; -import type { ZodSchema } from 'zod'; +import type { ZodType } from 'zod'; import type { StagehandPage } from '../stagehand-crawler'; @@ -80,7 +80,7 @@ export function enhancePageWithStagehand(page: Page, stagehand: Stagehand): Stag */ enhancedPage.extract = async ( instruction: string, - schema: ZodSchema, + schema: ZodType, options?: Omit, ): Promise => { try { diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index d7058d57c439..65b2b5e7012e 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,6 +1,6 @@ -export * from './storages.js'; -export * from './utility-types.js'; -export * from './browser.js'; -export * from './http-client.js'; -export * from './session.js'; -export * from './logger.js'; +export type * from './storages.js'; +export type * from './utility-types.js'; +export type * from './browser.js'; +export type * from './http-client.js'; +export type * from './session.js'; +export type * from './logger.js'; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index d6f6bf2438c3..eadf94dc5506 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -14,7 +14,9 @@ export * from './internals/robots.js'; export * from './internals/sitemap.js'; export * from './internals/url.js'; -export { getCurrentCpuTicksV2, CpuSample } from './internals/system-info/cpu-info.js'; -export { getMemoryInfo, MemoryInfo } from './internals/system-info/memory-info.js'; +export type { CpuSample } from './internals/system-info/cpu-info.js'; +export { getCurrentCpuTicksV2 } from './internals/system-info/cpu-info.js'; +export type { MemoryInfo } from './internals/system-info/memory-info.js'; +export { getMemoryInfo } from './internals/system-info/memory-info.js'; -export { Dictionary, Awaitable, Constructor } from '@crawlee/types'; +export type { Dictionary, Awaitable, Constructor } from '@crawlee/types'; diff --git a/packages/utils/src/internals/cheerio.ts b/packages/utils/src/internals/cheerio.ts index 7cd123b29c99..ae67ddb8f2e9 100644 --- a/packages/utils/src/internals/cheerio.ts +++ b/packages/utils/src/internals/cheerio.ts @@ -53,7 +53,7 @@ export function htmlToText(htmlOrCheerioElement: string | CheerioRoot): string { if (elem.type === 'text') { // Compress spaces, unless we're inside
 element
                 let compr;
-                if (elem.parent && elem.parent.tagName === 'pre') compr = elem.data;
+                if (elem.parent?.tagName === 'pre') compr = elem.data;
                 else compr = elem.data.replace(/\s+/g, ' ');
                 // If text is empty or ends with a whitespace, don't add the leading whitespace
                 if (compr.startsWith(' ') && /(^|\s)$/.test(text)) compr = compr.substring(1);
diff --git a/packages/utils/src/internals/debug.ts b/packages/utils/src/internals/debug.ts
index e10a7299ce1e..cb068f4d1d81 100644
--- a/packages/utils/src/internals/debug.ts
+++ b/packages/utils/src/internals/debug.ts
@@ -64,7 +64,7 @@ export function getObjectType(value: unknown): string {
     }
 
     const objectType = Object.prototype.toString.call(value);
-    const type = objectType.match(/\[object (\w+)]/)![1];
+    const type = /\[object (\w+)]/.exec(objectType)![1];
 
     if (type === 'Uint8Array') {
         return 'Buffer';
diff --git a/packages/utils/src/internals/extract-urls.ts b/packages/utils/src/internals/extract-urls.ts
index 547018da4363..f363cbf8a3d0 100644
--- a/packages/utils/src/internals/extract-urls.ts
+++ b/packages/utils/src/internals/extract-urls.ts
@@ -56,7 +56,7 @@ export async function downloadListOfUrls(options: DownloadListOfUrlsOptions): Pr
     } = options;
 
     // Try to detect wrong urls and fix them. Currently, detects only sharing url instead of csv download one.
-    const match = url.match(/^(https:\/\/docs\.google\.com\/spreadsheets\/d\/(?:\w|-)+)\/?/);
+    const match = /^(https:\/\/docs\.google\.com\/spreadsheets\/d\/(?:\w|-)+)\/?/.exec(url);
     let fixedUrl = url;
 
     if (match) {
diff --git a/test/browser-pool/browser-plugins/plugins.test.ts b/test/browser-pool/browser-plugins/plugins.test.ts
index 252be2eec701..981123e3fd05 100644
--- a/test/browser-pool/browser-plugins/plugins.test.ts
+++ b/test/browser-pool/browser-plugins/plugins.test.ts
@@ -16,7 +16,7 @@ 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.js';
+import { runExampleComServer } from '../../shared/_helper.js';
 
 import { createProxyServer } from './create-proxy-server.js';
 
diff --git a/test/browser-pool/browser-pool.test.ts b/test/browser-pool/browser-pool.test.ts
index 3b68624e7f00..e177abd49f87 100644
--- a/test/browser-pool/browser-pool.test.ts
+++ b/test/browser-pool/browser-pool.test.ts
@@ -417,7 +417,7 @@ describe.each([
                     // if it does not resolve, the test will timeout and fail.
                     await new Promise((resolve) => {
                         const int = setInterval(() => {
-                            const stillWaiting = controllers.some((c) => c.isActive === true);
+                            const stillWaiting = controllers.some((c) => c.isActive);
                             if (!stillWaiting) {
                                 clearInterval(int);
                                 resolve();
diff --git a/test/core/browser_launchers/playwright_launcher.test.ts b/test/core/browser_launchers/playwright_launcher.test.ts
index 28767735996c..e2008b3458e0 100644
--- a/test/core/browser_launchers/playwright_launcher.test.ts
+++ b/test/core/browser_launchers/playwright_launcher.test.ts
@@ -18,7 +18,7 @@ import type { Browser, BrowserType } from 'playwright';
 // @ts-expect-error no types
 import portastic from 'portastic';
 import { createProxy } from 'proxy';
-import { runExampleComServer } from 'test/shared/_helper.js';
+import { runExampleComServer } from '../../shared/_helper.js';
 
 let proxyServer: Server;
 let proxyPort: number;
diff --git a/test/core/crawlers/adaptive_playwright_crawler.test.ts b/test/core/crawlers/adaptive_playwright_crawler.test.ts
index eef3b2a1ba01..c8d9d9268d8a 100644
--- a/test/core/crawlers/adaptive_playwright_crawler.test.ts
+++ b/test/core/crawlers/adaptive_playwright_crawler.test.ts
@@ -11,8 +11,8 @@ import type {
 import { AdaptivePlaywrightCrawler, RenderingTypePredictor, RequestList } from '@crawlee/playwright';
 import { sleep } from 'crawlee';
 import express from 'express';
-import { startExpressAppPromise } from 'test/shared/_helper.js';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { startExpressAppPromise } from '../../shared/_helper.js';
+import { MemoryStorageEmulator } from '../../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 48ba573333d5..81ca96da3257 100644
--- a/test/core/crawlers/basic_crawler.test.ts
+++ b/test/core/crawlers/basic_crawler.test.ts
@@ -21,7 +21,7 @@ import { RequestState } from '@crawlee/core';
 import type { Dictionary } from '@crawlee/utils';
 import { RobotsTxtFile, sleep } from '@crawlee/utils';
 import express from 'express';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 import type { SetRequired } from 'type-fest';
 import type { Mock } from 'vitest';
 import { afterAll, beforeAll, beforeEach, describe, expect, test, vitest } from 'vitest';
diff --git a/test/core/crawlers/browser_crawler.test.ts b/test/core/crawlers/browser_crawler.test.ts
index 8806c3f2d61d..40df72c404dc 100644
--- a/test/core/crawlers/browser_crawler.test.ts
+++ b/test/core/crawlers/browser_crawler.test.ts
@@ -7,8 +7,8 @@ import { EnqueueStrategy, ProxyConfiguration, Request, RequestList, RequestState
 import { sleep } from '@crawlee/utils';
 import type { HTTPResponse } from 'puppeteer';
 import puppeteer from 'puppeteer';
-import { runExampleComServer } from 'test/shared/_helper.js';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { runExampleComServer } from '../../shared/_helper.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 
 import { ENV_VARS } from '@apify/consts';
 import log from '@apify/log';
diff --git a/test/core/crawlers/cheerio_crawler.test.ts b/test/core/crawlers/cheerio_crawler.test.ts
index 686da10baddb..e42e6e571153 100644
--- a/test/core/crawlers/cheerio_crawler.test.ts
+++ b/test/core/crawlers/cheerio_crawler.test.ts
@@ -17,8 +17,8 @@ import type { ProxyInfo } from '@crawlee/types';
 import type { Dictionary } from '@crawlee/utils';
 import { sleep } from '@crawlee/utils';
 import iconv from 'iconv-lite';
-import { responseSamples, runExampleComServer } from 'test/shared/_helper.js';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { responseSamples, runExampleComServer } from '../../shared/_helper.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 
 import log from '@apify/log';
 
diff --git a/test/core/crawlers/dom_crawler.test.ts b/test/core/crawlers/dom_crawler.test.ts
index f8e5eaf231f8..0c13aea88a1d 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.js';
+import { MemoryStorageEmulator } from '../../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 1116f73ae8ee..06751a99606d 100644
--- a/test/core/crawlers/file_download.test.ts
+++ b/test/core/crawlers/file_download.test.ts
@@ -8,7 +8,7 @@ import { setTimeout } from 'node:timers/promises';
 import { FileDownload } from '@crawlee/http';
 import { FetchHttpClient } from '@crawlee/http-client';
 import express from 'express';
-import { startExpressAppPromise } from 'test/shared/_helper.js';
+import { startExpressAppPromise } from '../../shared/_helper.js';
 import { afterAll, beforeAll, expect, test } from 'vitest';
 
 class ReadableStreamGenerator {
diff --git a/test/core/crawlers/http_crawler.test.ts b/test/core/crawlers/http_crawler.test.ts
index 6c37008a5454..44c808367960 100644
--- a/test/core/crawlers/http_crawler.test.ts
+++ b/test/core/crawlers/http_crawler.test.ts
@@ -4,7 +4,7 @@ import { Readable } from 'node:stream';
 
 import { HttpCrawler } from '@crawlee/http';
 import { ResponseWithUrl } from '@crawlee/http-client';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 
 const router = new Map();
 router.set('/', (req, res) => {
@@ -341,7 +341,7 @@ test('should work with delete requests', async () => {
 
     await cheerioCrawler.run([
         {
-            url: `${url}`,
+            url,
             method: 'DELETE',
         },
     ]);
diff --git a/test/core/crawlers/playwright_crawler.test.ts b/test/core/crawlers/playwright_crawler.test.ts
index e45bf9b36e22..925b87c19253 100644
--- a/test/core/crawlers/playwright_crawler.test.ts
+++ b/test/core/crawlers/playwright_crawler.test.ts
@@ -7,7 +7,7 @@ import { PlaywrightCrawler, RequestList } from '@crawlee/playwright';
 import type { Cheerio, CheerioAPI, CheerioRoot, Element } from '@crawlee/utils';
 import express from 'express';
 import playwright from 'playwright';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 
 import log from '@apify/log';
 
diff --git a/test/core/crawlers/puppeteer_crawler.test.ts b/test/core/crawlers/puppeteer_crawler.test.ts
index d51197e0d0d8..f51a44ce909d 100644
--- a/test/core/crawlers/puppeteer_crawler.test.ts
+++ b/test/core/crawlers/puppeteer_crawler.test.ts
@@ -18,7 +18,7 @@ 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.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 
 import log from '@apify/log';
 
@@ -105,12 +105,7 @@ describe('PuppeteerCrawler', () => {
             asserts.push(response!.status() === 200);
             request.userData.title = await page.title();
             processed.push(request);
-            asserts.push(
-                !response!
-                    .request()
-                    .headers()
-                    ['user-agent'].match(/headless/i),
-            );
+            asserts.push(!/headless/i.exec(response!.request().headers()['user-agent']));
             asserts.push(!(await page.evaluate(() => window.navigator.webdriver)));
         };
 
diff --git a/test/core/crawlers/statistics.test.ts b/test/core/crawlers/statistics.test.ts
index e6c612441c33..50790992cd96 100644
--- a/test/core/crawlers/statistics.test.ts
+++ b/test/core/crawlers/statistics.test.ts
@@ -1,6 +1,6 @@
 import { Configuration, EventType, serviceLocator, Statistics } from '@crawlee/core';
 import type { Dictionary } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../../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 b450c9ec812a..81093007bbae 100644
--- a/test/core/enqueue_links/click_elements.test.ts
+++ b/test/core/enqueue_links/click_elements.test.ts
@@ -14,7 +14,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.js';
+import { runExampleComServer } from '../../shared/_helper.js';
 
 function isPuppeteerBrowser(browser: PPBrowser | PWBrowser): browser is PPBrowser {
     return (browser as PPBrowser).targets !== undefined;
diff --git a/test/core/enqueue_links/enqueue_links.test.ts b/test/core/enqueue_links/enqueue_links.test.ts
index 914e827efd27..5ce02b2f3dde 100644
--- a/test/core/enqueue_links/enqueue_links.test.ts
+++ b/test/core/enqueue_links/enqueue_links.test.ts
@@ -126,7 +126,7 @@ describe('enqueueLinks()', () => {
                     label: 'COOL',
                     globs,
                     transformRequestFunction: (request) => {
-                        if (request.url.match(/example\.com\/a\/b\/third/)) {
+                        if (/example\.com\/a\/b\/third/.exec(request.url)) {
                             request.method = 'OPTIONS';
                         }
                         return request;
@@ -187,7 +187,7 @@ describe('enqueueLinks()', () => {
                     selector: '.click',
                     regexps,
                     transformRequestFunction: (request) => {
-                        if (request.url.match(/example\.com\/a\/b\/third/)) {
+                        if (/example\.com\/a\/b\/third/.exec(request.url)) {
                             request.method = 'OPTIONS';
                         }
                         return request;
@@ -246,7 +246,7 @@ describe('enqueueLinks()', () => {
                     globs,
                     exclude,
                     transformRequestFunction: (request) => {
-                        if (request.url.match(/example\.com\/a\/b\/third/)) {
+                        if (/example\.com\/a\/b\/third/.exec(request.url)) {
                             request.method = 'OPTIONS';
                         }
                         return request;
@@ -284,7 +284,7 @@ describe('enqueueLinks()', () => {
                     globs,
                     exclude,
                     transformRequestFunction: (request) => {
-                        if (request.url.match(/example\.com\/a\/b\/third/)) {
+                        if (/example\.com\/a\/b\/third/.exec(request.url)) {
                             request.method = 'OPTIONS';
                         }
                         return request;
@@ -321,7 +321,7 @@ describe('enqueueLinks()', () => {
                     selector: '.click',
                     pseudoUrls,
                     transformRequestFunction: (request) => {
-                        if (request.url.match(/example\.com\/a\/b\/third/)) {
+                        if (/example\.com\/a\/b\/third/.exec(request.url)) {
                             request.method = 'OPTIONS';
                         }
                         return request;
@@ -599,7 +599,7 @@ describe('enqueueLinks()', () => {
                     selector: '.click',
                     globs,
                     transformRequestFunction: (request) => {
-                        if (request.url.match(/example\.com\/a\/b\/third/)) {
+                        if (/example\.com\/a\/b\/third/.exec(request.url)) {
                             request.method = 'OPTIONS';
                         }
                         return request;
@@ -658,7 +658,7 @@ describe('enqueueLinks()', () => {
                     selector: '.click',
                     regexps,
                     transformRequestFunction: (request) => {
-                        if (request.url.match(/example\.com\/a\/b\/third/)) {
+                        if (/example\.com\/a\/b\/third/.exec(request.url)) {
                             request.method = 'OPTIONS';
                         }
                         return request;
@@ -697,7 +697,7 @@ describe('enqueueLinks()', () => {
                     userData: { label: 'DEFAULT' },
                     pseudoUrls,
                     transformRequestFunction: (request) => {
-                        if (request.url.match(/example\.com\/a\/b\/third/)) {
+                        if (/example\.com\/a\/b\/third/.exec(request.url)) {
                             request.method = 'OPTIONS';
                         }
                         return request;
diff --git a/test/core/playwright_utils.test.ts b/test/core/playwright_utils.test.ts
index b9683a42ee1e..112bcb93a113 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.js';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { runExampleComServer } from '../shared/_helper.js';
+import { MemoryStorageEmulator } from '../shared/MemoryStorageEmulator.js';
 
 import log from '@apify/log';
 
diff --git a/test/core/puppeteer_utils.test.ts b/test/core/puppeteer_utils.test.ts
index bac93ff682ab..64b090963b66 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.js';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { runExampleComServer } from '../shared/_helper.js';
+import { MemoryStorageEmulator } from '../shared/MemoryStorageEmulator.js';
 
 import log from '@apify/log';
 
diff --git a/test/core/request_list.test.ts b/test/core/request_list.test.ts
index 1b8171d58cec..32114e9d39e3 100644
--- a/test/core/request_list.test.ts
+++ b/test/core/request_list.test.ts
@@ -9,7 +9,7 @@ import {
     serviceLocator,
 } from '@crawlee/core';
 import { sleep } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../shared/MemoryStorageEmulator.js';
 import { beforeAll, type MockedFunction } from 'vitest';
 
 import log from '@apify/log';
@@ -812,15 +812,15 @@ describe('RequestList', () => {
                 } catch (err) {
                     const e = err as Error;
                     expect(e.message).not.toBe('wrong error');
-                    if (e.message.match('argument to be of type `string`')) {
+                    if (/argument to be of type `string`/.exec(e.message)) {
                         expect(e.message).toMatch('received type `undefined`');
-                    } else if (e.message.match('argument to be of type `array`')) {
+                    } else if (/argument to be of type `array`/.exec(e.message)) {
                         const isMatched =
-                            e.message.match('received type `Object`') ||
-                            e.message.match('received type `number`') ||
-                            e.message.match('received type `undefined`');
+                            /received type `Object`/.exec(e.message) ||
+                            /received type `number`/.exec(e.message) ||
+                            /received type `undefined`/.exec(e.message);
                         expect(isMatched).toBeTruthy();
-                    } else if (e.message.match('argument to be of type `null`')) {
+                    } else if (/argument to be of type `null`/.exec(e.message)) {
                         expect(e.message).toMatch('received type `undefined`');
                     }
                 }
diff --git a/test/core/session_pool/session_pool.test.ts b/test/core/session_pool/session_pool.test.ts
index 7901a69b64e4..f265fde4254f 100644
--- a/test/core/session_pool/session_pool.test.ts
+++ b/test/core/session_pool/session_pool.test.ts
@@ -1,6 +1,6 @@
 import { BaseCrawleeLogger, EventType, KeyValueStore, serviceLocator, Session, SessionPool } from '@crawlee/core';
 import { entries } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 
 describe('SessionPool - testing session pool', () => {
     let sessionPool: SessionPool;
diff --git a/test/core/sitemap_request_list.test.ts b/test/core/sitemap_request_list.test.ts
index 7a752b026cf8..f60d08594fb1 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.js';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { startExpressAppPromise } from '../shared/_helper.js';
+import { MemoryStorageEmulator } from '../shared/MemoryStorageEmulator.js';
 
 // Express server for serving sitemaps
 let url = 'http://localhost';
diff --git a/test/core/storages/dataset.test.ts b/test/core/storages/dataset.test.ts
index 76842ba23bb5..77470d084929 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, serviceLocator } from '@crawlee/core';
 import type { Dictionary } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../../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 b09d692e3a60..dc78c4eba319 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, serviceLocator } from '@crawlee/core';
 import type { Dictionary } from '@crawlee/utils';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 
 const localStorageEmulator = new MemoryStorageEmulator();
 
diff --git a/test/core/storages/utils.test.ts b/test/core/storages/utils.test.ts
index 862f309c1d4d..44bb272f6219 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, serviceLocator, useState } from '@crawlee/core';
-import { MemoryStorageEmulator } from 'test/shared/MemoryStorageEmulator.js';
+import { MemoryStorageEmulator } from '../../shared/MemoryStorageEmulator.js';
 
 describe('useState', () => {
     const emulator = new MemoryStorageEmulator();
diff --git a/test/tsconfig.json b/test/tsconfig.json
index 894a57b040a4..fdbd3b4fcaeb 100644
--- a/test/tsconfig.json
+++ b/test/tsconfig.json
@@ -10,16 +10,16 @@
         "noUnusedParameters": false,
         "types": ["vitest/globals"],
         "paths": {
-            "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"]
+            "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/tsconfig.build.json b/tsconfig.build.json
index 95710e031b70..67cca0df64c2 100644
--- a/tsconfig.build.json
+++ b/tsconfig.build.json
@@ -5,7 +5,6 @@
 		"moduleResolution": "NodeNext",
 		"target": "ESNext",
 		"lib": ["DOM", "ES2023", "ES2024", "DOM.AsyncIterable"],
-		"baseUrl": ".",
 		"allowJs": true,
 		"skipLibCheck": true,
 		"resolveJsonModule": false,
diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json
deleted file mode 100644
index 707fb5f2ea0c..000000000000
--- a/tsconfig.eslint.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-	"extends": "./tsconfig.json",
-	"include": [
-		"packages/**/*.ts",
-		"packages/**/*.mjs",
-		"packages/**/*.js",
-		"scripts/**/*.ts",
-		"scripts/**/*.js",
-		"scripts/**/*.mjs",
-		"website/**/*.ts",
-		"website/**/*.mjs",
-		"test/**/*.ts",
-		"test/**/*.js",
-		"test/**/*.mjs",
-		"docs/**/*.ts",
-		"vitest.config.mts"
-	]
-}
diff --git a/tsconfig.json b/tsconfig.json
index b3ad1bd0bd24..0ef3142350e2 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,22 +1,22 @@
 {
 	"extends": "./tsconfig.build.json",
 	"compilerOptions": {
-		"baseUrl": ".",
+		"noEmit": true,
 		"noErrorTruncation": true,
 		"sourceMap": true,
 		"declaration": true,
 		"paths": {
-			"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/stagehand": ["packages/stagehand-crawler/src/index.ts"],
-			"@crawlee/*": ["packages/*/src/index.ts"]
+			"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/stagehand": ["./packages/stagehand-crawler/src/index.ts"],
+			"@crawlee/*": ["./packages/*/src/index.ts"]
 		}
 	}
 }
diff --git a/yarn.lock b/yarn.lock
index 268f01d48a55..65b593999fca 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -246,28 +246,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@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"
-    eslint-config-airbnb-base: "npm:^15.0.0"
-    eslint-plugin-import: "npm:^2.32.0"
-    eslint-plugin-simple-import-sort: "npm:^12.1.1"
-    globals: "npm:^15.14.0"
-  peerDependencies:
-    eslint: ^9.19.0
-    eslint-plugin-jest: ^28.11.0
-    typescript-eslint: ^8.23.0
-  peerDependenciesMeta:
-    eslint-plugin-jest:
-      optional: true
-    typescript-eslint:
-      optional: true
-  checksum: 10c0/9c1461d859d02bbbb59a6004aa289054a7fca33e573d703ffb6fe62f021607ba298e1dba2ac8c1cc43362150be5444e0112efa98f768d8d06409c3f939671c0e
-  languageName: node
-  linkType: hard
-
 "@apify/input_secrets@npm:^1.2.0":
   version: 1.2.26
   resolution: "@apify/input_secrets@npm:1.2.26"
@@ -1090,14 +1068,12 @@ __metadata:
   version: 0.0.0-use.local
   resolution: "@crawlee/root@workspace:."
   dependencies:
-    "@apify/eslint-config": "npm:^1.0.0"
     "@apify/log": "npm:^2.5.18"
     "@apify/tsconfig": "npm:^0.1.2"
     "@commitlint/config-conventional": "npm:^20.0.0"
     "@playwright/browser-chromium": "npm:1.58.1"
     "@playwright/browser-firefox": "npm:1.58.1"
     "@playwright/browser-webkit": "npm:1.58.1"
-    "@stylistic/eslint-plugin": "npm:^5.0.0"
     "@types/content-type": "npm:^1.1.8"
     "@types/deep-equal": "npm:^1.0.4"
     "@types/domhandler": "npm:^3.1.0"
@@ -1126,12 +1102,9 @@ __metadata:
     commitlint: "npm:^20.0.0"
     cross-env: "npm:^10.0.0"
     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"
     gen-esm-wrapper: "npm:^1.1.3"
-    globals: "npm:^17.0.0"
     globby: "npm:^15.0.0"
     got: "npm:^14.4.7"
     husky: "npm:^9.1.7"
@@ -1141,6 +1114,8 @@ __metadata:
     lint-staged: "npm:^16.0.0"
     nock: "npm:^14.0.10"
     oxfmt: "npm:^0.45.0"
+    oxlint: "npm:^1.59.0"
+    oxlint-tsgolint: "npm:^0.20.0"
     playwright: "npm:1.58.1"
     portastic: "npm:^1.0.1"
     proxy: "npm:^2.2.0"
@@ -1149,7 +1124,6 @@ __metadata:
     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:^4.1.0-beta.6"
   languageName: unknown
@@ -1531,137 +1505,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@eslint-community/eslint-utils@npm:^4.2.0":
-  version: 4.7.0
-  resolution: "@eslint-community/eslint-utils@npm:4.7.0"
-  dependencies:
-    eslint-visitor-keys: "npm:^3.4.3"
-  peerDependencies:
-    eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-  checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf
-  languageName: node
-  linkType: hard
-
-"@eslint-community/eslint-utils@npm:^4.7.0":
-  version: 4.9.0
-  resolution: "@eslint-community/eslint-utils@npm:4.9.0"
-  dependencies:
-    eslint-visitor-keys: "npm:^3.4.3"
-  peerDependencies:
-    eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-  checksum: 10c0/8881e22d519326e7dba85ea915ac7a143367c805e6ba1374c987aa2fbdd09195cc51183d2da72c0e2ff388f84363e1b220fd0d19bef10c272c63455162176817
-  languageName: node
-  linkType: hard
-
-"@eslint-community/eslint-utils@npm:^4.9.1":
-  version: 4.9.1
-  resolution: "@eslint-community/eslint-utils@npm:4.9.1"
-  dependencies:
-    eslint-visitor-keys: "npm:^3.4.3"
-  peerDependencies:
-    eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-  checksum: 10c0/dc4ab5e3e364ef27e33666b11f4b86e1a6c1d7cbf16f0c6ff87b1619b3562335e9201a3d6ce806221887ff780ec9d828962a290bb910759fd40a674686503f02
-  languageName: node
-  linkType: hard
-
-"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1":
-  version: 4.12.2
-  resolution: "@eslint-community/regexpp@npm:4.12.2"
-  checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d
-  languageName: node
-  linkType: hard
-
-"@eslint/compat@npm:^1.2.6":
-  version: 1.4.1
-  resolution: "@eslint/compat@npm:1.4.1"
-  dependencies:
-    "@eslint/core": "npm:^0.17.0"
-  peerDependencies:
-    eslint: ^8.40 || 9
-  peerDependenciesMeta:
-    eslint:
-      optional: true
-  checksum: 10c0/46f5ff884873c2e2366df55dd7b2d6b12f7f852bfba8e2a48dae4819cc5e58756deefa9b7f87f1b107af725ee883a05fcc02caf969b58fb142e790c6036a0450
-  languageName: node
-  linkType: hard
-
-"@eslint/config-array@npm:^0.20.0":
-  version: 0.20.0
-  resolution: "@eslint/config-array@npm:0.20.0"
-  dependencies:
-    "@eslint/object-schema": "npm:^2.1.6"
-    debug: "npm:^4.3.1"
-    minimatch: "npm:^3.1.2"
-  checksum: 10c0/94bc5d0abb96dc5295ff559925242ff75a54eacfb3576677e95917e42f7175e1c4b87bf039aa2a872f949b4852ad9724bf2f7529aaea6b98f28bb3fca7f1d659
-  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
-  languageName: node
-  linkType: hard
-
-"@eslint/core@npm:^0.14.0":
-  version: 0.14.0
-  resolution: "@eslint/core@npm:0.14.0"
-  dependencies:
-    "@types/json-schema": "npm:^7.0.15"
-  checksum: 10c0/259f279445834ba2d2cbcc18e9d43202a4011fde22f29d5fb802181d66e0f6f0bd1f6b4b4b46663451f545d35134498231bd5e656e18d9034a457824b92b7741
-  languageName: node
-  linkType: hard
-
-"@eslint/core@npm:^0.17.0":
-  version: 0.17.0
-  resolution: "@eslint/core@npm:0.17.0"
-  dependencies:
-    "@types/json-schema": "npm:^7.0.15"
-  checksum: 10c0/9a580f2246633bc752298e7440dd942ec421860d1946d0801f0423830e67887e4aeba10ab9a23d281727a978eb93d053d1922a587d502942a713607f40ed704e
-  languageName: node
-  linkType: hard
-
-"@eslint/eslintrc@npm:^3.3.1":
-  version: 3.3.1
-  resolution: "@eslint/eslintrc@npm:3.3.1"
-  dependencies:
-    ajv: "npm:^6.12.4"
-    debug: "npm:^4.3.2"
-    espree: "npm:^10.0.1"
-    globals: "npm:^14.0.0"
-    ignore: "npm:^5.2.0"
-    import-fresh: "npm:^3.2.1"
-    js-yaml: "npm:^4.1.0"
-    minimatch: "npm:^3.1.2"
-    strip-json-comments: "npm:^3.1.1"
-  checksum: 10c0/b0e63f3bc5cce4555f791a4e487bf999173fcf27c65e1ab6e7d63634d8a43b33c3693e79f192cbff486d7df1be8ebb2bd2edc6e70ddd486cbfa84a359a3e3b41
-  languageName: node
-  linkType: hard
-
-"@eslint/js@npm:9.27.0":
-  version: 9.27.0
-  resolution: "@eslint/js@npm:9.27.0"
-  checksum: 10c0/79b219ceda79182732954b52f7a494f49995a9a6419c7ae0316866e324d3706afeb857e1306bb6f35a4caaf176a5174d00228fc93d36781a570d32c587736564
-  languageName: node
-  linkType: hard
-
-"@eslint/object-schema@npm:^2.1.6":
-  version: 2.1.6
-  resolution: "@eslint/object-schema@npm:2.1.6"
-  checksum: 10c0/b8cdb7edea5bc5f6a96173f8d768d3554a628327af536da2fc6967a93b040f2557114d98dbcdbf389d5a7b290985ad6a9ce5babc547f36fc1fde42e674d11a56
-  languageName: node
-  linkType: hard
-
-"@eslint/plugin-kit@npm:^0.3.1":
-  version: 0.3.1
-  resolution: "@eslint/plugin-kit@npm:0.3.1"
-  dependencies:
-    "@eslint/core": "npm:^0.14.0"
-    levn: "npm:^0.4.1"
-  checksum: 10c0/a75f0b5d38430318a551b83e27bee570747eb50beeb76b03f64b0e78c2c27ef3d284cfda3443134df028db3251719bc0850c105f778122f6ad762d5270ec8063
-  languageName: node
-  linkType: hard
-
 "@google/genai@npm:^1.22.0":
   version: 1.34.0
   resolution: "@google/genai@npm:1.34.0"
@@ -1686,37 +1529,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@humanfs/core@npm:^0.19.1":
-  version: 0.19.1
-  resolution: "@humanfs/core@npm:0.19.1"
-  checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67
-  languageName: node
-  linkType: hard
-
-"@humanfs/node@npm:^0.16.6":
-  version: 0.16.7
-  resolution: "@humanfs/node@npm:0.16.7"
-  dependencies:
-    "@humanfs/core": "npm:^0.19.1"
-    "@humanwhocodes/retry": "npm:^0.4.0"
-  checksum: 10c0/9f83d3cf2cfa37383e01e3cdaead11cd426208e04c44adcdd291aa983aaf72d7d3598844d2fe9ce54896bb1bf8bd4b56883376611c8905a19c44684642823f30
-  languageName: node
-  linkType: hard
-
-"@humanwhocodes/module-importer@npm:^1.0.1":
-  version: 1.0.1
-  resolution: "@humanwhocodes/module-importer@npm:1.0.1"
-  checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529
-  languageName: node
-  linkType: hard
-
-"@humanwhocodes/retry@npm:^0.4.0, @humanwhocodes/retry@npm:^0.4.2":
-  version: 0.4.3
-  resolution: "@humanwhocodes/retry@npm:0.4.3"
-  checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42
-  languageName: node
-  linkType: hard
-
 "@hutson/parse-repository-url@npm:^3.0.0":
   version: 3.0.2
   resolution: "@hutson/parse-repository-url@npm:3.0.2"
@@ -3172,6 +2984,181 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@oxlint-tsgolint/darwin-arm64@npm:0.20.0":
+  version: 0.20.0
+  resolution: "@oxlint-tsgolint/darwin-arm64@npm:0.20.0"
+  conditions: os=darwin & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@oxlint-tsgolint/darwin-x64@npm:0.20.0":
+  version: 0.20.0
+  resolution: "@oxlint-tsgolint/darwin-x64@npm:0.20.0"
+  conditions: os=darwin & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@oxlint-tsgolint/linux-arm64@npm:0.20.0":
+  version: 0.20.0
+  resolution: "@oxlint-tsgolint/linux-arm64@npm:0.20.0"
+  conditions: os=linux & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@oxlint-tsgolint/linux-x64@npm:0.20.0":
+  version: 0.20.0
+  resolution: "@oxlint-tsgolint/linux-x64@npm:0.20.0"
+  conditions: os=linux & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@oxlint-tsgolint/win32-arm64@npm:0.20.0":
+  version: 0.20.0
+  resolution: "@oxlint-tsgolint/win32-arm64@npm:0.20.0"
+  conditions: os=win32 & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@oxlint-tsgolint/win32-x64@npm:0.20.0":
+  version: 0.20.0
+  resolution: "@oxlint-tsgolint/win32-x64@npm:0.20.0"
+  conditions: os=win32 & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-android-arm-eabi@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-android-arm-eabi@npm:1.60.0"
+  conditions: os=android & cpu=arm
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-android-arm64@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-android-arm64@npm:1.60.0"
+  conditions: os=android & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-darwin-arm64@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-darwin-arm64@npm:1.60.0"
+  conditions: os=darwin & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-darwin-x64@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-darwin-x64@npm:1.60.0"
+  conditions: os=darwin & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-freebsd-x64@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-freebsd-x64@npm:1.60.0"
+  conditions: os=freebsd & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-arm-gnueabihf@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-arm-gnueabihf@npm:1.60.0"
+  conditions: os=linux & cpu=arm
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-arm-musleabihf@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-arm-musleabihf@npm:1.60.0"
+  conditions: os=linux & cpu=arm
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-arm64-gnu@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-arm64-gnu@npm:1.60.0"
+  conditions: os=linux & cpu=arm64 & libc=glibc
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-arm64-musl@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-arm64-musl@npm:1.60.0"
+  conditions: os=linux & cpu=arm64 & libc=musl
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-ppc64-gnu@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-ppc64-gnu@npm:1.60.0"
+  conditions: os=linux & cpu=ppc64 & libc=glibc
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-riscv64-gnu@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-riscv64-gnu@npm:1.60.0"
+  conditions: os=linux & cpu=riscv64 & libc=glibc
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-riscv64-musl@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-riscv64-musl@npm:1.60.0"
+  conditions: os=linux & cpu=riscv64 & libc=musl
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-s390x-gnu@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-s390x-gnu@npm:1.60.0"
+  conditions: os=linux & cpu=s390x & libc=glibc
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-x64-gnu@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-x64-gnu@npm:1.60.0"
+  conditions: os=linux & cpu=x64 & libc=glibc
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-linux-x64-musl@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-linux-x64-musl@npm:1.60.0"
+  conditions: os=linux & cpu=x64 & libc=musl
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-openharmony-arm64@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-openharmony-arm64@npm:1.60.0"
+  conditions: os=openharmony & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-win32-arm64-msvc@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-win32-arm64-msvc@npm:1.60.0"
+  conditions: os=win32 & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-win32-ia32-msvc@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-win32-ia32-msvc@npm:1.60.0"
+  conditions: os=win32 & cpu=ia32
+  languageName: node
+  linkType: hard
+
+"@oxlint/binding-win32-x64-msvc@npm:1.60.0":
+  version: 1.60.0
+  resolution: "@oxlint/binding-win32-x64-msvc@npm:1.60.0"
+  conditions: os=win32 & cpu=x64
+  languageName: node
+  linkType: hard
+
 "@pinojs/redact@npm:^0.4.0":
   version: 0.4.0
   resolution: "@pinojs/redact@npm:0.4.0"
@@ -3362,13 +3349,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@rtsao/scc@npm:^1.1.0":
-  version: 1.1.0
-  resolution: "@rtsao/scc@npm:1.1.0"
-  checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b
-  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"
@@ -3575,22 +3555,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@stylistic/eslint-plugin@npm:^5.0.0":
-  version: 5.7.1
-  resolution: "@stylistic/eslint-plugin@npm:5.7.1"
-  dependencies:
-    "@eslint-community/eslint-utils": "npm:^4.9.1"
-    "@typescript-eslint/types": "npm:^8.53.1"
-    eslint-visitor-keys: "npm:^4.2.1"
-    espree: "npm:^10.4.0"
-    estraverse: "npm:^5.3.0"
-    picomatch: "npm:^4.0.3"
-  peerDependencies:
-    eslint: ">=9.0.0"
-  checksum: 10c0/0f3b00162dbf3ae594b86ed468322e1e49ea8b2de1cdb95f589954457d26020ebde007da451e53c85e95108fc1d1461e0c7c355c39c7c124f71cc468dbe69104
-  languageName: node
-  linkType: hard
-
 "@szmarczak/http-timer@npm:^5.0.1":
   version: 5.0.1
   resolution: "@szmarczak/http-timer@npm:5.0.1"
@@ -3738,7 +3702,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6":
+"@types/estree@npm:^1.0.0":
   version: 1.0.8
   resolution: "@types/estree@npm:1.0.8"
   checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5
@@ -3822,20 +3786,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/json-schema@npm:^7.0.15":
-  version: 7.0.15
-  resolution: "@types/json-schema@npm:7.0.15"
-  checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db
-  languageName: node
-  linkType: hard
-
-"@types/json5@npm:^0.0.29":
-  version: 0.0.29
-  resolution: "@types/json5@npm:0.0.29"
-  checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac
-  languageName: node
-  linkType: hard
-
 "@types/jsonfile@npm:*":
   version: 6.1.4
   resolution: "@types/jsonfile@npm:6.1.4"
@@ -4089,125 +4039,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@typescript-eslint/eslint-plugin@npm:8.32.1":
-  version: 8.32.1
-  resolution: "@typescript-eslint/eslint-plugin@npm:8.32.1"
-  dependencies:
-    "@eslint-community/regexpp": "npm:^4.10.0"
-    "@typescript-eslint/scope-manager": "npm:8.32.1"
-    "@typescript-eslint/type-utils": "npm:8.32.1"
-    "@typescript-eslint/utils": "npm:8.32.1"
-    "@typescript-eslint/visitor-keys": "npm:8.32.1"
-    graphemer: "npm:^1.4.0"
-    ignore: "npm:^7.0.0"
-    natural-compare: "npm:^1.4.0"
-    ts-api-utils: "npm:^2.1.0"
-  peerDependencies:
-    "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0
-    eslint: ^8.57.0 || ^9.0.0
-    typescript: ">=4.8.4 <5.9.0"
-  checksum: 10c0/29dbafc1f02e1167e6d1e92908de6bf7df1cc1fc9ae1de3f4d4abf5d2b537be16b173bcd05770270529eb2fd17a3ac63c2f40d308f7fbbf6d6f286ba564afd64
-  languageName: node
-  linkType: hard
-
-"@typescript-eslint/parser@npm:8.32.1":
-  version: 8.32.1
-  resolution: "@typescript-eslint/parser@npm:8.32.1"
-  dependencies:
-    "@typescript-eslint/scope-manager": "npm:8.32.1"
-    "@typescript-eslint/types": "npm:8.32.1"
-    "@typescript-eslint/typescript-estree": "npm:8.32.1"
-    "@typescript-eslint/visitor-keys": "npm:8.32.1"
-    debug: "npm:^4.3.4"
-  peerDependencies:
-    eslint: ^8.57.0 || ^9.0.0
-    typescript: ">=4.8.4 <5.9.0"
-  checksum: 10c0/01095f5b6e0a2e0631623be3f44be0f2960ceb24de33b64cb790e24a1468018d2b4d6874d1fa08a4928c2a02f208dd66cbc49735c7e8b54d564e420daabf84d1
-  languageName: node
-  linkType: hard
-
-"@typescript-eslint/scope-manager@npm:8.32.1":
-  version: 8.32.1
-  resolution: "@typescript-eslint/scope-manager@npm:8.32.1"
-  dependencies:
-    "@typescript-eslint/types": "npm:8.32.1"
-    "@typescript-eslint/visitor-keys": "npm:8.32.1"
-  checksum: 10c0/d2cb1f7736388972137d6e510b2beae4bac033fcab274e04de90ebba3ce466c71fe47f1795357e032e4a6c8b2162016b51b58210916c37212242c82d35352e9f
-  languageName: node
-  linkType: hard
-
-"@typescript-eslint/type-utils@npm:8.32.1":
-  version: 8.32.1
-  resolution: "@typescript-eslint/type-utils@npm:8.32.1"
-  dependencies:
-    "@typescript-eslint/typescript-estree": "npm:8.32.1"
-    "@typescript-eslint/utils": "npm:8.32.1"
-    debug: "npm:^4.3.4"
-    ts-api-utils: "npm:^2.1.0"
-  peerDependencies:
-    eslint: ^8.57.0 || ^9.0.0
-    typescript: ">=4.8.4 <5.9.0"
-  checksum: 10c0/f10186340ce194681804d9a57feb6d8d6c3adbd059c70df58f4656b0d9efd412fb0c2d80c182f9db83bad1a301754e0c24fe26f3354bef3a1795ab9c835cb763
-  languageName: node
-  linkType: hard
-
-"@typescript-eslint/types@npm:8.32.1":
-  version: 8.32.1
-  resolution: "@typescript-eslint/types@npm:8.32.1"
-  checksum: 10c0/86f59b29c12e7e8abe45a1659b6fae5e7b0cfaf09ab86dd596ed9d468aa61082bbccd509d25f769b197fbfdf872bbef0b323a2ded6ceaca351f7c679f1ba3bd3
-  languageName: node
-  linkType: hard
-
-"@typescript-eslint/types@npm:^8.53.1":
-  version: 8.54.0
-  resolution: "@typescript-eslint/types@npm:8.54.0"
-  checksum: 10c0/2219594fe5e8931ff91fd1b7a2606d33cd4f093d43f9ca71bcaa37f106ef79ad51f830dea51392f7e3d8bca77f7077ef98733f87bc008fad2f0bbd9ea5fb8a40
-  languageName: node
-  linkType: hard
-
-"@typescript-eslint/typescript-estree@npm:8.32.1":
-  version: 8.32.1
-  resolution: "@typescript-eslint/typescript-estree@npm:8.32.1"
-  dependencies:
-    "@typescript-eslint/types": "npm:8.32.1"
-    "@typescript-eslint/visitor-keys": "npm:8.32.1"
-    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.1.0"
-  peerDependencies:
-    typescript: ">=4.8.4 <5.9.0"
-  checksum: 10c0/b5ae0d91ef1b46c9f3852741e26b7a14c28bb58ee8a283b9530ac484332ca58a7216b9d22eda23c5449b5fd69c6e4601ef3ebbd68e746816ae78269036c08cda
-  languageName: node
-  linkType: hard
-
-"@typescript-eslint/utils@npm:8.32.1":
-  version: 8.32.1
-  resolution: "@typescript-eslint/utils@npm:8.32.1"
-  dependencies:
-    "@eslint-community/eslint-utils": "npm:^4.7.0"
-    "@typescript-eslint/scope-manager": "npm:8.32.1"
-    "@typescript-eslint/types": "npm:8.32.1"
-    "@typescript-eslint/typescript-estree": "npm:8.32.1"
-  peerDependencies:
-    eslint: ^8.57.0 || ^9.0.0
-    typescript: ">=4.8.4 <5.9.0"
-  checksum: 10c0/a2b90c0417cd3a33c6e22f9cc28c356f251bb8928ef1d25e057feda007d522d281bdc37a9a0d05b70312f00a7b3f350ca06e724867025ea85bba5a4c766732e7
-  languageName: node
-  linkType: hard
-
-"@typescript-eslint/visitor-keys@npm:8.32.1":
-  version: 8.32.1
-  resolution: "@typescript-eslint/visitor-keys@npm:8.32.1"
-  dependencies:
-    "@typescript-eslint/types": "npm:8.32.1"
-    eslint-visitor-keys: "npm:^4.2.0"
-  checksum: 10c0/9c05053dfd048f681eb96e09ceefa8841a617b8b5950eea05e0844b38fe3510a284eb936324caa899c3ceb4bc23efe56ac01437fab378ac1beeb1c6c00404978
-  languageName: node
-  linkType: hard
-
 "@vercel/oidc@npm:3.0.5":
   version: 3.0.5
   resolution: "@vercel/oidc@npm:3.0.5"
@@ -4421,28 +4252,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"acorn-jsx@npm:^5.3.2":
-  version: 5.3.2
-  resolution: "acorn-jsx@npm:5.3.2"
-  peerDependencies:
-    acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-  checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1
-  languageName: node
-  linkType: hard
-
-"acorn@npm:^8.15.0":
-  version: 8.15.0
-  resolution: "acorn@npm:8.15.0"
-  bin:
-    acorn: bin/acorn
-  checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec
-  languageName: node
-  linkType: hard
-
-"add-stream@npm:^1.0.0":
-  version: 1.0.0
-  resolution: "add-stream@npm:1.0.0"
-  checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc
+"add-stream@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "add-stream@npm:1.0.0"
+  checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc
   languageName: node
   linkType: hard
 
@@ -4507,18 +4320,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ajv@npm:^6.12.4":
-  version: 6.12.6
-  resolution: "ajv@npm:6.12.6"
-  dependencies:
-    fast-deep-equal: "npm:^3.1.1"
-    fast-json-stable-stringify: "npm:^2.0.0"
-    json-schema-traverse: "npm:^0.4.1"
-    uri-js: "npm:^4.2.2"
-  checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71
-  languageName: node
-  linkType: hard
-
 "ajv@npm:^8.0.0, ajv@npm:^8.11.0, ajv@npm:^8.17.1":
   version: 8.17.1
   resolution: "ajv@npm:8.17.1"
@@ -4686,7 +4487,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2":
+"array-buffer-byte-length@npm:^1.0.0":
   version: 1.0.2
   resolution: "array-buffer-byte-length@npm:1.0.2"
   dependencies:
@@ -4710,22 +4511,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"array-includes@npm:^3.1.9":
-  version: 3.1.9
-  resolution: "array-includes@npm:3.1.9"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    call-bound: "npm:^1.0.4"
-    define-properties: "npm:^1.2.1"
-    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
-
 "array-union@npm:^2.1.0":
   version: 2.1.0
   resolution: "array-union@npm:2.1.0"
@@ -4733,60 +4518,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"array.prototype.findlastindex@npm:^1.2.6":
-  version: 1.2.6
-  resolution: "array.prototype.findlastindex@npm:1.2.6"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    call-bound: "npm:^1.0.4"
-    define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.9"
-    es-errors: "npm:^1.3.0"
-    es-object-atoms: "npm:^1.1.1"
-    es-shim-unscopables: "npm:^1.1.0"
-  checksum: 10c0/82559310d2e57ec5f8fc53d7df420e3abf0ba497935de0a5570586035478ba7d07618cb18e2d4ada2da514c8fb98a034aaf5c06caa0a57e2f7f4c4adedef5956
-  languageName: node
-  linkType: hard
-
-"array.prototype.flat@npm:^1.3.3":
-  version: 1.3.3
-  resolution: "array.prototype.flat@npm:1.3.3"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.5"
-    es-shim-unscopables: "npm:^1.0.2"
-  checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a
-  languageName: node
-  linkType: hard
-
-"array.prototype.flatmap@npm:^1.3.3":
-  version: 1.3.3
-  resolution: "array.prototype.flatmap@npm:1.3.3"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.5"
-    es-shim-unscopables: "npm:^1.0.2"
-  checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54
-  languageName: node
-  linkType: hard
-
-"arraybuffer.prototype.slice@npm:^1.0.4":
-  version: 1.0.4
-  resolution: "arraybuffer.prototype.slice@npm:1.0.4"
-  dependencies:
-    array-buffer-byte-length: "npm:^1.0.1"
-    call-bind: "npm:^1.0.8"
-    define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.5"
-    es-errors: "npm:^1.3.0"
-    get-intrinsic: "npm:^1.2.6"
-    is-array-buffer: "npm:^3.0.4"
-  checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06
-  languageName: node
-  linkType: hard
-
 "arrify@npm:^1.0.1":
   version: 1.0.1
   resolution: "arrify@npm:1.0.1"
@@ -5460,7 +5191,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2":
+"chalk@npm:^4.1.0, chalk@npm:^4.1.2":
   version: 4.1.2
   resolution: "chalk@npm:4.1.2"
   dependencies:
@@ -5852,13 +5583,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"confusing-browser-globals@npm:^1.0.10":
-  version: 1.0.11
-  resolution: "confusing-browser-globals@npm:1.0.11"
-  checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e
-  languageName: node
-  linkType: hard
-
 "console-control-strings@npm:^1.1.0":
   version: 1.1.0
   resolution: "console-control-strings@npm:1.1.0"
@@ -6236,39 +5960,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"data-view-buffer@npm:^1.0.2":
-  version: 1.0.2
-  resolution: "data-view-buffer@npm:1.0.2"
-  dependencies:
-    call-bound: "npm:^1.0.3"
-    es-errors: "npm:^1.3.0"
-    is-data-view: "npm:^1.0.2"
-  checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c
-  languageName: node
-  linkType: hard
-
-"data-view-byte-length@npm:^1.0.2":
-  version: 1.0.2
-  resolution: "data-view-byte-length@npm:1.0.2"
-  dependencies:
-    call-bound: "npm:^1.0.3"
-    es-errors: "npm:^1.3.0"
-    is-data-view: "npm:^1.0.2"
-  checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55
-  languageName: node
-  linkType: hard
-
-"data-view-byte-offset@npm:^1.0.1":
-  version: 1.0.1
-  resolution: "data-view-byte-offset@npm:1.0.1"
-  dependencies:
-    call-bound: "npm:^1.0.2"
-    es-errors: "npm:^1.3.0"
-    is-data-view: "npm:^1.0.1"
-  checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4
-  languageName: node
-  linkType: hard
-
 "dateformat@npm:^3.0.3":
   version: 3.0.3
   resolution: "dateformat@npm:3.0.3"
@@ -6283,7 +5974,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3":
+"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3":
   version: 4.4.3
   resolution: "debug@npm:4.4.3"
   dependencies:
@@ -6304,15 +5995,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"debug@npm:^3.2.7":
-  version: 3.2.7
-  resolution: "debug@npm:3.2.7"
-  dependencies:
-    ms: "npm:^2.1.1"
-  checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a
-  languageName: node
-  linkType: hard
-
 "debug@npm:^4.3.5":
   version: 4.4.1
   resolution: "debug@npm:4.4.1"
@@ -6403,13 +6085,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"deep-is@npm:^0.1.3":
-  version: 0.1.4
-  resolution: "deep-is@npm:0.1.4"
-  checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c
-  languageName: node
-  linkType: hard
-
 "defaults@npm:^1.0.3":
   version: 1.0.4
   resolution: "defaults@npm:1.0.4"
@@ -6529,15 +6204,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"doctrine@npm:^2.1.0":
-  version: 2.1.0
-  resolution: "doctrine@npm:2.1.0"
-  dependencies:
-    esutils: "npm:^2.0.2"
-  checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac
-  languageName: node
-  linkType: hard
-
 "dom-serializer@npm:^2.0.0":
   version: 2.0.0
   resolution: "dom-serializer@npm:2.0.0"
@@ -6635,7 +6301,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1":
+"dunder-proto@npm:^1.0.1":
   version: 1.0.1
   resolution: "dunder-proto@npm:1.0.1"
   dependencies:
@@ -6812,68 +6478,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"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.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.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.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"
-    has-property-descriptors: "npm:^1.0.2"
-    has-proto: "npm:^1.2.0"
-    has-symbols: "npm:^1.1.0"
-    hasown: "npm:^2.0.2"
-    internal-slot: "npm:^1.1.0"
-    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.1"
-    math-intrinsics: "npm:^1.1.0"
-    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.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"
-    typed-array-buffer: "npm:^1.0.3"
-    typed-array-byte-length: "npm:^1.0.3"
-    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.19"
-  checksum: 10c0/b256e897be32df5d382786ce8cce29a1dd8c97efbab77a26609bd70f2ed29fbcfc7a31758cb07488d532e7ccccdfca76c1118f2afe5a424cdc05ca007867c318
-  languageName: node
-  linkType: hard
-
 "es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1":
   version: 1.0.1
   resolution: "es-define-property@npm:1.0.1"
@@ -6933,26 +6537,6 @@ __metadata:
   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":
   version: 0.25.12
   resolution: "esbuild@npm:0.25.12"
@@ -7088,178 +6672,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"eslint-config-airbnb-base@npm:^15.0.0":
-  version: 15.0.0
-  resolution: "eslint-config-airbnb-base@npm:15.0.0"
-  dependencies:
-    confusing-browser-globals: "npm:^1.0.10"
-    object.assign: "npm:^4.1.2"
-    object.entries: "npm:^1.1.5"
-    semver: "npm:^6.3.0"
-  peerDependencies:
-    eslint: ^7.32.0 || ^8.2.0
-    eslint-plugin-import: ^2.25.2
-  checksum: 10c0/93639d991654414756f82ad7860aac30b0dc6797277b7904ddb53ed88a32c470598696bbc6c503e066414024d305221974d3769e6642de65043bedf29cbbd30f
-  languageName: node
-  linkType: hard
-
-"eslint-config-prettier@npm:^10.1.3":
-  version: 10.1.5
-  resolution: "eslint-config-prettier@npm:10.1.5"
-  peerDependencies:
-    eslint: ">=7.0.0"
-  bin:
-    eslint-config-prettier: bin/cli.js
-  checksum: 10c0/5486255428e4577e8064b40f27db299faf7312b8e43d7b4bc913a6426e6c0f5950cd519cad81ae24e9aecb4002c502bc665c02e3b52efde57af2debcf27dd6e0
-  languageName: node
-  linkType: hard
-
-"eslint-import-resolver-node@npm:^0.3.9":
-  version: 0.3.9
-  resolution: "eslint-import-resolver-node@npm:0.3.9"
-  dependencies:
-    debug: "npm:^3.2.7"
-    is-core-module: "npm:^2.13.0"
-    resolve: "npm:^1.22.4"
-  checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61
-  languageName: node
-  linkType: hard
-
-"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/6f4efbe7a91ae49bf67b4ab3644cb60bc5bd7db4cb5521de1b65be0847ffd3fb6bce0dd68f0995e1b312d137f768e2a1f842ee26fe73621afa05f850628fdc40
-  languageName: node
-  linkType: hard
-
-"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.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.1"
-    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/bfb1b8fc8800398e62ddfefbf3638d185286edfed26dfe00875cc2846d954491b4f5112457831588b757fa789384e1ae585f812614c4797f0499fa234fd4a48b
-  languageName: node
-  linkType: hard
-
-"eslint-plugin-simple-import-sort@npm:^12.1.1":
-  version: 12.1.1
-  resolution: "eslint-plugin-simple-import-sort@npm:12.1.1"
-  peerDependencies:
-    eslint: ">=5.0.0"
-  checksum: 10c0/0ad1907ad9ddbadd1db655db0a9d0b77076e274b793a77b982c8525d808d868e6ecfce24f3a411e8a1fa551077387f9ebb38c00956073970ebd7ee6a029ce2b3
-  languageName: node
-  linkType: hard
-
-"eslint-scope@npm:^8.3.0":
-  version: 8.3.0
-  resolution: "eslint-scope@npm:8.3.0"
-  dependencies:
-    esrecurse: "npm:^4.3.0"
-    estraverse: "npm:^5.2.0"
-  checksum: 10c0/23bf54345573201fdf06d29efa345ab508b355492f6c6cc9e2b9f6d02b896f369b6dd5315205be94b8853809776c4d13353b85c6b531997b164ff6c3328ecf5b
-  languageName: node
-  linkType: hard
-
-"eslint-visitor-keys@npm:^3.4.3":
-  version: 3.4.3
-  resolution: "eslint-visitor-keys@npm:3.4.3"
-  checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820
-  languageName: node
-  linkType: hard
-
-"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.26.0":
-  version: 9.27.0
-  resolution: "eslint@npm:9.27.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.14.0"
-    "@eslint/eslintrc": "npm:^3.3.1"
-    "@eslint/js": "npm:9.27.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"
-    "@types/estree": "npm:^1.0.6"
-    "@types/json-schema": "npm:^7.0.15"
-    ajv: "npm:^6.12.4"
-    chalk: "npm:^4.0.0"
-    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"
-    esquery: "npm:^1.5.0"
-    esutils: "npm:^2.0.2"
-    fast-deep-equal: "npm:^3.1.3"
-    file-entry-cache: "npm:^8.0.0"
-    find-up: "npm:^5.0.0"
-    glob-parent: "npm:^6.0.2"
-    ignore: "npm:^5.2.0"
-    imurmurhash: "npm:^0.1.4"
-    is-glob: "npm:^4.0.0"
-    json-stable-stringify-without-jsonify: "npm:^1.0.1"
-    lodash.merge: "npm:^4.6.2"
-    minimatch: "npm:^3.1.2"
-    natural-compare: "npm:^1.4.0"
-    optionator: "npm:^0.9.3"
-  peerDependencies:
-    jiti: "*"
-  peerDependenciesMeta:
-    jiti:
-      optional: true
-  bin:
-    eslint: bin/eslint.js
-  checksum: 10c0/135d301e37cd961000a9c1d3f0e1863bed29a61435dfddedba3db295973193024382190fd8790a8de83777d10f450082a29eaee8bc9ce0fb1bc1f2b0bb882280
-  languageName: node
-  linkType: hard
-
-"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.15.0"
-    acorn-jsx: "npm:^5.3.2"
-    eslint-visitor-keys: "npm:^4.2.1"
-  checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b
-  languageName: node
-  linkType: hard
-
 "esprima@npm:^4.0.0, esprima@npm:^4.0.1":
   version: 4.0.1
   resolution: "esprima@npm:4.0.1"
@@ -7270,25 +6682,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"esquery@npm:^1.5.0":
-  version: 1.6.0
-  resolution: "esquery@npm:1.6.0"
-  dependencies:
-    estraverse: "npm:^5.1.0"
-  checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2
-  languageName: node
-  linkType: hard
-
-"esrecurse@npm:^4.3.0":
-  version: 4.3.0
-  resolution: "esrecurse@npm:4.3.0"
-  dependencies:
-    estraverse: "npm:^5.2.0"
-  checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5
-  languageName: node
-  linkType: hard
-
-"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0":
+"estraverse@npm:^5.2.0":
   version: 5.3.0
   resolution: "estraverse@npm:5.3.0"
   checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107
@@ -7541,7 +6935,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
+"fast-deep-equal@npm:^3.1.3":
   version: 3.1.3
   resolution: "fast-deep-equal@npm:3.1.3"
   checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0
@@ -7562,7 +6956,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3":
+"fast-glob@npm:^3.3.3":
   version: 3.3.3
   resolution: "fast-glob@npm:3.3.3"
   dependencies:
@@ -7575,20 +6969,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"fast-json-stable-stringify@npm:^2.0.0":
-  version: 2.1.0
-  resolution: "fast-json-stable-stringify@npm:2.1.0"
-  checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b
-  languageName: node
-  linkType: hard
-
-"fast-levenshtein@npm:^2.0.6":
-  version: 2.0.6
-  resolution: "fast-levenshtein@npm:2.0.6"
-  checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4
-  languageName: node
-  linkType: hard
-
 "fast-safe-stringify@npm:^2.1.1":
   version: 2.1.1
   resolution: "fast-safe-stringify@npm:2.1.1"
@@ -7669,15 +7049,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"file-entry-cache@npm:^8.0.0":
-  version: 8.0.0
-  resolution: "file-entry-cache@npm:8.0.0"
-  dependencies:
-    flat-cache: "npm:^4.0.0"
-  checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638
-  languageName: node
-  linkType: hard
-
 "file-type@npm:^20.0.0":
   version: 20.5.0
   resolution: "file-type@npm:20.5.0"
@@ -7760,16 +7131,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"find-up@npm:^5.0.0":
-  version: 5.0.0
-  resolution: "find-up@npm:5.0.0"
-  dependencies:
-    locate-path: "npm:^6.0.0"
-    path-exists: "npm:^4.0.0"
-  checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a
-  languageName: node
-  linkType: hard
-
 "find-up@npm:^7.0.0":
   version: 7.0.0
   resolution: "find-up@npm:7.0.0"
@@ -7810,16 +7171,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"flat-cache@npm:^4.0.0":
-  version: 4.0.1
-  resolution: "flat-cache@npm:4.0.1"
-  dependencies:
-    flatted: "npm:^3.2.9"
-    keyv: "npm:^4.5.4"
-  checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc
-  languageName: node
-  linkType: hard
-
 "flat@npm:^5.0.2":
   version: 5.0.2
   resolution: "flat@npm:5.0.2"
@@ -7829,13 +7180,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"flatted@npm:^3.2.9":
-  version: 3.3.3
-  resolution: "flatted@npm:3.3.3"
-  checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538
-  languageName: node
-  linkType: hard
-
 "follow-redirects@npm:^1.15.6":
   version: 1.15.11
   resolution: "follow-redirects@npm:1.15.11"
@@ -7846,7 +7190,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"for-each@npm:^0.3.3, for-each@npm:^0.3.5":
+"for-each@npm:^0.3.5":
   version: 0.3.5
   resolution: "for-each@npm:0.3.5"
   dependencies:
@@ -8059,20 +7403,6 @@ __metadata:
   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"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    call-bound: "npm:^1.0.3"
-    define-properties: "npm:^1.2.1"
-    functions-have-names: "npm:^1.2.3"
-    hasown: "npm:^2.0.2"
-    is-callable: "npm:^1.2.7"
-  checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253
-  languageName: node
-  linkType: hard
-
 "functions-have-names@npm:^1.2.3":
   version: 1.2.3
   resolution: "functions-have-names@npm:1.2.3"
@@ -8145,7 +7475,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0":
+"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0":
   version: 1.3.1
   resolution: "get-intrinsic@npm:1.3.1"
   dependencies:
@@ -8230,17 +7560,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"get-symbol-description@npm:^1.1.0":
-  version: 1.1.0
-  resolution: "get-symbol-description@npm:1.1.0"
-  dependencies:
-    call-bound: "npm:^1.0.3"
-    es-errors: "npm:^1.3.0"
-    get-intrinsic: "npm:^1.2.6"
-  checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b
-  languageName: node
-  linkType: hard
-
 "get-tsconfig@npm:^4.7.5":
   version: 4.13.0
   resolution: "get-tsconfig@npm:4.13.0"
@@ -8344,7 +7663,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.2":
+"glob-parent@npm:6.0.2":
   version: 6.0.2
   resolution: "glob-parent@npm:6.0.2"
   dependencies:
@@ -8442,37 +7761,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"globals@npm:^14.0.0":
-  version: 14.0.0
-  resolution: "globals@npm:14.0.0"
-  checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d
-  languageName: node
-  linkType: hard
-
-"globals@npm:^15.14.0":
-  version: 15.15.0
-  resolution: "globals@npm:15.15.0"
-  checksum: 10c0/f9ae80996392ca71316495a39bec88ac43ae3525a438b5626cd9d5ce9d5500d0a98a266409605f8cd7241c7acf57c354a48111ea02a767ba4f374b806d6861fe
-  languageName: node
-  linkType: hard
-
-"globals@npm:^17.0.0":
-  version: 17.0.0
-  resolution: "globals@npm:17.0.0"
-  checksum: 10c0/e3c169fdcb0fc6755707b697afb367bea483eb29992cfc0de1637382eb893146e17f8f96db6d7453e3696b478a7863ae2000e6c71cd2f4061410285106d3847a
-  languageName: node
-  linkType: hard
-
-"globalthis@npm:^1.0.4":
-  version: 1.0.4
-  resolution: "globalthis@npm:1.0.4"
-  dependencies:
-    define-properties: "npm:^1.2.1"
-    gopd: "npm:^1.0.1"
-  checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846
-  languageName: node
-  linkType: hard
-
 "globby@npm:^15.0.0":
   version: 15.0.0
   resolution: "globby@npm:15.0.0"
@@ -8564,13 +7852,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"graphemer@npm:^1.4.0":
-  version: 1.4.0
-  resolution: "graphemer@npm:1.4.0"
-  checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31
-  languageName: node
-  linkType: hard
-
 "gtoken@npm:^8.0.0":
   version: 8.0.0
   resolution: "gtoken@npm:8.0.0"
@@ -8636,15 +7917,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"has-proto@npm:^1.2.0":
-  version: 1.2.0
-  resolution: "has-proto@npm:1.2.0"
-  dependencies:
-    dunder-proto: "npm:^1.0.0"
-  checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95
-  languageName: node
-  linkType: hard
-
 "has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0":
   version: 1.1.0
   resolution: "has-symbols@npm:1.1.0"
@@ -8946,14 +8218,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ignore@npm:^5.0.4, ignore@npm:^5.2.0":
+"ignore@npm:^5.0.4":
   version: 5.3.2
   resolution: "ignore@npm:5.3.2"
   checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337
   languageName: node
   linkType: hard
 
-"ignore@npm:^7.0.0, ignore@npm:^7.0.5":
+"ignore@npm:^7.0.5":
   version: 7.0.5
   resolution: "ignore@npm:7.0.5"
   checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d
@@ -9049,7 +8321,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0":
+"import-fresh@npm:^3.3.0":
   version: 3.3.1
   resolution: "import-fresh@npm:3.3.1"
   dependencies:
@@ -9223,7 +8495,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5":
+"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.5":
   version: 3.0.5
   resolution: "is-array-buffer@npm:3.0.5"
   dependencies:
@@ -9241,19 +8513,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-async-function@npm:^2.0.0":
-  version: 2.1.1
-  resolution: "is-async-function@npm:2.1.1"
-  dependencies:
-    async-function: "npm:^1.0.0"
-    call-bound: "npm:^1.0.3"
-    get-proto: "npm:^1.0.1"
-    has-tostringtag: "npm:^1.0.2"
-    safe-regex-test: "npm:^1.1.0"
-  checksum: 10c0/d70c236a5e82de6fc4d44368ffd0c2fee2b088b893511ce21e679da275a5ecc6015ff59a7d7e1bdd7ca39f71a8dbdd253cf8cce5c6b3c91cdd5b42b5ce677298
-  languageName: node
-  linkType: hard
-
 "is-bigint@npm:^1.1.0":
   version: 1.1.0
   resolution: "is-bigint@npm:1.1.0"
@@ -9302,7 +8561,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.1, is-core-module@npm:^2.5.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:
@@ -9311,18 +8570,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2":
-  version: 1.0.2
-  resolution: "is-data-view@npm:1.0.2"
-  dependencies:
-    call-bound: "npm:^1.0.2"
-    get-intrinsic: "npm:^1.2.6"
-    is-typed-array: "npm:^1.1.13"
-  checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153
-  languageName: node
-  linkType: hard
-
-"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0":
+"is-date-object@npm:^1.0.5":
   version: 1.1.0
   resolution: "is-date-object@npm:1.1.0"
   dependencies:
@@ -9348,15 +8596,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-finalizationregistry@npm:^1.1.0":
-  version: 1.1.1
-  resolution: "is-finalizationregistry@npm:1.1.1"
-  dependencies:
-    call-bound: "npm:^1.0.3"
-  checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97
-  languageName: node
-  linkType: hard
-
 "is-fullwidth-code-point@npm:^3.0.0":
   version: 3.0.0
   resolution: "is-fullwidth-code-point@npm:3.0.0"
@@ -9373,20 +8612,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-generator-function@npm:^1.0.10":
-  version: 1.1.2
-  resolution: "is-generator-function@npm:1.1.2"
-  dependencies:
-    call-bound: "npm:^1.0.4"
-    generator-function: "npm:^2.0.0"
-    get-proto: "npm:^1.0.1"
-    has-tostringtag: "npm:^1.0.2"
-    safe-regex-test: "npm:^1.1.0"
-  checksum: 10c0/83da102e89c3e3b71d67b51d47c9f9bc862bceb58f87201727e27f7fa19d1d90b0ab223644ecaee6fc6e3d2d622bb25c966fbdaf87c59158b01ce7c0fe2fa372
-  languageName: node
-  linkType: hard
-
-"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3":
+"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3":
   version: 4.0.3
   resolution: "is-glob@npm:4.0.3"
   dependencies:
@@ -9419,13 +8645,6 @@ __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-node-process@npm:^1.2.0":
   version: 1.2.0
   resolution: "is-node-process@npm:1.2.0"
@@ -9497,7 +8716,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.4":
+"is-shared-array-buffer@npm:^1.0.2":
   version: 1.0.4
   resolution: "is-shared-array-buffer@npm:1.0.4"
   dependencies:
@@ -9553,7 +8772,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1":
+"is-symbol@npm:^1.1.1":
   version: 1.1.1
   resolution: "is-symbol@npm:1.1.1"
   dependencies:
@@ -9582,15 +8801,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15":
-  version: 1.1.15
-  resolution: "is-typed-array@npm:1.1.15"
-  dependencies:
-    which-typed-array: "npm:^1.1.16"
-  checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4
-  languageName: node
-  linkType: hard
-
 "is-unicode-supported@npm:^0.1.0":
   version: 0.1.0
   resolution: "is-unicode-supported@npm:0.1.0"
@@ -9614,15 +8824,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1":
-  version: 1.1.1
-  resolution: "is-weakref@npm:1.1.1"
-  dependencies:
-    call-bound: "npm:^1.0.3"
-  checksum: 10c0/8e0a9c07b0c780949a100e2cab2b5560a48ecd4c61726923c1a9b77b6ab0aa0046c9e7fb2206042296817045376dee2c8ab1dabe08c7c3dfbf195b01275a085b
-  languageName: node
-  linkType: hard
-
 "is-weakset@npm:^2.0.3":
   version: 2.0.4
   resolution: "is-weakset@npm:2.0.4"
@@ -9927,13 +9128,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"json-schema-traverse@npm:^0.4.1":
-  version: 0.4.1
-  resolution: "json-schema-traverse@npm:0.4.1"
-  checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce
-  languageName: node
-  linkType: hard
-
 "json-schema-traverse@npm:^1.0.0":
   version: 1.0.0
   resolution: "json-schema-traverse@npm:1.0.0"
@@ -9955,13 +9149,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"json-stable-stringify-without-jsonify@npm:^1.0.1":
-  version: 1.0.1
-  resolution: "json-stable-stringify-without-jsonify@npm:1.0.1"
-  checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5
-  languageName: node
-  linkType: hard
-
 "json-stringify-nice@npm:^1.1.4":
   version: 1.1.4
   resolution: "json-stringify-nice@npm:1.1.4"
@@ -9976,17 +9163,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"json5@npm:^1.0.2":
-  version: 1.0.2
-  resolution: "json5@npm:1.0.2"
-  dependencies:
-    minimist: "npm:^1.2.0"
-  bin:
-    json5: lib/cli.js
-  checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f
-  languageName: node
-  linkType: hard
-
 "json5@npm:^2.2.2, json5@npm:^2.2.3":
   version: 2.2.3
   resolution: "json5@npm:2.2.3"
@@ -10206,19 +9382,9 @@ __metadata:
   linkType: hard
 
 "leven@npm:2.1.0":
-  version: 2.1.0
-  resolution: "leven@npm:2.1.0"
-  checksum: 10c0/e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df
-  languageName: node
-  linkType: hard
-
-"levn@npm:^0.4.1":
-  version: 0.4.1
-  resolution: "levn@npm:0.4.1"
-  dependencies:
-    prelude-ls: "npm:^1.2.1"
-    type-check: "npm:~0.4.0"
-  checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e
+  version: 2.1.0
+  resolution: "leven@npm:2.1.0"
+  checksum: 10c0/e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df
   languageName: node
   linkType: hard
 
@@ -10479,15 +9645,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"locate-path@npm:^6.0.0":
-  version: 6.0.0
-  resolution: "locate-path@npm:6.0.0"
-  dependencies:
-    p-locate: "npm:^5.0.0"
-  checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3
-  languageName: node
-  linkType: hard
-
 "locate-path@npm:^7.2.0":
   version: 7.2.0
   resolution: "locate-path@npm:7.2.0"
@@ -10948,7 +10105,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"minimatch@npm:^3.0.4, minimatch@npm:^3.1.2":
+"minimatch@npm:^3.0.4":
   version: 3.1.5
   resolution: "minimatch@npm:3.1.5"
   dependencies:
@@ -11201,7 +10358,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3":
+"ms@npm:^2.0.0, ms@npm:^2.1.3":
   version: 2.1.3
   resolution: "ms@npm:2.1.3"
   checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48
@@ -11276,13 +10433,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"natural-compare@npm:^1.4.0":
-  version: 1.4.0
-  resolution: "natural-compare@npm:1.4.0"
-  checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447
-  languageName: node
-  linkType: hard
-
 "negotiator@npm:^1.0.0":
   version: 1.0.0
   resolution: "negotiator@npm:1.0.0"
@@ -11748,7 +10898,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4":
+"object-inspect@npm:^1.13.3":
   version: 1.13.4
   resolution: "object-inspect@npm:1.13.4"
   checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692
@@ -11772,7 +10922,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"object.assign@npm:^4.1.2, object.assign@npm:^4.1.4, object.assign@npm:^4.1.7":
+"object.assign@npm:^4.1.4":
   version: 4.1.7
   resolution: "object.assign@npm:4.1.7"
   dependencies:
@@ -11786,53 +10936,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"object.entries@npm:^1.1.5":
-  version: 1.1.9
-  resolution: "object.entries@npm:1.1.9"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    call-bound: "npm:^1.0.4"
-    define-properties: "npm:^1.2.1"
-    es-object-atoms: "npm:^1.1.1"
-  checksum: 10c0/d4b8c1e586650407da03370845f029aa14076caca4e4d4afadbc69cfb5b78035fd3ee7be417141abdb0258fa142e59b11923b4c44d8b1255b28f5ffcc50da7db
-  languageName: node
-  linkType: hard
-
-"object.fromentries@npm:^2.0.8":
-  version: 2.0.8
-  resolution: "object.fromentries@npm:2.0.8"
-  dependencies:
-    call-bind: "npm:^1.0.7"
-    define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.2"
-    es-object-atoms: "npm:^1.0.0"
-  checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b
-  languageName: node
-  linkType: hard
-
-"object.groupby@npm:^1.0.3":
-  version: 1.0.3
-  resolution: "object.groupby@npm:1.0.3"
-  dependencies:
-    call-bind: "npm:^1.0.7"
-    define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.2"
-  checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c
-  languageName: node
-  linkType: hard
-
-"object.values@npm:^1.2.1":
-  version: 1.2.1
-  resolution: "object.values@npm:1.2.1"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    call-bound: "npm:^1.0.3"
-    define-properties: "npm:^1.2.1"
-    es-object-atoms: "npm:^1.0.0"
-  checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9
-  languageName: node
-  linkType: hard
-
 "obug@npm:^2.1.1":
   version: 2.1.1
   resolution: "obug@npm:2.1.1"
@@ -11931,20 +11034,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"optionator@npm:^0.9.3":
-  version: 0.9.4
-  resolution: "optionator@npm:0.9.4"
-  dependencies:
-    deep-is: "npm:^0.1.3"
-    fast-levenshtein: "npm:^2.0.6"
-    levn: "npm:^0.4.1"
-    prelude-ls: "npm:^1.2.1"
-    type-check: "npm:^0.4.0"
-    word-wrap: "npm:^1.2.5"
-  checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675
-  languageName: node
-  linkType: hard
-
 "ora@npm:5.3.0":
   version: 5.3.0
   resolution: "ora@npm:5.3.0"
@@ -12015,17 +11104,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"own-keys@npm:^1.0.1":
-  version: 1.0.1
-  resolution: "own-keys@npm:1.0.1"
-  dependencies:
-    get-intrinsic: "npm:^1.2.6"
-    object-keys: "npm:^1.1.1"
-    safe-push-apply: "npm:^1.0.0"
-  checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a
-  languageName: node
-  linkType: hard
-
 "oxfmt@npm:^0.45.0":
   version: 0.45.0
   resolution: "oxfmt@npm:0.45.0"
@@ -12095,6 +11173,108 @@ __metadata:
   languageName: node
   linkType: hard
 
+"oxlint-tsgolint@npm:^0.20.0":
+  version: 0.20.0
+  resolution: "oxlint-tsgolint@npm:0.20.0"
+  dependencies:
+    "@oxlint-tsgolint/darwin-arm64": "npm:0.20.0"
+    "@oxlint-tsgolint/darwin-x64": "npm:0.20.0"
+    "@oxlint-tsgolint/linux-arm64": "npm:0.20.0"
+    "@oxlint-tsgolint/linux-x64": "npm:0.20.0"
+    "@oxlint-tsgolint/win32-arm64": "npm:0.20.0"
+    "@oxlint-tsgolint/win32-x64": "npm:0.20.0"
+  dependenciesMeta:
+    "@oxlint-tsgolint/darwin-arm64":
+      optional: true
+    "@oxlint-tsgolint/darwin-x64":
+      optional: true
+    "@oxlint-tsgolint/linux-arm64":
+      optional: true
+    "@oxlint-tsgolint/linux-x64":
+      optional: true
+    "@oxlint-tsgolint/win32-arm64":
+      optional: true
+    "@oxlint-tsgolint/win32-x64":
+      optional: true
+  bin:
+    tsgolint: bin/tsgolint.js
+  checksum: 10c0/9521a8e6aaea637592cda093bfb9220eb8a728bfccc980cc82de0011ed84733f1a42c629dfff8574a023e40e48c2dcdaf1675f0cf11aa92d164d5ccca1305c52
+  languageName: node
+  linkType: hard
+
+"oxlint@npm:^1.59.0":
+  version: 1.60.0
+  resolution: "oxlint@npm:1.60.0"
+  dependencies:
+    "@oxlint/binding-android-arm-eabi": "npm:1.60.0"
+    "@oxlint/binding-android-arm64": "npm:1.60.0"
+    "@oxlint/binding-darwin-arm64": "npm:1.60.0"
+    "@oxlint/binding-darwin-x64": "npm:1.60.0"
+    "@oxlint/binding-freebsd-x64": "npm:1.60.0"
+    "@oxlint/binding-linux-arm-gnueabihf": "npm:1.60.0"
+    "@oxlint/binding-linux-arm-musleabihf": "npm:1.60.0"
+    "@oxlint/binding-linux-arm64-gnu": "npm:1.60.0"
+    "@oxlint/binding-linux-arm64-musl": "npm:1.60.0"
+    "@oxlint/binding-linux-ppc64-gnu": "npm:1.60.0"
+    "@oxlint/binding-linux-riscv64-gnu": "npm:1.60.0"
+    "@oxlint/binding-linux-riscv64-musl": "npm:1.60.0"
+    "@oxlint/binding-linux-s390x-gnu": "npm:1.60.0"
+    "@oxlint/binding-linux-x64-gnu": "npm:1.60.0"
+    "@oxlint/binding-linux-x64-musl": "npm:1.60.0"
+    "@oxlint/binding-openharmony-arm64": "npm:1.60.0"
+    "@oxlint/binding-win32-arm64-msvc": "npm:1.60.0"
+    "@oxlint/binding-win32-ia32-msvc": "npm:1.60.0"
+    "@oxlint/binding-win32-x64-msvc": "npm:1.60.0"
+  peerDependencies:
+    oxlint-tsgolint: ">=0.18.0"
+  dependenciesMeta:
+    "@oxlint/binding-android-arm-eabi":
+      optional: true
+    "@oxlint/binding-android-arm64":
+      optional: true
+    "@oxlint/binding-darwin-arm64":
+      optional: true
+    "@oxlint/binding-darwin-x64":
+      optional: true
+    "@oxlint/binding-freebsd-x64":
+      optional: true
+    "@oxlint/binding-linux-arm-gnueabihf":
+      optional: true
+    "@oxlint/binding-linux-arm-musleabihf":
+      optional: true
+    "@oxlint/binding-linux-arm64-gnu":
+      optional: true
+    "@oxlint/binding-linux-arm64-musl":
+      optional: true
+    "@oxlint/binding-linux-ppc64-gnu":
+      optional: true
+    "@oxlint/binding-linux-riscv64-gnu":
+      optional: true
+    "@oxlint/binding-linux-riscv64-musl":
+      optional: true
+    "@oxlint/binding-linux-s390x-gnu":
+      optional: true
+    "@oxlint/binding-linux-x64-gnu":
+      optional: true
+    "@oxlint/binding-linux-x64-musl":
+      optional: true
+    "@oxlint/binding-openharmony-arm64":
+      optional: true
+    "@oxlint/binding-win32-arm64-msvc":
+      optional: true
+    "@oxlint/binding-win32-ia32-msvc":
+      optional: true
+    "@oxlint/binding-win32-x64-msvc":
+      optional: true
+  peerDependenciesMeta:
+    oxlint-tsgolint:
+      optional: true
+  bin:
+    oxlint: bin/oxlint
+  checksum: 10c0/d12a2f4a6aeba5263e37b28e565b04ba8707eaec7cae53a43f3976771ec019f341fdd0f7fbd089e02c6c135d12a149a07b7162f96c2b3fa702b0642c93aff72f
+  languageName: node
+  linkType: hard
+
 "p-cancelable@npm:^4.0.1":
   version: 4.0.1
   resolution: "p-cancelable@npm:4.0.1"
@@ -12127,15 +11307,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"p-limit@npm:^3.0.2":
-  version: 3.1.0
-  resolution: "p-limit@npm:3.1.0"
-  dependencies:
-    yocto-queue: "npm:^0.1.0"
-  checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a
-  languageName: node
-  linkType: hard
-
 "p-limit@npm:^4.0.0":
   version: 4.0.0
   resolution: "p-limit@npm:4.0.0"
@@ -12172,15 +11343,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"p-locate@npm:^5.0.0":
-  version: 5.0.0
-  resolution: "p-locate@npm:5.0.0"
-  dependencies:
-    p-limit: "npm:^3.0.2"
-  checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a
-  languageName: node
-  linkType: hard
-
 "p-locate@npm:^6.0.0":
   version: 6.0.0
   resolution: "p-locate@npm:6.0.0"
@@ -12808,13 +11970,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"prelude-ls@npm:^1.2.1":
-  version: 1.2.1
-  resolution: "prelude-ls@npm:1.2.1"
-  checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd
-  languageName: node
-  linkType: hard
-
 "pretty-format@npm:30.2.0":
   version: 30.2.0
   resolution: "pretty-format@npm:30.2.0"
@@ -12993,7 +12148,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"punycode@npm:^2.1.0, punycode@npm:^2.3.1":
+"punycode@npm:^2.3.1":
   version: 2.3.1
   resolution: "punycode@npm:2.3.1"
   checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9
@@ -13248,23 +12403,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9":
-  version: 1.0.10
-  resolution: "reflect.getprototypeof@npm:1.0.10"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.9"
-    es-errors: "npm:^1.3.0"
-    es-object-atoms: "npm:^1.0.0"
-    get-intrinsic: "npm:^1.2.7"
-    get-proto: "npm:^1.0.1"
-    which-builtin-type: "npm:^1.2.1"
-  checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac
-  languageName: node
-  linkType: hard
-
-"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.4":
+"regexp.prototype.flags@npm:^1.5.1":
   version: 1.5.4
   resolution: "regexp.prototype.flags@npm:1.5.4"
   dependencies:
@@ -13343,7 +12482,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"resolve@npm:^1.10.0, resolve@npm:^1.22.4":
+"resolve@npm:^1.10.0":
   version: 1.22.11
   resolution: "resolve@npm:1.22.11"
   dependencies:
@@ -13356,7 +12495,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin":
+"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin":
   version: 1.22.11
   resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d"
   dependencies:
@@ -13570,19 +12709,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"safe-array-concat@npm:^1.1.3":
-  version: 1.1.3
-  resolution: "safe-array-concat@npm:1.1.3"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    call-bound: "npm:^1.0.2"
-    get-intrinsic: "npm:^1.2.6"
-    has-symbols: "npm:^1.1.0"
-    isarray: "npm:^2.0.5"
-  checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d
-  languageName: node
-  linkType: hard
-
 "safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0":
   version: 5.2.1
   resolution: "safe-buffer@npm:5.2.1"
@@ -13597,16 +12723,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"safe-push-apply@npm:^1.0.0":
-  version: 1.0.0
-  resolution: "safe-push-apply@npm:1.0.0"
-  dependencies:
-    es-errors: "npm:^1.3.0"
-    isarray: "npm:^2.0.5"
-  checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750
-  languageName: node
-  linkType: hard
-
 "safe-regex-test@npm:^1.1.0":
   version: 1.1.0
   resolution: "safe-regex-test@npm:1.1.0"
@@ -13673,15 +12789,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"semver@npm:^6.3.0, semver@npm:^6.3.1":
-  version: 6.3.1
-  resolution: "semver@npm:6.3.1"
-  bin:
-    semver: bin/semver.js
-  checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d
-  languageName: node
-  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.5.3, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:^7.7.2, semver@npm:^7.7.3":
   version: 7.7.3
   resolution: "semver@npm:7.7.3"
@@ -13771,17 +12878,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"set-proto@npm:^1.0.0":
-  version: 1.0.0
-  resolution: "set-proto@npm:1.0.0"
-  dependencies:
-    dunder-proto: "npm:^1.0.1"
-    es-errors: "npm:^1.3.0"
-    es-object-atoms: "npm:^1.0.0"
-  checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a
-  languageName: node
-  linkType: hard
-
 "setprototypeof@npm:~1.2.0":
   version: 1.2.0
   resolution: "setprototypeof@npm:1.2.0"
@@ -14116,7 +13212,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"stop-iteration-iterator@npm:^1.0.0, stop-iteration-iterator@npm:^1.1.0":
+"stop-iteration-iterator@npm:^1.0.0":
   version: 1.1.0
   resolution: "stop-iteration-iterator@npm:1.1.0"
   dependencies:
@@ -14226,44 +13322,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"string.prototype.trim@npm:^1.2.10":
-  version: 1.2.10
-  resolution: "string.prototype.trim@npm:1.2.10"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    call-bound: "npm:^1.0.2"
-    define-data-property: "npm:^1.1.4"
-    define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.5"
-    es-object-atoms: "npm:^1.0.0"
-    has-property-descriptors: "npm:^1.0.2"
-  checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8
-  languageName: node
-  linkType: hard
-
-"string.prototype.trimend@npm:^1.0.9":
-  version: 1.0.9
-  resolution: "string.prototype.trimend@npm:1.0.9"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    call-bound: "npm:^1.0.2"
-    define-properties: "npm:^1.2.1"
-    es-object-atoms: "npm:^1.0.0"
-  checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6
-  languageName: node
-  linkType: hard
-
-"string.prototype.trimstart@npm:^1.0.8":
-  version: 1.0.8
-  resolution: "string.prototype.trimstart@npm:1.0.8"
-  dependencies:
-    call-bind: "npm:^1.0.7"
-    define-properties: "npm:^1.2.1"
-    es-object-atoms: "npm:^1.0.0"
-  checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366
-  languageName: node
-  linkType: hard
-
 "string_decoder@npm:^1.1.1":
   version: 1.3.0
   resolution: "string_decoder@npm:1.3.0"
@@ -14330,13 +13388,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"strip-json-comments@npm:^3.1.1":
-  version: 3.1.1
-  resolution: "strip-json-comments@npm:3.1.1"
-  checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd
-  languageName: node
-  linkType: hard
-
 "strip-json-comments@npm:^5.0.2":
   version: 5.0.3
   resolution: "strip-json-comments@npm:5.0.3"
@@ -14791,15 +13842,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ts-api-utils@npm:^2.1.0":
-  version: 2.1.0
-  resolution: "ts-api-utils@npm:2.1.0"
-  peerDependencies:
-    typescript: ">=4.8.4"
-  checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f
-  languageName: node
-  linkType: hard
-
 "tsconfck@npm:^3.0.3":
   version: 3.1.5
   resolution: "tsconfck@npm:3.1.5"
@@ -14814,18 +13856,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"tsconfig-paths@npm:^3.15.0":
-  version: 3.15.0
-  resolution: "tsconfig-paths@npm:3.15.0"
-  dependencies:
-    "@types/json5": "npm:^0.0.29"
-    json5: "npm:^1.0.2"
-    minimist: "npm:^1.2.6"
-    strip-bom: "npm:^3.0.0"
-  checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5
-  languageName: node
-  linkType: hard
-
 "tsconfig-paths@npm:^4.1.2":
   version: 4.2.0
   resolution: "tsconfig-paths@npm:4.2.0"
@@ -14962,15 +13992,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
-  version: 0.4.0
-  resolution: "type-check@npm:0.4.0"
-  dependencies:
-    prelude-ls: "npm:^1.2.1"
-  checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58
-  languageName: node
-  linkType: hard
-
 "type-fest@npm:^0.18.0":
   version: 0.18.1
   resolution: "type-fest@npm:0.18.1"
@@ -15038,59 +14059,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"typed-array-buffer@npm:^1.0.3":
-  version: 1.0.3
-  resolution: "typed-array-buffer@npm:1.0.3"
-  dependencies:
-    call-bound: "npm:^1.0.3"
-    es-errors: "npm:^1.3.0"
-    is-typed-array: "npm:^1.1.14"
-  checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079
-  languageName: node
-  linkType: hard
-
-"typed-array-byte-length@npm:^1.0.3":
-  version: 1.0.3
-  resolution: "typed-array-byte-length@npm:1.0.3"
-  dependencies:
-    call-bind: "npm:^1.0.8"
-    for-each: "npm:^0.3.3"
-    gopd: "npm:^1.2.0"
-    has-proto: "npm:^1.2.0"
-    is-typed-array: "npm:^1.1.14"
-  checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e
-  languageName: node
-  linkType: hard
-
-"typed-array-byte-offset@npm:^1.0.4":
-  version: 1.0.4
-  resolution: "typed-array-byte-offset@npm:1.0.4"
-  dependencies:
-    available-typed-arrays: "npm:^1.0.7"
-    call-bind: "npm:^1.0.8"
-    for-each: "npm:^0.3.3"
-    gopd: "npm:^1.2.0"
-    has-proto: "npm:^1.2.0"
-    is-typed-array: "npm:^1.1.15"
-    reflect.getprototypeof: "npm:^1.0.9"
-  checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53
-  languageName: node
-  linkType: hard
-
-"typed-array-length@npm:^1.0.7":
-  version: 1.0.7
-  resolution: "typed-array-length@npm:1.0.7"
-  dependencies:
-    call-bind: "npm:^1.0.7"
-    for-each: "npm:^0.3.3"
-    gopd: "npm:^1.0.1"
-    is-typed-array: "npm:^1.1.13"
-    possible-typed-array-names: "npm:^1.0.0"
-    reflect.getprototypeof: "npm:^1.0.6"
-  checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295
-  languageName: node
-  linkType: hard
-
 "typed-query-selector@npm:^2.12.0":
   version: 2.12.0
   resolution: "typed-query-selector@npm:2.12.0"
@@ -15105,20 +14073,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"typescript-eslint@npm:^8.32.0":
-  version: 8.32.1
-  resolution: "typescript-eslint@npm:8.32.1"
-  dependencies:
-    "@typescript-eslint/eslint-plugin": "npm:8.32.1"
-    "@typescript-eslint/parser": "npm:8.32.1"
-    "@typescript-eslint/utils": "npm:8.32.1"
-  peerDependencies:
-    eslint: ^8.57.0 || ^9.0.0
-    typescript: ">=4.8.4 <5.9.0"
-  checksum: 10c0/15602916b582b86c8b4371e99d5721c92af7ae56f9b49cd7971d2a49f11bf0bd64dd8d2c0e2b3ca87b2f3a6fd14966738121f3f8299de50c6109b9f245397f3b
-  languageName: node
-  linkType: hard
-
 "typescript@npm:>=3 < 6, typescript@npm:^5.8.3":
   version: 5.8.3
   resolution: "typescript@npm:5.8.3"
@@ -15182,18 +14136,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"unbox-primitive@npm:^1.1.0":
-  version: 1.1.0
-  resolution: "unbox-primitive@npm:1.1.0"
-  dependencies:
-    call-bound: "npm:^1.0.3"
-    has-bigints: "npm:^1.0.2"
-    has-symbols: "npm:^1.1.0"
-    which-boxed-primitive: "npm:^1.1.1"
-  checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982
-  languageName: node
-  linkType: hard
-
 "unbzip2-stream@npm:^1.4.3":
   version: 1.4.3
   resolution: "unbzip2-stream@npm:1.4.3"
@@ -15299,15 +14241,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"uri-js@npm:^4.2.2":
-  version: 4.4.1
-  resolution: "uri-js@npm:4.4.1"
-  dependencies:
-    punycode: "npm:^2.1.0"
-  checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c
-  languageName: node
-  linkType: hard
-
 "urlpattern-polyfill@npm:10.0.0":
   version: 10.0.0
   resolution: "urlpattern-polyfill@npm:10.0.0"
@@ -15612,7 +14545,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"which-boxed-primitive@npm:^1.0.2, which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1":
+"which-boxed-primitive@npm:^1.0.2":
   version: 1.1.1
   resolution: "which-boxed-primitive@npm:1.1.1"
   dependencies:
@@ -15625,28 +14558,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"which-builtin-type@npm:^1.2.1":
-  version: 1.2.1
-  resolution: "which-builtin-type@npm:1.2.1"
-  dependencies:
-    call-bound: "npm:^1.0.2"
-    function.prototype.name: "npm:^1.1.6"
-    has-tostringtag: "npm:^1.0.2"
-    is-async-function: "npm:^2.0.0"
-    is-date-object: "npm:^1.1.0"
-    is-finalizationregistry: "npm:^1.1.0"
-    is-generator-function: "npm:^1.0.10"
-    is-regex: "npm:^1.2.1"
-    is-weakref: "npm:^1.0.2"
-    isarray: "npm:^2.0.5"
-    which-boxed-primitive: "npm:^1.1.0"
-    which-collection: "npm:^1.0.2"
-    which-typed-array: "npm:^1.1.16"
-  checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471
-  languageName: node
-  linkType: hard
-
-"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2":
+"which-collection@npm:^1.0.1":
   version: 1.0.2
   resolution: "which-collection@npm:1.0.2"
   dependencies:
@@ -15658,7 +14570,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.19":
+"which-typed-array@npm:^1.1.13":
   version: 1.1.19
   resolution: "which-typed-array@npm:1.1.19"
   dependencies:
@@ -15716,13 +14628,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"word-wrap@npm:^1.2.5":
-  version: 1.2.5
-  resolution: "word-wrap@npm:1.2.5"
-  checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20
-  languageName: node
-  linkType: hard
-
 "wordwrap@npm:^1.0.0":
   version: 1.0.0
   resolution: "wordwrap@npm:1.0.0"
@@ -15995,13 +14900,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"yocto-queue@npm:^0.1.0":
-  version: 0.1.0
-  resolution: "yocto-queue@npm:0.1.0"
-  checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f
-  languageName: node
-  linkType: hard
-
 "yocto-queue@npm:^1.0.0, yocto-queue@npm:^1.1.1":
   version: 1.2.1
   resolution: "yocto-queue@npm:1.2.1"

From 1ae1b0375ece3ab516adee3fb708d2f35e8364fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= 
Date: Thu, 16 Apr 2026 14:15:00 +0200
Subject: [PATCH 3/4] fix: address PR review comments

- expand lint-staged glob to cover all JS/TS extensions
- use `obj?.value ?? null` instead of disable comment in serialization.ts
- await setCookie in session management example
- delete dead packages/templates/.eslintrc.json

Co-Authored-By: Claude Opus 4.6 (1M context) 
---
 docs/guides/session_management_basic.ts | 6 +++---
 package.json                            | 2 +-
 packages/core/src/serialization.ts      | 3 +--
 packages/templates/.eslintrc.json       | 9 ---------
 4 files changed, 5 insertions(+), 15 deletions(-)
 delete mode 100644 packages/templates/.eslintrc.json

diff --git a/docs/guides/session_management_basic.ts b/docs/guides/session_management_basic.ts
index 3e6f96f7a0e1..5dd90c2097eb 100644
--- a/docs/guides/session_management_basic.ts
+++ b/docs/guides/session_management_basic.ts
@@ -50,11 +50,11 @@ const crawler = new BasicCrawler({
                 ?.split(';')
                 .map((x) => Cookie.parse(x));
 
-            newCookies?.forEach((cookie) => {
+            for (const cookie of newCookies ?? []) {
                 if (cookie) {
-                    void session?.cookieJar?.setCookie(cookie, url);
+                    await session?.cookieJar?.setCookie(cookie, url);
                 }
-            });
+            }
         }
     },
 });
diff --git a/package.json b/package.json
index e6f5664563ac..925df2a1be00 100644
--- a/package.json
+++ b/package.json
@@ -116,7 +116,7 @@
         "vitest": "^4.1.0-beta.6"
     },
     "lint-staged": {
-        "*.ts": [
+        "*.{js,ts,mjs,mts,cjs,cts}": [
             "oxlint --fix",
             "oxfmt --write --no-error-on-unmatched-pattern"
         ]
diff --git a/packages/core/src/serialization.ts b/packages/core/src/serialization.ts
index 68a22513f695..bb640726d325 100644
--- a/packages/core/src/serialization.ts
+++ b/packages/core/src/serialization.ts
@@ -135,7 +135,6 @@ function createChunkCollector(
 
 function pluckValue(streamArray: Chain) {
     const realPush = streamArray.push.bind(streamArray);
-    // oxlint-disable-next-line typescript/prefer-optional-chain -- stream-json terminates on null push; `?.` returns undefined instead which breaks the pipeline
-    streamArray.push = (obj) => realPush(obj && obj.value);
+    streamArray.push = (obj) => realPush(obj?.value ?? null);
     return streamArray;
 }
diff --git a/packages/templates/.eslintrc.json b/packages/templates/.eslintrc.json
deleted file mode 100644
index a1e94417375c..000000000000
--- a/packages/templates/.eslintrc.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "root": true,
-    "extends": "../../.eslintrc.json",
-    "rules": {
-        "no-console": 0,
-        "@typescript-eslint/no-shadow": 0,
-        "@typescript-eslint/consistent-type-imports": 0
-    }
-}

From 9aa07ab7d72e5b1bd3b5f19daa5f2481aa554278 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= 
Date: Thu, 16 Apr 2026 14:31:06 +0200
Subject: [PATCH 4/4] fix: run regex only once in exportData

Co-Authored-By: Claude Opus 4.6 (1M context) 
---
 packages/basic-crawler/src/internals/basic-crawler.ts | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/basic-crawler/src/internals/basic-crawler.ts b/packages/basic-crawler/src/internals/basic-crawler.ts
index bcc3b4c3923d..696f9fb4e2ad 100644
--- a/packages/basic-crawler/src/internals/basic-crawler.ts
+++ b/packages/basic-crawler/src/internals/basic-crawler.ts
@@ -1601,8 +1601,9 @@ export class BasicCrawler<
     async exportData(path: string, format?: 'json' | 'csv', options?: DatasetExportOptions): Promise {
         const supportedFormats = ['json', 'csv'];
 
-        if (!format && /\.(json|csv)$/i.exec(path)) {
-            format = /\.(json|csv)$/.exec(path.toLowerCase())![1] as 'json' | 'csv';
+        const formatMatch = /\.(json|csv)$/i.exec(path);
+        if (!format && formatMatch) {
+            format = formatMatch[1].toLowerCase() as 'json' | 'csv';
         }
 
         if (!format) {