@oktis-works/validation 0.5.5 → 0.6.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.
- package/dist/compatibility.d.ts +1 -1
- package/dist/compatibility.d.ts.map +1 -1
- package/dist/compatibility.js +1 -1
- package/dist/compatibility.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin-permissions.d.ts +20 -0
- package/dist/plugin-permissions.d.ts.map +1 -0
- package/dist/plugin-permissions.js +56 -0
- package/dist/plugin-permissions.js.map +1 -0
- package/package.json +1 -1
package/dist/compatibility.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export interface CompatibilityIssue {
|
|
|
11
11
|
message: string;
|
|
12
12
|
}
|
|
13
13
|
/** Versão do CMS contra a qual a compatibilidade é avaliada. */
|
|
14
|
-
export declare const CMS_VERSION = "0.
|
|
14
|
+
export declare const CMS_VERSION = "0.12.0";
|
|
15
15
|
/**
|
|
16
16
|
* Valida o manifesto de uma extensão (plugin|theme) contra a versão do CMS.
|
|
17
17
|
* BUSI-022: manifest deve conter name, version, type e compatibility.okcms;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,qBAAqB,GAAG,eAAe,GAAG,sBAAsB,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gEAAgE;AAChE,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,qBAAqB,GAAG,eAAe,GAAG,sBAAsB,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gEAAgE;AAChE,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,QAAQ,EAAE,qBAAqB,EAC/B,UAAU,GAAE,MAAoB,GAC/B,kBAAkB,EAAE,CAkCtB;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,QAAQ,EAAE,qBAAqB,EAC/B,UAAU,GAAE,MAAoB,GAC/B,IAAI,CAKN"}
|
package/dist/compatibility.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @oktis-works/validation - Extension Compatibility (BUSI-022 / RULE-semver-compatibility)
|
|
2
2
|
import { satisfies, validRange } from 'semver';
|
|
3
3
|
/** Versão do CMS contra a qual a compatibilidade é avaliada. */
|
|
4
|
-
export const CMS_VERSION = '0.
|
|
4
|
+
export const CMS_VERSION = '0.12.0';
|
|
5
5
|
/**
|
|
6
6
|
* Valida o manifesto de uma extensão (plugin|theme) contra a versão do CMS.
|
|
7
7
|
* BUSI-022: manifest deve conter name, version, type e compatibility.okcms;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAE3F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAc/C,gEAAgE;AAChE,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAE3F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAc/C,gEAAgE;AAChE,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAwB,EACxB,QAA+B,EAC/B,aAAqB,WAAW;IAEhC,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,aAAa,EAAE,CAAC,CAAC;IAC5H,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QACnG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAwB,CAAC;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAE3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,0DAA0D,EAAE,CAAC,CAAC;QAClH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,wDAAwD,KAAK,GAAG,EAAE,CAAC,CAAC;QAClH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,GAAG,IAAI,iBAAiB,KAAK,0BAA0B,UAAU,EAAE;SAC7E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAC9B,IAAwB,EACxB,QAA+B,EAC/B,aAAqB,WAAW;IAEhC,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,4 +10,6 @@ export { evaluateConditionalLogic, findConditionalIssues, isVisibleField } from
|
|
|
10
10
|
export type { ConditionalLogic, ConditionalRule, ConditionalGroup, ConditionOperator, } from './conditional.js';
|
|
11
11
|
export { expandCloneFields } from './clone.js';
|
|
12
12
|
export type { CloneDisplay } from './clone.js';
|
|
13
|
+
export { PLUGIN_PERMISSIONS, PLUGIN_PERMISSION_DEFAULT, isKnownPluginPermission, unknownPluginPermissions, resolvePluginPermissionPolicy, } from './plugin-permissions.js';
|
|
14
|
+
export type { PluginPermission, PermissionPolicy } from './plugin-permissions.js';
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnG,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnG,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,4 +9,5 @@ export { checkExtensionCompatibility, assertCompatible, CMS_VERSION, } from './c
|
|
|
9
9
|
export { validateFieldClient } from './client-validate.js';
|
|
10
10
|
export { evaluateConditionalLogic, findConditionalIssues, isVisibleField } from './conditional.js';
|
|
11
11
|
export { expandCloneFields } from './clone.js';
|
|
12
|
+
export { PLUGIN_PERMISSIONS, PLUGIN_PERMISSION_DEFAULT, isKnownPluginPermission, unknownPluginPermissions, resolvePluginPermissionPolicy, } from './plugin-permissions.js';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,uFAAuF;AAEvF,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,uFAAuF;AAEvF,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const PLUGIN_PERMISSIONS: readonly ["content:read", "content:write", "settings:read", "settings:write", "events:emit", "storage:read", "storage:write", "http:outbound", "db:query", "db:write", "routes:register", "admin:ui"];
|
|
2
|
+
export type PluginPermission = (typeof PLUGIN_PERMISSIONS)[number];
|
|
3
|
+
/** Política default: todo o catálogo é concedível (configuração pode restringir). */
|
|
4
|
+
export declare const PLUGIN_PERMISSION_DEFAULT: readonly string[];
|
|
5
|
+
export declare function isKnownPluginPermission(permission: string): permission is PluginPermission;
|
|
6
|
+
/** Permissões declaradas fora do catálogo (inválidas). */
|
|
7
|
+
export declare function unknownPluginPermissions(permissions: readonly unknown[]): string[];
|
|
8
|
+
export interface PermissionPolicy {
|
|
9
|
+
/** Allowlist concedida ao sandbox. */
|
|
10
|
+
allowed: string[];
|
|
11
|
+
/** Permissões pedidas fora do catálogo, descartadas da política. */
|
|
12
|
+
ignored: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolve a política a partir da configuração (`OKCMS_PLUGIN_PERMISSIONS`,
|
|
16
|
+
* lista separada por vírgula). Sem configuração → catálogo completo.
|
|
17
|
+
* Nome fora do catálogo é ignorado (e reportado), nunca concedido.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolvePluginPermissionPolicy(configured?: string | string[] | null): PermissionPolicy;
|
|
20
|
+
//# sourceMappingURL=plugin-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-permissions.d.ts","sourceRoot":"","sources":["../src/plugin-permissions.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,kBAAkB,uMAarB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAAuB,CAAC;AAE/E,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,IAAI,gBAAgB,CAE1F;AAED,0DAA0D;AAC1D,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,EAAE,CAIlF;AAED,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,gBAAgB,CAoBrG"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// @oktis-works/validation - Catálogo de permissões de plugin (WP5)
|
|
2
|
+
//
|
|
3
|
+
// Vocabulário único de permissões: o manifesto **declara** o que precisa e a
|
|
4
|
+
// configuração **concede** o que é permitido. O sandbox valida o manifesto
|
|
5
|
+
// contra a política concedida — nunca contra o próprio manifesto (isso seria
|
|
6
|
+
// aprovação garantida). Permissão fora do catálogo é rejeitada na
|
|
7
|
+
// instalação/sync (falhar cedo, não no boot).
|
|
8
|
+
export const PLUGIN_PERMISSIONS = [
|
|
9
|
+
'content:read',
|
|
10
|
+
'content:write',
|
|
11
|
+
'settings:read',
|
|
12
|
+
'settings:write',
|
|
13
|
+
'events:emit',
|
|
14
|
+
'storage:read',
|
|
15
|
+
'storage:write',
|
|
16
|
+
'http:outbound',
|
|
17
|
+
'db:query',
|
|
18
|
+
'db:write',
|
|
19
|
+
'routes:register',
|
|
20
|
+
'admin:ui',
|
|
21
|
+
];
|
|
22
|
+
/** Política default: todo o catálogo é concedível (configuração pode restringir). */
|
|
23
|
+
export const PLUGIN_PERMISSION_DEFAULT = PLUGIN_PERMISSIONS;
|
|
24
|
+
export function isKnownPluginPermission(permission) {
|
|
25
|
+
return PLUGIN_PERMISSIONS.includes(permission);
|
|
26
|
+
}
|
|
27
|
+
/** Permissões declaradas fora do catálogo (inválidas). */
|
|
28
|
+
export function unknownPluginPermissions(permissions) {
|
|
29
|
+
return permissions.filter((permission) => typeof permission === 'string' && !isKnownPluginPermission(permission));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve a política a partir da configuração (`OKCMS_PLUGIN_PERMISSIONS`,
|
|
33
|
+
* lista separada por vírgula). Sem configuração → catálogo completo.
|
|
34
|
+
* Nome fora do catálogo é ignorado (e reportado), nunca concedido.
|
|
35
|
+
*/
|
|
36
|
+
export function resolvePluginPermissionPolicy(configured) {
|
|
37
|
+
if (configured === undefined || configured === null || configured === '') {
|
|
38
|
+
return { allowed: [...PLUGIN_PERMISSION_DEFAULT], ignored: [] };
|
|
39
|
+
}
|
|
40
|
+
const entries = Array.isArray(configured)
|
|
41
|
+
? configured
|
|
42
|
+
: configured
|
|
43
|
+
.split(',')
|
|
44
|
+
.map((value) => value.trim())
|
|
45
|
+
.filter(Boolean);
|
|
46
|
+
const allowed = new Set();
|
|
47
|
+
const ignored = [];
|
|
48
|
+
for (const entry of entries) {
|
|
49
|
+
if (isKnownPluginPermission(entry))
|
|
50
|
+
allowed.add(entry);
|
|
51
|
+
else
|
|
52
|
+
ignored.push(entry);
|
|
53
|
+
}
|
|
54
|
+
return { allowed: [...allowed], ignored };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=plugin-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-permissions.js","sourceRoot":"","sources":["../src/plugin-permissions.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,kEAAkE;AAClE,8CAA8C;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,cAAc;IACd,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,eAAe;IACf,eAAe;IACf,UAAU;IACV,UAAU;IACV,iBAAiB;IACjB,UAAU;CACF,CAAC;AAIX,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAsB,kBAAkB,CAAC;AAE/E,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACxE,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,wBAAwB,CAAC,WAA+B;IACtE,OAAO,WAAW,CAAC,MAAM,CACvB,CAAC,UAAU,EAAwB,EAAE,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAC7G,CAAC;AACJ,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,UAAqC;IACjF,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,yBAAyB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QACvC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU;aACP,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,uBAAuB,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;YAClD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC"}
|