@bravobit/bb-foundation 0.42.0 → 0.42.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/auth/lib/auth.interceptor.d.ts +3 -6
- package/dialog/lib/dialog-confirm/dialog-confirm.component.d.ts +2 -5
- package/dialog/lib/dialog-container/dialog-container.component.d.ts +4 -6
- package/dialog/lib/dialog-overlay/dialog-overlay.component.d.ts +5 -7
- package/esm2022/auth/lib/auth.interceptor.mjs +36 -42
- package/esm2022/auth/lib/auth.module.mjs +4 -4
- package/esm2022/auth/lib/auth.service.mjs +18 -7
- package/esm2022/auth/lib/auth.session.mjs +26 -22
- package/esm2022/auth/lib/directives/authenticated.directive.mjs +16 -12
- package/esm2022/auth/lib/helpers/jwt.helper.mjs +29 -31
- package/esm2022/auth/lib/providers/email.provider.mjs +4 -1
- package/esm2022/auth/lib/providers/verify.provider.mjs +4 -1
- package/esm2022/collections/lib/collection.mjs +17 -7
- package/esm2022/collections/lib/collections.module.mjs +6 -6
- package/esm2022/collections/lib/components/collections-actions/collections-actions.component.mjs +7 -9
- package/esm2022/collections/lib/components/collections-grid/collections-grid.component.mjs +11 -11
- package/esm2022/collections/lib/components/collections-pager/collections-pager.component.mjs +10 -10
- package/esm2022/collections/lib/components/collections-table/collections-table.component.mjs +16 -16
- package/esm2022/collections/lib/components/collections-table-label/collections-table-label.component.mjs +9 -11
- package/esm2022/collections/lib/components/collections-table-sorting/collections-table-sorting.component.mjs +12 -9
- package/esm2022/collections/lib/components/collections-viewer/collections-viewer.component.mjs +10 -7
- package/esm2022/collections/lib/directives/collections-data-row.directive.mjs +6 -3
- package/esm2022/collections/lib/directives/collections-data.directive.mjs +6 -3
- package/esm2022/collections/lib/directives/collections-empty.directive.mjs +6 -3
- package/esm2022/collections/lib/directives/collections-error.directive.mjs +6 -3
- package/esm2022/collections/lib/directives/collections-initial.directive.mjs +4 -3
- package/esm2022/collections/lib/directives/collections-item.directive.mjs +6 -3
- package/esm2022/collections/lib/providers/api-collection.provider.mjs +6 -4
- package/esm2022/collections/lib/providers/local-collection.provider.mjs +2 -2
- package/esm2022/combobox/combobox/combobox-container.directive.mjs +12 -7
- package/esm2022/combobox/combobox/combobox.component.mjs +23 -20
- package/esm2022/combobox/combobox-label.directive.mjs +3 -3
- package/esm2022/combobox/combobox-option.directive.mjs +3 -3
- package/esm2022/combobox/combobox-panel/combobox-panel.component.mjs +10 -6
- package/esm2022/dashboard/lib/dashboard/dashboard.component.mjs +13 -13
- package/esm2022/dashboard/lib/dashboard-header/dashboard-header.component.mjs +5 -7
- package/esm2022/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +8 -10
- package/esm2022/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +5 -7
- package/esm2022/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +12 -13
- package/esm2022/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +13 -12
- package/esm2022/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +7 -5
- package/esm2022/dashboard/lib/dashboard.module.mjs +5 -5
- package/esm2022/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
- package/esm2022/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +21 -20
- package/esm2022/dialog/lib/dialog-container/dialog-container.component.mjs +19 -24
- package/esm2022/dialog/lib/dialog-header/dialog-header.component.mjs +5 -7
- package/esm2022/dialog/lib/dialog-link/dialog-link.component.mjs +3 -3
- package/esm2022/dialog/lib/dialog-modal/dialog-modal.component.mjs +9 -6
- package/esm2022/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +19 -26
- package/esm2022/dialog/lib/dialog.insertion.mjs +4 -3
- package/esm2022/dialog/lib/dialog.interfaces.mjs +4 -1
- package/esm2022/dialog/lib/dialog.module.mjs +6 -6
- package/esm2022/dialog/lib/dialog.ref.mjs +4 -6
- package/esm2022/dialog/lib/dialog.service.mjs +5 -3
- package/esm2022/dialog/lib/directives/confirm.directive.mjs +12 -14
- package/esm2022/elements/lib/avatar/avatar.component.mjs +75 -77
- package/esm2022/elements/lib/button/button.component.mjs +12 -10
- package/esm2022/elements/lib/checkbox/checkbox.component.mjs +21 -17
- package/esm2022/elements/lib/checkbox-group/checkbox-group.component.mjs +8 -10
- package/esm2022/elements/lib/date-picker/date-picker.component.mjs +82 -76
- package/esm2022/elements/lib/directives/addon.directive.mjs +5 -5
- package/esm2022/elements/lib/directives/extra-error-controls.directive.mjs +7 -9
- package/esm2022/elements/lib/directives/form-submit.directive.mjs +6 -3
- package/esm2022/elements/lib/directives/form-submitter.directive.mjs +5 -7
- package/esm2022/elements/lib/directives/image-upload.directive.mjs +14 -11
- package/esm2022/elements/lib/directives/input.directive.mjs +6 -4
- package/esm2022/elements/lib/elements.module.mjs +6 -6
- package/esm2022/elements/lib/file-picker/file-picker.component.mjs +52 -51
- package/esm2022/elements/lib/form-control/form-control.component.mjs +14 -14
- package/esm2022/elements/lib/form-error/form-error.component.mjs +16 -8
- package/esm2022/elements/lib/form-group/form-group.component.mjs +5 -7
- package/esm2022/elements/lib/icon/icon.component.mjs +14 -13
- package/esm2022/elements/lib/image-picker/image-picker.component.mjs +20 -17
- package/esm2022/elements/lib/multi-file-control/multi-file-control.component.mjs +28 -24
- package/esm2022/elements/lib/pipes/date.pipe.mjs +6 -8
- package/esm2022/elements/lib/pipes/file-image.pipe.mjs +6 -3
- package/esm2022/elements/lib/pipes/file-size.pipe.mjs +13 -15
- package/esm2022/elements/lib/pipes/relative-time.pipe.mjs +37 -35
- package/esm2022/elements/lib/radio-button/radio-button.component.mjs +8 -7
- package/esm2022/elements/lib/radio-group/radio-group.component.mjs +21 -20
- package/esm2022/elements/lib/spinner/spinner.component.mjs +7 -9
- package/esm2022/http/lib/classes/http.config.mjs +19 -15
- package/esm2022/http/lib/http.interfaces.mjs +1 -1
- package/esm2022/http/lib/http.module.mjs +5 -4
- package/esm2022/http/lib/interceptors/base-url.interceptor.mjs +12 -20
- package/esm2022/http/lib/interceptors/error.interceptor.mjs +9 -14
- package/esm2022/lib/core/services/exif.service.mjs +102 -100
- package/esm2022/lib/core/services/file-loader.service.mjs +15 -17
- package/esm2022/lib/core/services/files.service.mjs +7 -3
- package/esm2022/lib/core/services/image-converter.service.mjs +33 -30
- package/esm2022/lib/core/services/languages.service.mjs +25 -24
- package/esm2022/lib/core/services/network.service.mjs +8 -5
- package/esm2022/lib/core/services/patch.service.mjs +9 -6
- package/esm2022/localize/lib/dictionary/dictionary.class.mjs +7 -1
- package/esm2022/localize/lib/dictionary/dictionary.context.mjs +2 -4
- package/esm2022/localize/lib/dictionary/dictionary.data.mjs +2 -1
- package/esm2022/localize/lib/handlers/missing.handler.mjs +2 -4
- package/esm2022/localize/lib/localize.module.mjs +5 -5
- package/esm2022/localize/lib/localize.pipe.mjs +4 -3
- package/esm2022/localize/lib/localize.service.mjs +30 -21
- package/esm2022/localize/lib/transforms/interpolate.transform.mjs +5 -1
- package/esm2022/localize/lib/transforms/plural.transform.mjs +6 -4
- package/esm2022/localize/lib/transforms/reference.transform.mjs +3 -1
- package/esm2022/localize/lib/views/localize-string/localize-string.component.mjs +14 -11
- package/esm2022/localize/lib/views/localize-template.directive.mjs +6 -5
- package/esm2022/masking/lib/directives/currency-mask.directive.mjs +11 -6
- package/esm2022/masking/lib/directives/date-mask.directive.mjs +11 -6
- package/esm2022/masking/lib/directives/input-mask.directive.mjs +21 -14
- package/esm2022/masking/lib/masking.module.mjs +5 -5
- package/esm2022/masking/lib/masking.service.mjs +4 -3
- package/esm2022/notifications/lib/notifications-item/notifications-item.component.mjs +50 -36
- package/esm2022/notifications/lib/notifications-list/notifications-list.component.mjs +8 -7
- package/esm2022/notifications/lib/notifications.interfaces.mjs +10 -1
- package/esm2022/notifications/lib/notifications.module.mjs +4 -4
- package/esm2022/notifications/lib/notifications.service.mjs +24 -10
- package/esm2022/permissions/lib/directives/permission.directive.mjs +20 -14
- package/esm2022/permissions/lib/handlers/local.handler.mjs +3 -1
- package/esm2022/permissions/lib/permissions.interface.mjs +4 -1
- package/esm2022/permissions/lib/permissions.module.mjs +4 -4
- package/esm2022/permissions/lib/permissions.service.mjs +8 -7
- package/esm2022/recaptcha/lib/recaptcha/recaptcha.component.mjs +34 -27
- package/esm2022/recaptcha/lib/recaptcha-loader.service.mjs +15 -15
- package/esm2022/recaptcha/lib/recaptcha.module.mjs +4 -4
- package/esm2022/select/lib/select/select.component.mjs +52 -47
- package/esm2022/select/lib/select-label.directive.mjs +4 -3
- package/esm2022/select/lib/select-multi-label.directive.mjs +4 -3
- package/esm2022/select/lib/select-option-group.directive.mjs +4 -3
- package/esm2022/select/lib/select-option.directive.mjs +4 -3
- package/esm2022/select/lib/select.module.mjs +5 -5
- package/esm2022/storage/lib/storage.service.mjs +25 -21
- package/esm2022/storage/lib/strategies/cookie-storage.strategy.mjs +66 -64
- package/esm2022/storage/lib/strategies/memory-storage.strategy.mjs +16 -18
- package/esm2022/storage/lib/strategies/polyfill-storage.strategy.mjs +31 -30
- package/esm2022/table/lib/components/table/table.component.mjs +30 -20
- package/esm2022/table/lib/components/table-cell/table-cell.component.mjs +3 -3
- package/esm2022/table/lib/components/table-header-cell/table-header-cell.component.mjs +15 -11
- package/esm2022/table/lib/components/table-pager/table-pager.component.mjs +18 -16
- package/esm2022/table/lib/data/datasource.data.mjs +4 -6
- package/esm2022/table/lib/data/generic.data.mjs +38 -36
- package/esm2022/table/lib/table.module.mjs +6 -6
- package/esm2022/tooltip/lib/tooltip-container/tooltip-container.component.mjs +5 -7
- package/esm2022/tooltip/lib/tooltip.directive.mjs +15 -15
- package/esm2022/tooltip/lib/tooltip.module.mjs +4 -4
- package/esm2022/utils/lib/directives/autosize.directive.mjs +9 -7
- package/esm2022/utils/lib/directives/focus-trap.directive.mjs +24 -22
- package/esm2022/utils/lib/directives/focus.directive.mjs +8 -5
- package/esm2022/utils/lib/directives/template.directive.mjs +7 -3
- package/esm2022/utils/lib/utils.module.mjs +5 -5
- package/fesm2022/bravobit-bb-foundation-auth.mjs +127 -110
- package/fesm2022/bravobit-bb-foundation-auth.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-collections.mjs +123 -93
- package/fesm2022/bravobit-bb-foundation-collections.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-combobox.mjs +46 -34
- package/fesm2022/bravobit-bb-foundation-combobox.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-dashboard.mjs +60 -64
- package/fesm2022/bravobit-bb-foundation-dashboard.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-dialog.mjs +97 -103
- package/fesm2022/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-elements.mjs +468 -440
- package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-http.mjs +40 -46
- package/fesm2022/bravobit-bb-foundation-http.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-localize.mjs +74 -49
- package/fesm2022/bravobit-bb-foundation-localize.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-masking.mjs +47 -29
- package/fesm2022/bravobit-bb-foundation-masking.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-notifications.mjs +91 -53
- package/fesm2022/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-permissions.mjs +34 -22
- package/fesm2022/bravobit-bb-foundation-permissions.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-recaptcha.mjs +50 -43
- package/fesm2022/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-select.mjs +67 -58
- package/fesm2022/bravobit-bb-foundation-select.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-storage.mjs +134 -129
- package/fesm2022/bravobit-bb-foundation-storage.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-table.mjs +107 -91
- package/fesm2022/bravobit-bb-foundation-table.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-tooltip.mjs +21 -23
- package/fesm2022/bravobit-bb-foundation-tooltip.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-utils.mjs +48 -37
- package/fesm2022/bravobit-bb-foundation-utils.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation.mjs +192 -178
- package/fesm2022/bravobit-bb-foundation.mjs.map +1 -1
- package/http/lib/http.interfaces.d.ts +2 -1
- package/http/lib/interceptors/base-url.interceptor.d.ts +2 -4
- package/http/lib/interceptors/error.interceptor.d.ts +1 -3
- package/package.json +13 -13
|
@@ -1,70 +1,11 @@
|
|
|
1
1
|
export class CookieStorage {
|
|
2
|
+
_isBrowser;
|
|
3
|
+
_cookieString;
|
|
4
|
+
// State.
|
|
5
|
+
_isSupported = false;
|
|
2
6
|
constructor(_isBrowser, _cookieString) {
|
|
3
7
|
this._isBrowser = _isBrowser;
|
|
4
8
|
this._cookieString = _cookieString;
|
|
5
|
-
// State.
|
|
6
|
-
this._isSupported = false;
|
|
7
|
-
this.decode = (cookieString) => {
|
|
8
|
-
const result = {};
|
|
9
|
-
const cookies = cookieString ? cookieString.split('; ') : [];
|
|
10
|
-
const rdecode = /(%[0-9A-Z]{2})+/g;
|
|
11
|
-
for (let index = 0; index < cookies.length; index++) {
|
|
12
|
-
const parts = cookies[index].split('=');
|
|
13
|
-
let cookie = parts.slice(1).join('=');
|
|
14
|
-
if (cookie.charAt(0) === '"') {
|
|
15
|
-
cookie = cookie.slice(1, -1);
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
const name = parts[0].replace(rdecode, decodeURIComponent);
|
|
19
|
-
const value = cookie.replace(rdecode, decodeURIComponent);
|
|
20
|
-
result[name] = this.jsonParse(value);
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
// Ignore cookies with an invalid name/value encoding.
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return result;
|
|
27
|
-
};
|
|
28
|
-
this.jsonParse = (rawValue) => {
|
|
29
|
-
// Try to parse the data.
|
|
30
|
-
let parsedValue = undefined;
|
|
31
|
-
// Only parse the value when it is not null.
|
|
32
|
-
if (rawValue !== undefined) {
|
|
33
|
-
try {
|
|
34
|
-
parsedValue = JSON.parse(rawValue);
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
// The string could not be parsed to JSON.
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// Return the parsed value.
|
|
41
|
-
return parsedValue;
|
|
42
|
-
};
|
|
43
|
-
this.stringifyAttribute = (token, value) => {
|
|
44
|
-
if (!value) {
|
|
45
|
-
return '';
|
|
46
|
-
}
|
|
47
|
-
const stringified = `; ${token}`;
|
|
48
|
-
// Boolean attributes should not have a value.
|
|
49
|
-
if (value === true) {
|
|
50
|
-
return stringified;
|
|
51
|
-
}
|
|
52
|
-
return stringified + `= ${value}`;
|
|
53
|
-
};
|
|
54
|
-
this.testIfSupported = () => {
|
|
55
|
-
// We are using an aggressive test here, because we cannot rely on navigator.cookieEnabled
|
|
56
|
-
// it does not return the correct value at all times.
|
|
57
|
-
const testCookieString = `bbcookietest`;
|
|
58
|
-
try {
|
|
59
|
-
document.cookie = `${testCookieString}=1`;
|
|
60
|
-
const result = document.cookie.indexOf(`${testCookieString}=`) !== -1;
|
|
61
|
-
document.cookie = `${testCookieString}=1; expires=Thu, 01-Jan-1970 00:00:01 GMT`;
|
|
62
|
-
return result;
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
9
|
// Check if the storage is supported.
|
|
69
10
|
this._isSupported = this.testIfSupported();
|
|
70
11
|
}
|
|
@@ -119,6 +60,42 @@ export class CookieStorage {
|
|
|
119
60
|
// Return the completed encoded string.
|
|
120
61
|
return [encodedToken, '=', encodedValue, this.stringifyCookie(attributes)].join('');
|
|
121
62
|
}
|
|
63
|
+
decode = (cookieString) => {
|
|
64
|
+
const result = {};
|
|
65
|
+
const cookies = cookieString ? cookieString.split('; ') : [];
|
|
66
|
+
const rdecode = /(%[0-9A-Z]{2})+/g;
|
|
67
|
+
for (let index = 0; index < cookies.length; index++) {
|
|
68
|
+
const parts = cookies[index].split('=');
|
|
69
|
+
let cookie = parts.slice(1).join('=');
|
|
70
|
+
if (cookie.charAt(0) === '"') {
|
|
71
|
+
cookie = cookie.slice(1, -1);
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const name = parts[0].replace(rdecode, decodeURIComponent);
|
|
75
|
+
const value = cookie.replace(rdecode, decodeURIComponent);
|
|
76
|
+
result[name] = this.jsonParse(value);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Ignore cookies with an invalid name/value encoding.
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
};
|
|
84
|
+
jsonParse = (rawValue) => {
|
|
85
|
+
// Try to parse the data.
|
|
86
|
+
let parsedValue = undefined;
|
|
87
|
+
// Only parse the value when it is not null.
|
|
88
|
+
if (rawValue !== undefined) {
|
|
89
|
+
try {
|
|
90
|
+
parsedValue = JSON.parse(rawValue);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// The string could not be parsed to JSON.
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Return the parsed value.
|
|
97
|
+
return parsedValue;
|
|
98
|
+
};
|
|
122
99
|
stringifyCookie(attributes) {
|
|
123
100
|
// Make sure the expires attribute is a date and not a number.
|
|
124
101
|
if (typeof attributes.expires === 'number') {
|
|
@@ -138,5 +115,30 @@ export class CookieStorage {
|
|
|
138
115
|
+ this.stringifyAttribute('Secure', attributes.secure)
|
|
139
116
|
+ this.stringifyAttribute('SameSite', attributes.sameSite);
|
|
140
117
|
}
|
|
118
|
+
stringifyAttribute = (token, value) => {
|
|
119
|
+
if (!value) {
|
|
120
|
+
return '';
|
|
121
|
+
}
|
|
122
|
+
const stringified = `; ${token}`;
|
|
123
|
+
// Boolean attributes should not have a value.
|
|
124
|
+
if (value === true) {
|
|
125
|
+
return stringified;
|
|
126
|
+
}
|
|
127
|
+
return stringified + `= ${value}`;
|
|
128
|
+
};
|
|
129
|
+
testIfSupported = () => {
|
|
130
|
+
// We are using an aggressive test here, because we cannot rely on navigator.cookieEnabled
|
|
131
|
+
// it does not return the correct value at all times.
|
|
132
|
+
const testCookieString = `bbcookietest`;
|
|
133
|
+
try {
|
|
134
|
+
document.cookie = `${testCookieString}=1`;
|
|
135
|
+
const result = document.cookie.indexOf(`${testCookieString}=`) !== -1;
|
|
136
|
+
document.cookie = `${testCookieString}=1; expires=Thu, 01-Jan-1970 00:00:01 GMT`;
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
141
143
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLXN0b3JhZ2Uuc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL3N0b3JhZ2Uvc3JjL2xpYi9zdHJhdGVnaWVzL2Nvb2tpZS1zdG9yYWdlLnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxhQUFhO0lBS3RCLFlBQW9CLFVBQW1CLEVBQ25CLGFBQXNCO1FBRHRCLGVBQVUsR0FBVixVQUFVLENBQVM7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQVM7UUFKMUMsU0FBUztRQUNRLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBMEV2QyxXQUFNLEdBQUcsQ0FBQyxZQUFvQixFQUFFLEVBQUU7WUFDdEMsTUFBTSxNQUFNLEdBQTZCLEVBQUUsQ0FBQztZQUM1QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQztZQUVuQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFdEMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUMzQixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMs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USxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7Y0FDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDO2NBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztjQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBK0JKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb29raWVTdG9yYWdlQXR0cmlidXRlc30gZnJvbSAnLi4vaW50ZXJmYWNlcy9hdHRyaWJ1dGVzLmludGVyZmFjZSc7XG5pbXBvcnQge1N0b3JhZ2VTdHJhdGVneX0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdHJhdGVneS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgQ29va2llU3RvcmFnZSBpbXBsZW1lbnRzIFN0b3JhZ2VTdHJhdGVneSB7XG5cbiAgICAvLyBTdGF0ZS5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfaXNCcm93c2VyOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2Nvb2tpZVN0cmluZz86IHN0cmluZykge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RvcmFnZSBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIHRoaXMuX2lzU3VwcG9ydGVkID0gdGhpcy50ZXN0SWZTdXBwb3J0ZWQoKTtcbiAgICB9XG5cbiAgICBnZXQ8VCA9IGFueT4odG9rZW46IHN0cmluZykge1xuICAgICAgICAvLyBHZXQgYWxsIHZhbHVlcyBhbmQgcGljayBvbmUgb3V0LlxuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmFsbCgpO1xuICAgICAgICByZXR1cm4gdmFsdWVzPy5bdG9rZW5dIGFzIFQ7XG4gICAgfVxuXG4gICAgc2V0PFQgPSBhbnk+KHRva2VuOiBzdHJpbmcsIHZhbHVlOiBULCBhdHRyaWJ1dGVzPzogQ29va2llU3RvcmFnZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgc3RvcmFnZSBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIGlmICghdGhpcy5faXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdyaXRlIGEgbmV3IGNvb2tpZS5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gdGhpcy5lbmNvZGUodG9rZW4sIHZhbHVlLCB7cGF0aDogJy8nLCBzYW1lU2l0ZTogJ0xheCcsIC4uLmF0dHJpYnV0ZXN9KTtcbiAgICB9XG5cbiAgICByZW1vdmUodG9rZW46IHN0cmluZywgYXR0cmlidXRlcz86IENvb2tpZVN0b3JhZ2VBdHRyaWJ1dGVzKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHN0b3JhZ2UgaXMgc3VwcG9ydGVkLlxuICAgICAgICBpZiAoIXRoaXMuX2lzU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldCh0b2tlbiwgJycsIHsuLi5hdHRyaWJ1dGVzLCBleHBpcmVzOiAtMX0pO1xuICAgIH1cblxuICAgIGNsZWFyKGF0dHJpYnV0ZXM/OiBDb29raWVTdG9yYWdlQXR0cmlidXRlcykge1xuICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBzdG9yYWdlIGlzIHN1cHBvcnRlZC5cbiAgICAgICAgaWYgKCF0aGlzLl9pc1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmFsbCgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gaW4gaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRva2VuLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU3VwcG9ydGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhbGwoKSB7XG4gICAgICAgIGNvbnN0IGNvb2tpZVN0cmluZyA9IHRoaXMuX2lzQnJvd3NlclxuICAgICAgICAgICAgPyBkb2N1bWVudD8uY29va2llXG4gICAgICAgICAgICA6IHRoaXMuX2Nvb2tpZVN0cmluZztcblxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUoY29va2llU3RyaW5nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuY29kZSh0b2tlbjogc3RyaW5nLCB2YWx1ZTogYW55LCBhdHRyaWJ1dGVzOiBDb29raWVTdG9yYWdlQXR0cmlidXRlcykge1xuICAgICAgICAvLyBFbmNvZGUgdGhlIHRva2VuLlxuICAgICAgICBjb25zdCBlbmNvZGVkVG9rZW4gPSBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pXG4gICAgICAgICAgICAucmVwbGFjZSgvJSgyM3wyNHwyNnwyQnw1RXw2MHw3QykvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKC9nLCAnJTI4JykucmVwbGFjZSgvXFwpL2csICclMjknKTtcblxuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuICAgICAgICAvLyBFbmNvZGUgdGhlIHZhbHVlLlxuICAgICAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocmF3VmFsdWUpXG4gICAgICAgICAgICAucmVwbGFjZSgvJSgyM3wyNHwyNnwyQnwzQXwzQ3wzRXwzRHwyRnwzRnw0MHw1Qnw1RHw1RXw2MHw3Qnw3RHw3QykvZywgZGVjb2RlVVJJQ29tcG9uZW50KTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGNvbXBsZXRlZCBlbmNvZGVkIHN0cmluZy5cbiAgICAgICAgcmV0dXJuIFtlbmNvZGVkVG9rZW4sICc9JywgZW5jb2RlZFZhbHVlLCB0aGlzLnN0cmluZ2lmeUNvb2tpZShhdHRyaWJ1dGVzKV0uam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWNvZGUgPSAoY29va2llU3RyaW5nOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFt0b2tlbjogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgY29uc3QgY29va2llcyA9IGNvb2tpZVN0cmluZyA/IGNvb2tpZVN0cmluZy5zcGxpdCgnOyAnKSA6IFtdO1xuICAgICAgICBjb25zdCByZGVjb2RlID0gLyglWzAtOUEtWl17Mn0pKy9nO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb29raWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBjb29raWVzW2luZGV4XS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgbGV0IGNvb2tpZSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oJz0nKTtcblxuICAgICAgICAgICAgaWYgKGNvb2tpZS5jaGFyQXQoMCkgPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICBjb29raWUgPSBjb29raWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0c1swXS5yZXBsYWNlKHJkZWNvZGUsIGRlY29kZVVSSUNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb29raWUucmVwbGFjZShyZGVjb2RlLCBkZWNvZGVVUklDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHRoaXMuanNvblBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBjb29raWVzIHdpdGggYW4gaW52YWxpZCBuYW1lL3ZhbHVlIGVuY29kaW5nLlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBqc29uUGFyc2UgPSA8VCA9IGFueT4ocmF3VmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBUcnkgdG8gcGFyc2UgdGhlIGRhdGEuXG4gICAgICAgIGxldCBwYXJzZWRWYWx1ZTogVCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBPbmx5IHBhcnNlIHRoZSB2YWx1ZSB3aGVuIGl0IGlzIG5vdCBudWxsLlxuICAgICAgICBpZiAocmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IEpTT04ucGFyc2UocmF3VmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHN0cmluZyBjb3VsZCBub3QgYmUgcGFyc2VkIHRvIEpTT04uXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHBhcnNlZCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHN0cmluZ2lmeUNvb2tpZShhdHRyaWJ1dGVzOiBDb29raWVTdG9yYWdlQXR0cmlidXRlcykge1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGV4cGlyZXMgYXR0cmlidXRlIGlzIGEgZGF0ZSBhbmQgbm90IGEgbnVtYmVyLlxuICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGlyZXMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZXhwaXJlcy5zZXRNaWxsaXNlY29uZHMoZXhwaXJlcy5nZXRNaWxsaXNlY29uZHMoKSArIGF0dHJpYnV0ZXMuZXhwaXJlcyAqIDg2NGUrNSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBleHBpcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yY2Ugc2VjdXJlIHdoZW4gc2FtZVNpdGU9Tm9uZS5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc2FtZVNpdGUgPT09ICdOb25lJykge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5zZWN1cmUgPSB0cnVlO1xuICAgICAgICAgICAgY29uc29sZT8ud2Fybj8uKCdDb29rZSB3YXMgZm9yY2VkIHdpdGggc2VjdXJlIGZsYWcgYmVjYXVzZSBzYW1lU2l0ZT1Ob25lJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdHJpbmdpZnkgYWxsIGF0dHJpYnV0ZXMuXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeUF0dHJpYnV0ZSgnRXhwaXJlcycsIGF0dHJpYnV0ZXMuZXhwaXJlcyA/IGF0dHJpYnV0ZXMuZXhwaXJlcy50b1VUQ1N0cmluZygpIDogJycpXG4gICAgICAgICAgICArIHRoaXMuc3RyaW5naWZ5QXR0cmlidXRlKCdEb21haW4nLCBhdHRyaWJ1dGVzLmRvbWFpbilcbiAgICAgICAgICAgICsgdGhpcy5zdHJpbmdpZnlBdHRyaWJ1dGUoJ1BhdGgnLCBhdHRyaWJ1dGVzLnBhdGgpXG4gICAgICAgICAgICArIHRoaXMuc3RyaW5naWZ5QXR0cmlidXRlKCdTZWN1cmUnLCBhdHRyaWJ1dGVzLnNlY3VyZSlcbiAgICAgICAgICAgICsgdGhpcy5zdHJpbmdpZnlBdHRyaWJ1dGUoJ1NhbWVTaXRlJywgYXR0cmlidXRlcy5zYW1lU2l0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdHJpbmdpZnlBdHRyaWJ1dGUgPSAodG9rZW46IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBgOyAke3Rva2VufWA7XG5cbiAgICAgICAgLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIHNob3VsZCBub3QgaGF2ZSBhIHZhbHVlLlxuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdpZmllZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHJpbmdpZmllZCArIGA9ICR7dmFsdWV9YDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB0ZXN0SWZTdXBwb3J0ZWQgPSAoKSA9PiB7XG4gICAgICAgIC8vIFdlIGFyZSB1c2luZyBhbiBhZ2dyZXNzaXZlIHRlc3QgaGVyZSwgYmVjYXVzZSB3ZSBjYW5ub3QgcmVseSBvbiBuYXZpZ2F0b3IuY29va2llRW5hYmxlZFxuICAgICAgICAvLyBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgYXQgYWxsIHRpbWVzLlxuICAgICAgICBjb25zdCB0ZXN0Q29va2llU3RyaW5nID0gYGJiY29va2lldGVzdGA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBgJHt0ZXN0Q29va2llU3RyaW5nfT0xYDtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKGAke3Rlc3RDb29raWVTdHJpbmd9PWApICE9PSAtMTtcbiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke3Rlc3RDb29raWVTdHJpbmd9PTE7IGV4cGlyZXM9VGh1LCAwMS1KYW4tMTk3MCAwMDowMDowMSBHTVRgO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG59XG4iXX0=
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLXN0b3JhZ2Uuc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL3N0b3JhZ2Uvc3JjL2xpYi9zdHJhdGVnaWVzL2Nvb2tpZS1zdG9yYWdlLnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxhQUFhO0lBS0Y7SUFDQTtJQUpwQixTQUFTO0lBQ1EsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUUvQyxZQUFvQixVQUFtQixFQUNuQixhQUFzQjtRQUR0QixlQUFVLEdBQVYsVUFBVSxDQUFTO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFTO1FBQ3RDLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsR0FBRyxDQUFVLEtBQWE7UUFDdEIsbUNBQW1DO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixPQUFPLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxHQUFHLENBQVUsS0FBYSxFQUFFLEtBQVEsRUFBRSxVQUFvQztRQUN0RSwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsRUFBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhLEVBQUUsVUFBb0M7UUFDdEQsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFB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TSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGdCQUFnQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN0RSxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLDJDQUEyQyxDQUFDO1lBQ2pGLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDTCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQyxDQUFDO0NBRUwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Nvb2tpZVN0b3JhZ2VBdHRyaWJ1dGVzfSBmcm9tICcuLi9pbnRlcmZhY2VzL2F0dHJpYnV0ZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7U3RvcmFnZVN0cmF0ZWd5fSBmcm9tICcuLi9pbnRlcmZhY2VzL3N0cmF0ZWd5LmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBDb29raWVTdG9yYWdlIGltcGxlbWVudHMgU3RvcmFnZVN0cmF0ZWd5IHtcblxuICAgIC8vIFN0YXRlLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9pc0Jyb3dzZXI6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfY29va2llU3RyaW5nPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzdG9yYWdlIGlzIHN1cHBvcnRlZC5cbiAgICAgICAgdGhpcy5faXNTdXBwb3J0ZWQgPSB0aGlzLnRlc3RJZlN1cHBvcnRlZCgpO1xuICAgIH1cblxuICAgIGdldDxUID0gYW55Pih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIC8vIEdldCBhbGwgdmFsdWVzIGFuZCBwaWNrIG9uZSBvdXQuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuYWxsKCk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM/Llt0b2tlbl0gYXMgVDtcbiAgICB9XG5cbiAgICBzZXQ8VCA9IGFueT4odG9rZW46IHN0cmluZywgdmFsdWU6IFQsIGF0dHJpYnV0ZXM/OiBDb29raWVTdG9yYWdlQXR0cmlidXRlcykge1xuICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBzdG9yYWdlIGlzIHN1cHBvcnRlZC5cbiAgICAgICAgaWYgKCF0aGlzLl9pc1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV3JpdGUgYSBuZXcgY29va2llLlxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSB0aGlzLmVuY29kZSh0b2tlbiwgdmFsdWUsIHtwYXRoOiAnLycsIHNhbWVTaXRlOiAnTGF4JywgLi4uYXR0cmlidXRlc30pO1xuICAgIH1cblxuICAgIHJlbW92ZSh0b2tlbjogc3RyaW5nLCBhdHRyaWJ1dGVzPzogQ29va2llU3RvcmFnZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgc3RvcmFnZSBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIGlmICghdGhpcy5faXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0KHRva2VuLCAnJywgey4uLmF0dHJpYnV0ZXMsIGV4cGlyZXM6IC0xfSk7XG4gICAgfVxuXG4gICAgY2xlYXIoYXR0cmlidXRlcz86IENvb2tpZVN0b3JhZ2VBdHRyaWJ1dGVzKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHN0b3JhZ2UgaXMgc3VwcG9ydGVkLlxuICAgICAgICBpZiAoIXRoaXMuX2lzU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuYWxsKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBpbiBpdGVtcykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUodG9rZW4sIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTdXBwb3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFsbCgpIHtcbiAgICAgICAgY29uc3QgY29va2llU3RyaW5nID0gdGhpcy5faXNCcm93c2VyXG4gICAgICAgICAgICA/IGRvY3VtZW50Py5jb29raWVcbiAgICAgICAgICAgIDogdGhpcy5fY29va2llU3RyaW5nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlY29kZShjb29raWVTdHJpbmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5jb2RlKHRva2VuOiBzdHJpbmcsIHZhbHVlOiBhbnksIGF0dHJpYnV0ZXM6IENvb2tpZVN0b3JhZ2VBdHRyaWJ1dGVzKSB7XG4gICAgICAgIC8vIEVuY29kZSB0aGUgdG9rZW4uXG4gICAgICAgIGNvbnN0IGVuY29kZWRUb2tlbiA9IGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbilcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDVFfDYwfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoL2csICclMjgnKS5yZXBsYWNlKC9cXCkvZywgJyUyOScpO1xuXG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG4gICAgICAgIC8vIEVuY29kZSB0aGUgdmFsdWUuXG4gICAgICAgIGNvbnN0IGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChyYXdWYWx1ZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDNBfDNDfDNFfDNEfDJGfDNGfDQwfDVCfDVEfDVFfDYwfDdCfDdEfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgY29tcGxldGVkIGVuY29kZWQgc3RyaW5nLlxuICAgICAgICByZXR1cm4gW2VuY29kZWRUb2tlbiwgJz0nLCBlbmNvZGVkVmFsdWUsIHRoaXMuc3RyaW5naWZ5Q29va2llKGF0dHJpYnV0ZXMpXS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlY29kZSA9IChjb29raWVTdHJpbmc6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHsgW3Rva2VuOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICBjb25zdCBjb29raWVzID0gY29va2llU3RyaW5nID8gY29va2llU3RyaW5nLnNwbGl0KCc7ICcpIDogW107XG4gICAgICAgIGNvbnN0IHJkZWNvZGUgPSAvKCVbMC05QS1aXXsyfSkrL2c7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvb2tpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGNvb2tpZXNbaW5kZXhdLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBsZXQgY29va2llID0gcGFydHMuc2xpY2UoMSkuam9pbignPScpO1xuXG4gICAgICAgICAgICBpZiAoY29va2llLmNoYXJBdCgwKSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgIGNvb2tpZSA9IGNvb2tpZS5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHBhcnRzWzBdLnJlcGxhY2UocmRlY29kZSwgZGVjb2RlVVJJQ29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvb2tpZS5yZXBsYWNlKHJkZWNvZGUsIGRlY29kZVVSSUNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gdGhpcy5qc29uUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIGNvb2tpZXMgd2l0aCBhbiBpbnZhbGlkIG5hbWUvdmFsdWUgZW5jb2RpbmcuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBwcml2YXRlIGpzb25QYXJzZSA9IDxUID0gYW55PihyYXdWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgZGF0YS5cbiAgICAgICAgbGV0IHBhcnNlZFZhbHVlOiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIE9ubHkgcGFyc2UgdGhlIHZhbHVlIHdoZW4gaXQgaXMgbm90IG51bGwuXG4gICAgICAgIGlmIChyYXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gSlNPTi5wYXJzZShyYXdWYWx1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgc3RyaW5nIGNvdWxkIG5vdCBiZSBwYXJzZWQgdG8gSlNPTi5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcGFyc2VkIHZhbHVlLlxuICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWU7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc3RyaW5naWZ5Q29va2llKGF0dHJpYnV0ZXM6IENvb2tpZVN0b3JhZ2VBdHRyaWJ1dGVzKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZXhwaXJlcyBhdHRyaWJ1dGUgaXMgYSBkYXRlIGFuZCBub3QgYSBudW1iZXIuXG4gICAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRlcy5leHBpcmVzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgY29uc3QgZXhwaXJlcyA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBleHBpcmVzLnNldE1pbGxpc2Vjb25kcyhleHBpcmVzLmdldE1pbGxpc2Vjb25kcygpICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZSs1KTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMuZXhwaXJlcyA9IGV4cGlyZXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3JjZSBzZWN1cmUgd2hlbiBzYW1lU2l0ZT1Ob25lLlxuICAgICAgICBpZiAoYXR0cmlidXRlcy5zYW1lU2l0ZSA9PT0gJ05vbmUnKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnNlY3VyZSA9IHRydWU7XG4gICAgICAgICAgICBjb25zb2xlPy53YXJuPy4oJ0Nvb2tlIHdhcyBmb3JjZWQgd2l0aCBzZWN1cmUgZmxhZyBiZWNhdXNlIHNhbWVTaXRlPU5vbmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0cmluZ2lmeSBhbGwgYXR0cmlidXRlcy5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5QXR0cmlidXRlKCdFeHBpcmVzJywgYXR0cmlidXRlcy5leHBpcmVzID8gYXR0cmlidXRlcy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgOiAnJylcbiAgICAgICAgICAgICsgdGhpcy5zdHJpbmdpZnlBdHRyaWJ1dGUoJ0RvbWFpbicsIGF0dHJpYnV0ZXMuZG9tYWluKVxuICAgICAgICAgICAgKyB0aGlzLnN0cmluZ2lmeUF0dHJpYnV0ZSgnUGF0aCcsIGF0dHJpYnV0ZXMucGF0aClcbiAgICAgICAgICAgICsgdGhpcy5zdHJpbmdpZnlBdHRyaWJ1dGUoJ1NlY3VyZScsIGF0dHJpYnV0ZXMuc2VjdXJlKVxuICAgICAgICAgICAgKyB0aGlzLnN0cmluZ2lmeUF0dHJpYnV0ZSgnU2FtZVNpdGUnLCBhdHRyaWJ1dGVzLnNhbWVTaXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0cmluZ2lmeUF0dHJpYnV0ZSA9ICh0b2tlbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdHJpbmdpZmllZCA9IGA7ICR7dG9rZW59YDtcblxuICAgICAgICAvLyBCb29sZWFuIGF0dHJpYnV0ZXMgc2hvdWxkIG5vdCBoYXZlIGEgdmFsdWUuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkICsgYD0gJHt2YWx1ZX1gO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHRlc3RJZlN1cHBvcnRlZCA9ICgpID0+IHtcbiAgICAgICAgLy8gV2UgYXJlIHVzaW5nIGFuIGFnZ3Jlc3NpdmUgdGVzdCBoZXJlLCBiZWNhdXNlIHdlIGNhbm5vdCByZWx5IG9uIG5hdmlnYXRvci5jb29raWVFbmFibGVkXG4gICAgICAgIC8vIGl0IGRvZXMgbm90IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSBhdCBhbGwgdGltZXMuXG4gICAgICAgIGNvbnN0IHRlc3RDb29raWVTdHJpbmcgPSBgYmJjb29raWV0ZXN0YDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke3Rlc3RDb29raWVTdHJpbmd9PTFgO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YoYCR7dGVzdENvb2tpZVN0cmluZ309YCkgIT09IC0xO1xuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gYCR7dGVzdENvb2tpZVN0cmluZ309MTsgZXhwaXJlcz1UaHUsIDAxLUphbi0xOTcwIDAwOjAwOjAxIEdNVGA7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbn1cbiJdfQ==
|
|
@@ -1,21 +1,6 @@
|
|
|
1
1
|
export class MemoryStorage {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
this._storage = {};
|
|
5
|
-
this.encode = (value, attributes) => {
|
|
6
|
-
const data = { value };
|
|
7
|
-
// Make sure the expires is a date object.
|
|
8
|
-
if (typeof attributes.expires === 'number') {
|
|
9
|
-
attributes.expires = new Date(attributes.expires);
|
|
10
|
-
}
|
|
11
|
-
// Add the expire date if it was set.
|
|
12
|
-
if (attributes.expires) {
|
|
13
|
-
data['expires'] = attributes.expires;
|
|
14
|
-
}
|
|
15
|
-
// Return the encoded data.
|
|
16
|
-
return data;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
2
|
+
// State.
|
|
3
|
+
_storage = {};
|
|
19
4
|
get(token) {
|
|
20
5
|
// Grab the data from the memory storage.
|
|
21
6
|
const result = this._storage[token];
|
|
@@ -52,5 +37,18 @@ export class MemoryStorage {
|
|
|
52
37
|
// The memory storage is always supported.
|
|
53
38
|
return true;
|
|
54
39
|
}
|
|
40
|
+
encode = (value, attributes) => {
|
|
41
|
+
const data = { value };
|
|
42
|
+
// Make sure the expires is a date object.
|
|
43
|
+
if (typeof attributes.expires === 'number') {
|
|
44
|
+
attributes.expires = new Date(attributes.expires);
|
|
45
|
+
}
|
|
46
|
+
// Add the expire date if it was set.
|
|
47
|
+
if (attributes.expires) {
|
|
48
|
+
data['expires'] = attributes.expires;
|
|
49
|
+
}
|
|
50
|
+
// Return the encoded data.
|
|
51
|
+
return data;
|
|
52
|
+
};
|
|
55
53
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXN0b3JhZ2Uuc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL3N0b3JhZ2Uvc3JjL2xpYi9zdHJhdGVnaWVzL21lbW9yeS1zdG9yYWdlLnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sT0FBTyxhQUFhO0lBRXRCLFNBQVM7SUFDRCxRQUFRLEdBQXNCLEVBQUUsQ0FBQztJQUV6QyxHQUFHLENBQVUsS0FBYTtRQUN0Qix5Q0FBeUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyw0QkFBNEI7UUFDNUIsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkIsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxNQUFNLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxHQUFHLE1BQU0sQ0FBQztRQUVoQyxxQ0FBcUM7UUFDckMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRS9DLHFDQUFxQztZQUNyQyxJQUFJLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztRQUNMLENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELEdBQUcsQ0FBVSxLQUFhLEVBQUUsS0FBUSxFQUFFLFVBQW9DO1FBQ3RFLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUksS0FBSyxFQUFFLEVBQUMsR0FBRyxVQUFVLEVBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVztRQUNQLDBDQUEwQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sTUFBTSxHQUFHLENBQUksS0FBUSxFQUFFLFVBQW1DLEVBQUUsRUFBRTtRQUNsRSxNQUFNLElBQUksR0FBRyxFQUFDLEtBQUssRUFBQyxDQUFDO1FBRXJCLDBDQUEwQztRQUMxQyxJQUFJLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3pDLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0NBRUwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01lbW9yeVN0b3JhZ2VBdHRyaWJ1dGVzfSBmcm9tICcuLi9pbnRlcmZhY2VzL2F0dHJpYnV0ZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7TWVtb3J5U3RvcmFnZURhdGF9IGZyb20gJy4uL2ludGVyZmFjZXMvbWVtb3J5LmludGVyZmFjZSc7XG5pbXBvcnQge1N0b3JhZ2VTdHJhdGVneX0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdHJhdGVneS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgTWVtb3J5U3RvcmFnZSBpbXBsZW1lbnRzIFN0b3JhZ2VTdHJhdGVneSB7XG5cbiAgICAvLyBTdGF0ZS5cbiAgICBwcml2YXRlIF9zdG9yYWdlOiBNZW1vcnlTdG9yYWdlRGF0YSA9IHt9O1xuXG4gICAgZ2V0PFQgPSBhbnk+KHRva2VuOiBzdHJpbmcpOiBUIHtcbiAgICAgICAgLy8gR3JhYiB0aGUgZGF0YSBmcm9tIHRoZSBtZW1vcnkgc3RvcmFnZS5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fc3RvcmFnZVt0b2tlbl07XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGRhdGEgZXhpc3RzLlxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeHRyYWN0IHRoZSB2YWx1ZSBhbmQgZXhwaXJlIGRhdGUuXG4gICAgICAgIGNvbnN0IHt2YWx1ZSwgZXhwaXJlc30gPSByZXN1bHQ7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIHZhbHVlIGlzIHN0aWxsIHZhbGlkLlxuICAgICAgICBpZiAoZXhwaXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgZXhwaXJlRGF0ZSA9IG5ldyBEYXRlKGV4cGlyZXMpLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB2YWx1ZSBpZiBpdCBpcyBleHBpcmVkLlxuICAgICAgICAgICAgaWYgKGV4cGlyZURhdGUgPD0gbm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHZhbHVlLlxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0PFQgPSBhbnk+KHRva2VuOiBzdHJpbmcsIHZhbHVlOiBULCBhdHRyaWJ1dGVzPzogTWVtb3J5U3RvcmFnZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgLy8gU2F2ZSB0aGUgZW5jb2RlZCB2YWx1ZSB3aXRoIHRoZSBhdHRyaWJ1dGVzLlxuICAgICAgICB0aGlzLl9zdG9yYWdlW3Rva2VuXSA9IHRoaXMuZW5jb2RlPFQ+KHZhbHVlLCB7Li4uYXR0cmlidXRlc30pO1xuICAgIH1cblxuICAgIHJlbW92ZSh0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdG9yYWdlW3Rva2VuXTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fc3RvcmFnZSA9IHt9O1xuICAgIH1cblxuICAgIGlzU3VwcG9ydGVkKCkge1xuICAgICAgICAvLyBUaGUgbWVtb3J5IHN0b3JhZ2UgaXMgYWx3YXlzIHN1cHBvcnRlZC5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmNvZGUgPSA8VD4odmFsdWU6IFQsIGF0dHJpYnV0ZXM6IE1lbW9yeVN0b3JhZ2VBdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7dmFsdWV9O1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZXhwaXJlcyBpcyBhIGRhdGUgb2JqZWN0LlxuICAgICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMuZXhwaXJlcyA9IG5ldyBEYXRlKGF0dHJpYnV0ZXMuZXhwaXJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGhlIGV4cGlyZSBkYXRlIGlmIGl0IHdhcyBzZXQuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLmV4cGlyZXMpIHtcbiAgICAgICAgICAgIGRhdGFbJ2V4cGlyZXMnXSA9IGF0dHJpYnV0ZXMuZXhwaXJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiB0aGUgZW5jb2RlZCBkYXRhLlxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG59XG4iXX0=
|
|
@@ -1,35 +1,9 @@
|
|
|
1
1
|
export class PolyfillStorage {
|
|
2
|
+
_storage;
|
|
3
|
+
// State.
|
|
4
|
+
_isSupported = false;
|
|
2
5
|
constructor(_storage) {
|
|
3
6
|
this._storage = _storage;
|
|
4
|
-
// State.
|
|
5
|
-
this._isSupported = false;
|
|
6
|
-
this.encode = (value, attributes) => {
|
|
7
|
-
// Make sure the expires attribute is a date and not a number.
|
|
8
|
-
const data = { value };
|
|
9
|
-
if (typeof attributes.expires === 'number') {
|
|
10
|
-
attributes.expires = new Date(attributes.expires);
|
|
11
|
-
}
|
|
12
|
-
if (attributes.expires) {
|
|
13
|
-
data['expires'] = attributes.expires;
|
|
14
|
-
}
|
|
15
|
-
return JSON.stringify(data);
|
|
16
|
-
};
|
|
17
|
-
this.testIfSupported = () => {
|
|
18
|
-
if (typeof this._storage === 'undefined') {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
try {
|
|
22
|
-
const x = '__storage_test__';
|
|
23
|
-
this._storage.setItem(x, x);
|
|
24
|
-
this._storage.removeItem(x);
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
return error instanceof DOMException
|
|
29
|
-
&& (error.name === 'QuotaExceededError' || error.name === 'NS_ERROR_DOM_QUOTA_REACHED')
|
|
30
|
-
&& (this._storage && this._storage.length !== 0);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
7
|
// Check if the storage is supported.
|
|
34
8
|
this._isSupported = this.testIfSupported();
|
|
35
9
|
}
|
|
@@ -95,5 +69,32 @@ export class PolyfillStorage {
|
|
|
95
69
|
// Return the parsed data.
|
|
96
70
|
return parsedData;
|
|
97
71
|
}
|
|
72
|
+
encode = (value, attributes) => {
|
|
73
|
+
// Make sure the expires attribute is a date and not a number.
|
|
74
|
+
const data = { value };
|
|
75
|
+
if (typeof attributes.expires === 'number') {
|
|
76
|
+
attributes.expires = new Date(attributes.expires);
|
|
77
|
+
}
|
|
78
|
+
if (attributes.expires) {
|
|
79
|
+
data['expires'] = attributes.expires;
|
|
80
|
+
}
|
|
81
|
+
return JSON.stringify(data);
|
|
82
|
+
};
|
|
83
|
+
testIfSupported = () => {
|
|
84
|
+
if (typeof this._storage === 'undefined') {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
const x = '__storage_test__';
|
|
89
|
+
this._storage.setItem(x, x);
|
|
90
|
+
this._storage.removeItem(x);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
return error instanceof DOMException
|
|
95
|
+
&& (error.name === 'QuotaExceededError' || error.name === 'NS_ERROR_DOM_QUOTA_REACHED')
|
|
96
|
+
&& (this._storage && this._storage.length !== 0);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
98
99
|
}
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWZpbGwtc3RvcmFnZS5zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vc3RvcmFnZS9zcmMvbGliL3N0cmF0ZWdpZXMvcG9seWZpbGwtc3RvcmFnZS5zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sZUFBZTtJQUtKO0lBSHBCLFNBQVM7SUFDUSxZQUFZLEdBQVksS0FBSyxDQUFDO0lBRS9DLFlBQW9CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxHQUFHLENBQVUsS0FBYTtRQUN0QiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxHQUFHLENBQVUsS0FBYSxFQUFFLEtBQVEsRUFBRSxVQUFzQztRQUN4RSwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFJLEtBQUssRUFBRSxFQUFDLEdBQUcsVUFBVSxFQUFDLENBQUMsQ0FBQztRQUV2RCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNoQiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZ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LENBQUM7bUJBQ3BGLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0NBRUwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BvbHlmaWxsU3RvcmFnZUF0dHJpYnV0ZXN9IGZyb20gJy4uL2ludGVyZmFjZXMvYXR0cmlidXRlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtTdG9yYWdlU3RyYXRlZ3l9IGZyb20gJy4uL2ludGVyZmFjZXMvc3RyYXRlZ3kuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIFBvbHlmaWxsU3RvcmFnZSBpbXBsZW1lbnRzIFN0b3JhZ2VTdHJhdGVneSB7XG5cbiAgICAvLyBTdGF0ZS5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3RvcmFnZT86IFN0b3JhZ2UpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0b3JhZ2UgaXMgc3VwcG9ydGVkLlxuICAgICAgICB0aGlzLl9pc1N1cHBvcnRlZCA9IHRoaXMudGVzdElmU3VwcG9ydGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0PFQgPSBhbnk+KHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgc3RvcmFnZSBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIGlmICghdGhpcy5faXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGU8VD4odG9rZW4pO1xuICAgIH1cblxuICAgIHNldDxUID0gYW55Pih0b2tlbjogc3RyaW5nLCB2YWx1ZTogVCwgYXR0cmlidXRlcz86IFBvbHlmaWxsU3RvcmFnZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgc3RvcmFnZSBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIGlmICghdGhpcy5faXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0cmluZ2lmeSB0aGUgZGF0YS5cbiAgICAgICAgY29uc3QgcmF3RGF0YSA9IHRoaXMuZW5jb2RlPFQ+KHZhbHVlLCB7Li4uYXR0cmlidXRlc30pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgcmF3IGRhdGEgaW4gdGhlIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuX3N0b3JhZ2Uuc2V0SXRlbSh0b2tlbiwgcmF3RGF0YSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgc3RvcmFnZSBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIGlmICghdGhpcy5faXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgaXRlbSBpbiB0aGUgc3RvcmFnZS5cbiAgICAgICAgdGhpcy5fc3RvcmFnZS5yZW1vdmVJdGVtKHRva2VuKTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgc3RvcmFnZSBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIGlmICghdGhpcy5faXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIHRoZSBzdG9yYWdlLlxuICAgICAgICB0aGlzLl9zdG9yYWdlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaXNTdXBwb3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlY29kZTxUPih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSByYXcgZGF0YSBmcm9tIHRoZSBzdG9yYWdlLlxuICAgICAgICBjb25zdCByYXdEYXRhID0gdGhpcy5fc3RvcmFnZS5nZXRJdGVtKHRva2VuKTtcblxuICAgICAgICAvLyBUcnkgdG8gcGFyc2UgdGhlIGRhdGEuXG4gICAgICAgIGxldCBwYXJzZWREYXRhOiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIE9ubHkgcGFyc2UgdGhlIGRhdGEgd2hlbiBpdCBpcyBub3QgbnVsbC5cbiAgICAgICAgaWYgKHJhd0RhdGEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3ZhbHVlLCBleHBpcmVzfSA9IEpTT04ucGFyc2UocmF3RGF0YSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGlyZURhdGUgPSBuZXcgRGF0ZShleHBpcmVzKS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGlyZURhdGUgPD0gbm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0YSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gV2UgZG9udCBkbyBhbnl0aGluZyB3aXRoIGZhaWxlZCBwYXJzaW5nLlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwYXJzZWQgZGF0YS5cbiAgICAgICAgcmV0dXJuIHBhcnNlZERhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmNvZGUgPSA8VD4odmFsdWU6IFQsIGF0dHJpYnV0ZXM6IFBvbHlmaWxsU3RvcmFnZUF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBleHBpcmVzIGF0dHJpYnV0ZSBpcyBhIGRhdGUgYW5kIG5vdCBhIG51bWJlci5cbiAgICAgICAgY29uc3QgZGF0YSA9IHt2YWx1ZX07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBuZXcgRGF0ZShhdHRyaWJ1dGVzLmV4cGlyZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZXhwaXJlcykge1xuICAgICAgICAgICAgZGF0YVsnZXhwaXJlcyddID0gYXR0cmlidXRlcy5leHBpcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHRlc3RJZlN1cHBvcnRlZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHggPSAnX19zdG9yYWdlX3Rlc3RfXyc7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnNldEl0ZW0oeCwgeCk7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnJlbW92ZUl0ZW0oeCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvblxuICAgICAgICAgICAgICAgICYmIChlcnJvci5uYW1lID09PSAnUXVvdGFFeGNlZWRlZEVycm9yJyB8fCBlcnJvci5uYW1lID09PSAnTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQnKVxuICAgICAgICAgICAgICAgICYmICh0aGlzLl9zdG9yYWdlICYmIHRoaXMuX3N0b3JhZ2UubGVuZ3RoICE9PSAwKTtcbiAgICAgICAgfVxuICAgIH07XG5cbn1cbiJdfQ==
|