UNPKG

metal-soy-critic

Version:
39 lines (38 loc) 1.32 kB
"use strict"; 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;