58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
|
import { __read, __spread } from "tslib";
|
||
|
var DelayedConstructor = (function () {
|
||
|
function DelayedConstructor(wrap) {
|
||
|
this.wrap = wrap;
|
||
|
this.reflectMethods = [
|
||
|
"get",
|
||
|
"getPrototypeOf",
|
||
|
"setPrototypeOf",
|
||
|
"getOwnPropertyDescriptor",
|
||
|
"defineProperty",
|
||
|
"has",
|
||
|
"set",
|
||
|
"deleteProperty",
|
||
|
"apply",
|
||
|
"construct",
|
||
|
"ownKeys"
|
||
|
];
|
||
|
}
|
||
|
DelayedConstructor.prototype.createProxy = function (createObject) {
|
||
|
var _this = this;
|
||
|
var target = {};
|
||
|
var init = false;
|
||
|
var value;
|
||
|
var delayedObject = function () {
|
||
|
if (!init) {
|
||
|
value = createObject(_this.wrap());
|
||
|
init = true;
|
||
|
}
|
||
|
return value;
|
||
|
};
|
||
|
return new Proxy(target, this.createHandler(delayedObject));
|
||
|
};
|
||
|
DelayedConstructor.prototype.createHandler = function (delayedObject) {
|
||
|
var handler = {};
|
||
|
var install = function (name) {
|
||
|
handler[name] = function () {
|
||
|
var args = [];
|
||
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||
|
args[_i] = arguments[_i];
|
||
|
}
|
||
|
args[0] = delayedObject();
|
||
|
var method = Reflect[name];
|
||
|
return method.apply(void 0, __spread(args));
|
||
|
};
|
||
|
};
|
||
|
this.reflectMethods.forEach(install);
|
||
|
return handler;
|
||
|
};
|
||
|
return DelayedConstructor;
|
||
|
}());
|
||
|
export { DelayedConstructor };
|
||
|
export function delay(wrappedConstructor) {
|
||
|
if (typeof wrappedConstructor === "undefined") {
|
||
|
throw new Error("Attempt to `delay` undefined. Constructor must be wrapped in a callback");
|
||
|
}
|
||
|
return new DelayedConstructor(wrappedConstructor);
|
||
|
}
|