UNPKG

@newos/cli

Version:
80 lines 3.66 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_extra_1 = __importDefault(require("fs-extra")); const push_1 = __importDefault(require("./push")); const init_1 = __importDefault(require("../scripts/init")); const semver_1 = __importDefault(require("semver")); const prompt_1 = require("../prompts/prompt"); const ProjectFile_1 = __importDefault(require("../models/files/ProjectFile")); const validators_1 = require("../prompts/validators"); const telemetry_1 = __importDefault(require("../telemetry")); const typechain_1 = require("../prompts/typechain"); const name = 'init'; const signature = `${name} [project-name] [version]`; const description = `initialize your OpenZeppelin project. Provide a <project-name> and optionally an initial [version] name`; const register = program => program .command(signature, undefined, { noHelp: true }) .usage('<project-name> [version]') .description(description) .option('--publish', 'automatically publish your project upon pushing it to a network') .option('--force', 'overwrite existing project if there is one') .option('--typechain <target>', 'enable typechain support with specified target (web3-v1, ethers, or truffle)') .option('--typechain-outdir <path>', 'set output directory for typechain compilation (defaults to types/contracts)') .option('--link <dependency>', 'link to a dependency') .option('--no-install', 'skip installing packages dependencies locally') .withPushOptions() .withNonInteractiveOption() .action(action); async function action(projectName, version, options) { const { publish, force, link, install: installDependencies, interactive, typechainOutdir, typechain } = options; const args = { name: projectName, version, typechainEnabled: typechain ? true : typechain, typechainTarget: typechain, typechainOutdir, }; const props = getCommandProps(); const defaults = fs_extra_1.default.readJsonSync('package.json', { throws: false }) || { version: '1.0.0' }; const prompted = await prompt_1.promptIfNeeded({ args, defaults, props }, interactive); const dependencies = link ? link.split(',') : []; const flags = { dependencies, installDependencies, force, publish }; const initArguments = Object.assign(Object.assign({}, prompted), flags); await telemetry_1.default.report('init', initArguments, interactive); await init_1.default(initArguments); await push_1.default.runActionIfRequested(Object.assign({}, options)); } async function runActionIfNeeded(options) { const { interactive } = options; const projectFile = new ProjectFile_1.default(); if (interactive && !projectFile.exists()) { await action(undefined, undefined, { dontExitProcess: true }); } } function getCommandProps() { return Object.assign({ name: { message: 'Welcome to the NewOS CLI! Choose a name for your project', type: 'input', validate: validators_1.notEmpty, }, version: { message: 'Initial project version', type: 'input', validate: input => { if (semver_1.default.parse(input)) return true; return `Invalid semantic version: ${input}`; }, } }, typechain_1.TypechainQuestions); } exports.default = { name, signature, description, register, action, runActionIfNeeded, }; //# sourceMappingURL=init.js.map