@richardo2016/rcli
Version:
Richard's cli
71 lines (70 loc) • 2.63 kB
JavaScript
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;