Comparing version 6.1.0 to 7.0.0
@@ -6,6 +6,5 @@ 'use strict'; | ||
var path = _interopDefault(require('path')); | ||
var Metalsmith = _interopDefault(require('metalsmith')); | ||
var majo = _interopDefault(require('majo')); | ||
var match = _interopDefault(require('minimatch')); | ||
var inquirer = _interopDefault(require('inquirer')); | ||
var asyncEach = _interopDefault(require('async.each')); | ||
var match$1 = _interopDefault(require('multimatch')); | ||
@@ -19,7 +18,7 @@ var isBinaryPath = _interopDefault(require('is-binary-path')); | ||
/* eslint-disable no-new-func */ | ||
var fn = new Function('data', 'with (data) { return ' + exp + ' }'); | ||
var fn = new Function('data', `with (data) { return ${exp} }`); | ||
try { | ||
return fn(data); | ||
} catch (err) { | ||
console.error('Error when evaluating filter condition: ' + exp); | ||
console.error(`Error when evaluating filter condition: ${exp}`); | ||
} | ||
@@ -29,23 +28,19 @@ } | ||
// forked from https://github.com/vuejs/vue-cli/blob/master/lib/filter.js | ||
function filter(files, filters, data, done) { | ||
if (!filters) { | ||
return done(); | ||
} | ||
var fileNames = Object.keys(files); | ||
Object.keys(filters).forEach(function (glob) { | ||
fileNames.forEach(function (file) { | ||
if (match(file, glob, { dot: true })) { | ||
var condition = filters[glob]; | ||
if (!evalualte(condition, data)) { | ||
delete files[file]; | ||
function filterFiles(filters) { | ||
return function (ctx) { | ||
if (!filters) return; | ||
var fileList = ctx.fileList; | ||
var data = ctx.meta.merged; | ||
Object.keys(filters).forEach(function (glob) { | ||
fileList.forEach(function (file) { | ||
if (match(file, glob, { dot: true })) { | ||
var condition = filters[glob]; | ||
if (!evalualte(condition, data)) { | ||
ctx.deleteFile(file); | ||
} | ||
} | ||
} | ||
}); | ||
}); | ||
}); | ||
done(); | ||
} | ||
function filterFiles(filters) { | ||
return function (files, metalsmith, done) { | ||
filter(files, filters, metalsmith.metadata().merged, done); | ||
}; | ||
@@ -55,5 +50,5 @@ } | ||
function ask(data, prompts) { | ||
return function (files, metalsmith, done) { | ||
return function (ctx) { | ||
if (prompts) { | ||
inquirer.prompt(prompts).then(function (answers) { | ||
return inquirer.prompt(prompts).then(function (answers) { | ||
var merged = Object.assign({}, data, answers); | ||
@@ -89,11 +84,10 @@ | ||
metalsmith.metadata({ data: data, answers: answers, merged: merged }); | ||
done(); | ||
}).catch(done); | ||
} else if (data) { | ||
metalsmith.metadata({ data: data, merged: data }); | ||
done(); | ||
ctx.meta = { data, answers, merged }; | ||
}); | ||
} | ||
if (data) { | ||
ctx.meta = { data, merged: data }; | ||
} else { | ||
metalsmith.metadata({ merged: {} }); | ||
done(); | ||
ctx.meta = { merged: {} }; | ||
} | ||
@@ -111,4 +105,4 @@ }; | ||
return function (files, metalsmith, done) { | ||
var keys = Object.keys(files); | ||
return function (ctx) { | ||
var fileList = ctx.fileList; | ||
var matchedFile = void 0; | ||
@@ -119,15 +113,15 @@ if (skipInterpolation) { | ||
} else { | ||
(function () { | ||
var matches = match$1(keys, skipInterpolation); | ||
matchedFile = function matchedFile(file) { | ||
return matches.indexOf(file) !== -1; | ||
}; | ||
})(); | ||
var matches = match$1(fileList, skipInterpolation); | ||
matchedFile = function matchedFile(file) { | ||
return matches.indexOf(file) !== -1; | ||
}; | ||
} | ||
} | ||
asyncEach(keys, run, done); | ||
return Promise.all(fileList.map(function (relative) { | ||
return run(relative); | ||
})); | ||
function run(file, done) { | ||
var content = files[file].contents.toString(); | ||
function run(file) { | ||
var content = ctx.fileContents(file); | ||
@@ -139,8 +133,7 @@ var shouldSkip = matchedFile && matchedFile(file, content); | ||
if (shouldSkip || isBinaryPath(file)) { | ||
return done(); | ||
return; | ||
} | ||
var res = require('jstransformer')(template).render(content, templateOptions, metalsmith.metadata().merged); | ||
files[file].contents = new Buffer(res.body); | ||
done(); | ||
var res = require('jstransformer')(template).render(content, templateOptions, ctx.meta.merged); | ||
ctx.writeContents(file, res.body); | ||
} | ||
@@ -151,16 +144,14 @@ }; | ||
var skip = function (skipExisting, destPath) { | ||
return function (files, metalsmith, done) { | ||
Promise.all(Object.keys(files).map(function (name) { | ||
return function (ctx) { | ||
return Promise.all(ctx.fileList.map(function (name) { | ||
var location = path.join(destPath, name); | ||
return exists(location).then(function (yes) { | ||
if (yes) { | ||
delete files[name]; | ||
ctx.deleteFile(name); | ||
if (typeof skipExisting === 'function') { | ||
skipExisting(location); | ||
skipExisting(location, name); | ||
} | ||
} | ||
}); | ||
})).then(function () { | ||
return done(); | ||
}).catch(done); | ||
})); | ||
}; | ||
@@ -170,9 +161,9 @@ }; | ||
var moveFiles = function (move) { | ||
return function (files, metalsmith, done) { | ||
if (!move) return done(); | ||
return function (ctx) { | ||
if (!move) return; | ||
for (var pattern in move) { | ||
var matches = match.match(Object.keys(files), pattern); | ||
var matches = match.match(ctx.fileList, pattern); | ||
if (matches.length > 0) { | ||
var content = files[matches[0]]; | ||
var file = ctx.file(matches[0]); | ||
var _iteratorNormalCompletion = true; | ||
@@ -186,3 +177,3 @@ var _didIteratorError = false; | ||
delete files[match$$1]; | ||
ctx.deleteFile(match$$1); | ||
} | ||
@@ -205,7 +196,5 @@ } catch (err) { | ||
var newName = move[pattern]; | ||
files[newName] = content; | ||
ctx.createFile(newName, file); | ||
} | ||
} | ||
done(); | ||
}; | ||
@@ -235,34 +224,34 @@ }; | ||
return new Promise(function (resolve, reject) { | ||
var source = path.resolve(cwd, src); | ||
var destPath = path.resolve(cwd, dest); | ||
var pipe = Metalsmith(source); // eslint-disable-line new-cap | ||
var destPath = path.resolve(cwd, dest); | ||
var base = path.resolve(cwd, src); | ||
var done = function done(err, files) { | ||
if (err) return reject(err); | ||
resolve(_extends({ | ||
files: files | ||
}, pipe.metadata())); | ||
}; | ||
var done = function done(stream) { | ||
return _extends({ | ||
files: stream.files, | ||
fileList: stream.fileList | ||
}, stream.meta); | ||
}; | ||
pipe.source('.').ignore(function (file) { | ||
return (/\.DS_Store$/.test(file) | ||
); | ||
}).use(ask(data, prompts)).use(filterFiles(filters)).use(moveFiles(move)); | ||
var stream = majo(); | ||
if (!disableInterpolation) { | ||
pipe.use(useTemplate({ skipInterpolation: skipInterpolation, template: template, templateOptions: templateOptions })); | ||
} | ||
stream.source('**', { cwd: base }).filter(function (file) { | ||
return !/\.DS_Store$/.test(file); | ||
}).use(ask(data, prompts)).use(filterFiles(filters)).use(moveFiles(move)); | ||
if (skipExisting) { | ||
pipe.use(skip(skipExisting, destPath)); | ||
} | ||
if (!disableInterpolation) { | ||
stream.use(useTemplate({ skipInterpolation, template, templateOptions })); | ||
} | ||
pipe.clean(clean).destination(destPath); | ||
if (skipExisting) { | ||
stream.use(skip(skipExisting, destPath)); | ||
} | ||
if (write === false) { | ||
return pipe.process(done); | ||
} | ||
if (write === false) { | ||
return stream.process().then(function () { | ||
return done(stream); | ||
}); | ||
} | ||
pipe.build(done); | ||
return stream.dest(destPath, { clean }).then(function () { | ||
return done(stream); | ||
}); | ||
@@ -269,0 +258,0 @@ } |
{ | ||
"name": "kopy", | ||
"version": "6.1.0", | ||
"version": "7.0.0", | ||
"description": "Gracefully copy a directory and render templates.", | ||
@@ -16,3 +16,3 @@ "license": "MIT", | ||
"scripts": { | ||
"test": "NODE_ENV=test ava && eslint src/*.js && rm -rf test/dest && npm run build", | ||
"test": "NODE_ENV=test ava && xo && rm -rf test/dest && npm run build", | ||
"build": "bili --js babel", | ||
@@ -37,18 +37,18 @@ "example": "npm run build && mkdir -p dist-example && cd dist-example && node ../example.js" | ||
"ava": "latest", | ||
"babel-preset-env": "^1.4.0", | ||
"babel-preset-stage-2": "^6.18.0", | ||
"bili": "0.10.0", | ||
"bili": "^0.14.2", | ||
"ejs": "^2.5.5", | ||
"eslint": "^3.9.1", | ||
"eslint-config-rem": "^2.0.0", | ||
"eslint-config-rem": "^3.0.1", | ||
"jstransformer-handlebars": "^1.0.0", | ||
"rimraf": "^2.5.4", | ||
"rollup-plugin-babel": "^2.7.1" | ||
"rollup-plugin-babel": "^2.7.1", | ||
"xo": "^0.18.1" | ||
}, | ||
"dependencies": { | ||
"async.each": "^0.5.2", | ||
"inquirer": "^2.0.0", | ||
"inquirer": "^3.0.6", | ||
"is-binary-path": "^2.0.0", | ||
"jstransformer": "^1.0.0", | ||
"jstransformer-ejs": "^0.0.3", | ||
"metalsmith": "^2.2.0", | ||
"majo": "^0.2.3", | ||
"minimatch": "^3.0.3", | ||
@@ -63,5 +63,8 @@ "multimatch": "^2.1.0", | ||
}, | ||
"eslintConfig": { | ||
"extends": "rem/esnext" | ||
"xo": { | ||
"extends": "rem", | ||
"rules": { | ||
"guard-for-in": 0 | ||
} | ||
} | ||
} |
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
8
14276
10
210
+ Addedmajo@^0.2.3
+ Addedansi-escapes@3.2.0(transitive)
+ Addedansi-styles@3.2.1(transitive)
+ Addedany-promise@1.3.0(transitive)
+ Addedchalk@2.4.2(transitive)
+ Addedchardet@0.4.2(transitive)
+ Addedcli-cursor@2.1.0(transitive)
+ Addedcolor-convert@1.9.3(transitive)
+ Addedcolor-name@1.1.3(transitive)
+ Addedexternal-editor@2.2.0(transitive)
+ Addedfs-extra@2.1.2(transitive)
+ Addedfs-promise@2.0.3(transitive)
+ Addedfs.realpath@1.0.0(transitive)
+ Addedglob@7.2.3(transitive)
+ Addedglobby@6.1.0(transitive)
+ Addedgraceful-fs@4.2.11(transitive)
+ Addedhas-flag@3.0.0(transitive)
+ Addediconv-lite@0.4.24(transitive)
+ Addedinflight@1.0.6(transitive)
+ Addedinquirer@3.3.0(transitive)
+ Addedjsonfile@2.4.0(transitive)
+ Addedmajo@0.2.4(transitive)
+ Addedmimic-fn@1.2.0(transitive)
+ Addedmute-stream@0.0.7(transitive)
+ Addedmz@2.7.0(transitive)
+ Addedobject-assign@4.1.1(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedonetime@2.0.1(transitive)
+ Addedpath-is-absolute@1.0.1(transitive)
+ Addedpify@2.3.0(transitive)
+ Addedpromise.series@0.1.0(transitive)
+ Addedrestore-cursor@2.0.0(transitive)
+ Addedrx-lite@4.0.8(transitive)
+ Addedrx-lite-aggregates@4.0.8(transitive)
+ Addedsafer-buffer@2.1.2(transitive)
+ Addedsignal-exit@3.0.7(transitive)
+ Addedsupports-color@5.5.0(transitive)
+ Addedthenify@3.3.1(transitive)
+ Addedthenify-all@1.6.0(transitive)
+ Addedtmp@0.0.33(transitive)
+ Addedwrappy@1.0.2(transitive)
- Removedasync.each@^0.5.2
- Removedmetalsmith@^2.2.0
- Removedansi-escapes@1.4.0(transitive)
- Removedansi-regex@2.1.1(transitive)
- Removedansi-styles@2.2.1(transitive)
- Removedanymatch@3.1.3(transitive)
- Removedargparse@1.0.10(transitive)
- Removedasync.each@0.5.2(transitive)
- Removedasync.eachof@0.5.2(transitive)
- Removedasync.util.isarray@0.5.2(transitive)
- Removedasync.util.isarraylike@0.5.2(transitive)
- Removedasync.util.keyiterator@0.5.2(transitive)
- Removedasync.util.keys@0.5.2(transitive)
- Removedasync.util.noop@0.5.2(transitive)
- Removedasync.util.once@0.5.2(transitive)
- Removedasync.util.onlyonce@0.5.2(transitive)
- Removedasync.util.withoutindex@0.5.2(transitive)
- Removedbraces@3.0.3(transitive)
- Removedbuffer-from@1.1.2(transitive)
- Removedchalk@1.1.3(transitive)
- Removedchokidar@3.6.0(transitive)
- Removedcli-cursor@1.0.2(transitive)
- Removedco@3.1.0(transitive)
- Removedcommander@10.0.1(transitive)
- Removedconcat-stream@1.6.2(transitive)
- Removedcore-util-is@1.0.3(transitive)
- Removeddebug@4.4.0(transitive)
- Removedesprima@4.0.1(transitive)
- Removedexit-hook@1.1.1(transitive)
- Removedextend@3.0.2(transitive)
- Removedextend-shallow@2.0.1(transitive)
- Removedexternal-editor@1.1.1(transitive)
- Removedfill-range@7.1.1(transitive)
- Removedfsevents@2.3.3(transitive)
- Removedglob-parent@5.1.2(transitive)
- Removedgray-matter@4.0.3(transitive)
- Removedhas-ansi@2.0.0(transitive)
- Removedinquirer@2.0.0(transitive)
- Removedis-extendable@0.1.1(transitive)
- Removedis-extglob@2.1.1(transitive)
- Removedis-glob@4.0.3(transitive)
- Removedis-number@7.0.0(transitive)
- Removedis-utf8@0.2.1(transitive)
- Removedisarray@1.0.0(transitive)
- Removedjs-yaml@3.14.1(transitive)
- Removedkind-of@6.0.3(transitive)
- Removedlodash.clonedeepwith@4.5.0(transitive)
- Removedmetalsmith@2.6.3(transitive)
- Removedmicromatch@4.0.8(transitive)
- Removedms@2.1.3(transitive)
- Removedmute-stream@0.0.6(transitive)
- Removednormalize-path@3.0.0(transitive)
- Removedonetime@1.1.0(transitive)
- Removedos-shim@0.1.3(transitive)
- Removedpicomatch@2.3.1(transitive)
- Removedprocess-nextick-args@2.0.1(transitive)
- Removedreadable-stream@2.3.8(transitive)
- Removedreaddirp@3.6.0(transitive)
- Removedrestore-cursor@1.0.1(transitive)
- Removedrx@4.1.0(transitive)
- Removedsafe-buffer@5.1.2(transitive)
- Removedsection-matter@1.0.0(transitive)
- Removedspawn-sync@1.0.15(transitive)
- Removedsprintf-js@1.0.3(transitive)
- Removedstat-mode@1.0.0(transitive)
- Removedstring_decoder@1.1.1(transitive)
- Removedstrip-ansi@3.0.1(transitive)
- Removedstrip-bom-string@1.0.0(transitive)
- Removedsupports-color@2.0.0(transitive)
- Removedtmp@0.0.29(transitive)
- Removedto-regex-range@5.0.1(transitive)
- Removedtypedarray@0.0.6(transitive)
- Removedutil-deprecate@1.0.2(transitive)
- Removedware@1.3.0(transitive)
- Removedwrap-fn@0.1.5(transitive)
Updatedinquirer@^3.0.6