UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

71 lines (70 loc) 3.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createObservableProxy = void 0; var create_multicast_replay_last_source_1 = require("../observer-observable-pair/build-in/source/built-in/replay-last-source/derived/create-multicast-replay-last-source.cjs"); var pipe_observable_1 = require("../observable/helpers/piping/pipe-observable/pipe-observable.cjs"); var map_observable_pipe_1 = require("../observable/pipes/built-in/without-notifications/observer-pipe-related/map/map-observable-pipe.cjs"); var get_object_property_path_value_1 = require("../misc/helpers/property-path/get-object-property-path-value.cjs"); function createObservableProxy(data, path) { if (path === void 0) { path = []; } var cachedSubscribe; var cachedSourcesForArray = []; var cachedProxiesForArray = []; var cachedSubscribeArray; var cachedProxies = new Map(); return new Proxy(Object.create(null), { get: function (target, propertyKey) { if (propertyKey === '$') { if (cachedSubscribe === void 0) { cachedSubscribe = (0, pipe_observable_1.pipeObservable)(data, [(0, map_observable_pipe_1.mapObservablePipe)(function (data) { return (0, get_object_property_path_value_1.getOptionalObjectPropertyPathValue)(data, path); })]); } return cachedSubscribe; } else if (propertyKey === '$array') { if (cachedSubscribeArray === void 0) { cachedSubscribeArray = (0, pipe_observable_1.pipeObservable)(data, [(0, map_observable_pipe_1.mapObservablePipe)(function (data) { var items = (0, get_object_property_path_value_1.getObjectPropertyPathValue)(data, path); if (Array.isArray(items)) { var itemsLength = items.length; var cachedProxiesForArrayLength = cachedProxiesForArray.length; if (cachedProxiesForArrayLength < itemsLength) { cachedSourcesForArray.length = itemsLength; cachedProxiesForArray.length = itemsLength; for (var i = cachedProxiesForArrayLength; i < itemsLength; i++) { var source = (0, create_multicast_replay_last_source_1.createMulticastReplayLastSource)({ initialValue: items[i] }); cachedSourcesForArray[i] = source.emit; cachedProxiesForArray[i] = createObservableProxy(source.subscribe); } } for (var i = 0; i < itemsLength; i++) { cachedSourcesForArray[i](items[i]); } return cachedProxiesForArray; } else { throw new Error("Not an array"); } })]); } return cachedSubscribeArray; } else { var cachedProxy = cachedProxies.get(propertyKey); if (cachedProxy === void 0) { cachedProxy = createObservableProxy(data, path.concat(propertyKey)); cachedProxies.set(propertyKey, cachedProxy); } return cachedProxy; } }, set: function () { throw new Error("The proxy is readonly"); } }); } exports.createObservableProxy = createObservableProxy;