release-notes-cli
Version:
Generate release notes from git for playstore/appstore or github
97 lines (96 loc) • 3.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveOptions = exports.resolveTemplate = void 0;
let debug = require("debug")("release-notes:fs");
let fs = require("fs");
let path = require("path");
const resolveTemplate = (template) => {
debug("Trying to locate template '%s'", template);
return new Promise(function (resolve, reject) {
fs.access(template, fs.constants ? fs.constants.R_OK : fs.R_OK, function (error) {
if (error) {
debug("Template file '%s' doesn't exist, maybe it's template name", template);
if (template.match(/[a-z]+(\.ejs)?/)) {
const localPath = path.resolve(__dirname, "../templates/" + path.basename(template, ".ejs") + ".ejs");
debug("Checking local template file ", localPath);
fs.access(localPath, fs.constants ? fs.constants.R_OK : fs.R_OK, function (err) {
if (err)
reject(new Error(`Unable to locate template file ${template}`));
else
resolve(localPath);
});
}
else {
reject(new Error(`Unable to locate template file ${template}`));
}
}
else {
resolve(template);
}
});
}).then(readTemplate);
};
exports.resolveTemplate = resolveTemplate;
const resolveOptions = (originalOptions) => {
const ALL_OPTIONS = [
["b", "branch", "master"],
["t", "title", "(.*)"],
["i", "ignoreCase"],
["m", "meaning", "type"],
["o", "gitlogOption", []],
["p", "path", process.cwd()],
["s", "script"],
["mg", "mergeCommits"],
["c", "copy"],
];
return new Promise(function (resolve, reject) {
const optionsFile = originalOptions.f || originalOptions.file;
let options = {};
if (optionsFile) {
debug("Trying to read configuration file '%s'", optionsFile);
fs.readFile(optionsFile, function (err, data) {
if (err) {
reject(new Error("Unable to read configuration file\n" + err.message));
}
else {
try {
let stored = JSON.parse(data);
ALL_OPTIONS.forEach(function (pairs) {
let short = pairs[0], long = pairs[1], def = pairs[2];
let value = [stored[short], stored[long], originalOptions[short], originalOptions[long], def].filter(value => value !== undefined)[0];
if (value !== undefined)
options[short] = value;
});
resolve(options);
}
catch (ex) {
reject(new Error("Invalid JSON in configuration file"));
}
}
});
}
else {
ALL_OPTIONS.forEach(function (pairs) {
let short = pairs[0], long = pairs[1], def = pairs[2];
let value = [originalOptions[short], originalOptions[long], def].filter(value => value !== undefined)[0];
if (value !== undefined)
options[short] = value;
});
resolve(options);
}
});
};
exports.resolveOptions = resolveOptions;
function readTemplate(template) {
debug("Trying to read template '%s'", template);
return new Promise(function (resolve, reject) {
fs.readFile(template, function (err, templateContent) {
if (err) {
reject(new Error(`Unable to locate template file ${template}`));
}
else {
resolve(templateContent.toString());
}
});
});
}