Skip to content

Commit a69119d

Browse files
vinitmjackfranklin
authored andcommitted
added postRequireTransforms (#119)
1 parent 9cb0155 commit a69119d

File tree

2 files changed

+47
-20
lines changed

2 files changed

+47
-20
lines changed

index.js

+32-20
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function camelize(str) {
2020
// to use the same functionality as gulp-util for backwards compatibility
2121
// with gulp 3x cli
2222
function logger() {
23-
if(hasGulplog()){
23+
if (hasGulplog()) {
2424
// specifically deferring loading here to keep from registering it globally
2525
var gulplog = require('gulplog');
2626
gulplog.info.apply(gulplog, arguments);
@@ -39,7 +39,7 @@ module.exports = function(options) {
3939

4040
var DEBUG = options.DEBUG || false;
4141
var pattern = arrayify(options.pattern || ['gulp-*', 'gulp.*', '@*/gulp{-,.}*']);
42-
var config = options.config || findup('package.json', {cwd: parentDir});
42+
var config = options.config || findup('package.json', { cwd: parentDir });
4343
var scope = arrayify(options.scope || ['dependencies', 'devDependencies', 'peerDependencies']);
4444
var replaceString = options.replaceString || /^gulp(-|\.)/;
4545
var camelizePluginName = options.camelize !== false;
@@ -48,15 +48,17 @@ module.exports = function(options) {
4848

4949
logDebug('Debug enabled with options: ' + JSON.stringify(options));
5050

51-
var renameFn = options.renameFn || function (name) {
51+
var renameFn = options.renameFn || function(name) {
5252
name = name.replace(replaceString, '');
5353
return camelizePluginName ? camelize(name) : name;
5454
};
5555

56-
if(typeof options.requireFn === 'function') {
56+
var postRequireTransforms = options.postRequireTransforms || {};
57+
58+
if (typeof options.requireFn === 'function') {
5759
requireFn = options.requireFn;
58-
} else if(typeof config === 'string') {
59-
requireFn = function (name) {
60+
} else if (typeof config === 'string') {
61+
requireFn = function(name) {
6062
// This searches up from the specified package.json file, making sure
6163
// the config option behaves as expected. See issue #56.
6264
var src = resolve.sync(name, { basedir: path.dirname(config) });
@@ -68,7 +70,7 @@ module.exports = function(options) {
6870

6971
configObject = (typeof config === 'string') ? require(config) : config;
7072

71-
if(!configObject) {
73+
if (!configObject) {
7274
throw new Error('Could not find dependencies. Do you have a package.json file in your project?');
7375
}
7476

@@ -81,36 +83,36 @@ module.exports = function(options) {
8183
pattern.push('!gulp-load-plugins');
8284

8385
function logDebug(message) {
84-
if(DEBUG) {
86+
if (DEBUG) {
8587
logger('gulp-load-plugins: ' + message);
8688
}
8789
}
8890

89-
function defineProperty(object, requireName, name) {
90-
if(object[requireName]){
91+
function defineProperty(object, transform, requireName, name) {
92+
if (object[requireName]) {
9193
logDebug('error: defineProperty ' + name);
92-
throw new Error('Could not define the property \"' + requireName + '\", you may have repeated dependencies in your package.json like' + ' "gulp-' + requireName + '" and ' + '"' + requireName + '"' );
94+
throw new Error('Could not define the property "' + requireName + '", you may have repeated dependencies in your package.json like' + ' "gulp-' + requireName + '" and ' + '"' + requireName + '"');
9395
}
9496

95-
if(lazy) {
97+
if (lazy) {
9698
logDebug('lazyload: adding property ' + requireName);
9799
Object.defineProperty(object, requireName, {
98100
enumerable: true,
99101
get: function() {
100102
logDebug('lazyload: requiring ' + name + '...');
101-
return requireFn(name);
103+
return transform(requireName, requireFn(name));
102104
}
103105
});
104106
} else {
105107
logDebug('requiring ' + name + '...');
106-
object[requireName] = requireFn(name);
108+
object[requireName] = transform(requireName, requireFn(name));
107109
}
108110
}
109111

110112
function getRequireName(name) {
111113
var requireName;
112114

113-
if(renameObj[name]) {
115+
if (renameObj[name]) {
114116
requireName = options.rename[name];
115117
} else {
116118
requireName = renameFn(name);
@@ -121,23 +123,33 @@ module.exports = function(options) {
121123
return requireName;
122124
}
123125

126+
function applyTransform(requireName, plugin) {
127+
var transform = postRequireTransforms[requireName];
128+
129+
if (transform && typeof transform === 'function') { // if postRequireTransform function is passed, pass it the plugin and return it
130+
logDebug('transforming ' + requireName);
131+
return transform(plugin);
132+
} else {
133+
return plugin; // if no postRequireTransform function passed, return the plugin as is
134+
}
135+
}
136+
124137
var scopeTest = new RegExp('^@');
125138
var scopeDecomposition = new RegExp('^@(.+)/(.+)');
126139

127140
unique(micromatch(names, pattern)).forEach(function(name) {
128141
var decomposition;
129-
if(scopeTest.test(name)) {
142+
if (scopeTest.test(name)) {
130143
decomposition = scopeDecomposition.exec(name);
131144

132-
if(!finalObject.hasOwnProperty(decomposition[1])) {
145+
if (!finalObject.hasOwnProperty(decomposition[1])) {
133146
finalObject[decomposition[1]] = {};
134147
}
135148

136-
defineProperty(finalObject[decomposition[1]], getRequireName(decomposition[2]), name);
149+
defineProperty(finalObject[decomposition[1]], applyTransform, getRequireName(decomposition[2]), name);
137150
} else {
138-
defineProperty(finalObject, getRequireName(name), name);
151+
defineProperty(finalObject, applyTransform, getRequireName(name), name);
139152
}
140-
141153
});
142154

143155
return finalObject;

test/index.js

+15
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,21 @@ var commonTests = function(lazy) {
198198
name: 'foo-bar'
199199
});
200200
});
201+
202+
it('supports transforming', function() {
203+
var x = gulpLoadPlugins({
204+
lazy: lazy,
205+
config: { dependencies: { 'gulp-foo': '1.0.0' } },
206+
postRequireTransforms: {
207+
foo: function(foo) {
208+
foo.bar = 'test string';
209+
return foo;
210+
}
211+
}
212+
});
213+
214+
assert.strictEqual(x.foo.bar, 'test string');
215+
});
201216
};
202217

203218
describe('no lazy loading', function() {

0 commit comments

Comments
 (0)