From 9c0d296e877d0602292b6d1ea9fdc5e34227f4bf Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 22 Jan 2021 09:12:29 +0100 Subject: [PATCH] typegen dedup (#3089) --- packages/typegen/src/generate/consts.ts | 18 +++++------------ packages/typegen/src/generate/errors.ts | 16 ++++----------- packages/typegen/src/generate/events.ts | 18 +++++------------ packages/typegen/src/generate/query.ts | 16 ++++----------- packages/typegen/src/generate/rpc.ts | 8 +++----- packages/typegen/src/generate/tx.ts | 16 ++++----------- packages/typegen/src/util/index.ts | 1 + packages/typegen/src/util/initMeta.ts | 27 +++++++++++++++++++++++++ 8 files changed, 53 insertions(+), 67 deletions(-) create mode 100644 packages/typegen/src/util/initMeta.ts diff --git a/packages/typegen/src/generate/consts.ts b/packages/typegen/src/generate/consts.ts index b559d82030..8a63ad6731 100644 --- a/packages/typegen/src/generate/consts.ts +++ b/packages/typegen/src/generate/consts.ts @@ -1,17 +1,15 @@ // Copyright 2017-2021 @polkadot/typegen authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { Metadata } from '@polkadot/metadata/Metadata'; import type { ExtraTypes } from './types'; import Handlebars from 'handlebars'; -import { Metadata } from '@polkadot/metadata/Metadata'; -import staticData from '@polkadot/metadata/static'; -import { TypeRegistry } from '@polkadot/types/create'; import * as defaultDefs from '@polkadot/types/interfaces/definitions'; import { stringCamelCase } from '@polkadot/util'; -import { compareName, createImports, formatType, readTemplate, registerDefinitions, setImports, writeFile } from '../util'; +import { compareName, createImports, formatType, initMeta, readTemplate, setImports, writeFile } from '../util'; const template = readTemplate('consts'); const generateForMetaTemplate = Handlebars.compile(template); @@ -19,7 +17,7 @@ const generateForMetaTemplate = Handlebars.compile(template); /** @internal */ function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean): void { writeFile(dest, (): string => { - const allTypes: Record }>> = { '@polkadot/types/interfaces': defaultDefs, ...extraTypes }; + const allTypes = { '@polkadot/types/interfaces': defaultDefs, ...extraTypes }; const imports = createImports(allTypes); const allDefs = Object.entries(allTypes).reduce((defs, [path, obj]) => { return Object.entries(obj).reduce((defs, [key, value]) => ({ ...defs, [`${path}/${key}`]: value }), defs); @@ -76,14 +74,8 @@ function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes, // Call `generateForMeta()` with current static metadata /** @internal */ -export function generateDefaultConsts (dest = 'packages/api/src/augment/consts.ts', data = staticData, extraTypes: ExtraTypes = {}, isStrict = false): void { - const registry = new TypeRegistry(); - - registerDefinitions(registry, extraTypes); - - const metadata = new Metadata(registry, data); - - registry.setMetadata(metadata); +export function generateDefaultConsts (dest = 'packages/api/src/augment/consts.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { + const { metadata } = initMeta(data, extraTypes); return generateForMeta(metadata, dest, extraTypes, isStrict); } diff --git a/packages/typegen/src/generate/errors.ts b/packages/typegen/src/generate/errors.ts index b22b1b98e8..478b17e062 100644 --- a/packages/typegen/src/generate/errors.ts +++ b/packages/typegen/src/generate/errors.ts @@ -1,16 +1,14 @@ // Copyright 2017-2021 @polkadot/typegen authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { Metadata } from '@polkadot/metadata/Metadata'; import type { ExtraTypes } from './types'; import Handlebars from 'handlebars'; -import { Metadata } from '@polkadot/metadata/Metadata'; -import staticData from '@polkadot/metadata/static'; -import { TypeRegistry } from '@polkadot/types/create'; import { stringCamelCase } from '@polkadot/util'; -import { compareName, createImports, readTemplate, registerDefinitions, writeFile } from '../util'; +import { compareName, createImports, initMeta, readTemplate, writeFile } from '../util'; const template = readTemplate('errors'); const generateForMetaTemplate = Handlebars.compile(template); @@ -52,14 +50,8 @@ function generateForMeta (meta: Metadata, dest: string, isStrict: boolean): void // Call `generateForMeta()` with current static metadata /** @internal */ -export function generateDefaultErrors (dest = 'packages/api/src/augment/errors.ts', data = staticData, extraTypes: ExtraTypes = {}, isStrict = false): void { - const registry = new TypeRegistry(); - - registerDefinitions(registry, extraTypes); - - const metadata = new Metadata(registry, data); - - registry.setMetadata(metadata); +export function generateDefaultErrors (dest = 'packages/api/src/augment/errors.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { + const { metadata } = initMeta(data, extraTypes); return generateForMeta(metadata, dest, isStrict); } diff --git a/packages/typegen/src/generate/events.ts b/packages/typegen/src/generate/events.ts index e6a77d41f5..938ee4ebd0 100644 --- a/packages/typegen/src/generate/events.ts +++ b/packages/typegen/src/generate/events.ts @@ -1,17 +1,15 @@ // Copyright 2017-2021 @polkadot/typegen authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { Metadata } from '@polkadot/metadata/Metadata'; import type { ExtraTypes } from './types'; import Handlebars from 'handlebars'; -import { Metadata } from '@polkadot/metadata/Metadata'; -import staticData from '@polkadot/metadata/static'; -import { TypeRegistry } from '@polkadot/types/create'; import * as defaultDefs from '@polkadot/types/interfaces/definitions'; import { stringCamelCase } from '@polkadot/util'; -import { compareName, createImports, formatType, readTemplate, registerDefinitions, setImports, writeFile } from '../util'; +import { compareName, createImports, formatType, initMeta, readTemplate, setImports, writeFile } from '../util'; const template = readTemplate('events'); const generateForMetaTemplate = Handlebars.compile(template); @@ -19,7 +17,7 @@ const generateForMetaTemplate = Handlebars.compile(template); /** @internal */ function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes, isStrict: boolean): void { writeFile(dest, (): string => { - const allTypes: Record }>> = { '@polkadot/types/interfaces': defaultDefs, ...extraTypes }; + const allTypes = { '@polkadot/types/interfaces': defaultDefs, ...extraTypes }; const imports = createImports(allTypes); const allDefs = Object.entries(allTypes).reduce((defs, [path, obj]) => { return Object.entries(obj).reduce((defs, [key, value]) => ({ ...defs, [`${path}/${key}`]: value }), defs); @@ -69,14 +67,8 @@ function generateForMeta (meta: Metadata, dest: string, extraTypes: ExtraTypes, // Call `generateForMeta()` with current static metadata /** @internal */ -export function generateDefaultEvents (dest = 'packages/api/src/augment/events.ts', data = staticData, extraTypes: ExtraTypes = {}, isStrict = false): void { - const registry = new TypeRegistry(); - - registerDefinitions(registry, extraTypes); - - const metadata = new Metadata(registry, data); - - registry.setMetadata(metadata); +export function generateDefaultEvents (dest = 'packages/api/src/augment/events.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { + const { metadata } = initMeta(data, extraTypes); return generateForMeta(metadata, dest, extraTypes, isStrict); } diff --git a/packages/typegen/src/generate/query.ts b/packages/typegen/src/generate/query.ts index 56fee8c54c..eb4a5ad15a 100644 --- a/packages/typegen/src/generate/query.ts +++ b/packages/typegen/src/generate/query.ts @@ -1,20 +1,18 @@ // Copyright 2017-2021 @polkadot/typegen authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { Metadata } from '@polkadot/metadata/Metadata'; import type { StorageEntryMetadataLatest } from '@polkadot/types/interfaces/metadata'; import type { Registry } from '@polkadot/types/types'; import type { ExtraTypes } from './types'; import Handlebars from 'handlebars'; -import { Metadata } from '@polkadot/metadata/Metadata'; -import staticData from '@polkadot/metadata/static'; -import { TypeRegistry } from '@polkadot/types/create'; import * as defaultDefs from '@polkadot/types/interfaces/definitions'; import { unwrapStorageType } from '@polkadot/types/primitive/StorageKey'; import { stringCamelCase } from '@polkadot/util'; -import { compareName, createImports, formatType, getSimilarTypes, readTemplate, registerDefinitions, setImports, TypeImports, writeFile } from '../util'; +import { compareName, createImports, formatType, getSimilarTypes, initMeta, readTemplate, setImports, TypeImports, writeFile } from '../util'; import { ModuleTypes } from '../util/imports'; // From a storage entry metadata, we return [args, returnType] @@ -131,14 +129,8 @@ function generateForMeta (registry: Registry, meta: Metadata, dest: string, extr // Call `generateForMeta()` with current static metadata /** @internal */ -export function generateDefaultQuery (dest = 'packages/api/src/augment/query.ts', data = staticData, extraTypes: ExtraTypes = {}, isStrict = false): void { - const registry = new TypeRegistry(); - - registerDefinitions(registry, extraTypes); - - const metadata = new Metadata(registry, data); - - registry.setMetadata(metadata); +export function generateDefaultQuery (dest = 'packages/api/src/augment/query.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { + const { metadata, registry } = initMeta(data, extraTypes); return generateForMeta(registry, metadata, dest, extraTypes, isStrict); } diff --git a/packages/typegen/src/generate/rpc.ts b/packages/typegen/src/generate/rpc.ts index 8f3bf5a894..53f5503f7f 100644 --- a/packages/typegen/src/generate/rpc.ts +++ b/packages/typegen/src/generate/rpc.ts @@ -1,15 +1,15 @@ // Copyright 2017-2021 @polkadot/typegen authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { TypeRegistry } from '@polkadot/types/create'; import type { Definitions } from '@polkadot/types/types'; import type { ExtraTypes } from './types'; import Handlebars from 'handlebars'; -import { TypeRegistry } from '@polkadot/types/create'; import * as defaultDefinitions from '@polkadot/types/interfaces/definitions'; -import { createImports, formatType, getSimilarTypes, readTemplate, registerDefinitions, setImports, writeFile } from '../util'; +import { createImports, formatType, getSimilarTypes, initMeta, readTemplate, setImports, writeFile } from '../util'; interface ItemDef { args: string; @@ -143,9 +143,7 @@ export function generateRpcTypes (registry: TypeRegistry, importDefinitions: Rec } export function generateDefaultRpc (dest = 'packages/api/src/augment/rpc.ts', extraTypes: ExtraTypes = {}): void { - const registry = new TypeRegistry(); - - registerDefinitions(registry, extraTypes); + const { registry } = initMeta(undefined, extraTypes); generateRpcTypes( registry, diff --git a/packages/typegen/src/generate/tx.ts b/packages/typegen/src/generate/tx.ts index 35f1e9ea44..bcc7bcd180 100644 --- a/packages/typegen/src/generate/tx.ts +++ b/packages/typegen/src/generate/tx.ts @@ -1,19 +1,17 @@ // Copyright 2017-2021 @polkadot/typegen authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { Metadata } from '@polkadot/metadata/Metadata'; import type { Registry } from '@polkadot/types/types'; import type { ExtraTypes } from './types'; import Handlebars from 'handlebars'; -import { Metadata } from '@polkadot/metadata/Metadata'; -import staticData from '@polkadot/metadata/static'; -import { TypeRegistry } from '@polkadot/types/create'; import * as defaultDefs from '@polkadot/types/interfaces/definitions'; import { Text } from '@polkadot/types/primitive'; import { stringCamelCase } from '@polkadot/util'; -import { compareName, createImports, formatType, getSimilarTypes, readTemplate, registerDefinitions, setImports, writeFile } from '../util'; +import { compareName, createImports, formatType, getSimilarTypes, initMeta, readTemplate, setImports, writeFile } from '../util'; const MAPPED_NAMES: Record = { new: 'updated' @@ -94,14 +92,8 @@ function generateForMeta (registry: Registry, meta: Metadata, dest: string, extr // Call `generateForMeta()` with current static metadata /** @internal */ -export function generateDefaultTx (dest = 'packages/api/src/augment/tx.ts', data = staticData, extraTypes: ExtraTypes = {}, isStrict = false): void { - const registry = new TypeRegistry(); - - registerDefinitions(registry, extraTypes); - - const metadata = new Metadata(registry, data); - - registry.setMetadata(metadata); +export function generateDefaultTx (dest = 'packages/api/src/augment/tx.ts', data?: string, extraTypes: ExtraTypes = {}, isStrict = false): void { + const { metadata, registry } = initMeta(data, extraTypes); return generateForMeta(registry, metadata, dest, extraTypes, isStrict); } diff --git a/packages/typegen/src/util/index.ts b/packages/typegen/src/util/index.ts index bf0e165df7..3e13faac88 100644 --- a/packages/typegen/src/util/index.ts +++ b/packages/typegen/src/util/index.ts @@ -6,6 +6,7 @@ export * from './docs'; export * from './file'; export * from './formatting'; export * from './imports'; +export * from './initMeta'; export * from './register'; export const compareName = (a: { name: { toString(): string } }, b: { name: { toString(): string } }): number => diff --git a/packages/typegen/src/util/initMeta.ts b/packages/typegen/src/util/initMeta.ts new file mode 100644 index 0000000000..27d0107d14 --- /dev/null +++ b/packages/typegen/src/util/initMeta.ts @@ -0,0 +1,27 @@ +// Copyright 2017-2021 @polkadot/typegen authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { ExtraTypes } from '../generate/types'; + +import { Metadata } from '@polkadot/metadata/Metadata'; +import staticData from '@polkadot/metadata/static'; +import { TypeRegistry } from '@polkadot/types/create'; + +import { registerDefinitions } from './register'; + +interface Result { + metadata: Metadata; + registry: TypeRegistry; +} + +export function initMeta (data = staticData, extraTypes: ExtraTypes = {}): Result { + const registry = new TypeRegistry(); + + registerDefinitions(registry, extraTypes); + + const metadata = new Metadata(registry, data); + + registry.setMetadata(metadata); + + return { metadata, registry }; +}