add proxies
This commit is contained in:
parent
070152f6c1
commit
0995cc3f4e
@ -85,6 +85,8 @@ export default class File {
|
||||
"default-props"
|
||||
];
|
||||
|
||||
"proxy-create",
|
||||
"proxy-directory"
|
||||
static options = require("./options");
|
||||
|
||||
normalizeOptions(opts: Object) {
|
||||
|
||||
@ -0,0 +1,4 @@
|
||||
(function (proxy, directory) {
|
||||
directory.push(proxy);
|
||||
return proxy;
|
||||
})
|
||||
@ -0,0 +1 @@
|
||||
[];
|
||||
43
src/babel/transformation/transformers/es6/proxies.js
Normal file
43
src/babel/transformation/transformers/es6/proxies.js
Normal file
@ -0,0 +1,43 @@
|
||||
import * as t from "../../../types";
|
||||
|
||||
export var metadata = {
|
||||
optional: true
|
||||
};
|
||||
|
||||
// foo.bar
|
||||
export function MemberExpression(node) {
|
||||
|
||||
}
|
||||
|
||||
// Object.setPrototypeOf
|
||||
// Object.preventExtensions
|
||||
// Object.keys
|
||||
// Object.isExtensible
|
||||
// Object.getOwnPropertyDescriptor
|
||||
// Object.defineProperty
|
||||
export function CallExpression(node) {
|
||||
|
||||
}
|
||||
|
||||
// delete foo.bar
|
||||
export function UnaryExpression(node) {
|
||||
|
||||
}
|
||||
|
||||
// foo in bar
|
||||
export function BinaryExpression(node) {
|
||||
|
||||
}
|
||||
|
||||
export function AssignmentExpression(node) {
|
||||
|
||||
}
|
||||
|
||||
// new Proxy
|
||||
export function NewExpression(node, parent, scope, file) {
|
||||
if (this.get("callee").isIdentifier({ name: "Proxy" })) {
|
||||
return t.callExpression(file.addHelper("proxy-create"), [node.arguments[0], file.addHelper("proxy-directory")]);
|
||||
} else {
|
||||
// possible proxy constructor
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,7 @@ export default {
|
||||
"es7.classProperties": require("./es7/class-properties"),
|
||||
"es7.asyncFunctions": require("./es7/async-functions"),
|
||||
"es7.decorators": require("./es7/decorators"),
|
||||
"es6.proxies": require("./es6/proxies"),
|
||||
|
||||
strict: require("./other/strict"),
|
||||
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
var proxied = function(){};
|
||||
var passed = false;
|
||||
var host = {
|
||||
method: new Proxy(proxied, {
|
||||
apply: function (t, thisArg, args) {
|
||||
passed = t === proxied && thisArg === host && args + "" === "foo,bar";
|
||||
}
|
||||
})
|
||||
};
|
||||
host.method("foo", "bar");
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,9 @@
|
||||
var proxied = function(){};
|
||||
var passed = false;
|
||||
new new Proxy(proxied, {
|
||||
construct: function (t, args) {
|
||||
passed = t === proxied && args + "" === "foo,bar";
|
||||
return {};
|
||||
}
|
||||
})("foo","bar");
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,13 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
Object.defineProperty(
|
||||
new Proxy(proxied, {
|
||||
defineProperty: function (t, k, d) {
|
||||
passed = t === proxied && k === "foo" && d.value === 5;
|
||||
return true;
|
||||
}
|
||||
}),
|
||||
"foo",
|
||||
{ value: 5, configurable: true }
|
||||
);
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,8 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
delete new Proxy(proxied, {
|
||||
deleteProperty: function (t, k) {
|
||||
passed = t === proxied && k === "foo";
|
||||
}
|
||||
}).foo;
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,13 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
for (var i in
|
||||
new Proxy(proxied, {
|
||||
enumerate: function (t) {
|
||||
passed = t === proxied;
|
||||
return {
|
||||
next: function(){ return { done: true, value: null };}
|
||||
};
|
||||
}
|
||||
})
|
||||
) { }
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,7 @@
|
||||
var proxied = { };
|
||||
var proxy = Object.create(new Proxy(proxied, {
|
||||
get: function (t, k, r) {
|
||||
return t === proxied && k === "foo" && r === proxy && 5;
|
||||
}
|
||||
}));
|
||||
assert.equal(proxy.foo, 5);
|
||||
@ -0,0 +1,7 @@
|
||||
var proxied = {};
|
||||
var proxy = new Proxy(proxied, {
|
||||
get: function (t, k, r) {
|
||||
return t === proxied && k === "foo" && r === proxy && 5;
|
||||
}
|
||||
});
|
||||
assert.equal(proxy.foo, 5);
|
||||
@ -0,0 +1,14 @@
|
||||
var proxied = {};
|
||||
var fakeDesc = { value: "foo", configurable: true };
|
||||
var returnedDesc = Object.getOwnPropertyDescriptor(
|
||||
new Proxy(proxied, {
|
||||
getOwnPropertyDescriptor: function (t, k) {
|
||||
return t === proxied && k === "foo" && fakeDesc;
|
||||
}
|
||||
}),
|
||||
"foo"
|
||||
);
|
||||
assert.equal(returnedDesc.value, fakeDesc.value);
|
||||
assert.equal(returnedDesc.configurable, fakeDesc.configurable);
|
||||
assert.equal(returnedDesc.writable, false);
|
||||
assert.equal(returnedDesc.enumerable, false);
|
||||
@ -0,0 +1,8 @@
|
||||
var proxied = {};
|
||||
var fakeProto = {};
|
||||
var proxy = new Proxy(proxied, {
|
||||
getPrototypeOf: function (t) {
|
||||
return t === proxied && fakeProto;
|
||||
}
|
||||
});
|
||||
assert.equal(Object.getPrototypeOf(proxy), fakeProto);
|
||||
@ -0,0 +1,8 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
"foo" in Object.create(new Proxy(proxied, {
|
||||
has: function (t, k) {
|
||||
passed = t === proxied && k === "foo";
|
||||
}
|
||||
}));
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,8 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
"foo" in new Proxy(proxied, {
|
||||
has: function (t, k) {
|
||||
passed = t === proxied && k === "foo";
|
||||
}
|
||||
});
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,10 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
Object.isExtensible(
|
||||
new Proxy(proxied, {
|
||||
isExtensible: function (t) {
|
||||
passed = t === proxied; return true;
|
||||
}
|
||||
})
|
||||
);
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"optional": ["es6.proxies"]
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
Object.keys(
|
||||
new Proxy(proxied, {
|
||||
ownKeys: function (t) {
|
||||
passed = t === proxied; return [];
|
||||
}
|
||||
})
|
||||
);
|
||||
assert.ok(passed);
|
||||
|
||||
@ -0,0 +1,12 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
Object.preventExtensions(
|
||||
new Proxy(proxied, {
|
||||
preventExtensions: function (t) {
|
||||
passed = t === proxied;
|
||||
return Object.preventExtensions(proxied);
|
||||
}
|
||||
})
|
||||
);
|
||||
assert.ok(passed);
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
var proxy = Object.create(new Proxy(proxied, {
|
||||
set: function (t, k, v, r) {
|
||||
passed = t === proxied && k + v === "foobar" && r === proxy;
|
||||
}
|
||||
}));
|
||||
proxy.foo = "bar";
|
||||
assert.ok(passed);
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
var proxied = {};
|
||||
var passed = false;
|
||||
var proxy = new Proxy(proxied, {
|
||||
set: function (t, k, v, r) {
|
||||
passed = t === proxied && k + v === "foobar" && r === proxy;
|
||||
}
|
||||
});
|
||||
proxy.foo = "bar";
|
||||
assert.ok(passed);
|
||||
@ -0,0 +1,13 @@
|
||||
var proxied = {};
|
||||
var newProto = {};
|
||||
var passed = false;
|
||||
Object.setPrototypeOf(
|
||||
new Proxy(proxied, {
|
||||
setPrototypeOf: function (t, p) {
|
||||
passed = t === proxied && p === newProto;
|
||||
return true;
|
||||
}
|
||||
}),
|
||||
newProto
|
||||
);
|
||||
assert.ok(passed);
|
||||
Loading…
x
Reference in New Issue
Block a user