Browse Source

Merge pull request #9013 from weseek:support/typescriptize-console

support: Typescriptize REPL launcher
Yuki Takei 1 year ago
parent
commit
97119e5207
3 changed files with 41 additions and 48 deletions
  1. 2 1
      apps/app/package.json
  2. 0 47
      apps/app/src/server/console.js
  3. 39 0
      apps/app/src/server/repl.ts

+ 2 - 1
apps/app/package.json

@@ -44,7 +44,8 @@
     "vitest:run:components": "vitest run -c vitest.config.components.ts src --coverage",
     "previtest:run:integ": "vitest run -c test-with-vite/download-mongo-binary/vitest.config.ts test-with-vite/download-mongo-binary",
     "//// misc": "",
-    "console": "yarn cross-env NODE_ENV=development yarn ts-node --experimental-repl-await src/server/console.js",
+    "console": "yarn repl",
+    "repl": "yarn cross-env NODE_ENV=development yarn ts-node src/server/repl.ts",
     "swagger-jsdoc": "swagger-jsdoc -o tmp/swagger.json -d config/swagger-definition.js",
     "openapi:v3": "yarn cross-env API_VERSION=3 yarn swagger-jsdoc -- \"src/server/routes/apiv3/**/*.js\" \"src/server/models/**/*.js\"",
     "openapi:v1": "yarn cross-env API_VERSION=1 yarn swagger-jsdoc -- \"src/server/*/*.js\" \"src/server/models/**/*.js\"",

+ 0 - 47
apps/app/src/server/console.js

@@ -1,47 +0,0 @@
-const fs = require('fs');
-const path = require('path');
-const repl = require('repl');
-
-const mongoose = require('mongoose');
-
-const { getMongoUri, mongoOptions } = require('~/server/util/mongoose-utils');
-
-const models = require('./models');
-
-Object.keys(models).forEach((modelName) => {
-  global[modelName] = models[modelName];
-});
-
-mongoose.Promise = global.Promise;
-
-const replServer = repl.start({
-  prompt: `${process.env.NODE_ENV} > `,
-  ignoreUndefined: true,
-});
-
-// add history function into repl
-// see: https://qiita.com/acro5piano/items/dc62b94d7b04505a4aca
-// see: https://qiita.com/potato4d/items/7131028497de53ceb48e
-const userHome = process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME'];
-const replHistoryPath = path.join(userHome, '.node_repl_history');
-fs.readFile(replHistoryPath, 'utf8', (err, data) => {
-  if (err != null) {
-    return;
-  }
-  return data.split('\n').forEach((command) => { return replServer.history.push(command) });
-});
-
-replServer.context.mongoose = mongoose;
-replServer.context.models = models;
-
-mongoose.connect(getMongoUri(), mongoOptions)
-  .then(() => {
-    replServer.context.db = mongoose.connection.db;
-  });
-
-replServer.on('exit', () => {
-  fs.writeFile(replHistoryPath, replServer.history.join('\n'), (err) => {
-    console.log(err); // eslint-disable-line no-console
-    process.exit();
-  });
-});

+ 39 - 0
apps/app/src/server/repl.ts

@@ -0,0 +1,39 @@
+import type { REPLServer } from 'node:repl';
+import repl from 'node:repl';
+
+import mongoose from 'mongoose';
+
+import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+
+
+const setupMongoose = async(replServer: REPLServer) => {
+  mongoose.Promise = global.Promise;
+
+  await mongoose.connect(getMongoUri(), mongoOptions)
+    .then(() => {
+      replServer.context.db = mongoose.connection.db;
+    });
+
+  replServer.context.mongoose = mongoose;
+};
+
+
+const setupModels = async(replServer: REPLServer) => { // eslint-disable-line @typescript-eslint/no-unused-vars
+  const models = require('./models');
+
+  Object.keys(models).forEach((modelName) => {
+    global[modelName] = models[modelName];
+  });
+};
+
+const start = async() => {
+  const replServer = repl.start({
+    prompt: `${process.env.NODE_ENV} > `,
+    ignoreUndefined: true,
+  });
+
+  await setupMongoose(replServer);
+  await setupModels(replServer);
+};
+
+start();