@solidev/data 0.0.1-dev.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.
Files changed (155) hide show
  1. package/README.md +7 -0
  2. package/esm2020/lib/auth/auth-interceptor.service.mjs +73 -0
  3. package/esm2020/lib/auth/auth.service.mjs +114 -0
  4. package/esm2020/lib/auth/jwt.mjs +21 -0
  5. package/esm2020/lib/data/data-backend.mjs +106 -0
  6. package/esm2020/lib/data/data-collection.mjs +109 -0
  7. package/esm2020/lib/data/data-collection.mock.mjs +39 -0
  8. package/esm2020/lib/data/data-model.mjs +287 -0
  9. package/esm2020/lib/data/data-parameters.mjs +34 -0
  10. package/esm2020/lib/data/data-query.mjs +143 -0
  11. package/esm2020/lib/data/data-query.mock.mjs +46 -0
  12. package/esm2020/lib/data/fields/base.mjs +142 -0
  13. package/esm2020/lib/data/fields/boolean.mjs +38 -0
  14. package/esm2020/lib/data/fields/datetime.mjs +109 -0
  15. package/esm2020/lib/data/fields/index.mjs +7 -0
  16. package/esm2020/lib/data/fields/numbers.mjs +28 -0
  17. package/esm2020/lib/data/fields/primaryfield.mjs +9 -0
  18. package/esm2020/lib/data/fields/relations.mjs +53 -0
  19. package/esm2020/lib/data/fields/stringfields.mjs +71 -0
  20. package/esm2020/lib/dispedit/choice.pipe.mjs +38 -0
  21. package/esm2020/lib/dispedit/dispedit/dispedit.component.mjs +457 -0
  22. package/esm2020/lib/dispedit/dispedit/dispedit.constants.mjs +2 -0
  23. package/esm2020/lib/dispedit/dispedit.module.mjs +60 -0
  24. package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +140 -0
  25. package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +316 -0
  26. package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +43 -0
  27. package/esm2020/lib/messages/message-zone/message-zone.component.mjs +57 -0
  28. package/esm2020/lib/messages/message.service.mjs +151 -0
  29. package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +34 -0
  30. package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +63 -0
  31. package/esm2020/lib/modellist/model-list-fields/model-list-fields.mjs +225 -0
  32. package/esm2020/lib/modellist/model-list-filters/filters/filtertypes.mjs +3 -0
  33. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +104 -0
  34. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +31 -0
  35. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +25 -0
  36. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +40 -0
  37. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +21 -0
  38. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +14 -0
  39. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +21 -0
  40. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +14 -0
  41. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +21 -0
  42. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +14 -0
  43. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +21 -0
  44. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +14 -0
  45. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +44 -0
  46. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +49 -0
  47. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +45 -0
  48. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +26 -0
  49. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +21 -0
  50. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +14 -0
  51. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +40 -0
  52. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +14 -0
  53. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +21 -0
  54. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +14 -0
  55. package/esm2020/lib/modellist/model-list-filters/model-list-filter.mjs +41 -0
  56. package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +48 -0
  57. package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +30 -0
  58. package/esm2020/lib/modellist/model-list-filters/model-list-filters.mjs +80 -0
  59. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +70 -0
  60. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator.mjs +47 -0
  61. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +49 -0
  62. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter.mjs +116 -0
  63. package/esm2020/lib/modellist/model-list.service.mjs +115 -0
  64. package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +142 -0
  65. package/esm2020/lib/routing/routing.mjs +57 -0
  66. package/esm2020/lib/uploader/index.mjs +6 -0
  67. package/esm2020/lib/uploader/interfaces.mjs +8 -0
  68. package/esm2020/lib/uploader/ng-file-drop.directive.mjs +81 -0
  69. package/esm2020/lib/uploader/ng-file-select.directive.mjs +51 -0
  70. package/esm2020/lib/uploader/ngx-uploader.class.mjs +308 -0
  71. package/esm2020/lib/uploader/ngx-uploader.module.mjs +17 -0
  72. package/esm2020/lib/utils/slugify.mjs +16 -0
  73. package/esm2020/lib/utils/tab-memory.service.mjs +71 -0
  74. package/esm2020/public-api.mjs +41 -0
  75. package/esm2020/solidev-data.mjs +5 -0
  76. package/fesm2015/solidev-data.mjs +4791 -0
  77. package/fesm2015/solidev-data.mjs.map +1 -0
  78. package/fesm2020/solidev-data.mjs +4757 -0
  79. package/fesm2020/solidev-data.mjs.map +1 -0
  80. package/index.d.ts +5 -0
  81. package/lib/auth/auth-interceptor.service.d.ts +16 -0
  82. package/lib/auth/auth.service.d.ts +38 -0
  83. package/lib/auth/jwt.d.ts +22 -0
  84. package/lib/data/data-backend.d.ts +47 -0
  85. package/lib/data/data-collection.d.ts +87 -0
  86. package/lib/data/data-collection.mock.d.ts +19 -0
  87. package/lib/data/data-model.d.ts +91 -0
  88. package/lib/data/data-parameters.d.ts +26 -0
  89. package/lib/data/data-query.d.ts +100 -0
  90. package/lib/data/data-query.mock.d.ts +25 -0
  91. package/lib/data/fields/base.d.ts +116 -0
  92. package/lib/data/fields/boolean.d.ts +9 -0
  93. package/lib/data/fields/datetime.d.ts +39 -0
  94. package/lib/data/fields/index.d.ts +6 -0
  95. package/lib/data/fields/numbers.d.ts +31 -0
  96. package/lib/data/fields/primaryfield.d.ts +8 -0
  97. package/lib/data/fields/relations.d.ts +45 -0
  98. package/lib/data/fields/stringfields.d.ts +50 -0
  99. package/lib/dispedit/choice.pipe.d.ts +8 -0
  100. package/lib/dispedit/dispedit/dispedit.component.d.ts +177 -0
  101. package/lib/dispedit/dispedit/dispedit.constants.d.ts +6 -0
  102. package/lib/dispedit/dispedit.module.d.ts +20 -0
  103. package/lib/dispedit/fkselect/fkselect.component.d.ts +43 -0
  104. package/lib/dispedit/m2mselect/m2mselect.component.d.ts +120 -0
  105. package/lib/dispedit/sdelete/sdelete.component.d.ts +26 -0
  106. package/lib/messages/message-zone/message-zone.component.d.ts +14 -0
  107. package/lib/messages/message.service.d.ts +59 -0
  108. package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +15 -0
  109. package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +19 -0
  110. package/lib/modellist/model-list-fields/model-list-fields.d.ts +67 -0
  111. package/lib/modellist/model-list-filters/filters/filtertypes.d.ts +1 -0
  112. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +30 -0
  113. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.d.ts +24 -0
  114. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +10 -0
  115. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.d.ts +15 -0
  116. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +11 -0
  117. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.d.ts +4 -0
  118. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +11 -0
  119. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.d.ts +4 -0
  120. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +11 -0
  121. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.d.ts +4 -0
  122. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +11 -0
  123. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.d.ts +4 -0
  124. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +17 -0
  125. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.d.ts +19 -0
  126. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +17 -0
  127. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +16 -0
  128. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +11 -0
  129. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +4 -0
  130. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +16 -0
  131. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.d.ts +4 -0
  132. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +11 -0
  133. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.d.ts +4 -0
  134. package/lib/modellist/model-list-filters/model-list-filter.d.ts +31 -0
  135. package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +9 -0
  136. package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +13 -0
  137. package/lib/modellist/model-list-filters/model-list-filters.d.ts +15 -0
  138. package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +23 -0
  139. package/lib/modellist/model-list-paginator/model-list-paginator.d.ts +16 -0
  140. package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +22 -0
  141. package/lib/modellist/model-list-sorter/model-list-sorter.d.ts +61 -0
  142. package/lib/modellist/model-list.service.d.ts +79 -0
  143. package/lib/routing/breadcrumb/breadcrumb.component.d.ts +42 -0
  144. package/lib/routing/routing.d.ts +64 -0
  145. package/lib/uploader/index.d.ts +5 -0
  146. package/lib/uploader/interfaces.d.ts +67 -0
  147. package/lib/uploader/ng-file-drop.directive.d.ts +22 -0
  148. package/lib/uploader/ng-file-select.directive.d.ts +19 -0
  149. package/lib/uploader/ngx-uploader.class.d.ts +35 -0
  150. package/lib/uploader/ngx-uploader.module.d.ts +8 -0
  151. package/lib/utils/slugify.d.ts +1 -0
  152. package/lib/utils/tab-memory.service.d.ts +29 -0
  153. package/package.json +32 -0
  154. package/public-api.d.ts +37 -0
  155. package/src/lib/data/README.md +35 -0
