@tdb/util
Version:
Shared helpers and utilities.
57 lines • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var Cookie = require("js-cookie");
var value_1 = require("../value/value");
var events_rx_1 = require("./events.rx");
function prop(key, defaultOptions) {
if (defaultOptions === void 0) { defaultOptions = {}; }
var func = function (value, options) {
if (options === void 0) { options = {}; }
var args = tslib_1.__assign({}, defaultOptions, options);
return value === undefined
? getValue(key, args)
: setValue(key, value, args);
};
var result = func;
result.key = key;
result.isProp = true;
result.options = defaultOptions;
return result;
}
exports.prop = prop;
function getValue(key, options) {
var ctx = options.ctx;
var cookies = (ctx && ctx.req && ctx.req.cookies) || Cookie.getJSON() || {};
var value = cookies[key];
if (key.includes('/')) {
throw new Error("Cookie keys cannot contain \"/\" character. Given key: \"" + key + "\".");
}
if (value_1.isJson(value)) {
try {
value = JSON.parse(value);
}
catch (error) {
}
}
if (value === undefined && options.default !== undefined) {
value = options.default;
}
return value;
}
function setValue(key, value, options) {
var fireEvent = function (action, value) {
events_rx_1.subject$.next({ key: key, value: value, action: action });
return value;
};
if (value === null) {
Cookie.remove(key);
return fireEvent('DELETE');
}
else {
var expires = options.expires, path = options.path, domain = options.domain, secure = options.isSecure;
Cookie.set(key, value, { expires: expires, path: path, domain: domain, secure: secure });
return fireEvent('UPDATE', getValue(key, options));
}
}
//# sourceMappingURL=prop.js.map