@solidev/data 0.0.8 → 0.1.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 (158) hide show
  1. package/esm2022/lib/auth/auth-interceptor.service.mjs +92 -0
  2. package/{esm2020 → esm2022}/lib/auth/auth.service.mjs +1 -1
  3. package/esm2022/lib/data/data-backend.mjs +135 -0
  4. package/esm2022/lib/data/data-model.mjs +292 -0
  5. package/esm2022/lib/dispedit/choice.pipe.mjs +81 -0
  6. package/{esm2020 → esm2022}/lib/dispedit/dispedit/dispedit.component.mjs +10 -5
  7. package/esm2022/lib/dispedit/factor.pipe.mjs +83 -0
  8. package/esm2022/lib/dispedit/factorc.pipe.mjs +101 -0
  9. package/esm2022/lib/dispedit/fkselect/fkselect.component.mjs +143 -0
  10. package/esm2022/lib/dispedit/flags/flags.component.mjs +141 -0
  11. package/esm2022/lib/dispedit/m2mselect/m2mselect.component.mjs +319 -0
  12. package/esm2022/lib/dispedit/richedit/richedit.component.mjs +127 -0
  13. package/esm2022/lib/dispedit/sdelete/sdelete.component.mjs +94 -0
  14. package/esm2022/lib/messages/message-zone/message-zone.component.mjs +58 -0
  15. package/esm2022/lib/messages/message.service.mjs +152 -0
  16. package/esm2022/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +66 -0
  17. package/esm2022/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +65 -0
  18. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +113 -0
  19. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +30 -0
  20. package/esm2022/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +41 -0
  21. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +41 -0
  22. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +22 -0
  23. package/esm2022/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +50 -0
  24. package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +64 -0
  25. package/esm2022/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +47 -0
  26. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
  27. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +52 -0
  28. package/esm2022/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +41 -0
  29. package/esm2022/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +175 -0
  30. package/esm2022/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +51 -0
  31. package/esm2022/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +31 -0
  32. package/esm2022/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +71 -0
  33. package/esm2022/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +50 -0
  34. package/esm2022/lib/modellist/model-list.service.mjs +158 -0
  35. package/esm2022/lib/routing/breadcrumb/breadcrumb.component.mjs +143 -0
  36. package/esm2022/lib/updates/update/update.component.mjs +18 -0
  37. package/esm2022/lib/updates/update.service.mjs +59 -0
  38. package/esm2022/lib/uploader/ng-file-drop.directive.mjs +82 -0
  39. package/esm2022/lib/uploader/ng-file-select.directive.mjs +52 -0
  40. package/esm2022/lib/uploader/ngx-uploader.module.mjs +18 -0
  41. package/esm2022/lib/utils/tab-memory.service.mjs +81 -0
  42. package/{fesm2020 → fesm2022}/solidev-data.mjs +153 -149
  43. package/fesm2022/solidev-data.mjs.map +1 -0
  44. package/lib/dispedit/dispedit/dispedit.component.d.ts +1 -1
  45. package/lib/dispedit/fkselect/fkselect.component.d.ts +1 -1
  46. package/lib/dispedit/flags/flags.component.d.ts +1 -1
  47. package/lib/dispedit/m2mselect/m2mselect.component.d.ts +1 -1
  48. package/lib/dispedit/richedit/richedit.component.d.ts +1 -1
  49. package/lib/dispedit/sdelete/sdelete.component.d.ts +1 -1
  50. package/lib/messages/message-zone/message-zone.component.d.ts +1 -1
  51. package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +1 -1
  52. package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +1 -1
  53. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +1 -1
  54. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +1 -1
  55. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +1 -1
  56. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +1 -1
  57. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +1 -1
  58. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +1 -1
  59. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +1 -1
  60. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +1 -1
  61. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +1 -1
  62. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +1 -1
  63. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +1 -1
  64. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +1 -1
  65. package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +1 -1
  66. package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +1 -1
  67. package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +1 -1
  68. package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +1 -1
  69. package/lib/routing/breadcrumb/breadcrumb.component.d.ts +1 -1
  70. package/lib/uploader/ng-file-drop.directive.d.ts +1 -1
  71. package/lib/uploader/ng-file-select.directive.d.ts +1 -1
  72. package/package.json +7 -13
  73. package/esm2020/lib/auth/auth-interceptor.service.mjs +0 -91
  74. package/esm2020/lib/data/data-backend.mjs +0 -134
  75. package/esm2020/lib/data/data-model.mjs +0 -291
  76. package/esm2020/lib/dispedit/choice.pipe.mjs +0 -79
  77. package/esm2020/lib/dispedit/factor.pipe.mjs +0 -81
  78. package/esm2020/lib/dispedit/factorc.pipe.mjs +0 -99
  79. package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +0 -142
  80. package/esm2020/lib/dispedit/flags/flags.component.mjs +0 -140
  81. package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +0 -318
  82. package/esm2020/lib/dispedit/richedit/richedit.component.mjs +0 -126
  83. package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +0 -93
  84. package/esm2020/lib/messages/message-zone/message-zone.component.mjs +0 -57
  85. package/esm2020/lib/messages/message.service.mjs +0 -151
  86. package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +0 -65
  87. package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +0 -64
  88. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +0 -112
  89. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +0 -29
  90. package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +0 -40
  91. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +0 -40
  92. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +0 -21
  93. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +0 -49
  94. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +0 -63
  95. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +0 -46
  96. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +0 -56
  97. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +0 -51
  98. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +0 -40
  99. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +0 -174
  100. package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +0 -50
  101. package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +0 -30
  102. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +0 -70
  103. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +0 -49
  104. package/esm2020/lib/modellist/model-list.service.mjs +0 -157
  105. package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +0 -142
  106. package/esm2020/lib/updates/update/update.component.mjs +0 -17
  107. package/esm2020/lib/updates/update.service.mjs +0 -58
  108. package/esm2020/lib/uploader/ng-file-drop.directive.mjs +0 -81
  109. package/esm2020/lib/uploader/ng-file-select.directive.mjs +0 -51
  110. package/esm2020/lib/uploader/ngx-uploader.module.mjs +0 -17
  111. package/esm2020/lib/utils/tab-memory.service.mjs +0 -80
  112. package/fesm2015/solidev-data.mjs +0 -6224
  113. package/fesm2015/solidev-data.mjs.map +0 -1
  114. package/fesm2020/solidev-data.mjs.map +0 -1
  115. /package/{esm2020 → esm2022}/lib/auth/jwt.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/data/data-collection.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/data/data-collection.mock.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/data/data-parameters.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/data/data-query.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/data/data-query.mock.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/data/fields/base.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/data/fields/boolean.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/data/fields/computed.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/data/fields/datetime.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/data/fields/index.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/data/fields/numbers.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/data/fields/primaryfield.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/data/fields/relations.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/data/fields/stringfields.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/dispedit/dispedit/dispedit.constants.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/modellist/model-list-fields/model-list-field-header/messages.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/modellist/model-list-fields/model-list-fields.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/filtertypes.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/model-list-filter.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/model-list-filters.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/modellist/model-list-paginator/model-list-paginator.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/modellist/model-list-sorter/model-list-sorter.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/routing/routing.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/uploader/index.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/uploader/interfaces.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/uploader/ngx-uploader.class.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/utils/slugify.mjs +0 -0
  156. /package/{esm2020 → esm2022}/lib/utils/template.mjs +0 -0
  157. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  158. /package/{esm2020 → esm2022}/solidev-data.mjs +0 -0
