Skip to content

Commit b971c85

Browse files
committed
add dynamic import
1 parent b153eb8 commit b971c85

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"test:test-release": "yarn build:scripts && node scripts/build/runYarnPack.js"
5252
},
5353
"dependencies": {
54-
"@polkadot-api/merkleize-metadata": "^1.1.21",
54+
"@polkadot-api/merkleize-metadata": "^1.1.29",
5555
"@polkadot/api": "16.5.2",
5656
"@polkadot/api-augment": "16.5.2",
5757
"@polkadot/api-contract": "16.5.2",

src/services/transaction/TransactionMetadataBlobService.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,31 @@ import { ApiPromise } from '@polkadot/api';
1818
import { ApiDecoration } from '@polkadot/api/types';
1919
import type { BlockHash } from '@polkadot/types/interfaces';
2020
import { u8aToHex } from '@polkadot/util';
21-
import { merkleizeMetadata } from '@polkadot-api/merkleize-metadata';
2221
import { BadRequest, InternalServerError } from 'http-errors';
2322
import { ITransactionMetadataBlob } from 'src/types/responses';
2423

2524
import { MetadataBlobParams } from '../../controllers/transaction/TransactionMetadataBlobController';
2625
import { AbstractService } from '../AbstractService';
2726

27+
// Dynamic import helper that TypeScript won't transform to require()
28+
// This is necessary because @polkadot-api/merkleize-metadata is an ESM-only package
29+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
30+
const dynamicImport = new Function('specifier', 'return import(specifier)') as <T>(specifier: string) => Promise<T>;
31+
32+
// Cached module after first load
33+
let merkleizeMetadataModule: typeof import('@polkadot-api/merkleize-metadata') | null = null;
34+
35+
async function getMerkleizeMetadata(): Promise<
36+
(typeof import('@polkadot-api/merkleize-metadata'))['merkleizeMetadata']
37+
> {
38+
if (!merkleizeMetadataModule) {
39+
merkleizeMetadataModule = await dynamicImport<typeof import('@polkadot-api/merkleize-metadata')>(
40+
'@polkadot-api/merkleize-metadata',
41+
);
42+
}
43+
return merkleizeMetadataModule.merkleizeMetadata;
44+
}
45+
2846
export class TransactionMetadataBlobService extends AbstractService {
2947
/**
3048
* Fetch metadata blob (proof) for a given transaction.
@@ -87,6 +105,8 @@ export class TransactionMetadataBlobService extends AbstractService {
87105

88106
const base58Prefix = ss58Format?.toNumber() ?? 42;
89107

108+
// Use dynamic import for ESM module compatibility
109+
const merkleizeMetadata = await getMerkleizeMetadata();
90110
const merkleized = merkleizeMetadata(metadataV15Raw, {
91111
decimals,
92112
tokenSymbol,

yarn.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,7 +1464,7 @@ __metadata:
14641464
languageName: node
14651465
linkType: hard
14661466

1467-
"@polkadot-api/merkleize-metadata@npm:^1.1.21":
1467+
"@polkadot-api/merkleize-metadata@npm:^1.1.29":
14681468
version: 1.1.29
14691469
resolution: "@polkadot-api/merkleize-metadata@npm:1.1.29"
14701470
dependencies:
@@ -2498,7 +2498,7 @@ __metadata:
24982498
resolution: "@substrate/api-sidecar@workspace:."
24992499
dependencies:
25002500
"@acala-network/chopsticks-testing": "npm:^1.2.5"
2501-
"@polkadot-api/merkleize-metadata": "npm:^1.1.21"
2501+
"@polkadot-api/merkleize-metadata": "npm:^1.1.29"
25022502
"@polkadot/api": "npm:16.5.2"
25032503
"@polkadot/api-augment": "npm:16.5.2"
25042504
"@polkadot/api-contract": "npm:16.5.2"

0 commit comments

Comments
 (0)