curl-amd
Version:
curl.js is small, fast, extensible module loader that handles AMD, CommonJS Modules/1.1, CSS, HTML/text, and legacy scripts.
83 lines (69 loc) • 2.11 kB
JavaScript
/** MIT License (c) copyright 2010-2013 B Cavalier & J Hann */
/**
* curl debug plugin
*
* Licensed under the MIT License at:
* http://www.opensource.org/licenses/mit-license.php
*
*/
/**
* usage:
* curl({ preloads: ['curl/debug'] }, ['my/app'], function (myApp) {
* // do stuff while logging debug messages
* });
*
* TODO: warn when main module still has leading dots (normalizePackageDescriptor)
* TODO: warn when a module id still has leading dots (toAbsId)
* TODO: use curl/tdd/undefine module instead of quick-and-dirty method below
* TODO: only add logging to some of the useful core functions
*
*/
define(/*=='curl/debug',==*/ ['require', 'curl/_privileged'], function (require, priv) {
;
var cache, totalWaiting, prevTotal, origDefine;
if (typeof console == 'undefined') {
throw new Error('`console` object must be defined to use debug module.');
}
priv._curl['undefine'] = function (moduleId) { delete cache[moduleId]; };
cache = priv['cache'];
// add logging to core functions
for (var p in priv['core']) (function (name, orig) {
priv['core'][name] = function () {
var result;
console.log('curl ' + name + ' arguments:', arguments);
result = orig.apply(this, arguments);
console.log('curl ' + name + ' return:', result);
return result;
};
}(p, priv['core'][p]));
// add logging to define
origDefine = priv._define;
priv._define = function () {
console.log('curl define:', arguments);
return origDefine.apply(this, arguments);
};
// log cache stats periodically
totalWaiting = 0;
function count () {
totalWaiting = 0;
for (var p in cache) {
if (cache[p] instanceof priv['Promise']) totalWaiting++;
}
}
count();
function periodicLogger () {
count();
if (prevTotal != totalWaiting) {
console.log('curl: ********** modules waiting: ' + totalWaiting);
for (var p in cache) {
if (cache[p] instanceof priv['Promise']) {
console.log('curl: ********** module waiting: ' + p);
}
}
}
prevTotal = totalWaiting;
setTimeout(periodicLogger, 500);
}
periodicLogger();
return true;
});