UNPKG

@qrsln/utils

Version:
123 lines 17.4 kB
import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; import { DOCUMENT, isPlatformBrowser } from '@angular/common'; import { StorageType } from "./Models"; import * as i0 from "@angular/core"; /** @dynamic */ export class WebStorageService { constructor(document, platformId) { this.document = document; this.platformId = platformId; // console.log('isPlatformBrowser', isPlatformBrowser(this.platformId), this.document); } Set(storageType, key, obj, expMin = 60) { // const expires = new Date(year, month, day, hours, minutes, seconds, milliseconds); const expires = new Date(); expires.setMinutes(expires.getMinutes() + expMin); const data = { ExpiresAt: Date.parse(expires.toString()), Data: obj }; // console.log('Set isPlatformBrowser', isPlatformBrowser(this.platformId), this.document); if (isPlatformBrowser(this.platformId)) { switch (storageType) { case StorageType.Cookie: const expireCookie = 'expires=' + new Date(data.ExpiresAt).toUTCString(); this.SetCookie(key, JSON.stringify(data), expireCookie, '/'); break; case StorageType.Local: localStorage.setItem(key, JSON.stringify(data)); break; case StorageType.Session: sessionStorage.setItem(key, JSON.stringify(data)); break; } } return this.Get(storageType, key); } Get(storageType, key) { // console.log('Get isPlatformBrowser', isPlatformBrowser(this.platformId), this.document); let data = null; if (isPlatformBrowser(this.platformId)) { switch (storageType) { case StorageType.Cookie: data = this.GetCookie(key); break; case StorageType.Local: data = window.localStorage.getItem(key); break; case StorageType.Session: data = window.sessionStorage.getItem(key); break; } } // console.log('Get', data); if (data !== 'undefined' && data !== undefined && data !== null) { return this.CheckData(storageType, key, data); } return null; } Remove(storageType, key) { switch (storageType) { case StorageType.Cookie: this.RemoveCookie(key, '/'); console.log(key, ' Cookie expired'); break; case StorageType.Local: window.localStorage.removeItem(key); console.log(key, 'localStorage expired'); break; case StorageType.Session: window.sessionStorage.removeItem(key); console.log(key, 'session expired'); break; } } //#region Cookie GetCookie(key) { const cookies = this.document.cookie.split(';'); const cookieName = `${key}=`; let data = cookies.map(x => x.replace(/^\s+/g, '')) .find(x => x.indexOf(cookieName) === 0); data = data ? data.substring(cookieName.length, data.length) : null; return data; } SetCookie(key, data, expireCookie, path = '/') { if (isPlatformBrowser(this.platformId)) { this.document.cookie = key + '=' + data + '; ' + expireCookie + (path.length > 0 ? '; path=' + path : ''); } } RemoveCookie(key, path = '/') { const d = new Date(); d.setTime(d.getTime() + -1 * 24 * 60 * 60 * 1000); // console.log(d); const data = ''; const expireCookie = 'expires=' + d.toUTCString(); if (isPlatformBrowser(this.platformId)) { this.document.cookie = key + '=' + data + '; ' + expireCookie + (path.length > 0 ? '; path=' + path : ''); } } //#endregion CheckData(storageType, key, obj) { const sessionObject = JSON.parse(obj); // console.log(key, sessionObject, new Date(sessionObject.ExpiresAt)); if (Date.parse(new Date().toString()) < sessionObject.ExpiresAt) { return sessionObject.Data; } else { this.Remove(storageType, key); return null; } } } WebStorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: WebStorageService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); WebStorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: WebStorageService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: WebStorageService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXN0b3JhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL1NlcnZpY2VzL3NyYy9TdG9yYWdlL3dlYi1zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sVUFBVSxDQUFDOztBQUVyQyxlQUFlO0FBSWYsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUFzQyxRQUFrQixFQUNmLFVBQWU7UUFEbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQUs7UUFDdEQsdUZBQXVGO0lBQ3pGLENBQUM7SUFFRCxHQUFHLENBQUMsV0FBd0IsRUFBRSxHQUFXLEVBQUUsR0FBUSxFQUFFLFNBQWlCLEVBQUU7UUFDdEUscUZBQXFGO1FBQ3JGLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLENBQUM7UUFDcEUsMkZBQTJGO1FBRTNGLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDLFFBQVEsV0FBVyxFQUFFO2dCQUNuQixLQUFLLFdBQVcsQ0FBQyxNQUFNO29CQUNyQixNQUFNLFlBQVksR0FBVyxVQUFVLEdBQUcsSUFB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QUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0c7SUFDSCxDQUFDO0lBRUQsWUFBWTtJQUVKLFNBQVMsQ0FBQyxXQUF3QixFQUFFLEdBQVcsRUFBRSxHQUFRO1FBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsc0VBQXNFO1FBQ3RFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRTtZQUMvRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7U0FDM0I7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDOzs4R0FsSFUsaUJBQWlCLGtCQUVSLFFBQVEsYUFDUixXQUFXO2tIQUhwQixpQkFBaUIsY0FGaEIsTUFBTTsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzBEQUdpRCxRQUFROzBCQUEzQyxNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuaW1wb3J0IHtTdG9yYWdlVHlwZX0gZnJvbSBcIi4vTW9kZWxzXCI7XHJcblxyXG4vKiogQGR5bmFtaWMgKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2ViU3RvcmFnZVNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcclxuICAgICAgICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2lzUGxhdGZvcm1Ccm93c2VyJywgaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSwgdGhpcy5kb2N1bWVudCk7XHJcbiAgfVxyXG5cclxuICBTZXQoc3RvcmFnZVR5cGU6IFN0b3JhZ2VUeXBlLCBrZXk6IHN0cmluZywgb2JqOiBhbnksIGV4cE1pbjogbnVtYmVyID0gNjApOiBhbnkge1xyXG4gICAgLy8gY29uc3QgZXhwaXJlcyA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMpO1xyXG4gICAgY29uc3QgZXhwaXJlcyA9IG5ldyBEYXRlKCk7XHJcbiAgICBleHBpcmVzLnNldE1pbnV0ZXMoZXhwaXJlcy5nZXRNaW51dGVzKCkgKyBleHBNaW4pO1xyXG4gICAgY29uc3QgZGF0YSA9IHtFeHBpcmVzQXQ6IERhdGUucGFyc2UoZXhwaXJlcy50b1N0cmluZygpKSwgRGF0YTogb2JqfTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdTZXQgaXNQbGF0Zm9ybUJyb3dzZXInLCBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpLCB0aGlzLmRvY3VtZW50KTtcclxuXHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICBzd2l0Y2ggKHN0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlVHlwZS5Db29raWU6XHJcbiAgICAgICAgICBjb25zdCBleHBpcmVDb29raWU6IHN0cmluZyA9ICdleHBpcmVzPScgKyBuZXcgRGF0ZShkYXRhLkV4cGlyZXNBdCkudG9VVENTdHJpbmcoKTtcclxuICAgICAgICAgIHRoaXMuU2V0Q29va2llKGtleSwgSlNPTi5zdHJpbmdpZnkoZGF0YSksIGV4cGlyZUNvb2tpZSwgJy8nKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3RvcmFnZVR5cGUuTG9jYWw6XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3RvcmFnZVR5cGUuU2Vzc2lvbjpcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLkdldChzdG9yYWdlVHlwZSwga2V5KTtcclxuICB9XHJcblxyXG4gIEdldChzdG9yYWdlVHlwZTogU3RvcmFnZVR5cGUsIGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdHZXQgaXNQbGF0Zm9ybUJyb3dzZXInLCBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpLCB0aGlzLmRvY3VtZW50KTtcclxuICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHN3aXRjaCAoc3RvcmFnZVR5cGUpIHtcclxuICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlLkNvb2tpZTpcclxuICAgICAgICAgIGRhdGEgPSB0aGlzLkdldENvb2tpZShrZXkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlVHlwZS5Mb2NhbDpcclxuICAgICAgICAgIGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgU3RvcmFnZVR5cGUuU2Vzc2lvbjpcclxuICAgICAgICAgIGRhdGEgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKCdHZXQnLCBkYXRhKTtcclxuXHJcbiAgICBpZiAoZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuQ2hlY2tEYXRhKHN0b3JhZ2VUeXBlLCBrZXksIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBSZW1vdmUoc3RvcmFnZVR5cGU6IFN0b3JhZ2VUeXBlLCBrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChzdG9yYWdlVHlwZSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VUeXBlLkNvb2tpZTpcclxuICAgICAgICB0aGlzLlJlbW92ZUNvb2tpZShrZXksICcvJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coa2V5LCAnIENvb2tpZSBleHBpcmVkJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZVR5cGUuTG9jYWw6XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coa2V5LCAnbG9jYWxTdG9yYWdlIGV4cGlyZWQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlVHlwZS5TZXNzaW9uOlxyXG4gICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coa2V5LCAnc2Vzc2lvbiBleHBpcmVkJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gQ29va2llXHJcblxyXG4gIHByaXZhdGUgR2V0Q29va2llKGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IGNvb2tpZXM6IEFycmF5PHN0cmluZz4gPSB0aGlzLmRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xyXG4gICAgY29uc3QgY29va2llTmFtZSA9IGAke2tleX09YDtcclxuXHJcbiAgICBsZXQgZGF0YTogYW55IHwgbnVsbCA9IGNvb2tpZXMubWFwKHggPT4geC5yZXBsYWNlKC9eXFxzKy9nLCAnJykpXHJcbiAgICAgIC5maW5kKHggPT4geC5pbmRleE9mKGNvb2tpZU5hbWUpID09PSAwKTtcclxuXHJcbiAgICBkYXRhID0gZGF0YSA/IGRhdGEuc3Vic3RyaW5nKGNvb2tpZU5hbWUubGVuZ3RoLCBkYXRhLmxlbmd0aCkgOiBudWxsO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFNldENvb2tpZShrZXk6IHN0cmluZywgZGF0YTogc3RyaW5nLCBleHBpcmVDb29raWU6IHN0cmluZywgcGF0aDogc3RyaW5nID0gJy8nKTogdm9pZCB7XHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICB0aGlzLmRvY3VtZW50LmNvb2tpZSA9IGtleSArICc9JyArIGRhdGEgKyAnOyAnICsgZXhwaXJlQ29va2llICsgKHBhdGgubGVuZ3RoID4gMCA/ICc7IHBhdGg9JyArIHBhdGggOiAnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFJlbW92ZUNvb2tpZShrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nID0gJy8nKTogdm9pZCB7XHJcbiAgICBjb25zdCBkOiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgIGQuc2V0VGltZShkLmdldFRpbWUoKSArIC0xICogMjQgKiA2MCAqIDYwICogMTAwMCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkKTtcclxuICAgIGNvbnN0IGRhdGEgPSAnJztcclxuICAgIGNvbnN0IGV4cGlyZUNvb2tpZTogc3RyaW5nID0gJ2V4cGlyZXM9JyArIGQudG9VVENTdHJpbmcoKTtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHRoaXMuZG9jdW1lbnQuY29va2llID0ga2V5ICsgJz0nICsgZGF0YSArICc7ICcgKyBleHBpcmVDb29raWUgKyAocGF0aC5sZW5ndGggPiAwID8gJzsgcGF0aD0nICsgcGF0aCA6ICcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIENoZWNrRGF0YShzdG9yYWdlVHlwZTogU3RvcmFnZVR5cGUsIGtleTogc3RyaW5nLCBvYmo6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBzZXNzaW9uT2JqZWN0ID0gSlNPTi5wYXJzZShvYmopO1xyXG4gICAgLy8gY29uc29sZS5sb2coa2V5LCBzZXNzaW9uT2JqZWN0LCBuZXcgRGF0ZShzZXNzaW9uT2JqZWN0LkV4cGlyZXNBdCkpO1xyXG4gICAgaWYgKERhdGUucGFyc2UobmV3IERhdGUoKS50b1N0cmluZygpKSA8IHNlc3Npb25PYmplY3QuRXhwaXJlc0F0KSB7XHJcbiAgICAgIHJldHVybiBzZXNzaW9uT2JqZWN0LkRhdGE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLlJlbW92ZShzdG9yYWdlVHlwZSwga2V5KTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=