metal-soy-critic
Version:
A metal-soy code validation utility.
32 lines (31 loc) • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const util_1 = require("./util");
const chalk = require("chalk");
const js_context_1 = require("./js-context");
function validateRequiredParams(soyContext, jsContext) {
const jsParams = jsContext.getParams();
const soyParams = soyContext.getRenderParams();
const soyParamNames = soyParams.map(param => param.name);
const requiredJSParams = new Set(jsParams
.filter(node => soyParamNames.includes(js_context_1.default.getKeyName(node.key)) &&
js_context_1.default.hasAttribute(node.value, 'required'))
.map(node => js_context_1.default.getKeyName(node.key)));
const requiredSoyParams = new Set(soyParams
.filter(param => param.required)
.map(({ name }) => name));
const missingInJS = util_1.difference(requiredSoyParams, requiredJSParams);
const missingInSoy = util_1.difference(requiredJSParams, requiredSoyParams);
const messages = [];
if (missingInJS.size) {
messages.push(`These attributes are ${chalk.yellow('required')} in your Soy Template but not in your Component:\n\n` +
util_1.joinErrors([...missingInJS]));
}
if (missingInSoy.size) {
messages.push(`These attributes are ${chalk.yellow('.required()')} in your Component but not in your Template:\n\n` +
util_1.joinErrors([...missingInSoy]));
}
return util_1.toResult(!messages.length, ...messages);
}
exports.default = validateRequiredParams;
;