UNPKG

create-web3-dapp-dev

Version:

<p align="center"> <br /> <a href="https://createweb3dapp.alchemy.com"> <img src=".github/images/cw3d-logo.png" width="200" alt=""/></a> <br /> </p>

154 lines (141 loc) 3.97 kB
import open from "open"; import path from "path"; import prompts from "prompts"; import kill from "../../utils/kill.js"; import { validateProjectName } from "../../utils/validation.js"; import context from "../context.js"; import { generateDapp } from "../generateDapp.js"; import { selfDestroy, setRoot } from "../selfDestroy.js"; export async function startTemplatesWorkflow(useBackend = false, projectName?) { context.dappInfo.isTemplate = true; context.dappInfo.useBackend = useBackend; context.dappInfo.backendProvider = "hardhat-template"; let step = 0; let quit = false; while (!quit) { let exit = 0; switch (step) { case 0: try { context.projectName = projectName; while (!context.projectName?.length) { if (exit >= 2) { kill(); } exit++; const projectPath = await prompts({ type: "text", name: "projectPath", message: "Please, insert a project name", initial: "my-create-web3-dapp", validate: (value: string) => validateProjectName(value), }).then((data) => data.projectPath.trim()); if (projectPath) { context.resolvedProjectPath = path.resolve(projectPath); context.projectName = path.basename( context.resolvedProjectPath ); setRoot(context.resolvedProjectPath); } } } catch (e) { selfDestroy(e); } step++; break; case 1: await prompts({ type: "select", name: "chain", message: "Choose your chain", choices: [ { title: "Ethereum", value: "ETH_MAINNET" }, { title: "Polygon", value: "MATIC_MAINNET" }, { title: "Polygon zkEVM", value: "POLYGON_ZKEVM_MAINNET" }, { title: "Arbitrum", value: "ARB_MAINNET" }, { title: "Optimism", value: "OPT_MAINNET" }, { title: "Back", value: "back" }, ], initial: 0, hint: "- We’ll install all the right dependencies for you :)", }).then((data) => (context.dappInfo.chain = data.chain)); if (context.dappInfo.chain == "back") { step--; break; } if (!context.dappInfo.chain?.length) { process.exit(); } context.dappInfo.isEVM = context.dappInfo.chain == "ETH_MAINNET" || context.dappInfo.chain == "MATIC_MAINNET" || context.dappInfo.chain == "ARB_MAINNET" || context.dappInfo.chain == "OPT_MAINNET" || context.dappInfo.chain == "SOL_MAINNET" ? true : false; switch (context.dappInfo.chain) { case "ETH_MAINNET": context.dappInfo.testnet = "ETH_GOERLI"; break; case "MATIC_MAINNET": context.dappInfo.testnet = "MATIC_MUMBAI"; break; case "ARB_MAINNET": context.dappInfo.testnet = "ARB_GOERLI"; break; case "OPT_MAINNET": context.dappInfo.testnet = "OPT_GOERLI"; break; } step++; break; case 2: try { const hasAccount: string = await prompts({ type: "toggle", name: "hasAccount", message: "Do you already have an Alchemy account?", initial: true, active: "yes", inactive: "no", }).then((data) => data.hasAccount); if (typeof hasAccount == "boolean") { open("https://auth.alchemy.com/?a=create-web3-dapp"); step++; break; } else { process.exit(); } } catch (e) { selfDestroy(e); } break; case 3: try { const alchemyAPIKey: string = await prompts({ type: "text", name: "apiKey", message: "Insert your Alchemy API Key (Copy from https://auth.alchemy.com/?a=create-web3-dapp):", initial: "", }).then((data) => data.apiKey); if ( alchemyAPIKey.length < 32 || alchemyAPIKey.length > 33 ) { break; } context.dappInfo.apiKeys.ALCHEMY_API_KEY = alchemyAPIKey.length ? alchemyAPIKey : "demo"; quit = true; } catch (e) { selfDestroy(e); } break; } } generateDapp(); }