HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
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/quadcode/frontend/node_modules/filemanager-webpack-plugin/src/utils/glob-copy.js
import path from 'path';
import fse from 'fs-extra';
import fg from 'fast-glob';

const defaultOptions = {
  flat: false,
  cwd: process.cwd(),
};

const destPath = (pattern, file, options = defaultOptions) => {
  if (options.flat) {
    return path.posix.basename(file);
  }

  const pathArr = pattern.split('/');
  const globIndex = pathArr.findIndex((item) => (item ? fg.isDynamicPattern(item) : false));
  const normalized = pathArr.slice(0, globIndex).join('/');

  const absolutePath = path.isAbsolute(normalized) ? normalized : path.posix.join(options.cwd, normalized);

  return path.relative(absolutePath, file);
};

const globCopy = async (pattern, destination, options = defaultOptions, globOptions = {}) => {
  await fse.ensureDir(destination);

  const matches = await fg(pattern, { dot: true, ...globOptions, absolute: true, cwd: options.cwd });

  const entries = matches.map((file) => {
    const destDir = path.isAbsolute(destination) ? destination : path.posix.join(options.cwd, destination);
    const destFileName = destPath(pattern, file, options);

    return {
      from: file,
      destDir,
      destFileName,
      to: path.posix.join(destDir, destFileName),
    };
  });

  const cpPromises = entries.map(async (entry) => {
    const copyOptions = {
      overwrite: true,
      preserveTimestamps: true,
    };

    return fse.copy(entry.from, entry.to, copyOptions);
  });

  return Promise.all(cpPromises);
};

export default globCopy;