UNPKG

@tdb/util

Version:
108 lines 3.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var libs_1 = require("../../libs"); var store_web_1 = require("./store.web"); var events_rx_1 = require("./events.rx"); var store = store_web_1.init(); function asTypeName(value) { if (value === null) { return 'null'; } if (libs_1.R.is(Boolean, value)) { return 'bool'; } if (libs_1.R.is(String, value)) { return 'string'; } if (libs_1.R.is(Number, value)) { return 'number'; } if (libs_1.R.is(Boolean, value)) { return 'bool'; } if (libs_1.R.is(Date, value)) { return 'date'; } return 'object'; } function toValue(key, json) { try { return parse(json); } catch (error) { throw new Error("Failed to read '" + key + "' from storage. The value '" + json + "' cannot be parsed."); } } function parse(json) { if (!json) { return json; } var item = JSON.parse(json); switch (item.type) { case 'null': case 'bool': case 'string': return item.value; case 'number': return parseFloat(item.value); case 'date': return new Date(item.value); case 'object': return item.value; default: } } exports.parse = parse; function prop(key, defaultOptions) { if (defaultOptions === void 0) { defaultOptions = {}; } function func(value, options) { if (options === void 0) { options = {}; } return tslib_1.__awaiter(this, void 0, void 0, function () { var args, result, fireEvent, storageValue, json; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: args = tslib_1.__assign({}, defaultOptions, options); result = value; fireEvent = function () { events_rx_1.subject$.next({ key: key, value: value, type: asTypeName(value), }); }; if (!(value === null)) return [3, 2]; return [4, store.removeItem(key)]; case 1: _a.sent(); fireEvent(); return [3, 6]; case 2: if (!(value !== undefined)) return [3, 4]; storageValue = { value: value, type: asTypeName(value), }; return [4, store.setItem(key, JSON.stringify(storageValue))]; case 3: _a.sent(); fireEvent(); return [3, 6]; case 4: return [4, store.getItem(key)]; case 5: json = _a.sent(); result = json ? toValue(key, json) : undefined; _a.label = 6; case 6: return [2, result === undefined ? args.default : result]; } }); }); } var result = func; result.key = key; result.isProp = true; return result; } exports.prop = prop; //# sourceMappingURL=prop.js.map