@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
35 lines (33 loc) • 1.44 kB
JavaScript
import path from "path";
import { fileURLToPath } from "node:url";
import { dirname } from "node:path";
import { Liquid } from "liquidjs";
import fs from "fs";
import { promisify } from "util";
//#region src/cli/utils/create-env/index.ts
const __dirname = dirname(fileURLToPath(import.meta.url));
const readFile = promisify(fs.readFile);
const writeFile = promisify(fs.writeFile);
const fchmod = promisify(fs.fchmod);
const open = promisify(fs.open);
const liquidEngine = new Liquid({ extname: ".liquid" });
async function createEnv(client, credentials, directory) {
const { nanoid } = await import("nanoid");
const dbClient = client === "mysql2" ? "mysql" : client;
const config = {
security: { SECRET: nanoid(32) },
database: { DB_CLIENT: dbClient }
};
for (const [key, value] of Object.entries(credentials)) config["database"][`DB_${key.toUpperCase()}`] = value;
const configAsStrings = {};
for (const [key, value] of Object.entries(config)) {
configAsStrings[key] = "";
for (const [envKey, envValue] of Object.entries(value)) configAsStrings[key] += `${envKey}="${envValue}"\n`;
}
const templateString = await readFile(path.join(__dirname, "env-stub.liquid"), "utf8");
const text = await liquidEngine.parseAndRender(templateString, configAsStrings);
await writeFile(path.join(directory, ".env"), text);
await fchmod(await open(path.join(directory, ".env"), "r+"), 416);
}
//#endregion
export { createEnv as default };