From b27ecd34f1575dd21fb81bead653cd47bffcd574 Mon Sep 17 00:00:00 2001 From: dhruvja Date: Wed, 22 Apr 2026 12:54:22 +0530 Subject: [PATCH] fix(contract_manager): include filename in JSON parse errors --- contract_manager/src/node/utils/store.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/contract_manager/src/node/utils/store.ts b/contract_manager/src/node/utils/store.ts index 5f5e096b71..99319ceea4 100644 --- a/contract_manager/src/node/utils/store.ts +++ b/contract_manager/src/node/utils/store.ts @@ -56,6 +56,17 @@ import { } from "../../core/contracts/starknet"; import { Token } from "../../core/token"; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function parseJsonFile(jsonFile: string): any { + try { + return JSON.parse(readFileSync(jsonFile, "utf8")); + } catch (err) { + throw new Error( + `Failed to parse ${jsonFile}: ${(err as Error).message}`, + ); + } +} + export class Store { public chains: Record = { global: new GlobalChain() }; public contracts: Record = {}; @@ -114,7 +125,7 @@ export class Store { }; for (const jsonFile of this.getJsonFiles(`${this.path}/chains/`)) { - const parsedArray = JSON.parse(readFileSync(jsonFile, "utf8")); + const parsedArray = parseJsonFile(jsonFile); for (const parsed of parsedArray) { if (allChainClasses[parsed.type] === undefined) { throw new Error( @@ -202,7 +213,7 @@ export class Store { [SuiLazerContract.type]: SuiLazerContract, }; this.getJsonFiles(`${this.path}/contracts/`).forEach((jsonFile) => { - const parsedArray = JSON.parse(readFileSync(jsonFile, "utf8")); + const parsedArray = parseJsonFile(jsonFile); for (const parsed of parsedArray) { if (allContractClasses[parsed.type] === undefined) return; if (!this.chains[parsed.chain]) @@ -242,7 +253,7 @@ export class Store { loadAllTokens() { this.getJsonFiles(`${this.path}/tokens/`).forEach((jsonFile) => { - const parsedArray = JSON.parse(readFileSync(jsonFile, "utf8")); + const parsedArray = parseJsonFile(jsonFile); for (const parsed of parsedArray) { if (parsed.type !== Token.type) return; @@ -256,7 +267,7 @@ export class Store { loadAllVaults() { this.getJsonFiles(`${this.path}/vaults/`).forEach((jsonFile) => { - const parsedArray = JSON.parse(readFileSync(jsonFile, "utf8")); + const parsedArray = parseJsonFile(jsonFile); for (const parsed of parsedArray) { if (parsed.type !== Vault.type) return;