@tdb/util
Version:
Shared helpers and utilities.
108 lines • 3.51 kB
JavaScript
;
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