@ketvietlab/ketjs 0.1.2 → 0.1.3
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/LICENSE +1 -1
- package/README.md +8 -2
- package/dist/agent/capabilities.d.ts +1 -3
- package/dist/agent/capabilities.d.ts.map +1 -1
- package/dist/agent/capabilities.js +10 -1
- package/dist/agent/capabilities.js.map +1 -1
- package/dist/agent/permissions.d.ts +43 -1
- package/dist/agent/permissions.d.ts.map +1 -1
- package/dist/agent/permissions.js +50 -2
- package/dist/agent/permissions.js.map +1 -1
- package/dist/cli.js +246 -97
- package/dist/cli.js.map +1 -1
- package/dist/codegen/dts.d.ts.map +1 -1
- package/dist/codegen/dts.js +1 -0
- package/dist/codegen/dts.js.map +1 -1
- package/dist/data/changeset.d.ts +12 -0
- package/dist/data/changeset.d.ts.map +1 -1
- package/dist/data/changeset.js +73 -17
- package/dist/data/changeset.js.map +1 -1
- package/dist/data/expr.d.ts +16 -0
- package/dist/data/expr.d.ts.map +1 -1
- package/dist/data/expr.js +33 -5
- package/dist/data/expr.js.map +1 -1
- package/dist/data/fleet.d.ts +41 -1
- package/dist/data/fleet.d.ts.map +1 -1
- package/dist/data/fleet.js +100 -11
- package/dist/data/fleet.js.map +1 -1
- package/dist/data/migrate.d.ts +20 -0
- package/dist/data/migrate.d.ts.map +1 -1
- package/dist/data/migrate.js +86 -3
- package/dist/data/migrate.js.map +1 -1
- package/dist/data/physical.d.ts +5 -0
- package/dist/data/physical.d.ts.map +1 -0
- package/dist/data/physical.js +196 -0
- package/dist/data/physical.js.map +1 -0
- package/dist/data/pool.d.ts +2 -1
- package/dist/data/pool.d.ts.map +1 -1
- package/dist/data/pool.js +159 -31
- package/dist/data/pool.js.map +1 -1
- package/dist/data/query.d.ts +10 -1
- package/dist/data/query.d.ts.map +1 -1
- package/dist/data/query.js +136 -27
- package/dist/data/query.js.map +1 -1
- package/dist/data/sqlite.d.ts.map +1 -1
- package/dist/data/sqlite.js +350 -52
- package/dist/data/sqlite.js.map +1 -1
- package/dist/data/time.d.ts +13 -0
- package/dist/data/time.d.ts.map +1 -1
- package/dist/data/time.js +61 -17
- package/dist/data/time.js.map +1 -1
- package/dist/index.d.ts +43 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -16
- package/dist/index.js.map +1 -1
- package/dist/kernel/audit.d.ts +27 -0
- package/dist/kernel/audit.d.ts.map +1 -0
- package/dist/kernel/audit.js +67 -0
- package/dist/kernel/audit.js.map +1 -0
- package/dist/kernel/classification.d.ts +26 -0
- package/dist/kernel/classification.d.ts.map +1 -0
- package/dist/kernel/classification.js +73 -0
- package/dist/kernel/classification.js.map +1 -0
- package/dist/kernel/compose.d.ts +6 -2
- package/dist/kernel/compose.d.ts.map +1 -1
- package/dist/kernel/compose.js +269 -15
- package/dist/kernel/compose.js.map +1 -1
- package/dist/kernel/define.d.ts +2 -3
- package/dist/kernel/define.d.ts.map +1 -1
- package/dist/kernel/define.js +22 -12
- package/dist/kernel/define.js.map +1 -1
- package/dist/kernel/diff.d.ts.map +1 -1
- package/dist/kernel/diff.js +28 -4
- package/dist/kernel/diff.js.map +1 -1
- package/dist/kernel/graph.js +1 -1
- package/dist/kernel/graph.js.map +1 -1
- package/dist/kernel/i18n.d.ts +10 -1
- package/dist/kernel/i18n.d.ts.map +1 -1
- package/dist/kernel/i18n.js +34 -1
- package/dist/kernel/i18n.js.map +1 -1
- package/dist/kernel/layout.d.ts +97 -0
- package/dist/kernel/layout.d.ts.map +1 -1
- package/dist/kernel/layout.js +294 -12
- package/dist/kernel/layout.js.map +1 -1
- package/dist/kernel/menu.d.ts +33 -2
- package/dist/kernel/menu.d.ts.map +1 -1
- package/dist/kernel/menu.js +99 -7
- package/dist/kernel/menu.js.map +1 -1
- package/dist/kernel/modules.d.ts +3 -3
- package/dist/kernel/modules.d.ts.map +1 -1
- package/dist/kernel/modules.js +21 -21
- package/dist/kernel/modules.js.map +1 -1
- package/dist/kernel/permissions.d.ts +10 -0
- package/dist/kernel/permissions.d.ts.map +1 -0
- package/dist/kernel/permissions.js +365 -0
- package/dist/kernel/permissions.js.map +1 -0
- package/dist/kernel/schedule.d.ts +23 -0
- package/dist/kernel/schedule.d.ts.map +1 -0
- package/dist/kernel/schedule.js +83 -0
- package/dist/kernel/schedule.js.map +1 -0
- package/dist/kernel/types.d.ts.map +1 -1
- package/dist/kernel/types.js +5 -4
- package/dist/kernel/types.js.map +1 -1
- package/dist/kernel/workspace.d.ts +92 -14
- package/dist/kernel/workspace.d.ts.map +1 -1
- package/dist/kernel/workspace.js +128 -49
- package/dist/kernel/workspace.js.map +1 -1
- package/dist/pdf/assets/Inter-Bold.ttf +0 -0
- package/dist/pdf/assets/Inter-Regular.ttf +0 -0
- package/dist/pdf/assets/Inter-SemiBold.ttf +0 -0
- package/dist/pdf/assets/LICENSE.txt +92 -0
- package/dist/pdf/font.d.ts +10 -0
- package/dist/pdf/font.d.ts.map +1 -0
- package/dist/pdf/font.js +83 -0
- package/dist/pdf/font.js.map +1 -0
- package/dist/pdf/image.d.ts +8 -0
- package/dist/pdf/image.d.ts.map +1 -0
- package/dist/pdf/image.js +94 -0
- package/dist/pdf/image.js.map +1 -0
- package/dist/pdf/index.d.ts +15 -0
- package/dist/pdf/index.d.ts.map +1 -0
- package/dist/pdf/index.js +17 -0
- package/dist/pdf/index.js.map +1 -0
- package/dist/pdf/markup.d.ts +19 -0
- package/dist/pdf/markup.d.ts.map +1 -0
- package/dist/pdf/markup.js +146 -0
- package/dist/pdf/markup.js.map +1 -0
- package/dist/pdf/render.d.ts +14 -0
- package/dist/pdf/render.d.ts.map +1 -0
- package/dist/pdf/render.js +387 -0
- package/dist/pdf/render.js.map +1 -0
- package/dist/scaffold/index.js +6 -6
- package/dist/scaffold/index.js.map +1 -1
- package/dist/scaffold/templates/{app.test.ts.tmpl → deployment.test.ts.tmpl} +3 -3
- package/dist/scaffold/templates/ket.workspace.ts.tmpl +4 -6
- package/dist/scaffold/templates/module.ts.tmpl +1 -4
- package/dist/server/assets.d.ts +23 -0
- package/dist/server/assets.d.ts.map +1 -0
- package/dist/server/assets.js +97 -0
- package/dist/server/assets.js.map +1 -0
- package/dist/server/boot.d.ts +157 -38
- package/dist/server/boot.d.ts.map +1 -1
- package/dist/server/boot.js +360 -138
- package/dist/server/boot.js.map +1 -1
- package/dist/server/config.d.ts +30 -10
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +73 -17
- package/dist/server/config.js.map +1 -1
- package/dist/server/ctx.d.ts +10 -0
- package/dist/server/ctx.d.ts.map +1 -1
- package/dist/server/ctx.js +266 -48
- package/dist/server/ctx.js.map +1 -1
- package/dist/server/development.d.ts +10 -0
- package/dist/server/development.d.ts.map +1 -0
- package/dist/server/development.js +15 -0
- package/dist/server/development.js.map +1 -0
- package/dist/server/fn.d.ts +22 -3
- package/dist/server/fn.d.ts.map +1 -1
- package/dist/server/fn.js +116 -32
- package/dist/server/fn.js.map +1 -1
- package/dist/server/form.d.ts +33 -0
- package/dist/server/form.d.ts.map +1 -0
- package/dist/server/form.js +47 -0
- package/dist/server/form.js.map +1 -0
- package/dist/server/http.d.ts +55 -3
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +306 -22
- package/dist/server/http.js.map +1 -1
- package/dist/server/idem.d.ts +3 -2
- package/dist/server/idem.d.ts.map +1 -1
- package/dist/server/idem.js +12 -4
- package/dist/server/idem.js.map +1 -1
- package/dist/server/jobs.js +1 -1
- package/dist/server/jobs.js.map +1 -1
- package/dist/server/log/combinators.d.ts +42 -0
- package/dist/server/log/combinators.d.ts.map +1 -0
- package/dist/server/log/combinators.js +270 -0
- package/dist/server/log/combinators.js.map +1 -0
- package/dist/server/log/console.d.ts +12 -0
- package/dist/server/log/console.d.ts.map +1 -0
- package/dist/server/log/console.js +96 -0
- package/dist/server/log/console.js.map +1 -0
- package/dist/server/log/file.d.ts +11 -0
- package/dist/server/log/file.d.ts.map +1 -0
- package/dist/server/log/file.js +61 -0
- package/dist/server/log/file.js.map +1 -0
- package/dist/server/log/index.d.ts +23 -0
- package/dist/server/log/index.d.ts.map +1 -0
- package/dist/server/log/index.js +45 -0
- package/dist/server/log/index.js.map +1 -0
- package/dist/server/log/logger.d.ts +53 -0
- package/dist/server/log/logger.d.ts.map +1 -0
- package/dist/server/log/logger.js +94 -0
- package/dist/server/log/logger.js.map +1 -0
- package/dist/server/log/memory.d.ts +11 -0
- package/dist/server/log/memory.d.ts.map +1 -0
- package/dist/server/log/memory.js +25 -0
- package/dist/server/log/memory.js.map +1 -0
- package/dist/server/log/types.d.ts +112 -0
- package/dist/server/log/types.d.ts.map +1 -0
- package/dist/server/log/types.js +58 -0
- package/dist/server/log/types.js.map +1 -0
- package/dist/server/policy.d.ts +29 -0
- package/dist/server/policy.d.ts.map +1 -0
- package/dist/server/policy.js +29 -0
- package/dist/server/policy.js.map +1 -0
- package/dist/server/queue.d.ts +1 -1
- package/dist/server/queue.d.ts.map +1 -1
- package/dist/server/queue.js.map +1 -1
- package/dist/server/ratelimit.d.ts +48 -0
- package/dist/server/ratelimit.d.ts.map +1 -0
- package/dist/server/ratelimit.js +102 -0
- package/dist/server/ratelimit.js.map +1 -0
- package/dist/server/respond.d.ts.map +1 -1
- package/dist/server/respond.js +16 -1
- package/dist/server/respond.js.map +1 -1
- package/dist/server/runtime.d.ts +18 -3
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/runtime.js +32 -2
- package/dist/server/runtime.js.map +1 -1
- package/dist/server/schedule.d.ts +18 -0
- package/dist/server/schedule.d.ts.map +1 -0
- package/dist/server/schedule.js +70 -0
- package/dist/server/schedule.js.map +1 -0
- package/dist/server/sequence.d.ts +42 -0
- package/dist/server/sequence.d.ts.map +1 -0
- package/dist/server/sequence.js +97 -0
- package/dist/server/sequence.js.map +1 -0
- package/dist/server/session.d.ts +21 -0
- package/dist/server/session.d.ts.map +1 -1
- package/dist/server/session.js +84 -10
- package/dist/server/session.js.map +1 -1
- package/dist/server/sessionstore.d.ts +3 -1
- package/dist/server/sessionstore.d.ts.map +1 -1
- package/dist/server/sessionstore.js +7 -3
- package/dist/server/sessionstore.js.map +1 -1
- package/dist/server/storage/index.d.ts +1 -1
- package/dist/server/storage/index.d.ts.map +1 -1
- package/dist/server/storage/index.js +61 -1
- package/dist/server/storage/index.js.map +1 -1
- package/dist/server/storage/types.d.ts +8 -0
- package/dist/server/storage/types.d.ts.map +1 -1
- package/dist/server/storage/types.js +58 -0
- package/dist/server/storage/types.js.map +1 -1
- package/dist/server/tenants.d.ts +20 -18
- package/dist/server/tenants.d.ts.map +1 -1
- package/dist/server/tenants.js +133 -84
- package/dist/server/tenants.js.map +1 -1
- package/dist/server/transport/types.js +2 -2
- package/dist/server/transport/types.js.map +1 -1
- package/dist/server/worker.d.ts +19 -3
- package/dist/server/worker.d.ts.map +1 -1
- package/dist/server/worker.js +168 -21
- package/dist/server/worker.js.map +1 -1
- package/dist/testing.d.ts +26 -10
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +41 -14
- package/dist/testing.js.map +1 -1
- package/dist/theme/contracts.d.ts +14 -1
- package/dist/theme/contracts.d.ts.map +1 -1
- package/dist/theme/contracts.js +35 -6
- package/dist/theme/contracts.js.map +1 -1
- package/dist/theme/index.d.ts +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/joint-runtime.d.ts +33 -0
- package/dist/theme/joint-runtime.d.ts.map +1 -0
- package/dist/theme/joint-runtime.js +121 -0
- package/dist/theme/joint-runtime.js.map +1 -0
- package/dist/theme/joints.d.ts.map +1 -1
- package/dist/theme/joints.js +15 -97
- package/dist/theme/joints.js.map +1 -1
- package/dist/theme/ktl/compile.d.ts +4 -0
- package/dist/theme/ktl/compile.d.ts.map +1 -1
- package/dist/theme/ktl/compile.js +54 -1
- package/dist/theme/ktl/compile.js.map +1 -1
- package/dist/theme/ktl/parser.d.ts +4 -0
- package/dist/theme/ktl/parser.d.ts.map +1 -1
- package/dist/theme/ktl/parser.js +8 -0
- package/dist/theme/ktl/parser.js.map +1 -1
- package/dist/theme/render.d.ts +8 -0
- package/dist/theme/render.d.ts.map +1 -1
- package/dist/theme/render.js +88 -118
- package/dist/theme/render.js.map +1 -1
- package/dist/theme/tokens.d.ts +6 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +6 -0
- package/dist/theme/tokens.js.map +1 -1
- package/dist/theme/viewmodel.d.ts +24 -0
- package/dist/theme/viewmodel.d.ts.map +1 -1
- package/dist/theme/viewmodel.js +75 -6
- package/dist/theme/viewmodel.js.map +1 -1
- package/dist/types.d.ts +304 -56
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -2
- package/dist/kernel/apps.d.ts +0 -43
- package/dist/kernel/apps.d.ts.map +0 -1
- package/dist/kernel/apps.js +0 -234
- package/dist/kernel/apps.js.map +0 -1
package/dist/kernel/layout.d.ts
CHANGED
|
@@ -2,16 +2,113 @@ import type { Manifest } from '../types.ts';
|
|
|
2
2
|
export type Placement = {
|
|
3
3
|
type: string;
|
|
4
4
|
settings?: Record<string, unknown>;
|
|
5
|
+
/**
|
|
6
|
+
* Stable identity, assigned on save. Optional on the way in - a caller may
|
|
7
|
+
* omit it and be given one - and present on everything that has been stored.
|
|
8
|
+
*/
|
|
9
|
+
id?: string;
|
|
10
|
+
/** Sections this one holds, by the slot name its type declares. */
|
|
11
|
+
slots?: Record<string, Placement[]>;
|
|
5
12
|
};
|
|
6
13
|
export type LayoutError = {
|
|
14
|
+
/** Index within the parent's list. Kept for callers written before nesting. */
|
|
7
15
|
at: number;
|
|
8
16
|
type: string;
|
|
9
17
|
field?: string;
|
|
18
|
+
/** Where in the tree, as `index.slot.index`. Absent at the top level. */
|
|
19
|
+
path?: string;
|
|
10
20
|
message: string;
|
|
11
21
|
};
|
|
22
|
+
/** A page is a page, not a filesystem: deep enough for real work, and bounded. */
|
|
23
|
+
export declare const MAX_LAYOUT_DEPTH = 6;
|
|
24
|
+
/**
|
|
25
|
+
* Nodes in the whole tree, not placements at the top.
|
|
26
|
+
*
|
|
27
|
+
* The old ceiling was a hundred top-level placements. Counting the tree instead
|
|
28
|
+
* keeps the same number honest: without it, a hundred containers each holding a
|
|
29
|
+
* hundred children would pass a check that was written to bound a page.
|
|
30
|
+
*/
|
|
31
|
+
export declare const MAX_LAYOUT_NODES = 100;
|
|
32
|
+
/** Every placement in the tree, parents before children. */
|
|
33
|
+
export declare const walkPlacements: (layout: readonly Placement[], path?: string) => Generator<{
|
|
34
|
+
placement: Placement;
|
|
35
|
+
at: number;
|
|
36
|
+
path: string;
|
|
37
|
+
}>;
|
|
38
|
+
export declare const countPlacements: (layout: readonly Placement[]) => number;
|
|
12
39
|
export declare function validateLayout(manifest: Manifest, layout: unknown): {
|
|
13
40
|
ok: boolean;
|
|
14
41
|
errors: LayoutError[];
|
|
15
42
|
};
|
|
16
43
|
export declare const formatLayoutErrors: (errors: LayoutError[]) => string;
|
|
44
|
+
/** A placement id is opaque, but it has to survive a round trip through JSON. */
|
|
45
|
+
export declare const isPlacementId: (value: unknown) => value is string;
|
|
46
|
+
export type IdentifiedPlacement = Placement & {
|
|
47
|
+
id: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Give every placement in the tree an id, deriving one only where none exists.
|
|
51
|
+
*
|
|
52
|
+
* Derived from the content, not the position, and disambiguated by how many
|
|
53
|
+
* identical placements came before it. Deriving from the index instead would
|
|
54
|
+
* mean that the first save after a reorder - the one that turns legacy content
|
|
55
|
+
* into identified content - renamed everything it touched, which is precisely
|
|
56
|
+
* the case the id exists to distinguish.
|
|
57
|
+
*
|
|
58
|
+
* A subtree is part of what a container says, so the derivation walks children
|
|
59
|
+
* first and folds their ids in: two containers holding different things are
|
|
60
|
+
* different containers, even when their own settings match.
|
|
61
|
+
*
|
|
62
|
+
* An id already present is never replaced, so identity survives every later
|
|
63
|
+
* save regardless of what this function would have derived.
|
|
64
|
+
*/
|
|
65
|
+
export declare const withPlacementIds: (layout: readonly Placement[], digest: (input: string) => string, seen?: Map<string, number>) => IdentifiedPlacement[];
|
|
66
|
+
/** Ids a layout cannot have: malformed, or the same one twice anywhere in it. */
|
|
67
|
+
export declare const placementIdErrors: (layout: readonly Placement[]) => LayoutError[];
|
|
68
|
+
export type PlacementChange = {
|
|
69
|
+
id: string;
|
|
70
|
+
type: string;
|
|
71
|
+
change: 'added';
|
|
72
|
+
at: number;
|
|
73
|
+
path: string;
|
|
74
|
+
} | {
|
|
75
|
+
id: string;
|
|
76
|
+
type: string;
|
|
77
|
+
change: 'removed';
|
|
78
|
+
at: number;
|
|
79
|
+
path: string;
|
|
80
|
+
} | {
|
|
81
|
+
id: string;
|
|
82
|
+
type: string;
|
|
83
|
+
change: 'moved';
|
|
84
|
+
from: string;
|
|
85
|
+
at: number;
|
|
86
|
+
path: string;
|
|
87
|
+
} | {
|
|
88
|
+
id: string;
|
|
89
|
+
type: string;
|
|
90
|
+
change: 'settings';
|
|
91
|
+
at: number;
|
|
92
|
+
path: string;
|
|
93
|
+
fields: string[];
|
|
94
|
+
} | {
|
|
95
|
+
id: string;
|
|
96
|
+
type: string;
|
|
97
|
+
change: 'retyped';
|
|
98
|
+
at: number;
|
|
99
|
+
path: string;
|
|
100
|
+
from: string;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* What changed between two layouts, said per placement rather than per index.
|
|
104
|
+
*
|
|
105
|
+
* The walk is the whole tree, so a setting changed six levels down is reported
|
|
106
|
+
* on the node that changed. Comparing only the top level would have folded a
|
|
107
|
+
* subtree edit into "the container's settings are the same" and said nothing.
|
|
108
|
+
*
|
|
109
|
+
* Only placements carrying ids can be compared this way. Anything without one
|
|
110
|
+
* is reported as removed and added, which is the truthful answer: with no id
|
|
111
|
+
* there is no evidence the two are the same section.
|
|
112
|
+
*/
|
|
113
|
+
export declare const diffPlacements: (before: readonly Placement[], after: readonly Placement[]) => PlacementChange[];
|
|
17
114
|
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/kernel/layout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/kernel/layout.ts"],"names":[],"mappings":"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"}
|
package/dist/kernel/layout.js
CHANGED
|
@@ -2,10 +2,21 @@
|
|
|
2
2
|
//
|
|
3
3
|
// This is the payoff for making sections data rather than code: what an agent
|
|
4
4
|
// writes can be checked before it is stored, against the same declaration the
|
|
5
|
-
// theme renders from. A bad section type, a missing required setting,
|
|
6
|
-
// of the wrong shape
|
|
7
|
-
// a list is what an agent can
|
|
5
|
+
// theme renders from. A bad section type, a missing required setting, a setting
|
|
6
|
+
// of the wrong shape, a child in a slot that does not accept it - all caught
|
|
7
|
+
// here, as a list rather than an exception, because a list is what an agent can
|
|
8
|
+
// act on.
|
|
8
9
|
import { isDateText, parseType } from './types.js';
|
|
10
|
+
/** A page is a page, not a filesystem: deep enough for real work, and bounded. */
|
|
11
|
+
export const MAX_LAYOUT_DEPTH = 6;
|
|
12
|
+
/**
|
|
13
|
+
* Nodes in the whole tree, not placements at the top.
|
|
14
|
+
*
|
|
15
|
+
* The old ceiling was a hundred top-level placements. Counting the tree instead
|
|
16
|
+
* keeps the same number honest: without it, a hundred containers each holding a
|
|
17
|
+
* hundred children would pass a check that was written to bound a page.
|
|
18
|
+
*/
|
|
19
|
+
export const MAX_LAYOUT_NODES = 100;
|
|
9
20
|
const JS_OF = {
|
|
10
21
|
id: 'string',
|
|
11
22
|
text: 'string',
|
|
@@ -17,18 +28,55 @@ const JS_OF = {
|
|
|
17
28
|
datetime: 'string',
|
|
18
29
|
json: 'object',
|
|
19
30
|
};
|
|
31
|
+
const slotsOf = (placement) => {
|
|
32
|
+
const slots = placement.slots;
|
|
33
|
+
if (!slots || typeof slots !== 'object' || Array.isArray(slots))
|
|
34
|
+
return [];
|
|
35
|
+
return Object.entries(slots).map(([name, children]) => [name, Array.isArray(children) ? children : []]);
|
|
36
|
+
};
|
|
37
|
+
/** Every placement in the tree, parents before children. */
|
|
38
|
+
export const walkPlacements = function* (layout, path = '') {
|
|
39
|
+
for (let at = 0; at < layout.length; at += 1) {
|
|
40
|
+
const placement = layout[at];
|
|
41
|
+
const here = path ? `${path}.${at}` : String(at);
|
|
42
|
+
yield { placement, at, path: here };
|
|
43
|
+
if (!placement || typeof placement !== 'object')
|
|
44
|
+
continue;
|
|
45
|
+
for (const [slot, children] of slotsOf(placement))
|
|
46
|
+
yield* walkPlacements(children, `${here}.${slot}`);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
export const countPlacements = (layout) => {
|
|
50
|
+
let total = 0;
|
|
51
|
+
for (const _ of walkPlacements(layout))
|
|
52
|
+
total += 1;
|
|
53
|
+
return total;
|
|
54
|
+
};
|
|
20
55
|
export function validateLayout(manifest, layout) {
|
|
21
|
-
const errors = [];
|
|
22
56
|
if (!Array.isArray(layout)) {
|
|
23
57
|
return {
|
|
24
58
|
ok: false,
|
|
25
59
|
errors: [{ at: -1, type: '(layout)', message: 'a layout must be an array of section placements' }],
|
|
26
60
|
};
|
|
27
61
|
}
|
|
62
|
+
const errors = [];
|
|
63
|
+
const nodes = countPlacements(layout);
|
|
64
|
+
if (nodes > MAX_LAYOUT_NODES)
|
|
65
|
+
errors.push({
|
|
66
|
+
at: -1,
|
|
67
|
+
type: '(layout)',
|
|
68
|
+
message: `holds ${nodes} sections, and a page may hold ${MAX_LAYOUT_NODES}`,
|
|
69
|
+
});
|
|
70
|
+
validateInto(manifest, layout, errors, '', 1);
|
|
71
|
+
return { ok: errors.length === 0, errors };
|
|
72
|
+
}
|
|
73
|
+
const validateInto = (manifest, layout, errors, path, depth) => {
|
|
28
74
|
layout.forEach((raw, at) => {
|
|
75
|
+
const here = path ? `${path}.${at}` : String(at);
|
|
76
|
+
const nested = path ? { path: here } : {};
|
|
29
77
|
const placement = raw;
|
|
30
78
|
if (!placement || typeof placement.type !== 'string') {
|
|
31
|
-
errors.push({ at, type: '(unknown)', message: 'each placement needs a "type"' });
|
|
79
|
+
errors.push({ at, type: '(unknown)', ...nested, message: 'each placement needs a "type"' });
|
|
32
80
|
return;
|
|
33
81
|
}
|
|
34
82
|
const section = manifest.sections[placement.type];
|
|
@@ -36,7 +84,8 @@ export function validateLayout(manifest, layout) {
|
|
|
36
84
|
errors.push({
|
|
37
85
|
at,
|
|
38
86
|
type: placement.type,
|
|
39
|
-
|
|
87
|
+
...nested,
|
|
88
|
+
message: `no composed module provides this section (available: ${Object.keys(manifest.sections).join(', ') || 'none'})`,
|
|
40
89
|
});
|
|
41
90
|
return;
|
|
42
91
|
}
|
|
@@ -47,17 +96,29 @@ export function validateLayout(manifest, layout) {
|
|
|
47
96
|
const value = settings[field];
|
|
48
97
|
if (value == null) {
|
|
49
98
|
if (t.ok && !t.optional)
|
|
50
|
-
errors.push({ at, type: placement.type, field, message: `is required (${spec})` });
|
|
99
|
+
errors.push({ at, type: placement.type, field, ...nested, message: `is required (${spec})` });
|
|
51
100
|
continue;
|
|
52
101
|
}
|
|
53
102
|
if (!t.ok)
|
|
54
103
|
continue;
|
|
55
104
|
const want = JS_OF[t.base];
|
|
56
105
|
if (want && typeof value !== want) {
|
|
57
|
-
errors.push({
|
|
106
|
+
errors.push({
|
|
107
|
+
at,
|
|
108
|
+
type: placement.type,
|
|
109
|
+
field,
|
|
110
|
+
...nested,
|
|
111
|
+
message: `expects ${t.base}, got ${typeof value}`,
|
|
112
|
+
});
|
|
58
113
|
}
|
|
59
114
|
else if (t.base === 'date' && !isDateText(value)) {
|
|
60
|
-
errors.push({
|
|
115
|
+
errors.push({
|
|
116
|
+
at,
|
|
117
|
+
type: placement.type,
|
|
118
|
+
field,
|
|
119
|
+
...nested,
|
|
120
|
+
message: 'expects date in YYYY-MM-DD format',
|
|
121
|
+
});
|
|
61
122
|
}
|
|
62
123
|
}
|
|
63
124
|
for (const field of Object.keys(settings)) {
|
|
@@ -66,12 +127,233 @@ export function validateLayout(manifest, layout) {
|
|
|
66
127
|
at,
|
|
67
128
|
type: placement.type,
|
|
68
129
|
field,
|
|
130
|
+
...nested,
|
|
69
131
|
message: `is not a setting of this section (accepted: ${Object.keys(schema).join(', ') || 'none'})`,
|
|
70
132
|
});
|
|
71
133
|
}
|
|
72
134
|
}
|
|
135
|
+
validateSlots(manifest, placement, section.slots ?? {}, errors, at, here, depth);
|
|
73
136
|
});
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
137
|
+
};
|
|
138
|
+
const validateSlots = (manifest, placement, declared, errors, at, here, depth) => {
|
|
139
|
+
for (const [slot, children] of slotsOf(placement)) {
|
|
140
|
+
const rule = declared[slot];
|
|
141
|
+
if (!rule) {
|
|
142
|
+
// A section that declares no slot for this name cannot hold anything
|
|
143
|
+
// under it. Silently dropping the children would lose an author's work
|
|
144
|
+
// between the save and the render.
|
|
145
|
+
errors.push({
|
|
146
|
+
at,
|
|
147
|
+
type: placement.type,
|
|
148
|
+
field: slot,
|
|
149
|
+
path: `${here}.${slot}`,
|
|
150
|
+
message: `is not a slot of this section (accepted: ${Object.keys(declared).join(', ') || 'none'})`,
|
|
151
|
+
});
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (depth >= MAX_LAYOUT_DEPTH && children.length) {
|
|
155
|
+
errors.push({
|
|
156
|
+
at,
|
|
157
|
+
type: placement.type,
|
|
158
|
+
field: slot,
|
|
159
|
+
path: `${here}.${slot}`,
|
|
160
|
+
message: `nests deeper than ${MAX_LAYOUT_DEPTH} levels`,
|
|
161
|
+
});
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (rule.max != null && children.length > rule.max) {
|
|
165
|
+
errors.push({
|
|
166
|
+
at,
|
|
167
|
+
type: placement.type,
|
|
168
|
+
field: slot,
|
|
169
|
+
path: `${here}.${slot}`,
|
|
170
|
+
message: `holds ${children.length} sections, and this slot takes ${rule.max}`,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
if (rule.accepts) {
|
|
174
|
+
const allowed = new Set(rule.accepts);
|
|
175
|
+
children.forEach((child, childAt) => {
|
|
176
|
+
const type = child?.type;
|
|
177
|
+
if (typeof type === 'string' && !allowed.has(type))
|
|
178
|
+
errors.push({
|
|
179
|
+
at: childAt,
|
|
180
|
+
type,
|
|
181
|
+
path: `${here}.${slot}.${childAt}`,
|
|
182
|
+
message: `is not accepted by slot "${slot}" (accepted: ${rule.accepts?.join(', ')})`,
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
validateInto(manifest, children, errors, `${here}.${slot}`, depth + 1);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
export const formatLayoutErrors = (errors) => errors.map((e) => ` [${e.path ?? e.at}] ${e.type}${e.field ? '.' + e.field : ''} ${e.message}`).join('\n');
|
|
190
|
+
// ---------------------------------------------------------------------------
|
|
191
|
+
// Placement identity
|
|
192
|
+
//
|
|
193
|
+
// A layout used to be an ordered array and nothing else, so a saved revision
|
|
194
|
+
// could not say whether a section had moved or had been deleted and a new one
|
|
195
|
+
// added in its place. Everything an editor needs downstream - undo, a diff
|
|
196
|
+
// between two revisions, a conflict that says what conflicted - rests on being
|
|
197
|
+
// able to answer that, and none of it can be recovered from position alone.
|
|
198
|
+
//
|
|
199
|
+
// The id lives beside `type` rather than inside `settings`: it is not something
|
|
200
|
+
// a section declares or a theme renders, and putting it in `settings` would
|
|
201
|
+
// make it collide with a real setting and fail validation.
|
|
202
|
+
/** How long a derived id is. Long enough not to collide, short enough to read. */
|
|
203
|
+
const DERIVED_ID_LENGTH = 16;
|
|
204
|
+
const canonical = (value) => {
|
|
205
|
+
if (value === null || typeof value !== 'object')
|
|
206
|
+
return JSON.stringify(value) ?? 'null';
|
|
207
|
+
if (Array.isArray(value))
|
|
208
|
+
return `[${value.map(canonical).join(',')}]`;
|
|
209
|
+
const entries = Object.entries(value)
|
|
210
|
+
.filter(([, v]) => v !== undefined)
|
|
211
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
212
|
+
return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonical(v)}`).join(',')}}`;
|
|
213
|
+
};
|
|
214
|
+
/** A placement id is opaque, but it has to survive a round trip through JSON. */
|
|
215
|
+
export const isPlacementId = (value) => typeof value === 'string' && /^[A-Za-z0-9_-]{8,64}$/.test(value);
|
|
216
|
+
/**
|
|
217
|
+
* Give every placement in the tree an id, deriving one only where none exists.
|
|
218
|
+
*
|
|
219
|
+
* Derived from the content, not the position, and disambiguated by how many
|
|
220
|
+
* identical placements came before it. Deriving from the index instead would
|
|
221
|
+
* mean that the first save after a reorder - the one that turns legacy content
|
|
222
|
+
* into identified content - renamed everything it touched, which is precisely
|
|
223
|
+
* the case the id exists to distinguish.
|
|
224
|
+
*
|
|
225
|
+
* A subtree is part of what a container says, so the derivation walks children
|
|
226
|
+
* first and folds their ids in: two containers holding different things are
|
|
227
|
+
* different containers, even when their own settings match.
|
|
228
|
+
*
|
|
229
|
+
* An id already present is never replaced, so identity survives every later
|
|
230
|
+
* save regardless of what this function would have derived.
|
|
231
|
+
*/
|
|
232
|
+
export const withPlacementIds = (layout, digest, seen = new Map()) => layout.map((placement) => {
|
|
233
|
+
const slots = slotsOf(placement);
|
|
234
|
+
const identified = {};
|
|
235
|
+
for (const [slot, children] of slots)
|
|
236
|
+
identified[slot] = withPlacementIds(children, digest, seen);
|
|
237
|
+
const withSlots = slots.length ? { ...placement, slots: identified } : { ...placement };
|
|
238
|
+
const existing = placement.id;
|
|
239
|
+
if (isPlacementId(existing))
|
|
240
|
+
return { ...withSlots, id: existing };
|
|
241
|
+
const childIds = slots.flatMap(([slot, _]) => (identified[slot] ?? []).map((child) => `${slot}:${child.id}`));
|
|
242
|
+
const fingerprint = `${placement.type} ${canonical(placement.settings ?? {})} ${childIds.join(',')}`;
|
|
243
|
+
const ordinal = seen.get(fingerprint) ?? 0;
|
|
244
|
+
seen.set(fingerprint, ordinal + 1);
|
|
245
|
+
return { ...withSlots, id: digest(`${fingerprint} ${ordinal}`).slice(0, DERIVED_ID_LENGTH) };
|
|
246
|
+
});
|
|
247
|
+
/** Ids a layout cannot have: malformed, or the same one twice anywhere in it. */
|
|
248
|
+
export const placementIdErrors = (layout) => {
|
|
249
|
+
const errors = [];
|
|
250
|
+
const seen = new Set();
|
|
251
|
+
for (const { placement, at, path } of walkPlacements(layout)) {
|
|
252
|
+
const id = placement?.id;
|
|
253
|
+
if (id === undefined)
|
|
254
|
+
continue;
|
|
255
|
+
const where = path.includes('.') ? { path } : {};
|
|
256
|
+
if (!isPlacementId(id)) {
|
|
257
|
+
errors.push({
|
|
258
|
+
at,
|
|
259
|
+
type: placement?.type ?? '(unknown)',
|
|
260
|
+
field: 'id',
|
|
261
|
+
...where,
|
|
262
|
+
message: 'is not a placement id',
|
|
263
|
+
});
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (seen.has(id))
|
|
267
|
+
errors.push({
|
|
268
|
+
at,
|
|
269
|
+
type: placement?.type ?? '(unknown)',
|
|
270
|
+
field: 'id',
|
|
271
|
+
...where,
|
|
272
|
+
// Two placements sharing an id make every later diff ambiguous, so this
|
|
273
|
+
// is refused at the write rather than resolved by guessing at the read.
|
|
274
|
+
// Uniqueness is across the whole tree, not per level: a diff keyed on
|
|
275
|
+
// id has no level to disambiguate with.
|
|
276
|
+
message: 'is already used by another placement in this layout',
|
|
277
|
+
});
|
|
278
|
+
seen.add(id);
|
|
279
|
+
}
|
|
280
|
+
return errors;
|
|
281
|
+
};
|
|
282
|
+
const changedSettings = (before, after) => {
|
|
283
|
+
const a = (before ?? {});
|
|
284
|
+
const b = (after ?? {});
|
|
285
|
+
const names = new Set([...Object.keys(a), ...Object.keys(b)]);
|
|
286
|
+
return [...names].filter((name) => canonical(a[name]) !== canonical(b[name])).sort();
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* What changed between two layouts, said per placement rather than per index.
|
|
290
|
+
*
|
|
291
|
+
* The walk is the whole tree, so a setting changed six levels down is reported
|
|
292
|
+
* on the node that changed. Comparing only the top level would have folded a
|
|
293
|
+
* subtree edit into "the container's settings are the same" and said nothing.
|
|
294
|
+
*
|
|
295
|
+
* Only placements carrying ids can be compared this way. Anything without one
|
|
296
|
+
* is reported as removed and added, which is the truthful answer: with no id
|
|
297
|
+
* there is no evidence the two are the same section.
|
|
298
|
+
*/
|
|
299
|
+
export const diffPlacements = (before, after) => {
|
|
300
|
+
const index = (layout) => {
|
|
301
|
+
const map = new Map();
|
|
302
|
+
for (const entry of walkPlacements(layout)) {
|
|
303
|
+
const id = entry.placement?.id;
|
|
304
|
+
if (isPlacementId(id))
|
|
305
|
+
map.set(id, entry);
|
|
306
|
+
}
|
|
307
|
+
return map;
|
|
308
|
+
};
|
|
309
|
+
const from = index(before);
|
|
310
|
+
const to = index(after);
|
|
311
|
+
const changes = [];
|
|
312
|
+
for (const [id, entry] of from)
|
|
313
|
+
if (!to.has(id))
|
|
314
|
+
changes.push({ id, type: entry.placement.type, change: 'removed', at: entry.at, path: entry.path });
|
|
315
|
+
for (const [id, entry] of to) {
|
|
316
|
+
const previous = from.get(id);
|
|
317
|
+
if (!previous) {
|
|
318
|
+
changes.push({ id, type: entry.placement.type, change: 'added', at: entry.at, path: entry.path });
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
if (previous.placement.type !== entry.placement.type) {
|
|
322
|
+
// A placement that changed type is a different section wearing the same
|
|
323
|
+
// id. Reported on its own so a reviewer never reads it as an edit.
|
|
324
|
+
changes.push({
|
|
325
|
+
id,
|
|
326
|
+
type: entry.placement.type,
|
|
327
|
+
change: 'retyped',
|
|
328
|
+
at: entry.at,
|
|
329
|
+
path: entry.path,
|
|
330
|
+
from: previous.placement.type,
|
|
331
|
+
});
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
const fields = changedSettings(previous.placement.settings, entry.placement.settings);
|
|
335
|
+
if (fields.length)
|
|
336
|
+
changes.push({
|
|
337
|
+
id,
|
|
338
|
+
type: entry.placement.type,
|
|
339
|
+
change: 'settings',
|
|
340
|
+
at: entry.at,
|
|
341
|
+
path: entry.path,
|
|
342
|
+
fields,
|
|
343
|
+
});
|
|
344
|
+
// The path carries the slot and every ancestor, so a section dragged into
|
|
345
|
+
// a different container reads as one move rather than as a removal from
|
|
346
|
+
// one place and an arrival somewhere else.
|
|
347
|
+
if (previous.path !== entry.path)
|
|
348
|
+
changes.push({
|
|
349
|
+
id,
|
|
350
|
+
type: entry.placement.type,
|
|
351
|
+
change: 'moved',
|
|
352
|
+
at: entry.at,
|
|
353
|
+
path: entry.path,
|
|
354
|
+
from: previous.path,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
return changes.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0) || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
|
|
358
|
+
};
|
|
77
359
|
//# sourceMappingURL=layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/kernel/layout.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/kernel/layout.ts"],"names":[],"mappings":"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"}
|
package/dist/kernel/menu.d.ts
CHANGED
|
@@ -6,6 +6,11 @@ export type MenuNode = {
|
|
|
6
6
|
icon: string | null;
|
|
7
7
|
/** True for the node whose path is showing, and for every heading above it. */
|
|
8
8
|
active: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* True when this viewer may open the entry but the entry is not their work.
|
|
11
|
+
* The shell leaves these out of the main list; search still finds them.
|
|
12
|
+
*/
|
|
13
|
+
secondary: boolean;
|
|
9
14
|
children: MenuNode[];
|
|
10
15
|
};
|
|
11
16
|
export type MenuOptions = {
|
|
@@ -13,6 +18,8 @@ export type MenuOptions = {
|
|
|
13
18
|
allow?: readonly string[] | null;
|
|
14
19
|
/** Resolves a label. Given a key it does not know, it should return it unchanged. */
|
|
15
20
|
translate?: (key: string) => string;
|
|
21
|
+
/** The locale the labels come back in, so equal sequences sort the way it reads. */
|
|
22
|
+
locale?: string;
|
|
16
23
|
/** The path currently showing, used to mark the branch leading to it. */
|
|
17
24
|
active?: string;
|
|
18
25
|
/**
|
|
@@ -20,8 +27,32 @@ export type MenuOptions = {
|
|
|
20
27
|
* does, so filtering never orphans a leaf from the words above it.
|
|
21
28
|
*/
|
|
22
29
|
q?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Mark entries this viewer may open but does not work on. Off by default:
|
|
32
|
+
* a caller that does not ask for the distinction gets the tree it always got.
|
|
33
|
+
*
|
|
34
|
+
* A viewer nothing is primary for keeps the whole permitted tree. An empty
|
|
35
|
+
* sidebar reads as a broken deployment, and telling a night auditor their
|
|
36
|
+
* work is nowhere is worse than showing them one screen too many.
|
|
37
|
+
*/
|
|
38
|
+
intent?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* The deployment's own grouping, applied before anything else is decided.
|
|
41
|
+
*
|
|
42
|
+
* Named entries move under the declared heading; the rest keep the heading
|
|
43
|
+
* their module gave them. A heading whose entries are all filtered away
|
|
44
|
+
* disappears like any other empty heading.
|
|
45
|
+
*/
|
|
46
|
+
groups?: ReadonlyArray<{
|
|
47
|
+
id: string;
|
|
48
|
+
label: string;
|
|
49
|
+
icon?: string;
|
|
50
|
+
items: readonly string[];
|
|
51
|
+
}>;
|
|
52
|
+
/** Menu ids to keep out of the main list whatever `for` says. */
|
|
53
|
+
demote?: readonly string[];
|
|
23
54
|
};
|
|
24
55
|
export declare function buildMenu(manifest: Manifest, o?: MenuOptions): MenuNode[];
|
|
25
|
-
/** The
|
|
26
|
-
export declare function
|
|
56
|
+
/** The root navigation section a path belongs to. */
|
|
57
|
+
export declare function activeMenuRoot(tree: MenuNode[]): MenuNode | null;
|
|
27
58
|
//# sourceMappingURL=menu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/kernel/menu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/kernel/menu.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,aAAa,CAAA;AAEpD,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,+EAA+E;IAC/E,MAAM,EAAE,OAAO,CAAA;IACf;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,QAAQ,EAAE,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,mEAAmE;IACnE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAChC,qFAAqF;IACrF,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACnC,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,CAAC,CAAC,EAAE,MAAM,CAAA;IACV;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAC9F,iEAAiE;IACjE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3B,CAAA;AAoED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAE,WAAgB,GAAG,QAAQ,EAAE,CA6F7E;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,GAAG,IAAI,CAEhE"}
|