@acorex/modules 18.0.15 → 18.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 (114) hide show
  1. package/application-management/index.d.ts +9 -7
  2. package/application-management/lib/actions/index.d.ts +1 -0
  3. package/application-management/lib/actions/show-detail.action.d.ts +8 -0
  4. package/application-management/lib/application-management-mock-data.d.ts +3 -18
  5. package/application-management/lib/application-management.module.d.ts +12 -2
  6. package/application-management/lib/application-management.service.d.ts +2 -0
  7. package/application-management/lib/entities/property.entity.d.ts +3 -0
  8. package/application-management/lib/layouts/index.d.ts +1 -0
  9. package/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.d.ts +15 -0
  10. package/application-management/lib/module-designer/module-designer.component.d.ts +32 -0
  11. package/application-management/lib/module-designer/module-designer.service.d.ts +34 -0
  12. package/application-management/lib/module-designer/module-designer.type.d.ts +1 -0
  13. package/application-management/lib/services/context-menu.service.d.ts +26 -0
  14. package/application-management/lib/workflows/create-module-entity.workflow.d.ts +2 -0
  15. package/application-management/lib/workflows/index.d.ts +2 -0
  16. package/application-management/lib/workflows/show-module-entity-details.workflow.d.ts +2 -0
  17. package/auth/lib/error-handler.d.ts +1 -1
  18. package/backend/lib/data/api/comment.service.d.ts +15 -0
  19. package/backend/lib/data/api/module-designer.service.d.ts +43 -0
  20. package/backend/lib/data/index.d.ts +2 -1
  21. package/backend/lib/data/local/local-data-provider.d.ts +1 -2
  22. package/esm2022/application-management/index.mjs +10 -8
  23. package/esm2022/application-management/lib/actions/index.mjs +2 -0
  24. package/esm2022/application-management/lib/actions/show-detail.action.mjs +25 -0
  25. package/esm2022/application-management/lib/application-management-mock-data.mjs +4 -4
  26. package/esm2022/application-management/lib/application-management.module.mjs +94 -7
  27. package/esm2022/application-management/lib/application-management.service.mjs +8 -2
  28. package/esm2022/application-management/lib/entities/application-module.entity.mjs +273 -0
  29. package/esm2022/application-management/lib/entities/applications.entity.mjs +311 -0
  30. package/esm2022/application-management/lib/entities/edition.entity.mjs +284 -0
  31. package/esm2022/application-management/lib/entities/entity.entity.mjs +284 -0
  32. package/esm2022/application-management/lib/entities/feature.entity.mjs +284 -0
  33. package/esm2022/application-management/lib/entities/modules.entity.mjs +324 -0
  34. package/esm2022/application-management/lib/entities/permission.entity.mjs +284 -0
  35. package/esm2022/application-management/lib/entities/property.entity.mjs +449 -0
  36. package/esm2022/application-management/lib/layouts/index.mjs +2 -0
  37. package/esm2022/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.mjs +77 -0
  38. package/esm2022/application-management/lib/module-designer/module-designer.component.mjs +142 -0
  39. package/esm2022/application-management/lib/module-designer/module-designer.service.mjs +3 -0
  40. package/esm2022/application-management/lib/module-designer/module-designer.type.mjs +2 -0
  41. package/esm2022/application-management/lib/services/context-menu.service.mjs +168 -0
  42. package/esm2022/application-management/lib/workflows/create-module-entity.workflow.mjs +42 -0
  43. package/esm2022/application-management/lib/workflows/index.mjs +3 -0
  44. package/esm2022/application-management/lib/workflows/show-module-entity-details.workflow.mjs +9 -0
  45. package/esm2022/auth/lib/error-handler.mjs +6 -6
  46. package/esm2022/backend/lib/backend.module.mjs +23 -5
  47. package/esm2022/backend/lib/data/api/comment.service.mjs +48 -0
  48. package/esm2022/backend/lib/data/api/data-provider.mjs +2 -2
  49. package/esm2022/backend/lib/data/api/module-designer.service.mjs +95 -0
  50. package/esm2022/backend/lib/data/index.mjs +3 -2
  51. package/esm2022/backend/lib/data/local/local-data-provider.mjs +2 -2
  52. package/esm2022/form-management/acorex-modules-form-management.mjs +5 -0
  53. package/esm2022/form-management/index.mjs +2 -0
  54. package/esm2022/form-management/lib/designer/designer.page.mjs +24 -0
  55. package/esm2022/form-management/lib/form-management.module.mjs +29 -0
  56. package/fesm2022/acorex-modules-application-management-module-designer.component-CDZZ-5pF.mjs +323 -0
  57. package/fesm2022/acorex-modules-application-management-module-designer.component-CDZZ-5pF.mjs.map +1 -0
  58. package/fesm2022/acorex-modules-application-management.mjs +722 -21
  59. package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
  60. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-BD7I4S8c.mjs → acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs} +12 -12
  61. package/fesm2022/acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs.map +1 -0
  62. package/fesm2022/{acorex-modules-auth-app-chooser.component-Cfl1D1Cw.mjs → acorex-modules-auth-app-chooser.component-DN1ZJiZs.mjs} +2 -2
  63. package/fesm2022/{acorex-modules-auth-app-chooser.component-Cfl1D1Cw.mjs.map → acorex-modules-auth-app-chooser.component-DN1ZJiZs.mjs.map} +1 -1
  64. package/fesm2022/{acorex-modules-auth-login.module-BQG4ObmU.mjs → acorex-modules-auth-login.module-CGA5aTg2.mjs} +5 -5
  65. package/fesm2022/{acorex-modules-auth-login.module-BQG4ObmU.mjs.map → acorex-modules-auth-login.module-CGA5aTg2.mjs.map} +1 -1
  66. package/fesm2022/{acorex-modules-auth-master.layout-DoPCP7C0.mjs → acorex-modules-auth-master.layout-ZJWzjLrb.mjs} +2 -2
  67. package/fesm2022/{acorex-modules-auth-master.layout-DoPCP7C0.mjs.map → acorex-modules-auth-master.layout-ZJWzjLrb.mjs.map} +1 -1
  68. package/fesm2022/{acorex-modules-auth-password.component-fyMD7oKR.mjs → acorex-modules-auth-password.component-C4yqf342.mjs} +3 -3
  69. package/fesm2022/{acorex-modules-auth-password.component-fyMD7oKR.mjs.map → acorex-modules-auth-password.component-C4yqf342.mjs.map} +1 -1
  70. package/fesm2022/{acorex-modules-auth-password.component-CfhiS2hO.mjs → acorex-modules-auth-password.component-MJhNk3UI.mjs} +2 -2
  71. package/fesm2022/{acorex-modules-auth-password.component-CfhiS2hO.mjs.map → acorex-modules-auth-password.component-MJhNk3UI.mjs.map} +1 -1
  72. package/fesm2022/{acorex-modules-auth-routes-95DQOnjS.mjs → acorex-modules-auth-routes-DhORV1Js.mjs} +2 -2
  73. package/fesm2022/{acorex-modules-auth-routes-95DQOnjS.mjs.map → acorex-modules-auth-routes-DhORV1Js.mjs.map} +1 -1
  74. package/fesm2022/{acorex-modules-auth-two-factor.module-BkErlA-n.mjs → acorex-modules-auth-two-factor.module-BWKP0_jO.mjs} +3 -3
  75. package/fesm2022/{acorex-modules-auth-two-factor.module-BkErlA-n.mjs.map → acorex-modules-auth-two-factor.module-BWKP0_jO.mjs.map} +1 -1
  76. package/fesm2022/acorex-modules-auth.mjs +4 -4
  77. package/fesm2022/acorex-modules-backend.mjs +154 -137
  78. package/fesm2022/acorex-modules-backend.mjs.map +1 -1
  79. package/fesm2022/acorex-modules-form-management-designer.page-SoPH2V7i.mjs +27 -0
  80. package/fesm2022/acorex-modules-form-management-designer.page-SoPH2V7i.mjs.map +1 -0
  81. package/fesm2022/acorex-modules-form-management.mjs +36 -0
  82. package/fesm2022/acorex-modules-form-management.mjs.map +1 -0
  83. package/form-management/README.md +4 -0
  84. package/form-management/index.d.ts +1 -0
  85. package/form-management/lib/designer/designer.page.d.ts +5 -0
  86. package/form-management/lib/form-management.module.d.ts +7 -0
  87. package/package.json +6 -6
  88. package/backend/lib/data/local/data-Conditioner.d.ts +0 -6
  89. package/esm2022/application-management/lib/application-module.entity.mjs +0 -273
  90. package/esm2022/application-management/lib/applications.entity.mjs +0 -311
  91. package/esm2022/application-management/lib/edition.entity.mjs +0 -284
  92. package/esm2022/application-management/lib/entity.entity.mjs +0 -284
  93. package/esm2022/application-management/lib/feature.entity.mjs +0 -284
  94. package/esm2022/application-management/lib/modules.entity.mjs +0 -324
  95. package/esm2022/application-management/lib/permission.entity.mjs +0 -284
  96. package/esm2022/backend/lib/data/local/data-Conditioner.mjs +0 -138
  97. package/esm2022/log-management/acorex-modules-log-management.mjs +0 -5
  98. package/esm2022/log-management/index.mjs +0 -3
  99. package/esm2022/log-management/lib/audit-logs.entity.mjs +0 -391
  100. package/esm2022/log-management/lib/log-management.module.mjs +0 -16
  101. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BD7I4S8c.mjs.map +0 -1
  102. package/fesm2022/acorex-modules-log-management.mjs +0 -414
  103. package/fesm2022/acorex-modules-log-management.mjs.map +0 -1
  104. package/log-management/README.md +0 -4
  105. package/log-management/index.d.ts +0 -2
  106. package/log-management/lib/audit-logs.entity.d.ts +0 -3
  107. package/log-management/lib/log-management.module.d.ts +0 -6
  108. /package/application-management/lib/{application-module.entity.d.ts → entities/application-module.entity.d.ts} +0 -0
  109. /package/application-management/lib/{applications.entity.d.ts → entities/applications.entity.d.ts} +0 -0
  110. /package/application-management/lib/{edition.entity.d.ts → entities/edition.entity.d.ts} +0 -0
  111. /package/application-management/lib/{entity.entity.d.ts → entities/entity.entity.d.ts} +0 -0
  112. /package/application-management/lib/{feature.entity.d.ts → entities/feature.entity.d.ts} +0 -0
  113. /package/application-management/lib/{modules.entity.d.ts → entities/modules.entity.d.ts} +0 -0
  114. /package/application-management/lib/{permission.entity.d.ts → entities/permission.entity.d.ts} +0 -0
