UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

35 lines (33 loc) 1.44 kB
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 };