UNPKG

@itsmworkbench/cli

Version:

How to do a cli

51 lines (50 loc) 2.4 kB
"use strict"; 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;