From 8c73067b48185ed5569612ee8d60d804e5fddec9 Mon Sep 17 00:00:00 2001
From: Gao Sun <gao@silverhand.io>
Date: Sat, 8 Oct 2022 00:54:48 +0800
Subject: [PATCH] refactor: improve dx

---
 packages/cli/package.json                          |  3 ---
 .../core/src/env-set/check-alteration-state.ts     | 14 ++++++++++++--
 packages/core/src/env-set/index.ts                 |  4 +++-
 packages/core/src/index.ts                         |  1 +
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/packages/cli/package.json b/packages/cli/package.json
index 757a466c6..17ecac537 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -6,9 +6,6 @@
   "homepage": "https://github.com/logto-io/logto#readme",
   "license": "MPL-2.0",
   "main": "lib/index.js",
-  "exports": {
-    ".": "./lib"
-  },
   "bin": {
     "logto": "bin/logto",
     "lg": "bin/logto"
diff --git a/packages/core/src/env-set/check-alteration-state.ts b/packages/core/src/env-set/check-alteration-state.ts
index f1dfe0402..1a2c5d9b2 100644
--- a/packages/core/src/env-set/check-alteration-state.ts
+++ b/packages/core/src/env-set/check-alteration-state.ts
@@ -1,4 +1,5 @@
 import { getUndeployedAlterations } from '@logto/cli/lib/commands/database/alteration';
+import chalk from 'chalk';
 import { DatabasePool } from 'slonik';
 
 export const checkAlterationState = async (pool: DatabasePool) => {
@@ -8,7 +9,16 @@ export const checkAlterationState = async (pool: DatabasePool) => {
     return;
   }
 
-  throw new Error(
-    `Found undeployed database alterations, you must deploy them first by "npm run alteration deploy" command, reference: https://docs.logto.io/docs/recipes/deployment/#database-alteration`
+  console.error(
+    `${chalk.red(
+      '[error]'
+    )} Found undeployed database alterations, you must deploy them first by ${chalk.green(
+      'npm run alteration deploy'
+    )} command.\n\n` +
+      ` See ${chalk.blue(
+        'https://docs.logto.io/docs/recipes/deployment/#database-alteration'
+      )} for reference.\n`
   );
+
+  throw new Error(`Undeployed database alterations found.`);
 };
diff --git a/packages/core/src/env-set/index.ts b/packages/core/src/env-set/index.ts
index a121c9939..67bb91b2b 100644
--- a/packages/core/src/env-set/index.ts
+++ b/packages/core/src/env-set/index.ts
@@ -76,7 +76,9 @@ function createEnvSet() {
 
       return pool;
     },
-
+    get poolSafe() {
+      return pool;
+    },
     load: async () => {
       values = await loadEnvValues();
       pool = await createPoolByEnv(values.isTest);
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index 1ccc6f7fe..db09bb3d5 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -27,5 +27,6 @@ import initI18n from './i18n/init';
     await initApp(app);
   } catch (error: unknown) {
     console.log('Error while initializing app', error);
+    await envSet.poolSafe?.end();
   }
 })();