@decaf-ts/ui-decorators 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/esm/ui-decorators.bundle.min.esm.js +2 -0
  2. package/dist/esm/ui-decorators.bundle.min.esm.js.LICENSE.txt +14 -0
  3. package/dist/ui-decorators.bundle.min.js +2 -0
  4. package/dist/ui-decorators.bundle.min.js.LICENSE.txt +14 -0
  5. package/lib/esm/index.d.ts +12 -0
  6. package/lib/esm/index.js +14 -0
  7. package/lib/esm/model/Renderable.d.ts +3 -0
  8. package/lib/esm/model/Renderable.js +3 -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 +8 -0
  12. package/lib/esm/model/index.js +10 -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 +7 -0
  17. package/lib/esm/ui/Rendering.d.ts +183 -0
  18. package/lib/esm/ui/Rendering.js +298 -0
  19. package/lib/esm/ui/constants.d.ts +64 -0
  20. package/lib/esm/ui/constants.js +88 -0
  21. package/lib/esm/ui/decorators.d.ts +34 -0
  22. package/lib/esm/ui/decorators.js +62 -0
  23. package/lib/esm/ui/errors.d.ts +4 -0
  24. package/lib/esm/ui/errors.js +8 -0
  25. package/lib/esm/ui/index.d.ts +11 -0
  26. package/lib/esm/ui/index.js +13 -0
  27. package/lib/esm/ui/interfaces.d.ts +5 -0
  28. package/lib/esm/ui/interfaces.js +3 -0
  29. package/lib/esm/ui/types.d.ts +46 -0
  30. package/lib/esm/ui/types.js +3 -0
  31. package/lib/esm/ui/utils.d.ts +13 -0
  32. package/lib/esm/ui/utils.js +88 -0
  33. package/lib/index.cjs +29 -0
  34. package/lib/index.d.ts +12 -0
  35. package/lib/model/Renderable.cjs +2 -0
  36. package/lib/model/Renderable.d.ts +3 -0
  37. package/lib/model/decorators.cjs +43 -0
  38. package/lib/model/decorators.d.ts +25 -0
  39. package/lib/model/index.cjs +24 -0
  40. package/lib/model/index.d.ts +8 -0
  41. package/lib/model/model.cjs +2 -0
  42. package/lib/model/model.d.ts +115 -0
  43. package/lib/model/overrides.cjs +7 -0
  44. package/lib/model/overrides.d.ts +1 -0
  45. package/lib/ui/Rendering.cjs +300 -0
  46. package/lib/ui/Rendering.d.ts +183 -0
  47. package/lib/ui/constants.cjs +89 -0
  48. package/lib/ui/constants.d.ts +64 -0
  49. package/lib/ui/decorators.cjs +66 -0
  50. package/lib/ui/decorators.d.ts +34 -0
  51. package/lib/ui/errors.cjs +10 -0
  52. package/lib/ui/errors.d.ts +4 -0
  53. package/lib/ui/index.cjs +27 -0
  54. package/lib/ui/index.d.ts +11 -0
  55. package/lib/ui/interfaces.cjs +2 -0
  56. package/lib/ui/interfaces.d.ts +5 -0
  57. package/lib/ui/types.cjs +2 -0
  58. package/lib/ui/types.d.ts +46 -0
  59. package/lib/ui/utils.cjs +94 -0
  60. package/lib/ui/utils.d.ts +13 -0
  61. package/package.json +1 -1
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @namespace ui-decorators.ui
3
+ * @memberOf ui-decorators
4
+ */
5
+ export * from "./constants";
6
+ export * from "./decorators";
7
+ export * from "./errors";
8
+ export * from "./interfaces";
9
+ export * from "./Rendering";
10
+ export * from "./types";
11
+ export * from "./utils";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @namespace ui-decorators.ui
3
+ * @memberOf ui-decorators
4
+ */
5
+ export * from "./constants";
6
+ export * from "./decorators";
7
+ export * from "./errors";
8
+ export * from "./interfaces";
9
+ export * from "./Rendering";
10
+ export * from "./types";
11
+ export * from "./utils";
12
+
13
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFNBQVMsQ0FBQyIsImZpbGUiOiJ1aS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG5hbWVzcGFjZSB1aS1kZWNvcmF0b3JzLnVpXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9yc1xuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZW5kZXJpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuIl19
@@ -0,0 +1,5 @@
1
+ import { FieldProperties } from "./types";
2
+ import { CrudOperations } from "@decaf-ts/db-decorators";
3
+ export interface CrudFormField extends FieldProperties {
4
+ operation: CrudOperations;
5
+ }
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoidWkvaW50ZXJmYWNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpZWxkUHJvcGVydGllcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENydWRGb3JtRmllbGQgZXh0ZW5kcyBGaWVsZFByb3BlcnRpZXMge1xuICBvcGVyYXRpb246IENydWRPcGVyYXRpb25zO1xufVxuIl19
@@ -0,0 +1,46 @@
1
+ import { OperationKeys } from "@decaf-ts/db-decorators";
2
+ export interface FieldDefinition<T = void> {
3
+ tag: string;
4
+ rendererId?: string;
5
+ props: T & FieldProperties;
6
+ children?: FieldDefinition<T>[];
7
+ }
8
+ export interface FieldProperties {
9
+ name: string;
10
+ type: string;
11
+ value: string | number | Date;
12
+ hidden?: boolean;
13
+ disabled?: boolean;
14
+ required?: boolean;
15
+ readonly?: boolean;
16
+ maxLength?: number;
17
+ minLength?: number;
18
+ max?: number | Date;
19
+ min?: number | Date;
20
+ pattern?: string;
21
+ step?: number;
22
+ format?: string;
23
+ }
24
+ /**
25
+ * @typedef UIElementMetadata
26
+ * @memberOf ui-decorators.ui.decorators
27
+ */
28
+ export type UIElementMetadata = {
29
+ tag: string;
30
+ props?: Record<string, any>;
31
+ serialize?: boolean;
32
+ };
33
+ /**
34
+ * @typedef UIElementMetadata
35
+ * @memberOf ui-decorators.ui.decorators
36
+ */
37
+ export type UIModelMetadata = Omit<UIElementMetadata, "serialize">;
38
+ /**
39
+ * @typedef UIPropMetadata
40
+ * @memberOf ui-decorators.ui.decorators
41
+ */
42
+ export type UIPropMetadata = {
43
+ name: string;
44
+ stringify: boolean;
45
+ };
46
+ export type CrudOperationKeys = OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE;
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InVpL3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkRGVmaW5pdGlvbjxUID0gdm9pZD4ge1xuICB0YWc6IHN0cmluZztcbiAgcmVuZGVyZXJJZD86IHN0cmluZztcbiAgcHJvcHM6IFQgJiBGaWVsZFByb3BlcnRpZXM7XG4gIGNoaWxkcmVuPzogRmllbGREZWZpbml0aW9uPFQ+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRQcm9wZXJ0aWVzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8vIFZhbGlkYXRpb25cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXIgfCBEYXRlO1xuICBtaW4/OiBudW1iZXIgfCBEYXRlO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xuICBzdGVwPzogbnVtYmVyO1xuICBmb3JtYXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgVUlFbGVtZW50TWV0YWRhdGFcbiAqIEBtZW1iZXJPZiB1aS1kZWNvcmF0b3JzLnVpLmRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgVUlFbGVtZW50TWV0YWRhdGEgPSB7XG4gIHRhZzogc3RyaW5nO1xuICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHNlcmlhbGl6ZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFVJRWxlbWVudE1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIFVJTW9kZWxNZXRhZGF0YSA9IE9taXQ8VUlFbGVtZW50TWV0YWRhdGEsIFwic2VyaWFsaXplXCI+O1xuXG4vKipcbiAqIEB0eXBlZGVmIFVJUHJvcE1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIFVJUHJvcE1ldGFkYXRhID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHN0cmluZ2lmeTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENydWRPcGVyYXRpb25LZXlzID1cbiAgfCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gIHwgT3BlcmF0aW9uS2V5cy5ERUxFVEU7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { Model } from "@decaf-ts/decorator-validation";
2
+ import { FieldProperties } from "./types";
3
+ /**
4
+ * @function formatByType
5
+ *
6
+ * @memberOf ui-decorators-web.ui
7
+ */
8
+ export declare function formatByType(type: any, value: any, ...args: unknown[]): string | number;
9
+ export declare function parseValueByType(type: string, value: string | number, fieldProps: FieldProperties): string | number | Date;
10
+ export declare function parseToNumber(value: string | number): number | undefined;
11
+ export declare function escapeHtml(value: string): string | undefined;
12
+ export declare function revertHtml(value: string): string;
13
+ export declare function generateUIModelID<M extends Model>(model: M): string;
@@ -0,0 +1,88 @@
1
+ import { formatDate, parseDate, ReservedModels, } from "@decaf-ts/decorator-validation";
2
+ import { HTML5DateFormat, HTML5InputTypes, UIKeys } from "./constants";
3
+ import { findModelId, InternalError } from "@decaf-ts/db-decorators";
4
+ /**
5
+ * @function formatByType
6
+ *
7
+ * @memberOf ui-decorators-web.ui
8
+ */
9
+ export function formatByType(type, value, ...args) {
10
+ if (type === UIKeys.DATE) {
11
+ const format = args.shift() || HTML5DateFormat;
12
+ return formatDate(new Date(value), format);
13
+ }
14
+ return value;
15
+ }
16
+ export function parseValueByType(type, value, fieldProps) {
17
+ let result = undefined;
18
+ switch (type) {
19
+ case HTML5InputTypes.NUMBER:
20
+ result = parseToNumber(value);
21
+ break;
22
+ case HTML5InputTypes.DATE: {
23
+ const format = fieldProps.format;
24
+ result =
25
+ typeof value === ReservedModels.NUMBER
26
+ ? new Date(value)
27
+ : value
28
+ ? format
29
+ ? parseDate(format, value)
30
+ : new Date(value)
31
+ : undefined;
32
+ break;
33
+ }
34
+ default:
35
+ result =
36
+ typeof value === ReservedModels.STRING
37
+ ? escapeHtml(value)
38
+ : result;
39
+ }
40
+ if (typeof result === "undefined") {
41
+ throw new InternalError(`Failed to parse value of type ${type} from ${typeof value} - ${value}`);
42
+ }
43
+ return result;
44
+ }
45
+ export function parseToNumber(value) {
46
+ if (typeof value === "number" && !isNaN(value))
47
+ return value;
48
+ const parsed = Number(value);
49
+ if (!isNaN(parsed))
50
+ return parsed;
51
+ return undefined;
52
+ }
53
+ export function escapeHtml(value) {
54
+ if (!value)
55
+ return undefined;
56
+ const tagsToReplace = {
57
+ "&": "&amp;",
58
+ "<": "&lt;",
59
+ ">": "&gt;",
60
+ };
61
+ return `${value}`.replace(/[&<>]/g, (tag) => {
62
+ return tagsToReplace[tag] || tag;
63
+ });
64
+ }
65
+ export function revertHtml(value) {
66
+ const tagsToReplace = {
67
+ "&amp;": "&",
68
+ "&lt;": "<",
69
+ "&gt;": ">",
70
+ };
71
+ return `${value}`.replace(/&lt;|&gt;|&amp;/g, (tag) => {
72
+ return tagsToReplace[tag] || tag;
73
+ });
74
+ }
75
+ export function generateUIModelID(model) {
76
+ let id;
77
+ try {
78
+ id = findModelId(model);
79
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
+ }
81
+ catch (e) {
82
+ id = Date.now();
83
+ }
84
+ const name = model.constructor.name;
85
+ return `${name}-${id}`;
86
+ }
87
+
88
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUMxQyxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLE1BQU0sYUFBYSxHQUEyQjtRQUM1QyxPQUFPLEVBQUUsR0FBRztRQUNaLE1BQU0sRUFBRSxHQUFHO1FBQ1gsTUFBTSxFQUFFLEdBQUc7S0FDWixDQUFDO0lBRUYsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3BELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQWtCLEtBQVE7SUFDekQsSUFBSSxFQUFtQixDQUFDO0lBQ3hCLElBQUksQ0FBQztRQUNILEVBQUUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsNkRBQTZEO0lBQy9ELENBQUM7SUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1FBQ3BCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQ3BDLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7QUFDekIsQ0FBQyIsImZpbGUiOiJ1aS91dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGZvcm1hdERhdGUsXG4gIE1vZGVsLFxuICBwYXJzZURhdGUsXG4gIFJlc2VydmVkTW9kZWxzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBIVE1MNURhdGVGb3JtYXQsIEhUTUw1SW5wdXRUeXBlcywgVUlLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaW5kTW9kZWxJZCwgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZnVuY3Rpb24gZm9ybWF0QnlUeXBlXG4gKlxuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnMtd2ViLnVpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeVR5cGUoXG4gIHR5cGU6IGFueSxcbiAgdmFsdWU6IGFueSxcbiAgLi4uYXJnczogdW5rbm93bltdXG4pOiBzdHJpbmcgfCBudW1iZXIge1xuICBpZiAodHlwZSA9PT0gVUlLZXlzLkRBVEUpIHtcbiAgICBjb25zdCBmb3JtYXQ6IHN0cmluZyA9IChhcmdzLnNoaWZ0KCkgYXMgc3RyaW5nKSB8fCBIVE1MNURhdGVGb3JtYXQ7XG4gICAgcmV0dXJuIGZvcm1hdERhdGUobmV3IERhdGUodmFsdWUpLCBmb3JtYXQpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmFsdWVCeVR5cGUoXG4gIHR5cGU6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcixcbiAgZmllbGRQcm9wczogRmllbGRQcm9wZXJ0aWVzXG4pOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHtcbiAgbGV0IHJlc3VsdDogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuTlVNQkVSOlxuICAgICAgcmVzdWx0ID0gcGFyc2VUb051bWJlcih2YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5EQVRFOiB7XG4gICAgICBjb25zdCBmb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGZpZWxkUHJvcHMuZm9ybWF0O1xuICAgICAgcmVzdWx0ID1cbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBSZXNlcnZlZE1vZGVscy5OVU1CRVJcbiAgICAgICAgICA/IG5ldyBEYXRlKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgID8gZm9ybWF0XG4gICAgICAgICAgICAgID8gcGFyc2VEYXRlKGZvcm1hdCwgdmFsdWUpXG4gICAgICAgICAgICAgIDogbmV3IERhdGUodmFsdWUpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmVzdWx0ID1cbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBSZXNlcnZlZE1vZGVscy5TVFJJTkdcbiAgICAgICAgICA/IGVzY2FwZUh0bWwodmFsdWUgYXMgc3RyaW5nKVxuICAgICAgICAgIDogcmVzdWx0O1xuICB9XG4gIGlmICh0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHBhcnNlIHZhbHVlIG9mIHR5cGUgJHt0eXBlfSBmcm9tICR7dHlwZW9mIHZhbHVlfSAtICR7dmFsdWV9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVG9OdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmICFpc05hTih2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpO1xuICBpZiAoIWlzTmFOKHBhcnNlZCkpIHJldHVybiBwYXJzZWQ7XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRhZ3NUb1JlcGxhY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgXCImXCI6IFwiJmFtcDtcIixcbiAgICBcIjxcIjogXCImbHQ7XCIsXG4gICAgXCI+XCI6IFwiJmd0O1wiLFxuICB9O1xuICByZXR1cm4gYCR7dmFsdWV9YC5yZXBsYWNlKC9bJjw+XS9nLCAodGFnKSA9PiB7XG4gICAgcmV0dXJuIHRhZ3NUb1JlcGxhY2VbdGFnXSB8fCB0YWc7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJ0SHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gIGNvbnN0IHRhZ3NUb1JlcGxhY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgXCImYW1wO1wiOiBcIiZcIixcbiAgICBcIiZsdDtcIjogXCI8XCIsXG4gICAgXCImZ3Q7XCI6IFwiPlwiLFxuICB9O1xuXG4gIHJldHVybiBgJHt2YWx1ZX1gLnJlcGxhY2UoLyZsdDt8Jmd0O3wmYW1wOy9nLCAodGFnKSA9PiB7XG4gICAgcmV0dXJuIHRhZ3NUb1JlcGxhY2VbdGFnXSB8fCB0YWc7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVVSU1vZGVsSUQ8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICBsZXQgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgdHJ5IHtcbiAgICBpZCA9IGZpbmRNb2RlbElkKG1vZGVsKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICBpZCA9IERhdGUubm93KCk7XG4gIH1cbiAgY29uc3QgbmFtZSA9IG1vZGVsLmNvbnN0cnVjdG9yLm5hbWU7XG4gIHJldHVybiBgJHtuYW1lfS0ke2lkfWA7XG59XG4iXX0=
package/lib/index.cjs ADDED
@@ -0,0 +1,29 @@
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.4.6";
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.4.6";
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export interface Renderable {
2
+ render<R>(...args: any[]): R;
3
+ }
@@ -0,0 +1,43 @@
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 reflection_1 = require("@decaf-ts/reflection");
7
+ const Rendering_1 = require("../ui/Rendering.cjs");
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)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.UIMODEL), meta)(original);
39
+ };
40
+ }
41
+ function renderedBy(engine) {
42
+ return (0, reflection_1.apply)((0, reflection_1.metadata)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.RENDERED_BY), engine));
43
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tags the model as a uimodel, giving it the 'render' method
3
+ *
4
+ * @param {string} [tag] optional param. will render the provided elment wrapping the attribute uielements
5
+ * @param {{}} [props] optional param. Attributes to be passed to the tag element
6
+ * @param {function(any): void} [instanceCallback] optional callback returning the instance after creation for additional logic
7
+ *
8
+ * @decorator uimodel
9
+ *
10
+ * @mermaid
11
+ * sequenceDiagram
12
+ * participant System
13
+ * participant uimodel
14
+ * participant constructor
15
+ * participant instance
16
+ * System->>uimodel:do(constructor)
17
+ * uimodel->>constructor: Executes the constructor
18
+ * constructor->>uimodel: returns instance
19
+ * uimodel->>instance: adds the render method
20
+ * uimodel->>System: returns UIModel instance
21
+ *
22
+ * @category Decorators
23
+ */
24
+ export declare function uimodel(tag?: string, props?: Record<string, any>): (original: any, propertyKey?: any) => void;
25
+ export declare function renderedBy(engine: string): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * @namespace model
4
+ * @memberOf ui-decorators
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ require("./model.cjs");
22
+ __exportStar(require("./decorators.cjs"), exports);
23
+ __exportStar(require("./overrides.cjs"), exports);
24
+ __exportStar(require("./Renderable.cjs"), exports);
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @namespace model
3
+ * @memberOf ui-decorators
4
+ */
5
+ import "./model";
6
+ export * from "./decorators";
7
+ export * from "./overrides";
8
+ export * from "./Renderable";
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,115 @@
1
+ import { ModelErrorDefinition } from "@decaf-ts/decorator-validation";
2
+ import { BuilderRegistry, Comparable, Constructor, Hashable, ModelArg, ModelBuilderFunction, ModelConstructor, Serializable, Validatable } from "@decaf-ts/decorator-validation";
3
+ import { Renderable } from "./Renderable";
4
+ declare module "@decaf-ts/decorator-validation" {
5
+ abstract class Model implements Validatable, Serializable, Hashable, Comparable<Model>, Renderable {
6
+ protected constructor(arg?: ModelArg<Model>);
7
+ hasErrors(...exclusions: any[]): ModelErrorDefinition | undefined;
8
+ hasErrors(previousVersion?: Model | any, ...exclusions: any[]): ModelErrorDefinition | undefined;
9
+ /**
10
+ * @summary Compare object equality recursively
11
+ * @param {any} obj object to compare to
12
+ * @param {string} [exceptions] property names to be excluded from the comparison
13
+ */
14
+ equals(obj: any, ...exceptions: string[]): boolean;
15
+ /**
16
+ * @summary Returns the serialized model according to the currently defined {@link Serializer}
17
+ */
18
+ serialize(): string;
19
+ /**
20
+ * @summary Override the implementation for js's 'toString()' which sucks...
21
+ * @override
22
+ */
23
+ toString(): string;
24
+ /**
25
+ * @summary Defines a default implementation for object hash. Relies on a very basic implementation based on Java's string hash;
26
+ */
27
+ hash(): string;
28
+ /**
29
+ * @summary Deserializes a Model
30
+ * @param {string} str
31
+ *
32
+ * @param args
33
+ * @throws {Error} If it fails to parse the string, or if it fails to build the model
34
+ */
35
+ static deserialize(str: string): any;
36
+ /**
37
+ * @summary Repopulates the Object properties with the ones from the new object
38
+ * @description Iterates all common properties of obj (if existing) and self, and copies them onto self
39
+ *
40
+ * @param {T} self
41
+ * @param {T | Record<string, any>} [obj]
42
+ *
43
+ */
44
+ static fromObject<T extends Model>(self: T, obj?: T | Record<string, any>): T;
45
+ /**
46
+ * @summary Repopulates the instance with the ones from the new Model Object
47
+ * @description Iterates all common properties of obj (if existing) and self, and copies them onto self.
48
+ * Is aware of nested Model Objects and rebuilds them also.
49
+ * When List properties are decorated with {@link list}, they list items will also be rebuilt
50
+ *
51
+ * @param {T} self
52
+ * @param {T | Record<string, any>} [obj]
53
+ *
54
+ */
55
+ static fromModel<T extends Model>(self: T, obj?: T | Record<string, any>): T;
56
+ /**
57
+ * @summary Sets the Global {@link ModelBuilderFunction}
58
+ * @param {ModelBuilderFunction} [builder]
59
+ */
60
+ static setBuilder(builder?: ModelBuilderFunction): void;
61
+ /**
62
+ * @summary Retrieves the current global {@link ModelBuilderFunction}
63
+ */
64
+ static getBuilder(): ModelBuilderFunction | undefined;
65
+ /**
66
+ * Returns the current {@link ModelRegistryManager}
67
+ *
68
+ * @return ModelRegistry, defaults to {@link ModelRegistryManager}
69
+ */
70
+ private static getRegistry;
71
+ /**
72
+ * Returns the current actingModelRegistry
73
+ *
74
+ * @param {BuilderRegistry} modelRegistry the new implementation of Registry
75
+ */
76
+ static setRegistry(modelRegistry: BuilderRegistry<any>): void;
77
+ /**
78
+ * @summary register new Models
79
+ * @param {any} constructor
80
+ * @param {string} [name] when not defined, the name of the constructor will be used
81
+ *
82
+ * @see ModelRegistry
83
+ */
84
+ static register<T extends Model>(constructor: ModelConstructor<T>, name?: string): void;
85
+ /**
86
+ * @summary Gets a registered Model {@link ModelConstructor}
87
+ * @param {string} name
88
+ *
89
+ * @see ModelRegistry
90
+ */
91
+ static get<T extends Model>(name: string): ModelConstructor<T> | undefined;
92
+ /**
93
+ * @param {Record<string, any>} obj
94
+ * @param {string} [clazz] when provided, it will attempt to find the matching constructor
95
+ *
96
+ * @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
97
+ *
98
+ * @see ModelRegistry
99
+ */
100
+ static build<T extends Model>(obj?: Record<string, any>, clazz?: string): T;
101
+ static getMetadata<V extends Model>(model: V): any;
102
+ static getAttributes<V extends Model>(model: Constructor<V> | V): string[];
103
+ static equals<V extends Model>(obj1: V, obj2: V, ...exceptions: any[]): boolean;
104
+ static hasErrors<V extends Model>(model: V, ...exceptions: any[]): ModelErrorDefinition | undefined;
105
+ static serialize<V extends Model>(model: V): any;
106
+ static hash<V extends Model>(model: V): any;
107
+ /**
108
+ * @summary Builds the key to store as Metadata under Reflections
109
+ * @description concatenates {@link ModelKeys#REFLECT} with the provided key
110
+ * @param {string} str
111
+ */
112
+ static key(str: string): string;
113
+ render<R>(...args: any[]): R;
114
+ }
115
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
4
+ const Rendering_1 = require("../ui/Rendering.cjs");
5
+ decorator_validation_1.Model.prototype.render = function (...args) {
6
+ return Rendering_1.RenderingEngine.render(this, ...args);
7
+ };
@@ -0,0 +1 @@
1
+ export {};