@acorex/core 7.9.1 → 7.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/storage/acorex-core-storage.mjs +5 -0
- package/esm2022/storage/cookie-storage.service.mjs +195 -0
- package/esm2022/storage/index.mjs +5 -0
- package/esm2022/storage/local-storage.service.mjs +22 -0
- package/esm2022/storage/session-storage.service.mjs +22 -0
- package/esm2022/storage/storage.interface.mjs +2 -0
- package/fesm2022/acorex-core-storage.mjs +242 -0
- package/fesm2022/acorex-core-storage.mjs.map +1 -0
- package/package.json +7 -1
- package/storage/README.md +3 -0
- package/storage/cookie-storage.service.d.ts +104 -0
- package/storage/index.d.ts +4 -0
- package/storage/local-storage.service.d.ts +10 -0
- package/storage/session-storage.service.d.ts +10 -0
- package/storage/storage.interface.d.ts +14 -0
@@ -0,0 +1,5 @@
|
|
1
|
+
/**
|
2
|
+
* Generated bundle index. Do not edit.
|
3
|
+
*/
|
4
|
+
export * from './index';
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvcmUtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zdG9yYWdlL3NyYy9hY29yZXgtY29yZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
@@ -0,0 +1,195 @@
|
|
1
|
+
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
|
2
|
+
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
export class AXCookieStorageService {
|
5
|
+
constructor(document,
|
6
|
+
// Get the `PLATFORM_ID` so we can check if we're in a browser.
|
7
|
+
platformId) {
|
8
|
+
this.document = document;
|
9
|
+
this.platformId = platformId;
|
10
|
+
this.documentIsAccessible = isPlatformBrowser(this.platformId);
|
11
|
+
}
|
12
|
+
/**
|
13
|
+
* Get cookie Regular Expression
|
14
|
+
*
|
15
|
+
* @param name Cookie name
|
16
|
+
* @returns property RegExp
|
17
|
+
*
|
18
|
+
*/
|
19
|
+
static getCookieRegExp(name) {
|
20
|
+
const escapedName = name.replace(/([[\]{}()|=;+?,.*^$])/gi, '\\$1');
|
21
|
+
return new RegExp('(?:^' + escapedName + '|;\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).
|
25
|
+
*
|
26
|
+
* @param encodedURIComponent A value representing an encoded URI component.
|
27
|
+
*
|
28
|
+
* @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).
|
29
|
+
*
|
30
|
+
*/
|
31
|
+
static safeDecodeURIComponent(encodedURIComponent) {
|
32
|
+
try {
|
33
|
+
return decodeURIComponent(encodedURIComponent);
|
34
|
+
}
|
35
|
+
catch {
|
36
|
+
// probably it is not uri encoded. return as is
|
37
|
+
return encodedURIComponent;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
/**
|
41
|
+
* Return `true` if {@link Document} is accessible, otherwise return `false`
|
42
|
+
*
|
43
|
+
* @param name Cookie name
|
44
|
+
* @returns boolean - whether cookie with specified name exists
|
45
|
+
*
|
46
|
+
*/
|
47
|
+
check(name) {
|
48
|
+
if (!this.documentIsAccessible) {
|
49
|
+
return false;
|
50
|
+
}
|
51
|
+
name = encodeURIComponent(name);
|
52
|
+
const regExp = AXCookieStorageService.getCookieRegExp(name);
|
53
|
+
return regExp.test(this.document.cookie);
|
54
|
+
}
|
55
|
+
/**
|
56
|
+
* Get cookies by name
|
57
|
+
*
|
58
|
+
* @param name Cookie name
|
59
|
+
* @returns property value
|
60
|
+
*
|
61
|
+
*/
|
62
|
+
get(name) {
|
63
|
+
if (this.documentIsAccessible && this.check(name)) {
|
64
|
+
name = encodeURIComponent(name);
|
65
|
+
const regExp = AXCookieStorageService.getCookieRegExp(name);
|
66
|
+
const result = regExp.exec(this.document.cookie);
|
67
|
+
return result[1] ? AXCookieStorageService.safeDecodeURIComponent(result[1]) : '';
|
68
|
+
}
|
69
|
+
else {
|
70
|
+
return '';
|
71
|
+
}
|
72
|
+
}
|
73
|
+
/**
|
74
|
+
* Get all cookies in JSON format
|
75
|
+
*
|
76
|
+
* @returns all the cookies in json
|
77
|
+
*
|
78
|
+
*/
|
79
|
+
getAll() {
|
80
|
+
if (!this.documentIsAccessible) {
|
81
|
+
return {};
|
82
|
+
}
|
83
|
+
const cookies = {};
|
84
|
+
const document = this.document;
|
85
|
+
if (document.cookie && document.cookie !== '') {
|
86
|
+
document.cookie.split(';').forEach((currentCookie) => {
|
87
|
+
const [cookieName, cookieValue] = currentCookie.split('=');
|
88
|
+
cookies[AXCookieStorageService.safeDecodeURIComponent(cookieName.replace(/^ /, ''))] =
|
89
|
+
AXCookieStorageService.safeDecodeURIComponent(cookieValue);
|
90
|
+
});
|
91
|
+
}
|
92
|
+
return cookies;
|
93
|
+
}
|
94
|
+
set(name, value, expiresOrOptions, path, domain, secure, sameSite) {
|
95
|
+
if (!this.documentIsAccessible) {
|
96
|
+
return;
|
97
|
+
}
|
98
|
+
if (typeof expiresOrOptions === 'number' ||
|
99
|
+
expiresOrOptions instanceof Date ||
|
100
|
+
path ||
|
101
|
+
domain ||
|
102
|
+
secure ||
|
103
|
+
sameSite) {
|
104
|
+
const optionsBody = {
|
105
|
+
expires: expiresOrOptions,
|
106
|
+
path,
|
107
|
+
domain,
|
108
|
+
secure,
|
109
|
+
sameSite: sameSite ? sameSite : 'Lax',
|
110
|
+
};
|
111
|
+
this.set(name, value, optionsBody);
|
112
|
+
return;
|
113
|
+
}
|
114
|
+
let cookieString = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';
|
115
|
+
const options = expiresOrOptions ? expiresOrOptions : {};
|
116
|
+
if (options.expires) {
|
117
|
+
if (typeof options.expires === 'number') {
|
118
|
+
const dateExpires = new Date(new Date().getTime() + options.expires * 1000 * 60 * 60 * 24);
|
119
|
+
cookieString += 'expires=' + dateExpires.toUTCString() + ';';
|
120
|
+
}
|
121
|
+
else {
|
122
|
+
cookieString += 'expires=' + options.expires.toUTCString() + ';';
|
123
|
+
}
|
124
|
+
}
|
125
|
+
if (options.path) {
|
126
|
+
cookieString += 'path=' + options.path + ';';
|
127
|
+
}
|
128
|
+
if (options.domain) {
|
129
|
+
cookieString += 'domain=' + options.domain + ';';
|
130
|
+
}
|
131
|
+
if (options.secure === false && options.sameSite === 'None') {
|
132
|
+
options.secure = true;
|
133
|
+
console.warn(`[ngx-cookie-service] Cookie ${name} was forced with secure flag because sameSite=None.` +
|
134
|
+
`More details : https://github.com/stevermeister/ngx-cookie-service/issues/86#issuecomment-597720130`);
|
135
|
+
}
|
136
|
+
if (options.secure) {
|
137
|
+
cookieString += 'secure;';
|
138
|
+
}
|
139
|
+
if (!options.sameSite) {
|
140
|
+
options.sameSite = 'Lax';
|
141
|
+
}
|
142
|
+
cookieString += 'sameSite=' + options.sameSite + ';';
|
143
|
+
this.document.cookie = cookieString;
|
144
|
+
}
|
145
|
+
/**
|
146
|
+
* Delete cookie by name
|
147
|
+
*
|
148
|
+
* @param name Cookie name
|
149
|
+
* @param path Cookie path
|
150
|
+
* @param domain Cookie domain
|
151
|
+
* @param secure Cookie secure flag
|
152
|
+
* @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
153
|
+
*
|
154
|
+
*/
|
155
|
+
delete(name, path, domain, secure, sameSite = 'Lax') {
|
156
|
+
if (!this.documentIsAccessible) {
|
157
|
+
return;
|
158
|
+
}
|
159
|
+
const expiresDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');
|
160
|
+
this.set(name, '', { expires: expiresDate, path, domain, secure, sameSite });
|
161
|
+
}
|
162
|
+
/**
|
163
|
+
* Delete all cookies
|
164
|
+
*
|
165
|
+
* @param path Cookie path
|
166
|
+
* @param domain Cookie domain
|
167
|
+
* @param secure Is the Cookie secure
|
168
|
+
* @param sameSite Is the cookie same site
|
169
|
+
*
|
170
|
+
*/
|
171
|
+
deleteAll(path, domain, secure, sameSite = 'Lax') {
|
172
|
+
if (!this.documentIsAccessible) {
|
173
|
+
return;
|
174
|
+
}
|
175
|
+
const cookies = this.getAll();
|
176
|
+
for (const cookieName in cookies) {
|
177
|
+
// eslint-disable-next-line no-prototype-builtins
|
178
|
+
if (cookies.hasOwnProperty(cookieName)) {
|
179
|
+
this.delete(cookieName, path, domain, secure, sameSite);
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXCookieStorageService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
184
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXCookieStorageService }); }
|
185
|
+
}
|
186
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXCookieStorageService, decorators: [{
|
187
|
+
type: Injectable
|
188
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
189
|
+
type: Inject,
|
190
|
+
args: [DOCUMENT]
|
191
|
+
}] }, { type: undefined, decorators: [{
|
192
|
+
type: Inject,
|
193
|
+
args: [PLATFORM_ID]
|
194
|
+
}] }]; } });
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLXN0b3JhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zdG9yYWdlL3NyYy9jb29raWUtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSWhFLE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFDNEIsUUFBa0I7SUFDNUMsK0RBQStEO0lBQ2xDLFVBQVU7UUFGYixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRWYsZUFBVSxHQUFWLFVBQVUsQ0FBQTtRQUV2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQVk7UUFDekMsTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1RSxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLFdBQVcsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBMkI7UUFDL0QsSUFBSTtZQUNGLE9BQU8sa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUNoRDtRQUFDLE1BQU07WUFDTiwrQ0FBK0M7WUFDL0MsT0FBTyxtQkFBbUIsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsSUFBWTtRQUNoQixJQUFJ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LFFBQVEsYUFFUixXQUFXO2tIQU5WLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVTs7MEJBS04sTUFBTTsyQkFBQyxRQUFROzswQkFFZixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhDb29raWVPcHRpb25zLCBBWFNhbWVTaXRlIH0gZnJvbSAnLi9zdG9yYWdlLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWENvb2tpZVN0b3JhZ2VTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudElzQWNjZXNzaWJsZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAvLyBHZXQgdGhlIGBQTEFURk9STV9JRGAgc28gd2UgY2FuIGNoZWNrIGlmIHdlJ3JlIGluIGEgYnJvd3Nlci5cbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQsXG4gICkge1xuICAgIHRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUgPSBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWUgUmVndWxhciBFeHByZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIENvb2tpZSBuYW1lXG4gICAqIEByZXR1cm5zIHByb3BlcnR5IFJlZ0V4cFxuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q29va2llUmVnRXhwKG5hbWU6IHN0cmluZyk6IFJlZ0V4cCB7XG4gICAgY29uc3QgZXNjYXBlZE5hbWU6IHN0cmluZyA9IG5hbWUucmVwbGFjZSgvKFtbXFxde30oKXw9Oys/LC4qXiRdKS9naSwgJ1xcXFwkMScpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJyg/Ol4nICsgZXNjYXBlZE5hbWUgKyAnfDtcXFxccyonICsgZXNjYXBlZE5hbWUgKyAnKT0oLio/KSg/Ojt8JCknLCAnZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVuZW5jb2RlZCB2ZXJzaW9uIG9mIGFuIGVuY29kZWQgY29tcG9uZW50IG9mIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpLlxuICAgKlxuICAgKiBAcGFyYW0gZW5jb2RlZFVSSUNvbXBvbmVudCBBIHZhbHVlIHJlcHJlc2VudGluZyBhbiBlbmNvZGVkIFVSSSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB1bmVuY29kZWQgdmVyc2lvbiBvZiBhbiBlbmNvZGVkIGNvbXBvbmVudCBvZiBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKS5cbiAgICpcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHNhZmVEZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZFVSSUNvbXBvbmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVkVVJJQ29tcG9uZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHByb2JhYmx5IGl0IGlzIG5vdCB1cmkgZW5jb2RlZC4gcmV0dXJuIGFzIGlzXG4gICAgICByZXR1cm4gZW5jb2RlZFVSSUNvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgRG9jdW1lbnR9IGlzIGFjY2Vzc2libGUsIG90aGVyd2lzZSByZXR1cm4gYGZhbHNlYFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBDb29raWUgbmFtZVxuICAgKiBAcmV0dXJucyBib29sZWFuIC0gd2hldGhlciBjb29raWUgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHNcbiAgICpcbiAgICovXG4gIGNoZWNrKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgIGNvbnN0IHJlZ0V4cDogUmVnRXhwID0gQVhDb29raWVTdG9yYWdlU2VydmljZS5nZXRDb29raWVSZWdFeHAobmFtZSk7XG4gICAgcmV0dXJuIHJlZ0V4cC50ZXN0KHRoaXMuZG9jdW1lbnQuY29va2llKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29va2llcyBieSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIENvb2tpZSBuYW1lXG4gICAqIEByZXR1cm5zIHByb3BlcnR5IHZhbHVlXG4gICAqXG4gICAqL1xuICBnZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSAmJiB0aGlzLmNoZWNrKG5hbWUpKSB7XG4gICAgICBuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuXG4gICAgICBjb25zdCByZWdFeHA6IFJlZ0V4cCA9IEFYQ29va2llU3RvcmFnZVNlcnZpY2UuZ2V0Q29va2llUmVnRXhwKG5hbWUpO1xuICAgICAgY29uc3QgcmVzdWx0OiBSZWdFeHBFeGVjQXJyYXkgPSByZWdFeHAuZXhlYyh0aGlzLmRvY3VtZW50LmNvb2tpZSk7XG5cbiAgICAgIHJldHVybiByZXN1bHRbMV0gPyBBWENvb2tpZVN0b3JhZ2VTZXJ2aWNlLnNhZmVEZWNvZGVVUklDb21wb25lbnQocmVzdWx0WzFdKSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgY29va2llcyBpbiBKU09OIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJucyBhbGwgdGhlIGNvb2tpZXMgaW4ganNvblxuICAgKlxuICAgKi9cbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGNvb2tpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdCBkb2N1bWVudDogYW55ID0gdGhpcy5kb2N1bWVudDtcblxuICAgIGlmIChkb2N1bWVudC5jb29raWUgJiYgZG9jdW1lbnQuY29va2llICE9PSAnJykge1xuICAgICAgZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykuZm9yRWFjaCgoY3VycmVudENvb2tpZSkgPT4ge1xuICAgICAgICBjb25zdCBbY29va2llTmFtZSwgY29va2llVmFsdWVdID0gY3VycmVudENvb2tpZS5zcGxpdCgnPScpO1xuICAgICAgICBjb29raWVzW0FYQ29va2llU3RvcmFnZVNlcnZpY2Uuc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWVOYW1lLnJlcGxhY2UoL14gLywgJycpKV0gPVxuICAgICAgICAgIEFYQ29va2llU3RvcmFnZVNlcnZpY2Uuc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWVWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29va2llcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY29va2llIGJhc2VkIG9uIHByb3ZpZGVkIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lICAgICBDb29raWUgbmFtZVxuICAgKiBAcGFyYW0gdmFsdWUgICAgQ29va2llIHZhbHVlXG4gICAqIEBwYXJhbSBleHBpcmVzICBOdW1iZXIgb2YgZGF5cyB1bnRpbCB0aGUgY29va2llcyBleHBpcmVzIG9yIGFuIGFjdHVhbCBgRGF0ZWBcbiAgICogQHBhcmFtIHBhdGggICAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gICBDb29raWUgZG9tYWluXG4gICAqIEBwYXJhbSBzZWN1cmUgICBTZWN1cmUgZmxhZ1xuICAgKiBAcGFyYW0gc2FtZVNpdGUgT1dBU1Agc2FtZXNpdGUgdG9rZW4gYExheGAsIGBOb25lYCwgb3IgYFN0cmljdGAuIERlZmF1bHRzIHRvIGBMYXhgXG4gICAqXG4gICAqL1xuICBzZXQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZXhwaXJlcz86IEFYQ29va2llT3B0aW9uc1snZXhwaXJlcyddLFxuICAgIHBhdGg/OiBBWENvb2tpZU9wdGlvbnNbJ3BhdGgnXSxcbiAgICBkb21haW4/OiBBWENvb2tpZU9wdGlvbnNbJ2RvbWFpbiddLFxuICAgIHNlY3VyZT86IEFYQ29va2llT3B0aW9uc1snc2VjdXJlJ10sXG4gICAgc2FtZVNpdGU/OiBBWFNhbWVTaXRlLFxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgY29va2llIGJhc2VkIG9uIHByb3ZpZGVkIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIENvb2tpZSdzIHBhcmFtZXRlcnM6XG4gICAqIDxwcmU+XG4gICAqIGV4cGlyZXMgIE51bWJlciBvZiBkYXlzIHVudGlsIHRoZSBjb29raWVzIGV4cGlyZXMgb3IgYW4gYWN0dWFsIGBEYXRlYFxuICAgKiBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBkb21haW4gICBDb29raWUgZG9tYWluXG4gICAqIHNlY3VyZSAgIFNlY3VyZSBmbGFnXG4gICAqIHNhbWVTaXRlIE9XQVNQIHNhbWVzaXRlIHRva2VuIGBMYXhgLCBgTm9uZWAsIG9yIGBTdHJpY3RgLiBEZWZhdWx0cyB0byBgTGF4YFxuICAgKiA8L3ByZT5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICAgIENvb2tpZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSAgICBDb29raWUgdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnMgIEJvZHkgd2l0aCBjb29raWUncyBwYXJhbXNcbiAgICpcbiAgICovXG4gIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBBWENvb2tpZU9wdGlvbnMpOiB2b2lkO1xuXG4gIHNldChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBleHBpcmVzT3JPcHRpb25zPzogQVhDb29raWVPcHRpb25zWydleHBpcmVzJ10gfCBBWENvb2tpZU9wdGlvbnMsXG4gICAgcGF0aD86IEFYQ29va2llT3B0aW9uc1sncGF0aCddLFxuICAgIGRvbWFpbj86IEFYQ29va2llT3B0aW9uc1snZG9tYWluJ10sXG4gICAgc2VjdXJlPzogQVhDb29raWVPcHRpb25zWydzZWN1cmUnXSxcbiAgICBzYW1lU2l0ZT86IEFYU2FtZVNpdGUsXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBleHBpcmVzT3JPcHRpb25zID09PSAnbnVtYmVyJyB8fFxuICAgICAgZXhwaXJlc09yT3B0aW9ucyBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgIHBhdGggfHxcbiAgICAgIGRvbWFpbiB8fFxuICAgICAgc2VjdXJlIHx8XG4gICAgICBzYW1lU2l0ZVxuICAgICkge1xuICAgICAgY29uc3Qgb3B0aW9uc0JvZHkgPSB7XG4gICAgICAgIGV4cGlyZXM6IGV4cGlyZXNPck9wdGlvbnMgYXMgQVhDb29raWVPcHRpb25zWydleHBpcmVzJ10sXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGRvbWFpbixcbiAgICAgICAgc2VjdXJlLFxuICAgICAgICBzYW1lU2l0ZTogc2FtZVNpdGUgPyBzYW1lU2l0ZSA6ICdMYXgnLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXQobmFtZSwgdmFsdWUsIG9wdGlvbnNCb2R5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29va2llU3RyaW5nOiBzdHJpbmcgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgJzsnO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGV4cGlyZXNPck9wdGlvbnMgPyBleHBpcmVzT3JPcHRpb25zIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5leHBpcmVzKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgZGF0ZUV4cGlyZXM6IERhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG9wdGlvbnMuZXhwaXJlcyAqIDEwMDAgKiA2MCAqIDYwICogMjQpO1xuXG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgZGF0ZUV4cGlyZXMudG9VVENTdHJpbmcoKSArICc7JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgb3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgKyAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucGF0aCkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdwYXRoPScgKyBvcHRpb25zLnBhdGggKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZG9tYWluKSB7XG4gICAgICBjb29raWVTdHJpbmcgKz0gJ2RvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2VjdXJlID09PSBmYWxzZSAmJiBvcHRpb25zLnNhbWVTaXRlID09PSAnTm9uZScpIHtcbiAgICAgIG9wdGlvbnMuc2VjdXJlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtuZ3gtY29va2llLXNlcnZpY2VdIENvb2tpZSAke25hbWV9IHdhcyBmb3JjZWQgd2l0aCBzZWN1cmUgZmxhZyBiZWNhdXNlIHNhbWVTaXRlPU5vbmUuYCArXG4gICAgICAgICAgYE1vcmUgZGV0YWlscyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGV2ZXJtZWlzdGVyL25neC1jb29raWUtc2VydmljZS9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTU5NzcyMDEzMGAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zZWN1cmUpIHtcbiAgICAgIGNvb2tpZVN0cmluZyArPSAnc2VjdXJlOyc7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnNhbWVTaXRlKSB7XG4gICAgICBvcHRpb25zLnNhbWVTaXRlID0gJ0xheCc7XG4gICAgfVxuXG4gICAgY29va2llU3RyaW5nICs9ICdzYW1lU2l0ZT0nICsgb3B0aW9ucy5zYW1lU2l0ZSArICc7JztcblxuICAgIHRoaXMuZG9jdW1lbnQuY29va2llID0gY29va2llU3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBjb29raWUgYnkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAgIENvb2tpZSBuYW1lXG4gICAqIEBwYXJhbSBwYXRoICAgQ29va2llIHBhdGhcbiAgICogQHBhcmFtIGRvbWFpbiBDb29raWUgZG9tYWluXG4gICAqIEBwYXJhbSBzZWN1cmUgQ29va2llIHNlY3VyZSBmbGFnXG4gICAqIEBwYXJhbSBzYW1lU2l0ZSBDb29raWUgc2FtZVNpdGUgZmxhZyAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9TZXQtQ29va2llL1NhbWVTaXRlXG4gICAqXG4gICAqL1xuICBkZWxldGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhdGg/OiBBWENvb2tpZU9wdGlvbnNbJ3BhdGgnXSxcbiAgICBkb21haW4/OiBBWENvb2tpZU9wdGlvbnNbJ2RvbWFpbiddLFxuICAgIHNlY3VyZT86IEFYQ29va2llT3B0aW9uc1snc2VjdXJlJ10sXG4gICAgc2FtZVNpdGU6IEFYU2FtZVNpdGUgPSAnTGF4JyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4cGlyZXNEYXRlID0gbmV3IERhdGUoJ1RodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDEgR01UJyk7XG4gICAgdGhpcy5zZXQobmFtZSwgJycsIHsgZXhwaXJlczogZXhwaXJlc0RhdGUsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lU2l0ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYWxsIGNvb2tpZXNcbiAgICpcbiAgICogQHBhcmFtIHBhdGggICBDb29raWUgcGF0aFxuICAgKiBAcGFyYW0gZG9tYWluIENvb2tpZSBkb21haW5cbiAgICogQHBhcmFtIHNlY3VyZSBJcyB0aGUgQ29va2llIHNlY3VyZVxuICAgKiBAcGFyYW0gc2FtZVNpdGUgSXMgdGhlIGNvb2tpZSBzYW1lIHNpdGVcbiAgICpcbiAgICovXG4gIGRlbGV0ZUFsbChcbiAgICBwYXRoPzogQVhDb29raWVPcHRpb25zWydwYXRoJ10sXG4gICAgZG9tYWluPzogQVhDb29raWVPcHRpb25zWydkb21haW4nXSxcbiAgICBzZWN1cmU/OiBBWENvb2tpZU9wdGlvbnNbJ3NlY3VyZSddLFxuICAgIHNhbWVTaXRlOiBBWFNhbWVTaXRlID0gJ0xheCcsXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLmdldEFsbCgpO1xuXG4gICAgZm9yIChjb25zdCBjb29raWVOYW1lIGluIGNvb2tpZXMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGlmIChjb29raWVzLmhhc093blByb3BlcnR5KGNvb2tpZU5hbWUpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlKGNvb2tpZU5hbWUsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lU2l0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export * from './cookie-storage.service';
|
2
|
+
export * from './local-storage.service';
|
3
|
+
export * from './session-storage.service';
|
4
|
+
export * from './storage.interface';
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3RvcmFnZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29va2llLXN0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZS5pbnRlcmZhY2UnO1xuIl19
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export class AXLocalStorageService {
|
4
|
+
get(key) {
|
5
|
+
return JSON.parse(localStorage.getItem(key) || '');
|
6
|
+
}
|
7
|
+
set(key, value) {
|
8
|
+
return localStorage.setItem(key, JSON.stringify(value));
|
9
|
+
}
|
10
|
+
clear() {
|
11
|
+
return localStorage.clear();
|
12
|
+
}
|
13
|
+
removeItem(key) {
|
14
|
+
return localStorage.removeItem(key);
|
15
|
+
}
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXLocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
17
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXLocalStorageService }); }
|
18
|
+
}
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXLocalStorageService, decorators: [{
|
20
|
+
type: Injectable
|
21
|
+
}] });
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3N0b3JhZ2Uvc3JjL2xvY2FsLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUkzQyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLEdBQUcsQ0FBYyxHQUFXO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxHQUFHLENBQWMsR0FBVyxFQUFFLEtBQVE7UUFDcEMsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7OEdBZlUscUJBQXFCO2tIQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFN0b3JhZ2UgfSBmcm9tICcuL3N0b3JhZ2UuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTG9jYWxTdG9yYWdlU2VydmljZSBpbXBsZW1lbnRzIEFYU3RvcmFnZSB7XG4gIGdldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcpOiBUIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpIHx8ICcnKTtcbiAgfVxuXG4gIHNldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgfVxufVxuIl19
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export class AXSessionStorageService {
|
4
|
+
get(key) {
|
5
|
+
return JSON.parse(sessionStorage.getItem(key) || '');
|
6
|
+
}
|
7
|
+
set(key, value) {
|
8
|
+
return sessionStorage.setItem(key, JSON.stringify(value));
|
9
|
+
}
|
10
|
+
clear() {
|
11
|
+
return sessionStorage.clear();
|
12
|
+
}
|
13
|
+
removeItem(key) {
|
14
|
+
return sessionStorage.removeItem(key);
|
15
|
+
}
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXSessionStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
17
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXSessionStorageService }); }
|
18
|
+
}
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXSessionStorageService, decorators: [{
|
20
|
+
type: Injectable
|
21
|
+
}] });
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3RvcmFnZS9zcmMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0MsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxHQUFHLENBQWMsR0FBVztRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsR0FBRyxDQUFjLEdBQVcsRUFBRSxLQUFRO1FBQ3BDLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDOzhHQWZVLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhTdG9yYWdlIH0gZnJvbSAnLi9zdG9yYWdlLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWFNlc3Npb25TdG9yYWdlU2VydmljZSBpbXBsZW1lbnRzIEFYU3RvcmFnZSB7XG4gIGdldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcpOiBUIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSkgfHwgJycpO1xuICB9XG5cbiAgc2V0PFQgPSB1bmtub3duPihrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICB9XG59XG4iXX0=
|
@@ -0,0 +1,2 @@
|
|
1
|
+
export {};
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3RvcmFnZS9zcmMvc3RvcmFnZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQVhTdG9yYWdlIHtcbiAgZ2V0PFQgPSB1bmtub3duPihrZXk6IHN0cmluZyk6IFQ7XG4gIHNldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZDtcbiAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk7XG4gIGNsZWFyKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIEFYU2FtZVNpdGUgPSAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYQ29va2llT3B0aW9ucyB7XG4gIGV4cGlyZXM/OiBudW1iZXIgfCBEYXRlO1xuICBwYXRoPzogc3RyaW5nO1xuICBkb21haW4/OiBzdHJpbmc7XG4gIHNlY3VyZT86IGJvb2xlYW47XG4gIHNhbWVTaXRlPzogQVhTYW1lU2l0ZTtcbn1cbiJdfQ==
|
@@ -0,0 +1,242 @@
|
|
1
|
+
import { isPlatformBrowser, DOCUMENT } from '@angular/common';
|
2
|
+
import * as i0 from '@angular/core';
|
3
|
+
import { PLATFORM_ID, Injectable, Inject } from '@angular/core';
|
4
|
+
|
5
|
+
class AXCookieStorageService {
|
6
|
+
constructor(document,
|
7
|
+
// Get the `PLATFORM_ID` so we can check if we're in a browser.
|
8
|
+
platformId) {
|
9
|
+
this.document = document;
|
10
|
+
this.platformId = platformId;
|
11
|
+
this.documentIsAccessible = isPlatformBrowser(this.platformId);
|
12
|
+
}
|
13
|
+
/**
|
14
|
+
* Get cookie Regular Expression
|
15
|
+
*
|
16
|
+
* @param name Cookie name
|
17
|
+
* @returns property RegExp
|
18
|
+
*
|
19
|
+
*/
|
20
|
+
static getCookieRegExp(name) {
|
21
|
+
const escapedName = name.replace(/([[\]{}()|=;+?,.*^$])/gi, '\\$1');
|
22
|
+
return new RegExp('(?:^' + escapedName + '|;\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');
|
23
|
+
}
|
24
|
+
/**
|
25
|
+
* Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).
|
26
|
+
*
|
27
|
+
* @param encodedURIComponent A value representing an encoded URI component.
|
28
|
+
*
|
29
|
+
* @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).
|
30
|
+
*
|
31
|
+
*/
|
32
|
+
static safeDecodeURIComponent(encodedURIComponent) {
|
33
|
+
try {
|
34
|
+
return decodeURIComponent(encodedURIComponent);
|
35
|
+
}
|
36
|
+
catch {
|
37
|
+
// probably it is not uri encoded. return as is
|
38
|
+
return encodedURIComponent;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
/**
|
42
|
+
* Return `true` if {@link Document} is accessible, otherwise return `false`
|
43
|
+
*
|
44
|
+
* @param name Cookie name
|
45
|
+
* @returns boolean - whether cookie with specified name exists
|
46
|
+
*
|
47
|
+
*/
|
48
|
+
check(name) {
|
49
|
+
if (!this.documentIsAccessible) {
|
50
|
+
return false;
|
51
|
+
}
|
52
|
+
name = encodeURIComponent(name);
|
53
|
+
const regExp = AXCookieStorageService.getCookieRegExp(name);
|
54
|
+
return regExp.test(this.document.cookie);
|
55
|
+
}
|
56
|
+
/**
|
57
|
+
* Get cookies by name
|
58
|
+
*
|
59
|
+
* @param name Cookie name
|
60
|
+
* @returns property value
|
61
|
+
*
|
62
|
+
*/
|
63
|
+
get(name) {
|
64
|
+
if (this.documentIsAccessible && this.check(name)) {
|
65
|
+
name = encodeURIComponent(name);
|
66
|
+
const regExp = AXCookieStorageService.getCookieRegExp(name);
|
67
|
+
const result = regExp.exec(this.document.cookie);
|
68
|
+
return result[1] ? AXCookieStorageService.safeDecodeURIComponent(result[1]) : '';
|
69
|
+
}
|
70
|
+
else {
|
71
|
+
return '';
|
72
|
+
}
|
73
|
+
}
|
74
|
+
/**
|
75
|
+
* Get all cookies in JSON format
|
76
|
+
*
|
77
|
+
* @returns all the cookies in json
|
78
|
+
*
|
79
|
+
*/
|
80
|
+
getAll() {
|
81
|
+
if (!this.documentIsAccessible) {
|
82
|
+
return {};
|
83
|
+
}
|
84
|
+
const cookies = {};
|
85
|
+
const document = this.document;
|
86
|
+
if (document.cookie && document.cookie !== '') {
|
87
|
+
document.cookie.split(';').forEach((currentCookie) => {
|
88
|
+
const [cookieName, cookieValue] = currentCookie.split('=');
|
89
|
+
cookies[AXCookieStorageService.safeDecodeURIComponent(cookieName.replace(/^ /, ''))] =
|
90
|
+
AXCookieStorageService.safeDecodeURIComponent(cookieValue);
|
91
|
+
});
|
92
|
+
}
|
93
|
+
return cookies;
|
94
|
+
}
|
95
|
+
set(name, value, expiresOrOptions, path, domain, secure, sameSite) {
|
96
|
+
if (!this.documentIsAccessible) {
|
97
|
+
return;
|
98
|
+
}
|
99
|
+
if (typeof expiresOrOptions === 'number' ||
|
100
|
+
expiresOrOptions instanceof Date ||
|
101
|
+
path ||
|
102
|
+
domain ||
|
103
|
+
secure ||
|
104
|
+
sameSite) {
|
105
|
+
const optionsBody = {
|
106
|
+
expires: expiresOrOptions,
|
107
|
+
path,
|
108
|
+
domain,
|
109
|
+
secure,
|
110
|
+
sameSite: sameSite ? sameSite : 'Lax',
|
111
|
+
};
|
112
|
+
this.set(name, value, optionsBody);
|
113
|
+
return;
|
114
|
+
}
|
115
|
+
let cookieString = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';
|
116
|
+
const options = expiresOrOptions ? expiresOrOptions : {};
|
117
|
+
if (options.expires) {
|
118
|
+
if (typeof options.expires === 'number') {
|
119
|
+
const dateExpires = new Date(new Date().getTime() + options.expires * 1000 * 60 * 60 * 24);
|
120
|
+
cookieString += 'expires=' + dateExpires.toUTCString() + ';';
|
121
|
+
}
|
122
|
+
else {
|
123
|
+
cookieString += 'expires=' + options.expires.toUTCString() + ';';
|
124
|
+
}
|
125
|
+
}
|
126
|
+
if (options.path) {
|
127
|
+
cookieString += 'path=' + options.path + ';';
|
128
|
+
}
|
129
|
+
if (options.domain) {
|
130
|
+
cookieString += 'domain=' + options.domain + ';';
|
131
|
+
}
|
132
|
+
if (options.secure === false && options.sameSite === 'None') {
|
133
|
+
options.secure = true;
|
134
|
+
console.warn(`[ngx-cookie-service] Cookie ${name} was forced with secure flag because sameSite=None.` +
|
135
|
+
`More details : https://github.com/stevermeister/ngx-cookie-service/issues/86#issuecomment-597720130`);
|
136
|
+
}
|
137
|
+
if (options.secure) {
|
138
|
+
cookieString += 'secure;';
|
139
|
+
}
|
140
|
+
if (!options.sameSite) {
|
141
|
+
options.sameSite = 'Lax';
|
142
|
+
}
|
143
|
+
cookieString += 'sameSite=' + options.sameSite + ';';
|
144
|
+
this.document.cookie = cookieString;
|
145
|
+
}
|
146
|
+
/**
|
147
|
+
* Delete cookie by name
|
148
|
+
*
|
149
|
+
* @param name Cookie name
|
150
|
+
* @param path Cookie path
|
151
|
+
* @param domain Cookie domain
|
152
|
+
* @param secure Cookie secure flag
|
153
|
+
* @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
154
|
+
*
|
155
|
+
*/
|
156
|
+
delete(name, path, domain, secure, sameSite = 'Lax') {
|
157
|
+
if (!this.documentIsAccessible) {
|
158
|
+
return;
|
159
|
+
}
|
160
|
+
const expiresDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');
|
161
|
+
this.set(name, '', { expires: expiresDate, path, domain, secure, sameSite });
|
162
|
+
}
|
163
|
+
/**
|
164
|
+
* Delete all cookies
|
165
|
+
*
|
166
|
+
* @param path Cookie path
|
167
|
+
* @param domain Cookie domain
|
168
|
+
* @param secure Is the Cookie secure
|
169
|
+
* @param sameSite Is the cookie same site
|
170
|
+
*
|
171
|
+
*/
|
172
|
+
deleteAll(path, domain, secure, sameSite = 'Lax') {
|
173
|
+
if (!this.documentIsAccessible) {
|
174
|
+
return;
|
175
|
+
}
|
176
|
+
const cookies = this.getAll();
|
177
|
+
for (const cookieName in cookies) {
|
178
|
+
// eslint-disable-next-line no-prototype-builtins
|
179
|
+
if (cookies.hasOwnProperty(cookieName)) {
|
180
|
+
this.delete(cookieName, path, domain, secure, sameSite);
|
181
|
+
}
|
182
|
+
}
|
183
|
+
}
|
184
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXCookieStorageService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
185
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXCookieStorageService }); }
|
186
|
+
}
|
187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXCookieStorageService, decorators: [{
|
188
|
+
type: Injectable
|
189
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
190
|
+
type: Inject,
|
191
|
+
args: [DOCUMENT]
|
192
|
+
}] }, { type: undefined, decorators: [{
|
193
|
+
type: Inject,
|
194
|
+
args: [PLATFORM_ID]
|
195
|
+
}] }]; } });
|
196
|
+
|
197
|
+
class AXLocalStorageService {
|
198
|
+
get(key) {
|
199
|
+
return JSON.parse(localStorage.getItem(key) || '');
|
200
|
+
}
|
201
|
+
set(key, value) {
|
202
|
+
return localStorage.setItem(key, JSON.stringify(value));
|
203
|
+
}
|
204
|
+
clear() {
|
205
|
+
return localStorage.clear();
|
206
|
+
}
|
207
|
+
removeItem(key) {
|
208
|
+
return localStorage.removeItem(key);
|
209
|
+
}
|
210
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXLocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
211
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXLocalStorageService }); }
|
212
|
+
}
|
213
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXLocalStorageService, decorators: [{
|
214
|
+
type: Injectable
|
215
|
+
}] });
|
216
|
+
|
217
|
+
class AXSessionStorageService {
|
218
|
+
get(key) {
|
219
|
+
return JSON.parse(sessionStorage.getItem(key) || '');
|
220
|
+
}
|
221
|
+
set(key, value) {
|
222
|
+
return sessionStorage.setItem(key, JSON.stringify(value));
|
223
|
+
}
|
224
|
+
clear() {
|
225
|
+
return sessionStorage.clear();
|
226
|
+
}
|
227
|
+
removeItem(key) {
|
228
|
+
return sessionStorage.removeItem(key);
|
229
|
+
}
|
230
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXSessionStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
231
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXSessionStorageService }); }
|
232
|
+
}
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AXSessionStorageService, decorators: [{
|
234
|
+
type: Injectable
|
235
|
+
}] });
|
236
|
+
|
237
|
+
/**
|
238
|
+
* Generated bundle index. Do not edit.
|
239
|
+
*/
|
240
|
+
|
241
|
+
export { AXCookieStorageService, AXLocalStorageService, AXSessionStorageService };
|
242
|
+
//# sourceMappingURL=acorex-core-storage.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"acorex-core-storage.mjs","sources":["../../../../libs/core/storage/src/cookie-storage.service.ts","../../../../libs/core/storage/src/local-storage.service.ts","../../../../libs/core/storage/src/session-storage.service.ts","../../../../libs/core/storage/src/acorex-core-storage.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { AXCookieOptions, AXSameSite } from './storage.interface';\n\n@Injectable()\nexport class AXCookieStorageService {\n private readonly documentIsAccessible: boolean;\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n // Get the `PLATFORM_ID` so we can check if we're in a browser.\n @Inject(PLATFORM_ID) private platformId,\n ) {\n this.documentIsAccessible = isPlatformBrowser(this.platformId);\n }\n\n /**\n * Get cookie Regular Expression\n *\n * @param name Cookie name\n * @returns property RegExp\n *\n */\n private static getCookieRegExp(name: string): RegExp {\n const escapedName: string = name.replace(/([[\\]{}()|=;+?,.*^$])/gi, '\\\\$1');\n\n return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\n }\n\n /**\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @param encodedURIComponent A value representing an encoded URI component.\n *\n * @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n */\n private static safeDecodeURIComponent(encodedURIComponent: string): string {\n try {\n return decodeURIComponent(encodedURIComponent);\n } catch {\n // probably it is not uri encoded. return as is\n return encodedURIComponent;\n }\n }\n\n /**\n * Return `true` if {@link Document} is accessible, otherwise return `false`\n *\n * @param name Cookie name\n * @returns boolean - whether cookie with specified name exists\n *\n */\n check(name: string): boolean {\n if (!this.documentIsAccessible) {\n return false;\n }\n name = encodeURIComponent(name);\n const regExp: RegExp = AXCookieStorageService.getCookieRegExp(name);\n return regExp.test(this.document.cookie);\n }\n\n /**\n * Get cookies by name\n *\n * @param name Cookie name\n * @returns property value\n *\n */\n get(name: string): string {\n if (this.documentIsAccessible && this.check(name)) {\n name = encodeURIComponent(name);\n\n const regExp: RegExp = AXCookieStorageService.getCookieRegExp(name);\n const result: RegExpExecArray = regExp.exec(this.document.cookie);\n\n return result[1] ? AXCookieStorageService.safeDecodeURIComponent(result[1]) : '';\n } else {\n return '';\n }\n }\n\n /**\n * Get all cookies in JSON format\n *\n * @returns all the cookies in json\n *\n */\n getAll(): { [key: string]: string } {\n if (!this.documentIsAccessible) {\n return {};\n }\n\n const cookies: { [key: string]: string } = {};\n const document: any = this.document;\n\n if (document.cookie && document.cookie !== '') {\n document.cookie.split(';').forEach((currentCookie) => {\n const [cookieName, cookieValue] = currentCookie.split('=');\n cookies[AXCookieStorageService.safeDecodeURIComponent(cookieName.replace(/^ /, ''))] =\n AXCookieStorageService.safeDecodeURIComponent(cookieValue);\n });\n }\n\n return cookies;\n }\n\n /**\n * Set cookie based on provided information\n *\n * @param name Cookie name\n * @param value Cookie value\n * @param expires Number of days until the cookies expires or an actual `Date`\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Secure flag\n * @param sameSite OWASP samesite token `Lax`, `None`, or `Strict`. Defaults to `Lax`\n *\n */\n set(\n name: string,\n value: string,\n expires?: AXCookieOptions['expires'],\n path?: AXCookieOptions['path'],\n domain?: AXCookieOptions['domain'],\n secure?: AXCookieOptions['secure'],\n sameSite?: AXSameSite,\n ): void;\n\n /**\n * Set cookie based on provided information\n *\n * Cookie's parameters:\n * <pre>\n * expires Number of days until the cookies expires or an actual `Date`\n * path Cookie path\n * domain Cookie domain\n * secure Secure flag\n * sameSite OWASP samesite token `Lax`, `None`, or `Strict`. Defaults to `Lax`\n * </pre>\n *\n * @param name Cookie name\n * @param value Cookie value\n * @param options Body with cookie's params\n *\n */\n set(name: string, value: string, options?: AXCookieOptions): void;\n\n set(\n name: string,\n value: string,\n expiresOrOptions?: AXCookieOptions['expires'] | AXCookieOptions,\n path?: AXCookieOptions['path'],\n domain?: AXCookieOptions['domain'],\n secure?: AXCookieOptions['secure'],\n sameSite?: AXSameSite,\n ): void {\n if (!this.documentIsAccessible) {\n return;\n }\n\n if (\n typeof expiresOrOptions === 'number' ||\n expiresOrOptions instanceof Date ||\n path ||\n domain ||\n secure ||\n sameSite\n ) {\n const optionsBody = {\n expires: expiresOrOptions as AXCookieOptions['expires'],\n path,\n domain,\n secure,\n sameSite: sameSite ? sameSite : 'Lax',\n };\n\n this.set(name, value, optionsBody);\n return;\n }\n\n let cookieString: string = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';\n\n const options = expiresOrOptions ? expiresOrOptions : {};\n\n if (options.expires) {\n if (typeof options.expires === 'number') {\n const dateExpires: Date = new Date(new Date().getTime() + options.expires * 1000 * 60 * 60 * 24);\n\n cookieString += 'expires=' + dateExpires.toUTCString() + ';';\n } else {\n cookieString += 'expires=' + options.expires.toUTCString() + ';';\n }\n }\n\n if (options.path) {\n cookieString += 'path=' + options.path + ';';\n }\n\n if (options.domain) {\n cookieString += 'domain=' + options.domain + ';';\n }\n\n if (options.secure === false && options.sameSite === 'None') {\n options.secure = true;\n console.warn(\n `[ngx-cookie-service] Cookie ${name} was forced with secure flag because sameSite=None.` +\n `More details : https://github.com/stevermeister/ngx-cookie-service/issues/86#issuecomment-597720130`,\n );\n }\n if (options.secure) {\n cookieString += 'secure;';\n }\n\n if (!options.sameSite) {\n options.sameSite = 'Lax';\n }\n\n cookieString += 'sameSite=' + options.sameSite + ';';\n\n this.document.cookie = cookieString;\n }\n\n /**\n * Delete cookie by name\n *\n * @param name Cookie name\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Cookie secure flag\n * @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n *\n */\n delete(\n name: string,\n path?: AXCookieOptions['path'],\n domain?: AXCookieOptions['domain'],\n secure?: AXCookieOptions['secure'],\n sameSite: AXSameSite = 'Lax',\n ): void {\n if (!this.documentIsAccessible) {\n return;\n }\n const expiresDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');\n this.set(name, '', { expires: expiresDate, path, domain, secure, sameSite });\n }\n\n /**\n * Delete all cookies\n *\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Is the Cookie secure\n * @param sameSite Is the cookie same site\n *\n */\n deleteAll(\n path?: AXCookieOptions['path'],\n domain?: AXCookieOptions['domain'],\n secure?: AXCookieOptions['secure'],\n sameSite: AXSameSite = 'Lax',\n ): void {\n if (!this.documentIsAccessible) {\n return;\n }\n\n const cookies = this.getAll();\n\n for (const cookieName in cookies) {\n // eslint-disable-next-line no-prototype-builtins\n if (cookies.hasOwnProperty(cookieName)) {\n this.delete(cookieName, path, domain, secure, sameSite);\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXStorage } from './storage.interface';\n\n@Injectable()\nexport class AXLocalStorageService implements AXStorage {\n get<T = unknown>(key: string): T {\n return JSON.parse(localStorage.getItem(key) || '');\n }\n\n set<T = unknown>(key: string, value: T): void {\n return localStorage.setItem(key, JSON.stringify(value));\n }\n\n clear(): void {\n return localStorage.clear();\n }\n\n removeItem(key: string) {\n return localStorage.removeItem(key);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXStorage } from './storage.interface';\n\n@Injectable()\nexport class AXSessionStorageService implements AXStorage {\n get<T = unknown>(key: string): T {\n return JSON.parse(sessionStorage.getItem(key) || '');\n }\n\n set<T = unknown>(key: string, value: T): void {\n return sessionStorage.setItem(key, JSON.stringify(value));\n }\n\n clear(): void {\n return sessionStorage.clear();\n }\n\n removeItem(key: string) {\n return sessionStorage.removeItem(key);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@acorex/core",
|
3
|
-
"version": "7.
|
3
|
+
"version": "7.10.1",
|
4
4
|
"sideEffects": false,
|
5
5
|
"peerDependencies": {
|
6
6
|
"@angular/common": ">=16.2.0",
|
@@ -69,6 +69,12 @@
|
|
69
69
|
"esm": "./esm2022/platform/acorex-core-platform.mjs",
|
70
70
|
"default": "./fesm2022/acorex-core-platform.mjs"
|
71
71
|
},
|
72
|
+
"./storage": {
|
73
|
+
"types": "./storage/index.d.ts",
|
74
|
+
"esm2022": "./esm2022/storage/acorex-core-storage.mjs",
|
75
|
+
"esm": "./esm2022/storage/acorex-core-storage.mjs",
|
76
|
+
"default": "./fesm2022/acorex-core-storage.mjs"
|
77
|
+
},
|
72
78
|
"./translation": {
|
73
79
|
"types": "./translation/index.d.ts",
|
74
80
|
"esm2022": "./esm2022/translation/acorex-core-translation.mjs",
|
@@ -0,0 +1,104 @@
|
|
1
|
+
import { AXCookieOptions, AXSameSite } from './storage.interface';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export declare class AXCookieStorageService {
|
4
|
+
private document;
|
5
|
+
private platformId;
|
6
|
+
private readonly documentIsAccessible;
|
7
|
+
constructor(document: Document, platformId: any);
|
8
|
+
/**
|
9
|
+
* Get cookie Regular Expression
|
10
|
+
*
|
11
|
+
* @param name Cookie name
|
12
|
+
* @returns property RegExp
|
13
|
+
*
|
14
|
+
*/
|
15
|
+
private static getCookieRegExp;
|
16
|
+
/**
|
17
|
+
* Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).
|
18
|
+
*
|
19
|
+
* @param encodedURIComponent A value representing an encoded URI component.
|
20
|
+
*
|
21
|
+
* @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).
|
22
|
+
*
|
23
|
+
*/
|
24
|
+
private static safeDecodeURIComponent;
|
25
|
+
/**
|
26
|
+
* Return `true` if {@link Document} is accessible, otherwise return `false`
|
27
|
+
*
|
28
|
+
* @param name Cookie name
|
29
|
+
* @returns boolean - whether cookie with specified name exists
|
30
|
+
*
|
31
|
+
*/
|
32
|
+
check(name: string): boolean;
|
33
|
+
/**
|
34
|
+
* Get cookies by name
|
35
|
+
*
|
36
|
+
* @param name Cookie name
|
37
|
+
* @returns property value
|
38
|
+
*
|
39
|
+
*/
|
40
|
+
get(name: string): string;
|
41
|
+
/**
|
42
|
+
* Get all cookies in JSON format
|
43
|
+
*
|
44
|
+
* @returns all the cookies in json
|
45
|
+
*
|
46
|
+
*/
|
47
|
+
getAll(): {
|
48
|
+
[key: string]: string;
|
49
|
+
};
|
50
|
+
/**
|
51
|
+
* Set cookie based on provided information
|
52
|
+
*
|
53
|
+
* @param name Cookie name
|
54
|
+
* @param value Cookie value
|
55
|
+
* @param expires Number of days until the cookies expires or an actual `Date`
|
56
|
+
* @param path Cookie path
|
57
|
+
* @param domain Cookie domain
|
58
|
+
* @param secure Secure flag
|
59
|
+
* @param sameSite OWASP samesite token `Lax`, `None`, or `Strict`. Defaults to `Lax`
|
60
|
+
*
|
61
|
+
*/
|
62
|
+
set(name: string, value: string, expires?: AXCookieOptions['expires'], path?: AXCookieOptions['path'], domain?: AXCookieOptions['domain'], secure?: AXCookieOptions['secure'], sameSite?: AXSameSite): void;
|
63
|
+
/**
|
64
|
+
* Set cookie based on provided information
|
65
|
+
*
|
66
|
+
* Cookie's parameters:
|
67
|
+
* <pre>
|
68
|
+
* expires Number of days until the cookies expires or an actual `Date`
|
69
|
+
* path Cookie path
|
70
|
+
* domain Cookie domain
|
71
|
+
* secure Secure flag
|
72
|
+
* sameSite OWASP samesite token `Lax`, `None`, or `Strict`. Defaults to `Lax`
|
73
|
+
* </pre>
|
74
|
+
*
|
75
|
+
* @param name Cookie name
|
76
|
+
* @param value Cookie value
|
77
|
+
* @param options Body with cookie's params
|
78
|
+
*
|
79
|
+
*/
|
80
|
+
set(name: string, value: string, options?: AXCookieOptions): void;
|
81
|
+
/**
|
82
|
+
* Delete cookie by name
|
83
|
+
*
|
84
|
+
* @param name Cookie name
|
85
|
+
* @param path Cookie path
|
86
|
+
* @param domain Cookie domain
|
87
|
+
* @param secure Cookie secure flag
|
88
|
+
* @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
89
|
+
*
|
90
|
+
*/
|
91
|
+
delete(name: string, path?: AXCookieOptions['path'], domain?: AXCookieOptions['domain'], secure?: AXCookieOptions['secure'], sameSite?: AXSameSite): void;
|
92
|
+
/**
|
93
|
+
* Delete all cookies
|
94
|
+
*
|
95
|
+
* @param path Cookie path
|
96
|
+
* @param domain Cookie domain
|
97
|
+
* @param secure Is the Cookie secure
|
98
|
+
* @param sameSite Is the cookie same site
|
99
|
+
*
|
100
|
+
*/
|
101
|
+
deleteAll(path?: AXCookieOptions['path'], domain?: AXCookieOptions['domain'], secure?: AXCookieOptions['secure'], sameSite?: AXSameSite): void;
|
102
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXCookieStorageService, never>;
|
103
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AXCookieStorageService>;
|
104
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { AXStorage } from './storage.interface';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export declare class AXLocalStorageService implements AXStorage {
|
4
|
+
get<T = unknown>(key: string): T;
|
5
|
+
set<T = unknown>(key: string, value: T): void;
|
6
|
+
clear(): void;
|
7
|
+
removeItem(key: string): void;
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXLocalStorageService, never>;
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AXLocalStorageService>;
|
10
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { AXStorage } from './storage.interface';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export declare class AXSessionStorageService implements AXStorage {
|
4
|
+
get<T = unknown>(key: string): T;
|
5
|
+
set<T = unknown>(key: string, value: T): void;
|
6
|
+
clear(): void;
|
7
|
+
removeItem(key: string): void;
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXSessionStorageService, never>;
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AXSessionStorageService>;
|
10
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
export interface AXStorage {
|
2
|
+
get<T = unknown>(key: string): T;
|
3
|
+
set<T = unknown>(key: string, value: T): void;
|
4
|
+
removeItem(key: string): any;
|
5
|
+
clear(): void;
|
6
|
+
}
|
7
|
+
export type AXSameSite = 'Lax' | 'None' | 'Strict';
|
8
|
+
export interface AXCookieOptions {
|
9
|
+
expires?: number | Date;
|
10
|
+
path?: string;
|
11
|
+
domain?: string;
|
12
|
+
secure?: boolean;
|
13
|
+
sameSite?: AXSameSite;
|
14
|
+
}
|