sapi-kit
Version:
A development toolkit for Minecraft Bedrock Edition Script API
67 lines (66 loc) • 2.24 kB
JavaScript
import chalk from "chalk";
import { spawn } from "child_process";
import { existsSync, readFileSync } from "fs";
import path from "path";
import readline from "readline";
import { pathToFileURL } from "url";
import { isManifestData } from "./interface.js";
// 工具函数:格式化时间
export function formatTime(date = new Date()) {
return chalk.gray(`[${date.toLocaleTimeString("zh-CN", { hour12: false })}]`);
}
export function getManifestData() {
const manifestPath = "./manifest.json";
if (!existsSync(manifestPath))
throw new Error("manifest.json不存在,打包失败");
const data = readFileSync("./manifest.json", { encoding: "utf-8" });
try {
const jsondata = JSON.parse(data);
if (!isManifestData(jsondata)) {
throw new Error("aa");
}
return jsondata;
}
catch (err) {
throw new Error("读取manifest.json失败");
}
}
class ConfigLoadError extends Error {
constructor(message) {
super(message);
this.name = "ConfigLoadError";
if (Error.captureStackTrace) {
Error.captureStackTrace(this, ConfigLoadError);
}
}
}
const defaultConfigPath = "./sapi-kit.config.mjs";
export async function loadConfig(configpath = defaultConfigPath) {
const configPath = path.resolve("./", configpath);
const configUrl = pathToFileURL(configPath);
if (!existsSync(configpath)) {
throw new ConfigLoadError("配置文件不存在");
}
const config = await import(configUrl.href);
return (config.default || config);
}
export function input(question) {
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
return new Promise((resolve) => rl.question(question, (answer) => {
rl.close();
resolve(answer.trim());
}));
}
export function runCommand(command) {
return new Promise((resolve, reject) => {
const cmd = spawn(command, { shell: true, stdio: "inherit" });
cmd.on("close", (code) => {
if (code === 0) {
resolve(1);
}
else {
reject(new Error(`命令执行失败,退出码: ${code}`));
}
});
});
}