All files / src/commands/env env.command.js

41.55% Statements 32/77
100% Branches 1/1
0% Functions 0/1
41.55% Lines 32/77

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x 193x                                                                                           193x 193x  
import {
  getAllEnvVars,
  getAllEnvVarsForAddons,
  getAllEnvVarsForDependencies,
} from '@clevercloud/client/esm/api/v2/application.js';
import { toNameEqualsValueString } from '@clevercloud/client/esm/utils/env-vars.js';
import { z } from 'zod';
import { defineCommand } from '../../lib/define-command.js';
import { defineOption } from '../../lib/define-option.js';
import { Logger } from '../../logger.js';
import * as Application from '../../models/application.js';
import { sendToApi } from '../../models/send-to-api.js';
import { aliasOption, appIdOrNameOption, envFormatOption } from '../global.options.js';
 
export const envCommand = defineCommand({
  description: 'Manage environment variables of an application',
  since: '0.2.0',
  options: {
    addExportsOption: defineOption({
      name: 'add-export',
      schema: z.boolean().default(false),
      description: 'Display sourceable env variables setting',
      deprecated: 'use `--format shell` instead',
    }),
    alias: aliasOption,
    app: appIdOrNameOption,
    format: envFormatOption,
  },
  args: [],
  async handler(options) {
    const { alias, app: appIdOrName, addExportsOption, format } = options;
    const { ownerId, appId } = await Application.resolveId(appIdOrName, alias);

    const [envFromApp, envFromAddons, envFromDeps] = await Promise.all([
      getAllEnvVars({ id: ownerId, appId }).then(sendToApi),
      getAllEnvVarsForAddons({ id: ownerId, appId }).then(sendToApi),
      getAllEnvVarsForDependencies({ id: ownerId, appId }).then(sendToApi),
    ]);

    switch (format) {
      case 'json': {
        Logger.printJson({
          env: envFromApp,
          fromAddons: envFromAddons.map((addon) => ({
            addonId: addon.addon_id,
            addonName: addon.addon_name,
            env: addon.env,
          })),
          fromDependencies: envFromDeps.map((dep) => ({
            addonId: dep.app_id,
            addonName: dep.app_name,
            env: dep.env,
          })),
        });
        break;
      }
      case 'shell':
      case 'human':
      default: {
        const addExports = addExportsOption || format === 'shell';

        Logger.println('# Manually set env variables');
        Logger.println(toNameEqualsValueString(envFromApp, { addExports }));

        envFromAddons.forEach((addon) => {
          Logger.println('# Addon ' + addon.addon_name);
          Logger.println(toNameEqualsValueString(addon.env, { addExports }));
        });

        envFromDeps.forEach((dep) => {
          Logger.println('# Dependency ' + dep.app_name);
          Logger.println(toNameEqualsValueString(dep.env, { addExports }));
        });
      }
    }
  },
});