diff --git a/src/observable/map/LogMap.js b/src/observable/map/LogMap.js deleted file mode 100644 index 1beb4846..00000000 --- a/src/observable/map/LogMap.js +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2020 Bruno Windels - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import {BaseObservableMap} from "./BaseObservableMap"; - -export class LogMap extends BaseObservableMap { - constructor(source, log) { - super(); - this._source = source; - this.log = log; - this._subscription = null; - } - - onAdd(key, value) { - this.log("add", key, value); - this.emitAdd(key, value); - } - - onRemove(key, value) { - this.log("remove", key, value); - this.emitRemove(key, value); - } - - onUpdate(key, value, params) { - this.log("update", key, value, params); - this.emitUpdate(key, value, params); - } - - onSubscribeFirst() { - this.log("subscribeFirst"); - this._subscription = this._source.subscribe(this); - super.onSubscribeFirst(); - } - - onUnsubscribeLast() { - super.onUnsubscribeLast(); - this._subscription = this._subscription(); - this.log("unsubscribeLast"); - } - - onReset() { - this.log("reset"); - this.emitReset(); - } - - [Symbol.iterator]() { - return this._source[Symbol.iterator](); - } - - get size() { - return this._source.size; - } - - get(key) { - return this._source.get(key); - } -} diff --git a/src/observable/map/LogMap.ts b/src/observable/map/LogMap.ts new file mode 100644 index 00000000..988aa71b --- /dev/null +++ b/src/observable/map/LogMap.ts @@ -0,0 +1,104 @@ +/* +Copyright 2020 Bruno Windels + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {BaseObservableMap, BaseObservableMapConfig} from "./BaseObservableMap"; +import {config} from "./config"; +import {FilteredMap} from "./FilteredMap.js"; +import {MappedMap} from "./MappedMap.js"; +import {JoinedMap} from "./JoinedMap.js"; +import {SortedMapList} from "../list/SortedMapList.js"; +import {SubscriptionHandle} from "../BaseObservable" +import {ILogItem, LabelOrValues} from "../../logging/types"; +import {LogLevel} from "../../logging/LogFilter"; + +export class LogMap extends BaseObservableMap { + private _source: BaseObservableMap; + private _subscription?: SubscriptionHandle; + private _log: ILogItem; + private _config: BaseObservableMapConfig + + + constructor(source: BaseObservableMap, log: ILogItem) { + super(); + this._source = source; + this._log = log; + this._config = config(); + } + + join(...otherMaps: Array): JoinedMap { + return this._config.join(this, ...otherMaps); + } + + mapValues(mapper: any, updater?: (params: any) => void): MappedMap { + return this._config.mapValues(this, mapper, updater); + } + + sortValues(comparator?: (a: any, b: any) => number): SortedMapList { + return this._config.sortValues(this, comparator); + } + + filterValues(filter: (v: V, k: K) => boolean): FilteredMap { + return this._config.filterValues(this, filter); + } + + private log(labelOrValues: LabelOrValues, logLevel?: LogLevel): ILogItem { + return this._log.log(labelOrValues, logLevel); + } + + onAdd(key: K, value: V) { + this.log("add " + JSON.stringify({key, value})); + this.emitAdd(key, value); + } + + onRemove(key: K, value: V) { + this.log("remove " + JSON.stringify({key, value})); + this.emitRemove(key, value); + } + + onUpdate(key: K, value: V, params: any) { + this.log("update" + JSON.stringify({key, value, params})); + this.emitUpdate(key, value, params); + } + + onSubscribeFirst() { + this.log("subscribeFirst"); + this._subscription = this._source.subscribe(this); + super.onSubscribeFirst(); + } + + onUnsubscribeLast() { + super.onUnsubscribeLast(); + if (this._subscription) this._subscription = this._subscription(); + this.log("unsubscribeLast"); + } + + onReset() { + this.log("reset"); + this.emitReset(); + } + + [Symbol.iterator]() { + return this._source[Symbol.iterator](); + } + + get size() { + return this._source.size; + } + + get(key: K) { + return this._source.get(key); + } +}