Socket
Socket
Sign inDemoInstall

rollup-plugin-copy

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rollup-plugin-copy - npm Package Compare versions

Comparing version 3.2.1 to 3.3.0

69

dist/index.commonjs.js

@@ -18,2 +18,7 @@ 'use strict';

async function isFile(filePath) {
const fileStats = await fs.stat(filePath);
return fileStats.isFile();
}
function renameTarget(target, rename) {

@@ -24,9 +29,14 @@ const parsedPath = path.parse(target);

function generateCopyTarget(src, dest, {
async function generateCopyTarget(src, dest, {
flatten,
rename
rename,
transform
}) {
if (transform && !(await isFile(src))) {
throw new Error(`"transform" option works only on files: '${src}' must be a file`);
}
const {
dir,
base
base,
dir
} = path.parse(src);

@@ -36,3 +46,8 @@ const destinationFolder = flatten || !flatten && !dir ? dest : dir.replace(dir.split('/')[0], dest);

src,
dest: path.join(destinationFolder, rename ? renameTarget(base, rename) : base)
dest: path.join(destinationFolder, rename ? renameTarget(base, rename) : base),
...(transform && {
contents: await transform((await fs.readFile(src)))
}),
renamed: rename,
transformed: transform
};

@@ -67,5 +82,6 @@ }

const {
src,
dest,
rename,
src,
transform,
...restTargetOptions

@@ -90,12 +106,14 @@ } = target;

if (matchedPaths.length) {
matchedPaths.forEach(matchedPath => {
const generatedCopyTargets = Array.isArray(dest) ? dest.map(destination => generateCopyTarget(matchedPath, destination, {
for (const matchedPath of matchedPaths) {
const generatedCopyTargets = Array.isArray(dest) ? await Promise.all(dest.map(destination => generateCopyTarget(matchedPath, destination, {
flatten,
rename
})) : [generateCopyTarget(matchedPath, dest, {
rename,
transform
}))) : [await generateCopyTarget(matchedPath, dest, {
flatten,
rename
rename,
transform
})];
copyTargets.push(...generatedCopyTargets);
});
}
}

@@ -110,10 +128,25 @@ }

for (const {
src,
dest
} of copyTargets) {
await fs.copy(src, dest, restPluginOptions);
for (const copyTarget of copyTargets) {
const {
contents,
dest,
src,
transformed
} = copyTarget;
if (transformed) {
await fs.outputFile(dest, contents, restPluginOptions);
} else {
await fs.copy(src, dest, restPluginOptions);
}
if (verbose) {
console.log(colorette.green(` ${colorette.bold(src)} → ${colorette.bold(dest)}`));
let message = colorette.green(` ${colorette.bold(src)} → ${colorette.bold(dest)}`);
const flags = Object.entries(copyTarget).filter(([key, value]) => ['renamed', 'transformed'].includes(key) && value).map(([key]) => key.charAt(0).toUpperCase());
if (flags.length) {
message = `${message} ${colorette.yellow(`[${flags.join(', ')}]`)}`;
}
console.log(message);
}

@@ -120,0 +153,0 @@ }

@@ -14,2 +14,7 @@ import path from 'path';

async function isFile(filePath) {
const fileStats = await fs.stat(filePath);
return fileStats.isFile();
}
function renameTarget(target, rename) {

@@ -20,9 +25,14 @@ const parsedPath = path.parse(target);

function generateCopyTarget(src, dest, {
async function generateCopyTarget(src, dest, {
flatten,
rename
rename,
transform
}) {
if (transform && !(await isFile(src))) {
throw new Error(`"transform" option works only on files: '${src}' must be a file`);
}
const {
dir,
base
base,
dir
} = path.parse(src);

@@ -32,3 +42,8 @@ const destinationFolder = flatten || !flatten && !dir ? dest : dir.replace(dir.split('/')[0], dest);

src,
dest: path.join(destinationFolder, rename ? renameTarget(base, rename) : base)
dest: path.join(destinationFolder, rename ? renameTarget(base, rename) : base),
...(transform && {
contents: await transform((await fs.readFile(src)))
}),
renamed: rename,
transformed: transform
};

@@ -63,5 +78,6 @@ }

const {
src,
dest,
rename,
src,
transform,
...restTargetOptions

@@ -86,12 +102,14 @@ } = target;

if (matchedPaths.length) {
matchedPaths.forEach(matchedPath => {
const generatedCopyTargets = Array.isArray(dest) ? dest.map(destination => generateCopyTarget(matchedPath, destination, {
for (const matchedPath of matchedPaths) {
const generatedCopyTargets = Array.isArray(dest) ? await Promise.all(dest.map(destination => generateCopyTarget(matchedPath, destination, {
flatten,
rename
})) : [generateCopyTarget(matchedPath, dest, {
rename,
transform
}))) : [await generateCopyTarget(matchedPath, dest, {
flatten,
rename
rename,
transform
})];
copyTargets.push(...generatedCopyTargets);
});
}
}

@@ -106,10 +124,25 @@ }

for (const {
src,
dest
} of copyTargets) {
await fs.copy(src, dest, restPluginOptions);
for (const copyTarget of copyTargets) {
const {
contents,
dest,
src,
transformed
} = copyTarget;
if (transformed) {
await fs.outputFile(dest, contents, restPluginOptions);
} else {
await fs.copy(src, dest, restPluginOptions);
}
if (verbose) {
console.log(green(` ${bold(src)} → ${bold(dest)}`));
let message = green(` ${bold(src)} → ${bold(dest)}`);
const flags = Object.entries(copyTarget).filter(([key, value]) => ['renamed', 'transformed'].includes(key) && value).map(([key]) => key.charAt(0).toUpperCase());
if (flags.length) {
message = `${message} ${yellow(`[${flags.join(', ')}]`)}`;
}
console.log(message);
}

@@ -116,0 +149,0 @@ }

@@ -20,2 +20,7 @@ import rollup from 'rollup';

readonly rename?: string | Function;
/**
* Modify file contents.
*/
readonly transform?: Function;
}

@@ -22,0 +27,0 @@

{
"name": "rollup-plugin-copy",
"description": "Copy files and folders using Rollup",
"version": "3.2.1",
"version": "3.3.0",
"author": "Vlad Shcherbin <vlad.shcherbin@gmail.com>",

@@ -6,0 +6,0 @@ "repository": "vladshcherbin/rollup-plugin-copy",

@@ -55,4 +55,5 @@ # rollup-plugin-copy

- **rename** (`string` `Function`): Change destination file or folder name
- **transform** (`Function`): Modify file contents
Each object should have **src** and **dest** properties, **rename** is optional. [globby](https://github.com/sindresorhus/globby) is used inside, check it for [glob pattern](https://github.com/sindresorhus/globby#globbing-patterns) examples.
Each object should have **src** and **dest** properties, **rename** and **transform** are optional. [globby](https://github.com/sindresorhus/globby) is used inside, check it for [glob pattern](https://github.com/sindresorhus/globby#globbing-patterns) examples.

@@ -138,2 +139,14 @@ ##### File

##### Transform file contents
```js
copy({
targets: [{
src: 'src/index.html',
dest: 'dist/public',
transform: (contents) => contents.toString().replace('__SCRIPT__', 'app.js')
}]
})
```
#### verbose

@@ -140,0 +153,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc