{"library":"recursive-copy","title":"Recursive File Copy Utility","description":"recursive-copy is a robust and flexible utility for copying files and directories within a Node.js environment. It is currently stable at version 2.0.14 and appears to be actively maintained, with a focus on reliability and advanced use cases for filesystem operations. Key features include recursive directory copying, sophisticated filtering using functions, regular expressions, or globs, dynamic file renaming, and stream-based content transformation. It differentiates itself by integrating with `graceful-fs` and `mkdirp` to handle common filesystem errors, automatically filters out OS junk files by default, and provides an event-driven interface alongside traditional callback and promise-based APIs. This makes it suitable for complex build processes or file manipulation tasks where fine-grained control and error handling are crucial, offering a more feature-rich alternative to basic `fs.copyFile` or `fs.cp` methods.","language":"javascript","status":"active","last_verified":"Sun Apr 19","install":{"commands":["npm install recursive-copy"],"cli":null},"imports":["import copy from 'recursive-copy';","import copy from 'recursive-copy';\nconst { COPY_FILE_START, ERROR } = copy.events;","import copy, { type Options } from 'recursive-copy';"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import copy from 'recursive-copy';\nimport path from 'path';\nimport fs from 'fs';\n\nconst sourceDir = path.join(process.cwd(), 'temp_src');\nconst destDir = path.join(process.cwd(), 'temp_dest');\n\n// Create dummy source files for demonstration\nfs.mkdirSync(sourceDir, { recursive: true });\nfs.writeFileSync(path.join(sourceDir, 'file1.txt'), 'Hello world!');\nfs.writeFileSync(path.join(sourceDir, '.dotfile'), 'Hidden content.');\nfs.mkdirSync(path.join(sourceDir, 'subdir'), { recursive: true });\nfs.writeFileSync(path.join(sourceDir, 'subdir', 'file2.js'), 'console.log(\"JS file\");');\n\nasync function runCopyExample() {\n  try {\n    console.log(`Copying from ${sourceDir} to ${destDir}...`);\n    const results = await copy(sourceDir, destDir, {\n      overwrite: true, // Overwrite if destination files exist\n      dot: true,     // Copy dotfiles\n      filter: ['**/*', '!*.log'] // Copy all files except .log files\n    });\n    console.info(`Copied ${results.length} files successfully.`);\n    results.forEach(op => console.log(`  - ${op.src} -> ${op.dest}`));\n  } catch (error) {\n    console.error('Copy failed: ' + error.message);\n  } finally {\n    // Clean up temporary directories\n    fs.rmSync(sourceDir, { recursive: true, force: true });\n    fs.rmSync(destDir, { recursive: true, force: true });\n    console.log('Temporary directories cleaned up.');\n  }\n}\n\nrunCopyExample();","lang":"typescript","description":"This quickstart demonstrates how to recursively copy a directory, including dotfiles, with specific filters, using the promise-based `async/await` syntax. It also includes cleanup.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}