UNPKG

metal-soy-critic

Version:
32 lines (31 loc) 1.51 kB
"use strict"; 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; ;