@platformos/pos-cli
Version:
Manage your platformOS application
71 lines (61 loc) • 2.73 kB
JavaScript
import { program } from '../lib/program.js';
import logger from '../lib/logger.js';
import { posConfigDirectory, posModulesFilePath, posModulesLockFilePath, readLocalModules, writePosModules, writePosModulesLock } from '../lib/modules/configFiles.js';
import { findModuleVersion, resolveDependencies } from '../lib/modules/dependencies.js';
import { downloadAllModules } from '../lib/modules/downloadModule.js';
import Portal from '../lib/portal.js';
import path from 'path';
import { createDirectory } from '../lib/utils/create-directory.js';
import ora from 'ora';
const addNewModule = async (moduleName, moduleVersion, localModules, getVersions) => {
const newModule = await findModuleVersion(moduleName, moduleVersion, getVersions);
let modules;
if(newModule){
if (moduleVersion || !localModules[moduleName]) {
modules = {...localModules, ...newModule};
} else {
modules = {...localModules };
}
return modules;
} else {
throw new Error(`Can't find module ${moduleName} with version ${moduleVersion}`);
}
};
program
.name('pos-cli modules install')
.arguments('[module-name]', 'name of the module. Example: core. You can also pass version number: core@1.0.0')
.action(async (moduleNameWithVersion) => {
try {
await createDirectory(path.join(process.cwd(), posConfigDirectory));
const spinner = ora({ text: 'Modules install', stream: process.stdout });
spinner.start();
try {
let localModules = readLocalModules();
if(moduleNameWithVersion){
const [moduleName, moduleVersion] = moduleNameWithVersion.split('@');
localModules = await addNewModule(moduleName, moduleVersion, localModules, Portal.moduleVersions);
writePosModules(localModules);
spinner.succeed(`Added module: ${moduleName}@${localModules[moduleName]} to ${posModulesFilePath}`);
}
if(Object.keys(localModules).length === 0) {
spinner.stop();
} else {
spinner.start('Resolving module dependencies');
const modulesLocked = await resolveDependencies(localModules, Portal.moduleVersions);
writePosModulesLock(modulesLocked);
spinner.succeed(`Modules lock file updated: ${posModulesLockFilePath}`);
spinner.start('Downloading modules');
await downloadAllModules(modulesLocked);
spinner.succeed('Modules downloaded successfully');
}
} catch(e) {
logger.Debug(e);
spinner.stopAndPersist();
spinner.fail(e.message);
}
} catch {
logger.Error(`Aborting - ${posConfigDirectory} directory has not been created.`);
}
});
program.parse(process.argv);