HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-172-31-4-197 6.8.0-1036-aws #38~22.04.1-Ubuntu SMP Fri Aug 22 15:44:33 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/api-management/node_modules/mjml-cli/lib/client.js
"use strict";

var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;
var _omit2 = _interopRequireDefault(require("lodash/omit"));
var _get2 = _interopRequireDefault(require("lodash/get"));
var _map2 = _interopRequireDefault(require("lodash/map"));
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
var _pickBy2 = _interopRequireDefault(require("lodash/fp/pickBy"));
var _negate2 = _interopRequireDefault(require("lodash/fp/negate"));
var _isNil2 = _interopRequireDefault(require("lodash/fp/isNil"));
var _pick2 = _interopRequireDefault(require("lodash/fp/pick"));
var _flow2 = _interopRequireDefault(require("lodash/fp/flow"));
var _path = _interopRequireDefault(require("path"));
var _yargs = _interopRequireDefault(require("yargs"));
var _jsBeautify = require("js-beautify");
var _htmlMinifier = require("html-minifier");
var _mjmlCore = _interopRequireWildcard(require("mjml-core"));
var _mjmlMigrate = _interopRequireDefault(require("mjml-migrate"));
var _mjmlValidator = _interopRequireWildcard(require("mjml-validator"));
var _mjmlParserXml = _interopRequireDefault(require("mjml-parser-xml"));
var _package = require("mjml-core/package.json");
var _readFile = _interopRequireWildcard(require("./commands/readFile"));
var _watchFiles = _interopRequireDefault(require("./commands/watchFiles"));
var _readStream = _interopRequireDefault(require("./commands/readStream"));
var _outputToFile = _interopRequireWildcard(require("./commands/outputToFile"));
var _outputToConsole = _interopRequireDefault(require("./commands/outputToConsole"));
var _package2 = require("../package.json");
var _defaultOptions = _interopRequireDefault(require("./helpers/defaultOptions"));
const beautifyConfig = {
  indent_size: 2,
  wrap_attributes_indent_size: 2,
  max_preserve_newline: 0,
  preserve_newlines: false,
  end_with_newline: true
};
const minifyConfig = {
  collapseWhitespace: true,
  minifyCSS: false,
  caseSensitive: true,
  removeEmptyAttributes: true
};
var _default = async () => {
  let EXIT_CODE = 0;
  let KEEP_OPEN = false;
  const error = msg => {
    console.error('\nCommand line error:'); // eslint-disable-line no-console
    console.error(msg); // eslint-disable-line no-console

    process.exit(1);
  };
  const pickArgs = args => (0, _flow2.default)((0, _pick2.default)(args), (0, _pickBy2.default)(e => (0, _negate2.default)(_isNil2.default)(e) && !((0, _isArray2.default)(e) && (0, _isEmpty2.default)(e))));
  const {
    argv
  } = _yargs.default.version(false) // cf. https://github.com/yargs/yargs/issues/961
  .options({
    r: {
      alias: 'read',
      describe: 'Compile MJML File(s)',
      type: 'array'
    },
    m: {
      alias: 'migrate',
      describe: 'Migrate MJML3 File(s) (deprecated)',
      type: 'array'
    },
    v: {
      alias: 'validate',
      describe: 'Run validator on File(s)',
      type: 'array'
    },
    w: {
      alias: 'watch',
      type: 'array',
      describe: 'Watch and compile MJML File(s) when modified'
    },
    i: {
      alias: 'stdin',
      describe: 'Compiles MJML from input stream'
    },
    s: {
      alias: 'stdout',
      describe: 'Output HTML to stdout'
    },
    o: {
      alias: 'output',
      type: 'string',
      describe: 'Filename/Directory to output compiled files'
    },
    c: {
      alias: 'config',
      type: 'object',
      describe: 'Option to pass to mjml-core'
    },
    version: {
      alias: 'V'
    },
    noStdoutFileComment: {
      type: 'boolean',
      describe: 'Add no file comment to stdout'
    }
  }).help().version(`mjml-core: ${_package.version}\nmjml-cli: ${_package2.version}`);
  let juiceOptions;
  let minifyOptions;
  let juicePreserveTags;
  let fonts;
  try {
    juiceOptions = argv.c && argv.c.juiceOptions && JSON.parse(argv.c.juiceOptions);
  } catch (e) {
    error(`Failed to decode JSON for config.juiceOptions argument`);
  }
  try {
    minifyOptions = argv.c && argv.c.minifyOptions && JSON.parse(argv.c.minifyOptions);
  } catch (e) {
    error(`Failed to decode JSON for config.minifyOptions argument`);
  }
  try {
    juicePreserveTags = argv.c && argv.c.juicePreserveTags && JSON.parse(argv.c.juicePreserveTags);
  } catch (e) {
    error(`Failed to decode JSON for config.juicePreserveTags argument`);
  }
  try {
    fonts = argv.c && argv.c.fonts && JSON.parse(argv.c.fonts);
  } catch (e) {
    error(`Failed to decode JSON for config.fonts argument`);
  }
  const filePath = argv.c && argv.c.filePath;
  const config = Object.assign(_defaultOptions.default, argv.c, fonts && {
    fonts
  }, minifyOptions && {
    minifyOptions
  }, juiceOptions && {
    juiceOptions
  }, juicePreserveTags && {
    juicePreserveTags
  }, argv.c && argv.c.keepComments === 'false' && {
    keepComments: false
  });
  const inputArgs = pickArgs(['r', 'w', 'i', '_', 'm', 'v'])(argv);
  const outputArgs = pickArgs(['o', 's'])(argv)

  // implies (until yargs pr is accepted)
  ;
  [[Object.keys(inputArgs).length === 0, 'No input argument received'], [Object.keys(inputArgs).length > 1, 'Too many input arguments received'], [Object.keys(outputArgs).length > 1, 'Too many output arguments received'], [argv.w && argv.w.length > 1 && !argv.o, 'Need an output option when watching files'], [argv.w && argv.w.length > 1 && argv.o && !(0, _outputToFile.isDirectory)(argv.o) && argv.o !== '', 'Need an output option when watching files']].forEach(v => v[0] ? error(v[1]) : null);
  const inputOpt = Object.keys(inputArgs)[0];
  const outputOpt = Object.keys(outputArgs)[0] || 's';
  const inputFiles = (0, _isArray2.default)(inputArgs[inputOpt]) ? inputArgs[inputOpt] : [inputArgs[inputOpt]];
  const inputs = [];
  switch (inputOpt) {
    case 'r':
    case 'v':
    case 'm':
    case '_':
      {
        (0, _readFile.flatMapPaths)(inputFiles).forEach(file => {
          inputs.push((0, _readFile.default)(file));
        });
        if (!inputs.length) {
          error('No input files found');
          return;
        }
        break;
      }
    case 'w':
      (0, _watchFiles.default)(inputFiles, {
        ...argv,
        config,
        minifyConfig,
        beautifyConfig
      });
      KEEP_OPEN = true;
      break;
    case 'i':
      inputs.push(await (0, _readStream.default)());
      break;
    default:
      error('Command line error: Incorrect input options');
  }
  const convertedStream = [];
  const failedStream = [];
  inputs.forEach(i => {
    try {
      let compiled;
      switch (inputOpt) {
        case 'm':
          compiled = {
            html: (0, _mjmlMigrate.default)(i.mjml, {
              beautify: true
            })
          };
          break;
        case 'v':
          // eslint-disable-next-line no-case-declarations
          const mjmlJson = (0, _mjmlParserXml.default)(i.mjml, {
            components: _mjmlCore.components,
            filePath: filePath || i.file,
            actualPath: i.file
          });
          compiled = {
            errors: (0, _mjmlValidator.default)(mjmlJson, {
              dependencies: _mjmlValidator.dependencies,
              components: _mjmlCore.components,
              initializeType: _mjmlCore.initializeType
            })
          };
          break;
        default:
          {
            const beautify = config.beautify && config.beautify !== 'false';
            const minify = config.minify && config.minify !== 'false';
            compiled = (0, _mjmlCore.default)(i.mjml, {
              ...(0, _omit2.default)(config, ['minify', 'beautify']),
              filePath: filePath || i.file,
              actualPath: i.file
            });
            if (beautify) {
              compiled.html = (0, _jsBeautify.html)(compiled.html, beautifyConfig);
            }
            if (minify) {
              compiled.html = (0, _htmlMinifier.minify)(compiled.html, {
                ...minifyConfig,
                ...config.minifyOptions
              });
            }
          }
      }
      convertedStream.push({
        ...i,
        compiled
      });
    } catch (e) {
      EXIT_CODE = 2;
      failedStream.push({
        file: i.file,
        error: e
      });
    }
  });
  convertedStream.forEach(s => {
    if ((0, _get2.default)(s, 'compiled.errors.length')) {
      console.error((0, _map2.default)(s.compiled.errors, 'formattedMessage').join('\n')); // eslint-disable-line no-console
    }
  });
  failedStream.forEach(({
    error,
    file
  }) => {
    console.error(`${file ? `File: ${file}\n` : null}${error}`); // eslint-disable-line no-console

    if (config.stack) {
      console.error(error.stack); // eslint-disable-line no-console
    }
  });
  if (inputOpt === 'v') {
    const isInvalid = failedStream.length || convertedStream.some(s => !!(0, _get2.default)(s, 'compiled.errors.length'));
    if (isInvalid) {
      error('Validation failed');
      return;
    }
    process.exitCode = 0;
    return;
  }
  if (!KEEP_OPEN && convertedStream.length === 0) {
    error('Input file(s) failed to render');
  }
  switch (outputOpt) {
    case 'o':
      {
        if (inputs.length > 1 && !(0, _outputToFile.isDirectory)(argv.o) && argv.o !== '') {
          error(`Multiple input files, but output option should be either an existing directory or an empty string: ${argv.o} given`);
        }
        const fullOutputPath = _path.default.parse(_path.default.resolve(process.cwd(), argv.o));
        if (inputs.length === 1 && !(0, _outputToFile.isDirectory)(fullOutputPath.dir)) {
          error(`Output directory doesn’t exist for path : ${argv.o}`);
        }
        Promise.all(convertedStream.map((0, _outputToFile.default)(argv.o))).then(() => {
          if (!KEEP_OPEN) {
            process.exitCode = EXIT_CODE;
          }
        }).catch(({
          outputName,
          err
        }) => {
          if (!KEEP_OPEN) {
            error(`Error writing file - ${outputName} : ${err}`);
          }
        });
        break;
      }
    case 's':
      {
        const addFileHeaderComment = !argv.noStdoutFileComment;
        Promise.all(convertedStream.map(converted => (0, _outputToConsole.default)(converted, addFileHeaderComment))).then(() => process.exitCode = EXIT_CODE) // eslint-disable-line no-return-assign
        .catch(() => process.exitCode = 1); // eslint-disable-line no-return-assign
        break;
      }
    default:
      error('Command line error: No output option available');
  }
};
exports.default = _default;
module.exports = exports.default;