diff --git a/packages/api/src/augment/consts.ts b/packages/api/src/augment/consts.ts index 6982492581..fd3372bba0 100644 --- a/packages/api/src/augment/consts.ts +++ b/packages/api/src/augment/consts.ts @@ -10,6 +10,7 @@ import { EraIndex } from '@polkadot/types/interfaces/staking'; declare module '@polkadot/metadata/Decorated/consts/types' { export interface Constants { + [index: string]: ModuleConstants; babe: { [index: string]: Codec; /** diff --git a/packages/api/src/augment/query.ts b/packages/api/src/augment/query.ts index 6d62642bf8..89909cd72d 100644 --- a/packages/api/src/augment/query.ts +++ b/packages/api/src/augment/query.ts @@ -27,6 +27,7 @@ import { Multiplier } from '@polkadot/types/interfaces/txpayment'; import { Multisig } from '@polkadot/types/interfaces/utility'; import { VestingInfo } from '@polkadot/types/interfaces/vesting'; import { Observable } from 'rxjs'; +import { ApiTypes } from '@polkadot/api/types'; declare module '@polkadot/api/types/storage' { export interface AugmentedQueries { @@ -794,4 +795,8 @@ declare module '@polkadot/api/types/storage' { vesting: AugmentedQuery Observable>> & QueryableStorageEntry; }; } + + export interface QueryableStorage extends AugmentedQueries { + [index: string]: QueryableModuleStorage; + } } diff --git a/packages/api/src/augment/tx.ts b/packages/api/src/augment/tx.ts index fb7f058e68..cace3aa548 100644 --- a/packages/api/src/augment/tx.ts +++ b/packages/api/src/augment/tx.ts @@ -18,6 +18,7 @@ import { EraIndex, RewardDestination, ValidatorPrefs } from '@polkadot/types/int import { Key } from '@polkadot/types/interfaces/system'; import { Timepoint } from '@polkadot/types/interfaces/utility'; import { SubmittableExtrinsic } from '@polkadot/api/submittable/types'; +import { ApiTypes } from '@polkadot/api/types'; declare module '@polkadot/api/types/submittable' { export interface AugmentedSubmittables { @@ -1622,4 +1623,9 @@ declare module '@polkadot/api/types/submittable' { vestOther: AugmentedSubmittable<(target: LookupSource | Address | AccountId | AccountIndex | string | Uint8Array) => SubmittableExtrinsic>; }; } + + export interface SubmittableExtrinsics extends AugmentedSubmittables { + (extrinsic: Uint8Array | string): SubmittableExtrinsic; + [index: string]: SubmittableModuleExtrinsics; + } } diff --git a/packages/api/src/types/storage.ts b/packages/api/src/types/storage.ts index 2646d0b83a..da9d2c1d32 100644 --- a/packages/api/src/types/storage.ts +++ b/packages/api/src/types/storage.ts @@ -77,7 +77,3 @@ export type QueryableStorageMulti = ApiType extends 'rxjs' ? QueryableStorageMultiBase : QueryableStorageMultiPromise; - -export interface QueryableStorage extends AugmentedQueries { - [index: string]: QueryableModuleStorage; -} diff --git a/packages/api/src/types/submittable.ts b/packages/api/src/types/submittable.ts index 3dc92f0be4..db08671d75 100644 --- a/packages/api/src/types/submittable.ts +++ b/packages/api/src/types/submittable.ts @@ -19,8 +19,3 @@ export interface SubmittableExtrinsicFunction extends export interface SubmittableModuleExtrinsics { [index: string]: SubmittableExtrinsicFunction; } - -export interface SubmittableExtrinsics extends AugmentedSubmittables { - (extrinsic: Uint8Array | string): SubmittableExtrinsic; - [index: string]: SubmittableModuleExtrinsics; -} diff --git a/packages/metadata/src/Decorated/consts/types.ts b/packages/metadata/src/Decorated/consts/types.ts index 5a7a0221ac..3ec4bc91b0 100644 --- a/packages/metadata/src/Decorated/consts/types.ts +++ b/packages/metadata/src/Decorated/consts/types.ts @@ -10,9 +10,8 @@ export type AugmentedConst = T & ConstantCodec; export type ModuleConstants = Record; -export interface Constants { - [index: string]: ModuleConstants; -} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface Constants {} export interface ConstantCodec extends Codec { meta: ModuleConstantMetadataLatest; diff --git a/packages/typegen/src/generate/consts.ts b/packages/typegen/src/generate/consts.ts index bddd05d95a..e5cbb2edc6 100644 --- a/packages/typegen/src/generate/consts.ts +++ b/packages/typegen/src/generate/consts.ts @@ -57,6 +57,7 @@ function generateForMeta (meta: Metadata, dest: string, extraTypes: Record Observable<${returnType}>> & QueryableStorageEntry;`); + indent(6)(`${stringLowerFirst(storageEntry.name.toString())}: ${entryType} Observable<${returnType}>>${isStrict ? '' : ' & QueryableStorageEntry'};`); })) .concat([indent(4)('};')]); } @@ -110,18 +110,28 @@ function generateForMeta (registry: Registry, meta: Metadata, dest: string, extr { file: 'rxjs', types: ['Observable'] + }, + { + file: '@polkadot/api/types', + types: ['ApiTypes'] } ]); const interfaceStart = [ "declare module '@polkadot/api/types/storage' {", indent(2)('export interface AugmentedQueries {\n') ].join('\n'); - const interfaceEnd = `\n${indent(2)('}')}\n}`; + const interfaceEnd = `\n${indent(2)('}')}\n\n`; + const queryableStorageInterface = indent(2)('export interface QueryableStorage extends AugmentedQueries {') + .concat('\n') + .concat(isStrict ? '' : indent(4)('[index: string]: QueryableModuleStorage;\n')) + .concat(indent(2)('}\n')); return header .concat(interfaceStart) .concat(body.join('\n')) .concat(interfaceEnd) + .concat(queryableStorageInterface) + .concat('}') .concat(FOOTER); }); } diff --git a/packages/typegen/src/generate/tx.ts b/packages/typegen/src/generate/tx.ts index a8c51a77ab..07a11b5256 100644 --- a/packages/typegen/src/generate/tx.ts +++ b/packages/typegen/src/generate/tx.ts @@ -78,18 +78,29 @@ function generateForMeta (registry: Registry, meta: Metadata, dest: string, extr { file: '@polkadot/api/submittable/types', types: ['SubmittableExtrinsic'] + }, + { + file: '@polkadot/api/types', + types: ['ApiTypes'] } ]); const interfaceStart = [ "declare module '@polkadot/api/types/submittable' {", indent(2)('export interface AugmentedSubmittables {\n') ].join('\n'); - const interfaceEnd = `\n${indent(2)('}')}\n}`; + const interfaceEnd = `\n${indent(2)('}')}\n\n`; + const submittableExtrinsicsInterface = indent(2)('export interface SubmittableExtrinsics extends AugmentedSubmittables {') + .concat('\n') + .concat(indent(4)('(extrinsic: Uint8Array | string): SubmittableExtrinsic;\n')) + .concat(isStrict ? '' : indent(4)('[index: string]: SubmittableModuleExtrinsics;\n')) + .concat(indent(2)('}\n')); return header .concat(interfaceStart) .concat(body.join('\n')) .concat(interfaceEnd) + .concat(submittableExtrinsicsInterface) + .concat('}') .concat(FOOTER); }); } diff --git a/packages/typegen/src/util/formatting.ts b/packages/typegen/src/util/formatting.ts index d128b9339d..4024aa7820 100644 --- a/packages/typegen/src/util/formatting.ts +++ b/packages/typegen/src/util/formatting.ts @@ -139,7 +139,7 @@ export function formatType (definitions: object, type: string | TypeDef, imports if (typeof type === 'string') { // If type is "unorthodox" (i.e. `{ something: any }` for an Enum input or `[a | b | c, d | e | f]` for a Tuple's similar types), // we return it as-is - if (/(^{.+:.+})|^\([^,]+\)|^\(.+\)\[\]|^\[([^;]+|)?[^;]+\]/.exec(type)) { + if (/(^{.+:.+})|^\([^,]+\)|^\(.+\)\[\]|^\[.+\]/.exec(type) && !/\[\w+;\w+\]/.exec(type)) { return type; }