mirror of
https://github.com/samsonjs/batteries.git
synced 2026-03-25 09:15:46 +00:00
load extensions lazily thanks to @indexzero, closes #2
This commit is contained in:
parent
b7ba7b5dc0
commit
6a12ca076a
1 changed files with 43 additions and 51 deletions
94
lib/index.js
94
lib/index.js
|
|
@ -1,64 +1,56 @@
|
|||
// batteries
|
||||
// Copyright 2010 - 2011 Sami Samhuri <sami@samhuri.net>
|
||||
|
||||
var ArrayExt = require('./array')
|
||||
, DateExt = require('./date')
|
||||
, FileExt = require('./file')
|
||||
, MathExt = require('./math')
|
||||
, ObjectExt = require('./object')
|
||||
, StringExt = require('./string')
|
||||
, Range = require('./range')
|
||||
, repr = require('./repr').repr
|
||||
var batteries = module.exports
|
||||
, exts = []
|
||||
;
|
||||
|
||||
module.exports =
|
||||
{ array: ArrayExt
|
||||
, date: DateExt
|
||||
, fs: FileExt
|
||||
, math: MathExt
|
||||
, object: ObjectExt
|
||||
, string: StringExt
|
||||
, Range: Range
|
||||
, repr: repr
|
||||
ext('array');
|
||||
ext('date');
|
||||
ext('fs');
|
||||
ext('math');
|
||||
ext('object');
|
||||
ext('range');
|
||||
ext('repr');
|
||||
ext('string');
|
||||
|
||||
, extendNative: function() {
|
||||
// Extend native types
|
||||
ArrayExt.extendNative();
|
||||
DateExt.extendNative();
|
||||
MathExt.extendNative();
|
||||
function ext(name) {
|
||||
exts.push(name);
|
||||
defineLazyProperty(batteries, name, function() { return require('./' + name); });
|
||||
};
|
||||
|
||||
// Extend Node
|
||||
FileExt.extendNative(require('fs'));
|
||||
function defineLazyProperty(obj, name, getter) {
|
||||
Object.defineProperty(obj, name, {
|
||||
configurable: true
|
||||
, enumerable: true
|
||||
|
||||
global['Range'] = Range;
|
||||
global['repr'] = repr;
|
||||
// Call the getter and overwrite this property with one that returns
|
||||
// that value directly.
|
||||
, get: function() {
|
||||
var val = getter();
|
||||
Object.defineProperty(batteries, name, { value: val });
|
||||
return val;
|
||||
}
|
||||
|
||||
return module.exports;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
, requireEverything: function() {
|
||||
assert = require('assert');
|
||||
buffer = require('buffer');
|
||||
child_process = require('child_process');
|
||||
crypto = require('crypto');
|
||||
dgram = require('dgram');
|
||||
dns = require('dns');
|
||||
events = require('events');
|
||||
freelist = require('freelist');
|
||||
fs = require('fs');
|
||||
http = require('http');
|
||||
https = require('https');
|
||||
net = require('net');
|
||||
os = require('os');
|
||||
path = require('path');
|
||||
querystring = require('querystring');
|
||||
readline = require('readline');
|
||||
repl = require('repl');
|
||||
string_decoder = require('string_decoder');
|
||||
util = require('util');
|
||||
url = require('url');
|
||||
// ES5 strict mode compatible
|
||||
function ensureContext(context) {
|
||||
return context || this || (1, eval)('this');
|
||||
}
|
||||
|
||||
// TODO figure out how to extend native types in the REPL
|
||||
batteries.extendNative = function(context) {
|
||||
context = ensureContext(context)
|
||||
exts.forEach(function(name) {
|
||||
var ext = batteries[name];
|
||||
if (typeof ext.extendNative === 'function') {
|
||||
ext.extendNative(context);
|
||||
}
|
||||
});
|
||||
|
||||
return batteries;
|
||||
|
||||
return module.exports;
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue