UNPKG

@coat/cli

Version:

TODO: See #3

69 lines (67 loc) 3.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getContext = getContext; var _fs = require("fs"); var _path = _interopRequireDefault(require("path")); var _groupBy = _interopRequireDefault(require("lodash/groupBy")); var _chalk = _interopRequireDefault(require("chalk")); var _json = _interopRequireDefault(require("json5")); var _parser = require("@babel/parser"); var _codeFrame = require("@babel/code-frame"); var _constants = require("../constants"); var _getStrictCoatManifest = require("./get-strict-coat-manifest"); var _getCoatLockfiles = require("../lockfiles/get-coat-lockfiles"); var _getPackageJson = require("./get-package-json"); var _getLocationInJsonAst = require("./get-location-in-json-ast"); var _coatManifest = require("../validation/coat-manifest"); var _validationIssue = require("../validation/validation-issue"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Retrieves and parses files that are relevant * for a coat project * * @param cwd The directory of a coat project */ async function getContext(cwd) { // Read package.json & coat.json files // TODO: See #15 // More friendly error messages if files are missing const [coatManifestRaw, coatGlobalLockfile, coatLocalLockfile, packageJson] = await Promise.all([_fs.promises.readFile(_path.default.join(cwd, _constants.COAT_MANIFEST_FILENAME), "utf8"), (0, _getCoatLockfiles.getCoatGlobalLockfile)(cwd), (0, _getCoatLockfiles.getCoatLocalLockfile)(cwd), (0, _getPackageJson.getPackageJson)(cwd)]); const coatManifest = _json.default.parse(coatManifestRaw); // Validation const issues = [...(0, _coatManifest.validateCoatManifest)(coatManifest)]; if (issues.length) { const { [_validationIssue.ValidationIssueType.Error]: errors = [], [_validationIssue.ValidationIssueType.Warning]: warnings = [] } = (0, _groupBy.default)(issues, "type"); const validationMessages = [(0, _chalk.default)`The coat manifest file ({green ${_constants.COAT_MANIFEST_FILENAME}}) has the following issue${issues.length > 1 ? "s" : ""}:`, ""]; validationMessages.push(...warnings.map(warning => (0, _chalk.default)`{inverse.yellow.bold WARNING } - ${warning.message}`)); validationMessages.push(...errors.map(error => (0, _chalk.default)`{inverse.red.bold ERROR } - ${error.message}`)); if (issues.length === 1 && errors.length === 1) { const [error] = errors; const coatManifestAst = (0, _parser.parseExpression)(coatManifestRaw); const location = (0, _getLocationInJsonAst.getLocationInJSONAst)(coatManifestAst, error.propertyPath); const codeFrame = (0, _codeFrame.codeFrameColumns)(coatManifestRaw, location, { highlightCode: true, message: error.shortMessage }); validationMessages.push("", codeFrame); } validationMessages.push(""); console.error(validationMessages.join("\n")); if (errors.length) { throw new Error(`Validation of coat manifest threw ${errors.length > 1 ? "errors" : "an error"}.`); } } const coatManifestStrict = (0, _getStrictCoatManifest.getStrictCoatManifest)(coatManifest); return { cwd, coatManifest: coatManifestStrict, coatGlobalLockfile, coatLocalLockfile, packageJson }; }