From 2dcc7f6d20d0c6efa3cbd53da591bd3370b4ac4f Mon Sep 17 00:00:00 2001 From: zamielchia Date: Tue, 16 Apr 2024 23:14:40 +0400 Subject: [PATCH 1/6] chore: upgrade old-anchor to 0.29.0 and new-anchor to 0.30.0 --- packages/explorerkit-idls/package.json | 3 +- packages/explorerkit-translator/package.json | 3 +- pnpm-lock.yaml | 178 +++++++++++++------ 3 files changed, 130 insertions(+), 54 deletions(-) diff --git a/packages/explorerkit-idls/package.json b/packages/explorerkit-idls/package.json index 9e36ab0..23d9242 100644 --- a/packages/explorerkit-idls/package.json +++ b/packages/explorerkit-idls/package.json @@ -34,7 +34,8 @@ "vitest": "^0.34.2" }, "dependencies": { - "@coral-xyz/anchor": "^0.27.0", + "@coral-xyz/anchor": "^0.29.0", + "@coral-xyz/anchor-new": "npm:@coral-xyz/anchor@^0.30.0", "@solanafm/kinobi-lite": "^0.12.0", "axios": "^1.3.3" } diff --git a/packages/explorerkit-translator/package.json b/packages/explorerkit-translator/package.json index 2715443..527d654 100644 --- a/packages/explorerkit-translator/package.json +++ b/packages/explorerkit-translator/package.json @@ -46,7 +46,8 @@ "directory": "packages/explorerkit-translator" }, "dependencies": { - "@coral-xyz/anchor": "^0.28.1-beta.2", + "@coral-xyz/anchor": "^0.29.0", + "@coral-xyz/anchor-new": "npm:@coral-xyz/anchor@^0.30.0", "@metaplex-foundation/umi": "^0.8.6", "@metaplex-foundation/umi-serializers": "^0.8.5", "@solana/spl-type-length-value": "^0.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d758812..ea633f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,10 +34,10 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.9.0 - version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.57.0)(typescript@5.3.3) + version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^6.9.0 - version: 6.9.0(eslint@8.57.0)(typescript@5.3.3) + version: 6.9.0(eslint@8.57.0)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.0.0 version: 9.0.0(eslint@8.57.0) @@ -51,8 +51,11 @@ importers: packages/explorerkit-idls: dependencies: '@coral-xyz/anchor': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 + '@coral-xyz/anchor-new': + specifier: npm:@coral-xyz/anchor@^0.30.0 + version: /@coral-xyz/anchor@0.30.0 '@solanafm/kinobi-lite': specifier: ^0.12.0 version: 0.12.0 @@ -134,8 +137,11 @@ importers: packages/explorerkit-translator: dependencies: '@coral-xyz/anchor': - specifier: ^0.28.1-beta.2 - version: 0.28.1-beta.2 + specifier: ^0.29.0 + version: 0.29.0 + '@coral-xyz/anchor-new': + specifier: npm:@coral-xyz/anchor@^0.30.0 + version: /@coral-xyz/anchor@0.30.0 '@metaplex-foundation/umi': specifier: ^0.8.6 version: 0.8.6 @@ -212,6 +218,13 @@ packages: dependencies: regenerator-runtime: 0.14.0 + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: false + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -400,13 +413,13 @@ packages: prettier: 2.8.8 dev: true - /@coral-xyz/anchor@0.27.0: - resolution: {integrity: sha512-+P/vPdORawvg3A9Wj02iquxb4T0C5m4P6aZBVYysKl4Amk+r6aMPZkUhilBkD6E4Nuxnoajv3CFykUfkGE0n5g==} + /@coral-xyz/anchor@0.29.0: + resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==} engines: {node: '>=11'} dependencies: - '@coral-xyz/borsh': 0.27.0(@solana/web3.js@1.87.2) - '@solana/web3.js': 1.87.2 - base64-js: 1.5.1 + '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.91.4) + '@noble/hashes': 1.4.0 + '@solana/web3.js': 1.91.4 bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 @@ -414,7 +427,6 @@ packages: cross-fetch: 3.1.8 crypto-hash: 1.3.0 eventemitter3: 4.0.7 - js-sha256: 0.9.0 pako: 2.1.0 snake-case: 3.0.4 superstruct: 0.15.5 @@ -425,14 +437,13 @@ packages: - utf-8-validate dev: false - /@coral-xyz/anchor@0.28.1-beta.2: - resolution: {integrity: sha512-xreUcOFF8+IQKWOBUrDKJbIw2ftpRVybFlEPVrbSlOBCbreCWrQ5754Gt9cHIcuBDAzearCDiBqzsGQdNgPJiw==} + /@coral-xyz/anchor@0.30.0: + resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} engines: {node: '>=11'} dependencies: - '@coral-xyz/borsh': 0.28.0(@solana/web3.js@1.87.2) - '@noble/hashes': 1.3.2 + '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.87.2) + '@noble/hashes': 1.4.0 '@solana/web3.js': 1.87.2 - base64-js: 1.5.1 bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 @@ -450,19 +461,19 @@ packages: - utf-8-validate dev: false - /@coral-xyz/borsh@0.27.0(@solana/web3.js@1.87.2): - resolution: {integrity: sha512-tJKzhLukghTWPLy+n8K8iJKgBq1yLT/AxaNd10yJrX8mI56ao5+OFAKAqW/h0i79KCvb4BK0VGO5ECmmolFz9A==} + /@coral-xyz/borsh@0.29.0(@solana/web3.js@1.91.4): + resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==} engines: {node: '>=10'} peerDependencies: '@solana/web3.js': ^1.68.0 dependencies: - '@solana/web3.js': 1.87.2 + '@solana/web3.js': 1.91.4 bn.js: 5.2.1 buffer-layout: 1.2.2 dev: false - /@coral-xyz/borsh@0.28.0(@solana/web3.js@1.87.2): - resolution: {integrity: sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==} + /@coral-xyz/borsh@0.30.0(@solana/web3.js@1.87.2): + resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} engines: {node: '>=10'} peerDependencies: '@solana/web3.js': ^1.68.0 @@ -758,7 +769,7 @@ packages: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: @@ -773,8 +784,8 @@ packages: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: false /@isaacs/cliui@8.0.2: @@ -900,10 +911,21 @@ packages: dependencies: '@noble/hashes': 1.3.2 + /@noble/curves@1.4.0: + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + dependencies: + '@noble/hashes': 1.4.0 + dev: false + /@noble/hashes@1.3.2: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -969,6 +991,30 @@ packages: - encoding - utf-8-validate + /@solana/web3.js@1.91.4: + resolution: {integrity: sha512-zconqecIcBqEF6JiM4xYF865Xc4aas+iWK5qnu7nwKPq9ilRYcn+2GiwpYXqUqqBUe0XCO17w18KO0F8h+QATg==} + dependencies: + '@babel/runtime': 7.24.4 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0 + node-fetch: 2.7.0 + rpc-websockets: 7.10.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + /@solanafm/kinobi-lite@0.12.0: resolution: {integrity: sha512-K3daAv8HoJzM6UiDUG1Tj0tZIcCSJENmqx5nw4J2+sOwyZm1leFvVkIHM+WOExh/IqI7PglipRJbrF0OXN007Q==} dependencies: @@ -1115,7 +1161,7 @@ packages: dependencies: '@types/node': 20.10.4 - /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1127,10 +1173,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.9.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.9.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/type-utils': 6.9.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.9.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.9.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.9.0 debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 @@ -1138,13 +1184,13 @@ packages: ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1156,11 +1202,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.9.0 '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.9.0 debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: false @@ -1173,7 +1219,7 @@ packages: '@typescript-eslint/visitor-keys': 6.9.0 dev: false - /@typescript-eslint/type-utils@6.9.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@6.9.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1183,12 +1229,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.9.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.9.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: false @@ -1198,7 +1244,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: false - /@typescript-eslint/typescript-estree@6.9.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@6.9.0(typescript@5.4.5): resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1213,13 +1259,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/utils@6.9.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@6.9.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1230,7 +1276,7 @@ packages: '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 6.9.0 '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -3139,10 +3185,6 @@ packages: engines: {node: '>=10'} dev: true - /js-sha256@0.9.0: - resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} - dev: false - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -3917,6 +3959,10 @@ packages: /regenerator-runtime@0.14.0: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: false + /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} @@ -3979,6 +4025,18 @@ packages: fsevents: 2.3.3 dev: true + /rpc-websockets@7.10.0: + resolution: {integrity: sha512-cemZ6RiDtYZpPiBzYijdOrkQQzmBCmug0E9SdRH2gIUNT15ql4mwCYWIp0VnSZq6Qrw/JkGUygp4PrK1y9KfwQ==} + dependencies: + '@babel/runtime': 7.24.4 + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: false + /rpc-websockets@7.6.1: resolution: {integrity: sha512-MmRGaJJvxTHSRxYPjJJqcj2zWnCetw7YbYbKlD0Yc7qVw6PsZhRJg1MI3mpWlpBs+4zO+urlNfLl9zLsdOD/gA==} dependencies: @@ -4500,13 +4558,13 @@ packages: engines: {node: '>=8'} dev: true - /ts-api-utils@1.0.3(typescript@5.3.3): + /ts-api-utils@1.0.3(typescript@5.4.5): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 dev: false /ts-interface-checker@0.1.13: @@ -4701,8 +4759,8 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true dev: false @@ -5042,6 +5100,22 @@ packages: bufferutil: 4.0.8 utf-8-validate: 5.0.10 + /ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: false + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true From 29286fe5f9ec0bf9b036b94e974e65ec18e42527 Mon Sep 17 00:00:00 2001 From: zamielchia Date: Fri, 3 May 2024 04:36:59 +0800 Subject: [PATCH 2/6] feat: support anchor 0.3.0 deserialization --- .../src/idls/IdlRepository.ts | 69 +- .../src/idls/LocalIdlRepository.ts | 3 +- packages/explorerkit-translator/package.json | 2 +- .../explorerkit-translator/src/helpers/idl.ts | 40 +- .../src/helpers/new-idl.ts | 65 ++ .../src/interfaces/AccountParserInterface.ts | 7 +- .../interfaces/InstructionParserInterface.ts | 10 +- .../src/parsers/v2/account/anchor-v1.ts | 49 + .../src/parsers/v2/account/index.ts | 1 + .../src/parsers/v2/instruction/anchor-v1.ts | 92 ++ .../src/parsers/v2/instruction/index.ts | 1 + .../src/types/IdlItem.ts | 5 +- .../src/types/NewAnchorTypes.ts | 132 +++ .../tests/v2/account.test.ts | 50 + .../tests/v2/instruction.test.ts | 70 ++ pnpm-lock.yaml | 859 ++++++++++++++++-- 16 files changed, 1368 insertions(+), 87 deletions(-) create mode 100644 packages/explorerkit-translator/src/helpers/new-idl.ts create mode 100644 packages/explorerkit-translator/src/parsers/v2/account/anchor-v1.ts create mode 100644 packages/explorerkit-translator/src/parsers/v2/instruction/anchor-v1.ts create mode 100644 packages/explorerkit-translator/src/types/NewAnchorTypes.ts diff --git a/packages/explorerkit-idls/src/idls/IdlRepository.ts b/packages/explorerkit-idls/src/idls/IdlRepository.ts index 21460a4..1e284a9 100644 --- a/packages/explorerkit-idls/src/idls/IdlRepository.ts +++ b/packages/explorerkit-idls/src/idls/IdlRepository.ts @@ -1,4 +1,5 @@ import { Idl as AnchorIdl } from "@coral-xyz/anchor"; +import { Idl as AnchorV1Idl } from "@coral-xyz/anchor-new"; import { Idl as ShankIdl } from "@solanafm/kinobi-lite"; import { CHAIN_ID } from "../constants"; @@ -8,8 +9,8 @@ import { getLocalIdl, IdlTypes } from "./LocalIdlRepository"; export interface IdlItem { programId: string; - idl: AnchorIdl | ShankIdl | string; - idlType: "anchor" | "shank" | "kinobi"; + idl: AnchorIdl | AnchorV1Idl | ShankIdl | string; + idlType: "anchor" | "anchorV1" | "shank" | "kinobi"; idlSlotVersion?: number; chainId?: CHAIN_ID; } @@ -21,13 +22,15 @@ export type FetchProgramIdlOptions = { /** * Checks if the given IDL is an Anchor IDL. - * @param {AnchorIdl | ShankIdl | string} idl - The IDL to check. + * @param {AnchorIdl | AnchorV1Idl | ShankIdl | string} idl - The IDL to check. * @returns {idl is AnchorIdl} - True if the IDL is an Anchor IDL, false otherwise. */ -export const checkIdlIsAnchor = (idl: AnchorIdl | ShankIdl | string): idl is AnchorIdl => { +export const checkIdlIsAnchor = (idl: AnchorIdl | AnchorV1Idl | ShankIdl | string): idl is AnchorIdl => { const anchorIdl = idl as AnchorIdl; if (anchorIdl.metadata !== undefined && anchorIdl.metadata.origin === "shank") return false; + // you can differentiate IDLs from their `idl.metadata.spec` field (legacy/old if non-existent) + if (anchorIdl.metadata !== undefined && anchorIdl.metadata.spec) return false; if (anchorIdl.instructions !== undefined) { return anchorIdl.instructions.every((instruction: any) => { @@ -42,21 +45,35 @@ export const checkIdlIsAnchor = (idl: AnchorIdl | ShankIdl | string): idl is Anc return false; }; +/** + * Checks if the given IDL is an Anchor 0.3.0 IDL. + * @param {AnchorIdl | AnchorV1Idl | ShankIdl | string} idl - The IDL to check. + * @returns {idl is AnchorIdl} - True if the IDL is an Anchor IDL, false otherwise. + */ +export const checkIdlIsAnchorV1 = (idl: AnchorIdl | AnchorV1Idl | ShankIdl | string): idl is AnchorV1Idl => { + const anchorIdl = idl as AnchorV1Idl; + // you can differentiate IDLs from their `idl.metadata.spec` field (legacy/old if non-existent) + if (anchorIdl.metadata !== undefined && !anchorIdl.metadata.spec) return false; + if (anchorIdl.instructions !== undefined) return true; + + return false; +}; + /** * Checks if the given IDL is an Shank IDL. - * @param {AnchorIdl | ShankIdl | string} idl - The IDL to check. + * @param {AnchorIdl | AnchorV1Idl | ShankIdl | string} idl - The IDL to check. * @returns {idl is ShankIdl} - True if the IDL is an Shank IDL, false otherwise. */ -export const checkIdlIsShank = (idl: AnchorIdl | ShankIdl | string): idl is ShankIdl => { +export const checkIdlIsShank = (idl: AnchorIdl | AnchorV1Idl | ShankIdl | string): idl is ShankIdl => { return (idl as ShankIdl).instructions !== undefined && (idl as ShankIdl).metadata !== undefined; }; /** * Checks if the given IDL is a string. - * @param {AnchorIdl | ShankIdl | string} idl - The IDL to check. + * @param {AnchorIdl | AnchorV1Idl | ShankIdl | string} idl - The IDL to check. * @returns {idl is string} - True if the IDL is a string, false otherwise. */ -export const checkIdlIsString = (idl: AnchorIdl | ShankIdl | string): idl is string => { +export const checkIdlIsString = (idl: AnchorIdl | AnchorV1Idl | ShankIdl | string): idl is string => { return typeof idl === "string"; }; @@ -78,28 +95,19 @@ export const getProgramIdl = async ( ): Promise => { const localIdl = getLocalIdl(programHash, options?.slotContext, idlRepoMap); if (localIdl.idl) { - if (checkIdlIsAnchor(localIdl.idl)) { - return { - programId: programHash, - idl: localIdl.idl, - idlType: "anchor", - idlSlotVersion: localIdl?.slotDeployed, - chainId: options?.chainId, - }; - } else if (checkIdlIsShank(localIdl.idl)) { - return { - programId: programHash, - idl: localIdl.idl, - idlType: "shank", - idlSlotVersion: localIdl?.slotDeployed, - chainId: options?.chainId, - }; - } else if (checkIdlIsString(localIdl.idl)) { + let idlType: "anchor" | "anchorV1" | "shank" | "kinobi" | null = null; + + if (checkIdlIsAnchor(localIdl.idl)) idlType = "anchor"; + else if (checkIdlIsAnchorV1(localIdl.idl)) idlType = "anchorV1"; + else if (checkIdlIsShank(localIdl.idl)) idlType = "shank"; + else if (checkIdlIsString(localIdl.idl)) idlType = "kinobi"; + + if (idlType) { return { programId: programHash, idl: localIdl.idl, - idlType: "kinobi", - idlSlotVersion: localIdl?.slotDeployed, + idlType: idlType, + idlSlotVersion: localIdl.slotDeployed, chainId: options?.chainId, }; } @@ -118,10 +126,15 @@ export const getProgramIdl = async ( if (idlMetaResponse.idlInformation) { if (idlMetaResponse.idlInformation.idl) { if (idlMetaResponse.idlInformation.idlType === "anchor") { + // Since there is two version of anchor IDLs now, we will check if it's an IDL from version 30 and above + // If not, we will assume it's an IDL from version 29 and below + let idlType: "anchor" | "anchorV1" = "anchor"; + if (checkIdlIsAnchorV1(idlMetaResponse.idlInformation.idl)) idlType = "anchorV1"; + return { programId: idlMetaResponse.programHash, idl: idlMetaResponse.idlInformation.idl, - idlType: "anchor", + idlType: idlType, idlSlotVersion: idlMetaResponse.idlInformation.slotDeployed, chainId: options?.chainId, }; diff --git a/packages/explorerkit-idls/src/idls/LocalIdlRepository.ts b/packages/explorerkit-idls/src/idls/LocalIdlRepository.ts index 96768c9..22fba84 100644 --- a/packages/explorerkit-idls/src/idls/LocalIdlRepository.ts +++ b/packages/explorerkit-idls/src/idls/LocalIdlRepository.ts @@ -1,4 +1,5 @@ import { Idl as AnchorIdl } from "@coral-xyz/anchor"; +import { Idl as AnchorV1Idl } from "@coral-xyz/anchor-new"; import { Idl as ShankIdl } from "@solanafm/kinobi-lite"; import { @@ -42,7 +43,7 @@ import { TokenMetadataV1130IDL, } from "./shank/others/token-metadata"; -export type IdlTypes = ShankIdl | AnchorIdl | string; +export type IdlTypes = ShankIdl | AnchorIdl | AnchorV1Idl | string; /** * A map of program IDs to a map of slot numbers to IDL types. diff --git a/packages/explorerkit-translator/package.json b/packages/explorerkit-translator/package.json index 527d654..cc4c1b0 100644 --- a/packages/explorerkit-translator/package.json +++ b/packages/explorerkit-translator/package.json @@ -37,7 +37,7 @@ "@solanafm/explorer-kit-idls": "workspace:*", "eslint-config-explorerkit": "workspace:*", "tsconfig": "workspace:*", - "vitest": "^0.34.2" + "vitest": "^1.5.3" }, "homepage": "https://github.com/solana-fm/explorer-kit#readme", "repository": { diff --git a/packages/explorerkit-translator/src/helpers/idl.ts b/packages/explorerkit-translator/src/helpers/idl.ts index 3c00e98..23afff7 100644 --- a/packages/explorerkit-translator/src/helpers/idl.ts +++ b/packages/explorerkit-translator/src/helpers/idl.ts @@ -7,9 +7,10 @@ import { } from "@solanafm/kinobi-lite"; import { IdlAccountItem, IdlField, IdlType as AnchorIdlType, isIdlAccounts } from "../types/AnchorTypes"; +import { checkIfIdlDefinedFieldsNamed, IdlDefinedFields, IdlType as AnchorV1IdlType } from "../types/NewAnchorTypes"; export type DataWithMappedType = { - type: ShankIdlType | AnchorIdlType; + type: ShankIdlType | AnchorIdlType | AnchorV1IdlType; data: any; }; @@ -160,3 +161,40 @@ export const mapDataTypeToName = ( return Object.keys(mappedDataType).length > 0 ? mappedDataType : data; }; + +export const mapNewAnchorDataTypeToName = (data: Record, idlFields?: IdlDefinedFields) => { + const dataKeys = Object.keys(data); + const mappedDataType: Record = {}; + dataKeys.forEach((keyName) => { + // TODO: Still need to map the individual types to a "string" + // TODO: Key names have to be standarized with camel case since I did not standarize the field naming in the IDL + // TODO: All will be camel case like authorityAddress etc etc. + if (idlFields && idlFields.length > 0) { + if (checkIfIdlDefinedFieldsNamed(idlFields)) { + const filteredIdlField = idlFields.find((idlField) => idlField.name === keyName); + if (filteredIdlField) { + // defined type mapper + // TODO: Finish Defined Type Mapper in the future xD + // if (typeof filteredIdlField === "object") { + // // Since we already know filteredIdlField is a object type, we can safely cast it to Omit + // const idlType: Omit = filteredIdlField.type as Omit; + // if ("defined" in idlType && idlTypes && idlTypes.length > 0) { + // const idlDefinedType = idlTypes.find((type) => type.name === idlType.defined); + // } + // } + mappedDataType[keyName] = { + type: filteredIdlField.type as AnchorV1IdlType, + data: data[keyName], + }; + } else { + mappedDataType[keyName] = { + data: data[keyName], + type: "Unknown Type" as AnchorV1IdlType, + }; + } + } + } + }); + + return Object.keys(mappedDataType).length > 0 ? mappedDataType : data; +}; diff --git a/packages/explorerkit-translator/src/helpers/new-idl.ts b/packages/explorerkit-translator/src/helpers/new-idl.ts new file mode 100644 index 0000000..52b89c2 --- /dev/null +++ b/packages/explorerkit-translator/src/helpers/new-idl.ts @@ -0,0 +1,65 @@ +import { IdlInstructionAccountItem, isIdlAccounts } from "../types/NewAnchorTypes"; +import { DataWithMappedType } from "./idl"; + +export const extractIdlIxAccountName: (IdlAccount?: IdlInstructionAccountItem) => string | string[] | undefined = ( + idlAccount +) => { + if (idlAccount) { + if (isIdlAccounts(idlAccount)) { + const idlIxAccounts: string[] = []; + + idlAccount.accounts.forEach((account) => { + let extractedName = extractIdlIxAccountName(account); + if (extractedName) { + if (Array.isArray(extractedName)) { + extractedName = extractIdlIxAccountName(account); + } else { + idlIxAccounts.push(idlAccount.name + "." + extractedName); + } + } + }); + + return idlIxAccounts; + } else { + return idlAccount.name; + } + } + + return undefined; +}; + +export const mapNewAnchorAccountKeysToName = ( + accountKeys?: string[], + idlIxAccounts?: IdlInstructionAccountItem[], + mapTypes?: boolean +): { + [name: string]: string | DataWithMappedType; +} => { + if (idlIxAccounts && accountKeys) { + const names: (string | string[])[] = []; + + idlIxAccounts.forEach((idlIxAccount) => { + names.push(extractIdlIxAccountName(idlIxAccount) ?? "Unknown"); + }); + + const flattenedArray = names.flat(5); + let translatedAccountKeysObj: { + [name: string]: string; + } = {}; + + accountKeys.forEach((accountKey, index) => { + const objectKey = flattenedArray[index] ?? ("Unknown" as string); + const object: { + [name: string]: string | DataWithMappedType; + } = { + [objectKey]: mapTypes ? { data: accountKey, type: "publicKey" } : accountKey, + }; + + translatedAccountKeysObj = Object.assign(translatedAccountKeysObj, object); + }); + + return translatedAccountKeysObj; + } + + return {}; +}; diff --git a/packages/explorerkit-translator/src/interfaces/AccountParserInterface.ts b/packages/explorerkit-translator/src/interfaces/AccountParserInterface.ts index 66ddf87..f0560bc 100644 --- a/packages/explorerkit-translator/src/interfaces/AccountParserInterface.ts +++ b/packages/explorerkit-translator/src/interfaces/AccountParserInterface.ts @@ -1,7 +1,9 @@ import { BorshAccountsCoder } from "@coral-xyz/anchor"; +import { BorshAccountsCoder as NewBorshAccountsCoder } from "@coral-xyz/anchor-new"; import { createAnchorAccountParser, + createAnchorV1AccountParser, createShankAccountParser, createShankConfigAccount, createShankNameServiceAccount, @@ -15,7 +17,7 @@ import { IdlItem } from "../types/IdlItem"; import { FMShankSerializer } from "../types/KinobiTreeGenerator"; import { ParserOutput } from "../types/Parsers"; -export type AccountParsers = BorshAccountsCoder | Map; +export type AccountParsers = BorshAccountsCoder | NewBorshAccountsCoder | Map; export interface AccountParserInterface { accountLayouts: AccountParsers; @@ -28,6 +30,9 @@ export const createAccountParser = (idlItem: IdlItem, programHash: string, accou case "anchor": return createAnchorAccountParser(idlItem); + case "anchorV1": + return createAnchorV1AccountParser(idlItem); + case "shank": const localSysvars = [ "SysvarC1ock11111111111111111111111111111111", diff --git a/packages/explorerkit-translator/src/interfaces/InstructionParserInterface.ts b/packages/explorerkit-translator/src/interfaces/InstructionParserInterface.ts index 417c6aa..cf13ae4 100644 --- a/packages/explorerkit-translator/src/interfaces/InstructionParserInterface.ts +++ b/packages/explorerkit-translator/src/interfaces/InstructionParserInterface.ts @@ -1,7 +1,9 @@ import { BorshInstructionCoder } from "@coral-xyz/anchor"; +import { BorshInstructionCoder as NewBorshInstructionCoder } from "@coral-xyz/anchor-new"; import { createAnchorInstructionParser, + createAnchorV1InstructionParser, createShankInstructionParser, createShankIxConfig, createShankIxMemo, @@ -14,7 +16,10 @@ import { IdlItem } from "../types/IdlItem"; import { FMShankSerializer } from "../types/KinobiTreeGenerator"; import { ParserOutput } from "../types/Parsers"; -export type InstructionParsers = BorshInstructionCoder | Map; +export type InstructionParsers = + | BorshInstructionCoder + | NewBorshInstructionCoder + | Map; export interface InstructionParserInterface { instructionsLayout: InstructionParsers; @@ -27,6 +32,9 @@ export const createInstructionParser = (idlItem: IdlItem, programHash: string) = case "anchor": return createAnchorInstructionParser(idlItem); + case "anchorV1": + return createAnchorV1InstructionParser(idlItem); + case "shank": switch (programHash) { case "Config1111111111111111111111111111111111111": diff --git a/packages/explorerkit-translator/src/parsers/v2/account/anchor-v1.ts b/packages/explorerkit-translator/src/parsers/v2/account/anchor-v1.ts new file mode 100644 index 0000000..9a2022b --- /dev/null +++ b/packages/explorerkit-translator/src/parsers/v2/account/anchor-v1.ts @@ -0,0 +1,49 @@ +import { BorshAccountsCoder, Idl as AnchorIdl } from "@coral-xyz/anchor-new"; +import { convertBNToNumberInObject } from "@solanafm/utils"; + +import { mapNewAnchorDataTypeToName } from "../../../helpers/idl"; +import { AccountParserInterface } from "../../../interfaces"; +import { IdlItem } from "../../../types/IdlItem"; +import { ParserOutput, ParserType } from "../../../types/Parsers"; + +export const createAnchorV1AccountParser: (idlItem: IdlItem) => AccountParserInterface = (idlItem: IdlItem) => { + const idl = idlItem.idl as AnchorIdl; + const accountLayouts = new BorshAccountsCoder(idl); + + const parseAccount = (accountData: string, maptypes?: boolean): ParserOutput => { + const bufferData = Buffer.from(accountData, "base64"); + const accountDiscriminator = bufferData.subarray(0, 8); + const accountName = Array.from(idl.accounts ?? []).find((key) => + accountLayouts.accountDiscriminator(key.name).equals(accountDiscriminator) + ); + + let decodedAccountData = accountLayouts.decodeAny(bufferData); + + if (decodedAccountData) { + const filteredIdlType = idl.types?.filter((type) => type.name === accountName?.name) ?? []; + + if (maptypes) { + if (filteredIdlType[0]?.type.kind === "struct" && filteredIdlType[0]?.type.fields) + decodedAccountData = mapNewAnchorDataTypeToName(decodedAccountData, filteredIdlType[0]?.type.fields); + } + + return { + name: accountName?.name as string, + data: convertBNToNumberInObject(decodedAccountData), + type: ParserType.ACCOUNT, + }; + } + + return null; + }; + + const getProgramName = (): string => { + return idl.metadata.name; + }; + + return { + accountLayouts, + parseAccount, + getProgramName, + }; +}; diff --git a/packages/explorerkit-translator/src/parsers/v2/account/index.ts b/packages/explorerkit-translator/src/parsers/v2/account/index.ts index e239c69..bcda4c4 100644 --- a/packages/explorerkit-translator/src/parsers/v2/account/index.ts +++ b/packages/explorerkit-translator/src/parsers/v2/account/index.ts @@ -1,4 +1,5 @@ export { createAnchorAccountParser } from "./anchor"; +export { createAnchorV1AccountParser } from "./anchor-v1"; export { createShankConfigAccount } from "./config"; export { createShankNameServiceAccount } from "./name-service"; export { createShankPhoenixAccount } from "./phoenix"; diff --git a/packages/explorerkit-translator/src/parsers/v2/instruction/anchor-v1.ts b/packages/explorerkit-translator/src/parsers/v2/instruction/anchor-v1.ts new file mode 100644 index 0000000..1ae16e7 --- /dev/null +++ b/packages/explorerkit-translator/src/parsers/v2/instruction/anchor-v1.ts @@ -0,0 +1,92 @@ +import { BorshInstructionCoder, Idl as AnchorIdl } from "@coral-xyz/anchor-new"; +import { convertBNToNumberInObject, decodeBase58 } from "@solanafm/utils"; + +import { mapNewAnchorDataTypeToName } from "../../../helpers/idl"; +import { mapNewAnchorAccountKeysToName } from "../../../helpers/new-idl"; +import { InstructionParserInterface } from "../../../interfaces"; +import { IdlItem } from "../../../types/IdlItem"; +import { ParserOutput, ParserType } from "../../../types/Parsers"; + +export const createAnchorV1InstructionParser: (idlItem: IdlItem) => InstructionParserInterface = (idlItem: IdlItem) => { + const idl = idlItem.idl as AnchorIdl; + const instructionsLayout = new BorshInstructionCoder(idl); + + const parseInstructions = (instructionData: string, accountKeys?: string[], mapTypes?: boolean): ParserOutput => { + try { + if (instructionsLayout) { + // Checks for Anchor Self-CPI event discriminators + // This is the event discriminator for Anchor Self-CPI to check with + // Buffer.from(sha256("anchor:event").slice(0, 8)).reverse(); + // It's a sha-256 hash of the string "anchor:event" and then the first 8 bytes reversed (little endian) + const ixBuffer = decodeBase58(instructionData); + const ixDisc = Buffer.from(ixBuffer.subarray(0, 8)); + const eventDisc = Buffer.from("5EWlLlHLmh0=", "base64"); + + // We won't decode the instruction if it's an Anchor Self-CPI event but handles it at the EventParser level + if (ixDisc.equals(eventDisc)) { + return { + name: "Anchor Self-CPI Log", + // Checks if there's an account keys array that's being supplied, if not return an empty data since there's no account keys that's being mapped + data: accountKeys + ? { + logAuthority: { + data: accountKeys[0], + type: "publicKey", + }, + } + : null, + type: ParserType.INSTRUCTION, + }; + } + + const decodedAnchorData = instructionsLayout.decode(instructionData, "base58"); + if (decodedAnchorData) { + const filteredIdlInstruction = idl.instructions.filter( + (instruction) => instruction.name === decodedAnchorData.name + ); + + if (mapTypes) { + decodedAnchorData.data = mapNewAnchorDataTypeToName( + decodedAnchorData.data, + filteredIdlInstruction[0]?.args + ); + } + + if (filteredIdlInstruction.length > 0) { + const instructionAccounts = filteredIdlInstruction[0]?.accounts; + const mappedAccountKeys = mapNewAnchorAccountKeysToName(accountKeys, instructionAccounts, mapTypes); + + return { + name: decodedAnchorData.name, + data: { ...convertBNToNumberInObject(decodedAnchorData.data), ...mappedAccountKeys }, + type: ParserType.INSTRUCTION, + }; + } + + return { + name: decodedAnchorData.name, + data: convertBNToNumberInObject(decodedAnchorData.data), + type: ParserType.INSTRUCTION, + }; + } + + return null; + } + + return null; + } catch (error) { + console.error(error); + return null; + } + }; + + const getProgramName = (): string => { + return idl.metadata.name; + }; + + return { + instructionsLayout, + parseInstructions, + getProgramName, + }; +}; diff --git a/packages/explorerkit-translator/src/parsers/v2/instruction/index.ts b/packages/explorerkit-translator/src/parsers/v2/instruction/index.ts index e3f7e96..80ee238 100644 --- a/packages/explorerkit-translator/src/parsers/v2/instruction/index.ts +++ b/packages/explorerkit-translator/src/parsers/v2/instruction/index.ts @@ -1,4 +1,5 @@ export { createAnchorInstructionParser } from "./anchor"; +export { createAnchorV1InstructionParser } from "./anchor-v1"; export { createShankIxConfig } from "./config"; export { createShankIxMemo } from "./memo"; export { createShankInstructionParser } from "./shank"; diff --git a/packages/explorerkit-translator/src/types/IdlItem.ts b/packages/explorerkit-translator/src/types/IdlItem.ts index fddfe80..e094d07 100644 --- a/packages/explorerkit-translator/src/types/IdlItem.ts +++ b/packages/explorerkit-translator/src/types/IdlItem.ts @@ -1,4 +1,5 @@ import { Idl as AnchorIdl } from "@coral-xyz/anchor"; +import { Idl as AnchorV1Idl } from "@coral-xyz/anchor-new"; import { Idl as ShankIdl } from "@solanafm/kinobi-lite"; /** @@ -9,9 +10,9 @@ export interface IdlItem { /** The program ID of the Solana program. */ programId: string; /** The IDL of the Solana program, which can be an Anchor IDL, Shank IDL, or a string. */ - idl: AnchorIdl | ShankIdl | string; + idl: AnchorIdl | AnchorV1Idl | ShankIdl | string; /** The type of IDL used by the Solana program. */ - idlType: "anchor" | "shank" | "kinobi"; + idlType: "anchor" | "anchorV1" | "shank" | "kinobi"; /** The version of the Solana program's IDL slot. */ idlSlotVersion?: number; /** The chain ID of the Solana program. */ diff --git a/packages/explorerkit-translator/src/types/NewAnchorTypes.ts b/packages/explorerkit-translator/src/types/NewAnchorTypes.ts new file mode 100644 index 0000000..e732bd6 --- /dev/null +++ b/packages/explorerkit-translator/src/types/NewAnchorTypes.ts @@ -0,0 +1,132 @@ +// Types imported here from the anchor package is from 0.3.0 and onwards +export type IdlArrayLen = IdlArrayLenGeneric | IdlArrayLenValue; + +export type IdlArrayLenGeneric = { + generic: string; +}; + +export type IdlArrayLenValue = number; + +export type IdlGenericArg = IdlGenericArgType | IdlGenericArgConst; + +export type IdlGenericArgType = { kind: "type"; type: IdlType }; + +export type IdlGenericArgConst = { kind: "const"; value: string }; + +export type IdlType = + | "bool" + | "u8" + | "i8" + | "u16" + | "i16" + | "u32" + | "i32" + | "f32" + | "u64" + | "i64" + | "f64" + | "u128" + | "i128" + | "u256" + | "i256" + | "bytes" + | "string" + | "pubkey" + | IdlTypeOption + | IdlTypeCOption + | IdlTypeVec + | IdlTypeArray + | IdlTypeDefined + | IdlTypeGeneric; + +export type IdlTypeOption = { + option: IdlType; +}; + +export type IdlTypeCOption = { + coption: IdlType; +}; + +export type IdlTypeVec = { + vec: IdlType; +}; + +export type IdlTypeArray = { + array: [idlType: IdlType, size: IdlArrayLen]; +}; + +export type IdlTypeDefined = { + defined: { + name: string; + generics?: IdlGenericArg[]; + }; +}; + +export type IdlTypeGeneric = { + generic: string; +}; + +export type IdlField = { + name: string; + docs?: string[]; + type: IdlType; +}; + +export type IdlDefinedFields = IdlDefinedFieldsNamed | IdlDefinedFieldsTuple; + +export type IdlDefinedFieldsNamed = IdlField[]; + +export type IdlDefinedFieldsTuple = IdlType[]; + +export type IdlInstructionAccountItem = IdlInstructionAccount | IdlInstructionAccounts; + +export type IdlInstructionAccount = { + name: string; + docs?: string[]; + writable?: boolean; + signer?: boolean; + optional?: boolean; + address?: string; + pda?: IdlPda; + relations?: string[]; +}; + +export type IdlInstructionAccounts = { + name: string; + accounts: IdlInstructionAccount[]; +}; + +export type IdlPda = { + seeds: IdlSeed[]; + program?: IdlSeed; +}; + +export type IdlSeed = IdlSeedConst | IdlSeedArg | IdlSeedAccount; + +export type IdlSeedConst = { + kind: "const"; + value: number[]; +}; + +export type IdlSeedArg = { + kind: "arg"; + path: string; +}; + +export type IdlSeedAccount = { + kind: "account"; + path: string; + account?: string; +}; + +export const checkIfIdlDefinedFieldsNamed = (fields: IdlDefinedFields): fields is IdlDefinedFieldsNamed => { + const fieldsToCheck = fields as IdlDefinedFieldsNamed; + if (!fieldsToCheck[0]) return false; + if (fieldsToCheck[0].name !== undefined) return true; + + return false; +}; + +export function isIdlAccounts(accountItem: IdlInstructionAccountItem): accountItem is IdlInstructionAccounts { + return "accounts" in accountItem; +} diff --git a/packages/explorerkit-translator/tests/v2/account.test.ts b/packages/explorerkit-translator/tests/v2/account.test.ts index a93e26d..2662cac 100644 --- a/packages/explorerkit-translator/tests/v2/account.test.ts +++ b/packages/explorerkit-translator/tests/v2/account.test.ts @@ -331,3 +331,53 @@ describe("parseMetadataAccSerializer", () => { } }); }); + +describe("parseAnchorNewAccount", () => { + it("should construct an anchor 0.3.0 and above account parser for a given valid IDL", async () => { + const programId = "wns1gDLt8fgLcGhWi5MqAqgXpwEP1JftKE9eZnXS1HM"; + const idlItem = await getProgramIdl(programId); + if (idlItem) { + const parser = new SolanaFMParser(idlItem, programId); + const accountParser = parser.createParser(ParserType.ACCOUNT); + + expect(accountParser).not.toBeNull(); + } + }); + + it("should construct an anchor 0.3.0 account parser for a given valid IDL and parses the account data", async () => { + const programId = "wns1gDLt8fgLcGhWi5MqAqgXpwEP1JftKE9eZnXS1HM"; + const accountData = + "EdAyrR5/9V6m/C2k1mM8GIzYQBK00KUbfbT0m8ZLMx5rl1gIaBAJ7mEJARTO19QY9j6iHHhYBvD1stUbOdk6m9gJOh9S+6WObBMAAA=="; + const idlItem = await getProgramIdl(programId); + + if (idlItem) { + const parser = new SolanaFMParser(idlItem, programId); + const accountParser = parser.createParser(ParserType.ACCOUNT); + if (accountParser && checkIfAccountParser(accountParser)) { + const decodedData = accountParser.parseAccount(accountData, false); + expect(decodedData).not.toBeNull(); + expect(decodedData?.type).toBe("account"); + expect(decodedData?.name).toBe("TokenGroupMember"); + } + } + }); + + it("should construct an anchor 0.3.0 account parser for a given valid IDL, parses the account data and map the data that's being returned with the valid idl", async () => { + const programId = "wns1gDLt8fgLcGhWi5MqAqgXpwEP1JftKE9eZnXS1HM"; + const accountData = + "EdAyrR5/9V6m/C2k1mM8GIzYQBK00KUbfbT0m8ZLMx5rl1gIaBAJ7mEJARTO19QY9j6iHHhYBvD1stUbOdk6m9gJOh9S+6WObBMAAA=="; + const idlItem = await getProgramIdl(programId); + + if (idlItem) { + const parser = new SolanaFMParser(idlItem, programId); + const accountParser = parser.createParser(ParserType.ACCOUNT); + if (accountParser && checkIfAccountParser(accountParser)) { + const decodedData = accountParser.parseAccount(accountData, true); + expect(decodedData).not.toBeNull(); + expect(decodedData?.type).toBe("account"); + expect(decodedData?.name).toBe("TokenGroupMember"); + expect(decodedData?.data["member_number"].type).toBe("u32"); + } + } + }); +}); diff --git a/packages/explorerkit-translator/tests/v2/instruction.test.ts b/packages/explorerkit-translator/tests/v2/instruction.test.ts index 23f300a..1fb7269 100644 --- a/packages/explorerkit-translator/tests/v2/instruction.test.ts +++ b/packages/explorerkit-translator/tests/v2/instruction.test.ts @@ -307,3 +307,73 @@ describe("createAnchorParserWithSelfCPILogSupport", () => { } }); }); + +describe("createNewAnchorParser", () => { + it("should construct an anchor 0.3.0 instruction parser for a given valid IDL", async () => { + const programId = "wns1gDLt8fgLcGhWi5MqAqgXpwEP1JftKE9eZnXS1HM"; + const idlItem = await getProgramIdl(programId); + + if (idlItem) { + const parser = new SolanaFMParser(idlItem, programId); + const instructionParser = parser.createParser(ParserType.INSTRUCTION); + + expect(instructionParser).not.toBeNull(); + expect(checkIfInstructionParser(instructionParser)).toBe(true); + } + }); + + it("should construct an anchor 0.3.0 instruction parser for a given valid IDL and parses the instruction data", async () => { + const programId = "wns1gDLt8fgLcGhWi5MqAqgXpwEP1JftKE9eZnXS1HM"; + const instructionData = + "MfvwdoBpZ9LzVC6o3abmYEERuURKfjxUvHv3jZzywDMcr7mMdfdzaXwVZz4cn6wvM3yrQqiFqoFza5Eb1hFEkB8GABGePf3siPiKqifZVQ9SgDBX17rkjpphCXJZW9ExhW2nj41ve8jAq4y59Mftn8SXdRNqhjSPXNG7BXjirdwQFm6inDmyd5pTU7rwvsZNjNPj7qVAthwehw3dUwirS"; + const idlItem = await getProgramIdl(programId); + + if (idlItem) { + const parser = new SolanaFMParser(idlItem, programId); + const instructionParser = parser.createParser(ParserType.INSTRUCTION); + if (instructionParser && checkIfInstructionParser(instructionParser)) { + const decodedData = instructionParser.parseInstructions(instructionData); + expect(decodedData).not.toBeNull(); + expect(decodedData?.type).toBe("instruction"); + expect(decodedData?.name).toBe("create_mint_account"); + } + } + }); +}); + +describe("createAnchorNewParserWithMappingSupport", () => { + it("should construct an anchor 0.3.0 instruction parser for a given valid IDL and parse the instruction data with types properly mapped according to the idl", async () => { + const programId = "wns1gDLt8fgLcGhWi5MqAqgXpwEP1JftKE9eZnXS1HM"; + const instructionData = + "MfvwdoBpZ9LzVC6o3abmYEERuURKfjxUvHv3jZzywDMcr7mMdfdzaXwVZz4cn6wvM3yrQqiFqoFza5Eb1hFEkB8GABGePf3siPiKqifZVQ9SgDBX17rkjpphCXJZW9ExhW2nj41ve8jAq4y59Mftn8SXdRNqhjSPXNG7BXjirdwQFm6inDmyd5pTU7rwvsZNjNPj7qVAthwehw3dUwirS"; + + const idlItem = await getProgramIdl(programId); + + if (idlItem) { + const parser = new SolanaFMParser(idlItem, programId); + const instructionParser = parser.createParser(ParserType.INSTRUCTION); + if (instructionParser && checkIfInstructionParser(instructionParser)) { + const decodedData = instructionParser.parseInstructions( + instructionData, + [ + "MA1NqUiWSgJz4VDXjPFfNoDWqBBRpMDnT4vxEnt9qbv", + "GUPNsgXoWBpJko1GLvCRL8PUdgNPGjEqN682FpJ9wCTx", + "MA1NqUiWSgJz4VDXjPFfNoDWqBBRpMDnT4vxEnt9qbv", + "CEqhvcVmvLoGyPkP63BfA3fLZ4DZSe4yzgFxzQrBj6ms", + "6gQF7GbwhXBC78NveE7JrqcKzbY1WMrkJ6S9gs3dsamz", + "9SUrE3EPBoXVjNywEDHSJKJdxebs8H8sLgEWdueEvnKX", + "11111111111111111111111111111111", + "SysvarRent111111111111111111111111111111111", + "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", + "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", + ], + true + ); + expect(decodedData).not.toBeNull(); + expect(decodedData?.type).toBe("instruction"); + expect(decodedData?.name).toBe("create_mint_account"); + expect(decodedData?.data.args.data.name).toBe("Burger #4971"); + } + } + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea633f7..ded659a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,7 +28,7 @@ importers: version: 7.2.0 turbo: specifier: latest - version: 1.12.4 + version: 1.13.3 packages/eslint-config-explorerkit: dependencies: @@ -171,8 +171,8 @@ importers: specifier: workspace:* version: link:../tsconfig vitest: - specifier: ^0.34.2 - version: 0.34.2 + specifier: ^1.5.3 + version: 1.5.3 packages/tsconfig: {} @@ -181,6 +181,7 @@ packages: /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} + dev: true /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} @@ -225,6 +226,13 @@ packages: regenerator-runtime: 0.14.1 dev: false + /@babel/runtime@7.24.5: + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: false + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -441,9 +449,9 @@ packages: resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} engines: {node: '>=11'} dependencies: - '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.87.2) + '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.7) '@noble/hashes': 1.4.0 - '@solana/web3.js': 1.87.2 + '@solana/web3.js': 1.91.7 bn.js: 5.2.1 bs58: 4.0.1 buffer-layout: 1.2.2 @@ -472,17 +480,26 @@ packages: buffer-layout: 1.2.2 dev: false - /@coral-xyz/borsh@0.30.0(@solana/web3.js@1.87.2): + /@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.7): resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} engines: {node: '>=10'} peerDependencies: '@solana/web3.js': ^1.68.0 dependencies: - '@solana/web3.js': 1.87.2 + '@solana/web3.js': 1.91.7 bn.js: 5.2.1 buffer-layout: 1.2.2 dev: false + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -492,6 +509,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -501,6 +527,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -510,6 +545,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -519,6 +563,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -528,6 +581,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -537,6 +599,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -546,6 +617,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -555,6 +635,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -564,6 +653,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -573,6 +671,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -582,6 +689,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -591,6 +707,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -600,6 +725,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -609,6 +743,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -618,6 +761,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -627,6 +779,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -636,6 +797,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -645,6 +815,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -654,6 +833,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -663,6 +851,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -672,6 +869,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -681,6 +887,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -951,6 +1166,134 @@ packages: dev: true optional: true + /@rollup/rollup-android-arm-eabi@4.17.2: + resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.17.2: + resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.17.2: + resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.17.2: + resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.17.2: + resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.17.2: + resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.17.2: + resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.17.2: + resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: + resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.17.2: + resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.17.2: + resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.17.2: + resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.17.2: + resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.17.2: + resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.17.2: + resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.17.2: + resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -1015,6 +1358,30 @@ packages: - utf-8-validate dev: false + /@solana/web3.js@1.91.7: + resolution: {integrity: sha512-HqljZKDwk6Z4TajKRGhGLlRsbGK4S8EY27DA7v1z6yakewiUY3J7ZKDZRxcqz2MYV/ZXRrJ6wnnpiHFkPdv0WA==} + dependencies: + '@babel/runtime': 7.24.5 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.0 + node-fetch: 2.7.0 + rpc-websockets: 7.10.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + /@solanafm/kinobi-lite@0.12.0: resolution: {integrity: sha512-K3daAv8HoJzM6UiDUG1Tj0tZIcCSJENmqx5nw4J2+sOwyZm1leFvVkIHM+WOExh/IqI7PglipRJbrF0OXN007Q==} dependencies: @@ -1057,6 +1424,10 @@ packages: resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} dev: true + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: @@ -1325,6 +1696,14 @@ packages: chai: 4.3.10 dev: true + /@vitest/expect@1.5.3: + resolution: {integrity: sha512-y+waPz31pOFr3rD7vWTbwiLe5+MgsMm40jTZbQE8p8/qXyBX3CQsIXRx9XK12IbY7q/t5a5aM/ckt33b4PxK2g==} + dependencies: + '@vitest/spy': 1.5.3 + '@vitest/utils': 1.5.3 + chai: 4.4.1 + dev: true + /@vitest/runner@0.34.2: resolution: {integrity: sha512-8ydGPACVX5tK3Dl0SUwxfdg02h+togDNeQX3iXVFYgzF5odxvaou7HnquALFZkyVuYskoaHUOqOyOLpOEj5XTA==} dependencies: @@ -1333,6 +1712,14 @@ packages: pathe: 1.1.1 dev: true + /@vitest/runner@1.5.3: + resolution: {integrity: sha512-7PlfuReN8692IKQIdCxwir1AOaP5THfNkp0Uc4BKr2na+9lALNit7ub9l3/R7MP8aV61+mHKRGiqEKRIwu6iiQ==} + dependencies: + '@vitest/utils': 1.5.3 + p-limit: 5.0.0 + pathe: 1.1.2 + dev: true + /@vitest/snapshot@0.34.2: resolution: {integrity: sha512-qhQ+xy3u4mwwLxltS4Pd4SR+XHv4EajiTPNY3jkIBLUApE6/ce72neJPSUQZ7bL3EBuKI+NhvzhGj3n5baRQUQ==} dependencies: @@ -1341,12 +1728,26 @@ packages: pretty-format: 29.7.0 dev: true + /@vitest/snapshot@1.5.3: + resolution: {integrity: sha512-K3mvIsjyKYBhNIDujMD2gfQEzddLe51nNOAf45yKRt/QFJcUIeTQd2trRvv6M6oCBHNVnZwFWbQ4yj96ibiDsA==} + dependencies: + magic-string: 0.30.10 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: true + /@vitest/spy@0.34.2: resolution: {integrity: sha512-yd4L9OhfH6l0Av7iK3sPb3MykhtcRN5c5K5vm1nTbuN7gYn+yvUVVsyvzpHrjqS7EWqn9WsPJb7+0c3iuY60tA==} dependencies: tinyspy: 2.2.0 dev: true + /@vitest/spy@1.5.3: + resolution: {integrity: sha512-Llj7Jgs6lbnL55WoshJUUacdJfjU2honvGcAJBxhra5TPEzTJH8ZuhI3p/JwqqfnTr4PmP7nDmOXP53MS7GJlg==} + dependencies: + tinyspy: 2.2.1 + dev: true + /@vitest/utils@0.34.2: resolution: {integrity: sha512-Lzw+kAsTPubhoQDp1uVAOP6DhNia1GMDsI9jgB0yMn+/nDaPieYQ88lKqz/gGjSHL4zwOItvpehec9OY+rS73w==} dependencies: @@ -1355,6 +1756,15 @@ packages: pretty-format: 29.7.0 dev: true + /@vitest/utils@1.5.3: + resolution: {integrity: sha512-rE9DTN1BRhzkzqNQO+kw8ZgfeEBCLXiHJwetk668shmNBpSagQxneT5eSqEBLP+cqSiAeecvQmbpFfdMyLcIQA==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1386,11 +1796,22 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -1737,6 +2158,19 @@ packages: type-detect: 4.0.8 dev: true + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1861,6 +2295,10 @@ packages: yargs: 17.7.2 dev: true + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: true + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -2222,6 +2660,37 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -2372,7 +2841,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -2409,6 +2878,12 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2436,6 +2911,21 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /express@4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -2704,6 +3194,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -2881,10 +3376,15 @@ packages: engines: {node: '>=10.17.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: - ms: 2.1.2 + ms: 2.1.3 /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} @@ -3064,6 +3564,11 @@ packages: engines: {node: '>=8'} dev: true + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -3189,6 +3694,10 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true + /js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + dev: true + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -3216,10 +3725,6 @@ packages: /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true - /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: @@ -3276,6 +3781,14 @@ packages: engines: {node: '>=14'} dev: true + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.6.1 + pkg-types: 1.1.0 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3334,6 +3847,12 @@ packages: dependencies: yallist: 4.0.0 + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -3430,6 +3949,11 @@ packages: engines: {node: '>=6'} dev: true + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3471,8 +3995,17 @@ packages: dependencies: acorn: 8.10.0 pathe: 1.1.1 - pkg-types: 1.0.3 - ufo: 1.3.1 + pkg-types: 1.1.0 + ufo: 1.5.3 + dev: true + + /mlly@1.6.1: + resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.1.0 + ufo: 1.5.3 dev: true /ms@2.0.0: @@ -3484,7 +4017,6 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3494,8 +4026,8 @@ packages: thenify-all: 1.6.0 dev: true - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true @@ -3576,6 +4108,13 @@ packages: path-key: 3.1.1 dev: true + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3618,6 +4157,13 @@ packages: mimic-fn: 2.1.0 dev: true + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -3628,6 +4174,19 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + dev: true + + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + dev: false /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} @@ -3665,6 +4224,13 @@ packages: yocto-queue: 1.0.0 dev: true + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -3725,6 +4291,11 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true @@ -3749,6 +4320,10 @@ packages: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} dev: true + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true @@ -3778,12 +4353,12 @@ packages: find-up: 4.1.0 dev: true - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + /pkg-types@1.1.0: + resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} dependencies: - jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 + confbox: 0.1.7 + mlly: 1.6.1 + pathe: 1.1.2 dev: true /postcss-load-config@4.0.1: @@ -3806,9 +4381,18 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /preferred-pm@3.1.2: @@ -3842,7 +4426,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 dev: true /proxy-addr@2.0.7: @@ -3908,8 +4492,8 @@ packages: unpipe: 1.0.0 dev: false - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: true /read-pkg-up@7.0.1: @@ -4025,6 +4609,32 @@ packages: fsevents: 2.3.3 dev: true + /rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.17.2 + '@rollup/rollup-android-arm64': 4.17.2 + '@rollup/rollup-darwin-arm64': 4.17.2 + '@rollup/rollup-darwin-x64': 4.17.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 + '@rollup/rollup-linux-arm-musleabihf': 4.17.2 + '@rollup/rollup-linux-arm64-gnu': 4.17.2 + '@rollup/rollup-linux-arm64-musl': 4.17.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 + '@rollup/rollup-linux-riscv64-gnu': 4.17.2 + '@rollup/rollup-linux-s390x-gnu': 4.17.2 + '@rollup/rollup-linux-x64-gnu': 4.17.2 + '@rollup/rollup-linux-x64-musl': 4.17.2 + '@rollup/rollup-win32-arm64-msvc': 4.17.2 + '@rollup/rollup-win32-ia32-msvc': 4.17.2 + '@rollup/rollup-win32-x64-msvc': 4.17.2 + fsevents: 2.3.3 + dev: true + /rpc-websockets@7.10.0: resolution: {integrity: sha512-cemZ6RiDtYZpPiBzYijdOrkQQzmBCmug0E9SdRH2gIUNT15ql4mwCYWIp0VnSZq6Qrw/JkGUygp4PrK1y9KfwQ==} dependencies: @@ -4231,8 +4841,8 @@ packages: tslib: 2.6.2 dev: false - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} dev: true @@ -4298,6 +4908,10 @@ packages: resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} dev: true + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: true + /stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: @@ -4370,6 +4984,11 @@ packages: engines: {node: '>=6'} dev: true + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -4387,6 +5006,12 @@ packages: acorn: 8.10.0 dev: true + /strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + dependencies: + js-tokens: 9.0.0 + dev: true + /sucrase@3.34.0: resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} engines: {node: '>=8'} @@ -4500,16 +5125,30 @@ packages: resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} dev: true + /tinybench@2.8.0: + resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + dev: true + /tinypool@0.7.0: resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} engines: {node: '>=14.0.0'} dev: true + /tinypool@0.8.4: + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + engines: {node: '>=14.0.0'} + dev: true + /tinyspy@2.2.0: resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} engines: {node: '>=14.0.0'} dev: true + /tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -4623,64 +5262,64 @@ packages: yargs: 17.7.2 dev: true - /turbo-darwin-64@1.12.4: - resolution: {integrity: sha512-dBwFxhp9isTa9RS/fz2gDVk5wWhKQsPQMozYhjM7TT4jTrnYn0ZJMzr7V3B/M/T8QF65TbniW7w1gtgxQgX5Zg==} + /turbo-darwin-64@1.13.3: + resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.12.4: - resolution: {integrity: sha512-1Uo5iI6xsJ1j9ObsqxYRsa3W26mEbUe6fnj4rQYV6kDaqYD54oAMJ6hM53q9rB8JvFxwdrUXGp3PwTw9A0qqkA==} + /turbo-darwin-arm64@1.13.3: + resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.12.4: - resolution: {integrity: sha512-ONg2aSqKP7LAQOg7ysmU5WpEQp4DGNxSlAiR7um+LKtbmC/UxogbR5+T+Uuq6zGuQ5kJyKjWJ4NhtvUswOqBsA==} + /turbo-linux-64@1.13.3: + resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.12.4: - resolution: {integrity: sha512-9FPufkwdgfIKg/9jj87Cdtftw8o36y27/S2vLN7FTR2pp9c0MQiTBOLVYadUr1FlShupddmaMbTkXEhyt9SdrA==} + /turbo-linux-arm64@1.13.3: + resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.12.4: - resolution: {integrity: sha512-2mOtxHW5Vjh/5rDVu/aFwsMzI+chs8XcEuJHlY1sYOpEymYTz+u6AXbnzRvwZFMrLKr7J7fQOGl+v96sLKbNdA==} + /turbo-windows-64@1.13.3: + resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.12.4: - resolution: {integrity: sha512-nOY5wae9qnxPOpT1fRuYO0ks6dTwpKMPV6++VkDkamFDLFHUDVM/9kmD2UTeh1yyrKnrZksbb9zmShhmfj1wog==} + /turbo-windows-arm64@1.13.3: + resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.12.4: - resolution: {integrity: sha512-yUJ7elEUSToiGwFZogXpYKJpQ0BvaMbkEuQECIWtkBLcmWzlMOt6bActsIm29oN83mRU0WbzGt4e8H1KHWedhg==} + /turbo@1.13.3: + resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} hasBin: true optionalDependencies: - turbo-darwin-64: 1.12.4 - turbo-darwin-arm64: 1.12.4 - turbo-linux-64: 1.12.4 - turbo-linux-arm64: 1.12.4 - turbo-windows-64: 1.12.4 - turbo-windows-arm64: 1.12.4 + turbo-darwin-64: 1.13.3 + turbo-darwin-arm64: 1.13.3 + turbo-linux-64: 1.13.3 + turbo-linux-arm64: 1.13.3 + turbo-windows-64: 1.13.3 + turbo-windows-arm64: 1.13.3 dev: true /type-check@0.4.0: @@ -4765,8 +5404,8 @@ packages: hasBin: true dev: false - /ufo@1.3.1: - resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} dev: true /unbox-primitive@1.0.2: @@ -4859,6 +5498,27 @@ packages: - terser dev: true + /vite-node@1.5.3: + resolution: {integrity: sha512-axFo00qiCpU/JLd8N1gu9iEYL3xTbMbMrbe5nDp9GL0nb6gurIdZLkkFogZXWnE8Oyy5kfSLwNVIcVsnhE7lgQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@5.5.0) + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.2.10 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite@4.5.0(@types/node@20.10.4): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -4895,6 +5555,41 @@ packages: fsevents: 2.3.3 dev: true + /vite@5.2.10: + resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.17.2 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /vitest@0.34.2: resolution: {integrity: sha512-WgaIvBbjsSYMq/oiMlXUI7KflELmzM43BEvkdC/8b5CAod4ryAiY2z8uR6Crbi5Pjnu5oOmhKa9sy7uk6paBxQ==} engines: {node: '>=v14.18.0'} @@ -4960,6 +5655,61 @@ packages: - terser dev: true + /vitest@1.5.3: + resolution: {integrity: sha512-2oM7nLXylw3mQlW6GXnRriw+7YvZFk/YNV8AxIC3Z3MfFbuziLGWP9GPxxu/7nRlXhqyxBikpamr+lEEj1sUEw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.5.3 + '@vitest/ui': 1.5.3 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@vitest/expect': 1.5.3 + '@vitest/runner': 1.5.3 + '@vitest/snapshot': 1.5.3 + '@vitest/spy': 1.5.3 + '@vitest/utils': 1.5.3 + acorn-walk: 8.3.2 + chai: 4.4.1 + debug: 4.3.4(supports-color@5.5.0) + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.10 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 2.1.0 + tinybench: 2.8.0 + tinypool: 0.8.4 + vite: 5.2.10 + vite-node: 1.5.3 + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -5043,6 +5793,11 @@ packages: stackback: 0.0.2 dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: false + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} From 8f64f50c03dcb950c982370c7f7a308b1f917f3c Mon Sep 17 00:00:00 2001 From: zamielchia Date: Fri, 3 May 2024 05:04:17 +0800 Subject: [PATCH 3/6] test: add test cases for 0.3.0 anchor idls --- packages/explorerkit-idls/package.json | 2 +- packages/explorerkit-idls/tests/idls.test.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/explorerkit-idls/package.json b/packages/explorerkit-idls/package.json index 23d9242..d5180f7 100644 --- a/packages/explorerkit-idls/package.json +++ b/packages/explorerkit-idls/package.json @@ -31,7 +31,7 @@ "@vitest/coverage-v8": "^0.34.2", "eslint": "^8.47.0", "eslint-config-explorerkit": "workspace:*", - "vitest": "^0.34.2" + "vitest": "^1.5.3" }, "dependencies": { "@coral-xyz/anchor": "^0.29.0", diff --git a/packages/explorerkit-idls/tests/idls.test.ts b/packages/explorerkit-idls/tests/idls.test.ts index 9448991..b848fac 100644 --- a/packages/explorerkit-idls/tests/idls.test.ts +++ b/packages/explorerkit-idls/tests/idls.test.ts @@ -130,6 +130,12 @@ describe("getProgramIdl", () => { expect(idl).not.toBeNull(); expect(idl?.idlType).toBe("anchor"); }); + + it("should return a anchor 0.3.0 idl from the cloud repository", async () => { + const idl = await getProgramIdl("wns1gDLt8fgLcGhWi5MqAqgXpwEP1JftKE9eZnXS1HM"); + expect(idl).not.toBeNull(); + expect(idl?.idlType).toBe("anchorV1"); + }); }); describe("getMultipleProgramIdls", () => { From a41ebf4fe4a9ad3c5f67a54c94616a83a1c69fdc Mon Sep 17 00:00:00 2001 From: zamielchia Date: Fri, 3 May 2024 05:04:39 +0800 Subject: [PATCH 4/6] fix: make anchorV1 idls checks to be more friendly --- .../src/idls/IdlRepository.ts | 6 +- pnpm-lock.yaml | 66 +++++++++++++++---- 2 files changed, 54 insertions(+), 18 deletions(-) diff --git a/packages/explorerkit-idls/src/idls/IdlRepository.ts b/packages/explorerkit-idls/src/idls/IdlRepository.ts index 1e284a9..7d07e4f 100644 --- a/packages/explorerkit-idls/src/idls/IdlRepository.ts +++ b/packages/explorerkit-idls/src/idls/IdlRepository.ts @@ -53,10 +53,8 @@ export const checkIdlIsAnchor = (idl: AnchorIdl | AnchorV1Idl | ShankIdl | strin export const checkIdlIsAnchorV1 = (idl: AnchorIdl | AnchorV1Idl | ShankIdl | string): idl is AnchorV1Idl => { const anchorIdl = idl as AnchorV1Idl; // you can differentiate IDLs from their `idl.metadata.spec` field (legacy/old if non-existent) - if (anchorIdl.metadata !== undefined && !anchorIdl.metadata.spec) return false; - if (anchorIdl.instructions !== undefined) return true; - - return false; + if (anchorIdl.metadata && anchorIdl.metadata.spec) return true; + else return false; }; /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ded659a..fe76aab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,7 +65,7 @@ importers: devDependencies: '@vitest/coverage-v8': specifier: ^0.34.2 - version: 0.34.2(vitest@0.34.2) + version: 0.34.2(vitest@1.5.3) eslint: specifier: ^8.47.0 version: 8.48.0 @@ -73,8 +73,8 @@ importers: specifier: workspace:* version: link:../eslint-config-explorerkit vitest: - specifier: ^0.34.2 - version: 0.34.2 + specifier: ^1.5.3 + version: 1.5.3 packages/explorerkit-server: dependencies: @@ -1419,6 +1419,12 @@ packages: resolution: {integrity: sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==} dependencies: '@types/node': 20.10.4 + dev: true + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 12.20.55 /@types/cookiejar@2.1.5: resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} @@ -1483,6 +1489,7 @@ packages: resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} dependencies: undici-types: 5.26.5 + dev: true /@types/normalize-package-data@2.4.3: resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} @@ -1530,7 +1537,7 @@ packages: /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 20.10.4 + '@types/node': 12.20.55 /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} @@ -1688,6 +1695,27 @@ packages: - supports-color dev: true + /@vitest/coverage-v8@0.34.2(vitest@1.5.3): + resolution: {integrity: sha512-3VuDZPeGGd1zWtc0Tdj9cHSbFc8IQ0ffnWp9MlhItOkziN6HEf219meZ9cZheg/hJXrXb+Fi2bMu7GeCAfL4yA==} + peerDependencies: + vitest: '>=0.32.0 <1' + dependencies: + '@ampproject/remapping': 2.2.1 + '@bcoe/v8-coverage': 0.2.3 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + magic-string: 0.30.5 + picocolors: 1.0.0 + std-env: 3.4.3 + test-exclude: 6.0.0 + v8-to-istanbul: 9.1.3 + vitest: 1.5.3 + transitivePeerDependencies: + - supports-color + dev: true + /@vitest/expect@0.34.2: resolution: {integrity: sha512-EZm2dMNlLyIfDMha17QHSQcg2KjeAZaXd65fpPzXY5bvnfx10Lcaz3N55uEe8PhF+w4pw+hmrlHLLlRn9vkBJg==} dependencies: @@ -2093,7 +2121,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.1 /bundle-require@4.0.2(esbuild@0.18.20): resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} @@ -3669,7 +3697,7 @@ packages: engines: {node: '>=8'} hasBin: true dependencies: - '@types/connect': 3.4.37 + '@types/connect': 3.4.38 '@types/node': 12.20.55 '@types/ws': 7.4.7 JSONStream: 1.3.5 @@ -3785,7 +3813,7 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} dependencies: - mlly: 1.6.1 + mlly: 1.7.0 pkg-types: 1.1.0 dev: true @@ -4008,6 +4036,15 @@ packages: ufo: 1.5.3 dev: true + /mlly@1.7.0: + resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.1.0 + ufo: 1.5.3 + dev: true + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: false @@ -4058,8 +4095,8 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-gyp-build@4.6.1: - resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} + /node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} hasBin: true requiresBuild: true @@ -5423,6 +5460,7 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -5444,7 +5482,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.1 /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} @@ -5507,7 +5545,7 @@ packages: debug: 4.3.4(supports-color@5.5.0) pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.10 + vite: 5.2.11 transitivePeerDependencies: - '@types/node' - less @@ -5555,8 +5593,8 @@ packages: fsevents: 2.3.3 dev: true - /vite@5.2.10: - resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==} + /vite@5.2.11: + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -5697,7 +5735,7 @@ packages: strip-literal: 2.1.0 tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.2.10 + vite: 5.2.11 vite-node: 1.5.3 why-is-node-running: 2.2.2 transitivePeerDependencies: From 89524cc33106cf5aa22d0b65a73c80abec68cd62 Mon Sep 17 00:00:00 2001 From: zamielchia Date: Fri, 3 May 2024 05:05:25 +0800 Subject: [PATCH 5/6] docs(changeset): feat: add support for anchorV1 idls (0.3.0 --- .changeset/dull-dolls-dance.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/dull-dolls-dance.md diff --git a/.changeset/dull-dolls-dance.md b/.changeset/dull-dolls-dance.md new file mode 100644 index 0000000..766e7b9 --- /dev/null +++ b/.changeset/dull-dolls-dance.md @@ -0,0 +1,6 @@ +--- +"@solanafm/explorer-kit": minor +"@solanafm/explorer-kit-idls": minor +--- + +feat: add support for anchorV1 idls (0.3.0 From edb58f14d8db396c4050395ffa9ed26e68604cd9 Mon Sep 17 00:00:00 2001 From: zamielchia Date: Fri, 3 May 2024 05:05:46 +0800 Subject: [PATCH 6/6] docs: add changeset --- .changeset/dull-dolls-dance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/dull-dolls-dance.md b/.changeset/dull-dolls-dance.md index 766e7b9..7d3be73 100644 --- a/.changeset/dull-dolls-dance.md +++ b/.changeset/dull-dolls-dance.md @@ -3,4 +3,4 @@ "@solanafm/explorer-kit-idls": minor --- -feat: add support for anchorV1 idls (0.3.0 +feat: add support for anchorV1 idls (0.3.0)