diff --git a/.changeset/loud-wolves-rest.md b/.changeset/loud-wolves-rest.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/loud-wolves-rest.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/apps/docs-snippets/package.json b/apps/docs-snippets/package.json index 555861434dd..f28744bd6dd 100644 --- a/apps/docs-snippets/package.json +++ b/apps/docs-snippets/package.json @@ -8,10 +8,11 @@ "build:forc": "pnpm fuels-forc build -p test/fixtures/forc-projects --release" }, "devDependencies": { - "fuels": "workspace:*", - "@fuel-ts/utils": "workspace:*", + "@fuel-ts/account": "workspace:*", "@fuel-ts/errors": "workspace:*", - "@fuel-ts/account": "workspace:*" + "@fuel-ts/utils": "workspace:*", + "ethers": "^6.7.1", + "fuels": "workspace:*" }, "keywords": [], "author": "", diff --git a/apps/docs-snippets/src/guide/types/numbers.test.ts b/apps/docs-snippets/src/guide/types/numbers.test.ts new file mode 100644 index 00000000000..cc4c89da24d --- /dev/null +++ b/apps/docs-snippets/src/guide/types/numbers.test.ts @@ -0,0 +1,73 @@ +import { toBigInt } from 'ethers'; +import { bn } from 'fuels'; + +import { DocSnippetProjectsEnum } from '../../../test/fixtures/forc-projects'; +import { createAndDeployContractFromProject } from '../../utils'; + +/** + * @group node + */ +describe(__filename, () => { + test('should successfully create new Sway-compatible BigNumber from a JavaScript number', () => { + // #region numbers-docs-1 + // #context import { bn } from 'fuels'; + + const originalNumber = 20; + + const bigNumber = bn(originalNumber); + + expect(bigNumber.toNumber()).toEqual(originalNumber); + // #endregion numbers-docs-1 + }); + + test('should successfully create new Sway-compatible BigNumber from a string', () => { + // #region numbers-docs-2 + // #context import { bn } from 'fuels'; + + const originalNumber = '9007199254740992'; + + const bigNumber = bn(originalNumber); + + expect(bigNumber.toString()).toEqual(originalNumber); + // #endregion numbers-docs-2 + }); + + test('should succcesfully pass in and read a number to/from a contract', async () => { + const contract = await createAndDeployContractFromProject(DocSnippetProjectsEnum.ECHO_VALUES); + + // #region numbers-docs-3 + const originalNumber = 20; + + const { value } = await contract.functions.echo_u64(bn(originalNumber)).call(); + + expect(value.toNumber()).toEqual(originalNumber); + // #endregion numbers-docs-3 + }); + + test('should succcesfully pass in and read a number to/from a contract - small numbers', async () => { + const contract = await createAndDeployContractFromProject(DocSnippetProjectsEnum.ECHO_VALUES); + + // #region numbers-docs-4 + const originalNumber = 20; + + const { value } = await contract.functions.echo_u8(originalNumber).call(); + + expect(value).toEqual(originalNumber); + // #endregion numbers-docs-4 + }); + + test('ethers -> fuels BigNum conversion', () => { + // #region numbers-docs-5 + // #context import { toBigInt } from 'ethers'; + // #context import { bn } from 'fuels'; + + const originalNumber = 20; + + const ethersBigNum = toBigInt(originalNumber); + + const fuelsBigNum = bn(ethersBigNum.toString()); + + expect(fuelsBigNum.toNumber()).toEqual(originalNumber); + // #endregion numbers-docs-5 + }); +}); diff --git a/apps/docs-snippets/test/fixtures/forc-projects/echo-values/src/main.sw b/apps/docs-snippets/test/fixtures/forc-projects/echo-values/src/main.sw index 513cccc1f07..9d6c7c85396 100644 --- a/apps/docs-snippets/test/fixtures/forc-projects/echo-values/src/main.sw +++ b/apps/docs-snippets/test/fixtures/forc-projects/echo-values/src/main.sw @@ -13,6 +13,8 @@ abi EchoValues { fn echo_tuple(tuple: (u8, bool, u64)) -> (u8, bool, u64); fn echo_b512(input: B512) -> B512; + + fn echo_u64(value: u64) -> u64; } impl EchoValues for Contract { @@ -44,5 +46,8 @@ impl EchoValues for Contract { input } // #endregion bits512-3 + fn echo_u64(value: u64) -> u64 { + value + } } // #endregion understanding-fuel-binary-file diff --git a/apps/docs/.vitepress/config.ts b/apps/docs/.vitepress/config.ts index 7c1c7239bca..271ee9e6e53 100644 --- a/apps/docs/.vitepress/config.ts +++ b/apps/docs/.vitepress/config.ts @@ -124,6 +124,10 @@ export default defineConfig({ text: 'Bytes32', link: '/guide/types/bytes32', }, + { + text: 'Numbers', + link: '/guide/types/numbers', + }, { text: 'String', link: '/guide/types/string', diff --git a/apps/docs/src/guide/types/numbers.md b/apps/docs/src/guide/types/numbers.md new file mode 100644 index 00000000000..2abaa5b2edf --- /dev/null +++ b/apps/docs/src/guide/types/numbers.md @@ -0,0 +1,45 @@ +# Numbers + +In Sway, there are multiple types of numbers: + +1. `u8` (8-bit unsigned integer) +2. `u16` (16-bit unsigned integer) +3. `u32` (32-bit unsigned integer) +4. `u64` (64-bit unsigned integer) +5. `u256` (256-bit unsigned integer) + +This guide explains how to create and interact with Sway numbers while using the SDK. + +> Note: The TS SDK does not have support for the `u256` type yet. + +## Creating Numbers + +### For `u64` + +When you pass in a `u64` to a Sway program from JavaScript, you must first convert it to a `BigNum` object. Here's how you can do that: + +<<< @/../../docs-snippets/src/guide/types/numbers.test.ts#numbers-docs-1{ts:line-numbers} + +You can also create a `BigNum` from a string. This is useful when you want to pass in a number that is too large to be represented as a JavaScript number. Here's how you can do that: + +<<< @/../../docs-snippets/src/guide/types/numbers.test.ts#numbers-docs-2{ts:line-numbers} + +### For `u8`, `u16`, `u32` and `u64` + +You don't need to do anything special to create these numbers. You can pass in a JavaScript number directly. See the examples below for more details. + +## Examples: Interacting with Numbers in Contract Methods + +### For `u64` + +<<< @/../../docs-snippets/src/guide/types/numbers.test.ts#numbers-docs-3{ts:line-numbers} + +> Note: If a contract call returns a number that is too large to be represented as a JavaScript number, you can convert it to a string using the `.toString()` method instead of `.toNumber()`. + +### For `u8`, `u16`, `u32` and `u64` + +<<< @/../../docs-snippets/src/guide/types/numbers.test.ts#numbers-docs-4{ts:line-numbers} + +### Using a `BigNum` from `ethers` with `fuels` + +<<< @/../../docs-snippets/src/guide/types/numbers.test.ts#numbers-docs-5{ts:line-numbers} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 67d713ace9c..4239ffc87a8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -386,6 +386,9 @@ importers: '@fuel-ts/utils': specifier: workspace:* version: link:../../packages/utils + ethers: + specifier: ^6.7.1 + version: 6.7.1 fuels: specifier: workspace:* version: link:../../packages/fuels @@ -1121,7 +1124,6 @@ packages: /@adraffy/ens-normalize@1.9.2: resolution: {integrity: sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==} - dev: false /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1)(search-insights@2.11.0): resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} @@ -4880,7 +4882,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -4892,7 +4894,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 @@ -4913,7 +4915,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -4950,7 +4952,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 jest-mock: 27.5.1 dev: false @@ -4967,7 +4969,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 20.10.5 + '@types/node': 20.11.13 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -4996,7 +4998,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -5111,7 +5113,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: false @@ -5123,7 +5125,7 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: false @@ -5135,7 +5137,7 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: false @@ -5561,7 +5563,6 @@ packages: /@noble/hashes@1.1.2: resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} - dev: false /@noble/hashes@1.3.1: resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} @@ -5575,7 +5576,6 @@ packages: /@noble/secp256k1@1.7.1: resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} - dev: false /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -6401,13 +6401,13 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/bonjour@3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/cli-table@0.3.1: @@ -6418,13 +6418,13 @@ packages: resolution: {integrity: sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==} dependencies: '@types/express-serve-static-core': 4.17.35 - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/eslint-scope@3.7.4: @@ -6455,7 +6455,7 @@ packages: /@types/express-serve-static-core@4.17.35: resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 @@ -6484,7 +6484,7 @@ packages: /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/html-minifier-terser@6.1.0: @@ -6502,7 +6502,7 @@ packages: /@types/http-proxy@1.17.11: resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/is-ci@3.0.0: @@ -6645,7 +6645,6 @@ packages: /@types/node@18.15.13: resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} - dev: false /@types/node@18.15.3: resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==} @@ -6659,7 +6658,6 @@ packages: resolution: {integrity: sha512-5G4zQwdiQBSWYTDAH1ctw2eidqdhMJaNsiIDKHFr55ihz5Trl2qqR8fdrT732yPBho5gkNxXm67OxWFBqX9aPg==} dependencies: undici-types: 5.26.5 - dev: true /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -6720,7 +6718,7 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/retry@0.12.0: @@ -6752,7 +6750,7 @@ packages: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: '@types/mime': 1.3.2 - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/serve-index@1.9.1: @@ -6766,13 +6764,13 @@ packages: dependencies: '@types/http-errors': 2.0.1 '@types/mime': 3.0.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/sockjs@0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /@types/stack-utils@2.0.1: @@ -7848,7 +7846,6 @@ packages: /aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} - dev: false /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -11773,7 +11770,6 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: false /event-target-polyfill@0.0.3: resolution: {integrity: sha512-ZMc6UuvmbinrCk4RzGyVmRyIsAyxMRlp4CqSrcQRO8Dy0A9ldbiRy5kdtBj4OtP7EClGdqGfIqo9JmOClMsGLQ==} @@ -13834,7 +13830,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -13969,7 +13965,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -13987,7 +13983,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 jest-mock: 27.5.1 jest-util: 27.5.1 dev: false @@ -14008,7 +14004,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.6 - '@types/node': 20.10.5 + '@types/node': 20.11.13 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -14030,7 +14026,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -14125,7 +14121,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 dev: false /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): @@ -14186,7 +14182,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -14243,7 +14239,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 graceful-fs: 4.2.11 dev: false @@ -14282,7 +14278,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -14294,7 +14290,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -14306,7 +14302,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 20.10.5 + '@types/node': 20.11.13 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -14347,7 +14343,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.10.5 + '@types/node': 20.11.13 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -14360,7 +14356,7 @@ packages: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.10.5 + '@types/node': 20.11.13 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 @@ -14372,7 +14368,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 merge-stream: 2.0.0 supports-color: 7.2.0 dev: false @@ -14381,7 +14377,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -14390,7 +14386,7 @@ packages: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.11.13 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -19898,7 +19894,6 @@ packages: /tslib@2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - dev: false /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} @@ -21493,7 +21488,6 @@ packages: optional: true utf-8-validate: optional: true - dev: false /xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==}