123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- const _ = require('lodash');
- const exec = require('node:child_process').exec;
- const execFile = require('node:child_process').execFile;
- const { Liquid } = require('liquidjs');
- const logger = require('../logger').global;
- const error = require('./error');
- module.exports = {
- exec: async (cmd, options = {}) => {
- logger.debug('CMD:', cmd);
- const { stdout, stderr } = await new Promise((resolve, reject) => {
- const child = exec(cmd, options, (isError, stdout, stderr) => {
- if (isError) {
- reject(new error.CommandError(stderr, isError));
- } else {
- resolve({ stdout, stderr });
- }
- });
- child.on('error', (e) => {
- reject(new error.CommandError(stderr, 1, e));
- });
- });
- return stdout;
- },
- /**
- * @param {String} cmd
- * @param {Array} args
- * @param {Object|undefined} options
- * @returns {Promise}
- */
- execFile: (cmd, args, options) => {
- logger.debug(`CMD: ${cmd} ${args ? args.join(' ') : ''}`);
- if (typeof options === 'undefined') {
- options = {};
- }
- return new Promise((resolve, reject) => {
- execFile(cmd, args, options, (err, stdout, stderr) => {
- if (err && typeof err === 'object') {
- reject(new error.CommandError(stderr, 1, err));
- } else {
- resolve(stdout.trim());
- }
- });
- });
- },
- /**
- * Used in objection query builder
- *
- * @param {Array} omissions
- * @returns {Function}
- */
- omitRow: (omissions) => {
- /**
- * @param {Object} row
- * @returns {Object}
- */
- return (row) => {
- return _.omit(row, omissions);
- };
- },
- /**
- * Used in objection query builder
- *
- * @param {Array} omissions
- * @returns {Function}
- */
- omitRows: (omissions) => {
- /**
- * @param {Array} rows
- * @returns {Object}
- */
- return (rows) => {
- rows.forEach((row, idx) => {
- rows[idx] = _.omit(row, omissions);
- });
- return rows;
- };
- },
- /**
- * @returns {Object} Liquid render engine
- */
- getRenderEngine: () => {
- const renderEngine = new Liquid({
- root: `${__dirname}/../templates/`
- });
- /**
- * nginxAccessRule expects the object given to have 2 properties:
- *
- * directive string
- * address string
- */
- renderEngine.registerFilter('nginxAccessRule', (v) => {
- if (typeof v.directive !== 'undefined' && typeof v.address !== 'undefined' && v.directive && v.address) {
- return `${v.directive} ${v.address};`;
- }
- return '';
- });
- return renderEngine;
- }
- };
|