'use strict'; const config = require('config'); const yargs = require('yargs'); function getArgs() { const args = yargs .command('npm start -- --user ') .option('log-level', { alias: 'level', describe: 'CLI log verbosity', type: 'string', default: config.logger.level, }) .option('interval', { describe: 'Minimum wait time between HTTP requests', type: 'number', default: config.limiter.interval, }) .option('concurrency', { describe: 'Maximum HTTP requests pending at the same time', type: 'number', default: config.limiter.concurrency, }) .option('users', { alias: 'user', describe: 'Reddit usernames to fetch posts from', type: 'array', }) .option('file-users', { describe: 'Load reddit usernames from file', type: 'string', }) .option('posts', { alias: 'post', describe: 'Reddit post IDs to fetch', type: 'array', }) .option('file-posts', { describe: 'Load reddit post IDs from file', type: 'string', }) .option('direct', { describe: 'Get content directly from imgur and other hosts', type: 'array', alias: 'fetch', }) .option('file-direct', { describe: 'Load direct content URLs from file', type: 'string', alias: 'file-fetch', }) .option('label', { describe: 'Arbitrary variable made available in path patterns. Useful to organize files from a URL lists in directory.', type: 'string', }) .option('base', { describe: 'Alternative base path, overriding both the default posts and direct base paths.', type: 'string', }) .option('limit', { describe: 'Maximum amount of posts to fetch per supplied user (!), after filtering out ignored, cross- and reposts', type: 'number', default: config.fetch.limit, }) .option('sort', { describe: 'Property to sort posts by', choices: ['new', 'top', 'hot', 'controversial'], default: config.fetch.sort, }) .option('ignore', { describe: 'Ignore posts with any of these properties', type: 'array', choices: ['pinned', 'stickied', 'hidden', 'spoiler', 'over_18'], }) .option('file-ignore', { describe: 'Ignore the host IDs in this file', type: 'string', }) .option('include', { describe: 'Include only these sources', type: 'array', }) .option('exclude', { describe: 'Do not include these sources', type: 'array', }) .option('after', { describe: 'Only include posts after this date (YYYY-MM-DD, optionally HH:mm)', }) .option('before', { describe: 'Only include posts before this date (YYYY-MM-DD, optionally HH:mm)', }) .option('after-indexed', { alias: 'after-index', describe: 'Only include posts after the oldest or the latest entry in the index', choices: ['oldest', 'latest'], }) .option('before-indexed', { alias: 'before-index', describe: 'Only include posts before the oldest or the latest entry in the index', choices: ['oldest', 'latest'], }) .option('redownload', { alias: 'force', describe: 'Ignore index file and force a redownload of everything in the selection. Does not affect [before|after]-indexed', type: 'boolean', }) .option('redownload-profile', { alias: 'force-profile', describe: 'Ignore index file and force a redownload of the profile image and description', type: 'boolean', }) .option('index-ignored', { describe: 'Add posts specified to be ignored to the index file, but don\'t download them', type: 'boolean', }) .option('watch', { describe: 'Keep the process running and periodically check for new posts', type: 'boolean', }) .option('archives', { describe: 'Search archives for deleted posts', type: 'boolean', default: config.fetch.archives.search, }) .argv; return { ...args, after: args.after ? new Date(args.after) : null, before: args.before ? new Date(args.before) : null, }; } module.exports = getArgs;