@ngx-pwa/local-storage 15.0.0 → 16.0.0
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/{esm2020 → esm2022}/lib/databases/exceptions.mjs +2 -2
- package/esm2022/lib/databases/indexeddb-database.mjs +305 -0
- package/esm2022/lib/databases/local-database.mjs +67 -0
- package/esm2022/lib/databases/localstorage-database.mjs +158 -0
- package/esm2022/lib/databases/memory-database.mjs +84 -0
- package/{esm2020 → esm2022}/lib/providers.mjs +3 -3
- package/esm2022/lib/storage.module.mjs +40 -0
- package/esm2022/lib/storages/local-storage.service.mjs +81 -0
- package/esm2022/lib/storages/storage-map.service.mjs +293 -0
- package/esm2022/lib/tokens.mjs +59 -0
- package/esm2022/lib/validation/json-schema.mjs +5 -0
- package/esm2022/lib/validation/json-validator.mjs +244 -0
- package/esm2022/public-api.mjs +12 -0
- package/{fesm2020 → fesm2022}/ngx-pwa-local-storage.mjs +543 -553
- package/fesm2022/ngx-pwa-local-storage.mjs.map +1 -0
- package/lib/databases/indexeddb-database.d.ts +2 -2
- package/lib/databases/local-database.d.ts +1 -1
- package/lib/databases/localstorage-database.d.ts +3 -3
- package/lib/databases/memory-database.d.ts +2 -2
- package/lib/providers.d.ts +1 -1
- package/lib/storage.module.d.ts +2 -2
- package/lib/storages/local-storage.service.d.ts +3 -3
- package/lib/storages/storage-map.service.d.ts +6 -7
- package/lib/tokens.d.ts +1 -1
- package/lib/validation/json-schema.d.ts +8 -8
- package/lib/validation/json-validator.d.ts +1 -1
- package/package.json +10 -16
- package/public-api.d.ts +10 -10
- package/schematics/collection.json +1 -1
- package/schematics/migration.json +1 -1
- package/schematics/ng-add/index.d.ts +1 -1
- package/schematics/ng-add/index.js +7 -7
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.json +2 -2
- package/schematics/ng-update/index.d.ts +1 -1
- package/schematics/ng-update/index.js +3 -3
- package/schematics/ng-update/index.js.map +1 -1
- package/schematics/utility/config.d.ts +1 -1
- package/schematics/utility/config.js +7 -7
- package/schematics/utility/module.d.ts +1 -1
- package/schematics/utility/module.js +6 -6
- package/schematics/utility/module.js.map +1 -1
- package/esm2020/lib/databases/indexeddb-database.mjs +0 -304
- package/esm2020/lib/databases/local-database.mjs +0 -66
- package/esm2020/lib/databases/localstorage-database.mjs +0 -160
- package/esm2020/lib/databases/memory-database.mjs +0 -83
- package/esm2020/lib/storage.module.mjs +0 -39
- package/esm2020/lib/storages/local-storage.service.mjs +0 -80
- package/esm2020/lib/storages/storage-map.service.mjs +0 -299
- package/esm2020/lib/tokens.mjs +0 -59
- package/esm2020/lib/validation/json-schema.mjs +0 -5
- package/esm2020/lib/validation/json-validator.mjs +0 -243
- package/esm2020/public-api.mjs +0 -12
- package/fesm2015/ngx-pwa-local-storage.mjs +0 -1432
- package/fesm2015/ngx-pwa-local-storage.mjs.map +0 -1
- package/fesm2020/ngx-pwa-local-storage.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/storages/exceptions.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-pwa-local-storage.mjs +0 -0
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { throwError, of, ReplaySubject } from 'rxjs';
|
|
3
|
-
import { mergeMap, catchError, tap } from 'rxjs/operators';
|
|
4
|
-
import { JSONValidator } from '../validation/json-validator';
|
|
5
|
-
import { IndexedDBDatabase } from '../databases/indexeddb-database';
|
|
6
|
-
import { LocalStorageDatabase } from '../databases/localstorage-database';
|
|
7
|
-
import { MemoryDatabase } from '../databases/memory-database';
|
|
8
|
-
import { IDB_BROKEN_ERROR } from '../databases/exceptions';
|
|
9
|
-
import { ValidationError } from './exceptions';
|
|
10
|
-
import { LS_PREFIX } from '../tokens';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "../databases/local-database";
|
|
13
|
-
import * as i2 from "../validation/json-validator";
|
|
14
|
-
export class StorageMap {
|
|
15
|
-
/**
|
|
16
|
-
* Constructor params are provided by Angular (but can also be passed manually in tests)
|
|
17
|
-
* @param database Storage to use
|
|
18
|
-
* @param jsonValidator Validator service
|
|
19
|
-
* @param LSPrefix Prefix for `localStorage` keys to avoid collision for multiple apps on the same subdomain or for interoperability
|
|
20
|
-
*/
|
|
21
|
-
constructor(database, jsonValidator = new JSONValidator(),
|
|
22
|
-
// `inject()` cannot be used here, as `StorageMap` needs other manual params
|
|
23
|
-
LSPrefix = '') {
|
|
24
|
-
this.database = database;
|
|
25
|
-
this.jsonValidator = jsonValidator;
|
|
26
|
-
this.LSPrefix = LSPrefix;
|
|
27
|
-
this.notifiers = new Map();
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* **Number of items** in storage, wrapped in an `Observable`.
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* this.storageMap.size.subscribe((size) => {
|
|
34
|
-
* console.log(size);
|
|
35
|
-
* });
|
|
36
|
-
*/
|
|
37
|
-
get size() {
|
|
38
|
-
return this.database.size
|
|
39
|
-
/* Catch if `indexedDb` is broken */
|
|
40
|
-
.pipe(this.catchIDBBroken(() => this.database.size));
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Tells you which storage engine is used. *Only useful for interoperability.*
|
|
44
|
-
* Note that due to some browsers issues in some special contexts
|
|
45
|
-
* (Firefox private mode and Safari cross-origin iframes),
|
|
46
|
-
* **this information may be wrong at initialization,**
|
|
47
|
-
* as the storage could fallback from `indexedDB` to `localStorage`
|
|
48
|
-
* only after a first read or write operation.
|
|
49
|
-
* @returns Storage engine used
|
|
50
|
-
*
|
|
51
|
-
* @see {@link https://github.com/cyrilletuzi/angular-async-local-storage/blob/main/docs/INTEROPERABILITY.md}
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* if (this.storageMap.backingEngine === 'indexedDB') {}
|
|
55
|
-
*/
|
|
56
|
-
get backingEngine() {
|
|
57
|
-
if (this.database instanceof IndexedDBDatabase) {
|
|
58
|
-
return 'indexedDB';
|
|
59
|
-
}
|
|
60
|
-
else if (this.database instanceof LocalStorageDatabase) {
|
|
61
|
-
return 'localStorage';
|
|
62
|
-
}
|
|
63
|
-
else if (this.database instanceof MemoryDatabase) {
|
|
64
|
-
return 'memory';
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
return 'unknown';
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Info about `indexedDB` database. *Only useful for interoperability.*
|
|
72
|
-
* @returns `indexedDB` database name, store name and database version.
|
|
73
|
-
* **Values will be empty if the storage is not `indexedDB`,**
|
|
74
|
-
* **so it should be used after an engine check**.
|
|
75
|
-
*
|
|
76
|
-
* @see {@link https://github.com/cyrilletuzi/angular-async-local-storage/blob/main/docs/INTEROPERABILITY.md}
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* if (this.storageMap.backingEngine === 'indexedDB') {
|
|
80
|
-
* const { database, store, version } = this.storageMap.backingStore;
|
|
81
|
-
* }
|
|
82
|
-
*/
|
|
83
|
-
get backingStore() {
|
|
84
|
-
return (this.database instanceof IndexedDBDatabase) ?
|
|
85
|
-
this.database.backingStore :
|
|
86
|
-
{ database: '', store: '', version: 0 };
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Info about `localStorage` fallback storage. *Only useful for interoperability.*
|
|
90
|
-
* @returns `localStorage` prefix.
|
|
91
|
-
* **Values will be empty if the storage is not `localStorage`,**
|
|
92
|
-
* **so it should be used after an engine check**.
|
|
93
|
-
*
|
|
94
|
-
* @see {@link https://github.com/cyrilletuzi/angular-async-local-storage/blob/main/docs/INTEROPERABILITY.md}
|
|
95
|
-
*
|
|
96
|
-
* @example
|
|
97
|
-
* if (this.storageMap.backingEngine === 'localStorage') {
|
|
98
|
-
* const { prefix } = this.storageMap.fallbackBackingStore;
|
|
99
|
-
* }
|
|
100
|
-
*/
|
|
101
|
-
get fallbackBackingStore() {
|
|
102
|
-
return (this.database instanceof LocalStorageDatabase) ?
|
|
103
|
-
{ prefix: this.database.prefix } :
|
|
104
|
-
{ prefix: '' };
|
|
105
|
-
}
|
|
106
|
-
get(key, schema) {
|
|
107
|
-
/* Get the data in storage */
|
|
108
|
-
return this.database.get(key).pipe(
|
|
109
|
-
/* Check if `indexedDb` is broken */
|
|
110
|
-
this.catchIDBBroken(() => this.database.get(key)), mergeMap((data) => {
|
|
111
|
-
/* No need to validate if the data is empty */
|
|
112
|
-
if ((data === undefined) || (data === null)) {
|
|
113
|
-
return of(undefined);
|
|
114
|
-
}
|
|
115
|
-
else if (schema) {
|
|
116
|
-
/* Validate data against a JSON schema if provided */
|
|
117
|
-
if (!this.jsonValidator.validate(data, schema)) {
|
|
118
|
-
return throwError(() => new ValidationError());
|
|
119
|
-
}
|
|
120
|
-
/* Data have been checked, so it's OK to cast */
|
|
121
|
-
return of(data);
|
|
122
|
-
}
|
|
123
|
-
/* Cast to unknown as the data wasn't checked */
|
|
124
|
-
return of(data);
|
|
125
|
-
}));
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Set an item in storage.
|
|
129
|
-
* Note that setting `null` or `undefined` will remove the item to avoid some browsers issues.
|
|
130
|
-
* @param key The item's key
|
|
131
|
-
* @param data The item's value
|
|
132
|
-
* @param schema Optional JSON schema to validate the data
|
|
133
|
-
* @returns A RxJS `Observable` to wait the end of the operation
|
|
134
|
-
*
|
|
135
|
-
* @example
|
|
136
|
-
* this.storageMap.set('key', 'value').subscribe(() => {});
|
|
137
|
-
*/
|
|
138
|
-
set(key, data, schema) {
|
|
139
|
-
/* Storing `undefined` or `null` is useless and can cause issues in `indexedDb` in some browsers,
|
|
140
|
-
* so removing item instead for all storages to have a consistent API */
|
|
141
|
-
if ((data === undefined) || (data === null)) {
|
|
142
|
-
return this.delete(key);
|
|
143
|
-
}
|
|
144
|
-
/* Validate data against a JSON schema if provided */
|
|
145
|
-
if (schema && !this.jsonValidator.validate(data, schema)) {
|
|
146
|
-
return throwError(() => new ValidationError());
|
|
147
|
-
}
|
|
148
|
-
return this.database.set(key, data).pipe(
|
|
149
|
-
/* Catch if `indexedDb` is broken */
|
|
150
|
-
this.catchIDBBroken(() => this.database.set(key, data)),
|
|
151
|
-
/* Notify watchers (must be last because it should only happen if the operation succeeds) */
|
|
152
|
-
tap(() => { this.notify(key, data); }));
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Delete an item in storage
|
|
156
|
-
* @param key The item's key
|
|
157
|
-
* @returns A RxJS `Observable` to wait the end of the operation
|
|
158
|
-
*
|
|
159
|
-
* @example
|
|
160
|
-
* this.storageMap.delete('key').subscribe(() => {});
|
|
161
|
-
*/
|
|
162
|
-
delete(key) {
|
|
163
|
-
return this.database.delete(key).pipe(
|
|
164
|
-
/* Catch if `indexedDb` is broken */
|
|
165
|
-
this.catchIDBBroken(() => this.database.delete(key)),
|
|
166
|
-
/* Notify watchers (must be last because it should only happen if the operation succeeds) */
|
|
167
|
-
tap(() => { this.notify(key, undefined); }));
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Delete all items in storage
|
|
171
|
-
* @returns A RxJS `Observable` to wait the end of the operation
|
|
172
|
-
*
|
|
173
|
-
* @example
|
|
174
|
-
* this.storageMap.clear().subscribe(() => {});
|
|
175
|
-
*/
|
|
176
|
-
clear() {
|
|
177
|
-
return this.database.clear().pipe(
|
|
178
|
-
/* Catch if `indexedDb` is broken */
|
|
179
|
-
this.catchIDBBroken(() => this.database.clear()),
|
|
180
|
-
/* Notify watchers (must be last because it should only happen if the operation succeeds) */
|
|
181
|
-
tap(() => {
|
|
182
|
-
for (const key of this.notifiers.keys()) {
|
|
183
|
-
this.notify(key, undefined);
|
|
184
|
-
}
|
|
185
|
-
}));
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Get all keys stored in storage. Note **this is an *iterating* `Observable`**:
|
|
189
|
-
* * if there is no key, the `next` callback will not be invoked,
|
|
190
|
-
* * if you need to wait the whole operation to end, be sure to act in the `complete` callback,
|
|
191
|
-
* as this `Observable` can emit several values and so will invoke the `next` callback several times.
|
|
192
|
-
* @returns A list of the keys wrapped in a RxJS `Observable`
|
|
193
|
-
*
|
|
194
|
-
* @example
|
|
195
|
-
* this.storageMap.keys().subscribe({
|
|
196
|
-
* next: (key) => { console.log(key); },
|
|
197
|
-
* complete: () => { console.log('Done'); },
|
|
198
|
-
* });
|
|
199
|
-
*/
|
|
200
|
-
keys() {
|
|
201
|
-
return this.database.keys()
|
|
202
|
-
/* Catch if `indexedDb` is broken */
|
|
203
|
-
.pipe(this.catchIDBBroken(() => this.database.keys()));
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Tells if a key exists in storage
|
|
207
|
-
* @returns A RxJS `Observable` telling if the key exists
|
|
208
|
-
*
|
|
209
|
-
* @example
|
|
210
|
-
* this.storageMap.has('key').subscribe((hasKey) => {
|
|
211
|
-
* if (hasKey) {}
|
|
212
|
-
* });
|
|
213
|
-
*/
|
|
214
|
-
has(key) {
|
|
215
|
-
return this.database.has(key)
|
|
216
|
-
/* Catch if `indexedDb` is broken */
|
|
217
|
-
.pipe(this.catchIDBBroken(() => this.database.has(key)));
|
|
218
|
-
}
|
|
219
|
-
watch(key, schema) {
|
|
220
|
-
/* Check if there is already a notifier */
|
|
221
|
-
if (!this.notifiers.has(key)) {
|
|
222
|
-
this.notifiers.set(key, new ReplaySubject(1));
|
|
223
|
-
}
|
|
224
|
-
/* Non-null assertion is required because TypeScript doesn't narrow `.has()` yet */
|
|
225
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
226
|
-
const notifier = this.notifiers.get(key);
|
|
227
|
-
/* Get the current item value */
|
|
228
|
-
(schema ? this.get(key, schema) : this.get(key)).subscribe({
|
|
229
|
-
next: (result) => notifier.next(result),
|
|
230
|
-
error: (error) => notifier.error(error),
|
|
231
|
-
});
|
|
232
|
-
/* Only the public API of the `Observable` should be returned */
|
|
233
|
-
return (schema ?
|
|
234
|
-
notifier.asObservable() :
|
|
235
|
-
notifier.asObservable());
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Notify when a value changes
|
|
239
|
-
* @param key The item's key
|
|
240
|
-
* @param data The new value
|
|
241
|
-
*/
|
|
242
|
-
notify(key, value) {
|
|
243
|
-
const notifier = this.notifiers.get(key);
|
|
244
|
-
if (notifier) {
|
|
245
|
-
notifier.next(value);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* RxJS operator to catch if `indexedDB` is broken
|
|
250
|
-
* @param operationCallback Callback with the operation to redo
|
|
251
|
-
*/
|
|
252
|
-
catchIDBBroken(operationCallback) {
|
|
253
|
-
return catchError((error) => {
|
|
254
|
-
/* Check if `indexedDB` is broken based on error message (the specific error class seems to be lost in the process) */
|
|
255
|
-
if ((error !== undefined) && (error !== null)
|
|
256
|
-
&& (typeof error === 'object') && ('message' in error)
|
|
257
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
258
|
-
&& (error.message === IDB_BROKEN_ERROR)) {
|
|
259
|
-
/* When storage is fully disabled in browser (via the "Block all cookies" option),
|
|
260
|
-
* just trying to check `localStorage` variable causes a security exception.
|
|
261
|
-
* Prevents https://github.com/cyrilletuzi/angular-async-local-storage/issues/118
|
|
262
|
-
*/
|
|
263
|
-
try {
|
|
264
|
-
if ('getItem' in localStorage) {
|
|
265
|
-
/* Fallback to `localStorage` if available */
|
|
266
|
-
this.database = new LocalStorageDatabase(this.LSPrefix);
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
/* Fallback to memory storage otherwise */
|
|
270
|
-
this.database = new MemoryDatabase();
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
catch {
|
|
274
|
-
/* Fallback to memory storage otherwise */
|
|
275
|
-
this.database = new MemoryDatabase();
|
|
276
|
-
}
|
|
277
|
-
/* Redo the operation */
|
|
278
|
-
return operationCallback();
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
/* Otherwise, rethrow the error */
|
|
282
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
283
|
-
return throwError(() => error);
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
StorageMap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: StorageMap, deps: [{ token: i1.LocalDatabase }, { token: i2.JSONValidator }, { token: LS_PREFIX }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
289
|
-
StorageMap.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: StorageMap, providedIn: 'root' });
|
|
290
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: StorageMap, decorators: [{
|
|
291
|
-
type: Injectable,
|
|
292
|
-
args: [{
|
|
293
|
-
providedIn: 'root'
|
|
294
|
-
}]
|
|
295
|
-
}], ctorParameters: function () { return [{ type: i1.LocalDatabase }, { type: i2.JSONValidator }, { type: undefined, decorators: [{
|
|
296
|
-
type: Inject,
|
|
297
|
-
args: [LS_PREFIX]
|
|
298
|
-
}] }]; } });
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1tYXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1wd2EvbG9jYWwtc3RvcmFnZS9zcmMvbGliL3N0b3JhZ2VzL3N0b3JhZ2UtbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQW9CLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU0zRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQUt0QyxNQUFNLE9BQU8sVUFBVTtJQUlyQjs7Ozs7T0FLRztJQUNILFlBQ1ksUUFBdUIsRUFDdkIsZ0JBQStCLElBQUksYUFBYSxFQUFFO0lBQzVELDRFQUE0RTtJQUN0QyxXQUFXLEVBQUU7UUFIekMsYUFBUSxHQUFSLFFBQVEsQ0FBZTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBcUM7UUFFdEIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQVozQyxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7SUFhN0Qs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LENBQUMsRUFBRTtnQkFFdkM7OzttQkFHRztnQkFDSCxJQUFJO29CQUVGLElBQUksU0FBUyxJQUFJLFlBQVksRUFBRTt3QkFFN0IsNkNBQTZDO3dCQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUV6RDt5QkFBTTt3QkFFTCwwQ0FBMEM7d0JBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztxQkFFdEM7aUJBRUY7Z0JBQUMsTUFBTTtvQkFFTiwwQ0FBMEM7b0JBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztpQkFFdEM7Z0JBRUQsd0JBQXdCO2dCQUN4QixPQUFPLGlCQUFpQixFQUFFLENBQUM7YUFFNUI7aUJBQU07Z0JBRUwsa0NBQWtDO2dCQUNsQywrREFBK0Q7Z0JBQy9ELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBRWhDO1FBRUgsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDOzt1R0F0WlUsVUFBVSw0RUFjWCxTQUFTOzJHQWRSLFVBQVUsY0FGVCxNQUFNOzJGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFlSSxNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIG9mLCBPcGVyYXRvckZ1bmN0aW9uLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCwgY2F0Y2hFcnJvciwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBKU09OU2NoZW1hLCBKU09OU2NoZW1hQm9vbGVhbiwgSlNPTlNjaGVtYUludGVnZXIsXG4gIEpTT05TY2hlbWFOdW1iZXIsIEpTT05TY2hlbWFTdHJpbmcsIEpTT05TY2hlbWFBcnJheU9mXG59IGZyb20gJy4uL3ZhbGlkYXRpb24vanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgSlNPTlZhbGlkYXRvciB9IGZyb20gJy4uL3ZhbGlkYXRpb24vanNvbi12YWxpZGF0b3InO1xuaW1wb3J0IHsgSW5kZXhlZERCRGF0YWJhc2UgfSBmcm9tICcuLi9kYXRhYmFzZXMvaW5kZXhlZGRiLWRhdGFiYXNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZURhdGFiYXNlIH0gZnJvbSAnLi4vZGF0YWJhc2VzL2xvY2Fsc3RvcmFnZS1kYXRhYmFzZSc7XG5pbXBvcnQgeyBNZW1vcnlEYXRhYmFzZSB9IGZyb20gJy4uL2RhdGFiYXNlcy9tZW1vcnktZGF0YWJhc2UnO1xuaW1wb3J0IHsgTG9jYWxEYXRhYmFzZSB9IGZyb20gJy4uL2RhdGFiYXNlcy9sb2NhbC1kYXRhYmFzZSc7XG5pbXBvcnQgeyBJREJfQlJPS0VOX0VSUk9SIH0gZnJvbSAnLi4vZGF0YWJhc2VzL2V4Y2VwdGlvbnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJztcbmltcG9ydCB7IExTX1BSRUZJWCB9IGZyb20gJy4uL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VNYXAge1xuXG4gIHByb3RlY3RlZCBub3RpZmllcnMgPSBuZXcgTWFwPHN0cmluZywgUmVwbGF5U3ViamVjdDx1bmtub3duPj4oKTtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3IgcGFyYW1zIGFyZSBwcm92aWRlZCBieSBBbmd1bGFyIChidXQgY2FuIGFsc28gYmUgcGFzc2VkIG1hbnVhbGx5IGluIHRlc3RzKVxuICAgKiBAcGFyYW0gZGF0YWJhc2UgU3RvcmFnZSB0byB1c2VcbiAgICogQHBhcmFtIGpzb25WYWxpZGF0b3IgVmFsaWRhdG9yIHNlcnZpY2VcbiAgICogQHBhcmFtIExTUHJlZml4IFByZWZpeCBmb3IgYGxvY2FsU3RvcmFnZWAga2V5cyB0byBhdm9pZCBjb2xsaXNpb24gZm9yIG11bHRpcGxlIGFwcHMgb24gdGhlIHNhbWUgc3ViZG9tYWluIG9yIGZvciBpbnRlcm9wZXJhYmlsaXR5XG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZGF0YWJhc2U6IExvY2FsRGF0YWJhc2UsXG4gICAgcHJvdGVjdGVkIGpzb25WYWxpZGF0b3I6IEpTT05WYWxpZGF0b3IgPSBuZXcgSlNPTlZhbGlkYXRvcigpLFxuICAgIC8vIGBpbmplY3QoKWAgY2Fubm90IGJlIHVzZWQgaGVyZSwgYXMgYFN0b3JhZ2VNYXBgIG5lZWRzIG90aGVyIG1hbnVhbCBwYXJhbXNcbiAgICBASW5qZWN0KExTX1BSRUZJWCkgcHJvdGVjdGVkIHJlYWRvbmx5IExTUHJlZml4ID0gJycsXG4gICkge31cblxuICAvKipcbiAgICogKipOdW1iZXIgb2YgaXRlbXMqKiBpbiBzdG9yYWdlLCB3cmFwcGVkIGluIGFuIGBPYnNlcnZhYmxlYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLnNpemUuc3Vic2NyaWJlKChzaXplKSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coc2l6ZSk7XG4gICAqIH0pO1xuICAgKi9cbiAgZ2V0IHNpemUoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblxuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLnNpemVcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgLnBpcGUodGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLnNpemUpKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFRlbGxzIHlvdSB3aGljaCBzdG9yYWdlIGVuZ2luZSBpcyB1c2VkLiAqT25seSB1c2VmdWwgZm9yIGludGVyb3BlcmFiaWxpdHkuKlxuICAgKiBOb3RlIHRoYXQgZHVlIHRvIHNvbWUgYnJvd3NlcnMgaXNzdWVzIGluIHNvbWUgc3BlY2lhbCBjb250ZXh0c1xuICAgKiAoRmlyZWZveCBwcml2YXRlIG1vZGUgYW5kIFNhZmFyaSBjcm9zcy1vcmlnaW4gaWZyYW1lcyksXG4gICAqICoqdGhpcyBpbmZvcm1hdGlvbiBtYXkgYmUgd3JvbmcgYXQgaW5pdGlhbGl6YXRpb24sKipcbiAgICogYXMgdGhlIHN0b3JhZ2UgY291bGQgZmFsbGJhY2sgZnJvbSBgaW5kZXhlZERCYCB0byBgbG9jYWxTdG9yYWdlYFxuICAgKiBvbmx5IGFmdGVyIGEgZmlyc3QgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24uXG4gICAqIEByZXR1cm5zIFN0b3JhZ2UgZW5naW5lIHVzZWRcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21haW4vZG9jcy9JTlRFUk9QRVJBQklMSVRZLm1kfVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpZiAodGhpcy5zdG9yYWdlTWFwLmJhY2tpbmdFbmdpbmUgPT09ICdpbmRleGVkREInKSB7fVxuICAgKi9cbiAgZ2V0IGJhY2tpbmdFbmdpbmUoKTogJ2luZGV4ZWREQicgfCAnbG9jYWxTdG9yYWdlJyB8ICdtZW1vcnknIHwgJ3Vua25vd24nIHtcblxuICAgIGlmICh0aGlzLmRhdGFiYXNlIGluc3RhbmNlb2YgSW5kZXhlZERCRGF0YWJhc2UpIHtcblxuICAgICAgcmV0dXJuICdpbmRleGVkREInO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGFiYXNlIGluc3RhbmNlb2YgTG9jYWxTdG9yYWdlRGF0YWJhc2UpIHtcblxuICAgICAgcmV0dXJuICdsb2NhbFN0b3JhZ2UnO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGFiYXNlIGluc3RhbmNlb2YgTWVtb3J5RGF0YWJhc2UpIHtcblxuICAgICAgcmV0dXJuICdtZW1vcnknO1xuXG4gICAgfSBlbHNlIHtcblxuICAgICAgcmV0dXJuICd1bmtub3duJztcblxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIEluZm8gYWJvdXQgYGluZGV4ZWREQmAgZGF0YWJhc2UuICpPbmx5IHVzZWZ1bCBmb3IgaW50ZXJvcGVyYWJpbGl0eS4qXG4gICAqIEByZXR1cm5zIGBpbmRleGVkREJgIGRhdGFiYXNlIG5hbWUsIHN0b3JlIG5hbWUgYW5kIGRhdGFiYXNlIHZlcnNpb24uXG4gICAqICoqVmFsdWVzIHdpbGwgYmUgZW1wdHkgaWYgdGhlIHN0b3JhZ2UgaXMgbm90IGBpbmRleGVkREJgLCoqXG4gICAqICoqc28gaXQgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYW4gZW5naW5lIGNoZWNrKiouXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYWluL2RvY3MvSU5URVJPUEVSQUJJTElUWS5tZH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaWYgKHRoaXMuc3RvcmFnZU1hcC5iYWNraW5nRW5naW5lID09PSAnaW5kZXhlZERCJykge1xuICAgKiAgIGNvbnN0IHsgZGF0YWJhc2UsIHN0b3JlLCB2ZXJzaW9uIH0gPSB0aGlzLnN0b3JhZ2VNYXAuYmFja2luZ1N0b3JlO1xuICAgKiB9XG4gICAqL1xuICBnZXQgYmFja2luZ1N0b3JlKCk6IHsgZGF0YWJhc2U6IHN0cmluZywgc3RvcmU6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyIH0ge1xuXG4gICAgcmV0dXJuICh0aGlzLmRhdGFiYXNlIGluc3RhbmNlb2YgSW5kZXhlZERCRGF0YWJhc2UpID9cbiAgICAgIHRoaXMuZGF0YWJhc2UuYmFja2luZ1N0b3JlIDpcbiAgICAgIHsgZGF0YWJhc2U6ICcnLCBzdG9yZTogJycsIHZlcnNpb246IDAgfTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEluZm8gYWJvdXQgYGxvY2FsU3RvcmFnZWAgZmFsbGJhY2sgc3RvcmFnZS4gKk9ubHkgdXNlZnVsIGZvciBpbnRlcm9wZXJhYmlsaXR5LipcbiAgICogQHJldHVybnMgYGxvY2FsU3RvcmFnZWAgcHJlZml4LlxuICAgKiAqKlZhbHVlcyB3aWxsIGJlIGVtcHR5IGlmIHRoZSBzdG9yYWdlIGlzIG5vdCBgbG9jYWxTdG9yYWdlYCwqKlxuICAgKiAqKnNvIGl0IHNob3VsZCBiZSB1c2VkIGFmdGVyIGFuIGVuZ2luZSBjaGVjayoqLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFpbi9kb2NzL0lOVEVST1BFUkFCSUxJVFkubWR9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGlmICh0aGlzLnN0b3JhZ2VNYXAuYmFja2luZ0VuZ2luZSA9PT0gJ2xvY2FsU3RvcmFnZScpIHtcbiAgICogICBjb25zdCB7IHByZWZpeCB9ID0gdGhpcy5zdG9yYWdlTWFwLmZhbGxiYWNrQmFja2luZ1N0b3JlO1xuICAgKiB9XG4gICAqL1xuICBnZXQgZmFsbGJhY2tCYWNraW5nU3RvcmUoKTogeyBwcmVmaXg6IHN0cmluZyB9IHtcblxuICAgIHJldHVybiAodGhpcy5kYXRhYmFzZSBpbnN0YW5jZW9mIExvY2FsU3RvcmFnZURhdGFiYXNlKSA/XG4gICAgICB7IHByZWZpeDogdGhpcy5kYXRhYmFzZS5wcmVmaXggfSA6XG4gICAgICB7IHByZWZpeDogJycgfTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpdGVtIHZhbHVlIGluIHN0b3JhZ2UuXG4gICAqIFRoZSBzaWduYXR1cmUgaGFzIG1hbnkgb3ZlcmxvYWRzIGR1ZSB0byB2YWxpZGF0aW9uLCAqKnBsZWFzZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbi4qKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFpbi9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqIEBwYXJhbSBrZXkgVGhlIGl0ZW0ncyBrZXlcbiAgICogQHBhcmFtIHNjaGVtYSBPcHRpb25hbCBKU09OIHNjaGVtYSB0byB2YWxpZGF0ZSB0aGUgZGF0YVxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSdzIHZhbHVlIGlmIHRoZSBrZXkgZXhpc3RzLCBgdW5kZWZpbmVkYCBvdGhlcndpc2UsIHdyYXBwZWQgaW4gYSBSeEpTIGBPYnNlcnZhYmxlYFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0aGlzLnN0b3JhZ2VNYXAuZ2V0KCdrZXknLCB7IHR5cGU6ICdzdHJpbmcnIH0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAqICAgcmVzdWx0OyAvLyBzdHJpbmcgb3IgdW5kZWZpbmVkXG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpbnRlcmZhY2UgVXNlciB7XG4gICAqICAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gICAqICAgbGFzdE5hbWU/OiBzdHJpbmc7XG4gICAqIH1cbiAgICpcbiAgICogY29uc3Qgc2NoZW1hID0ge1xuICAgKiAgIHR5cGU6ICdvYmplY3QnLFxuICAgKiAgIHByb3BlcnRpZXM6IHtcbiAgICogICAgIGZpcnN0TmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgKiAgICAgbGFzdE5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICogICB9LFxuICAgKiAgIHJlcXVpcmVkOiBbJ2ZpcnN0TmFtZSddXG4gICAqIH07XG4gICAqXG4gICAqIHRoaXMuc3RvcmFnZU1hcC5nZXQ8VXNlcj4oJ3VzZXInLCBzY2hlbWEpLnN1YnNjcmliZSgodXNlcikgPT4ge1xuICAgKiAgIGlmICh1c2VyKSB7XG4gICAqICAgICB1c2VyLmZpcnN0TmFtZTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKi9cbiAgZ2V0KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPjtcbiAgZ2V0PFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFTdHJpbmcpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICBnZXQ8VCBleHRlbmRzIG51bWJlciA9IG51bWJlcj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUludGVnZXIgfCBKU09OU2NoZW1hTnVtYmVyKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgZ2V0PFQgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUJvb2xlYW4pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICBnZXQ8VCBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdID0gc3RyaW5nW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFTdHJpbmc+KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgZ2V0PFQgZXh0ZW5kcyByZWFkb25seSBudW1iZXJbXSA9IG51bWJlcltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hSW50ZWdlciB8IEpTT05TY2hlbWFOdW1iZXI+KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gIGdldDxUIGV4dGVuZHMgcmVhZG9ubHkgYm9vbGVhbltdID0gYm9vbGVhbltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hQm9vbGVhbj4pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICBnZXQ8VD4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD47XG4gIGdldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIHNjaGVtYT86IEpTT05TY2hlbWEpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcblxuICAgIC8qIEdldCB0aGUgZGF0YSBpbiBzdG9yYWdlICovXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0KGtleSkucGlwZShcbiAgICAgIC8qIENoZWNrIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgdGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLmdldChrZXkpKSxcbiAgICAgIG1lcmdlTWFwKChkYXRhKSA9PiB7XG5cbiAgICAgICAgLyogTm8gbmVlZCB0byB2YWxpZGF0ZSBpZiB0aGUgZGF0YSBpcyBlbXB0eSAqL1xuICAgICAgICBpZiAoKGRhdGEgPT09IHVuZGVmaW5lZCkgfHwgKGRhdGEgPT09IG51bGwpKSB7XG5cbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYSkge1xuXG4gICAgICAgICAgLyogVmFsaWRhdGUgZGF0YSBhZ2FpbnN0IGEgSlNPTiBzY2hlbWEgaWYgcHJvdmlkZWQgKi9cbiAgICAgICAgICBpZiAoIXRoaXMuanNvblZhbGlkYXRvci52YWxpZGF0ZShkYXRhLCBzY2hlbWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgVmFsaWRhdGlvbkVycm9yKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qIERhdGEgaGF2ZSBiZWVuIGNoZWNrZWQsIHNvIGl0J3MgT0sgdG8gY2FzdCAqL1xuICAgICAgICAgIHJldHVybiBvZihkYXRhIGFzIFQgfCB1bmRlZmluZWQpO1xuXG4gICAgICAgIH1cblxuICAgICAgICAvKiBDYXN0IHRvIHVua25vd24gYXMgdGhlIGRhdGEgd2Fzbid0IGNoZWNrZWQgKi9cbiAgICAgICAgcmV0dXJuIG9mKGRhdGEpO1xuXG4gICAgICB9KSxcbiAgICApO1xuXG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGl0ZW0gaW4gc3RvcmFnZS5cbiAgICogTm90ZSB0aGF0IHNldHRpbmcgYG51bGxgIG9yIGB1bmRlZmluZWRgIHdpbGwgcmVtb3ZlIHRoZSBpdGVtIHRvIGF2b2lkIHNvbWUgYnJvd3NlcnMgaXNzdWVzLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEBwYXJhbSBkYXRhIFRoZSBpdGVtJ3MgdmFsdWVcbiAgICogQHBhcmFtIHNjaGVtYSBPcHRpb25hbCBKU09OIHNjaGVtYSB0byB2YWxpZGF0ZSB0aGUgZGF0YVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMuc3RvcmFnZU1hcC5zZXQoJ2tleScsICd2YWx1ZScpLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAqL1xuICBzZXQoa2V5OiBzdHJpbmcsIGRhdGE6IHVua25vd24sIHNjaGVtYT86IEpTT05TY2hlbWEpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuXG4gICAgLyogU3RvcmluZyBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaXMgdXNlbGVzcyBhbmQgY2FuIGNhdXNlIGlzc3VlcyBpbiBgaW5kZXhlZERiYCBpbiBzb21lIGJyb3dzZXJzLFxuICAgICAqIHNvIHJlbW92aW5nIGl0ZW0gaW5zdGVhZCBmb3IgYWxsIHN0b3JhZ2VzIHRvIGhhdmUgYSBjb25zaXN0ZW50IEFQSSAqL1xuICAgIGlmICgoZGF0YSA9PT0gdW5kZWZpbmVkKSB8fCAoZGF0YSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIC8qIFZhbGlkYXRlIGRhdGEgYWdhaW5zdCBhIEpTT04gc2NoZW1hIGlmIHByb3ZpZGVkICovXG4gICAgaWYgKHNjaGVtYSAmJiAhdGhpcy5qc29uVmFsaWRhdG9yLnZhbGlkYXRlKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBWYWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2Uuc2V0KGtleSwgZGF0YSkucGlwZShcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgdGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLnNldChrZXksIGRhdGEpKSxcbiAgICAgIC8qIE5vdGlmeSB3YXRjaGVycyAobXVzdCBiZSBsYXN0IGJlY2F1c2UgaXQgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMpICovXG4gICAgICB0YXAoKCkgPT4geyB0aGlzLm5vdGlmeShrZXksIGRhdGEpOyB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBpdGVtIGluIHN0b3JhZ2VcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMuc3RvcmFnZU1hcC5kZWxldGUoJ2tleScpLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAqL1xuICBkZWxldGUoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZGVsZXRlKGtleSkucGlwZShcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgdGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLmRlbGV0ZShrZXkpKSxcbiAgICAgIC8qIE5vdGlmeSB3YXRjaGVycyAobXVzdCBiZSBsYXN0IGJlY2F1c2UgaXQgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMpICovXG4gICAgICB0YXAoKCkgPT4geyB0aGlzLm5vdGlmeShrZXksIHVuZGVmaW5lZCk7IH0pLFxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYWxsIGl0ZW1zIGluIHN0b3JhZ2VcbiAgICogQHJldHVybnMgQSBSeEpTIGBPYnNlcnZhYmxlYCB0byB3YWl0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0aGlzLnN0b3JhZ2VNYXAuY2xlYXIoKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgKi9cbiAgY2xlYXIoKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+IHtcblxuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmNsZWFyKCkucGlwZShcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgdGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLmNsZWFyKCkpLFxuICAgICAgLyogTm90aWZ5IHdhdGNoZXJzIChtdXN0IGJlIGxhc3QgYmVjYXVzZSBpdCBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcykgKi9cbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMubm90aWZpZXJzLmtleXMoKSkge1xuICAgICAgICAgIHRoaXMubm90aWZ5KGtleSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwga2V5cyBzdG9yZWQgaW4gc3RvcmFnZS4gTm90ZSAqKnRoaXMgaXMgYW4gKml0ZXJhdGluZyogYE9ic2VydmFibGVgKio6XG4gICAqICogaWYgdGhlcmUgaXMgbm8ga2V5LCB0aGUgYG5leHRgIGNhbGxiYWNrIHdpbGwgbm90IGJlIGludm9rZWQsXG4gICAqICogaWYgeW91IG5lZWQgdG8gd2FpdCB0aGUgd2hvbGUgb3BlcmF0aW9uIHRvIGVuZCwgYmUgc3VyZSB0byBhY3QgaW4gdGhlIGBjb21wbGV0ZWAgY2FsbGJhY2ssXG4gICAqIGFzIHRoaXMgYE9ic2VydmFibGVgIGNhbiBlbWl0IHNldmVyYWwgdmFsdWVzIGFuZCBzbyB3aWxsIGludm9rZSB0aGUgYG5leHRgIGNhbGxiYWNrIHNldmVyYWwgdGltZXMuXG4gICAqIEByZXR1cm5zIEEgbGlzdCBvZiB0aGUga2V5cyB3cmFwcGVkIGluIGEgUnhKUyBgT2JzZXJ2YWJsZWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLmtleXMoKS5zdWJzY3JpYmUoe1xuICAgKiAgIG5leHQ6IChrZXkpID0+IHsgY29uc29sZS5sb2coa2V5KTsgfSxcbiAgICogICBjb21wbGV0ZTogKCkgPT4geyBjb25zb2xlLmxvZygnRG9uZScpOyB9LFxuICAgKiB9KTtcbiAgICovXG4gIGtleXMoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmtleXMoKVxuICAgICAgLyogQ2F0Y2ggaWYgYGluZGV4ZWREYmAgaXMgYnJva2VuICovXG4gICAgICAucGlwZSh0aGlzLmNhdGNoSURCQnJva2VuKCgpID0+IHRoaXMuZGF0YWJhc2Uua2V5cygpKSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBUZWxscyBpZiBhIGtleSBleGlzdHMgaW4gc3RvcmFnZVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRlbGxpbmcgaWYgdGhlIGtleSBleGlzdHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLmhhcygna2V5Jykuc3Vic2NyaWJlKChoYXNLZXkpID0+IHtcbiAgICogICBpZiAoaGFzS2V5KSB7fVxuICAgKiB9KTtcbiAgICovXG4gIGhhcyhrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuaGFzKGtleSlcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgLnBpcGUodGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLmhhcyhrZXkpKSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaCBhbiBpdGVtIHZhbHVlIGluIHN0b3JhZ2UuXG4gICAqICoqTm90ZSBvbmx5IGNoYW5nZXMgZG9uZSB2aWEgdGhpcyBsaWIgd2lsbCBiZSB3YXRjaGVkKiosIGV4dGVybmFsIGNoYW5nZXMgaW4gc3RvcmFnZSBjYW4ndCBiZSBkZXRlY3RlZC5cbiAgICogVGhlIHNpZ25hdHVyZSBoYXMgbWFueSBvdmVybG9hZHMgZHVlIHRvIHZhbGlkYXRpb24sICoqcGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uLioqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21haW4vZG9jcy9WQUxJREFUSU9OLm1kXG4gICAqIEBwYXJhbSBrZXkgVGhlIGl0ZW0ncyBrZXkgdG8gd2F0Y2hcbiAgICogQHBhcmFtIHNjaGVtYSBPcHRpb25hbCBKU09OIHNjaGVtYSB0byB2YWxpZGF0ZSB0aGUgaW5pdGlhbCB2YWx1ZVxuICAgKiBAcmV0dXJucyBBbiBpbmZpbml0ZSBgT2JzZXJ2YWJsZWAgZ2l2aW5nIHRoZSBjdXJyZW50IHZhbHVlXG4gICAqL1xuICB3YXRjaChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj47XG4gIHdhdGNoPFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFTdHJpbmcpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICB3YXRjaDxUIGV4dGVuZHMgbnVtYmVyID0gbnVtYmVyPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hSW50ZWdlciB8IEpTT05TY2hlbWFOdW1iZXIpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICB3YXRjaDxUIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFCb29sZWFuKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgd2F0Y2g8VCBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdID0gc3RyaW5nW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFTdHJpbmc+KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgd2F0Y2g8VCBleHRlbmRzIHJlYWRvbmx5IG51bWJlcltdID0gbnVtYmVyW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFJbnRlZ2VyIHwgSlNPTlNjaGVtYU51bWJlcj4pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgd2F0Y2g8VCBleHRlbmRzIHJlYWRvbmx5IGJvb2xlYW5bXSA9IGJvb2xlYW5bXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYUJvb2xlYW4+KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgd2F0Y2g8VD4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD47XG4gIHdhdGNoPFQgPSB1bmtub3duPihrZXk6IHN0cmluZywgc2NoZW1hPzogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuXG4gICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIG5vdGlmaWVyICovXG4gICAgaWYgKCF0aGlzLm5vdGlmaWVycy5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5ub3RpZmllcnMuc2V0KGtleSwgbmV3IFJlcGxheVN1YmplY3QoMSkpO1xuICAgIH1cblxuICAgIC8qIE5vbi1udWxsIGFzc2VydGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIFR5cGVTY3JpcHQgZG9lc24ndCBuYXJyb3cgYC5oYXMoKWAgeWV0ICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBjb25zdCBub3RpZmllciA9IHRoaXMubm90aWZpZXJzLmdldChrZXkpITtcblxuICAgIC8qIEdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlICovXG4gICAgKHNjaGVtYSA/IHRoaXMuZ2V0PFQ+KGtleSwgc2NoZW1hKSA6IHRoaXMuZ2V0KGtleSkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzdWx0KSA9PiBub3RpZmllci5uZXh0KHJlc3VsdCksXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiBub3RpZmllci5lcnJvcihlcnJvciksXG4gICAgfSk7XG5cbiAgICAvKiBPbmx5IHRoZSBwdWJsaWMgQVBJIG9mIHRoZSBgT2JzZXJ2YWJsZWAgc2hvdWxkIGJlIHJldHVybmVkICovXG4gICAgcmV0dXJuIChzY2hlbWEgP1xuICAgICAgbm90aWZpZXIuYXNPYnNlcnZhYmxlKCkgYXMgT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiA6XG4gICAgICBub3RpZmllci5hc09ic2VydmFibGUoKVxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgd2hlbiBhIHZhbHVlIGNoYW5nZXNcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcGFyYW0gZGF0YSBUaGUgbmV3IHZhbHVlXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuXG4gICAgY29uc3Qgbm90aWZpZXIgPSB0aGlzLm5vdGlmaWVycy5nZXQoa2V5KTtcblxuICAgIGlmIChub3RpZmllcikge1xuICAgICAgbm90aWZpZXIubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogUnhKUyBvcGVyYXRvciB0byBjYXRjaCBpZiBgaW5kZXhlZERCYCBpcyBicm9rZW5cbiAgICogQHBhcmFtIG9wZXJhdGlvbkNhbGxiYWNrIENhbGxiYWNrIHdpdGggdGhlIG9wZXJhdGlvbiB0byByZWRvXG4gICAqL1xuICBwcm90ZWN0ZWQgY2F0Y2hJREJCcm9rZW48VD4ob3BlcmF0aW9uQ2FsbGJhY2s6ICgpID0+IE9ic2VydmFibGU8VD4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQ+IHtcblxuICAgIHJldHVybiBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuXG4gICAgICAvKiBDaGVjayBpZiBgaW5kZXhlZERCYCBpcyBicm9rZW4gYmFzZWQgb24gZXJyb3IgbWVzc2FnZSAodGhlIHNwZWNpZmljIGVycm9yIGNsYXNzIHNlZW1zIHRvIGJlIGxvc3QgaW4gdGhlIHByb2Nlc3MpICovXG4gICAgICBpZiAoKGVycm9yICE9PSB1bmRlZmluZWQpICYmIChlcnJvciAhPT0gbnVsbClcbiAgICAgICYmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSAmJiAoJ21lc3NhZ2UnIGluIGVycm9yKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgJiYgKGVycm9yLm1lc3NhZ2UgPT09IElEQl9CUk9LRU5fRVJST1IpKSB7XG5cbiAgICAgICAgLyogV2hlbiBzdG9yYWdlIGlzIGZ1bGx5IGRpc2FibGVkIGluIGJyb3dzZXIgKHZpYSB0aGUgXCJCbG9jayBhbGwgY29va2llc1wiIG9wdGlvbiksXG4gICAgICAgICAqIGp1c3QgdHJ5aW5nIHRvIGNoZWNrIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIGNhdXNlcyBhIHNlY3VyaXR5IGV4Y2VwdGlvbi5cbiAgICAgICAgICogUHJldmVudHMgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9pc3N1ZXMvMTE4XG4gICAgICAgICAqL1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgaWYgKCdnZXRJdGVtJyBpbiBsb2NhbFN0b3JhZ2UpIHtcblxuICAgICAgICAgICAgLyogRmFsbGJhY2sgdG8gYGxvY2FsU3RvcmFnZWAgaWYgYXZhaWxhYmxlICovXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gbmV3IExvY2FsU3RvcmFnZURhdGFiYXNlKHRoaXMuTFNQcmVmaXgpO1xuXG4gICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgLyogRmFsbGJhY2sgdG8gbWVtb3J5IHN0b3JhZ2Ugb3RoZXJ3aXNlICovXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gbmV3IE1lbW9yeURhdGFiYXNlKCk7XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBjYXRjaCB7XG5cbiAgICAgICAgICAvKiBGYWxsYmFjayB0byBtZW1vcnkgc3RvcmFnZSBvdGhlcndpc2UgKi9cbiAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gbmV3IE1lbW9yeURhdGFiYXNlKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFJlZG8gdGhlIG9wZXJhdGlvbiAqL1xuICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGJhY2soKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvKiBPdGhlcndpc2UsIHJldGhyb3cgdGhlIGVycm9yICovXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG5cbiAgICAgIH1cblxuICAgIH0pO1xuXG4gIH1cblxufVxuIl19
|
package/esm2020/lib/tokens.mjs
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* Token to provide a prefix to `localStorage` keys.
|
|
4
|
-
*/
|
|
5
|
-
export const LS_PREFIX = new InjectionToken('localStoragePrefix', {
|
|
6
|
-
providedIn: 'root',
|
|
7
|
-
factory: () => ''
|
|
8
|
-
});
|
|
9
|
-
/**
|
|
10
|
-
* Default name used for `indexedDB` database.
|
|
11
|
-
*/
|
|
12
|
-
export const DEFAULT_IDB_DB_NAME = 'ngStorage';
|
|
13
|
-
/**
|
|
14
|
-
* Token to provide `indexedDB` database name.
|
|
15
|
-
*/
|
|
16
|
-
export const IDB_DB_NAME = new InjectionToken('localStorageIDBDBName', {
|
|
17
|
-
providedIn: 'root',
|
|
18
|
-
factory: () => DEFAULT_IDB_DB_NAME
|
|
19
|
-
});
|
|
20
|
-
/**
|
|
21
|
-
* Default version used for `indexedDB` database.
|
|
22
|
-
*/
|
|
23
|
-
export const DEFAULT_IDB_DB_VERSION = 1;
|
|
24
|
-
/**
|
|
25
|
-
* Token to provide `indexedDB` database version.
|
|
26
|
-
* Must be an unsigned **integer**.
|
|
27
|
-
*/
|
|
28
|
-
export const IDB_DB_VERSION = new InjectionToken('localStorageIDBDBVersion', {
|
|
29
|
-
providedIn: 'root',
|
|
30
|
-
factory: () => DEFAULT_IDB_DB_VERSION
|
|
31
|
-
});
|
|
32
|
-
/**
|
|
33
|
-
* Default name used for `indexedDB` object store.
|
|
34
|
-
*/
|
|
35
|
-
export const DEFAULT_IDB_STORE_NAME = 'localStorage';
|
|
36
|
-
/**
|
|
37
|
-
* Token to provide `indexedDB` store name.
|
|
38
|
-
* For backward compatibility, the default can't be set now, `IndexedDBDatabase` will do it at runtime.
|
|
39
|
-
*/
|
|
40
|
-
export const IDB_STORE_NAME = new InjectionToken('localStorageIDBStoreName', {
|
|
41
|
-
providedIn: 'root',
|
|
42
|
-
factory: () => DEFAULT_IDB_STORE_NAME
|
|
43
|
-
});
|
|
44
|
-
/**
|
|
45
|
-
* Default value for interoperability with native `indexedDB` and other storage libs,
|
|
46
|
-
* by changing how values are stored in `indexedDB` database.
|
|
47
|
-
*/
|
|
48
|
-
export const DEFAULT_IDB_NO_WRAP = true;
|
|
49
|
-
/**
|
|
50
|
-
* Token to allow interoperability with native `indexedDB` and other storage libs,
|
|
51
|
-
* by changing how values are stored in `indexedDB` database.
|
|
52
|
-
* Defaults to `true`. Change to `false` for backward compatiblity in existing applications.
|
|
53
|
-
* **DO NOT CHANGE THIS BEHAVIOR ONCE IN PRODUCTION**, as it would break with existing data.
|
|
54
|
-
*/
|
|
55
|
-
export const IDB_NO_WRAP = new InjectionToken('localStorageIDBWrap', {
|
|
56
|
-
providedIn: 'root',
|
|
57
|
-
factory: () => DEFAULT_IDB_NO_WRAP
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXB3YS9sb2NhbC1zdG9yYWdlL3NyYy9saWIvdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVMsb0JBQW9CLEVBQUU7SUFDeEUsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDbEIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQVMsdUJBQXVCLEVBQUU7SUFDN0UsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLG1CQUFtQjtDQUNuQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUV4Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQVMsMEJBQTBCLEVBQUU7SUFDbkYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNCQUFzQjtDQUN0QyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGNBQWMsQ0FBQztBQUVyRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQVMsMEJBQTBCLEVBQUU7SUFDbkYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNCQUFzQjtDQUN0QyxDQUFDLENBQUM7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFeEM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQVUscUJBQXFCLEVBQUU7SUFDNUUsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLG1CQUFtQjtDQUNuQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRva2VuIHRvIHByb3ZpZGUgYSBwcmVmaXggdG8gYGxvY2FsU3RvcmFnZWAga2V5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IExTX1BSRUZJWCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdsb2NhbFN0b3JhZ2VQcmVmaXgnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gJydcbn0pO1xuXG4vKipcbiAqIERlZmF1bHQgbmFtZSB1c2VkIGZvciBgaW5kZXhlZERCYCBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSURCX0RCX05BTUUgPSAnbmdTdG9yYWdlJztcblxuLyoqXG4gKiBUb2tlbiB0byBwcm92aWRlIGBpbmRleGVkREJgIGRhdGFiYXNlIG5hbWUuXG4gKi9cbmV4cG9ydCBjb25zdCBJREJfREJfTkFNRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdsb2NhbFN0b3JhZ2VJREJEQk5hbWUnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gREVGQVVMVF9JREJfREJfTkFNRVxufSk7XG5cbi8qKlxuICogRGVmYXVsdCB2ZXJzaW9uIHVzZWQgZm9yIGBpbmRleGVkREJgIGRhdGFiYXNlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9JREJfREJfVkVSU0lPTiA9IDE7XG5cbi8qKlxuICogVG9rZW4gdG8gcHJvdmlkZSBgaW5kZXhlZERCYCBkYXRhYmFzZSB2ZXJzaW9uLlxuICogTXVzdCBiZSBhbiB1bnNpZ25lZCAqKmludGVnZXIqKi5cbiAqL1xuZXhwb3J0IGNvbnN0IElEQl9EQl9WRVJTSU9OID0gbmV3IEluamVjdGlvblRva2VuPG51bWJlcj4oJ2xvY2FsU3RvcmFnZUlEQkRCVmVyc2lvbicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0lEQl9EQl9WRVJTSU9OXG59KTtcblxuLyoqXG4gKiBEZWZhdWx0IG5hbWUgdXNlZCBmb3IgYGluZGV4ZWREQmAgb2JqZWN0IHN0b3JlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9JREJfU1RPUkVfTkFNRSA9ICdsb2NhbFN0b3JhZ2UnO1xuXG4vKipcbiAqIFRva2VuIHRvIHByb3ZpZGUgYGluZGV4ZWREQmAgc3RvcmUgbmFtZS5cbiAqIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgZGVmYXVsdCBjYW4ndCBiZSBzZXQgbm93LCBgSW5kZXhlZERCRGF0YWJhc2VgIHdpbGwgZG8gaXQgYXQgcnVudGltZS5cbiAqL1xuZXhwb3J0IGNvbnN0IElEQl9TVE9SRV9OQU1FID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ2xvY2FsU3RvcmFnZUlEQlN0b3JlTmFtZScsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0lEQl9TVE9SRV9OQU1FXG59KTtcblxuLyoqXG4gKiBEZWZhdWx0IHZhbHVlIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggbmF0aXZlIGBpbmRleGVkREJgIGFuZCBvdGhlciBzdG9yYWdlIGxpYnMsXG4gKiBieSBjaGFuZ2luZyBob3cgdmFsdWVzIGFyZSBzdG9yZWQgaW4gYGluZGV4ZWREQmAgZGF0YWJhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lEQl9OT19XUkFQID0gdHJ1ZTtcblxuLyoqXG4gKiBUb2tlbiB0byBhbGxvdyBpbnRlcm9wZXJhYmlsaXR5IHdpdGggbmF0aXZlIGBpbmRleGVkREJgIGFuZCBvdGhlciBzdG9yYWdlIGxpYnMsXG4gKiBieSBjaGFuZ2luZyBob3cgdmFsdWVzIGFyZSBzdG9yZWQgaW4gYGluZGV4ZWREQmAgZGF0YWJhc2UuXG4gKiBEZWZhdWx0cyB0byBgdHJ1ZWAuIENoYW5nZSB0byBgZmFsc2VgIGZvciBiYWNrd2FyZCBjb21wYXRpYmxpdHkgaW4gZXhpc3RpbmcgYXBwbGljYXRpb25zLlxuICogKipETyBOT1QgQ0hBTkdFIFRISVMgQkVIQVZJT1IgT05DRSBJTiBQUk9EVUNUSU9OKiosIGFzIGl0IHdvdWxkIGJyZWFrIHdpdGggZXhpc3RpbmcgZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IElEQl9OT19XUkFQID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdsb2NhbFN0b3JhZ2VJREJXcmFwJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IERFRkFVTFRfSURCX05PX1dSQVBcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VDb25maWcge1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHByb3ZpZGVMb2NhbFN0b3JhZ2VQcmVmaXgoKWAgbWV0aG9kIGluc3RlYWRcbiAgICovXG4gIExTUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHByb3ZpZGVJbmRleGVkREJEYXRhQmFzZU5hbWUoKWAgbWV0aG9kIGluc3RlYWRcbiAgICovXG4gIElEQkRCTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBwcm92aWRlSW5kZXhlZERCU3RvcmVOYW1lKClgIG1ldGhvZCBpbnN0ZWFkXG4gICAqL1xuICBJREJTdG9yZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgcHJvdmlkZUluZGV4ZWREQkRhdGFCYXNlVmVyc2lvbigpYCBtZXRob2QgaW5zdGVhZFxuICAgKi9cbiAgSURCREJWZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbGxvd3MgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIG5hdGl2ZSBgaW5kZXhlZERCYCBhbmQgb3RoZXIgc3RvcmFnZSBsaWJzLFxuICAgKiBieSBjaGFuZ2luZyBob3cgdmFsdWVzIGFyZSBzdG9yZWQgaW4gYGluZGV4ZWREQmAgZGF0YWJhc2UuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYC4gQ2hhbmdlIHRvIGBmYWxzZWAgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGl0eSBpbiBleGlzdGluZyBhcHBsaWNhdGlvbnMuXG4gICAqICoqRE8gTk9UIENIQU5HRSBUSElTIEJFSEFWSU9SIE9OQ0UgSU4gUFJPRFVDVElPTioqLCBhcyBpdCB3b3VsZCBicmVhayB3aXRoIGV4aXN0aW5nIGRhdGEuXG4gICAqL1xuICBJREJOb1dyYXA/OiBib29sZWFuO1xuXG59XG4iXX0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/* All schemas interfaces must have a required and different `type`,
|
|
2
|
-
* to create a TypeScript discriminant union type.
|
|
3
|
-
* Avoid https://github.com/cyrilletuzi/angular-async-local-storage/issues/64 */
|
|
4
|
-
export {};
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcHdhL2xvY2FsLXN0b3JhZ2Uvc3JjL2xpYi92YWxpZGF0aW9uL2pzb24tc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztnRkFFZ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBBbGwgc2NoZW1hcyBpbnRlcmZhY2VzIG11c3QgaGF2ZSBhIHJlcXVpcmVkIGFuZCBkaWZmZXJlbnQgYHR5cGVgLFxuICogdG8gY3JlYXRlIGEgVHlwZVNjcmlwdCBkaXNjcmltaW5hbnQgdW5pb24gdHlwZS5cbiAqIEF2b2lkIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvaXNzdWVzLzY0ICovXG5cbi8qKlxuICogSlNPTiBTY2hlbWEgdG8gZGVzY3JpYmUgYSBib29sZWFuIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05TY2hlbWFCb29sZWFuIHtcblxuICAvKipcbiAgICogVHlwZSBmb3IgYSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgdHlwZTogJ2Jvb2xlYW4nO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byB0aGlzLlxuICAgKi9cbiAgY29uc3Q/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogSlNPTiBTY2hlbWEgdG8gZGVzY3JpYmUgYSBudW1iZXIgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTlNjaGVtYU51bWJlciB7XG5cbiAgLyoqXG4gICAqIFR5cGUgZm9yIGEgbnVtZXJpYyB2YWx1ZS5cbiAgICovXG4gIHR5cGU6ICdudW1iZXInO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byB0aGlzLlxuICAgKi9cbiAgY29uc3Q/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIHN0cmljdGx5IGVxdWFsIHRvIG9uZSBvZiB0aGUgdmFsdWUgb2YgZW51bS5cbiAgICovXG4gIGVudW0/OiByZWFkb25seSBudW1iZXJbXTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgYSBtdWx0aXBsZSBvZiB4LlxuICAgKiBNdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLlxuICAgKi9cbiAgbXVsdGlwbGVPZj86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgbG93ZXIgb3IgZXF1YWwgdGhhbiB0aGlzIG1heGltdW0uXG4gICAqL1xuICBtYXhpbXVtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG51bWJlciBpcyBzdHJpY3RseSBsb3dlciB0aGFuIHRoaXMgbWF4aW11bS5cbiAgICovXG4gIGV4Y2x1c2l2ZU1heGltdW0/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiB0aGlzIG1pbmltdW0uXG4gICAqL1xuICBtaW5pbXVtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG51bWJlciBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gdGhpcyBtaW5pbXVtLlxuICAgKi9cbiAgZXhjbHVzaXZlTWluaW11bT86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIEpTT04gU2NoZW1hIHRvIGRlc2NyaWJlIGFuIGludGVnZXIgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTlNjaGVtYUludGVnZXIge1xuXG4gIC8qKlxuICAgKiBUeXBlIGZvciBhbiBpbnRlZ2VyIHZhbHVlLlxuICAgKi9cbiAgdHlwZTogJ2ludGVnZXInO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byB0aGlzLlxuICAgKi9cbiAgY29uc3Q/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIHN0cmljdGx5IGVxdWFsIHRvIG9uZSBvZiB0aGUgdmFsdWUgb2YgZW51bS5cbiAgICovXG4gIGVudW0/OiByZWFkb25seSBudW1iZXJbXTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgYSBtdWx0aXBsZSBvZiB4LlxuICAgKiBNdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLlxuICAgKi9cbiAgbXVsdGlwbGVPZj86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgbG93ZXIgb3IgZXF1YWwgdGhhbiB0aGlzIG1heGltdW0uXG4gICAqL1xuICBtYXhpbXVtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG51bWJlciBpcyBzdHJpY3RseSBsb3dlciB0aGFuIHRoaXMgbWF4aW11bS5cbiAgICovXG4gIGV4Y2x1c2l2ZU1heGltdW0/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiB0aGlzIG1pbmltdW0uXG4gICAqL1xuICBtaW5pbXVtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG51bWJlciBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gdGhpcyBtaW5pbXVtLlxuICAgKi9cbiAgZXhjbHVzaXZlTWluaW11bT86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIEpTT04gU2NoZW1hIHRvIGRlc2NyaWJlIGEgc3RyaW5nIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05TY2hlbWFTdHJpbmcge1xuXG4gIC8qKlxuICAgKiBUeXBlIGZvciBhIHN0cmluZyB2YWx1ZS5cbiAgICovXG4gIHR5cGU6ICdzdHJpbmcnO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byB0aGlzLlxuICAgKi9cbiAgY29uc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIHN0cmljdGx5IGVxdWFsIHRvIG9uZSBvZiB0aGUgdmFsdWUgb2YgZW51bS5cbiAgICovXG4gIGVudW0/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWF4aXVtIGxlbmd0aCBmb3IgYSBzdHJpbmcuXG4gICAqIE11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci5cbiAgICovXG4gIG1heExlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBsZW5ndGggZm9yIGEgc3RyaW5nLlxuICAgKiBNdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuXG4gICAqL1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBhdHRlcm4gdG8gbWF0Y2ggZm9yIGEgc3RyaW5nLlxuICAgKiBNdXN0IGJlIGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLCAqd2l0aG91dCogdGhlIGAvYCBkZWxpbWl0ZXJzLlxuICAgKi9cbiAgcGF0dGVybj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIEpTT04gc2NoZW1hIHRvIGRlc2NyaWJlIGFuIGFycmF5IG9mIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OU2NoZW1hQXJyYXkge1xuXG4gIC8qKlxuICAgKiBUeXBlIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG4gICAqL1xuICB0eXBlOiAnYXJyYXknO1xuXG4gIC8qKlxuICAgKiBTY2hlbWEgZm9yIHRoZSB2YWx1ZXMgb2YgYW4gYXJyYXksIG9yIGFycmF5IG9mIHNjaGVtYXMgZm9yIGEgdHVwbGUuXG4gICAqL1xuICBpdGVtczogSlNPTlNjaGVtYSB8IHJlYWRvbmx5IEpTT05TY2hlbWFbXTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXJyYXkgbGVuZ3RoIGlzIGxvd2VyIG9yIGVxdWFsIHRvIHRoaXMgdmFsdWUuXG4gICAqIE11c3QgYmUgYSBub24gbmVnYXRpdmUgaW50ZWdlci5cbiAgICovXG4gIG1heEl0ZW1zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhcnJheSBsZW5ndGggaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGlzIHZhbHVlLlxuICAgKiBNdXN0IGJlIGEgbm9uIG5lZ2F0aXZlIGludGVnZXIuXG4gICAqL1xuICBtaW5JdGVtcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXJyYXkgb25seSBoYXZlIHVuaXF1ZSB2YWx1ZXMuXG4gICAqL1xuICB1bmlxdWVJdGVtcz86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBKU09OIFNjaGVtYSB0byBkZXNjcmliZSBhbiBhcnJheSBvZiBwcmltaXRpdmUgdmFsdWVzOlxuICogLSBhcnJheSBvZiBib29sZWFuczogYEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFCb29sZWFuPmAsXG4gKiAtIGFycmF5IG9mIG51bWJlcnM6IGBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hTnVtYmVyPmAsXG4gKiAtIGFycmF5IG9mIGludGVnZXJzOiBgSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYUludGVnZXI+YCxcbiAqIC0gYXJyYXkgb2Ygc3RyaW5nczogYEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFTdHJpbmc+YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OU2NoZW1hQXJyYXlPZjxUIGV4dGVuZHMgSlNPTlNjaGVtYUJvb2xlYW4gfCBKU09OU2NoZW1hTnVtYmVyIHwgSlNPTlNjaGVtYUludGVnZXIgfCBKU09OU2NoZW1hU3RyaW5nPiB7XG5cbiAgLyoqXG4gICAqIFR5cGUgZm9yIGFuIGFycmF5IG9mIHZhbHVlcy5cbiAgICovXG4gIHR5cGU6ICdhcnJheSc7XG5cbiAgLyoqXG4gICAqIFNjaGVtYSBmb3IgdGhlIHZhbHVlcyBvZiBhbiBhcnJheS5cbiAgICovXG4gIGl0ZW1zOiBUO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhcnJheSBsZW5ndGggaXMgbG93ZXIgb3IgZXF1YWwgdG8gdGhpcyB2YWx1ZS5cbiAgICogTXVzdCBiZSBhIG5vbiBuZWdhdGl2ZSBpbnRlZ2VyLlxuICAgKi9cbiAgbWF4SXRlbXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFycmF5IGxlbmd0aCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoaXMgdmFsdWUuXG4gICAqIE11c3QgYmUgYSBub24gbmVnYXRpdmUgaW50ZWdlci5cbiAgICovXG4gIG1pbkl0ZW1zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhcnJheSBvbmx5IGhhdmUgdW5pcXVlIHZhbHVlcy5cbiAgICovXG4gIHVuaXF1ZUl0ZW1zPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIEpTT04gc2NoZW1hIHRvIGRlc2NyaWJlIGFuIG9iamVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OU2NoZW1hT2JqZWN0IHtcblxuICAvKipcbiAgICogVHlwZSBmb3IgYW4gb2JqZWN0LlxuICAgKi9cbiAgdHlwZTogJ29iamVjdCc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFuZCB0aGVpciBhc3NvY2lhdGVkIEpTT04gc2NoZW1hcy5cbiAgICovXG4gIHByb3BlcnRpZXM6IHtcbiAgICBbazogc3RyaW5nXTogSlNPTlNjaGVtYTtcbiAgfTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgbmFtZXMgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgZm9yIGFuIG9iamVjdC5cbiAgICogUHJvcGVydGllcyBzZXQgYXMgcmVxdWlyZWQgc2hvdWxkIGJlIHByZXNlbnQgaW4gYHByb3BlcnRpZXNgIHRvby5cbiAgICovXG4gIHJlcXVpcmVkPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBTdWJzZXQgb2YgdGhlIEpTT04gU2NoZW1hIHN0YW5kYXJkLlxuICogVHlwZXMgYXJlIGVuZm9yY2VkIHRvIHZhbGlkYXRlIGV2ZXJ5dGhpbmc6IGVhY2ggdmFsdWUgKiptdXN0KiogaGF2ZSBhIGB0eXBlYC5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYWluL2RvY3MvVkFMSURBVElPTi5tZH1cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2NoZW1hOiBKU09OU2NoZW1hID0geyB0eXBlOiAnc3RyaW5nJyB9O1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzY2hlbWE6IEpTT05TY2hlbWEgPSB7IHR5cGU6ICdudW1iZXInIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHsgdHlwZTogJ2ludGVnZXInIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHsgdHlwZTogJ2Jvb2xlYW4nIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHtcbiAqICAgdHlwZTogJ2FycmF5JyxcbiAqICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAqIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHtcbiAqICAgdHlwZTogJ29iamVjdCcsXG4gKiAgIHByb3BlcnRpZXM6IHtcbiAqICAgICBmaXJzdE5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAqICAgICBsYXN0TmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICogICB9LFxuICogICByZXF1aXJlZDogWydmaXJzdE5hbWUnXSxcbiAqIH07XG4gKi9cbmV4cG9ydCB0eXBlIEpTT05TY2hlbWEgPSBKU09OU2NoZW1hU3RyaW5nIHwgSlNPTlNjaGVtYU51bWJlciB8IEpTT05TY2hlbWFJbnRlZ2VyIHwgSlNPTlNjaGVtYUJvb2xlYW4gfCBKU09OU2NoZW1hQXJyYXkgfCBKU09OU2NoZW1hT2JqZWN0O1xuIl19
|