/* 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; }; } }; };