50 lines
1.8 KiB
JavaScript
50 lines
1.8 KiB
JavaScript
/*
|
|
Copyright (c) 2012, Yahoo! Inc. All rights reserved.
|
|
Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
|
|
*/
|
|
|
|
//EXPERIMENTAL code: do not rely on this in anyway until the docs say it is allowed
|
|
|
|
var path = require('path'),
|
|
yuiRegexp = /yui-nodejs\.js$/;
|
|
|
|
module.exports = function (matchFn, transformFn, verbose) {
|
|
return function (file) {
|
|
if (!file.match(yuiRegexp)) {
|
|
return;
|
|
}
|
|
var YMain = require(file),
|
|
YUI,
|
|
loaderFn,
|
|
origGet;
|
|
|
|
if (YMain.YUI) {
|
|
YUI = YMain.YUI;
|
|
loaderFn = YUI.Env && YUI.Env.mods && YUI.Env.mods['loader-base'] ? YUI.Env.mods['loader-base'].fn : null;
|
|
if (!loaderFn) { return; }
|
|
if (verbose) { console.log('Applying YUI load post-hook'); }
|
|
YUI.Env.mods['loader-base'].fn = function (Y) {
|
|
loaderFn.call(null, Y);
|
|
origGet = Y.Get._exec;
|
|
Y.Get._exec = function (data, url, cb) {
|
|
if (matchFn(url) || matchFn(path.resolve(url))) { //allow for relative paths as well
|
|
if (verbose) {
|
|
console.log('Transforming [' + url + ']');
|
|
}
|
|
try {
|
|
data = transformFn(data, url);
|
|
} catch (ex) {
|
|
console.error('Error transforming: ' + url + ' return original code');
|
|
console.error(ex.message || ex);
|
|
if (ex.stack) { console.error(ex.stack); }
|
|
}
|
|
}
|
|
return origGet.call(Y, data, url, cb);
|
|
};
|
|
return Y;
|
|
};
|
|
}
|
|
};
|
|
};
|
|
|