@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.
Files changed (43) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +53 -0
  3. package/dist/esm/ui-decorators.bundle.min.esm.js +2 -0
  4. package/dist/esm/ui-decorators.bundle.min.esm.js.LICENSE.txt +14 -0
  5. package/dist/ui-decorators.bundle.min.js +2 -0
  6. package/dist/ui-decorators.bundle.min.js.LICENSE.txt +14 -0
  7. package/lib/esm/index.d.ts +12 -0
  8. package/lib/esm/index.js +14 -0
  9. package/lib/esm/model/decorators.d.ts +25 -0
  10. package/lib/esm/model/decorators.js +41 -0
  11. package/lib/esm/model/index.d.ts +7 -0
  12. package/lib/esm/model/index.js +9 -0
  13. package/lib/esm/model/model.d.ts +115 -0
  14. package/lib/esm/model/model.js +3 -0
  15. package/lib/esm/model/overrides.d.ts +1 -0
  16. package/lib/esm/model/overrides.js +11 -0
  17. package/lib/esm/ui/Rendering.d.ts +14 -0
  18. package/lib/esm/ui/Rendering.js +40 -0
  19. package/lib/esm/ui/constants.d.ts +28 -0
  20. package/lib/esm/ui/constants.js +31 -0
  21. package/lib/esm/ui/decorators.d.ts +47 -0
  22. package/lib/esm/ui/decorators.js +58 -0
  23. package/lib/esm/ui/index.d.ts +7 -0
  24. package/lib/esm/ui/index.js +9 -0
  25. package/lib/index.cjs +31 -0
  26. package/lib/index.d.ts +12 -0
  27. package/lib/model/decorators.cjs +45 -0
  28. package/lib/model/decorators.d.ts +25 -0
  29. package/lib/model/index.cjs +25 -0
  30. package/lib/model/index.d.ts +7 -0
  31. package/lib/model/model.cjs +4 -0
  32. package/lib/model/model.d.ts +115 -0
  33. package/lib/model/overrides.cjs +13 -0
  34. package/lib/model/overrides.d.ts +1 -0
  35. package/lib/ui/Rendering.cjs +44 -0
  36. package/lib/ui/Rendering.d.ts +14 -0
  37. package/lib/ui/constants.cjs +34 -0
  38. package/lib/ui/constants.d.ts +28 -0
  39. package/lib/ui/decorators.cjs +63 -0
  40. package/lib/ui/decorators.d.ts +47 -0
  41. package/lib/ui/index.cjs +25 -0
  42. package/lib/ui/index.d.ts +7 -0
  43. package/package.json +109 -0
@@ -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,7 @@
1
+ /**
2
+ * @namespace model
3
+ * @memberOf ui-decorators
4
+ */
5
+ import "./model";
6
+ export * from "./decorators";
7
+ export * from "./overrides";
@@ -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,7 @@
1
+ /**
2
+ * @namespace ui-decorators.ui
3
+ * @memberOf ui-decorators
4
+ */
5
+ export * from "./constants";
6
+ export * from "./decorators";
7
+ export * from "./Rendering";
@@ -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;