UNPKG

@onereach/orest-input-cli

Version:

The tool for creating, serving, and publishing OREST Inputs

157 lines (133 loc) 4 kB
const fs = require('fs'); const { version: uuidVersion, validate: uuidValidate } = require('uuid'); const prepareAuth = require('./prepareAuth'); const StoreApi = require('./api/storeApi'); const getMeta = require('./getMeta'); const checkPublished = require('./checkPublished'); const _uniqueBy = require('lodash/uniqBy'); const chalk = require('chalk'); const { verify: verifyPackageType } = require('./packageType'); const repository = 'account'; function checkUuid(uuid) { if (!uuidValidate(uuid) && uuidVersion(uuid) !== 4) { throw new Error(`Invalid UUID: ${uuid}`); } return true; } async function main( options = { list: null, remove: null, add: null, removeAll: null } ) { const { answers, userToken } = await prepareAuth(options); let packageType; if (options.type) { verifyPackageType(options.type, true); packageType = options.type; } let dirs = options?.directory?.length ? options.directory : ['']; if (options?.directory === true) { dirs = fs .readdirSync(process.cwd(), { withFileTypes: true }) .filter(dirent => dirent.isDirectory()) .map(dirent => dirent.name); } for (let i = 0; i < dirs.length; i++) { const relDirPath = dirs[i]; const meta = await getMeta(relDirPath); if (meta.packageType) { packageType = meta.packageType; } verifyPackageType(packageType, true); // throw error if empty, etc. const storeApi = new StoreApi({ userToken, storeApiUrl: answers.storeApiUrl, packageType, }); const isPublished = await checkPublished( { id: meta.packageName, version: meta.packageVersion, }, { storeApi } ); if (!isPublished) { console.log(`${meta.packageName}@${meta.packageVersion}`); console.log( chalk.red( ' Package is not published yet. Use "publish" command first.' ) ); console.log(); break; } console.log(); console.log( chalk.gray( `...Load ${meta.packageName} v${meta.packageVersion} meta data...` ) ); const [packageStatusDetails] = await storeApi.getVersions({ id: meta.packageName, }); const membersAccount = packageStatusDetails?.member?.account || []; console.log(); switch (true) { case options.removeAll: await storeApi.setReleaseStatus({ repository, id: meta.packageName, version: meta.packageVersion, member: { account: [] }, }); console.log(chalk.green(`✅ Done! Cleared package members.`)); break; case options.remove && checkUuid(options.remove): await storeApi.setReleaseStatus({ repository, id: meta.packageName, version: meta.packageVersion, member: { account: _uniqueBy( membersAccount.filter( ({ accountId }) => accountId !== options.remove ), 'accountId' ), }, }); console.log( chalk.green( `✅ Done! ${options.remove} removed from package members.` ) ); break; case options.add && checkUuid(options.add): await storeApi.setReleaseStatus({ repository, id: meta.packageName, version: meta.packageVersion, member: { account: _uniqueBy( [...membersAccount, { accountId: options.add }], 'accountId' ), }, }); console.log( chalk.green(`✅ Done! ${options.add} added to package members.`) ); break; case options.list: default: membersAccount.length ? console.table(membersAccount) : console.log(chalk.redBright('No members found.')); break; } } } module.exports = (...args) => { main(...args).catch(err => { console.error(err); process.exit(1); }); };