diff --git a/.idea/dictionaries/fuxing.xml b/.idea/dictionaries/fuxing.xml
index 279fdb2..b46192e 100644
--- a/.idea/dictionaries/fuxing.xml
+++ b/.idea/dictionaries/fuxing.xml
@@ -4,6 +4,7 @@
caip
fuxing
fuxingloh
+ lamports
\ No newline at end of file
diff --git a/README.md b/README.md
index 24e9ae4..7605ac8 100644
--- a/README.md
+++ b/README.md
@@ -2,26 +2,52 @@
```typescript
import { SolanaContainer, StartedSolanaContainer } from 'solana-testcontainers';
-import { createPublicClient, http, PublicClient } from 'viem';
-import { solana } from 'viem/chains';
-
-let container: StartedSolanaContainer;
-
-beforeAll(async () => {
- container = await new SolanaContainer().start();
+import { Connection, PublicKey } from '@solana/web3.js';
+
+describe('SolanaContainer', () => {
+ let container: StartedSolanaContainer;
+ let connection: Connection;
+
+ beforeAll(async () => {
+ container = await new SolanaContainer().start();
+ connection = new Connection(container.getHostRpcEndpoint(), {
+ commitment: 'processed',
+ wsEndpoint: container.getHostWsEndpoint(),
+ });
+ });
+
+ afterAll(async () => {
+ await container.stop();
+ });
+
+ it('should get processed block height', async () => {
+ const blockHeight = await connection.getBlockHeight('processed');
+ expect(blockHeight).toBeGreaterThanOrEqual(0);
+ });
+
+ it('should fund address with 5129000000 lamports with confirmation', async () => {
+ const publicKey = new PublicKey('Emp8JcXpFnCXzdWBC3ChRPtNQHiiQW6kr61wopT3hbNL');
+ const lamports = 5_129_000_000;
+
+ const block = await connection.getLatestBlockhash('processed');
+ const signature = await connection.requestAirdrop(publicKey, lamports);
+ await connection.confirmTransaction({ signature, ...block }, 'processed');
+
+ const balance = await connection.getBalance(publicKey, 'processed');
+ expect(balance).toStrictEqual(lamports);
+ });
});
+```
-afterAll(async () => {
- await container.stop();
-});
+## Motivation
-it('should rpc(eth_blockNumber) via viem', async () => {
- const client = createPublicClient({ chain: solana, transport: http(container.getHostRpcUrl()) });
+This library creates a Docker image that isolates the toolchain for Solana from the host system.
+This is particularly useful for language-agnostic development and parallelization of systems.
- const blockNumber = await client.getBlockNumber();
- expect(blockNumber).toStrictEqual(BigInt(0));
-});
-```
+The default [solanalabs/solana](https://hub.docker.com/r/solanalabs/solana) is an optimized image,
+when used on a host system that does not support AVX, it will fail with the following error:
+Incompatible CPU detected: missing AVX support.
+Please build from source on the target.
## License
diff --git a/packages/solana-container/Dockerfile b/packages/solana-container/Dockerfile
index 2330815..dd9ae6d 100644
--- a/packages/solana-container/Dockerfile
+++ b/packages/solana-container/Dockerfile
@@ -27,4 +27,4 @@ RUN apt update && \
COPY --from=builder /workspace/solana/target/release/solana-test-validator /bin/solana-test-validator
-CMD ["solana-test-validator", "--log"]
+CMD ["solana-test-validator"]
diff --git a/packages/solana-testcontainers/index.ts b/packages/solana-testcontainers/index.ts
index 81681d6..80ed709 100644
--- a/packages/solana-testcontainers/index.ts
+++ b/packages/solana-testcontainers/index.ts
@@ -23,7 +23,11 @@ export class StartedSolanaContainer extends AbstractStartedContainer {
super(startedTestContainer);
}
- getHostRpcUrl(): string {
+ getHostRpcEndpoint(): string {
return `http://${this.getHost()}:${this.getMappedPort(8899)}`;
}
+
+ getHostWsEndpoint(): string {
+ return `ws://${this.getHost()}:${this.getMappedPort(8900)}`;
+ }
}
diff --git a/packages/solana-testcontainers/index.unit.ts b/packages/solana-testcontainers/index.unit.ts
index 4760c04..6ce7880 100644
--- a/packages/solana-testcontainers/index.unit.ts
+++ b/packages/solana-testcontainers/index.unit.ts
@@ -1,56 +1,42 @@
import { afterAll, beforeAll, describe, expect, it } from '@jest/globals';
-import { createPublicClient, http, PublicClient } from 'viem';
-import { solana } from 'viem/chains';
-import waitForExpect from 'wait-for-expect';
+import { Connection, PublicKey } from '@solana/web3.js';
import { SolanaContainer, StartedSolanaContainer } from './index';
-describe('default container', () => {
+describe('SolanaContainer', () => {
let container: StartedSolanaContainer;
+ let connection: Connection;
beforeAll(async () => {
container = await new SolanaContainer().start();
+ connection = new Connection(container.getHostRpcEndpoint(), {
+ commitment: 'processed',
+ wsEndpoint: container.getHostWsEndpoint(),
+ });
});
afterAll(async () => {
await container.stop();
});
- it('should expose host rpc url', async () => {
- expect(container.getHostRpcUrl()).toMatch(/http:\/\/localhost:\d+/);
+ it('should expose host rpc endpoint', async () => {
+ expect(container.getHostRpcEndpoint()).toMatch(/http:\/\/localhost:\d+/);
});
- it('should rpc(eth_blockNumber) via viem', async () => {
- const client = createPublicClient({
- chain: solana,
- transport: http(container.getHostRpcUrl()),
- });
-
- const blockNumber = await client.getBlockNumber();
- expect(blockNumber).toBeGreaterThanOrEqual(0n);
+ it('should get processed block height', async () => {
+ const blockHeight = await connection.getBlockHeight('processed');
+ expect(blockHeight).toBeGreaterThanOrEqual(0);
});
-});
-
-describe('auto mining container 2000ms interval', () => {
- let container: StartedSolanaContainer;
- let client: PublicClient;
- beforeAll(async () => {
- container = await new SolanaContainer().withMiningInterval(2000).start();
- client = createPublicClient({
- chain: solana,
- transport: http(container.getHostRpcUrl()),
- });
- });
+ it('should fund address with 5129000000 lamports with confirmation', async () => {
+ const publicKey = new PublicKey('Emp8JcXpFnCXzdWBC3ChRPtNQHiiQW6kr61wopT3hbNL');
+ const lamports = 5_129_000_000;
- afterAll(async () => {
- await container.stop();
- });
+ const block = await connection.getLatestBlockhash('processed');
+ const signature = await connection.requestAirdrop(publicKey, lamports);
+ await connection.confirmTransaction({ signature, ...block }, 'processed');
- it('should auto mine block', async () => {
- await waitForExpect(async () => {
- const blockNumber = await client.getBlockNumber();
- expect(blockNumber).toBeGreaterThan(1n);
- }, 6000);
+ const balance = await connection.getBalance(publicKey, 'processed');
+ expect(balance).toStrictEqual(lamports);
});
});
diff --git a/packages/solana-testcontainers/package.json b/packages/solana-testcontainers/package.json
index 30787ca..054c836 100644
--- a/packages/solana-testcontainers/package.json
+++ b/packages/solana-testcontainers/package.json
@@ -32,10 +32,10 @@
"preset": "@workspace/jest-preset"
},
"dependencies": {
- "@solana/web3.js": "1.91.1",
"testcontainers": "^10.7.2"
},
"devDependencies": {
+ "@solana/web3.js": "1.91.1",
"@workspace/jest-preset": "workspace:*",
"@workspace/tsconfig": "workspace:*",
"solana-container": "workspace:*"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 468fe07..52f063a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -55,13 +55,13 @@ importers:
packages/solana-testcontainers:
dependencies:
- '@solana/web3.js':
- specifier: 1.91.1
- version: 1.91.1
testcontainers:
specifier: ^10.7.2
version: 10.7.2
devDependencies:
+ '@solana/web3.js':
+ specifier: 1.91.1
+ version: 1.91.1
'@workspace/jest-preset':
specifier: workspace:*
version: link:../../workspace/jest-preset
@@ -420,7 +420,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.1
- dev: false
+ dev: true
/@babel/template@7.24.0:
resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==}
@@ -787,12 +787,12 @@ packages:
resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==}
dependencies:
'@noble/hashes': 1.4.0
- dev: false
+ dev: true
/@noble/hashes@1.4.0:
resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
engines: {node: '>= 16'}
- dev: false
+ dev: true
/@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -838,7 +838,7 @@ packages:
engines: {node: '>=5.10'}
dependencies:
buffer: 6.0.3
- dev: false
+ dev: true
/@solana/web3.js@1.91.1:
resolution: {integrity: sha512-cPgjZXm688oM9cULvJ8u2VH6Qp5rvptE1N1VODVxn2mAbpZsWrvWNPjmASkMYT/HzyrtqFkPvFdSHg8Xjt7aQA==}
@@ -862,7 +862,7 @@ packages:
- bufferutil
- encoding
- utf-8-validate
- dev: false
+ dev: true
/@swc/core-darwin-arm64@1.4.8:
resolution: {integrity: sha512-hhQCffRTgzpTIbngSnC30vV6IJVTI9FFBF954WEsshsecVoCGFiMwazBbrkLG+RwXENTrMhgeREEFh6R3KRgKQ==}
@@ -1034,7 +1034,7 @@ packages:
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
dependencies:
'@types/node': 20.11.28
- dev: false
+ dev: true
/@types/docker-modem@3.0.6:
resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==}
@@ -1082,7 +1082,7 @@ packages:
/@types/node@12.20.55:
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
- dev: false
+ dev: true
/@types/node@18.19.24:
resolution: {integrity: sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==}
@@ -1126,7 +1126,7 @@ packages:
resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
dependencies:
'@types/node': 20.11.28
- dev: false
+ dev: true
/@types/yargs-parser@21.0.3:
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@@ -1279,7 +1279,7 @@ packages:
dependencies:
jsonparse: 1.3.1
through: 2.3.8
- dev: false
+ dev: true
/acorn-jsx@5.3.2(acorn@8.11.3):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -1298,7 +1298,7 @@ packages:
engines: {node: '>= 8.0.0'}
dependencies:
humanize-ms: 1.2.1
- dev: false
+ dev: true
/ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -1631,11 +1631,10 @@ packages:
resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
dependencies:
safe-buffer: 5.2.1
- dev: false
+ dev: true
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- dev: false
/bcrypt-pbkdf@1.0.2:
resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
@@ -1649,13 +1648,13 @@ packages:
requiresBuild: true
dependencies:
bindings: 1.5.0
- dev: false
+ dev: true
/bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
dependencies:
file-uri-to-path: 1.0.0
- dev: false
+ dev: true
/bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
@@ -1667,7 +1666,7 @@ packages:
/bn.js@5.2.1:
resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
- dev: false
+ dev: true
/borsh@0.7.0:
resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
@@ -1675,7 +1674,7 @@ packages:
bn.js: 5.2.1
bs58: 4.0.1
text-encoding-utf-8: 1.0.2
- dev: false
+ dev: true
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
@@ -1710,7 +1709,7 @@ packages:
resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
dependencies:
base-x: 3.0.9
- dev: false
+ dev: true
/bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
@@ -1738,7 +1737,7 @@ packages:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
- dev: false
+ dev: true
/bufferutil@4.0.8:
resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
@@ -1746,7 +1745,7 @@ packages:
requiresBuild: true
dependencies:
node-gyp-build: 4.8.0
- dev: false
+ dev: true
/buildcheck@0.0.6:
resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==}
@@ -1891,7 +1890,7 @@ packages:
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- dev: false
+ dev: true
/compress-commons@4.1.2:
resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==}
@@ -2052,7 +2051,7 @@ packages:
/delay@5.0.0:
resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
engines: {node: '>=10'}
- dev: false
+ dev: true
/detect-indent@7.0.1:
resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==}
@@ -2301,13 +2300,13 @@ packages:
/es6-promise@4.2.8:
resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
- dev: false
+ dev: true
/es6-promisify@5.0.0:
resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
dependencies:
es6-promise: 4.2.8
- dev: false
+ dev: true
/escalade@3.1.2:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
@@ -2536,7 +2535,7 @@ packages:
/eventemitter3@4.0.7:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
- dev: false
+ dev: true
/eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
@@ -2591,7 +2590,7 @@ packages:
/eyes@0.1.8:
resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
engines: {node: '> 0.1.90'}
- dev: false
+ dev: true
/fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2619,7 +2618,7 @@ packages:
/fast-stable-stringify@1.0.0:
resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
- dev: false
+ dev: true
/fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
@@ -2640,7 +2639,7 @@ packages:
/file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
- dev: false
+ dev: true
/fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
@@ -2917,7 +2916,7 @@ packages:
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
dependencies:
ms: 2.1.3
- dev: false
+ dev: true
/husky@9.0.11:
resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==}
@@ -2927,7 +2926,6 @@ packages:
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- dev: false
/ignore@5.3.1:
resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
@@ -3147,7 +3145,7 @@ packages:
ws: '*'
dependencies:
ws: 7.5.9
- dev: false
+ dev: true
/istanbul-lib-coverage@3.2.2:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
@@ -3228,7 +3226,7 @@ packages:
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- dev: false
+ dev: true
/jest-changed-files@29.7.0:
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
@@ -3679,7 +3677,7 @@ packages:
/json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
- dev: false
+ dev: true
/json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
@@ -3701,7 +3699,7 @@ packages:
/jsonparse@1.3.1:
resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
engines: {'0': node >= 0.2.0}
- dev: false
+ dev: true
/keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@@ -3908,7 +3906,6 @@ packages:
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- dev: false
/nan@2.19.0:
resolution: {integrity: sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==}
@@ -3929,13 +3926,12 @@ packages:
optional: true
dependencies:
whatwg-url: 5.0.0
- dev: false
/node-gyp-build@4.8.0:
resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==}
hasBin: true
requiresBuild: true
- dev: false
+ dev: true
/node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
@@ -4312,7 +4308,7 @@ packages:
/regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
- dev: false
+ dev: true
/regexp.prototype.flags@1.5.2:
resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
@@ -4395,7 +4391,7 @@ packages:
optionalDependencies:
bufferutil: 4.0.8
utf-8-validate: 5.0.10
- dev: false
+ dev: true
/run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -4418,7 +4414,6 @@ packages:
/safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- dev: false
/safe-regex-test@1.0.3:
resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
@@ -4703,7 +4698,7 @@ packages:
/superstruct@0.14.2:
resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
- dev: false
+ dev: true
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
@@ -4809,14 +4804,14 @@ packages:
/text-encoding-utf-8@1.0.2:
resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
- dev: false
+ dev: true
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
/through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
- dev: false
+ dev: true
/tmp@0.2.3:
resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
@@ -4840,7 +4835,6 @@ packages:
/tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- dev: false
/ts-api-utils@1.3.0(typescript@5.4.2):
resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
@@ -5054,7 +5048,7 @@ packages:
requiresBuild: true
dependencies:
node-gyp-build: 4.8.0
- dev: false
+ dev: true
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -5063,7 +5057,7 @@ packages:
/uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
- dev: false
+ dev: true
/v8-to-istanbul@9.2.0:
resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==}
@@ -5086,14 +5080,12 @@ packages:
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
- dev: false
/whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
- dev: false
/which-boxed-primitive@1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
@@ -5163,7 +5155,7 @@ packages:
optional: true
utf-8-validate:
optional: true
- dev: false
+ dev: true
/ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10):
resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==}
@@ -5179,7 +5171,7 @@ packages:
dependencies:
bufferutil: 4.0.8
utf-8-validate: 5.0.10
- dev: false
+ dev: true
/y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}