metal-soy-critic
Version:
A metal-soy code validation utility.
39 lines (38 loc) • 1.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const util_1 = require("./util");
const chalk = require("chalk");
const path = require("path");
const babel_traverse_1 = require("babel-traverse");
function getExternalSoyCalls(soyContext) {
const calls = new Set();
soyContext.visit({
Call(node) {
if (node.id.namespace) {
calls.add(node.id.namespace);
}
}
});
return [...calls];
}
function getImportPaths(ast) {
const importPaths = [];
babel_traverse_1.default(ast, {
ImportDeclaration(path) {
importPaths.push(path.node.source.value);
}
});
return importPaths;
}
function valdiateCallImports(soyContext, jsContext) {
const importNames = getImportPaths(jsContext.ast)
.map(importPath => path.parse(importPath).name);
const missingImports = getExternalSoyCalls(soyContext)
.filter(name => !importNames.find(importName => util_1.includes(importName, name)));
if (missingImports.length) {
return util_1.toResult(false, `It looks like the following component calls are missing an ${chalk.yellow('import')}:\n\n` +
util_1.joinErrors(missingImports));
}
return util_1.toResult(true);
}
exports.default = valdiateCallImports;