@appsemble/utils 0.19.4 → 0.19.8

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.
@@ -1,252 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.validateAppDefinition = exports.validateCronJobs = exports.validateDefaultPage = exports.validateLanguage = exports.validateReferences = exports.validateHooks = exports.validateSecurity = exports.checkBlocks = exports.AppsembleValidationError = void 0;
7
- const cron_parser_1 = require("cron-parser");
8
- const jsonschema_1 = require("jsonschema");
9
- const language_tags_1 = __importDefault(require("language-tags"));
10
- const getAppBlocks_1 = require("./getAppBlocks");
11
- const has_1 = require("./has");
12
- /**
13
- * Used for throwing known Appsemble validation errors.
14
- */
15
- class AppsembleValidationError extends Error {
16
- /**
17
- * @param message - The error message to show to the user.
18
- * @param data - Additional data that can be passed to convey additional info about the error.
19
- */
20
- constructor(message, data) {
21
- super(message);
22
- this.name = 'AppsembleValidationError';
23
- this.data = data;
24
- }
25
- }
26
- exports.AppsembleValidationError = AppsembleValidationError;
27
- function checkBlocks(blocks, blockVersions) {
28
- var _a, _b, _c, _d, _e, _f, _g, _h;
29
- const blockVersionMap = new Map();
30
- for (const version of blockVersions) {
31
- if (!blockVersionMap.has(version.name)) {
32
- blockVersionMap.set(version.name, new Map());
33
- }
34
- blockVersionMap.get(version.name).set(version.version, version);
35
- }
36
- const errors = {};
37
- for (const [loc, block] of Object.entries(blocks)) {
38
- const type = block.type.startsWith('@') ? block.type : `@appsemble/${block.type}`;
39
- const versions = blockVersionMap.get(type);
40
- if (!versions) {
41
- errors[loc] = `Unknown block type “${type}”`;
42
- continue;
43
- }
44
- if (!versions.has(block.version)) {
45
- errors[loc] = `Unknown block version “${type}@${block.version}”`;
46
- continue;
47
- }
48
- const actionParameters = new Set();
49
- const version = versions.get(block.version);
50
- if (version.parameters) {
51
- const validator = new jsonschema_1.Validator();
52
- validator.customFormats.fontawesome = () => true;
53
- validator.customFormats.remapper = () => true;
54
- validator.customFormats.action = (property) => {
55
- actionParameters.add(property);
56
- return has_1.has(block.actions, property);
57
- };
58
- validator.customFormats['event-listener'] = (property) => { var _a; return has_1.has((_a = block.events) === null || _a === void 0 ? void 0 : _a.listen, property); };
59
- validator.customFormats['event-emitter'] = (property) => { var _a; return has_1.has((_a = block.events) === null || _a === void 0 ? void 0 : _a.emit, property); };
60
- const result = validator.validate(block.parameters || {}, version.parameters);
61
- if (!result.valid) {
62
- for (const error of result.errors) {
63
- errors[`${loc}.parameters.${error.property.replace(/^instance\./, '')}`] = error.message;
64
- }
65
- continue;
66
- }
67
- }
68
- if (!version.actions && block.actions) {
69
- errors[`${loc}.actions`] = 'This block doesn’t support any actions';
70
- continue;
71
- }
72
- for (const key of Object.keys(block.actions || {})) {
73
- if (version.actions.$any) {
74
- if (actionParameters.has(key)) {
75
- continue;
76
- }
77
- if (!has_1.has(version.actions, key) && !version.wildcardActions) {
78
- errors[`${loc}.actions.${key}`] = `Custom action “${key}” is unused`;
79
- }
80
- }
81
- else if (!has_1.has(version.actions, key)) {
82
- errors[`${loc}.actions.${key}`] = 'Unknown action type';
83
- }
84
- }
85
- for (const key of Object.keys(((_a = block.events) === null || _a === void 0 ? void 0 : _a.emit) || {})) {
86
- if (!((_c = (_b = version.events) === null || _b === void 0 ? void 0 : _b.emit) === null || _c === void 0 ? void 0 : _c.$any) && !has_1.has((_d = version.events) === null || _d === void 0 ? void 0 : _d.emit, key)) {
87
- errors[`${loc}.events.emit.${key}`] = 'Unknown event emitter';
88
- }
89
- }
90
- for (const key of Object.keys(((_e = block.events) === null || _e === void 0 ? void 0 : _e.listen) || {})) {
91
- if (!((_g = (_f = version.events) === null || _f === void 0 ? void 0 : _f.listen) === null || _g === void 0 ? void 0 : _g.$any) && !has_1.has((_h = version.events) === null || _h === void 0 ? void 0 : _h.listen, key)) {
92
- errors[`${loc}.events.listen.${key}`] = 'Unknown event listener';
93
- }
94
- }
95
- }
96
- if (Object.keys(errors).length) {
97
- throw new AppsembleValidationError('Block validation failed', errors);
98
- }
99
- }
100
- exports.checkBlocks = checkBlocks;
101
- /**
102
- * Check if the security roles are valid.
103
- *
104
- * @param securityDefinition - The security definition to use for checking the role.
105
- * @param role - The role the user is checked against.
106
- * @param checkedRoles - Array containing the roles already checked.
107
- */
108
- function validateSecurityRoles(securityDefinition, role, checkedRoles = []) {
109
- if (checkedRoles.includes(role)) {
110
- throw new AppsembleValidationError(`Cyclic inheritance found for role ‘${role}’.`);
111
- }
112
- const securityRole = securityDefinition.roles[role];
113
- if (!securityRole) {
114
- throw new AppsembleValidationError(`Role ‘${role}’ not found in security definition.`);
115
- }
116
- if (securityRole.inherits) {
117
- checkedRoles.push(role);
118
- for (const inheritedRole of securityRole.inherits) {
119
- validateSecurityRoles(securityDefinition, inheritedRole, checkedRoles);
120
- }
121
- }
122
- }
123
- /**
124
- * Validates security-related definitions within the app definition.
125
- *
126
- * @param definition - The definition of the app
127
- */
128
- function validateSecurity(definition) {
129
- var _a, _b;
130
- const { pages, roles, security } = definition;
131
- if (!has_1.has(security.roles, security.default.role)) {
132
- throw new AppsembleValidationError(`Default role ‘${security.default.role}’ does not exist in list of roles.`);
133
- }
134
- for (const role of Object.keys(security.roles)) {
135
- validateSecurityRoles(security, role, []);
136
- }
137
- if (roles) {
138
- for (const role of roles) {
139
- if (!has_1.has(security.roles, role)) {
140
- throw new AppsembleValidationError(`Role ‘${role}’ in App roles does not exist.`);
141
- }
142
- }
143
- }
144
- for (const page of pages) {
145
- if ((_a = page.roles) === null || _a === void 0 ? void 0 : _a.length) {
146
- for (const role of page.roles) {
147
- if (!has_1.has(security.roles, role) &&
148
- role !== '$team:member' &&
149
- role !== '$team:manager' &&
150
- role !== '$public' &&
151
- role !== '$none') {
152
- throw new AppsembleValidationError(`Role ‘${role}’ in page ‘${page.name}’ roles does not exist.`);
153
- }
154
- }
155
- }
156
- }
157
- const blocks = getAppBlocks_1.getAppBlocks(definition);
158
- for (const [key, block] of Object.entries(blocks)) {
159
- if ((_b = block.roles) === null || _b === void 0 ? void 0 : _b.length) {
160
- for (const role of block.roles) {
161
- if (!has_1.has(security.roles, role) && role !== '$public' && role !== '$none') {
162
- throw new AppsembleValidationError(`Role ‘${role}’ in ${key} roles does not exist.`);
163
- }
164
- }
165
- }
166
- }
167
- }
168
- exports.validateSecurity = validateSecurity;
169
- /**
170
- * Validates the hooks in resource definition to ensure its properties are valid.
171
- *
172
- * @param {} definition - The definition of the app
173
- */
174
- function validateHooks(definition) {
175
- var _a;
176
- const filter = new Set(['create', 'update', 'delete']);
177
- for (const [resourceKey, resource] of Object.entries(definition.resources)) {
178
- for (const [actionKey, { hooks }] of Object.entries(resource)) {
179
- if (filter.has(actionKey) && ((_a = hooks === null || hooks === void 0 ? void 0 : hooks.notification) === null || _a === void 0 ? void 0 : _a.to)) {
180
- for (const to of hooks.notification.to) {
181
- if (to !== '$author' && !has_1.has(definition.security.roles, to)) {
182
- throw new AppsembleValidationError(`Role ‘${to}’ in resources.${resourceKey}.${actionKey}.hooks.notification.to does not exist.`);
183
- }
184
- }
185
- }
186
- }
187
- }
188
- }
189
- exports.validateHooks = validateHooks;
190
- function validateReferences(definition) {
191
- for (const [resourceType, resource] of Object.entries(definition.resources)) {
192
- if (resource.references) {
193
- for (const [field, reference] of Object.entries(resource.references)) {
194
- if (!definition.resources[reference.resource]) {
195
- throw new AppsembleValidationError(`Resource “${reference.resource}” referenced by “${resourceType}” does not exist.`);
196
- }
197
- if (!resource.schema.properties[field]) {
198
- throw new AppsembleValidationError(`Property “${field}” referencing “${reference.resource}” does not exist in resource “${resourceType}”`);
199
- }
200
- }
201
- }
202
- }
203
- }
204
- exports.validateReferences = validateReferences;
205
- function validateLanguage(language) {
206
- if (!language_tags_1.default.check(language)) {
207
- throw new AppsembleValidationError(`Language code “${language}” is invalid.`);
208
- }
209
- }
210
- exports.validateLanguage = validateLanguage;
211
- function validateDefaultPage({ defaultPage, pages }) {
212
- const page = pages.find((p) => p.name === defaultPage);
213
- if (!page) {
214
- throw new AppsembleValidationError(`Page “${defaultPage}” as specified in defaultPage does not exist.`);
215
- }
216
- if (page.parameters) {
217
- throw new AppsembleValidationError(`Default page “${defaultPage}” can not have page parameters.`);
218
- }
219
- }
220
- exports.validateDefaultPage = validateDefaultPage;
221
- function validateCronJobs({ cron }) {
222
- for (const [id, job] of Object.entries(cron)) {
223
- try {
224
- cron_parser_1.parseExpression(job.schedule);
225
- }
226
- catch {
227
- throw new AppsembleValidationError(`Cronjob ${id} contains an invalid expression: ${job.schedule}`);
228
- }
229
- }
230
- }
231
- exports.validateCronJobs = validateCronJobs;
232
- async function validateAppDefinition(definition, getBlockVersions) {
233
- validateDefaultPage(definition);
234
- const blocks = getAppBlocks_1.getAppBlocks(definition);
235
- const blockVersions = await getBlockVersions(blocks);
236
- if (definition.defaultLanguage) {
237
- validateLanguage(definition.defaultLanguage);
238
- }
239
- if (definition.security) {
240
- validateSecurity(definition);
241
- }
242
- if (definition.resources) {
243
- validateReferences(definition);
244
- validateHooks(definition);
245
- }
246
- if (definition.cron) {
247
- validateCronJobs(definition);
248
- }
249
- checkBlocks(blocks, blockVersions);
250
- }
251
- exports.validateAppDefinition = validateAppDefinition;
252
- //# sourceMappingURL=validateAppDefinition.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateAppDefinition.js","sourceRoot":"","sources":["../src/validateAppDefinition.ts"],"names":[],"mappings":";;;;;;AACA,6CAA8C;AAC9C,2CAAuC;AACvC,kEAAyC;AAGzC,iDAAwD;AACxD,+BAA4B;AAE5B;;GAEG;AACH,MAAa,wBAAyB,SAAQ,KAAK;IAGjD;;;OAGG;IACH,YAAY,OAAe,EAAE,IAAc;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAZD,4DAYC;AAED,SAAgB,WAAW,CAAC,MAAgB,EAAE,aAA8B;;IAC1E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsC,CAAC;IACtE,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE;QACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;SAC9C;QACD,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACjE;IACD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,IAAI,EAAE,CAAC;QAClF,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,CAAC,GAAG,CAAC,GAAG,uBAAuB,IAAI,GAAG,CAAC;YAC7C,SAAS;SACV;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YAChC,MAAM,CAAC,GAAG,CAAC,GAAG,0BAA0B,IAAI,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC;YACjE,SAAS;SACV;QAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,MAAM,SAAS,GAAG,IAAI,sBAAS,EAAE,CAAC;YAElC,SAAS,CAAC,aAAa,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;YACjD,SAAS,CAAC,aAAa,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;YAC9C,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC5C,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/B,OAAO,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACtC,CAAC,CAAC;YACF,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAC,OAAA,SAAG,CAAC,MAAA,KAAK,CAAC,MAAM,0CAAE,MAAM,EAAE,QAAQ,CAAC,CAAA,EAAA,CAAC;YAC9F,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAC,OAAA,SAAG,CAAC,MAAA,KAAK,CAAC,MAAM,0CAAE,IAAI,EAAE,QAAQ,CAAC,CAAA,EAAA,CAAC;YAC3F,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAC9E,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjC,MAAM,CAAC,GAAG,GAAG,eAAe,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;iBAC1F;gBACD,SAAS;aACV;SACF;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;YACrC,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,wCAAwC,CAAC;YACpE,SAAS;SACV;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;YAClD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;gBACxB,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAC7B,SAAS;iBACV;gBAED,IAAI,CAAC,SAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;oBAC1D,MAAM,CAAC,GAAG,GAAG,YAAY,GAAG,EAAE,CAAC,GAAG,kBAAkB,GAAG,aAAa,CAAC;iBACtE;aACF;iBAAM,IAAI,CAAC,SAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACrC,MAAM,CAAC,GAAG,GAAG,YAAY,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;aACzD;SACF;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,IAAI,KAAI,EAAE,CAAC,EAAE;YACvD,IAAI,CAAC,CAAA,MAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,IAAI,0CAAE,IAAI,CAAA,IAAI,CAAC,SAAG,CAAC,MAAA,OAAO,CAAC,MAAM,0CAAE,IAAI,EAAE,GAAG,CAAC,EAAE;gBAClE,MAAM,CAAC,GAAG,GAAG,gBAAgB,GAAG,EAAE,CAAC,GAAG,uBAAuB,CAAC;aAC/D;SACF;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,MAAM,KAAI,EAAE,CAAC,EAAE;YACzD,IAAI,CAAC,CAAA,MAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,MAAM,0CAAE,IAAI,CAAA,IAAI,CAAC,SAAG,CAAC,MAAA,OAAO,CAAC,MAAM,0CAAE,MAAM,EAAE,GAAG,CAAC,EAAE;gBACtE,MAAM,CAAC,GAAG,GAAG,kBAAkB,GAAG,EAAE,CAAC,GAAG,wBAAwB,CAAC;aAClE;SACF;KACF;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;QAC9B,MAAM,IAAI,wBAAwB,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;KACvE;AACH,CAAC;AA7ED,kCA6EC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,kBAA4B,EAC5B,IAAY,EACZ,eAAyB,EAAE;IAE3B,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QAC/B,MAAM,IAAI,wBAAwB,CAAC,sCAAsC,IAAI,IAAI,CAAC,CAAC;KACpF;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEpD,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,wBAAwB,CAAC,SAAS,IAAI,qCAAqC,CAAC,CAAC;KACxF;IAED,IAAI,YAAY,CAAC,QAAQ,EAAE;QACzB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,MAAM,aAAa,IAAI,YAAY,CAAC,QAAQ,EAAE;YACjD,qBAAqB,CAAC,kBAAkB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;SACxE;KACF;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,UAAyB;;IACxD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE9C,IAAI,CAAC,SAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC/C,MAAM,IAAI,wBAAwB,CAChC,iBAAiB,QAAQ,CAAC,OAAO,CAAC,IAAI,oCAAoC,CAC3E,CAAC;KACH;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC9C,qBAAqB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;KAC3C;IAED,IAAI,KAAK,EAAE;QACT,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,SAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;gBAC9B,MAAM,IAAI,wBAAwB,CAAC,SAAS,IAAI,gCAAgC,CAAC,CAAC;aACnF;SACF;KACF;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,EAAE;YACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC7B,IACE,CAAC,SAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;oBAC1B,IAAI,KAAK,cAAc;oBACvB,IAAI,KAAK,eAAe;oBACxB,IAAI,KAAK,SAAS;oBAClB,IAAI,KAAK,OAAO,EAChB;oBACA,MAAM,IAAI,wBAAwB,CAChC,SAAS,IAAI,cAAc,IAAI,CAAC,IAAI,yBAAyB,CAC9D,CAAC;iBACH;aACF;SACF;KACF;IAED,MAAM,MAAM,GAAG,2BAAY,CAAC,UAAU,CAAC,CAAC;IAExC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACjD,IAAI,MAAA,KAAK,CAAC,KAAK,0CAAE,MAAM,EAAE;YACvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;gBAC9B,IAAI,CAAC,SAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,EAAE;oBACxE,MAAM,IAAI,wBAAwB,CAAC,SAAS,IAAI,QAAQ,GAAG,wBAAwB,CAAC,CAAC;iBACtF;aACF;SACF;KACF;AACH,CAAC;AAlDD,4CAkDC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,UAAyB;;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC1E,KAAK,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC7D,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAI,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,0CAAE,EAAE,CAAA,EAAE;gBACpD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE;oBACtC,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,SAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE;wBAC3D,MAAM,IAAI,wBAAwB,CAChC,SAAS,EAAE,kBAAkB,WAAW,IAAI,SAAS,wCAAwC,CAC9F,CAAC;qBACH;iBACF;aACF;SACF;KACF;AACH,CAAC;AAfD,sCAeC;AAED,SAAgB,kBAAkB,CAAC,UAAyB;IAC1D,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC3E,IAAI,QAAQ,CAAC,UAAU,EAAE;YACvB,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACpE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;oBAC7C,MAAM,IAAI,wBAAwB,CAChC,aAAa,SAAS,CAAC,QAAQ,oBAAoB,YAAY,mBAAmB,CACnF,CAAC;iBACH;gBAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;oBACtC,MAAM,IAAI,wBAAwB,CAChC,aAAa,KAAK,kBAAkB,SAAS,CAAC,QAAQ,iCAAiC,YAAY,GAAG,CACvG,CAAC;iBACH;aACF;SACF;KACF;AACH,CAAC;AAlBD,gDAkBC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC,uBAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACjC,MAAM,IAAI,wBAAwB,CAAC,kBAAkB,QAAQ,eAAe,CAAC,CAAC;KAC/E;AACH,CAAC;AAJD,4CAIC;AAED,SAAgB,mBAAmB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAiB;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAEvD,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,wBAAwB,CAChC,SAAS,WAAW,+CAA+C,CACpE,CAAC;KACH;IAED,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,MAAM,IAAI,wBAAwB,CAChC,iBAAiB,WAAW,iCAAiC,CAC9D,CAAC;KACH;AACH,CAAC;AAdD,kDAcC;AAED,SAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAiB;IACtD,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC5C,IAAI;YACF,6BAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC/B;QAAC,MAAM;YACN,MAAM,IAAI,wBAAwB,CAChC,WAAW,EAAE,oCAAoC,GAAG,CAAC,QAAQ,EAAE,CAChE,CAAC;SACH;KACF;AACH,CAAC;AAVD,4CAUC;AAEM,KAAK,UAAU,qBAAqB,CACzC,UAAyB,EACzB,gBAAqE;IAErE,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,2BAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,UAAU,CAAC,eAAe,EAAE;QAC9B,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;KAC9C;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE;QACvB,gBAAgB,CAAC,UAAU,CAAC,CAAC;KAC9B;IAED,IAAI,UAAU,CAAC,SAAS,EAAE;QACxB,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/B,aAAa,CAAC,UAAU,CAAC,CAAC;KAC3B;IAED,IAAI,UAAU,CAAC,IAAI,EAAE;QACnB,gBAAgB,CAAC,UAAU,CAAC,CAAC;KAC9B;IAED,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACrC,CAAC;AA3BD,sDA2BC"}