{"_id":"@arcmantle/vite-plugin-copy","_rev":"4-e320d1a9b15e8c179f558c5da1ed8417","name":"@arcmantle/vite-plugin-copy","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@arcmantle/vite-plugin-copy","version":"1.0.0","author":{"name":"Kristoffer Roen-Lie"},"license":"Apache-2.0","_id":"@arcmantle/vite-plugin-copy@1.0.0","maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"dist":{"shasum":"0d4f3e056bdac1d8d56dbd067892765ef7c06086","tarball":"https://registry.npmjs.org/@arcmantle/vite-plugin-copy/-/vite-plugin-copy-1.0.0.tgz","fileCount":13,"integrity":"sha512-OvrQahs8slwOFdxwybqrEOq4K3XJOIk6j7rybZkoT9GT/KxS+NC2U+k+wM+n2DFEsfHYK6DFJgM2t8BC6Q9EOA==","signatures":[{"sig":"MEQCIB4oN8YdtB/aXo/cAqF8nk0av5MSNCDha7k1rp4bhisGAiBU+ZchElNTVKPSlkZtYPsivJrYZ0wTjh4r0qn+yEzaKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25350},"main":"./dist/index.js","type":"module","_from":"file:arcmantle-vite-plugin-copy-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"scripts":{"build":"rimraf dist && tsc --project ./src/tsconfig.json"},"_npmUser":{"name":"roenlie","actor":{"name":"roenlie","type":"user","email":"kristofferroenlie@gmail.com"},"email":"kristofferroenlie@gmail.com"},"_resolved":"/tmp/d89a34cb048c1c36d6eaedee52cd9b7a/arcmantle-vite-plugin-copy-1.0.0.tgz","_integrity":"sha512-OvrQahs8slwOFdxwybqrEOq4K3XJOIk6j7rybZkoT9GT/KxS+NC2U+k+wM+n2DFEsfHYK6DFJgM2t8BC6Q9EOA==","_npmVersion":"11.4.2","description":"Copies files during vite build.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"globby":"^14.1.0","fs-extra":"^11.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.10","@types/fs-extra":"^11.0.4","@arcmantle/tsconfig":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/vite-plugin-copy_1.0.0_1751755244619_0.05434548850928467","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@arcmantle/vite-plugin-copy","version":"1.0.1","author":{"name":"Kristoffer Roen-Lie"},"license":"Apache-2.0","_id":"@arcmantle/vite-plugin-copy@1.0.1","maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"dist":{"shasum":"6b9d2a2ffd19be874b1e447e57888cb724b04cae","tarball":"https://registry.npmjs.org/@arcmantle/vite-plugin-copy/-/vite-plugin-copy-1.0.1.tgz","fileCount":13,"integrity":"sha512-+XN/ecPhKakRgMasXP3yfw0gnraDiV8fB9o3Ave2kQ9+sUR6E0tE3U3PmJvwM14m2PMzCaOCLpUvMg1K4h8wow==","signatures":[{"sig":"MEYCIQD7T5x+02Y2tGWWQDd5sdopQfGN6Zw+/JFtcA8hUhCD/QIhAMTYv0F8vblFl9L3RRD4cnjrftAUZlYjIujCEokU7iES","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25332},"main":"./dist/index.js","type":"module","_from":"file:arcmantle-vite-plugin-copy-1.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"scripts":{"build":"rimraf dist && tsc --project ./src/tsconfig.json"},"_npmUser":{"name":"roenlie","email":"kristofferroenlie@gmail.com"},"_resolved":"/tmp/e8ce3521bacd02690b367e0471c402a6/arcmantle-vite-plugin-copy-1.0.1.tgz","_integrity":"sha512-+XN/ecPhKakRgMasXP3yfw0gnraDiV8fB9o3Ave2kQ9+sUR6E0tE3U3PmJvwM14m2PMzCaOCLpUvMg1K4h8wow==","_npmVersion":"11.4.2","description":"Copies files during vite build.","directories":{},"_nodeVersion":"24.4.1","dependencies":{"globby":"^14.1.0","fs-extra":"^11.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.14","@types/fs-extra":"^11.0.4","@arcmantle/tsconfig":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/vite-plugin-copy_1.0.1_1752757866245_0.21177625317522186","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@arcmantle/vite-plugin-copy","version":"1.0.2","author":{"name":"Kristoffer Roen-Lie"},"license":"Apache-2.0","_id":"@arcmantle/vite-plugin-copy@1.0.2","maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"homepage":"https://github.com/arcmantle/vite-plugin-copy#readme","bugs":{"url":"https://github.com/arcmantle/vite-plugin-copy/issues"},"dist":{"shasum":"4d1ab5d2dfc8c47fef49c33953861237dd75042b","tarball":"https://registry.npmjs.org/@arcmantle/vite-plugin-copy/-/vite-plugin-copy-1.0.2.tgz","fileCount":13,"integrity":"sha512-ipsqiy5U+j1tQiN4stP8wLoRrD6kMVXw5jIB2Ab8DKwox8GFo7ykk8KzfsP9MDWglPcLwr15EdZmvd7egJETMw==","signatures":[{"sig":"MEQCIAG4K0sUEPbkBX9bhF1dIkyBHAZQh3JvUwig9ZfRmeZHAiAf+bJD77o+Wo1qypjoUuhrynRqlQbuOIV9fRtw+wdVtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25437},"main":"./dist/index.js","type":"module","_from":"file:arcmantle-vite-plugin-copy-1.0.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"scripts":{"build":"rimraf dist && tsc --project ./src/tsconfig.json"},"_npmUser":{"name":"roenlie","email":"kristofferroenlie@gmail.com"},"_resolved":"/tmp/e3e9afecb818b798b6cb6ef8efb83147/arcmantle-vite-plugin-copy-1.0.2.tgz","_integrity":"sha512-ipsqiy5U+j1tQiN4stP8wLoRrD6kMVXw5jIB2Ab8DKwox8GFo7ykk8KzfsP9MDWglPcLwr15EdZmvd7egJETMw==","repository":{"url":"git+https://github.com/arcmantle/vite-plugin-copy.git","type":"git"},"_npmVersion":"11.4.2","description":"Copies files during vite build.","directories":{},"_nodeVersion":"24.4.1","dependencies":{"globby":"^14.1.0","fs-extra":"^11.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^24.0.14","@types/fs-extra":"^11.0.4","@arcmantle/tsconfig":"^1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/vite-plugin-copy_1.0.2_1752781600830_0.8602051409530178","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@arcmantle/vite-plugin-copy","version":"1.0.3","description":"Copies files during vite build.","repository":{"type":"git","url":"git+https://github.com/arcmantle/vite-plugin-copy.git"},"license":"Apache-2.0","author":{"name":"Kristoffer Roen-Lie"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","dependencies":{"fs-extra":"^11.3.0","globby":"^14.1.0"},"devDependencies":{"@arcmantle/tsconfig":"^1.0.9","@types/fs-extra":"^11.0.4","@types/node":"^24.0.14","rimraf":"^6.0.1","typescript":"^5.8.3","vite":"^7.0.0"},"engines":{"node":">=22"},"scripts":{"build":"rimraf dist && tsc --project ./src/tsconfig.json"},"_id":"@arcmantle/vite-plugin-copy@1.0.3","bugs":{"url":"https://github.com/arcmantle/vite-plugin-copy/issues"},"homepage":"https://github.com/arcmantle/vite-plugin-copy#readme","_integrity":"sha512-1xUXvD6u3VSO7rTR3Ec4tjahTiIr8eVAkE9jHCbmjCAUxbG6jcCwIwYgdZcZ7Y6SkMaCtRH2h+lEoEUMkIbwnw==","_resolved":"/tmp/c939dbc0aeeb71252f82f28d7fe7d366/arcmantle-vite-plugin-copy-1.0.3.tgz","_from":"file:arcmantle-vite-plugin-copy-1.0.3.tgz","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-1xUXvD6u3VSO7rTR3Ec4tjahTiIr8eVAkE9jHCbmjCAUxbG6jcCwIwYgdZcZ7Y6SkMaCtRH2h+lEoEUMkIbwnw==","shasum":"02e0b60e3ece014078edafdbd497a773d26c4967","tarball":"https://registry.npmjs.org/@arcmantle/vite-plugin-copy/-/vite-plugin-copy-1.0.3.tgz","fileCount":13,"unpackedSize":25437,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDjcGbccbyiaBbHqWoCwdMAN80dHihR/8u2Yza0YUvklQIhANw0Gr6ny4dUCxzXbyYGPUdPUZsLpqX9EO19zpDoXpHN"}]},"_npmUser":{"name":"roenlie","email":"kristofferroenlie@gmail.com"},"directories":{},"maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vite-plugin-copy_1.0.3_1752792920020_0.5376879161136909"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-05T22:40:44.480Z","modified":"2025-07-17T22:55:20.437Z","1.0.0":"2025-07-05T22:40:44.802Z","1.0.1":"2025-07-17T13:11:06.451Z","1.0.2":"2025-07-17T19:46:41.057Z","1.0.3":"2025-07-17T22:55:20.223Z"},"bugs":{"url":"https://github.com/arcmantle/vite-plugin-copy/issues"},"author":{"name":"Kristoffer Roen-Lie"},"license":"Apache-2.0","homepage":"https://github.com/arcmantle/vite-plugin-copy#readme","repository":{"type":"git","url":"git+https://github.com/arcmantle/vite-plugin-copy.git"},"description":"Copies files during vite build.","maintainers":[{"name":"roenlie","email":"kristofferroenlie@gmail.com"}],"readme":"# @arcmantle/vite-plugin-copy\n\nA Vite plugin that copies files during the build process with advanced features like file transformation, renaming, and flattening.\n\n## Features\n\n- 🚀 **Fast & Efficient**: Uses globby for pattern matching and fs-extra for optimized file operations\n- 🔄 **File Transformation**: Modify file contents during copy\n- 📁 **Flexible Destination**: Copy to single or multiple destinations\n- 🏷️ **File Renaming**: Rename files during copy with string or function-based renaming\n- 📂 **Directory Flattening**: Option to flatten directory structure\n- ⚡ **Copy Once Mode**: Perfect for watch mode to avoid redundant copying\n- 🎯 **Configurable Hooks**: Choose when copying occurs during the build process\n- 📊 **Verbose Logging**: Optional detailed logging of copy operations\n\n## Installation\n\n```bash\nnpm install @arcmantle/vite-plugin-copy\n# or\npnpm add @arcmantle/vite-plugin-copy\n# or\nyarn add @arcmantle/vite-plugin-copy\n```\n\n## Usage\n\n### Basic Usage\n\n```javascript\nimport { viteCopy } from '@arcmantle/vite-plugin-copy';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  plugins: [\n    viteCopy({\n      targets: [\n        {\n          from: 'src/assets/**/*',\n          to: 'dist/assets'\n        }\n      ]\n    })\n  ]\n});\n```\n\n### Advanced Usage\n\n```javascript\nimport { viteCopy } from '@arcmantle/vite-plugin-copy';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  plugins: [\n    viteCopy({\n      targets: [\n        // Copy vendor styles\n        {\n          from: './node_modules/@arcmantle/elements/styles/*',\n          to: './public/vendor/mimic-elements',\n        },\n        // Copy and rename files\n        {\n          from: 'src/config.json',\n          to: 'dist/',\n          rename: 'app-config.json'\n        },\n        // Copy to multiple destinations\n        {\n          from: 'src/shared/**/*',\n          to: ['dist/client/shared', 'dist/server/shared']\n        },\n        // Transform file contents\n        {\n          from: 'src/template.html',\n          to: 'dist/index.html',\n          transform: (contents, filename) => {\n            return contents.toString().replace('{{VERSION}}', process.env.npm_package_version);\n          }\n        }\n      ],\n      hook: 'config',\n      copyOnce: true,\n      verbose: true\n    })\n  ]\n});\n```\n\n## API Reference\n\n### `viteCopy(options)`\n\n#### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `targets` | `Target[]` | `[]` | Array of copy targets |\n| `copyOnce` | `boolean` | `false` | Copy items only once (useful in watch mode) |\n| `hook` | `string` | `'buildEnd'` | Rollup hook to use ('config', 'buildEnd', or any valid hook) |\n| `verbose` | `boolean` | `false` | Enable verbose logging |\n| `flatten` | `boolean` | `true` | Remove base directory structure of copied files |\n\n#### Target Configuration\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `from` | `string \\| string[]` | Source path or glob pattern(s) |\n| `to` | `string \\| string[]` | Destination path(s) |\n| `rename` | `string \\| function` | New filename or function to generate filename |\n| `transform` | `function` | Function to transform file contents (only works with files) |\n\n### Transform Function\n\n```javascript\ntransform: (contents, filename) => {\n  // contents: Buffer - file contents\n  // filename: string - original filename\n  // return: any - transformed content\n}\n```\n\n### Rename Function\n\n```javascript\nrename: (name, extension, fullPath) => {\n  // name: string - filename without extension\n  // extension: string - file extension without dot\n  // fullPath: string - full source path\n  // return: string - new filename\n}\n```\n\n## Examples\n\n### Copy Static Assets\n\n```javascript\nviteCopy({\n  targets: [\n    {\n      from: 'src/assets/**/*',\n      to: 'dist/assets'\n    }\n  ]\n})\n```\n\n### Copy with Pattern Matching\n\n```javascript\nviteCopy({\n  targets: [\n    {\n      from: ['src/**/*.json', 'src/**/*.xml'],\n      to: 'dist/config'\n    }\n  ]\n})\n```\n\n### Dynamic Renaming\n\n```javascript\nviteCopy({\n  targets: [\n    {\n      from: 'src/locales/*.json',\n      to: 'dist/i18n',\n      rename: (name, ext, fullPath) => `${name}.locale.${ext}`\n    }\n  ]\n})\n```\n\n### Environment-based Transformation\n\n```javascript\nviteCopy({\n  targets: [\n    {\n      from: 'src/config.template.json',\n      to: 'dist/config.json',\n      transform: (contents) => {\n        const config = JSON.parse(contents.toString());\n        config.environment = process.env.NODE_ENV;\n        config.buildTime = new Date().toISOString();\n        return JSON.stringify(config, null, 2);\n      }\n    }\n  ]\n})\n```\n\n### Watch Mode Optimization\n\n```javascript\nviteCopy({\n  targets: [\n    {\n      from: 'node_modules/large-library/dist/**/*',\n      to: 'public/vendor/large-library'\n    }\n  ],\n  copyOnce: true, // Only copy once in watch mode\n  hook: 'config'  // Copy early in the build process\n})\n```\n\n## Hook Timing\n\n- **`config`**: Runs early during configuration setup\n- **`buildEnd`**: Runs after the build is complete (default)\n- Any valid Rollup hook name\n\n## Globby Options\n\nThis plugin uses [globby](https://github.com/sindresorhus/globby) for file matching. You can pass any globby options in the target configuration:\n\n```javascript\nviteCopy({\n  targets: [\n    {\n      from: 'src/**/*',\n      to: 'dist/',\n      ignore: ['**/*.test.js'],\n      dot: true\n    }\n  ]\n})\n```\n\n## Requirements\n\n- Node.js >= 22\n- Vite >= 7.0.0\n\n## Dependencies\n\n- **fs-extra**: Enhanced file system operations with promises\n- **globby**: Fast glob matching for file pattern detection\n\n## License\n\nApache-2.0\n\n## Contributing\n\nThis package is part of the Arcmantle Weave monorepo. Contributions are welcome!\n","readmeFilename":"README.md"}