UNPKG

course-renderer

Version:

Manages CA School Courses file system storage and HTML conversion

88 lines (73 loc) 2.54 kB
#!/usr/bin/env node import * as CourseRenderer from '../course-renderer' import * as fs from 'fs-extra' import * as path from 'path' import * as async from 'async' const argv = require('yargs') .usage('Usage: $0 [options]') .command('render-course', 'Renders a course or all courses from a directory') .example('$0 --source source --dest dest course1') .option('raw', { alias: 'r', describe: 'Path to the directory where all course raw are stored. Default to /tmp/courses-raw' }) .option('dest', { alias: 'd', describe: 'Path to the directory where all rendered course are stored. Default to /tmp/courses-rendered' }) .option('content-only', { alias: 'c', describe: 'Only process the course content directory only.' }) .option('silent', { alias: 's', describe: 'Makes the render-course to not emit any message on the standard output' }) .default({ 'raw': '/tmp/courses-raw', 'dest': '/tmp/courses-rendered' }) .boolean(['silent', 'content-only']) .help() .argv let courses = argv._ if (!argv.s) console.log('Rendering courses') let source = argv.raw let dest = argv.dest // make source and dest absolute if (!path.isAbsolute(source)) source = path.resolve(__dirname, source) if (!path.isAbsolute(dest)) dest = path.resolve(__dirname, dest) if (courses.length == 0) { // No course was given, we will render all courses on the raw directory fs.readdir(source, (err, courses) => { if (err) { console.error(`Error: ${err.message}`) process.exit(1) } async.map(courses, renderCourse, renderCourseCB) }) } else { const resolveCourses = courses.map((course: string) => { return path.resolve(source, course) }) async.map(resolveCourses, fs.stat, (err, results) => { if (err) { console.error(`Error: ${err.message}`) process.exit(1) } async.map(courses, renderCourse, renderCourseCB) }) } function renderCourse(course: string, callback: any) { if (!argv.s) console.log(`Rendering course ${course}`) if (argv.c) { CourseRenderer.renderCourseContent(source, dest, course, argv.s, callback) } else { CourseRenderer.render(source, dest, course, argv.s, callback) } } function renderCourseCB(error: any) { if (error) { console.error(`Error: ${error}`) process.exit(1) } if (!argv.s) console.log(`Done rendering course`) }