[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/hlambda/hlambda-cli/master/src/commands/clone.js [Back]  [Original]

import path from 'path';
import { writeFile, mkdir, access } from 'fs/promises';
import rimraf from 'rimraf';

import { errors } from './../errors/index.js';
import init from './init.js';
import { metadataExport } from './metadata.js';

import CLIErrorHandler from './../utils/CLIErrorHandler.js';

export const clone = async (dirName, url, options, program) => {
  await (async () => {
    const cwd = path.resolve(process.cwd());
    console.log('Executing in cwd:'.green, `${cwd}`.yellow);

    const cloneFilePath = path.resolve(cwd, dirName);
    console.log(`Trying to clone app in:`.green, `${cloneFilePath}`.yellow);

    const { force, forceRemove } = options;
    const includeDemoApp = !options.clean; // Flip the clean flag.

    const folderExists = await access(cloneFilePath)
      .then((result) => {
        return true;
      })
      .catch((error) => {
        // console.log(error);
        // throw new Error(errors.ERROR_FS_READ_ERROR);
        return false;
      });
    if (folderExists) {
      if (force) {
        if (forceRemove) {
          if (
            typeof cloneFilePath === 'string' &&
            cloneFilePath !== '' &&
            cloneFilePath !== '/' &&
            cloneFilePath !== '/*'
          ) {
            // Sanity check !!!
            console.log(`Removing everything inside ${cloneFilePath}`.red);
            rimraf.sync(`${cloneFilePath}/*`); // Please be careful...
          } else {
            throw new Error(errors.ERROR_DANGEROUS_SANITY_CHECK_DID_NOT_PASS);
          }
        }
      } else {
        throw new Error(errors.ERROR_FOLDER_ALREADY_EXISTS);
      }
    }

    // Call Init
    await init(dirName, options, program, true);

    // Write configuration .env with endpoint and admin secret values
    const adminSecret = options?.adminSecret ?? '';

    // !!! Important !!! Mutate options?.config to point inside hlapp
    // eslint-disable-next-line no-param-reassign
    options.config = `./${dirName}/`;

    const envTemplate = `# Remove "#" to uncomment the env values.
ENV_LOCAL_HLAMBDA_ENDPOINT="${url}"
ENV_LOCAL_HLAMBDA_ADMIN_SECRET="${adminSecret}"

# ENV_DEV_HLAMBDA_ENDPOINT="http://dev-server:8081"
# ENV_DEV_HLAMBDA_ADMIN_SECRET="demo-dev"

# ENV_DEFAULT_ENVIRONMENT="local"
`;

    await writeFile(`./${dirName}/.env`, envTemplate, 'utf-8')
      .then(() => {
        // console.log(`File write ${`./${dirName}/.env`} successfull!`.green);
      })
      .catch(() => {
        console.log(`File write ${`./${dirName}/.env`} failed`.red);
      });

    // Call metadata export
    await metadataExport(options, program);

    console.log(`Directory created.`.green);
  })()
    .then(() => {})
    .catch(CLIErrorHandler(program));
};

export default clone;

Web Proxy Viewer  |  New URL  |  Original Page