@decaf-ts/ui-decorators 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +53 -0
- 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/decorators.d.ts +25 -0
- package/lib/esm/model/decorators.js +41 -0
- package/lib/esm/model/index.d.ts +7 -0
- package/lib/esm/model/index.js +9 -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 +11 -0
- package/lib/esm/ui/Rendering.d.ts +14 -0
- package/lib/esm/ui/Rendering.js +40 -0
- package/lib/esm/ui/constants.d.ts +28 -0
- package/lib/esm/ui/constants.js +31 -0
- package/lib/esm/ui/decorators.d.ts +47 -0
- package/lib/esm/ui/decorators.js +58 -0
- package/lib/esm/ui/index.d.ts +7 -0
- package/lib/esm/ui/index.js +9 -0
- package/lib/index.cjs +31 -0
- package/lib/index.d.ts +12 -0
- package/lib/model/decorators.cjs +45 -0
- package/lib/model/decorators.d.ts +25 -0
- package/lib/model/index.cjs +25 -0
- package/lib/model/index.d.ts +7 -0
- package/lib/model/model.cjs +4 -0
- package/lib/model/model.d.ts +115 -0
- package/lib/model/overrides.cjs +13 -0
- package/lib/model/overrides.d.ts +1 -0
- package/lib/ui/Rendering.cjs +44 -0
- package/lib/ui/Rendering.d.ts +14 -0
- package/lib/ui/constants.cjs +34 -0
- package/lib/ui/constants.d.ts +28 -0
- package/lib/ui/decorators.cjs +63 -0
- package/lib/ui/decorators.d.ts +47 -0
- package/lib/ui/index.cjs +25 -0
- package/lib/ui/index.d.ts +7 -0
- package/package.json +109 -0
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ui-decorators
|
|
3
|
+
*/
|
|
4
|
+
export * from "./model";
|
|
5
|
+
export * from "./ui";
|
|
6
|
+
/**
|
|
7
|
+
* @summary stores the current package version
|
|
8
|
+
* @description this is how you should document a constant
|
|
9
|
+
* @const VERSION
|
|
10
|
+
* @memberOf module:ui-decorators
|
|
11
|
+
*/
|
|
12
|
+
export const VERSION = "0.3.0";
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsTUFBTSxDQUFDO0FBRXJCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSB1aS1kZWNvcmF0b3JzXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3VpXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgc3RvcmVzIHRoZSBjdXJyZW50IHBhY2thZ2UgdmVyc2lvblxuICogQGRlc2NyaXB0aW9uIHRoaXMgaXMgaG93IHlvdSBzaG91bGQgZG9jdW1lbnQgYSBjb25zdGFudFxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMC4zLjBcIjtcbiJdfQ==
|
|
@@ -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?: any, descriptor?: any) => void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { UIKeys } from "../ui/constants";
|
|
2
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
3
|
+
import { apply, metadata } from "@decaf-ts/reflection";
|
|
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(Model.uiKey(UIKeys.UIMODEL), meta)(original);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function renderedBy(engine) {
|
|
38
|
+
return apply(metadata(Model.uiKey(UIKeys.RENDERED_BY), engine));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBWSxFQUFFLEtBQTJCO0lBQy9ELDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUk7WUFDekIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBYztJQUN2QyxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDIiwiZmlsZSI6Im1vZGVsL2RlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVSUtleXMgfSBmcm9tIFwiLi4vdWkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGFwcGx5LCBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuXG4vKipcbiAqIFRhZ3MgdGhlIG1vZGVsIGFzIGEgdWltb2RlbCwgZ2l2aW5nIGl0IHRoZSAncmVuZGVyJyBtZXRob2RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RhZ10gb3B0aW9uYWwgcGFyYW0uIHdpbGwgcmVuZGVyIHRoZSBwcm92aWRlZCBlbG1lbnQgd3JhcHBpbmcgdGhlIGF0dHJpYnV0ZSB1aWVsZW1lbnRzXG4gKiBAcGFyYW0ge3t9fSBbcHJvcHNdIG9wdGlvbmFsIHBhcmFtLiBBdHRyaWJ1dGVzIHRvIGJlIHBhc3NlZCB0byB0aGUgdGFnIGVsZW1lbnRcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oYW55KTogdm9pZH0gW2luc3RhbmNlQ2FsbGJhY2tdIG9wdGlvbmFsIGNhbGxiYWNrIHJldHVybmluZyB0aGUgaW5zdGFuY2UgYWZ0ZXIgY3JlYXRpb24gZm9yIGFkZGl0aW9uYWwgbG9naWNcbiAqXG4gKiBAZGVjb3JhdG9yIHVpbW9kZWxcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFN5c3RlbVxuICogICBwYXJ0aWNpcGFudCB1aW1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IGNvbnN0cnVjdG9yXG4gKiAgIHBhcnRpY2lwYW50IGluc3RhbmNlXG4gKiAgIFN5c3RlbS0+PnVpbW9kZWw6ZG8oY29uc3RydWN0b3IpXG4gKiAgIHVpbW9kZWwtPj5jb25zdHJ1Y3RvcjogRXhlY3V0ZXMgdGhlIGNvbnN0cnVjdG9yXG4gKiAgIGNvbnN0cnVjdG9yLT4+dWltb2RlbDogcmV0dXJucyBpbnN0YW5jZVxuICogICB1aW1vZGVsLT4+aW5zdGFuY2U6IGFkZHMgdGhlIHJlbmRlciBtZXRob2RcbiAqICAgdWltb2RlbC0+PlN5c3RlbTogcmV0dXJucyBVSU1vZGVsIGluc3RhbmNlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpbW9kZWwodGFnPzogc3RyaW5nLCBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICByZXR1cm4gKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIHRhZzogdGFnIHx8IG9yaWdpbmFsLm5hbWUsXG4gICAgICBwcm9wczogcHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gbWV0YWRhdGEoTW9kZWwudWlLZXkoVUlLZXlzLlVJTU9ERUwpLCBtZXRhKShvcmlnaW5hbCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJlZEJ5KGVuZ2luZTogc3RyaW5nKSB7XG4gIHJldHVybiBhcHBseShtZXRhZGF0YShNb2RlbC51aUtleShVSUtleXMuUkVOREVSRURfQlkpLCBlbmdpbmUpKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @namespace model
|
|
3
|
+
* @memberOf ui-decorators
|
|
4
|
+
*/
|
|
5
|
+
import "./model";
|
|
6
|
+
export * from "./decorators";
|
|
7
|
+
export * from "./overrides";
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLFNBQVMsQ0FBQztBQUVqQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQyIsImZpbGUiOiJtb2RlbC9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG5hbWVzcGFjZSBtb2RlbFxuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnNcbiAqL1xuXG5pbXBvcnQgXCIuL21vZGVsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL292ZXJyaWRlc1wiO1xuIl19
|
|
@@ -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
|
+
declare module "@decaf-ts/decorator-validation" {
|
|
4
|
+
abstract class Model implements Validatable, Serializable, Hashable, Comparable<Model> {
|
|
5
|
+
protected constructor(arg?: ModelArg<Model>);
|
|
6
|
+
hasErrors(...exclusions: any[]): ModelErrorDefinition | undefined;
|
|
7
|
+
hasErrors(previousVersion?: Model | any, ...exclusions: any[]): ModelErrorDefinition | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* @summary Compare object equality recursively
|
|
10
|
+
* @param {any} obj object to compare to
|
|
11
|
+
* @param {string} [exceptions] property names to be excluded from the comparison
|
|
12
|
+
*/
|
|
13
|
+
equals(obj: any, ...exceptions: string[]): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* @summary Returns the serialized model according to the currently defined {@link Serializer}
|
|
16
|
+
*/
|
|
17
|
+
serialize(): string;
|
|
18
|
+
/**
|
|
19
|
+
* @summary Override the implementation for js's 'toString()' which sucks...
|
|
20
|
+
* @override
|
|
21
|
+
*/
|
|
22
|
+
toString(): string;
|
|
23
|
+
/**
|
|
24
|
+
* @summary Defines a default implementation for object hash. Relies on a very basic implementation based on Java's string hash;
|
|
25
|
+
*/
|
|
26
|
+
hash(): string;
|
|
27
|
+
/**
|
|
28
|
+
* @summary Deserializes a Model
|
|
29
|
+
* @param {string} str
|
|
30
|
+
*
|
|
31
|
+
* @param args
|
|
32
|
+
* @throws {Error} If it fails to parse the string, or if it fails to build the model
|
|
33
|
+
*/
|
|
34
|
+
static deserialize(str: string): any;
|
|
35
|
+
/**
|
|
36
|
+
* @summary Repopulates the Object properties with the ones from the new object
|
|
37
|
+
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self
|
|
38
|
+
*
|
|
39
|
+
* @param {T} self
|
|
40
|
+
* @param {T | Record<string, any>} [obj]
|
|
41
|
+
*
|
|
42
|
+
*/
|
|
43
|
+
static fromObject<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
44
|
+
/**
|
|
45
|
+
* @summary Repopulates the instance with the ones from the new Model Object
|
|
46
|
+
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self.
|
|
47
|
+
* Is aware of nested Model Objects and rebuilds them also.
|
|
48
|
+
* When List properties are decorated with {@link list}, they list items will also be rebuilt
|
|
49
|
+
*
|
|
50
|
+
* @param {T} self
|
|
51
|
+
* @param {T | Record<string, any>} [obj]
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
static fromModel<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
55
|
+
/**
|
|
56
|
+
* @summary Sets the Global {@link ModelBuilderFunction}
|
|
57
|
+
* @param {ModelBuilderFunction} [builder]
|
|
58
|
+
*/
|
|
59
|
+
static setBuilder(builder?: ModelBuilderFunction): void;
|
|
60
|
+
/**
|
|
61
|
+
* @summary Retrieves the current global {@link ModelBuilderFunction}
|
|
62
|
+
*/
|
|
63
|
+
static getBuilder(): ModelBuilderFunction | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* Returns the current {@link ModelRegistryManager}
|
|
66
|
+
*
|
|
67
|
+
* @return ModelRegistry, defaults to {@link ModelRegistryManager}
|
|
68
|
+
*/
|
|
69
|
+
private static getRegistry;
|
|
70
|
+
/**
|
|
71
|
+
* Returns the current actingModelRegistry
|
|
72
|
+
*
|
|
73
|
+
* @param {BuilderRegistry} modelRegistry the new implementation of Registry
|
|
74
|
+
*/
|
|
75
|
+
static setRegistry(modelRegistry: BuilderRegistry<any>): void;
|
|
76
|
+
/**
|
|
77
|
+
* @summary register new Models
|
|
78
|
+
* @param {any} constructor
|
|
79
|
+
* @param {string} [name] when not defined, the name of the constructor will be used
|
|
80
|
+
*
|
|
81
|
+
* @see ModelRegistry
|
|
82
|
+
*/
|
|
83
|
+
static register<T extends Model>(constructor: ModelConstructor<T>, name?: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* @summary Gets a registered Model {@link ModelConstructor}
|
|
86
|
+
* @param {string} name
|
|
87
|
+
*
|
|
88
|
+
* @see ModelRegistry
|
|
89
|
+
*/
|
|
90
|
+
static get<T extends Model>(name: string): ModelConstructor<T> | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* @param {Record<string, any>} obj
|
|
93
|
+
* @param {string} [clazz] when provided, it will attempt to find the matching constructor
|
|
94
|
+
*
|
|
95
|
+
* @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
|
|
96
|
+
*
|
|
97
|
+
* @see ModelRegistry
|
|
98
|
+
*/
|
|
99
|
+
static build<T extends Model>(obj?: Record<string, any>, clazz?: string): T;
|
|
100
|
+
static getMetadata<V extends Model>(model: V): any;
|
|
101
|
+
static getAttributes<V extends Model>(model: Constructor<V> | V): string[];
|
|
102
|
+
static equals<V extends Model>(obj1: V, obj2: V, ...exceptions: any[]): boolean;
|
|
103
|
+
static hasErrors<V extends Model>(model: V, ...exceptions: any[]): ModelErrorDefinition | undefined;
|
|
104
|
+
static serialize<V extends Model>(model: V): any;
|
|
105
|
+
static hash<V extends Model>(model: V): any;
|
|
106
|
+
/**
|
|
107
|
+
* @summary Builds the key to store as Metadata under Reflections
|
|
108
|
+
* @description concatenates {@link ModelKeys#REFLECT} with the provided key
|
|
109
|
+
* @param {string} str
|
|
110
|
+
*/
|
|
111
|
+
static key(str: string): string;
|
|
112
|
+
render<R>(...args: any[]): R;
|
|
113
|
+
static uiKey(key: string): string;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6Im1vZGVsL21vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBCdWlsZGVyUmVnaXN0cnksXG4gIENvbXBhcmFibGUsXG4gIENvbnN0cnVjdG9yLFxuICBIYXNoYWJsZSxcbiAgTW9kZWxBcmcsXG4gIE1vZGVsQnVpbGRlckZ1bmN0aW9uLFxuICBNb2RlbENvbnN0cnVjdG9yLFxuICBTZXJpYWxpemFibGUsXG4gIFZhbGlkYXRhYmxlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbmRlY2xhcmUgbW9kdWxlIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCIge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGhhY2t5IG92ZXJyaWRlXG4gIGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgTW9kZWxcbiAgICBpbXBsZW1lbnRzIFZhbGlkYXRhYmxlLCBTZXJpYWxpemFibGUsIEhhc2hhYmxlLCBDb21wYXJhYmxlPE1vZGVsPlxuICB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPE1vZGVsPik7XG5cbiAgICBoYXNFcnJvcnMoLi4uZXhjbHVzaW9uczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbiAgICBoYXNFcnJvcnMoXG4gICAgICBwcmV2aW91c1ZlcnNpb24/OiBNb2RlbCB8IGFueSxcbiAgICAgIC4uLmV4Y2x1c2lvbnM6IGFueVtdXG4gICAgKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBDb21wYXJlIG9iamVjdCBlcXVhbGl0eSByZWN1cnNpdmVseVxuICAgICAqIEBwYXJhbSB7YW55fSBvYmogb2JqZWN0IHRvIGNvbXBhcmUgdG9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4Y2VwdGlvbnNdIHByb3BlcnR5IG5hbWVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvbXBhcmlzb25cbiAgICAgKi9cbiAgICBlcXVhbHMob2JqOiBhbnksIC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIG1vZGVsIGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IGRlZmluZWQge0BsaW5rIFNlcmlhbGl6ZXJ9XG4gICAgICovXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBPdmVycmlkZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGpzJ3MgJ3RvU3RyaW5nKCknIHdoaWNoIHN1Y2tzLi4uXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IERlZmluZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBvYmplY3QgaGFzaC4gUmVsaWVzIG9uIGEgdmVyeSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBKYXZhJ3Mgc3RyaW5nIGhhc2g7XG4gICAgICovXG4gICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgRGVzZXJpYWxpemVzIGEgTW9kZWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXJnc1xuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlscyB0byBwYXJzZSB0aGUgc3RyaW5nLCBvciBpZiBpdCBmYWlscyB0byBidWlsZCB0aGUgbW9kZWxcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoc3RyOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICAgICAqIEBkZXNjcmlwdGlvbiBJdGVyYXRlcyBhbGwgY29tbW9uIHByb3BlcnRpZXMgb2Ygb2JqIChpZiBleGlzdGluZykgYW5kIHNlbGYsIGFuZCBjb3BpZXMgdGhlbSBvbnRvIHNlbGZcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgICAqIEBwYXJhbSB7VCB8IFJlY29yZDxzdHJpbmcsIGFueT59IFtvYmpdXG4gICAgICpcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbU9iamVjdDxUIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgc2VsZjogVCxcbiAgICAgIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgKTogVDtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXBvcHVsYXRlcyB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgb25lcyBmcm9tIHRoZSBuZXcgTW9kZWwgT2JqZWN0XG4gICAgICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZi5cbiAgICAgKiBJcyBhd2FyZSBvZiBuZXN0ZWQgTW9kZWwgT2JqZWN0cyBhbmQgcmVidWlsZHMgdGhlbSBhbHNvLlxuICAgICAqIFdoZW4gTGlzdCBwcm9wZXJ0aWVzIGFyZSBkZWNvcmF0ZWQgd2l0aCB7QGxpbmsgbGlzdH0sIHRoZXkgbGlzdCBpdGVtcyB3aWxsIGFsc28gYmUgcmVidWlsdFxuICAgICAqXG4gICAgICogQHBhcmFtIHtUfSBzZWxmXG4gICAgICogQHBhcmFtIHtUIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW29ial1cbiAgICAgKlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tTW9kZWw8VCBleHRlbmRzIE1vZGVsPihcbiAgICAgIHNlbGY6IFQsXG4gICAgICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICk6IFQ7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgR2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn1cbiAgICAgKiBAcGFyYW0ge01vZGVsQnVpbGRlckZ1bmN0aW9ufSBbYnVpbGRlcl1cbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0QnVpbGRlcihidWlsZGVyPzogTW9kZWxCdWlsZGVyRnVuY3Rpb24pOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgY3VycmVudCBnbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRCdWlsZGVyKCk6IE1vZGVsQnVpbGRlckZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQge0BsaW5rIE1vZGVsUmVnaXN0cnlNYW5hZ2VyfVxuICAgICAqXG4gICAgICogQHJldHVybiBNb2RlbFJlZ2lzdHJ5LCBkZWZhdWx0cyB0byB7QGxpbmsgTW9kZWxSZWdpc3RyeU1hbmFnZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpbmdNb2RlbFJlZ2lzdHJ5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0J1aWxkZXJSZWdpc3RyeX0gbW9kZWxSZWdpc3RyeSB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIFJlZ2lzdHJ5XG4gICAgICovXG4gICAgc3RhdGljIHNldFJlZ2lzdHJ5KG1vZGVsUmVnaXN0cnk6IEJ1aWxkZXJSZWdpc3RyeTxhbnk+KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSByZWdpc3RlciBuZXcgTW9kZWxzXG4gICAgICogQHBhcmFtIHthbnl9IGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB3aGVuIG5vdCBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSB1c2VkXG4gICAgICpcbiAgICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVnaXN0ZXI8VCBleHRlbmRzIE1vZGVsPihcbiAgICAgIGNvbnN0cnVjdG9yOiBNb2RlbENvbnN0cnVjdG9yPFQ+LFxuICAgICAgbmFtZT86IHN0cmluZ1xuICAgICk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgR2V0cyBhIHJlZ2lzdGVyZWQgTW9kZWwge0BsaW5rIE1vZGVsQ29uc3RydWN0b3J9XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKlxuICAgICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihuYW1lOiBzdHJpbmcpOiBNb2RlbENvbnN0cnVjdG9yPFQ+IHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjbGF6el0gd2hlbiBwcm92aWRlZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIG1hdGNoaW5nIGNvbnN0cnVjdG9yXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIEVycm9yIElmIGNsYXp6IGlzIG5vdCBmb3VuZCwgb3Igb2JqIGlzIG5vdCBhIHtAbGluayBNb2RlbH0gbWVhbmluZyBpdCBoYXMgbm8ge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICAgKi9cbiAgICBzdGF0aWMgYnVpbGQ8VCBleHRlbmRzIE1vZGVsPihvYmo/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjbGF6ej86IHN0cmluZyk6IFQ7XG4gICAgc3RhdGljIGdldE1ldGFkYXRhPFYgZXh0ZW5kcyBNb2RlbD4obW9kZWw6IFYpOiBhbnk7XG4gICAgc3RhdGljIGdldEF0dHJpYnV0ZXM8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogQ29uc3RydWN0b3I8Vj4gfCBWKTogc3RyaW5nW107XG4gICAgc3RhdGljIGVxdWFsczxWIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgb2JqMTogVixcbiAgICAgIG9iajI6IFYsXG4gICAgICAuLi5leGNlcHRpb25zOiBhbnlbXVxuICAgICk6IGJvb2xlYW47XG4gICAgc3RhdGljIGhhc0Vycm9yczxWIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbW9kZWw6IFYsXG4gICAgICAuLi5leGNlcHRpb25zOiBhbnlbXVxuICAgICk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuICAgIHN0YXRpYyBzZXJpYWxpemU8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogVik6IGFueTtcbiAgICBzdGF0aWMgaGFzaDxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBWKTogYW55O1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUga2V5IHRvIHN0b3JlIGFzIE1ldGFkYXRhIHVuZGVyIFJlZmxlY3Rpb25zXG4gICAgICogQGRlc2NyaXB0aW9uIGNvbmNhdGVuYXRlcyB7QGxpbmsgTW9kZWxLZXlzI1JFRkxFQ1R9IHdpdGggdGhlIHByb3ZpZGVkIGtleVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKi9cbiAgICBzdGF0aWMga2V5KHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgIHJlbmRlcjxSPiguLi5hcmdzOiBhbnlbXSk6IFI7XG4gICAgc3RhdGljIHVpS2V5KGtleTogc3RyaW5nKTogc3RyaW5nO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { UIKeys } from "../ui/constants";
|
|
3
|
+
import { RenderingEngine } from "../ui/Rendering";
|
|
4
|
+
Model.prototype.render = function (...args) {
|
|
5
|
+
return RenderingEngine.render(this, ...args);
|
|
6
|
+
};
|
|
7
|
+
Model.uiKey = function (key) {
|
|
8
|
+
return `${UIKeys.REFLECT}${key}`;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9vdmVycmlkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBb0MsR0FBRyxJQUFXO0lBQ3pFLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFFRixLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBVztJQUNqQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxDQUFDLENBQUMiLCJmaWxlIjoibW9kZWwvb3ZlcnJpZGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBVSUtleXMgfSBmcm9tIFwiLi4vdWkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tIFwiLi4vdWkvUmVuZGVyaW5nXCI7XG5cbk1vZGVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiA8TSBleHRlbmRzIE1vZGVsPih0aGlzOiBNLCAuLi5hcmdzOiBhbnlbXSkge1xuICByZXR1cm4gUmVuZGVyaW5nRW5naW5lLnJlbmRlcih0aGlzLCAuLi5hcmdzKTtcbn07XG5cbk1vZGVsLnVpS2V5ID0gZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG4gIHJldHVybiBgJHtVSUtleXMuUkVGTEVDVH0ke2tleX1gO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
export declare abstract class RenderingEngine {
|
|
3
|
+
readonly flavour: string;
|
|
4
|
+
private static cache;
|
|
5
|
+
private static current;
|
|
6
|
+
protected initialized: boolean;
|
|
7
|
+
protected constructor(flavour: string);
|
|
8
|
+
abstract initialize(...args: any[]): Promise<void>;
|
|
9
|
+
abstract render(...args: any[]): any;
|
|
10
|
+
static register(engine: RenderingEngine): void;
|
|
11
|
+
private static getOrBoot;
|
|
12
|
+
static get(flavour?: string): RenderingEngine;
|
|
13
|
+
static render<M extends Model>(model: M, ...args: any[]): any;
|
|
14
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { InternalError } from "@decaf-ts/db-decorators";
|
|
2
|
+
import { Model, } from "@decaf-ts/decorator-validation";
|
|
3
|
+
import { UIKeys } from "./constants";
|
|
4
|
+
export class RenderingEngine {
|
|
5
|
+
constructor(flavour) {
|
|
6
|
+
this.flavour = flavour;
|
|
7
|
+
this.initialized = false;
|
|
8
|
+
RenderingEngine.register(this);
|
|
9
|
+
}
|
|
10
|
+
static register(engine) {
|
|
11
|
+
this.cache = this.cache || {};
|
|
12
|
+
if (engine.flavour in this.cache)
|
|
13
|
+
throw new InternalError(`Rendering engine under ${engine.flavour} already exists`);
|
|
14
|
+
this.cache[engine.flavour] = engine;
|
|
15
|
+
this.current = engine;
|
|
16
|
+
}
|
|
17
|
+
static getOrBoot(obj) {
|
|
18
|
+
if (obj instanceof RenderingEngine)
|
|
19
|
+
return obj;
|
|
20
|
+
const engine = new obj();
|
|
21
|
+
engine.initialize(); // make the booting async. use the initialized flag to control it
|
|
22
|
+
return engine;
|
|
23
|
+
}
|
|
24
|
+
static get(flavour) {
|
|
25
|
+
if (!flavour)
|
|
26
|
+
return this.getOrBoot(this.current);
|
|
27
|
+
if (!(flavour in this.cache))
|
|
28
|
+
throw new InternalError(`Rendering engine under ${flavour} does not exist`);
|
|
29
|
+
return this.getOrBoot(this.cache[flavour]);
|
|
30
|
+
}
|
|
31
|
+
static render(model, ...args) {
|
|
32
|
+
const constructor = Model.get(model.constructor.name);
|
|
33
|
+
if (!constructor)
|
|
34
|
+
throw new InternalError("No model registered found");
|
|
35
|
+
const flavour = Reflect.getMetadata(Model.uiKey(UIKeys.UIMODEL), constructor);
|
|
36
|
+
return this.get(flavour).render(model, ...args);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9SZW5kZXJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFFTCxLQUFLLEdBRU4sTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE1BQU0sT0FBZ0IsZUFBZTtJQVNuQyxZQUErQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUZwQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUdyQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFLRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQXVCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQzlCLE1BQU0sSUFBSSxhQUFhLENBQ3JCLDBCQUEwQixNQUFNLENBQUMsT0FBTyxpQkFBaUIsQ0FDMUQsQ0FBQztRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRU8sTUFBTSxDQUFDLFNBQVMsQ0FDdEIsR0FBbUQ7UUFFbkQsSUFBSSxHQUFHLFlBQVksZUFBZTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQy9DLE1BQU0sTUFBTSxHQUFvQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGlFQUFpRTtRQUN0RixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFnQjtRQUN6QixJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDMUIsTUFBTSxJQUFJLGFBQWEsQ0FDckIsMEJBQTBCLE9BQU8saUJBQWlCLENBQ25ELENBQUM7UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFrQixLQUFRLEVBQUUsR0FBRyxJQUFXO1FBQ3JELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN2RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUNqQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFDM0IsV0FBc0MsQ0FDdkMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGIiwiZmlsZSI6InVpL1JlbmRlcmluZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIENvbnN0cnVjdG9yLFxuICBNb2RlbCxcbiAgTW9kZWxDb25zdHJ1Y3Rvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgVUlLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZW5kZXJpbmdFbmdpbmUge1xuICBwcml2YXRlIHN0YXRpYyBjYWNoZTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU+IHwgUmVuZGVyaW5nRW5naW5lXG4gID47XG4gIHByaXZhdGUgc3RhdGljIGN1cnJlbnQ6IENvbnN0cnVjdG9yPFJlbmRlcmluZ0VuZ2luZT4gfCBSZW5kZXJpbmdFbmdpbmU7XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZsYXZvdXI6IHN0cmluZykge1xuICAgIFJlbmRlcmluZ0VuZ2luZS5yZWdpc3Rlcih0aGlzKTtcbiAgfVxuXG4gIGFic3RyYWN0IGluaXRpYWxpemUoLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xuICBhYnN0cmFjdCByZW5kZXIoLi4uYXJnczogYW55W10pOiBhbnk7XG5cbiAgc3RhdGljIHJlZ2lzdGVyKGVuZ2luZTogUmVuZGVyaW5nRW5naW5lKSB7XG4gICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUgfHwge307XG4gICAgaWYgKGVuZ2luZS5mbGF2b3VyIGluIHRoaXMuY2FjaGUpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYFJlbmRlcmluZyBlbmdpbmUgdW5kZXIgJHtlbmdpbmUuZmxhdm91cn0gYWxyZWFkeSBleGlzdHNgXG4gICAgICApO1xuICAgIHRoaXMuY2FjaGVbZW5naW5lLmZsYXZvdXJdID0gZW5naW5lO1xuICAgIHRoaXMuY3VycmVudCA9IGVuZ2luZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldE9yQm9vdChcbiAgICBvYmo6IENvbnN0cnVjdG9yPFJlbmRlcmluZ0VuZ2luZT4gfCBSZW5kZXJpbmdFbmdpbmVcbiAgKTogUmVuZGVyaW5nRW5naW5lIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgUmVuZGVyaW5nRW5naW5lKSByZXR1cm4gb2JqO1xuICAgIGNvbnN0IGVuZ2luZTogUmVuZGVyaW5nRW5naW5lID0gbmV3IG9iaigpO1xuICAgIGVuZ2luZS5pbml0aWFsaXplKCk7IC8vIG1ha2UgdGhlIGJvb3RpbmcgYXN5bmMuIHVzZSB0aGUgaW5pdGlhbGl6ZWQgZmxhZyB0byBjb250cm9sIGl0XG4gICAgcmV0dXJuIGVuZ2luZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQoZmxhdm91cj86IHN0cmluZyk6IFJlbmRlcmluZ0VuZ2luZSB7XG4gICAgaWYgKCFmbGF2b3VyKSByZXR1cm4gdGhpcy5nZXRPckJvb3QodGhpcy5jdXJyZW50KTtcbiAgICBpZiAoIShmbGF2b3VyIGluIHRoaXMuY2FjaGUpKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBSZW5kZXJpbmcgZW5naW5lIHVuZGVyICR7Zmxhdm91cn0gZG9lcyBub3QgZXhpc3RgXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLmdldE9yQm9vdCh0aGlzLmNhY2hlW2ZsYXZvdXJdKTtcbiAgfVxuXG4gIHN0YXRpYyByZW5kZXI8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSwgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGlmICghY29uc3RydWN0b3IpIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTm8gbW9kZWwgcmVnaXN0ZXJlZCBmb3VuZFwiKTtcbiAgICBjb25zdCBmbGF2b3VyID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIE1vZGVsLnVpS2V5KFVJS2V5cy5VSU1PREVMKSxcbiAgICAgIGNvbnN0cnVjdG9yIGFzIE1vZGVsQ29uc3RydWN0b3I8TW9kZWw+XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5nZXQoZmxhdm91cikucmVuZGVyKG1vZGVsLCAuLi5hcmdzKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @enum UIKeys
|
|
3
|
+
* @category Constants
|
|
4
|
+
*/
|
|
5
|
+
export declare const UIKeys: {
|
|
6
|
+
REFLECT: string;
|
|
7
|
+
UIMODEL: string;
|
|
8
|
+
RENDERED_BY: string;
|
|
9
|
+
ELEMENT: string;
|
|
10
|
+
PROP: string;
|
|
11
|
+
NAME: string;
|
|
12
|
+
NAME_PREFIX: string;
|
|
13
|
+
CUSTOM_PROPS: string;
|
|
14
|
+
TYPE: string;
|
|
15
|
+
SUB_TYPE: string;
|
|
16
|
+
READ_ONLY: string;
|
|
17
|
+
REQUIRED: string;
|
|
18
|
+
MIN: string;
|
|
19
|
+
MIN_LENGTH: string;
|
|
20
|
+
MAX: string;
|
|
21
|
+
MAX_LENGTH: string;
|
|
22
|
+
PATTERN: string;
|
|
23
|
+
URL: string;
|
|
24
|
+
STEP: string;
|
|
25
|
+
DATE: string;
|
|
26
|
+
EMAIL: string;
|
|
27
|
+
PASSWORD: string;
|
|
28
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ModelKeys, ValidationKeys } from "@decaf-ts/decorator-validation";
|
|
2
|
+
/**
|
|
3
|
+
* @enum UIKeys
|
|
4
|
+
* @category Constants
|
|
5
|
+
*/
|
|
6
|
+
export const UIKeys = {
|
|
7
|
+
REFLECT: `${ModelKeys.REFLECT}.ui.`,
|
|
8
|
+
UIMODEL: "uimodel",
|
|
9
|
+
RENDERED_BY: "rendered-by",
|
|
10
|
+
ELEMENT: "element",
|
|
11
|
+
PROP: "prop",
|
|
12
|
+
NAME: "name",
|
|
13
|
+
NAME_PREFIX: "input-",
|
|
14
|
+
CUSTOM_PROPS: "customValidationProps",
|
|
15
|
+
TYPE: "type",
|
|
16
|
+
SUB_TYPE: "subtype",
|
|
17
|
+
READ_ONLY: "readonly",
|
|
18
|
+
REQUIRED: ValidationKeys.REQUIRED,
|
|
19
|
+
MIN: ValidationKeys.MIN,
|
|
20
|
+
MIN_LENGTH: ValidationKeys.MIN_LENGTH,
|
|
21
|
+
MAX: ValidationKeys.MAX,
|
|
22
|
+
MAX_LENGTH: ValidationKeys.MAX_LENGTH,
|
|
23
|
+
PATTERN: ValidationKeys.PATTERN,
|
|
24
|
+
URL: ValidationKeys.URL,
|
|
25
|
+
STEP: ValidationKeys.STEP,
|
|
26
|
+
DATE: ValidationKeys.DATE,
|
|
27
|
+
EMAIL: ValidationKeys.EMAIL,
|
|
28
|
+
PASSWORD: ValidationKeys.PASSWORD,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDLE9BQU8sTUFBTTtJQUNuQyxPQUFPLEVBQUUsU0FBUztJQUNsQixXQUFXLEVBQUUsYUFBYTtJQUMxQixPQUFPLEVBQUUsU0FBUztJQUNsQixJQUFJLEVBQUUsTUFBTTtJQUNaLElBQUksRUFBRSxNQUFNO0lBQ1osV0FBVyxFQUFFLFFBQVE7SUFDckIsWUFBWSxFQUFFLHVCQUF1QjtJQUVyQyxJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxTQUFTO0lBRW5CLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtJQUNqQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUc7SUFDdkIsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO0lBQ3JDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRztJQUN2QixVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7SUFDckMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPO0lBQy9CLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRztJQUN2QixJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUk7SUFDekIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO0lBQ3pCLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSztJQUMzQixRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7Q0FDbEMsQ0FBQyIsImZpbGUiOiJ1aS9jb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbEtleXMsIFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuXG4vKipcbiAqIEBlbnVtIFVJS2V5c1xuICogQGNhdGVnb3J5IENvbnN0YW50c1xuICovXG5leHBvcnQgY29uc3QgVUlLZXlzID0ge1xuICBSRUZMRUNUOiBgJHtNb2RlbEtleXMuUkVGTEVDVH0udWkuYCxcbiAgVUlNT0RFTDogXCJ1aW1vZGVsXCIsXG4gIFJFTkRFUkVEX0JZOiBcInJlbmRlcmVkLWJ5XCIsXG4gIEVMRU1FTlQ6IFwiZWxlbWVudFwiLFxuICBQUk9QOiBcInByb3BcIixcbiAgTkFNRTogXCJuYW1lXCIsXG4gIE5BTUVfUFJFRklYOiBcImlucHV0LVwiLFxuICBDVVNUT01fUFJPUFM6IFwiY3VzdG9tVmFsaWRhdGlvblByb3BzXCIsXG5cbiAgVFlQRTogXCJ0eXBlXCIsXG4gIFNVQl9UWVBFOiBcInN1YnR5cGVcIixcblxuICBSRUFEX09OTFk6IFwicmVhZG9ubHlcIixcbiAgUkVRVUlSRUQ6IFZhbGlkYXRpb25LZXlzLlJFUVVJUkVELFxuICBNSU46IFZhbGlkYXRpb25LZXlzLk1JTixcbiAgTUlOX0xFTkdUSDogVmFsaWRhdGlvbktleXMuTUlOX0xFTkdUSCxcbiAgTUFYOiBWYWxpZGF0aW9uS2V5cy5NQVgsXG4gIE1BWF9MRU5HVEg6IFZhbGlkYXRpb25LZXlzLk1BWF9MRU5HVEgsXG4gIFBBVFRFUk46IFZhbGlkYXRpb25LZXlzLlBBVFRFUk4sXG4gIFVSTDogVmFsaWRhdGlvbktleXMuVVJMLFxuICBTVEVQOiBWYWxpZGF0aW9uS2V5cy5TVEVQLFxuICBEQVRFOiBWYWxpZGF0aW9uS2V5cy5EQVRFLFxuICBFTUFJTDogVmFsaWRhdGlvbktleXMuRU1BSUwsXG4gIFBBU1NXT1JEOiBWYWxpZGF0aW9uS2V5cy5QQVNTV09SRCxcbn07XG4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
/**
|
|
3
|
+
* @typedef UIElementMetadata
|
|
4
|
+
* @memberOf ui-decorators.ui.decorators
|
|
5
|
+
*/
|
|
6
|
+
export type UIElementMetadata = {
|
|
7
|
+
tag: string;
|
|
8
|
+
args?: any[];
|
|
9
|
+
props?: Record<string, any>;
|
|
10
|
+
serialize?: boolean;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Adds the UIElement definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
|
|
14
|
+
*
|
|
15
|
+
* @param {string} tag The component/HTML element tag name
|
|
16
|
+
* @param {{}} [props] The properties to pass to that component/HTML Element
|
|
17
|
+
* @param {any[]} [args] optional arguments that will be passed to the rendering strategy.
|
|
18
|
+
*
|
|
19
|
+
* @decorator uielement
|
|
20
|
+
*
|
|
21
|
+
* @category Decorators
|
|
22
|
+
* @subcategory ui-decorators
|
|
23
|
+
*/
|
|
24
|
+
export declare function uielement(tag: string, props?: {
|
|
25
|
+
[indexer: string]: any;
|
|
26
|
+
}, serialize?: boolean, ...args: any[]): (target: object, propertyKey?: any, descriptor?: any) => void;
|
|
27
|
+
/**
|
|
28
|
+
* @typedef UIPropMetadata
|
|
29
|
+
* @memberOf ui-decorators.ui.decorators
|
|
30
|
+
*/
|
|
31
|
+
export type UIPropMetadata = {
|
|
32
|
+
name: string;
|
|
33
|
+
stringify: boolean;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Adds the UIProp definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
|
|
37
|
+
*
|
|
38
|
+
* this requires a '@uimodel' with a defined tag
|
|
39
|
+
*
|
|
40
|
+
* @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
|
|
41
|
+
*
|
|
42
|
+
* @decorator uiprop
|
|
43
|
+
*
|
|
44
|
+
* @category Decorators
|
|
45
|
+
* @subcategory ui-decorators
|
|
46
|
+
*/
|
|
47
|
+
export declare const uiprop: (propName?: string | undefined, stringify?: boolean) => (target: any, propertyKey: string) => void;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { UIKeys } from "./constants";
|
|
3
|
+
import { propMetadata } from "@decaf-ts/decorator-validation";
|
|
4
|
+
/**
|
|
5
|
+
* @namespace ui-decorators.ui.decorators
|
|
6
|
+
* @memberOf ui-decorators.ui
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @param {string} key
|
|
11
|
+
*
|
|
12
|
+
* @function getUIKey
|
|
13
|
+
*
|
|
14
|
+
* @memberOf ui-decorators.ui.decorators
|
|
15
|
+
*/
|
|
16
|
+
const getUIKey = (key) => UIKeys.REFLECT + key;
|
|
17
|
+
/**
|
|
18
|
+
* Adds the UIElement definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
|
|
19
|
+
*
|
|
20
|
+
* @param {string} tag The component/HTML element tag name
|
|
21
|
+
* @param {{}} [props] The properties to pass to that component/HTML Element
|
|
22
|
+
* @param {any[]} [args] optional arguments that will be passed to the rendering strategy.
|
|
23
|
+
*
|
|
24
|
+
* @decorator uielement
|
|
25
|
+
*
|
|
26
|
+
* @category Decorators
|
|
27
|
+
* @subcategory ui-decorators
|
|
28
|
+
*/
|
|
29
|
+
export function uielement(tag, props, serialize = false, ...args) {
|
|
30
|
+
const metadata = {
|
|
31
|
+
tag: tag,
|
|
32
|
+
serialize: serialize,
|
|
33
|
+
props: props,
|
|
34
|
+
args: args,
|
|
35
|
+
};
|
|
36
|
+
return propMetadata(getUIKey(UIKeys.ELEMENT), metadata);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Adds the UIProp definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
|
|
40
|
+
*
|
|
41
|
+
* this requires a '@uimodel' with a defined tag
|
|
42
|
+
*
|
|
43
|
+
* @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
|
|
44
|
+
*
|
|
45
|
+
* @decorator uiprop
|
|
46
|
+
*
|
|
47
|
+
* @category Decorators
|
|
48
|
+
* @subcategory ui-decorators
|
|
49
|
+
*/
|
|
50
|
+
export const uiprop = (propName = undefined, stringify = false) => (target, propertyKey) => {
|
|
51
|
+
const metadata = {
|
|
52
|
+
name: propName || propertyKey,
|
|
53
|
+
stringify: stringify,
|
|
54
|
+
};
|
|
55
|
+
Reflect.defineMetadata(getUIKey(UIKeys.PROP), metadata, target, propertyKey);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFOUQ7OztHQUdHO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQWF2RDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLEdBQVcsRUFDWCxLQUFrQyxFQUNsQyxZQUFxQixLQUFLLEVBQzFCLEdBQUcsSUFBVztJQUVkLE1BQU0sUUFBUSxHQUFzQjtRQUNsQyxHQUFHLEVBQUUsR0FBRztRQUNSLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLEtBQUssRUFBRSxLQUFLO1FBQ1osSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDO0lBQ0YsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBVUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQ2pCLENBQUMsV0FBK0IsU0FBUyxFQUFFLFlBQXFCLEtBQUssRUFBRSxFQUFFLENBQ3pFLENBQUMsTUFBVyxFQUFFLFdBQW1CLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFFBQVEsR0FBbUI7UUFDL0IsSUFBSSxFQUFFLFFBQVEsSUFBSSxXQUFXO1FBQzdCLFNBQVMsRUFBRSxTQUFTO0tBQ3JCLENBQUM7SUFFRixPQUFPLENBQUMsY0FBYyxDQUNwQixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUNyQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsQ0FDWixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiZmlsZSI6InVpL2RlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5pbXBvcnQgeyBVSUtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHByb3BNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIHVpLWRlY29yYXRvcnMudWkuZGVjb3JhdG9yc1xuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnMudWlcbiAqL1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKlxuICogQGZ1bmN0aW9uIGdldFVJS2V5XG4gKlxuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnMudWkuZGVjb3JhdG9yc1xuICovXG5jb25zdCBnZXRVSUtleSA9IChrZXk6IHN0cmluZykgPT4gVUlLZXlzLlJFRkxFQ1QgKyBrZXk7XG5cbi8qKlxuICogQHR5cGVkZWYgVUlFbGVtZW50TWV0YWRhdGFcbiAqIEBtZW1iZXJPZiB1aS1kZWNvcmF0b3JzLnVpLmRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgVUlFbGVtZW50TWV0YWRhdGEgPSB7XG4gIHRhZzogc3RyaW5nO1xuICBhcmdzPzogYW55W107XG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2VyaWFsaXplPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQWRkcyB0aGUgVUlFbGVtZW50IGRlZmluaXRpb24gYXMgbWV0YWRhdGEgdG8gdGhlIHByb3BlcnR5LCBhbGxvd2luZyBpdCB0byBiZSByZWFkIGJ5IGFueSB7QGxpbmsgUmVuZGVyU3RyYXRlZ3l9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgY29tcG9uZW50L0hUTUwgZWxlbWVudCB0YWcgbmFtZVxuICogQHBhcmFtIHt7fX0gW3Byb3BzXSBUaGUgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoYXQgY29tcG9uZW50L0hUTUwgRWxlbWVudFxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIG9wdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSByZW5kZXJpbmcgc3RyYXRlZ3kuXG4gKlxuICogQGRlY29yYXRvciB1aWVsZW1lbnRcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICogQHN1YmNhdGVnb3J5IHVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpZWxlbWVudChcbiAgdGFnOiBzdHJpbmcsXG4gIHByb3BzPzogeyBbaW5kZXhlcjogc3RyaW5nXTogYW55IH0sXG4gIHNlcmlhbGl6ZTogYm9vbGVhbiA9IGZhbHNlLFxuICAuLi5hcmdzOiBhbnlbXVxuKSB7XG4gIGNvbnN0IG1ldGFkYXRhOiBVSUVsZW1lbnRNZXRhZGF0YSA9IHtcbiAgICB0YWc6IHRhZyxcbiAgICBzZXJpYWxpemU6IHNlcmlhbGl6ZSxcbiAgICBwcm9wczogcHJvcHMsXG4gICAgYXJnczogYXJncyxcbiAgfTtcbiAgcmV0dXJuIHByb3BNZXRhZGF0YShnZXRVSUtleShVSUtleXMuRUxFTUVOVCksIG1ldGFkYXRhKTtcbn1cbi8qKlxuICogQHR5cGVkZWYgVUlQcm9wTWV0YWRhdGFcbiAqIEBtZW1iZXJPZiB1aS1kZWNvcmF0b3JzLnVpLmRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgVUlQcm9wTWV0YWRhdGEgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc3RyaW5naWZ5OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBVSVByb3AgZGVmaW5pdGlvbiBhcyBtZXRhZGF0YSB0byB0aGUgcHJvcGVydHksIGFsbG93aW5nIGl0IHRvIGJlIHJlYWQgYnkgYW55IHtAbGluayBSZW5kZXJTdHJhdGVneX1cbiAqXG4gKiB0aGlzIHJlcXVpcmVzIGEgJ0B1aW1vZGVsJyB3aXRoIGEgZGVmaW5lZCB0YWdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BOYW1lXSB0aGUgcHJvcGVydHkgbmFtZSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb21wb25lbnQuIGRlZmF1bHRzIHRvIHRoZSBQcm9wZXJ0eUtleVxuICpcbiAqIEBkZWNvcmF0b3IgdWlwcm9wXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqIEBzdWJjYXRlZ29yeSB1aS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCB1aXByb3AgPVxuICAocHJvcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2UpID0+XG4gICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBVSVByb3BNZXRhZGF0YSA9IHtcbiAgICAgIG5hbWU6IHByb3BOYW1lIHx8IHByb3BlcnR5S2V5LFxuICAgICAgc3RyaW5naWZ5OiBzdHJpbmdpZnksXG4gICAgfTtcblxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICBnZXRVSUtleShVSUtleXMuUFJPUCksXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIHRhcmdldCxcbiAgICAgIHByb3BlcnR5S2V5XG4gICAgKTtcbiAgfTtcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @namespace ui-decorators.ui
|
|
3
|
+
* @memberOf ui-decorators
|
|
4
|
+
*/
|
|
5
|
+
export * from "./constants";
|
|
6
|
+
export * from "./decorators";
|
|
7
|
+
export * from "./Rendering";
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQyIsImZpbGUiOiJ1aS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG5hbWVzcGFjZSB1aS1kZWNvcmF0b3JzLnVpXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9yc1xuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVuZGVyaW5nXCI7XG4iXX0=
|
package/lib/index.cjs
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module ui-decorators
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.VERSION = void 0;
|
|
21
|
+
__exportStar(require("./model/index.cjs"), exports);
|
|
22
|
+
__exportStar(require("./ui/index.cjs"), exports);
|
|
23
|
+
/**
|
|
24
|
+
* @summary stores the current package version
|
|
25
|
+
* @description this is how you should document a constant
|
|
26
|
+
* @const VERSION
|
|
27
|
+
* @memberOf module:ui-decorators
|
|
28
|
+
*/
|
|
29
|
+
exports.VERSION = "0.3.0";
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsMENBQXdCO0FBQ3hCLHVDQUFxQjtBQUVyQjs7Ozs7R0FLRztBQUNVLFFBQUEsT0FBTyxHQUFHLE9BQU8sQ0FBQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSB1aS1kZWNvcmF0b3JzXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3VpXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgc3RvcmVzIHRoZSBjdXJyZW50IHBhY2thZ2UgdmVyc2lvblxuICogQGRlc2NyaXB0aW9uIHRoaXMgaXMgaG93IHlvdSBzaG91bGQgZG9jdW1lbnQgYSBjb25zdGFudFxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMC4zLjBcIjtcbiJdfQ==
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ui-decorators
|
|
3
|
+
*/
|
|
4
|
+
export * from "./model";
|
|
5
|
+
export * from "./ui";
|
|
6
|
+
/**
|
|
7
|
+
* @summary stores the current package version
|
|
8
|
+
* @description this is how you should document a constant
|
|
9
|
+
* @const VERSION
|
|
10
|
+
* @memberOf module:ui-decorators
|
|
11
|
+
*/
|
|
12
|
+
export declare const VERSION = "0.3.0";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uimodel = uimodel;
|
|
4
|
+
exports.renderedBy = renderedBy;
|
|
5
|
+
const constants_1 = require("../ui/constants.cjs");
|
|
6
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
7
|
+
const reflection_1 = require("@decaf-ts/reflection");
|
|
8
|
+
/**
|
|
9
|
+
* Tags the model as a uimodel, giving it the 'render' method
|
|
10
|
+
*
|
|
11
|
+
* @param {string} [tag] optional param. will render the provided elment wrapping the attribute uielements
|
|
12
|
+
* @param {{}} [props] optional param. Attributes to be passed to the tag element
|
|
13
|
+
* @param {function(any): void} [instanceCallback] optional callback returning the instance after creation for additional logic
|
|
14
|
+
*
|
|
15
|
+
* @decorator uimodel
|
|
16
|
+
*
|
|
17
|
+
* @mermaid
|
|
18
|
+
* sequenceDiagram
|
|
19
|
+
* participant System
|
|
20
|
+
* participant uimodel
|
|
21
|
+
* participant constructor
|
|
22
|
+
* participant instance
|
|
23
|
+
* System->>uimodel:do(constructor)
|
|
24
|
+
* uimodel->>constructor: Executes the constructor
|
|
25
|
+
* constructor->>uimodel: returns instance
|
|
26
|
+
* uimodel->>instance: adds the render method
|
|
27
|
+
* uimodel->>System: returns UIModel instance
|
|
28
|
+
*
|
|
29
|
+
* @category Decorators
|
|
30
|
+
*/
|
|
31
|
+
function uimodel(tag, props) {
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
33
|
+
return (original, propertyKey) => {
|
|
34
|
+
const meta = {
|
|
35
|
+
tag: tag || original.name,
|
|
36
|
+
props: props,
|
|
37
|
+
};
|
|
38
|
+
return (0, reflection_1.metadata)(decorator_validation_1.Model.uiKey(constants_1.UIKeys.UIMODEL), meta)(original);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function renderedBy(engine) {
|
|
42
|
+
return (0, reflection_1.apply)((0, reflection_1.metadata)(decorator_validation_1.Model.uiKey(constants_1.UIKeys.RENDERED_BY), engine));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkJBLDBCQVNDO0FBRUQsZ0NBRUM7QUF4Q0QsK0NBQXlDO0FBQ3pDLHlFQUF1RDtBQUN2RCxxREFBdUQ7QUFFdkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFnQixPQUFPLENBQUMsR0FBWSxFQUFFLEtBQTJCO0lBQy9ELDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUk7WUFDekIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBQ0YsT0FBTyxJQUFBLHFCQUFRLEVBQUMsNEJBQUssQ0FBQyxLQUFLLENBQUMsa0JBQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvRCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLE1BQWM7SUFDdkMsT0FBTyxJQUFBLGtCQUFLLEVBQUMsSUFBQSxxQkFBUSxFQUFDLDRCQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDIiwiZmlsZSI6Im1vZGVsL2RlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVSUtleXMgfSBmcm9tIFwiLi4vdWkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGFwcGx5LCBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuXG4vKipcbiAqIFRhZ3MgdGhlIG1vZGVsIGFzIGEgdWltb2RlbCwgZ2l2aW5nIGl0IHRoZSAncmVuZGVyJyBtZXRob2RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3RhZ10gb3B0aW9uYWwgcGFyYW0uIHdpbGwgcmVuZGVyIHRoZSBwcm92aWRlZCBlbG1lbnQgd3JhcHBpbmcgdGhlIGF0dHJpYnV0ZSB1aWVsZW1lbnRzXG4gKiBAcGFyYW0ge3t9fSBbcHJvcHNdIG9wdGlvbmFsIHBhcmFtLiBBdHRyaWJ1dGVzIHRvIGJlIHBhc3NlZCB0byB0aGUgdGFnIGVsZW1lbnRcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oYW55KTogdm9pZH0gW2luc3RhbmNlQ2FsbGJhY2tdIG9wdGlvbmFsIGNhbGxiYWNrIHJldHVybmluZyB0aGUgaW5zdGFuY2UgYWZ0ZXIgY3JlYXRpb24gZm9yIGFkZGl0aW9uYWwgbG9naWNcbiAqXG4gKiBAZGVjb3JhdG9yIHVpbW9kZWxcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFN5c3RlbVxuICogICBwYXJ0aWNpcGFudCB1aW1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IGNvbnN0cnVjdG9yXG4gKiAgIHBhcnRpY2lwYW50IGluc3RhbmNlXG4gKiAgIFN5c3RlbS0+PnVpbW9kZWw6ZG8oY29uc3RydWN0b3IpXG4gKiAgIHVpbW9kZWwtPj5jb25zdHJ1Y3RvcjogRXhlY3V0ZXMgdGhlIGNvbnN0cnVjdG9yXG4gKiAgIGNvbnN0cnVjdG9yLT4+dWltb2RlbDogcmV0dXJucyBpbnN0YW5jZVxuICogICB1aW1vZGVsLT4+aW5zdGFuY2U6IGFkZHMgdGhlIHJlbmRlciBtZXRob2RcbiAqICAgdWltb2RlbC0+PlN5c3RlbTogcmV0dXJucyBVSU1vZGVsIGluc3RhbmNlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpbW9kZWwodGFnPzogc3RyaW5nLCBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICByZXR1cm4gKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIHRhZzogdGFnIHx8IG9yaWdpbmFsLm5hbWUsXG4gICAgICBwcm9wczogcHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gbWV0YWRhdGEoTW9kZWwudWlLZXkoVUlLZXlzLlVJTU9ERUwpLCBtZXRhKShvcmlnaW5hbCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJlZEJ5KGVuZ2luZTogc3RyaW5nKSB7XG4gIHJldHVybiBhcHBseShtZXRhZGF0YShNb2RlbC51aUtleShVSUtleXMuUkVOREVSRURfQlkpLCBlbmdpbmUpKTtcbn1cbiJdfQ==
|
|
@@ -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?: any, descriptor?: any) => void;
|