@decaf-ts/ui-decorators 0.4.5 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/ui-decorators.bundle.min.esm.js +2 -0
- package/dist/esm/ui-decorators.bundle.min.esm.js.LICENSE.txt +14 -0
- package/dist/ui-decorators.bundle.min.js +2 -0
- package/dist/ui-decorators.bundle.min.js.LICENSE.txt +14 -0
- package/lib/esm/index.d.ts +12 -0
- package/lib/esm/index.js +14 -0
- package/lib/esm/model/Renderable.d.ts +3 -0
- package/lib/esm/model/Renderable.js +3 -0
- package/lib/esm/model/decorators.d.ts +25 -0
- package/lib/esm/model/decorators.js +41 -0
- package/lib/esm/model/index.d.ts +8 -0
- package/lib/esm/model/index.js +10 -0
- package/lib/esm/model/model.d.ts +115 -0
- package/lib/esm/model/model.js +3 -0
- package/lib/esm/model/overrides.d.ts +1 -0
- package/lib/esm/model/overrides.js +7 -0
- package/lib/esm/ui/Rendering.d.ts +183 -0
- package/lib/esm/ui/Rendering.js +298 -0
- package/lib/esm/ui/constants.d.ts +64 -0
- package/lib/esm/ui/constants.js +88 -0
- package/lib/esm/ui/decorators.d.ts +34 -0
- package/lib/esm/ui/decorators.js +62 -0
- package/lib/esm/ui/errors.d.ts +4 -0
- package/lib/esm/ui/errors.js +8 -0
- package/lib/esm/ui/index.d.ts +11 -0
- package/lib/esm/ui/index.js +13 -0
- package/lib/esm/ui/interfaces.d.ts +5 -0
- package/lib/esm/ui/interfaces.js +3 -0
- package/lib/esm/ui/types.d.ts +46 -0
- package/lib/esm/ui/types.js +3 -0
- package/lib/esm/ui/utils.d.ts +13 -0
- package/lib/esm/ui/utils.js +88 -0
- package/lib/index.cjs +29 -0
- package/lib/index.d.ts +12 -0
- package/lib/model/Renderable.cjs +2 -0
- package/lib/model/Renderable.d.ts +3 -0
- package/lib/model/decorators.cjs +43 -0
- package/lib/model/decorators.d.ts +25 -0
- package/lib/model/index.cjs +24 -0
- package/lib/model/index.d.ts +8 -0
- package/lib/model/model.cjs +2 -0
- package/lib/model/model.d.ts +115 -0
- package/lib/model/overrides.cjs +7 -0
- package/lib/model/overrides.d.ts +1 -0
- package/lib/ui/Rendering.cjs +300 -0
- package/lib/ui/Rendering.d.ts +183 -0
- package/lib/ui/constants.cjs +89 -0
- package/lib/ui/constants.d.ts +64 -0
- package/lib/ui/decorators.cjs +66 -0
- package/lib/ui/decorators.d.ts +34 -0
- package/lib/ui/errors.cjs +10 -0
- package/lib/ui/errors.d.ts +4 -0
- package/lib/ui/index.cjs +27 -0
- package/lib/ui/index.d.ts +11 -0
- package/lib/ui/interfaces.cjs +2 -0
- package/lib/ui/interfaces.d.ts +5 -0
- package/lib/ui/types.cjs +2 -0
- package/lib/ui/types.d.ts +46 -0
- package/lib/ui/utils.cjs +94 -0
- package/lib/ui/utils.d.ts +13 -0
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tags the model as a uimodel, giving it the 'render' method
|
|
3
|
+
*
|
|
4
|
+
* @param {string} [tag] optional param. will render the provided elment wrapping the attribute uielements
|
|
5
|
+
* @param {{}} [props] optional param. Attributes to be passed to the tag element
|
|
6
|
+
* @param {function(any): void} [instanceCallback] optional callback returning the instance after creation for additional logic
|
|
7
|
+
*
|
|
8
|
+
* @decorator uimodel
|
|
9
|
+
*
|
|
10
|
+
* @mermaid
|
|
11
|
+
* sequenceDiagram
|
|
12
|
+
* participant System
|
|
13
|
+
* participant uimodel
|
|
14
|
+
* participant constructor
|
|
15
|
+
* participant instance
|
|
16
|
+
* System->>uimodel:do(constructor)
|
|
17
|
+
* uimodel->>constructor: Executes the constructor
|
|
18
|
+
* constructor->>uimodel: returns instance
|
|
19
|
+
* uimodel->>instance: adds the render method
|
|
20
|
+
* uimodel->>System: returns UIModel instance
|
|
21
|
+
*
|
|
22
|
+
* @category Decorators
|
|
23
|
+
*/
|
|
24
|
+
export declare function uimodel(tag?: string, props?: Record<string, any>): (original: any, propertyKey?: any) => void;
|
|
25
|
+
export declare function renderedBy(engine: string): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { UIKeys } from "../ui/constants";
|
|
2
|
+
import { apply, metadata } from "@decaf-ts/reflection";
|
|
3
|
+
import { RenderingEngine } from "../ui/Rendering";
|
|
4
|
+
/**
|
|
5
|
+
* Tags the model as a uimodel, giving it the 'render' method
|
|
6
|
+
*
|
|
7
|
+
* @param {string} [tag] optional param. will render the provided elment wrapping the attribute uielements
|
|
8
|
+
* @param {{}} [props] optional param. Attributes to be passed to the tag element
|
|
9
|
+
* @param {function(any): void} [instanceCallback] optional callback returning the instance after creation for additional logic
|
|
10
|
+
*
|
|
11
|
+
* @decorator uimodel
|
|
12
|
+
*
|
|
13
|
+
* @mermaid
|
|
14
|
+
* sequenceDiagram
|
|
15
|
+
* participant System
|
|
16
|
+
* participant uimodel
|
|
17
|
+
* participant constructor
|
|
18
|
+
* participant instance
|
|
19
|
+
* System->>uimodel:do(constructor)
|
|
20
|
+
* uimodel->>constructor: Executes the constructor
|
|
21
|
+
* constructor->>uimodel: returns instance
|
|
22
|
+
* uimodel->>instance: adds the render method
|
|
23
|
+
* uimodel->>System: returns UIModel instance
|
|
24
|
+
*
|
|
25
|
+
* @category Decorators
|
|
26
|
+
*/
|
|
27
|
+
export function uimodel(tag, props) {
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
29
|
+
return (original, propertyKey) => {
|
|
30
|
+
const meta = {
|
|
31
|
+
tag: tag || original.name,
|
|
32
|
+
props: props,
|
|
33
|
+
};
|
|
34
|
+
return metadata(RenderingEngine.key(UIKeys.UIMODEL), meta)(original);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function renderedBy(engine) {
|
|
38
|
+
return apply(metadata(RenderingEngine.key(UIKeys.RENDERED_BY), engine));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBWSxFQUFFLEtBQTJCO0lBQy9ELDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBb0I7WUFDNUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSTtZQUN6QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFjO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJmaWxlIjoibW9kZWwvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVJS2V5cyB9IGZyb20gXCIuLi91aS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGFwcGx5LCBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgUmVuZGVyaW5nRW5naW5lIH0gZnJvbSBcIi4uL3VpL1JlbmRlcmluZ1wiO1xuaW1wb3J0IHsgVUlNb2RlbE1ldGFkYXRhIH0gZnJvbSBcIi4uL3VpL3R5cGVzXCI7XG5cbi8qKlxuICogVGFncyB0aGUgbW9kZWwgYXMgYSB1aW1vZGVsLCBnaXZpbmcgaXQgdGhlICdyZW5kZXInIG1ldGhvZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGFnXSBvcHRpb25hbCBwYXJhbS4gd2lsbCByZW5kZXIgdGhlIHByb3ZpZGVkIGVsbWVudCB3cmFwcGluZyB0aGUgYXR0cmlidXRlIHVpZWxlbWVudHNcbiAqIEBwYXJhbSB7e319IFtwcm9wc10gb3B0aW9uYWwgcGFyYW0uIEF0dHJpYnV0ZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSB0YWcgZWxlbWVudFxuICogQHBhcmFtIHtmdW5jdGlvbihhbnkpOiB2b2lkfSBbaW5zdGFuY2VDYWxsYmFja10gb3B0aW9uYWwgY2FsbGJhY2sgcmV0dXJuaW5nIHRoZSBpbnN0YW5jZSBhZnRlciBjcmVhdGlvbiBmb3IgYWRkaXRpb25hbCBsb2dpY1xuICpcbiAqIEBkZWNvcmF0b3IgdWltb2RlbFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgU3lzdGVtXG4gKiAgIHBhcnRpY2lwYW50IHVpbW9kZWxcbiAqICAgcGFydGljaXBhbnQgY29uc3RydWN0b3JcbiAqICAgcGFydGljaXBhbnQgaW5zdGFuY2VcbiAqICAgU3lzdGVtLT4+dWltb2RlbDpkbyhjb25zdHJ1Y3RvcilcbiAqICAgdWltb2RlbC0+PmNvbnN0cnVjdG9yOiBFeGVjdXRlcyB0aGUgY29uc3RydWN0b3JcbiAqICAgY29uc3RydWN0b3ItPj51aW1vZGVsOiByZXR1cm5zIGluc3RhbmNlXG4gKiAgIHVpbW9kZWwtPj5pbnN0YW5jZTogYWRkcyB0aGUgcmVuZGVyIG1ldGhvZFxuICogICB1aW1vZGVsLT4+U3lzdGVtOiByZXR1cm5zIFVJTW9kZWwgaW5zdGFuY2VcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdWltb2RlbCh0YWc/OiBzdHJpbmcsIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJldHVybiAob3JpZ2luYWw6IGFueSwgcHJvcGVydHlLZXk/OiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXRhOiBVSU1vZGVsTWV0YWRhdGEgPSB7XG4gICAgICB0YWc6IHRhZyB8fCBvcmlnaW5hbC5uYW1lLFxuICAgICAgcHJvcHM6IHByb3BzLFxuICAgIH07XG4gICAgcmV0dXJuIG1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTU9ERUwpLCBtZXRhKShvcmlnaW5hbCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJlZEJ5KGVuZ2luZTogc3RyaW5nKSB7XG4gIHJldHVybiBhcHBseShtZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5SRU5ERVJFRF9CWSksIGVuZ2luZSkpO1xufVxuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @namespace model
|
|
3
|
+
* @memberOf ui-decorators
|
|
4
|
+
*/
|
|
5
|
+
import "./model";
|
|
6
|
+
export * from "./decorators";
|
|
7
|
+
export * from "./overrides";
|
|
8
|
+
export * from "./Renderable";
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLFNBQVMsQ0FBQztBQUVqQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQyIsImZpbGUiOiJtb2RlbC9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG5hbWVzcGFjZSBtb2RlbFxuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnNcbiAqL1xuXG5pbXBvcnQgXCIuL21vZGVsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL292ZXJyaWRlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVuZGVyYWJsZVwiO1xuIl19
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { ModelErrorDefinition } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { BuilderRegistry, Comparable, Constructor, Hashable, ModelArg, ModelBuilderFunction, ModelConstructor, Serializable, Validatable } from "@decaf-ts/decorator-validation";
|
|
3
|
+
import { Renderable } from "./Renderable";
|
|
4
|
+
declare module "@decaf-ts/decorator-validation" {
|
|
5
|
+
abstract class Model implements Validatable, Serializable, Hashable, Comparable<Model>, Renderable {
|
|
6
|
+
protected constructor(arg?: ModelArg<Model>);
|
|
7
|
+
hasErrors(...exclusions: any[]): ModelErrorDefinition | undefined;
|
|
8
|
+
hasErrors(previousVersion?: Model | any, ...exclusions: any[]): ModelErrorDefinition | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* @summary Compare object equality recursively
|
|
11
|
+
* @param {any} obj object to compare to
|
|
12
|
+
* @param {string} [exceptions] property names to be excluded from the comparison
|
|
13
|
+
*/
|
|
14
|
+
equals(obj: any, ...exceptions: string[]): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* @summary Returns the serialized model according to the currently defined {@link Serializer}
|
|
17
|
+
*/
|
|
18
|
+
serialize(): string;
|
|
19
|
+
/**
|
|
20
|
+
* @summary Override the implementation for js's 'toString()' which sucks...
|
|
21
|
+
* @override
|
|
22
|
+
*/
|
|
23
|
+
toString(): string;
|
|
24
|
+
/**
|
|
25
|
+
* @summary Defines a default implementation for object hash. Relies on a very basic implementation based on Java's string hash;
|
|
26
|
+
*/
|
|
27
|
+
hash(): string;
|
|
28
|
+
/**
|
|
29
|
+
* @summary Deserializes a Model
|
|
30
|
+
* @param {string} str
|
|
31
|
+
*
|
|
32
|
+
* @param args
|
|
33
|
+
* @throws {Error} If it fails to parse the string, or if it fails to build the model
|
|
34
|
+
*/
|
|
35
|
+
static deserialize(str: string): any;
|
|
36
|
+
/**
|
|
37
|
+
* @summary Repopulates the Object properties with the ones from the new object
|
|
38
|
+
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self
|
|
39
|
+
*
|
|
40
|
+
* @param {T} self
|
|
41
|
+
* @param {T | Record<string, any>} [obj]
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
static fromObject<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
45
|
+
/**
|
|
46
|
+
* @summary Repopulates the instance with the ones from the new Model Object
|
|
47
|
+
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self.
|
|
48
|
+
* Is aware of nested Model Objects and rebuilds them also.
|
|
49
|
+
* When List properties are decorated with {@link list}, they list items will also be rebuilt
|
|
50
|
+
*
|
|
51
|
+
* @param {T} self
|
|
52
|
+
* @param {T | Record<string, any>} [obj]
|
|
53
|
+
*
|
|
54
|
+
*/
|
|
55
|
+
static fromModel<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
56
|
+
/**
|
|
57
|
+
* @summary Sets the Global {@link ModelBuilderFunction}
|
|
58
|
+
* @param {ModelBuilderFunction} [builder]
|
|
59
|
+
*/
|
|
60
|
+
static setBuilder(builder?: ModelBuilderFunction): void;
|
|
61
|
+
/**
|
|
62
|
+
* @summary Retrieves the current global {@link ModelBuilderFunction}
|
|
63
|
+
*/
|
|
64
|
+
static getBuilder(): ModelBuilderFunction | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Returns the current {@link ModelRegistryManager}
|
|
67
|
+
*
|
|
68
|
+
* @return ModelRegistry, defaults to {@link ModelRegistryManager}
|
|
69
|
+
*/
|
|
70
|
+
private static getRegistry;
|
|
71
|
+
/**
|
|
72
|
+
* Returns the current actingModelRegistry
|
|
73
|
+
*
|
|
74
|
+
* @param {BuilderRegistry} modelRegistry the new implementation of Registry
|
|
75
|
+
*/
|
|
76
|
+
static setRegistry(modelRegistry: BuilderRegistry<any>): void;
|
|
77
|
+
/**
|
|
78
|
+
* @summary register new Models
|
|
79
|
+
* @param {any} constructor
|
|
80
|
+
* @param {string} [name] when not defined, the name of the constructor will be used
|
|
81
|
+
*
|
|
82
|
+
* @see ModelRegistry
|
|
83
|
+
*/
|
|
84
|
+
static register<T extends Model>(constructor: ModelConstructor<T>, name?: string): void;
|
|
85
|
+
/**
|
|
86
|
+
* @summary Gets a registered Model {@link ModelConstructor}
|
|
87
|
+
* @param {string} name
|
|
88
|
+
*
|
|
89
|
+
* @see ModelRegistry
|
|
90
|
+
*/
|
|
91
|
+
static get<T extends Model>(name: string): ModelConstructor<T> | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* @param {Record<string, any>} obj
|
|
94
|
+
* @param {string} [clazz] when provided, it will attempt to find the matching constructor
|
|
95
|
+
*
|
|
96
|
+
* @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
|
|
97
|
+
*
|
|
98
|
+
* @see ModelRegistry
|
|
99
|
+
*/
|
|
100
|
+
static build<T extends Model>(obj?: Record<string, any>, clazz?: string): T;
|
|
101
|
+
static getMetadata<V extends Model>(model: V): any;
|
|
102
|
+
static getAttributes<V extends Model>(model: Constructor<V> | V): string[];
|
|
103
|
+
static equals<V extends Model>(obj1: V, obj2: V, ...exceptions: any[]): boolean;
|
|
104
|
+
static hasErrors<V extends Model>(model: V, ...exceptions: any[]): ModelErrorDefinition | undefined;
|
|
105
|
+
static serialize<V extends Model>(model: V): any;
|
|
106
|
+
static hash<V extends Model>(model: V): any;
|
|
107
|
+
/**
|
|
108
|
+
* @summary Builds the key to store as Metadata under Reflections
|
|
109
|
+
* @description concatenates {@link ModelKeys#REFLECT} with the provided key
|
|
110
|
+
* @param {string} str
|
|
111
|
+
*/
|
|
112
|
+
static key(str: string): string;
|
|
113
|
+
render<R>(...args: any[]): R;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6Im1vZGVsL21vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBCdWlsZGVyUmVnaXN0cnksXG4gIENvbXBhcmFibGUsXG4gIENvbnN0cnVjdG9yLFxuICBIYXNoYWJsZSxcbiAgTW9kZWxBcmcsXG4gIE1vZGVsQnVpbGRlckZ1bmN0aW9uLFxuICBNb2RlbENvbnN0cnVjdG9yLFxuICBTZXJpYWxpemFibGUsXG4gIFZhbGlkYXRhYmxlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZW5kZXJhYmxlIH0gZnJvbSBcIi4vUmVuZGVyYWJsZVwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBoYWNreSBvdmVycmlkZVxuICBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIE1vZGVsXG4gICAgaW1wbGVtZW50c1xuICAgICAgVmFsaWRhdGFibGUsXG4gICAgICBTZXJpYWxpemFibGUsXG4gICAgICBIYXNoYWJsZSxcbiAgICAgIENvbXBhcmFibGU8TW9kZWw+LFxuICAgICAgUmVuZGVyYWJsZVxuICB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPE1vZGVsPik7XG5cbiAgICBoYXNFcnJvcnMoLi4uZXhjbHVzaW9uczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbiAgICBoYXNFcnJvcnMoXG4gICAgICBwcmV2aW91c1ZlcnNpb24/OiBNb2RlbCB8IGFueSxcbiAgICAgIC4uLmV4Y2x1c2lvbnM6IGFueVtdXG4gICAgKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBDb21wYXJlIG9iamVjdCBlcXVhbGl0eSByZWN1cnNpdmVseVxuICAgICAqIEBwYXJhbSB7YW55fSBvYmogb2JqZWN0IHRvIGNvbXBhcmUgdG9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4Y2VwdGlvbnNdIHByb3BlcnR5IG5hbWVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvbXBhcmlzb25cbiAgICAgKi9cbiAgICBlcXVhbHMob2JqOiBhbnksIC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIG1vZGVsIGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IGRlZmluZWQge0BsaW5rIFNlcmlhbGl6ZXJ9XG4gICAgICovXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBPdmVycmlkZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGpzJ3MgJ3RvU3RyaW5nKCknIHdoaWNoIHN1Y2tzLi4uXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IERlZmluZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBvYmplY3QgaGFzaC4gUmVsaWVzIG9uIGEgdmVyeSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBKYXZhJ3Mgc3RyaW5nIGhhc2g7XG4gICAgICovXG4gICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgRGVzZXJpYWxpemVzIGEgTW9kZWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXJnc1xuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlscyB0byBwYXJzZSB0aGUgc3RyaW5nLCBvciBpZiBpdCBmYWlscyB0byBidWlsZCB0aGUgbW9kZWxcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoc3RyOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICAgICAqIEBkZXNjcmlwdGlvbiBJdGVyYXRlcyBhbGwgY29tbW9uIHByb3BlcnRpZXMgb2Ygb2JqIChpZiBleGlzdGluZykgYW5kIHNlbGYsIGFuZCBjb3BpZXMgdGhlbSBvbnRvIHNlbGZcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgICAqIEBwYXJhbSB7VCB8IFJlY29yZDxzdHJpbmcsIGFueT59IFtvYmpdXG4gICAgICpcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbU9iamVjdDxUIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgc2VsZjogVCxcbiAgICAgIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgKTogVDtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXBvcHVsYXRlcyB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgb25lcyBmcm9tIHRoZSBuZXcgTW9kZWwgT2JqZWN0XG4gICAgICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZi5cbiAgICAgKiBJcyBhd2FyZSBvZiBuZXN0ZWQgTW9kZWwgT2JqZWN0cyBhbmQgcmVidWlsZHMgdGhlbSBhbHNvLlxuICAgICAqIFdoZW4gTGlzdCBwcm9wZXJ0aWVzIGFyZSBkZWNvcmF0ZWQgd2l0aCB7QGxpbmsgbGlzdH0sIHRoZXkgbGlzdCBpdGVtcyB3aWxsIGFsc28gYmUgcmVidWlsdFxuICAgICAqXG4gICAgICogQHBhcmFtIHtUfSBzZWxmXG4gICAgICogQHBhcmFtIHtUIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW29ial1cbiAgICAgKlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tTW9kZWw8VCBleHRlbmRzIE1vZGVsPihcbiAgICAgIHNlbGY6IFQsXG4gICAgICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICk6IFQ7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgR2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn1cbiAgICAgKiBAcGFyYW0ge01vZGVsQnVpbGRlckZ1bmN0aW9ufSBbYnVpbGRlcl1cbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0QnVpbGRlcihidWlsZGVyPzogTW9kZWxCdWlsZGVyRnVuY3Rpb24pOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgY3VycmVudCBnbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRCdWlsZGVyKCk6IE1vZGVsQnVpbGRlckZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQge0BsaW5rIE1vZGVsUmVnaXN0cnlNYW5hZ2VyfVxuICAgICAqXG4gICAgICogQHJldHVybiBNb2RlbFJlZ2lzdHJ5LCBkZWZhdWx0cyB0byB7QGxpbmsgTW9kZWxSZWdpc3RyeU1hbmFnZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpbmdNb2RlbFJlZ2lzdHJ5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0J1aWxkZXJSZWdpc3RyeX0gbW9kZWxSZWdpc3RyeSB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIFJlZ2lzdHJ5XG4gICAgICovXG4gICAgc3RhdGljIHNldFJlZ2lzdHJ5KG1vZGVsUmVnaXN0cnk6IEJ1aWxkZXJSZWdpc3RyeTxhbnk+KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSByZWdpc3RlciBuZXcgTW9kZWxzXG4gICAgICogQHBhcmFtIHthbnl9IGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB3aGVuIG5vdCBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSB1c2VkXG4gICAgICpcbiAgICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVnaXN0ZXI8VCBleHRlbmRzIE1vZGVsPihcbiAgICAgIGNvbnN0cnVjdG9yOiBNb2RlbENvbnN0cnVjdG9yPFQ+LFxuICAgICAgbmFtZT86IHN0cmluZ1xuICAgICk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgR2V0cyBhIHJlZ2lzdGVyZWQgTW9kZWwge0BsaW5rIE1vZGVsQ29uc3RydWN0b3J9XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKlxuICAgICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihuYW1lOiBzdHJpbmcpOiBNb2RlbENvbnN0cnVjdG9yPFQ+IHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjbGF6el0gd2hlbiBwcm92aWRlZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIG1hdGNoaW5nIGNvbnN0cnVjdG9yXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIEVycm9yIElmIGNsYXp6IGlzIG5vdCBmb3VuZCwgb3Igb2JqIGlzIG5vdCBhIHtAbGluayBNb2RlbH0gbWVhbmluZyBpdCBoYXMgbm8ge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICAgKi9cbiAgICBzdGF0aWMgYnVpbGQ8VCBleHRlbmRzIE1vZGVsPihvYmo/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjbGF6ej86IHN0cmluZyk6IFQ7XG4gICAgc3RhdGljIGdldE1ldGFkYXRhPFYgZXh0ZW5kcyBNb2RlbD4obW9kZWw6IFYpOiBhbnk7XG4gICAgc3RhdGljIGdldEF0dHJpYnV0ZXM8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogQ29uc3RydWN0b3I8Vj4gfCBWKTogc3RyaW5nW107XG4gICAgc3RhdGljIGVxdWFsczxWIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgb2JqMTogVixcbiAgICAgIG9iajI6IFYsXG4gICAgICAuLi5leGNlcHRpb25zOiBhbnlbXVxuICAgICk6IGJvb2xlYW47XG4gICAgc3RhdGljIGhhc0Vycm9yczxWIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbW9kZWw6IFYsXG4gICAgICAuLi5leGNlcHRpb25zOiBhbnlbXVxuICAgICk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuICAgIHN0YXRpYyBzZXJpYWxpemU8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogVik6IGFueTtcbiAgICBzdGF0aWMgaGFzaDxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBWKTogYW55O1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUga2V5IHRvIHN0b3JlIGFzIE1ldGFkYXRhIHVuZGVyIFJlZmxlY3Rpb25zXG4gICAgICogQGRlc2NyaXB0aW9uIGNvbmNhdGVuYXRlcyB7QGxpbmsgTW9kZWxLZXlzI1JFRkxFQ1R9IHdpdGggdGhlIHByb3ZpZGVkIGtleVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKi9cbiAgICBzdGF0aWMga2V5KHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgIHJlbmRlcjxSPiguLi5hcmdzOiBhbnlbXSk6IFI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { RenderingEngine } from "../ui/Rendering";
|
|
3
|
+
Model.prototype.render = function (...args) {
|
|
4
|
+
return RenderingEngine.render(this, ...args);
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9vdmVycmlkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFvQyxHQUFHLElBQVc7SUFDekUsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyIsImZpbGUiOiJtb2RlbC9vdmVycmlkZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJlbmRlcmluZ0VuZ2luZSB9IGZyb20gXCIuLi91aS9SZW5kZXJpbmdcIjtcblxuTW9kZWwucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIDxNIGV4dGVuZHMgTW9kZWw+KHRoaXM6IE0sIC4uLmFyZ3M6IGFueVtdKSB7XG4gIHJldHVybiBSZW5kZXJpbmdFbmdpbmUucmVuZGVyKHRoaXMsIC4uLmFyZ3MpO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { Model, ValidationMetadata } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { FieldDefinition } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* @description Abstract class for rendering UI components based on model metadata.
|
|
5
|
+
* @summary The RenderingEngine class provides a framework for converting model metadata into UI field definitions.
|
|
6
|
+
* It handles the translation of model properties to UI elements, applies validation rules, and manages different rendering flavors.
|
|
7
|
+
* This class is designed to be extended by specific rendering implementations.
|
|
8
|
+
*
|
|
9
|
+
* @template T The type of the rendering result, defaults to void
|
|
10
|
+
* @template R The type of the field definition, defaults to FieldDefinition<T>
|
|
11
|
+
*
|
|
12
|
+
* @param {string} flavour - The flavor of the rendering engine.
|
|
13
|
+
*
|
|
14
|
+
* @class RenderingEngine
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class RenderingEngine<T = void, R = FieldDefinition<T>> {
|
|
17
|
+
readonly flavour: string;
|
|
18
|
+
/**
|
|
19
|
+
* @description Cache for storing rendering engine instances or constructors.
|
|
20
|
+
* @private
|
|
21
|
+
* @static
|
|
22
|
+
*/
|
|
23
|
+
private static cache;
|
|
24
|
+
/**
|
|
25
|
+
* @description The currently active rendering engine.
|
|
26
|
+
* @private
|
|
27
|
+
* @static
|
|
28
|
+
*/
|
|
29
|
+
private static current;
|
|
30
|
+
/**
|
|
31
|
+
* Flag indicating whether the rendering engine has been initialized.
|
|
32
|
+
*/
|
|
33
|
+
protected initialized: boolean;
|
|
34
|
+
protected constructor(flavour: string);
|
|
35
|
+
/**
|
|
36
|
+
* @description Initializes the rendering engine.
|
|
37
|
+
* @summary Abstract method to be implemented by subclasses for specific initialization logic.
|
|
38
|
+
*
|
|
39
|
+
* @param {...any[]} args - Any additional arguments needed for initialization.
|
|
40
|
+
* @returns {Promise<void>} A promise that resolves when initialization is complete.
|
|
41
|
+
*
|
|
42
|
+
* @abstract
|
|
43
|
+
*/
|
|
44
|
+
abstract initialize(...args: any[]): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* @description Translates between model types and HTML input types.
|
|
47
|
+
* @summary Converts model data types to appropriate HTML input types and vice versa.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} key - The key to translate.
|
|
50
|
+
* @param {boolean} [toView=true] - Direction of translation (true for model to view, false for view to model).
|
|
51
|
+
* @returns {string} The translated type.
|
|
52
|
+
*/
|
|
53
|
+
translate(key: string, toView?: boolean): string;
|
|
54
|
+
/**
|
|
55
|
+
* @description Checks if a type is validatable by its nature.
|
|
56
|
+
* @summary Determines if a given UI key represents a type that is inherently validatable.
|
|
57
|
+
*
|
|
58
|
+
* @param {string} key - The UI key to check.
|
|
59
|
+
* @returns {boolean} True if the type is validatable, false otherwise.
|
|
60
|
+
*/
|
|
61
|
+
protected isValidatableByType(key: string): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* @description Checks if a type is validatable by attribute.
|
|
64
|
+
* @summary Determines if a given UI key represents a validation that can be applied as an attribute.
|
|
65
|
+
*
|
|
66
|
+
* @param {string} key - The UI key to check.
|
|
67
|
+
* @returns {boolean} True if the type is validatable by attribute, false otherwise.
|
|
68
|
+
*/
|
|
69
|
+
protected isValidatableByAttribute(key: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* @description Converts validation metadata to an attribute value.
|
|
72
|
+
* @summary Transforms validation metadata into a value suitable for use as an HTML attribute.
|
|
73
|
+
*
|
|
74
|
+
* @param {string} key - The validation key.
|
|
75
|
+
* @param {ValidationMetadata} value - The validation metadata.
|
|
76
|
+
* @returns {string | number | boolean} The converted attribute value.
|
|
77
|
+
* @throws {Error} If the given key is not validatable by attribute.
|
|
78
|
+
*/
|
|
79
|
+
protected toAttributeValue(key: string, value: ValidationMetadata): string | number | boolean;
|
|
80
|
+
/**
|
|
81
|
+
* @description Converts a model to a field definition.
|
|
82
|
+
* @summary Processes a model instance, extracting UI-related metadata and validation rules to create a field definition.
|
|
83
|
+
*
|
|
84
|
+
* @template M Type extending Model
|
|
85
|
+
* @template T Type referencing the specific Rendering engine field properties/inputs
|
|
86
|
+
* @param {M} model - The model instance to convert.
|
|
87
|
+
* @param {Record<string, unknown>} [globalProps={}] - Global properties to apply to all child elements.
|
|
88
|
+
* @param {boolean} [generateId=true] - Flag indicating whether to populate the rendererId property.
|
|
89
|
+
* @returns {FieldDefinition<T>} A field definition object representing the UI structure of the model.
|
|
90
|
+
* @throws {RenderingError} If no UI definitions are set for the model or if there are invalid decorators.
|
|
91
|
+
*
|
|
92
|
+
* @mermaid
|
|
93
|
+
* sequenceDiagram
|
|
94
|
+
* participant C as Client
|
|
95
|
+
* participant RE as RenderingEngine
|
|
96
|
+
* participant R as Reflection
|
|
97
|
+
* participant M as Model
|
|
98
|
+
* C->>RE: toFieldDefinition(model, globalProps)
|
|
99
|
+
* RE->>R: getMetadata(UIKeys.UIMODEL, model.constructor)
|
|
100
|
+
* R-->>RE: UIModelMetadata
|
|
101
|
+
* RE->>R: getAllPropertyDecorators(model, UIKeys.REFLECT)
|
|
102
|
+
* R-->>RE: Record<string, DecoratorMetadata[]>
|
|
103
|
+
* RE->>R: getAllPropertyDecorators(model, ValidationKeys.REFLECT)
|
|
104
|
+
* R-->>RE: Record<string, DecoratorMetadata<ValidationMetadata>[]>
|
|
105
|
+
* loop For each property
|
|
106
|
+
* RE->>RE: Process UI decorators
|
|
107
|
+
* RE->>RE: Apply validation rules
|
|
108
|
+
* end
|
|
109
|
+
* RE-->>C: FieldDefinition<T>
|
|
110
|
+
*/
|
|
111
|
+
protected toFieldDefinition<M extends Model>(model: M, globalProps?: Record<string, unknown>, generateId?: boolean): FieldDefinition<T>;
|
|
112
|
+
/**
|
|
113
|
+
* @description Renders a model with global properties and additional arguments.
|
|
114
|
+
* @summary Abstract method to be implemented by subclasses to define specific rendering behavior.
|
|
115
|
+
*
|
|
116
|
+
* @template M Type extending Model
|
|
117
|
+
* @template R Rendering engine implementation specific output type
|
|
118
|
+
* @param {M} model - The model to be rendered.
|
|
119
|
+
* @param {Record<string, unknown>} globalProps - Global properties to be applied to all elements during rendering.
|
|
120
|
+
* @param {...any[]} args - Additional arguments that may be required for specific rendering implementations.
|
|
121
|
+
* @returns {R} The rendered result, type depends on the specific implementation.
|
|
122
|
+
*
|
|
123
|
+
* @abstract
|
|
124
|
+
*/
|
|
125
|
+
abstract render<M extends Model>(model: M, globalProps: Record<string, unknown>, ...args: any[]): R;
|
|
126
|
+
/**
|
|
127
|
+
* @description Registers a rendering engine instance.
|
|
128
|
+
* @summary Adds a rendering engine to the static cache and sets it as the current engine.
|
|
129
|
+
*
|
|
130
|
+
* @param {RenderingEngine<unknown, unknown>} engine - The rendering engine to register.
|
|
131
|
+
* @throws {InternalError} If an engine with the same flavor already exists.
|
|
132
|
+
*
|
|
133
|
+
* @static
|
|
134
|
+
*/
|
|
135
|
+
static register(engine: RenderingEngine<unknown, unknown>): void;
|
|
136
|
+
/**
|
|
137
|
+
* @description Retrieves or initializes a rendering engine.
|
|
138
|
+
* @summary Gets an existing engine instance or creates and initializes a new one if given a constructor.
|
|
139
|
+
*
|
|
140
|
+
* @template O The type of the rendering engine output
|
|
141
|
+
* @param {Constructor<RenderingEngine<O>> | RenderingEngine<O>} obj - The engine instance or constructor.
|
|
142
|
+
* @returns {RenderingEngine<O>} The initialized rendering engine.
|
|
143
|
+
*
|
|
144
|
+
* @private
|
|
145
|
+
* @static
|
|
146
|
+
*/
|
|
147
|
+
private static getOrBoot;
|
|
148
|
+
/**
|
|
149
|
+
* @description Retrieves a rendering engine by flavor.
|
|
150
|
+
* @summary Gets the current rendering engine or a specific one by flavor.
|
|
151
|
+
*
|
|
152
|
+
* @template O The type of the rendering engine output
|
|
153
|
+
* @param {string} [flavour] - The flavor of the rendering engine to retrieve.
|
|
154
|
+
* @returns {RenderingEngine<O>} The requested rendering engine.
|
|
155
|
+
* @throws {InternalError} If the requested flavor does not exist.
|
|
156
|
+
*
|
|
157
|
+
* @static
|
|
158
|
+
*/
|
|
159
|
+
static get<O>(flavour?: string): RenderingEngine<O>;
|
|
160
|
+
/**
|
|
161
|
+
* @description Renders a model using the appropriate rendering engine.
|
|
162
|
+
* @summary Determines the correct rendering engine for a model and invokes its render method.
|
|
163
|
+
*
|
|
164
|
+
* @template M Type extending Model
|
|
165
|
+
* @param {M} model - The model to render.
|
|
166
|
+
* @param {...any[]} args - Additional arguments to pass to the render method.
|
|
167
|
+
* @returns {any} The result of the rendering process.
|
|
168
|
+
* @throws {InternalError} If no registered model is found.
|
|
169
|
+
*
|
|
170
|
+
* @static
|
|
171
|
+
*/
|
|
172
|
+
static render<M extends Model>(model: M, ...args: any[]): any;
|
|
173
|
+
/**
|
|
174
|
+
* @description Generates a metadata key for UI-related properties.
|
|
175
|
+
* @summary Prefixes a given key with the UI reflection prefix.
|
|
176
|
+
*
|
|
177
|
+
* @param {string} key - The key to prefix.
|
|
178
|
+
* @returns {string} The prefixed key.
|
|
179
|
+
*
|
|
180
|
+
* @static
|
|
181
|
+
*/
|
|
182
|
+
static key(key: string): string;
|
|
183
|
+
}
|