@@ -0,0 +1,287 @@
1
+ import { PROPERTY_METADATA_KEY, } from './fields/base';
2
+ import { FormControl, FormGroup } from '@angular/forms';
3
+ import { throwError } from 'rxjs';
4
+ import { tap } from 'rxjs/operators';
5
+ /**
6
+ * Base class for data model.
7
+ *
8
+ * Each class must have a static __name
9
+ * primary field is given with id field.
10
+ *
11
+ * Some methods are provided to be used with a collection, mostly for CRUD operations.
12
+ *
13
+ */
14
+ export class DataModel {
15
+ /**
16
+ * Constructor for data model instance.
17
+ * A matching collection can be provided.
18
+ * ___fields readonly property is also populated from Reflected metadata
19
+ *
20
+ * @param _coll collection used for CRUD, etc..
21
+ */
22
+ constructor(_coll) {
23
+ this._coll = _coll;
24
+ const md = Reflect.getMetadata(PROPERTY_METADATA_KEY, this);
25
+ // istanbul ignore if
26
+ if (!md) {
27
+ // This should never occur as all datamodel have at least id field
28
+ throw new Error('No property metadata found for this object; is there a property in current collection ?');
29
+ }
30
+ // Get all fields from current class and its parents
31
+ const fields = new Map();
32
+ let parent = Object.getPrototypeOf(this);
33
+ while (parent.constructor.name !== 'Object') {
34
+ for (const f of md.keys()) {
35
+ const fieldName = f.split('__')[1];
36
+ if (fields.has(fieldName)) {
37
+ continue;
38
+ }
39
+ if (f.indexOf(parent.constructor.__name + '__') === 0) {
40
+ fields.set(fieldName, md.get(f));
41
+ }
42
+ }
43
+ parent = Object.getPrototypeOf(parent);
44
+ }
45
+ this._F = Object.freeze(fields);
46
+ }
47
+ get _collection() {
48
+ return this._coll;
49
+ }
50
+ set _collection(coll) {
51
+ this._coll = coll;
52
+ }
53
+ /**
54
+ * Loads model data from json.
55
+ * If partial is true, only fields with matching data keys will be loaded
56
+ * @param data
57
+ * @param options
58
+ */
59
+ fromJson(data, { partial, check } = {
60
+ partial: false,
61
+ check: false,
62
+ }) {
63
+ const errors = {};
64
+ let haveError = false;
65
+ for (const f of this.FN) {
66
+ if (!partial || (partial && Object.keys(data).indexOf(f) !== -1)) {
67
+ const ferr = this.setFV(f, this.FM(f).fromJson(data[f]), check);
68
+ if (ferr !== null) {
69
+ errors[f] = ferr;
70
+ haveError = true;
71
+ }
72
+ }
73
+ }
74
+ return haveError ? errors : null;
75
+ }
76
+ toJson(fields) {
77
+ if (fields && !Array.isArray(fields)) {
78
+ fields = [fields];
79
+ }
80
+ const out = {};
81
+ const fl = this.F;
82
+ for (const f of this.FN) {
83
+ const mgr = this.FM(f);
84
+ if (!fields || fields.length === 0) {
85
+ if (mgr.readonly) {
86
+ continue;
87
+ }
88
+ out[f] = fl.get(f).manager.toJson(this.FV(f));
89
+ }
90
+ else {
91
+ if (fields.indexOf(f) !== -1) {
92
+ out[f] = fl.get(f).manager.toJson(this.FV(f));
93
+ }
94
+ }
95
+ }
96
+ return out;
97
+ }
98
+ action(method, name, { body = undefined, update = false, updatePartial = true, updateCheck = false,
99
+ // updateRaise = false,
100
+ params = {}, headers = {}, } = {}) {
101
+ if (this._coll === undefined) {
102
+ return throwError(() => new Error('Missing collection'));
103
+ }
104
+ return this._coll
105
+ .action(this, method, name, {
106
+ body,
107
+ params,
108
+ headers,
109
+ })
110
+ .pipe(tap((result) => {
111
+ if (update) {
112
+ this.fromJson(result, {
113
+ partial: updatePartial,
114
+ check: updateCheck,
115
+ });
116
+ return this;
117
+ }
118
+ return result;
119
+ }));
120
+ }
121
+ /**
122
+ * HashMap of fields metadata (type, name, manager, etc...)
123
+ */
124
+ get F() {
125
+ // istanbul ignore if
126
+ if (!this._F) {
127
+ throw new Error('Invalid data model, fields metadata is missing');
128
+ }
129
+ return this._F;
130
+ }
131
+ // Called on model, returns the manager for a field.
132
+ FM(field) {
133
+ if (this.F.has(field)) {
134
+ return this.F.get(field).manager;
135
+ }
136
+ throw new Error(`${field} not found in ${Object.keys(this.F).join(',')} model ${this}`);
137
+ }
138
+ // Return field value, without typing
139
+ FV(field) {
140
+ return this[field];
141
+ }
142
+ // Return field names iterator
143
+ get FN() {
144
+ return this.F.keys();
145
+ }
146
+ /**
147
+ * Set field value. If check is true, only set value if all validators pass.
148
+ *
149
+ * The validation result is returned.
150
+ *
151
+ * @param field field name
152
+ * @param value field valued
153
+ * @param check default false
154
+ * @return null or ValidationError
155
+ */
156
+ setFV(field, value, check = false) {
157
+ if (check) {
158
+ const fc = new FormControl(value);
159
+ for (const v of this.FM(field).validators) {
160
+ const val = v(fc);
161
+ if (val !== null) {
162
+ console.error(val);
163
+ return val;
164
+ }
165
+ }
166
+ }
167
+ this[field] = value;
168
+ return null;
169
+ }
170
+ FC(field) {
171
+ if (field === undefined) {
172
+ field = Array.from(this.FN).filter((n) => !this.FM(n).readonly);
173
+ }
174
+ if (Array.isArray(field)) {
175
+ const fg = {};
176
+ for (const f of field) {
177
+ fg[f] = this.FC(f);
178
+ }
179
+ return new FormGroup(fg);
180
+ }
181
+ return this.FM(field).formControl(this);
182
+ }
183
+ save({ updateModel = true } = {
184
+ updateModel: true,
185
+ }) {
186
+ if (this._coll) {
187
+ return this._coll.save(this, { updateModel });
188
+ }
189
+ return throwError(() => new Error('Missing collection'));
190
+ }
191
+ update(fields = [], { updateModel = true } = {
192
+ updateModel: true,
193
+ }) {
194
+ if (this._coll) {
195
+ return this._coll.update(this, fields, { updateModel });
196
+ }
197
+ return throwError(() => new Error('Missing collection'));
198
+ }
199
+ }
200
+ /**
201
+ * data model name
202
+ * this need to be given because class name is not fully available because of minification.
203
+ */
204
+ DataModel.__name = '';
205
+ //
206
+ // export class TreeDataModel extends DataModel {
207
+ // static override __name = 'TreeDataModel';
208
+ // @detailsField({
209
+ // model: this,
210
+ // many: true,
211
+ // description: 'Parents',
212
+ // })
213
+ // public parents_details?: this[];
214
+ //
215
+ // @foreignKeyField({
216
+ // required: false,
217
+ // description: 'Structure parente',
218
+ // related: 'Structure',
219
+ // })
220
+ // public parent?: number;
221
+ //
222
+ // @integerField({
223
+ // required: false,
224
+ // readonly: true,
225
+ // description: 'ID Tree',
226
+ // })
227
+ // public tree_id!: number;
228
+ //
229
+ // @integerField({
230
+ // required: false,
231
+ // readonly: true,
232
+ // description: 'MPTT left',
233
+ // })
234
+ // public lft!: number;
235
+ //
236
+ // @integerField({
237
+ // required: false,
238
+ // readonly: true,
239
+ // description: 'MPTT right',
240
+ // })
241
+ // public rght!: number;
242
+ //
243
+ // @integerField({
244
+ // required: false,
245
+ // readonly: true,
246
+ // description: 'Niveau hiérarchique',
247
+ // })
248
+ // public level!: number;
249
+ //
250
+ // public get parent_details(): this | null {
251
+ // if (this.parents_details) {
252
+ // const out = this.parents_details[this.parents_details.length - 1];
253
+ // out.parents_details = this.parents_details.slice(
254
+ // 0,
255
+ // this.parents_details.length - 1
256
+ // );
257
+ // return out;
258
+ // }
259
+ // return null;
260
+ // }
261
+ //
262
+ // public set parent_details(d: this | null) {
263
+ // console.log(d);
264
+ // this.parents_details = d?.parents_details;
265
+ // }
266
+ //
267
+ // public _display(): string {
268
+ // const out: string[] = [];
269
+ // if (this.parents_details) {
270
+ // for (const p of this.parents_details) {
271
+ // if ((p as any).code) {
272
+ // out.push(`[${(p as any).code}] ${(p as any).name}`);
273
+ // } else {
274
+ // out.push((p as any).name);
275
+ // }
276
+ // }
277
+ // }
278
+ // if ((this as any).code) {
279
+ // out.push(`[${(this as any).code}] ${(this as any).name}`);
280
+ // } else {
281
+ // out.push((this as any).name);
282
+ // }
283
+ //
284
+ // return out.join(' : ');
285
+ // }
286
+ // }
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kYXRhL2RhdGEtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHFCQUFxQixHQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBaUJwQjs7Ozs7O09BTUc7SUFDSCxZQUFzQixLQUF1QjtRQUF2QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUMzQyxNQUFNLEVBQUUsR0FDTixPQUFPLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1Asa0VBQWtFO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQ2IseUZBQXlGLENBQzFGLENBQUM7U0FDSDtRQUNELG9EQUFvRDtRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLE1BQU0sQ0FBQyxH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WCxvQkFBb0I7QUFDcEIsUUFBUTtBQUNSLG1CQUFtQjtBQUNuQixNQUFNO0FBQ04sRUFBRTtBQUNGLGdEQUFnRDtBQUNoRCxzQkFBc0I7QUFDdEIsaURBQWlEO0FBQ2pELE1BQU07QUFDTixFQUFFO0FBQ0YsZ0NBQWdDO0FBQ2hDLGdDQUFnQztBQUNoQyxrQ0FBa0M7QUFDbEMsZ0RBQWdEO0FBQ2hELGlDQUFpQztBQUNqQyxpRUFBaUU7QUFDakUsbUJBQW1CO0FBQ25CLHVDQUF1QztBQUN2QyxZQUFZO0FBQ1osVUFBVTtBQUNWLFFBQVE7QUFDUixnQ0FBZ0M7QUFDaEMsbUVBQW1FO0FBQ25FLGVBQWU7QUFDZixzQ0FBc0M7QUFDdEMsUUFBUTtBQUNSLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsTUFBTTtBQUNOLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlRmllbGRNYW5hZ2VyLFxuICBJRmllbGRTdG9yZWRNZXRhZGF0YSxcbiAgUFJPUEVSVFlfTUVUQURBVEFfS0VZLFxufSBmcm9tICcuL2ZpZWxkcy9iYXNlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi9kYXRhLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgdHlwZSBEYXRhTW9kZWxGaWVsZHMgPSBSZWFkb25seTxNYXA8c3RyaW5nLCBJRmllbGRTdG9yZWRNZXRhZGF0YTxhbnk+Pj47XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgZGF0YSBtb2RlbC5cbiAqXG4gKiBFYWNoIGNsYXNzIG11c3QgaGF2ZSBhIHN0YXRpYyBfX25hbWVcbiAqIHByaW1hcnkgZmllbGQgaXMgZ2l2ZW4gd2l0aCBpZCBmaWVsZC5cbiAqXG4gKiBTb21lIG1ldGhvZHMgYXJlIHByb3ZpZGVkIHRvIGJlIHVzZWQgd2l0aCBhIGNvbGxlY3Rpb24sIG1vc3RseSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFNb2RlbCB7XG4gIC8qKlxuICAgKiBkYXRhIG1vZGVsIG5hbWVcbiAgICogdGhpcyBuZWVkIHRvIGJlIGdpdmVuIGJlY2F1c2UgY2xhc3MgbmFtZSBpcyBub3QgZnVsbHkgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgbWluaWZpY2F0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBfX25hbWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBQcmltYXJ5IGZpZWxkOyByZWFkb25seTsgbXVzdCBiZSBjcmVhdGVkIGFuZCBhdXRvIGluY3JlbWVudGVkIG9uIGRiIHNpZGUuXG4gICAqL1xuICAvLyBAcHJpbWFyeUZpZWxkKHtcbiAgLy8gICBkZXNjcmlwdGlvbjogJ0lEJyxcbiAgLy8gICBoZWxwOiAnSWRlbnRpZmlhbnQgcHJpbWFpcmUnLFxuICAvLyB9KVxuICBwdWJsaWMgaWQhOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX0Y6IERhdGFNb2RlbEZpZWxkcztcblxuICAvKipcbiAgICogQ29uc3RydWN0b3IgZm9yIGRhdGEgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEEgbWF0Y2hpbmcgY29sbGVjdGlvbiBjYW4gYmUgcHJvdmlkZWQuXG4gICAqIF9fX2ZpZWxkcyByZWFkb25seSBwcm9wZXJ0eSBpcyBhbHNvIHBvcHVsYXRlZCBmcm9tIFJlZmxlY3RlZCBtZXRhZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gX2NvbGwgY29sbGVjdGlvbiB1c2VkIGZvciBDUlVELCBldGMuLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jb2xsPzogQ29sbGVjdGlvbjxhbnk+KSB7XG4gICAgY29uc3QgbWQ6IE1hcDxzdHJpbmcsIElGaWVsZFN0b3JlZE1ldGFkYXRhPGFueT4+IHwgdW5kZWZpbmVkID1cbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoUFJPUEVSVFlfTUVUQURBVEFfS0VZLCB0aGlzKTtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgICBpZiAoIW1kKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciBhcyBhbGwgZGF0YW1vZGVsIGhhdmUgYXQgbGVhc3QgaWQgZmllbGRcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ05vIHByb3BlcnR5IG1ldGFkYXRhIGZvdW5kIGZvciB0aGlzIG9iamVjdDsgaXMgdGhlcmUgYSBwcm9wZXJ0eSBpbiBjdXJyZW50IGNvbGxlY3Rpb24gPydcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEdldCBhbGwgZmllbGRzIGZyb20gY3VycmVudCBjbGFzcyBhbmQgaXRzIHBhcmVudHNcbiAgICBjb25zdCBmaWVsZHMgPSBuZXcgTWFwPHN0cmluZywgSUZpZWxkU3RvcmVkTWV0YWRhdGE8YW55Pj4oKTtcbiAgICBsZXQgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO1xuICAgIHdoaWxlIChwYXJlbnQuY29uc3RydWN0b3IubmFtZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBtZC5rZXlzKCkpIHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gZi5zcGxpdCgnX18nKVsxXTtcbiAgICAgICAgaWYgKGZpZWxkcy5oYXMoZmllbGROYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmLmluZGV4T2YocGFyZW50LmNvbnN0cnVjdG9yLl9fbmFtZSArICdfXycpID09PSAwKSB7XG4gICAgICAgICAgZmllbGRzLnNldChmaWVsZE5hbWUsIG1kLmdldChmKSEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICB9XG4gICAgdGhpcy5fRiA9IE9iamVjdC5mcmVlemUoZmllbGRzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgX2NvbGxlY3Rpb24oKTogQ29sbGVjdGlvbjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sbCBhcyBDb2xsZWN0aW9uPGFueT47XG4gIH1cblxuICBwdWJsaWMgc2V0IF9jb2xsZWN0aW9uKGNvbGw6IENvbGxlY3Rpb248YW55Pikge1xuICAgIHRoaXMuX2NvbGwgPSBjb2xsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIG1vZGVsIGRhdGEgZnJvbSBqc29uLlxuICAgKiBJZiBwYXJ0aWFsIGlzIHRydWUsIG9ubHkgZmllbGRzIHdpdGggbWF0Y2hpbmcgZGF0YSBrZXlzIHdpbGwgYmUgbG9hZGVkXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgZnJvbUpzb24oXG4gICAgZGF0YTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9LFxuICAgIHsgcGFydGlhbCwgY2hlY2sgfTogeyBwYXJ0aWFsPzogYm9vbGVhbjsgY2hlY2s/OiBib29sZWFuIH0gPSB7XG4gICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgIGNoZWNrOiBmYWxzZSxcbiAgICB9XG4gICk6IG51bGwgfCBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBjb25zdCBlcnJvcnM6IHsgW2luZGV4OiBzdHJpbmddOiBudWxsIHwgVmFsaWRhdGlvbkVycm9ycyB9ID0ge307XG4gICAgbGV0IGhhdmVFcnJvciA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLkZOKSB7XG4gICAgICBpZiAoIXBhcnRpYWwgfHwgKHBhcnRpYWwgJiYgT2JqZWN0LmtleXMoZGF0YSkuaW5kZXhPZihmKSAhPT0gLTEpKSB7XG4gICAgICAgIGNvbnN0IGZlcnIgPSB0aGlzLnNldEZWKGYsIHRoaXMuRk0oZikuZnJvbUpzb24oZGF0YVtmXSksIGNoZWNrKTtcbiAgICAgICAgaWYgKGZlcnIgIT09IG51bGwpIHtcbiAgICAgICAgICBlcnJvcnNbZl0gPSBmZXJyO1xuICAgICAgICAgIGhhdmVFcnJvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhdmVFcnJvciA/IGVycm9ycyA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uKGZpZWxkcz86IHN0cmluZyB8IHN0cmluZ1tdKTogYW55IHtcbiAgICBpZiAoZmllbGRzICYmICFBcnJheS5pc0FycmF5KGZpZWxkcykpIHtcbiAgICAgIGZpZWxkcyA9IFtmaWVsZHNdO1xuICAgIH1cbiAgICBjb25zdCBvdXQ6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGNvbnN0IGZsID0gdGhpcy5GO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLkZOKSB7XG4gICAgICBjb25zdCBtZ3IgPSB0aGlzLkZNKGYpO1xuICAgICAgaWYgKCFmaWVsZHMgfHwgZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAobWdyLnJlYWRvbmx5KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgb3V0W2ZdID0gZmwuZ2V0KGYpIS5tYW5hZ2VyLnRvSnNvbih0aGlzLkZWKGYpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaWVsZHMuaW5kZXhPZihmKSAhPT0gLTEpIHtcbiAgICAgICAgICBvdXRbZl0gPSBmbC5nZXQoZikhLm1hbmFnZXIudG9Kc29uKHRoaXMuRlYoZikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBwdWJsaWMgYWN0aW9uPFQsIFJUPihcbiAgICBtZXRob2Q6ICdQT1NUJyB8ICdQQVRDSCcgfCAnR0VUJyB8ICdERUxFVEUnIHwgJ1BVVCcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHtcbiAgICAgIGJvZHkgPSB1bmRlZmluZWQsXG4gICAgICB1cGRhdGUgPSBmYWxzZSxcbiAgICAgIHVwZGF0ZVBhcnRpYWwgPSB0cnVlLFxuICAgICAgdXBkYXRlQ2hlY2sgPSBmYWxzZSxcbiAgICAgIC8vIHVwZGF0ZVJhaXNlID0gZmFsc2UsXG4gICAgICBwYXJhbXMgPSB7fSxcbiAgICAgIGhlYWRlcnMgPSB7fSxcbiAgICB9OiB7XG4gICAgICBib2R5PzogeyBbX2luZGV4OiBzdHJpbmddOiBhbnkgfTtcbiAgICAgIHVwZGF0ZT86IGJvb2xlYW47XG4gICAgICB1cGRhdGVQYXJ0aWFsPzogYm9vbGVhbjtcbiAgICAgIHVwZGF0ZUNoZWNrPzogYm9vbGVhbjtcbiAgICAgIC8vIHVwZGF0ZVJhaXNlPzogYm9vbGVhbjtcbiAgICAgIHBhcmFtcz86IHsgW19pbmRleDogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgICBoZWFkZXJzPzogeyBbX2luZGV4OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSVD4ge1xuICAgIGlmICh0aGlzLl9jb2xsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTWlzc2luZyBjb2xsZWN0aW9uJykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29sbFxuICAgICAgLmFjdGlvbjxSVD4odGhpcywgbWV0aG9kLCBuYW1lLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZyb21Kc29uKHJlc3VsdCwge1xuICAgICAgICAgICAgICBwYXJ0aWFsOiB1cGRhdGVQYXJ0aWFsLFxuICAgICAgICAgICAgICBjaGVjazogdXBkYXRlQ2hlY2ssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgSGFzaE1hcCBvZiBmaWVsZHMgbWV0YWRhdGEgKHR5cGUsIG5hbWUsIG1hbmFnZXIsIGV0Yy4uLilcbiAgICovXG4gIHB1YmxpYyBnZXQgRigpOiBEYXRhTW9kZWxGaWVsZHMge1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICAgIGlmICghdGhpcy5fRikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEgbW9kZWwsIGZpZWxkcyBtZXRhZGF0YSBpcyBtaXNzaW5nJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9GO1xuICB9XG5cbiAgLy8gQ2FsbGVkIG9uIG1vZGVsLCByZXR1cm5zIHRoZSBtYW5hZ2VyIGZvciBhIGZpZWxkLlxuICBwdWJsaWMgRk08RlQ+KGZpZWxkOiBzdHJpbmcpOiBCYXNlRmllbGRNYW5hZ2VyPEZUPiB7XG4gICAgaWYgKHRoaXMuRi5oYXMoZmllbGQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5GLmdldChmaWVsZCkhLm1hbmFnZXI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2ZpZWxkfSBub3QgZm91bmQgaW4gJHtPYmplY3Qua2V5cyh0aGlzLkYpLmpvaW4oJywnKX0gbW9kZWwgJHt0aGlzfWBcbiAgICApO1xuICB9XG5cbiAgLy8gUmV0dXJuIGZpZWxkIHZhbHVlLCB3aXRob3V0IHR5cGluZ1xuICBwdWJsaWMgRlY8RlQ+KGZpZWxkOiBzdHJpbmcpOiBGVCB7XG4gICAgcmV0dXJuICh0aGlzIGFzIGFueSlbZmllbGRdIGFzIEZUO1xuICB9XG5cbiAgLy8gUmV0dXJuIGZpZWxkIG5hbWVzIGl0ZXJhdG9yXG4gIHB1YmxpYyBnZXQgRk4oKTogSXRlcmFibGVJdGVyYXRvcjxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5GLmtleXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZmllbGQgdmFsdWUuIElmIGNoZWNrIGlzIHRydWUsIG9ubHkgc2V0IHZhbHVlIGlmIGFsbCB2YWxpZGF0b3JzIHBhc3MuXG4gICAqXG4gICAqIFRoZSB2YWxpZGF0aW9uIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIGZpZWxkIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlIGZpZWxkIHZhbHVlZFxuICAgKiBAcGFyYW0gY2hlY2sgZGVmYXVsdCBmYWxzZVxuICAgKiBAcmV0dXJuIG51bGwgb3IgVmFsaWRhdGlvbkVycm9yXG4gICAqL1xuICBwdWJsaWMgc2V0RlY8RlQ+KFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6IEZULFxuICAgIGNoZWNrOiBib29sZWFuID0gZmFsc2VcbiAgKTogbnVsbCB8IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmIChjaGVjaykge1xuICAgICAgY29uc3QgZmMgPSBuZXcgRm9ybUNvbnRyb2wodmFsdWUpO1xuXG4gICAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy5GTShmaWVsZCkudmFsaWRhdG9ycykge1xuICAgICAgICBjb25zdCB2YWwgPSB2KGZjKTtcbiAgICAgICAgaWYgKHZhbCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IodmFsKTtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgICh0aGlzIGFzIGFueSlbZmllbGRdID0gdmFsdWU7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDYWxsZWQgb24gbW9kZWwgd2l0aCBhIGxpc3Qgb2YgZmllbGRzLCByZXR1cm5zIGEgRm9ybUdyb3VwIHdpdGhcbiAgLy8gdGhlc2UgZmllbGRzLCBvciBvbmx5IHRoZSBmb3JtIGNvbnRyb2wgZm9yIG9uZSBmaWVsZC5cbiAgcHVibGljIEZDKCk6IEZvcm1Hcm91cDtcbiAgcHVibGljIEZDKGZpZWxkOiBzdHJpbmcpOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIEZDKGZpZWxkOiBzdHJpbmdbXSk6IEZvcm1Hcm91cDtcbiAgcHVibGljIEZDKGZpZWxkPzogc3RyaW5nIHwgc3RyaW5nW10pOiBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpZWxkID0gQXJyYXkuZnJvbSh0aGlzLkZOKS5maWx0ZXIoKG4pID0+ICF0aGlzLkZNKG4pLnJlYWRvbmx5KTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQpKSB7XG4gICAgICBjb25zdCBmZzogeyBbaW5kZXg6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmaWVsZCkge1xuICAgICAgICBmZ1tmXSA9IHRoaXMuRkMoZikgYXMgRm9ybUNvbnRyb2w7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChmZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLkZNKGZpZWxkKS5mb3JtQ29udHJvbCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlKFxuICAgIHsgdXBkYXRlTW9kZWwgPSB0cnVlIH06IHsgdXBkYXRlTW9kZWw/OiBib29sZWFuIH0gPSB7XG4gICAgICB1cGRhdGVNb2RlbDogdHJ1ZSxcbiAgICB9XG4gICk6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgIGlmICh0aGlzLl9jb2xsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29sbC5zYXZlKHRoaXMsIHsgdXBkYXRlTW9kZWwgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTWlzc2luZyBjb2xsZWN0aW9uJykpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZShcbiAgICBmaWVsZHM6IHN0cmluZ1tdID0gW10sXG4gICAgeyB1cGRhdGVNb2RlbCA9IHRydWUgfTogeyB1cGRhdGVNb2RlbD86IGJvb2xlYW4gfSA9IHtcbiAgICAgIHVwZGF0ZU1vZGVsOiB0cnVlLFxuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgaWYgKHRoaXMuX2NvbGwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb2xsLnVwZGF0ZSh0aGlzLCBmaWVsZHMsIHsgdXBkYXRlTW9kZWwgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTWlzc2luZyBjb2xsZWN0aW9uJykpO1xuICB9XG59XG5cbi8vXG4vLyBleHBvcnQgY2xhc3MgVHJlZURhdGFNb2RlbCBleHRlbmRzIERhdGFNb2RlbCB7XG4vLyAgIHN0YXRpYyBvdmVycmlkZSBfX25hbWUgPSAnVHJlZURhdGFNb2RlbCc7XG4vLyAgIEBkZXRhaWxzRmllbGQoe1xuLy8gICAgIG1vZGVsOiB0aGlzLFxuLy8gICAgIG1hbnk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdQYXJlbnRzJyxcbi8vICAgfSlcbi8vICAgcHVibGljIHBhcmVudHNfZGV0YWlscz86IHRoaXNbXTtcbi8vXG4vLyAgIEBmb3JlaWduS2V5RmllbGQoe1xuLy8gICAgIHJlcXVpcmVkOiBmYWxzZSxcbi8vICAgICBkZXNjcmlwdGlvbjogJ1N0cnVjdHVyZSBwYXJlbnRlJyxcbi8vICAgICByZWxhdGVkOiAnU3RydWN0dXJlJyxcbi8vICAgfSlcbi8vICAgcHVibGljIHBhcmVudD86IG51bWJlcjtcbi8vXG4vLyAgIEBpbnRlZ2VyRmllbGQoe1xuLy8gICAgIHJlcXVpcmVkOiBmYWxzZSxcbi8vICAgICByZWFkb25seTogdHJ1ZSxcbi8vICAgICBkZXNjcmlwdGlvbjogJ0lEIFRyZWUnLFxuLy8gICB9KVxuLy8gICBwdWJsaWMgdHJlZV9pZCE6IG51bWJlcjtcbi8vXG4vLyAgIEBpbnRlZ2VyRmllbGQoe1xuLy8gICAgIHJlcXVpcmVkOiBmYWxzZSxcbi8vICAgICByZWFkb25seTogdHJ1ZSxcbi8vICAgICBkZXNjcmlwdGlvbjogJ01QVFQgbGVmdCcsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyBsZnQhOiBudW1iZXI7XG4vL1xuLy8gICBAaW50ZWdlckZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgcmVhZG9ubHk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdNUFRUIHJpZ2h0Jyxcbi8vICAgfSlcbi8vICAgcHVibGljIHJnaHQhOiBudW1iZXI7XG4vL1xuLy8gICBAaW50ZWdlckZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgcmVhZG9ubHk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdOaXZlYXUgaGnDqXJhcmNoaXF1ZScsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyBsZXZlbCE6IG51bWJlcjtcbi8vXG4vLyAgIHB1YmxpYyBnZXQgcGFyZW50X2RldGFpbHMoKTogdGhpcyB8IG51bGwge1xuLy8gICAgIGlmICh0aGlzLnBhcmVudHNfZGV0YWlscykge1xuLy8gICAgICAgY29uc3Qgb3V0ID0gdGhpcy5wYXJlbnRzX2RldGFpbHNbdGhpcy5wYXJlbnRzX2RldGFpbHMubGVuZ3RoIC0gMV07XG4vLyAgICAgICBvdXQucGFyZW50c19kZXRhaWxzID0gdGhpcy5wYXJlbnRzX2RldGFpbHMuc2xpY2UoXG4vLyAgICAgICAgIDAsXG4vLyAgICAgICAgIHRoaXMucGFyZW50c19kZXRhaWxzLmxlbmd0aCAtIDFcbi8vICAgICAgICk7XG4vLyAgICAgICByZXR1cm4gb3V0O1xuLy8gICAgIH1cbi8vICAgICByZXR1cm4gbnVsbDtcbi8vICAgfVxuLy9cbi8vICAgcHVibGljIHNldCBwYXJlbnRfZGV0YWlscyhkOiB0aGlzIHwgbnVsbCkge1xuLy8gICAgIGNvbnNvbGUubG9nKGQpO1xuLy8gICAgIHRoaXMucGFyZW50c19kZXRhaWxzID0gZD8ucGFyZW50c19kZXRhaWxzO1xuLy8gICB9XG4vL1xuLy8gICBwdWJsaWMgX2Rpc3BsYXkoKTogc3RyaW5nIHtcbi8vICAgICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW107XG4vLyAgICAgaWYgKHRoaXMucGFyZW50c19kZXRhaWxzKSB7XG4vLyAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5wYXJlbnRzX2RldGFpbHMpIHtcbi8vICAgICAgICAgaWYgKChwIGFzIGFueSkuY29kZSkge1xuLy8gICAgICAgICAgIG91dC5wdXNoKGBbJHsocCBhcyBhbnkpLmNvZGV9XSAkeyhwIGFzIGFueSkubmFtZX1gKTtcbi8vICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICBvdXQucHVzaCgocCBhcyBhbnkpLm5hbWUpO1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGlmICgodGhpcyBhcyBhbnkpLmNvZGUpIHtcbi8vICAgICAgIG91dC5wdXNoKGBbJHsodGhpcyBhcyBhbnkpLmNvZGV9XSAkeyh0aGlzIGFzIGFueSkubmFtZX1gKTtcbi8vICAgICB9IGVsc2Uge1xuLy8gICAgICAgb3V0LnB1c2goKHRoaXMgYXMgYW55KS5uYW1lKTtcbi8vICAgICB9XG4vL1xuLy8gICAgIHJldHVybiBvdXQuam9pbignIDogJyk7XG4vLyAgIH1cbi8vIH1cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ /**
3
+ * DATA_API_URL: stores data api base url
4
+ */
5
+ export const DATA_API_URL = new InjectionToken("data.api.url");
6
+ /**
7
+ * DATA_MAX_TRANSFERSTATE_TIME: max duration to use transferstate time
8
+ * If DATA_MAX_TRANSFERSTATE_TIME is zero, TransferState is not used
9
+ */
10
+ export const DATA_MAX_TRANSFERSTATE_TIME = new InjectionToken("data.max.transfer.state");
11
+ export const BootstrapDataDisplayConfig = {
12
+ dispEdit: {
13
+ defaultMode: "dd",
14
+ inputClasses: {
15
+ "input.text": "form-control",
16
+ "input.email": "form-control",
17
+ "input.datetime": "form-control",
18
+ "input.date": "form-control",
19
+ "input.number": "form-control",
20
+ "input.decimal": "form-control",
21
+ "input.checkbox": "form-control",
22
+ "input.password": "form-control",
23
+ "textarea": "form-control",
24
+ "quill": "",
25
+ "fkselect": "form-control",
26
+ "select": "form-select"
27
+ },
28
+ }
29
+ };
30
+ /**
31
+ * DATA_DISPLAY_CONFIG: display config & default classes injection token
32
+ */
33
+ export const DATA_DISPLAY_CONFIG = new InjectionToken("data.display.config");
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wYXJhbWV0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL2RhdGEvZGF0YS1wYXJhbWV0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQVMsY0FBYyxDQUFDLENBQUM7QUFDdkU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQVMseUJBQXlCLENBQUMsQ0FBQztBQVlqRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBc0I7SUFDM0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUk7UUFDakIsWUFBWSxFQUFFO1lBQ1osWUFBWSxFQUFFLGNBQWM7WUFDNUIsYUFBYSxFQUFFLGNBQWM7WUFDN0IsZ0JBQWdCLEVBQUUsY0FBYztZQUNoQyxZQUFZLEVBQUUsY0FBYztZQUM1QixjQUFjLEVBQUUsY0FBYztZQUM5QixlQUFlLEVBQUUsY0FBYztZQUMvQixnQkFBZ0IsRUFBRSxjQUFjO1lBQ2hDLGdCQUFnQixFQUFDLGNBQWM7WUFDL0IsVUFBVSxFQUFFLGNBQWM7WUFDMUIsT0FBTyxFQUFFLEVBQUU7WUFDWCxVQUFVLEVBQUUsY0FBYztZQUMxQixRQUFRLEVBQUUsYUFBYTtTQUN4QjtLQUNGO0NBQ0YsQ0FBQztBQUdGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQW9CLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIERBVEFfQVBJX1VSTDogc3RvcmVzIGRhdGEgYXBpIGJhc2UgdXJsXG4gKi9cbmV4cG9ydCBjb25zdCBEQVRBX0FQSV9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImRhdGEuYXBpLnVybFwiKTtcbi8qKlxuICogREFUQV9NQVhfVFJBTlNGRVJTVEFURV9USU1FOiBtYXggZHVyYXRpb24gdG8gdXNlIHRyYW5zZmVyc3RhdGUgdGltZVxuICogSWYgREFUQV9NQVhfVFJBTlNGRVJTVEFURV9USU1FIGlzIHplcm8sIFRyYW5zZmVyU3RhdGUgaXMgbm90IHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IERBVEFfTUFYX1RSQU5TRkVSU1RBVEVfVElNRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxudW1iZXI+KFwiZGF0YS5tYXgudHJhbnNmZXIuc3RhdGVcIik7XG5cbi8qKlxuICogRGF0YURpc3BsYXlDb25maWcgaW50ZXJmYWNlIHByb3ZpZGVzIGRlZmF1bHQgdmFsdWVzIGZvciBkaXNwbGF5IGNsYXNzZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhRGlzcGxheUNvbmZpZyB7XG4gIGRpc3BFZGl0OiB7XG4gICAgZGVmYXVsdE1vZGU6IFwiaW5saW5lXCIgfCBcImRkXCI7XG4gICAgaW5wdXRDbGFzc2VzOiB7W2luZGV4OiBzdHJpbmddOiBzdHJpbmd9O1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgQm9vdHN0cmFwRGF0YURpc3BsYXlDb25maWc6IERhdGFEaXNwbGF5Q29uZmlnID0ge1xuICBkaXNwRWRpdDoge1xuICAgIGRlZmF1bHRNb2RlOiBcImRkXCIsXG4gICAgaW5wdXRDbGFzc2VzOiB7XG4gICAgICBcImlucHV0LnRleHRcIjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIFwiaW5wdXQuZW1haWxcIjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIFwiaW5wdXQuZGF0ZXRpbWVcIjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIFwiaW5wdXQuZGF0ZVwiOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgXCJpbnB1dC5udW1iZXJcIjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIFwiaW5wdXQuZGVjaW1hbFwiOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgXCJpbnB1dC5jaGVja2JveFwiOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgXCJpbnB1dC5wYXNzd29yZFwiOlwiZm9ybS1jb250cm9sXCIsXG4gICAgICBcInRleHRhcmVhXCI6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICBcInF1aWxsXCI6IFwiXCIsXG4gICAgICBcImZrc2VsZWN0XCI6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICBcInNlbGVjdFwiOiBcImZvcm0tc2VsZWN0XCJcbiAgICB9LFxuICB9XG59O1xuXG5cbi8qKlxuICogREFUQV9ESVNQTEFZX0NPTkZJRzogZGlzcGxheSBjb25maWcgJiBkZWZhdWx0IGNsYXNzZXMgaW5qZWN0aW9uIHRva2VuXG4gKi9cbmV4cG9ydCBjb25zdCBEQVRBX0RJU1BMQVlfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPERhdGFEaXNwbGF5Q29uZmlnPihcImRhdGEuZGlzcGxheS5jb25maWdcIik7XG4iXX0=
@@ -0,0 +1,143 @@
1
+ import { combineLatest, ReplaySubject } from 'rxjs';
2
+ import { switchMap } from 'rxjs/operators';
3
+ export class Queryset {
4
+ constructor(_coll, options = {}) {
5
+ this._coll = _coll;
6
+ /** Current filter data */
7
+ this.filterData = {};
8
+ /** Current sorter data */
9
+ this.sortData = [];
10
+ /** Current fields */
11
+ this.fields = [];
12
+ /** Current page size */
13
+ this.pageSize = 500;
14
+ /** Current page number */
15
+ this.page = 1;
16
+ this._pristine = true;
17
+ this._loading = new ReplaySubject(1);
18
+ this._meta = new ReplaySubject(1);
19
+ this._results = new ReplaySubject(1);
20
+ /** Default options */
21
+ this.options = { emitFields: true };
22
+ Object.assign(this.options, options);
23
+ }
24
+ /** Pristine status (true if it has not collected results yet) */
25
+ get pristine() {
26
+ return this._pristine;
27
+ }
28
+ /** Loading status (true if currently fetching data) */
29
+ get loading() {
30
+ return this._loading.asObservable();
31
+ }
32
+ /** Results meta part observable */
33
+ get meta() {
34
+ return this._meta.asObservable();
35
+ }
36
+ /** Results data part observable */
37
+ get results() {
38
+ return this._results.asObservable();
39
+ }
40
+ /** Full results observable (results, loading, meta) */
41
+ get full() {
42
+ return combineLatest([this.results, this.loading, this.meta]);
43
+ }
44
+ /**
45
+ * Update current filter data. Null or undefined values are removed from filter data.
46
+ * @param params filter data
47
+ * @param update boolean to update filter data instead of recreating it from scratch
48
+ */
49
+ filter(params = {}, update = false) {
50
+ if (!update) {
51
+ this.filterData = {};
52
+ }
53
+ for (const k of Object.keys(params)) {
54
+ if (params[k] === undefined || params[k] === null) {
55
+ delete this.filterData[k];
56
+ }
57
+ else {
58
+ this.filterData[k] = params[k];
59
+ }
60
+ }
61
+ return this;
62
+ }
63
+ /**
64
+ * Update sorting parameters, list of strings giving sort parameters e.g. sort("+name", "-id").
65
+ * @param sorting strings of sort parameters
66
+ */
67
+ sort(...sorting) {
68
+ this.sortData = sorting;
69
+ return this;
70
+ }
71
+ /**
72
+ * Update page size.
73
+ * @param pageSize required page size
74
+ */
75
+ paginateBy(pageSize = 20) {
76
+ this.pageSize = pageSize;
77
+ return this;
78
+ }
79
+ /**
80
+ * Update current page number.
81
+ * @param page required pqge
82
+ * @param fragment TODO: fragment usage for router usage
83
+ */
84
+ setPage(page = 1, fragment) {
85
+ if (page !== this.page) {
86
+ this.page = page;
87
+ // if (this.options.router) {
88
+ // // TODO: check and fix usage of fragment/query params
89
+ // const frag = fragment
90
+ // ? fragment
91
+ // : this.options.hash || this.options.name;
92
+ // const _ = this.options.router.navigate([], {
93
+ // queryParams: { page: page.toString() },
94
+ // fragment: frag,
95
+ // queryParamsHandling: 'merge',
96
+ // });
97
+ // }
98
+ }
99
+ return this;
100
+ }
101
+ setFields(fields) {
102
+ this.fields = fields;
103
+ return this;
104
+ }
105
+ getQueryParams() {
106
+ const f = {};
107
+ Object.assign(f, this.filterData);
108
+ if (this.sortData.length) {
109
+ f['ordering'] = this.sortData.join(',');
110
+ }
111
+ f['page_size'] = this.pageSize;
112
+ f['page'] = this.page;
113
+ if (this.options.emitFields && this.fields.length) {
114
+ f['fields'] = this.fields.join(',');
115
+ }
116
+ return f;
117
+ }
118
+ get(refresh = true) {
119
+ if (!refresh && !this._pristine) {
120
+ return this.results;
121
+ }
122
+ this._loading.next(true);
123
+ return this._coll
124
+ .raw({
125
+ method: 'GET',
126
+ params: this.getQueryParams(),
127
+ })
128
+ .pipe(switchMap((result) => {
129
+ // Process results
130
+ this._meta.next({ nav: result.nav, parameters: result.parameters });
131
+ const out = [];
132
+ for (const r of result.results) {
133
+ const m = this._coll.fromJson(r);
134
+ out.push(m);
135
+ }
136
+ this._pristine = false;
137
+ this._loading.next(false);
138
+ this._results.next(out);
139
+ return this.results;
140
+ }));
141
+ }
142
+ }
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kYXRhL2RhdGEtcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGFBQWEsRUFBOEIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBUyxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQXFEbEQsTUFBTSxPQUFPLFFBQVE7SUFhbkIsWUFBc0IsS0FBb0IsRUFBRSxVQUE0QixFQUFFO1FBQXBELFVBQUssR0FBTCxLQUFLLENBQWU7UUFaMUMsMEJBQTBCO1FBQ25CLGVBQVUsR0FBZSxFQUFFLENBQUM7UUFDbkMsMEJBQTBCO1FBQ25CLGFBQVEsR0FBZSxFQUFFLENBQUM7UUFDakMscUJBQXFCO1FBQ2QsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUM3Qix3QkFBd0I7UUFDakIsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUN0QiwwQkFBMEI7UUFDbkIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQVNSLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFNakIsYUFBUSxHQUFHLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBTXpDLFVBQUssR0FBRyxJQUFJLGFBQWEsQ0FBYSxDQUFDLENBQUMsQ0FBQztRQU16QyxhQUFRLEdBQUcsSUFBSSxhQUFhLENBQU0sQ0FBQyxDQUFDLENBQUM7UUF2QjNDLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0QsaUVBQWlFO0lBQ2pFLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUdELHVEQUF1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QUFDLE9BQU8sQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvbiB9IGZyb20gJy4vZGF0YS1jb2xsZWN0aW9uJztcbmltcG9ydCB7IERhdGFNb2RlbCB9IGZyb20gJy4vZGF0YS1tb2RlbCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckRhdGEge1xuICBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBTb3J0RGF0YSA9IHN0cmluZztcblxuLyoqXG4gKiBRdWVyeXNldCBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXJ5c2V0T3B0aW9ucyB7XG4gIC8qKiBFbWl0IGZpZWxkcyBsaXN0ICovXG4gIGVtaXRGaWVsZHM/OiBib29sZWFuO1xuICAvKiogUXVlcnlzZXQgbmFtZSAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVE9ETzogc2VlIHVzYWdlICovXG4gIHJvdXRlPzogQWN0aXZhdGVkUm91dGU7XG4gIC8qKiBUT0RPOiBzZWUgdXNhZ2UgKi9cbiAgcm91dGVyPzogUm91dGVyO1xuICAvKiogVE9ETzogc2VlIHVzYWdlICovXG4gIGhhc2g/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXJ5TmF2IHtcbiAgcGFnZTogbnVtYmVyO1xuICBwYWdlX3NpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUXVlcnlNZXRhTmF2IHtcbiAgY291bnQ6IG51bWJlcjtcbiAgbmV4dDogbnVtYmVyIHwgbnVsbDtcbiAgcGFnZTogbnVtYmVyO1xuICBwYWdlczogbnVtYmVyO1xuICBwcmV2OiBudW1iZXIgfCBudWxsO1xuICBzaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXJ5TWV0YU5hdlBhcmFtcyB7XG4gIHBhZ2U6IHN0cmluZztcbiAgcGFnZV9zaXplOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXJ5TWV0YSB7XG4gIG5hdjogSVF1ZXJ5TWV0YU5hdjtcbiAgcGFyYW1ldGVyczogSVF1ZXJ5TWV0YU5hdlBhcmFtcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUXVlcnlGdWxsUmVzcG9uc2U8VD4gZXh0ZW5kcyBJUXVlcnlNZXRhIHtcbiAgcmVzdWx0czogVFtdO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlzZXQ8VCBleHRlbmRzIERhdGFNb2RlbD4ge1xuICAvKiogQ3VycmVudCBmaWx0ZXIgZGF0YSAqL1xuICBwdWJsaWMgZmlsdGVyRGF0YTogRmlsdGVyRGF0YSA9IHt9O1xuICAvKiogQ3VycmVudCBzb3J0ZXIgZGF0YSAqL1xuICBwdWJsaWMgc29ydERhdGE6IFNvcnREYXRhW10gPSBbXTtcbiAgLyoqIEN1cnJlbnQgZmllbGRzICovXG4gIHB1YmxpYyBmaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBDdXJyZW50IHBhZ2Ugc2l6ZSAqL1xuICBwdWJsaWMgcGFnZVNpemUgPSA1MDA7XG4gIC8qKiBDdXJyZW50IHBhZ2UgbnVtYmVyICovXG4gIHB1YmxpYyBwYWdlID0gMTtcblxuICBwdWJsaWMgb3B0aW9uczogSVF1ZXJ5c2V0T3B0aW9ucztcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jb2xsOiBDb2xsZWN0aW9uPFQ+LCBvcHRpb25zOiBJUXVlcnlzZXRPcHRpb25zID0ge30pIHtcbiAgICAvKiogRGVmYXVsdCBvcHRpb25zICovXG4gICAgdGhpcy5vcHRpb25zID0geyBlbWl0RmllbGRzOiB0cnVlIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJpc3RpbmUgPSB0cnVlO1xuICAvKiogUHJpc3RpbmUgc3RhdHVzICh0cnVlIGlmIGl0IGhhcyBub3QgY29sbGVjdGVkIHJlc3VsdHMgeWV0KSAqL1xuICBwdWJsaWMgZ2V0IHByaXN0aW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wcmlzdGluZTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRpbmcgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgLyoqIExvYWRpbmcgc3RhdHVzICh0cnVlIGlmIGN1cnJlbnRseSBmZXRjaGluZyBkYXRhKSAqL1xuICBwdWJsaWMgZ2V0IGxvYWRpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmcuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIF9tZXRhID0gbmV3IFJlcGxheVN1YmplY3Q8SVF1ZXJ5TWV0YT4oMSk7XG4gIC8qKiBSZXN1bHRzIG1ldGEgcGFydCBvYnNlcnZhYmxlICovXG4gIHB1YmxpYyBnZXQgbWV0YSgpOiBPYnNlcnZhYmxlPElRdWVyeU1ldGE+IHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3VsdHMgPSBuZXcgUmVwbGF5U3ViamVjdDxUW10+KDEpO1xuICAvKiogUmVzdWx0cyBkYXRhIHBhcnQgb2JzZXJ2YWJsZSAqL1xuICBwdWJsaWMgZ2V0IHJlc3VsdHMoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0cy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKiBGdWxsIHJlc3VsdHMgb2JzZXJ2YWJsZSAocmVzdWx0cywgbG9hZGluZywgbWV0YSkgKi9cbiAgcHVibGljIGdldCBmdWxsKCk6IE9ic2VydmFibGU8W1RbXSwgYm9vbGVhbiwgSVF1ZXJ5TWV0YV0+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRzLCB0aGlzLmxvYWRpbmcsIHRoaXMubWV0YV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjdXJyZW50IGZpbHRlciBkYXRhLiBOdWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIHJlbW92ZWQgZnJvbSBmaWx0ZXIgZGF0YS5cbiAgICogQHBhcmFtIHBhcmFtcyBmaWx0ZXIgZGF0YVxuICAgKiBAcGFyYW0gdXBkYXRlIGJvb2xlYW4gdG8gdXBkYXRlIGZpbHRlciBkYXRhIGluc3RlYWQgb2YgcmVjcmVhdGluZyBpdCBmcm9tIHNjcmF0Y2hcbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIocGFyYW1zOiBGaWx0ZXJEYXRhID0ge30sIHVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlKTogUXVlcnlzZXQ8VD4ge1xuICAgIGlmICghdXBkYXRlKSB7XG4gICAgICB0aGlzLmZpbHRlckRhdGEgPSB7fTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgIGlmIChwYXJhbXNba10gPT09IHVuZGVmaW5lZCB8fCBwYXJhbXNba10gPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyRGF0YVtrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVtrXSA9IHBhcmFtc1trXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHNvcnRpbmcgcGFyYW1ldGVycywgbGlzdCBvZiBzdHJpbmdzIGdpdmluZyBzb3J0IHBhcmFtZXRlcnMgZS5nLiBzb3J0KFwiK25hbWVcIiwgXCItaWRcIikuXG4gICAqIEBwYXJhbSBzb3J0aW5nIHN0cmluZ3Mgb2Ygc29ydCBwYXJhbWV0ZXJzXG4gICAqL1xuICBwdWJsaWMgc29ydCguLi5zb3J0aW5nOiBzdHJpbmdbXSk6IFF1ZXJ5c2V0PFQ+IHtcbiAgICB0aGlzLnNvcnREYXRhID0gc29ydGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcGFnZSBzaXplLlxuICAgKiBAcGFyYW0gcGFnZVNpemUgcmVxdWlyZWQgcGFnZSBzaXplXG4gICAqL1xuICBwdWJsaWMgcGFnaW5hdGVCeShwYWdlU2l6ZTogbnVtYmVyID0gMjApOiBRdWVyeXNldDxUPiB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjdXJyZW50IHBhZ2UgbnVtYmVyLlxuICAgKiBAcGFyYW0gcGFnZSByZXF1aXJlZCBwcWdlXG4gICAqIEBwYXJhbSBmcmFnbWVudCBUT0RPOiBmcmFnbWVudCB1c2FnZSBmb3Igcm91dGVyIHVzYWdlXG4gICAqL1xuICBwdWJsaWMgc2V0UGFnZShwYWdlOiBudW1iZXIgPSAxLCBmcmFnbWVudD86IHN0cmluZyk6IFF1ZXJ5c2V0PFQ+IHtcbiAgICBpZiAocGFnZSAhPT0gdGhpcy5wYWdlKSB7XG4gICAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgICAgLy8gaWYgKHRoaXMub3B0aW9ucy5yb3V0ZXIpIHtcbiAgICAgIC8vICAgLy8gVE9ETzogY2hlY2sgYW5kIGZpeCB1c2FnZSBvZiBmcmFnbWVudC9xdWVyeSBwYXJhbXNcbiAgICAgIC8vICAgY29uc3QgZnJhZyA9IGZyYWdtZW50XG4gICAgICAvLyAgICAgPyBmcmFnbWVudFxuICAgICAgLy8gICAgIDogdGhpcy5vcHRpb25zLmhhc2ggfHwgdGhpcy5vcHRpb25zLm5hbWU7XG4gICAgICAvLyAgIGNvbnN0IF8gPSB0aGlzLm9wdGlvbnMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAvLyAgICAgcXVlcnlQYXJhbXM6IHsgcGFnZTogcGFnZS50b1N0cmluZygpIH0sXG4gICAgICAvLyAgICAgZnJhZ21lbnQ6IGZyYWcsXG4gICAgICAvLyAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIC8vICAgfSk7XG4gICAgICAvLyB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHNldEZpZWxkcyhmaWVsZHM6IHN0cmluZ1tdKTogUXVlcnlzZXQ8VD4ge1xuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldFF1ZXJ5UGFyYW1zKCk6IEZpbHRlckRhdGEge1xuICAgIGNvbnN0IGY6IEZpbHRlckRhdGEgPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKGYsIHRoaXMuZmlsdGVyRGF0YSk7XG4gICAgaWYgKHRoaXMuc29ydERhdGEubGVuZ3RoKSB7XG4gICAgICBmWydvcmRlcmluZyddID0gdGhpcy5zb3J0RGF0YS5qb2luKCcsJyk7XG4gICAgfVxuICAgIGZbJ3BhZ2Vfc2l6ZSddID0gdGhpcy5wYWdlU2l6ZTtcbiAgICBmWydwYWdlJ10gPSB0aGlzLnBhZ2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbWl0RmllbGRzICYmIHRoaXMuZmllbGRzLmxlbmd0aCkge1xuICAgICAgZlsnZmllbGRzJ10gPSB0aGlzLmZpZWxkcy5qb2luKCcsJyk7XG4gICAgfVxuICAgIHJldHVybiBmO1xuICB9XG5cbiAgcHVibGljIGdldChyZWZyZXNoOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgaWYgKCFyZWZyZXNoICYmICF0aGlzLl9wcmlzdGluZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG4gICAgdGhpcy5fbG9hZGluZy5uZXh0KHRydWUpO1xuICAgIHJldHVybiB0aGlzLl9jb2xsXG4gICAgICAucmF3PElRdWVyeUZ1bGxSZXNwb25zZTxUPj4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0UXVlcnlQYXJhbXMoKSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgLy8gUHJvY2VzcyByZXN1bHRzXG4gICAgICAgICAgdGhpcy5fbWV0YS5uZXh0KHsgbmF2OiByZXN1bHQubmF2LCBwYXJhbWV0ZXJzOiByZXN1bHQucGFyYW1ldGVycyB9KTtcbiAgICAgICAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXN1bHQucmVzdWx0cykge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRoaXMuX2NvbGwuZnJvbUpzb24ocik7XG4gICAgICAgICAgICBvdXQucHVzaChtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fcHJpc3RpbmUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9sb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuX3Jlc3VsdHMubmV4dChvdXQpO1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { combineLatest, of } from "rxjs";
2
+ export class QuerysetMock {
3
+ // eslint-disable-next-line @typescript-eslint/naming-convention
4
+ constructor(_coll, options = {}) {
5
+ this._coll = _coll;
6
+ this.options = options;
7
+ this.mockData = [];
8
+ this.filterData = {};
9
+ this.sortData = [];
10
+ this.pageSize = 100;
11
+ this.page = 1;
12
+ this.pristine = true;
13
+ this.loading = of(false);
14
+ }
15
+ get results() {
16
+ return of(this.mockData || this._coll.mockValues);
17
+ }
18
+ get meta() {
19
+ return of({
20
+ nav: { count: 100, next: 1, page: 1, pages: 10, prev: null, size: 10 },
21
+ parameters: { page: "page", page_size: "page_size" }
22
+ });
23
+ }
24
+ get full() {
25
+ return combineLatest([this.results, this.loading, this.meta]);
26
+ }
27
+ filter(params = {}) {
28
+ return this;
29
+ }
30
+ sort(...sorting) {
31
+ return this;
32
+ }
33
+ paginateBy(pageSize = 20) {
34
+ return this;
35
+ }
36
+ setPage(page) {
37
+ return this;
38
+ }
39
+ getQueryParams() {
40
+ return {};
41
+ }
42
+ get() {
43
+ return of(this.mockData || this._coll.mockValues);
44
+ }
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1xdWVyeS5tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL2RhdGEvZGF0YS1xdWVyeS5tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBQyxhQUFhLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE1BQU0sT0FBTyxZQUFZO0lBV3pCLGdFQUFnRTtJQUM5RCxZQUFzQixLQUF3QixFQUFTLFVBQTRCLEVBQUU7UUFBL0QsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQVg5RSxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBRW5CLGVBQVUsR0FBZSxFQUFFLENBQUM7UUFDNUIsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUMxQixhQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ2YsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUszQixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxFQUFFLENBQUM7WUFDUixHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQztZQUNwRSxVQUFVLEVBQUUsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUM7U0FDbkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBcUIsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxJQUFJLENBQUMsR0FBRyxPQUFpQjtRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxVQUFVLENBQUMsV0FBbUIsRUFBRTtRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLEdBQUc7UUFDUixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhTW9kZWx9IGZyb20gXCIuL2RhdGEtbW9kZWxcIjtcbmltcG9ydCB7Q29sbGVjdGlvbk1vY2t9IGZyb20gXCIuL2RhdGEtY29sbGVjdGlvbi5tb2NrXCI7XG5pbXBvcnQge0ZpbHRlckRhdGEsIElRdWVyeU1ldGEsIElRdWVyeXNldE9wdGlvbnMsIFNvcnREYXRhfSBmcm9tIFwiLi9kYXRhLXF1ZXJ5XCI7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlzZXRNb2NrPFQgZXh0ZW5kcyBEYXRhTW9kZWw+IHtcbiAgcHVibGljIG1vY2tEYXRhOiBUW10gPSBbXTtcblxuICBwdWJsaWMgZmlsdGVyRGF0YTogRmlsdGVyRGF0YSA9IHt9O1xuICBwdWJsaWMgc29ydERhdGE6IFNvcnREYXRhW10gPSBbXTtcbiAgcHVibGljIHBhZ2VTaXplID0gMTAwO1xuICBwdWJsaWMgcGFnZSA9IDE7XG5cbiAgcHVibGljIHByaXN0aW5lID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmcgPSBvZihmYWxzZSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jb2xsOiBDb2xsZWN0aW9uTW9jazxUPiwgcHVibGljIG9wdGlvbnM6IElRdWVyeXNldE9wdGlvbnMgPSB7fSkge1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc3VsdHMoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gb2YodGhpcy5tb2NrRGF0YSB8fCB0aGlzLl9jb2xsLm1vY2tWYWx1ZXMpO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXRhKCk6IE9ic2VydmFibGU8SVF1ZXJ5TWV0YT4ge1xuICAgIHJldHVybiBvZih7XG4gICAgICBuYXY6IHtjb3VudDogMTAwLCBuZXh0OiAxLCBwYWdlOiAxLCBwYWdlczogMTAsIHByZXY6IG51bGwsIHNpemU6IDEwfSxcbiAgICAgIHBhcmFtZXRlcnM6IHtwYWdlOiBcInBhZ2VcIiwgcGFnZV9zaXplOiBcInBhZ2Vfc2l6ZVwifVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBmdWxsKCk6IE9ic2VydmFibGU8W1RbXSwgYm9vbGVhbiwgSVF1ZXJ5TWV0YV0+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRzLCB0aGlzLmxvYWRpbmcsIHRoaXMubWV0YV0pO1xuICB9XG5cbiAgcHVibGljIGZpbHRlcihwYXJhbXM6IEZpbHRlckRhdGEgPSB7fSk6IFF1ZXJ5c2V0TW9jazxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgc29ydCguLi5zb3J0aW5nOiBzdHJpbmdbXSk6IFF1ZXJ5c2V0TW9jazxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcGFnaW5hdGVCeShwYWdlU2l6ZTogbnVtYmVyID0gMjApOiBRdWVyeXNldE1vY2s8VD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHNldFBhZ2UocGFnZTogbnVtYmVyKTogUXVlcnlzZXRNb2NrPFQ+IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRRdWVyeVBhcmFtcygpOiBGaWx0ZXJEYXRhIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwdWJsaWMgZ2V0KCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIG9mKHRoaXMubW9ja0RhdGEgfHwgdGhpcy5fY29sbC5tb2NrVmFsdWVzKTtcbiAgfVxufVxuIl19