diff --git a/tools/schemaCheck.js b/tools/schemaCheck.js index ebb90ece..1013a9a5 100644 --- a/tools/schemaCheck.js +++ b/tools/schemaCheck.js @@ -1,29 +1,37 @@ -const fs = require('fs'); +const fs = require("fs") const Ajv = require("ajv") const ajv = new Ajv() -const schema = require('./schema/chainSchema.json') -const chainFiles = fs.readdirSync('../_data/chains/'); +const schema = require("./schema/chainSchema.json") +const chainFiles = fs.readdirSync("../_data/chains/") + +// https://chainagnostic.org/CAIPs/caip-2 +const parseChainId = (chainId) => + /^(?[-a-z0-9]{3,8})-(?[-a-zA-Z0-9]{1,32})$/u.exec( + chainId + ) const filesWithErrors = [] -for(const chainFile of chainFiles){ - const fileLocation = `../_data/chains/${chainFile}` - const fileData = fs.readFileSync(fileLocation,'utf8') - const fileDataJson = JSON.parse(fileData) - const chainIdFromFileName = chainFile.match(/eip155-(\d+)\.json/)[1] - const parsedChainId = parseInt(chainIdFromFileName, 10); - if(chainIdFromFileName != parsedChainId.toString()){ - throw new Error(`File name does not match parsed ChainID ${parsedChainId} in ${chainFile}`) - } - if(parsedChainId !== fileDataJson.chainId){ - throw new Error(`File Name does not match with ChainID in ${chainFile}`) - } - const valid = ajv.validate(schema, fileDataJson) - if(!valid) { - console.error(ajv.errors) - filesWithErrors.push(chainFile) - } +for (const chainFile of chainFiles) { + const fileLocation = `../_data/chains/${chainFile}` + const fileData = fs.readFileSync(fileLocation, "utf8") + const fileDataJson = JSON.parse(fileData) + const fileName = chainFile.split(".")[0] + const parsedChainId = parseChainId(fileName)?.groups + const chainIdFromFileName = parsedChainId?.reference + if (chainIdFromFileName != fileDataJson.chainId) { + throw new Error(`File Name does not match with ChainID in ${chainFile}`) + } + const valid = ajv.validate(schema, fileDataJson) + if (!valid) { + console.error(ajv.errors) + filesWithErrors.push(chainFile) + } } -if(filesWithErrors.length > 0){ - throw new Error(`Invalid JSON Schema in ${filesWithErrors.length} files at ${filesWithErrors.join(",")}`) -} \ No newline at end of file +if (filesWithErrors.length > 0) { + throw new Error( + `Invalid JSON Schema in ${ + filesWithErrors.length + } files at ${filesWithErrors.join(",")}` + ) +}