Skip to content

Commit 3ee6eb5

Browse files
authored
Dedupe wss:// handling in polkadot-types-from-{chain, defs} (#4804)
1 parent 9d1c848 commit 3ee6eb5

File tree

5 files changed

+49
-55
lines changed

5 files changed

+49
-55
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Changes:
66

77
- Added support for typegen over `Range/RangeInclusive` types
88
- Add explicit support for `Call` typegen (inclusive of non-defaults)
9+
- Deupe `wss://` handling in `polkadot-types-from-{chain, defs}`
910

1011

1112
## 8.3.2 May 8, 2022

packages/typegen/src/fromChain.ts

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@ import yargs from 'yargs';
88

99
import { Definitions } from '@polkadot/types/types';
1010
import { formatNumber } from '@polkadot/util';
11-
import { WebSocket } from '@polkadot/x-ws';
1211

1312
import { generateDefaultConsts, generateDefaultErrors, generateDefaultEvents, generateDefaultQuery, generateDefaultRpc, generateDefaultTx } from './generate';
14-
import { HEADER, writeFile } from './util';
13+
import { getMetadataViaWs, HEADER, writeFile } from './util';
1514

1615
function generate (metaHex: HexString, pkg: string | undefined, output: string, isStrict?: boolean): void {
1716
console.log(`Generating from metadata, ${formatNumber((metaHex.length - 2) / 2)} bytes`);
@@ -78,30 +77,9 @@ export function main (): void {
7877
}).argv as ArgV;
7978

8079
if (endpoint.startsWith('wss://') || endpoint.startsWith('ws://')) {
81-
try {
82-
const websocket = new WebSocket(endpoint);
83-
84-
websocket.onclose = (event: { code: number; reason: string }): void => {
85-
console.error(`disconnected, code: '${event.code}' reason: '${event.reason}'`);
86-
process.exit(1);
87-
};
88-
89-
websocket.onerror = (event: unknown): void => {
90-
console.error(event);
91-
process.exit(1);
92-
};
93-
94-
websocket.onopen = (): void => {
95-
console.log('connected');
96-
websocket.send('{"id":"1","jsonrpc":"2.0","method":"state_getMetadata","params":[]}');
97-
};
98-
99-
websocket.onmessage = (message: unknown): void => {
100-
generate((JSON.parse((message as Record<string, string>).data) as Record<string, HexString>).result, pkg, output, isStrict);
101-
};
102-
} catch (error) {
103-
process.exit(1);
104-
}
80+
getMetadataViaWs(endpoint)
81+
.then((metadata) => generate(metadata, pkg, output, isStrict))
82+
.catch(() => process.exit(1));
10583
} else {
10684
// eslint-disable-next-line @typescript-eslint/no-var-requires
10785
generate((require(path.join(process.cwd(), endpoint)) as Record<string, HexString>).result, pkg, output, isStrict);

packages/typegen/src/fromDefs.ts

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import path from 'path';
77
import yargs from 'yargs';
88

99
import * as substrateDefs from '@polkadot/types/interfaces/definitions';
10-
import { WebSocket } from '@polkadot/x-ws';
1110

1211
import { generateInterfaceTypes } from './generate/interfaceRegistry';
1312
import { generateTsDef } from './generate/tsDef';
1413
import { generateDefaultLookup } from './generate';
14+
import { getMetadataViaWs } from './util';
1515

1616
type ArgV = { input: string; package: string; endpoint?: string; };
1717

@@ -57,42 +57,21 @@ export function main (): void {
5757
'@polkadot/types/interfaces': filteredBase,
5858
[pkg]: userDefs
5959
};
60+
const inputPath = path.join(process.cwd(), input);
6061

61-
generateTsDef(allDefs, path.join(process.cwd(), input), pkg);
62-
generateInterfaceTypes(allDefs, path.join(process.cwd(), input, 'augment-types.ts'));
62+
generateTsDef(allDefs, inputPath, pkg);
63+
generateInterfaceTypes(allDefs, path.join(inputPath, 'augment-types.ts'));
6364

6465
if (endpoint) {
6566
if (endpoint.startsWith('wss://') || endpoint.startsWith('ws://')) {
66-
try {
67-
const websocket = new WebSocket(endpoint);
68-
69-
websocket.onclose = (event: { code: number; reason: string }): void => {
70-
console.error(`disconnected, code: '${event.code}' reason: '${event.reason}'`);
71-
process.exit(1);
72-
};
73-
74-
websocket.onerror = (event: unknown): void => {
75-
console.error(event);
76-
process.exit(1);
77-
};
78-
79-
websocket.onopen = (): void => {
80-
console.log('connected');
81-
websocket.send('{"id":"1","jsonrpc":"2.0","method":"state_getMetadata","params":[]}');
82-
};
83-
84-
websocket.onmessage = (message: unknown): void => {
85-
generateDefaultLookup(path.join(process.cwd(), input), (JSON.parse((message as Record<string, string>).data) as Record<string, HexString>).result);
86-
process.exit(0);
87-
};
88-
} catch (error) {
89-
process.exit(1);
90-
}
67+
getMetadataViaWs(endpoint)
68+
.then((metadata) => generateDefaultLookup(inputPath, metadata))
69+
.catch(() => process.exit(1));
9170
} else {
9271
// eslint-disable-next-line @typescript-eslint/no-var-requires
9372
const metaHex = (require(path.join(process.cwd(), endpoint)) as Record<string, HexString>).result;
9473

95-
generateDefaultLookup(path.join(process.cwd(), input), metaHex);
74+
generateDefaultLookup(inputPath, metaHex);
9675
}
9776
}
9877
}

packages/typegen/src/util/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export * from './formatting';
88
export * from './imports';
99
export * from './initMeta';
1010
export * from './register';
11+
export * from './wsMeta';
1112

1213
type Cmp = { name: { toString(): string } };
1314

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright 2017-2022 @polkadot/typegen authors & contributors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
import type { HexString } from '@polkadot/util/types';
5+
6+
import { WebSocket } from '@polkadot/x-ws';
7+
8+
export async function getMetadataViaWs (endpoint: string): Promise<HexString> {
9+
return new Promise((resolve): void => {
10+
try {
11+
const websocket = new WebSocket(endpoint);
12+
13+
websocket.onclose = (event: { code: number; reason: string }): void => {
14+
console.error(`disconnected, code: '${event.code}' reason: '${event.reason}'`);
15+
process.exit(1);
16+
};
17+
18+
websocket.onerror = (event: unknown): void => {
19+
console.error(event);
20+
process.exit(1);
21+
};
22+
23+
websocket.onopen = (): void => {
24+
console.log('connected');
25+
websocket.send('{"id":"1","jsonrpc":"2.0","method":"state_getMetadata","params":[]}');
26+
};
27+
28+
websocket.onmessage = (message: { data: string }): void => {
29+
resolve((JSON.parse(message.data) as { result: HexString }).result);
30+
};
31+
} catch (error) {
32+
process.exit(1);
33+
}
34+
});
35+
}

0 commit comments

Comments
 (0)