add proxies
This commit is contained in:
parent
070152f6c1
commit
0995cc3f4e
@ -85,6 +85,8 @@ export default class File {
|
|||||||
"default-props"
|
"default-props"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
"proxy-create",
|
||||||
|
"proxy-directory"
|
||||||
static options = require("./options");
|
static options = require("./options");
|
||||||
|
|
||||||
normalizeOptions(opts: Object) {
|
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.classProperties": require("./es7/class-properties"),
|
||||||
"es7.asyncFunctions": require("./es7/async-functions"),
|
"es7.asyncFunctions": require("./es7/async-functions"),
|
||||||
"es7.decorators": require("./es7/decorators"),
|
"es7.decorators": require("./es7/decorators"),
|
||||||
|
"es6.proxies": require("./es6/proxies"),
|
||||||
|
|
||||||
strict: require("./other/strict"),
|
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