From 1d5c498b4bc1f264506d30a80f3eff5a55626ab2 Mon Sep 17 00:00:00 2001 From: Matthew Palombi Date: Tue, 18 Oct 2022 09:29:07 -0400 Subject: [PATCH] Add error handling and messages to prevent running develop while in a directory without a project already defined Signed-off-by: Matthew Palombi --- utils/checkBeforeDevelop.js | 5 +++++ utils/getProjectType.js | 24 +++++++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/utils/checkBeforeDevelop.js b/utils/checkBeforeDevelop.js index e3aa0cf..f0eff58 100644 --- a/utils/checkBeforeDevelop.js +++ b/utils/checkBeforeDevelop.js @@ -1,6 +1,7 @@ import Logger from "../utils/logger.js"; import pathExists from "./pathExists.js"; import checkPort from "./checkPort.js"; +import getProjectType from "./getProjectType.js"; /** * @summary check that the API server is running @@ -17,6 +18,10 @@ async function checkForApi() { * @returns {Promise} - If everything is ready for develop */ export default async function checkBeforeDevelop(type = "api") { + if ( await getProjectType() !== type ) { + Logger.error(`Cannot run develop, no project of type "${type}" in current directory.`); + return false; + } if (!await pathExists("node_modules")) { if (type === "storefront") { Logger.error("It looks like you have not run `yarn install` in this directory"); diff --git a/utils/getProjectType.js b/utils/getProjectType.js index 87b4a2a..d91b402 100644 --- a/utils/getProjectType.js +++ b/utils/getProjectType.js @@ -9,11 +9,25 @@ const validProjectTypes = ["api", "admin-meteor", "storefront-example"]; */ export default async function getProjectType() { Logger.info("Getting project type"); - const packageJson = fs.readFileSync("package.json", { - encoding: "utf8", - flag: "r" - }); - const packageJsonData = JSON.parse(packageJson); + try { + const packageJson = fs.readFileSync("package.json", { + encoding: "utf8", + flag: "r" + }); + } catch (err) { + if (err.code === 'ENOENT') { + Logger.error("Cannot read package.json in current directory"); + return ""; + } else { + throw err; + } + } + try { + const packageJsonData = JSON.parse(packageJson); + } catch (err) { + Logger.error("Error while parsing package.json"); + return ""; + } const { projectType } = packageJsonData; if (!projectType || projectType === "") {