UNPKG

@richardo2016/rcli

Version:
71 lines (70 loc) 2.63 kB
Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const path = require("path"); const jsYaml = require("js-yaml"); // import YAML = require('yaml') const fsUtils = require("../utils/fs"); const yamlUtils = require("../utils/yaml"); const INDENTS = { tab: '\t', space: '\s' }; exports.JSYAML_SCHEMAS_ABBR = { MIN: jsYaml['FAILSAFE_SCHEMA'], CORE: jsYaml['JSON_SCHEMA'], SAFE: jsYaml['DEFAULT_SAFE_SCHEMA'], FULL: jsYaml['DEFAULT_FULL_SCHEMA'], }; const JSYAML_SCHEMAS = { FAILSAFE_SCHEMA: jsYaml['FAILSAFE_SCHEMA'], JSON_SCHEMA: jsYaml['JSON_SCHEMA'], CORE_SCHEMA: jsYaml['CORE_SCHEMA'], DEFAULT_SAFE_SCHEMA: jsYaml['DEFAULT_SAFE_SCHEMA'], DEFAULT_FULL_SCHEMA: jsYaml['DEFAULT_FULL_SCHEMA'], }; // export const YAML_SCHEMAS = { // FAILSAFE: 'failsafe', // CORE: 'core', // JSON: 'json', // 'YAML-1.1': 'YAML-1.1', // } const methodSelector = { 'safe-loadAll': 'safeLoadAll', 'loadAll-': 'loadAll', 'safe-': 'safeLoad', '-': 'load', }; function handler(ymlfile, targetfile, ctx = {}) { const { cwd = process.cwd(), safe = true, json: export_json = false, multiple: load_all = false } = ctx || {}; let { schema: schema_name = 'DEFAULT_SAFE_SCHEMA', } = ctx || {}; if (!JSYAML_SCHEMAS[schema_name] && !exports.JSYAML_SCHEMAS_ABBR[schema_name]) schema_name = 'DEFAULT_SAFE_SCHEMA'; ymlfile = fsUtils.normalizeToAbsolute(ymlfile, cwd); if (!fs.exists(ymlfile)) throw `[yaml2js] ${ymlfile} doesn't exist.`; if (!fs.stat(ymlfile).isFile()) throw `[yaml2js] ${ymlfile} is not file.`; if (!targetfile) targetfile = `${ymlfile}${export_json ? '.json' : '.js'}`; targetfile = fsUtils.normalizeToAbsolute(targetfile, cwd); fsUtils.ensureDirectoryExisted(path.dirname(targetfile)); let doc = null; try { const flag = [safe ? 'safe' : '', load_all ? 'loadAll' : ''].join('-'); const method = methodSelector[flag]; doc = jsYaml[method](yamlUtils.filterYamlInput(fs.readFile(ymlfile, 'utf8')), { schema: jsYaml[schema_name], }); } catch (e) { console.log(`[yaml2js] error occured when loading yml\n`); console.error(e); return; } const json = JSON.stringify(doc, null, INDENTS.tab); fs.writeTextFile(targetfile, export_json ? json : `module.exports = ${json}`); console.notice(`[yaml2js] transform success with {@schema: ${schema_name}}!`); console.notice(`source -- ${ymlfile}`); console.notice(`target -- ${targetfile}`); } exports.default = handler;