lazy-helpers.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { __read, __spread } from "tslib";
  2. var DelayedConstructor = (function () {
  3. function DelayedConstructor(wrap) {
  4. this.wrap = wrap;
  5. this.reflectMethods = [
  6. "get",
  7. "getPrototypeOf",
  8. "setPrototypeOf",
  9. "getOwnPropertyDescriptor",
  10. "defineProperty",
  11. "has",
  12. "set",
  13. "deleteProperty",
  14. "apply",
  15. "construct",
  16. "ownKeys"
  17. ];
  18. }
  19. DelayedConstructor.prototype.createProxy = function (createObject) {
  20. var _this = this;
  21. var target = {};
  22. var init = false;
  23. var value;
  24. var delayedObject = function () {
  25. if (!init) {
  26. value = createObject(_this.wrap());
  27. init = true;
  28. }
  29. return value;
  30. };
  31. return new Proxy(target, this.createHandler(delayedObject));
  32. };
  33. DelayedConstructor.prototype.createHandler = function (delayedObject) {
  34. var handler = {};
  35. var install = function (name) {
  36. handler[name] = function () {
  37. var args = [];
  38. for (var _i = 0; _i < arguments.length; _i++) {
  39. args[_i] = arguments[_i];
  40. }
  41. args[0] = delayedObject();
  42. var method = Reflect[name];
  43. return method.apply(void 0, __spread(args));
  44. };
  45. };
  46. this.reflectMethods.forEach(install);
  47. return handler;
  48. };
  49. return DelayedConstructor;
  50. }());
  51. export { DelayedConstructor };
  52. export function delay(wrappedConstructor) {
  53. if (typeof wrappedConstructor === "undefined") {
  54. throw new Error("Attempt to `delay` undefined. Constructor must be wrapped in a callback");
  55. }
  56. return new DelayedConstructor(wrappedConstructor);
  57. }