UNPKG

@zmotivat0r/mrepo

Version:

Awesome Typescript Monorepo Generator

112 lines 4.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadDigestConfigFile = void 0; const util_1 = require("@nestled/util"); const ajv_1 = require("ajv"); const color = require("chalk"); const findConfig = require("find-config"); const emoji = require("node-emoji"); const constants_1 = require("../constants"); const utils_1 = require("../utils"); function loadDigestConfigFile(configFileName = constants_1.DIGEST_CONFIG_FILE_NAME) { const path = findConfig(configFileName); if (!path) { const msg = `${emoji.get(':flushed:')} ${configFileName} hasn't been found`; utils_1.logger.error('cli', msg); process.exit(1); } const loadedConfigFile = util_1.safeRequire(path); validateDigestConfigFile(loadedConfigFile, configFileName); return loadedConfigFile; } exports.loadDigestConfigFile = loadDigestConfigFile; function validateDigestConfigFile(loadedConfigFile, configFileName) { const ajv = new ajv_1.default(); const schema = { type: 'object', properties: { mode: { type: 'string', pattern: constants_1.DIGEST_MODE_LIST.join('|'), }, paths: { type: 'array', minItems: 2, items: { type: 'object', properties: { name: { type: 'string' }, path: { type: 'string' }, }, additionalProperties: false, required: ['name', 'path'], }, }, mrepos: { type: 'array', minItems: 1, items: { type: 'object', properties: { name: { type: 'string' }, targets: { type: 'array', minItems: 0, items: { type: 'object', properties: { name: { type: 'string' }, packages: { type: 'array', minItems: 0, items: { type: 'string' }, }, noDefaultPackages: { type: 'boolean' }, mode: { type: 'string', pattern: constants_1.DIGEST_MODE_LIST.join('|'), }, }, additionalProperties: false, required: ['name'], }, }, defaultPackages: { type: 'array', minItems: 0, items: { type: 'string' }, }, }, additionalProperties: false, required: ['name'], }, }, targets: { type: 'array', minItems: 1, items: { type: 'object', properties: { name: { type: 'string' }, installExec: { type: 'string' }, }, additionalProperties: false, required: ['name', 'installExec'], }, }, }, additionalProperties: false, required: ['paths', 'mrepos', 'targets'], }; const validate = ajv.compile(schema); const isValid = validate(loadedConfigFile); if (!isValid) { const { dataPath, message } = validate.errors[0]; const msg1 = `${emoji.get(':flushed:')} Invalid ${configFileName}`; const msg2 = `${color.bold.red(dataPath)} -> ${color.bold.red(message)}`; utils_1.logger.error('cli', msg1); utils_1.logger.error('cli', msg2); process.exit(1); } } //# sourceMappingURL=digest-config-file.loader.js.map