/ 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  }