diff --git a/packages/api/src/query.types.ts b/packages/api/src/query.types.ts index d129c01f7c..a2c8874c68 100644 --- a/packages/api/src/query.types.ts +++ b/packages/api/src/query.types.ts @@ -3,7 +3,7 @@ import { Observable } from 'rxjs'; import { Option, Raw, Vec } from '@polkadot/types/codec'; -import { Bytes, Null, bool, u32, u64 } from '@polkadot/types'; +import { Bytes, bool, u32, u64 } from '@polkadot/types'; import { AccountId, AccountIndex, Balance, BalanceOf, BlockNumber, Hash, Index, KeyTypeId, Moment, Perbill, ValidatorId, Weight } from '@polkadot/types/interfaces/runtime'; import { UncleEntryItem } from '@polkadot/types/interfaces/authorship'; import { BabeAuthorityWeight, MaybeVrf } from '@polkadot/types/interfaces/babe'; @@ -39,7 +39,7 @@ declare module './types' { digest: StorageEntryExact Observable> & QueryableStorageEntry; events: StorageEntryExact Observable>> & QueryableStorageEntry; eventCount: StorageEntryExact Observable> & QueryableStorageEntry; - eventTopics: StorageEntryExact Observable>>> & QueryableStorageEntry; + eventTopics: StorageEntryExact, key2: Hash | Uint8Array | string) => Observable>>> & QueryableStorageEntry; }; babe: { [index: string]: QueryableStorageEntry; diff --git a/packages/metadata/src/Metadata/v0/static-substrate.json b/packages/metadata/src/Metadata/v0/static-substrate.json index d7300adc95..0607480991 100644 --- a/packages/metadata/src/Metadata/v0/static-substrate.json +++ b/packages/metadata/src/Metadata/v0/static-substrate.json @@ -1495,7 +1495,7 @@ "name": "ForcingNewEra", "modifier": "optional", "type": { - "Plain": "Null" + "Plain": "()" }, "fallback": "0x00", "documentation": [ diff --git a/packages/metadata/src/Metadata/v1/static-substrate.json b/packages/metadata/src/Metadata/v1/static-substrate.json index c8d7710113..4b95c3293b 100644 --- a/packages/metadata/src/Metadata/v1/static-substrate.json +++ b/packages/metadata/src/Metadata/v1/static-substrate.json @@ -977,7 +977,7 @@ "name": "ForcingNewEra", "modifier": "optional", "type": { - "Plain": "Null" + "Plain": "()" }, "fallback": "0x00", "documentation": [ diff --git a/packages/metadata/src/Metadata/v10/static-substrate.json b/packages/metadata/src/Metadata/v10/static-substrate.json index 0946b3fb89..b827c25d0e 100644 --- a/packages/metadata/src/Metadata/v10/static-substrate.json +++ b/packages/metadata/src/Metadata/v10/static-substrate.json @@ -161,7 +161,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" diff --git a/packages/metadata/src/Metadata/v11/static-substrate.json b/packages/metadata/src/Metadata/v11/static-substrate.json index d843b66466..fca3e34c28 100644 --- a/packages/metadata/src/Metadata/v11/static-substrate.json +++ b/packages/metadata/src/Metadata/v11/static-substrate.json @@ -161,7 +161,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" @@ -330,7 +330,7 @@ { "name": "BatchExecuted", "args": [ - "Vec>" + "Vec>" ], "documentation": [] } diff --git a/packages/metadata/src/Metadata/v2/static-substrate.json b/packages/metadata/src/Metadata/v2/static-substrate.json index 4bed254770..6ff9cddf7f 100644 --- a/packages/metadata/src/Metadata/v2/static-substrate.json +++ b/packages/metadata/src/Metadata/v2/static-substrate.json @@ -1004,7 +1004,7 @@ "name": "ForcingNewEra", "modifier": "optional", "type": { - "Plain": "Null" + "Plain": "()" }, "fallback": "0x00", "documentation": [ diff --git a/packages/metadata/src/Metadata/v3/static-substrate.json b/packages/metadata/src/Metadata/v3/static-substrate.json index fcb6cda6b2..7426685eca 100644 --- a/packages/metadata/src/Metadata/v3/static-substrate.json +++ b/packages/metadata/src/Metadata/v3/static-substrate.json @@ -1063,7 +1063,7 @@ "name": "ForcingNewEra", "modifier": "optional", "type": { - "Plain": "Null" + "Plain": "()" }, "fallback": "0x00", "documentation": [ diff --git a/packages/metadata/src/Metadata/v4/static-substrate.json b/packages/metadata/src/Metadata/v4/static-substrate.json index c40f6d22d7..e96c4bc7f0 100644 --- a/packages/metadata/src/Metadata/v4/static-substrate.json +++ b/packages/metadata/src/Metadata/v4/static-substrate.json @@ -161,7 +161,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2_256" @@ -1121,7 +1121,7 @@ "name": "ForcingNewEra", "modifier": "optional", "type": { - "Plain": "Null" + "Plain": "()" }, "fallback": "0x00", "documentation": [ diff --git a/packages/metadata/src/Metadata/v5/static-polkadot.json b/packages/metadata/src/Metadata/v5/static-polkadot.json index 8773199b0c..02ebbb2323 100644 --- a/packages/metadata/src/Metadata/v5/static-polkadot.json +++ b/packages/metadata/src/Metadata/v5/static-polkadot.json @@ -161,7 +161,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" diff --git a/packages/metadata/src/Metadata/v5/static-substrate.json b/packages/metadata/src/Metadata/v5/static-substrate.json index 87fb2a8dfe..28a357b76e 100644 --- a/packages/metadata/src/Metadata/v5/static-substrate.json +++ b/packages/metadata/src/Metadata/v5/static-substrate.json @@ -161,7 +161,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" diff --git a/packages/metadata/src/Metadata/v6/static-polkadot.json b/packages/metadata/src/Metadata/v6/static-polkadot.json index 6288ce3249..aae6932753 100644 --- a/packages/metadata/src/Metadata/v6/static-polkadot.json +++ b/packages/metadata/src/Metadata/v6/static-polkadot.json @@ -161,7 +161,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" diff --git a/packages/metadata/src/Metadata/v6/static-substrate.json b/packages/metadata/src/Metadata/v6/static-substrate.json index 30c6a0420e..1b86d7b826 100644 --- a/packages/metadata/src/Metadata/v6/static-substrate.json +++ b/packages/metadata/src/Metadata/v6/static-substrate.json @@ -184,7 +184,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" diff --git a/packages/metadata/src/Metadata/v7/static-polkadot.json b/packages/metadata/src/Metadata/v7/static-polkadot.json index 14aebf8a27..b8d17ff281 100644 --- a/packages/metadata/src/Metadata/v7/static-polkadot.json +++ b/packages/metadata/src/Metadata/v7/static-polkadot.json @@ -185,7 +185,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" diff --git a/packages/metadata/src/Metadata/v7/static-substrate.json b/packages/metadata/src/Metadata/v7/static-substrate.json index 80cc6480c3..a8aae68523 100644 --- a/packages/metadata/src/Metadata/v7/static-substrate.json +++ b/packages/metadata/src/Metadata/v7/static-substrate.json @@ -185,7 +185,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" @@ -332,7 +332,7 @@ { "name": "BatchExecuted", "args": [ - "Vec>" + "Vec>" ], "documentation": [] } diff --git a/packages/metadata/src/Metadata/v8/static-substrate.json b/packages/metadata/src/Metadata/v8/static-substrate.json index eb420652a9..6316ce9202 100644 --- a/packages/metadata/src/Metadata/v8/static-substrate.json +++ b/packages/metadata/src/Metadata/v8/static-substrate.json @@ -161,7 +161,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" @@ -330,7 +330,7 @@ { "name": "BatchExecuted", "args": [ - "Vec>" + "Vec>" ], "documentation": [] } diff --git a/packages/metadata/src/Metadata/v9/static-substrate.json b/packages/metadata/src/Metadata/v9/static-substrate.json index 107b1fa48b..aba55d5296 100644 --- a/packages/metadata/src/Metadata/v9/static-substrate.json +++ b/packages/metadata/src/Metadata/v9/static-substrate.json @@ -161,7 +161,7 @@ "type": { "DoubleMap": { "hasher": "blake2256", - "key1": "Null", + "key1": "()", "key2": "Hash", "value": "Vec<(BlockNumber,EventIndex)>", "key2Hasher": "blake2256" @@ -325,7 +325,7 @@ { "name": "BatchExecuted", "args": [ - "Vec>" + "Vec>" ], "documentation": [] } diff --git a/packages/types/src/codec/Result.spec.ts b/packages/types/src/codec/Result.spec.ts index e783f85a38..ba679f711e 100644 --- a/packages/types/src/codec/Result.spec.ts +++ b/packages/types/src/codec/Result.spec.ts @@ -45,6 +45,6 @@ describe('Result', (): void => { }); it('returns a proper raw typedef rom a built-in', (): void => { - expect(createType(registry, 'DispatchResult').toRawType()).toEqual('Result'); + expect(createType(registry, 'DispatchResult').toRawType()).toEqual('Result<(),{"_enum":{"Other":"Null","CannotLookup":"Null","BadOrigin":"Null","Module":"{\\"index\\":\\"u8\\",\\"error\\":\\"u8\\"}"}}>'); }); }); diff --git a/packages/types/src/codec/create/getTypeDef.spec.ts b/packages/types/src/codec/create/getTypeDef.spec.ts index c921c1646e..74b8a8f727 100644 --- a/packages/types/src/codec/create/getTypeDef.spec.ts +++ b/packages/types/src/codec/create/getTypeDef.spec.ts @@ -19,12 +19,13 @@ describe('getTypeDef', (): void => { ).toThrow(/Unable to find closing matching/); }); - it('maps empty tuples to Null', (): void => { + it('maps empty tuples to empty tuple', (): void => { expect( getTypeDef('()') ).toEqual({ - info: TypeDefInfo.Plain, - type: 'Null' + info: TypeDefInfo.Tuple, + sub: [], + type: '()' }); }); diff --git a/packages/types/src/codec/create/getTypeDef.ts b/packages/types/src/codec/create/getTypeDef.ts index 5f25a97218..a4ad2ff08a 100644 --- a/packages/types/src/codec/create/getTypeDef.ts +++ b/packages/types/src/codec/create/getTypeDef.ts @@ -80,10 +80,12 @@ function _decodeFixedVec (value: TypeDef, type: string, _: string): TypeDef { // decode a tuple function _decodeTuple (value: TypeDef, _: string, subType: string): TypeDef { - value.sub = typeSplit(subType).map((inner): TypeDef => - // eslint-disable-next-line @typescript-eslint/no-use-before-define - getTypeDef(inner) - ); + value.sub = subType.length === 0 + ? [] + : typeSplit(subType).map((inner): TypeDef => + // eslint-disable-next-line @typescript-eslint/no-use-before-define + getTypeDef(inner) + ); return value; } @@ -128,7 +130,6 @@ export function getTypeDef (_type: string, { name, displayName }: TypeDefOptions // create the type via Type, allowing types to be sanitized const type = sanitize(_type); const value: TypeDef = { info: TypeDefInfo.Plain, displayName, name, type }; - const nested = nestedExtraction.find((nested): boolean => hasWrapper(type, nested) ); diff --git a/packages/types/src/codec/create/sanitize.ts b/packages/types/src/codec/create/sanitize.ts index 8c5986c0f5..382bff43fa 100644 --- a/packages/types/src/codec/create/sanitize.ts +++ b/packages/types/src/codec/create/sanitize.ts @@ -24,8 +24,6 @@ const mappings: Mapper[] = [ _removeGenerics(), // alias String -> Text (compat with jsonrpc methods) _alias('String', 'Text'), - // alias () -> Null - _alias('\\(\\)', 'Null'), // alias Vec -> Bytes _alias('Vec', 'Bytes'), // alias &[u8] -> Bytes @@ -100,7 +98,7 @@ function _cleanupCompact (): Mapper { function _flattenSingleTuple (): Mapper { return (value: string): string => { - return value.replace(/\(([^,]*)\)/, '$1'); + return value.replace(/\(([^,]+)\)/, '$1'); }; } diff --git a/packages/types/src/interfaces/deprecated/definitions.ts b/packages/types/src/interfaces/deprecated/definitions.ts index 719ed553e0..7b3ee14dc8 100644 --- a/packages/types/src/interfaces/deprecated/definitions.ts +++ b/packages/types/src/interfaces/deprecated/definitions.ts @@ -25,7 +25,7 @@ export default { // Metadata v4 // :: consensus - InherentOfflineReport: 'Null', // this is '()' originally (we don't handle that) + InherentOfflineReport: '()', SessionKey: 'AccountId', // Metadata v5 diff --git a/packages/types/src/interfaces/deprecated/types.ts b/packages/types/src/interfaces/deprecated/types.ts index e87af20af7..d1301b88a2 100644 --- a/packages/types/src/interfaces/deprecated/types.ts +++ b/packages/types/src/interfaces/deprecated/types.ts @@ -1,8 +1,9 @@ // Auto-generated via `yarn build:interfaces`, do not edit /* eslint-disable @typescript-eslint/no-empty-interface */ +import { ITuple } from '@polkadot/types/types'; import { Enum, Struct } from '@polkadot/types/codec'; -import { Bytes, Null, i8, u32, u64 } from '@polkadot/types/primitive'; +import { Bytes, i8, u32, u64 } from '@polkadot/types/primitive'; import { AccountId, Balance } from '@polkadot/types/interfaces/runtime'; /** Struct */ @@ -19,8 +20,8 @@ export interface Amount extends Balance {} /** u32 */ export interface AssetOf extends u32 {} -/** Null */ -export interface InherentOfflineReport extends Null {} +/** ITuple<[]> */ +export interface InherentOfflineReport extends ITuple<[]> {} /** i8 */ export interface LockPeriods extends i8 {} diff --git a/packages/types/src/interfaces/system/types.ts b/packages/types/src/interfaces/system/types.ts index 914591986c..f2e90e9770 100644 --- a/packages/types/src/interfaces/system/types.ts +++ b/packages/types/src/interfaces/system/types.ts @@ -1,9 +1,9 @@ // Auto-generated via `yarn build:interfaces`, do not edit /* eslint-disable @typescript-eslint/no-empty-interface */ -import { Codec } from '@polkadot/types/types'; +import { Codec, ITuple } from '@polkadot/types/types'; import { Enum, Option, Result, Struct, Vec } from '@polkadot/types/codec'; -import { Bytes, GenericEvent, Null, Text, u32, u8 } from '@polkadot/types/primitive'; +import { Bytes, GenericEvent, Text, u32, u8 } from '@polkadot/types/primitive'; import { Digest, Hash } from '@polkadot/types/interfaces/runtime'; /** Digest */ @@ -39,27 +39,31 @@ export interface DispatchErrorTo198 extends Struct { readonly error: u8; } -/** Result */ -export interface DispatchResult extends Result { +/** Result, DispatchError> */ +export interface DispatchResult extends Result, DispatchError> { /** Error:: (DispatchError) */ readonly isError: boolean; /** DispatchError */ readonly asError: DispatchError; - /** Ok:: */ + /** Ok:: (()) */ readonly isOk: boolean; + /** ITuple<[]> */ + readonly asOk: ITuple<[]>; } /** DispatchResult */ export interface DispatchResultOf extends DispatchResult {} -/** Result */ -export interface DispatchResultTo198 extends Result { +/** Result, Text> */ +export interface DispatchResultTo198 extends Result, Text> { /** Error:: (Text) */ readonly isError: boolean; /** Text */ readonly asError: Text; - /** Ok:: */ + /** Ok:: (()) */ readonly isOk: boolean; + /** ITuple<[]> */ + readonly asOk: ITuple<[]>; } /** GenericEvent */ diff --git a/packages/types/src/primitive/Type.spec.ts b/packages/types/src/primitive/Type.spec.ts index 1e50257f85..d602111335 100644 --- a/packages/types/src/primitive/Type.spec.ts +++ b/packages/types/src/primitive/Type.spec.ts @@ -65,10 +65,10 @@ describe('Type', (): void => { ).toEqual('(Bytes,(Balance,Balance),Vec)'); }); - it('changes () -> Null', (): void => { + it('changes () -> ()', (): void => { expect( new Type(registry, '()').toString() - ).toEqual('Null'); + ).toEqual('()'); }); it('has a length for the type', (): void => { diff --git a/packages/types/src/scripts/generateTypes/tsDef.ts b/packages/types/src/scripts/generateTypes/tsDef.ts index 8d9309887d..7ee49a897c 100644 --- a/packages/types/src/scripts/generateTypes/tsDef.ts +++ b/packages/types/src/scripts/generateTypes/tsDef.ts @@ -19,6 +19,7 @@ interface Imports extends TypeImports { // helper to generate a `readonly : ;` getter export function createGetter (definitions: object, name = '', type: string, imports: TypeImports, doc?: string): string { setImports(definitions, imports, [type]); + return ` /** ${doc || type} */\n readonly ${name}: ${type};\n`; } @@ -61,14 +62,16 @@ function tsEnum (definitions: object, { name: enumName, sub }: TypeDef, imports: return exportInterface(enumName, 'Enum', keys.join('')); } -function tsResultGetter (definitions: object, resultName = '', getter: 'Ok' | 'Error', { info, name = '', type }: TypeDef, imports: TypeImports): string { +function tsResultGetter (definitions: object, resultName = '', getter: 'Ok' | 'Error', def: TypeDef, imports: TypeImports): string { + const { info, name = '', type } = def; const [resultType, asGetter] = type === 'Null' ? ['', ''] - : [`(${type})`, createGetter(definitions, `as${getter}`, type, imports)]; + : [`(${type})`, createGetter(definitions, `as${getter}`, info === TypeDefInfo.Tuple ? formatType(definitions, def, imports) : type, imports)]; const isGetter = createGetter(definitions, `is${getter}`, 'boolean', imports, `${getter}:: ${name}${resultType}`); switch (info) { case TypeDefInfo.Plain: + case TypeDefInfo.Tuple: case TypeDefInfo.Vec: return `${isGetter}${asGetter}`;