Skip to content

Commit 450b838

Browse files
author
Bradley Meck
committed
npm active now
1 parent fa0b96b commit 450b838

File tree

4 files changed

+566
-0
lines changed

4 files changed

+566
-0
lines changed

lib/proxy.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
var Overload=require("overload");
2+
var Watchable=Overload.Watchable;
3+
var RePrototype=Overload.RePrototype;
4+
var Proxy = {
5+
create: function(handler,prototype) {
6+
var proxy=Watchable(
7+
//get
8+
function(context) {
9+
return handler["get"].call(context.thisObject,context.holder,context.property)
10+
}
11+
//set
12+
,function(context) {
13+
return handler["set"].call(context.thisObject,context.holder,context.property,context.value)
14+
}
15+
//enum
16+
,function(context) {
17+
return handler["enumerate"]();
18+
}
19+
//query
20+
,function(context) {
21+
return !!handler["has"].call(context.thisObject,context.property);
22+
}
23+
//delete
24+
,function(context) {
25+
return !!handler["delete"].call(context.thisObject,context.property);
26+
}
27+
//call
28+
,null
29+
//construct
30+
,null
31+
);
32+
RePrototype(proxy,prototype||Object.getPrototypeOf(new Object()));
33+
return proxy;
34+
}
35+
}

lib/util.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
var overload=require("./overload")
2+
, Watchable = overload.Watchable
3+
, RePrototype = overload.RePrototype
4+
5+
exports.ReadOnly=ReadOnly=function(obj,mask) {
6+
var $this=Watchable(function(args){
7+
var v=mask
8+
&& args.property in mask
9+
? mask[args.property]
10+
: obj[args.property];
11+
if(typeof(v)=="function") {
12+
return function(){return v.apply(obj,arguments)}
13+
}
14+
return v;
15+
});
16+
//only objects have prototypes
17+
if(obj instanceof Object) {
18+
RePrototype($this,Object.getPrototypeOf(obj))
19+
}
20+
return $this;
21+
}
22+
var noop=function(){}
23+
ReadOnly.ArrayMask={
24+
pop:function(){return this[this.length-1];}
25+
,push:function(){return this.length}
26+
,reverse:noop
27+
,shift:function(){return this[0];}
28+
,sort:noop
29+
,splice:function(){return [];}
30+
,unshift:function(){return this.length}
31+
}
32+
ReadOnly.DateMask={
33+
setDate:noop
34+
,setFullYear:noop
35+
,setHours:noop
36+
,setMilliseconds:noop
37+
,setMinutes:noop
38+
,setMonth:noop
39+
,setSeconds:noop
40+
,setTime:noop
41+
,setUTCDate:noop
42+
,setUTCFullYear:noop
43+
,setUTCHours:noop
44+
,setUTCMilliseconds:noop
45+
,setUTCMinutes:noop
46+
,setUTCMonth:noop
47+
,setUTCSeconds:noop
48+
,setYear:noop
49+
}
50+
ReadOnly.StringMask={}
51+
delete noop;

0 commit comments

Comments
 (0)