UNPKG

jovo-cli

Version:
130 lines 5.74 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const command_1 = __importDefault(require("@oclif/command")); const fs_extra_1 = require("fs-extra"); const jovo_cli_core_1 = require("jovo-cli-core"); const Listr = require("listr"); const utils_1 = require("../utils"); const Prompts_1 = require("../utils/Prompts"); const chalk_1 = __importDefault(require("chalk")); class Load extends command_1.default { async run() { try { const { args } = this.parse(Load); const project = jovo_cli_core_1.getProject(); await project.init(); if (!fs_extra_1.existsSync(`./node_modules/${args.component}`)) { throw new jovo_cli_core_1.JovoCliError(`The component '${args.component}' does not exist.`, 'jovo-cli', "Please check for spelling or install it with 'npm i ${args.component} -s'."); } this.log(`\n jovo load: ${Load.description}`); this.log(chalk_1.default.grey(' >> Learn more: https://jovo.tech/docs/cli/load\n')); const dest = fs_extra_1.existsSync('./src') ? './src/components' : './components'; const isTsProject = await project.isTypeScriptProject(); if (fs_extra_1.existsSync(`${dest}/${args.component}`)) { const { overwriteComponent } = await Prompts_1.promptOverwriteComponent(); switch (overwriteComponent) { case Prompts_1.ANSWER_OVERWRITE: { fs_extra_1.removeSync(`${dest}/${args.component}`); } break; case Prompts_1.ANSWER_BACKUP: { fs_extra_1.moveSync(`${dest}/${args.component}`, `${dest}/${args.component}.backup.${Date.now()}`); } break; default: return; } } const tasksArr = [ { title: 'Copying component files...', async task() { await new Promise((res) => setTimeout(() => { load(args.component, dest, isTsProject); res(); }, 1000)); }, }, ]; const tasks = new Listr(tasksArr, { renderer: new utils_1.JovoCliRenderer(), collapse: false, }); await tasks.run(); this.log(); this.log(`\n\nSuccessfully copied ${args.component} into ${dest}.` + '\n\nLearn more on how to use it here >> https://github.com/jovotech/jovo-framework/blob/master/docs/advanced-concepts/components.md'); this.log(); } catch (err) { this.error(`There was a problem:\n${err}`); } } } exports.Load = Load; Load.description = 'Extracts the necessary files for a component from ./node_modules into your projects ./components folder.'; Load.examples = ['jovo load jovo-component-get-email']; Load.args = [{ name: 'component' }]; function load(component, dest, isTsProject) { const src = `node_modules/${component}`; const isTsComponent = isTypeScriptComponent(src); if (!fs_extra_1.existsSync(dest)) { fs_extra_1.mkdirSync(dest); } const invalidFiles = []; if (isTsProject) { invalidFiles.push('dist'); } else { if (isTsComponent) { invalidFiles.push('index.ts', 'src', 'tsconfig.json'); } } fs_extra_1.copySync(`./${src}`, `${dest}/${component}`, { filter(file) { return !invalidFiles.includes(file.replace(`${src}/`, '')); }, }); if (!isTsProject && isTsComponent) { fs_extra_1.copySync(`./${src}/dist`, `${dest}/${component}`, { filter(file) { return !/.*(\.d\.ts)|.*(\.js\.map)/g.test(file); }, }); fs_extra_1.removeSync(`${dest}/${component}/dist`); } const { devDependencies = {}, dependencies = {} } = JSON.parse(fs_extra_1.readFileSync(`${src}/package.json`, { encoding: 'utf-8' })); const dependencyKeys = Object.keys(dependencies).concat(Object.keys(devDependencies)); for (const dependencyKey of dependencyKeys) { if (!dependencyKey.includes('jovo-component')) { continue; } if (!fs_extra_1.existsSync(`./node_modules/${dependencyKey}`)) { throw new jovo_cli_core_1.JovoCliError(`The component ${component} depends on the nested component ${dependencyKey}, which does not exist in ./node_modules.`, 'jovo-cli', `Please install it with npm i ${dependencyKey} -s and reload your component.`); } const nestedDest = fs_extra_1.existsSync(`${dest}/${component}/src`) ? `${dest}/${component}/src/components` : `${dest}/${component}/components`; load(dependencyKey, nestedDest, isTsProject); } fs_extra_1.removeSync(`${dest}/${component}/package.json`); } function isTypeScriptComponent(componentSrc) { const content = fs_extra_1.readFileSync(`${componentSrc}/package.json`, { encoding: 'utf-8', }); if (content) { const packageFile = JSON.parse(content); if (packageFile.hasOwnProperty('devDependencies') && packageFile.devDependencies.hasOwnProperty('typescript')) { return true; } } return false; } //# sourceMappingURL=load.js.map