@yuuvis/client-core 0.6.5
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/README.md +111 -0
- package/esm2022/index.mjs +65 -0
- package/esm2022/lib/client-core.module.mjs +117 -0
- package/esm2022/lib/client-core.shared.module.mjs +18 -0
- package/esm2022/lib/common/pipes/filesize.pipe.mjs +37 -0
- package/esm2022/lib/common/pipes/index.mjs +6 -0
- package/esm2022/lib/common/pipes/keys.pipe.mjs +17 -0
- package/esm2022/lib/common/pipes/locale-date.pipe.mjs +45 -0
- package/esm2022/lib/common/pipes/locale-number.pipe.mjs +115 -0
- package/esm2022/lib/common/pipes/safe-html.pipe.mjs +44 -0
- package/esm2022/lib/common/services/native-notifications.interface.mjs +2 -0
- package/esm2022/lib/common/services/native-notifications.mjs +40 -0
- package/esm2022/lib/model/dms-object.interface.mjs +2 -0
- package/esm2022/lib/model/dms-object.model.mjs +79 -0
- package/esm2022/lib/model/object-flavor.interface.mjs +2 -0
- package/esm2022/lib/model/range-value.interface.mjs +2 -0
- package/esm2022/lib/model/yuv-error.model.mjs +37 -0
- package/esm2022/lib/model/yuv-user.model.mjs +38 -0
- package/esm2022/lib/service/audit/audit.interface.mjs +2 -0
- package/esm2022/lib/service/audit/audit.service.mjs +135 -0
- package/esm2022/lib/service/auth/auth.interceptor.mjs +50 -0
- package/esm2022/lib/service/auth/auth.interface.mjs +7 -0
- package/esm2022/lib/service/auth/auth.service.mjs +130 -0
- package/esm2022/lib/service/auth/oidc.service.mjs +81 -0
- package/esm2022/lib/service/backend/api.enum.mjs +11 -0
- package/esm2022/lib/service/backend/backend.interface.mjs +2 -0
- package/esm2022/lib/service/backend/backend.service.mjs +206 -0
- package/esm2022/lib/service/bpm/bpm.interface.mjs +8 -0
- package/esm2022/lib/service/bpm/bpm.service.mjs +51 -0
- package/esm2022/lib/service/cache/app-cache.service.mjs +51 -0
- package/esm2022/lib/service/catalog/catalog.interface.mjs +2 -0
- package/esm2022/lib/service/catalog/catalog.service.mjs +13 -0
- package/esm2022/lib/service/clipboard/clipboard.interface.mjs +2 -0
- package/esm2022/lib/service/clipboard/clipboard.service.mjs +90 -0
- package/esm2022/lib/service/config/config.interface.mjs +6 -0
- package/esm2022/lib/service/config/config.service.mjs +115 -0
- package/esm2022/lib/service/config/core-config.mjs +20 -0
- package/esm2022/lib/service/config/core-config.tokens.mjs +9 -0
- package/esm2022/lib/service/connection/connection.service.mjs +36 -0
- package/esm2022/lib/service/connection/offline.interceptor.mjs +28 -0
- package/esm2022/lib/service/core-init/core-init.service.mjs +29 -0
- package/esm2022/lib/service/core-init/missing-translation-handler.mjs +10 -0
- package/esm2022/lib/service/core-init/translate-json-loader.mjs +117 -0
- package/esm2022/lib/service/device/device.interface.mjs +6 -0
- package/esm2022/lib/service/device/device.service.mjs +144 -0
- package/esm2022/lib/service/dms/dms.service.interface.mjs +2 -0
- package/esm2022/lib/service/dms/dms.service.mjs +440 -0
- package/esm2022/lib/service/event/event.interface.mjs +2 -0
- package/esm2022/lib/service/event/event.service.mjs +38 -0
- package/esm2022/lib/service/event/events.mjs +14 -0
- package/esm2022/lib/service/idm/idm.interface.mjs +2 -0
- package/esm2022/lib/service/idm/idm.service.mjs +34 -0
- package/esm2022/lib/service/logger/logger-console.service.mjs +73 -0
- package/esm2022/lib/service/logger/logger.interface.mjs +2 -0
- package/esm2022/lib/service/logger/logger.mjs +27 -0
- package/esm2022/lib/service/notification/notification.service.mjs +131 -0
- package/esm2022/lib/service/object-config/object-config.interface.mjs +2 -0
- package/esm2022/lib/service/object-config/object-config.service.mjs +229 -0
- package/esm2022/lib/service/pending-changes/pending-changes-component.interface.mjs +5 -0
- package/esm2022/lib/service/pending-changes/pending-changes-guard.service.mjs +25 -0
- package/esm2022/lib/service/pending-changes/pending-changes.service.mjs +123 -0
- package/esm2022/lib/service/prediction/prediction.interface.mjs +2 -0
- package/esm2022/lib/service/prediction/prediction.service.mjs +60 -0
- package/esm2022/lib/service/search/search.service.interface.mjs +39 -0
- package/esm2022/lib/service/search/search.service.mjs +178 -0
- package/esm2022/lib/service/session-storage/session-storage.service.mjs +50 -0
- package/esm2022/lib/service/system/object-form.interface.mjs +2 -0
- package/esm2022/lib/service/system/system.enum.mjs +179 -0
- package/esm2022/lib/service/system/system.interface.mjs +2 -0
- package/esm2022/lib/service/system/system.service.mjs +597 -0
- package/esm2022/lib/service/upload/upload.interface.mjs +2 -0
- package/esm2022/lib/service/upload/upload.service.mjs +228 -0
- package/esm2022/lib/service/user/user.service.mjs +211 -0
- package/esm2022/lib/util/utils.helper.enum.mjs +15 -0
- package/esm2022/lib/util/utils.mjs +373 -0
- package/esm2022/yuuvis-client-core.mjs +5 -0
- package/fesm2022/yuuvis-client-core.mjs +4775 -0
- package/fesm2022/yuuvis-client-core.mjs.map +1 -0
- package/index.d.ts +61 -0
- package/lib/client-core.module.d.ts +20 -0
- package/lib/client-core.shared.module.d.ts +10 -0
- package/lib/common/pipes/filesize.pipe.d.ts +18 -0
- package/lib/common/pipes/index.d.ts +5 -0
- package/lib/common/pipes/keys.pipe.d.ts +10 -0
- package/lib/common/pipes/locale-date.pipe.d.ts +12 -0
- package/lib/common/pipes/locale-number.pipe.d.ts +47 -0
- package/lib/common/pipes/safe-html.pipe.d.ts +28 -0
- package/lib/common/services/native-notifications.d.ts +8 -0
- package/lib/common/services/native-notifications.interface.d.ts +5 -0
- package/lib/model/dms-object.interface.d.ts +16 -0
- package/lib/model/dms-object.model.d.ts +26 -0
- package/lib/model/object-flavor.interface.d.ts +30 -0
- package/lib/model/range-value.interface.d.ts +9 -0
- package/lib/model/yuv-error.model.d.ts +18 -0
- package/lib/model/yuv-user.model.d.ts +44 -0
- package/lib/service/audit/audit.interface.d.ts +47 -0
- package/lib/service/audit/audit.service.d.ts +35 -0
- package/lib/service/auth/auth.interceptor.d.ts +12 -0
- package/lib/service/auth/auth.interface.d.ts +34 -0
- package/lib/service/auth/auth.service.d.ts +50 -0
- package/lib/service/auth/oidc.service.d.ts +16 -0
- package/lib/service/backend/api.enum.d.ts +7 -0
- package/lib/service/backend/backend.interface.d.ts +29 -0
- package/lib/service/backend/backend.service.d.ts +118 -0
- package/lib/service/bpm/bpm.interface.d.ts +86 -0
- package/lib/service/bpm/bpm.service.d.ts +19 -0
- package/lib/service/cache/app-cache.service.d.ts +18 -0
- package/lib/service/catalog/catalog.interface.d.ts +12 -0
- package/lib/service/catalog/catalog.service.d.ts +5 -0
- package/lib/service/clipboard/clipboard.interface.d.ts +11 -0
- package/lib/service/clipboard/clipboard.service.d.ts +23 -0
- package/lib/service/config/config.interface.d.ts +34 -0
- package/lib/service/config/config.service.d.ts +45 -0
- package/lib/service/config/core-config.d.ts +14 -0
- package/lib/service/config/core-config.tokens.d.ts +7 -0
- package/lib/service/connection/connection.service.d.ts +25 -0
- package/lib/service/connection/offline.interceptor.d.ts +15 -0
- package/lib/service/core-init/core-init.service.d.ts +11 -0
- package/lib/service/core-init/missing-translation-handler.d.ts +8 -0
- package/lib/service/core-init/translate-json-loader.d.ts +20 -0
- package/lib/service/device/device.interface.d.ts +15 -0
- package/lib/service/device/device.service.d.ts +54 -0
- package/lib/service/dms/dms.service.d.ts +153 -0
- package/lib/service/dms/dms.service.interface.d.ts +59 -0
- package/lib/service/event/event.interface.d.ts +13 -0
- package/lib/service/event/event.service.d.ts +23 -0
- package/lib/service/event/events.d.ts +12 -0
- package/lib/service/idm/idm.interface.d.ts +5 -0
- package/lib/service/idm/idm.service.d.ts +9 -0
- package/lib/service/logger/logger-console.service.d.ts +20 -0
- package/lib/service/logger/logger.d.ts +17 -0
- package/lib/service/logger/logger.interface.d.ts +10 -0
- package/lib/service/notification/notification.service.d.ts +71 -0
- package/lib/service/object-config/object-config.interface.d.ts +62 -0
- package/lib/service/object-config/object-config.service.d.ts +38 -0
- package/lib/service/pending-changes/pending-changes-component.interface.d.ts +6 -0
- package/lib/service/pending-changes/pending-changes-guard.service.d.ts +14 -0
- package/lib/service/pending-changes/pending-changes.service.d.ts +57 -0
- package/lib/service/prediction/prediction.interface.d.ts +18 -0
- package/lib/service/prediction/prediction.service.d.ts +15 -0
- package/lib/service/search/search.service.d.ts +46 -0
- package/lib/service/search/search.service.interface.d.ts +119 -0
- package/lib/service/session-storage/session-storage.service.d.ts +15 -0
- package/lib/service/system/object-form.interface.d.ts +46 -0
- package/lib/service/system/system.enum.d.ts +141 -0
- package/lib/service/system/system.interface.d.ts +146 -0
- package/lib/service/system/system.service.d.ts +168 -0
- package/lib/service/upload/upload.interface.d.ts +55 -0
- package/lib/service/upload/upload.service.d.ts +34 -0
- package/lib/service/user/user.service.d.ts +69 -0
- package/lib/util/utils.d.ts +118 -0
- package/lib/util/utils.helper.enum.d.ts +13 -0
- package/package.json +33 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { ReplaySubject } from 'rxjs';
|
|
3
|
+
import { Utils } from '../../util/utils';
|
|
4
|
+
import { Logger } from '../logger/logger';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* EditingObserver service is used to track changes made inside the application, that should prevent
|
|
8
|
+
* doing something or going somewhere before the changes are persisted or ignored. For example when
|
|
9
|
+
* the user starts editing form data and tries to navigate away before saving the changes, this service
|
|
10
|
+
* will take care of notifying the user.
|
|
11
|
+
*
|
|
12
|
+
* It is working kind of like a registry for ongoing tasks that need to be monitored. Every component
|
|
13
|
+
* that needs to be aware of changes to be persisted can start a task and finish it when everything is done.
|
|
14
|
+
*
|
|
15
|
+
* Other components can ask the service for pending tasks to know whether or not to execute an action
|
|
16
|
+
* (e.g. list component will subscribe and prevent selecting another list item, if changes to the previous one haven't be finished)
|
|
17
|
+
*
|
|
18
|
+
* app.component will prevent relevant route changes while tasks are pending.
|
|
19
|
+
*/
|
|
20
|
+
export class PendingChangesService {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.#logger = inject(Logger);
|
|
23
|
+
this.#tasks = [];
|
|
24
|
+
this.#tasksSource = new ReplaySubject();
|
|
25
|
+
this.tasks$ = this.#tasksSource.asObservable();
|
|
26
|
+
// private customMsg = '';
|
|
27
|
+
this.#defaultMsg = 'You are currently editing the index data of a form that has not been saved. Unsaved data will be lost.';
|
|
28
|
+
}
|
|
29
|
+
#logger;
|
|
30
|
+
#tasks;
|
|
31
|
+
#tasksSource;
|
|
32
|
+
// private customMsg = '';
|
|
33
|
+
#defaultMsg;
|
|
34
|
+
/**
|
|
35
|
+
* Registers a task to be pending.
|
|
36
|
+
* @param message alert message
|
|
37
|
+
* @returns Unique id to be used for finishing this task
|
|
38
|
+
*/
|
|
39
|
+
startTask(message) {
|
|
40
|
+
const taskId = Utils.uuid();
|
|
41
|
+
this.#tasks.push({ id: taskId, message: message });
|
|
42
|
+
this.#logger.debug('started pending task: ' + taskId);
|
|
43
|
+
this.#tasksSource.next(this.#tasks);
|
|
44
|
+
return taskId;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Finishes a task
|
|
48
|
+
* @param id The id of the task to be finished. This is the one the component got from startTask()
|
|
49
|
+
*/
|
|
50
|
+
finishTask(id) {
|
|
51
|
+
if (id) {
|
|
52
|
+
this.#tasks = this.#tasks.filter((t) => t.id !== id);
|
|
53
|
+
this.#tasksSource.next(this.#tasks);
|
|
54
|
+
this.#logger.debug('finished pending task: ' + id);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Returns whether or not the service has pending tasks.
|
|
59
|
+
* If an id is provided, the method will check existence of one specific task.
|
|
60
|
+
*
|
|
61
|
+
* @param id The id of the task to be checked
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
hasPendingTask(id) {
|
|
65
|
+
return !id ? !!this.#tasks.length : Array.isArray(id) ? this.#tasks.some((value) => id.includes(value.id)) : this.#tasks.map((t) => t.id).includes(id);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns whether or not the component|service has pending tasks.
|
|
69
|
+
* Checks via confirm dialog
|
|
70
|
+
* @param component
|
|
71
|
+
* @returns
|
|
72
|
+
*/
|
|
73
|
+
check(component) {
|
|
74
|
+
if (component && component.hasPendingChanges ? !component.hasPendingChanges() : !this.hasPendingTask()) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const confirmed = confirm(this.#getConfirmMessage());
|
|
79
|
+
if (confirmed) {
|
|
80
|
+
this.clear();
|
|
81
|
+
}
|
|
82
|
+
return !confirmed;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
checkForPendingTasks(taskIds) {
|
|
86
|
+
if (this.hasPendingTask(taskIds)) {
|
|
87
|
+
const confirmed = confirm(this.#getConfirmMessage());
|
|
88
|
+
if (confirmed) {
|
|
89
|
+
this.clear();
|
|
90
|
+
}
|
|
91
|
+
return !confirmed;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
#getConfirmMessage() {
|
|
98
|
+
let msg = '';
|
|
99
|
+
this.#tasks.forEach((t) => {
|
|
100
|
+
// do not apply messages twice
|
|
101
|
+
if (msg.indexOf(t.message || this.#defaultMsg) === -1) {
|
|
102
|
+
msg = `${msg}${msg.length > 0 ? '\n---\n' : ''}${t.message || this.#defaultMsg}`;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return msg;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Clear list of pending tasks
|
|
109
|
+
*/
|
|
110
|
+
clear() {
|
|
111
|
+
this.#tasks = [];
|
|
112
|
+
this.#tasksSource.next(this.#tasks);
|
|
113
|
+
}
|
|
114
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PendingChangesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
115
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PendingChangesService, providedIn: 'root' }); }
|
|
116
|
+
}
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PendingChangesService, decorators: [{
|
|
118
|
+
type: Injectable,
|
|
119
|
+
args: [{
|
|
120
|
+
providedIn: 'root'
|
|
121
|
+
}]
|
|
122
|
+
}] });
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2UvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHMUM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUtILE1BQU0sT0FBTyxxQkFBcUI7SUFIbEM7UUFJRSxZQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLFdBQU0sR0FBdUMsRUFBRSxDQUFDO1FBQ2hELGlCQUFZLEdBQUcsSUFBSSxhQUFhLEVBQXNDLENBQUM7UUFDdkUsV0FBTSxHQUFtRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTFGLDBCQUEwQjtRQUMxQixnQkFBVyxHQUFHLHdHQUF3RyxDQUFDO0tBc0Z4SDtJQTdGQyxPQUFPLENBQWtCO0lBRXpCLE1BQU0sQ0FBMEM7SUFDaEQsWUFBWSxDQUEyRDtJQUd2RSwwQkFBMEI7SUFDMUIsV0FBVyxDQUE0RztJQUV2SDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE9BQWU7UUFDdkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNu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QUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkYsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7K0dBN0ZVLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlscyc7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7IFBlbmRpbmdDaGFuZ2VzQ29tcG9uZW50IH0gZnJvbSAnLi9wZW5kaW5nLWNoYW5nZXMtY29tcG9uZW50LmludGVyZmFjZSc7XG5cbi8qKlxuICogRWRpdGluZ09ic2VydmVyIHNlcnZpY2UgaXMgdXNlZCB0byB0cmFjayBjaGFuZ2VzIG1hZGUgaW5zaWRlIHRoZSBhcHBsaWNhdGlvbiwgdGhhdCBzaG91bGQgcHJldmVudFxuICogZG9pbmcgc29tZXRoaW5nIG9yIGdvaW5nIHNvbWV3aGVyZSBiZWZvcmUgdGhlIGNoYW5nZXMgYXJlIHBlcnNpc3RlZCBvciBpZ25vcmVkLiBGb3IgZXhhbXBsZSB3aGVuXG4gKiB0aGUgdXNlciBzdGFydHMgZWRpdGluZyBmb3JtIGRhdGEgYW5kIHRyaWVzIHRvIG5hdmlnYXRlIGF3YXkgYmVmb3JlIHNhdmluZyB0aGUgY2hhbmdlcywgdGhpcyBzZXJ2aWNlXG4gKiB3aWxsIHRha2UgY2FyZSBvZiBub3RpZnlpbmcgdGhlIHVzZXIuXG4gKlxuICogSXQgaXMgd29ya2luZyBraW5kIG9mIGxpa2UgYSByZWdpc3RyeSBmb3Igb25nb2luZyB0YXNrcyB0aGF0IG5lZWQgdG8gYmUgbW9uaXRvcmVkLiBFdmVyeSBjb21wb25lbnRcbiAqIHRoYXQgbmVlZHMgdG8gYmUgYXdhcmUgb2YgY2hhbmdlcyB0byBiZSBwZXJzaXN0ZWQgY2FuIHN0YXJ0IGEgdGFzayBhbmQgZmluaXNoIGl0IHdoZW4gZXZlcnl0aGluZyBpcyBkb25lLlxuICpcbiAqIE90aGVyIGNvbXBvbmVudHMgY2FuIGFzayB0aGUgc2VydmljZSBmb3IgcGVuZGluZyB0YXNrcyB0byBrbm93IHdoZXRoZXIgb3Igbm90IHRvIGV4ZWN1dGUgYW4gYWN0aW9uXG4gKiAoZS5nLiBsaXN0IGNvbXBvbmVudCB3aWxsIHN1YnNjcmliZSBhbmQgcHJldmVudCBzZWxlY3RpbmcgYW5vdGhlciBsaXN0IGl0ZW0sIGlmIGNoYW5nZXMgdG8gdGhlIHByZXZpb3VzIG9uZSBoYXZlbid0IGJlIGZpbmlzaGVkKVxuICpcbiAqIGFwcC5jb21wb25lbnQgd2lsbCBwcmV2ZW50IHJlbGV2YW50IHJvdXRlIGNoYW5nZXMgd2hpbGUgdGFza3MgYXJlIHBlbmRpbmcuXG4gKi9cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGVuZGluZ0NoYW5nZXNTZXJ2aWNlIHtcbiAgI2xvZ2dlciA9IGluamVjdChMb2dnZXIpO1xuXG4gICN0YXNrczogeyBpZDogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH1bXSA9IFtdO1xuICAjdGFza3NTb3VyY2UgPSBuZXcgUmVwbGF5U3ViamVjdDx7IGlkOiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmcgfVtdPigpO1xuICB0YXNrcyQ6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH1bXT4gPSB0aGlzLiN0YXNrc1NvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICAvLyBwcml2YXRlIGN1c3RvbU1zZyA9ICcnO1xuICAjZGVmYXVsdE1zZyA9ICdZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIHRoZSBpbmRleCBkYXRhIG9mIGEgZm9ybSB0aGF0IGhhcyBub3QgYmVlbiBzYXZlZC4gVW5zYXZlZCBkYXRhIHdpbGwgYmUgbG9zdC4nO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB0YXNrIHRvIGJlIHBlbmRpbmcuXG4gICAqIEBwYXJhbSBtZXNzYWdlIGFsZXJ0IG1lc3NhZ2VcbiAgICogQHJldHVybnMgVW5pcXVlIGlkIHRvIGJlIHVzZWQgZm9yIGZpbmlzaGluZyB0aGlzIHRhc2tcbiAgICovXG4gIHN0YXJ0VGFzayhtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhc2tJZCA9IFV0aWxzLnV1aWQoKTtcbiAgICB0aGlzLiN0YXNrcy5wdXNoKHsgaWQ6IHRhc2tJZCwgbWVzc2FnZTogbWVzc2FnZSB9KTtcbiAgICB0aGlzLiNsb2dnZXIuZGVidWcoJ3N0YXJ0ZWQgcGVuZGluZyB0YXNrOiAnICsgdGFza0lkKTtcbiAgICB0aGlzLiN0YXNrc1NvdXJjZS5uZXh0KHRoaXMuI3Rhc2tzKTtcbiAgICByZXR1cm4gdGFza0lkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmlzaGVzIGEgdGFza1xuICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSB0YXNrIHRvIGJlIGZpbmlzaGVkLiBUaGlzIGlzIHRoZSBvbmUgdGhlIGNvbXBvbmVudCBnb3QgZnJvbSBzdGFydFRhc2soKVxuICAgKi9cbiAgZmluaXNoVGFzayhpZDogc3RyaW5nKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLiN0YXNrcyA9IHRoaXMuI3Rhc2tzLmZpbHRlcigodCkgPT4gdC5pZCAhPT0gaWQpO1xuICAgICAgdGhpcy4jdGFza3NTb3VyY2UubmV4dCh0aGlzLiN0YXNrcyk7XG4gICAgICB0aGlzLiNsb2dnZXIuZGVidWcoJ2ZpbmlzaGVkIHBlbmRpbmcgdGFzazogJyArIGlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VydmljZSBoYXMgcGVuZGluZyB0YXNrcy5cbiAgICogSWYgYW4gaWQgaXMgcHJvdmlkZWQsIHRoZSBtZXRob2Qgd2lsbCBjaGVjayBleGlzdGVuY2Ugb2Ygb25lIHNwZWNpZmljIHRhc2suXG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHRhc2sgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgaGFzUGVuZGluZ1Rhc2soaWQ/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhaWQgPyAhIXRoaXMuI3Rhc2tzLmxlbmd0aCA6IEFycmF5LmlzQXJyYXkoaWQpID8gdGhpcy4jdGFza3Muc29tZSgodmFsdWUpID0+IGlkLmluY2x1ZGVzKHZhbHVlLmlkKSkgOiB0aGlzLiN0YXNrcy5tYXAoKHQpID0+IHQuaWQpLmluY2x1ZGVzKGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBjb21wb25lbnR8c2VydmljZSBoYXMgcGVuZGluZyB0YXNrcy5cbiAgICogQ2hlY2tzIHZpYSBjb25maXJtIGRpYWxvZ1xuICAgKiBAcGFyYW0gY29tcG9uZW50XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBjaGVjayhjb21wb25lbnQ/OiBQZW5kaW5nQ2hhbmdlc0NvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50Lmhhc1BlbmRpbmdDaGFuZ2VzID8gIWNvbXBvbmVudC5oYXNQZW5kaW5nQ2hhbmdlcygpIDogIXRoaXMuaGFzUGVuZGluZ1Rhc2soKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb25maXJtZWQgPSBjb25maXJtKHRoaXMuI2dldENvbmZpcm1NZXNzYWdlKCkpO1xuICAgICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWNvbmZpcm1lZDtcbiAgICB9XG4gIH1cblxuICBjaGVja0ZvclBlbmRpbmdUYXNrcyh0YXNrSWRzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmhhc1BlbmRpbmdUYXNrKHRhc2tJZHMpKSB7XG4gICAgICBjb25zdCBjb25maXJtZWQgPSBjb25maXJtKHRoaXMuI2dldENvbmZpcm1NZXNzYWdlKCkpO1xuICAgICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWNvbmZpcm1lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICNnZXRDb25maXJtTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGxldCBtc2cgPSAnJztcbiAgICB0aGlzLiN0YXNrcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAvLyBkbyBub3QgYXBwbHkgbWVzc2FnZXMgdHdpY2VcbiAgICAgIGlmIChtc2cuaW5kZXhPZih0Lm1lc3NhZ2UgfHwgdGhpcy4jZGVmYXVsdE1zZykgPT09IC0xKSB7XG4gICAgICAgIG1zZyA9IGAke21zZ30ke21zZy5sZW5ndGggPiAwID8gJ1xcbi0tLVxcbicgOiAnJ30ke3QubWVzc2FnZSB8fCB0aGlzLiNkZWZhdWx0TXNnfWA7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1zZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBsaXN0IG9mIHBlbmRpbmcgdGFza3NcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuI3Rhc2tzID0gW107XG4gICAgdGhpcy4jdGFza3NTb3VyY2UubmV4dCh0aGlzLiN0YXNrcyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGljdGlvbi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2UvcHJlZGljdGlvbi9wcmVkaWN0aW9uLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBQcmVkaWN0aW9uQ2xhc3NpZnlSZXN1bHQge1xuICBvYmplY3RJZDogc3RyaW5nO1xuICBwcm9wZXJ0aWVzOiBQcmVkaWN0aW9uQ2xhc3NpZnlSZXN1bHRJdGVtW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFByZWRpY3Rpb25DbGFzc2lmeVJlc3VsdEl0ZW0ge1xuICB0eXBlOiBzdHJpbmc7XG4gIHByb2JhYmlsaXR5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZGljdGlvbkV4dHJhY3RSZXN1bHQge1xuICBvYmplY3RJZDogc3RyaW5nO1xuICAvLyBSZWNvcmQgd2hlcmUgdGhlIGtleSBpcyB0aGUgcHJvcGVydHkgbmFtZSBhbmQgdGhlIHZhbHVlIGlzIGFuXG4gIC8vIGFycmF5IG9mIHByZWRpY3Rpb25zIGZvciB0aGF0IHByb3BlcnR5XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFByZWRpY3Rpb25FeHRyYWN0UmVzdWx0SXRlbVtdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVkaWN0aW9uRXh0cmFjdFJlc3VsdEl0ZW0ge1xuICB2YWx1ZTogc3RyaW5nO1xuICBwcm9iYWJpbGl0eTogbnVtYmVyO1xuICBib3VuZGluZ0JveD86IG51bWJlcltdO1xuICBwYWdlPzogbnVtYmVyO1xufVxuIl19
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import { BackendService } from '../backend/backend.service';
|
|
4
|
+
import { BaseObjectTypeField } from '../system/system.enum';
|
|
5
|
+
import { ApiBase } from './../backend/api.enum';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class PredictionService {
|
|
8
|
+
#backend = inject(BackendService);
|
|
9
|
+
classify(objectIDs, schemaObjectTypeId = 'CLASSIFICATION') {
|
|
10
|
+
const objects = objectIDs.map((objectID) => ({
|
|
11
|
+
properties: {
|
|
12
|
+
[BaseObjectTypeField.OBJECT_ID]: {
|
|
13
|
+
value: objectID
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}));
|
|
17
|
+
return this.#backend.post(`/classification?schemaObjectTypeId=${schemaObjectTypeId}`, { objects }, ApiBase.predict).pipe(map((res) => res.predictions.reduce((acc, curr) => ({
|
|
18
|
+
...acc,
|
|
19
|
+
[curr[BaseObjectTypeField.OBJECT_ID].value]: {
|
|
20
|
+
objectId: curr[BaseObjectTypeField.OBJECT_ID].value,
|
|
21
|
+
properties: Object.keys(curr.properties).map((type) => ({
|
|
22
|
+
type,
|
|
23
|
+
probability: curr.properties[type].probability
|
|
24
|
+
}))
|
|
25
|
+
}
|
|
26
|
+
}), {})));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @param schemaObjectTypeId
|
|
30
|
+
* @param objectIDs
|
|
31
|
+
* @returns Observable<Record<string, PredictionClassifyResult>> string is objectID
|
|
32
|
+
*/
|
|
33
|
+
extract(schemaObjectTypeId, objectIDs) {
|
|
34
|
+
const searchParams = new URLSearchParams();
|
|
35
|
+
searchParams.append('schemaObjectTypeId', schemaObjectTypeId);
|
|
36
|
+
const objects = objectIDs.map((objectID) => ({
|
|
37
|
+
properties: {
|
|
38
|
+
[BaseObjectTypeField.OBJECT_ID]: {
|
|
39
|
+
value: objectID
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
return this.#backend.post(`/extraction?${searchParams.toString()}`, { objects }, ApiBase.predict).pipe(map((res) => res.predictions.reduce((acc, curr) => ({
|
|
44
|
+
...acc,
|
|
45
|
+
[curr[BaseObjectTypeField.OBJECT_ID].value]: {
|
|
46
|
+
objectId: curr[BaseObjectTypeField.OBJECT_ID].value,
|
|
47
|
+
properties: curr.properties
|
|
48
|
+
}
|
|
49
|
+
}), {})));
|
|
50
|
+
}
|
|
51
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PredictionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
52
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PredictionService, providedIn: 'root' }); }
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PredictionService, decorators: [{
|
|
55
|
+
type: Injectable,
|
|
56
|
+
args: [{
|
|
57
|
+
providedIn: 'root'
|
|
58
|
+
}]
|
|
59
|
+
}] });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGljdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlL3ByZWRpY3Rpb24vcHJlZGljdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU1oRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFbEMsUUFBUSxDQUFDLFNBQW1CLEVBQUUsa0JBQWtCLEdBQUcsZ0JBQWdCO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0MsVUFBVSxFQUFFO2dCQUNWLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQy9CLEtBQUssRUFBRSxRQUFRO2lCQUNoQjthQUNGO1NBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdEgsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDZixHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FDcEIsQ0FBQyxHQUFRLEVBQUUsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLEdBQUcsR0FBRztZQUNOLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ25ELFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzNELElBQUk7b0JBQ0osV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVztpQkFDL0MsQ0FBQyxDQUFDO2FBQ0o7U0FDRixDQUFDLEVBQ0YsRUFBRSxDQUNILENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsa0JBQTBCLEVBQUUsU0FBbUI7UUFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUMzQyxZQUFZLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDOUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQyxVQUFVLEVBQUU7Z0JBQ1YsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDL0IsS0FBSyxFQUFFLFFBQVE7aUJBQ2hCO2FBQ0Y7U0FDRixDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3BHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ1YsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQ3BCLENBQUMsR0FBUSxFQUFFLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QixHQUFHLEdBQUc7WUFDTixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLO2dCQUNuRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDNUI7U0FDRixDQUFDLEVBQ0YsRUFBRSxDQUNILENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQzsrR0E3RFUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmFja2VuZFNlcnZpY2UgfSBmcm9tICcuLi9iYWNrZW5kL2JhY2tlbmQuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlT2JqZWN0VHlwZUZpZWxkIH0gZnJvbSAnLi4vc3lzdGVtL3N5c3RlbS5lbnVtJztcbmltcG9ydCB7IEFwaUJhc2UgfSBmcm9tICcuLy4uL2JhY2tlbmQvYXBpLmVudW0nO1xuaW1wb3J0IHsgUHJlZGljdGlvbkNsYXNzaWZ5UmVzdWx0LCBQcmVkaWN0aW9uRXh0cmFjdFJlc3VsdCB9IGZyb20gJy4vcHJlZGljdGlvbi5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcmVkaWN0aW9uU2VydmljZSB7XG4gICNiYWNrZW5kID0gaW5qZWN0KEJhY2tlbmRTZXJ2aWNlKTtcblxuICBjbGFzc2lmeShvYmplY3RJRHM6IHN0cmluZ1tdLCBzY2hlbWFPYmplY3RUeXBlSWQgPSAnQ0xBU1NJRklDQVRJT04nKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBQcmVkaWN0aW9uQ2xhc3NpZnlSZXN1bHQ+PiB7XG4gICAgY29uc3Qgb2JqZWN0cyA9IG9iamVjdElEcy5tYXAoKG9iamVjdElEKSA9PiAoe1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBbQmFzZU9iamVjdFR5cGVGaWVsZC5PQkpFQ1RfSURdOiB7XG4gICAgICAgICAgdmFsdWU6IG9iamVjdElEXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByZXR1cm4gdGhpcy4jYmFja2VuZC5wb3N0KGAvY2xhc3NpZmljYXRpb24/c2NoZW1hT2JqZWN0VHlwZUlkPSR7c2NoZW1hT2JqZWN0VHlwZUlkfWAsIHsgb2JqZWN0cyB9LCBBcGlCYXNlLnByZWRpY3QpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PlxuICAgICAgICByZXMucHJlZGljdGlvbnMucmVkdWNlKFxuICAgICAgICAgIChhY2M6IGFueSwgY3VycjogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgW2N1cnJbQmFzZU9iamVjdFR5cGVGaWVsZC5PQkpFQ1RfSURdLnZhbHVlXToge1xuICAgICAgICAgICAgICBvYmplY3RJZDogY3VycltCYXNlT2JqZWN0VHlwZUZpZWxkLk9CSkVDVF9JRF0udmFsdWUsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IE9iamVjdC5rZXlzKGN1cnIucHJvcGVydGllcykubWFwKCh0eXBlOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eTogY3Vyci5wcm9wZXJ0aWVzW3R5cGVdLnByb2JhYmlsaXR5XG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9XG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzY2hlbWFPYmplY3RUeXBlSWRcbiAgICogQHBhcmFtIG9iamVjdElEc1xuICAgKiBAcmV0dXJucyAgT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBQcmVkaWN0aW9uQ2xhc3NpZnlSZXN1bHQ+PiBzdHJpbmcgaXMgb2JqZWN0SURcbiAgICovXG4gIGV4dHJhY3Qoc2NoZW1hT2JqZWN0VHlwZUlkOiBzdHJpbmcsIG9iamVjdElEczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIFByZWRpY3Rpb25FeHRyYWN0UmVzdWx0Pj4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKCdzY2hlbWFPYmplY3RUeXBlSWQnLCBzY2hlbWFPYmplY3RUeXBlSWQpO1xuICAgIGNvbnN0IG9iamVjdHMgPSBvYmplY3RJRHMubWFwKChvYmplY3RJRCkgPT4gKHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgW0Jhc2VPYmplY3RUeXBlRmllbGQuT0JKRUNUX0lEXToge1xuICAgICAgICAgIHZhbHVlOiBvYmplY3RJRFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHRoaXMuI2JhY2tlbmQucG9zdChgL2V4dHJhY3Rpb24/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gLCB7IG9iamVjdHMgfSwgQXBpQmFzZS5wcmVkaWN0KS5waXBlKFxuICAgICAgbWFwKChyZXMpID0+XG4gICAgICAgIHJlcy5wcmVkaWN0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogYW55LCBjdXJyOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICBbY3VycltCYXNlT2JqZWN0VHlwZUZpZWxkLk9CSkVDVF9JRF0udmFsdWVdOiB7XG4gICAgICAgICAgICAgIG9iamVjdElkOiBjdXJyW0Jhc2VPYmplY3RUeXBlRmllbGQuT0JKRUNUX0lEXS52YWx1ZSxcbiAgICAgICAgICAgICAgcHJvcGVydGllczogY3Vyci5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAge31cbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export var Operator;
|
|
2
|
+
(function (Operator) {
|
|
3
|
+
Operator["EQUAL"] = "eq";
|
|
4
|
+
Operator["EEQUAL"] = "eeq";
|
|
5
|
+
Operator["IN"] = "in";
|
|
6
|
+
Operator["GREATER_THAN"] = "gt";
|
|
7
|
+
Operator["GREATER_OR_EQUAL"] = "gte";
|
|
8
|
+
Operator["LESS_THAN"] = "lt";
|
|
9
|
+
Operator["LESS_OR_EQUAL"] = "lte";
|
|
10
|
+
Operator["INTERVAL"] = "gtlt";
|
|
11
|
+
Operator["INTERVAL_INCLUDE_BOTH"] = "gtelte";
|
|
12
|
+
Operator["INTERVAL_INCLUDE_TO"] = "gtlte";
|
|
13
|
+
Operator["INTERVAL_INCLUDE_FROM"] = "gtelt";
|
|
14
|
+
Operator["RANGE"] = "rg";
|
|
15
|
+
Operator["LIKE"] = "like";
|
|
16
|
+
Operator["CONTAINS"] = "contains"; // contains
|
|
17
|
+
})(Operator || (Operator = {}));
|
|
18
|
+
export const OperatorLabel = {
|
|
19
|
+
/** equal */
|
|
20
|
+
EQUAL: '=',
|
|
21
|
+
/** exact equal */
|
|
22
|
+
EEQUAL: '==',
|
|
23
|
+
/** match at least one of the provided values (value has to be an array) */
|
|
24
|
+
IN: '~',
|
|
25
|
+
/** greater than */
|
|
26
|
+
GREATER_THAN: '>',
|
|
27
|
+
/** greater than or equal */
|
|
28
|
+
GREATER_OR_EQUAL: '≽', //
|
|
29
|
+
LESS_THAN: '<', // less than
|
|
30
|
+
LESS_OR_EQUAL: '≼', // less than or equal
|
|
31
|
+
INTERVAL: '<>', // interval
|
|
32
|
+
INTERVAL_INCLUDE_BOTH: '-', // interval include left and right
|
|
33
|
+
INTERVAL_INCLUDE_TO: '>-', // interval include right
|
|
34
|
+
INTERVAL_INCLUDE_FROM: '-<', // interval include left
|
|
35
|
+
RANGE: '=', // aggegation ranges
|
|
36
|
+
LIKE: '~', // like
|
|
37
|
+
CONTAINS: '~' // contains
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlL3NlYXJjaC9zZWFyY2guc2VydmljZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkRBLE1BQU0sQ0FBTixJQUFZLFFBZVg7QUFmRCxXQUFZLFFBQVE7SUFDbEIsd0JBQVksQ0FBQTtJQUNaLDBCQUFjLENBQUE7SUFDZCxxQkFBUyxDQUFBO0lBQ1QsK0JBQW1CLENBQUE7SUFDbkIsb0NBQXdCLENBQUE7SUFDeEIsNEJBQWdCLENBQUE7SUFDaEIsaUNBQXFCLENBQUE7SUFDckIsNkJBQWlCLENBQUE7SUFDakIsNENBQWdDLENBQUE7SUFDaEMseUNBQTZCLENBQUE7SUFDN0IsMkNBQStCLENBQUE7SUFDL0Isd0JBQVksQ0FBQTtJQUNaLHlCQUFhLENBQUE7SUFDYixpQ0FBcUIsQ0FBQSxDQUFDLFdBQVc7QUFDbkMsQ0FBQyxFQWZXLFFBQVEsS0FBUixRQUFRLFFBZW5CO0FBQ0QsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFlBQVk7SUFDWixLQUFLLEVBQUUsR0FBRztJQUNWLGtCQUFrQjtJQUNsQixNQUFNLEVBQUUsSUFBSTtJQUNaLDRFQUE0RTtJQUM1RSxFQUFFLEVBQUUsR0FBRztJQUNQLG1CQUFtQjtJQUNuQixZQUFZLEVBQUUsR0FBRztJQUNqQiw0QkFBNEI7SUFDNUIsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDekIsU0FBUyxFQUFFLEdBQUcsRUFBRSxZQUFZO0lBQzVCLGFBQWEsRUFBRSxHQUFHLEVBQUUscUJBQXFCO0lBQ3pDLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVztJQUMzQixxQkFBcUIsRUFBRSxHQUFHLEVBQUUsa0NBQWtDO0lBQzlELG1CQUFtQixFQUFFLElBQUksRUFBRSx5QkFBeUI7SUFDcEQscUJBQXFCLEVBQUUsSUFBSSxFQUFFLHdCQUF3QjtJQUNyRCxLQUFLLEVBQUUsR0FBRyxFQUFFLG9CQUFvQjtJQUNoQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU87SUFDbEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxXQUFXO0NBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZW50U3RyZWFtLCBDb3JlQXBpT2JqZWN0IH0gZnJvbSAnLi4vZG1zL2Rtcy5zZXJ2aWNlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUXVlcnkge1xuICAvLyAtLSBGdWxsdGV4dCAtLVxuICAvLyBTZWFyY2ggdGVybVxuICB0ZXJtPzogc3RyaW5nO1xuICAvLyB3aGVyZSB0byBzZWFyY2hcbiAgc2NvcGU/OiAnYWxsJyB8ICdtZXRhZGF0YScgfCAnY29udGVudCc7XG5cbiAgLy8gLS0gUGFnaW5hdGlvbiAtLVxuICAvLyBOdW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuXG4gIHNpemU/OiBudW1iZXI7XG4gIC8vIE51bWJlciBvZiBpdGVtcyB0byBza2lwIChvZmZzZXQpXG4gIGZyb20/OiBudW1iZXI7XG5cbiAgLy8gLS0gRmllbGRzIC0tXG4gIC8vIE9iamVjdCBmaWVsZHMgdG8gcmV0dXJuXG4gIGZpZWxkcz86IHN0cmluZ1tdO1xuXG4gIC8vIC0tIEFnZ3JlZ2F0aW9ucyAtLVxuICAvLyBBZ2dyZWdhdGlvbnMgdG8gcmV0dXJuXG4gIGFnZ3M/OiBzdHJpbmdbXTtcblxuICAvLyAtLSBPYmplY3QgVHlwZXMgLS1cbiAgLy8gT2JqZWN0IHR5cGVzIChpbmNsLiBTT1RzKSB0byBzZWFyY2ggZm9yXG4gIHR5cGVzPzogc3RyaW5nW107XG5cbiAgLy8gLS0gRmlsdGVycyAtLVxuICAvLyBGaWx0ZXIgYnkgZmllbGRcbiAgZmlsdGVycz86IFNlYXJjaEZpbHRlcltdO1xuICAvLyBmaWx0ZXJzIHRvIGJlIGFwcGxpZWQgdG8gdGFibGUgY29sdW1uc1xuICB0YWJsZUZpbHRlcnM/OiBUYWJsZUZpbHRlcltdO1xuXG4gIC8vIC0tIFNvcnQgLS1cbiAgLy8gU29ydCBieSBmaWVsZFxuICBzb3J0PzogU29ydE9wdGlvbltdO1xuICBpbmNsdWRlUGVybWlzc2lvbnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRPcHRpb24ge1xuICBmaWVsZDogc3RyaW5nO1xuICBvcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoRmlsdGVyIHtcbiAgLy8gZmllbGQgdG8gZmlsdGVyIGJ5XG4gIGY6IHN0cmluZztcbiAgbzogT3BlcmF0b3I7XG4gIC8vIHZhbHVlIGZvciB0aGUgZmlsdGVyXG4gIHYxOiB1bmtub3duO1xuICAvLyBvcHRpb25hbCBzZWNvbmQgdmFsdWUgZm9yIGludGVydmFsIGZpbHRlcnNcbiAgdjI/OiB1bmtub3duO1xuICAvLyB3aGV0aGVyIHRvIG5lZ2F0ZSB0aGUgZmlsdGVyXG4gIHVzZU5vdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVGaWx0ZXIge1xuICB0YWJsZTogc3RyaW5nO1xuICBjb2x1bW5GaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXTtcbn1cblxuZXhwb3J0IGVudW0gT3BlcmF0b3Ige1xuICBFUVVBTCA9ICdlcScsIC8vIGVxdWFsXG4gIEVFUVVBTCA9ICdlZXEnLCAvLyBleGFjdCBlcXVhbFxuICBJTiA9ICdpbicsIC8vIG1hdGNoIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvdmlkZWQgdmFsdWVzICh2YWx1ZSBoYXMgdG8gYmUgYW4gYXJyYXkpXG4gIEdSRUFURVJfVEhBTiA9ICdndCcsIC8vIGdyZWF0ZXIgdGhhblxuICBHUkVBVEVSX09SX0VRVUFMID0gJ2d0ZScsIC8vIGdyZWF0ZXIgdGhhbiBvciBlcXVhbFxuICBMRVNTX1RIQU4gPSAnbHQnLCAvLyBsZXNzIHRoYW5cbiAgTEVTU19PUl9FUVVBTCA9ICdsdGUnLCAvLyBsZXNzIHRoYW4gb3IgZXF1YWxcbiAgSU5URVJWQUwgPSAnZ3RsdCcsIC8vIGludGVydmFsXG4gIElOVEVSVkFMX0lOQ0xVREVfQk9USCA9ICdndGVsdGUnLCAvLyBpbnRlcnZhbCBpbmNsdWRlIGxlZnQgYW5kIHJpZ2h0XG4gIElOVEVSVkFMX0lOQ0xVREVfVE8gPSAnZ3RsdGUnLCAvLyBpbnRlcnZhbCBpbmNsdWRlIHJpZ2h0XG4gIElOVEVSVkFMX0lOQ0xVREVfRlJPTSA9ICdndGVsdCcsIC8vIGludGVydmFsIGluY2x1ZGUgbGVmdFxuICBSQU5HRSA9ICdyZycsIC8vIGFnZ2VnYXRpb24gcmFuZ2VzXG4gIExJS0UgPSAnbGlrZScsIC8vIGxpa2VcbiAgQ09OVEFJTlMgPSAnY29udGFpbnMnIC8vIGNvbnRhaW5zXG59XG5leHBvcnQgY29uc3QgT3BlcmF0b3JMYWJlbCA9IHtcbiAgLyoqIGVxdWFsICovXG4gIEVRVUFMOiAnPScsXG4gIC8qKiBleGFjdCBlcXVhbCAqL1xuICBFRVFVQUw6ICc9PScsXG4gIC8qKiBtYXRjaCBhdCBsZWFzdCBvbmUgb2YgdGhlIHByb3ZpZGVkIHZhbHVlcyAodmFsdWUgaGFzIHRvIGJlIGFuIGFycmF5KSAgKi9cbiAgSU46ICd+JyxcbiAgLyoqIGdyZWF0ZXIgdGhhbiAqL1xuICBHUkVBVEVSX1RIQU46ICc+JyxcbiAgLyoqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCAqL1xuICBHUkVBVEVSX09SX0VRVUFMOiAn4om9JywgLy9cbiAgTEVTU19USEFOOiAnPCcsIC8vIGxlc3MgdGhhblxuICBMRVNTX09SX0VRVUFMOiAn4om8JywgLy8gbGVzcyB0aGFuIG9yIGVxdWFsXG4gIElOVEVSVkFMOiAnPD4nLCAvLyBpbnRlcnZhbFxuICBJTlRFUlZBTF9JTkNMVURFX0JPVEg6ICctJywgLy8gaW50ZXJ2YWwgaW5jbHVkZSBsZWZ0IGFuZCByaWdodFxuICBJTlRFUlZBTF9JTkNMVURFX1RPOiAnPi0nLCAvLyBpbnRlcnZhbCBpbmNsdWRlIHJpZ2h0XG4gIElOVEVSVkFMX0lOQ0xVREVfRlJPTTogJy08JywgLy8gaW50ZXJ2YWwgaW5jbHVkZSBsZWZ0XG4gIFJBTkdFOiAnPScsIC8vIGFnZ2VnYXRpb24gcmFuZ2VzXG4gIExJS0U6ICd+JywgLy8gbGlrZVxuICBDT05UQUlOUzogJ34nIC8vIGNvbnRhaW5zXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzcG9uc2Uge1xuICBoYXNNb3JlSXRlbXM6IGJvb2xlYW47XG4gIG51bUl0ZW1zOiBudW1iZXI7XG4gIHRvdGFsTnVtSXRlbXM6IG51bWJlcjtcbiAgb2JqZWN0czogQ29yZUFwaU9iamVjdFtdO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBwcm92aWRpbmcgYSBzZWFyY2ggc2VydmljZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdCB7XG4gIGhhc01vcmVJdGVtczogYm9vbGVhbjtcbiAgdG90YWxOdW1JdGVtczogbnVtYmVyO1xuICBpdGVtczogU2VhcmNoUmVzdWx0SXRlbVtdO1xuICAvKipcbiAgICogb2JqZWN0IHR5cGVzIHdpdGhpbiB0aGUgcmVzdWx0XG4gICAqL1xuXG4gIG9iamVjdFR5cGVzOiBzdHJpbmdbXTtcbn1cbi8qKlxuICogSW50ZXJmYWNlIGZvciB0aGUgaXRlbSBvZiBzZWFyY2ggcmVzdWx0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdEl0ZW0ge1xuICBvYmplY3RUeXBlSWQ6IHN0cmluZztcbiAgY29udGVudD86IFNlYXJjaFJlc3VsdENvbnRlbnQ7XG4gIHBlcm1pc3Npb25zPzogU2VhcmNoUmVzdWx0UGVybWlzc2lvbnM7XG4gIGZpZWxkczogTWFwPHN0cmluZywgYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXN1bHRQZXJtaXNzaW9ucyB7XG4gIHJlYWQ6IEFycmF5PCdtZXRhZGF0YScgfCAnY29udGVudCc+O1xuICB3cml0ZTogQXJyYXk8J21ldGFkYXRhJyB8ICdjb250ZW50Jz47XG4gIGRlbGV0ZTogQXJyYXk8J29iamVjdCcgfCAnY29udGVudCc+O1xufVxuXG5leHBvcnQgdHlwZSBTZWFyY2hSZXN1bHRDb250ZW50ID0gQ29udGVudFN0cmVhbTtcbi8vIC8qKlxuLy8gICogSW50ZXJmYWNlIHByb3ZpZGluZyBzZWFyY2ggcXVlcnkgcHJvcGVydGllcywgdGhhdCBjYW4gYmUgc2VuZCB0b1xuLy8gICogdGhlIHNlYXJjaCBzZXJ2aWNlXG4vLyAgKi9cbi8vIGV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUXVlcnlQcm9wZXJ0aWVzIHtcbi8vICAgdGVybT86IHN0cmluZztcbi8vICAgc2l6ZT86IG51bWJlcjtcbi8vICAgZmllbGRzPzogc3RyaW5nW107XG4vLyAgIGZyb20/OiBudW1iZXI7XG4vLyAgIGFnZ3M/OiBzdHJpbmdbXTtcbi8vICAgbWF4SXRlbXM/OiBudW1iZXI7XG4vLyAgIHR5cGVzPzogc3RyaW5nW107IC8vIG1peGVkIGxpc3Qgb2YgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IG9iamVjdCB0eXBlc1xuLy8gICBsb3RzPzogc3RyaW5nW107IC8vIGxpc3Qgb2YgbGVhZGluZyBvYmplY3QgdHlwZXNcbi8vICAgZmlsdGVycz86IGFueTtcbi8vICAgaGlkZGVuRmlsdGVycz86IGFueTsgLy8gaGlkZGVuIGZpbHRlcnMgdGhhdCB3aWxsIGJlIGNvbWJpbmVkIHdpdGggU2VhcmNoUXVlcnkgZmlsdGVycyB2aWEgc2VhcmNoIHNlcnZpY2Vcbi8vICAgdGFibGVGaWx0ZXJzPzogYW55OyAvLyB0YWJsZSBmaWx0ZXJzIHRoYXQgYWxsb3dzIHRvIHNlYXJjaCBjb21wbGV4IHF1ZXJpZXNcbi8vICAgc29ydD86IGFueTtcbi8vICAgdGFncz86IGFueTtcbi8vICAgc2NvcGU/OiAnYWxsJyB8ICdtZXRhZGF0YScgfCAnY29udGVudCc7XG4vLyB9XG5cbi8qKlxuICogSW50ZXJmYWNlIHByb3ZpZGluZyB0aGUgZXN0aW1hdGVkIHJlc3VsdCBvZiB0aGUgY3VycmVudCBxdWVyeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVSZXN1bHQge1xuICAvKipcbiAgICogbnVtYmVyIG9mIHJlc3VsdHMgZm91bmRcbiAgICovXG4gIHRvdGFsTnVtSXRlbXM6IG51bWJlcjtcbiAgYWdncmVnYXRpb25zOiBBZ2dyZWdhdGlvbltdO1xufVxuXG4vKipcbiAqIFByb3BlcnR5IG9mIGEgb25lIHNlYXJjaCBxdWVyeSBhZ2dyZWdhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFnZ3JlZ2F0aW9uIHtcbiAgYWdnS2V5OiBzdHJpbmc7XG4gIGVudHJpZXM6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBjb3VudDogbnVtYmVyO1xuICB9W107XG59XG4iXX0=
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import { BackendService } from '../backend/backend.service';
|
|
4
|
+
import { BaseObjectTypeField, ContentStreamField } from '../system/system.enum';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class SearchService {
|
|
7
|
+
#backend = inject(BackendService);
|
|
8
|
+
static { this.DEFAULT_QUERY_SIZE = 50; }
|
|
9
|
+
/**
|
|
10
|
+
* Execute a search query ans transform the result to a SearchResult object
|
|
11
|
+
* @param query The search query
|
|
12
|
+
* @returns Observable of a SearchResult
|
|
13
|
+
*/
|
|
14
|
+
search(query) {
|
|
15
|
+
return this.searchRaw(query).pipe(map((res) => this.toSearchResult(res)));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Execute a raw search query and return the result as is.
|
|
19
|
+
* @param query The search query
|
|
20
|
+
* @returns Observable of the raw search result
|
|
21
|
+
*/
|
|
22
|
+
searchRaw(query) {
|
|
23
|
+
if (!query.size)
|
|
24
|
+
query.size = SearchService.DEFAULT_QUERY_SIZE;
|
|
25
|
+
return this.#backend.post(`/dms/objects/search`, query);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Search for objects in the dms using CMIS like SQL syntax.
|
|
29
|
+
* @param statement The query statement
|
|
30
|
+
* @param size The number of items to return
|
|
31
|
+
* @returns Observable of a SearchResult
|
|
32
|
+
*/
|
|
33
|
+
searchCmis(statement, size = 50) {
|
|
34
|
+
return this.#backend
|
|
35
|
+
.post('/dms/objects/search', {
|
|
36
|
+
query: {
|
|
37
|
+
statement,
|
|
38
|
+
skipCount: 0,
|
|
39
|
+
maxItems: size,
|
|
40
|
+
handleDeletedDocuments: 'DELETED_DOCUMENTS_EXCLUDE'
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Using API-WEB because it enriches the response with additional information (resolved user names, etc.)
|
|
44
|
+
// ApiBase.core
|
|
45
|
+
)
|
|
46
|
+
.pipe(map((res) => this.toSearchResult(res)));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Fetch aggragations for a given query.
|
|
50
|
+
* @param q The query
|
|
51
|
+
* @param aggregations List of aggregations to be fetched (e.g. `enaio:objectTypeId`
|
|
52
|
+
* to get an aggregation of object types)
|
|
53
|
+
*/
|
|
54
|
+
aggregate(q, aggregations) {
|
|
55
|
+
q.aggs = aggregations;
|
|
56
|
+
return this.searchRaw(q).pipe(map((res) => this.#toAggregateResult(res, aggregations)));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Map search result from the backend to applications AggregateResult object
|
|
60
|
+
* @param searchResponse The backend response
|
|
61
|
+
* @param aggregations The aggregations to be fetched
|
|
62
|
+
*/
|
|
63
|
+
#toAggregateResult(searchResponse, aggregations) {
|
|
64
|
+
const agg = [];
|
|
65
|
+
if (aggregations) {
|
|
66
|
+
aggregations.forEach((a) => {
|
|
67
|
+
const ag = {
|
|
68
|
+
aggKey: a,
|
|
69
|
+
entries: searchResponse.objects.map((o) => ({
|
|
70
|
+
key: o.properties[a].value,
|
|
71
|
+
count: o.properties['OBJECT_COUNT'].value
|
|
72
|
+
}))
|
|
73
|
+
};
|
|
74
|
+
agg.push(ag);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
totalNumItems: searchResponse.totalNumItems,
|
|
79
|
+
aggregations: agg
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Go to a page of a search result.
|
|
84
|
+
* @param searchResult The search result (that supports pagination)
|
|
85
|
+
* @param page The number of the page to go to
|
|
86
|
+
*/
|
|
87
|
+
getPage(query, page) {
|
|
88
|
+
query.from = (page - 1) * (query.size || SearchService.DEFAULT_QUERY_SIZE);
|
|
89
|
+
return this.search(query);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Map search result from the backend to applications SearchResult object
|
|
93
|
+
* @param searchResponse The backend response
|
|
94
|
+
*/
|
|
95
|
+
toSearchResult(searchResponse) {
|
|
96
|
+
const resultListItems = [];
|
|
97
|
+
const objectTypes = [];
|
|
98
|
+
searchResponse.objects.forEach((o) => {
|
|
99
|
+
const fields = new Map();
|
|
100
|
+
// process properties section of result
|
|
101
|
+
Object.keys(o.properties).forEach((key) => {
|
|
102
|
+
let value = o.properties[key].value;
|
|
103
|
+
if (o.properties[key].clvalue) {
|
|
104
|
+
// table fields will have a clientValue too ...
|
|
105
|
+
value = o.properties[key].clvalue;
|
|
106
|
+
// ... and also may contain values that need to be resolved
|
|
107
|
+
if (o.properties[key].resolvedValues) {
|
|
108
|
+
value.forEach((v) => {
|
|
109
|
+
Object.keys(v).forEach((k) => {
|
|
110
|
+
const resValue = Array.isArray(v[k]) ? v[k].map((i) => o.properties[key].resolvedValues[i]) : o.properties[key].resolvedValues[v[k]];
|
|
111
|
+
if (resValue) {
|
|
112
|
+
v[`${k}_title`] = resValue;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
fields.set(key, value);
|
|
119
|
+
if (o.properties[key].title) {
|
|
120
|
+
fields.set(key + '_title', o.properties[key].title);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
// process contentStreams section of result if available.
|
|
124
|
+
// Objects that don't have files attached won't have this section
|
|
125
|
+
let content;
|
|
126
|
+
if (o.contentStreams && o.contentStreams.length > 0) {
|
|
127
|
+
// we assume that each result object only has ONE file attached, altough
|
|
128
|
+
// this is an array and there may be more
|
|
129
|
+
const contentStream = o.contentStreams[0];
|
|
130
|
+
// also add contentstream related fields to the result fields
|
|
131
|
+
fields.set(ContentStreamField.LENGTH, contentStream.length);
|
|
132
|
+
fields.set(ContentStreamField.MIME_TYPE, contentStream.mimeType);
|
|
133
|
+
fields.set(ContentStreamField.FILENAME, contentStream.fileName);
|
|
134
|
+
fields.set(ContentStreamField.ID, contentStream.contentStreamId);
|
|
135
|
+
fields.set(ContentStreamField.RANGE, contentStream.contentStreamRange);
|
|
136
|
+
fields.set(ContentStreamField.REPOSITORY_ID, contentStream.repositoryId);
|
|
137
|
+
fields.set(ContentStreamField.DIGEST, contentStream.digest);
|
|
138
|
+
fields.set(ContentStreamField.ARCHIVE_PATH, contentStream.archivePath);
|
|
139
|
+
content = {
|
|
140
|
+
contentStreamId: contentStream.contentStreamId,
|
|
141
|
+
repositoryId: contentStream.repositoryId,
|
|
142
|
+
range: contentStream.range,
|
|
143
|
+
digest: contentStream.digest,
|
|
144
|
+
archivePath: contentStream.archivePath,
|
|
145
|
+
fileName: contentStream.fileName,
|
|
146
|
+
mimeType: contentStream.mimeType,
|
|
147
|
+
size: contentStream.length
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const objectTypeId = o.properties[BaseObjectTypeField.OBJECT_TYPE_ID] ? o.properties[BaseObjectTypeField.OBJECT_TYPE_ID].value : null;
|
|
151
|
+
if (objectTypes.indexOf(objectTypeId) === -1) {
|
|
152
|
+
objectTypes.push(objectTypeId);
|
|
153
|
+
}
|
|
154
|
+
resultListItems.push({
|
|
155
|
+
objectTypeId,
|
|
156
|
+
content,
|
|
157
|
+
fields,
|
|
158
|
+
permissions: o.permissions
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
const result = {
|
|
162
|
+
hasMoreItems: searchResponse.hasMoreItems,
|
|
163
|
+
totalNumItems: searchResponse.totalNumItems,
|
|
164
|
+
items: resultListItems,
|
|
165
|
+
objectTypes
|
|
166
|
+
};
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
170
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchService, providedIn: 'root' }); }
|
|
171
|
+
}
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchService, decorators: [{
|
|
173
|
+
type: Injectable,
|
|
174
|
+
args: [{
|
|
175
|
+
providedIn: 'root'
|
|
176
|
+
}]
|
|
177
|
+
}] });
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2Uvc2VhcmNoL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTWhGLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7YUFFM0IsdUJBQWtCLEdBQUcsRUFBRSxBQUFMLENBQU07SUFFL0I7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsS0FBa0I7UUFDMUIsSUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUM7UUFDOUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsU0FBaUIsRUFBRSxJQUFJLEdBQUcsRUFBRTtR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Z3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYWNrZW5kU2VydmljZSB9IGZyb20gJy4uL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VPYmplY3RUeXBlRmllbGQsIENvbnRlbnRTdHJlYW1GaWVsZCB9IGZyb20gJy4uL3N5c3RlbS9zeXN0ZW0uZW51bSc7XG5pbXBvcnQgeyBBZ2dyZWdhdGVSZXN1bHQsIEFnZ3JlZ2F0aW9uLCBTZWFyY2hRdWVyeSwgU2VhcmNoUmVzcG9uc2UsIFNlYXJjaFJlc3VsdCwgU2VhcmNoUmVzdWx0Q29udGVudCwgU2VhcmNoUmVzdWx0SXRlbSB9IGZyb20gJy4vc2VhcmNoLnNlcnZpY2UuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoU2VydmljZSB7XG4gICNiYWNrZW5kID0gaW5qZWN0KEJhY2tlbmRTZXJ2aWNlKTtcblxuICBzdGF0aWMgREVGQVVMVF9RVUVSWV9TSVpFID0gNTA7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBzZWFyY2ggcXVlcnkgYW5zIHRyYW5zZm9ybSB0aGUgcmVzdWx0IHRvIGEgU2VhcmNoUmVzdWx0IG9iamVjdFxuICAgKiBAcGFyYW0gcXVlcnkgVGhlIHNlYXJjaCBxdWVyeVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIGEgU2VhcmNoUmVzdWx0XG4gICAqL1xuICBzZWFyY2gocXVlcnk6IFNlYXJjaFF1ZXJ5KTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hSYXcocXVlcnkpLnBpcGUobWFwKChyZXMpID0+IHRoaXMudG9TZWFyY2hSZXN1bHQocmVzKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSByYXcgc2VhcmNoIHF1ZXJ5IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBpcy5cbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnlcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmF3IHNlYXJjaCByZXN1bHRcbiAgICovXG4gIHNlYXJjaFJhdyhxdWVyeTogU2VhcmNoUXVlcnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmKCFxdWVyeS5zaXplKSBxdWVyeS5zaXplID0gU2VhcmNoU2VydmljZS5ERUZBVUxUX1FVRVJZX1NJWkU7XG4gICAgcmV0dXJuIHRoaXMuI2JhY2tlbmQucG9zdChgL2Rtcy9vYmplY3RzL3NlYXJjaGAsIHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIG9iamVjdHMgaW4gdGhlIGRtcyB1c2luZyBDTUlTIGxpa2UgU1FMIHN5bnRheC5cbiAgICogQHBhcmFtIHN0YXRlbWVudCBUaGUgcXVlcnkgc3RhdGVtZW50XG4gICAqIEBwYXJhbSBzaXplIFRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgYSBTZWFyY2hSZXN1bHRcbiAgICovXG4gIHNlYXJjaENtaXMoc3RhdGVtZW50OiBzdHJpbmcsIHNpemUgPSA1MCk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuI2JhY2tlbmRcbiAgICAgIC5wb3N0KFxuICAgICAgICAnL2Rtcy9vYmplY3RzL3NlYXJjaCcsXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgc3RhdGVtZW50LFxuICAgICAgICAgICAgc2tpcENvdW50OiAwLFxuICAgICAgICAgICAgbWF4SXRlbXM6IHNpemUsXG4gICAgICAgICAgICBoYW5kbGVEZWxldGVkRG9jdW1lbnRzOiAnREVMRVRFRF9ET0NVTUVOVFNfRVhDTFVERSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXNpbmcgQVBJLVdFQiBiZWNhdXNlIGl0IGVucmljaGVzIHRoZSByZXNwb25zZSB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gKHJlc29sdmVkIHVzZXIgbmFtZXMsIGV0Yy4pXG4gICAgICAgIC8vIEFwaUJhc2UuY29yZVxuICAgICAgKVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHRoaXMudG9TZWFyY2hSZXN1bHQocmVzIGFzIFNlYXJjaFJlc3BvbnNlKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFnZ3JhZ2F0aW9ucyBmb3IgYSBnaXZlbiBxdWVyeS5cbiAgICogQHBhcmFtIHEgVGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBhZ2dyZWdhdGlvbnMgTGlzdCBvZiBhZ2dyZWdhdGlvbnMgdG8gYmUgZmV0Y2hlZCAoZS5nLiBgZW5haW86b2JqZWN0VHlwZUlkYFxuICAgKiB0byBnZXQgYW4gYWdncmVnYXRpb24gb2Ygb2JqZWN0IHR5cGVzKVxuICAgKi9cbiAgYWdncmVnYXRlKHE6IFNlYXJjaFF1ZXJ5LCBhZ2dyZWdhdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgcS5hZ2dzID0gYWdncmVnYXRpb25zO1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFJhdyhxKS5waXBlKG1hcCgocmVzKSA9PiB0aGlzLiN0b0FnZ3JlZ2F0ZVJlc3VsdChyZXMsIGFnZ3JlZ2F0aW9ucykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgc2VhcmNoIHJlc3VsdCBmcm9tIHRoZSBiYWNrZW5kIHRvIGFwcGxpY2F0aW9ucyBBZ2dyZWdhdGVSZXN1bHQgb2JqZWN0XG4gICAqIEBwYXJhbSBzZWFyY2hSZXNwb25zZSBUaGUgYmFja2VuZCByZXNwb25zZVxuICAgKiBAcGFyYW0gYWdncmVnYXRpb25zIFRoZSBhZ2dyZWdhdGlvbnMgdG8gYmUgZmV0Y2hlZFxuICAgKi9cbiAgI3RvQWdncmVnYXRlUmVzdWx0KHNlYXJjaFJlc3BvbnNlOiBhbnksIGFnZ3JlZ2F0aW9ucz86IHN0cmluZ1tdKTogQWdncmVnYXRlUmVzdWx0IHtcbiAgICBjb25zdCBhZ2c6IEFnZ3JlZ2F0aW9uW10gPSBbXTtcbiAgICBpZiAoYWdncmVnYXRpb25zKSB7XG4gICAgICBhZ2dyZWdhdGlvbnMuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgICBjb25zdCBhZzogQWdncmVnYXRpb24gPSB7XG4gICAgICAgICAgYWdnS2V5OiBhLFxuICAgICAgICAgIGVudHJpZXM6IHNlYXJjaFJlc3BvbnNlLm9iamVjdHMubWFwKChvOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBrZXk6IG8ucHJvcGVydGllc1thXS52YWx1ZSxcbiAgICAgICAgICAgIGNvdW50OiBvLnByb3BlcnRpZXNbJ09CSkVDVF9DT1VOVCddLnZhbHVlXG4gICAgICAgICAgfSkpXG4gICAgICAgIH07XG4gICAgICAgIGFnZy5wdXNoKGFnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxOdW1JdGVtczogc2VhcmNoUmVzcG9uc2UudG90YWxOdW1JdGVtcyxcbiAgICAgIGFnZ3JlZ2F0aW9uczogYWdnXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0byBhIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0LlxuICAgKiBAcGFyYW0gc2VhcmNoUmVzdWx0IFRoZSBzZWFyY2ggcmVzdWx0ICh0aGF0IHN1cHBvcnRzIHBhZ2luYXRpb24pXG4gICAqIEBwYXJhbSBwYWdlIFRoZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gZ28gdG9cbiAgICovXG4gIGdldFBhZ2UocXVlcnk6IFNlYXJjaFF1ZXJ5LCBwYWdlOiBudW1iZXIpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD4ge1xuICAgIHF1ZXJ5LmZyb20gPSAocGFnZSAtIDEpICogKHF1ZXJ5LnNpemUgfHwgU2VhcmNoU2VydmljZS5ERUZBVUxUX1FVRVJZX1NJWkUpO1xuICAgIHJldHVybiB0aGlzLnNlYXJjaChxdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwIHNlYXJjaCByZXN1bHQgZnJvbSB0aGUgYmFja2VuZCB0byBhcHBsaWNhdGlvbnMgU2VhcmNoUmVzdWx0IG9iamVjdFxuICAgKiBAcGFyYW0gc2VhcmNoUmVzcG9uc2UgVGhlIGJhY2tlbmQgcmVzcG9uc2VcbiAgICovXG4gIHRvU2VhcmNoUmVzdWx0KHNlYXJjaFJlc3BvbnNlOiBTZWFyY2hSZXNwb25zZSk6IFNlYXJjaFJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0TGlzdEl0ZW1zOiBTZWFyY2hSZXN1bHRJdGVtW10gPSBbXTtcbiAgICBjb25zdCBvYmplY3RUeXBlczogc3RyaW5nW10gPSBbXTtcblxuICAgIHNlYXJjaFJlc3BvbnNlLm9iamVjdHMuZm9yRWFjaCgobzogYW55KSA9PiB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBuZXcgTWFwKCk7XG4gICAgICAvLyBwcm9jZXNzIHByb3BlcnRpZXMgc2VjdGlvbiBvZiByZXN1bHRcbiAgICAgIE9iamVjdC5rZXlzKG8ucHJvcGVydGllcykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gby5wcm9wZXJ0aWVzW2tleV0udmFsdWU7XG4gICAgICAgIGlmIChvLnByb3BlcnRpZXNba2V5XS5jbHZhbHVlKSB7XG4gICAgICAgICAgLy8gdGFibGUgZmllbGRzIHdpbGwgaGF2ZSBhIGNsaWVudFZhbHVlIHRvbyAuLi5cbiAgICAgICAgICB2YWx1ZSA9IG8ucHJvcGVydGllc1trZXldLmNsdmFsdWU7XG4gICAgICAgICAgLy8gLi4uIGFuZCBhbHNvIG1heSBjb250YWluIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgcmVzb2x2ZWRcbiAgICAgICAgICBpZiAoby5wcm9wZXJ0aWVzW2tleV0ucmVzb2x2ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKHY6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2KS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzVmFsdWUgPSBBcnJheS5pc0FycmF5KHZba10pID8gdltrXS5tYXAoKGk6IGFueSkgPT4gby5wcm9wZXJ0aWVzW2tleV0ucmVzb2x2ZWRWYWx1ZXNbaV0pIDogby5wcm9wZXJ0aWVzW2tleV0ucmVzb2x2ZWRWYWx1ZXNbdltrXV07XG4gICAgICAgICAgICAgICAgaWYgKHJlc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB2W2Ake2t9X3RpdGxlYF0gPSByZXNWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKG8ucHJvcGVydGllc1trZXldLnRpdGxlKSB7XG4gICAgICAgICAgZmllbGRzLnNldChrZXkgKyAnX3RpdGxlJywgby5wcm9wZXJ0aWVzW2tleV0udGl0bGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gcHJvY2VzcyBjb250ZW50U3RyZWFtcyBzZWN0aW9uIG9mIHJlc3VsdCBpZiBhdmFpbGFibGUuXG4gICAgICAvLyBPYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBmaWxlcyBhdHRhY2hlZCB3b24ndCBoYXZlIHRoaXMgc2VjdGlvblxuICAgICAgbGV0IGNvbnRlbnQ6IFNlYXJjaFJlc3VsdENvbnRlbnQgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoby5jb250ZW50U3RyZWFtcyAmJiBvLmNvbnRlbnRTdHJlYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gd2UgYXNzdW1lIHRoYXQgZWFjaCByZXN1bHQgb2JqZWN0IG9ubHkgaGFzIE9ORSBmaWxlIGF0dGFjaGVkLCBhbHRvdWdoXG4gICAgICAgIC8vIHRoaXMgaXMgYW4gYXJyYXkgYW5kIHRoZXJlIG1heSBiZSBtb3JlXG4gICAgICAgIGNvbnN0IGNvbnRlbnRTdHJlYW0gPSBvLmNvbnRlbnRTdHJlYW1zWzBdO1xuICAgICAgICAvLyBhbHNvIGFkZCBjb250ZW50c3RyZWFtIHJlbGF0ZWQgZmllbGRzIHRvIHRoZSByZXN1bHQgZmllbGRzXG4gICAgICAgIGZpZWxkcy5zZXQoQ29udGVudFN0cmVhbUZpZWxkLkxFTkdUSCwgY29udGVudFN0cmVhbS5sZW5ndGgpO1xuICAgICAgICBmaWVsZHMuc2V0KENvbnRlbnRTdHJlYW1GaWVsZC5NSU1FX1RZUEUsIGNvbnRlbnRTdHJlYW0ubWltZVR5cGUpO1xuICAgICAgICBmaWVsZHMuc2V0KENvbnRlbnRTdHJlYW1GaWVsZC5GSUxFTkFNRSwgY29udGVudFN0cmVhbS5maWxlTmFtZSk7XG4gICAgICAgIGZpZWxkcy5zZXQoQ29udGVudFN0cmVhbUZpZWxkLklELCBjb250ZW50U3RyZWFtLmNvbnRlbnRTdHJlYW1JZCk7XG4gICAgICAgIGZpZWxkcy5zZXQoQ29udGVudFN0cmVhbUZpZWxkLlJBTkdFLCBjb250ZW50U3RyZWFtLmNvbnRlbnRTdHJlYW1SYW5nZSk7XG4gICAgICAgIGZpZWxkcy5zZXQoQ29udGVudFN0cmVhbUZpZWxkLlJFUE9TSVRPUllfSUQsIGNvbnRlbnRTdHJlYW0ucmVwb3NpdG9yeUlkKTtcbiAgICAgICAgZmllbGRzLnNldChDb250ZW50U3RyZWFtRmllbGQuRElHRVNULCBjb250ZW50U3RyZWFtLmRpZ2VzdCk7XG4gICAgICAgIGZpZWxkcy5zZXQoQ29udGVudFN0cmVhbUZpZWxkLkFSQ0hJVkVfUEFUSCwgY29udGVudFN0cmVhbS5hcmNoaXZlUGF0aCk7XG5cbiAgICAgICAgY29udGVudCA9IHtcbiAgICAgICAgICBjb250ZW50U3RyZWFtSWQ6IGNvbnRlbnRTdHJlYW0uY29udGVudFN0cmVhbUlkLFxuICAgICAgICAgIHJlcG9zaXRvcnlJZDogY29udGVudFN0cmVhbS5yZXBvc2l0b3J5SWQsXG4gICAgICAgICAgcmFuZ2U6IGNvbnRlbnRTdHJlYW0ucmFuZ2UsXG4gICAgICAgICAgZGlnZXN0OiBjb250ZW50U3RyZWFtLmRpZ2VzdCxcbiAgICAgICAgICBhcmNoaXZlUGF0aDogY29udGVudFN0cmVhbS5hcmNoaXZlUGF0aCxcbiAgICAgICAgICBmaWxlTmFtZTogY29udGVudFN0cmVhbS5maWxlTmFtZSxcbiAgICAgICAgICBtaW1lVHlwZTogY29udGVudFN0cmVhbS5taW1lVHlwZSxcbiAgICAgICAgICBzaXplOiBjb250ZW50U3RyZWFtLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvYmplY3RUeXBlSWQgPSBvLnByb3BlcnRpZXNbQmFzZU9iamVjdFR5cGVGaWVsZC5PQkpFQ1RfVFlQRV9JRF0gPyBvLnByb3BlcnRpZXNbQmFzZU9iamVjdFR5cGVGaWVsZC5PQkpFQ1RfVFlQRV9JRF0udmFsdWUgOiBudWxsO1xuICAgICAgaWYgKG9iamVjdFR5cGVzLmluZGV4T2Yob2JqZWN0VHlwZUlkKSA9PT0gLTEpIHtcbiAgICAgICAgb2JqZWN0VHlwZXMucHVzaChvYmplY3RUeXBlSWQpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRMaXN0SXRlbXMucHVzaCh7XG4gICAgICAgIG9iamVjdFR5cGVJZCxcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBwZXJtaXNzaW9uczogby5wZXJtaXNzaW9uc1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IFNlYXJjaFJlc3VsdCA9IHtcbiAgICAgIGhhc01vcmVJdGVtczogc2VhcmNoUmVzcG9uc2UuaGFzTW9yZUl0ZW1zLFxuICAgICAgdG90YWxOdW1JdGVtczogc2VhcmNoUmVzcG9uc2UudG90YWxOdW1JdGVtcyxcbiAgICAgIGl0ZW1zOiByZXN1bHRMaXN0SXRlbXMsXG4gICAgICBvYmplY3RUeXBlc1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SessionStorageService {
|
|
4
|
+
#TEMP_STORAGE_ENTRIES_KEY = 'yuv.core.sessionstorage.entries';
|
|
5
|
+
constructor() {
|
|
6
|
+
this.#clearTemporaryStorageEntries();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Add a reference to a temporary localstorage entry that should be cleared when a
|
|
10
|
+
* new browser session starts. In context of forms this will be used to cleanup the
|
|
11
|
+
* layout state of forms (selected tabs etc.) that are stored locally but should only
|
|
12
|
+
* be pesisted for one browser session.
|
|
13
|
+
* @param storageKey Key of the localstorage item
|
|
14
|
+
*/
|
|
15
|
+
addTemporaryStorageEntry(storageKey) {
|
|
16
|
+
// entries will themselves be stored in localstorage so we can check for entries
|
|
17
|
+
// to be removed once the application starts
|
|
18
|
+
const current = this.#getTemporaryStorageEntries();
|
|
19
|
+
if (!current.includes(storageKey))
|
|
20
|
+
localStorage.setItem(this.#TEMP_STORAGE_ENTRIES_KEY, JSON.stringify([...current, storageKey]));
|
|
21
|
+
}
|
|
22
|
+
#clearTemporaryStorageEntries() {
|
|
23
|
+
this.#getTemporaryStorageEntries().forEach((e) => localStorage.removeItem(e));
|
|
24
|
+
localStorage.removeItem(this.#TEMP_STORAGE_ENTRIES_KEY);
|
|
25
|
+
}
|
|
26
|
+
#getTemporaryStorageEntries() {
|
|
27
|
+
let res = [];
|
|
28
|
+
const i = localStorage.getItem(this.#TEMP_STORAGE_ENTRIES_KEY);
|
|
29
|
+
if (i) {
|
|
30
|
+
try {
|
|
31
|
+
const entries = JSON.parse(i);
|
|
32
|
+
if (Array.isArray(entries))
|
|
33
|
+
res = entries;
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
console.error(e);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return res;
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
42
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorageService, providedIn: 'root' }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SessionStorageService, decorators: [{
|
|
45
|
+
type: Injectable,
|
|
46
|
+
args: [{
|
|
47
|
+
providedIn: 'root'
|
|
48
|
+
}]
|
|
49
|
+
}], ctorParameters: () => [] });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2Uvc2Vzc2lvbi1zdG9yYWdlL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMseUJBQXlCLEdBQUcsaUNBQWlDLENBQUM7SUFFOUQ7UUFDRSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsd0JBQXdCLENBQUMsVUFBa0I7UUFDekMsZ0ZBQWdGO1FBQ2hGLDRDQUE0QztRQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BJLENBQUM7SUFFRCw2QkFBNkI7UUFDM0IsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLElBQUksR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxFQUFFLENBQUM7WUFDTixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxPQUFPLEdBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztvQkFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDO1lBQzVDLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7K0dBdENVLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdG9yYWdlU2VydmljZSB7XG4gICNURU1QX1NUT1JBR0VfRU5UUklFU19LRVkgPSAneXV2LmNvcmUuc2Vzc2lvbnN0b3JhZ2UuZW50cmllcyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4jY2xlYXJUZW1wb3JhcnlTdG9yYWdlRW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHJlZmVyZW5jZSB0byBhIHRlbXBvcmFyeSBsb2NhbHN0b3JhZ2UgZW50cnkgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCB3aGVuIGFcbiAgICogbmV3IGJyb3dzZXIgc2Vzc2lvbiBzdGFydHMuIEluIGNvbnRleHQgb2YgZm9ybXMgdGhpcyB3aWxsIGJlIHVzZWQgdG8gY2xlYW51cCB0aGVcbiAgICogbGF5b3V0IHN0YXRlIG9mIGZvcm1zIChzZWxlY3RlZCB0YWJzIGV0Yy4pIHRoYXQgYXJlIHN0b3JlZCBsb2NhbGx5IGJ1dCBzaG91bGQgb25seVxuICAgKiBiZSBwZXNpc3RlZCBmb3Igb25lIGJyb3dzZXIgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHN0b3JhZ2VLZXkgS2V5IG9mIHRoZSBsb2NhbHN0b3JhZ2UgaXRlbVxuICAgKi9cbiAgYWRkVGVtcG9yYXJ5U3RvcmFnZUVudHJ5KHN0b3JhZ2VLZXk6IHN0cmluZykge1xuICAgIC8vIGVudHJpZXMgd2lsbCB0aGVtc2VsdmVzIGJlIHN0b3JlZCBpbiBsb2NhbHN0b3JhZ2Ugc28gd2UgY2FuIGNoZWNrIGZvciBlbnRyaWVzXG4gICAgLy8gdG8gYmUgcmVtb3ZlZCBvbmNlIHRoZSBhcHBsaWNhdGlvbiBzdGFydHNcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy4jZ2V0VGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKTtcbiAgICBpZiAoIWN1cnJlbnQuaW5jbHVkZXMoc3RvcmFnZUtleSkpIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuI1RFTVBfU1RPUkFHRV9FTlRSSUVTX0tFWSwgSlNPTi5zdHJpbmdpZnkoWy4uLmN1cnJlbnQsIHN0b3JhZ2VLZXldKSk7XG4gIH1cblxuICAjY2xlYXJUZW1wb3JhcnlTdG9yYWdlRW50cmllcygpIHtcbiAgICB0aGlzLiNnZXRUZW1wb3JhcnlTdG9yYWdlRW50cmllcygpLmZvckVhY2goKGUpID0+IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGUpKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLiNURU1QX1NUT1JBR0VfRU5UUklFU19LRVkpO1xuICB9XG5cbiAgI2dldFRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLiNURU1QX1NUT1JBR0VfRU5UUklFU19LRVkpO1xuICAgIGlmIChpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyaWVzOiBzdHJpbmdbXSA9IEpTT04ucGFyc2UoaSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJpZXMpKSByZXMgPSBlbnRyaWVzO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWZvcm0uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlL3N5c3RlbS9vYmplY3QtZm9ybS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRmllbGRUeXBlIH0gZnJvbSAnLi9zeXN0ZW0uZW51bSc7XG5pbXBvcnQgeyBPYmplY3RUeXBlRmllbGQgfSBmcm9tICcuL3N5c3RlbS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgdHlwZSBPYmplY3RUeXBlRmllbGRUeXBlID0gJ3N0cmluZycgfCAnaW50ZWdlcicgfCAnZGVjaW1hbCcgfCAnYm9vbGVhbicgfCAndGFibGUnIHwgJ2RhdGV0aW1lJztcbmV4cG9ydCB0eXBlIE9iamVjdFR5cGVGaWVsZEludGVybmFsVHlwZSA9XG5PYmplY3RUeXBlRmllbGRUeXBlXG4gIHwgSW50ZXJuYWxGaWVsZFR5cGUuU1RSSU5HX1JFRkVSRU5DRVxuICB8IEludGVybmFsRmllbGRUeXBlLlNUUklOR19PUkdBTklaQVRJT05cbiAgfCBJbnRlcm5hbEZpZWxkVHlwZS5TVFJJTkdfT1JHQU5JWkFUSU9OX1NFVFxuICB8IEludGVybmFsRmllbGRUeXBlLlNUUklOR19DQVRBTE9HXG4gIHwgSW50ZXJuYWxGaWVsZFR5cGUuQk9PTEVBTl9TV0lUQ0hcbiAgfCBJbnRlcm5hbEZpZWxkVHlwZS5TVFJJTkdfRFlOQU1JQ19DQVRBTE9HO1xuXG4vLyBGb3JtIGVsZW1lbnQgb2YgdHlwZSBzdHJpbmdcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUVsZW1lbnRTdHJpbmcgZXh0ZW5kcyBPYmplY3RUeXBlRmllbGQge1xuICBwcm9wZXJ0eVR5cGU6ICdzdHJpbmcnO1xuICBkZWZhdWx0dmFsdWU/OiBzdHJpbmdbXSB8IHN0cmluZztcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIC8vIG51bWJlciBvZiByb3cgdGhlIHRleHQgaW5wdXQgc2hvdWxkIGhhdmUgKGRlZmluZXMgdGhlIHNpemUgb2YgdGhlIGlucHV0L3RleHRhcmVhKVxuICByb3dzPzogbnVtYmVyO1xuICAvLyBpbiBjYXNlIG9mIGEgY2F0YWxvZyBmaWVsZCB0aGlzIHByb3BlcnR5IGhvbGRzIHRoZSBhdmFpbGFibGUgb3B0aW9uc1xuICBvcHRpb25zPzogc3RyaW5nW10gfCBzdHJpbmc7XG4gIHJlZ2V4Pzogc3RyaW5nO1xufVxuXG4vLyBGb3JtIGVsZW1lbnQgb2YgdHlwZSBpbnRlZ2VyXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1FbGVtZW50SW50ZWdlciBleHRlbmRzIE9iamVjdFR5cGVGaWVsZCB7XG4gIHByb3BlcnR5VHlwZTogJ2ludGVnZXInO1xuICBkZWZhdWx0dmFsdWU/OiBudW1iZXJbXSB8IG51bWJlcjtcbiAgLy8gbWluaW11bSB2YWx1ZVxuICBtYXhWYWx1ZT86IG51bWJlcjtcbiAgLy8gbWF4aW11bSB2YWx1ZVxuICBtaW5WYWx1ZT86IG51bWJlcjtcbiAgLy8gT3ZlcmFsbCBhbW91bnQgb2YgZGlnaXRzIGFsbG93ZWQgKGluY2x1ZGluZyBkZWNpbWFsIHBsYWNlcylcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICAvLyBTZXQgdG8gdHJ1ZSB0byBncm91cCBudW1iZXIgYnkgY2VydGFpbiBwYXR0ZXJuICguLi4gcHJvdmlkZWQgYnkgdGhlIHBhdHRlcm4gcHJvcGVydHkpXG4gIGdyb3VwaW5nPzogYm9vbGVhbjtcbiAgLy8gVGhlIHBhdHRlcm4gdG8gZ3JvdXAgdGhlIHZhbHVlIGJ5XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG59XG5cbi8vIEZvcm0gZWxlbWVudCBvZiB0eXBlIGRlY2ltYWxcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUVsZW1lbnREZWNpbWFsIGV4dGVuZHMgT2JqZWN0VHlwZUZpZWxkIHtcbiAgcHJvcGVydHlUeXBlOiAnZGVjaW1hbCc7XG4gIGRlZmF1bHR2YWx1ZT86IG51bWJlcltdIHwgbnVtYmVyO1xuICAvLyBtaW5pbXVtIHZhbHVlXG4gIG1heFZhbHVlPzogbnVtYmVyO1xuICAvLyBtYXhpbXVtIHZhbHVlXG4gIG1pblZhbHVlPzogbnVtYmVyO1xuICAvLyBPdmVyYWxsIGFtb3VudCBvZiBkaWdpdHMgYWxsb3dlZCAoaW5jbHVkaW5nIGRlY2ltYWwgcGxhY2VzKVxuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIC8vIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlc1xuICBzY2FsZT86IG51bWJlcjtcbiAgLy8gU2V0IHRvIHRydWUgdG8gZ3JvdXAgbnVtYmVyIGJ5IGNlcnRhaW4gcGF0dGVybiAoLi4uIHByb3ZpZGVkIGJ5IHRoZSBwYXR0ZXJuIHByb3BlcnR5KVxuICBncm91cGluZz86IGJvb2xlYW47XG4gIC8vIFRoZSBwYXR0ZXJuIHRvIGdyb3VwIHRoZSB2YWx1ZSBieVxuICBwYXR0ZXJuPzogc3RyaW5nO1xufVxuXG4vLyBGb3JtIGVsZW1lbnQgb2YgdHlwZSBib29sZWFuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1FbGVtZW50Qm9vbGVhbiBleHRlbmRzIE9iamVjdFR5cGVGaWVsZCB7XG4gIHByb3BlcnR5VHlwZTogJ2Jvb2xlYW4nO1xuICBkZWZhdWx0dmFsdWU/OiBib29sZWFuO1xuICB0cmlzdGF0ZT86IGJvb2xlYW47XG59XG5cbi8vIEZvcm0gZWxlbWVudCBvZiB0eXBlIGRhdGV0aW1lXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1FbGVtZW50RGF0ZXRpbWUgZXh0ZW5kcyBPYmplY3RUeXBlRmllbGQge1xuICBwcm9wZXJ0eVR5cGU6ICdkYXRldGltZSc7XG4gIGRlZmF1bHR2YWx1ZT86IHN0cmluZ1tdIHwgc3RyaW5nO1xuICAvLyBJZiByZXNvbHV0aW9vbiBpcyBzZXQgdG8gJ2RhdGUnIHRpbWUgaXMgbm90IGluY2x1ZGVkXG4gIHJlc29sdXRpb24/OiAnZGF0ZSc7XG59XG5cbi8vIEZvcm0gZWxlbWVudCBvZiB0eXBlIHRhYmxlXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1FbGVtZW50VGFibGUgZXh0ZW5kcyBPYmplY3RUeXBlRmllbGQge1xuICBlbGVtZW50czogT2JqZWN0VHlwZUZpZWxkW107XG4gIHByb3BlcnR5VHlwZTogJ3RhYmxlJztcbn1cbiJdfQ==
|