UNPKG

scichart

Version:

Fast WebGL JavaScript Charting Library and Framework

139 lines (138 loc) 6.23 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createWasmContextRevocableProxy = exports.WasmContextProxyHandler = exports.WasmObjectConstructorProxyHandler = exports.DeletableEntityProxyHandler = exports.DeletableEntity = exports.createTrackableProxy = void 0; var MemoryUsageHelper_1 = require("../utils/MemoryUsageHelper"); /** @ignore */ var createTrackableProxy = function (target, isWasmObject) { if (isWasmObject === void 0) { isWasmObject = false; } var disposableEntityId = (0, MemoryUsageHelper_1.generateIdentifier)(target); var revocableToken = Proxy.revocable(target, new DeletableEntityProxyHandler(disposableEntityId)); MemoryUsageHelper_1.MemoryUsageHelper.objectRegistry.add(target, disposableEntityId, { proxy: revocableToken.proxy, revocableToken: revocableToken, isWasmObject: isWasmObject }); return revocableToken.proxy; }; exports.createTrackableProxy = createTrackableProxy; /** Utility class responsible for adding its instance to {@link MemoryUsageHelper.objectRegistry} when Memory Usage Debug Mode is enabled * @remarks * It wraps the returned instance into a proxy object, so internal reference comparisons may fail * */ var DeletableEntity = /** @class */ (function () { function DeletableEntity(entity) { try { if (process.env.NODE_ENV !== "production") { if (MemoryUsageHelper_1.MemoryUsageHelper.isMemoryUsageDebugEnabled) { var target = entity !== null && entity !== void 0 ? entity : this; return (0, exports.createTrackableProxy)(target, false); } } } catch (err) { console.warn("Error while creating an object proxy: ".concat(err, " ")); } } return DeletableEntity; }()); exports.DeletableEntity = DeletableEntity; /** @ignore */ var DeletableEntityProxyHandler = /** @class */ (function () { function DeletableEntityProxyHandler(id) { this.disposableEntityId = id; } DeletableEntityProxyHandler.prototype.construct = function (real, constructParams) { console.warn("construct called on Deletable", this.disposableEntityId); return real; }; DeletableEntityProxyHandler.prototype.apply = function (target, thisArg, argArray) { console.warn("apply called on Deletable", this.disposableEntityId); }; DeletableEntityProxyHandler.prototype.get = function (constructedEntity, propertyName, receiver) { var _this = this; if (propertyName === "delete") { return function () { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } var removedSuccessfully = MemoryUsageHelper_1.MemoryUsageHelper.objectRegistry.remove(_this.disposableEntityId); if (!removedSuccessfully) { console.warn("Failed to remove ".concat(_this.disposableEntityId, " from the Object Registry Probably it has been already deleted!")); } return constructedEntity[propertyName].apply(constructedEntity, params); }; } return constructedEntity[propertyName]; }; return DeletableEntityProxyHandler; }()); exports.DeletableEntityProxyHandler = DeletableEntityProxyHandler; /** @ignore */ var WasmObjectConstructorProxyHandler = /** @class */ (function () { function WasmObjectConstructorProxyHandler() { } WasmObjectConstructorProxyHandler.prototype.construct = function (targetFunction, constructParams, newTarget) { var realConstructedEntity = new (targetFunction.bind.apply(targetFunction, __spreadArray([void 0], constructParams, false)))(); //TODO check if DeletableEntityWrapper return (0, exports.createTrackableProxy)(realConstructedEntity, true); }; return WasmObjectConstructorProxyHandler; }()); exports.WasmObjectConstructorProxyHandler = WasmObjectConstructorProxyHandler; // https://stackoverflow.com/a/48036194 var handler = { construct: function () { return handler; } }; //Must return ANY object, so reuse one var isConstructor = function (someObj) { try { return !!new new Proxy(someObj, handler)(); } catch (e) { return false; } }; /** @ignore */ var WasmContextProxyHandler = /** @class */ (function () { function WasmContextProxyHandler() { this.constructorProxyHandler = new WasmObjectConstructorProxyHandler(); } WasmContextProxyHandler.prototype.get = function (target, name, receiver) { var originalExposedProperty = target[name]; var isNativeObjectConstructor = isConstructor(originalExposedProperty); if (isNativeObjectConstructor) { return new Proxy(originalExposedProperty, this.constructorProxyHandler); } return originalExposedProperty; }; return WasmContextProxyHandler; }()); exports.WasmContextProxyHandler = WasmContextProxyHandler; /** @ignore */ var createWasmContextRevocableProxy = function (wasmContext, id) { MemoryUsageHelper_1.MemoryUsageHelper.register(wasmContext, "wasmContext_".concat(id)); var proxyHandler = {}; try { if (process.env.NODE_ENV !== "production") { if (MemoryUsageHelper_1.MemoryUsageHelper.isMemoryUsageDebugEnabled) { proxyHandler = new WasmContextProxyHandler(); } } } catch (err) { console.warn(err); } return Proxy.revocable(wasmContext, proxyHandler); }; exports.createWasmContextRevocableProxy = createWasmContextRevocableProxy;