ngx-snotifire 18.0.0 → 19.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/fesm2022/ngx-snotifire.mjs +32 -30
- package/fesm2022/ngx-snotifire.mjs.map +1 -1
- package/lib/models/snotifire.model.d.ts +2 -2
- package/package.json +6 -5
- package/esm2022/lib/components/buttons/buttons-config.interface.mjs +0 -2
- package/esm2022/lib/components/buttons/buttons.component.mjs +0 -27
- package/esm2022/lib/components/index.mjs +0 -6
- package/esm2022/lib/components/ngx-notifire/ngx-snotifire.component.mjs +0 -129
- package/esm2022/lib/components/prompt/prompt.component.mjs +0 -26
- package/esm2022/lib/components/toast/notifire-toast.model.mjs +0 -61
- package/esm2022/lib/components/toast/toast.component.mjs +0 -185
- package/esm2022/lib/decorators/set-toast-type.decorator.mjs +0 -19
- package/esm2022/lib/decorators/transform-argument.decorator.mjs +0 -88
- package/esm2022/lib/defaults/defaults.interface.mjs +0 -2
- package/esm2022/lib/defaults/global-config.interface.mjs +0 -2
- package/esm2022/lib/defaults/index.mjs +0 -4
- package/esm2022/lib/defaults/toast-defaults.mjs +0 -68
- package/esm2022/lib/models/index.mjs +0 -7
- package/esm2022/lib/models/snotifire-animate.interface.mjs +0 -2
- package/esm2022/lib/models/snotifire-config.interface.mjs +0 -2
- package/esm2022/lib/models/snotifire-event.type.mjs +0 -14
- package/esm2022/lib/models/snotifire-notifications.interface.mjs +0 -2
- package/esm2022/lib/models/snotifire-position.type.mjs +0 -13
- package/esm2022/lib/models/snotifire.model.mjs +0 -26
- package/esm2022/lib/models/snotifire.type.mjs +0 -11
- package/esm2022/lib/ngx-snotifire.module.mjs +0 -38
- package/esm2022/lib/pipes/index.mjs +0 -3
- package/esm2022/lib/pipes/keys.pipe.mjs +0 -23
- package/esm2022/lib/pipes/truncate.pipe.mjs +0 -27
- package/esm2022/lib/services/index.mjs +0 -2
- package/esm2022/lib/services/notification.service.mjs +0 -298
- package/esm2022/lib/utils.mjs +0 -41
- package/esm2022/ngx-snotifire.mjs +0 -5
- package/esm2022/public-api.mjs +0 -10
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import { catchError, finalize, from, Subject, tap, throwError, } from 'rxjs';
|
|
4
|
-
import { SetToastType } from '../decorators/set-toast-type.decorator';
|
|
5
|
-
import { TransformArgument } from '../decorators/transform-argument.decorator';
|
|
6
|
-
import { SnotifireEventType, SnotifireType } from '../models';
|
|
7
|
-
import { SnotifireToastModel } from '../components/toast/notifire-toast.model';
|
|
8
|
-
import { mergeDeep, uuid } from '../utils';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
export class SnotifireService {
|
|
11
|
-
constructor(defaultConfig) {
|
|
12
|
-
this.defaultConfig = defaultConfig;
|
|
13
|
-
/**
|
|
14
|
-
* Minimum display time of the notification message
|
|
15
|
-
*/
|
|
16
|
-
this.minimumDisplayedTime = 3000;
|
|
17
|
-
/**
|
|
18
|
-
* Emits Notifire Notifications
|
|
19
|
-
*/
|
|
20
|
-
this.emitter = new Subject();
|
|
21
|
-
this.toastDeleted = new Subject();
|
|
22
|
-
this.toastChanged = new Subject();
|
|
23
|
-
this.notifications = [];
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Creates toast and add it to array, returns toast id
|
|
27
|
-
* @param NotificationModel NotificationModel
|
|
28
|
-
* @return number
|
|
29
|
-
*/
|
|
30
|
-
create(notif) {
|
|
31
|
-
if (this.defaultConfig.type && notif.config && notif.config.type) {
|
|
32
|
-
const config = mergeDeep(this.defaultConfig.snotifireConfig, this.defaultConfig.type[notif.config.type], notif.config);
|
|
33
|
-
const toast = new SnotifireToastModel(uuid(), notif.title ? notif.title : '', notif.body ? notif.body : '', config);
|
|
34
|
-
this.add(toast);
|
|
35
|
-
return toast;
|
|
36
|
-
}
|
|
37
|
-
const config = mergeDeep(this.defaultConfig.snotifireConfig, notif.config);
|
|
38
|
-
const defaulToast = new SnotifireToastModel(uuid(), notif.title ? notif.title : '', notif.body ? notif.body : '', config);
|
|
39
|
-
this.add(defaulToast);
|
|
40
|
-
return defaulToast;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* If ID passed, emits toast animation remove, if ID & REMOVE passed, removes toast from notifications array
|
|
44
|
-
* @param id number
|
|
45
|
-
* @param remove boolean
|
|
46
|
-
*/
|
|
47
|
-
remove(id, remove) {
|
|
48
|
-
if (!id) {
|
|
49
|
-
return this.clear();
|
|
50
|
-
}
|
|
51
|
-
if (remove) {
|
|
52
|
-
this.notifications = this.notifications.filter((toast) => toast.id !== id);
|
|
53
|
-
return this.emit();
|
|
54
|
-
}
|
|
55
|
-
this.toastDeleted.next(id);
|
|
56
|
-
}
|
|
57
|
-
setDefaults(defaults) {
|
|
58
|
-
const mergedConfig = (this.defaultConfig = mergeDeep(this.defaultConfig, defaults));
|
|
59
|
-
return mergedConfig;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Clear notifications array
|
|
63
|
-
*/
|
|
64
|
-
clear() {
|
|
65
|
-
this.notifications = [];
|
|
66
|
-
this.emit();
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* add NotifireToast to notifications array
|
|
70
|
-
* @param toast NotifireToast
|
|
71
|
-
*/
|
|
72
|
-
add(toast) {
|
|
73
|
-
if (this.defaultConfig &&
|
|
74
|
-
this.defaultConfig.global &&
|
|
75
|
-
this.defaultConfig.global.filterDuplicates &&
|
|
76
|
-
this.containsToast(toast)) {
|
|
77
|
-
if (!this.defaultConfig.global.filterDuplicates) {
|
|
78
|
-
throw new Error('Missing global config');
|
|
79
|
-
}
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
if (this.defaultConfig &&
|
|
83
|
-
this.defaultConfig.global &&
|
|
84
|
-
this.defaultConfig.global.newOnTop) {
|
|
85
|
-
this.notifications.unshift(toast);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
this.notifications.push(toast);
|
|
89
|
-
}
|
|
90
|
-
this.emit();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* emit changes in notifications array
|
|
94
|
-
*/
|
|
95
|
-
emit() {
|
|
96
|
-
this.emitter.next(this.notifications.slice());
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* checks if the toast is in the collection.
|
|
100
|
-
* @param inToast NotifireToast
|
|
101
|
-
* @returns boolean
|
|
102
|
-
*/
|
|
103
|
-
containsToast(inToast) {
|
|
104
|
-
return this.notifications.some((toast) => toast.equals(inToast));
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Creates empty toast with html string inside
|
|
108
|
-
* @param html string | SafeHtml
|
|
109
|
-
* @param config NotifireConfig
|
|
110
|
-
* @returns number
|
|
111
|
-
*/
|
|
112
|
-
html(html, config) {
|
|
113
|
-
return this.create({
|
|
114
|
-
title: undefined,
|
|
115
|
-
body: undefined,
|
|
116
|
-
config: {
|
|
117
|
-
...config,
|
|
118
|
-
...{ html },
|
|
119
|
-
},
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Transform toast arguments into NotificationModel object
|
|
124
|
-
*/
|
|
125
|
-
success(args) {
|
|
126
|
-
if (!args.config) {
|
|
127
|
-
throw new Error('Missing config, please configure service accordingly');
|
|
128
|
-
}
|
|
129
|
-
return this.create(args);
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Transform toast arguments into NotificationModel object
|
|
133
|
-
*/
|
|
134
|
-
error(args) {
|
|
135
|
-
return this.create(args);
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Transform toast arguments into NotificationModel object
|
|
139
|
-
*/
|
|
140
|
-
info(args) {
|
|
141
|
-
return this.create(args);
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Transform toast arguments into NotificationModel object
|
|
145
|
-
*/
|
|
146
|
-
warning(args) {
|
|
147
|
-
return this.create(args);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Transform toast arguments into NotificationModel object
|
|
151
|
-
*/
|
|
152
|
-
confirm(args) {
|
|
153
|
-
return this.create(args);
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Transform toast arguments into NotificationModel object
|
|
157
|
-
*/
|
|
158
|
-
prompt(args) {
|
|
159
|
-
return this.create(args);
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Transform toast arguments into NotificationModel object
|
|
163
|
-
*/
|
|
164
|
-
async(args) {
|
|
165
|
-
let async;
|
|
166
|
-
if (args.action instanceof Promise) {
|
|
167
|
-
async = from(args.action);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
async = args.action;
|
|
171
|
-
}
|
|
172
|
-
const toast = this.create(args);
|
|
173
|
-
let failed = false;
|
|
174
|
-
const asyncAtion = async.pipe(tap((next) => {
|
|
175
|
-
console.log('called'), this.mergeToast(toast, next);
|
|
176
|
-
}), catchError((error) => {
|
|
177
|
-
failed = true;
|
|
178
|
-
return throwError(() => error);
|
|
179
|
-
}), finalize(() => {
|
|
180
|
-
this.mergeToast(toast, {}, failed === true ? SnotifireType.ERROR : SnotifireType.SUCCESS);
|
|
181
|
-
}));
|
|
182
|
-
toast.on(SnotifireEventType.MOUNTED, () => {
|
|
183
|
-
console.log('mounted');
|
|
184
|
-
return asyncAtion;
|
|
185
|
-
});
|
|
186
|
-
return asyncAtion;
|
|
187
|
-
// const toast = this.create(args);
|
|
188
|
-
// toast.on(SnotifireEventType.MOUNTED, () => {
|
|
189
|
-
// const subscription: Subscription = async.subscribe({
|
|
190
|
-
// next: (next?: SnotifireModel) => {
|
|
191
|
-
// this.mergeToast(toast, next);
|
|
192
|
-
// },
|
|
193
|
-
// error: (error?: SnotifireModel) => {
|
|
194
|
-
// this.mergeToast(toast, error, SnotifireType.ERROR);
|
|
195
|
-
// subscription.unsubscribe();
|
|
196
|
-
// },
|
|
197
|
-
// complete: () => {
|
|
198
|
-
// this.mergeToast(toast, {}, SnotifireType.SUCCESS);
|
|
199
|
-
// subscription.unsubscribe();
|
|
200
|
-
// },
|
|
201
|
-
// });
|
|
202
|
-
// });
|
|
203
|
-
// return toast;
|
|
204
|
-
}
|
|
205
|
-
mergeToast(toast, next, type) {
|
|
206
|
-
if (next.body) {
|
|
207
|
-
toast.body = next.body;
|
|
208
|
-
}
|
|
209
|
-
if (next.title) {
|
|
210
|
-
toast.title = next.title;
|
|
211
|
-
}
|
|
212
|
-
if (type && this.defaultConfig) {
|
|
213
|
-
console.log(type);
|
|
214
|
-
toast.config = mergeDeep(toast.config, this.defaultConfig.global, this.defaultConfig.snotifireConfig?.type, { type }, next.config);
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
toast.config = mergeDeep(toast.config, next.config);
|
|
218
|
-
}
|
|
219
|
-
if (next.html) {
|
|
220
|
-
toast.config.html = next.html;
|
|
221
|
-
}
|
|
222
|
-
this.emit();
|
|
223
|
-
this.toastChanged.next(toast);
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* returns SnotifyToast object
|
|
227
|
-
* @param id Number
|
|
228
|
-
* @return SnotifyToast|undefined
|
|
229
|
-
*/
|
|
230
|
-
get(id) {
|
|
231
|
-
return (this.notifications && this.notifications.find((toast) => toast.id === id));
|
|
232
|
-
}
|
|
233
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SnotifireService, deps: [{ token: 'snotifireConfig' }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
234
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SnotifireService }); }
|
|
235
|
-
}
|
|
236
|
-
__decorate([
|
|
237
|
-
TransformArgument
|
|
238
|
-
/**
|
|
239
|
-
* Determines current toast type and collects default configuration
|
|
240
|
-
*/
|
|
241
|
-
,
|
|
242
|
-
SetToastType
|
|
243
|
-
], SnotifireService.prototype, "success", null);
|
|
244
|
-
__decorate([
|
|
245
|
-
TransformArgument
|
|
246
|
-
/**
|
|
247
|
-
* Determines current toast type and collects default configuration
|
|
248
|
-
*/
|
|
249
|
-
,
|
|
250
|
-
SetToastType
|
|
251
|
-
], SnotifireService.prototype, "error", null);
|
|
252
|
-
__decorate([
|
|
253
|
-
TransformArgument
|
|
254
|
-
/**
|
|
255
|
-
* Determines current toast type and collects default configuration
|
|
256
|
-
*/
|
|
257
|
-
,
|
|
258
|
-
SetToastType
|
|
259
|
-
], SnotifireService.prototype, "info", null);
|
|
260
|
-
__decorate([
|
|
261
|
-
TransformArgument
|
|
262
|
-
/**
|
|
263
|
-
* Determines current toast type and collects default configuration
|
|
264
|
-
*/
|
|
265
|
-
,
|
|
266
|
-
SetToastType
|
|
267
|
-
], SnotifireService.prototype, "warning", null);
|
|
268
|
-
__decorate([
|
|
269
|
-
TransformArgument
|
|
270
|
-
/**
|
|
271
|
-
* Determines current toast type and collects default configuration
|
|
272
|
-
*/
|
|
273
|
-
,
|
|
274
|
-
SetToastType
|
|
275
|
-
], SnotifireService.prototype, "confirm", null);
|
|
276
|
-
__decorate([
|
|
277
|
-
TransformArgument
|
|
278
|
-
/**
|
|
279
|
-
* Determines current toast type and collects default configuration
|
|
280
|
-
*/
|
|
281
|
-
,
|
|
282
|
-
SetToastType
|
|
283
|
-
], SnotifireService.prototype, "prompt", null);
|
|
284
|
-
__decorate([
|
|
285
|
-
TransformArgument
|
|
286
|
-
/**
|
|
287
|
-
* Determines current toast type and collects default configuration
|
|
288
|
-
*/
|
|
289
|
-
,
|
|
290
|
-
SetToastType
|
|
291
|
-
], SnotifireService.prototype, "async", null);
|
|
292
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SnotifireService, decorators: [{
|
|
293
|
-
type: Injectable
|
|
294
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
295
|
-
type: Inject,
|
|
296
|
-
args: ['snotifireConfig']
|
|
297
|
-
}] }], propDecorators: { success: [], error: [], info: [], warning: [], confirm: [], prompt: [], async: [] } });
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc25vdGlmaXJlL3NyYy9saWIvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFHSixPQUFPLEVBQ1AsR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQW1CLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUcvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLGdCQUFnQjtJQWdCM0IsWUFDb0MsYUFBZ0M7UUFBaEMsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBaEJwRTs7V0FFRztRQUNjLHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUU3Qzs7V0FFRztRQUNNLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBeUIsQ0FBQztRQUUvQyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDckMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztRQUUzRCxrQkFBYSxHQUErQixFQUFFLENBQUM7SUFJNUMsQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBcUI7UUFDMUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUks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Q2xCOztPQUVHOztJQUNGLFlBQVk7NkNBR1o7QUEwQ0Q7SUFMQyxpQkFBaUI7SUFDbEI7O09BRUc7O0lBQ0YsWUFBWTs0Q0FHWjtBQTBDRDtJQUxDLGlCQUFpQjtJQUNsQjs7T0FFRzs7SUFDRixZQUFZOytDQUdaO0FBMENEO0lBTEMsaUJBQWlCO0lBQ2xCOztPQUVHOztJQUNGLFlBQVk7K0NBR1o7QUEwQ0Q7SUFMQyxpQkFBaUI7SUFDbEI7O09BRUc7O0lBQ0YsWUFBWTs4Q0FHWjtBQTBERDtJQUxDLGlCQUFpQjtJQUNsQjs7T0FFRzs7SUFDRixZQUFZOzZDQW9EWjsyRkF4Z0JVLGdCQUFnQjtrQkFENUIsVUFBVTs7MEJBa0JOLE1BQU07MkJBQUMsaUJBQWlCO3lDQXlLM0IsT0FBTyxNQStDUCxLQUFLLE1BNENMLElBQUksTUE0Q0osT0FBTyxNQTRDUCxPQUFPLE1BNENQLE1BQU0sTUE0RE4sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsXG4gIGZpbmFsaXplLFxuICBmcm9tLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdCxcbiAgdGFwLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNldFRvYXN0VHlwZSB9IGZyb20gJy4uL2RlY29yYXRvcnMvc2V0LXRvYXN0LXR5cGUuZGVjb3JhdG9yJztcbmltcG9ydCB7IFRyYW5zZm9ybUFyZ3VtZW50IH0gZnJvbSAnLi4vZGVjb3JhdG9ycy90cmFuc2Zvcm0tYXJndW1lbnQuZGVjb3JhdG9yJztcbmltcG9ydCB7IFNub3RpZmlyZUNvbmZpZywgU25vdGlmaXJlRXZlbnRUeXBlLCBTbm90aWZpcmVUeXBlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFNub3RpZmlyZURlZmF1bHRzIH0gZnJvbSAnLi4vZGVmYXVsdHMvZGVmYXVsdHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNub3RpZmlyZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Nub3RpZmlyZS5tb2RlbCc7XG5pbXBvcnQgeyBTbm90aWZpcmVUb2FzdE1vZGVsIH0gZnJvbSAnLi4vY29tcG9uZW50cy90b2FzdC9ub3RpZmlyZS10b2FzdC5tb2RlbCc7XG5pbXBvcnQgeyBtZXJnZURlZXAsIHV1aWQgfSBmcm9tICcuLi91dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTbm90aWZpcmVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIE1pbmltdW0gZGlzcGxheSB0aW1lIG9mIHRoZSBub3RpZmljYXRpb24gbWVzc2FnZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pbXVtRGlzcGxheWVkVGltZSA9IDMwMDA7XG5cbiAgLyoqXG4gICAqIEVtaXRzIE5vdGlmaXJlIE5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGVtaXR0ZXIgPSBuZXcgU3ViamVjdDxTbm90aWZpcmVUb2FzdE1vZGVsW10+KCk7XG5cbiAgcmVhZG9ubHkgdG9hc3REZWxldGVkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuICByZWFkb25seSB0b2FzdENoYW5nZWQgPSBuZXcgU3ViamVjdDxTbm90aWZpcmVUb2FzdE1vZGVsPigpO1xuXG4gIG5vdGlmaWNhdGlvbnM6IEFycmF5PFNub3RpZmlyZVRvYXN0TW9kZWw+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgnc25vdGlmaXJlQ29uZmlnJykgcHVibGljIGRlZmF1bHRDb25maWc6IFNub3RpZmlyZURlZmF1bHRzXG4gICkge31cblxuICAvKipcbiAgICogQ3JlYXRlcyB0b2FzdCBhbmQgYWRkIGl0IHRvIGFycmF5LCByZXR1cm5zIHRvYXN0IGlkXG4gICAqIEBwYXJhbSBOb3RpZmljYXRpb25Nb2RlbCBOb3RpZmljYXRpb25Nb2RlbFxuICAgKiBAcmV0dXJuIG51bWJlclxuICAgKi9cbiAgY3JlYXRlKG5vdGlmOiBTbm90aWZpcmVNb2RlbCk6IFNub3RpZmlyZVRvYXN0TW9kZWwge1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb25maWcudHlwZSAmJiBub3RpZi5jb25maWcgJiYgbm90aWYuY29uZmlnLnR5cGUpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IG1lcmdlRGVlcChcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnLnNub3RpZmlyZUNvbmZpZyxcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnLnR5cGVbbm90aWYuY29uZmlnLnR5cGVdLFxuICAgICAgICBub3RpZi5jb25maWdcbiAgICAgICk7XG4gICAgICBjb25zdCB0b2FzdCA9IG5ldyBTbm90aWZpcmVUb2FzdE1vZGVsKFxuICAgICAgICB1dWlkKCksXG4gICAgICAgIG5vdGlmLnRpdGxlID8gbm90aWYudGl0bGUgOiAnJyxcbiAgICAgICAgbm90aWYuYm9keSA/IG5vdGlmLmJvZHkgOiAnJyxcbiAgICAgICAgY29uZmlnXG4gICAgICApO1xuICAgICAgdGhpcy5hZGQodG9hc3QpO1xuICAgICAgcmV0dXJuIHRvYXN0O1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSBtZXJnZURlZXAodGhpcy5kZWZhdWx0Q29uZmlnLnNub3RpZmlyZUNvbmZpZywgbm90aWYuY29uZmlnKTtcbiAgICBjb25zdCBkZWZhdWxUb2FzdCA9IG5ldyBTbm90aWZpcmVUb2FzdE1vZGVsKFxuICAgICAgdXVpZCgpLFxuICAgICAgbm90aWYudGl0bGUgPyBub3RpZi50aXRsZSA6ICcnLFxuICAgICAgbm90aWYuYm9keSA/IG5vdGlmLmJvZHkgOiAnJyxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG4gICAgdGhpcy5hZGQoZGVmYXVsVG9hc3QpO1xuICAgIHJldHVybiBkZWZhdWxUb2FzdDtcbiAgfVxuICAvKipcbiAgICogSWYgSUQgcGFzc2VkLCBlbWl0cyB0b2FzdCBhbmltYXRpb24gcmVtb3ZlLCBpZiBJRCAmIFJFTU9WRSBwYXNzZWQsIHJlbW92ZXMgdG9hc3QgZnJvbSBub3RpZmljYXRpb25zIGFycmF5XG4gICAqIEBwYXJhbSBpZCBudW1iZXJcbiAgICogQHBhcmFtIHJlbW92ZSBib29sZWFuXG4gICAqL1xuICByZW1vdmUoaWQ6IG51bWJlciwgcmVtb3ZlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyKCk7XG4gICAgfVxuICAgIGlmIChyZW1vdmUpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHRoaXMubm90aWZpY2F0aW9ucy5maWx0ZXIoXG4gICAgICAgICh0b2FzdCkgPT4gdG9hc3QuaWQgIT09IGlkXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLnRvYXN0RGVsZXRlZC5uZXh0KGlkKTtcbiAgfVxuXG4gIHNldERlZmF1bHRzKGRlZmF1bHRzOiBTbm90aWZpcmVEZWZhdWx0cyk6IFNub3RpZmlyZURlZmF1bHRzIHtcbiAgICBjb25zdCBtZXJnZWRDb25maWcgPSAodGhpcy5kZWZhdWx0Q29uZmlnID0gbWVyZ2VEZWVwKFxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnLFxuICAgICAgZGVmYXVsdHNcbiAgICApIGFzIFNub3RpZmlyZURlZmF1bHRzKTtcbiAgICByZXR1cm4gbWVyZ2VkQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIG5vdGlmaWNhdGlvbnMgYXJyYXlcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IFtdO1xuICAgIHRoaXMuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZCBOb3RpZmlyZVRvYXN0IHRvIG5vdGlmaWNhdGlvbnMgYXJyYXlcbiAgICogQHBhcmFtIHRvYXN0IE5vdGlmaXJlVG9hc3RcbiAgICovXG4gIHByaXZhdGUgYWRkKHRvYXN0OiBTbm90aWZpcmVUb2FzdE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnICYmXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcuZ2xvYmFsICYmXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcuZ2xvYmFsLmZpbHRlckR1cGxpY2F0ZXMgJiZcbiAgICAgIHRoaXMuY29udGFpbnNUb2FzdCh0b2FzdClcbiAgICApIHtcbiAgICAgIGlmICghdGhpcy5kZWZhdWx0Q29uZmlnLmdsb2JhbC5maWx0ZXJEdXBsaWNhdGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBnbG9iYWwgY29uZmlnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyAmJlxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnLmdsb2JhbCAmJlxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnLmdsb2JhbC5uZXdPblRvcFxuICAgICkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnVuc2hpZnQodG9hc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMucHVzaCh0b2FzdCk7XG4gICAgfVxuICAgIHRoaXMuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGVtaXQgY2hhbmdlcyBpbiBub3RpZmljYXRpb25zIGFycmF5XG4gICAqL1xuICBwcml2YXRlIGVtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lbWl0dGVyLm5leHQodGhpcy5ub3RpZmljYXRpb25zLnNsaWNlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgdG9hc3QgaXMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqIEBwYXJhbSBpblRvYXN0IE5vdGlmaXJlVG9hc3RcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgcHJpdmF0ZSBjb250YWluc1RvYXN0KGluVG9hc3Q6IFNub3RpZmlyZVRvYXN0TW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zLnNvbWUoKHRvYXN0KSA9PiB0b2FzdC5lcXVhbHMoaW5Ub2FzdCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZW1wdHkgdG9hc3Qgd2l0aCBodG1sIHN0cmluZyBpbnNpZGVcbiAgICogQHBhcmFtIGh0bWwgc3RyaW5nIHwgU2FmZUh0bWxcbiAgICogQHBhcmFtIGNvbmZpZyBOb3RpZmlyZUNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIGh0bWwoaHRtbDogc3RyaW5nIHwgU2FmZUh0bWwsIGNvbmZpZz86IFNub3RpZmlyZUNvbmZpZyk6IFNub3RpZmlyZVRvYXN0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZSh7XG4gICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgLi4ueyBodG1sIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBzdWNjZXNzIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIHN1Y2Nlc3MoYm9keTogc3RyaW5nKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIHN1Y2Nlc3Mgc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEBwYXJhbSB0aXRsZSBzdHJpbmdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBzdWNjZXNzKGJvZHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBzdWNjZXNzIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xuICAgKiBAcGFyYW0gY29uZmlnIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIHN1Y2Nlc3MoYm9keTogc3RyaW5nLCBjb25maWc6IFNub3RpZmlyZUNvbmZpZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBzdWNjZXNzIHN0eWxlICByZXR1cm5zIHRvYXN0IGlkO1xuICAgKiBAcGFyYW0gW2JvZHldIHN0cmluZ1xuICAgKiBAcGFyYW0gW3RpdGxlXSBzdHJpbmdcbiAgICogQHBhcmFtIFtjb25maWddIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIHN1Y2Nlc3MoXG4gICAgYm9keTogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgY29uZmlnOiBTbm90aWZpcmVDb25maWdcbiAgKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRvYXN0IGFyZ3VtZW50cyBpbnRvIE5vdGlmaWNhdGlvbk1vZGVsIG9iamVjdFxuICAgKi9cbiAgQFRyYW5zZm9ybUFyZ3VtZW50XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGN1cnJlbnQgdG9hc3QgdHlwZSBhbmQgY29sbGVjdHMgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBAU2V0VG9hc3RUeXBlXG4gIHN1Y2Nlc3MoYXJnczogYW55KTogU25vdGlmaXJlVG9hc3RNb2RlbCB7XG4gICAgaWYgKCFhcmdzLmNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGNvbmZpZywgcGxlYXNlIGNvbmZpZ3VyZSBzZXJ2aWNlIGFjY29yZGluZ2x5Jyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZShhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBlcnJvciBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBlcnJvcihib2R5OiBzdHJpbmcpOiBTbm90aWZpcmVUb2FzdE1vZGVsO1xuICAvKipcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggZXJyb3Igc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEBwYXJhbSB0aXRsZSBzdHJpbmdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBlcnJvcihib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBTbm90aWZpcmVUb2FzdE1vZGVsO1xuICAvKipcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggZXJyb3Igc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEBwYXJhbSBjb25maWcgTm90aWZpY2F0aW9uQ29uZmlnXG4gICAqIEByZXR1cm5zIG51bWJlclxuICAgKi9cbiAgZXJyb3IoYm9keTogc3RyaW5nLCBjb25maWc6IFNub3RpZmlyZUNvbmZpZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBlcnJvciBzdHlsZSAgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIFtib2R5XSBzdHJpbmdcbiAgICogQHBhcmFtIFt0aXRsZV0gc3RyaW5nXG4gICAqIEBwYXJhbSBbY29uZmlnXSBOb3RpZmljYXRpb25Db25maWdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBlcnJvcihcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBjb25maWc6IFNub3RpZmlyZUNvbmZpZ1xuICApOiBTbm90aWZpcmVUb2FzdE1vZGVsO1xuICAvKipcbiAgICogVHJhbnNmb3JtIHRvYXN0IGFyZ3VtZW50cyBpbnRvIE5vdGlmaWNhdGlvbk1vZGVsIG9iamVjdFxuICAgKi9cbiAgQFRyYW5zZm9ybUFyZ3VtZW50XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGN1cnJlbnQgdG9hc3QgdHlwZSBhbmQgY29sbGVjdHMgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBAU2V0VG9hc3RUeXBlXG4gIGVycm9yKGFyZ3M6IGFueSk6IFNub3RpZmlyZVRvYXN0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZShhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBpbmZvIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIGluZm8oYm9keTogc3RyaW5nKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIGluZm8gc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEBwYXJhbSB0aXRsZSBzdHJpbmdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBpbmZvKGJvZHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBpbmZvIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xuICAgKiBAcGFyYW0gY29uZmlnIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIGluZm8oYm9keTogc3RyaW5nLCBjb25maWc6IFNub3RpZmlyZUNvbmZpZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBpbmZvIHN0eWxlICByZXR1cm5zIHRvYXN0IGlkO1xuICAgKiBAcGFyYW0gW2JvZHldIHN0cmluZ1xuICAgKiBAcGFyYW0gW3RpdGxlXSBzdHJpbmdcbiAgICogQHBhcmFtIFtjb25maWddIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIGluZm8oXG4gICAgYm9keTogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgY29uZmlnOiBTbm90aWZpcmVDb25maWdcbiAgKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBOb3RpZmljYXRpb25Nb2RlbCBvYmplY3RcbiAgICovXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBjdXJyZW50IHRvYXN0IHR5cGUgYW5kIGNvbGxlY3RzIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQFNldFRvYXN0VHlwZVxuICBpbmZvKGFyZ3M6IGFueSk6IFNub3RpZmlyZVRvYXN0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZShhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCB3YXJuaW5nIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIHdhcm5pbmcoYm9keTogc3RyaW5nKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIHdhcm5pbmcgc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEBwYXJhbSB0aXRsZSBzdHJpbmdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICB3YXJuaW5nKGJvZHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCB3YXJuaW5nIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xuICAgKiBAcGFyYW0gY29uZmlnIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIHdhcm5pbmcoYm9keTogc3RyaW5nLCBjb25maWc6IFNub3RpZmlyZUNvbmZpZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCB3YXJuaW5nIHN0eWxlICByZXR1cm5zIHRvYXN0IGlkO1xuICAgKiBAcGFyYW0gW2JvZHldIHN0cmluZ1xuICAgKiBAcGFyYW0gW3RpdGxlXSBzdHJpbmdcbiAgICogQHBhcmFtIFtjb25maWddIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIHdhcm5pbmcoXG4gICAgYm9keTogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgY29uZmlnOiBTbm90aWZpcmVDb25maWdcbiAgKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBOb3RpZmljYXRpb25Nb2RlbCBvYmplY3RcbiAgICovXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBjdXJyZW50IHRvYXN0IHR5cGUgYW5kIGNvbGxlY3RzIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQFNldFRvYXN0VHlwZVxuICB3YXJuaW5nKGFyZ3M6IGFueSk6IFNub3RpZmlyZVRvYXN0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZShhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBjb25maXJtIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIGNvbmZpcm0oYm9keTogc3RyaW5nKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIGNvbmZpcm0gc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEBwYXJhbSB0aXRsZSBzdHJpbmdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBjb25maXJtKGJvZHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBjb25maXJtIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xuICAgKiBAcGFyYW0gY29uZmlnIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIGNvbmZpcm0oYm9keTogc3RyaW5nLCBjb25maWc6IFNub3RpZmlyZUNvbmZpZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBjb25maXJtIHN0eWxlICByZXR1cm5zIHRvYXN0IGlkO1xuICAgKiBAcGFyYW0gW2JvZHldIHN0cmluZ1xuICAgKiBAcGFyYW0gW3RpdGxlXSBzdHJpbmdcbiAgICogQHBhcmFtIFtjb25maWddIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIGNvbmZpcm0oXG4gICAgYm9keTogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgY29uZmlnOiBTbm90aWZpcmVDb25maWdcbiAgKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBOb3RpZmljYXRpb25Nb2RlbCBvYmplY3RcbiAgICovXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBjdXJyZW50IHRvYXN0IHR5cGUgYW5kIGNvbGxlY3RzIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQFNldFRvYXN0VHlwZVxuICBjb25maXJtKGFyZ3M6IGFueSk6IFNub3RpZmlyZVRvYXN0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZShhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBQcm9tcHQgc3R5bGUgd2l0aCB0d28gYnV0dG9ucywgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEByZXR1cm5zIG51bWJlclxuICAgKi9cbiAgcHJvbXB0KGJvZHk6IHN0cmluZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBQcm9tcHQgc3R5bGUgd2l0aCB0d28gYnV0dG9ucywgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEBwYXJhbSB0aXRsZSBzdHJpbmdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBwcm9tcHQoYm9keTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIFByb21wdCBzdHlsZSB3aXRoIHR3byBidXR0b25zLCByZXR1cm5zIHRvYXN0IGlkO1xuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcbiAgICogQHBhcmFtIGNvbmZpZyBOb3RpZmljYXRpb25Db25maWdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBwcm9tcHQoYm9keTogc3RyaW5nLCBjb25maWc6IFNub3RpZmlyZUNvbmZpZyk6IFNub3RpZmlyZVRvYXN0TW9kZWw7XG4gIC8qKlxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBQcm9tcHQgc3R5bGUgd2l0aCB0d28gYnV0dG9ucywgcmV0dXJucyB0b2FzdCBpZDtcbiAgICogQHBhcmFtIFtib2R5XSBzdHJpbmdcbiAgICogQHBhcmFtIFt0aXRsZV0gc3RyaW5nXG4gICAqIEBwYXJhbSBbY29uZmlnXSBOb3RpZmljYXRpb25Db25maWdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBwcm9tcHQoXG4gICAgYm9keTogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgY29uZmlnOiBTbm90aWZpcmVDb25maWdcbiAgKTogU25vdGlmaXJlVG9hc3RNb2RlbDtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBOb3RpZmljYXRpb25Nb2RlbCBvYmplY3RcbiAgICovXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBjdXJyZW50IHRvYXN0IHR5cGUgYW5kIGNvbGxlY3RzIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQFNldFRvYXN0VHlwZVxuICBwcm9tcHQoYXJnczogYW55KTogU25vdGlmaXJlVG9hc3RNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYXN5bmMgdG9hc3Qgd2l0aCBJbmZvIHN0eWxlLiBQYXNzIGFjdGlvbiwgYW5kIHJlc29sdmUgb3IgcmVqZWN0IGl0LlxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcbiAgICogQHBhcmFtIGFjdGlvbiBQcm9taXNlPE5vdGlmaWNhdGlvbk1vZGVsPiB8IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uTW9kZWw+XG4gICAqIEByZXR1cm5zIG51bWJlclxuICAgKi9cbiAgYXN5bmMoXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGFjdGlvbjogUHJvbWlzZTxTbm90aWZpcmVNb2RlbD4gfCBPYnNlcnZhYmxlPFNub3RpZmlyZU1vZGVsPlxuICApOiBPYnNlcnZhYmxlPGFueT47XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFzeW5jIHRvYXN0IHdpdGggSW5mbyBzdHlsZS4gUGFzcyBhY3Rpb24sIGFuZCByZXNvbHZlIG9yIHJlamVjdCBpdC5cbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXG4gICAqIEBwYXJhbSB0aXRsZSBzdHJpbmdcbiAgICogQHBhcmFtIGFjdGlvbiBQcm9taXNlPE5vdGlmaWNhdGlvbk1vZGVsPiB8IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uTW9kZWw+XG4gICAqIEByZXR1cm5zIG51bWJlclxuICAgKi9cbiAgYXN5bmMoXG4gICAgYm9keTogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgYWN0aW9uOiBQcm9taXNlPFNub3RpZmlyZU1vZGVsPiB8IE9ic2VydmFibGU8U25vdGlmaXJlTW9kZWw+XG4gICk6IE9ic2VydmFibGU8YW55PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYXN5bmMgdG9hc3Qgd2l0aCBJbmZvIHN0eWxlLiBQYXNzIGFjdGlvbiwgYW5kIHJlc29sdmUgb3IgcmVqZWN0IGl0LlxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcbiAgICogQHBhcmFtIGFjdGlvbiBQcm9taXNlPE5vdGlmaWNhdGlvbk1vZGVsPiB8IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uTW9kZWw+XG4gICAqIEBwYXJhbSBbY29uZmlnXSBOb3RpZmljYXRpb25Db25maWdcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBhc3luYyhcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgYWN0aW9uOiBQcm9taXNlPFNub3RpZmlyZU1vZGVsPiB8IE9ic2VydmFibGU8U25vdGlmaXJlTW9kZWw+LFxuICAgIGNvbmZpZzogU25vdGlmaXJlQ29uZmlnXG4gICk6IE9ic2VydmFibGU8YW55PjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYXN5bmMgdG9hc3Qgd2l0aCBJbmZvIHN0eWxlLiBQYXNzIGFjdGlvbiwgYW5kIHJlc29sdmUgb3IgcmVqZWN0IGl0LlxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcbiAgICogQHBhcmFtIHRpdGxlIHN0cmluZ1xuICAgKiBAcGFyYW0gYWN0aW9uIFByb21pc2U8Tm90aWZpY2F0aW9uTW9kZWw+IHwgT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25Nb2RlbD5cbiAgICogQHBhcmFtIFtjb25maWddIE5vdGlmaWNhdGlvbkNvbmZpZ1xuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIGFzeW5jKFxuICAgIGJvZHk6IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGFjdGlvbjogUHJvbWlzZTxTbm90aWZpcmVNb2RlbD4gfCBPYnNlcnZhYmxlPFNub3RpZmlyZU1vZGVsPixcbiAgICBjb25maWc6IFNub3RpZmlyZUNvbmZpZ1xuICApOiBPYnNlcnZhYmxlPGFueT47XG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdG9hc3QgYXJndW1lbnRzIGludG8gTm90aWZpY2F0aW9uTW9kZWwgb2JqZWN0XG4gICAqL1xuICBAVHJhbnNmb3JtQXJndW1lbnRcbiAgLyoqXG4gICAqIERldGVybWluZXMgY3VycmVudCB0b2FzdCB0eXBlIGFuZCBjb2xsZWN0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIEBTZXRUb2FzdFR5cGVcbiAgYXN5bmMoYXJnczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgYXN5bmM6IE9ic2VydmFibGU8YW55PjtcbiAgICBpZiAoYXJncy5hY3Rpb24gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICBhc3luYyA9IGZyb20oYXJncy5hY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3luYyA9IGFyZ3MuYWN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHRvYXN0ID0gdGhpcy5jcmVhdGUoYXJncyk7XG4gICAgbGV0IGZhaWxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFzeW5jQXRpb24gPSBhc3luYy5waXBlKFxuICAgICAgdGFwKChuZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjYWxsZWQnKSwgdGhpcy5tZXJnZVRvYXN0KHRvYXN0LCBuZXh0KTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubWVyZ2VUb2FzdChcbiAgICAgICAgICB0b2FzdCxcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBmYWlsZWQgPT09IHRydWUgPyBTbm90aWZpcmVUeXBlLkVSUk9SIDogU25vdGlmaXJlVHlwZS5TVUNDRVNTXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdG9hc3Qub24oU25vdGlmaXJlRXZlbnRUeXBlLk1PVU5URUQsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdtb3VudGVkJyk7XG4gICAgICByZXR1cm4gYXN5bmNBdGlvbjtcbiAgICB9KTtcbiAgICByZXR1cm4gYXN5bmNBdGlvbjtcblxuICAgIC8vIGNvbnN0IHRvYXN0ID0gdGhpcy5jcmVhdGUoYXJncyk7XG5cbiAgICAvLyB0b2FzdC5vbihTbm90aWZpcmVFdmVudFR5cGUuTU9VTlRFRCwgKCkgPT4ge1xuICAgIC8vICAgY29uc3Qgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBhc3luYy5zdWJzY3JpYmUoe1xuICAgIC8vICAgICBuZXh0OiAobmV4dD86IFNub3RpZmlyZU1vZGVsKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5tZXJnZVRvYXN0KHRvYXN0LCBuZXh0KTtcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgZXJyb3I6IChlcnJvcj86IFNub3RpZmlyZU1vZGVsKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5tZXJnZVRvYXN0KHRvYXN0LCBlcnJvciwgU25vdGlmaXJlVHlwZS5FUlJPUik7XG4gICAgLy8gICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5tZXJnZVRvYXN0KHRvYXN0LCB7fSwgU25vdGlmaXJlVHlwZS5TVUNDRVNTKTtcbiAgICAvLyAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgIH0pO1xuICAgIC8vIH0pO1xuXG4gICAgLy8gcmV0dXJuIHRvYXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZVRvYXN0KHRvYXN0OiBhbnksIG5leHQ6IGFueSwgdHlwZT86IFNub3RpZmlyZVR5cGUpIHtcbiAgICBpZiAobmV4dC5ib2R5KSB7XG4gICAgICB0b2FzdC5ib2R5ID0gbmV4dC5ib2R5O1xuICAgIH1cbiAgICBpZiAobmV4dC50aXRsZSkge1xuICAgICAgdG9hc3QudGl0bGUgPSBuZXh0LnRpdGxlO1xuICAgIH1cblxuICAgIGlmICh0eXBlICYmIHRoaXMuZGVmYXVsdENvbmZpZykge1xuICAgICAgY29uc29sZS5sb2codHlwZSk7XG4gICAgICB0b2FzdC5jb25maWcgPSBtZXJnZURlZXAoXG4gICAgICAgIHRvYXN0LmNvbmZpZyxcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnLmdsb2JhbCxcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnLnNub3RpZmlyZUNvbmZpZz8udHlwZSxcbiAgICAgICAgeyB0eXBlIH0sXG4gICAgICAgIG5leHQuY29uZmlnXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b2FzdC5jb25maWcgPSBtZXJnZURlZXAodG9hc3QuY29uZmlnLCBuZXh0LmNvbmZpZyk7XG4gICAgfVxuICAgIGlmIChuZXh0Lmh0bWwpIHtcbiAgICAgIHRvYXN0LmNvbmZpZy5odG1sID0gbmV4dC5odG1sO1xuICAgIH1cbiAgICB0aGlzLmVtaXQoKTtcbiAgICB0aGlzLnRvYXN0Q2hhbmdlZC5uZXh0KHRvYXN0KTtcbiAgfVxuICAvKipcbiAgICogcmV0dXJucyBTbm90aWZ5VG9hc3Qgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBOdW1iZXJcbiAgICogQHJldHVybiBTbm90aWZ5VG9hc3R8dW5kZWZpbmVkXG4gICAqL1xuICBnZXQoaWQ6IG51bWJlcik6IFNub3RpZmlyZVRvYXN0TW9kZWwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgJiYgdGhpcy5ub3RpZmljYXRpb25zLmZpbmQoKHRvYXN0KSA9PiB0b2FzdC5pZCA9PT0gaWQpXG4gICAgKTtcbiAgfVxufVxuIl19
|
package/esm2022/lib/utils.mjs
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deep merge objects.
|
|
3
|
-
* @param sources Array<Object<any>>
|
|
4
|
-
* @returns Object<any>
|
|
5
|
-
*/
|
|
6
|
-
export function mergeDeep(...sources) {
|
|
7
|
-
const target = {};
|
|
8
|
-
if (!sources.length) {
|
|
9
|
-
return target;
|
|
10
|
-
}
|
|
11
|
-
while (sources.length > 0) {
|
|
12
|
-
const source = sources.shift();
|
|
13
|
-
if (isObject(source)) {
|
|
14
|
-
for (const key in source) {
|
|
15
|
-
if (isObject(source[key])) {
|
|
16
|
-
target[key] = mergeDeep(target[key], source[key]);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
Object.assign(target, { [key]: source[key] });
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return target;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Generates random id
|
|
28
|
-
* @return number
|
|
29
|
-
*/
|
|
30
|
-
export function uuid() {
|
|
31
|
-
return Math.floor(Math.random() * (Date.now() - 1)) + 1;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Simple is object check.
|
|
35
|
-
* @param item Object<any>
|
|
36
|
-
* @returns boolean
|
|
37
|
-
*/
|
|
38
|
-
export function isObject(item) {
|
|
39
|
-
return item && typeof item === 'object' && !Array.isArray(item);
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc25vdGlmaXJlL3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBRyxPQUFjO0lBQ3pDLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFDRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsSUFBSTtJQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFDRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFTO0lBQ2hDLE9BQU8sSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVlcCBtZXJnZSBvYmplY3RzLlxuICogQHBhcmFtIHNvdXJjZXMgQXJyYXk8T2JqZWN0PGFueT4+XG4gKiBAcmV0dXJucyBPYmplY3Q8YW55PlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEZWVwKC4uLnNvdXJjZXM6IGFueVtdKSB7XG4gIGNvbnN0IHRhcmdldDogYW55ID0ge307XG4gIGlmICghc291cmNlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChpc09iamVjdChzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IG1lcmdlRGVlcCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgcmFuZG9tIGlkXG4gKiBAcmV0dXJuIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKERhdGUubm93KCkgLSAxKSkgKyAxO1xufVxuLyoqXG4gKiBTaW1wbGUgaXMgb2JqZWN0IGNoZWNrLlxuICogQHBhcmFtIGl0ZW0gT2JqZWN0PGFueT5cbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSk7XG59XG4iXX0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNub3RpZmlyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1zbm90aWZpcmUvc3JjL25neC1zbm90aWZpcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
package/esm2022/public-api.mjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of ngx-notifire
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/ngx-snotifire.module';
|
|
5
|
-
export * from './lib/components';
|
|
6
|
-
export * from './lib/models';
|
|
7
|
-
export * from './lib/pipes';
|
|
8
|
-
export * from './lib/services';
|
|
9
|
-
export * from './lib/defaults';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1zbm90aWZpcmUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsa0JBQWtCLENBQUM7QUFFakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtbm90aWZpcmVcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtc25vdGlmaXJlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RlZmF1bHRzJztcbiJdfQ==
|