123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.recursiveCopy = recursiveCopy;
- var _path = _interopRequireDefault(require("path"));
- var _fs = require("fs");
- var _asyncSema = require("next/dist/compiled/async-sema");
- var _isError = _interopRequireDefault(require("./is-error"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- const COPYFILE_EXCL = _fs.constants.COPYFILE_EXCL;
- async function recursiveCopy(source, dest, { concurrency =32 , overwrite =false , filter =()=>true } = {}) {
- const cwdPath = process.cwd();
- const from = _path.default.resolve(cwdPath, source);
- const to = _path.default.resolve(cwdPath, dest);
- const sema = new _asyncSema.Sema(concurrency);
- // deep copy the file/directory
- async function _copy(item, lstats) {
- const target = item.replace(from, to);
- await sema.acquire();
- if (!lstats) {
- // after lock on first run
- lstats = await _fs.promises.lstat(from);
- }
- // readdir & lstat do not follow symbolic links
- // if part is a symbolic link, follow it with stat
- let isFile = lstats.isFile();
- let isDirectory = lstats.isDirectory();
- if (lstats.isSymbolicLink()) {
- const stats = await _fs.promises.stat(item);
- isFile = stats.isFile();
- isDirectory = stats.isDirectory();
- }
- if (isDirectory) {
- try {
- await _fs.promises.mkdir(target, {
- recursive: true
- });
- } catch (err) {
- // do not throw `folder already exists` errors
- if ((0, _isError).default(err) && err.code !== "EEXIST") {
- throw err;
- }
- }
- sema.release();
- const files = await _fs.promises.readdir(item, {
- withFileTypes: true
- });
- await Promise.all(files.map((file)=>_copy(_path.default.join(item, file.name), file)));
- } else if (isFile && // before we send the path to filter
- // we remove the base path (from) and replace \ by / (windows)
- filter(item.replace(from, "").replace(/\\/g, "/"))) {
- await _fs.promises.copyFile(item, target, overwrite ? undefined : COPYFILE_EXCL);
- sema.release();
- } else {
- sema.release();
- }
- }
- await _copy(from);
- }
- //# sourceMappingURL=recursive-copy.js.map
|