From 268214814138ecb9cf4c90f8c6f194842c5e56c8 Mon Sep 17 00:00:00 2001 From: Daniel Bate Date: Wed, 17 Jan 2024 12:08:47 +0000 Subject: [PATCH] feat: implement browser compatibility testing (#1630) * feat: add browser testing infastructure * feat: reorganise crypto tests * feat: refactor fs promises usage * chore: changeset * chore: remove hardlinked deps * feat: add browser and os test matrix * feat: add missing os variable to test ci * feat: add no frozen lock file to browser test ci * feat: support further packages with browser testing * feat: add no frozen lockfile to browser install script * feat: add conditional name to CI test stage * feat: fix CI test matrix stage naem * feat: implement no frozen lockfile for final install in test ci * feat: change live test stage name * chore: rebuild * chore: change live ci stage to e2e Co-authored-by: Anderson Arboleya * chore: add doc to test ci name Co-authored-by: Anderson Arboleya * feat: group crypto browser and node tests * chore: use array of obj for test matrix * test: add missing hasher testr * chore: add no console lint rule to browser script * chore: remove browser test hardlink script * chore: rebuild --------- Co-authored-by: Anderson Arboleya --- .changeset/sharp-clocks-camp.md | 2 + .github/workflows/test.yaml | 27 +- internal/check-tests/src/all.test.ts | 1 + internal/check-tests/src/browser.test.ts | 10 + internal/check-tests/src/index.ts | 8 +- package.json | 6 +- packages/abi-coder/src/coders/b256.test.ts | 1 + packages/abi-coder/src/coders/b512.test.ts | 1 + packages/abi-coder/src/coders/byte.test.ts | 1 + packages/abi-coder/src/coders/enum.test.ts | 1 + packages/abi-coder/src/coders/number.test.ts | 1 + packages/abi-coder/src/coders/option.test.ts | 1 + .../abi-coder/src/coders/raw-slice.test.ts | 1 + .../abi-coder/src/coders/stdString.test.ts | 1 + packages/abi-coder/src/coders/string.test.ts | 1 + packages/abi-coder/src/coders/struct.test.ts | 1 + packages/abi-coder/src/coders/tuple.test.ts | 1 + packages/abi-coder/src/coders/u64.test.ts | 1 + packages/abi-coder/src/utilities.test.ts | 1 + packages/address/src/address.test.ts | 1 + packages/crypto/test/aes-ctr.test.ts | 9 +- packages/crypto/test/bufferFromString.test.ts | 43 +- .../crypto/test/encryptJsonWalletData.test.ts | 25 +- packages/crypto/test/envs.ts | 7 - packages/crypto/test/stringFromBuffer.test.ts | 36 +- packages/errors/src/fuel-error.test.ts | 1 + packages/errors/src/test-utils.test.ts | 3 +- .../expect-to-throw-fuel-error.test.ts | 1 + .../errors/src/test-utils/safeExec.test.ts | 1 + packages/hasher/src/hasher.test.ts | 9 +- packages/hdwallet/src/hdwallet.test.ts | 1 + packages/math/src/bn.test.ts | 1 + packages/mnemonic/src/mnemonic.test.ts | 1 + packages/mnemonic/src/utils.test.ts | 1 + .../test/features/predicate-functions.test.ts | 1 + .../features/predicate-transactions.test.ts | 1 + packages/providers/test/memory-cache.test.ts | 1 + packages/providers/test/retry.test.ts | 1 + packages/signer/src/signer.test.ts | 1 + .../src/coders/byte-array.test.ts | 1 + .../transactions/src/coders/input.test.ts | 1 + .../transactions/src/coders/output.test.ts | 1 + .../transactions/src/coders/policy.test.ts | 1 + .../transactions/src/coders/receipt.test.ts | 1 + .../src/coders/storage-slot.test.ts | 1 + .../src/coders/transaction.test.ts | 1 + .../src/coders/tx-pointer.test.ts | 1 + .../transactions/src/coders/utxo-id.test.ts | 1 + .../transactions/src/coders/witness.test.ts | 1 + packages/utils/src/index.test.ts | 1 + .../src/test-utils/expectToBeInRange.test.ts | 1 + packages/utils/src/utils/arrayify.test.ts | 1 + .../utils/src/utils/capitalizeString.test.ts | 1 + .../utils/src/utils/chunkAndPadBytes.test.ts | 1 + packages/utils/src/utils/concat.test.ts | 1 + packages/utils/src/utils/hexlify.test.ts | 1 + .../utils/src/utils/normalizeString.test.ts | 1 + .../src/storages/memory-storage.test.ts | 1 + .../src/vaults/mnemonic-vault.test.ts | 1 + .../src/vaults/privatekey-vault.test.ts | 1 + packages/wallet/src/test-utils/launchNode.ts | 3 +- pnpm-lock.yaml | 1141 ++++++++++++++++- scripts/tests-ci.sh | 12 +- scripts/tests-coverage-merge.ts | 7 +- scripts/tests-find.sh | 6 +- scripts/tests-validate.sh | 2 +- vite.base.config.mts | 5 +- vite.browser.config.mts | 36 + vite.node.config.mts | 8 +- 69 files changed, 1332 insertions(+), 121 deletions(-) create mode 100644 .changeset/sharp-clocks-camp.md create mode 100644 internal/check-tests/src/browser.test.ts delete mode 100644 packages/crypto/test/envs.ts create mode 100644 vite.browser.config.mts diff --git a/.changeset/sharp-clocks-camp.md b/.changeset/sharp-clocks-camp.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/sharp-clocks-camp.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index cdc92441e5d..284bf461a69 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -19,12 +19,17 @@ jobs: environments: runs-on: ubuntu-latest - name: ${{ matrix.env }} - v${{ matrix.version }} + # name will be node@ or browser + name: ${{ matrix.env.name }}${{ matrix.env.name == 'node' && '@' || ''}}${{ matrix.env.name == 'node' && matrix.env.version || ''}} strategy: fail-fast: false matrix: - env: [node] - version: [18.18.2, 20] + env: + [ + { name: node, version: 18.18.2 }, + { name: node, version: 20 }, + { name: browser }, + ] timeout-minutes: 25 steps: - name: Checkout @@ -33,7 +38,7 @@ jobs: - name: CI Setup uses: ./.github/actions/test-setup with: - node-version: ${{ matrix.version }} + node-version: ${{ matrix.env.version || 20 }} - name: Verify package.json integrity run: pnpm lint:package-jsons @@ -51,14 +56,14 @@ jobs: - name: Validate Tests run: pnpm test:validate - - name: Run Tests - ${{ matrix.env }} - run: pnpm ci:test --${{ matrix.env }} + - name: Run Tests - ${{ matrix.env.name }} + run: pnpm ci:test --${{ matrix.env.name }} - - name: Upload Coverage - ${{ matrix.env }} + - name: Upload Coverage - ${{ matrix.env.name }} uses: actions/upload-artifact@v2 with: - name: ${{ matrix.env }} - path: coverage/environments/${{ matrix.env }} + name: ${{ matrix.env.name }} + path: coverage/environments/${{ matrix.env.name }} test: runs-on: ubuntu-latest @@ -126,8 +131,8 @@ jobs: mode: recreate create_if_not_exists: true - live-tests: - name: Run Live Tests + test-e2e: + name: e2e if: github.head_ref == 'changeset-release/master' runs-on: ubuntu-latest timeout-minutes: 5 diff --git a/internal/check-tests/src/all.test.ts b/internal/check-tests/src/all.test.ts index b3b824a4e04..8e2a0847a9c 100644 --- a/internal/check-tests/src/all.test.ts +++ b/internal/check-tests/src/all.test.ts @@ -2,6 +2,7 @@ import { testAll } from './index'; /** * @group node + * @group browser */ describe('in:everywhere', () => { it('should work everywhere', () => { diff --git a/internal/check-tests/src/browser.test.ts b/internal/check-tests/src/browser.test.ts new file mode 100644 index 00000000000..2cac616e56a --- /dev/null +++ b/internal/check-tests/src/browser.test.ts @@ -0,0 +1,10 @@ +import { testEach } from './index'; + +/** + * @group browser + */ +describe('in:browser', () => { + it('should work on browser', () => { + expect(testEach()).toEqual('browser'); + }); +}); diff --git a/internal/check-tests/src/index.ts b/internal/check-tests/src/index.ts index 6dbd7b308d0..b78b737db7e 100644 --- a/internal/check-tests/src/index.ts +++ b/internal/check-tests/src/index.ts @@ -1,13 +1,17 @@ +const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined'; + const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null; export const testEach = (): string => { let env: string; - if (isNode) { + if (isBrowser) { + env = 'browser'; + } else if (isNode) { env = 'node'; } else { - throw new Error('Oops, invalid test environment detected'); + throw new Error('Oops, no browser/node detected'); } return env; diff --git a/package.json b/package.json index c734d9b9069..4323563d386 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "test:coverage-diff": "tsx ./scripts/tests-coverage-diff.ts", "test:watch": "vitest --watch --config vite.node.config.mts $(scripts/tests-find.sh --node)", "test:validate": "./scripts/tests-validate.sh", + "test:browser": "vitest --run --coverage --config vite.browser.config.mts $(scripts/tests-find.sh --browser)", "test:e2e": "vitest --run --config vite.node.config.mts $(scripts/tests-find.sh --e2e)", "lint": "run-s lint:check prettier:check", "lint:check": "eslint . --ext .ts --max-warnings 0", @@ -62,6 +63,7 @@ "@types/web": "^0.0.65", "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", + "@vitest/browser": "^1.1.3", "@vitest/coverage-istanbul": "^1.1.3", "compare-versions": "^6.1.0", "conventional-changelog-angular": "^5.0.13", @@ -80,6 +82,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-tsdoc": "^0.2.17", "glob": "^10.2.6", + "memfs": "^4.6.0", "nodemon": "^2.0.22", "npm-run-all": "^4.1.5", "nyc": "^15.1.0", @@ -96,7 +99,8 @@ "vite": "^5.0.11", "vite-plugin-node-polyfills": "^0.17.0", "vite-plugin-plain-text": "^1.4.2", - "vitest": "^1.1.3" + "vitest": "^1.1.3", + "webdriverio": "^8.27.0" }, "pnpm": { "overrides": { diff --git a/packages/abi-coder/src/coders/b256.test.ts b/packages/abi-coder/src/coders/b256.test.ts index b2efc0e6a37..e581cd7b1e6 100644 --- a/packages/abi-coder/src/coders/b256.test.ts +++ b/packages/abi-coder/src/coders/b256.test.ts @@ -5,6 +5,7 @@ import { B256Coder } from './b256'; /** * @group node + * @group browser */ describe('B256Coder', () => { const B256_DECODED = '0xd5579c46dfcc7f18207013e65b44e4cb4e2c2298f4ac457ba8f82743f31e930b'; diff --git a/packages/abi-coder/src/coders/b512.test.ts b/packages/abi-coder/src/coders/b512.test.ts index 27b49b5fe76..2a62b738a26 100644 --- a/packages/abi-coder/src/coders/b512.test.ts +++ b/packages/abi-coder/src/coders/b512.test.ts @@ -5,6 +5,7 @@ import { B512Coder } from './b512'; /** * @group node + * @group browser */ describe('B512Coder', () => { const B512_DECODED = diff --git a/packages/abi-coder/src/coders/byte.test.ts b/packages/abi-coder/src/coders/byte.test.ts index 38ba85c2abe..d2038acc5f3 100644 --- a/packages/abi-coder/src/coders/byte.test.ts +++ b/packages/abi-coder/src/coders/byte.test.ts @@ -7,6 +7,7 @@ import { ByteCoder } from './byte'; /** * @group node + * @group browser */ describe('ByteCoder', () => { it('should encode a byte', () => { diff --git a/packages/abi-coder/src/coders/enum.test.ts b/packages/abi-coder/src/coders/enum.test.ts index c4122337c63..2bf17f9888f 100644 --- a/packages/abi-coder/src/coders/enum.test.ts +++ b/packages/abi-coder/src/coders/enum.test.ts @@ -11,6 +11,7 @@ import { U64Coder } from './u64'; /** * @group node + * @group browser */ describe('EnumCoder', () => { const coder = new EnumCoder('TestEnum', { a: new BooleanCoder(), b: new U64Coder() }); diff --git a/packages/abi-coder/src/coders/number.test.ts b/packages/abi-coder/src/coders/number.test.ts index 168dad897f9..13f610d5558 100644 --- a/packages/abi-coder/src/coders/number.test.ts +++ b/packages/abi-coder/src/coders/number.test.ts @@ -7,6 +7,7 @@ import { NumberCoder } from './number'; /** * @group node + * @group browser */ describe('NumberCoder', () => { it('should encode min u8 number as a u8 coder', () => { diff --git a/packages/abi-coder/src/coders/option.test.ts b/packages/abi-coder/src/coders/option.test.ts index a527f288534..75c661d63f0 100644 --- a/packages/abi-coder/src/coders/option.test.ts +++ b/packages/abi-coder/src/coders/option.test.ts @@ -10,6 +10,7 @@ import { U64Coder } from './u64'; /** * @group node + * @group browser */ describe('OptionCoder', () => { it('should encode a some u64 option ', () => { diff --git a/packages/abi-coder/src/coders/raw-slice.test.ts b/packages/abi-coder/src/coders/raw-slice.test.ts index 93b0e0c9821..d863cb25954 100644 --- a/packages/abi-coder/src/coders/raw-slice.test.ts +++ b/packages/abi-coder/src/coders/raw-slice.test.ts @@ -8,6 +8,7 @@ import { RawSliceCoder } from './raw-slice'; /** * @group node + * @group browser */ describe('RawSliceCoder', () => { it('should encode a raw-slice', () => { diff --git a/packages/abi-coder/src/coders/stdString.test.ts b/packages/abi-coder/src/coders/stdString.test.ts index 1d32caa54e6..28cf0a16f76 100644 --- a/packages/abi-coder/src/coders/stdString.test.ts +++ b/packages/abi-coder/src/coders/stdString.test.ts @@ -7,6 +7,7 @@ import { StdStringCoder } from './stdString'; /** * @group node + * @group browser */ describe('StdStringCoder', () => { it('should encode an empty string', () => { diff --git a/packages/abi-coder/src/coders/string.test.ts b/packages/abi-coder/src/coders/string.test.ts index f5399e38298..c7056a7debc 100644 --- a/packages/abi-coder/src/coders/string.test.ts +++ b/packages/abi-coder/src/coders/string.test.ts @@ -7,6 +7,7 @@ import { StringCoder } from './string'; /** * @group node + * @group browser */ describe('StringCoder', () => { const STRING_MIN_DECODED = ''; diff --git a/packages/abi-coder/src/coders/struct.test.ts b/packages/abi-coder/src/coders/struct.test.ts index e30c66b81d5..de89457b19a 100644 --- a/packages/abi-coder/src/coders/struct.test.ts +++ b/packages/abi-coder/src/coders/struct.test.ts @@ -11,6 +11,7 @@ import { U64Coder } from './u64'; /** * @group node + * @group browser */ describe('StructCoder', () => { const STRUCT_NAME = 'TestStruct'; diff --git a/packages/abi-coder/src/coders/tuple.test.ts b/packages/abi-coder/src/coders/tuple.test.ts index 7b0859954a6..a8d15eeeeff 100644 --- a/packages/abi-coder/src/coders/tuple.test.ts +++ b/packages/abi-coder/src/coders/tuple.test.ts @@ -11,6 +11,7 @@ import { U64Coder } from './u64'; /** * @group node + * @group browser */ describe('Tuple Coder', () => { const coder = new TupleCoder<[BooleanCoder, U64Coder]>([new BooleanCoder(), new U64Coder()]); diff --git a/packages/abi-coder/src/coders/u64.test.ts b/packages/abi-coder/src/coders/u64.test.ts index 10edb6edbe5..a22e1ff42c0 100644 --- a/packages/abi-coder/src/coders/u64.test.ts +++ b/packages/abi-coder/src/coders/u64.test.ts @@ -8,6 +8,7 @@ import { U64Coder } from './u64'; /** * @group node + * @group browser */ describe('U64Coder', () => { const coder = new U64Coder(); diff --git a/packages/abi-coder/src/utilities.test.ts b/packages/abi-coder/src/utilities.test.ts index c399459d6d0..d0e04ab5294 100644 --- a/packages/abi-coder/src/utilities.test.ts +++ b/packages/abi-coder/src/utilities.test.ts @@ -5,6 +5,7 @@ import { unpackDynamicData, concatWithDynamicData } from './utilities'; /** * @group node + * @group browser */ describe('Abi Coder Utilities', () => { it('can concatWithVectorData [no dynamicData, should match original concat]', () => { diff --git a/packages/address/src/address.test.ts b/packages/address/src/address.test.ts index fdeeb199ead..964e1e7dc76 100644 --- a/packages/address/src/address.test.ts +++ b/packages/address/src/address.test.ts @@ -27,6 +27,7 @@ const expectedB256Address = '0xf1e92c42b90934aa6372e30bc568a326f6e66a1a0288595e6 /** * @group node + * @group browser */ describe('Address utils', () => { test('fromBech32 (bech32 to decoded bech32)', () => { diff --git a/packages/crypto/test/aes-ctr.test.ts b/packages/crypto/test/aes-ctr.test.ts index 94a05523ed6..46b4ce26710 100644 --- a/packages/crypto/test/aes-ctr.test.ts +++ b/packages/crypto/test/aes-ctr.test.ts @@ -1,10 +1,11 @@ -import { envs } from './envs'; +import { encrypt, decrypt } from '..'; /** * @group node + * @group browser */ describe('Keystore', () => { - it.each(envs)('Encrypt and Decrypt', async ({ encrypt, decrypt }) => { + it('Encrypt and Decrypt', async () => { const password = '0b540281-f87b-49ca-be37-2264c7f260f7'; const data = { name: 'test', @@ -20,7 +21,7 @@ describe('Keystore', () => { expect(decryptedResult).toEqual(data); }); - it.each(envs)('Decrypt with wrong password should throw', async ({ encrypt, decrypt }) => { + it('Decrypt with wrong password should throw', async () => { const password = '0b540281-f87b-49ca-be37-2264c7f260f7'; const data = { name: 'test', @@ -30,7 +31,7 @@ describe('Keystore', () => { await expect(decrypt(`${password}123`, encryptedResult)).rejects.toThrow('Invalid credentials'); }); - it.each(envs)('Decrypt Loop', async ({ decrypt }) => { + it('Decrypt Loop', async () => { const INPUTS = [ { data: '07yJczBTonXWyKdJfEcx', diff --git a/packages/crypto/test/bufferFromString.test.ts b/packages/crypto/test/bufferFromString.test.ts index 23474312fc8..992ba30a122 100644 --- a/packages/crypto/test/bufferFromString.test.ts +++ b/packages/crypto/test/bufferFromString.test.ts @@ -1,34 +1,27 @@ -import { envs } from './envs'; +import { bufferFromString } from '..'; /** * @group node + * @group browser */ describe('bufferFromString', () => { const buffer = new Uint8Array([104, 101, 108, 108, 111]); // ASCII values for "hello" - it.each(envs)( - 'should correctly convert string to Uint8Array with base64 encoding in %s environment', - ({ bufferFromString }) => { - const string = 'aGVsbG8='; // "hello" in Base64 - const result = bufferFromString(string, 'base64'); - expect(result).toStrictEqual(buffer); // ASCII values for "hello" - } - ); + it('should correctly convert string to Uint8Array with base64 encoding in a node environment', () => { + const string = 'aGVsbG8='; // "hello" in Base64 + const result = bufferFromString(string, 'base64'); + expect(result).toStrictEqual(buffer); // ASCII values for "hello" + }); - it.each(envs)( - 'should correctly convert string to Uint8Array with utf-8 encoding in %s environment', - ({ bufferFromString }) => { - const string = 'hello'; - const result = bufferFromString(string, 'utf-8'); - expect(result).toStrictEqual(buffer); // ASCII values for "hello" - } - ); - it.each(envs)( - 'should correctly convert string to Uint8Array with hex encoding in %s environment', - ({ bufferFromString }) => { - const string = '68656c6c6f'; // "hello" in Hex - const result = bufferFromString(string, 'hex'); - expect(result).toStrictEqual(buffer); // ASCII values for "hello" - } - ); + it('should correctly convert string to Uint8Array with utf-8 encoding in a node environment', () => { + const string = 'hello'; + const result = bufferFromString(string, 'utf-8'); + expect(result).toStrictEqual(buffer); // ASCII values for "hello" + }); + + it('should correctly convert string to Uint8Array with hex encoding in a node environment', () => { + const string = '68656c6c6f'; // "hello" in Hex + const result = bufferFromString(string, 'hex'); + expect(result).toStrictEqual(buffer); // ASCII values for "hello" + }); }); diff --git a/packages/crypto/test/encryptJsonWalletData.test.ts b/packages/crypto/test/encryptJsonWalletData.test.ts index 8926e319b26..56438e86140 100644 --- a/packages/crypto/test/encryptJsonWalletData.test.ts +++ b/packages/crypto/test/encryptJsonWalletData.test.ts @@ -1,21 +1,18 @@ -import { envs } from './envs'; - +import { encryptJsonWalletData, decryptJsonWalletData, randomBytes } from '..'; /** * @group node + * @group browser */ describe('encryptJsonWalletData', () => { - it.each(envs)( - 'should encrypt and decrypt json wallet data correctly in %s environment', - async ({ encryptJsonWalletData, decryptJsonWalletData, randomBytes }) => { - const testData = new Uint8Array([104, 101, 108, 108, 111]); - const testKey = randomBytes(16); - const testIv = randomBytes(16); + it('should encrypt and decrypt json wallet data correctly in a node environment', async () => { + const testData = new Uint8Array([104, 101, 108, 108, 111]); + const testKey = randomBytes(16); + const testIv = randomBytes(16); - const encryptedData = await encryptJsonWalletData(testData, testKey, testIv); - expect(encryptedData).not.toEqual(testData); // ensure data was encrypted + const encryptedData = await encryptJsonWalletData(testData, testKey, testIv); + expect(encryptedData).not.toEqual(testData); // ensure data was encrypted - const decryptedData = await decryptJsonWalletData(encryptedData, testKey, testIv); - expect(decryptedData).toEqual(testData); // ensure data was decrypted correctly - } - ); + const decryptedData = await decryptJsonWalletData(encryptedData, testKey, testIv); + expect(decryptedData).toEqual(testData); // ensure data was decrypted correctly + }); }); diff --git a/packages/crypto/test/envs.ts b/packages/crypto/test/envs.ts deleted file mode 100644 index 007eb74ee88..00000000000 --- a/packages/crypto/test/envs.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as node from '../src/index'; -// import * as browser from '../src/index.browser'; - -export const envs = [ - { toString: () => 'node', ...node }, - // { toString: () => 'browser', ...browser }, TODO: Uncomment when running tests in browser is supported -]; diff --git a/packages/crypto/test/stringFromBuffer.test.ts b/packages/crypto/test/stringFromBuffer.test.ts index 2b2c29108dd..1647b13ccc6 100644 --- a/packages/crypto/test/stringFromBuffer.test.ts +++ b/packages/crypto/test/stringFromBuffer.test.ts @@ -1,32 +1,24 @@ -import { envs } from './envs'; +import { stringFromBuffer } from '..'; /** * @group node + * @group browser */ describe('stringFromBuffer', () => { const buffer = new Uint8Array([104, 101, 108, 108, 111]); // ASCII values for "hello" - it.each(envs)( - 'should correctly convert Uint8Array to string with base64 encoding in %s environment', - ({ stringFromBuffer }) => { - const result = stringFromBuffer(buffer, 'base64'); - expect(result).toEqual('aGVsbG8='); // "hello" in Base64 - } - ); + it('should correctly convert Uint8Array to string with base64 encoding in a node environment', () => { + const result = stringFromBuffer(buffer, 'base64'); + expect(result).toEqual('aGVsbG8='); // "hello" in Base64 + }); - it.each(envs)( - 'should correctly convert Uint8Array to string with utf-8 encoding in %s environment', - ({ stringFromBuffer }) => { - const result = stringFromBuffer(buffer, 'utf-8'); - expect(result).toEqual('hello'); - } - ); + it('should correctly convert Uint8Array to string with utf-8 encoding in a node environment', () => { + const result = stringFromBuffer(buffer, 'utf-8'); + expect(result).toEqual('hello'); + }); - it.each(envs)( - 'should correctly convert Uint8Array to string with hex encoding in %s environment', - ({ stringFromBuffer }) => { - const result = stringFromBuffer(buffer, 'hex'); - expect(result).toEqual('68656c6c6f'); // "hello" in Hex - } - ); + it('should correctly convert Uint8Array to string with hex encoding in a node environment', () => { + const result = stringFromBuffer(buffer, 'hex'); + expect(result).toEqual('68656c6c6f'); // "hello" in Hex + }); }); diff --git a/packages/errors/src/fuel-error.test.ts b/packages/errors/src/fuel-error.test.ts index e52041ceb83..33e73fd5e24 100644 --- a/packages/errors/src/fuel-error.test.ts +++ b/packages/errors/src/fuel-error.test.ts @@ -5,6 +5,7 @@ import { expectToThrowFuelError } from './test-utils/expect-to-throw-fuel-error' /** * @group node + * @group browser */ it('has properties set as expected on creation', () => { const message = 'whatever'; diff --git a/packages/errors/src/test-utils.test.ts b/packages/errors/src/test-utils.test.ts index d5fda478afd..f1352fcb13a 100644 --- a/packages/errors/src/test-utils.test.ts +++ b/packages/errors/src/test-utils.test.ts @@ -2,8 +2,9 @@ import * as indexMod from './test-utils'; /** * @group node + * @group browser */ -describe(__filename, () => { +describe('test utils', () => { test('should export all test utilities', () => { expect(indexMod.expectToThrowFuelError).toBeTruthy(); expect(indexMod.safeExec).toBeTruthy(); diff --git a/packages/errors/src/test-utils/expect-to-throw-fuel-error.test.ts b/packages/errors/src/test-utils/expect-to-throw-fuel-error.test.ts index 61fdc22e0ff..bd20f07f351 100644 --- a/packages/errors/src/test-utils/expect-to-throw-fuel-error.test.ts +++ b/packages/errors/src/test-utils/expect-to-throw-fuel-error.test.ts @@ -4,6 +4,7 @@ import { expectToThrowFuelError } from './expect-to-throw-fuel-error'; /** * @group node + * @group browser */ describe('expect-to-throw-fuel-error', () => { const otherError = new Error('Original Error'); diff --git a/packages/errors/src/test-utils/safeExec.test.ts b/packages/errors/src/test-utils/safeExec.test.ts index 00aedacbc1a..09aea1a8b89 100644 --- a/packages/errors/src/test-utils/safeExec.test.ts +++ b/packages/errors/src/test-utils/safeExec.test.ts @@ -2,6 +2,7 @@ import { safeExec } from './safeExec'; /** * @group node + * @group browser */ describe('safeExec.js', () => { it('should catch error', async () => { diff --git a/packages/hasher/src/hasher.test.ts b/packages/hasher/src/hasher.test.ts index 3f2259dca5d..44e21432204 100644 --- a/packages/hasher/src/hasher.test.ts +++ b/packages/hasher/src/hasher.test.ts @@ -1,7 +1,8 @@ -import { hashMessage, hash } from './hasher'; +import { hashMessage, hash, uint64ToBytesBE } from './hasher'; /** * @group node + * @group browser */ describe('Hasher', () => { it('Hash message', () => { @@ -15,4 +16,10 @@ describe('Hasher', () => { '0xf5ca38f748a1d6eaf726b8a42fb575c3c71f1864a8143301782de13da2d9202b' ); }); + + it('Convert uint64 to bytes in big-endian order', () => { + const value = 1234567890; + const expectedBytes = new Uint8Array([0, 0, 0, 0, 73, 150, 2, 210]); + expect(uint64ToBytesBE(value)).toEqual(expectedBytes); + }); }); diff --git a/packages/hdwallet/src/hdwallet.test.ts b/packages/hdwallet/src/hdwallet.test.ts index 02f0209dd8f..51894aeb57f 100644 --- a/packages/hdwallet/src/hdwallet.test.ts +++ b/packages/hdwallet/src/hdwallet.test.ts @@ -3,6 +3,7 @@ import HDWalletSpec from './hdwallet-spec'; /** * @group node + * @group browser */ describe('HDWallet', () => { test("Should throw error on invalid extended key's", () => { diff --git a/packages/math/src/bn.test.ts b/packages/math/src/bn.test.ts index a06bdbcc55e..47103bdd3fa 100644 --- a/packages/math/src/bn.test.ts +++ b/packages/math/src/bn.test.ts @@ -4,6 +4,7 @@ import type { BigNumberish } from './types'; /** * @group node + * @group browser */ describe('Math - BN', () => { it('can execute operations without losing our BN reference', () => { diff --git a/packages/mnemonic/src/mnemonic.test.ts b/packages/mnemonic/src/mnemonic.test.ts index 74e90e4c8e3..f07d1c4ccd0 100644 --- a/packages/mnemonic/src/mnemonic.test.ts +++ b/packages/mnemonic/src/mnemonic.test.ts @@ -5,6 +5,7 @@ import MnemonicSpec from './mnemonic-specs'; /** * @group node + * @group browser */ describe('Mnemonic', () => { const mnemonic = new Mnemonic(); diff --git a/packages/mnemonic/src/utils.test.ts b/packages/mnemonic/src/utils.test.ts index e021982be06..5bcc30bd3fc 100644 --- a/packages/mnemonic/src/utils.test.ts +++ b/packages/mnemonic/src/utils.test.ts @@ -2,6 +2,7 @@ import { getWords } from './utils'; /** * @group node + * @group browser */ describe('mnemonic utils', () => { const words = ['a', 'b', 'c']; diff --git a/packages/predicate/test/features/predicate-functions.test.ts b/packages/predicate/test/features/predicate-functions.test.ts index ef6ef736798..ecdba186b48 100644 --- a/packages/predicate/test/features/predicate-functions.test.ts +++ b/packages/predicate/test/features/predicate-functions.test.ts @@ -7,6 +7,7 @@ import { defaultPredicateBytecode } from '../fixtures/bytecode/default'; /** * @group node + * @group browser */ describe('Predicate', () => { describe('Functions', () => { diff --git a/packages/predicate/test/features/predicate-transactions.test.ts b/packages/predicate/test/features/predicate-transactions.test.ts index 424265fc29d..3be2fa8d3e9 100644 --- a/packages/predicate/test/features/predicate-transactions.test.ts +++ b/packages/predicate/test/features/predicate-transactions.test.ts @@ -12,6 +12,7 @@ import { defaultPredicateBytecode } from '../fixtures/bytecode/default'; /** * @group node + * @group browser */ describe('Predicate', () => { describe('Transactions', () => { diff --git a/packages/providers/test/memory-cache.test.ts b/packages/providers/test/memory-cache.test.ts index f9950311a7e..d4060528a34 100644 --- a/packages/providers/test/memory-cache.test.ts +++ b/packages/providers/test/memory-cache.test.ts @@ -8,6 +8,7 @@ const CACHE_ITEMS = [hexlify(randomBytes(8)), randomBytes(8), randomBytes(8)]; /** * @group node + * @group browser */ describe('Memory Cache', () => { it('can construct [valid numerical ttl]', () => { diff --git a/packages/providers/test/retry.test.ts b/packages/providers/test/retry.test.ts index d6836e4a7aa..016734dc784 100644 --- a/packages/providers/test/retry.test.ts +++ b/packages/providers/test/retry.test.ts @@ -31,6 +31,7 @@ function mockFetch(maxAttempts: number, callTimes: number[]) { /** * @group node + * @group browser */ describe('Retries correctly', () => { afterEach(() => { diff --git a/packages/signer/src/signer.test.ts b/packages/signer/src/signer.test.ts index 83f192a240e..2d0635135c7 100644 --- a/packages/signer/src/signer.test.ts +++ b/packages/signer/src/signer.test.ts @@ -4,6 +4,7 @@ import { Signer } from './signer'; /** * @group node + * @group browser */ describe('Signer', () => { const expectedPrivateKey = '0x5f70feeff1f229e4a95e1056e8b4d80d0b24b565674860cc213bdb07127ce1b1'; diff --git a/packages/transactions/src/coders/byte-array.test.ts b/packages/transactions/src/coders/byte-array.test.ts index caeb41855db..9d141aabb8e 100644 --- a/packages/transactions/src/coders/byte-array.test.ts +++ b/packages/transactions/src/coders/byte-array.test.ts @@ -4,6 +4,7 @@ import { ByteArrayCoder } from './byte-array'; /** * @group node + * @group browser */ describe('ByteArrayCoder', () => { it('Can encode empty byte[]', () => { diff --git a/packages/transactions/src/coders/input.test.ts b/packages/transactions/src/coders/input.test.ts index 6efd1b38587..b7701fc3909 100644 --- a/packages/transactions/src/coders/input.test.ts +++ b/packages/transactions/src/coders/input.test.ts @@ -11,6 +11,7 @@ const MAX_U32 = 2 ** 32 - 1; /** * @group node + * @group browser */ describe('InputCoder', () => { it('Can encode Coin', () => { diff --git a/packages/transactions/src/coders/output.test.ts b/packages/transactions/src/coders/output.test.ts index e2ac475fb1a..d9e17237b30 100644 --- a/packages/transactions/src/coders/output.test.ts +++ b/packages/transactions/src/coders/output.test.ts @@ -8,6 +8,7 @@ const B256 = '0xd5579c46dfcc7f18207013e65b44e4cb4e2c2298f4ac457ba8f82743f31e930b /** * @group node + * @group browser */ describe('OutputCoder', () => { it('Can encode Coin', () => { diff --git a/packages/transactions/src/coders/policy.test.ts b/packages/transactions/src/coders/policy.test.ts index 60ae9ca18dd..b799745a912 100644 --- a/packages/transactions/src/coders/policy.test.ts +++ b/packages/transactions/src/coders/policy.test.ts @@ -7,6 +7,7 @@ import { PoliciesCoder, PolicyType } from './policy'; /** * @group node + * @group browser */ describe('PoliciesCoder', () => { describe('encode', () => { diff --git a/packages/transactions/src/coders/receipt.test.ts b/packages/transactions/src/coders/receipt.test.ts index b4faf40447b..3b4a711d0b0 100644 --- a/packages/transactions/src/coders/receipt.test.ts +++ b/packages/transactions/src/coders/receipt.test.ts @@ -12,6 +12,7 @@ const B256_ALT4 = '0x2f6d40e3ac1a172fb9445f9843440a0fc383bea238a7a35a77a3c73d369 /** * @group node + * @group browser */ describe('ReceiptCoder', () => { it('Can encode Call', () => { diff --git a/packages/transactions/src/coders/storage-slot.test.ts b/packages/transactions/src/coders/storage-slot.test.ts index 01527f3f4bb..72d0842ac1d 100644 --- a/packages/transactions/src/coders/storage-slot.test.ts +++ b/packages/transactions/src/coders/storage-slot.test.ts @@ -6,6 +6,7 @@ import { StorageSlotCoder } from './storage-slot'; /** * @group node + * @group browser */ describe('StorageSlotCoder', () => { it('Can encode and decode', () => { diff --git a/packages/transactions/src/coders/transaction.test.ts b/packages/transactions/src/coders/transaction.test.ts index cbde253b9bf..3c313736bec 100644 --- a/packages/transactions/src/coders/transaction.test.ts +++ b/packages/transactions/src/coders/transaction.test.ts @@ -14,6 +14,7 @@ const U8 = 1; /** * @group node + * @group browser */ describe('TransactionCoder', () => { it('Can encode/decode TransactionScript without inputs, outputs and witnesses', () => { diff --git a/packages/transactions/src/coders/tx-pointer.test.ts b/packages/transactions/src/coders/tx-pointer.test.ts index 46f0a201e14..a7d962be817 100644 --- a/packages/transactions/src/coders/tx-pointer.test.ts +++ b/packages/transactions/src/coders/tx-pointer.test.ts @@ -7,6 +7,7 @@ const B256 = '0xd5579c46dfcc7f18207013e65b44e4cb4e2c2298f4ac457ba8f82743f31e930b /** * @group node + * @group browser */ describe('TxPointerCoder', () => { it('can encode TxPointer', () => { diff --git a/packages/transactions/src/coders/utxo-id.test.ts b/packages/transactions/src/coders/utxo-id.test.ts index beeaa0956fc..0e4f9366f92 100644 --- a/packages/transactions/src/coders/utxo-id.test.ts +++ b/packages/transactions/src/coders/utxo-id.test.ts @@ -7,6 +7,7 @@ const B256 = '0xd5579c46dfcc7f18207013e65b44e4cb4e2c2298f4ac457ba8f82743f31e930b /** * @group node + * @group browser */ describe('UtxoIdCoder', () => { it('can encode UtxoId', () => { diff --git a/packages/transactions/src/coders/witness.test.ts b/packages/transactions/src/coders/witness.test.ts index 3c9f895306f..206049651e4 100644 --- a/packages/transactions/src/coders/witness.test.ts +++ b/packages/transactions/src/coders/witness.test.ts @@ -5,6 +5,7 @@ import { WitnessCoder } from './witness'; /** * @group node + * @group browser */ describe('WitnessCoder', () => { it('Can encode empty Witness', () => { diff --git a/packages/utils/src/index.test.ts b/packages/utils/src/index.test.ts index ac3d8e09c21..4d28f6ff581 100644 --- a/packages/utils/src/index.test.ts +++ b/packages/utils/src/index.test.ts @@ -2,6 +2,7 @@ import * as indexMod from '.'; /** * @group node + * @group browser */ describe('index.js', () => { test('should export all utilities', () => { diff --git a/packages/utils/src/test-utils/expectToBeInRange.test.ts b/packages/utils/src/test-utils/expectToBeInRange.test.ts index 01521764792..6ebe61e1e7a 100644 --- a/packages/utils/src/test-utils/expectToBeInRange.test.ts +++ b/packages/utils/src/test-utils/expectToBeInRange.test.ts @@ -2,6 +2,7 @@ import { expectToBeInRange } from './expectToBeInRange'; /** * @group node + * @group browser */ describe('expectValueToBeInRange', () => { it('should throw an error when value is less than the minimum', () => { diff --git a/packages/utils/src/utils/arrayify.test.ts b/packages/utils/src/utils/arrayify.test.ts index 2720fd5d507..970d5682612 100644 --- a/packages/utils/src/utils/arrayify.test.ts +++ b/packages/utils/src/utils/arrayify.test.ts @@ -2,6 +2,7 @@ import { arrayify } from './arrayify'; /** * @group node + * @group browser */ describe('arrayify', () => { it('returns Uint8Array from Uint8Array', () => { diff --git a/packages/utils/src/utils/capitalizeString.test.ts b/packages/utils/src/utils/capitalizeString.test.ts index f24e37f9d04..9ae643912be 100644 --- a/packages/utils/src/utils/capitalizeString.test.ts +++ b/packages/utils/src/utils/capitalizeString.test.ts @@ -2,6 +2,7 @@ import { capitalizeString } from './capitalizeString'; /** * @group node + * @group browser */ describe('capitalizeString', () => { test('should capitalize string', () => { diff --git a/packages/utils/src/utils/chunkAndPadBytes.test.ts b/packages/utils/src/utils/chunkAndPadBytes.test.ts index d6bce6573ea..a4587965d65 100644 --- a/packages/utils/src/utils/chunkAndPadBytes.test.ts +++ b/packages/utils/src/utils/chunkAndPadBytes.test.ts @@ -4,6 +4,7 @@ import { chunkAndPadBytes } from './chunkAndPadBytes'; /** * @group node + * @group browser */ describe('chunkAndPadBytes', () => { it('can chunk and pad bytes to 16 KiB', () => { diff --git a/packages/utils/src/utils/concat.test.ts b/packages/utils/src/utils/concat.test.ts index 5a29c0da734..763b4cbf611 100644 --- a/packages/utils/src/utils/concat.test.ts +++ b/packages/utils/src/utils/concat.test.ts @@ -3,6 +3,7 @@ import { concat, concatBytes } from './concat'; /** * @group node + * @group browser */ describe('concat', () => { it('should concatenate multiple BytesLike into a single Uint8Array', () => { diff --git a/packages/utils/src/utils/hexlify.test.ts b/packages/utils/src/utils/hexlify.test.ts index e0a81e6ee06..e90d7bcd87d 100644 --- a/packages/utils/src/utils/hexlify.test.ts +++ b/packages/utils/src/utils/hexlify.test.ts @@ -2,6 +2,7 @@ import { hexlify } from './hexlify'; /** * @group node + * @group browser */ describe('hexlify', () => { it('returns hex from bytes', () => { diff --git a/packages/utils/src/utils/normalizeString.test.ts b/packages/utils/src/utils/normalizeString.test.ts index 6d636b872ba..c8f00c79620 100644 --- a/packages/utils/src/utils/normalizeString.test.ts +++ b/packages/utils/src/utils/normalizeString.test.ts @@ -4,6 +4,7 @@ import { normalizeString } from './normalizeString'; /** * @group node + * @group browser */ describe('normalize.ts', () => { test('should normalize strings', () => { diff --git a/packages/wallet-manager/src/storages/memory-storage.test.ts b/packages/wallet-manager/src/storages/memory-storage.test.ts index 0685c5ae922..bc3a0ca6c8a 100644 --- a/packages/wallet-manager/src/storages/memory-storage.test.ts +++ b/packages/wallet-manager/src/storages/memory-storage.test.ts @@ -2,6 +2,7 @@ import MemoryStorage from './memory-storage'; /** * @group node + * @group browser */ describe('MemoryStorage', () => { it('Test storage operations', async () => { diff --git a/packages/wallet-manager/src/vaults/mnemonic-vault.test.ts b/packages/wallet-manager/src/vaults/mnemonic-vault.test.ts index 5bd60465187..0705ae4275f 100644 --- a/packages/wallet-manager/src/vaults/mnemonic-vault.test.ts +++ b/packages/wallet-manager/src/vaults/mnemonic-vault.test.ts @@ -8,6 +8,7 @@ import { MnemonicVault } from './mnemonic-vault'; /** * @group node + * @group browser */ describe('MnemonicVault', () => { let provider: Provider; diff --git a/packages/wallet-manager/src/vaults/privatekey-vault.test.ts b/packages/wallet-manager/src/vaults/privatekey-vault.test.ts index 43a135ae028..b6954c4c0c9 100644 --- a/packages/wallet-manager/src/vaults/privatekey-vault.test.ts +++ b/packages/wallet-manager/src/vaults/privatekey-vault.test.ts @@ -8,6 +8,7 @@ import { PrivateKeyVault } from './privatekey-vault'; /** * @group node + * @group browser */ describe('PrivateKeyVault', () => { let provider: Provider; diff --git a/packages/wallet/src/test-utils/launchNode.ts b/packages/wallet/src/test-utils/launchNode.ts index c0284ab08f8..d9b30601e67 100644 --- a/packages/wallet/src/test-utils/launchNode.ts +++ b/packages/wallet/src/test-utils/launchNode.ts @@ -7,7 +7,6 @@ import { spawn } from 'child_process'; import { randomUUID } from 'crypto'; import { hexlify } from 'ethers'; import fsSync from 'fs'; -import fs from 'fs/promises'; import os from 'os'; import path from 'path'; import { getPortPromise } from 'portfinder'; @@ -135,7 +134,7 @@ export const launchNode = async ({ } // Write a temporary chain configuration file. - await fs.writeFile(tempChainConfigFilePath, JSON.stringify(chainConfig), 'utf8'); + fsSync.writeFileSync(tempChainConfigFilePath, JSON.stringify(chainConfig), 'utf8'); chainConfigPathToUse = tempChainConfigFilePath; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ad3fd5bc58..100b94d125a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,6 +50,9 @@ importers: '@typescript-eslint/parser': specifier: ^6.9.0 version: 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@vitest/browser': + specifier: ^1.1.3 + version: 1.1.3(vitest@1.1.3)(webdriverio@8.27.2) '@vitest/coverage-istanbul': specifier: ^1.1.3 version: 1.1.3(vitest@1.1.3) @@ -104,6 +107,9 @@ importers: glob: specifier: ^10.2.6 version: 10.2.6 + memfs: + specifier: ^4.6.0 + version: 4.6.0(quill-delta@5.1.0)(rxjs@7.8.1)(tslib@2.6.0) nodemon: specifier: ^2.0.22 version: 2.0.22 @@ -154,7 +160,10 @@ importers: version: 1.4.2 vitest: specifier: ^1.1.3 - version: 1.1.3(@types/node@18.15.3) + version: 1.1.3(@types/node@18.15.3)(@vitest/browser@1.1.3) + webdriverio: + specifier: ^8.27.0 + version: 8.27.2(typescript@5.2.2) apps/demo-fuels: dependencies: @@ -6104,6 +6113,48 @@ packages: webpack-dev-server: 4.15.1(webpack@5.88.0) dev: false + /@polka/url@1.0.0-next.24: + resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} + dev: true + + /@puppeteer/browsers@1.4.6(typescript@5.2.2): + resolution: {integrity: sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==} + engines: {node: '>=16.3.0'} + hasBin: true + peerDependencies: + typescript: '>= 4.7.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + debug: 4.3.4 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.3.0 + tar-fs: 3.0.4 + typescript: 5.2.2 + unbzip2-stream: 1.4.3 + yargs: 17.7.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@puppeteer/browsers@1.9.1: + resolution: {integrity: sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==} + engines: {node: '>=16.3.0'} + hasBin: true + dependencies: + debug: 4.3.4 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.3.1 + tar-fs: 3.0.4 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + dev: true + /@radix-ui/colors@2.1.0: resolution: {integrity: sha512-gcBnxjS2u2c6thQz/9K1+Pt2ZYcm5WKU4SLi0emYkRmYbVUw+37rlc5wgLtYOsSsRP9nxVtbJJYj6WVO7UUmZg==} dev: false @@ -8354,6 +8405,11 @@ packages: /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + /@sindresorhus/is@5.6.0: + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + dev: true + /@sinonjs/commons@1.8.6: resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} dependencies: @@ -8509,6 +8565,13 @@ packages: tslib: 2.6.0 dev: false + /@szmarczak/http-timer@5.0.1: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + dependencies: + defer-to-connect: 2.0.1 + dev: true + /@tabler/icons@2.44.0: resolution: {integrity: sha512-WPPtihDcAwEm1QZM9MXQw6+r/R2/qx7KMU1eegsi9DsqBLAb0W2kbt6e/syvd6j9c+6XNpRVBW1ziGqSWQAWOg==} dev: false @@ -8752,6 +8815,10 @@ packages: engines: {node: '>= 6'} dev: false + /@tootallnate/quickjs-emscripten@0.23.0: + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + dev: true + /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -8910,6 +8977,10 @@ packages: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} dev: false + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: true + /@types/http-errors@2.0.1: resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} dev: false @@ -9213,6 +9284,10 @@ packages: resolution: {integrity: sha512-dl7VRSYBhxhOVxHA/ec8e7EzGXSQJrrGvRgLQWxusaJk1oT4I9nLpWiqsxekYI2eAEuet05toEm+rByL0G8x2Q==} dev: true + /@types/which@2.0.2: + resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} + dev: true + /@types/ws@8.5.5: resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: @@ -9234,6 +9309,14 @@ packages: '@types/yargs-parser': 21.0.0 dev: false + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + requiresBuild: true + dependencies: + '@types/node': 20.10.5 + dev: true + optional: true + /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@5.2.2): resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9704,6 +9787,28 @@ packages: vue: 3.2.47 dev: true + /@vitest/browser@1.1.3(vitest@1.1.3)(webdriverio@8.27.2): + resolution: {integrity: sha512-ksI0V8YqonFYfjVYMPTvDR84i7ix7QPL2Sc8G2mHirVGAf4jJS3uC/CsifRLe5/E2r8QUhHbAdZQpvMCqBJV5w==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: ^1.0.0 + webdriverio: '*' + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@vitest/utils': 1.1.3 + magic-string: 0.30.5 + sirv: 2.0.4 + vitest: 1.1.3(@types/node@18.15.3)(@vitest/browser@1.1.3) + webdriverio: 8.27.2(typescript@5.2.2) + dev: true + /@vitest/coverage-istanbul@1.1.3(vitest@1.1.3): resolution: {integrity: sha512-pqx/RaLjJ7oxsbi0Vc/CjyXBXd86yQ0lKq1PPnk9BMNLqMTEWwfcTelcNrl41yK+IVRhHlFtwcjDva3VslbMMQ==} peerDependencies: @@ -9718,7 +9823,7 @@ packages: magicast: 0.3.2 picocolors: 1.0.0 test-exclude: 6.0.0 - vitest: 1.1.3(@types/node@18.15.3) + vitest: 1.1.3(@types/node@18.15.3)(@vitest/browser@1.1.3) transitivePeerDependencies: - supports-color dev: true @@ -9874,6 +9979,70 @@ packages: - vue dev: true + /@wdio/config@8.27.2: + resolution: {integrity: sha512-qR1r7K7/jsQhi9g5NiW40lgbvbzCcwwk8nz07hzTj6m8fQ8TXkQPob2fnrlDaNrXjzbZC4od0uv0a5fimK9YOQ==} + engines: {node: ^16.13 || >=18} + dependencies: + '@wdio/logger': 8.24.12 + '@wdio/types': 8.27.2 + '@wdio/utils': 8.27.2 + decamelize: 6.0.0 + deepmerge-ts: 5.1.0 + glob: 10.2.6 + import-meta-resolve: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@wdio/logger@8.24.12: + resolution: {integrity: sha512-QisOiVIWKTUCf1H7S+DOtC+gruhlpimQrUXfWMTeeh672PvAJYnTpOJDWA+BtXfsikkUYFAzAaq8SeMJk8rqKg==} + engines: {node: ^16.13 || >=18} + dependencies: + chalk: 5.3.0 + loglevel: 1.8.1 + loglevel-plugin-prefix: 0.8.4 + strip-ansi: 7.1.0 + dev: true + + /@wdio/protocols@8.24.12: + resolution: {integrity: sha512-QnVj3FkapmVD3h2zoZk+ZQ8gevSj9D9MiIQIy8eOnY4FAneYZ9R9GvoW+mgNcCZO8S8++S/jZHetR8n+8Q808g==} + dev: true + + /@wdio/repl@8.24.12: + resolution: {integrity: sha512-321F3sWafnlw93uRTSjEBVuvWCxTkWNDs7ektQS15drrroL3TMeFOynu4rDrIz0jXD9Vas0HCD2Tq/P0uxFLdw==} + engines: {node: ^16.13 || >=18} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@wdio/types@8.27.2: + resolution: {integrity: sha512-z/TtSQysEtAUNh+DooOs22G7xotTsJC2RcIZKaVtHY4Gl6lF+tn8kLRXD79jem2ta1byB1TpW62K366k1vzcLw==} + engines: {node: ^16.13 || >=18} + dependencies: + '@types/node': 20.10.5 + dev: true + + /@wdio/utils@8.27.2: + resolution: {integrity: sha512-jWxUhGjlZ4L3uOsP96oLKWjkITpoH/KPTtKzU7xdoVGhd1LXK4d/Fr8cTFTNkDBXM7yuM7C+EMmQ8HJHR55KTA==} + engines: {node: ^16.13 || >=18} + dependencies: + '@puppeteer/browsers': 1.9.1 + '@wdio/logger': 8.24.12 + '@wdio/types': 8.27.2 + decamelize: 6.0.0 + deepmerge-ts: 5.1.0 + edgedriver: 5.3.9 + geckodriver: 4.3.0 + get-port: 7.0.0 + import-meta-resolve: 4.0.0 + locate-app: 2.2.7 + safaridriver: 0.1.2 + split2: 4.2.0 + wait-port: 1.1.0 + transitivePeerDependencies: + - supports-color + dev: true + /@webassemblyjs/ast@1.11.6: resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: @@ -10295,6 +10464,31 @@ packages: default-require-extensions: 3.0.1 dev: true + /archiver-utils@4.0.1: + resolution: {integrity: sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg==} + engines: {node: '>= 12.0.0'} + dependencies: + glob: 8.1.0 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash: 4.17.21 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + dev: true + + /archiver@6.0.1: + resolution: {integrity: sha512-CXGy4poOLBKptiZH//VlWdFuUC1RESbdZjGjILwBuZ73P7WkAUN0htfSfBq/7k6FRFlpu7bg4JOkj1vU9G6jcQ==} + engines: {node: '>= 12.0.0'} + dependencies: + archiver-utils: 4.0.1 + async: 3.2.4 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 3.1.6 + zip-stream: 5.0.1 + dev: true + /archy@1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} dev: true @@ -10514,6 +10708,13 @@ packages: /ast-types-flow@0.0.7: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + /ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.0 + dev: true + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -10527,7 +10728,6 @@ packages: /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: false /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} @@ -10581,6 +10781,10 @@ packages: dequal: 2.0.3 dev: true + /b4a@1.6.4: + resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} + dev: true + /babel-jest@27.5.1(@babel/core@7.22.5): resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -10852,6 +11056,11 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true + /basic-ftp@5.0.4: + resolution: {integrity: sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==} + engines: {node: '>=10.0.0'} + dev: true + /batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: false @@ -10890,6 +11099,13 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + /binary@0.3.0: + resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} + dependencies: + buffers: 0.1.1 + chainsaw: 0.1.0 + dev: true + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -10898,6 +11114,10 @@ packages: readable-stream: 3.6.2 dev: true + /bluebird@3.4.7: + resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} + dev: true + /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} dev: false @@ -11075,10 +11295,19 @@ packages: dependencies: node-int64: 0.4.0 + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false + /buffer-indexof-polyfill@1.0.2: + resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==} + engines: {node: '>=0.10'} + dev: true + /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} dev: true @@ -11097,6 +11326,11 @@ packages: ieee754: 1.2.1 dev: true + /buffers@0.1.1: + resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} + engines: {node: '>=0.2.0'} + dev: true + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -11153,6 +11387,24 @@ packages: engines: {node: '>=8'} dev: true + /cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: true + + /cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.0 + responselike: 3.0.0 + dev: true + /caching-transform@4.0.0: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} @@ -11255,6 +11507,12 @@ packages: type-detect: 4.0.8 dev: true + /chainsaw@0.1.0: + resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==} + dependencies: + traverse: 0.3.9 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -11286,6 +11544,11 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /change-case-all@1.0.14: resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} dependencies: @@ -11401,6 +11664,15 @@ packages: engines: {node: '>=6.0'} dev: false + /chromium-bidi@0.4.16(devtools-protocol@0.0.1147663): + resolution: {integrity: sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==} + peerDependencies: + devtools-protocol: '*' + dependencies: + devtools-protocol: 0.0.1147663 + mitt: 3.0.0 + dev: true + /ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} @@ -11577,7 +11849,6 @@ packages: /commander@9.4.1: resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} engines: {node: ^12.20.0 || >=14} - dev: false /comment-parser@1.4.0: resolution: {integrity: sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==} @@ -11606,6 +11877,16 @@ packages: resolution: {integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==} dev: true + /compress-commons@5.0.1: + resolution: {integrity: sha512-MPh//1cERdLtqwO3pOFLeXtpuai0Y2WCd5AhtKxznqM7WtaMYaOEMSgn45d9D10sIHSfIKE603HlOp8OPGrvag==} + engines: {node: '>= 12.0.0'} + dependencies: + crc-32: 1.2.2 + crc32-stream: 5.0.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + dev: true + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -11714,7 +11995,6 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false /cosmiconfig-toml-loader@1.0.0: resolution: {integrity: sha512-H/2gurFWVi7xXvCyvsWRLCMekl4tITJcX0QEsDMpzxtuxDyM59xLatYNg4s/k9AA/HdtCYfj2su8mgA0GSDLDA==} @@ -11790,6 +12070,20 @@ packages: markdown-table: 2.0.0 dev: true + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: true + + /crc32-stream@5.0.0: + resolution: {integrity: sha512-B0EPa1UK+qnpBZpG+7FgPCu0J2ETLpXq09o9BkLkEAhdB6Z61Qo4pJ3JYu0c+Qi+/SAL7QThqnzS06pmSSyZaw==} + engines: {node: '>= 12.0.0'} + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + dev: true + /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: @@ -12001,6 +12295,10 @@ packages: nth-check: 2.1.1 dev: false + /css-shorthand-properties@1.1.1: + resolution: {integrity: sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==} + dev: true + /css-tree@1.0.0-alpha.37: resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} engines: {node: '>=8.0.0'} @@ -12033,6 +12331,10 @@ packages: source-map-js: 1.0.2 dev: false + /css-value@0.0.1: + resolution: {integrity: sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==} + dev: true + /css-what@3.4.2: resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} engines: {node: '>= 6'} @@ -12176,6 +12478,16 @@ packages: /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + + /data-uri-to-buffer@6.0.1: + resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} + engines: {node: '>= 14'} + dev: true + /data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -12243,10 +12555,22 @@ packages: engines: {node: '>=0.10.0'} dev: true + /decamelize@6.0.0: + resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: false + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: true + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: false @@ -12289,6 +12613,11 @@ packages: engines: {node: '>=4.0.0'} dev: false + /deepmerge-ts@5.1.0: + resolution: {integrity: sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==} + engines: {node: '>=16.0.0'} + dev: true + /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -12332,6 +12661,11 @@ packages: clone: 1.0.4 dev: true + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: true + /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} @@ -12366,6 +12700,15 @@ packages: object-keys: 1.1.1 dev: true + /degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -12430,6 +12773,14 @@ packages: - supports-color dev: false + /devtools-protocol@0.0.1147663: + resolution: {integrity: sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==} + dev: true + + /devtools-protocol@0.0.1239539: + resolution: {integrity: sha512-uS7hZVqZxGyZwR8lX/8wWyNLGEYs1wWWxN7qeRC+wBZ4VM5JXYwCJg8hofEna5yX0W2cavpjHOE4ukHXLHlEaA==} + dev: true + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -12614,6 +12965,12 @@ packages: engines: {node: '>=4'} dev: true + /duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + dependencies: + readable-stream: 2.3.8 + dev: true + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: false @@ -12621,6 +12978,27 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + /edge-paths@3.0.5: + resolution: {integrity: sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==} + engines: {node: '>=14.0.0'} + dependencies: + '@types/which': 2.0.2 + which: 2.0.2 + dev: true + + /edgedriver@5.3.9: + resolution: {integrity: sha512-G0wNgFMFRDnFfKaXG2R6HiyVHqhKwdQ3EgoxW3wPlns2wKqem7F+HgkWBcevN7Vz0nN4AXtskID7/6jsYDXcKw==} + hasBin: true + requiresBuild: true + dependencies: + '@wdio/logger': 8.24.12 + decamelize: 6.0.0 + edge-paths: 3.0.5 + node-fetch: 3.3.2 + unzipper: 0.10.14 + which: 4.0.0 + dev: true + /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false @@ -12677,6 +13055,12 @@ packages: engines: {node: '>= 0.8'} dev: false + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + /enhanced-resolve@5.15.0: resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} @@ -12990,6 +13374,18 @@ packages: source-map: 0.6.1 dev: false + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0)(eslint@8.52.0): resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} @@ -14080,10 +14476,28 @@ packages: engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} dev: false + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + dev: true + /fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} dev: true + /fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -14095,6 +14509,10 @@ packages: resolution: {integrity: sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==} dev: true + /fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + dev: true + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} @@ -14174,6 +14592,20 @@ packages: - encoding dev: true + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true + /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -14373,6 +14805,11 @@ packages: resolution: {integrity: sha512-rahaRMkN8P8d/tgK/BLPX+WBVM27NbvdXBxqQujBtkDAIFspaRqN7Od7lfdGQA6KAD+f82fYCLBq1ipvcu8qLw==} dev: true + /form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + dev: true + /form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} @@ -14394,6 +14831,13 @@ packages: web-streams-polyfill: 4.0.0-beta.3 dev: true + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: true + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -14487,6 +14931,16 @@ packages: requiresBuild: true optional: true + /fstream@1.0.12: + resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==} + engines: {node: '>=0.6'} + dependencies: + graceful-fs: 4.2.11 + inherits: 2.0.4 + mkdirp: 0.5.6 + rimraf: 2.6.3 + dev: true + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} @@ -14515,6 +14969,24 @@ packages: /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + /geckodriver@4.3.0: + resolution: {integrity: sha512-QfpvxFsMORwKpvnLslkHCr3NTCczHAvkte6+pQGsiUZXKBe6mO4TTb727b+9KMVSK6XZqhR6ZwImKdP+F5vS6A==} + engines: {node: ^16.13 || >=18 || >=20} + hasBin: true + requiresBuild: true + dependencies: + '@wdio/logger': 8.24.12 + decamelize: 6.0.0 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + node-fetch: 3.3.2 + tar-fs: 3.0.4 + unzipper: 0.10.14 + which: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -14569,14 +15041,26 @@ packages: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} + /get-port@7.0.0: + resolution: {integrity: sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==} + engines: {node: '>=16'} + dev: true + /get-stdin@5.0.1: resolution: {integrity: sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==} engines: {node: '>=0.12.0'} dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} @@ -14602,6 +15086,18 @@ packages: resolve-pkg-maps: 1.0.0 dev: true + /get-uri@6.0.2: + resolution: {integrity: sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==} + engines: {node: '>= 14'} + dependencies: + basic-ftp: 5.0.4 + data-uri-to-buffer: 6.0.1 + debug: 4.3.4 + fs-extra: 8.1.0 + transitivePeerDependencies: + - supports-color + dev: true + /get-url-origin@1.0.1: resolution: {integrity: sha512-MMSKo16gB2+6CjWy55jNdIAqUEaKgw3LzZCb8wVVtFrhoQ78EXyuYXxDdn3COI3A4Xr4ZfM3fZa9RTjO6DOTxw==} dev: true @@ -14664,6 +15160,17 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + /global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -14727,6 +15234,23 @@ packages: dependencies: get-intrinsic: 1.2.1 + /got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -15009,6 +15533,10 @@ packages: entities: 2.2.0 dev: false + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: true + /http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: false @@ -15059,6 +15587,16 @@ packages: - supports-color dev: true + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /http-proxy-middleware@2.0.6(@types/express@4.17.17): resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} @@ -15089,6 +15627,14 @@ packages: - debug dev: false + /http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: true + /https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true @@ -15113,6 +15659,16 @@ packages: - supports-color dev: true + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true @@ -15131,6 +15687,11 @@ packages: engines: {node: '>=16.17.0'} dev: true + /hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -15210,6 +15771,10 @@ packages: resolve-cwd: 3.0.0 dev: false + /import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -15278,6 +15843,14 @@ packages: dependencies: loose-envify: 1.4.0 + /ip@1.1.8: + resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} + dev: true + + /ip@2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + dev: true + /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -15524,6 +16097,11 @@ packages: engines: {node: '>=10'} dev: false + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: false @@ -15657,7 +16235,6 @@ packages: /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: false /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -15665,6 +16242,11 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + dev: true + /isomorphic-timers-promises@1.0.1: resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==} engines: {node: '>=10'} @@ -16510,6 +17092,26 @@ packages: engines: {node: '>=4'} hasBin: true + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-joy@9.9.1(quill-delta@5.1.0)(rxjs@7.8.1)(tslib@2.6.0): + resolution: {integrity: sha512-/d7th2nbQRBQ/nqTkBe6KjjvDciSwn9UICmndwk3Ed/Bk9AqkTRm4PnLVfXG4DKbT0rEY0nKnwE7NqZlqKE6kg==} + engines: {node: '>=10.0'} + hasBin: true + peerDependencies: + quill-delta: ^5 + rxjs: '7' + tslib: '2' + dependencies: + arg: 5.0.2 + hyperdyperid: 1.2.0 + quill-delta: 5.1.0 + rxjs: 7.8.1 + tslib: 2.6.0 + dev: true + /json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true @@ -16588,6 +17190,12 @@ packages: array-includes: 3.1.6 object.assign: 4.1.4 + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -16606,6 +17214,11 @@ packages: engines: {node: '>= 8'} dev: false + /ky@0.33.3: + resolution: {integrity: sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==} + engines: {node: '>=14.16'} + dev: true + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} @@ -16628,6 +17241,13 @@ packages: shell-quote: 1.8.1 dev: false + /lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + dependencies: + readable-stream: 2.3.8 + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -16661,6 +17281,10 @@ packages: uc.micro: 1.0.6 dev: true + /listenercount@1.0.1: + resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==} + dev: true + /listr2@4.0.5: resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} engines: {node: '>=12'} @@ -16742,6 +17366,14 @@ packages: pkg-types: 1.0.3 dev: true + /locate-app@2.2.7: + resolution: {integrity: sha512-4NR8WidaCRCozDZ0BW0U5wL91EPuuIshFun2//4Kpca4DIi5XPQHAUEbj+MQt7NihZTYs+HKfOuaoqurZ58bUg==} + dependencies: + n12: 1.8.10 + type-fest: 2.13.0 + userhome: 1.0.0 + dev: true + /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -16778,6 +17410,10 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: false + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: true + /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: false @@ -16786,6 +17422,10 @@ packages: resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} dev: true + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: false @@ -16808,6 +17448,10 @@ packages: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: false + /lodash.zip@4.2.0: + resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -16829,6 +17473,15 @@ packages: wrap-ansi: 6.2.0 dev: true + /loglevel-plugin-prefix@0.8.4: + resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} + dev: true + + /loglevel@1.8.1: + resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} + engines: {node: '>= 0.6.0'} + dev: true + /long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} dev: false @@ -16860,6 +17513,11 @@ packages: dependencies: tslib: 2.6.0 + /lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /lru-cache@10.0.0: resolution: {integrity: sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==} engines: {node: 14 || >=16.14} @@ -16882,6 +17540,11 @@ packages: dependencies: yallist: 4.0.0 + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true + /lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} @@ -17124,6 +17787,20 @@ packages: fs-monkey: 1.0.4 dev: false + /memfs@4.6.0(quill-delta@5.1.0)(rxjs@7.8.1)(tslib@2.6.0): + resolution: {integrity: sha512-I6mhA1//KEZfKRQT9LujyW6lRbX7RkC24xKododIDO3AGShcaFAMKElv1yFGWX8fD4UaSiwasr3NeQ5TdtHY1A==} + engines: {node: '>= 4.0.0'} + peerDependencies: + tslib: '2' + dependencies: + json-joy: 9.9.1(quill-delta@5.1.0)(rxjs@7.8.1)(tslib@2.6.0) + thingies: 1.15.0(tslib@2.6.0) + tslib: 2.6.0 + transitivePeerDependencies: + - quill-delta + - rxjs + dev: true + /memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} @@ -17286,6 +17963,16 @@ packages: engines: {node: '>=12'} dev: true + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: true + + /mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -17330,7 +18017,6 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: false /minimatch@6.2.0: resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==} @@ -17392,11 +18078,19 @@ packages: yallist: 4.0.0 dev: false + /mitt@3.0.0: + resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==} + dev: true + /mixme@0.5.9: resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} engines: {node: '>= 8.0.0'} dev: true + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -17417,6 +18111,11 @@ packages: ufo: 1.3.2 dev: true + /mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + dev: true + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: false @@ -17446,6 +18145,10 @@ packages: object-assign: 4.1.1 thenify-all: 1.6.0 + /n12@1.8.10: + resolution: {integrity: sha512-/iREutgBDWCLwSqVOTKyAXRfToeY8Y9PmFPk3egwWVf6UYUyL9UXIaVnEkW4mx+g3dBGBywfvWilfKFEkiGK+A==} + dev: true + /nanoclone@0.2.1: resolution: {integrity: sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==} dev: false @@ -17476,6 +18179,11 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: false + /netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: true + /next@13.4.4(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-C5S0ysM0Ily9McL4Jb48nOQHT1BukOWI59uC3X/xCMlYIh9rJZCv7nzG92J6e1cOBqQbKovlpgvHWFmz4eKKEA==} engines: {node: '>=16.8.0'} @@ -17595,6 +18303,15 @@ packages: dependencies: whatwg-url: 5.0.0 + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -17702,6 +18419,11 @@ packages: engines: {node: '>=10'} dev: false + /normalize-url@8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + dev: true + /npm-path@2.0.4: resolution: {integrity: sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==} engines: {node: '>=0.8'} @@ -18011,6 +18733,11 @@ packages: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} dev: true + /p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + dev: true + /p-defer@1.0.0: resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} engines: {node: '>=4'} @@ -18144,6 +18871,31 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + /pac-proxy-agent@7.0.1: + resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} + engines: {node: '>= 14'} + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.0 + debug: 4.3.4 + get-uri: 6.0.2 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + pac-resolver: 7.0.0 + socks-proxy-agent: 8.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /pac-resolver@7.0.0: + resolution: {integrity: sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==} + engines: {node: '>= 14'} + dependencies: + degenerator: 5.0.1 + ip: 1.1.8 + netmask: 2.0.2 + dev: true + /package-hash@4.0.0: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} @@ -18345,6 +19097,10 @@ packages: sha.js: 2.4.11 dev: true + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: false @@ -19343,7 +20099,6 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false /process-on-spawn@1.0.0: resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} @@ -19357,6 +20112,11 @@ packages: engines: {node: '>= 0.6.0'} dev: true + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + /promise@7.3.1: resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} dependencies: @@ -19396,6 +20156,42 @@ packages: ipaddr.js: 1.9.1 dev: false + /proxy-agent@6.3.0: + resolution: {integrity: sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.1 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /proxy-agent@6.3.1: + resolution: {integrity: sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.1 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -19419,6 +20215,13 @@ packages: safe-buffer: 5.2.1 dev: true + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true @@ -19427,6 +20230,29 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} + /puppeteer-core@20.9.0(typescript@5.2.2): + resolution: {integrity: sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==} + engines: {node: '>=16.3.0'} + peerDependencies: + typescript: '>= 4.7.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@puppeteer/browsers': 1.4.6(typescript@5.2.2) + chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663) + cross-fetch: 4.0.0 + debug: 4.3.4 + devtools-protocol: 0.0.1147663 + typescript: 5.2.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /pvtsutils@1.3.2: resolution: {integrity: sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==} dependencies: @@ -19456,6 +20282,10 @@ packages: side-channel: 1.0.4 dev: true + /query-selector-shadow-dom@1.0.1: + resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==} + dev: true + /querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} @@ -19468,11 +20298,29 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + dev: true + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /quill-delta@5.1.0: + resolution: {integrity: sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==} + engines: {node: '>= 12.0.0'} + dependencies: + fast-diff: 1.3.0 + lodash.clonedeep: 4.5.0 + lodash.isequal: 4.5.0 + dev: true + /raf@3.4.1: resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} dependencies: @@ -19946,7 +20794,6 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: false /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -19956,6 +20803,12 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + dependencies: + minimatch: 5.1.6 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -20160,6 +21013,10 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: false + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: true + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -20234,6 +21091,19 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + dependencies: + lowercase-keys: 3.0.0 + dev: true + + /resq@1.11.0: + resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} + dependencies: + fast-deep-equal: 2.0.1 + dev: true + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -20255,6 +21125,10 @@ packages: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true + /rgb2hex@0.2.5: + resolution: {integrity: sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==} + dev: true + /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} hasBin: true @@ -20350,6 +21224,10 @@ packages: tslib: 2.6.0 dev: true + /safaridriver@0.1.2: + resolution: {integrity: sha512-4R309+gWflJktzPXBQCobbWEHlzC4aK3a+Ov3tz2Ib2aBxiwd11phkdIBH1l0EO22x24CJMUQkpKFumRriCSRg==} + dev: true + /safe-array-concat@1.0.0: resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} engines: {node: '>=0.4'} @@ -20372,7 +21250,6 @@ packages: /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -20557,6 +21434,13 @@ packages: upper-case-first: 2.0.2 dev: true + /serialize-error@11.0.3: + resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} + engines: {node: '>=14.16'} + dependencies: + type-fest: 2.19.0 + dev: true + /serialize-javascript@4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: @@ -20706,6 +21590,15 @@ packages: semver: 7.0.0 dev: true + /sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.24 + mrmime: 2.0.0 + totalist: 3.0.1 + dev: true + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: false @@ -20737,6 +21630,11 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true + /smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} @@ -20765,6 +21663,25 @@ packages: websocket-driver: 0.7.4 dev: false + /socks-proxy-agent@8.0.2: + resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + socks: 2.7.1 + transitivePeerDependencies: + - supports-color + dev: true + + /socks@2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + dependencies: + ip: 2.0.0 + smart-buffer: 4.2.0 + dev: true + /source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: false @@ -20878,6 +21795,11 @@ packages: - supports-color dev: false + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: true + /sponge-case@1.0.1: resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} dependencies: @@ -20954,6 +21876,13 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + /streamx@2.15.6: + resolution: {integrity: sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==} + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + dev: true + /string-env-interpolation@1.0.1: resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} dev: true @@ -21066,7 +21995,6 @@ packages: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - dev: false /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -21357,6 +22285,22 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + /tar-fs@3.0.4: + resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} + dependencies: + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 3.1.6 + dev: true + + /tar-stream@3.1.6: + resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} + dependencies: + b4a: 1.6.4 + fast-fifo: 1.3.2 + streamx: 2.15.6 + dev: true + /tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} @@ -21520,6 +22464,15 @@ packages: dependencies: any-promise: 1.3.0 + /thingies@1.15.0(tslib@2.6.0): + resolution: {integrity: sha512-ZSJlvEpD8QllYim0VSGlbAoob/iPrTWNlV/m8ltizMvMmzzU2gVJvHfH9ijLstyciWF70ZiQXqz+BCXWJq+ZQw==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + dependencies: + tslib: 2.6.0 + dev: true + /throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} dev: false @@ -21602,6 +22555,11 @@ packages: resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} dev: false + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: true + /touch@3.1.0: resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} hasBin: true @@ -21634,6 +22592,10 @@ packages: punycode: 2.3.0 dev: false + /traverse@0.3.9: + resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} + dev: true + /traverse@0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true @@ -21931,6 +22893,16 @@ packages: engines: {node: '>=8'} dev: true + /type-fest@2.13.0: + resolution: {integrity: sha512-lPfAm42MxE4/456+QyIaaVBAwgpJb6xZ8PRu09utnhPdWwcyj9vgy6Sq0Z5yNbJ21EdxB5dRU/Qg8bsyAMtlcw==} + engines: {node: '>=12.20'} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + /type-fest@3.1.0: resolution: {integrity: sha512-StmrZmK3eD9mDF9Vt7UhqthrDSk66O9iYl5t5a0TSoVkHjl0XZx/xuc/BRz4urAXXGHOY5OLsE0RdJFIApSFmw==} engines: {node: '>=14.16'} @@ -22055,6 +23027,13 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: true + /unc-path-regex@0.1.2: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} @@ -22181,6 +23160,21 @@ packages: engines: {node: '>=8'} dev: true + /unzipper@0.10.14: + resolution: {integrity: sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==} + dependencies: + big-integer: 1.6.51 + binary: 0.3.0 + bluebird: 3.4.7 + buffer-indexof-polyfill: 1.0.2 + duplexer2: 0.1.4 + fstream: 1.0.12 + graceful-fs: 4.2.11 + listenercount: 1.0.1 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + dev: true + /upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -22293,6 +23287,11 @@ packages: react: 18.2.0 dev: false + /userhome@1.0.0: + resolution: {integrity: sha512-ayFKY3H+Pwfy4W98yPdtH1VqH4psDeyW8lYYFzfecR9d6hqLpqhecktvYR3SEEXt7vG0S1JEpciI3g94pMErig==} + engines: {node: '>= 0.8.0'} + dev: true + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -22535,7 +23534,7 @@ packages: - terser dev: true - /vitest@1.1.3(@types/node@18.15.3): + /vitest@1.1.3(@types/node@18.15.3)(@vitest/browser@1.1.3): resolution: {integrity: sha512-2l8om1NOkiA90/Y207PsEvJLYygddsOyr81wLQ20Ra8IlLKbyQncWsGZjnbkyG2KwwuTXLQjEPOJuxGMG8qJBQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -22561,6 +23560,7 @@ packages: optional: true dependencies: '@types/node': 18.15.3 + '@vitest/browser': 1.1.3(vitest@1.1.3)(webdriverio@8.27.2) '@vitest/expect': 1.1.3 '@vitest/runner': 1.1.3 '@vitest/snapshot': 1.1.3 @@ -22641,6 +23641,18 @@ packages: xml-name-validator: 3.0.0 dev: false + /wait-port@1.1.0: + resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} + engines: {node: '>=10'} + hasBin: true + dependencies: + chalk: 4.1.2 + commander: 9.4.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -22691,6 +23703,68 @@ packages: tslib: 2.6.0 dev: true + /webdriver@8.27.2: + resolution: {integrity: sha512-vY2Lr0ZNr83n0v8PjLCXtJwR9E7QGycJVS+ev2G72gI54/rFwLv58HMSbJNn8CtE27VkhtewMUPlDpSkj5wGPQ==} + engines: {node: ^16.13 || >=18} + dependencies: + '@types/node': 20.10.5 + '@types/ws': 8.5.5 + '@wdio/config': 8.27.2 + '@wdio/logger': 8.24.12 + '@wdio/protocols': 8.24.12 + '@wdio/types': 8.27.2 + '@wdio/utils': 8.27.2 + deepmerge-ts: 5.1.0 + got: 12.6.1 + ky: 0.33.3 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /webdriverio@8.27.2(typescript@5.2.2): + resolution: {integrity: sha512-X6PhKE8e8XsB33Q/KSS1zYKP2Rqkq2Nef0YKOhQO+5OTlTkeqMCjnEtyRcfmdtfAwT0DEFqMnGnUKEbTajFC4Q==} + engines: {node: ^16.13 || >=18} + peerDependencies: + devtools: ^8.14.0 + peerDependenciesMeta: + devtools: + optional: true + dependencies: + '@types/node': 20.10.5 + '@wdio/config': 8.27.2 + '@wdio/logger': 8.24.12 + '@wdio/protocols': 8.24.12 + '@wdio/repl': 8.24.12 + '@wdio/types': 8.27.2 + '@wdio/utils': 8.27.2 + archiver: 6.0.1 + aria-query: 5.3.0 + css-shorthand-properties: 1.1.1 + css-value: 0.0.1 + devtools-protocol: 0.0.1239539 + grapheme-splitter: 1.0.4 + import-meta-resolve: 4.0.0 + is-plain-obj: 4.1.0 + lodash.clonedeep: 4.5.0 + lodash.zip: 4.2.0 + minimatch: 9.0.3 + puppeteer-core: 20.9.0(typescript@5.2.2) + query-selector-shadow-dom: 1.0.1 + resq: 1.11.0 + rgb2hex: 0.2.5 + serialize-error: 11.0.3 + webdriver: 8.27.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - typescript + - utf-8-validate + dev: true + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -22975,6 +24049,14 @@ packages: dependencies: isexe: 2.0.0 + /which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 3.1.1 + dev: true + /why-is-node-running@2.2.2: resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} engines: {node: '>=8'} @@ -23333,6 +24415,19 @@ packages: yargs-parser: 20.2.9 dev: false + /yargs@17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -23346,6 +24441,13 @@ packages: yargs-parser: 21.1.1 dev: true + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -23373,6 +24475,15 @@ packages: toposort: 2.0.2 dev: false + /zip-stream@5.0.1: + resolution: {integrity: sha512-UfZ0oa0C8LI58wJ+moL46BDIMgCQbnsb+2PoiJYtonhBsMh2bq1eRBVkvjfVsqbEHd9/EgKPUuL9saSSsec8OA==} + engines: {node: '>= 12.0.0'} + dependencies: + archiver-utils: 4.0.1 + compress-commons: 5.0.1 + readable-stream: 3.6.2 + dev: true + /zod@3.21.4: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false diff --git a/scripts/tests-ci.sh b/scripts/tests-ci.sh index 12ef33d5d53..1ecfac1a748 100755 --- a/scripts/tests-ci.sh +++ b/scripts/tests-ci.sh @@ -8,8 +8,16 @@ pnpm node:run > /dev/null 2>&1 & echo "Started Fuel-Core node in background." -pnpm test -TEST_RESULT=$? +if [[ "$*" == *"--browser"* ]]; then + pnpm test:browser + TEST_RESULT=$? +elif [[ "$*" == *"--node"* ]]; then + pnpm test + TEST_RESULT=$? +else + pnpm test + TEST_RESULT=$? +fi echo "Killing Fuel-Core node." diff --git a/scripts/tests-coverage-merge.ts b/scripts/tests-coverage-merge.ts index 635f77188a8..ce2a74aae8b 100644 --- a/scripts/tests-coverage-merge.ts +++ b/scripts/tests-coverage-merge.ts @@ -5,7 +5,7 @@ import { join } from 'path'; const restructureCoverageDirectory = () => { const coverageDir = join(__dirname, '../coverage/'); const environmentsDir = join(coverageDir, '/environments/'); - const validEnvironments = ['node']; + const validEnvironments = ['node', 'browser']; const environments = readdirSync(environmentsDir); environments.forEach((environment) => { @@ -26,10 +26,11 @@ const restructureCoverageDirectory = () => { restructureCoverageDirectory(); // Merge all coverage files - execSync('nyc merge coverage/environments coverage/merged/coverage.json'); + execSync('nyc merge coverage/environments coverage/merged/coverage.json', { stdio: 'inherit' }); // Generate coverage report execSync( - 'nyc report --temp-dir=coverage/merged --report-dir=coverage/report --exclude-after-remap=false' + 'nyc report --temp-dir=coverage/merged --report-dir=coverage/report --exclude-after-remap=false', + { stdio: 'inherit' } ); })(); diff --git a/scripts/tests-find.sh b/scripts/tests-find.sh index a9809c69244..264d459b3cf 100755 --- a/scripts/tests-find.sh +++ b/scripts/tests-find.sh @@ -5,9 +5,11 @@ ROOT=$(cd "$(dirname "$0")/.."; pwd) FILES=$(find $ROOT/{apps,packages,internal} -name '*.test.ts') if [[ $* == *--all* ]]; then - grep -lE "@group\s+(node|e2e)" $FILES + grep -lE "@group\s+(node|browser|e2e)" $FILES elif [[ $* == *--node* ]]; then grep -lE "@group\s+node" $FILES +elif [[ $* == *--browser* ]]; then + grep -lE "@group\s+browser" $FILES elif [[ $* == *--e2e* ]]; then grep -lE "@group\s+e2e" $FILES -fi +fi \ No newline at end of file diff --git a/scripts/tests-validate.sh b/scripts/tests-validate.sh index 5d649a18742..74917d2fb82 100755 --- a/scripts/tests-validate.sh +++ b/scripts/tests-validate.sh @@ -3,7 +3,7 @@ ROOT=$(cd "$(dirname "$0")/.."; pwd) FILES=$(find $ROOT/{apps,packages,internal} -name '*.test.ts') -INVALID_FILES=$(grep -LE "@group\s+(node|e2e)" $FILES) +INVALID_FILES=$(grep -LE "@group\s+(node|browser|e2e)" $FILES) if [ ! -z "$INVALID_FILES" ]; then echo -e "Test files don't contain a test environment configuration:" diff --git a/vite.base.config.mts b/vite.base.config.mts index 267d6ca8df9..0f473f9900b 100644 --- a/vite.base.config.mts +++ b/vite.base.config.mts @@ -16,15 +16,12 @@ export default defineConfig({ "/apps/demo-react-vite", ], globals: true, - ui: false, setupFiles: ["./vite.env.ts"], coverage: { enabled: true, provider: "istanbul", reporter: ["json"], - include: [ - 'packages', 'internal', 'apps' - ], + include: ["packages", "internal", "apps"], exclude: [ "**/node_modules/**", "**/dist/**", diff --git a/vite.browser.config.mts b/vite.browser.config.mts new file mode 100644 index 00000000000..51b1dbc3bc1 --- /dev/null +++ b/vite.browser.config.mts @@ -0,0 +1,36 @@ +import { nodePolyfills } from "vite-plugin-node-polyfills"; +import { mergeConfig } from "vitest/config"; +import type { UserConfig } from "vitest/config"; + +import baseConfig from "./vite.base.config.mts"; + +const config: UserConfig = { + plugins: [ + nodePolyfills({ + globals: { + process: true, + Buffer: true, + global: true, + }, + include: ["fs", "crypto", "buffer", "fs"], + overrides: { + fs: "memfs", + }, + }), + ], + optimizeDeps: { + exclude: ["fsevents"], + }, + test: { + coverage: { + reportsDirectory: "coverage/environments/browser", + }, + browser: { + headless: true, + enabled: true, + name: "chrome", + }, + }, +}; + +export default mergeConfig(baseConfig, config); diff --git a/vite.node.config.mts b/vite.node.config.mts index b6a7f3cf4e8..57e002b56df 100644 --- a/vite.node.config.mts +++ b/vite.node.config.mts @@ -1,12 +1,12 @@ -import type { UserConfig } from 'vitest/config'; -import { mergeConfig } from 'vitest/config'; +import type { UserConfig } from "vitest/config"; +import { mergeConfig } from "vitest/config"; -import baseConfig from './vite.base.config.mts'; +import baseConfig from "./vite.base.config.mts"; const config: UserConfig = { test: { coverage: { - reportsDirectory: 'coverage/environments/node', + reportsDirectory: "coverage/environments/node", }, }, };