ngx-webstorage-service
Version:
Angular service wrappers for the webstorage API
84 lines • 10.1 kB
JavaScript
/** Transcoder that encodes values as JSON strings. */
export class JsonStorageTranscoder {
encode(value) {
return JSON.stringify(value);
}
decode(value) {
try {
return JSON.parse(value);
}
catch (error) {
return undefined;
}
}
}
/** Transcoder that encodes/decodes strings **as is**, i.e. values are not modified in any way. */
export class StringStorageTranscoder {
encode(value) {
return value;
}
decode(value) {
return value;
}
}
/** Transcoder that encodes/decodes `boolean` values. */
export class BooleanStorageTranscoder {
encode(value) {
return value.toString();
}
decode(value) {
if (value === 'true') {
return true;
}
if (value === 'false') {
return false;
}
return undefined;
}
}
/** Transcoder that encodes/decodes `number` values. */
export class NumberStorageTranscoder {
encode(value) {
return value.toString();
}
decode(value) {
const parsedNumber = Number(value);
return Number.isFinite(parsedNumber) ? parsedNumber : undefined;
}
}
/** Transcoder that encodes/decodes `Date` values to ISO strings. */
export class DateIsoStorageTranscoder {
encode(value) {
return value.toISOString();
}
decode(value) {
const timestamp = Date.parse(value);
return isNaN(timestamp) ? undefined : new Date(timestamp);
}
}
/** Transcoder that encodes/decodes `Date` values to epoch timestamps. */
export class DateEpochStorageTranscoder {
encode(value) {
return value.valueOf().toString();
}
decode(value) {
const timestamp = parseInt(value, 10);
return isNaN(timestamp) ? undefined : new Date(timestamp);
}
}
/** A set of storage transcoders. */
export const StorageTranscoders = {
/** Transcoder that encodes values as JSON strings. */
JSON: new JsonStorageTranscoder(),
/** Transcoder that encodes/decodes strings **as is**, i.e. values are not modified in any way. */
STRING: new StringStorageTranscoder(),
/** Transcoder that encodes/decodes `boolean` values. */
BOOLEAN: new BooleanStorageTranscoder(),
/** Transcoder that encodes/decodes `number` values. */
NUMBER: new NumberStorageTranscoder(),
/** Transcoder that encodes/decodes `Date` values into ISO strings. */
DATE_ISO_STRING: new DateIsoStorageTranscoder(),
/** Transcoder that encodes/decodes `Date` values into epoch timestamps. */
DATE_EPOCH_TIME: new DateEpochStorageTranscoder(),
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS10cmFuc2NvZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9zcmMvc3RvcmFnZS10cmFuc2NvZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxzREFBc0Q7QUFDdEQsTUFBTSxPQUFPLHFCQUFxQjtJQUV2QixNQUFNLENBQUMsS0FBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFhO1FBQ3ZCLElBQUk7WUFDQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztDQUVKO0FBRUQsa0dBQWtHO0FBQ2xHLE1BQU0sT0FBTyx1QkFBdUI7SUFDekIsTUFBTSxDQUFDLEtBQWE7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQUVELHdEQUF3RDtBQUN4RCxNQUFNLE9BQU8sd0JBQXdCO0lBQzFCLE1BQU0sQ0FBQyxLQUFjO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBYTtRQUN2QixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQUVELHVEQUF1RDtBQUN2RCxNQUFNLE9BQU8sdUJBQXVCO0lBQ3pCLE1BQU0sQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBYTtRQUN2QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRSxDQUFDO0NBQ0o7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLHdCQUF3QjtJQUMxQixNQUFNLENBQUMsS0FBVztRQUNyQixPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWE7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0o7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxPQUFPLDBCQUEwQjtJQUM1QixNQUFNLENBQUMsS0FBVztRQUNyQixPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWE7UUFDdkIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV0QyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0o7QUFFRCxvQ0FBb0M7QUFDcEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsc0RBQXNEO0lBQ3RELElBQUksRUFBRSxJQUFJLHFCQUFxQixFQUE0QjtJQUUzRCxrR0FBa0c7SUFDbEcsTUFBTSxFQUFFLElBQUksdUJBQXVCLEVBQStCO0lBRWxFLHdEQUF3RDtJQUN4RCxPQUFPLEVBQUUsSUFBSSx3QkFBd0IsRUFBZ0M7SUFFckUsdURBQXVEO0lBQ3ZELE1BQU0sRUFBRSxJQUFJLHVCQUF1QixFQUErQjtJQUVsRSxzRUFBc0U7SUFDdEUsZUFBZSxFQUFFLElBQUksd0JBQXdCLEVBQTZCO0lBRTFFLDJFQUEyRTtJQUMzRSxlQUFlLEVBQUUsSUFBSSwwQkFBMEIsRUFBNkI7Q0FDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JhZ2VUcmFuc2NvZGVyIH0gZnJvbSAnLi9zdG9yYWdlLXRyYW5zY29kZXInO1xuXG4vKiogVHJhbnNjb2RlciB0aGF0IGVuY29kZXMgdmFsdWVzIGFzIEpTT04gc3RyaW5ncy4gKi9cbmV4cG9ydCBjbGFzcyBKc29uU3RvcmFnZVRyYW5zY29kZXIgaW1wbGVtZW50cyBTdG9yYWdlVHJhbnNjb2Rlcjxhbnk+IHtcblxuICAgIHB1YmxpYyBlbmNvZGUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlY29kZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuLyoqIFRyYW5zY29kZXIgdGhhdCBlbmNvZGVzL2RlY29kZXMgc3RyaW5ncyAqKmFzIGlzKiosIGkuZS4gdmFsdWVzIGFyZSBub3QgbW9kaWZpZWQgaW4gYW55IHdheS4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdTdG9yYWdlVHJhbnNjb2RlciBpbXBsZW1lbnRzIFN0b3JhZ2VUcmFuc2NvZGVyPHN0cmluZz4ge1xuICAgIHB1YmxpYyBlbmNvZGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb2RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG4vKiogVHJhbnNjb2RlciB0aGF0IGVuY29kZXMvZGVjb2RlcyBgYm9vbGVhbmAgdmFsdWVzLiAqL1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5TdG9yYWdlVHJhbnNjb2RlciBpbXBsZW1lbnRzIFN0b3JhZ2VUcmFuc2NvZGVyPGJvb2xlYW4+IHtcbiAgICBwdWJsaWMgZW5jb2RlKHZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlY29kZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vKiogVHJhbnNjb2RlciB0aGF0IGVuY29kZXMvZGVjb2RlcyBgbnVtYmVyYCB2YWx1ZXMuICovXG5leHBvcnQgY2xhc3MgTnVtYmVyU3RvcmFnZVRyYW5zY29kZXIgaW1wbGVtZW50cyBTdG9yYWdlVHJhbnNjb2RlcjxudW1iZXI+IHtcbiAgICBwdWJsaWMgZW5jb2RlKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb2RlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBwYXJzZWROdW1iZXIgPSBOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkTnVtYmVyKSA/IHBhcnNlZE51bWJlciA6IHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8qKiBUcmFuc2NvZGVyIHRoYXQgZW5jb2Rlcy9kZWNvZGVzIGBEYXRlYCB2YWx1ZXMgdG8gSVNPIHN0cmluZ3MuICovXG5leHBvcnQgY2xhc3MgRGF0ZUlzb1N0b3JhZ2VUcmFuc2NvZGVyIGltcGxlbWVudHMgU3RvcmFnZVRyYW5zY29kZXI8RGF0ZT4ge1xuICAgIHB1YmxpYyBlbmNvZGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb2RlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5wYXJzZSh2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzTmFOKHRpbWVzdGFtcCkgPyB1bmRlZmluZWQgOiBuZXcgRGF0ZSh0aW1lc3RhbXApO1xuICAgIH1cbn1cblxuLyoqIFRyYW5zY29kZXIgdGhhdCBlbmNvZGVzL2RlY29kZXMgYERhdGVgIHZhbHVlcyB0byBlcG9jaCB0aW1lc3RhbXBzLiAqL1xuZXhwb3J0IGNsYXNzIERhdGVFcG9jaFN0b3JhZ2VUcmFuc2NvZGVyIGltcGxlbWVudHMgU3RvcmFnZVRyYW5zY29kZXI8RGF0ZT4ge1xuICAgIHB1YmxpYyBlbmNvZGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWVPZigpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlY29kZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cbiAgICAgICAgcmV0dXJuIGlzTmFOKHRpbWVzdGFtcCkgPyB1bmRlZmluZWQgOiBuZXcgRGF0ZSh0aW1lc3RhbXApO1xuICAgIH1cbn1cblxuLyoqIEEgc2V0IG9mIHN0b3JhZ2UgdHJhbnNjb2RlcnMuICovXG5leHBvcnQgY29uc3QgU3RvcmFnZVRyYW5zY29kZXJzID0ge1xuICAgIC8qKiBUcmFuc2NvZGVyIHRoYXQgZW5jb2RlcyB2YWx1ZXMgYXMgSlNPTiBzdHJpbmdzLiAqL1xuICAgIEpTT046IG5ldyBKc29uU3RvcmFnZVRyYW5zY29kZXIoKSBhcyBTdG9yYWdlVHJhbnNjb2Rlcjxhbnk+LFxuXG4gICAgLyoqIFRyYW5zY29kZXIgdGhhdCBlbmNvZGVzL2RlY29kZXMgc3RyaW5ncyAqKmFzIGlzKiosIGkuZS4gdmFsdWVzIGFyZSBub3QgbW9kaWZpZWQgaW4gYW55IHdheS4gKi9cbiAgICBTVFJJTkc6IG5ldyBTdHJpbmdTdG9yYWdlVHJhbnNjb2RlcigpIGFzIFN0b3JhZ2VUcmFuc2NvZGVyPHN0cmluZz4sXG5cbiAgICAvKiogVHJhbnNjb2RlciB0aGF0IGVuY29kZXMvZGVjb2RlcyBgYm9vbGVhbmAgdmFsdWVzLiAqL1xuICAgIEJPT0xFQU46IG5ldyBCb29sZWFuU3RvcmFnZVRyYW5zY29kZXIoKSBhcyBTdG9yYWdlVHJhbnNjb2Rlcjxib29sZWFuPixcblxuICAgIC8qKiBUcmFuc2NvZGVyIHRoYXQgZW5jb2Rlcy9kZWNvZGVzIGBudW1iZXJgIHZhbHVlcy4gKi9cbiAgICBOVU1CRVI6IG5ldyBOdW1iZXJTdG9yYWdlVHJhbnNjb2RlcigpIGFzIFN0b3JhZ2VUcmFuc2NvZGVyPG51bWJlcj4sXG5cbiAgICAvKiogVHJhbnNjb2RlciB0aGF0IGVuY29kZXMvZGVjb2RlcyBgRGF0ZWAgdmFsdWVzIGludG8gSVNPIHN0cmluZ3MuICovXG4gICAgREFURV9JU09fU1RSSU5HOiBuZXcgRGF0ZUlzb1N0b3JhZ2VUcmFuc2NvZGVyKCkgYXMgU3RvcmFnZVRyYW5zY29kZXI8RGF0ZT4sXG5cbiAgICAvKiogVHJhbnNjb2RlciB0aGF0IGVuY29kZXMvZGVjb2RlcyBgRGF0ZWAgdmFsdWVzIGludG8gZXBvY2ggdGltZXN0YW1wcy4gKi9cbiAgICBEQVRFX0VQT0NIX1RJTUU6IG5ldyBEYXRlRXBvY2hTdG9yYWdlVHJhbnNjb2RlcigpIGFzIFN0b3JhZ2VUcmFuc2NvZGVyPERhdGU+LFxufTtcbiJdfQ==