MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //home/cafsindia/snap.cafsinfotech.in/node_modules/postinstall/index.js
const pify = require('util').promisify;
const glob = pify(require('glob'));
const fs = require('fs').promises;
const resolveFrom = require('resolve-from');
const resolvePkg = require('resolve-pkg');
const Path = require('path');
const minimist = require('minimist');

Object.assign(exports, {
	prepare, command,
	process(config, opts) {
		if (!opts) opts = {};
		const list = prepare(config, opts);
		return Promise.all(list.map(({ command: cmd, input, output, options }) => {
			return command(cmd, input, output, options, opts);
		}));
	}
});

function prepare(obj, globalOpts) {
	let list = [];
	Object.keys(obj).forEach((input) => {
		const line = obj[input];
		let cmd, output, opts;
		if (Array.isArray(line)) {
			line.forEach((item) => {
				list = list.concat(prepare({[input]: item}, globalOpts));
			});
			return;
		}
		if (typeof line == "object") {
			opts = Object.assign({}, line);
			cmd = line.command;
			output = line.output;
			delete opts.command;
			delete opts.output;
		} else {
			const args = minimist(line.split(' '));
			if (args._.length == 2) {
				cmd = args._[0];
				output = args._[1];
			}
			delete args._;
			opts = args;
		}
		if (!cmd || !output) {
			console.error("Cannot parse postinstall command", line);
			return;
		}

		if (globalOpts.allow) {
			if (!globalOpts.allow.includes(cmd)) {
				console.error("Unauthorized postinstall command", cmd);
				return;
			}
		}
		list.push({
			command: cmd,
			input,
			output,
			options: opts
		});
	});
	return list;
}

function command(cmd, input, output, options = {}, opts = {}) {
	if (!opts.cwd) opts.cwd = process.cwd();
	else opts.cwd = Path.resolve(opts.cwd);

	let srcPath;
	const numComps = input.split('/').length;
	if (input.startsWith('@') && numComps <= 2 || numComps == 1) {
		srcPath = resolveFrom(opts.cwd, input);
	} else {
		srcPath = resolvePkg(input, {
			cwd: opts.cwd
		});
	}
	if (!srcPath) try {
		srcPath = require.resolve(input, {
			paths: [opts.cwd]
		});
	} catch (err) {
		// ignore
	}
	if (!srcPath) srcPath = Path.resolve(opts.cwd, input);
	const srcFile = Path.basename(srcPath);

	let cmdFn;
	if (cmd == "link" || cmd == "copy" || cmd == "concat") {
		cmdFn = require(`./commands/${cmd}`);
	} else {
		cmdFn = require(resolveFrom(opts.cwd, `postinstall-${cmd}`));
	}

	let destDir, destFile;
	if (output.endsWith('/')) {
		destDir = output;
	} else {
		destDir = Path.dirname(output);
		destFile = Path.basename(output);
	}

	const star = srcFile.indexOf('*') >= 0;
	const globstar = srcFile.indexOf('**') >= 0;
	const bundle = star && destFile && destFile.indexOf('*') < 0;
	const nodir = star || globstar;

	destDir = Path.resolve(opts.cwd, destDir);
	assertRooted(opts.cwd, destDir);

	return fs.mkdir(destDir, { recursive: true }).then(() => {
		return glob(srcPath, {
			nosort: true,
			nobrace: true,
			noext: true,
			nodir: nodir
		});
	}).then((paths) => {
		let list = paths;
		if (options.list) {
			if (!nodir && paths.length <= 1) paths.shift();
			if (paths.length == 0) {
				list = options.list.map((path) => {
					return Path.join(srcPath, path);
				});
			}
		}
		if (bundle || options.list) {
			return cmdFn(list, output, options);
		}
		if (paths.length == 0) {
			throw new Error(`${cmd} ${output} but no files found at ${srcPath}`);
		}
		return Promise.all(paths.map((input) => {
			let curDestDir = destDir;
			let outputFile;
			if (globstar) {
				const srcRoot = srcPath.split('**')[0];
				curDestDir = Path.join(destDir, Path.dirname(input.substring(srcRoot.length)));
				outputFile = Path.basename(input);
			} else if (star) {
				const inputFile = Path.basename(input);
				if (!destFile) {
					outputFile = inputFile;
				} else { // bundle == false
					const regEnd = srcFile.endsWith('*') ? '(.+)$' : '([^\\.]+)';
					const reg = new RegExp(srcFile.replace(/\*{1,2}/, regEnd));
					const part = reg.exec(inputFile)[1];
					outputFile = destFile.replace('*', part);
				}
			} else {
				outputFile = destFile || srcFile;
			}
			return fs.mkdir(curDestDir, { recursive: true }).then(() => {
				return cmdFn([input], Path.join(curDestDir, outputFile), options);
			});
		}));
	});
}

function assertRooted(root, path) {
	if (!Path.resolve(path).startsWith(root)) {
		throw new Error(`path is not in root:\n ${root}\n ${path}`);
	}
}