@@ -0,0 +1,324 @@
1
+ import { AXPDataGenerator, AXPEntityCommandScope, AXPEntityQueryType } from '@acorex/platform/common';
2
+ import { applyFilterArray, applySortArray } from '@acorex/platform/core';
3
+ import { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
4
+ import { AXPApplicationManagementService } from '../application-management.service';
5
+ export async function modulesEntityFactory(injector) {
6
+ const dataService = injector.get(AXPApplicationManagementService);
7
+ const entityDef = {
8
+ module: 'application-management',
9
+ name: 'module',
10
+ source: 'application-management.module',
11
+ title: 'Modules',
12
+ formats: {
13
+ individual: 'Modules',
14
+ plural: 'Modules',
15
+ },
16
+ relatedEntities: [
17
+ {
18
+ entity: 'application-management.entity',
19
+ columns: ['module.title', 'name', 'title', 'isArchived'],
20
+ conditions: [
21
+ {
22
+ name: 'module.id',
23
+ operator: {
24
+ type: 'equal',
25
+ },
26
+ value: 'id',
27
+ },
28
+ ],
29
+ },
30
+ {
31
+ entity: 'application-management.feature',
32
+ columns: ['module.title', 'name', 'title', 'isArchived'],
33
+ conditions: [
34
+ {
35
+ name: 'module.id',
36
+ operator: {
37
+ type: 'equal',
38
+ },
39
+ value: 'id',
40
+ },
41
+ ],
42
+ },
43
+ {
44
+ entity: 'application-management.permission',
45
+ columns: ['module.title', 'name', 'title', 'isArchived'],
46
+ conditions: [
47
+ {
48
+ name: 'module.id',
49
+ operator: {
50
+ type: 'equal',
51
+ },
52
+ value: 'id',
53
+ },
54
+ ],
55
+ },
56
+ ],
57
+ groups: [
58
+ {
59
+ id: 'modules',
60
+ title: 'Modules',
61
+ },
62
+ ],
63
+ properties: [
64
+ {
65
+ name: 'name',
66
+ title: 'Name',
67
+ groupId: 'modules',
68
+ schema: {
69
+ dataType: 'string',
70
+ interface: {
71
+ type: AXPWidgetsCatalog.text,
72
+ },
73
+ },
74
+ },
75
+ {
76
+ name: 'title',
77
+ title: 'Title',
78
+ groupId: 'modules',
79
+ schema: {
80
+ dataType: 'string',
81
+ interface: {
82
+ type: AXPWidgetsCatalog.text,
83
+ },
84
+ },
85
+ },
86
+ {
87
+ name: 'isArchived',
88
+ title: 'Archived',
89
+ groupId: 'modules',
90
+ schema: {
91
+ dataType: 'boolean',
92
+ interface: {
93
+ type: AXPWidgetsCatalog.toggle,
94
+ },
95
+ },
96
+ },
97
+ ],
98
+ columns: [{ name: 'name' }, { name: 'title' }, { name: 'isArchived' }],
99
+ commands: {
100
+ create: {
101
+ execute: async (data) => {
102
+ const entity = Object.assign(data, { id: AXPDataGenerator.uuid() });
103
+ dataService.moduleDataProvider.insertOne(entity);
104
+ return Promise.resolve(entity);
105
+ },
106
+ },
107
+ delete: {
108
+ execute: async (id) => {
109
+ await await dataService.moduleDataProvider.deleteOne(id);
110
+ return Promise.resolve();
111
+ },
112
+ },
113
+ update: {
114
+ execute: async (data) => {
115
+ return new Promise((resolve) => {
116
+ setTimeout(async () => {
117
+ await dataService.moduleDataProvider.updateOne(data.id, data);
118
+ resolve(data);
119
+ }, 1000);
120
+ });
121
+ },
122
+ },
123
+ },
124
+ queries: {
125
+ byKey: {
126
+ execute: async (id) => {
127
+ return new Promise((resolve) => {
128
+ setTimeout(async () => {
129
+ const entity = await dataService.moduleDataProvider.getOne(id);
130
+ resolve(entity);
131
+ }, 500);
132
+ });
133
+ },
134
+ type: AXPEntityQueryType.Single,
135
+ },
136
+ list: {
137
+ execute: async (e) => {
138
+ const list = await dataService.moduleDataProvider.getAll();
139
+ const sortedItems = applySortArray(list, e.sort);
140
+ const filteredItems = applyFilterArray(sortedItems, e.filter ? [e.filter] : []);
141
+ return Promise.resolve({
142
+ total: filteredItems.length,
143
+ items: filteredItems.slice(e.skip, (e.skip ?? 0) + (e.take ?? 0)),
144
+ });
145
+ },
146
+ type: AXPEntityQueryType.List,
147
+ },
148
+ },
149
+ interfaces: {
150
+ master: {
151
+ create: {
152
+ sections: [
153
+ {
154
+ id: 'modules',
155
+ },
156
+ ],
157
+ properties: [
158
+ {
159
+ name: 'name',
160
+ layout: {
161
+ positions: {
162
+ lg: {
163
+ colSpan: 6,
164
+ },
165
+ },
166
+ },
167
+ },
168
+ {
169
+ name: 'title',
170
+ layout: {
171
+ positions: {
172
+ lg: {
173
+ colSpan: 6,
174
+ },
175
+ },
176
+ },
177
+ },
178
+ {
179
+ name: 'isArchived',
180
+ layout: {
181
+ positions: {
182
+ lg: {
183
+ colSpan: 12,
184
+ },
185
+ },
186
+ },
187
+ },
188
+ ],
189
+ },
190
+ update: {
191
+ sections: [
192
+ {
193
+ id: 'application',
194
+ },
195
+ ],
196
+ properties: [
197
+ {
198
+ name: 'name',
199
+ layout: {
200
+ positions: {
201
+ lg: {
202
+ colSpan: 6,
203
+ },
204
+ },
205
+ },
206
+ },
207
+ {
208
+ name: 'title',
209
+ layout: {
210
+ positions: {
211
+ lg: {
212
+ colSpan: 6,
213
+ },
214
+ },
215
+ },
216
+ },
217
+ {
218
+ name: 'isArchived',
219
+ layout: {
220
+ positions: {
221
+ lg: {
222
+ colSpan: 12,
223
+ },
224
+ },
225
+ },
226
+ },
227
+ ],
228
+ },
229
+ single: {
230
+ title: '{{title}}',
231
+ sections: [
232
+ {
233
+ id: 'modules',
234
+ layout: {
235
+ positions: {
236
+ lg: {
237
+ colSpan: 12,
238
+ },
239
+ },
240
+ },
241
+ },
242
+ ],
243
+ properties: [
244
+ {
245
+ name: 'name',
246
+ layout: {
247
+ positions: {
248
+ lg: {
249
+ colSpan: 6,
250
+ },
251
+ },
252
+ },
253
+ },
254
+ {
255
+ name: 'title',
256
+ layout: {
257
+ positions: {
258
+ lg: {
259
+ colSpan: 6,
260
+ },
261
+ },
262
+ },
263
+ },
264
+ {
265
+ name: 'isArchived',
266
+ layout: {
267
+ positions: {
268
+ lg: {
269
+ colSpan: 12,
270
+ },
271
+ },
272
+ },
273
+ },
274
+ ],
275
+ actions: [],
276
+ },
277
+ list: {
278
+ actions: [
279
+ {
280
+ title: 'Create New',
281
+ command: 'create-entity',
282
+ priority: 'primary',
283
+ type: 'create',
284
+ scope: AXPEntityCommandScope.TypeLevel,
285
+ },
286
+ {
287
+ title: 'Delete Items',
288
+ command: 'delete-entity',
289
+ priority: 'primary',
290
+ type: 'delete',
291
+ scope: AXPEntityCommandScope.Selected,
292
+ },
293
+ {
294
+ title: 'Details',
295
+ command: 'open-entity',
296
+ priority: 'primary',
297
+ type: 'view',
298
+ scope: AXPEntityCommandScope.Individual,
299
+ },
300
+ {
301
+ title: 'Delete',
302
+ command: 'delete-entity',
303
+ priority: 'primary',
304
+ type: 'delete',
305
+ scope: AXPEntityCommandScope.Individual,
306
+ },
307
+ ],
308
+ views: [
309
+ {
310
+ name: 'all',
311
+ title: 'All Items',
312
+ fixed: true,
313
+ columns: [],
314
+ conditions: [],
315
+ sorts: [],
316
+ },
317
+ ],
318
+ },
319
+ },
320
+ },
321
+ };
322
+ return entityDef;
323
+ }
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlcy5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvYXBwbGljYXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2VudGl0aWVzL21vZHVsZXMuZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRixNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLFFBQWtCO0lBQzNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUVsRSxNQUFNLFNBQVMsR0FBYztRQUMzQixNQUFNLEVBQUUsd0JBQXdCO1FBQ2hDLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFLCtCQUErQjtRQUN2QyxLQUFLLEVBQUUsU0FBUztRQUNoQixPQUFPLEVBQUU7WUFDUCxVQUFVLEVBQUUsU0FBUztZQUNyQixNQUFNLEVBQUUsU0FBUztTQUNsQjtRQUNELGVBQWUsRUFBRTtZQUNmO2dCQUNFLE1BQU0sRUFBRSwrQkFBK0I7Z0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQztnQkFDeEQsVUFBVSxFQUFFO29CQUNWO3dCQUNFLElBQUksRUFBRSxXQUFXO3dCQUNqQixRQUFRLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLE9BQU87eUJBQ2Q7d0JBQ0QsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7YUFD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WTs0QkFDbkIsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFFBQVEsRUFBRSxTQUFTOzRCQUNuQixJQUFJLEVBQUUsUUFBUTs0QkFDZCxLQUFLLEVBQUUscUJBQXFCLENBQUMsU0FBUzt5QkFDdkM7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLGNBQWM7NEJBQ3JCLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixRQUFRLEVBQUUsU0FBUzs0QkFDbkIsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFFBQVE7eUJBQ3RDO3dCQUNEOzRCQUNFLEtBQUssRUFBRSxTQUFTOzRCQUNoQixPQUFPLEVBQUUsYUFBYTs0QkFDdEIsUUFBUSxFQUFFLFNBQVM7NEJBQ25CLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxVQUFVO3lCQUN4Qzt3QkFDRDs0QkFDRSxLQUFLLEVBQUUsUUFBUTs0QkFDZixPQUFPLEVBQUUsZUFBZTs0QkFDeEIsUUFBUSxFQUFFLFNBQVM7NEJBQ25CLElBQUksRUFBRSxRQUFROzRCQUNkLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxVQUFVO3lCQUN4QztxQkFDRjtvQkFDRCxLQUFLLEVBQUU7d0JBQ0w7NEJBQ0UsSUFBSSxFQUFFLEtBQUs7NEJBQ1gsS0FBSyxFQUFFLFdBQVc7NEJBQ2xCLEtBQUssRUFBRSxJQUFJOzRCQUNYLE9BQU8sRUFBRSxFQUFFOzRCQUNYLFVBQVUsRUFBRSxFQUFFOzRCQUNkLEtBQUssRUFBRSxFQUFFO3lCQUNWO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUM7SUFFRixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQRGF0YUdlbmVyYXRvciwgQVhQRW50aXR5LCBBWFBFbnRpdHlDb21tYW5kU2NvcGUsIEFYUEVudGl0eVF1ZXJ5VHlwZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IGFwcGx5RmlsdGVyQXJyYXksIGFwcGx5U29ydEFycmF5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFdpZGdldHNDYXRhbG9nIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlcic7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQXBwbGljYXRpb25NYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLW1hbmFnZW1lbnQuc2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtb2R1bGVzRW50aXR5RmFjdG9yeShpbmplY3RvcjogSW5qZWN0b3IpOiBQcm9taXNlPEFYUEVudGl0eSB8IG51bGw+IHtcbiAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQVhQQXBwbGljYXRpb25NYW5hZ2VtZW50U2VydmljZSk7XG5cbiAgY29uc3QgZW50aXR5RGVmOiBBWFBFbnRpdHkgPSB7XG4gICAgbW9kdWxlOiAnYXBwbGljYXRpb24tbWFuYWdlbWVudCcsXG4gICAgbmFtZTogJ21vZHVsZScsXG4gICAgc291cmNlOiAnYXBwbGljYXRpb24tbWFuYWdlbWVudC5tb2R1bGUnLFxuICAgIHRpdGxlOiAnTW9kdWxlcycsXG4gICAgZm9ybWF0czoge1xuICAgICAgaW5kaXZpZHVhbDogJ01vZHVsZXMnLFxuICAgICAgcGx1cmFsOiAnTW9kdWxlcycsXG4gICAgfSxcbiAgICByZWxhdGVkRW50aXRpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgZW50aXR5OiAnYXBwbGljYXRpb24tbWFuYWdlbWVudC5lbnRpdHknLFxuICAgICAgICBjb2x1bW5zOiBbJ21vZHVsZS50aXRsZScsICduYW1lJywgJ3RpdGxlJywgJ2lzQXJjaGl2ZWQnXSxcbiAgICAgICAgY29uZGl0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdtb2R1bGUuaWQnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VxdWFsJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZTogJ2lkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZW50aXR5OiAnYXBwbGljYXRpb24tbWFuYWdlbWVudC5mZWF0dXJlJyxcbiAgICAgICAgY29sdW1uczogWydtb2R1bGUudGl0bGUnLCAnbmFtZScsICd0aXRsZScsICdpc0FyY2hpdmVkJ10sXG4gICAgICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnbW9kdWxlLmlkJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6ICdpZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgZW50aXR5OiAnYXBwbGljYXRpb24tbWFuYWdlbWVudC5wZXJtaXNzaW9uJyxcbiAgICAgICAgY29sdW1uczogWydtb2R1bGUudGl0bGUnLCAnbmFtZScsICd0aXRsZScsICdpc0FyY2hpdmVkJ10sXG4gICAgICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnbW9kdWxlLmlkJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6ICdpZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBncm91cHM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdtb2R1bGVzJyxcbiAgICAgICAgdGl0bGU6ICdNb2R1bGVzJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgdGl0bGU6ICdOYW1lJyxcbiAgICAgICAgZ3JvdXBJZDogJ21vZHVsZXMnLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgaW50ZXJmYWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBBWFBXaWRnZXRzQ2F0YWxvZy50ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICAgICAgZ3JvdXBJZDogJ21vZHVsZXMnLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgaW50ZXJmYWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBBWFBXaWRnZXRzQ2F0YWxvZy50ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaXNBcmNoaXZlZCcsXG4gICAgICAgIHRpdGxlOiAnQXJjaGl2ZWQnLFxuICAgICAgICBncm91cElkOiAnbW9kdWxlcycsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgaW50ZXJmYWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBBWFBXaWRnZXRzQ2F0YWxvZy50b2dnbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb2x1bW5zOiBbeyBuYW1lOiAnbmFtZScgfSwgeyBuYW1lOiAndGl0bGUnIH0sIHsgbmFtZTogJ2lzQXJjaGl2ZWQnIH1dLFxuICAgIGNvbW1hbmRzOiB7XG4gICAgICBjcmVhdGU6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgeyBpZDogQVhQRGF0YUdlbmVyYXRvci51dWlkKCkgfSk7XG4gICAgICAgICAgZGF0YVNlcnZpY2UubW9kdWxlRGF0YVByb3ZpZGVyLmluc2VydE9uZShlbnRpdHkpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50aXR5KTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBkZWxldGU6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGlkOiBhbnkpID0+IHtcbiAgICAgICAgICBhd2FpdCBhd2FpdCBkYXRhU2VydmljZS5tb2R1bGVEYXRhUHJvdmlkZXIuZGVsZXRlT25lKGlkKTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBkYXRhU2VydmljZS5tb2R1bGVEYXRhUHJvdmlkZXIudXBkYXRlT25lKGRhdGEuaWQsIGRhdGEpO1xuICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcXVlcmllczoge1xuICAgICAgYnlLZXk6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBkYXRhU2VydmljZS5tb2R1bGVEYXRhUHJvdmlkZXIuZ2V0T25lKGlkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShlbnRpdHkpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogQVhQRW50aXR5UXVlcnlUeXBlLlNpbmdsZSxcbiAgICAgIH0sXG4gICAgICBsaXN0OiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgZGF0YVNlcnZpY2UubW9kdWxlRGF0YVByb3ZpZGVyLmdldEFsbCgpO1xuICAgICAgICAgIGNvbnN0IHNvcnRlZEl0ZW1zID0gYXBwbHlTb3J0QXJyYXkobGlzdCwgZS5zb3J0KTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gYXBwbHlGaWx0ZXJBcnJheShzb3J0ZWRJdGVtcywgZS5maWx0ZXIgPyBbZS5maWx0ZXJdIDogW10pO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgdG90YWw6IGZpbHRlcmVkSXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbXM6IGZpbHRlcmVkSXRlbXMuc2xpY2UoZS5za2lwLCAoZS5za2lwID8/IDApICsgKGUudGFrZSA/PyAwKSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IEFYUEVudGl0eVF1ZXJ5VHlwZS5MaXN0LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGludGVyZmFjZXM6IHtcbiAgICAgIG1hc3Rlcjoge1xuICAgICAgICBjcmVhdGU6IHtcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ21vZHVsZXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnaXNBcmNoaXZlZCcsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnYXBwbGljYXRpb24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnaXNBcmNoaXZlZCcsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmdsZToge1xuICAgICAgICAgIHRpdGxlOiAne3t0aXRsZX19JyxcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ21vZHVsZXMnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEyLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnaXNBcmNoaXZlZCcsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWN0aW9uczogW10sXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnQ3JlYXRlIE5ldycsXG4gICAgICAgICAgICAgIGNvbW1hbmQ6ICdjcmVhdGUtZW50aXR5JyxcbiAgICAgICAgICAgICAgcHJpb3JpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICAgIHNjb3BlOiBBWFBFbnRpdHlDb21tYW5kU2NvcGUuVHlwZUxldmVsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdEZWxldGUgSXRlbXMnLFxuICAgICAgICAgICAgICBjb21tYW5kOiAnZGVsZXRlLWVudGl0eScsXG4gICAgICAgICAgICAgIHByaW9yaXR5OiAncHJpbWFyeScsXG4gICAgICAgICAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgICBzY29wZTogQVhQRW50aXR5Q29tbWFuZFNjb3BlLlNlbGVjdGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdEZXRhaWxzJyxcbiAgICAgICAgICAgICAgY29tbWFuZDogJ29wZW4tZW50aXR5JyxcbiAgICAgICAgICAgICAgcHJpb3JpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgdHlwZTogJ3ZpZXcnLFxuICAgICAgICAgICAgICBzY29wZTogQVhQRW50aXR5Q29tbWFuZFNjb3BlLkluZGl2aWR1YWwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG4gICAgICAgICAgICAgIGNvbW1hbmQ6ICdkZWxldGUtZW50aXR5JyxcbiAgICAgICAgICAgICAgcHJpb3JpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgICAgICAgIHNjb3BlOiBBWFBFbnRpdHlDb21tYW5kU2NvcGUuSW5kaXZpZHVhbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICB2aWV3czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnYWxsJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdBbGwgSXRlbXMnLFxuICAgICAgICAgICAgICBmaXhlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29sdW1uczogW10sXG4gICAgICAgICAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgICAgICAgICAgICBzb3J0czogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIGVudGl0eURlZjtcbn1cbiJdfQ==
@@ -0,0 +1,284 @@
1
+ import { AXPDataGenerator, AXPEntityCommandScope, AXPEntityQueryType } from '@acorex/platform/common';
2
+ import { applyFilterArray, applySortArray } from '@acorex/platform/core';
3
+ import { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
4
+ import { AXPApplicationManagementService } from '../application-management.service';
5
+ export async function permissionEntityFactory(injector) {
6
+ const dataService = injector.get(AXPApplicationManagementService);
7
+ const entityDef = {
8
+ module: 'application-management',
9
+ name: 'permission',
10
+ source: 'application-management.permission',
11
+ title: 'Permissions',
12
+ formats: {
13
+ individual: 'Permission',
14
+ plural: 'Permissions',
15
+ },
16
+ relatedEntities: [],
17
+ groups: [
18
+ {
19
+ id: 'permission',
20
+ title: 'Permission',
21
+ },
22
+ ],
23
+ properties: [
24
+ {
25
+ name: 'name',
26
+ title: 'Name',
27
+ groupId: 'permission',
28
+ schema: {
29
+ dataType: 'string',
30
+ interface: {
31
+ type: AXPWidgetsCatalog.text,
32
+ },
33
+ },
34
+ },
35
+ {
36
+ name: 'title',
37
+ title: 'Title',
38
+ groupId: 'permission',
39
+ schema: {
40
+ dataType: 'string',
41
+ interface: {
42
+ type: AXPWidgetsCatalog.text,
43
+ },
44
+ },
45
+ },
46
+ {
47
+ name: 'isArchived',
48
+ title: 'Archived',
49
+ groupId: 'permission',
50
+ schema: {
51
+ dataType: 'boolean',
52
+ interface: {
53
+ type: AXPWidgetsCatalog.toggle,
54
+ },
55
+ },
56
+ },
57
+ ],
58
+ columns: [{ name: 'name' }, { name: 'title' }, { name: 'isArchived' }],
59
+ commands: {
60
+ create: {
61
+ execute: async (data) => {
62
+ const entity = Object.assign(data, { id: AXPDataGenerator.uuid() });
63
+ dataService.permissionDataProvider.insertOne(entity);
64
+ return Promise.resolve(entity);
65
+ },
66
+ },
67
+ delete: {
68
+ execute: async (id) => {
69
+ await await dataService.permissionDataProvider.deleteOne(id);
70
+ return Promise.resolve();
71
+ },
72
+ },
73
+ update: {
74
+ execute: async (data) => {
75
+ return new Promise((resolve) => {
76
+ setTimeout(async () => {
77
+ await dataService.permissionDataProvider.updateOne(data.id, data);
78
+ resolve(data);
79
+ }, 1000);
80
+ });
81
+ },
82
+ },
83
+ },
84
+ queries: {
85
+ byKey: {
86
+ execute: async (id) => {
87
+ return new Promise((resolve) => {
88
+ setTimeout(async () => {
89
+ const entity = await dataService.permissionDataProvider.getOne(id);
90
+ resolve(entity);
91
+ }, 500);
92
+ });
93
+ },
94
+ type: AXPEntityQueryType.Single,
95
+ },
96
+ list: {
97
+ execute: async (e) => {
98
+ const list = await dataService.permissionDataProvider.getAll();
99
+ const sortedItems = applySortArray(list, e.sort);
100
+ const filteredItems = applyFilterArray(sortedItems, e.filter ? [e.filter] : []);
101
+ return Promise.resolve({
102
+ total: filteredItems.length,
103
+ items: filteredItems.slice(e.skip, (e.skip ?? 0) + (e.take ?? 0)),
104
+ });
105
+ },
106
+ type: AXPEntityQueryType.List,
107
+ },
108
+ },
109
+ interfaces: {
110
+ master: {
111
+ create: {
112
+ sections: [
113
+ {
114
+ id: 'permission',
115
+ },
116
+ ],
117
+ properties: [
118
+ {
119
+ name: 'name',
120
+ layout: {
121
+ positions: {
122
+ lg: {
123
+ colSpan: 6,
124
+ },
125
+ },
126
+ },
127
+ },
128
+ {
129
+ name: 'title',
130
+ layout: {
131
+ positions: {
132
+ lg: {
133
+ colSpan: 6,
134
+ },
135
+ },
136
+ },
137
+ },
138
+ {
139
+ name: 'isArchived',
140
+ layout: {
141
+ positions: {
142
+ lg: {
143
+ colSpan: 12,
144
+ },
145
+ },
146
+ },
147
+ },
148
+ ],
149
+ },
150
+ update: {
151
+ sections: [
152
+ {
153
+ id: 'permission',
154
+ },
155
+ ],
156
+ properties: [
157
+ {
158
+ name: 'name',
159
+ layout: {
160
+ positions: {
161
+ lg: {
162
+ colSpan: 6,
163
+ },
164
+ },
165
+ },
166
+ },
167
+ {
168
+ name: 'title',
169
+ layout: {
170
+ positions: {
171
+ lg: {
172
+ colSpan: 6,
173
+ },
174
+ },
175
+ },
176
+ },
177
+ {
178
+ name: 'isArchived',
179
+ layout: {
180
+ positions: {
181
+ lg: {
182
+ colSpan: 12,
183
+ },
184
+ },
185
+ },
186
+ },
187
+ ],
188
+ },
189
+ single: {
190
+ title: '{{title}}',
191
+ sections: [
192
+ {
193
+ id: 'permission',
194
+ layout: {
195
+ positions: {
196
+ lg: {
197
+ colSpan: 12,
198
+ },
199
+ },
200
+ },
201
+ },
202
+ ],
203
+ properties: [
204
+ {
205
+ name: 'name',
206
+ layout: {
207
+ positions: {
208
+ lg: {
209
+ colSpan: 6,
210
+ },
211
+ },
212
+ },
213
+ },
214
+ {
215
+ name: 'title',
216
+ layout: {
217
+ positions: {
218
+ lg: {
219
+ colSpan: 6,
220
+ },
221
+ },
222
+ },
223
+ },
224
+ {
225
+ name: 'isArchived',
226
+ layout: {
227
+ positions: {
228
+ lg: {
229
+ colSpan: 12,
230
+ },
231
+ },
232
+ },
233
+ },
234
+ ],
235
+ actions: [],
236
+ },
237
+ list: {
238
+ actions: [
239
+ {
240
+ title: 'Create New',
241
+ command: 'create-entity',
242
+ priority: 'primary',
243
+ type: 'create',
244
+ scope: AXPEntityCommandScope.TypeLevel,
245
+ },
246
+ {
247
+ title: 'Delete Items',
248
+ command: 'delete-entity',
249
+ priority: 'primary',
250
+ type: 'delete',
251
+ scope: AXPEntityCommandScope.Selected,
252
+ },
253
+ {
254
+ title: 'Details',
255
+ command: 'open-entity',
256
+ priority: 'primary',
257
+ type: 'view',
258
+ scope: AXPEntityCommandScope.Individual,
259
+ },
260
+ {
261
+ title: 'Delete',
262
+ command: 'delete-entity',
263
+ priority: 'primary',
264
+ type: 'delete',
265
+ scope: AXPEntityCommandScope.Individual,
266
+ },
267
+ ],
268
+ views: [
269
+ {
270
+ name: 'all',
271
+ title: 'All Items',
272
+ fixed: true,
273
+ columns: [],
274
+ conditions: [],
275
+ sorts: [],
276
+ },
277
+ ],
278
+ },
279
+ },
280
+ },
281
+ };
282
+ return entityDef;
283
+ }
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvYXBwbGljYXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2VudGl0aWVzL3Blcm1pc3Npb24uZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRixNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUFDLFFBQWtCO0lBQzlELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUVsRSxNQUFNLFNBQVMsR0FBYztRQUMzQixNQUFNLEVBQUUsd0JBQXdCO1FBQ2hDLElBQUksRUFBRSxZQUFZO1FBQ2xCLE1BQU0sRUFBRSxtQ0FBbUM7UUFDM0MsS0FBSyxFQUFFLGFBQWE7UUFDcEIsT0FBTyxFQUFFO1lBQ1AsVUFBVSxFQUFFLFlBQVk7WUFDeEIsTUFBTSxFQUFFLGFBQWE7U0FDdEI7UUFDRCxlQUFlLEVBQUUsRUFBRTtRQUNuQixNQUFNLEVBQUU7WUFDTjtnQkFDRSxFQUFFLEVBQUUsWUFBWTtnQkFDaEIsS0FBSyxFQUFFLFlBQVk7YUFDcEI7U0FDRjtRQUNELFVBQVUsRUFBRTtZQUNWO2dCQUNFLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxNQUFNO2dCQUNiLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLFFBQVE7b0JBQ2xC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QUU7NEJBQ2QsS0FBSyxFQUFFLEVBQUU7eUJBQ1Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBEYXRhR2VuZXJhdG9yLCBBWFBFbnRpdHksIEFYUEVudGl0eUNvbW1hbmRTY29wZSwgQVhQRW50aXR5UXVlcnlUeXBlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJBcnJheSwgYXBwbHlTb3J0QXJyYXkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV2lkZ2V0c0NhdGFsb2cgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9idWlsZGVyJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBBcHBsaWNhdGlvbk1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwbGljYXRpb24tbWFuYWdlbWVudC5zZXJ2aWNlJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcm1pc3Npb25FbnRpdHlGYWN0b3J5KGluamVjdG9yOiBJbmplY3Rvcik6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICBjb25zdCBkYXRhU2VydmljZSA9IGluamVjdG9yLmdldChBWFBBcHBsaWNhdGlvbk1hbmFnZW1lbnRTZXJ2aWNlKTtcblxuICBjb25zdCBlbnRpdHlEZWY6IEFYUEVudGl0eSA9IHtcbiAgICBtb2R1bGU6ICdhcHBsaWNhdGlvbi1tYW5hZ2VtZW50JyxcbiAgICBuYW1lOiAncGVybWlzc2lvbicsXG4gICAgc291cmNlOiAnYXBwbGljYXRpb24tbWFuYWdlbWVudC5wZXJtaXNzaW9uJyxcbiAgICB0aXRsZTogJ1Blcm1pc3Npb25zJyxcbiAgICBmb3JtYXRzOiB7XG4gICAgICBpbmRpdmlkdWFsOiAnUGVybWlzc2lvbicsXG4gICAgICBwbHVyYWw6ICdQZXJtaXNzaW9ucycsXG4gICAgfSxcbiAgICByZWxhdGVkRW50aXRpZXM6IFtdLFxuICAgIGdyb3VwczogW1xuICAgICAge1xuICAgICAgICBpZDogJ3Blcm1pc3Npb24nLFxuICAgICAgICB0aXRsZTogJ1Blcm1pc3Npb24nLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICB0aXRsZTogJ05hbWUnLFxuICAgICAgICBncm91cElkOiAncGVybWlzc2lvbicsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgIHRpdGxlOiAnVGl0bGUnLFxuICAgICAgICBncm91cElkOiAncGVybWlzc2lvbicsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdpc0FyY2hpdmVkJyxcbiAgICAgICAgdGl0bGU6ICdBcmNoaXZlZCcsXG4gICAgICAgIGdyb3VwSWQ6ICdwZXJtaXNzaW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRvZ2dsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNvbHVtbnM6IFt7IG5hbWU6ICduYW1lJyB9LCB7IG5hbWU6ICd0aXRsZScgfSwgeyBuYW1lOiAnaXNBcmNoaXZlZCcgfV0sXG4gICAgY29tbWFuZHM6IHtcbiAgICAgIGNyZWF0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gT2JqZWN0LmFzc2lnbihkYXRhLCB7IGlkOiBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKSB9KTtcblxuICAgICAgICAgIGRhdGFTZXJ2aWNlLnBlcm1pc3Npb25EYXRhUHJvdmlkZXIuaW5zZXJ0T25lKGVudGl0eSk7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbnRpdHkpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRlbGV0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IGFueSkgPT4ge1xuICAgICAgICAgIGF3YWl0IGF3YWl0IGRhdGFTZXJ2aWNlLnBlcm1pc3Npb25EYXRhUHJvdmlkZXIuZGVsZXRlT25lKGlkKTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBkYXRhU2VydmljZS5wZXJtaXNzaW9uRGF0YVByb3ZpZGVyLnVwZGF0ZU9uZShkYXRhLmlkLCBkYXRhKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJpZXM6IHtcbiAgICAgIGJ5S2V5OiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYXdhaXQgZGF0YVNlcnZpY2UucGVybWlzc2lvbkRhdGFQcm92aWRlci5nZXRPbmUoaWQpO1xuICAgICAgICAgICAgICByZXNvbHZlKGVudGl0eSk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBBWFBFbnRpdHlRdWVyeVR5cGUuU2luZ2xlLFxuICAgICAgfSxcbiAgICAgIGxpc3Q6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGU6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBkYXRhU2VydmljZS5wZXJtaXNzaW9uRGF0YVByb3ZpZGVyLmdldEFsbCgpO1xuICAgICAgICAgIGNvbnN0IHNvcnRlZEl0ZW1zID0gYXBwbHlTb3J0QXJyYXkobGlzdCwgZS5zb3J0KTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gYXBwbHlGaWx0ZXJBcnJheShzb3J0ZWRJdGVtcywgZS5maWx0ZXIgPyBbZS5maWx0ZXJdIDogW10pO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgdG90YWw6IGZpbHRlcmVkSXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbXM6IGZpbHRlcmVkSXRlbXMuc2xpY2UoZS5za2lwLCAoZS5za2lwID8/IDApICsgKGUudGFrZSA/PyAwKSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IEFYUEVudGl0eVF1ZXJ5VHlwZS5MaXN0LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGludGVyZmFjZXM6IHtcbiAgICAgIG1hc3Rlcjoge1xuICAgICAgICBjcmVhdGU6IHtcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ3Blcm1pc3Npb24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnaXNBcmNoaXZlZCcsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAncGVybWlzc2lvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdpc0FyY2hpdmVkJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAxMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgc2luZ2xlOiB7XG4gICAgICAgICAgdGl0bGU6ICd7e3RpdGxlfX0nLFxuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAncGVybWlzc2lvbicsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdpc0FyY2hpdmVkJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAxMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhY3Rpb25zOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgbGlzdDoge1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdDcmVhdGUgTmV3JyxcbiAgICAgICAgICAgICAgY29tbWFuZDogJ2NyZWF0ZS1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgICAgc2NvcGU6IEFYUEVudGl0eUNvbW1hbmRTY29wZS5UeXBlTGV2ZWwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZSBJdGVtcycsXG4gICAgICAgICAgICAgIGNvbW1hbmQ6ICdkZWxldGUtZW50aXR5JyxcbiAgICAgICAgICAgICAgcHJpb3JpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgICAgICAgIHNjb3BlOiBBWFBFbnRpdHlDb21tYW5kU2NvcGUuU2VsZWN0ZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0RldGFpbHMnLFxuICAgICAgICAgICAgICBjb21tYW5kOiAnb3Blbi1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAndmlldycsXG4gICAgICAgICAgICAgIHNjb3BlOiBBWFBFbnRpdHlDb21tYW5kU2NvcGUuSW5kaXZpZHVhbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnRGVsZXRlJyxcbiAgICAgICAgICAgICAgY29tbWFuZDogJ2RlbGV0ZS1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgc2NvcGU6IEFYUEVudGl0eUNvbW1hbmRTY29wZS5JbmRpdmlkdWFsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZpZXdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgICB0aXRsZTogJ0FsbCBJdGVtcycsXG4gICAgICAgICAgICAgIGZpeGVkOiB0cnVlLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgICAgY29uZGl0aW9uczogW10sXG4gICAgICAgICAgICAgIHNvcnRzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZW50aXR5RGVmO1xufVxuIl19