@@ -0,0 +1,292 @@
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
+ class DataModel {
15
+ /**
16
+ * data model name
17
+ * this need to be given because class name is not fully available because of minification.
18
+ */
19
+ static { this.__name = ''; }
20
+ /**
21
+ * Constructor for data model instance.
22
+ * A matching collection can be provided.
23
+ * ___fields readonly property is also populated from Reflected metadata
24
+ *
25
+ * @param _coll collection used for CRUD, etc..
26
+ */
27
+ constructor(_coll) {
28
+ this._coll = _coll;
29
+ const md = Reflect.getMetadata(PROPERTY_METADATA_KEY, this);
30
+ // istanbul ignore if
31
+ if (!md) {
32
+ // This should never occur as all datamodel have at least id field
33
+ throw new Error('No property metadata found for this object; is there a property in current collection ?');
34
+ }
35
+ // Get all fields from current class and its parents
36
+ const fields = new Map();
37
+ let parent = Object.getPrototypeOf(this);
38
+ while (parent.constructor.name !== 'Object') {
39
+ for (const f of md.keys()) {
40
+ const fieldName = f.split('__')[1];
41
+ if (fields.has(fieldName)) {
42
+ continue;
43
+ }
44
+ if (f.indexOf(parent.constructor.__name + '__') === 0) {
45
+ fields.set(fieldName, md.get(f));
46
+ }
47
+ }
48
+ parent = Object.getPrototypeOf(parent);
49
+ }
50
+ this._F = Object.freeze(fields);
51
+ }
52
+ get _collection() {
53
+ return this._coll;
54
+ }
55
+ set _collection(coll) {
56
+ this._coll = coll;
57
+ }
58
+ /**
59
+ * HashMap of fields metadata (type, name, manager, etc...)
60
+ */
61
+ get F() {
62
+ // istanbul ignore if
63
+ if (!this._F) {
64
+ throw new Error('Invalid data model, fields metadata is missing');
65
+ }
66
+ return this._F;
67
+ }
68
+ // Return field names iterator
69
+ get FN() {
70
+ return this.F.keys();
71
+ }
72
+ /**
73
+ * Loads model data from json.
74
+ * If partial is true, only fields with matching data keys will be loaded
75
+ * @param data
76
+ * @param options
77
+ */
78
+ fromJson(data, { partial, check } = {
79
+ partial: false,
80
+ check: false,
81
+ }) {
82
+ const errors = {};
83
+ let haveError = false;
84
+ for (const f of this.FN) {
85
+ if (!partial || (partial && Object.keys(data).indexOf(f) !== -1)) {
86
+ const ferr = this.setFV(f, this.FM(f).fromJson(data[f]), check);
87
+ if (ferr !== null) {
88
+ errors[f] = ferr;
89
+ haveError = true;
90
+ }
91
+ }
92
+ }
93
+ return haveError ? errors : null;
94
+ }
95
+ toJson(fields) {
96
+ if (fields && !Array.isArray(fields)) {
97
+ fields = [fields];
98
+ }
99
+ const out = {};
100
+ const fl = this.F;
101
+ for (const f of this.FN) {
102
+ const mgr = this.FM(f);
103
+ if (!fields || fields.length === 0) {
104
+ if (mgr.readonly) {
105
+ continue;
106
+ }
107
+ out[f] = fl.get(f).manager.toJson(this.FV(f));
108
+ }
109
+ else {
110
+ if (fields.indexOf(f) !== -1) {
111
+ out[f] = fl.get(f).manager.toJson(this.FV(f));
112
+ }
113
+ }
114
+ }
115
+ return out;
116
+ }
117
+ action(method, name, { body = undefined, update = false, updatePartial = true, updateCheck = false,
118
+ // updateRaise = false,
119
+ params = {}, headers = {}, } = {}) {
120
+ if (this._coll === undefined) {
121
+ return throwError(() => new Error('Missing collection'));
122
+ }
123
+ return this._coll
124
+ .action(this, method, name, {
125
+ body,
126
+ params,
127
+ headers,
128
+ })
129
+ .pipe(tap((result) => {
130
+ if (update) {
131
+ this.fromJson(result, {
132
+ partial: updatePartial,
133
+ check: updateCheck,
134
+ });
135
+ return this;
136
+ }
137
+ return result;
138
+ }));
139
+ }
140
+ // Called on model, returns the manager for a field.
141
+ FM(field) {
142
+ if (this.F.has(field)) {
143
+ return this.F.get(field).manager;
144
+ }
145
+ throw new Error(`${field} not found in ${Object.keys(this.F).join(',')} model ${this}`);
146
+ }
147
+ // Return field value, without typing
148
+ FV(field) {
149
+ return this[field];
150
+ }
151
+ /**
152
+ * Set field value. If check is true, only set value if all validators pass.
153
+ * Skip setting field value if manager computed flag is true.
154
+ *
155
+ * The validation result is returned.
156
+ *
157
+ * @param field field name
158
+ * @param value field valued
159
+ * @param check default false
160
+ * @return null or ValidationError
161
+ */
162
+ setFV(field, value, check = false) {
163
+ if (this.FM(field).computed) {
164
+ return null;
165
+ }
166
+ if (check) {
167
+ const fc = new FormControl(value);
168
+ for (const v of this.FM(field).validators) {
169
+ const val = v(fc);
170
+ if (val !== null) {
171
+ console.error(val);
172
+ return val;
173
+ }
174
+ }
175
+ }
176
+ this[field] = value;
177
+ return null;
178
+ }
179
+ FC(field) {
180
+ if (field === undefined) {
181
+ field = Array.from(this.FN).filter((n) => !this.FM(n).readonly);
182
+ }
183
+ if (Array.isArray(field)) {
184
+ const fg = {};
185
+ for (const f of field) {
186
+ fg[f] = this.FC(f);
187
+ }
188
+ return new FormGroup(fg);
189
+ }
190
+ return this.FM(field).formControl(this);
191
+ }
192
+ save({ updateModel = true } = {
193
+ updateModel: true,
194
+ }) {
195
+ if (this._coll) {
196
+ return this._coll.save(this, { updateModel });
197
+ }
198
+ return throwError(() => new Error('Missing collection'));
199
+ }
200
+ update(fields = [], { updateModel = true } = {
201
+ updateModel: true,
202
+ }) {
203
+ if (this._coll) {
204
+ return this._coll.update(this, fields, { updateModel });
205
+ }
206
+ return throwError(() => new Error('Missing collection'));
207
+ }
208
+ }
209
+ export { DataModel };
210
+ //
211
+ // export class TreeDataModel extends DataModel {
212
+ // static override __name = 'TreeDataModel';
213
+ // @detailsField({
214
+ // model: this,
215
+ // many: true,
216
+ // description: 'Parents',
217
+ // })
218
+ // public parents_details?: this[];
219
+ //
220
+ // @foreignKeyField({
221
+ // required: false,
222
+ // description: 'Structure parente',
223
+ // related: 'Structure',
224
+ // })
225
+ // public parent?: number;
226
+ //
227
+ // @integerField({
228
+ // required: false,
229
+ // readonly: true,
230
+ // description: 'ID Tree',
231
+ // })
232
+ // public tree_id!: number;
233
+ //
234
+ // @integerField({
235
+ // required: false,
236
+ // readonly: true,
237
+ // description: 'MPTT left',
238
+ // })
239
+ // public lft!: number;
240
+ //
241
+ // @integerField({
242
+ // required: false,
243
+ // readonly: true,
244
+ // description: 'MPTT right',
245
+ // })
246
+ // public rght!: number;
247
+ //
248
+ // @integerField({
249
+ // required: false,
250
+ // readonly: true,
251
+ // description: 'Niveau hiérarchique',
252
+ // })
253
+ // public level!: number;
254
+ //
255
+ // public get parent_details(): this | null {
256
+ // if (this.parents_details) {
257
+ // const out = this.parents_details[this.parents_details.length - 1];
258
+ // out.parents_details = this.parents_details.slice(
259
+ // 0,
260
+ // this.parents_details.length - 1
261
+ // );
262
+ // return out;
263
+ // }
264
+ // return null;
265
+ // }
266
+ //
267
+ // public set parent_details(d: this | null) {
268
+ // console.log(d);
269
+ // this.parents_details = d?.parents_details;
270
+ // }
271
+ //
272
+ // public _display(): string {
273
+ // const out: string[] = [];
274
+ // if (this.parents_details) {
275
+ // for (const p of this.parents_details) {
276
+ // if ((p as any).code) {
277
+ // out.push(`[${(p as any).code}] ${(p as any).name}`);
278
+ // } else {
279
+ // out.push((p as any).name);
280
+ // }
281
+ // }
282
+ // }
283
+ // if ((this as any).code) {
284
+ // out.push(`[${(this as any).code}] ${(this as any).name}`);
285
+ // } else {
286
+ // out.push((this as any).name);
287
+ // }
288
+ //
289
+ // return out.join(' : ');
290
+ // }
291
+ // }
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kYXRhL2RhdGEtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHFCQUFxQixHQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsU0FBUztJQUNwQjs7O09BR0c7YUFDdUIsV0FBTSxHQUFXLEVBQUUsQ0FBQztJQVk5Qzs7Ozs7O09BTUc7SUFDSCxZQUFzQixLQUF1QjtRQUF2QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUMzQyxNQUFNLEVBQUUsR0FDTixPQUFPLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1Asa0VBQWtFO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQ2IseUZBQXlGLENBQzFGLENBQUM7U0FDSDtRQUNELG9EQUFvRDtRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMs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Q0YsK0NBQStDO0FBQy9DLGtDQUFrQztBQUNsQywyRUFBMkU7QUFDM0UsMERBQTBEO0FBQzFELGFBQWE7QUFDYiwwQ0FBMEM7QUFDMUMsV0FBVztBQUNYLG9CQUFvQjtBQUNwQixRQUFRO0FBQ1IsbUJBQW1CO0FBQ25CLE1BQU07QUFDTixFQUFFO0FBQ0YsZ0RBQWdEO0FBQ2hELHNCQUFzQjtBQUN0QixpREFBaUQ7QUFDakQsTUFBTTtBQUNOLEVBQUU7QUFDRixnQ0FBZ0M7QUFDaEMsZ0NBQWdDO0FBQ2hDLGtDQUFrQztBQUNsQyxnREFBZ0Q7QUFDaEQsaUNBQWlDO0FBQ2pDLGlFQUFpRTtBQUNqRSxtQkFBbUI7QUFDbkIsdUNBQXVDO0FBQ3ZDLFlBQVk7QUFDWixVQUFVO0FBQ1YsUUFBUTtBQUNSLGdDQUFnQztBQUNoQyxtRUFBbUU7QUFDbkUsZUFBZTtBQUNmLHNDQUFzQztBQUN0QyxRQUFRO0FBQ1IsRUFBRTtBQUNGLDhCQUE4QjtBQUM5QixNQUFNO0FBQ04sSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VGaWVsZE1hbmFnZXIsXG4gIElGaWVsZFN0b3JlZE1ldGFkYXRhLFxuICBQUk9QRVJUWV9NRVRBREFUQV9LRVksXG59IGZyb20gJy4vZmllbGRzL2Jhc2UnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL2RhdGEtY29sbGVjdGlvbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCB0eXBlIERhdGFNb2RlbEZpZWxkcyA9IFJlYWRvbmx5PE1hcDxzdHJpbmcsIElGaWVsZFN0b3JlZE1ldGFkYXRhPGFueT4+PjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBkYXRhIG1vZGVsLlxuICpcbiAqIEVhY2ggY2xhc3MgbXVzdCBoYXZlIGEgc3RhdGljIF9fbmFtZVxuICogcHJpbWFyeSBmaWVsZCBpcyBnaXZlbiB3aXRoIGlkIGZpZWxkLlxuICpcbiAqIFNvbWUgbWV0aG9kcyBhcmUgcHJvdmlkZWQgdG8gYmUgdXNlZCB3aXRoIGEgY29sbGVjdGlvbiwgbW9zdGx5IGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgRGF0YU1vZGVsIHtcbiAgLyoqXG4gICAqIGRhdGEgbW9kZWwgbmFtZVxuICAgKiB0aGlzIG5lZWQgdG8gYmUgZ2l2ZW4gYmVjYXVzZSBjbGFzcyBuYW1lIGlzIG5vdCBmdWxseSBhdmFpbGFibGUgYmVjYXVzZSBvZiBtaW5pZmljYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IF9fbmFtZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFByaW1hcnkgZmllbGQ7IHJlYWRvbmx5OyBtdXN0IGJlIGNyZWF0ZWQgYW5kIGF1dG8gaW5jcmVtZW50ZWQgb24gZGIgc2lkZS5cbiAgICovXG4gIC8vIEBwcmltYXJ5RmllbGQoe1xuICAvLyAgIGRlc2NyaXB0aW9uOiAnSUQnLFxuICAvLyAgIGhlbHA6ICdJZGVudGlmaWFudCBwcmltYWlyZScsXG4gIC8vIH0pXG4gIHB1YmxpYyBpZCE6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfRjogRGF0YU1vZGVsRmllbGRzO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBmb3IgZGF0YSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQSBtYXRjaGluZyBjb2xsZWN0aW9uIGNhbiBiZSBwcm92aWRlZC5cbiAgICogX19fZmllbGRzIHJlYWRvbmx5IHByb3BlcnR5IGlzIGFsc28gcG9wdWxhdGVkIGZyb20gUmVmbGVjdGVkIG1ldGFkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBfY29sbCBjb2xsZWN0aW9uIHVzZWQgZm9yIENSVUQsIGV0Yy4uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbGw/OiBDb2xsZWN0aW9uPGFueT4pIHtcbiAgICBjb25zdCBtZDogTWFwPHN0cmluZywgSUZpZWxkU3RvcmVkTWV0YWRhdGE8YW55Pj4gfCB1bmRlZmluZWQgPVxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShQUk9QRVJUWV9NRVRBREFUQV9LRVksIHRoaXMpO1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICAgIGlmICghbWQpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyIGFzIGFsbCBkYXRhbW9kZWwgaGF2ZSBhdCBsZWFzdCBpZCBmaWVsZFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTm8gcHJvcGVydHkgbWV0YWRhdGEgZm91bmQgZm9yIHRoaXMgb2JqZWN0OyBpcyB0aGVyZSBhIHByb3BlcnR5IGluIGN1cnJlbnQgY29sbGVjdGlvbiA/J1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gR2V0IGFsbCBmaWVsZHMgZnJvbSBjdXJyZW50IGNsYXNzIGFuZCBpdHMgcGFyZW50c1xuICAgIGNvbnN0IGZpZWxkcyA9IG5ldyBNYXA8c3RyaW5nLCBJRmllbGRTdG9yZWRNZXRhZGF0YTxhbnk+PigpO1xuICAgIGxldCBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7XG4gICAgd2hpbGUgKHBhcmVudC5jb25zdHJ1Y3Rvci5uYW1lICE9PSAnT2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCBmIG9mIG1kLmtleXMoKSkge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBmLnNwbGl0KCdfXycpWzFdO1xuICAgICAgICBpZiAoZmllbGRzLmhhcyhmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYuaW5kZXhPZihwYXJlbnQuY29uc3RydWN0b3IuX19uYW1lICsgJ19fJykgPT09IDApIHtcbiAgICAgICAgICBmaWVsZHMuc2V0KGZpZWxkTmFtZSwgbWQuZ2V0KGYpISk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpO1xuICAgIH1cbiAgICB0aGlzLl9GID0gT2JqZWN0LmZyZWV6ZShmaWVsZHMpO1xuICB9XG5cbiAgcHVibGljIGdldCBfY29sbGVjdGlvbigpOiBDb2xsZWN0aW9uPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jb2xsIGFzIENvbGxlY3Rpb248YW55PjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgX2NvbGxlY3Rpb24oY29sbDogQ29sbGVjdGlvbjxhbnk+KSB7XG4gICAgdGhpcy5fY29sbCA9IGNvbGw7XG4gIH1cblxuICAvKipcbiAgICogIEhhc2hNYXAgb2YgZmllbGRzIG1ldGFkYXRhICh0eXBlLCBuYW1lLCBtYW5hZ2VyLCBldGMuLi4pXG4gICAqL1xuICBwdWJsaWMgZ2V0IEYoKTogRGF0YU1vZGVsRmllbGRzIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgICBpZiAoIXRoaXMuX0YpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIG1vZGVsLCBmaWVsZHMgbWV0YWRhdGEgaXMgbWlzc2luZycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fRjtcbiAgfVxuXG4gIC8vIFJldHVybiBmaWVsZCBuYW1lcyBpdGVyYXRvclxuICBwdWJsaWMgZ2V0IEZOKCk6IEl0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuRi5rZXlzKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgbW9kZWwgZGF0YSBmcm9tIGpzb24uXG4gICAqIElmIHBhcnRpYWwgaXMgdHJ1ZSwgb25seSBmaWVsZHMgd2l0aCBtYXRjaGluZyBkYXRhIGtleXMgd2lsbCBiZSBsb2FkZWRcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBmcm9tSnNvbihcbiAgICBkYXRhOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0sXG4gICAgeyBwYXJ0aWFsLCBjaGVjayB9OiB7IHBhcnRpYWw/OiBib29sZWFuOyBjaGVjaz86IGJvb2xlYW4gfSA9IHtcbiAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgICAgY2hlY2s6IGZhbHNlLFxuICAgIH1cbiAgKTogbnVsbCB8IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGNvbnN0IGVycm9yczogeyBbaW5kZXg6IHN0cmluZ106IG51bGwgfCBWYWxpZGF0aW9uRXJyb3JzIH0gPSB7fTtcbiAgICBsZXQgaGF2ZUVycm9yID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBmIG9mIHRoaXMuRk4pIHtcbiAgICAgIGlmICghcGFydGlhbCB8fCAocGFydGlhbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5pbmRleE9mKGYpICE9PSAtMSkpIHtcbiAgICAgICAgY29uc3QgZmVyciA9IHRoaXMuc2V0RlYoZiwgdGhpcy5GTShmKS5mcm9tSnNvbihkYXRhW2ZdKSwgY2hlY2spO1xuICAgICAgICBpZiAoZmVyciAhPT0gbnVsbCkge1xuICAgICAgICAgIGVycm9yc1tmXSA9IGZlcnI7XG4gICAgICAgICAgaGF2ZUVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGF2ZUVycm9yID8gZXJyb3JzIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pzb24oZmllbGRzPzogc3RyaW5nIHwgc3RyaW5nW10pOiBhbnkge1xuICAgIGlmIChmaWVsZHMgJiYgIUFycmF5LmlzQXJyYXkoZmllbGRzKSkge1xuICAgICAgZmllbGRzID0gW2ZpZWxkc107XG4gICAgfVxuICAgIGNvbnN0IG91dDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgY29uc3QgZmwgPSB0aGlzLkY7XG4gICAgZm9yIChjb25zdCBmIG9mIHRoaXMuRk4pIHtcbiAgICAgIGNvbnN0IG1nciA9IHRoaXMuRk0oZik7XG4gICAgICBpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChtZ3IucmVhZG9ubHkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBvdXRbZl0gPSBmbC5nZXQoZikhLm1hbmFnZXIudG9Kc29uKHRoaXMuRlYoZikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpZWxkcy5pbmRleE9mKGYpICE9PSAtMSkge1xuICAgICAgICAgIG91dFtmXSA9IGZsLmdldChmKSEubWFuYWdlci50b0pzb24odGhpcy5GVihmKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb248VCwgUlQgZXh0ZW5kcyB7IFtpbmRleDogc3RyaW5nXTogYW55IH0+KFxuICAgIG1ldGhvZDogJ1BPU1QnIHwgJ1BBVENIJyB8ICdHRVQnIHwgJ0RFTEVURScgfCAnUFVUJyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAge1xuICAgICAgYm9keSA9IHVuZGVmaW5lZCxcbiAgICAgIHVwZGF0ZSA9IGZhbHNlLFxuICAgICAgdXBkYXRlUGFydGlhbCA9IHRydWUsXG4gICAgICB1cGRhdGVDaGVjayA9IGZhbHNlLFxuICAgICAgLy8gdXBkYXRlUmFpc2UgPSBmYWxzZSxcbiAgICAgIHBhcmFtcyA9IHt9LFxuICAgICAgaGVhZGVycyA9IHt9LFxuICAgIH06IHtcbiAgICAgIGJvZHk/OiB7IFtfaW5kZXg6IHN0cmluZ106IGFueSB9O1xuICAgICAgdXBkYXRlPzogYm9vbGVhbjtcbiAgICAgIHVwZGF0ZVBhcnRpYWw/OiBib29sZWFuO1xuICAgICAgdXBkYXRlQ2hlY2s/OiBib29sZWFuO1xuICAgICAgLy8gdXBkYXRlUmFpc2U/OiBib29sZWFuO1xuICAgICAgcGFyYW1zPzogeyBbX2luZGV4OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICAgIGhlYWRlcnM/OiB7IFtfaW5kZXg6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFJUPiB7XG4gICAgaWYgKHRoaXMuX2NvbGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdNaXNzaW5nIGNvbGxlY3Rpb24nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb2xsXG4gICAgICAuYWN0aW9uPFJUPih0aGlzLCBtZXRob2QsIG5hbWUsIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZnJvbUpzb24ocmVzdWx0LCB7XG4gICAgICAgICAgICAgIHBhcnRpYWw6IHVwZGF0ZVBhcnRpYWwsXG4gICAgICAgICAgICAgIGNoZWNrOiB1cGRhdGVDaGVjayxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLy8gQ2FsbGVkIG9uIG1vZGVsLCByZXR1cm5zIHRoZSBtYW5hZ2VyIGZvciBhIGZpZWxkLlxuICBwdWJsaWMgRk08RlQ+KGZpZWxkOiBzdHJpbmcpOiBCYXNlRmllbGRNYW5hZ2VyPEZUPiB7XG4gICAgaWYgKHRoaXMuRi5oYXMoZmllbGQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5GLmdldChmaWVsZCkhLm1hbmFnZXI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2ZpZWxkfSBub3QgZm91bmQgaW4gJHtPYmplY3Qua2V5cyh0aGlzLkYpLmpvaW4oJywnKX0gbW9kZWwgJHt0aGlzfWBcbiAgICApO1xuICB9XG5cbiAgLy8gUmV0dXJuIGZpZWxkIHZhbHVlLCB3aXRob3V0IHR5cGluZ1xuICBwdWJsaWMgRlY8RlQ+KGZpZWxkOiBzdHJpbmcpOiBGVCB7XG4gICAgcmV0dXJuICh0aGlzIGFzIGFueSlbZmllbGRdIGFzIEZUO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBmaWVsZCB2YWx1ZS4gSWYgY2hlY2sgaXMgdHJ1ZSwgb25seSBzZXQgdmFsdWUgaWYgYWxsIHZhbGlkYXRvcnMgcGFzcy5cbiAgICogU2tpcCBzZXR0aW5nIGZpZWxkIHZhbHVlIGlmIG1hbmFnZXIgY29tcHV0ZWQgZmxhZyBpcyB0cnVlLlxuICAgKlxuICAgKiBUaGUgdmFsaWRhdGlvbiByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSBmaWVsZCB2YWx1ZWRcbiAgICogQHBhcmFtIGNoZWNrIGRlZmF1bHQgZmFsc2VcbiAgICogQHJldHVybiBudWxsIG9yIFZhbGlkYXRpb25FcnJvclxuICAgKi9cbiAgcHVibGljIHNldEZWPEZUPihcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIHZhbHVlOiBGVCxcbiAgICBjaGVjazogYm9vbGVhbiA9IGZhbHNlXG4gICk6IG51bGwgfCBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBpZiAodGhpcy5GTShmaWVsZCkuY29tcHV0ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoY2hlY2spIHtcbiAgICAgIGNvbnN0IGZjID0gbmV3IEZvcm1Db250cm9sKHZhbHVlKTtcblxuICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMuRk0oZmllbGQpLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgY29uc3QgdmFsID0gdihmYyk7XG4gICAgICAgIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHZhbCk7XG4gICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAodGhpcyBhcyBhbnkpW2ZpZWxkXSA9IHZhbHVlO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2FsbGVkIG9uIG1vZGVsIHdpdGggYSBsaXN0IG9mIGZpZWxkcywgcmV0dXJucyBhIEZvcm1Hcm91cCB3aXRoXG4gIC8vIHRoZXNlIGZpZWxkcywgb3Igb25seSB0aGUgZm9ybSBjb250cm9sIGZvciBvbmUgZmllbGQuXG4gIHB1YmxpYyBGQygpOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBGQyhmaWVsZDogc3RyaW5nKTogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBGQyhmaWVsZDogc3RyaW5nW10pOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBGQyhmaWVsZD86IHN0cmluZyB8IHN0cmluZ1tdKTogRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXAge1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWVsZCA9IEFycmF5LmZyb20odGhpcy5GTikuZmlsdGVyKChuKSA9PiAhdGhpcy5GTShuKS5yZWFkb25seSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkKSkge1xuICAgICAgY29uc3QgZmc6IHsgW2luZGV4OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmllbGQpIHtcbiAgICAgICAgZmdbZl0gPSB0aGlzLkZDKGYpIGFzIEZvcm1Db250cm9sO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoZmcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5GTShmaWVsZCkuZm9ybUNvbnRyb2wodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZShcbiAgICB7IHVwZGF0ZU1vZGVsID0gdHJ1ZSB9OiB7IHVwZGF0ZU1vZGVsPzogYm9vbGVhbiB9ID0ge1xuICAgICAgdXBkYXRlTW9kZWw6IHRydWUsXG4gICAgfVxuICApOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBpZiAodGhpcy5fY29sbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbGwuc2F2ZSh0aGlzLCB7IHVwZGF0ZU1vZGVsIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ01pc3NpbmcgY29sbGVjdGlvbicpKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUoXG4gICAgZmllbGRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHsgdXBkYXRlTW9kZWwgPSB0cnVlIH06IHsgdXBkYXRlTW9kZWw/OiBib29sZWFuIH0gPSB7XG4gICAgICB1cGRhdGVNb2RlbDogdHJ1ZSxcbiAgICB9XG4gICk6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgIGlmICh0aGlzLl9jb2xsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29sbC51cGRhdGUodGhpcywgZmllbGRzLCB7IHVwZGF0ZU1vZGVsIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ01pc3NpbmcgY29sbGVjdGlvbicpKTtcbiAgfVxufVxuXG4vL1xuLy8gZXhwb3J0IGNsYXNzIFRyZWVEYXRhTW9kZWwgZXh0ZW5kcyBEYXRhTW9kZWwge1xuLy8gICBzdGF0aWMgb3ZlcnJpZGUgX19uYW1lID0gJ1RyZWVEYXRhTW9kZWwnO1xuLy8gICBAZGV0YWlsc0ZpZWxkKHtcbi8vICAgICBtb2RlbDogdGhpcyxcbi8vICAgICBtYW55OiB0cnVlLFxuLy8gICAgIGRlc2NyaXB0aW9uOiAnUGFyZW50cycsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyBwYXJlbnRzX2RldGFpbHM/OiB0aGlzW107XG4vL1xuLy8gICBAZm9yZWlnbktleUZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgZGVzY3JpcHRpb246ICdTdHJ1Y3R1cmUgcGFyZW50ZScsXG4vLyAgICAgcmVsYXRlZDogJ1N0cnVjdHVyZScsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyBwYXJlbnQ/OiBudW1iZXI7XG4vL1xuLy8gICBAaW50ZWdlckZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgcmVhZG9ubHk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdJRCBUcmVlJyxcbi8vICAgfSlcbi8vICAgcHVibGljIHRyZWVfaWQhOiBudW1iZXI7XG4vL1xuLy8gICBAaW50ZWdlckZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgcmVhZG9ubHk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdNUFRUIGxlZnQnLFxuLy8gICB9KVxuLy8gICBwdWJsaWMgbGZ0ITogbnVtYmVyO1xuLy9cbi8vICAgQGludGVnZXJGaWVsZCh7XG4vLyAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuLy8gICAgIHJlYWRvbmx5OiB0cnVlLFxuLy8gICAgIGRlc2NyaXB0aW9uOiAnTVBUVCByaWdodCcsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyByZ2h0ITogbnVtYmVyO1xuLy9cbi8vICAgQGludGVnZXJGaWVsZCh7XG4vLyAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuLy8gICAgIHJlYWRvbmx5OiB0cnVlLFxuLy8gICAgIGRlc2NyaXB0aW9uOiAnTml2ZWF1IGhpw6lyYXJjaGlxdWUnLFxuLy8gICB9KVxuLy8gICBwdWJsaWMgbGV2ZWwhOiBudW1iZXI7XG4vL1xuLy8gICBwdWJsaWMgZ2V0IHBhcmVudF9kZXRhaWxzKCk6IHRoaXMgfCBudWxsIHtcbi8vICAgICBpZiAodGhpcy5wYXJlbnRzX2RldGFpbHMpIHtcbi8vICAgICAgIGNvbnN0IG91dCA9IHRoaXMucGFyZW50c19kZXRhaWxzW3RoaXMucGFyZW50c19kZXRhaWxzLmxlbmd0aCAtIDFdO1xuLy8gICAgICAgb3V0LnBhcmVudHNfZGV0YWlscyA9IHRoaXMucGFyZW50c19kZXRhaWxzLnNsaWNlKFxuLy8gICAgICAgICAwLFxuLy8gICAgICAgICB0aGlzLnBhcmVudHNfZGV0YWlscy5sZW5ndGggLSAxXG4vLyAgICAgICApO1xuLy8gICAgICAgcmV0dXJuIG91dDtcbi8vICAgICB9XG4vLyAgICAgcmV0dXJuIG51bGw7XG4vLyAgIH1cbi8vXG4vLyAgIHB1YmxpYyBzZXQgcGFyZW50X2RldGFpbHMoZDogdGhpcyB8IG51bGwpIHtcbi8vICAgICBjb25zb2xlLmxvZyhkKTtcbi8vICAgICB0aGlzLnBhcmVudHNfZGV0YWlscyA9IGQ/LnBhcmVudHNfZGV0YWlscztcbi8vICAgfVxuLy9cbi8vICAgcHVibGljIF9kaXNwbGF5KCk6IHN0cmluZyB7XG4vLyAgICAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuLy8gICAgIGlmICh0aGlzLnBhcmVudHNfZGV0YWlscykge1xuLy8gICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGFyZW50c19kZXRhaWxzKSB7XG4vLyAgICAgICAgIGlmICgocCBhcyBhbnkpLmNvZGUpIHtcbi8vICAgICAgICAgICBvdXQucHVzaChgWyR7KHAgYXMgYW55KS5jb2RlfV0gJHsocCBhcyBhbnkpLm5hbWV9YCk7XG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgb3V0LnB1c2goKHAgYXMgYW55KS5uYW1lKTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBpZiAoKHRoaXMgYXMgYW55KS5jb2RlKSB7XG4vLyAgICAgICBvdXQucHVzaChgWyR7KHRoaXMgYXMgYW55KS5jb2RlfV0gJHsodGhpcyBhcyBhbnkpLm5hbWV9YCk7XG4vLyAgICAgfSBlbHNlIHtcbi8vICAgICAgIG91dC5wdXNoKCh0aGlzIGFzIGFueSkubmFtZSk7XG4vLyAgICAgfVxuLy9cbi8vICAgICByZXR1cm4gb3V0LmpvaW4oJyA6ICcpO1xuLy8gICB9XG4vLyB9XG4iXX0=
@@ -0,0 +1,81 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ class ChoicePipe {
4
+ transform(value, field, mode = 'desc') {
5
+ if (!value) {
6
+ return '-';
7
+ }
8
+ const fvalue = value[field];
9
+ if (mode === 'code') {
10
+ return `${fvalue}`;
11
+ }
12
+ const manager = value.FM(field);
13
+ const choices = manager.choices;
14
+ if (!choices) {
15
+ return `${fvalue}`;
16
+ }
17
+ for (const ch of choices) {
18
+ if (ch.value === fvalue) {
19
+ if (mode === 'desc') {
20
+ return ch.desc;
21
+ }
22
+ else {
23
+ return `[${fvalue}] ${ch.desc}`;
24
+ }
25
+ }
26
+ }
27
+ return `[${fvalue}] ??`;
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ChoicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
30
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: ChoicePipe, isStandalone: true, name: "choice" }); }
31
+ }
32
+ export { ChoicePipe };
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ChoicePipe, decorators: [{
34
+ type: Pipe,
35
+ args: [{
36
+ name: 'choice',
37
+ standalone: true,
38
+ }]
39
+ }] });
40
+ class PChoicePipe {
41
+ transform(value, model, field, mode = 'desc') {
42
+ if (!model) {
43
+ return '-';
44
+ }
45
+ if (!value) {
46
+ return '-';
47
+ }
48
+ // Use value from input, not from field
49
+ const fvalue = value; //- (model as any)[field];
50
+ if (mode === 'code') {
51
+ return `${fvalue}`;
52
+ }
53
+ const manager = model.FM(field);
54
+ const choices = manager.choices;
55
+ if (!choices) {
56
+ return `${fvalue}`;
57
+ }
58
+ for (const ch of choices) {
59
+ if (ch.value === fvalue) {
60
+ if (mode === 'desc') {
61
+ return ch.desc;
62
+ }
63
+ else {
64
+ return `[${fvalue}] ${ch.desc}`;
65
+ }
66
+ }
67
+ }
68
+ return `[${fvalue}] ??`;
69
+ }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PChoicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
71
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: PChoicePipe, isStandalone: true, name: "pchoice" }); }
72
+ }
73
+ export { PChoicePipe };
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PChoicePipe, decorators: [{
75
+ type: Pipe,
76
+ args: [{
77
+ name: 'pchoice',
78
+ standalone: true,
79
+ }]
80
+ }] });
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvaWNlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvZGlzcGVkaXQvY2hvaWNlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBR3BELE1BSWEsVUFBVTtJQUNyQixTQUFTLENBQ1AsS0FBUSxFQUNSLEtBQWEsRUFDYixPQUFpQyxNQUFNO1FBRXZDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsTUFBTSxNQUFNLEdBQUksS0FBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNuQixPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUM7U0FDcEI7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFJLE9BQWUsQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQztTQUNwQjtRQUNELEtBQUssTUFBTSxFQUFFLElBQUksT0FBTyxFQUFFO1lBQ3hCLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7Z0JBQ3ZCLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtvQkFDbkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO2lCQUNoQjtxQkFBTTtvQkFDTCxPQUFPLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDakM7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0lBQzFCLENBQUM7OEdBNUJVLFVBQVU7NEdBQVYsVUFBVTs7U0FBVixVQUFVOzJGQUFWLFVBQVU7a0JBSnRCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQWdDRCxNQUlhLFdBQVc7SUFDdEIsU0FBUyxDQUNQLEtBQVUsRUFDVixLQUFRLEVBQ1IsS0FBYSxFQUNiLE9BQWlDLE1BQU07UUFFdkMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUNELHVDQUF1QztRQUN2QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQywwQkFBMEI7UUFDaEQsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ25CLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQztTQUNwQjtRQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsTUFBTSxPQUFPLEdBQUksT0FBZSxDQUFDLE9BQU8sQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsS0FBSyxNQUFNLEVBQUUsSUFBSSxPQUFPLEVBQUU7WUFDeEIsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRTtnQkFDdkIsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO29CQUNuQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7aUJBQ2hCO3FCQUFNO29CQUNMLE9BQU8sSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNqQzthQUNGO1NBQ0Y7UUFDRCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7SUFDMUIsQ0FBQzs4R0FqQ1UsV0FBVzs0R0FBWCxXQUFXOztTQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsU0FBUztvQkFDZixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi9kYXRhL2RhdGEtbW9kZWwnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdjaG9pY2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDaG9pY2VQaXBlPFQgZXh0ZW5kcyBEYXRhTW9kZWw+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShcbiAgICB2YWx1ZTogVCxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIG1vZGU6ICdjb2RlJyB8ICdkZXNjJyB8ICdib3RoJyA9ICdkZXNjJ1xuICApOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIGNvbnN0IGZ2YWx1ZSA9ICh2YWx1ZSBhcyBhbnkpW2ZpZWxkXTtcbiAgICBpZiAobW9kZSA9PT0gJ2NvZGUnKSB7XG4gICAgICByZXR1cm4gYCR7ZnZhbHVlfWA7XG4gICAgfVxuICAgIGNvbnN0IG1hbmFnZXIgPSB2YWx1ZS5GTShmaWVsZCk7XG4gICAgY29uc3QgY2hvaWNlcyA9IChtYW5hZ2VyIGFzIGFueSkuY2hvaWNlcztcbiAgICBpZiAoIWNob2ljZXMpIHtcbiAgICAgIHJldHVybiBgJHtmdmFsdWV9YDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaCBvZiBjaG9pY2VzKSB7XG4gICAgICBpZiAoY2gudmFsdWUgPT09IGZ2YWx1ZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgICAgcmV0dXJuIGNoLmRlc2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmdmFsdWV9XSAke2NoLmRlc2N9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYFske2Z2YWx1ZX1dID8/YDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdwY2hvaWNlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUENob2ljZVBpcGU8VCBleHRlbmRzIERhdGFNb2RlbD4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbW9kZWw6IFQsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBtb2RlOiAnY29kZScgfCAnZGVzYycgfCAnYm90aCcgPSAnZGVzYydcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICAvLyBVc2UgdmFsdWUgZnJvbSBpbnB1dCwgbm90IGZyb20gZmllbGRcbiAgICBjb25zdCBmdmFsdWUgPSB2YWx1ZTsgLy8tIChtb2RlbCBhcyBhbnkpW2ZpZWxkXTtcbiAgICBpZiAobW9kZSA9PT0gJ2NvZGUnKSB7XG4gICAgICByZXR1cm4gYCR7ZnZhbHVlfWA7XG4gICAgfVxuICAgIGNvbnN0IG1hbmFnZXIgPSBtb2RlbC5GTShmaWVsZCk7XG4gICAgY29uc3QgY2hvaWNlcyA9IChtYW5hZ2VyIGFzIGFueSkuY2hvaWNlcztcbiAgICBpZiAoIWNob2ljZXMpIHtcbiAgICAgIHJldHVybiBgJHtmdmFsdWV9YDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaCBvZiBjaG9pY2VzKSB7XG4gICAgICBpZiAoY2gudmFsdWUgPT09IGZ2YWx1ZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgICAgcmV0dXJuIGNoLmRlc2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmdmFsdWV9XSAke2NoLmRlc2N9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYFske2Z2YWx1ZX1dID8/YDtcbiAgfVxufVxuIl19