From 9371301b21f733a5b5f5c2a092512ec34f511843 Mon Sep 17 00:00:00 2001 From: Felix-Ayush <67006255+Ayush7614@users.noreply.github.com> Date: Fri, 31 Jul 2026 17:00:34 +0530 Subject: [PATCH 1/3] fix(impit-client): honor redirect handler for session cookie parity (#3938) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes the cookie handling on redirects when using `ImpitHttpClient.stream()`. --------- Co-authored-by: JindΕ™ich BΓ€r --- packages/impit-client/src/index.ts | 73 +++++++++++++++++-- test/core/crawlers/http_crawler.test.ts | 27 +++++++ test/core/impit_http_client.test.ts | 97 +++++++++++++++++++++++++ 3 files changed, 190 insertions(+), 7 deletions(-) diff --git a/packages/impit-client/src/index.ts b/packages/impit-client/src/index.ts index ee9407319ef9..da72c480d517 100644 --- a/packages/impit-client/src/index.ts +++ b/packages/impit-client/src/index.ts @@ -2,7 +2,14 @@ import { pipeline, Readable, Transform } from 'node:stream'; import { type ReadableStream } from 'node:stream/web'; import { isGeneratorObject } from 'node:util/types'; -import type { BaseHttpClient, HttpRequest, HttpResponse, ResponseTypes, StreamingHttpResponse } from '@crawlee/core'; +import type { + BaseHttpClient, + HttpRequest, + HttpResponse, + RedirectHandler, + ResponseTypes, + StreamingHttpResponse, +} from '@crawlee/core'; import type { HttpMethod, ImpitOptions, ImpitResponse, RequestInit } from 'impit'; import { Impit } from 'impit'; import type { CookieJar as ToughCookieJar } from 'tough-cookie'; @@ -19,6 +26,8 @@ interface ResponseWithRedirects { redirectUrls: URL[]; } +type SimpleHeaders = Record; + /** * A HTTP client implementation based on the `impit library. */ @@ -119,6 +128,27 @@ export class ImpitHttpClient implements BaseHttpClient { return false; } + /** + * Converts Fetch/Impit headers into a simple header map. + * `Object.fromEntries` would keep only the last `set-cookie` value, so those are collected separately. + */ + private intoSimpleHeaders(headers: Headers): SimpleHeaders { + const result: SimpleHeaders = {}; + + for (const [key, value] of headers.entries()) { + if (key === 'set-cookie') continue; + result[key] = value; + } + + const setCookies = headers.getSetCookie(); + + if (setCookies.length > 0) { + result['set-cookie'] = setCookies.length === 1 ? setCookies[0] : setCookies; + } + + return result; + } + /** * Common implementation for `sendRequest` and `stream` methods. * @param request `HttpRequest` object @@ -130,6 +160,7 @@ export class ImpitHttpClient implements BaseHttpClient { redirectCount?: number; redirectUrls?: URL[]; }, + onRedirect?: RedirectHandler, ): Promise { if ((redirects?.redirectCount ?? 0) > this.maxRedirects) { throw new Error(`Too many redirects, maximum is ${this.maxRedirects}.`); @@ -159,16 +190,44 @@ export class ImpitHttpClient implements BaseHttpClient { throw new Error('Redirect response missing location header.'); } + const nextRedirectUrls = [...(redirects?.redirectUrls ?? []), redirectUrl]; + const updatedRequest: { url?: string | URL; headers: SimpleHeaders } = { + url: redirectUrl.href, + headers: { ...(request.headers ?? {}) }, + }; + + // Match GotScrapingHttpClient: allow HttpCrawler to persist redirect cookies into the session + // and mutate Cookie / URL for the next hop. + onRedirect?.( + { + redirectUrls: nextRedirectUrls, + url, + statusCode: response.status, + statusMessage: response.statusText, + headers: this.intoSimpleHeaders(response.headers), + trailers: {}, + complete: true, + }, + updatedRequest, + ); + + const nextUrl = + typeof updatedRequest.url === 'string' + ? updatedRequest.url + : (updatedRequest.url?.href ?? redirectUrl.href); + return this.getResponse( { ...request, method: this.shouldRewriteRedirectToGet(response.status, request.method) ? 'GET' : request.method, - url: redirectUrl.href, + url: nextUrl, + headers: updatedRequest.headers, }, { redirectCount: (redirects?.redirectCount ?? 0) + 1, - redirectUrls: [...(redirects?.redirectUrls ?? []), redirectUrl], + redirectUrls: nextRedirectUrls, }, + onRedirect, ); } @@ -203,7 +262,7 @@ export class ImpitHttpClient implements BaseHttpClient { } return { - headers: Object.fromEntries(response.headers.entries()), + headers: this.intoSimpleHeaders(response.headers), statusCode: response.status, url: response.url, request, @@ -243,8 +302,8 @@ export class ImpitHttpClient implements BaseHttpClient { /** * @inheritDoc */ - async stream(request: HttpRequest): Promise { - const { response, redirectUrls } = await this.getResponse(request); + async stream(request: HttpRequest, onRedirect?: RedirectHandler): Promise { + const { response, redirectUrls } = await this.getResponse(request, undefined, onRedirect); const [stream, getDownloadProgress] = this.getStreamWithProgress(response); return { @@ -258,7 +317,7 @@ export class ImpitHttpClient implements BaseHttpClient { }, uploadProgress: { percent: 100, transferred: 0 }, redirectUrls, - headers: Object.fromEntries(response.headers.entries()), + headers: this.intoSimpleHeaders(response.headers), trailers: {}, }; } diff --git a/test/core/crawlers/http_crawler.test.ts b/test/core/crawlers/http_crawler.test.ts index 0aa96976aca7..16d723df997e 100644 --- a/test/core/crawlers/http_crawler.test.ts +++ b/test/core/crawlers/http_crawler.test.ts @@ -39,6 +39,12 @@ router.set('/cookies', (req, res) => { res.end(JSON.stringify(req.headers.cookie)); }); +router.set('/setCookie', (req, res) => { + res.setHeader('content-type', 'text/html'); + res.setHeader('set-cookie', 'first=1'); + res.end(); +}); + router.set('/redirectWithoutCookies', (req, res) => { res.setHeader('location', '/cookies'); res.statusCode = 302; @@ -238,6 +244,27 @@ describe.each( expect(results).toStrictEqual(['foo=bar']); }); + test('handles cookies from redirects when the session already has cookies', async () => { + const results: string[] = []; + + const crawler = new HttpCrawler({ + httpClient, + sessionPoolOptions: { + maxPoolSize: 1, + // isolated so that cookies stored by the other tests / clients don't leak in + persistStateKey: `SDK_SESSION_POOL_STATE_${httpClient.constructor.name}`, + }, + maxConcurrency: 1, + requestHandler: async ({ body }) => { + results.push(body.toString()); + }, + }); + + await crawler.run([`${url}/setCookie`, `${url}/redirectAndCookies`]); + + expect(results[1]).toBe('"first=1; foo=bar"'); + }); + test('handles cookies from redirects - no empty cookie header', async () => { const results: string[] = []; diff --git a/test/core/impit_http_client.test.ts b/test/core/impit_http_client.test.ts index d85c8b427b6a..4f7542186afc 100644 --- a/test/core/impit_http_client.test.ts +++ b/test/core/impit_http_client.test.ts @@ -9,6 +9,37 @@ vi.mock('impit', () => ({ ), })); +function createRedirectResponse(status: number, location: string, setCookie: string[] = []) { + const headers = new Headers({ location }); + for (const cookie of setCookie) headers.append('set-cookie', cookie); + + return { + status, + statusText: 'Found', + url: 'http://example.com/start', + headers, + body: undefined, + }; +} + +function createFinalResponse(body = 'ok') { + return { + status: 200, + statusText: 'OK', + url: 'http://example.com/final', + headers: new Headers({ 'content-type': 'text/plain', 'content-length': String(body.length) }), + body: new ReadableStream({ + start(controller) { + controller.enqueue(new TextEncoder().encode(body)); + controller.close(); + }, + }), + text: async () => body, + json: async () => ({ body }), + bytes: async () => Buffer.from(body), + }; +} + describe('ImpitHttpClient', () => { beforeEach(() => { vi.mocked(Impit).mockClear(); @@ -31,4 +62,70 @@ describe('ImpitHttpClient', () => { expect(Impit).toHaveBeenCalledTimes(2); }); + + test('stream() invokes onRedirect and forwards mutated Cookie header to the next hop', async () => { + const httpClient = new ImpitHttpClient({ cacheClients: false }); + const fetchMock = vi.fn(); + + vi.mocked(Impit).mockImplementation( + class { + fetch = fetchMock; + } as any, + ); + + fetchMock + .mockResolvedValueOnce(createRedirectResponse(302, '/final', ['session=abc', 'other=def'])) + .mockResolvedValueOnce(createFinalResponse('done')); + + const onRedirect = vi.fn((_redirectResponse, updatedRequest) => { + updatedRequest.headers.Cookie = 'session=abc'; + }); + + const response = await httpClient.stream( + { + url: 'http://example.com/start', + method: 'GET', + headers: {}, + }, + onRedirect, + ); + + expect(onRedirect).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledTimes(2); + + const [redirectResponse] = onRedirect.mock.calls[0]; + expect(redirectResponse.statusCode).toBe(302); + expect(redirectResponse.headers['set-cookie']).toEqual(['session=abc', 'other=def']); + + const secondCallHeaders = fetchMock.mock.calls[1][1].headers as Headers; + expect(secondCallHeaders.get('Cookie')).toBe('session=abc'); + expect(fetchMock.mock.calls[1][0]).toBe('http://example.com/final'); + expect(response.statusCode).toBe(200); + expect(response.redirectUrls).toEqual([new URL('http://example.com/final')]); + }); + + test('stream() follows redirects without onRedirect for API compatibility', async () => { + const httpClient = new ImpitHttpClient({ cacheClients: false }); + const fetchMock = vi.fn(); + + vi.mocked(Impit).mockImplementation( + class { + fetch = fetchMock; + } as any, + ); + + fetchMock + .mockResolvedValueOnce(createRedirectResponse(302, 'http://example.com/final')) + .mockResolvedValueOnce(createFinalResponse('done')); + + const response = await httpClient.stream({ + url: 'http://example.com/start', + method: 'GET', + headers: {}, + }); + + expect(fetchMock).toHaveBeenCalledTimes(2); + expect(response.statusCode).toBe(200); + expect(response.redirectUrls).toHaveLength(1); + }); }); From f73b249a9078d87b8a7a8bebaa04032e08091709 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 31 Jul 2026 14:35:58 +0200 Subject: [PATCH 2/3] chore(deps): update dependency lerna to v10 (#3943) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [lerna](https://lerna.js.org) ([source](https://redirect.github.com/lerna/lerna/tree/HEAD/packages/lerna)) | [`^9.0.7` β†’ `^10.0.0`](https://renovatebot.com/diffs/npm/lerna/9.0.7/10.0.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/lerna/10.0.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lerna/9.0.7/10.0.0?slim=true) | --- ### Release Notes
lerna/lerna (lerna) ### [`v10.0.0`](https://redirect.github.com/lerna/lerna/blob/HEAD/packages/lerna/CHANGELOG.md#1000-2026-07-29) [Compare Source](https://redirect.github.com/lerna/lerna/compare/v9.0.7...v10.0.0) - feat!: throw error in case of stale remote for CI mode ([#​4369](https://redirect.github.com/lerna/lerna/issues/4369)) ([3e81682](https://redirect.github.com/lerna/lerna/commit/3e816822837edb0a1f70cd52c90207f520461907)), closes [#​4369](https://redirect.github.com/lerna/lerna/issues/4369) - feat!: support node ^22.13.0 || ^24.0.0 || ^26.0.0, ship lerna as ESM-only ([#​4390](https://redirect.github.com/lerna/lerna/issues/4390)) ([a148ba2](https://redirect.github.com/lerna/lerna/commit/a148ba23882e4e3d201b0198eefc37d6f18196d9)), closes [#​4390](https://redirect.github.com/lerna/lerna/issues/4390) - fix(core)!: replace deprecated conventional-changelog dependencies ([#​4332](https://redirect.github.com/lerna/lerna/issues/4332)) ([b1ff72f](https://redirect.github.com/lerna/lerna/commit/b1ff72f7053870eaf661b06af9759c9fe6c0c5d6)), closes [#​4332](https://redirect.github.com/lerna/lerna/issues/4332) ##### Bug Fixes - **core:** remove p-map-series, p-pipe, p-reduce, and p-waterfall ([#​4321](https://redirect.github.com/lerna/lerna/issues/4321)) ([fe066cb](https://redirect.github.com/lerna/lerna/commit/fe066cb52fa47a590022108a098a9ba5fb108af2)) - **core:** remove upath dependency ([#​4317](https://redirect.github.com/lerna/lerna/issues/4317)) ([aa65470](https://redirect.github.com/lerna/lerna/commit/aa654700fdfb3bfe79e79a38cabbe3ff078a5f5b)) ##### Features - **core:** add bun as supported package manager ([#​4264](https://redirect.github.com/lerna/lerna/issues/4264)) ([4ca7d2c](https://redirect.github.com/lerna/lerna/commit/4ca7d2cc46feef31641d6877cf32f420d2ebc897)) ##### BREAKING CHANGES - In CI, `EBEHIND` will now be thrown during versioning and publishing if the checkout is behind the latest on the remote. This previously only occurred outside of CI environments. If you wish to opt into the old behavior, you can do so by setting `--ci-behind-behavior` (error | skip, default error) or `command.version.ciBehindBehavior` in `lerna.json`. - Lerna is now shipped as ESM-only and the lowest supported node version has changed to 22.13.0, because on this version CommonJS consumers can still require in its entry points without any additional flags or warnings. - Lerna now uses the current conventional-changelog APIs instead of the deprecated conventional-changelog-core stack. Generated CHANGELOG.md output may differ, including normalized whitespace and URL-encoded tag names. Projects using custom changelog presets should verify their output; Lerna retains compatibility for legacy parser/writer option names and Handlebars string templates. CLI options and version-bump behavior remain unchanged. #### [9.0.7](https://redirect.github.com/lerna/lerna/compare/v9.0.6...v9.0.7) (2026-03-13) ##### Bug Fixes - **core:** remove multimatch dependency and legacy-core internals ([#​4314](https://redirect.github.com/lerna/lerna/issues/4314)) ([ec01462](https://redirect.github.com/lerna/lerna/commit/ec01462a9c6b6911f47d328e6662aa7afd7feea5)) #### [9.0.6](https://redirect.github.com/lerna/lerna/compare/v9.0.5...v9.0.6) (2026-03-11) ##### Bug Fixes - **deps:** add missing ci-info dependency ([#​4263](https://redirect.github.com/lerna/lerna/issues/4263)) ([b768187](https://redirect.github.com/lerna/lerna/commit/b76818783c92c582b11555c56c222947ecbd4791)) - **deps:** bump tar from 7.5.8 to 7.5.11 ([#​4296](https://redirect.github.com/lerna/lerna/issues/4296)) ([7a69a57](https://redirect.github.com/lerna/lerna/commit/7a69a5753324c70086c9ed760c61dd22d5c89b42)) #### [9.0.5](https://redirect.github.com/lerna/lerna/compare/v9.0.4...v9.0.5) (2026-02-28) ##### Bug Fixes - bump minimatch from 3.0.5 to 3.1.4 ([#​4285](https://redirect.github.com/lerna/lerna/issues/4285)) ([2e3f99e](https://redirect.github.com/lerna/lerna/commit/2e3f99ed2dfa5be614ba3f740ab0579bbd4c51c9)) - bump tar from 7.5.7 to 7.5.8 ([#​4273](https://redirect.github.com/lerna/lerna/issues/4273)) ([bdffd1d](https://redirect.github.com/lerna/lerna/commit/bdffd1d97c27cd2a43e853d73296936fbc0e4f27)) #### [9.0.4](https://redirect.github.com/lerna/lerna/compare/v9.0.3...v9.0.4) (2026-02-10) ##### Bug Fixes - bump tar to 7.5.7, rimraf to 6.1.2, [@​npmcli/run-script](https://redirect.github.com/npmcli/run-script) to 10.0.3 ([#​4267](https://redirect.github.com/lerna/lerna/issues/4267)) ([43e3d46](https://redirect.github.com/lerna/lerna/commit/43e3d46fd6d76f05e130e8f8f5a6299f0e93f2ae)) #### [9.0.3](https://redirect.github.com/lerna/lerna/compare/v9.0.2...v9.0.3) (2025-11-27) **Note:** Version bump only for package lerna #### [9.0.2](https://redirect.github.com/lerna/lerna/compare/v9.0.1...v9.0.2) (2025-11-27) **Note:** Version bump only for package lerna #### [9.0.1](https://redirect.github.com/lerna/lerna/compare/v9.0.0...v9.0.1) (2025-11-14) ##### Bug Fixes - expand version range to include nx v22.x ([#​4242](https://redirect.github.com/lerna/lerna/issues/4242)) ([0cca286](https://redirect.github.com/lerna/lerna/commit/0cca28612be720d39f55cc278a9a4a93e112d1e1))
--- ### Configuration πŸ“… **Schedule**: (UTC) - Branch creation - "every weekday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ”• **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/apify/crawlee). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 1395 ++++++++++---------------------------------------- 2 files changed, 280 insertions(+), 1117 deletions(-) diff --git a/package.json b/package.json index 77f31f6f44ee..bc58a1b8f01a 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "got": "^13.0.0", "husky": "^9.0.11", "is-ci": "^4.0.0", - "lerna": "^9.0.7", + "lerna": "^10.0.0", "lint-staged": "^17.0.0", "nock": "^13.4.0", "playwright": "1.62.0", diff --git a/yarn.lock b/yarn.lock index 67ee293662f3..0e8d530df557 100644 --- a/yarn.lock +++ b/yarn.lock @@ -809,6 +809,32 @@ __metadata: languageName: node linkType: hard +"@conventional-changelog/git-client@npm:^3.1.0": + version: 3.1.0 + resolution: "@conventional-changelog/git-client@npm:3.1.0" + dependencies: + "@simple-libs/child-process-utils": "npm:^2.0.0" + "@simple-libs/stream-utils": "npm:^2.0.0" + semver: "npm:^7.5.2" + peerDependencies: + conventional-commits-filter: ^6.0.1 + conventional-commits-parser: ^7.0.1 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + checksum: 10c0/ab554a247f834457e2c3c8aec1311ddac3607645a13d4ca46ba66575718e4cb7448ec25f842cc12268fad3f4085525b28ed35fd80b028c7c5d553251b287a491 + languageName: node + linkType: hard + +"@conventional-changelog/template@npm:^1.2.1": + version: 1.2.1 + resolution: "@conventional-changelog/template@npm:1.2.1" + checksum: 10c0/5a391c5fa8f740d892aac8d5ee14e255625d6c1938e6c3c04c104129a58b5baff3c9c04592744ba0dbbbce7b421ca906af378f194b10d7803c4906b23028e0b4 + languageName: node + linkType: hard + "@crawlee/basic@npm:3.17.0, @crawlee/basic@workspace:packages/basic-crawler": version: 0.0.0-use.local resolution: "@crawlee/basic@workspace:packages/basic-crawler" @@ -1136,7 +1162,7 @@ __metadata: got: "npm:^13.0.0" husky: "npm:^9.0.11" is-ci: "npm:^4.0.0" - lerna: "npm:^9.0.7" + lerna: "npm:^10.0.0" lint-staged: "npm:^17.0.0" nock: "npm:^13.4.0" playwright: "npm:1.62.0" @@ -1705,13 +1731,6 @@ __metadata: 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" - checksum: 10c0/d9197757ecad2df18d29d3e1d1fe0716d458fd88b849c71cbec9e78239f911074c97e8d764dfd8ed890431c1137e52dd7a337207fd65be20ce0784f7860ae4d1 - languageName: node - linkType: hard - "@inquirer/ansi@npm:^1.0.0, @inquirer/ansi@npm:^1.0.2": version: 1.0.2 resolution: "@inquirer/ansi@npm:1.0.2" @@ -1989,29 +2008,6 @@ __metadata: languageName: node linkType: hard -"@jest/diff-sequences@npm:30.4.0": - version: 30.4.0 - resolution: "@jest/diff-sequences@npm:30.4.0" - checksum: 10c0/b4358b1b885098b905cb777f58788ddd45f90c4ebc3ce2c04fb1d4c9516f35ac2d9daef8263cd21c537bd7a52ab320f03e4ba9521677959ae20e3d405356b420 - languageName: node - linkType: hard - -"@jest/get-type@npm:30.1.0": - version: 30.1.0 - resolution: "@jest/get-type@npm:30.1.0" - checksum: 10c0/3e65fd5015f551c51ec68fca31bbd25b466be0e8ee8075d9610fa1c686ea1e70a942a0effc7b10f4ea9a338c24337e1ad97ff69d3ebacc4681b7e3e80d1b24ac - languageName: node - linkType: hard - -"@jest/schemas@npm:30.4.1": - version: 30.4.1 - resolution: "@jest/schemas@npm:30.4.1" - dependencies: - "@sinclair/typebox": "npm:^0.34.0" - checksum: 10c0/96f388ebfc1974457fcbde2ad36c40a0b549cba3f624fe8d9d6e5903a152dc75e4043f4ac9ac7668622f2ecb0f9a4dcb9a38edf3bc0d52b82045b2bb2b69b72a - languageName: node - linkType: hard - "@jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" @@ -2441,9 +2437,9 @@ __metadata: languageName: node linkType: hard -"@nx/devkit@npm:>=21.5.2 < 23.0.0": - version: 22.7.5 - resolution: "@nx/devkit@npm:22.7.5" +"@nx/devkit@npm:>=23.1.0 < 24.0.0": + version: 23.1.0 + resolution: "@nx/devkit@npm:23.1.0" dependencies: "@zkochan/js-yaml": "npm:0.0.7" ejs: "npm:5.0.1" @@ -2451,79 +2447,80 @@ __metadata: minimatch: "npm:10.2.5" semver: "npm:^7.6.3" tslib: "npm:^2.3.0" + yaml: "npm:^2.8.3" yargs-parser: "npm:21.1.1" peerDependencies: - nx: ">= 21 <= 23 || ^22.0.0-0" - checksum: 10c0/ece4144a2543e499f24f183fafa974afcc3293281d1651fe037b9be2543ea10422d6526506474c29dc25d7ce92477d69dfcd2bf5b2b5b6e73db18981e5f2fb38 + nx: ">= 22 <= 24 || ^23.0.0-0" + checksum: 10c0/128dc10fe60b38a2ec1fb50f5a7c924fc2c37ae4b065087f271bca394c2e7d791deafa0963724e9e6a303c6c6974f8cdb14c7038319900899e8056ba3c0c9d42 languageName: node linkType: hard -"@nx/nx-darwin-arm64@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-darwin-arm64@npm:22.7.5" +"@nx/nx-darwin-arm64@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-darwin-arm64@npm:23.1.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@nx/nx-darwin-x64@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-darwin-x64@npm:22.7.5" +"@nx/nx-darwin-x64@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-darwin-x64@npm:23.1.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@nx/nx-freebsd-x64@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-freebsd-x64@npm:22.7.5" +"@nx/nx-freebsd-x64@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-freebsd-x64@npm:23.1.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@nx/nx-linux-arm-gnueabihf@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:22.7.5" +"@nx/nx-linux-arm-gnueabihf@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:23.1.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@nx/nx-linux-arm64-gnu@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-linux-arm64-gnu@npm:22.7.5" +"@nx/nx-linux-arm64-gnu@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-linux-arm64-gnu@npm:23.1.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-arm64-musl@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-linux-arm64-musl@npm:22.7.5" +"@nx/nx-linux-arm64-musl@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-linux-arm64-musl@npm:23.1.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@nx/nx-linux-x64-gnu@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-linux-x64-gnu@npm:22.7.5" +"@nx/nx-linux-x64-gnu@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-linux-x64-gnu@npm:23.1.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-x64-musl@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-linux-x64-musl@npm:22.7.5" +"@nx/nx-linux-x64-musl@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-linux-x64-musl@npm:23.1.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@nx/nx-win32-arm64-msvc@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-win32-arm64-msvc@npm:22.7.5" +"@nx/nx-win32-arm64-msvc@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-win32-arm64-msvc@npm:23.1.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@nx/nx-win32-x64-msvc@npm:22.7.5": - version: 22.7.5 - resolution: "@nx/nx-win32-x64-msvc@npm:22.7.5" +"@nx/nx-win32-x64-msvc@npm:23.1.0": + version: 23.1.0 + resolution: "@nx/nx-win32-x64-msvc@npm:23.1.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3004,6 +3001,32 @@ __metadata: languageName: node linkType: hard +"@simple-libs/child-process-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "@simple-libs/child-process-utils@npm:2.0.0" + dependencies: + "@simple-libs/stream-utils": "npm:^2.0.0" + checksum: 10c0/8bd2ad6fe0eb7ed45e7f656b8fb2ea249673dad807ba69b950a91319747fd871c386010c766cbf8ac7242aeef76d4a03f83765c068ebb6267e2bf7e6a042e2f2 + languageName: node + linkType: hard + +"@simple-libs/hosted-git-info@npm:^2.0.0": + version: 2.0.0 + resolution: "@simple-libs/hosted-git-info@npm:2.0.0" + checksum: 10c0/b8c5a4a604b959cb7dedae534c1777aea5823c09221e4059a6d2d2d54366b32b9d4529efaa29bce92674dbac6ea189c6dfed402093f890809f1039f5925fcc49 + languageName: node + linkType: hard + +"@simple-libs/normalize-package-data@npm:^1.0.0": + version: 1.0.0 + resolution: "@simple-libs/normalize-package-data@npm:1.0.0" + dependencies: + "@simple-libs/hosted-git-info": "npm:^2.0.0" + semver: "npm:^7.8.5" + checksum: 10c0/5405a8ec3fcdd04c2b97153855ec82b4a92fa3d498079611ed2b7144a3b1eafa5acc910e5aeda05e617cf895983baf8d71f6aea7f2a6b0df6203443308e95f84 + languageName: node + linkType: hard + "@simple-libs/stream-utils@npm:^1.2.0": version: 1.2.0 resolution: "@simple-libs/stream-utils@npm:1.2.0" @@ -3011,10 +3034,10 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.34.0": - version: 0.34.49 - resolution: "@sinclair/typebox@npm:0.34.49" - checksum: 10c0/16b7d87f039a49b68c10bb4cdcae2ce5242b2472228851fd6483731616aba4ef977690aa517b230a8d20da8185bb416eb34e326f30568b3963c1cf26b05d1ad8 +"@simple-libs/stream-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "@simple-libs/stream-utils@npm:2.0.0" + checksum: 10c0/27fa4a9eef3d652a80b970bee18589a618f66884cd15845a0c57d7b73f005ea4d9acda7fe580851af229d07de749419715d06dcedf33bcb1a671e7a27106fdda languageName: node linkType: hard @@ -3375,13 +3398,6 @@ __metadata: languageName: node linkType: hard -"@types/minimist@npm:^1.2.0": - version: 1.2.5 - resolution: "@types/minimist@npm:1.2.5" - checksum: 10c0/3f791258d8e99a1d7d0ca2bda1ca6ea5a94e5e7b8fc6cde84dd79b0552da6fb68ade750f0e17718f6587783c24254bbca0357648dd59dc3812c150305cabdc46 - languageName: node - linkType: hard - "@types/node-fetch@npm:^2.6.4": version: 2.6.13 resolution: "@types/node-fetch@npm:2.6.13" @@ -3419,13 +3435,6 @@ __metadata: languageName: node linkType: hard -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.4 - resolution: "@types/normalize-package-data@npm:2.4.4" - checksum: 10c0/aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 - languageName: node - linkType: hard - "@types/proper-lockfile@npm:^4.1.2": version: 4.1.4 resolution: "@types/proper-lockfile@npm:4.1.4" @@ -3870,18 +3879,6 @@ __metadata: languageName: node linkType: hard -"JSONStream@npm:^1.3.5": - version: 1.3.5 - resolution: "JSONStream@npm:1.3.5" - dependencies: - jsonparse: "npm:^1.2.0" - through: "npm:>=2.2.7 <3" - bin: - JSONStream: ./bin.js - checksum: 10c0/0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 - languageName: node - linkType: hard - "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -3950,13 +3947,6 @@ __metadata: languageName: node linkType: hard -"add-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "add-stream@npm:1.0.0" - checksum: 10c0/985014a14e76ca4cb24e0fc58bb1556794cf38c5c8937de335a10584f50a371dc48e1c34a59391c7eb9c1fc908b4b86764df5d2756f701df6ba95d1ca2f63ddc - languageName: node - linkType: hard - "adm-zip@npm:^0.5.16": version: 0.5.18 resolution: "adm-zip@npm:0.5.18" @@ -3971,7 +3961,7 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6": +"agent-base@npm:6, agent-base@npm:6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: @@ -4129,7 +4119,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0": +"ansi-styles@npm:^5.0.0": version: 5.2.0 resolution: "ansi-styles@npm:5.2.0" checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df @@ -4192,13 +4182,6 @@ __metadata: languageName: node linkType: hard -"aproba@npm:2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 - languageName: node - linkType: hard - "argparse@npm:2.0.1, argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -4218,6 +4201,13 @@ __metadata: languageName: node linkType: hard +"argue-cli@npm:^3.1.0": + version: 3.1.0 + resolution: "argue-cli@npm:3.1.0" + checksum: 10c0/589f7f3cc6093264b7a6d5f2acb32fffadf5947c411e92e8c656cd90f178e24924bc405665cceb37510273debcf7611b89aa3dbbf9782474d4d8add912bc6325 + 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": version: 1.0.2 resolution: "array-buffer-byte-length@npm:1.0.2" @@ -4312,13 +4302,6 @@ __metadata: languageName: node linkType: hard -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 10c0/c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab - languageName: node - linkType: hard - "assert@npm:^1.4.1": version: 1.5.1 resolution: "assert@npm:1.5.1" @@ -4402,14 +4385,15 @@ __metadata: languageName: node linkType: hard -"axios@npm:1.16.0": - version: 1.16.0 - resolution: "axios@npm:1.16.0" +"axios@npm:1.16.1": + version: 1.16.1 + resolution: "axios@npm:1.16.1" dependencies: follow-redirects: "npm:^1.16.0" form-data: "npm:^4.0.5" + https-proxy-agent: "npm:^5.0.1" proxy-from-env: "npm:^2.1.0" - checksum: 10c0/1c91a5221b77b76072026b4cc95ecdf38f7c3e33e63423abec09a85e6e9a12279637dcc9ac2ba1fc333e0c447fb3b0f46d7965acb5d7cea02d188e9c6d425c0b + checksum: 10c0/2f77e37e6552bbff8a772d058fb09500198e9188c6b20dc799d82dbe12a8cb506f6eed4e4e62a9ba612a35cbab496faa26d68f9bff14a53af6d15c3e136391a7 languageName: node linkType: hard @@ -4653,13 +4637,6 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 - languageName: node - linkType: hard - "buffer@npm:5.7.1, buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -4687,13 +4664,6 @@ __metadata: languageName: node linkType: hard -"byte-size@npm:8.1.1": - version: 8.1.1 - resolution: "byte-size@npm:8.1.1" - checksum: 10c0/83170a16820fde48ebaef93bf6b2e86c5f72041f76e44eba1f3c738cceb699aeadf11088198944d5d7c6f970b465ab1e3dddc2e60bfb49a74374f3447a8db5b9 - languageName: node - linkType: hard - "bytes@npm:^3.1.2, bytes@npm:~3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -4802,17 +4772,6 @@ __metadata: languageName: node linkType: hard -"camelcase-keys@npm:^6.2.2": - version: 6.2.2 - resolution: "camelcase-keys@npm:6.2.2" - dependencies: - camelcase: "npm:^5.3.1" - map-obj: "npm:^4.0.0" - quick-lru: "npm:^4.0.1" - checksum: 10c0/bf1a28348c0f285c6c6f68fb98a9d088d3c0269fed0cdff3ea680d5a42df8a067b4de374e7a33e619eb9d5266a448fe66c2dd1f8e0c9209ebc348632882a3526 - languageName: node - linkType: hard - "camelcase@npm:5.0.0": version: 5.0.0 resolution: "camelcase@npm:5.0.0" @@ -4827,13 +4786,6 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - "camoufox-js@npm:^0.11.0": version: 0.11.1 resolution: "camoufox-js@npm:0.11.1" @@ -4883,16 +4835,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:4.1.0": - version: 4.1.0 - resolution: "chalk@npm:4.1.0" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/3787bd65ecd98ab3a1acc3b4f71d006268a675875e49ee6ea75fb54ba73d268b97544368358c18c42445e408e076ae8ad5cec8fbad36942a2c7ac654883dc61e - languageName: node - linkType: hard - "chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -5012,7 +4954,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.1.0, ci-info@npm:^3.2.0": +"ci-info@npm:^3.1.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a @@ -5109,17 +5051,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 - languageName: node - linkType: hard - "cliui@npm:^9.0.1": version: 9.0.1 resolution: "cliui@npm:9.0.1" @@ -5184,15 +5115,6 @@ __metadata: languageName: node linkType: hard -"color-support@npm:1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 - languageName: node - linkType: hard - "colorette@npm:^2.0.7": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -5269,25 +5191,6 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "concat-stream@npm:2.0.0" - dependencies: - buffer-from: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.0.2" - typedarray: "npm:^0.0.6" - checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a - languageName: node - linkType: hard - -"console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 - languageName: node - linkType: hard - "console-table-printer@npm:^2.12.1": version: 2.16.1 resolution: "console-table-printer@npm:2.16.1" @@ -5327,12 +5230,12 @@ __metadata: languageName: node linkType: hard -"conventional-changelog-angular@npm:7.0.0": - version: 7.0.0 - resolution: "conventional-changelog-angular@npm:7.0.0" +"conventional-changelog-angular@npm:9.2.1": + version: 9.2.1 + resolution: "conventional-changelog-angular@npm:9.2.1" dependencies: - compare-func: "npm:^2.0.0" - checksum: 10c0/90e73e25e224059b02951b6703b5f8742dc2a82c1fea62163978e6735fd3ab04350897a8fc6f443ec6b672d6b66e28a0820e833e544a0101f38879e5e6289b7e + "@conventional-changelog/template": "npm:^1.2.1" + checksum: 10c0/f9479e4d0c838f0b86bae26f6bce2a3a8957ad99b4627e4a2cca89174e2c2e0a306036d205809e1688c9c7a418d2f7c7d1cc32ef88f1396b7d744064571f52e9 languageName: node linkType: hard @@ -5354,70 +5257,62 @@ __metadata: languageName: node linkType: hard -"conventional-changelog-core@npm:5.0.1": - version: 5.0.1 - resolution: "conventional-changelog-core@npm:5.0.1" - dependencies: - add-stream: "npm:^1.0.0" - conventional-changelog-writer: "npm:^6.0.0" - conventional-commits-parser: "npm:^4.0.0" - dateformat: "npm:^3.0.3" - get-pkg-repo: "npm:^4.2.1" - git-raw-commits: "npm:^3.0.0" - git-remote-origin-url: "npm:^2.0.0" - git-semver-tags: "npm:^5.0.0" - normalize-package-data: "npm:^3.0.3" - read-pkg: "npm:^3.0.0" - read-pkg-up: "npm:^3.0.0" - checksum: 10c0/c026da415ea58346c167e58f8dd717592e92afc897aa604189a6d69f48b6943e7a656b2c83433810feea32dda117b0914a7f5860ed338a21f6ee9b0f56788b37 +"conventional-changelog-preset-loader@npm:^6.0.1": + version: 6.0.1 + resolution: "conventional-changelog-preset-loader@npm:6.0.1" + checksum: 10c0/71e15c91a831f2220155960abedfa04379f0f80dc29427ef977a7ecab637d926759023fc3f1973a1a2077fd05aa82d464751870b100e8e71977d4490c6cd1a93 languageName: node linkType: hard -"conventional-changelog-preset-loader@npm:^3.0.0": - version: 3.0.0 - resolution: "conventional-changelog-preset-loader@npm:3.0.0" - checksum: 10c0/5de23c4aa8b8526c3542fd5abe9758d56eed79821f32cc16d1fdf480cecc44855edbe4680113f229509dcaf4b97cc41e786ac8e3b0822b44fd9d0b98542ed0e0 +"conventional-changelog-writer@npm:^9.2.0": + version: 9.2.0 + resolution: "conventional-changelog-writer@npm:9.2.0" + dependencies: + "@conventional-changelog/template": "npm:^1.2.1" + "@simple-libs/stream-utils": "npm:^2.0.0" + argue-cli: "npm:^3.1.0" + conventional-commits-filter: "npm:^6.0.1" + semver: "npm:^7.5.2" + bin: + conventional-changelog-writer: ./dist/cli/index.js + checksum: 10c0/27f32aae0e545b4dd566eab039afb33e72b7015e6dcbff4cef89bffd339b4b7672abdba826f99ad50582f871f08139fd693d951d6ca8691db93941d38406f4f7 languageName: node linkType: hard -"conventional-changelog-writer@npm:^6.0.0": - version: 6.0.1 - resolution: "conventional-changelog-writer@npm:6.0.1" - dependencies: - conventional-commits-filter: "npm:^3.0.0" - dateformat: "npm:^3.0.3" - handlebars: "npm:^4.7.7" - json-stringify-safe: "npm:^5.0.1" - meow: "npm:^8.1.2" - semver: "npm:^7.0.0" - split: "npm:^1.0.1" +"conventional-changelog@npm:8.1.0": + version: 8.1.0 + resolution: "conventional-changelog@npm:8.1.0" + dependencies: + "@conventional-changelog/git-client": "npm:^3.1.0" + "@simple-libs/hosted-git-info": "npm:^2.0.0" + "@simple-libs/normalize-package-data": "npm:^1.0.0" + argue-cli: "npm:^3.1.0" + conventional-changelog-preset-loader: "npm:^6.0.1" + conventional-changelog-writer: "npm:^9.2.0" + conventional-commits-parser: "npm:^7.1.0" + fd-package-json: "npm:^2.0.0" bin: - conventional-changelog-writer: cli.js - checksum: 10c0/50790b0d92e06c5ab1c02cc4eb2ecd74575244d31cfacea1885d7c8afeae1bc7bbc169140fe062f2438b9952400762240b796e59521c0246278859296b323338 + conventional-changelog: ./dist/cli/index.js + checksum: 10c0/f9bedd4fc8a91c3092abde678ac672dec85481ba68a83eada0b34550b91a06c1e9e80b0ae27381d010bed2aa1c38933468ccc3be08e249fae1d9c0fe54660514 languageName: node linkType: hard -"conventional-commits-filter@npm:^3.0.0": - version: 3.0.0 - resolution: "conventional-commits-filter@npm:3.0.0" - dependencies: - lodash.ismatch: "npm:^4.4.0" - modify-values: "npm:^1.0.1" - checksum: 10c0/9d43cf9029bf39b70b394c551846a57b6f0473028ba5628c38bd447672655cc27bb80ba502d9a7e41335f63ad62b754cb26579f3d4bae7398dfc092acbb32578 +"conventional-commits-filter@npm:6.0.1, conventional-commits-filter@npm:^6.0.1": + version: 6.0.1 + resolution: "conventional-commits-filter@npm:6.0.1" + checksum: 10c0/afd7bd4dea9d5337e2f69ef868d77f7ff9293c5fa951513d5be483fd347a8810d982c6a93ac6f7a8785a8e38ef451dfc52fd311e9956a624820461daec6d6f5a languageName: node linkType: hard -"conventional-commits-parser@npm:^4.0.0": - version: 4.0.0 - resolution: "conventional-commits-parser@npm:4.0.0" +"conventional-commits-parser@npm:7.1.0": + version: 7.1.0 + resolution: "conventional-commits-parser@npm:7.1.0" dependencies: - JSONStream: "npm:^1.3.5" - is-text-path: "npm:^1.0.1" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" + "@simple-libs/stream-utils": "npm:^2.0.0" + argue-cli: "npm:^3.1.0" bin: - conventional-commits-parser: cli.js - checksum: 10c0/12e390cc80ad8a825c5775a329b95e11cf47a6df7b8a3875d375e28b8cb27c4f32955842ea73e4e357cff9757a6be99fdffe4fda87a23e9d8e73f983425537a0 + conventional-commits-parser: ./dist/cli/index.js + checksum: 10c0/7056dbe22c844561675dc08b9a3062da07d56e93fa4360fa1cb72dc5df5811b165cc5b2a317a6e05803cc3399ddcb641d701ed456443cffb36c407b2a17d1f97 languageName: node linkType: hard @@ -5433,20 +5328,30 @@ __metadata: languageName: node linkType: hard -"conventional-recommended-bump@npm:7.0.1": - version: 7.0.1 - resolution: "conventional-recommended-bump@npm:7.0.1" - dependencies: - concat-stream: "npm:^2.0.0" - conventional-changelog-preset-loader: "npm:^3.0.0" - conventional-commits-filter: "npm:^3.0.0" - conventional-commits-parser: "npm:^4.0.0" - git-raw-commits: "npm:^3.0.0" - git-semver-tags: "npm:^5.0.0" - meow: "npm:^8.1.2" +"conventional-commits-parser@npm:^7.1.0": + version: 7.1.1 + resolution: "conventional-commits-parser@npm:7.1.1" + dependencies: + "@simple-libs/stream-utils": "npm:^2.0.0" + argue-cli: "npm:^3.1.0" + bin: + conventional-commits-parser: ./dist/cli/index.js + checksum: 10c0/23248451ac02dc50867134d0128f785b50fb8dcc89c54eb72428661b95d936ccfe634070bb0e61ed465decf6e29cb69904a04d26183bb2808bd468984c7b8312 + languageName: node + linkType: hard + +"conventional-recommended-bump@npm:12.1.0": + version: 12.1.0 + resolution: "conventional-recommended-bump@npm:12.1.0" + dependencies: + "@conventional-changelog/git-client": "npm:^3.1.0" + argue-cli: "npm:^3.1.0" + conventional-changelog-preset-loader: "npm:^6.0.1" + conventional-commits-filter: "npm:^6.0.1" + conventional-commits-parser: "npm:^7.1.0" bin: - conventional-recommended-bump: cli.js - checksum: 10c0/ff751a256ddfbec62efd5a32de059b01659e945073793c6766143a8242864fd8099804a90bbf1e6a61928ade3d12292d6f66f721a113630de392d54eb7f0b0c3 + conventional-recommended-bump: ./dist/cli/index.js + checksum: 10c0/1d559ac3054c26a1dba7097eb4b3779ce159f71cc9098c627ff934c2e2c91e52731fb343928812e5bab390353ecd82ac26d2ab18c6064be4625f6ac5b00aa5de languageName: node linkType: hard @@ -5478,13 +5383,6 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 - languageName: node - linkType: hard - "cors@npm:^2.8.5": version: 2.8.6 resolution: "cors@npm:2.8.6" @@ -5654,13 +5552,6 @@ __metadata: languageName: node linkType: hard -"dargs@npm:^7.0.0": - version: 7.0.0 - resolution: "dargs@npm:7.0.0" - checksum: 10c0/ec7f6a8315a8fa2f8b12d39207615bdf62b4d01f631b96fbe536c8ad5469ab9ed710d55811e564d0d5c1d548fc8cb6cc70bf0939f2415790159f5a75e0f96c92 - languageName: node - linkType: hard - "data-uri-to-buffer@npm:^4.0.0": version: 4.0.1 resolution: "data-uri-to-buffer@npm:4.0.1" @@ -5718,13 +5609,6 @@ __metadata: languageName: node linkType: hard -"dateformat@npm:^3.0.3": - version: 3.0.3 - resolution: "dateformat@npm:3.0.3" - checksum: 10c0/2effb8bef52ff912f87a05e4adbeacff46353e91313ad1ea9ed31412db26849f5a0fcc7e3ce36dbfb84fc6c881a986d5694f84838ad0da7000d5150693e78678 - languageName: node - linkType: hard - "dateformat@npm:^4.6.3": version: 4.6.3 resolution: "dateformat@npm:4.6.3" @@ -5741,7 +5625,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.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.4.3, debug@npm:^4.1.0, 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": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -5762,17 +5646,7 @@ __metadata: languageName: node linkType: hard -"decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: "npm:^1.1.0" - map-obj: "npm:^1.0.0" - checksum: 10c0/4ca385933127437658338c65fb9aead5f21b28d3dd3ccd7956eb29aab0953b5d3c047fbc207111672220c71ecf7a4d34f36c92851b7bbde6fca1a02c541bdd7d - languageName: node - linkType: hard - -"decamelize@npm:1.2.0, decamelize@npm:^1.1.0": +"decamelize@npm:1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 @@ -7011,6 +6885,15 @@ __metadata: languageName: node linkType: hard +"fd-package-json@npm:^2.0.0": + version: 2.0.0 + resolution: "fd-package-json@npm:2.0.0" + dependencies: + walk-up-path: "npm:^4.0.0" + checksum: 10c0/a0a48745257bc09c939486608dad9f2ced238f0c64266222cc881618ed4c8f6aa0ccfe45a1e6d4f9ce828509e8d617cec60e2a114851bebb1ff4886dc5ed5112 + languageName: node + linkType: hard + "fdir@npm:^6.4.3, fdir@npm:^6.5.0": version: 6.5.0 resolution: "fdir@npm:6.5.0" @@ -7129,16 +7012,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^2.0.0": - version: 2.1.0 - resolution: "find-up@npm:2.1.0" - dependencies: - locate-path: "npm:^2.0.0" - checksum: 10c0/c080875c9fe28eb1962f35cbe83c683796a0321899f1eed31a37577800055539815de13d53495049697d3ba313013344f843bb9401dd337a1b832be5edfc6840 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": +"find-up@npm:^4.0.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" dependencies: @@ -7522,20 +7396,6 @@ __metadata: languageName: node linkType: hard -"get-pkg-repo@npm:^4.2.1": - version: 4.2.1 - resolution: "get-pkg-repo@npm:4.2.1" - dependencies: - "@hutson/parse-repository-url": "npm:^3.0.0" - hosted-git-info: "npm:^4.0.0" - through2: "npm:^2.0.0" - yargs: "npm:^16.2.0" - bin: - get-pkg-repo: src/cli.js - checksum: 10c0/1338d2e048a594da4a34e7dd69d909376d72784f5ba50963a242b4b35db77533786f618b3f6a9effdee2af20af4917a3b7cf12533b4575d7f9c163886be1fb62 - languageName: node - linkType: hard - "get-proto@npm:1.0.1, get-proto@npm:^1.0.1": version: 1.0.1 resolution: "get-proto@npm:1.0.1" @@ -7546,13 +7406,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:6.0.0": - version: 6.0.0 - resolution: "get-stream@npm:6.0.0" - checksum: 10c0/7cd835cb9180041e7be2cc3de236e5db9f2144515921aeb60ae78d3a46f9944439d654c2aae5b0191e41eb6e2500f0237494a2e6c0790367183f788d1c9f6dd6 - languageName: node - linkType: hard - "get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -7592,19 +7445,6 @@ __metadata: languageName: node linkType: hard -"git-raw-commits@npm:^3.0.0": - version: 3.0.0 - resolution: "git-raw-commits@npm:3.0.0" - dependencies: - dargs: "npm:^7.0.0" - meow: "npm:^8.1.2" - split2: "npm:^3.2.2" - bin: - git-raw-commits: cli.js - checksum: 10c0/2a5db2e4b5b1ef7b6ecbdc175e559920a5400cbdb8d36f130aaef3588bfd74d8650b354a51ff89e0929eadbb265a00078a6291ff26248a525f0b2f079b001bf6 - languageName: node - linkType: hard - "git-raw-commits@npm:^5.0.0": version: 5.0.1 resolution: "git-raw-commits@npm:5.0.1" @@ -7617,28 +7457,6 @@ __metadata: languageName: node linkType: hard -"git-remote-origin-url@npm:^2.0.0": - version: 2.0.0 - resolution: "git-remote-origin-url@npm:2.0.0" - dependencies: - gitconfiglocal: "npm:^1.0.0" - pify: "npm:^2.3.0" - checksum: 10c0/3a846ce98ed36b2d0b801e8ec1ab299a236cfc6fa264bfdf9f42301abfdfd8715c946507fd83a10b9db449eb609ac6f8a2a341daf52e3af0000367487f486355 - languageName: node - linkType: hard - -"git-semver-tags@npm:^5.0.0": - version: 5.0.1 - resolution: "git-semver-tags@npm:5.0.1" - dependencies: - meow: "npm:^8.1.2" - semver: "npm:^7.0.0" - bin: - git-semver-tags: cli.js - checksum: 10c0/7cacba2f4ac19c0ccb8e6bb7301409376e5a2cc178692667afff453e6fe81f79b5f3f5040343e2be127a2f34977528d354de2aa32430917e90b64884debd3102 - languageName: node - linkType: hard - "git-up@npm:^7.0.0": version: 7.0.0 resolution: "git-up@npm:7.0.0" @@ -7658,15 +7476,6 @@ __metadata: languageName: node linkType: hard -"gitconfiglocal@npm:^1.0.0": - version: 1.0.0 - resolution: "gitconfiglocal@npm:1.0.0" - dependencies: - ini: "npm:^1.3.2" - checksum: 10c0/cfcb16344834113199f209f2758ced778dc30e075ddb49b5dde659b4dd2deadee824db0a1b77e1303cb594d9e8b2240da18c67705f657aa76affb444aa349005 - languageName: node - linkType: hard - "github-from-package@npm:0.0.0": version: 0.0.0 resolution: "github-from-package@npm:0.0.0" @@ -7674,15 +7483,6 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -7692,6 +7492,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + "glob@npm:^11.0.3": version: 11.1.0 resolution: "glob@npm:11.1.0" @@ -7862,7 +7671,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -7876,7 +7685,7 @@ __metadata: languageName: node linkType: hard -"handlebars@npm:^4.7.7": +"handlebars@npm:4.7.9": version: 4.7.9 resolution: "handlebars@npm:4.7.9" dependencies: @@ -7894,13 +7703,6 @@ __metadata: languageName: node linkType: hard -"hard-rejection@npm:^2.1.0": - version: 2.1.0 - resolution: "hard-rejection@npm:2.1.0" - checksum: 10c0/febc3343a1ad575aedcc112580835b44a89a89e01f400b4eda6e8110869edfdab0b00cd1bd4c3bfec9475a57e79e0b355aecd5be46454b6a62b9a359af60e564 - languageName: node - linkType: hard - "has-ansi@npm:^2.0.0": version: 2.0.0 resolution: "has-ansi@npm:2.0.0" @@ -7965,23 +7767,7 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c - languageName: node - linkType: hard - -"hasown@npm:2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"hasown@npm:^2.0.2, hasown@npm:^2.0.3, hasown@npm:^2.0.4": +"hasown@npm:2.0.4, hasown@npm:^2.0.2, hasown@npm:^2.0.3, hasown@npm:^2.0.4": version: 2.0.4 resolution: "hasown@npm:2.0.4" dependencies: @@ -8016,22 +7802,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 - languageName: node - linkType: hard - -"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" - dependencies: - lru-cache: "npm:^6.0.0" - checksum: 10c0/150fbcb001600336d17fdbae803264abed013548eea7946c2264c49ebe2ebd8c4441ba71dd23dd8e18c65de79d637f98b22d4760ba5fb2e0b15d62543d0fff07 - languageName: node - linkType: hard - "hosted-git-info@npm:^8.0.0": version: 8.1.0 resolution: "hosted-git-info@npm:8.1.0" @@ -8149,7 +7919,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^5.0.1": +"https-proxy-agent@npm:5.0.1, https-proxy-agent@npm:^5.0.1": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: @@ -8402,7 +8172,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -8416,7 +8186,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.2, ini@npm:^1.3.8, ini@npm:~1.3.0": +"ini@npm:^1.3.8, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a @@ -8607,17 +8377,6 @@ __metadata: languageName: node linkType: hard -"is-ci@npm:3.0.1": - version: 3.0.1 - resolution: "is-ci@npm:3.0.1" - dependencies: - ci-info: "npm:^3.2.0" - bin: - is-ci: bin.js - checksum: 10c0/0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 - languageName: node - linkType: hard - "is-ci@npm:^4.0.0": version: 4.1.0 resolution: "is-ci@npm:4.1.0" @@ -8629,7 +8388,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.16.1, is-core-module@npm:^2.16.2, is-core-module@npm:^2.5.0": +"is-core-module@npm:^2.16.1, is-core-module@npm:^2.16.2": version: 2.16.2 resolution: "is-core-module@npm:2.16.2" dependencies: @@ -8776,13 +8535,6 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 10c0/daaee1805add26f781b413fdf192fc91d52409583be30ace35c82607d440da63cc4cac0ac55136716688d6c0a2c6ef3edb2254fecbd1fe06056d6bd15975ee8c - languageName: node - linkType: hard - "is-plain-obj@npm:^4.1.0": version: 4.1.0 resolution: "is-plain-obj@npm:4.1.0" @@ -8883,15 +8635,6 @@ __metadata: languageName: node linkType: hard -"is-text-path@npm:^1.0.1": - version: 1.0.1 - resolution: "is-text-path@npm:1.0.1" - dependencies: - text-extensions: "npm:^1.0.0" - checksum: 10c0/61c8650c29548febb6bf69e9541fc11abbbb087a0568df7bc471ba264e95fb254def4e610631cbab4ddb0a1a07949d06416f4ebeaf37875023fb184cdb87ee84 - 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" @@ -8959,14 +8702,7 @@ __metadata: languageName: node linkType: hard -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": +"isexe@npm:2.0.0, isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d @@ -9024,18 +8760,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:>=30.0.0 < 31": - version: 30.4.1 - resolution: "jest-diff@npm:30.4.1" - dependencies: - "@jest/diff-sequences": "npm:30.4.0" - "@jest/get-type": "npm:30.1.0" - chalk: "npm:^4.1.2" - pretty-format: "npm:30.4.1" - checksum: 10c0/787e11f0ea27e94815479d6c5415e4173da1e74bede34c1515b8515fc9d1fe053e2ad25a3c31f9998a7292c186a0e4d395ed82e0e149d57d7708ee6759b442e9 - languageName: node - linkType: hard - "jiti@npm:2.6.1": version: 2.6.1 resolution: "jiti@npm:2.6.1" @@ -9149,13 +8873,6 @@ __metadata: languageName: node linkType: hard -"json-parse-better-errors@npm:^1.0.1": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb - languageName: node - linkType: hard - "json-parse-even-better-errors@npm:^2.3.0": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -9246,10 +8963,10 @@ __metadata: languageName: node linkType: hard -"jsonc-parser@npm:3.2.0": - version: 3.2.0 - resolution: "jsonc-parser@npm:3.2.0" - checksum: 10c0/5a12d4d04dad381852476872a29dcee03a57439574e4181d91dca71904fcdcc5e8e4706c0a68a2c61ad9810e1e1c5806b5100d52d3e727b78f5cdc595401045b +"jsonc-parser@npm:3.3.1": + version: 3.3.1 + resolution: "jsonc-parser@npm:3.3.1" + checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 languageName: node linkType: hard @@ -9266,7 +8983,7 @@ __metadata: languageName: node linkType: hard -"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": +"jsonparse@npm:^1.3.1": version: 1.3.1 resolution: "jsonparse@npm:1.3.1" checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 @@ -9326,13 +9043,6 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^6.0.3": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 - languageName: node - linkType: hard - "langsmith@npm:^0.3.67": version: 0.3.87 resolution: "langsmith@npm:0.3.87" @@ -9377,43 +9087,36 @@ __metadata: languageName: node linkType: hard -"lerna@npm:^9.0.7": - version: 9.0.7 - resolution: "lerna@npm:9.0.7" +"lerna@npm:^10.0.0": + version: 10.0.0 + resolution: "lerna@npm:10.0.0" dependencies: "@npmcli/arborist": "npm:9.1.6" "@npmcli/package-json": "npm:7.0.2" "@npmcli/run-script": "npm:10.0.3" - "@nx/devkit": "npm:>=21.5.2 < 23.0.0" + "@nx/devkit": "npm:>=23.1.0 < 24.0.0" "@octokit/plugin-enterprise-rest": "npm:6.0.1" "@octokit/rest": "npm:20.1.2" - aproba: "npm:2.0.0" - byte-size: "npm:8.1.1" - chalk: "npm:4.1.0" ci-info: "npm:4.3.1" cmd-shim: "npm:6.0.3" - color-support: "npm:1.1.3" columnify: "npm:1.6.0" - console-control-strings: "npm:^1.1.0" - conventional-changelog-angular: "npm:7.0.0" - conventional-changelog-core: "npm:5.0.1" - conventional-recommended-bump: "npm:7.0.1" + conventional-changelog: "npm:8.1.0" + conventional-changelog-angular: "npm:9.2.1" + conventional-commits-filter: "npm:6.0.1" + conventional-commits-parser: "npm:7.1.0" + conventional-recommended-bump: "npm:12.1.0" cosmiconfig: "npm:9.0.0" dedent: "npm:1.5.3" envinfo: "npm:7.13.0" execa: "npm:5.0.0" fs-extra: "npm:^11.2.0" - get-stream: "npm:6.0.0" git-url-parse: "npm:14.0.0" - glob-parent: "npm:6.0.2" - has-unicode: "npm:2.0.1" + handlebars: "npm:4.7.9" import-local: "npm:3.1.0" ini: "npm:^1.3.8" init-package-json: "npm:8.2.2" inquirer: "npm:12.9.6" - is-ci: "npm:3.0.1" - jest-diff: "npm:>=30.0.0 < 31" - js-yaml: "npm:4.1.1" + js-yaml: "npm:4.3.0" libnpmaccess: "npm:10.0.3" libnpmpublish: "npm:11.1.2" load-json-file: "npm:6.2.0" @@ -9422,34 +9125,24 @@ __metadata: npm-package-arg: "npm:13.0.1" npm-packlist: "npm:10.0.3" npm-registry-fetch: "npm:19.1.0" - nx: "npm:>=21.5.3 < 23.0.0" + nx: "npm:>=23.1.0 < 24.0.0" p-map: "npm:4.0.0" - p-map-series: "npm:2.1.0" - p-pipe: "npm:3.1.0" p-queue: "npm:6.6.2" - p-reduce: "npm:2.1.0" - p-waterfall: "npm:2.1.1" pacote: "npm:21.0.1" read-cmd-shim: "npm:4.0.0" semver: "npm:7.7.2" signal-exit: "npm:3.0.7" - slash: "npm:3.0.0" ssri: "npm:12.0.0" string-width: "npm:^4.2.3" - tar: "npm:7.5.11" - through: "npm:2.3.8" + tar: "npm:7.5.20" tinyglobby: "npm:0.2.12" - typescript: "npm:>=3 < 6" - upath: "npm:2.0.1" validate-npm-package-license: "npm:3.0.4" validate-npm-package-name: "npm:6.0.2" - wide-align: "npm:1.1.5" write-file-atomic: "npm:5.0.1" yargs: "npm:17.7.2" - yargs-parser: "npm:21.1.1" bin: lerna: dist/cli.js - checksum: 10c0/60e50239790ef3230ee3bfbd084553d6ec164991df5a37443cc9be680a358ed1e61e3334ec403d7a3fc4a5b6d6913e850e52df27d9b04d34cf1501b7eeedcb8a + checksum: 10c0/49e09f922df4eda5860cde0035873e6393960e828f81aabf14fe94538760ece86908233d1d0a85f0570c70140949dca8c89989c3093ef6c8f05b10e1eaf4dec4 languageName: node linkType: hard @@ -9708,28 +9401,6 @@ __metadata: languageName: node linkType: hard -"load-json-file@npm:^4.0.0": - version: 4.0.0 - resolution: "load-json-file@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.2" - parse-json: "npm:^4.0.0" - pify: "npm:^3.0.0" - strip-bom: "npm:^3.0.0" - checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 - languageName: node - linkType: hard - -"locate-path@npm:^2.0.0": - version: 2.0.0 - resolution: "locate-path@npm:2.0.0" - dependencies: - p-locate: "npm:^2.0.0" - path-exists: "npm:^3.0.0" - checksum: 10c0/24efa0e589be6aa3c469b502f795126b26ab97afa378846cb508174211515633b770aa0ba610cab113caedab8d2a4902b061a08aaed5297c12ab6f5be4df0133 - languageName: node - linkType: hard - "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -9755,13 +9426,6 @@ __metadata: languageName: node linkType: hard -"lodash.ismatch@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.ismatch@npm:4.4.0" - checksum: 10c0/8f96a5dc4b8d3fc5a033dcb259d0c3148a1044fa4d02b4a0e8dce0fa1f2ef3ec4ac131e20b5cb2c985a4e9bcb1c37c0aa5af2cef70094959389617347b8fc645 - languageName: node - linkType: hard - "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -9776,7 +9440,7 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:4.1.0, log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": +"log-symbols@npm:4.1.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -9827,15 +9491,6 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 - languageName: node - linkType: hard - "lru-cache@npm:^7.14.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" @@ -9911,20 +9566,6 @@ __metadata: languageName: node linkType: hard -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: 10c0/ccca88395e7d38671ed9f5652ecf471ecd546924be2fb900836b9da35e068a96687d96a5f93dcdfa94d9a27d649d2f10a84595590f89a347fb4dda47629dcc52 - languageName: node - linkType: hard - -"map-obj@npm:^4.0.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: 10c0/1c19e1c88513c8abdab25c316367154c6a0a6a0f77e3e8c391bb7c0e093aefed293f539d026dc013d86219e5e4c25f23b0003ea588be2101ccd757bacc12d43b - languageName: node - linkType: hard - "map-stream@npm:~0.1.0": version: 0.1.0 resolution: "map-stream@npm:0.1.0" @@ -9977,25 +9618,6 @@ __metadata: languageName: node linkType: hard -"meow@npm:^8.1.2": - version: 8.1.2 - resolution: "meow@npm:8.1.2" - dependencies: - "@types/minimist": "npm:^1.2.0" - camelcase-keys: "npm:^6.2.2" - decamelize-keys: "npm:^1.1.0" - hard-rejection: "npm:^2.1.0" - minimist-options: "npm:4.1.0" - normalize-package-data: "npm:^3.0.0" - read-pkg-up: "npm:^7.0.1" - redent: "npm:^3.0.0" - trim-newlines: "npm:^3.0.0" - type-fest: "npm:^0.18.0" - yargs-parser: "npm:^20.2.3" - checksum: 10c0/9a8d90e616f783650728a90f4ea1e5f763c1c5260369e6596b52430f877f4af8ecbaa8c9d952c93bbefd6d5bda4caed6a96a20ba7d27b511d2971909b01922a2 - languageName: node - linkType: hard - "merge-descriptors@npm:1.0.3": version: 1.0.3 resolution: "merge-descriptors@npm:1.0.3" @@ -10110,13 +9732,6 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.0": - version: 1.0.1 - resolution: "min-indent@npm:1.0.1" - checksum: 10c0/7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c - languageName: node - linkType: hard - "minimatch@npm:10.2.5, minimatch@npm:^10.0.3, minimatch@npm:^10.1.1, minimatch@npm:^10.2.2": version: 10.2.5 resolution: "minimatch@npm:10.2.5" @@ -10153,17 +9768,6 @@ __metadata: languageName: node linkType: hard -"minimist-options@npm:4.1.0": - version: 4.1.0 - resolution: "minimist-options@npm:4.1.0" - dependencies: - arrify: "npm:^1.0.1" - is-plain-obj: "npm:^1.1.0" - kind-of: "npm:^6.0.3" - checksum: 10c0/7871f9cdd15d1e7374e5b013e2ceda3d327a06a8c7b38ae16d9ef941e07d985e952c589e57213f7aa90a8744c60aed9524c0d85e501f5478382d9181f2763f54 - languageName: node - linkType: hard - "minimist@npm:1.2.8, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -10347,13 +9951,6 @@ __metadata: languageName: node linkType: hard -"modify-values@npm:^1.0.1": - version: 1.0.1 - resolution: "modify-values@npm:1.0.1" - checksum: 10c0/6acb1b82aaf7a02f9f7b554b20cbfc159f223a79c66b0a257511c5933d50b85e12ea1220b0a90a2af6f80bc29ff784f929a52a51881867a93ae6a12ce87a729a - languageName: node - linkType: hard - "mri@npm:1.1.4": version: 1.1.4 resolution: "mri@npm:1.1.4" @@ -10620,30 +10217,6 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: "npm:^2.1.4" - resolve: "npm:^1.10.0" - semver: "npm:2 || 3 || 4 || 5" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 - languageName: node - linkType: hard - -"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.3": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" - dependencies: - hosted-git-info: "npm:^4.0.1" - is-core-module: "npm:^2.5.0" - semver: "npm:^7.3.4" - validate-npm-package-license: "npm:^3.0.1" - checksum: 10c0/e5d0f739ba2c465d41f77c9d950e291ea4af78f8816ddb91c5da62257c40b76d8c83278b0d08ffbcd0f187636ebddad20e181e924873916d03e6e5ea2ef026be - languageName: node - linkType: hard - "normalize-url@npm:^8.0.0, normalize-url@npm:^8.1.1": version: 8.1.1 resolution: "normalize-url@npm:8.1.1" @@ -10838,34 +10411,35 @@ __metadata: languageName: node linkType: hard -"nx@npm:>=21.5.3 < 23.0.0": - version: 22.7.5 - resolution: "nx@npm:22.7.5" +"nx@npm:>=23.1.0 < 24.0.0": + version: 23.1.0 + resolution: "nx@npm:23.1.0" dependencies: "@emnapi/core": "npm:1.4.5" "@emnapi/runtime": "npm:1.4.5" "@emnapi/wasi-threads": "npm:1.0.4" "@jest/diff-sequences": "npm:30.0.1" "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:22.7.5" - "@nx/nx-darwin-x64": "npm:22.7.5" - "@nx/nx-freebsd-x64": "npm:22.7.5" - "@nx/nx-linux-arm-gnueabihf": "npm:22.7.5" - "@nx/nx-linux-arm64-gnu": "npm:22.7.5" - "@nx/nx-linux-arm64-musl": "npm:22.7.5" - "@nx/nx-linux-x64-gnu": "npm:22.7.5" - "@nx/nx-linux-x64-musl": "npm:22.7.5" - "@nx/nx-win32-arm64-msvc": "npm:22.7.5" - "@nx/nx-win32-x64-msvc": "npm:22.7.5" + "@nx/nx-darwin-arm64": "npm:23.1.0" + "@nx/nx-darwin-x64": "npm:23.1.0" + "@nx/nx-freebsd-x64": "npm:23.1.0" + "@nx/nx-linux-arm-gnueabihf": "npm:23.1.0" + "@nx/nx-linux-arm64-gnu": "npm:23.1.0" + "@nx/nx-linux-arm64-musl": "npm:23.1.0" + "@nx/nx-linux-x64-gnu": "npm:23.1.0" + "@nx/nx-linux-x64-musl": "npm:23.1.0" + "@nx/nx-win32-arm64-msvc": "npm:23.1.0" + "@nx/nx-win32-x64-msvc": "npm:23.1.0" "@tybys/wasm-util": "npm:0.9.0" "@yarnpkg/lockfile": "npm:1.1.0" "@zkochan/js-yaml": "npm:0.0.7" + agent-base: "npm:6.0.2" ansi-colors: "npm:4.1.3" ansi-regex: "npm:5.0.1" ansi-styles: "npm:4.3.0" argparse: "npm:2.0.1" asynckit: "npm:0.4.0" - axios: "npm:1.16.0" + axios: "npm:1.16.1" balanced-match: "npm:4.0.3" base64-js: "npm:1.5.1" bl: "npm:4.1.0" @@ -10880,6 +10454,7 @@ __metadata: color-convert: "npm:2.0.1" color-name: "npm:1.1.4" combined-stream: "npm:1.0.8" + debug: "npm:4.4.3" defaults: "npm:1.0.4" define-lazy-prop: "npm:2.0.0" delayed-stream: "npm:1.0.0" @@ -10899,7 +10474,7 @@ __metadata: figures: "npm:3.2.0" flat: "npm:5.0.2" follow-redirects: "npm:1.16.0" - form-data: "npm:4.0.5" + form-data: "npm:4.0.6" fs-constants: "npm:1.0.0" function-bind: "npm:1.1.2" get-caller-file: "npm:2.0.5" @@ -10909,7 +10484,8 @@ __metadata: has-flag: "npm:4.0.0" has-symbols: "npm:1.1.0" has-tostringtag: "npm:1.0.2" - hasown: "npm:2.0.2" + hasown: "npm:2.0.4" + https-proxy-agent: "npm:5.0.1" ieee754: "npm:1.2.1" ignore: "npm:7.0.5" inherits: "npm:2.0.4" @@ -10918,8 +10494,9 @@ __metadata: is-interactive: "npm:1.0.0" is-unicode-supported: "npm:0.1.0" is-wsl: "npm:2.2.0" + isexe: "npm:2.0.0" json5: "npm:2.2.3" - jsonc-parser: "npm:3.2.0" + jsonc-parser: "npm:3.3.1" lines-and-columns: "npm:2.0.3" log-symbols: "npm:4.1.0" math-intrinsics: "npm:1.1.0" @@ -10928,11 +10505,12 @@ __metadata: mimic-fn: "npm:2.1.0" minimatch: "npm:10.2.5" minimist: "npm:1.2.8" + ms: "npm:2.1.3" npm-run-path: "npm:4.0.1" once: "npm:1.4.0" onetime: "npm:5.1.2" open: "npm:8.4.2" - ora: "npm:5.3.0" + ora: "npm:5.4.1" path-key: "npm:3.1.1" picocolors: "npm:1.1.1" proxy-from-env: "npm:2.1.0" @@ -10941,7 +10519,7 @@ __metadata: resolve.exports: "npm:2.0.3" restore-cursor: "npm:3.1.0" safe-buffer: "npm:5.2.1" - semver: "npm:7.7.4" + semver: "npm:7.8.4" signal-exit: "npm:3.0.7" smol-toml: "npm:1.6.1" string-width: "npm:4.2.3" @@ -10950,12 +10528,12 @@ __metadata: strip-bom: "npm:3.0.0" supports-color: "npm:7.2.0" tar-stream: "npm:2.2.0" - tmp: "npm:0.2.6" - tree-kill: "npm:1.2.2" + tmp: "npm:0.2.7" tsconfig-paths: "npm:4.2.0" tslib: "npm:2.8.1" util-deprecate: "npm:1.0.2" wcwidth: "npm:1.0.1" + which: "npm:3.0.1" wrap-ansi: "npm:7.0.0" wrappy: "npm:1.0.2" y18n: "npm:5.0.8" @@ -10994,7 +10572,7 @@ __metadata: bin: nx: ./dist/bin/nx.js nx-cloud: ./dist/bin/nx-cloud.js - checksum: 10c0/ee43b36dbb9d824187b7ce1fdf19c2e49d7dd984631d2cf2ead11b291428cffafff1296d30bf23f5b8e2ff3dda1680889c576b151c9479b6f82ec07155f0335c + checksum: 10c0/949716a5847d596bd4ec0f3a4af2ebb57cb94a5096e6611ed57678ea6f946e61c85990f80d7b870a948c7836ca226d7d086a7d6c8354838c3688fd9193485099 languageName: node linkType: hard @@ -11202,23 +10780,7 @@ __metadata: languageName: node linkType: hard -"ora@npm:5.3.0": - version: 5.3.0 - resolution: "ora@npm:5.3.0" - dependencies: - bl: "npm:^4.0.3" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - log-symbols: "npm:^4.0.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10c0/30d5f3218eb75b0a2028c5fb9aa88e83e38a2f1745ab56839abb06c3ba31bae35f768f4e72c4f9e04e2a66be6a898e9312e8cf85c9333e1e3613eabb8c7cdf57 - languageName: node - linkType: hard - -"ora@npm:^5.4.1": +"ora@npm:5.4.1, ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" dependencies: @@ -11293,15 +10855,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^1.1.0": - version: 1.3.0 - resolution: "p-limit@npm:1.3.0" - dependencies: - p-try: "npm:^1.0.0" - checksum: 10c0/5c1b1d53d180b2c7501efb04b7c817448e10efe1ba46f4783f8951994d5027e4cd88f36ad79af50546682594c4ebd11702ac4b9364c47f8074890e2acad0edee - languageName: node - linkType: hard - "p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" @@ -11320,15 +10873,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^2.0.0": - version: 2.0.0 - resolution: "p-locate@npm:2.0.0" - dependencies: - p-limit: "npm:^1.1.0" - checksum: 10c0/82da4be88fb02fd29175e66021610c881938d3cc97c813c71c1a605fac05617d57fd5d3b337494a6106c0edb2a37c860241430851411f1b265108cead34aee67 - languageName: node - linkType: hard - "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -11347,13 +10891,6 @@ __metadata: languageName: node linkType: hard -"p-map-series@npm:2.1.0": - version: 2.1.0 - resolution: "p-map-series@npm:2.1.0" - checksum: 10c0/302ca686a61c498b227fc45d4e2b2e5bfd20a03f4156a976d94c4ff7decf9cd5a815fa6846b43b37d587ffa8d4671ff2bd596fa83fe8b9113b5102da94940e2a - languageName: node - linkType: hard - "p-map@npm:4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -11370,13 +10907,6 @@ __metadata: languageName: node linkType: hard -"p-pipe@npm:3.1.0": - version: 3.1.0 - resolution: "p-pipe@npm:3.1.0" - checksum: 10c0/9b3076828ea7e9469c0f92c78fa44096726208d547efdb2d6148cbe135d1a70bd449de5be13e234dd669d9515343bd68527b316bf9d5639cee639e2fdde20aaf - languageName: node - linkType: hard - "p-queue@npm:6.6.2, p-queue@npm:^6.6.2": version: 6.6.2 resolution: "p-queue@npm:6.6.2" @@ -11387,13 +10917,6 @@ __metadata: languageName: node linkType: hard -"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0": - version: 2.1.0 - resolution: "p-reduce@npm:2.1.0" - checksum: 10c0/27b8ff0fb044995507a06cd6357dffba0f2b98862864745972562a21885d7906ce5c794036d2aaa63ef6303158e41e19aed9f19651dfdafb38548ecec7d0de15 - languageName: node - linkType: hard - "p-retry@npm:4, p-retry@npm:^4.6.2": version: 4.6.2 resolution: "p-retry@npm:4.6.2" @@ -11413,13 +10936,6 @@ __metadata: languageName: node linkType: hard -"p-try@npm:^1.0.0": - version: 1.0.0 - resolution: "p-try@npm:1.0.0" - checksum: 10c0/757ba31de5819502b80c447826fac8be5f16d3cb4fbf9bc8bc4971dba0682e84ac33e4b24176ca7058c69e29f64f34d8d9e9b08e873b7b7bb0aa89d620fa224a - languageName: node - linkType: hard - "p-try@npm:^2.0.0": version: 2.2.0 resolution: "p-try@npm:2.2.0" @@ -11427,15 +10943,6 @@ __metadata: languageName: node linkType: hard -"p-waterfall@npm:2.1.1": - version: 2.1.1 - resolution: "p-waterfall@npm:2.1.1" - dependencies: - p-reduce: "npm:^2.0.0" - checksum: 10c0/ccae582b75a3597018a375f8eac32b93e8bfb9fc22a8e5037787ef4ebf5958d7465c2d3cbe26443971fbbfda2bcb7b645f694b91f928fc9a71fa5031e6e33f85 - languageName: node - linkType: hard - "pac-proxy-agent@npm:^7.1.0": version: 7.2.0 resolution: "pac-proxy-agent@npm:7.2.0" @@ -11550,16 +11057,6 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-json@npm:4.0.0" - dependencies: - error-ex: "npm:^1.3.1" - json-parse-better-errors: "npm:^1.0.1" - checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 - languageName: node - linkType: hard - "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -11625,13 +11122,6 @@ __metadata: languageName: node linkType: hard -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 - languageName: node - linkType: hard - "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -11677,15 +11167,6 @@ __metadata: languageName: node linkType: hard -"path-type@npm:^3.0.0": - version: 3.0.0 - resolution: "path-type@npm:3.0.0" - dependencies: - pify: "npm:^3.0.0" - checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 - languageName: node - linkType: hard - "path-type@npm:^6.0.0": version: 6.0.0 resolution: "path-type@npm:6.0.0" @@ -11730,20 +11211,6 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 - languageName: node - linkType: hard - "pino-abstract-transport@npm:^2.0.0": version: 2.0.0 resolution: "pino-abstract-transport@npm:2.0.0" @@ -11945,18 +11412,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:30.4.1": - version: 30.4.1 - resolution: "pretty-format@npm:30.4.1" - dependencies: - "@jest/schemas": "npm:30.4.1" - ansi-styles: "npm:^5.2.0" - react-is-18: "npm:react-is@^18.3.1" - react-is-19: "npm:react-is@^19.2.5" - checksum: 10c0/c7e6633740cd2f6d382f188c00c8b4b3f2bee3cda16db6753471c6bb4b94f76531358d3a7793062a0fb00d72ebfb934e8ae1d4f5ced6bb34c8e7f60996f90076 - languageName: node - linkType: hard - "proc-log@npm:^5.0.0": version: 5.0.0 resolution: "proc-log@npm:5.0.0" @@ -11978,13 +11433,6 @@ __metadata: languageName: node linkType: hard -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 - languageName: node - linkType: hard - "process-warning@npm:^5.0.0": version: 5.0.0 resolution: "process-warning@npm:5.0.0" @@ -12223,13 +11671,6 @@ __metadata: languageName: node linkType: hard -"quick-lru@npm:^4.0.1": - version: 4.0.1 - resolution: "quick-lru@npm:4.0.1" - checksum: 10c0/f9b1596fa7595a35c2f9d913ac312fede13d37dc8a747a51557ab36e11ce113bbe88ef4c0154968845559a7709cb6a7e7cbe75f7972182451cd45e7f057a334d - languageName: node - linkType: hard - "quick-lru@npm:^5.1.1": version: 5.1.1 resolution: "quick-lru@npm:5.1.1" @@ -12289,20 +11730,6 @@ __metadata: languageName: node linkType: hard -"react-is-18@npm:react-is@^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 - languageName: node - linkType: hard - -"react-is-19@npm:react-is@^19.2.5": - version: 19.2.7 - resolution: "react-is@npm:19.2.7" - checksum: 10c0/419fe54d5bd7fdf5414a5bb7bd9a1e0e36f9fae28ffb4cb73290fbe342bde15d8584a90d1db62547f6aa03018dce517b178a041abb522136cd4b4b51b4e94c83 - languageName: node - linkType: hard - "read-cmd-shim@npm:4.0.0": version: 4.0.0 resolution: "read-cmd-shim@npm:4.0.0" @@ -12317,50 +11744,6 @@ __metadata: languageName: node linkType: hard -"read-pkg-up@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg-up@npm:3.0.0" - dependencies: - find-up: "npm:^2.0.0" - read-pkg: "npm:^3.0.0" - checksum: 10c0/2cd0a180260b0d235990e6e9c8c2330a03882d36bc2eba8930e437ef23ee52a68a894e7e1ccb1c33f03bcceb270a861ee5f7eac686f238857755e2cddfb48ffd - languageName: node - linkType: hard - -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" - dependencies: - find-up: "npm:^4.1.0" - read-pkg: "npm:^5.2.0" - type-fest: "npm:^0.8.1" - checksum: 10c0/82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 - languageName: node - linkType: hard - -"read-pkg@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg@npm:3.0.0" - dependencies: - load-json-file: "npm:^4.0.0" - normalize-package-data: "npm:^2.3.2" - path-type: "npm:^3.0.0" - checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 - languageName: node - linkType: hard - -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" - dependencies: - "@types/normalize-package-data": "npm:^2.4.0" - normalize-package-data: "npm:^2.5.0" - parse-json: "npm:^5.0.0" - type-fest: "npm:^0.6.0" - checksum: 10c0/b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb - languageName: node - linkType: hard - "read@npm:^4.0.0": version: 4.1.0 resolution: "read@npm:4.1.0" @@ -12370,7 +11753,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:3.6.2, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": +"readable-stream@npm:3.6.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -12381,21 +11764,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.3" - isarray: "npm:~1.0.0" - process-nextick-args: "npm:~2.0.0" - safe-buffer: "npm:~5.1.1" - string_decoder: "npm:~1.1.1" - util-deprecate: "npm:~1.0.1" - checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa - languageName: node - linkType: hard - "real-require@npm:^0.2.0": version: 0.2.0 resolution: "real-require@npm:0.2.0" @@ -12403,16 +11771,6 @@ __metadata: languageName: node linkType: hard -"redent@npm:^3.0.0": - version: 3.0.0 - resolution: "redent@npm:3.0.0" - dependencies: - indent-string: "npm:^4.0.0" - strip-indent: "npm:^3.0.0" - checksum: 10c0/d64a6b5c0b50eb3ddce3ab770f866658a2b9998c678f797919ceb1b586bab9259b311407280bd80b804e2a7c7539b19238ae6a2a20c843f1a7fcff21d48c2eae - languageName: node - linkType: hard - "reflect.getprototypeof@npm:^1.0.10, reflect.getprototypeof@npm:^1.0.9": version: 1.0.10 resolution: "reflect.getprototypeof@npm:1.0.10" @@ -12494,20 +11852,6 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0": - version: 1.22.12 - resolution: "resolve@npm:1.22.12" - dependencies: - es-errors: "npm:^1.3.0" - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/b16dc9b537c02e8c3388f7d3dcff9741d3071625f9a97ac1c885f2b0ca51e78df22328fb6d6ef214dd9101fb7cfc19aa2836fe3410402a94f3f7b8639c7149bf - languageName: node - linkType: hard - "resolve@npm:^2.0.0-next.6": version: 2.0.0-next.7 resolution: "resolve@npm:2.0.0-next.7" @@ -12524,20 +11868,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin": - version: 1.22.12 - resolution: "resolve@patch:resolve@npm%3A1.22.12#optional!builtin::version=1.22.12&hash=c3c19d" - dependencies: - es-errors: "npm:^1.3.0" - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/fc6519984ae1f894d877c0060ba8b1f5ba3bc0e85a02f74e141929c118c23d74d9735619a9cc2965397387e514884245c65d72a40731dcb6cfc84c7bcdc8321e - languageName: node - linkType: hard - "resolve@patch:resolve@npm%3A^2.0.0-next.6#optional!builtin": version: 2.0.0-next.7 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.7#optional!builtin::version=2.0.0-next.7&hash=c3c19d" @@ -12776,13 +12106,6 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 - languageName: node - linkType: hard - "safe-push-apply@npm:^1.0.0": version: 1.0.0 resolution: "safe-push-apply@npm:1.0.0" @@ -12841,15 +12164,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 - languageName: node - linkType: hard - "semver@npm:7.7.2": version: 7.7.2 resolution: "semver@npm:7.7.2" @@ -12859,12 +12173,12 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.7.4": - version: 7.7.4 - resolution: "semver@npm:7.7.4" +"semver@npm:7.8.4, semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:^7.7.2": + version: 7.8.4 + resolution: "semver@npm:7.8.4" bin: semver: bin/semver.js - checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + checksum: 10c0/81b7c296fd7927b80f67fa516b75fa1017caac8167795320de28e76ccbc6f7f01763c30ecd10d6a0d8fd089708ab0548a5aebb94b0870e99c2a2b4600a46389b languageName: node linkType: hard @@ -12877,12 +12191,12 @@ __metadata: 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.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:^7.7.2": - version: 7.8.4 - resolution: "semver@npm:7.8.4" +"semver@npm:^7.8.5": + version: 7.8.5 + resolution: "semver@npm:7.8.5" bin: semver: bin/semver.js - checksum: 10c0/81b7c296fd7927b80f67fa516b75fa1017caac8167795320de28e76ccbc6f7f01763c30ecd10d6a0d8fd089708ab0548a5aebb94b0870e99c2a2b4600a46389b + checksum: 10c0/b1f3127a5be8125a94f37188b361c212466c292c6910adce3ec106cff5dc211ccaedc4739c11bb70fda59d6fc1f040a9bca289f4e093451521a2372e5231fe0c languageName: node linkType: hard @@ -13125,13 +12439,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - "slash@npm:^5.1.0": version: 5.1.0 resolution: "slash@npm:5.1.0" @@ -13261,15 +12568,6 @@ __metadata: languageName: node linkType: hard -"split2@npm:^3.2.2": - version: 3.2.2 - resolution: "split2@npm:3.2.2" - dependencies: - readable-stream: "npm:^3.0.0" - checksum: 10c0/2dad5603c52b353939befa3e2f108f6e3aff42b204ad0f5f16dd12fd7c2beab48d117184ce6f7c8854f9ee5ffec6faae70d243711dd7d143a9f635b4a285de4e - languageName: node - linkType: hard - "split2@npm:^4.0.0": version: 4.2.0 resolution: "split2@npm:4.2.0" @@ -13286,15 +12584,6 @@ __metadata: languageName: node linkType: hard -"split@npm:^1.0.1": - version: 1.0.1 - resolution: "split@npm:1.0.1" - dependencies: - through: "npm:2" - checksum: 10c0/7f489e7ed5ff8a2e43295f30a5197ffcb2d6202c9cf99357f9690d645b19c812bccf0be3ff336fea5054cda17ac96b91d67147d95dbfc31fbb5804c61962af85 - languageName: node - linkType: hard - "ssri@npm:12.0.0, ssri@npm:^12.0.0": version: 12.0.0 resolution: "ssri@npm:12.0.0" @@ -13383,7 +12672,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:4.2.3, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width@npm:4.2.3, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -13463,15 +12752,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: "npm:~5.1.0" - checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e - languageName: node - linkType: hard - "strip-ansi@npm:6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -13520,15 +12800,6 @@ __metadata: languageName: node linkType: hard -"strip-indent@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-indent@npm:3.0.0" - dependencies: - min-indent: "npm:^1.0.0" - checksum: 10c0/ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 - languageName: node - linkType: hard - "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -13636,13 +12907,6 @@ __metadata: languageName: node linkType: hard -"text-extensions@npm:^1.0.0": - version: 1.9.0 - resolution: "text-extensions@npm:1.9.0" - checksum: 10c0/9ad5a9f723a871e2d884e132d7e93f281c60b5759c95f3f6b04704856548715d93a36c10dbaf5f12b91bf405f0cf3893bf169d4d143c0f5509563b992d385443 - languageName: node - linkType: hard - "thread-stream@npm:^3.0.0": version: 3.2.0 resolution: "thread-stream@npm:3.2.0" @@ -13652,17 +12916,7 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.0": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: "npm:~2.3.6" - xtend: "npm:~4.0.1" - checksum: 10c0/cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade - languageName: node - linkType: hard - -"through@npm:2, through@npm:2.3.8, through@npm:>=2.2.7 <3, through@npm:^2.3.6, through@npm:~2.3, through@npm:~2.3.1": +"through@npm:2, through@npm:^2.3.6, through@npm:~2.3, through@npm:~2.3.1": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc @@ -13828,15 +13082,6 @@ __metadata: languageName: node linkType: hard -"tree-kill@npm:1.2.2": - version: 1.2.2 - resolution: "tree-kill@npm:1.2.2" - bin: - tree-kill: cli.js - checksum: 10c0/7b1b7c7f17608a8f8d20a162e7957ac1ef6cd1636db1aba92f4e072dc31818c2ff0efac1e3d91064ede67ed5dc57c565420531a8134090a12ac10cf792ab14d2 - languageName: node - linkType: hard - "treeverse@npm:^3.0.0": version: 3.0.0 resolution: "treeverse@npm:3.0.0" @@ -13844,13 +13089,6 @@ __metadata: languageName: node linkType: hard -"trim-newlines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-newlines@npm:3.0.1" - checksum: 10c0/03cfefde6c59ff57138412b8c6be922ecc5aec30694d784f2a65ef8dcbd47faef580b7de0c949345abdc56ec4b4abf64dd1e5aea619b200316e471a3dd5bf1f6 - languageName: node - linkType: hard - "ts-api-utils@npm:^2.1.0": version: 2.5.0 resolution: "ts-api-utils@npm:2.5.0" @@ -13963,13 +13201,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.18.0": - version: 0.18.1 - resolution: "type-fest@npm:0.18.1" - checksum: 10c0/303f5ecf40d03e1d5b635ce7660de3b33c18ed8ebc65d64920c02974d9e684c72483c23f9084587e9dd6466a2ece1da42ddc95b412a461794dd30baca95e2bac - languageName: node - linkType: hard - "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -13984,13 +13215,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 - languageName: node - linkType: hard - "type-fest@npm:^2.11.2": version: 2.19.0 resolution: "type-fest@npm:2.19.0" @@ -14086,13 +13310,6 @@ __metadata: languageName: node linkType: hard -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412 - languageName: node - linkType: hard - "typescript-eslint@npm:8.46.4": version: 8.46.4 resolution: "typescript-eslint@npm:8.46.4" @@ -14108,16 +13325,6 @@ __metadata: languageName: node linkType: hard -"typescript@npm:>=3 < 6": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 - languageName: node - linkType: hard - "typescript@npm:^6.0.0": version: 6.0.3 resolution: "typescript@npm:6.0.3" @@ -14128,16 +13335,6 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 - languageName: node - linkType: hard - "typescript@patch:typescript@npm%3A^6.0.0#optional!builtin": version: 6.0.3 resolution: "typescript@patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5" @@ -14259,13 +13456,6 @@ __metadata: languageName: node linkType: hard -"upath@npm:2.0.1": - version: 2.0.1 - resolution: "upath@npm:2.0.1" - checksum: 10c0/79e8e1296b00e24a093b077cfd7a238712d09290c850ce59a7a01458ec78c8d26dcc2ab50b1b9d6a84dabf6511fb4969afeb8a5c9a001aa7272b9cc74c34670f - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.2.3": version: 1.2.3 resolution: "update-browserslist-db@npm:1.2.3" @@ -14296,7 +13486,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:1.0.2, util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:1.0.2, util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 @@ -14344,7 +13534,7 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": +"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.4": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" dependencies: @@ -14657,6 +13847,17 @@ __metadata: languageName: node linkType: hard +"which@npm:3.0.1": + version: 3.0.1 + resolution: "which@npm:3.0.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: bin/which.js + checksum: 10c0/15263b06161a7c377328fd2066cb1f093f5e8a8f429618b63212b5b8847489be7bcab0ab3eb07f3ecc0eda99a5a7ea52105cf5fa8266bedd083cc5a9f6da24f1 + languageName: node + linkType: hard + "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -14713,15 +13914,6 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: "npm:^1.0.2 || 2 || 3 || 4" - checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 - languageName: node - linkType: hard - "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" @@ -14853,13 +14045,6 @@ __metadata: languageName: node linkType: hard -"xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e - languageName: node - linkType: hard - "y18n@npm:5.0.8, y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -14881,7 +14066,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.9.0, yaml@npm:^2.9.0": +"yaml@npm:2.9.0, yaml@npm:^2.8.3, yaml@npm:^2.9.0": version: 2.9.0 resolution: "yaml@npm:2.9.0" bin: @@ -14908,13 +14093,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 - languageName: node - linkType: hard - "yargs-parser@npm:^22.0.0": version: 22.0.0 resolution: "yargs-parser@npm:22.0.0" @@ -14937,21 +14115,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" - dependencies: - cliui: "npm:^7.0.2" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.0" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^20.2.2" - checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 - languageName: node - linkType: hard - "yargs@npm:^18.0.0": version: 18.0.0 resolution: "yargs@npm:18.0.0" From 5de7162311b4177b4ddc94a6aed5e81dfa45b038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Fri, 31 Jul 2026 14:38:56 +0200 Subject: [PATCH 3/3] test(e2e): crawl local fixtures instead of the live demo store (#3922) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The scheduled E2E runs have been red since 21 July. Every failure is a `429` from `warehouse-theme-metal.myshopify.com` β€” `requestsFinished` was 0, so the `All requests finished` precondition failed before the behaviour under test ran. ## Why the proxy stopped helping Session rotation works correctly; the datacenter pool is the problem. Measured through `Actor.createProxyConfiguration()`: | | result | |---|---| | 8 Crawlee sessions β†’ egress IPs | 8 distinct IPs, **7 got 429** | | datacenter (`auto`) vs `RESIDENTIAL`, 6 requests each | **0/6** vs **6/6** | | direct, no proxy | 200 every time | So routing the six store tests through `Actor.createProxyConfiguration()` in #3855 made them strictly worse once the pool's reputation degraded. ## What this does instead None of these tests are about scraping protection β€” `camoufox-cloudflare` covers that. Five of them use the store only as convenient HTML, so they now serve their own fixtures. `playwright-introduction-guide` keeps crawling the real store, since mirroring the published guide is the point of it. The store rejects the platform's egress IP whether the crawl goes direct or through the datacenter pool, so on the platform it goes through residential. That is gated on `Actor.isAtHome()`: GitHub runners reach the store directly and stay off the proxy. ## Three latent bugs this surfaced **The robots tests had stopped testing robots.txt.** The store's robots.txt no longer has a `Disallow: /cart` rule β€” only `/cart/` and `/cart.js` β€” so `/cart` is allowed, while all three tests assert `'/cart URL is not processed'` under a comment claiming it is disallowed. The fixture disallows it explicitly and links to it from every page, so the assertion means what it says again. **`adaptive-playwright-robots-file` was passing while crawling nothing.** It had no `requestsFinished` precondition, so its two "URL is not processed" assertions held vacuously β€” its Apify runs read `Total 1 requests: 0 succeeded, 1 failed`. It couldn't have had one: `getStats()` and the platform stats lookup hardcoded `SDK_CRAWLER_STATISTICS_0`, but `AdaptivePlaywrightCrawler` discards the `Statistics` its base constructor created and installs its own, which lands on the next id. Both lookups now match by prefix, and the test has the assertion. Worth deciding separately whether the library should change here β€” every other crawler persists to `_0`, so anything reading that key gets nothing from an adaptive crawler. **The localhost-fixture skip in #3674 rested on a false premise.** The comment on `cheerio-enqueue-links-base` and `playwright-enqueue-links-base` claimed a `127.0.0.1` fixture is unreachable from the Apify platform container. It isn't: the server is started inside `actor/main.js`, so it is plain loopback within the same container, and for the browser tests the browser is in that container too. Verified by running every fixture-based test against the platform with the skip removed β€” all seven pass, and the run logs show the crawls hitting the `127.0.0.1` URLs. Those two skips are removed here as well, so nothing loses PLATFORM coverage. Also: `validateDataset`'s URL regex rejects the fixture's `127.0.0.1` origin, so the two pagination tests check the `url` shape separately. --- .../actor/main.js | 50 ++++++++++- .../adaptive-playwright-robots-file/test.mjs | 14 ++-- test/e2e/cheerio-enqueue-links-base/test.mjs | 11 +-- test/e2e/cheerio-robots-file/actor/main.js | 52 ++++++++++-- .../cheerio-robots-file/actor/package.json | 1 - test/e2e/cheerio-robots-file/test.mjs | 9 +- .../playwright-enqueue-links-base/test.mjs | 11 +-- .../actor/main.js | 8 +- test/e2e/playwright-robots-file/actor/main.js | 50 ++++++++++- test/e2e/playwright-robots-file/test.mjs | 9 +- .../actor/main.js | 84 ++++++++++++++++--- .../test.mjs | 8 +- .../puppeteer-store-pagination/actor/main.js | 84 ++++++++++++++++--- test/e2e/puppeteer-store-pagination/test.mjs | 8 +- test/e2e/tools.mjs | 29 +++++-- 15 files changed, 338 insertions(+), 90 deletions(-) diff --git a/test/e2e/adaptive-playwright-robots-file/actor/main.js b/test/e2e/adaptive-playwright-robots-file/actor/main.js index d3355bc1f865..24b73bef554c 100644 --- a/test/e2e/adaptive-playwright-robots-file/actor/main.js +++ b/test/e2e/adaptive-playwright-robots-file/actor/main.js @@ -1,6 +1,48 @@ +import http from 'node:http'; + import { AdaptivePlaywrightCrawler } from '@crawlee/playwright'; import { Actor } from 'apify'; +// Self-contained fixture: robots.txt disallows /cart and /checkout, and the +// start page links to /cart alongside the allowed /collections/* pages. The +// crawler may only reach the collections. +const pages = { + '/robots.txt': ['User-agent: *', 'Disallow: /cart', 'Disallow: /checkout', ''].join('\n'), + '/': ` +Store + + Cart + Audio + TV +`, + // Every collection links back to /cart, so the robots.txt rule is what keeps + // it out of the dataset rather than a shortage of links to follow. + '/collections/audio': ` +Audio +Cart Home`, + '/collections/tv': ` +TV +Cart Home`, + '/cart': 'CartCart', + '/checkout': 'CheckoutCheckout', +}; + +const server = http.createServer((req, res) => { + const body = pages[req.url]; + if (body === undefined) { + res.statusCode = 404; + res.end('Not Found'); + return; + } + const type = req.url === '/robots.txt' ? 'text/plain' : 'text/html'; + res.writeHead(200, { 'content-type': `${type}; charset=utf-8` }); + res.end(body); +}); + +await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); +const { port } = server.address(); +const baseUrl = `http://127.0.0.1:${port}`; + await Actor.init({ storage: process.env.STORAGE_IMPLEMENTATION === 'LOCAL' @@ -9,8 +51,6 @@ await Actor.init({ }); const crawler = new AdaptivePlaywrightCrawler({ - // The store rate-limits the platform's shared egress IP, so crawl through a proxy. - proxyConfiguration: await Actor.createProxyConfiguration(), maxRequestsPerCrawl: 10, respectRobotsTxtFile: true, onSkippedRequest: (args) => crawler.log.warningOnce(`Request ${args.url} was skipped, reason: ${args.reason}`), @@ -26,11 +66,13 @@ crawler.router.addDefaultHandler(async ({ log, request, enqueueLinks, pushData } }); await crawler.run([ - 'https://warehouse-theme-metal.myshopify.com', - 'https://warehouse-theme-metal.myshopify.com/checkout', // '/checkout' is disallowed by robots.txt + baseUrl, + `${baseUrl}/checkout`, // '/checkout' is disallowed by robots.txt ]); const data = await crawler.getData(); console.table(data.items); +server.close(); + await Actor.exit({ exit: Actor.isAtHome() }); diff --git a/test/e2e/adaptive-playwright-robots-file/test.mjs b/test/e2e/adaptive-playwright-robots-file/test.mjs index 9edc578f3585..867ebb305618 100644 --- a/test/e2e/adaptive-playwright-robots-file/test.mjs +++ b/test/e2e/adaptive-playwright-robots-file/test.mjs @@ -3,12 +3,12 @@ import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs'; const testActorDirname = getActorTestDir(import.meta.url); await initialize(testActorDirname); -const { datasetItems } = await runActor(testActorDirname, 16384); +const { stats, datasetItems } = await runActor(testActorDirname, 16384); -const cartRequest = datasetItems.find((item) => item.url === 'https://warehouse-theme-metal.myshopify.com/cart'); -const checkoutRequest = datasetItems.find( - (item) => item.url === 'https://warehouse-theme-metal.myshopify.com/checkout', -); +// Without this the two assertions below hold vacuously when the crawl never starts. +await expect(stats.requestsFinished >= 1, 'All requests finished'); -await expect(!cartRequest, '/cart URL is not processed'); -await expect(!checkoutRequest, '/checkout URL is not processed'); +const paths = datasetItems.map((item) => new URL(item.url).pathname); + +await expect(!paths.includes('/cart'), '/cart URL is not processed'); +await expect(!paths.includes('/checkout'), '/checkout URL is not processed'); diff --git a/test/e2e/cheerio-enqueue-links-base/test.mjs b/test/e2e/cheerio-enqueue-links-base/test.mjs index 448973a3ecec..1af2a7738f4f 100644 --- a/test/e2e/cheerio-enqueue-links-base/test.mjs +++ b/test/e2e/cheerio-enqueue-links-base/test.mjs @@ -1,13 +1,4 @@ -import { initialize, getActorTestDir, runActor, expect, skipTest } from '../tools.mjs'; - -// The actor spins up an HTTP server on 127.0.0.1; that works inside the -// in-process LOCAL/MEMORY worker but is unreachable from the Apify platform -// container, so the run never finishes. Base-href handling is pure parsing -// logic in @crawlee/utils that doesn't depend on the storage backend, so -// LOCAL+MEMORY coverage is sufficient. -if (process.env.STORAGE_IMPLEMENTATION === 'PLATFORM') { - await skipTest('localhost fixture is not reachable from the Apify platform'); -} +import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs'; const testActorDirname = getActorTestDir(import.meta.url); await initialize(testActorDirname); diff --git a/test/e2e/cheerio-robots-file/actor/main.js b/test/e2e/cheerio-robots-file/actor/main.js index c24a56e945fd..266ee1977d01 100644 --- a/test/e2e/cheerio-robots-file/actor/main.js +++ b/test/e2e/cheerio-robots-file/actor/main.js @@ -1,7 +1,48 @@ +import http from 'node:http'; + import { CheerioCrawler } from '@crawlee/cheerio'; -import { Browser, ImpitHttpClient } from '@crawlee/impit-client'; import { Actor } from 'apify'; +// Self-contained fixture: robots.txt disallows /cart and /checkout, and the +// start page links to /cart alongside the allowed /collections/* pages. The +// crawler may only reach the collections. +const pages = { + '/robots.txt': ['User-agent: *', 'Disallow: /cart', 'Disallow: /checkout', ''].join('\n'), + '/': ` +Store + + Cart + Audio + TV +`, + // Every collection links back to /cart, so the robots.txt rule is what keeps + // it out of the dataset rather than a shortage of links to follow. + '/collections/audio': ` +Audio +Cart Home`, + '/collections/tv': ` +TV +Cart Home`, + '/cart': 'CartCart', + '/checkout': 'CheckoutCheckout', +}; + +const server = http.createServer((req, res) => { + const body = pages[req.url]; + if (body === undefined) { + res.statusCode = 404; + res.end('Not Found'); + return; + } + const type = req.url === '/robots.txt' ? 'text/plain' : 'text/html'; + res.writeHead(200, { 'content-type': `${type}; charset=utf-8` }); + res.end(body); +}); + +await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); +const { port } = server.address(); +const baseUrl = `http://127.0.0.1:${port}`; + await Actor.init({ storage: process.env.STORAGE_IMPLEMENTATION === 'LOCAL' @@ -10,9 +51,6 @@ await Actor.init({ }); const crawler = new CheerioCrawler({ - proxyConfiguration: await Actor.createProxyConfiguration(), - // The store 429s plain HTTP clients; impersonating a browser gets us through. - httpClient: new ImpitHttpClient({ browser: Browser.Firefox }), maxRequestsPerCrawl: 10, respectRobotsTxtFile: true, }); @@ -27,11 +65,13 @@ crawler.router.addDefaultHandler(async ({ log, request, enqueueLinks, pushData } }); await crawler.run([ - 'https://warehouse-theme-metal.myshopify.com', - 'https://warehouse-theme-metal.myshopify.com/checkout', // '/checkout' is disallowed by robots.txt + baseUrl, + `${baseUrl}/checkout`, // '/checkout' is disallowed by robots.txt ]); const data = await crawler.getData(); console.table(data.items); +server.close(); + await Actor.exit({ exit: Actor.isAtHome() }); diff --git a/test/e2e/cheerio-robots-file/actor/package.json b/test/e2e/cheerio-robots-file/actor/package.json index 32ff9de4411a..e101f7a748d1 100644 --- a/test/e2e/cheerio-robots-file/actor/package.json +++ b/test/e2e/cheerio-robots-file/actor/package.json @@ -11,7 +11,6 @@ "@crawlee/core": "file:./packages/core", "@crawlee/memory-storage": "file:./packages/memory-storage", "@crawlee/cheerio": "file:./packages/cheerio-crawler", - "@crawlee/impit-client": "file:./packages/impit-client", "@crawlee/types": "file:./packages/types", "@crawlee/utils": "file:./packages/utils" }, diff --git a/test/e2e/cheerio-robots-file/test.mjs b/test/e2e/cheerio-robots-file/test.mjs index a607b32bb974..fb879477178d 100644 --- a/test/e2e/cheerio-robots-file/test.mjs +++ b/test/e2e/cheerio-robots-file/test.mjs @@ -7,10 +7,7 @@ const { stats, datasetItems } = await runActor(testActorDirname); await expect(stats.requestsFinished >= 1, 'All requests finished'); -const cartRequest = datasetItems.find((item) => item.url === 'https://warehouse-theme-metal.myshopify.com/cart'); -const checkoutRequest = datasetItems.find( - (item) => item.url === 'https://warehouse-theme-metal.myshopify.com/checkout', -); +const paths = datasetItems.map((item) => new URL(item.url).pathname); -await expect(!cartRequest, '/cart URL is not processed'); -await expect(!checkoutRequest, '/checkout URL is not processed'); +await expect(!paths.includes('/cart'), '/cart URL is not processed'); +await expect(!paths.includes('/checkout'), '/checkout URL is not processed'); diff --git a/test/e2e/playwright-enqueue-links-base/test.mjs b/test/e2e/playwright-enqueue-links-base/test.mjs index 448973a3ecec..1af2a7738f4f 100644 --- a/test/e2e/playwright-enqueue-links-base/test.mjs +++ b/test/e2e/playwright-enqueue-links-base/test.mjs @@ -1,13 +1,4 @@ -import { initialize, getActorTestDir, runActor, expect, skipTest } from '../tools.mjs'; - -// The actor spins up an HTTP server on 127.0.0.1; that works inside the -// in-process LOCAL/MEMORY worker but is unreachable from the Apify platform -// container, so the run never finishes. Base-href handling is pure parsing -// logic in @crawlee/utils that doesn't depend on the storage backend, so -// LOCAL+MEMORY coverage is sufficient. -if (process.env.STORAGE_IMPLEMENTATION === 'PLATFORM') { - await skipTest('localhost fixture is not reachable from the Apify platform'); -} +import { initialize, getActorTestDir, runActor, expect } from '../tools.mjs'; const testActorDirname = getActorTestDir(import.meta.url); await initialize(testActorDirname); diff --git a/test/e2e/playwright-introduction-guide/actor/main.js b/test/e2e/playwright-introduction-guide/actor/main.js index f6cbd281f059..a6fc346bf928 100644 --- a/test/e2e/playwright-introduction-guide/actor/main.js +++ b/test/e2e/playwright-introduction-guide/actor/main.js @@ -89,8 +89,12 @@ router.addDefaultHandler(async ({ request, page, enqueueLinks, log }) => { }); const crawler = new PlaywrightCrawler({ - // The store rate-limits the platform's shared egress IP, so crawl through a proxy. - proxyConfiguration: await Actor.createProxyConfiguration(), + // The store 429s the platform's egress IP, direct or through the datacenter + // proxy pool; residential gets through. GitHub runners reach it directly, so + // they stay off the proxy and don't burn residential traffic. + proxyConfiguration: Actor.isAtHome() + ? await Actor.createProxyConfiguration({ groups: ['RESIDENTIAL'] }) + : undefined, maxRequestsPerCrawl: 15, // so the test runs faster // Instead of the long requestHandler with // if clauses we provide a router instance. diff --git a/test/e2e/playwright-robots-file/actor/main.js b/test/e2e/playwright-robots-file/actor/main.js index c50ba6939395..f0b5c3385e44 100644 --- a/test/e2e/playwright-robots-file/actor/main.js +++ b/test/e2e/playwright-robots-file/actor/main.js @@ -1,6 +1,48 @@ +import http from 'node:http'; + import { PlaywrightCrawler } from '@crawlee/playwright'; import { Actor } from 'apify'; +// Self-contained fixture: robots.txt disallows /cart and /checkout, and the +// start page links to /cart alongside the allowed /collections/* pages. The +// crawler may only reach the collections. +const pages = { + '/robots.txt': ['User-agent: *', 'Disallow: /cart', 'Disallow: /checkout', ''].join('\n'), + '/': ` +Store + + Cart + Audio + TV +`, + // Every collection links back to /cart, so the robots.txt rule is what keeps + // it out of the dataset rather than a shortage of links to follow. + '/collections/audio': ` +Audio +Cart Home`, + '/collections/tv': ` +TV +Cart Home`, + '/cart': 'CartCart', + '/checkout': 'CheckoutCheckout', +}; + +const server = http.createServer((req, res) => { + const body = pages[req.url]; + if (body === undefined) { + res.statusCode = 404; + res.end('Not Found'); + return; + } + const type = req.url === '/robots.txt' ? 'text/plain' : 'text/html'; + res.writeHead(200, { 'content-type': `${type}; charset=utf-8` }); + res.end(body); +}); + +await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); +const { port } = server.address(); +const baseUrl = `http://127.0.0.1:${port}`; + await Actor.init({ storage: process.env.STORAGE_IMPLEMENTATION === 'LOCAL' @@ -9,8 +51,6 @@ await Actor.init({ }); const crawler = new PlaywrightCrawler({ - // The store rate-limits the platform's shared egress IP, so crawl through a proxy. - proxyConfiguration: await Actor.createProxyConfiguration(), maxRequestsPerCrawl: 10, respectRobotsTxtFile: true, }); @@ -25,11 +65,13 @@ crawler.router.addDefaultHandler(async ({ log, request, enqueueLinks, pushData } }); await crawler.run([ - 'https://warehouse-theme-metal.myshopify.com', - 'https://warehouse-theme-metal.myshopify.com/checkout', // '/checkout' is disallowed by robots.txt + baseUrl, + `${baseUrl}/checkout`, // '/checkout' is disallowed by robots.txt ]); const data = await crawler.getData(); console.table(data.items); +server.close(); + await Actor.exit({ exit: Actor.isAtHome() }); diff --git a/test/e2e/playwright-robots-file/test.mjs b/test/e2e/playwright-robots-file/test.mjs index 3eb38625dc9e..4876022e8042 100644 --- a/test/e2e/playwright-robots-file/test.mjs +++ b/test/e2e/playwright-robots-file/test.mjs @@ -7,10 +7,7 @@ const { stats, datasetItems } = await runActor(testActorDirname, 16384); await expect(stats.requestsFinished >= 1, 'All requests finished'); -const cartRequest = datasetItems.find((item) => item.url === 'https://warehouse-theme-metal.myshopify.com/cart'); -const checkoutRequest = datasetItems.find( - (item) => item.url === 'https://warehouse-theme-metal.myshopify.com/checkout', -); +const paths = datasetItems.map((item) => new URL(item.url).pathname); -await expect(!cartRequest, '/cart URL is not processed'); -await expect(!checkoutRequest, '/checkout URL is not processed'); +await expect(!paths.includes('/cart'), '/cart URL is not processed'); +await expect(!paths.includes('/checkout'), '/checkout URL is not processed'); diff --git a/test/e2e/puppeteer-store-pagination-jquery/actor/main.js b/test/e2e/puppeteer-store-pagination-jquery/actor/main.js index c78ef824182b..f52136894896 100644 --- a/test/e2e/puppeteer-store-pagination-jquery/actor/main.js +++ b/test/e2e/puppeteer-store-pagination-jquery/actor/main.js @@ -1,6 +1,69 @@ +import http from 'node:http'; + import { Actor } from 'apify'; import { Dataset, PuppeteerCrawler } from '@crawlee/puppeteer'; +// Self-contained fixture: three paginated listing pages, each linking to +// product detail pages, using the class names the crawler selects on. +const PAGE_SIZE = 6; +const PAGE_COUNT = 3; +const MANUFACTURERS = ['sony', 'denon', 'sennheiser', 'yamaha', 'pioneer', 'klipsch']; + +const products = Array.from({ length: PAGE_SIZE * PAGE_COUNT }, (_, i) => ({ + slug: `${MANUFACTURERS[i % MANUFACTURERS.length]}-model-${i + 1}`, + title: `Model ${i + 1}`, + sku: `SKU-${100 + i}`, + // Thousands separator so the handler's comma stripping is exercised. + price: `$${(1000 + i * 10).toLocaleString('en-US')}.00`, + inStock: i % 3 !== 0, +})); + +const listingPage = (pageNo) => ` +All TVs, page ${pageNo} + + ${products + .slice((pageNo - 1) * PAGE_SIZE, pageNo * PAGE_SIZE) + .map((p) => `${p.title}`) + .join('\n ')} + ${pageNo < PAGE_COUNT ? `Next` : ''} +`; + +const detailPage = (product) => ` +${product.title} + +

${product.title}

+ ${product.sku} + ${product.price} + Regular price + ${product.inStock ? 'In stock' : 'Out of stock'} +`; + +const server = http.createServer((req, res) => { + const { pathname, searchParams } = new URL(req.url, 'http://127.0.0.1'); + let body; + + if (pathname === '/collections/all-tvs') { + const pageNo = Number(searchParams.get('page') ?? 1); + if (pageNo >= 1 && pageNo <= PAGE_COUNT) body = listingPage(pageNo); + } else if (pathname.startsWith('/products/')) { + const product = products.find((p) => p.slug === pathname.slice('/products/'.length)); + if (product) body = detailPage(product); + } + + if (body === undefined) { + res.statusCode = 404; + res.end('Not Found'); + return; + } + + res.writeHead(200, { 'content-type': 'text/html; charset=utf-8' }); + res.end(body); +}); + +await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); +const { port } = server.address(); +const baseUrl = `http://127.0.0.1:${port}`; + const mainOptions = { exit: Actor.isAtHome(), storage: @@ -11,14 +74,9 @@ const mainOptions = { await Actor.main(async () => { const crawler = new PuppeteerCrawler({ - // The store rate-limits the platform's shared egress IP, so crawl through a proxy. - proxyConfiguration: await Actor.createProxyConfiguration(), maxRequestsPerCrawl: 10, preNavigationHooks: [ - async ({ page }, goToOptions) => { - await page.evaluateOnNewDocument(() => { - localStorage.setItem('themeExitPopup', 'true'); - }); + (_crawlingContext, goToOptions) => { goToOptions.waitUntil = ['networkidle2']; }, ], @@ -31,7 +89,7 @@ await Actor.main(async () => { if (label === 'START') { log.info('Store opened'); const nextButtonSelector = '.pagination__next'; - // enqueue product details from the first three pages of the store + // enqueue product details from the first two pages of the store for (let pageNo = 1; pageNo < 3; pageNo++) { // Wait for network events to finish await page.waitForNetworkIdle({ concurrency: 2 }); @@ -39,7 +97,7 @@ await Actor.main(async () => { await enqueueLinks({ selector: 'a.product-item__image-wrapper', label: 'DETAIL', - globs: ['https://warehouse-theme-metal.myshopify.com/*/*'], + globs: [`${baseUrl}/*/*`], }); log.info(`Enqueued actors for page ${pageNo}`); log.info('Loading the next page'); @@ -48,8 +106,8 @@ await Actor.main(async () => { } else if (label === 'DETAIL') { log.info(`Scraping ${url}`); await injectJQuery(); - const urlPart = url.split('/').slice(-1); // ['sennheiser-mke-440-professional-stereo-shotgun-microphone-mke-440'] - const manufacturer = urlPart[0].split('-')[0]; // 'sennheiser' + const urlPart = url.split('/').slice(-1); // ['sony-model-1'] + const manufacturer = urlPart[0].split('-')[0]; // 'sony' /* eslint-disable no-undef */ const results = await page.evaluate(() => { @@ -81,7 +139,7 @@ await Actor.main(async () => { }, }); - await crawler.run([ - { url: 'https://warehouse-theme-metal.myshopify.com/collections/all-tvs', userData: { label: 'START' } }, - ]); + await crawler.run([{ url: `${baseUrl}/collections/all-tvs`, userData: { label: 'START' } }]); }, mainOptions); + +server.close(); diff --git a/test/e2e/puppeteer-store-pagination-jquery/test.mjs b/test/e2e/puppeteer-store-pagination-jquery/test.mjs index 8f87841e7009..06670dd9353c 100644 --- a/test/e2e/puppeteer-store-pagination-jquery/test.mjs +++ b/test/e2e/puppeteer-store-pagination-jquery/test.mjs @@ -8,6 +8,12 @@ const { stats, datasetItems } = await runActor(testActorDirname, 16384); await expect(stats.requestsFinished >= 10, 'All requests finished'); await expect(datasetItems.length > 5 && datasetItems.length < 15, 'Number of dataset items'); await expect( - validateDataset(datasetItems, ['url', 'manufacturer', 'title', 'sku', 'currentPrice', 'availableInStock']), + validateDataset(datasetItems, ['manufacturer', 'title', 'sku', 'currentPrice', 'availableInStock']), 'Dataset items validation', ); +// `url` is checked separately: validateDataset matches it against a regex that +// rejects the fixture's 127.0.0.1 origin. +await expect( + datasetItems.every((item) => URL.canParse(item.url) && new URL(item.url).pathname.startsWith('/products/')), + 'Dataset items have product URLs', +); diff --git a/test/e2e/puppeteer-store-pagination/actor/main.js b/test/e2e/puppeteer-store-pagination/actor/main.js index c9e1b0da758f..9c609ae4a643 100644 --- a/test/e2e/puppeteer-store-pagination/actor/main.js +++ b/test/e2e/puppeteer-store-pagination/actor/main.js @@ -1,6 +1,69 @@ +import http from 'node:http'; + import { Actor } from 'apify'; import { Dataset, PuppeteerCrawler } from '@crawlee/puppeteer'; +// Self-contained fixture: three paginated listing pages, each linking to +// product detail pages, using the class names the crawler selects on. +const PAGE_SIZE = 6; +const PAGE_COUNT = 3; +const MANUFACTURERS = ['sony', 'denon', 'sennheiser', 'yamaha', 'pioneer', 'klipsch']; + +const products = Array.from({ length: PAGE_SIZE * PAGE_COUNT }, (_, i) => ({ + slug: `${MANUFACTURERS[i % MANUFACTURERS.length]}-model-${i + 1}`, + title: `Model ${i + 1}`, + sku: `SKU-${100 + i}`, + // Thousands separator so the handler's comma stripping is exercised. + price: `$${(1000 + i * 10).toLocaleString('en-US')}.00`, + inStock: i % 3 !== 0, +})); + +const listingPage = (pageNo) => ` +All TVs, page ${pageNo} + + ${products + .slice((pageNo - 1) * PAGE_SIZE, pageNo * PAGE_SIZE) + .map((p) => `${p.title}`) + .join('\n ')} + ${pageNo < PAGE_COUNT ? `Next` : ''} +`; + +const detailPage = (product) => ` +${product.title} + +

${product.title}

+ ${product.sku} + ${product.price} + Regular price + ${product.inStock ? 'In stock' : 'Out of stock'} +`; + +const server = http.createServer((req, res) => { + const { pathname, searchParams } = new URL(req.url, 'http://127.0.0.1'); + let body; + + if (pathname === '/collections/all-tvs') { + const pageNo = Number(searchParams.get('page') ?? 1); + if (pageNo >= 1 && pageNo <= PAGE_COUNT) body = listingPage(pageNo); + } else if (pathname.startsWith('/products/')) { + const product = products.find((p) => p.slug === pathname.slice('/products/'.length)); + if (product) body = detailPage(product); + } + + if (body === undefined) { + res.statusCode = 404; + res.end('Not Found'); + return; + } + + res.writeHead(200, { 'content-type': 'text/html; charset=utf-8' }); + res.end(body); +}); + +await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); +const { port } = server.address(); +const baseUrl = `http://127.0.0.1:${port}`; + await Actor.init({ storage: process.env.STORAGE_IMPLEMENTATION === 'LOCAL' @@ -9,14 +72,9 @@ await Actor.init({ }); const crawler = new PuppeteerCrawler({ - // The store rate-limits the platform's shared egress IP, so crawl through a proxy. - proxyConfiguration: await Actor.createProxyConfiguration(), maxRequestsPerCrawl: 10, preNavigationHooks: [ - async ({ page }, goToOptions) => { - await page.evaluateOnNewDocument(() => { - localStorage.setItem('themeExitPopup', 'true'); - }); + (_crawlingContext, goToOptions) => { goToOptions.waitUntil = ['networkidle2']; }, ], @@ -25,7 +83,7 @@ const crawler = new PuppeteerCrawler({ crawler.router.addHandler('START', async ({ log, enqueueLinks, page }) => { log.info('Store opened'); const nextButtonSelector = '.pagination__next'; - // enqueue product details from the first three pages of the store + // enqueue product details from the first two pages of the store for (let pageNo = 1; pageNo < 3; pageNo++) { // Wait for network events to finish await page.waitForNetworkIdle({ concurrency: 2 }); @@ -33,7 +91,7 @@ crawler.router.addHandler('START', async ({ log, enqueueLinks, page }) => { await enqueueLinks({ selector: 'a.product-item__image-wrapper', label: 'DETAIL', - globs: ['https://warehouse-theme-metal.myshopify.com/*/*'], + globs: [`${baseUrl}/*/*`], }); log.info(`Enqueued actors for page ${pageNo}`); log.info('Loading the next page'); @@ -44,8 +102,8 @@ crawler.router.addHandler('START', async ({ log, enqueueLinks, page }) => { crawler.router.addHandler('DETAIL', async ({ log, page, request: { url } }) => { log.info(`Scraping ${url}`); - const urlPart = url.split('/').slice(-1); // ['sennheiser-mke-440-professional-stereo-shotgun-microphone-mke-440'] - const manufacturer = urlPart[0].split('-')[0]; // 'sennheiser' + const urlPart = url.split('/').slice(-1); // ['sony-model-1'] + const manufacturer = urlPart[0].split('-')[0]; // 'sony' const title = await page .locator('.product-meta h1') @@ -80,8 +138,8 @@ crawler.router.addHandler('DETAIL', async ({ log, page, request: { url } }) => { await Dataset.pushData(results); }); -await crawler.run([ - { url: 'https://warehouse-theme-metal.myshopify.com/collections/all-tvs', userData: { label: 'START' } }, -]); +await crawler.run([{ url: `${baseUrl}/collections/all-tvs`, userData: { label: 'START' } }]); + +server.close(); await Actor.exit({ exit: Actor.isAtHome() }); diff --git a/test/e2e/puppeteer-store-pagination/test.mjs b/test/e2e/puppeteer-store-pagination/test.mjs index 8f87841e7009..06670dd9353c 100644 --- a/test/e2e/puppeteer-store-pagination/test.mjs +++ b/test/e2e/puppeteer-store-pagination/test.mjs @@ -8,6 +8,12 @@ const { stats, datasetItems } = await runActor(testActorDirname, 16384); await expect(stats.requestsFinished >= 10, 'All requests finished'); await expect(datasetItems.length > 5 && datasetItems.length < 15, 'Number of dataset items'); await expect( - validateDataset(datasetItems, ['url', 'manufacturer', 'title', 'sku', 'currentPrice', 'availableInStock']), + validateDataset(datasetItems, ['manufacturer', 'title', 'sku', 'currentPrice', 'availableInStock']), 'Dataset items validation', ); +// `url` is checked separately: validateDataset matches it against a regex that +// rejects the fixture's 127.0.0.1 origin. +await expect( + datasetItems.every((item) => URL.canParse(item.url) && new URL(item.url).pathname.startsWith('/products/')), + 'Dataset items have product URLs', +); diff --git a/test/e2e/tools.mjs b/test/e2e/tools.mjs index c47615d26be9..8ba4899d233c 100644 --- a/test/e2e/tools.mjs +++ b/test/e2e/tools.mjs @@ -21,9 +21,16 @@ function execSync(command, options) { } /** + * The index is not always 0: AdaptivePlaywrightCrawler discards the Statistics + * the base crawler created and installs its own, which lands on the next id. * @param {string} name */ -const isPrivateEntry = (name) => name === 'SDK_CRAWLER_STATISTICS_0' || name === 'SDK_SESSION_POOL_STATE'; +const isCrawlerStatisticsKey = (name) => name.startsWith('SDK_CRAWLER_STATISTICS_'); + +/** + * @param {string} name + */ +const isPrivateEntry = (name) => isCrawlerStatisticsKey(name) || name === 'SDK_SESSION_POOL_STATE'; export const SKIPPED_TEST_CLOSE_CODE = 404; @@ -49,14 +56,19 @@ export function getStorage(dirName) { * @param {string} dirName */ export async function getStats(dirName) { - const dir = getStorage(dirName); - const path = join(dir, `key_value_stores/default/SDK_CRAWLER_STATISTICS_0.json`); + const dir = join(getStorage(dirName), 'key_value_stores/default'); + + if (!existsSync(dir)) { + return false; + } + + const [statsFile] = (await readdir(dir)).filter((name) => isCrawlerStatisticsKey(name)).sort(); - if (!existsSync(path)) { + if (!statsFile) { return false; } - return fs.readJSON(path); + return fs.readJSON(join(dir, statsFile)); } /** @@ -217,7 +229,12 @@ export async function runActor(dirName, memory = 4096) { const runTook = (runFinishedAt.getTime() - runStartedAt.getTime()) / 1000; console.log(`[run] View run: https://console.apify.com/view/runs/${runId} [run took ${runTook}s]`); - const statsRecord = await client.keyValueStore(defaultKeyValueStoreId).getRecord('SDK_CRAWLER_STATISTICS_0'); + const { items: kvKeys } = await client.keyValueStore(defaultKeyValueStoreId).listKeys(); + const [statsKey] = kvKeys + .map(({ key }) => key) + .filter((key) => isCrawlerStatisticsKey(key)) + .sort(); + const statsRecord = statsKey && (await client.keyValueStore(defaultKeyValueStoreId).getRecord(statsKey)); stats = statsRecord?.value; const { items } = await client.dataset(defaultDatasetId).listItems();