create-nuxtus
Version:
npx command for generating a new Nuxtus boilerplate website.
70 lines (58 loc) • 1.86 kB
text/typescript
// https://github.com/directus/directus/blob/31a217595c3b9134bc334f300992027d3bfdf09e/api/src/cli/utils/create-env/index.ts
import { Credentials } from './create-db-credentials.js';
import { Liquid } from 'liquidjs';
import { drivers } from './drivers.js';
import fs from 'fs';
import { nanoid } from 'nanoid';
import path from 'path';
import { promisify } from 'util';
import { v4 as uuid } from 'uuid';
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',
});
const defaults = {
security: {
KEY: uuid(),
SECRET: nanoid(32),
},
};
export default async function createEnv(
client: keyof typeof drivers,
credentials: Credentials,
directory: string,
user: { email: string; password: string },
): Promise<void> {
const config: Record<string, unknown> = {
...defaults,
database: {
DB_CLIENT: client,
},
user,
};
for (const [key, value] of Object.entries(credentials)) {
config.database[`DB_${key.toUpperCase()}`] = value;
}
const configAsStrings: Record<string, string> = {};
for (const [key, value] of Object.entries(config)) {
configAsStrings[key] = '';
for (const [envKey, envValue] of Object.entries(value)) {
configAsStrings[key] += `${envKey}="${envValue}"\n`;
}
}
configAsStrings['user'] =
`ADMIN_EMAIL="${user.email}"\nADMIN_PASSWORD="${user.password}"`;
const templateString = await readFile(
path.join(process.cwd(), 'templates', 'env-directus.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+'), 0o640);
}