{"code":"import * as tslib_1 from \"tslib\";\r\nimport { Observable, BehaviorSubject } from \"rxjs/Rx\";\r\nimport { DataRecord } from \"@void-zero/core\";\r\nimport { LocalStorage } from \"@void-zero/storage\";\r\nimport { reduceObjectToSortedID } from \"@void-zero/utilities\";\r\nvar INITIAL_DATA_LOADER_CONFIG = {\r\n    name: \"V0ID_DATALOADER\",\r\n    hasLocal: false\r\n};\r\nvar DataLoader = /** @class */ (function () {\r\n    function DataLoader(config) {\r\n        this._maxCacheLife = 30000;\r\n        this._itemMap = new Map();\r\n        this._itemMultipleMap = new Map();\r\n        this._allItems = new BehaviorSubject([]);\r\n        config = tslib_1.__assign({}, INITIAL_DATA_LOADER_CONFIG, config);\r\n        this.dataType = config.dataType;\r\n        this.hasLocal = config.hasLocal;\r\n        this.hasSingleLocal = (typeof config.hasSingleLocal == \"boolean\" ? config.hasSingleLocal : config.hasLocal);\r\n        this.hasMultipleLocal = (typeof config.hasMultipleLocal == \"boolean\" ? config.hasMultipleLocal : config.hasLocal);\r\n        this._load = config.load;\r\n        this._loadMultiple = config.loadMultiple;\r\n        this._localStore = new LocalStorage(config.name);\r\n    }\r\n    DataLoader.prototype.fetchSingle = function (id) {\r\n        var _this = this;\r\n        var isLocalItemAvailable = this.hasSingleLocal ? this._localStore.contains(id) : false;\r\n        var cachedItem = this._itemMap.get(id);\r\n        if (isLocalItemAvailable && !cachedItem) {\r\n            var localItemData = this._localStore.read(id);\r\n            if (this.dataType) {\r\n                localItemData = new this.dataType(localItemData);\r\n            }\r\n            var record = new DataRecord(localItemData);\r\n            this._itemMap.set(id, record);\r\n            cachedItem = record;\r\n        }\r\n        if (cachedItem) {\r\n            var created = cachedItem.created.valueOf();\r\n            var now = new Date().valueOf();\r\n            if (created + this._maxCacheLife > now) {\r\n                return Observable.create(function (observer) {\r\n                    return observer.next(cachedItem.data);\r\n                });\r\n            }\r\n        }\r\n        var loader = this._load(id);\r\n        loader.take(1).subscribe(function (item) {\r\n            _this._itemMap.set(id, new DataRecord(item));\r\n            _this._localStore.write(id, item);\r\n        });\r\n        return loader;\r\n    };\r\n    DataLoader.prototype.fetchMultiple = function (options) {\r\n        var _this = this;\r\n        var loaderOptions = options;\r\n        var loadID = DataLoader.reduceOptionsToID(options);\r\n        var cachedItem = this._itemMultipleMap.get(loadID);\r\n        if (cachedItem) {\r\n            var created = cachedItem.created.valueOf();\r\n            var now = new Date().valueOf();\r\n            if (created + this._maxCacheLife > now) {\r\n                return Observable.create(function (observer) {\r\n                    return observer.next(cachedItem.data);\r\n                });\r\n            }\r\n        }\r\n        var loader = this._loadMultiple(options);\r\n        loader.take(1).subscribe(function (items) {\r\n            _this._itemMultipleMap.set(loadID, new DataRecord(items));\r\n        });\r\n        return loader;\r\n    };\r\n    DataLoader.reduceOptionsToID = function (options) {\r\n        var copy = tslib_1.__assign({}, options);\r\n        copy.params = \"[\" + reduceObjectToSortedID(copy.params) + \"]\";\r\n        return reduceObjectToSortedID(copy);\r\n    };\r\n    return DataLoader;\r\n}());\r\nexport { DataLoader };\r\n//# sourceMappingURL=data-loader.js.map","map":{"version":3,"file":"data-loader.js","sourceRoot":"/Users/austinlaverty/Projects/personal/web/libraries/V0ID/src/network/src/","sources":["data-loader.ts"],"names":[],"mappings":"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"},"dts":{"name":"/Users/austinlaverty/Projects/personal/web/libraries/V0ID/src/network/data-loader.d.ts","text":"import { Observable } from \"rxjs/Rx\";\r\nimport { ID } from \"@void-zero/types\";\r\nexport interface DataLoaderConfig {\r\n    name: string;\r\n    dataType?: any;\r\n    load?: any;\r\n    loadMultiple?: any;\r\n    hasLocal?: boolean;\r\n    hasSingleLocal?: boolean;\r\n    hasMultipleLocal?: boolean;\r\n}\r\nexport interface DataLoaderOptions {\r\n    params?: any;\r\n    from?: number;\r\n    to?: number;\r\n    willCache?: boolean;\r\n    fromCache?: boolean;\r\n}\r\nexport declare class DataLoader<T, O> {\r\n    readonly dataType: any;\r\n    readonly hasLocal: boolean;\r\n    hasSingleLocal?: boolean;\r\n    hasMultipleLocal?: boolean;\r\n    private _localStore;\r\n    private _maxCacheLife;\r\n    private _itemMap;\r\n    private _itemMultipleMap;\r\n    private _allItems;\r\n    private _load;\r\n    private _loadMultiple;\r\n    constructor(config: DataLoaderConfig);\r\n    fetchSingle(id: ID): Observable<T>;\r\n    fetchMultiple(options: O): Observable<T[]>;\r\n    static reduceOptionsToID(options: any): ID;\r\n}\r\n"}}
