course-renderer
Version:
Manages CA School Courses file system storage and HTML conversion
88 lines (73 loc) • 2.54 kB
text/typescript
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`)
}