From f810e65ea270a1dc51c77f2079c34182b363eb98 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 12 Nov 2020 14:45:32 +0100 Subject: [PATCH] Additional enum tests (#2842) * Additional enum tests * Adjust compare files * Remove debug log --- packages/api-contract/src/Abi.spec.ts | 4 +- .../api-contract/src/MetaRegistry.spec.ts | 6 +- ...ator.test.json => ink_delegator.test.json} | 0 .../{dns.test.json => ink_dns.test.json} | 6 +- .../{erc20.test.json => ink_erc20.test.json} | 0 ...{erc721.test.json => ink_erc721.test.json} | 6 +- ...lipper.test.json => ink_flipper.test.json} | 0 ...er.test.json => ink_incrementer.test.json} | 0 ....test.json => ink_multisigPlain.test.json} | 2 +- ...256.test.json => solang_ints256.test.json} | 0 ...test.json => user_assetTransfer.test.json} | 0 .../test/compare/user_enumExample.test.json | 422 ++++++++++++++ ...ng.test.json => user_withString.test.json} | 2 +- packages/api-contract/test/contracts/index.ts | 21 +- .../test/contracts/user/enumExample.json | 528 ++++++++++++++++++ .../test/contracts/user/enumExample.wasm | Bin 0 -> 5473 bytes .../api-contract/test/contracts/user/index.ts | 1 + packages/api-derive/src/util/index.ts | 4 +- packages/api-derive/src/util/memo.ts | 3 +- .../src/decorate/storage/createFunction.ts | 2 +- .../src/decorate/storage/getHasher.spec.ts | 2 +- .../src/decorate/storage/getHasher.ts | 2 +- packages/rpc-core/src/index.ts | 3 +- .../rpc-core/src/{rxjs => util}/drr.spec.ts | 2 +- packages/rpc-core/src/{rxjs => util}/drr.ts | 0 packages/rpc-core/src/{rxjs => util}/index.ts | 1 + .../src/{ => util}/normalizer.spec.ts | 2 +- .../rpc-core/src/{ => util}/normalizer.ts | 2 +- .../src/{rxjs => util}/refCountDelay.ts | 0 .../scripts/polkadot-types-chain-info.js | 4 +- .../scripts/polkadot-types-from-chain.js | 4 +- .../scripts/polkadot-types-from-defs.js | 4 +- .../polkadot-types-internal-interfaces.js | 4 +- .../polkadot-types-internal-metadata.js | 4 +- packages/typegen/src/extractChain.ts | 2 +- packages/typegen/src/fromChain.ts | 12 +- packages/typegen/src/fromDefs.ts | 2 +- packages/typegen/src/generate/consts.ts | 2 +- packages/typegen/src/generate/index.ts | 9 + .../typegen/src/generate/interfaceRegistry.ts | 2 +- packages/typegen/src/generate/query.ts | 2 +- packages/typegen/src/generate/rpc.ts | 2 +- packages/typegen/src/generate/tsDef.ts | 2 +- packages/typegen/src/generate/tx.ts | 2 +- packages/typegen/src/interfacesTs.ts | 21 +- packages/typegen/src/metadataMd.ts | 2 +- packages/types-known/src/upgrades/kusama.ts | 2 +- packages/types/src/codec/Enum.spec.ts | 98 ++-- packages/types/src/create/encodeTypes.ts | 2 +- packages/types/src/create/getTypeDef.ts | 2 +- packages/types/src/create/index.ts | 4 - packages/types/src/create/sanitize.ts | 2 +- packages/types/src/primitive/Type.ts | 2 +- 53 files changed, 1091 insertions(+), 122 deletions(-) rename packages/api-contract/test/compare/{delegator.test.json => ink_delegator.test.json} (100%) rename packages/api-contract/test/compare/{dns.test.json => ink_dns.test.json} (95%) rename packages/api-contract/test/compare/{erc20.test.json => ink_erc20.test.json} (100%) rename packages/api-contract/test/compare/{erc721.test.json => ink_erc721.test.json} (96%) rename packages/api-contract/test/compare/{flipper.test.json => ink_flipper.test.json} (100%) rename packages/api-contract/test/compare/{incrementer.test.json => ink_incrementer.test.json} (100%) rename packages/api-contract/test/compare/{multisigPlain.test.json => ink_multisigPlain.test.json} (99%) rename packages/api-contract/test/compare/{ints256.test.json => solang_ints256.test.json} (100%) rename packages/api-contract/test/compare/{assetTransfer.test.json => user_assetTransfer.test.json} (100%) create mode 100644 packages/api-contract/test/compare/user_enumExample.test.json rename packages/api-contract/test/compare/{withString.test.json => user_withString.test.json} (99%) create mode 100644 packages/api-contract/test/contracts/user/enumExample.json create mode 100644 packages/api-contract/test/contracts/user/enumExample.wasm rename packages/rpc-core/src/{rxjs => util}/drr.spec.ts (96%) rename packages/rpc-core/src/{rxjs => util}/drr.ts (100%) rename packages/rpc-core/src/{rxjs => util}/index.ts (84%) rename packages/rpc-core/src/{ => util}/normalizer.spec.ts (96%) rename packages/rpc-core/src/{ => util}/normalizer.ts (78%) rename packages/rpc-core/src/{rxjs => util}/refCountDelay.ts (100%) create mode 100644 packages/typegen/src/generate/index.ts diff --git a/packages/api-contract/src/Abi.spec.ts b/packages/api-contract/src/Abi.spec.ts index 51bd212caf..b211aab613 100644 --- a/packages/api-contract/src/Abi.spec.ts +++ b/packages/api-contract/src/Abi.spec.ts @@ -3,9 +3,7 @@ import { Abi } from '.'; -import * as testContracts from '../test/contracts'; - -const abis: Record = { ...testContracts }; +import abis from '../test/contracts'; interface JSONAbi { spec: { diff --git a/packages/api-contract/src/MetaRegistry.spec.ts b/packages/api-contract/src/MetaRegistry.spec.ts index edf2c98e74..3688771726 100644 --- a/packages/api-contract/src/MetaRegistry.spec.ts +++ b/packages/api-contract/src/MetaRegistry.spec.ts @@ -6,9 +6,7 @@ import path from 'path'; import { Abi } from '.'; -import * as testContracts from '../test/contracts'; - -const abis: Record = { ...testContracts }; +import abis from '../test/contracts'; describe('MetaRegistry', (): void => { Object.keys(abis).forEach((abiName) => { @@ -33,6 +31,6 @@ describe('MetaRegistry', (): void => { }); it('stores base project as JSON', (): void => { - expect(new Abi(abis.dns).json).toEqual(abis.dns); + expect(new Abi(abis.ink_dns).json).toEqual(abis.ink_dns); }); }); diff --git a/packages/api-contract/test/compare/delegator.test.json b/packages/api-contract/test/compare/ink_delegator.test.json similarity index 100% rename from packages/api-contract/test/compare/delegator.test.json rename to packages/api-contract/test/compare/ink_delegator.test.json diff --git a/packages/api-contract/test/compare/dns.test.json b/packages/api-contract/test/compare/ink_dns.test.json similarity index 95% rename from packages/api-contract/test/compare/dns.test.json rename to packages/api-contract/test/compare/ink_dns.test.json index bf60a18cc0..76e6ea4ca2 100644 --- a/packages/api-contract/test/compare/dns.test.json +++ b/packages/api-contract/test/compare/ink_dns.test.json @@ -169,7 +169,7 @@ "type": "Null" } ], - "type": "{ _enum: [\"NameAlreadyExists\", \"CallerIsNotOwner\"] }" + "type": "{ \"_enum\": [\"NameAlreadyExists\", \"CallerIsNotOwner\"] }" } ], "info": 7, @@ -203,7 +203,7 @@ "type": "Null" } ], - "type": "{ _enum: [\"NameAlreadyExists\", \"CallerIsNotOwner\"] }" + "type": "{ \"_enum\": [\"NameAlreadyExists\", \"CallerIsNotOwner\"] }" } ], "type": "Result<(), Error>" @@ -235,7 +235,7 @@ "type": "Null" } ], - "type": "{ _enum: [\"NameAlreadyExists\", \"CallerIsNotOwner\"] }" + "type": "{ \"_enum\": [\"NameAlreadyExists\", \"CallerIsNotOwner\"] }" }, { "displayName": "Option", diff --git a/packages/api-contract/test/compare/erc20.test.json b/packages/api-contract/test/compare/ink_erc20.test.json similarity index 100% rename from packages/api-contract/test/compare/erc20.test.json rename to packages/api-contract/test/compare/ink_erc20.test.json diff --git a/packages/api-contract/test/compare/erc721.test.json b/packages/api-contract/test/compare/ink_erc721.test.json similarity index 96% rename from packages/api-contract/test/compare/erc721.test.json rename to packages/api-contract/test/compare/ink_erc721.test.json index 084fda2ce6..0bcc167a91 100644 --- a/packages/api-contract/test/compare/erc721.test.json +++ b/packages/api-contract/test/compare/ink_erc721.test.json @@ -404,7 +404,7 @@ "type": "Null" } ], - "type": "{ _enum: [\"NotOwner\", \"NotApproved\", \"TokenExists\", \"TokenNotFound\", \"CannotInsert\", \"CannotRemove\", \"CannotFetchValue\", \"NotAllowed\"] }" + "type": "{ \"_enum\": [\"NotOwner\", \"NotApproved\", \"TokenExists\", \"TokenNotFound\", \"CannotInsert\", \"CannotRemove\", \"CannotFetchValue\", \"NotAllowed\"] }" } ], "info": 7, @@ -486,7 +486,7 @@ "type": "Null" } ], - "type": "{ _enum: [\"NotOwner\", \"NotApproved\", \"TokenExists\", \"TokenNotFound\", \"CannotInsert\", \"CannotRemove\", \"CannotFetchValue\", \"NotAllowed\"] }" + "type": "{ \"_enum\": [\"NotOwner\", \"NotApproved\", \"TokenExists\", \"TokenNotFound\", \"CannotInsert\", \"CannotRemove\", \"CannotFetchValue\", \"NotAllowed\"] }" } ], "type": "Result<(), Error>" @@ -566,6 +566,6 @@ "type": "Null" } ], - "type": "{ _enum: [\"NotOwner\", \"NotApproved\", \"TokenExists\", \"TokenNotFound\", \"CannotInsert\", \"CannotRemove\", \"CannotFetchValue\", \"NotAllowed\"] }" + "type": "{ \"_enum\": [\"NotOwner\", \"NotApproved\", \"TokenExists\", \"TokenNotFound\", \"CannotInsert\", \"CannotRemove\", \"CannotFetchValue\", \"NotAllowed\"] }" } ] \ No newline at end of file diff --git a/packages/api-contract/test/compare/flipper.test.json b/packages/api-contract/test/compare/ink_flipper.test.json similarity index 100% rename from packages/api-contract/test/compare/flipper.test.json rename to packages/api-contract/test/compare/ink_flipper.test.json diff --git a/packages/api-contract/test/compare/incrementer.test.json b/packages/api-contract/test/compare/ink_incrementer.test.json similarity index 100% rename from packages/api-contract/test/compare/incrementer.test.json rename to packages/api-contract/test/compare/ink_incrementer.test.json diff --git a/packages/api-contract/test/compare/multisigPlain.test.json b/packages/api-contract/test/compare/ink_multisigPlain.test.json similarity index 99% rename from packages/api-contract/test/compare/multisigPlain.test.json rename to packages/api-contract/test/compare/ink_multisigPlain.test.json index 7f8395152c..b36e8c5989 100644 --- a/packages/api-contract/test/compare/multisigPlain.test.json +++ b/packages/api-contract/test/compare/ink_multisigPlain.test.json @@ -679,4 +679,4 @@ }, "type": "Option>" } -] +] \ No newline at end of file diff --git a/packages/api-contract/test/compare/ints256.test.json b/packages/api-contract/test/compare/solang_ints256.test.json similarity index 100% rename from packages/api-contract/test/compare/ints256.test.json rename to packages/api-contract/test/compare/solang_ints256.test.json diff --git a/packages/api-contract/test/compare/assetTransfer.test.json b/packages/api-contract/test/compare/user_assetTransfer.test.json similarity index 100% rename from packages/api-contract/test/compare/assetTransfer.test.json rename to packages/api-contract/test/compare/user_assetTransfer.test.json diff --git a/packages/api-contract/test/compare/user_enumExample.test.json b/packages/api-contract/test/compare/user_enumExample.test.json new file mode 100644 index 0000000000..53ab81089b --- /dev/null +++ b/packages/api-contract/test/compare/user_enumExample.test.json @@ -0,0 +1,422 @@ +[ + { + "info": 6, + "type": "i32" + }, + { + "info": 6, + "type": "u32" + }, + { + "info": 6, + "type": "u8" + }, + { + "displayName": "Variant", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "info": 10, + "sub": [], + "name": "None", + "type": "()" + }, + { + "displayName": "Weekday", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "ext": { + "discriminant": 0 + }, + "info": 6, + "name": "Monday", + "type": "Null" + }, + { + "ext": { + "discriminant": 1 + }, + "info": 6, + "name": "Tuesday", + "type": "Null" + }, + { + "ext": { + "discriminant": 2 + }, + "info": 6, + "name": "Wednesday", + "type": "Null" + }, + { + "ext": { + "discriminant": 3 + }, + "info": 6, + "name": "Thursday", + "type": "Null" + }, + { + "ext": { + "discriminant": 4 + }, + "info": 6, + "name": "Friday", + "type": "Null" + }, + { + "ext": { + "discriminant": 5 + }, + "info": 6, + "name": "Saturday", + "type": "Null" + }, + { + "ext": { + "discriminant": 6 + }, + "info": 6, + "name": "Sunday", + "type": "Null" + } + ], + "type": "{ \"_enum\": [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"] }", + "name": "Weekday" + }, + { + "displayName": "TupleMaybeSigned", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "info": 6, + "type": "i32", + "name": "Signed" + }, + { + "info": 6, + "type": "u32", + "name": "Unsigned" + } + ], + "type": "{\"_enum\":{\"Signed\":\"i32\",\"Unsigned\":\"u32\"}}", + "name": "TupleMaybeSigned" + }, + { + "displayName": "NamedMaybeSigned", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "info": 9, + "sub": [ + { + "info": 6, + "type": "i32", + "name": "value" + } + ], + "name": "Signed", + "type": "{\"value\":\"i32\"}" + }, + { + "info": 9, + "sub": [ + { + "info": 6, + "type": "u32", + "name": "value" + } + ], + "name": "Unsigned", + "type": "{\"value\":\"u32\"}" + } + ], + "type": "{\"_enum\":{\"Signed\":\"{\\\"value\\\":\\\"i32\\\"}\",\"Unsigned\":\"{\\\"value\\\":\\\"u32\\\"}\"}}", + "name": "NamedMaybeSigned" + }, + { + "displayName": "Color", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "info": 10, + "sub": [], + "name": "Red", + "type": "()" + }, + { + "info": 10, + "sub": [], + "name": "Blue", + "type": "()" + }, + { + "info": 10, + "sub": [], + "name": "Green", + "type": "()" + }, + { + "info": 10, + "sub": [], + "name": "Yellow", + "type": "()" + }, + { + "info": 9, + "sub": [ + { + "info": 6, + "type": "u8", + "name": "r" + }, + { + "info": 6, + "type": "u8", + "name": "g" + }, + { + "info": 6, + "type": "u8", + "name": "b" + } + ], + "name": "Rgb", + "type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\"}" + }, + { + "info": 9, + "sub": [ + { + "info": 6, + "type": "u8", + "name": "r" + }, + { + "info": 6, + "type": "u8", + "name": "g" + }, + { + "info": 6, + "type": "u8", + "name": "b" + }, + { + "info": 6, + "type": "u8", + "name": "a" + } + ], + "name": "Rgba", + "type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\",\"a\":\"u8\"}" + } + ], + "type": "{\"_enum\":{\"Red\":\"()\",\"Blue\":\"()\",\"Green\":\"()\",\"Yellow\":\"()\",\"Rgb\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\"}\",\"Rgba\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\",\\\"a\\\":\\\"u8\\\"}\"}}", + "name": "Color" + } + ], + "type": "{\"_enum\":{\"None\":\"()\",\"Weekday\":\"Weekday\",\"TupleMaybeSigned\":\"TupleMaybeSigned\",\"NamedMaybeSigned\":\"NamedMaybeSigned\",\"Color\":\"Color\"}}" + }, + { + "displayName": "Weekday", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "ext": { + "discriminant": 0 + }, + "info": 6, + "name": "Monday", + "type": "Null" + }, + { + "ext": { + "discriminant": 1 + }, + "info": 6, + "name": "Tuesday", + "type": "Null" + }, + { + "ext": { + "discriminant": 2 + }, + "info": 6, + "name": "Wednesday", + "type": "Null" + }, + { + "ext": { + "discriminant": 3 + }, + "info": 6, + "name": "Thursday", + "type": "Null" + }, + { + "ext": { + "discriminant": 4 + }, + "info": 6, + "name": "Friday", + "type": "Null" + }, + { + "ext": { + "discriminant": 5 + }, + "info": 6, + "name": "Saturday", + "type": "Null" + }, + { + "ext": { + "discriminant": 6 + }, + "info": 6, + "name": "Sunday", + "type": "Null" + } + ], + "type": "{ \"_enum\": [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"] }" + }, + { + "displayName": "TupleMaybeSigned", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "info": 6, + "type": "i32", + "name": "Signed" + }, + { + "info": 6, + "type": "u32", + "name": "Unsigned" + } + ], + "type": "{\"_enum\":{\"Signed\":\"i32\",\"Unsigned\":\"u32\"}}" + }, + { + "displayName": "NamedMaybeSigned", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "info": 9, + "sub": [ + { + "info": 6, + "type": "i32", + "name": "value" + } + ], + "name": "Signed", + "type": "{\"value\":\"i32\"}" + }, + { + "info": 9, + "sub": [ + { + "info": 6, + "type": "u32", + "name": "value" + } + ], + "name": "Unsigned", + "type": "{\"value\":\"u32\"}" + } + ], + "type": "{\"_enum\":{\"Signed\":\"{\\\"value\\\":\\\"i32\\\"}\",\"Unsigned\":\"{\\\"value\\\":\\\"u32\\\"}\"}}" + }, + { + "displayName": "Color", + "namespace": "enum_example::enum_example", + "info": 3, + "sub": [ + { + "info": 10, + "sub": [], + "name": "Red", + "type": "()" + }, + { + "info": 10, + "sub": [], + "name": "Blue", + "type": "()" + }, + { + "info": 10, + "sub": [], + "name": "Green", + "type": "()" + }, + { + "info": 10, + "sub": [], + "name": "Yellow", + "type": "()" + }, + { + "info": 9, + "sub": [ + { + "info": 6, + "type": "u8", + "name": "r" + }, + { + "info": 6, + "type": "u8", + "name": "g" + }, + { + "info": 6, + "type": "u8", + "name": "b" + } + ], + "name": "Rgb", + "type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\"}" + }, + { + "info": 9, + "sub": [ + { + "info": 6, + "type": "u8", + "name": "r" + }, + { + "info": 6, + "type": "u8", + "name": "g" + }, + { + "info": 6, + "type": "u8", + "name": "b" + }, + { + "info": 6, + "type": "u8", + "name": "a" + } + ], + "name": "Rgba", + "type": "{\"r\":\"u8\",\"g\":\"u8\",\"b\":\"u8\",\"a\":\"u8\"}" + } + ], + "type": "{\"_enum\":{\"Red\":\"()\",\"Blue\":\"()\",\"Green\":\"()\",\"Yellow\":\"()\",\"Rgb\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\"}\",\"Rgba\":\"{\\\"r\\\":\\\"u8\\\",\\\"g\\\":\\\"u8\\\",\\\"b\\\":\\\"u8\\\",\\\"a\\\":\\\"u8\\\"}\"}}" + } +] \ No newline at end of file diff --git a/packages/api-contract/test/compare/withString.test.json b/packages/api-contract/test/compare/user_withString.test.json similarity index 99% rename from packages/api-contract/test/compare/withString.test.json rename to packages/api-contract/test/compare/user_withString.test.json index f4f4b0e36f..53e21ccea4 100644 --- a/packages/api-contract/test/compare/withString.test.json +++ b/packages/api-contract/test/compare/user_withString.test.json @@ -244,4 +244,4 @@ }, "type": "Option" } -] +] \ No newline at end of file diff --git a/packages/api-contract/test/contracts/index.ts b/packages/api-contract/test/contracts/index.ts index 2fb2aebb7a..2346064b52 100644 --- a/packages/api-contract/test/contracts/index.ts +++ b/packages/api-contract/test/contracts/index.ts @@ -1,6 +1,21 @@ // Copyright 2017-2020 @polkadot/api-contract authors & contributors // SPDX-License-Identifier: Apache-2.0 -export * from './ink'; -export * from './solang'; -export * from './user'; +import * as ink from './ink'; +import * as solang from './solang'; +import * as user from './user'; + +const all: Record = {}; + +function addExport (type: string, abis: Record): void { + Object.keys(abis).forEach((key): void => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + all[`${type}_${key}`] = abis[key]; + }); +} + +addExport('ink', ink); +addExport('solang', solang); +addExport('user', user); + +export default all; diff --git a/packages/api-contract/test/contracts/user/enumExample.json b/packages/api-contract/test/contracts/user/enumExample.json new file mode 100644 index 0000000000..6515f977b0 --- /dev/null +++ b/packages/api-contract/test/contracts/user/enumExample.json @@ -0,0 +1,528 @@ +{ + "metadataVersion": "0.1.0", + "source": { + "hash": "0x1a37c380fe02fe3b670480dff1393b0401788955315d092e39fcc06047f1413c", + "language": "ink! 3.0.0-rc2", + "compiler": "rustc 1.49.0-nightly" + }, + "contract": { + "name": "enum_example", + "version": "0.1.0", + "authors": [ + "[your_name] <[your_email]>" + ] + }, + "spec": { + "constructors": [ + { + "args": [], + "docs": [], + "name": [ + "new" + ], + "selector": "0xd183512b" + } + ], + "docs": [], + "events": [], + "messages": [ + { + "args": [ + { + "name": "variant", + "type": { + "displayName": [ + "Variant" + ], + "type": 4 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "set_variant" + ], + "payable": false, + "returnType": null, + "selector": "0x4fa6b9cf" + }, + { + "args": [], + "docs": [], + "mutates": false, + "name": [ + "get_variant" + ], + "payable": false, + "returnType": { + "displayName": [ + "Variant" + ], + "type": 4 + }, + "selector": "0x1d5962d1" + } + ] + }, + "storage": { + "struct": { + "fields": [ + { + "layout": { + "enum": { + "dispatchKey": "0x0000000000000000000000000000000000000000000000000000000000000000", + "variants": { + "0": { + "fields": [] + }, + "1": { + "fields": [ + { + "layout": { + "enum": { + "dispatchKey": "0x0100000000000000000000000000000000000000000000000000000000000000", + "variants": { + "0": { + "fields": [] + }, + "1": { + "fields": [] + }, + "2": { + "fields": [] + }, + "3": { + "fields": [] + }, + "4": { + "fields": [] + }, + "5": { + "fields": [] + }, + "6": { + "fields": [] + } + } + } + }, + "name": null + } + ] + }, + "2": { + "fields": [ + { + "layout": { + "enum": { + "dispatchKey": "0x0100000000000000000000000000000000000000000000000000000000000000", + "variants": { + "0": { + "fields": [ + { + "layout": { + "cell": { + "key": "0x0200000000000000000000000000000000000000000000000000000000000000", + "ty": 1 + } + }, + "name": null + } + ] + }, + "1": { + "fields": [ + { + "layout": { + "cell": { + "key": "0x0200000000000000000000000000000000000000000000000000000000000000", + "ty": 2 + } + }, + "name": null + } + ] + } + } + } + }, + "name": null + } + ] + }, + "3": { + "fields": [ + { + "layout": { + "enum": { + "dispatchKey": "0x0100000000000000000000000000000000000000000000000000000000000000", + "variants": { + "0": { + "fields": [ + { + "layout": { + "cell": { + "key": "0x0200000000000000000000000000000000000000000000000000000000000000", + "ty": 1 + } + }, + "name": "value" + } + ] + }, + "1": { + "fields": [ + { + "layout": { + "cell": { + "key": "0x0200000000000000000000000000000000000000000000000000000000000000", + "ty": 2 + } + }, + "name": "value" + } + ] + } + } + } + }, + "name": null + } + ] + }, + "4": { + "fields": [ + { + "layout": { + "enum": { + "dispatchKey": "0x0100000000000000000000000000000000000000000000000000000000000000", + "variants": { + "0": { + "fields": [] + }, + "1": { + "fields": [] + }, + "2": { + "fields": [] + }, + "3": { + "fields": [] + }, + "4": { + "fields": [ + { + "layout": { + "cell": { + "key": "0x0200000000000000000000000000000000000000000000000000000000000000", + "ty": 3 + } + }, + "name": "r" + }, + { + "layout": { + "cell": { + "key": "0x0300000000000000000000000000000000000000000000000000000000000000", + "ty": 3 + } + }, + "name": "g" + }, + { + "layout": { + "cell": { + "key": "0x0400000000000000000000000000000000000000000000000000000000000000", + "ty": 3 + } + }, + "name": "b" + } + ] + }, + "5": { + "fields": [ + { + "layout": { + "cell": { + "key": "0x0200000000000000000000000000000000000000000000000000000000000000", + "ty": 3 + } + }, + "name": "r" + }, + { + "layout": { + "cell": { + "key": "0x0300000000000000000000000000000000000000000000000000000000000000", + "ty": 3 + } + }, + "name": "g" + }, + { + "layout": { + "cell": { + "key": "0x0400000000000000000000000000000000000000000000000000000000000000", + "ty": 3 + } + }, + "name": "b" + }, + { + "layout": { + "cell": { + "key": "0x0500000000000000000000000000000000000000000000000000000000000000", + "ty": 3 + } + }, + "name": "a" + } + ] + } + } + } + }, + "name": null + } + ] + } + } + } + }, + "name": "last" + } + ] + } + }, + "types": [ + { + "def": { + "primitive": "i32" + } + }, + { + "def": { + "primitive": "u32" + } + }, + { + "def": { + "primitive": "u8" + } + }, + { + "def": { + "variant": { + "variants": [ + { + "name": "None" + }, + { + "fields": [ + { + "type": 5 + } + ], + "name": "Weekday" + }, + { + "fields": [ + { + "type": 6 + } + ], + "name": "TupleMaybeSigned" + }, + { + "fields": [ + { + "type": 7 + } + ], + "name": "NamedMaybeSigned" + }, + { + "fields": [ + { + "type": 8 + } + ], + "name": "Color" + } + ] + } + }, + "path": [ + "enum_example", + "enum_example", + "Variant" + ] + }, + { + "def": { + "variant": { + "variants": [ + { + "discriminant": 0, + "name": "Monday" + }, + { + "discriminant": 1, + "name": "Tuesday" + }, + { + "discriminant": 2, + "name": "Wednesday" + }, + { + "discriminant": 3, + "name": "Thursday" + }, + { + "discriminant": 4, + "name": "Friday" + }, + { + "discriminant": 5, + "name": "Saturday" + }, + { + "discriminant": 6, + "name": "Sunday" + } + ] + } + }, + "path": [ + "enum_example", + "enum_example", + "Weekday" + ] + }, + { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 1 + } + ], + "name": "Signed" + }, + { + "fields": [ + { + "type": 2 + } + ], + "name": "Unsigned" + } + ] + } + }, + "path": [ + "enum_example", + "enum_example", + "TupleMaybeSigned" + ] + }, + { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "name": "value", + "type": 1 + } + ], + "name": "Signed" + }, + { + "fields": [ + { + "name": "value", + "type": 2 + } + ], + "name": "Unsigned" + } + ] + } + }, + "path": [ + "enum_example", + "enum_example", + "NamedMaybeSigned" + ] + }, + { + "def": { + "variant": { + "variants": [ + { + "name": "Red" + }, + { + "name": "Blue" + }, + { + "name": "Green" + }, + { + "name": "Yellow" + }, + { + "fields": [ + { + "name": "r", + "type": 3 + }, + { + "name": "g", + "type": 3 + }, + { + "name": "b", + "type": 3 + } + ], + "name": "Rgb" + }, + { + "fields": [ + { + "name": "r", + "type": 3 + }, + { + "name": "g", + "type": 3 + }, + { + "name": "b", + "type": 3 + }, + { + "name": "a", + "type": 3 + } + ], + "name": "Rgba" + } + ] + } + }, + "path": [ + "enum_example", + "enum_example", + "Color" + ] + } + ] +} diff --git a/packages/api-contract/test/contracts/user/enumExample.wasm b/packages/api-contract/test/contracts/user/enumExample.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5cbe4bf9bc714e8f8711ffb62a84ee708f537653 GIT binary patch literal 5473 zcmcIoO^h5z6@Kqkbx+TB&u*DG@y3pm>dAt}QdVqam@$j7rbed zcfF2?gglF4MMjE54jdu`k_8q%AWJy}32q#7i-Q1#n}G|*964e1z3QHwiLJy$FeA;> z&#U)S@4smM@;N3VKHOfD@tD@k7{5H`@fwe5jd-j}JYGx2_z=K!ldsBkPLst|OS ze$QOq*gkW4`@+`x%NxXT<1yWMb^Yv>jWgR@>*p_jZ)0m~<0Yc$b1zSwOX9|yo_po| z#VgwlY_3aN8{1d5&J&xB^RK4oHqKqxdQDiIdEx+x5D`fWzno--$%-XIDW@5aIqdA% zytPNtmo_e*z3>_>+V8HPJxlxN-t8Uun~`M9SD&UZth%y9UV^VYhsElUp@G4C5p%aY zcbI3B`G^Ll=f$%g$O4rt!;gQxgsgIDxW|{~lZ;r5&Fi%;V>Pr+cMPzs(n{cxi&idU zV3|HC#7TXuRd7DyvK6;mdC53@d*t8nt!o219HitTeK3xO^rzx5B^M3Bv}=_6)EHw} zD5pHw($wsgwizVNAT2l#$tOZIpqwl7N9jvmytzHP$FKV|EN$gB*AJ%z0D(xXA2pt|Aa66Kef$4^u6n_XTaPp&A*!zQ>ddp(Dn zJGL)QuNv#Fa-A-Pxs!J2DVP%-rra~M>jq{~HLvF3<~=V{7WmR}fB`BoO{D+McS2q7ARy=LLo|cIMZ_ZmWmN*Z!uG=36VgMy#Yyzm-5Za!C zRLiQ4tkS8Oo!Z%HGBqvQd4L{qu*mYj&A62ZX~tLV-`%;p7T@eHU{$ z(NKnY)Z-lP*WAlPV&Vs5LdaQxRewF&n2R>XuJAJ2+2Mh}BGix67u|xF9@cu2b?KBH zQjRfv56n5Bdf{PEsW5KOr(=6q#vTII8k?)04jGS&AMwC=gaxcnSAN)Kl*0b zTeo#Fi;J!+p1r9TU0htO;SfJ4{{_#8F3_3nO93)bdqw30F$!`Q?m%ciD5Jm{=i8b| zlC+hz^DtMk`iLfvI{w!o9MKXMmy`@+OG}2;v`U7`GmXEh7SH*SS?&-|*&Xz?g(5PfTneqr{Yr&U@|BVDKhyU#UX&#@pH*ES@9`clYH0gEbF_sDTORKX*2 zTpA7YeX*Xr>8p9G1>HvvcL=9YG!uFk+0^vR62&MFv$S5SZsP4}JM;!ZTAz3|IO>UY zPkMvkDknRPQ3k~BDePrk#!>Nnx+A#;e)7_n%$vy9ae`{p{!iO6OedPLp0+rBs-xHE zWiv_@0jj=Gpd@gC+p4=0%7LVvC75F4!H zd=jlb2b|kiSPaT`22{deZ3*HBM3&eCmg4%brhRS6vW}^C$&!k84RS+o=4Z zul%E;Df92L)`79O-o0T@>IYgC{)roT?qGC>EB8b!0q^j@yu*RDf_#T7x3`<#>Pp~C zot95W_wae@^=>-y*Kd`^r=!K|x5~t)BX|8)X=5?}DtPNkI0zGx@IIaFw7m)MGybhI z{%aj4I{v+mIsA)IcY@|Y`1229;Tetp13uZw>a%~PlbtLirPSyDPA57k@&c6v2j3MO zXkMF7G>5db#*OHscv|y8ECi3P4e9e3ho3XpxXINQnZC+MQrzPk+?TgGAh&3IXc%oU zE#iVwFcql-=i}&R<^Ycjqm*NH+d&JZu>(O$gVFT90~CnvYv)rD5#kISyf-J`f#LSPj`>RU2W4sw(VsL zc)k+c_Ewn$TiPhoKW8a^AEy#PzM>TG&Tg+ww%3*9hqK$?o@{>yE*|d8Zoe3}r&)>? z?zWY=Z-hl<)i78DjID+UIMGS;$b&gCEJESyWL-w&ACY3PN3C${FNs?#o;3siRSZ zE1yj7zQujHp=SN&13XFKN!MAaair!cX7X!Xb;0+WGp;Asxi34&>v%&*v?BN{QYIST z=mQ>@8;o)IkgFb1pKi^(X24GFXbV&~gMfXOZt_w3v!461+~8yM0WerxdQ_s`zxoLf z+~Cy+!3v?33m>9i@gRm?(PdoH%(B699&1NJCm&<8md>F-n0Jq&4gZYtL*iIqvbT{z zubhC5p6qa+|A;ZEI{$LNm7p60`MZn;=QoUChleG<8QG1dY&}g{rMTiS_k@=R)P>X& z=MKcqfd*(S!eZ4`(8BOov>q130jRxftHDY-UO~ngQ9tVo`0U9Ih!BE V`zf9t4G~!)N{A>WB0NN9{{c2O0vG@Q literal 0 HcmV?d00001 diff --git a/packages/api-contract/test/contracts/user/index.ts b/packages/api-contract/test/contracts/user/index.ts index d97ae5f30c..2ee3a97911 100644 --- a/packages/api-contract/test/contracts/user/index.ts +++ b/packages/api-contract/test/contracts/user/index.ts @@ -2,4 +2,5 @@ // SPDX-License-Identifier: Apache-2.0 export { default as assetTransfer } from './assetTransfer.json'; +export { default as enumExample } from './enumExample.json'; export { default as withString } from './withString.json'; diff --git a/packages/api-derive/src/util/index.ts b/packages/api-derive/src/util/index.ts index 96f2c969b4..391543dd8c 100644 --- a/packages/api-derive/src/util/index.ts +++ b/packages/api-derive/src/util/index.ts @@ -1,11 +1,9 @@ // Copyright 2017-2020 @polkadot/api-derive authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { drr } from '@polkadot/rpc-core/rxjs'; +export { drr } from '@polkadot/rpc-core/util'; export * from './approvalFlagsToBools'; export * from './cache'; export * from './cacheImpl'; export * from './memo'; - -export { drr }; diff --git a/packages/api-derive/src/util/memo.ts b/packages/api-derive/src/util/memo.ts index bb4dcc3adb..b2fe57c83e 100644 --- a/packages/api-derive/src/util/memo.ts +++ b/packages/api-derive/src/util/memo.ts @@ -3,8 +3,7 @@ import createMemo from 'memoizee'; import { Observable, Observer, TeardownLogic } from 'rxjs'; -import { drr } from '@polkadot/rpc-core/rxjs'; -import normalizer from '@polkadot/rpc-core/normalizer'; +import { drr, normalizer } from '@polkadot/rpc-core/util'; type ObsFn = (...params: any[]) => Observable; diff --git a/packages/metadata/src/decorate/storage/createFunction.ts b/packages/metadata/src/decorate/storage/createFunction.ts index f1a770af09..ebb82a2b86 100644 --- a/packages/metadata/src/decorate/storage/createFunction.ts +++ b/packages/metadata/src/decorate/storage/createFunction.ts @@ -11,7 +11,7 @@ import { StorageKey } from '@polkadot/types/primitive'; import { assert, compactAddLength, compactStripLength, isNull, isUndefined, stringLowerFirst, u8aConcat } from '@polkadot/util'; import { xxhashAsU8a } from '@polkadot/util-crypto'; -import getHasher, { HasherFunction } from './getHasher'; +import { HasherFunction, getHasher } from './getHasher'; export interface CreateItemOptions { key?: string; diff --git a/packages/metadata/src/decorate/storage/getHasher.spec.ts b/packages/metadata/src/decorate/storage/getHasher.spec.ts index 3e09b28715..68f1f42fc8 100644 --- a/packages/metadata/src/decorate/storage/getHasher.spec.ts +++ b/packages/metadata/src/decorate/storage/getHasher.spec.ts @@ -5,7 +5,7 @@ import { TypeRegistry } from '@polkadot/types/create'; import { stringToU8a } from '@polkadot/util'; import { xxhashAsU8a } from '@polkadot/util-crypto'; -import getHasher from './getHasher'; +import { getHasher } from './getHasher'; describe('getHasher', (): void => { const registry = new TypeRegistry(); diff --git a/packages/metadata/src/decorate/storage/getHasher.ts b/packages/metadata/src/decorate/storage/getHasher.ts index c0d39811d9..c4152c42a2 100644 --- a/packages/metadata/src/decorate/storage/getHasher.ts +++ b/packages/metadata/src/decorate/storage/getHasher.ts @@ -30,6 +30,6 @@ const HASHERS: Record = { }; /** @internal */ -export default function getHasher (hasher?: StorageHasher): HasherFunction { +export function getHasher (hasher?: StorageHasher): HasherFunction { return HASHERS[hasher?.type as 'Identity'] || DEFAULT_FN; } diff --git a/packages/rpc-core/src/index.ts b/packages/rpc-core/src/index.ts index 52abe9c47b..51ab86c57a 100644 --- a/packages/rpc-core/src/index.ts +++ b/packages/rpc-core/src/index.ts @@ -14,8 +14,7 @@ import { Option, StorageKey, Vec } from '@polkadot/types'; import { createClass, createTypeUnsafe } from '@polkadot/types/create'; import { assert, hexToU8a, isFunction, isNull, isUndefined, logger, u8aToU8a } from '@polkadot/util'; -import normalizer from './normalizer'; -import { drr, refCountDelay } from './rxjs'; +import { drr, normalizer, refCountDelay } from './util'; interface StorageChangeSetJSON { block: string; diff --git a/packages/rpc-core/src/rxjs/drr.spec.ts b/packages/rpc-core/src/util/drr.spec.ts similarity index 96% rename from packages/rpc-core/src/rxjs/drr.spec.ts rename to packages/rpc-core/src/util/drr.spec.ts index b354435814..aec458b738 100644 --- a/packages/rpc-core/src/rxjs/drr.spec.ts +++ b/packages/rpc-core/src/util/drr.spec.ts @@ -3,7 +3,7 @@ import { of, timer } from 'rxjs'; -import { drr } from './drr'; +import { drr } from '.'; describe('drr', (): void => { it('should not fire twice the same value', (done): void => { diff --git a/packages/rpc-core/src/rxjs/drr.ts b/packages/rpc-core/src/util/drr.ts similarity index 100% rename from packages/rpc-core/src/rxjs/drr.ts rename to packages/rpc-core/src/util/drr.ts diff --git a/packages/rpc-core/src/rxjs/index.ts b/packages/rpc-core/src/util/index.ts similarity index 84% rename from packages/rpc-core/src/rxjs/index.ts rename to packages/rpc-core/src/util/index.ts index 024f19ed20..a426fb16c3 100644 --- a/packages/rpc-core/src/rxjs/index.ts +++ b/packages/rpc-core/src/util/index.ts @@ -2,4 +2,5 @@ // SPDX-License-Identifier: Apache-2.0 export * from './drr'; +export * from './normalizer'; export * from './refCountDelay'; diff --git a/packages/rpc-core/src/normalizer.spec.ts b/packages/rpc-core/src/util/normalizer.spec.ts similarity index 96% rename from packages/rpc-core/src/normalizer.spec.ts rename to packages/rpc-core/src/util/normalizer.spec.ts index 391ca08e2c..01e590f0d2 100644 --- a/packages/rpc-core/src/normalizer.spec.ts +++ b/packages/rpc-core/src/util/normalizer.spec.ts @@ -1,7 +1,7 @@ // Copyright 2017-2020 @polkadot/rpc-core authors & contributors // SPDX-License-Identifier: Apache-2.0 -import normalizer from './normalizer'; +import { normalizer } from '.'; describe('normalizer', (): void => { it('works when BigInt is in the data (object)', (): void => { diff --git a/packages/rpc-core/src/normalizer.ts b/packages/rpc-core/src/util/normalizer.ts similarity index 78% rename from packages/rpc-core/src/normalizer.ts rename to packages/rpc-core/src/util/normalizer.ts index 222e0521bd..e424948cc3 100644 --- a/packages/rpc-core/src/normalizer.ts +++ b/packages/rpc-core/src/util/normalizer.ts @@ -3,7 +3,7 @@ import { isBigInt } from '@polkadot/util'; -export default function normalizer (instanceId: string): (value: unknown) => string { +export function normalizer (instanceId: string): (value: unknown) => string { return (value: unknown) => instanceId + JSON.stringify(value, (_, value: unknown) => isBigInt(value) diff --git a/packages/rpc-core/src/rxjs/refCountDelay.ts b/packages/rpc-core/src/util/refCountDelay.ts similarity index 100% rename from packages/rpc-core/src/rxjs/refCountDelay.ts rename to packages/rpc-core/src/util/refCountDelay.ts diff --git a/packages/typegen/scripts/polkadot-types-chain-info.js b/packages/typegen/scripts/polkadot-types-chain-info.js index 8ff8c6d8c1..bb5467786b 100755 --- a/packages/typegen/scripts/polkadot-types-chain-info.js +++ b/packages/typegen/scripts/polkadot-types-chain-info.js @@ -6,7 +6,7 @@ let main; try { - main = require('../extractChain').default; + main = require('../extractChain').main; } catch (error) { require('@babel/register')({ extensions: ['.js', '.ts'], @@ -27,7 +27,7 @@ try { ] }); - main = require('../src/extractChain.ts').default; + main = require('../src/extractChain.ts').main; } main(); diff --git a/packages/typegen/scripts/polkadot-types-from-chain.js b/packages/typegen/scripts/polkadot-types-from-chain.js index b57b5ff67a..44425f8d35 100755 --- a/packages/typegen/scripts/polkadot-types-from-chain.js +++ b/packages/typegen/scripts/polkadot-types-from-chain.js @@ -6,7 +6,7 @@ let main; try { - main = require('../fromChain').default; + main = require('../fromChain').main; } catch (error) { require('@babel/register')({ extensions: ['.js', '.ts'], @@ -22,7 +22,7 @@ try { ] }); - main = require('../src/fromChain').default; + main = require('../src/fromChain').main; } main(); diff --git a/packages/typegen/scripts/polkadot-types-from-defs.js b/packages/typegen/scripts/polkadot-types-from-defs.js index dcc22beda7..79bd726ecf 100755 --- a/packages/typegen/scripts/polkadot-types-from-defs.js +++ b/packages/typegen/scripts/polkadot-types-from-defs.js @@ -6,7 +6,7 @@ let main; try { - main = require('../fromDefs').default; + main = require('../fromDefs').main; } catch (error) { require('@babel/register')({ extensions: ['.js', '.ts'], @@ -23,7 +23,7 @@ try { ] }); - main = require('../src/fromDefs.ts').default; + main = require('../src/fromDefs.ts').main; } main(); diff --git a/packages/typegen/scripts/polkadot-types-internal-interfaces.js b/packages/typegen/scripts/polkadot-types-internal-interfaces.js index c2c2600722..43529280bd 100755 --- a/packages/typegen/scripts/polkadot-types-internal-interfaces.js +++ b/packages/typegen/scripts/polkadot-types-internal-interfaces.js @@ -6,7 +6,7 @@ let main; try { - main = require('../interfacesTs').default; + main = require('../interfacesTs').main; } catch (error) { require('@babel/register')({ extensions: ['.js', '.ts'], @@ -22,7 +22,7 @@ try { ] }); - main = require('../src/interfacesTs.ts').default; + main = require('../src/interfacesTs.ts').main; } main(); diff --git a/packages/typegen/scripts/polkadot-types-internal-metadata.js b/packages/typegen/scripts/polkadot-types-internal-metadata.js index 427cf35d0a..29e3e62249 100755 --- a/packages/typegen/scripts/polkadot-types-internal-metadata.js +++ b/packages/typegen/scripts/polkadot-types-internal-metadata.js @@ -6,7 +6,7 @@ let main; try { - main = require('../metadataMd').default; + main = require('../metadataMd').main; } catch (error) { require('@babel/register')({ extensions: ['.js', '.ts'], @@ -22,7 +22,7 @@ try { ] }); - main = require('../src/metadataMd.ts').default; + main = require('../src/metadataMd.ts').main; } main(); diff --git a/packages/typegen/src/extractChain.ts b/packages/typegen/src/extractChain.ts index 4dac0bd427..59b0a91210 100644 --- a/packages/typegen/src/extractChain.ts +++ b/packages/typegen/src/extractChain.ts @@ -24,7 +24,7 @@ async function run (ws: string): Promise { api.runtimeMetadata.getUniqTypes(false); } -export default function main (): void { +export function main (): void { // retrieve and parse arguments - we do this globally, since this is a single command const { ws } = yargs .usage('Usage: [options]') diff --git a/packages/typegen/src/fromChain.ts b/packages/typegen/src/fromChain.ts index 42f431b1b7..5d9c9e622b 100644 --- a/packages/typegen/src/fromChain.ts +++ b/packages/typegen/src/fromChain.ts @@ -6,9 +6,7 @@ import yargs from 'yargs'; import { formatNumber } from '@polkadot/util'; import WS from '@polkadot/x-ws'; -import generateConst from './generate/consts'; -import generateQuery from './generate/query'; -import generateTx from './generate/tx'; +import { generateDefaultConsts, generateDefaultQuery, generateDefaultTx } from './generate'; import { HEADER, writeFile } from './util'; function generate (metaHex: string, pkg: string | undefined, output: string, isStrict?: boolean): void { @@ -19,9 +17,9 @@ function generate (metaHex: string, pkg: string | undefined, output: string, isS ? { [pkg]: require(path.join(process.cwd(), output, 'definitions')) as Record } : {}; - generateConst(path.join(process.cwd(), output, 'augment-api-consts.ts'), metaHex, extraTypes, isStrict); - generateQuery(path.join(process.cwd(), output, 'augment-api-query.ts'), metaHex, extraTypes, isStrict); - generateTx(path.join(process.cwd(), output, 'augment-api-tx.ts'), metaHex, extraTypes, isStrict); + generateDefaultConsts(path.join(process.cwd(), output, 'augment-api-consts.ts'), metaHex, extraTypes, isStrict); + generateDefaultQuery(path.join(process.cwd(), output, 'augment-api-query.ts'), metaHex, extraTypes, isStrict); + generateDefaultTx(path.join(process.cwd(), output, 'augment-api-tx.ts'), metaHex, extraTypes, isStrict); writeFile(path.join(process.cwd(), output, 'augment-api.ts'), (): string => [ @@ -36,7 +34,7 @@ function generate (metaHex: string, pkg: string | undefined, output: string, isS process.exit(0); } -export default function main (): void { +export function main (): void { const { endpoint, output, package: pkg, strict: isStrict } = yargs.strict().options({ endpoint: { description: 'The endpoint to connect to (e.g. wss://kusama-rpc.polkadot.io) or relative path to a file containing the JSON output of an RPC state_getMetadata call', diff --git a/packages/typegen/src/fromDefs.ts b/packages/typegen/src/fromDefs.ts index 2ed92d87d7..2d11ea8613 100644 --- a/packages/typegen/src/fromDefs.ts +++ b/packages/typegen/src/fromDefs.ts @@ -8,7 +8,7 @@ import * as substrateDefs from '@polkadot/types/interfaces/definitions'; import { generateInterfaceTypes } from './generate/interfaceRegistry'; import { generateTsDef } from './generate/tsDef'; -export default function main (): void { +export function main (): void { const { input, package: pkg } = yargs.strict().options({ input: { description: 'The directory to use for the user definitions', diff --git a/packages/typegen/src/generate/consts.ts b/packages/typegen/src/generate/consts.ts index acde9cd8b1..917ac63a10 100644 --- a/packages/typegen/src/generate/consts.ts +++ b/packages/typegen/src/generate/consts.ts @@ -74,7 +74,7 @@ function generateForMeta (meta: Metadata, dest: string, extraTypes: Record }>> = {}, isStrict = false): void { +export function generateDefaultConsts (dest = 'packages/api/src/augment/consts.ts', data = staticData, extraTypes: Record }>> = {}, isStrict = false): void { const registry = new TypeRegistry(); registerDefinitions(registry, extraTypes); diff --git a/packages/typegen/src/generate/index.ts b/packages/typegen/src/generate/index.ts new file mode 100644 index 0000000000..8023f2f84a --- /dev/null +++ b/packages/typegen/src/generate/index.ts @@ -0,0 +1,9 @@ +// Copyright 2017-2020 @polkadot/typegen authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +export { generateDefaultConsts } from './consts'; +export { generateDefaultInterface } from './interfaceRegistry'; +export { generateDefaultQuery } from './query'; +export { generateDefaultRpc } from './rpc'; +export { generateDefaultTsDef } from './tsDef'; +export { generateDefaultTx } from './tx'; diff --git a/packages/typegen/src/generate/interfaceRegistry.ts b/packages/typegen/src/generate/interfaceRegistry.ts index 7bb1e301a0..78975a389c 100644 --- a/packages/typegen/src/generate/interfaceRegistry.ts +++ b/packages/typegen/src/generate/interfaceRegistry.ts @@ -79,7 +79,7 @@ export function generateInterfaceTypes (importDefinitions: { [importPath: string } // Generate `packages/types/src/interfaceRegistry.ts`, the registry of all interfaces -export default function generateDefaultInterfaceTypes (): void { +export function generateDefaultInterface (): void { generateInterfaceTypes( { '@polkadot/types/interfaces': defaultDefinitions }, 'packages/types/src/augment/registry.ts' diff --git a/packages/typegen/src/generate/query.ts b/packages/typegen/src/generate/query.ts index e7be5112d1..9533c39f80 100644 --- a/packages/typegen/src/generate/query.ts +++ b/packages/typegen/src/generate/query.ts @@ -127,7 +127,7 @@ function generateForMeta (registry: Registry, meta: Metadata, dest: string, extr // Call `generateForMeta()` with current static metadata /** @internal */ -export default function generateQuery (dest = 'packages/api/src/augment/query.ts', data = staticData, extraTypes: Record }>> = {}, isStrict = false): void { +export function generateDefaultQuery (dest = 'packages/api/src/augment/query.ts', data = staticData, extraTypes: Record }>> = {}, isStrict = false): void { const registry = new TypeRegistry(); registerDefinitions(registry, extraTypes); diff --git a/packages/typegen/src/generate/rpc.ts b/packages/typegen/src/generate/rpc.ts index a2674b2a60..a803e581c6 100644 --- a/packages/typegen/src/generate/rpc.ts +++ b/packages/typegen/src/generate/rpc.ts @@ -111,7 +111,7 @@ export function generateRpcTypes (importDefinitions: { [importPath: string]: Rec }); } -export default function generateDefaultRpcTypes (): void { +export function generateDefaultRpc (): void { generateRpcTypes( { '@polkadot/types/interfaces': defaultDefinitions }, 'packages/api/src/augment/rpc.ts' diff --git a/packages/typegen/src/generate/tsDef.ts b/packages/typegen/src/generate/tsDef.ts index b8afc8670f..7f910c7f1c 100644 --- a/packages/typegen/src/generate/tsDef.ts +++ b/packages/typegen/src/generate/tsDef.ts @@ -248,7 +248,7 @@ export function generateTsDef (importDefinitions: { [importPath: string]: Record } /** @internal */ -export default function generateTsDefDefault (): void { +export function generateDefaultTsDef (): void { generateTsDef( { '@polkadot/types/interfaces': defaultDefinitions }, 'packages/types/src/interfaces', diff --git a/packages/typegen/src/generate/tx.ts b/packages/typegen/src/generate/tx.ts index bffd346542..dbcc7d2f2b 100644 --- a/packages/typegen/src/generate/tx.ts +++ b/packages/typegen/src/generate/tx.ts @@ -92,7 +92,7 @@ function generateForMeta (registry: Registry, meta: Metadata, dest: string, extr // Call `generateForMeta()` with current static metadata /** @internal */ -export default function generateTx (dest = 'packages/api/src/augment/tx.ts', data = staticData, extraTypes: Record }>> = {}, isStrict = false): void { +export function generateDefaultTx (dest = 'packages/api/src/augment/tx.ts', data = staticData, extraTypes: Record }>> = {}, isStrict = false): void { const registry = new TypeRegistry(); registerDefinitions(registry, extraTypes); diff --git a/packages/typegen/src/interfacesTs.ts b/packages/typegen/src/interfacesTs.ts index fda6a34fa0..1bbc3ae375 100644 --- a/packages/typegen/src/interfacesTs.ts +++ b/packages/typegen/src/interfacesTs.ts @@ -1,20 +1,15 @@ // Copyright 2017-2020 @polkadot/typegen authors & contributors // SPDX-License-Identifier: Apache-2.0 -import generateConstsTypes from './generate/consts'; -import generateInterfaceTypes from './generate/interfaceRegistry'; -import generateQueryTypes from './generate/query'; -import generateRpcTypes from './generate/rpc'; -import generateTsDef from './generate/tsDef'; -import generateTxTypes from './generate/tx'; +import { generateDefaultConsts, generateDefaultInterface, generateDefaultQuery, generateDefaultRpc, generateDefaultTsDef, generateDefaultTx } from './generate'; -export default function main (): void { - generateInterfaceTypes(); +export function main (): void { + generateDefaultInterface(); - generateConstsTypes(); - generateQueryTypes(); - generateTxTypes(); - generateRpcTypes(); + generateDefaultConsts(); + generateDefaultQuery(); + generateDefaultTx(); + generateDefaultRpc(); - generateTsDef(); + generateDefaultTsDef(); } diff --git a/packages/typegen/src/metadataMd.ts b/packages/typegen/src/metadataMd.ts index 58b56c5701..291a4df02b 100644 --- a/packages/typegen/src/metadataMd.ts +++ b/packages/typegen/src/metadataMd.ts @@ -299,7 +299,7 @@ function writeFile (name: string, ...chunks: any[]): void { writeStream.end(); } -export default function main (): void { +export function main (): void { const registry = new TypeRegistry(); const metadata = new Metadata(registry, rpcdata); diff --git a/packages/types-known/src/upgrades/kusama.ts b/packages/types-known/src/upgrades/kusama.ts index fd75a69118..93858de7a9 100644 --- a/packages/types-known/src/upgrades/kusama.ts +++ b/packages/types-known/src/upgrades/kusama.ts @@ -13,7 +13,7 @@ const upgrades: ChainUpgradesRaw = { [1472960, 1052], [1475648, 1053], [1491596, 1054], [1574408, 1055], [2064961, 1058], [2201991, 1062], [2671528, 2005], [2704202, 2007], [2728002, 2008], [2832534, 2011], [2962294, 2012], [3240000, 2013], [3274408, 2015], [3323565, 2019], [3534175, 2022], - [3860281, 2023], [4143129, 2024], [4401242, 2025] + [3860281, 2023], [4143129, 2024], [4401242, 2025], [4841367, 2026] ] }; diff --git a/packages/types/src/codec/Enum.spec.ts b/packages/types/src/codec/Enum.spec.ts index d1ba523635..ad8ef6a881 100644 --- a/packages/types/src/codec/Enum.spec.ts +++ b/packages/types/src/codec/Enum.spec.ts @@ -329,57 +329,69 @@ describe('Enum', (): void => { }); }); - describe('outputs', (): void => { - describe('toRawType', (): void => { - it('has a sane output for basic enums', (): void => { - expect( - new Enum(registry, ['foo', 'bar']).toRawType() - ).toEqual(JSON.stringify({ _enum: ['foo', 'bar'] })); - }); - - it('has a sane output for typed enums', (): void => { - expect( - // eslint-disable-next-line sort-keys - new Enum(registry, { foo: Text, bar: U32 }).toRawType() - // eslint-disable-next-line sort-keys - ).toEqual(JSON.stringify({ _enum: { foo: 'Text', bar: 'u32' } })); - }); + describe('toRawType', (): void => { + it('has a sane output for basic enums', (): void => { + expect( + new Enum(registry, ['foo', 'bar']).toRawType() + ).toEqual(JSON.stringify({ _enum: ['foo', 'bar'] })); }); - describe('toHex', (): void => { - it('has a proper hex representation & length', (): void => { - const Test = Enum.with({ - A: Text, - B: U32 - }); - const test = new Test(registry, 123, 1); + it('has a sane output for typed enums', (): void => { + expect( + // eslint-disable-next-line sort-keys + new Enum(registry, { foo: Text, bar: U32 }).toRawType() + // eslint-disable-next-line sort-keys + ).toEqual(JSON.stringify({ _enum: { foo: 'Text', bar: 'u32' } })); + }); - expect(test.toHex()).toEqual('0x017b000000'); - expect(test.encodedLength).toEqual(1 + 4); + it('re-creates via rawType (c-like)', (): void => { + const type = new Enum(registry, ['foo', 'bar']).toRawType() as 'Raw'; + + expect(registry.createType(type, 1).toString()).toEqual('bar'); + }); + + it('re-creates via rawType (types)', (): void => { + const type = new Enum(registry, { A: Text, B: U32, C: U32 }).toRawType() as 'Raw'; + const value = registry.createType(type, { B: 123 }) as unknown as { isB: true, asB: U32 }; + + expect(value.isB).toEqual(true); + expect(value.asB.toNumber()).toEqual(123); + }); + }); + + describe('toHex', (): void => { + it('has a proper hex representation & length', (): void => { + const Test = Enum.with({ + A: Text, + B: U32 }); + const test = new Test(registry, 123, 1); - it('encodes a single entry correctly', (): void => { - const Test = Enum.with({ A: 'u32' }); - const test = new Test(registry, 0x44332211, 0); + expect(test.toHex()).toEqual('0x017b000000'); + expect(test.encodedLength).toEqual(1 + 4); + }); - expect(test.toHex()).toEqual( - '0x' + - '00' + // index - '11223344' // u32 LE encoded - ); - }); + it('encodes a single entry correctly', (): void => { + const Test = Enum.with({ A: 'u32' }); + const test = new Test(registry, 0x44332211, 0); - it('encodes a single entry correctly (with embedded encoding)', (): void => { - const Test = Enum.with({ A: 'Address' }); - const test = new Test(registry, registry.createType('AccountId', '0x0001020304050607080910111213141516171819202122232425262728293031'), 0); + expect(test.toHex()).toEqual( + '0x' + + '00' + // index + '11223344' // u32 LE encoded + ); + }); - expect(test.toHex()).toEqual( - '0x' + - '00' + // index - 'ff' + // Address indicating an embedded AccountId - '0001020304050607080910111213141516171819202122232425262728293031' // AccountId - ); - }); + it('encodes a single entry correctly (with embedded encoding)', (): void => { + const Test = Enum.with({ A: 'Address' }); + const test = new Test(registry, registry.createType('AccountId', '0x0001020304050607080910111213141516171819202122232425262728293031'), 0); + + expect(test.toHex()).toEqual( + '0x' + + '00' + // index + 'ff' + // Address indicating an embedded AccountId + '0001020304050607080910111213141516171819202122232425262728293031' // AccountId + ); }); }); }); diff --git a/packages/types/src/create/encodeTypes.ts b/packages/types/src/create/encodeTypes.ts index 36a7860df5..ec694cdc07 100644 --- a/packages/types/src/create/encodeTypes.ts +++ b/packages/types/src/create/encodeTypes.ts @@ -62,7 +62,7 @@ function encodeEnum (typeDef: TypeDef): string { // c-like enums have all Null entries // TODO We need to take the disciminant into account and auto-add empty entries return sub.every(({ type }) => type === 'Null') - ? `{ _enum: [${sub.map(({ name }, index) => `"${name || `Empty${index}`}"`).join(', ')}] }` + ? `{ "_enum": [${sub.map(({ name }, index) => `"${name || `Empty${index}`}"`).join(', ')}] }` : encodeSubTypes(sub, true); } diff --git a/packages/types/src/create/getTypeDef.ts b/packages/types/src/create/getTypeDef.ts index 05c489cf8a..cc31d61243 100644 --- a/packages/types/src/create/getTypeDef.ts +++ b/packages/types/src/create/getTypeDef.ts @@ -5,7 +5,7 @@ import { TypeDef, TypeDefInfo } from './types'; import { assert } from '@polkadot/util'; -import sanitize from './sanitize'; +import { sanitize } from './sanitize'; import { typeSplit } from './typeSplit'; interface TypeDefOptions { diff --git a/packages/types/src/create/index.ts b/packages/types/src/create/index.ts index 5c1068faa2..854d9f00e1 100644 --- a/packages/types/src/create/index.ts +++ b/packages/types/src/create/index.ts @@ -1,13 +1,9 @@ // Copyright 2017-2020 @polkadot/types authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { createType } from './createType'; - export * from './createClass'; export * from './createType'; export * from './encodeTypes'; export * from './getTypeDef'; export * from './registry'; export * from './typeSplit'; - -export default createType; diff --git a/packages/types/src/create/sanitize.ts b/packages/types/src/create/sanitize.ts index c9ac316010..c37c289183 100644 --- a/packages/types/src/create/sanitize.ts +++ b/packages/types/src/create/sanitize.ts @@ -212,7 +212,7 @@ export function removeWrap (_check: string): Mapper { } // eslint-disable-next-line @typescript-eslint/ban-types -export default function sanitize (value: String | string, options?: SanitizeOptions): string { +export function sanitize (value: String | string, options?: SanitizeOptions): string { return mappings.reduce((result, fn): string => { return fn(result, options); }, value.toString()).trim(); diff --git a/packages/types/src/primitive/Type.ts b/packages/types/src/primitive/Type.ts index 534e1f6eda..fed72fcfbf 100644 --- a/packages/types/src/primitive/Type.ts +++ b/packages/types/src/primitive/Type.ts @@ -3,7 +3,7 @@ import { Registry } from '../types'; -import sanitize from '../create/sanitize'; +import { sanitize } from '../create/sanitize'; import { Text } from '.'; /**