/ setupEnv.js
setupEnv.js
1 const fs = require("fs"); 2 const path = require("path"); 3 4 function initCanisterEnv() { 5 let localCanisters, prodCanisters; 6 try { 7 localCanisters = require( 8 path.resolve(".dfx", "local", "canister_ids.json"), 9 ); 10 } catch (error) { 11 console.log("No local canister_ids.json found"); 12 } 13 try { 14 prodCanisters = require(path.resolve("canister_ids.json")); 15 } catch (error) { 16 console.log("No production canister_ids.json found"); 17 } 18 19 const network = 20 process.env.DFX_NETWORK || 21 (process.env.NODE_ENV === "production" ? "ic" : "local"); 22 23 const canisterConfig = network === "local" ? localCanisters : prodCanisters; 24 25 const localMap = localCanisters 26 ? Object.entries(localCanisters).reduce((prev, current) => { 27 const [canisterName, canisterDetails] = current; 28 prev[canisterName.toUpperCase() + "_CANISTER_ID"] = 29 canisterDetails[network]; 30 return prev; 31 }, {}) 32 : undefined; 33 const prodMap = prodCanisters 34 ? Object.entries(prodCanisters).reduce((prev, current) => { 35 const [canisterName, canisterDetails] = current; 36 prev[canisterName.toUpperCase() + "_CANISTER_ID"] = 37 canisterDetails[network]; 38 return prev; 39 }, {}) 40 : undefined; 41 return [localMap, prodMap]; 42 } 43 const [localCanisters, prodCanisters] = initCanisterEnv(); 44 45 if (localCanisters) { 46 const localTemplate = Object.entries(localCanisters).reduce((start, next) => { 47 const [key, val] = next; 48 if (!start) return `${key}=${val}`; 49 return `${start ?? ""} 50 ${key}=${val}`; 51 }, ``); 52 fs.writeFileSync(".env.development", localTemplate); 53 } 54 if (prodCanisters) { 55 const prodTemplate = Object.entries(prodCanisters).reduce((start, next) => { 56 const [key, val] = next; 57 if (!start) return `${key}=${val}`; 58 return `${start ?? ""} 59 ${key}=${val}`; 60 }, ``); 61 fs.writeFileSync(".env", localTemplate); 62 }