kotori-bot
Version:
Cross-platform chatbot framework base on Node.js and TypeScript
97 lines (96 loc) • 5.48 kB
JavaScript
/**
* @Package kotori-bot
* @Version 1.7.0
* @Author Arimura Sena <me@hotaru.icu>
* @Copyright 2024-2025 Hotaru. All rights reserved.
* @License BAN-ZHINESE-USING
* @Link https://github.com/kotorijs/kotori
* @Date 17:26:14
*/
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var import_cac = __toESM(require("cac"));
var import_loader = require("@kotori-bot/loader");
var import_node_path = require("node:path");
var import_env = __toESM(require("./utils/env"));
var import_core = require("@kotori-bot/core");
var import_daemon = __toESM(require("./daemon"));
var import_gui = require("./gui");
var import_build = __toESM(require("./dev/build"));
var import_pub = __toESM(require("./dev/pub"));
var import_common = require("./dev/common");
const program = (0, import_cac.default)();
program.version(require("../package.json"), "-v, --version");
program.help();
program.command("").option("--daemon", "Set daemon process").option("--mode [name]", "Set running mode of program, build or dev").option("--dir [path]", "Set running root dir of program").option("--config [name]", "Set name of config file").option("--level [number]", "Set level of log output").option("--port [number]", "Set port of server").option("--dbPrefix [string]", "Set prefix of database").option("--noColor", "Do not use logger colors").action((options) => {
const loaderOptions = Object.assign(import_env.default, { mode: (options.mode ?? import_env.default.mode) === import_loader.DEV_MODE ? import_loader.DEV_MODE : import_loader.BUILD_MODE });
if (options.dir !== void 0) loaderOptions.dir = options.dir;
if (options.config) loaderOptions.config = options.config;
if (options.level !== void 0) loaderOptions.level = Number.parseInt(options.level);
if (options.port !== void 0) loaderOptions.port = Number.parseInt(options.port);
if (options.dbPrefix) loaderOptions.dbPrefix = options.dbPrefix;
if (options.noColor) loaderOptions.noColor = true;
if (options.daemon || loaderOptions.mode === import_loader.BUILD_MODE) loaderOptions.daemon = true;
const virtualEnv = {
...process.env,
NODE_ENV: loaderOptions.mode === import_loader.DEV_MODE ? "dev" : "build",
CONFIG: loaderOptions.config,
DIR: loaderOptions.dir,
PORT: loaderOptions.port !== void 0 ? String(loaderOptions.port) : void 0,
LEVEL: loaderOptions.level !== void 0 ? String(loaderOptions.level) : void 0,
NO_COLOR: loaderOptions.noColor !== void 0 ? loaderOptions.noColor ? "on" : "off" : void 0,
IS_DAEMON: "on"
};
if (!options.daemon && loaderOptions.mode === import_loader.DEV_MODE && !(0, import_core.supportTs)()) {
import_loader.Logger.error("You need to transform running environment to use dev mode");
const child = (0, import_core.executeCommand)(
`npm exec tsx "${(0, import_node_path.resolve)(__filename)}"`,
{ cwd: process.cwd(), env: virtualEnv },
(error, stdout, stderr) => {
if (stdout) process.stderr.write(stdout);
if (stderr) process.stderr.write(stderr);
if (error) process.stderr.write(error.message);
}
);
process.stdin.on("data", (data) => child.stdin?.write(data));
return;
}
if (loaderOptions.daemon && !import_env.default.isDaemon) return (0, import_daemon.default)(virtualEnv);
const loader = new import_loader.Loader(loaderOptions);
loader.meta.version = require((0, import_node_path.resolve)(__dirname, "../package.json")).version;
import_core.Container[import_core.Symbols.setInstance](loader);
loader.run();
});
program.command("ui", "Run the interactive GUI").alias("gui").action(() => {
(0, import_gui.mainScope)();
});
program.command("build [filters]", "Build the workspace").option("--silent", "Do not output logs").option("--types", "Build types").option("--onlyTypes", "Build only types").option("--ignoreError", "Ignore error when building").action((filters, options) => {
(0, import_build.default)(options, { ...(0, import_core.loadConfig)((0, import_node_path.resolve)(import_common.CWD, import_env.default.config ?? import_loader.CONFIG_NAME), "toml") ?? {}, ...filters });
});
program.command("pub [filters]", "Publish the workspace").action((filters) => (0, import_pub.default)(filters));
program.on("command:*", () => {
import_loader.Logger.error("Invalid command: %s", program.args.join(" "));
process.exit(1);
});
program.parse();