import fs from "fs"; import assert from "assert"; import logging from '../lib/logging.js'; import glob from "fast-glob"; import path from "path"; import template from "lodash/template.js"; const log = logging.create(import.meta.url); export const description = "Describe your command here." // your command uses the npm package commander's options format export const options = [ ["--list", "List the available templates to use."], ["--force", "Overwrite the output if it exists."], ["--output ", "Save to file rather than stdout."], ["--template ", "Name of the template to generate. Use --list to see."] ] const check = (test, fail_message) => { if(!test) { log.error(fail_message); process.exit(1); } } export const main = async (opts) => { try { if(opts.list) { const available = glob.sync("./static/djenterator/!(*.vars|*.swp)"); for(let name of available) { console.log(name); } } else { check(opts.template, "--template is required."); check(opts.output, "--output is required."); check(fs.existsSync(opts.template), `template file ${opts.template} does not exist`); const in_template = fs.readFileSync(opts.template).toString(); const vars_file = `${opts.template}.vars`; const in_vars = fs.existsSync(vars_file) ? fs.readFileSync(vars_file) : {}; const renderer = template(in_template); const result = renderer(JSON.parse(in_vars)); if(!opts.force) { check(!fs.existsSync(opts.output), `output file ${opts.output} exists already won't overwrite.`); } fs.writeFileSync(opts.output, result); } } catch(error) { log.error(error); process.exit(1); } process.exit(0); }