rollup-plugin-copy
Advanced tools
Comparing version 3.2.1 to 3.3.0
@@ -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 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
15457
318
213