42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
|
const fs = require("fs");
|
||
|
|
||
|
const SRC_IDL = __dirname + "/../../../solana/idl";
|
||
|
const DST_IDL = __dirname + "/../src/anchor-idl";
|
||
|
const TS = __dirname + "/../src/solana/types";
|
||
|
|
||
|
const programs = {
|
||
|
"wormhole.json": "Wormhole",
|
||
|
"token_bridge.json": "TokenBridge",
|
||
|
"nft_bridge.json": "NftBridge",
|
||
|
};
|
||
|
|
||
|
function main() {
|
||
|
if (!fs.existsSync(DST_IDL)) {
|
||
|
fs.mkdirSync(DST_IDL);
|
||
|
}
|
||
|
|
||
|
if (!fs.existsSync(TS)) {
|
||
|
fs.mkdirSync(TS);
|
||
|
}
|
||
|
|
||
|
for (const basename of fs.readdirSync(SRC_IDL)) {
|
||
|
const idl = DST_IDL + "/" + basename;
|
||
|
fs.copyFileSync(SRC_IDL + "/" + basename, idl);
|
||
|
|
||
|
const targetTypescript = TS + "/" + snakeToCamel(basename).replace("json", "ts");
|
||
|
|
||
|
const programType = programs[basename];
|
||
|
fs.writeFileSync(targetTypescript, `export type ${programType} = `);
|
||
|
fs.appendFileSync(targetTypescript, fs.readFileSync(idl));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const snakeToCamel = str =>
|
||
|
str.toLowerCase().replace(/([-_][a-z])/g, group =>
|
||
|
group
|
||
|
.toUpperCase()
|
||
|
.replace('-', '')
|
||
|
.replace('_', '')
|
||
|
);
|
||
|
|
||
|
main();
|