@curvenote/cli
Version:
CLI Client library for Curvenote
73 lines (72 loc) • 3.08 kB
JavaScript
import chalk from 'chalk';
import Table from 'cli-table3';
import { formatDate, getFromJournals } from './utils.js';
function logSubmissionItem(session, submission) {
const table = new Table({
chars: {
top: '',
'top-mid': '',
'top-left': '',
'top-right': '',
bottom: '',
'bottom-mid': '',
'bottom-left': '',
'bottom-right': '',
left: '',
'left-mid': '',
mid: '',
'mid-mid': '',
right: '',
'right-mid': '',
middle: ' ',
},
style: { 'padding-left': 0, 'padding-right': 0 },
});
session.log.info(`\n\n${chalk.bold.cyan(submission.title)}`);
session.log.info(chalk.bold(`Submitted as a ${chalk.green(submission.kind)} to ${chalk.green(submission.site_name)} on ${chalk.green(formatDate(submission.date_created))}`));
if (submission.description)
session.log.info(chalk.grey(submission.description));
if (submission.authors)
session.log.info(`Authors: ${chalk.grey(submission.authors.map((a) => a.name).join(', '))}`);
table.push(['Submission Date', formatDate(submission.date_created)], ['Published?', submission.published ? 'Yes' : 'No']);
if (submission.published) {
table.push(['Publication Date', formatDate(submission.date)], ['Published Version Date', submission.published_version_date]);
}
table.push([chalk.grey('Latest Version Status'), chalk.grey(submission.latest_status)], [chalk.grey('Num Versions'), chalk.grey(submission.num_versions)]);
if (submission.last_activity)
table.push([
chalk.grey('Date of last activity'),
chalk.grey(formatDate(submission.last_activity.date)),
]);
session.log.info(table.toString());
}
export async function list(session, opts) {
if (session.isAnon) {
throw new Error('⚠️ You must be authenticated for this command. Use `curvenote token set [token]`');
}
const { venue } = opts;
session.log.info(chalk.bold(`📡 Checking your submissions...`));
const submissions = (await getFromJournals(session, `/my/submissions/`));
if (!submissions.items.length) {
session.log.info(`🫙 You have no submissions.`);
return;
}
if (opts === null || opts === void 0 ? void 0 : opts.venue) {
try {
await getFromJournals(session, `/sites/${venue}`);
// TODO check if submissions are allowed from this user
}
catch (err) {
session.log.error(`${chalk.bold.red(`🤕 venue "${venue}" not found.`)}`);
process.exit(1);
}
submissions.items = submissions.items.filter((s) => s.site_name === venue);
session.log.info(`📥 You have made ${submissions.items.length} submissions to "${venue}".`);
}
else {
session.log.info(`📥 You have ${submissions.items.length} submissions.`);
}
submissions.items.forEach((item) => {
logSubmissionItem(session, item);
});
}