From 154603261fb99a26015ec1b7abe1dd584b5fc9be Mon Sep 17 00:00:00 2001 From: vinitm Date: Fri, 15 Jul 2016 18:59:35 +0530 Subject: [PATCH 1/4] fix eslint errors --- index.js | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/index.js b/index.js index d3abbc0..e6cdb12 100644 --- a/index.js +++ b/index.js @@ -20,7 +20,7 @@ function camelize(str) { // to use the same functionality as gulp-util for backwards compatibility // with gulp 3x cli function logger() { - if(hasGulplog()){ + if (hasGulplog()) { // specifically deferring loading here to keep from registering it globally var gulplog = require('gulplog'); gulplog.info.apply(gulplog, arguments); @@ -39,7 +39,7 @@ module.exports = function(options) { var DEBUG = options.DEBUG || false; var pattern = arrayify(options.pattern || ['gulp-*', 'gulp.*', '@*/gulp{-,.}*']); - var config = options.config || findup('package.json', {cwd: parentDir}); + var config = options.config || findup('package.json', { cwd: parentDir }); var scope = arrayify(options.scope || ['dependencies', 'devDependencies', 'peerDependencies']); var replaceString = options.replaceString || /^gulp(-|\.)/; var camelizePluginName = options.camelize !== false; @@ -48,15 +48,15 @@ module.exports = function(options) { logDebug('Debug enabled with options: ' + JSON.stringify(options)); - var renameFn = options.renameFn || function (name) { + var renameFn = options.renameFn || function(name) { name = name.replace(replaceString, ''); return camelizePluginName ? camelize(name) : name; }; - if(typeof options.requireFn === 'function') { + if (typeof options.requireFn === 'function') { requireFn = options.requireFn; - } else if(typeof config === 'string') { - requireFn = function (name) { + } else if (typeof config === 'string') { + requireFn = function(name) { // This searches up from the specified package.json file, making sure // the config option behaves as expected. See issue #56. var src = resolve.sync(name, { basedir: path.dirname(config) }); @@ -68,7 +68,7 @@ module.exports = function(options) { configObject = (typeof config === 'string') ? require(config) : config; - if(!configObject) { + if (!configObject) { throw new Error('Could not find dependencies. Do you have a package.json file in your project?'); } @@ -81,18 +81,18 @@ module.exports = function(options) { pattern.push('!gulp-load-plugins'); function logDebug(message) { - if(DEBUG) { + if (DEBUG) { logger('gulp-load-plugins: ' + message); } } function defineProperty(object, requireName, name) { - if(object[requireName]){ + if (object[requireName]) { logDebug('error: defineProperty ' + name); - throw new Error('Could not define the property \"' + requireName + '\", you may have repeated dependencies in your package.json like' + ' "gulp-' + requireName + '" and ' + '"' + requireName + '"' ); + throw new Error('Could not define the property "' + requireName + '", you may have repeated dependencies in your package.json like' + ' "gulp-' + requireName + '" and ' + '"' + requireName + '"'); } - if(lazy) { + if (lazy) { logDebug('lazyload: adding property ' + requireName); Object.defineProperty(object, requireName, { enumerable: true, @@ -110,7 +110,7 @@ module.exports = function(options) { function getRequireName(name) { var requireName; - if(renameObj[name]) { + if (renameObj[name]) { requireName = options.rename[name]; } else { requireName = renameFn(name); @@ -126,10 +126,10 @@ module.exports = function(options) { unique(micromatch(names, pattern)).forEach(function(name) { var decomposition; - if(scopeTest.test(name)) { + if (scopeTest.test(name)) { decomposition = scopeDecomposition.exec(name); - if(!finalObject.hasOwnProperty(decomposition[1])) { + if (!finalObject.hasOwnProperty(decomposition[1])) { finalObject[decomposition[1]] = {}; } @@ -137,7 +137,6 @@ module.exports = function(options) { } else { defineProperty(finalObject, getRequireName(name), name); } - }); return finalObject; From 353108029006f198d8648f2b2e553c7f0f1ff0e7 Mon Sep 17 00:00:00 2001 From: vinitm Date: Fri, 15 Jul 2016 20:01:36 +0530 Subject: [PATCH 2/4] add ability to process plugins after being required --- index.js | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index e6cdb12..c3f3125 100644 --- a/index.js +++ b/index.js @@ -53,6 +53,8 @@ module.exports = function(options) { return camelizePluginName ? camelize(name) : name; }; + var postRequireTransforms = options.postRequireTransforms || {}; + if (typeof options.requireFn === 'function') { requireFn = options.requireFn; } else if (typeof config === 'string') { @@ -86,7 +88,7 @@ module.exports = function(options) { } } - function defineProperty(object, requireName, name) { + function defineProperty(object, transform, requireName, name) { if (object[requireName]) { logDebug('error: defineProperty ' + name); throw new Error('Could not define the property "' + requireName + '", you may have repeated dependencies in your package.json like' + ' "gulp-' + requireName + '" and ' + '"' + requireName + '"'); @@ -98,12 +100,12 @@ module.exports = function(options) { enumerable: true, get: function() { logDebug('lazyload: requiring ' + name + '...'); - return requireFn(name); + return transform(requireName, requireFn(name)); } }); } else { logDebug('requiring ' + name + '...'); - object[requireName] = requireFn(name); + object[requireName] = transform(requireName, requireFn(name)); } } @@ -121,6 +123,19 @@ module.exports = function(options) { return requireName; } + function applyTransform(requireName, plugin) { + // var requireName = getRequireName(name); + var transform = postRequireTransforms[requireName]; + // var plugin = requireFn(name); + + if (transform && typeof transform === 'function') { // if postRequireTransform function is passed, pass it the plugin and return it + logDebug('transforming ' + requireName); + return transform(plugin); + } else { + return plugin; // if no postRequireTransform function passed, return the plugin as is + } + } + var scopeTest = new RegExp('^@'); var scopeDecomposition = new RegExp('^@(.+)/(.+)'); @@ -133,9 +148,9 @@ module.exports = function(options) { finalObject[decomposition[1]] = {}; } - defineProperty(finalObject[decomposition[1]], getRequireName(decomposition[2]), name); + defineProperty(finalObject[decomposition[1]], applyTransform, getRequireName(decomposition[2]), name); } else { - defineProperty(finalObject, getRequireName(name), name); + defineProperty(finalObject, applyTransform, getRequireName(name), name); } }); From 78ffc440e5d47ff0e604086ec6f2b15b806db63f Mon Sep 17 00:00:00 2001 From: vinitm Date: Fri, 9 Sep 2016 01:46:13 +0530 Subject: [PATCH 3/4] removed comments --- index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/index.js b/index.js index c3f3125..f75a8f5 100644 --- a/index.js +++ b/index.js @@ -124,9 +124,7 @@ module.exports = function(options) { } function applyTransform(requireName, plugin) { - // var requireName = getRequireName(name); var transform = postRequireTransforms[requireName]; - // var plugin = requireFn(name); if (transform && typeof transform === 'function') { // if postRequireTransform function is passed, pass it the plugin and return it logDebug('transforming ' + requireName); From f1881ff15e06c87f3b682ffe28c958c3a8c45e0c Mon Sep 17 00:00:00 2001 From: vinitm Date: Fri, 9 Sep 2016 02:12:22 +0530 Subject: [PATCH 4/4] added test --- test/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/index.js b/test/index.js index 1603ebb..9004af6 100644 --- a/test/index.js +++ b/test/index.js @@ -198,6 +198,21 @@ var commonTests = function(lazy) { name: 'foo-bar' }); }); + + it('supports transforming', function() { + var x = gulpLoadPlugins({ + lazy: lazy, + config: { dependencies: { 'gulp-foo': '1.0.0' } }, + postRequireTransforms: { + foo: function(foo) { + foo.bar = 'test string'; + return foo; + } + } + }); + + assert.strictEqual(x.foo.bar, 'test string'); + }); }; describe('no lazy loading', function() {