mirror of
https://github.com/samsonjs/batteries.git
synced 2026-04-27 15:07:42 +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
|
// batteries
|
||||||
// Copyright 2010 - 2011 Sami Samhuri <sami@samhuri.net>
|
// Copyright 2010 - 2011 Sami Samhuri <sami@samhuri.net>
|
||||||
|
|
||||||
var ArrayExt = require('./array')
|
var batteries = module.exports
|
||||||
, DateExt = require('./date')
|
, exts = []
|
||||||
, FileExt = require('./file')
|
|
||||||
, MathExt = require('./math')
|
|
||||||
, ObjectExt = require('./object')
|
|
||||||
, StringExt = require('./string')
|
|
||||||
, Range = require('./range')
|
|
||||||
, repr = require('./repr').repr
|
|
||||||
;
|
;
|
||||||
|
|
||||||
module.exports =
|
ext('array');
|
||||||
{ array: ArrayExt
|
ext('date');
|
||||||
, date: DateExt
|
ext('fs');
|
||||||
, fs: FileExt
|
ext('math');
|
||||||
, math: MathExt
|
ext('object');
|
||||||
, object: ObjectExt
|
ext('range');
|
||||||
, string: StringExt
|
ext('repr');
|
||||||
, Range: Range
|
ext('string');
|
||||||
, repr: repr
|
|
||||||
|
|
||||||
, extendNative: function() {
|
function ext(name) {
|
||||||
// Extend native types
|
exts.push(name);
|
||||||
ArrayExt.extendNative();
|
defineLazyProperty(batteries, name, function() { return require('./' + name); });
|
||||||
DateExt.extendNative();
|
};
|
||||||
MathExt.extendNative();
|
|
||||||
|
|
||||||
// Extend Node
|
function defineLazyProperty(obj, name, getter) {
|
||||||
FileExt.extendNative(require('fs'));
|
Object.defineProperty(obj, name, {
|
||||||
|
configurable: true
|
||||||
|
, enumerable: true
|
||||||
|
|
||||||
global['Range'] = Range;
|
// Call the getter and overwrite this property with one that returns
|
||||||
global['repr'] = repr;
|
// that value directly.
|
||||||
|
, get: function() {
|
||||||
|
var val = getter();
|
||||||
|
Object.defineProperty(batteries, name, { value: val });
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
return module.exports;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
, requireEverything: function() {
|
// ES5 strict mode compatible
|
||||||
assert = require('assert');
|
function ensureContext(context) {
|
||||||
buffer = require('buffer');
|
return context || this || (1, eval)('this');
|
||||||
child_process = require('child_process');
|
}
|
||||||
crypto = require('crypto');
|
|
||||||
dgram = require('dgram');
|
// TODO figure out how to extend native types in the REPL
|
||||||
dns = require('dns');
|
batteries.extendNative = function(context) {
|
||||||
events = require('events');
|
context = ensureContext(context)
|
||||||
freelist = require('freelist');
|
exts.forEach(function(name) {
|
||||||
fs = require('fs');
|
var ext = batteries[name];
|
||||||
http = require('http');
|
if (typeof ext.extendNative === 'function') {
|
||||||
https = require('https');
|
ext.extendNative(context);
|
||||||
net = require('net');
|
}
|
||||||
os = require('os');
|
});
|
||||||
path = require('path');
|
|
||||||
querystring = require('querystring');
|
return batteries;
|
||||||
readline = require('readline');
|
|
||||||
repl = require('repl');
|
|
||||||
string_decoder = require('string_decoder');
|
|
||||||
util = require('util');
|
|
||||||
url = require('url');
|
|
||||||
|
|
||||||
return module.exports;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue