@itsmworkbench/cli
Version:
How to do a cli
51 lines (50 loc) • 2.4 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.fileConfig = exports.defaultTo = exports.notFoundError = exports.fixedConfig = exports.loadConfig = void 0;
const utils_1 = require("@laoban/utils");
const fileops_1 = require("@laoban/fileops");
async function loadConfig(fileOps, tcFinder, startDir) {
let found = await await tcFinder(fileOps, startDir);
return (0, utils_1.mapErrorsK)(found, async ({ tc: cliConfigTc, fileName: configFileName }) => (0, utils_1.mapErrors)((0, utils_1.mapErrors)(await cliConfigTc.load(fileOps)(configFileName), cliConfigTc.validate), (config) => ({ cliConfigTc, config, configFileName })));
}
exports.loadConfig = loadConfig;
function fixedCliTc(config) {
return {
load: () => async () => config,
displayErrors: () => { },
validate: c => c,
cleanForDisplay: c => c
};
}
//clean up... separate maybe? Or just put up with the mess in find... Doesn't feel right to have it and the others in the same level in the interface though
function fixedConfig(config) {
const tc = fixedCliTc(config);
return () => Promise.resolve({ tc });
}
exports.fixedConfig = fixedConfig;
function notFoundError(name) {
return Promise.resolve([`File ${name} not found in current directory or any parent directory`]);
}
exports.notFoundError = notFoundError;
const defaultTo = (config, fileName) => async (name) => ({ tc: fixedCliTc(config), fileName });
exports.defaultTo = defaultTo;
function fileConfig(name, validate, onNotFound, parseFile = fileops_1.parseJson) {
return async (fileOps, currentDirectory) => {
const fileName = await (0, fileops_1.findFileUp)(currentDirectory, dir => fileOps.isFile(fileOps.join(dir, name)));
if (fileName === undefined)
return onNotFound(name);
const tc = {
load: (fileOps) => async (dir) => {
if (dir === undefined)
return [`No directory found for ${name}`];
let fileOrUrl = fileOps.join(dir, name);
return fileOps.loadFileOrUrl(fileOrUrl).then(parseFile(`Loading file ${fileOrUrl} for Config`));
},
displayErrors: (errors) => (0, utils_1.reportErrors)(errors),
validate,
cleanForDisplay: c => c
};
return { tc, fileName };
};
}
exports.fileConfig = fileConfig;
;