@decaf-ts/ui-decorators 0.5.9 → 0.5.10
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/README.md +422 -12
- package/dist/ui-decorators.cjs +497 -51
- package/dist/ui-decorators.esm.cjs +497 -51
- package/lib/esm/index.d.ts +7 -3
- package/lib/esm/index.js +8 -4
- package/lib/esm/model/Renderable.d.ts +15 -0
- package/lib/esm/model/Renderable.js +1 -1
- package/lib/esm/model/decorators.d.ts +92 -14
- package/lib/esm/model/decorators.js +94 -16
- package/lib/esm/model/index.d.ts +0 -4
- package/lib/esm/model/index.js +1 -5
- package/lib/esm/model/model.d.ts +156 -50
- package/lib/esm/model/model.js +1 -1
- package/lib/esm/model/overrides.d.ts +8 -0
- package/lib/esm/model/overrides.js +19 -1
- package/lib/esm/ui/Rendering.js +15 -4
- package/lib/esm/ui/constants.d.ts +147 -4
- package/lib/esm/ui/constants.js +148 -5
- package/lib/esm/ui/decorators.d.ts +185 -21
- package/lib/esm/ui/decorators.js +189 -25
- package/lib/esm/ui/errors.d.ts +28 -0
- package/lib/esm/ui/errors.js +29 -1
- package/lib/esm/ui/index.d.ts +0 -4
- package/lib/esm/ui/index.js +1 -5
- package/lib/esm/ui/interfaces.d.ts +25 -0
- package/lib/esm/ui/interfaces.js +9 -1
- package/lib/esm/ui/types.d.ts +63 -5
- package/lib/esm/ui/types.js +9 -1
- package/lib/esm/ui/utils.d.ts +1 -1
- package/lib/esm/ui/utils.js +2 -2
- package/lib/index.cjs +8 -4
- package/lib/index.d.ts +7 -3
- package/lib/model/Renderable.cjs +1 -1
- package/lib/model/Renderable.d.ts +15 -0
- package/lib/model/decorators.cjs +94 -16
- package/lib/model/decorators.d.ts +92 -14
- package/lib/model/index.cjs +1 -5
- package/lib/model/index.d.ts +0 -4
- package/lib/model/model.cjs +1 -1
- package/lib/model/model.d.ts +156 -50
- package/lib/model/overrides.cjs +19 -1
- package/lib/model/overrides.d.ts +8 -0
- package/lib/ui/Rendering.cjs +15 -4
- package/lib/ui/constants.cjs +148 -5
- package/lib/ui/constants.d.ts +147 -4
- package/lib/ui/decorators.cjs +189 -25
- package/lib/ui/decorators.d.ts +185 -21
- package/lib/ui/errors.cjs +29 -1
- package/lib/ui/errors.d.ts +28 -0
- package/lib/ui/index.cjs +1 -5
- package/lib/ui/index.d.ts +0 -4
- package/lib/ui/interfaces.cjs +9 -1
- package/lib/ui/interfaces.d.ts +25 -0
- package/lib/ui/types.cjs +9 -1
- package/lib/ui/types.d.ts +63 -5
- package/lib/ui/utils.cjs +2 -2
- package/lib/ui/utils.d.ts +1 -1
- package/package.json +1 -1
package/lib/ui/decorators.cjs
CHANGED
|
@@ -11,50 +11,177 @@ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
|
11
11
|
const Rendering_1 = require("./Rendering.cjs");
|
|
12
12
|
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
13
13
|
/**
|
|
14
|
-
* @
|
|
15
|
-
* @
|
|
14
|
+
* @description Decorator that hides a property during specific CRUD operations
|
|
15
|
+
* @summary Controls property visibility based on operation type
|
|
16
|
+
* This decorator allows you to specify which CRUD operations should hide a property
|
|
17
|
+
* in the UI. The property will only be visible during operations not specified.
|
|
18
|
+
*
|
|
19
|
+
* @param operations - The CRUD operations during which the property should be hidden
|
|
20
|
+
* @return {Function} A property decorator function
|
|
21
|
+
*
|
|
22
|
+
* @function hideOn
|
|
23
|
+
* @category Property Decorators
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // Hide the password field during READ operations
|
|
27
|
+
* class User {
|
|
28
|
+
* @attribute()
|
|
29
|
+
* username: string;
|
|
30
|
+
*
|
|
31
|
+
* @attribute()
|
|
32
|
+
* @hideOn(OperationKeys.READ)
|
|
33
|
+
* password: string;
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* @mermaid
|
|
37
|
+
* sequenceDiagram
|
|
38
|
+
* participant Model
|
|
39
|
+
* participant hideOn
|
|
40
|
+
* participant RenderingEngine
|
|
41
|
+
* participant UI
|
|
42
|
+
* Model->>hideOn: Apply to property
|
|
43
|
+
* hideOn->>Model: Add hidden metadata
|
|
44
|
+
* RenderingEngine->>Model: Check if property should be hidden
|
|
45
|
+
* Model->>RenderingEngine: Return hidden operations
|
|
46
|
+
* RenderingEngine->>UI: Render or hide based on current operation
|
|
16
47
|
*/
|
|
17
48
|
function hideOn(...operations) {
|
|
18
49
|
return (0, decorator_validation_1.propMetadata)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.HIDDEN), operations);
|
|
19
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* @description Decorator that completely hides a property in all UI operations
|
|
53
|
+
* @summary Makes a property invisible in all CRUD operations
|
|
54
|
+
* This decorator is a convenience wrapper around hideOn that hides a property
|
|
55
|
+
* during all CRUD operations (CREATE, READ, UPDATE, DELETE).
|
|
56
|
+
*
|
|
57
|
+
* @return {Function} A property decorator function
|
|
58
|
+
*
|
|
59
|
+
* @function hidden
|
|
60
|
+
* @category Property Decorators
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* // Completely hide the internalId field in the UI
|
|
64
|
+
* class Product {
|
|
65
|
+
* @attribute()
|
|
66
|
+
* name: string;
|
|
67
|
+
*
|
|
68
|
+
* @attribute()
|
|
69
|
+
* @hidden()
|
|
70
|
+
* internalId: string;
|
|
71
|
+
* }
|
|
72
|
+
*
|
|
73
|
+
* @mermaid
|
|
74
|
+
* sequenceDiagram
|
|
75
|
+
* participant Model
|
|
76
|
+
* participant hidden
|
|
77
|
+
* participant hideOn
|
|
78
|
+
* participant RenderingEngine
|
|
79
|
+
* Model->>hidden: Apply to property
|
|
80
|
+
* hidden->>hideOn: Call with all operations
|
|
81
|
+
* hideOn->>Model: Add hidden metadata
|
|
82
|
+
* RenderingEngine->>Model: Check if property should be hidden
|
|
83
|
+
* Model->>RenderingEngine: Return all operations
|
|
84
|
+
* RenderingEngine->>UI: Always hide property
|
|
85
|
+
*/
|
|
20
86
|
function hidden() {
|
|
21
87
|
return hideOn(db_decorators_1.OperationKeys.CREATE, db_decorators_1.OperationKeys.READ, db_decorators_1.OperationKeys.UPDATE, db_decorators_1.OperationKeys.DELETE);
|
|
22
88
|
}
|
|
23
89
|
/**
|
|
24
|
-
*
|
|
90
|
+
* @description Decorator that specifies how a property should be rendered as a UI element
|
|
91
|
+
* @summary Maps a model property to a specific UI element with custom properties
|
|
92
|
+
* This decorator allows you to define which HTML element or component should be used
|
|
93
|
+
* to render a specific property, along with any additional properties to pass to that element.
|
|
94
|
+
*
|
|
95
|
+
* @param {string} tag The HTML element or component tag name to use for rendering
|
|
96
|
+
* @param {Record<string, any>} [props] Additional properties to pass to the element
|
|
97
|
+
* @param {boolean} [serialize=false] Whether the property should be serialized
|
|
98
|
+
* @return {Function} A property decorator function
|
|
99
|
+
*
|
|
100
|
+
* @function uielement
|
|
101
|
+
* @category Property Decorators
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* // Render a property as a text input
|
|
105
|
+
* class LoginForm {
|
|
106
|
+
* @attribute()
|
|
107
|
+
* @uielement('input', { type: 'text', placeholder: 'Enter username' })
|
|
108
|
+
* username: string;
|
|
25
109
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
110
|
+
* @attribute()
|
|
111
|
+
* @uielement('input', { type: 'password', placeholder: 'Enter password' })
|
|
112
|
+
* password: string;
|
|
29
113
|
*
|
|
30
|
-
*
|
|
114
|
+
* @attribute()
|
|
115
|
+
* @uielement('button', { class: 'btn-primary' })
|
|
116
|
+
* submit: string = 'Login';
|
|
117
|
+
* }
|
|
31
118
|
*
|
|
32
|
-
* @
|
|
33
|
-
*
|
|
119
|
+
* @mermaid
|
|
120
|
+
* sequenceDiagram
|
|
121
|
+
* participant Model
|
|
122
|
+
* participant uielement
|
|
123
|
+
* participant RenderingEngine
|
|
124
|
+
* participant UI
|
|
125
|
+
* Model->>uielement: Apply to property
|
|
126
|
+
* uielement->>Model: Add element metadata
|
|
127
|
+
* RenderingEngine->>Model: Get element metadata
|
|
128
|
+
* Model->>RenderingEngine: Return tag and props
|
|
129
|
+
* RenderingEngine->>UI: Render with specified element
|
|
34
130
|
*/
|
|
35
131
|
function uielement(tag, props, serialize = false) {
|
|
36
132
|
return (original, propertyKey) => {
|
|
37
133
|
const metadata = {
|
|
38
134
|
tag: tag,
|
|
39
135
|
serialize: serialize,
|
|
40
|
-
props: Object.assign({
|
|
136
|
+
props: Object.assign({}, props || {}, {
|
|
41
137
|
name: propertyKey,
|
|
42
|
-
}
|
|
138
|
+
}),
|
|
43
139
|
};
|
|
44
140
|
return (0, decorator_validation_1.propMetadata)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.ELEMENT), metadata)(original, propertyKey);
|
|
45
141
|
};
|
|
46
142
|
}
|
|
47
143
|
/**
|
|
48
|
-
*
|
|
144
|
+
* @description Decorator that maps a model property to a UI component property
|
|
145
|
+
* @summary Specifies how a property should be passed to a UI component
|
|
146
|
+
* This decorator allows you to define how a model property should be mapped to
|
|
147
|
+
* a property of the UI component when rendering. It requires the class to be
|
|
148
|
+
* decorated with @uimodel.
|
|
49
149
|
*
|
|
50
|
-
*
|
|
150
|
+
* @param {string} [propName] The name of the property to pass to the component (defaults to the property key)
|
|
151
|
+
* @param {boolean} [stringify=false] Whether to stringify the property value
|
|
152
|
+
* @return {Function} A property decorator function
|
|
51
153
|
*
|
|
52
|
-
* @
|
|
154
|
+
* @function uiprop
|
|
155
|
+
* @category Property Decorators
|
|
53
156
|
*
|
|
54
|
-
* @
|
|
157
|
+
* @example
|
|
158
|
+
* // Map model properties to component properties
|
|
159
|
+
* @uimodel('user-profile')
|
|
160
|
+
* class UserProfile {
|
|
161
|
+
* @attribute()
|
|
162
|
+
* @uiprop() // Will be passed as 'fullName' to the component
|
|
163
|
+
* fullName: string;
|
|
55
164
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
165
|
+
* @attribute()
|
|
166
|
+
* @uiprop('userEmail') // Will be passed as 'userEmail' to the component
|
|
167
|
+
* email: string;
|
|
168
|
+
*
|
|
169
|
+
* @attribute()
|
|
170
|
+
* @uiprop('userData', true) // Will be passed as stringified JSON
|
|
171
|
+
* userData: Record<string, any>;
|
|
172
|
+
* }
|
|
173
|
+
*
|
|
174
|
+
* @mermaid
|
|
175
|
+
* sequenceDiagram
|
|
176
|
+
* participant Model
|
|
177
|
+
* participant uiprop
|
|
178
|
+
* participant RenderingEngine
|
|
179
|
+
* participant Component
|
|
180
|
+
* Model->>uiprop: Apply to property
|
|
181
|
+
* uiprop->>Model: Add prop metadata
|
|
182
|
+
* RenderingEngine->>Model: Get prop metadata
|
|
183
|
+
* Model->>RenderingEngine: Return prop name and stringify flag
|
|
184
|
+
* RenderingEngine->>Component: Pass property with specified name
|
|
58
185
|
*/
|
|
59
186
|
function uiprop(propName = undefined, stringify = false) {
|
|
60
187
|
return (target, propertyKey) => {
|
|
@@ -66,24 +193,61 @@ function uiprop(propName = undefined, stringify = false) {
|
|
|
66
193
|
};
|
|
67
194
|
}
|
|
68
195
|
/**
|
|
69
|
-
*
|
|
196
|
+
* @description Decorator that maps a model property to a list item component
|
|
197
|
+
* @summary Specifies how a property should be rendered in a list context
|
|
198
|
+
* This decorator allows you to define how a model property containing a list
|
|
199
|
+
* should be rendered. It requires the class to be decorated with @uilistitem.
|
|
200
|
+
*
|
|
201
|
+
* @param {string} [propName] The name of the property to pass to the list component (defaults to the property key)
|
|
202
|
+
* @param {Record<string, any>} [props] Additional properties to pass to the list container
|
|
203
|
+
* @return {Function} A property decorator function
|
|
204
|
+
*
|
|
205
|
+
* @function uilistprop
|
|
206
|
+
* @category Property Decorators
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* // Define a list property with custom rendering
|
|
210
|
+
* @uimodel('todo-list')
|
|
211
|
+
* class TodoList {
|
|
212
|
+
* @attribute()
|
|
213
|
+
* title: string;
|
|
70
214
|
*
|
|
71
|
-
*
|
|
215
|
+
* @attribute()
|
|
216
|
+
* @uilistprop('items', { class: 'todo-items-container' })
|
|
217
|
+
* items: TodoItem[];
|
|
218
|
+
* }
|
|
72
219
|
*
|
|
73
|
-
* @
|
|
220
|
+
* @uilistitem('li', { class: 'todo-item' })
|
|
221
|
+
* class TodoItem extends Model {
|
|
222
|
+
* @attribute()
|
|
223
|
+
* text: string;
|
|
74
224
|
*
|
|
75
|
-
*
|
|
225
|
+
* @attribute()
|
|
226
|
+
* completed: boolean;
|
|
227
|
+
* }
|
|
76
228
|
*
|
|
77
|
-
* @
|
|
78
|
-
*
|
|
229
|
+
* @mermaid
|
|
230
|
+
* sequenceDiagram
|
|
231
|
+
* participant Model
|
|
232
|
+
* participant uilistprop
|
|
233
|
+
* participant RenderingEngine
|
|
234
|
+
* participant ListContainer
|
|
235
|
+
* participant ListItems
|
|
236
|
+
* Model->>uilistprop: Apply to property
|
|
237
|
+
* uilistprop->>Model: Add list prop metadata
|
|
238
|
+
* RenderingEngine->>Model: Get list prop metadata
|
|
239
|
+
* Model->>RenderingEngine: Return prop name and container props
|
|
240
|
+
* RenderingEngine->>ListContainer: Create container with props
|
|
241
|
+
* RenderingEngine->>ListItems: Render each item using @uilistitem
|
|
242
|
+
* ListContainer->>RenderingEngine: Return rendered list
|
|
79
243
|
*/
|
|
80
244
|
function uilistprop(propName = undefined, props) {
|
|
81
245
|
return (target, propertyKey) => {
|
|
82
246
|
const metadata = {
|
|
83
247
|
name: propName || propertyKey,
|
|
84
|
-
props: props || {}
|
|
248
|
+
props: props || {},
|
|
85
249
|
};
|
|
86
250
|
(0, decorator_validation_1.propMetadata)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.UILISTPROP), metadata)(target, propertyKey);
|
|
87
251
|
};
|
|
88
252
|
}
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsd0JBS0M7QUFFRCx3QkFPQztBQWNELDhCQXNCQztBQWNELHdCQWNDO0FBZUQsZ0NBY0M7QUF2SEQsNEJBQTBCO0FBQzFCLCtDQUFxQztBQUNyQyx5RUFBOEQ7QUFFOUQsK0NBQThDO0FBQzlDLDJEQUF3RDtBQUV4RDs7O0dBR0c7QUFFSCxTQUFnQixNQUFNLENBQUMsR0FBRyxVQUErQjtJQUN2RCxPQUFPLElBQUEsbUNBQVksRUFDakIsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFDbEMsVUFBVSxDQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsTUFBTTtJQUNwQixPQUFPLE1BQU0sQ0FDWCw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsNkJBQWEsQ0FBQyxJQUFJLEVBQ2xCLDZCQUFhLENBQUMsTUFBTSxFQUNwQiw2QkFBYSxDQUFDLE1BQU0sQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsR0FBVyxFQUNYLEtBQTJCLEVBQzNCLFlBQXFCLEtBQUs7SUFFMUIsT0FBTyxDQUFDLFFBQWEsRUFBRSxXQUFpQixFQUFFLEVBQUU7UUFDMUMsTUFBTSxRQUFRLEdBQXNCO1lBQ2xDLEdBQUcsRUFBRSxHQUFHO1lBQ1IsU0FBUyxFQUFFLFNBQVM7WUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQ2xCO2dCQUNFLElBQUksRUFBRSxXQUFXO2FBQ2xCLEVBQ0QsS0FBSyxJQUFJLEVBQUUsQ0FDWjtTQUNGLENBQUM7UUFFRixPQUFPLElBQUEsbUNBQVksRUFBQywyQkFBZSxDQUFDLEdBQUcsQ0FBQyxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUNoRSxRQUFRLEVBQ1IsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixNQUFNLENBQ3BCLFdBQStCLFNBQVMsRUFDeEMsWUFBcUIsS0FBSztJQUUxQixPQUFPLENBQUMsTUFBVyxFQUFFLFdBQW1CLEVBQUUsRUFBRTtRQUMxQyxNQUFNLFFBQVEsR0FBbUI7WUFDL0IsSUFBSSxFQUFFLFFBQVEsSUFBSSxXQUFXO1lBQzdCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFDRixJQUFBLG1DQUFZLEVBQUMsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDdEQsTUFBTSxFQUNOLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUdEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixXQUErQixTQUFTLEVBQ3hDLEtBQTJCO0lBRTNCLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sUUFBUSxHQUFnQztZQUM5QyxJQUFJLEVBQUUsUUFBUSxJQUFJLFdBQVc7WUFDN0IsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1NBQ25CLENBQUM7UUFDRixJQUFBLG1DQUFZLEVBQUMsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDNUQsTUFBTSxFQUNOLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcbmltcG9ydCB7IFVJS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHJvcE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbktleXMsIFVJRWxlbWVudE1ldGFkYXRhLCBVSUxpc3RQcm9wTWV0YWRhdGEsIFVJUHJvcE1ldGFkYXRhIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFJlbmRlcmluZ0VuZ2luZSB9IGZyb20gXCIuL1JlbmRlcmluZ1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWRlT24oLi4ub3BlcmF0aW9uczogQ3J1ZE9wZXJhdGlvbktleXNbXSkge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhPENydWRPcGVyYXRpb25LZXlzW10+KFxuICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkhJRERFTiksXG4gICAgb3BlcmF0aW9uc1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlkZGVuKCkge1xuICByZXR1cm4gaGlkZU9uKFxuICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICBPcGVyYXRpb25LZXlzLkRFTEVURVxuICApO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIFVJRWxlbWVudCBkZWZpbml0aW9uIGFzIG1ldGFkYXRhIHRvIHRoZSBwcm9wZXJ0eSwgYWxsb3dpbmcgaXQgdG8gYmUgcmVhZCBieSBhbnkge0BsaW5rIFJlbmRlclN0cmF0ZWd5fVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGNvbXBvbmVudC9IVE1MIGVsZW1lbnQgdGFnIG5hbWVcbiAqIEBwYXJhbSB7e319IFtwcm9wc10gVGhlIHByb3BlcnRpZXMgdG8gcGFzcyB0byB0aGF0IGNvbXBvbmVudC9IVE1MIEVsZW1lbnRcbiAqIEBwYXJhbSBzZXJpYWxpemVcbiAqXG4gKiBAZGVjb3JhdG9yIHVpZWxlbWVudFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKiBAc3ViY2F0ZWdvcnkgdWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdWllbGVtZW50KFxuICB0YWc6IHN0cmluZyxcbiAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBzZXJpYWxpemU6IGJvb2xlYW4gPSBmYWxzZVxuKSB7XG4gIHJldHVybiAob3JpZ2luYWw6IGFueSwgcHJvcGVydHlLZXk/OiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXRhZGF0YTogVUlFbGVtZW50TWV0YWRhdGEgPSB7XG4gICAgICB0YWc6IHRhZyxcbiAgICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgICAgcHJvcHM6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHMgfHwge31cbiAgICAgICksXG4gICAgfTtcblxuICAgIHJldHVybiBwcm9wTWV0YWRhdGEoUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuRUxFTUVOVCksIG1ldGFkYXRhKShcbiAgICAgIG9yaWdpbmFsLFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIFVJUHJvcCBkZWZpbml0aW9uIGFzIG1ldGFkYXRhIHRvIHRoZSBwcm9wZXJ0eSwgYWxsb3dpbmcgaXQgdG8gYmUgcmVhZCBieSBhbnkge0BsaW5rIFJlbmRlclN0cmF0ZWd5fVxuICpcbiAqIHRoaXMgcmVxdWlyZXMgYSAnQHVpbW9kZWwnIHdpdGggYSBkZWZpbmVkIHRhZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIHRoZSBwcm9wZXJ0eSBuYW1lIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC4gZGVmYXVsdHMgdG8gdGhlIFByb3BlcnR5S2V5XG4gKlxuICogQGRlY29yYXRvciB1aXByb3BcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICogQHN1YmNhdGVnb3J5IHVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpcHJvcChcbiAgcHJvcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJUHJvcE1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSxcbiAgICB9O1xuICAgIHByb3BNZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5QUk9QKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG5cbi8qKlxuICogQWRkcyB0aGUgVUlMaXN0UHJvcCBkZWZpbml0aW9uIGFzIG1ldGFkYXRhIHRvIHRoZSBwcm9wZXJ0eSwgYWxsb3dpbmcgaXQgdG8gYmUgcmVhZCBieSBhbnkge0BsaW5rIFJlbmRlclN0cmF0ZWd5fVxuICpcbiAqIHRoaXMgcmVxdWlyZXMgYSAnQHVpbGlzdGl0ZW0nIHdpdGggYSBkZWZpbmVkIHRhZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIHRoZSBwcm9wZXJ0eSBuYW1lIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC4gZGVmYXVsdHMgdG8gdGhlIFByb3BlcnR5S2V5XG4gKlxuICogQGRlY29yYXRvciB1aXByb3BcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICogQHN1YmNhdGVnb3J5IHVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpbGlzdHByb3AoXG4gIHByb3BOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXRhZGF0YTogUGFydGlhbDxVSUxpc3RQcm9wTWV0YWRhdGE+ID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBwcm9wczogcHJvcHMgfHwge31cbiAgICB9O1xuICAgIHByb3BNZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5VSUxJU1RQUk9QKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuIl19
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0NBLHdCQUtDO0FBcUNELHdCQU9DO0FBNENELDhCQW1CQztBQTZDRCx3QkFjQztBQW1ERCxnQ0FjQztBQTNSRCw0QkFBMEI7QUFDMUIsK0NBQXFDO0FBQ3JDLHlFQUE4RDtBQU85RCwrQ0FBOEM7QUFDOUMsMkRBQXdEO0FBRXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsU0FBZ0IsTUFBTSxDQUFDLEdBQUcsVUFBK0I7SUFDdkQsT0FBTyxJQUFBLG1DQUFZLEVBQ2pCLDJCQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsTUFBTSxDQUFDLEVBQ2xDLFVBQVUsQ0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsU0FBZ0IsTUFBTTtJQUNwQixPQUFPLE1BQU0sQ0FDWCw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsNkJBQWEsQ0FBQyxJQUFJLEVBQ2xCLDZCQUFhLENBQUMsTUFBTSxFQUNwQiw2QkFBYSxDQUFDLE1BQU0sQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLEdBQVcsRUFDWCxLQUEyQixFQUMzQixZQUFxQixLQUFLO0lBRTFCLE9BQU8sQ0FBQyxRQUFhLEVBQUUsV0FBaUIsRUFBRSxFQUFFO1FBQzFDLE1BQU0sUUFBUSxHQUFzQjtZQUNsQyxHQUFHLEVBQUUsR0FBRztZQUNSLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFO2dCQUNwQyxJQUFJLEVBQUUsV0FBVzthQUNsQixDQUFDO1NBQ0gsQ0FBQztRQUVGLE9BQU8sSUFBQSxtQ0FBWSxFQUFDLDJCQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQ2hFLFFBQVEsRUFDUixXQUFXLENBQ1osQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBQ0gsU0FBZ0IsTUFBTSxDQUNwQixXQUErQixTQUFTLEVBQ3hDLFlBQXFCLEtBQUs7SUFFMUIsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFFLEVBQUU7UUFDMUMsTUFBTSxRQUFRLEdBQW1CO1lBQy9CLElBQUksRUFBRSxRQUFRLElBQUksV0FBVztZQUM3QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO1FBQ0YsSUFBQSxtQ0FBWSxFQUFDLDJCQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQ3RELE1BQU0sRUFDTixXQUFXLENBQ1osQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0RHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixXQUErQixTQUFTLEVBQ3hDLEtBQTJCO0lBRTNCLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBRSxFQUFFO1FBQzFDLE1BQU0sUUFBUSxHQUFnQztZQUM1QyxJQUFJLEVBQUUsUUFBUSxJQUFJLFdBQVc7WUFDN0IsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1NBQ25CLENBQUM7UUFDRixJQUFBLG1DQUFZLEVBQUMsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDNUQsTUFBTSxFQUNOLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcbmltcG9ydCB7IFVJS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHJvcE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgQ3J1ZE9wZXJhdGlvbktleXMsXG4gIFVJRWxlbWVudE1ldGFkYXRhLFxuICBVSUxpc3RQcm9wTWV0YWRhdGEsXG4gIFVJUHJvcE1ldGFkYXRhLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUmVuZGVyaW5nRW5naW5lIH0gZnJvbSBcIi4vUmVuZGVyaW5nXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRvciB0aGF0IGhpZGVzIGEgcHJvcGVydHkgZHVyaW5nIHNwZWNpZmljIENSVUQgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgQ29udHJvbHMgcHJvcGVydHkgdmlzaWJpbGl0eSBiYXNlZCBvbiBvcGVyYXRpb24gdHlwZVxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIENSVUQgb3BlcmF0aW9ucyBzaG91bGQgaGlkZSBhIHByb3BlcnR5XG4gKiBpbiB0aGUgVUkuIFRoZSBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgdmlzaWJsZSBkdXJpbmcgb3BlcmF0aW9ucyBub3Qgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb25zIC0gVGhlIENSVUQgb3BlcmF0aW9ucyBkdXJpbmcgd2hpY2ggdGhlIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiBoaWRlT25cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhpZGUgdGhlIHBhc3N3b3JkIGZpZWxkIGR1cmluZyBSRUFEIG9wZXJhdGlvbnNcbiAqIGNsYXNzIFVzZXIge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgdXNlcm5hbWU6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAaGlkZU9uKE9wZXJhdGlvbktleXMuUkVBRClcbiAqICAgcGFzc3dvcmQ6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IGhpZGVPblxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgVUlcbiAqICAgTW9kZWwtPj5oaWRlT246IEFwcGx5IHRvIHByb3BlcnR5XG4gKiAgIGhpZGVPbi0+Pk1vZGVsOiBBZGQgaGlkZGVuIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBDaGVjayBpZiBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gaGlkZGVuIG9wZXJhdGlvbnNcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+VUk6IFJlbmRlciBvciBoaWRlIGJhc2VkIG9uIGN1cnJlbnQgb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlT24oLi4ub3BlcmF0aW9uczogQ3J1ZE9wZXJhdGlvbktleXNbXSkge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhPENydWRPcGVyYXRpb25LZXlzW10+KFxuICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkhJRERFTiksXG4gICAgb3BlcmF0aW9uc1xuICApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBjb21wbGV0ZWx5IGhpZGVzIGEgcHJvcGVydHkgaW4gYWxsIFVJIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IE1ha2VzIGEgcHJvcGVydHkgaW52aXNpYmxlIGluIGFsbCBDUlVEIG9wZXJhdGlvbnNcbiAqIFRoaXMgZGVjb3JhdG9yIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgaGlkZU9uIHRoYXQgaGlkZXMgYSBwcm9wZXJ0eVxuICogZHVyaW5nIGFsbCBDUlVEIG9wZXJhdGlvbnMgKENSRUFURSwgUkVBRCwgVVBEQVRFLCBERUxFVEUpLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiBoaWRkZW5cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbXBsZXRlbHkgaGlkZSB0aGUgaW50ZXJuYWxJZCBmaWVsZCBpbiB0aGUgVUlcbiAqIGNsYXNzIFByb2R1Y3Qge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgbmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEBoaWRkZW4oKVxuICogICBpbnRlcm5hbElkOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBoaWRkZW5cbiAqICAgcGFydGljaXBhbnQgaGlkZU9uXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBNb2RlbC0+PmhpZGRlbjogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgaGlkZGVuLT4+aGlkZU9uOiBDYWxsIHdpdGggYWxsIG9wZXJhdGlvbnNcbiAqICAgaGlkZU9uLT4+TW9kZWw6IEFkZCBoaWRkZW4gbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IENoZWNrIGlmIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW5cbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBhbGwgb3BlcmF0aW9uc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogQWx3YXlzIGhpZGUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGRlbigpIHtcbiAgcmV0dXJuIGhpZGVPbihcbiAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgT3BlcmF0aW9uS2V5cy5ERUxFVEVcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgc3BlY2lmaWVzIGhvdyBhIHByb3BlcnR5IHNob3VsZCBiZSByZW5kZXJlZCBhcyBhIFVJIGVsZW1lbnRcbiAqIEBzdW1tYXJ5IE1hcHMgYSBtb2RlbCBwcm9wZXJ0eSB0byBhIHNwZWNpZmljIFVJIGVsZW1lbnQgd2l0aCBjdXN0b20gcHJvcGVydGllc1xuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgd2hpY2ggSFRNTCBlbGVtZW50IG9yIGNvbXBvbmVudCBzaG91bGQgYmUgdXNlZFxuICogdG8gcmVuZGVyIGEgc3BlY2lmaWMgcHJvcGVydHksIGFsb25nIHdpdGggYW55IGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoYXQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBIVE1MIGVsZW1lbnQgb3IgY29tcG9uZW50IHRhZyBuYW1lIHRvIHVzZSBmb3IgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtwcm9wc10gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHBhc3MgdG8gdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlcmlhbGl6ZT1mYWxzZV0gV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHNlcmlhbGl6ZWRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiB1aWVsZW1lbnRcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlbmRlciBhIHByb3BlcnR5IGFzIGEgdGV4dCBpbnB1dFxuICogY2xhc3MgTG9naW5Gb3JtIHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aWVsZW1lbnQoJ2lucHV0JywgeyB0eXBlOiAndGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgdXNlcm5hbWUnIH0pXG4gKiAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpZWxlbWVudCgnaW5wdXQnLCB7IHR5cGU6ICdwYXNzd29yZCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgcGFzc3dvcmQnIH0pXG4gKiAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpZWxlbWVudCgnYnV0dG9uJywgeyBjbGFzczogJ2J0bi1wcmltYXJ5JyB9KVxuICogICBzdWJtaXQ6IHN0cmluZyA9ICdMb2dpbic7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aWVsZW1lbnRcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IFVJXG4gKiAgIE1vZGVsLT4+dWllbGVtZW50OiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWVsZW1lbnQtPj5Nb2RlbDogQWRkIGVsZW1lbnQgbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IEdldCBlbGVtZW50IG1ldGFkYXRhXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gdGFnIGFuZCBwcm9wc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogUmVuZGVyIHdpdGggc3BlY2lmaWVkIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpZWxlbWVudChcbiAgdGFnOiBzdHJpbmcsXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgc2VyaWFsaXplOiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJRWxlbWVudE1ldGFkYXRhID0ge1xuICAgICAgdGFnOiB0YWcsXG4gICAgICBzZXJpYWxpemU6IHNlcmlhbGl6ZSxcbiAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKHt9LCBwcm9wcyB8fCB7fSwge1xuICAgICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkVMRU1FTlQpLCBtZXRhZGF0YSkoXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIHByb3BlcnR5S2V5XG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFwcyBhIG1vZGVsIHByb3BlcnR5IHRvIGEgVUkgY29tcG9uZW50IHByb3BlcnR5XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgaG93IGEgcHJvcGVydHkgc2hvdWxkIGJlIHBhc3NlZCB0byBhIFVJIGNvbXBvbmVudFxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgaG93IGEgbW9kZWwgcHJvcGVydHkgc2hvdWxkIGJlIG1hcHBlZCB0b1xuICogYSBwcm9wZXJ0eSBvZiB0aGUgVUkgY29tcG9uZW50IHdoZW4gcmVuZGVyaW5nLiBJdCByZXF1aXJlcyB0aGUgY2xhc3MgdG8gYmVcbiAqIGRlY29yYXRlZCB3aXRoIEB1aW1vZGVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBwYXNzIHRvIHRoZSBjb21wb25lbnQgKGRlZmF1bHRzIHRvIHRoZSBwcm9wZXJ0eSBrZXkpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtzdHJpbmdpZnk9ZmFsc2VdIFdoZXRoZXIgdG8gc3RyaW5naWZ5IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHVpcHJvcFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTWFwIG1vZGVsIHByb3BlcnRpZXMgdG8gY29tcG9uZW50IHByb3BlcnRpZXNcbiAqIEB1aW1vZGVsKCd1c2VyLXByb2ZpbGUnKVxuICogY2xhc3MgVXNlclByb2ZpbGUge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpcHJvcCgpIC8vIFdpbGwgYmUgcGFzc2VkIGFzICdmdWxsTmFtZScgdG8gdGhlIGNvbXBvbmVudFxuICogICBmdWxsTmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aXByb3AoJ3VzZXJFbWFpbCcpIC8vIFdpbGwgYmUgcGFzc2VkIGFzICd1c2VyRW1haWwnIHRvIHRoZSBjb21wb25lbnRcbiAqICAgZW1haWw6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlwcm9wKCd1c2VyRGF0YScsIHRydWUpIC8vIFdpbGwgYmUgcGFzc2VkIGFzIHN0cmluZ2lmaWVkIEpTT05cbiAqICAgdXNlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aXByb3BcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudFxuICogICBNb2RlbC0+PnVpcHJvcDogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgdWlwcm9wLT4+TW9kZWw6IEFkZCBwcm9wIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBHZXQgcHJvcCBtZXRhZGF0YVxuICogICBNb2RlbC0+PlJlbmRlcmluZ0VuZ2luZTogUmV0dXJuIHByb3AgbmFtZSBhbmQgc3RyaW5naWZ5IGZsYWdcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+Q29tcG9uZW50OiBQYXNzIHByb3BlcnR5IHdpdGggc3BlY2lmaWVkIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpcHJvcChcbiAgcHJvcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJUHJvcE1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSxcbiAgICB9O1xuICAgIHByb3BNZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5QUk9QKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXBzIGEgbW9kZWwgcHJvcGVydHkgdG8gYSBsaXN0IGl0ZW0gY29tcG9uZW50XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgaG93IGEgcHJvcGVydHkgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGEgbGlzdCBjb250ZXh0XG4gKiBUaGlzIGRlY29yYXRvciBhbGxvd3MgeW91IHRvIGRlZmluZSBob3cgYSBtb2RlbCBwcm9wZXJ0eSBjb250YWluaW5nIGEgbGlzdFxuICogc2hvdWxkIGJlIHJlbmRlcmVkLiBJdCByZXF1aXJlcyB0aGUgY2xhc3MgdG8gYmUgZGVjb3JhdGVkIHdpdGggQHVpbGlzdGl0ZW0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wTmFtZV0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHBhc3MgdG8gdGhlIGxpc3QgY29tcG9uZW50IChkZWZhdWx0cyB0byB0aGUgcHJvcGVydHkga2V5KVxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBsaXN0IGNvbnRhaW5lclxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHVpbGlzdHByb3BcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIERlZmluZSBhIGxpc3QgcHJvcGVydHkgd2l0aCBjdXN0b20gcmVuZGVyaW5nXG4gKiBAdWltb2RlbCgndG9kby1saXN0JylcbiAqIGNsYXNzIFRvZG9MaXN0IHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIHRpdGxlOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGlzdHByb3AoJ2l0ZW1zJywgeyBjbGFzczogJ3RvZG8taXRlbXMtY29udGFpbmVyJyB9KVxuICogICBpdGVtczogVG9kb0l0ZW1bXTtcbiAqIH1cbiAqXG4gKiBAdWlsaXN0aXRlbSgnbGknLCB7IGNsYXNzOiAndG9kby1pdGVtJyB9KVxuICogY2xhc3MgVG9kb0l0ZW0gZXh0ZW5kcyBNb2RlbCB7XG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICB0ZXh0OiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgY29tcGxldGVkOiBib29sZWFuO1xuICogfVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgTW9kZWxcbiAqICAgcGFydGljaXBhbnQgdWlsaXN0cHJvcFxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgTGlzdENvbnRhaW5lclxuICogICBwYXJ0aWNpcGFudCBMaXN0SXRlbXNcbiAqICAgTW9kZWwtPj51aWxpc3Rwcm9wOiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWxpc3Rwcm9wLT4+TW9kZWw6IEFkZCBsaXN0IHByb3AgbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IEdldCBsaXN0IHByb3AgbWV0YWRhdGFcbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBwcm9wIG5hbWUgYW5kIGNvbnRhaW5lciBwcm9wc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5MaXN0Q29udGFpbmVyOiBDcmVhdGUgY29udGFpbmVyIHdpdGggcHJvcHNcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TGlzdEl0ZW1zOiBSZW5kZXIgZWFjaCBpdGVtIHVzaW5nIEB1aWxpc3RpdGVtXG4gKiAgIExpc3RDb250YWluZXItPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiByZW5kZXJlZCBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aWxpc3Rwcm9wKFxuICBwcm9wTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT5cbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFBhcnRpYWw8VUlMaXN0UHJvcE1ldGFkYXRhPiA9IHtcbiAgICAgIG5hbWU6IHByb3BOYW1lIHx8IHByb3BlcnR5S2V5LFxuICAgICAgcHJvcHM6IHByb3BzIHx8IHt9LFxuICAgIH07XG4gICAgcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTElTVFBST1ApLCBtZXRhZGF0YSkoXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG4gIH07XG59XG4iXX0=
|
package/lib/ui/decorators.d.ts
CHANGED
|
@@ -1,47 +1,211 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
import { CrudOperationKeys } from "./types";
|
|
3
3
|
/**
|
|
4
|
-
* @
|
|
5
|
-
* @
|
|
4
|
+
* @description Decorator that hides a property during specific CRUD operations
|
|
5
|
+
* @summary Controls property visibility based on operation type
|
|
6
|
+
* This decorator allows you to specify which CRUD operations should hide a property
|
|
7
|
+
* in the UI. The property will only be visible during operations not specified.
|
|
8
|
+
*
|
|
9
|
+
* @param operations - The CRUD operations during which the property should be hidden
|
|
10
|
+
* @return {Function} A property decorator function
|
|
11
|
+
*
|
|
12
|
+
* @function hideOn
|
|
13
|
+
* @category Property Decorators
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // Hide the password field during READ operations
|
|
17
|
+
* class User {
|
|
18
|
+
* @attribute()
|
|
19
|
+
* username: string;
|
|
20
|
+
*
|
|
21
|
+
* @attribute()
|
|
22
|
+
* @hideOn(OperationKeys.READ)
|
|
23
|
+
* password: string;
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* @mermaid
|
|
27
|
+
* sequenceDiagram
|
|
28
|
+
* participant Model
|
|
29
|
+
* participant hideOn
|
|
30
|
+
* participant RenderingEngine
|
|
31
|
+
* participant UI
|
|
32
|
+
* Model->>hideOn: Apply to property
|
|
33
|
+
* hideOn->>Model: Add hidden metadata
|
|
34
|
+
* RenderingEngine->>Model: Check if property should be hidden
|
|
35
|
+
* Model->>RenderingEngine: Return hidden operations
|
|
36
|
+
* RenderingEngine->>UI: Render or hide based on current operation
|
|
6
37
|
*/
|
|
7
38
|
export declare function hideOn(...operations: CrudOperationKeys[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
|
39
|
+
/**
|
|
40
|
+
* @description Decorator that completely hides a property in all UI operations
|
|
41
|
+
* @summary Makes a property invisible in all CRUD operations
|
|
42
|
+
* This decorator is a convenience wrapper around hideOn that hides a property
|
|
43
|
+
* during all CRUD operations (CREATE, READ, UPDATE, DELETE).
|
|
44
|
+
*
|
|
45
|
+
* @return {Function} A property decorator function
|
|
46
|
+
*
|
|
47
|
+
* @function hidden
|
|
48
|
+
* @category Property Decorators
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* // Completely hide the internalId field in the UI
|
|
52
|
+
* class Product {
|
|
53
|
+
* @attribute()
|
|
54
|
+
* name: string;
|
|
55
|
+
*
|
|
56
|
+
* @attribute()
|
|
57
|
+
* @hidden()
|
|
58
|
+
* internalId: string;
|
|
59
|
+
* }
|
|
60
|
+
*
|
|
61
|
+
* @mermaid
|
|
62
|
+
* sequenceDiagram
|
|
63
|
+
* participant Model
|
|
64
|
+
* participant hidden
|
|
65
|
+
* participant hideOn
|
|
66
|
+
* participant RenderingEngine
|
|
67
|
+
* Model->>hidden: Apply to property
|
|
68
|
+
* hidden->>hideOn: Call with all operations
|
|
69
|
+
* hideOn->>Model: Add hidden metadata
|
|
70
|
+
* RenderingEngine->>Model: Check if property should be hidden
|
|
71
|
+
* Model->>RenderingEngine: Return all operations
|
|
72
|
+
* RenderingEngine->>UI: Always hide property
|
|
73
|
+
*/
|
|
8
74
|
export declare function hidden(): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
|
9
75
|
/**
|
|
10
|
-
*
|
|
76
|
+
* @description Decorator that specifies how a property should be rendered as a UI element
|
|
77
|
+
* @summary Maps a model property to a specific UI element with custom properties
|
|
78
|
+
* This decorator allows you to define which HTML element or component should be used
|
|
79
|
+
* to render a specific property, along with any additional properties to pass to that element.
|
|
80
|
+
*
|
|
81
|
+
* @param {string} tag The HTML element or component tag name to use for rendering
|
|
82
|
+
* @param {Record<string, any>} [props] Additional properties to pass to the element
|
|
83
|
+
* @param {boolean} [serialize=false] Whether the property should be serialized
|
|
84
|
+
* @return {Function} A property decorator function
|
|
85
|
+
*
|
|
86
|
+
* @function uielement
|
|
87
|
+
* @category Property Decorators
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* // Render a property as a text input
|
|
91
|
+
* class LoginForm {
|
|
92
|
+
* @attribute()
|
|
93
|
+
* @uielement('input', { type: 'text', placeholder: 'Enter username' })
|
|
94
|
+
* username: string;
|
|
11
95
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
96
|
+
* @attribute()
|
|
97
|
+
* @uielement('input', { type: 'password', placeholder: 'Enter password' })
|
|
98
|
+
* password: string;
|
|
15
99
|
*
|
|
16
|
-
*
|
|
100
|
+
* @attribute()
|
|
101
|
+
* @uielement('button', { class: 'btn-primary' })
|
|
102
|
+
* submit: string = 'Login';
|
|
103
|
+
* }
|
|
17
104
|
*
|
|
18
|
-
* @
|
|
19
|
-
*
|
|
105
|
+
* @mermaid
|
|
106
|
+
* sequenceDiagram
|
|
107
|
+
* participant Model
|
|
108
|
+
* participant uielement
|
|
109
|
+
* participant RenderingEngine
|
|
110
|
+
* participant UI
|
|
111
|
+
* Model->>uielement: Apply to property
|
|
112
|
+
* uielement->>Model: Add element metadata
|
|
113
|
+
* RenderingEngine->>Model: Get element metadata
|
|
114
|
+
* Model->>RenderingEngine: Return tag and props
|
|
115
|
+
* RenderingEngine->>UI: Render with specified element
|
|
20
116
|
*/
|
|
21
117
|
export declare function uielement(tag: string, props?: Record<string, any>, serialize?: boolean): (original: any, propertyKey?: any) => void;
|
|
22
118
|
/**
|
|
23
|
-
*
|
|
119
|
+
* @description Decorator that maps a model property to a UI component property
|
|
120
|
+
* @summary Specifies how a property should be passed to a UI component
|
|
121
|
+
* This decorator allows you to define how a model property should be mapped to
|
|
122
|
+
* a property of the UI component when rendering. It requires the class to be
|
|
123
|
+
* decorated with @uimodel.
|
|
24
124
|
*
|
|
25
|
-
*
|
|
125
|
+
* @param {string} [propName] The name of the property to pass to the component (defaults to the property key)
|
|
126
|
+
* @param {boolean} [stringify=false] Whether to stringify the property value
|
|
127
|
+
* @return {Function} A property decorator function
|
|
26
128
|
*
|
|
27
|
-
* @
|
|
129
|
+
* @function uiprop
|
|
130
|
+
* @category Property Decorators
|
|
28
131
|
*
|
|
29
|
-
* @
|
|
132
|
+
* @example
|
|
133
|
+
* // Map model properties to component properties
|
|
134
|
+
* @uimodel('user-profile')
|
|
135
|
+
* class UserProfile {
|
|
136
|
+
* @attribute()
|
|
137
|
+
* @uiprop() // Will be passed as 'fullName' to the component
|
|
138
|
+
* fullName: string;
|
|
30
139
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
140
|
+
* @attribute()
|
|
141
|
+
* @uiprop('userEmail') // Will be passed as 'userEmail' to the component
|
|
142
|
+
* email: string;
|
|
143
|
+
*
|
|
144
|
+
* @attribute()
|
|
145
|
+
* @uiprop('userData', true) // Will be passed as stringified JSON
|
|
146
|
+
* userData: Record<string, any>;
|
|
147
|
+
* }
|
|
148
|
+
*
|
|
149
|
+
* @mermaid
|
|
150
|
+
* sequenceDiagram
|
|
151
|
+
* participant Model
|
|
152
|
+
* participant uiprop
|
|
153
|
+
* participant RenderingEngine
|
|
154
|
+
* participant Component
|
|
155
|
+
* Model->>uiprop: Apply to property
|
|
156
|
+
* uiprop->>Model: Add prop metadata
|
|
157
|
+
* RenderingEngine->>Model: Get prop metadata
|
|
158
|
+
* Model->>RenderingEngine: Return prop name and stringify flag
|
|
159
|
+
* RenderingEngine->>Component: Pass property with specified name
|
|
33
160
|
*/
|
|
34
161
|
export declare function uiprop(propName?: string | undefined, stringify?: boolean): (target: any, propertyKey: string) => void;
|
|
35
162
|
/**
|
|
36
|
-
*
|
|
163
|
+
* @description Decorator that maps a model property to a list item component
|
|
164
|
+
* @summary Specifies how a property should be rendered in a list context
|
|
165
|
+
* This decorator allows you to define how a model property containing a list
|
|
166
|
+
* should be rendered. It requires the class to be decorated with @uilistitem.
|
|
167
|
+
*
|
|
168
|
+
* @param {string} [propName] The name of the property to pass to the list component (defaults to the property key)
|
|
169
|
+
* @param {Record<string, any>} [props] Additional properties to pass to the list container
|
|
170
|
+
* @return {Function} A property decorator function
|
|
171
|
+
*
|
|
172
|
+
* @function uilistprop
|
|
173
|
+
* @category Property Decorators
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* // Define a list property with custom rendering
|
|
177
|
+
* @uimodel('todo-list')
|
|
178
|
+
* class TodoList {
|
|
179
|
+
* @attribute()
|
|
180
|
+
* title: string;
|
|
37
181
|
*
|
|
38
|
-
*
|
|
182
|
+
* @attribute()
|
|
183
|
+
* @uilistprop('items', { class: 'todo-items-container' })
|
|
184
|
+
* items: TodoItem[];
|
|
185
|
+
* }
|
|
39
186
|
*
|
|
40
|
-
* @
|
|
187
|
+
* @uilistitem('li', { class: 'todo-item' })
|
|
188
|
+
* class TodoItem extends Model {
|
|
189
|
+
* @attribute()
|
|
190
|
+
* text: string;
|
|
41
191
|
*
|
|
42
|
-
*
|
|
192
|
+
* @attribute()
|
|
193
|
+
* completed: boolean;
|
|
194
|
+
* }
|
|
43
195
|
*
|
|
44
|
-
* @
|
|
45
|
-
*
|
|
196
|
+
* @mermaid
|
|
197
|
+
* sequenceDiagram
|
|
198
|
+
* participant Model
|
|
199
|
+
* participant uilistprop
|
|
200
|
+
* participant RenderingEngine
|
|
201
|
+
* participant ListContainer
|
|
202
|
+
* participant ListItems
|
|
203
|
+
* Model->>uilistprop: Apply to property
|
|
204
|
+
* uilistprop->>Model: Add list prop metadata
|
|
205
|
+
* RenderingEngine->>Model: Get list prop metadata
|
|
206
|
+
* Model->>RenderingEngine: Return prop name and container props
|
|
207
|
+
* RenderingEngine->>ListContainer: Create container with props
|
|
208
|
+
* RenderingEngine->>ListItems: Render each item using @uilistitem
|
|
209
|
+
* ListContainer->>RenderingEngine: Return rendered list
|
|
46
210
|
*/
|
|
47
211
|
export declare function uilistprop(propName?: string | undefined, props?: Record<string, any>): (target: any, propertyKey: string) => void;
|
package/lib/ui/errors.cjs
CHANGED
|
@@ -2,10 +2,38 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RenderingError = void 0;
|
|
4
4
|
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
5
|
+
/**
|
|
6
|
+
* @description Error thrown when a rendering operation fails
|
|
7
|
+
* @summary Specialized error for rendering failures in UI components
|
|
8
|
+
* This error is thrown when the rendering engine encounters an error while
|
|
9
|
+
* attempting to render a UI component or model.
|
|
10
|
+
*
|
|
11
|
+
* @param {string|Error} msg The error message or original error
|
|
12
|
+
*
|
|
13
|
+
* @class RenderingError
|
|
14
|
+
* @extends BaseError
|
|
15
|
+
* @category Errors
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // Throwing a rendering error
|
|
19
|
+
* try {
|
|
20
|
+
* // Rendering code that might fail
|
|
21
|
+
* if (!component.canRender()) {
|
|
22
|
+
* throw new RenderingError('Component cannot be rendered');
|
|
23
|
+
* }
|
|
24
|
+
* } catch (error) {
|
|
25
|
+
* console.error('Rendering failed:', error.message);
|
|
26
|
+
* }
|
|
27
|
+
*/
|
|
5
28
|
class RenderingError extends db_decorators_1.BaseError {
|
|
29
|
+
/**
|
|
30
|
+
* @description Creates a new RenderingError instance
|
|
31
|
+
* @summary Initializes the error with a message or original error
|
|
32
|
+
* @param {string|Error} msg The error message or original error
|
|
33
|
+
*/
|
|
6
34
|
constructor(msg) {
|
|
7
35
|
super(RenderingError.name, msg);
|
|
8
36
|
}
|
|
9
37
|
}
|
|
10
38
|
exports.RenderingError = RenderingError;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VpL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBb0Q7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFhLGNBQWUsU0FBUSx5QkFBUztJQUMzQzs7OztPQUlHO0lBQ0gsWUFBWSxHQUFtQjtRQUM3QixLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUFURCx3Q0FTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFcnJvciB0aHJvd24gd2hlbiBhIHJlbmRlcmluZyBvcGVyYXRpb24gZmFpbHNcbiAqIEBzdW1tYXJ5IFNwZWNpYWxpemVkIGVycm9yIGZvciByZW5kZXJpbmcgZmFpbHVyZXMgaW4gVUkgY29tcG9uZW50c1xuICogVGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiB0aGUgcmVuZGVyaW5nIGVuZ2luZSBlbmNvdW50ZXJzIGFuIGVycm9yIHdoaWxlXG4gKiBhdHRlbXB0aW5nIHRvIHJlbmRlciBhIFVJIGNvbXBvbmVudCBvciBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xFcnJvcn0gbXNnIFRoZSBlcnJvciBtZXNzYWdlIG9yIG9yaWdpbmFsIGVycm9yXG4gKlxuICogQGNsYXNzIFJlbmRlcmluZ0Vycm9yXG4gKiBAZXh0ZW5kcyBCYXNlRXJyb3JcbiAqIEBjYXRlZ29yeSBFcnJvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhyb3dpbmcgYSByZW5kZXJpbmcgZXJyb3JcbiAqIHRyeSB7XG4gKiAgIC8vIFJlbmRlcmluZyBjb2RlIHRoYXQgbWlnaHQgZmFpbFxuICogICBpZiAoIWNvbXBvbmVudC5jYW5SZW5kZXIoKSkge1xuICogICAgIHRocm93IG5ldyBSZW5kZXJpbmdFcnJvcignQ29tcG9uZW50IGNhbm5vdCBiZSByZW5kZXJlZCcpO1xuICogICB9XG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBjb25zb2xlLmVycm9yKCdSZW5kZXJpbmcgZmFpbGVkOicsIGVycm9yLm1lc3NhZ2UpO1xuICogfVxuICovXG5leHBvcnQgY2xhc3MgUmVuZGVyaW5nRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgUmVuZGVyaW5nRXJyb3IgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgdGhlIGVycm9yIHdpdGggYSBtZXNzYWdlIG9yIG9yaWdpbmFsIGVycm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfEVycm9yfSBtc2cgVGhlIGVycm9yIG1lc3NhZ2Ugb3Igb3JpZ2luYWwgZXJyb3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihSZW5kZXJpbmdFcnJvci5uYW1lLCBtc2cpO1xuICB9XG59XG4iXX0=
|
package/lib/ui/errors.d.ts
CHANGED
|
@@ -1,4 +1,32 @@
|
|
|
1
1
|
import { BaseError } from "@decaf-ts/db-decorators";
|
|
2
|
+
/**
|
|
3
|
+
* @description Error thrown when a rendering operation fails
|
|
4
|
+
* @summary Specialized error for rendering failures in UI components
|
|
5
|
+
* This error is thrown when the rendering engine encounters an error while
|
|
6
|
+
* attempting to render a UI component or model.
|
|
7
|
+
*
|
|
8
|
+
* @param {string|Error} msg The error message or original error
|
|
9
|
+
*
|
|
10
|
+
* @class RenderingError
|
|
11
|
+
* @extends BaseError
|
|
12
|
+
* @category Errors
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // Throwing a rendering error
|
|
16
|
+
* try {
|
|
17
|
+
* // Rendering code that might fail
|
|
18
|
+
* if (!component.canRender()) {
|
|
19
|
+
* throw new RenderingError('Component cannot be rendered');
|
|
20
|
+
* }
|
|
21
|
+
* } catch (error) {
|
|
22
|
+
* console.error('Rendering failed:', error.message);
|
|
23
|
+
* }
|
|
24
|
+
*/
|
|
2
25
|
export declare class RenderingError extends BaseError {
|
|
26
|
+
/**
|
|
27
|
+
* @description Creates a new RenderingError instance
|
|
28
|
+
* @summary Initializes the error with a message or original error
|
|
29
|
+
* @param {string|Error} msg The error message or original error
|
|
30
|
+
*/
|
|
3
31
|
constructor(msg: string | Error);
|
|
4
32
|
}
|
package/lib/ui/index.cjs
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @namespace ui-decorators.ui
|
|
4
|
-
* @memberOf ui-decorators
|
|
5
|
-
*/
|
|
6
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
3
|
if (k2 === undefined) k2 = k;
|
|
8
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -25,4 +21,4 @@ __exportStar(require("./interfaces.cjs"), exports);
|
|
|
25
21
|
__exportStar(require("./Rendering.cjs"), exports);
|
|
26
22
|
__exportStar(require("./types.cjs"), exports);
|
|
27
23
|
__exportStar(require("./utils.cjs"), exports);
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdWkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUE0QjtBQUM1QixtREFBNkI7QUFDN0IsK0NBQXlCO0FBQ3pCLG1EQUE2QjtBQUM3QixrREFBNEI7QUFDNUIsOENBQXdCO0FBQ3hCLDhDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZW5kZXJpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuIl19
|
package/lib/ui/index.d.ts
CHANGED
package/lib/ui/interfaces.cjs
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Interfaces for UI form components
|
|
4
|
+
* @summary Defines interfaces for form fields with CRUD operations
|
|
5
|
+
* This module contains interfaces that extend basic field properties with
|
|
6
|
+
* CRUD operation information for form generation.
|
|
7
|
+
* @module ui/interfaces
|
|
8
|
+
* @memberOf module:ui-decorators
|
|
9
|
+
*/
|
|
2
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlcyBmb3IgVUkgZm9ybSBjb21wb25lbnRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGludGVyZmFjZXMgZm9yIGZvcm0gZmllbGRzIHdpdGggQ1JVRCBvcGVyYXRpb25zXG4gKiBUaGlzIG1vZHVsZSBjb250YWlucyBpbnRlcmZhY2VzIHRoYXQgZXh0ZW5kIGJhc2ljIGZpZWxkIHByb3BlcnRpZXMgd2l0aFxuICogQ1JVRCBvcGVyYXRpb24gaW5mb3JtYXRpb24gZm9yIGZvcm0gZ2VuZXJhdGlvbi5cbiAqIEBtb2R1bGUgdWkvaW50ZXJmYWNlc1xuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKi9cblxuaW1wb3J0IHsgRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IENydWRPcGVyYXRpb25zIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm0gZmllbGQgaW50ZXJmYWNlIHdpdGggQ1JVRCBvcGVyYXRpb24gaW5mb3JtYXRpb25cbiAqIEBzdW1tYXJ5IEV4dGVuZHMgYmFzaWMgZmllbGQgcHJvcGVydGllcyB3aXRoIGEgc3BlY2lmaWMgQ1JVRCBvcGVyYXRpb25cbiAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBmb3JtIGZpZWxkIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWNcbiAqIENSVUQgb3BlcmF0aW9uIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlKS4gSXQgY29tYmluZXMgYWxsIHRoZSBzdGFuZGFyZFxuICogZmllbGQgcHJvcGVydGllcyB3aXRoIGFuIG9wZXJhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJmYWNlIENydWRGb3JtRmllbGRcbiAqIEBleHRlbmRzIEZpZWxkUHJvcGVydGllc1xuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKlxuICogQHByb3BlcnR5IHtDcnVkT3BlcmF0aW9uc30gb3BlcmF0aW9uIC0gVGhlIENSVUQgb3BlcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3J1ZEZvcm1GaWVsZCBleHRlbmRzIEZpZWxkUHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIENSVUQgb3BlcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGljaCBvcGVyYXRpb24gKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUpIHRoaXMgZmllbGQgaXMgZm9yXG4gICAqL1xuICBvcGVyYXRpb246IENydWRPcGVyYXRpb25zO1xufVxuIl19
|