UNPKG

@onereach/orest-input-cli

Version:

The tool for creating, serving, and publishing OREST Inputs

160 lines (135 loc) 3.62 kB
const fs = require('fs'); const runNpmScript = require('./util/runNpmScript'); const removeFromDisk = require('./util/removeFromDisk'); const packBundle = require('./util/packBundle'); const { upload } = require('./upload'); const getMeta = require('./getMetaNpm'); const checkPublished = require('./checkPublished'); const { getProfiles, addProfile } = require('./profiles/profileService'); const prepareAuth = require('./prepareAuth'); function isString(value) { return typeof value === 'string' || value instanceof String; } function isBypassed(options) { return isString(options.userToken) && isString(options.storeApiUrl); } async function main(options) { let packageType; let userToken; let storeApiUrl; if (isBypassed(options)) { packageType = options.type; userToken = options.userToken; storeApiUrl = options.storeApiUrl; } else { const profiles = await getProfiles(); if (!profiles || !profiles[options.profile]) { await addProfile(options.profile); } const { answers, userToken: token } = await prepareAuth(options); packageType = answers.type || options.type; userToken = token; storeApiUrl = answers.storeApiUrl; } console.log(); 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]; if (options.build && !options.fromNpm) { await runNpmScript('build', [], relDirPath); } const { meta } = await prepareBuild(relDirPath, { fromNpm: options.fromNpm, packageName: options.packageName, packageVersion: options.packageVersion, }); await publish( { storeApiUrl, packageType, userToken, meta, fromNpm: options.fromNpm, keepArtifacts: options.keepArtifacts, }, relDirPath ); } } async function prepareBuild(relDirPath, options) { let name; let version; if (options.fromNpm) { name = options.packageName; version = options.packageVersion; } else { const orestInputMeta = getMeta(relDirPath); name = orestInputMeta.name; version = orestInputMeta.version; } const meta = { id: name, // TODO: validate name, description: '', categories: [], version, packageMeta: { name, version, description: '', }, }; return { meta, }; } async function publish( { storeApiUrl, packageType, userToken, meta, fromNpm, keepArtifacts }, relDirPath ) { const isPublished = await checkPublished({ userToken, id: meta.id, version: meta.version, storeApiUrl, packageType, }); console.log(); if (isPublished) { console.log(`Version ${meta.version} is already published.`); } else { const { filePath, destFileName } = await packBundle({ packageName: meta.packageMeta.name, packageVersion: meta.packageMeta.version, relDirPath, fromNpm, }); await upload({ meta, filePath, destFileName, userToken, storeApiUrl, packageType, }); if (!keepArtifacts) { await removeFromDisk(filePath); } console.log(`Id: ${meta.id}`); console.log(`Version: ${meta.version}`); console.log(); console.log('Done!'); } } module.exports = (...args) => { main(...args).catch(err => { console.error(err); process.exit(1); }); };