Only include derives with parent query (#1755)
* Only include derives with parent query * Update CHANGELOG
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
# 1.0.0-beta-x
|
# 1.0.0-beta-x
|
||||||
|
|
||||||
- **Breaking change** Drop support for Substrate v1 chain in all derives
|
- **Breaking change** Drop support for Substrate v1 chain in all derives
|
||||||
|
- Only decorate derives where relevant parent `api.query.*` is available
|
||||||
- Support `.entries(arg?: any)` lookups on DoubleMaps (in addition to previously supported maps)
|
- Support `.entries(arg?: any)` lookups on DoubleMaps (in addition to previously supported maps)
|
||||||
- Remove un-deployed support for v11 metadata (this was decided against on Substrate)
|
- Remove un-deployed support for v11 metadata (this was decided against on Substrate)
|
||||||
- Allow v9 metadata to parse even in cases where it was wrongly deployed pre-v10
|
- Allow v9 metadata to parse even in cases where it was wrongly deployed pre-v10
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import * as treasury from './treasury';
|
|||||||
|
|
||||||
export * from './type';
|
export * from './type';
|
||||||
|
|
||||||
|
export const derive = { accounts, balances, chain, contracts, council, democracy, elections, imOnline, session, society, staking, technicalCommittee, treasury };
|
||||||
|
|
||||||
type DeriveSection<Section> = {
|
type DeriveSection<Section> = {
|
||||||
[Method in keyof Section]: Section[Method] extends AnyFunction
|
[Method in keyof Section]: Section[Method] extends AnyFunction
|
||||||
? ReturnType<Section[Method]> // ReturnType<Section[Method]> will be the inner function, i.e. without (api) argument
|
? ReturnType<Section[Method]> // ReturnType<Section[Method]> will be the inner function, i.e. without (api) argument
|
||||||
@@ -34,14 +36,35 @@ type DeriveAllSections<AllSections> = {
|
|||||||
|
|
||||||
export type DeriveCustom = Record<string, Record<string, (api: ApiInterfaceRx) => (...args: any[]) => Observable<any>>>;
|
export type DeriveCustom = Record<string, Record<string, (api: ApiInterfaceRx) => (...args: any[]) => Observable<any>>>;
|
||||||
|
|
||||||
|
export type ExactDerive = DeriveAllSections<typeof derive>;
|
||||||
|
|
||||||
|
// Enable derive only if some of these modules are available
|
||||||
|
const deriveAvail: Record<string, string[]> = {
|
||||||
|
contracts: ['contracts'],
|
||||||
|
council: ['council'],
|
||||||
|
democracy: ['democracy'],
|
||||||
|
elections: ['electionsPhragmen', 'elections'],
|
||||||
|
imOnline: ['imOnline'],
|
||||||
|
session: ['session'],
|
||||||
|
society: ['society'],
|
||||||
|
staking: ['staking'],
|
||||||
|
technicalCommittee: ['technicalCommittee'],
|
||||||
|
treasury: ['treasury']
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an object that will inject `api` into all the functions inside
|
* Returns an object that will inject `api` into all the functions inside
|
||||||
* `allSections`, and keep the object architecture of `allSections`.
|
* `allSections`, and keep the object architecture of `allSections`.
|
||||||
*/
|
*/
|
||||||
/** @internal */
|
/** @internal */
|
||||||
function injectFunctions<AllSections> (api: ApiInterfaceRx, allSections: AllSections): DeriveAllSections<AllSections> {
|
function injectFunctions<AllSections> (api: ApiInterfaceRx, allSections: AllSections): DeriveAllSections<AllSections> {
|
||||||
|
const queryKeys = Object.keys(api.query);
|
||||||
|
|
||||||
return Object
|
return Object
|
||||||
.keys(allSections)
|
.keys(allSections)
|
||||||
|
.filter((sectionName): boolean =>
|
||||||
|
!deriveAvail[sectionName] || deriveAvail[sectionName].some((query): boolean => queryKeys.includes(query))
|
||||||
|
)
|
||||||
.reduce((deriveAcc, sectionName): DeriveAllSections<AllSections> => {
|
.reduce((deriveAcc, sectionName): DeriveAllSections<AllSections> => {
|
||||||
const section = allSections[sectionName as keyof AllSections];
|
const section = allSections[sectionName as keyof AllSections];
|
||||||
|
|
||||||
@@ -61,9 +84,6 @@ function injectFunctions<AllSections> (api: ApiInterfaceRx, allSections: AllSect
|
|||||||
}, {} as DeriveAllSections<AllSections>);
|
}, {} as DeriveAllSections<AllSections>);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const derive = { accounts, balances, chain, contracts, council, democracy, elections, imOnline, session, society, staking, technicalCommittee, treasury };
|
|
||||||
export type ExactDerive = DeriveAllSections<typeof derive>;
|
|
||||||
|
|
||||||
// FIXME The return type of this function should be {...ExactDerive, ...DeriveCustom}
|
// FIXME The return type of this function should be {...ExactDerive, ...DeriveCustom}
|
||||||
// For now we just drop the custom derive typings
|
// For now we just drop the custom derive typings
|
||||||
/** @internal */
|
/** @internal */
|
||||||
|
|||||||
Reference in New Issue
Block a user