UNPKG

metal-soy-critic

Version:
51 lines (50 loc) 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const string_transformer_1 = require("./string-transformer"); const babel_traverse_1 = require("babel-traverse"); const path = require("path"); const chalk = require("chalk"); const util_1 = require("./util"); 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); }, ImportSpecifier(path) { importPaths.push(path.node.imported.name); } }); return importPaths; } function valdiateCallImports(soyContext, jsContext, config) { const importNames = getImportPaths(jsContext.ast) .map(importPath => path.parse(importPath).name); const missingImports = getExternalSoyCalls(soyContext) .filter(name => { for (const item of config.callToImport) { let transformedName = string_transformer_1.default(name, item.regex, item.replace); if (importNames.find(importName => importName.includes(transformedName))) { return false; } } return true; }); 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;