first commit
This commit is contained in:
87
scripts/sync-miniprogram-env.mjs
Normal file
87
scripts/sync-miniprogram-env.mjs
Normal file
@@ -0,0 +1,87 @@
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
const ROOT = process.cwd();
|
||||
const MINI_ROOT = path.join(ROOT, "apps/miniprogram");
|
||||
const ENV_PATH = path.join(MINI_ROOT, ".env");
|
||||
const OUTPUT_PATH = path.join(MINI_ROOT, "utils/opsEnv.js");
|
||||
|
||||
function stripQuotes(raw) {
|
||||
const value = String(raw || "").trim();
|
||||
if (!value) return "";
|
||||
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
||||
return value.slice(1, -1);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
function parseEnv(text) {
|
||||
const out = {};
|
||||
const lines = String(text || "").split(/\r?\n/);
|
||||
for (const lineRaw of lines) {
|
||||
const line = lineRaw.trim();
|
||||
if (!line || line.startsWith("#")) continue;
|
||||
const normalized = line.startsWith("export ") ? line.slice(7).trim() : line;
|
||||
const eq = normalized.indexOf("=");
|
||||
if (eq <= 0) continue;
|
||||
const key = normalized.slice(0, eq).trim();
|
||||
if (!key) continue;
|
||||
out[key] = stripQuotes(normalized.slice(eq + 1));
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function getValue(env, key, fallback = "") {
|
||||
return Object.prototype.hasOwnProperty.call(env, key) ? String(env[key]) : fallback;
|
||||
}
|
||||
|
||||
function toNumber(raw, fallback) {
|
||||
const n = Number(raw);
|
||||
return Number.isFinite(n) ? n : fallback;
|
||||
}
|
||||
|
||||
function toBool(raw, fallback) {
|
||||
const v = String(raw || "").trim().toLowerCase();
|
||||
if (!v) return fallback;
|
||||
if (["1", "true", "yes", "on"].includes(v)) return true;
|
||||
if (["0", "false", "no", "off"].includes(v)) return false;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
function buildOps(env) {
|
||||
return {
|
||||
gatewayUrl: getValue(env, "GATEWAY_URL"),
|
||||
gatewayToken: getValue(env, "GATEWAY_TOKEN"),
|
||||
hostKeyPolicy: getValue(env, "HOST_KEY_POLICY", "strict"),
|
||||
credentialMemoryPolicy: getValue(env, "CREDENTIAL_MEMORY_POLICY", "remember"),
|
||||
gatewayConnectTimeoutMs: toNumber(getValue(env, "GATEWAY_CONNECT_TIMEOUT_MS", "12000"), 12000),
|
||||
waitForConnectedTimeoutMs: toNumber(getValue(env, "WAIT_FOR_CONNECTED_TIMEOUT_MS", "15000"), 15000),
|
||||
terminalBufferMaxEntries: toNumber(getValue(env, "TERMINAL_BUFFER_MAX_ENTRIES", "5000"), 5000),
|
||||
terminalBufferMaxBytes: toNumber(getValue(env, "TERMINAL_BUFFER_MAX_BYTES", String(4 * 1024 * 1024)), 4 * 1024 * 1024),
|
||||
maskSecrets: toBool(getValue(env, "MASK_SECRETS", "true"), true)
|
||||
};
|
||||
}
|
||||
|
||||
function writeOpsModule(ops) {
|
||||
const content = `/**\n * Auto-generated from apps/miniprogram/.env\n * Do not edit manually. Run: node scripts/sync-miniprogram-env.mjs\n */\nmodule.exports = ${JSON.stringify(
|
||||
ops,
|
||||
null,
|
||||
2
|
||||
)};\n`;
|
||||
fs.writeFileSync(OUTPUT_PATH, content, "utf8");
|
||||
}
|
||||
|
||||
function main() {
|
||||
if (!fs.existsSync(ENV_PATH)) {
|
||||
throw new Error(
|
||||
`缺少 .env 文件: ${ENV_PATH}\n请先从 apps/miniprogram/.env.example 复制一份,并至少填写 GATEWAY_URL 与 GATEWAY_TOKEN。`
|
||||
);
|
||||
}
|
||||
const raw = fs.readFileSync(ENV_PATH, "utf8");
|
||||
const env = parseEnv(raw);
|
||||
const ops = buildOps(env);
|
||||
writeOpsModule(ops);
|
||||
console.log("[sync-miniprogram-env] 已生成 apps/miniprogram/utils/opsEnv.js");
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user