@decaf-ts/ui-decorators 0.4.2 → 0.4.4

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 (63) hide show
  1. package/LICENSE.md +157 -21
  2. package/README.md +0 -0
  3. package/dist/esm/ui-decorators.bundle.min.esm.js +1 -1
  4. package/dist/esm/ui-decorators.bundle.min.esm.js.LICENSE.txt +0 -0
  5. package/dist/ui-decorators.bundle.min.js +1 -1
  6. package/dist/ui-decorators.bundle.min.js.LICENSE.txt +0 -0
  7. package/lib/esm/index.d.ts +1 -1
  8. package/lib/esm/index.js +2 -2
  9. package/lib/esm/model/Renderable.d.ts +0 -0
  10. package/lib/esm/model/Renderable.js +0 -0
  11. package/lib/esm/model/decorators.d.ts +0 -0
  12. package/lib/esm/model/decorators.js +0 -0
  13. package/lib/esm/model/index.d.ts +0 -0
  14. package/lib/esm/model/index.js +0 -0
  15. package/lib/esm/model/model.d.ts +0 -0
  16. package/lib/esm/model/model.js +0 -0
  17. package/lib/esm/model/overrides.d.ts +0 -0
  18. package/lib/esm/model/overrides.js +0 -0
  19. package/lib/esm/ui/Rendering.d.ts +169 -4
  20. package/lib/esm/ui/Rendering.js +189 -17
  21. package/lib/esm/ui/constants.d.ts +1 -0
  22. package/lib/esm/ui/constants.js +2 -1
  23. package/lib/esm/ui/decorators.d.ts +0 -0
  24. package/lib/esm/ui/decorators.js +0 -0
  25. package/lib/esm/ui/errors.d.ts +0 -0
  26. package/lib/esm/ui/errors.js +0 -0
  27. package/lib/esm/ui/index.d.ts +0 -0
  28. package/lib/esm/ui/index.js +0 -0
  29. package/lib/esm/ui/interfaces.d.ts +1 -3
  30. package/lib/esm/ui/interfaces.js +1 -1
  31. package/lib/esm/ui/types.d.ts +5 -3
  32. package/lib/esm/ui/types.js +1 -1
  33. package/lib/esm/ui/utils.d.ts +3 -1
  34. package/lib/esm/ui/utils.js +19 -45
  35. package/lib/index.cjs +1 -3
  36. package/lib/index.d.ts +1 -1
  37. package/lib/model/Renderable.cjs +0 -2
  38. package/lib/model/Renderable.d.ts +0 -0
  39. package/lib/model/decorators.cjs +0 -2
  40. package/lib/model/decorators.d.ts +0 -0
  41. package/lib/model/index.cjs +0 -2
  42. package/lib/model/index.d.ts +0 -0
  43. package/lib/model/model.cjs +0 -2
  44. package/lib/model/model.d.ts +0 -0
  45. package/lib/model/overrides.cjs +0 -2
  46. package/lib/model/overrides.d.ts +0 -0
  47. package/lib/ui/Rendering.cjs +187 -17
  48. package/lib/ui/Rendering.d.ts +169 -4
  49. package/lib/ui/constants.cjs +1 -2
  50. package/lib/ui/constants.d.ts +1 -0
  51. package/lib/ui/decorators.cjs +0 -2
  52. package/lib/ui/decorators.d.ts +0 -0
  53. package/lib/ui/errors.cjs +0 -2
  54. package/lib/ui/errors.d.ts +0 -0
  55. package/lib/ui/index.cjs +0 -2
  56. package/lib/ui/index.d.ts +0 -0
  57. package/lib/ui/interfaces.cjs +0 -2
  58. package/lib/ui/interfaces.d.ts +1 -3
  59. package/lib/ui/types.cjs +0 -2
  60. package/lib/ui/types.d.ts +5 -3
  61. package/lib/ui/utils.cjs +19 -46
  62. package/lib/ui/utils.d.ts +3 -1
  63. package/package.json +15 -15
@@ -1,7 +1,5 @@
1
1
  import { FieldProperties } from "./types";
2
2
  import { CrudOperations } from "@decaf-ts/db-decorators";
3
- export interface CrudFormField<T = void> {
3
+ export interface CrudFormField extends FieldProperties {
4
4
  operation: CrudOperations;
5
- props: FieldProperties & T;
6
- value: string;
7
5
  }
@@ -1,3 +1,3 @@
1
1
  export {};
2
2
 
3
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoidWkvaW50ZXJmYWNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpZWxkUHJvcGVydGllcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENydWRGb3JtRmllbGQ8VCA9IHZvaWQ+IHtcbiAgb3BlcmF0aW9uOiBDcnVkT3BlcmF0aW9ucztcbiAgcHJvcHM6IEZpZWxkUHJvcGVydGllcyAmIFQ7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoidWkvaW50ZXJmYWNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpZWxkUHJvcGVydGllcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENydWRGb3JtRmllbGQgZXh0ZW5kcyBGaWVsZFByb3BlcnRpZXMge1xuICBvcGVyYXRpb246IENydWRPcGVyYXRpb25zO1xufVxuIl19
@@ -1,15 +1,16 @@
1
1
  import { OperationKeys } from "@decaf-ts/db-decorators";
2
2
  export interface FieldDefinition<T = void> {
3
3
  tag: string;
4
+ rendererId?: string;
4
5
  props: T & FieldProperties;
5
6
  children?: FieldDefinition<T>[];
6
7
  }
7
- export interface FieldProperties extends Record<string, any> {
8
+ export interface FieldProperties {
8
9
  name: string;
9
- label: string;
10
- placeholder?: string;
11
10
  type: string;
11
+ value: string | number | Date;
12
12
  hidden?: boolean;
13
+ disabled?: boolean;
13
14
  required?: boolean;
14
15
  readonly?: boolean;
15
16
  maxLength?: number;
@@ -18,6 +19,7 @@ export interface FieldProperties extends Record<string, any> {
18
19
  min?: number | Date;
19
20
  pattern?: string;
20
21
  step?: number;
22
+ format?: string;
21
23
  }
22
24
  /**
23
25
  * @typedef UIElementMetadata
@@ -1,3 +1,3 @@
1
1
  export {};
2
2
 
3
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InVpL3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkRGVmaW5pdGlvbjxUID0gdm9pZD4ge1xuICB0YWc6IHN0cmluZztcbiAgcHJvcHM6IFQgJiBGaWVsZFByb3BlcnRpZXM7XG4gIGNoaWxkcmVuPzogRmllbGREZWZpbml0aW9uPFQ+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRQcm9wZXJ0aWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgLy8gVmFsaWRhdGlvblxuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIG1heD86IG51bWJlciB8IERhdGU7XG4gIG1pbj86IG51bWJlciB8IERhdGU7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHN0ZXA/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgVUlFbGVtZW50TWV0YWRhdGFcbiAqIEBtZW1iZXJPZiB1aS1kZWNvcmF0b3JzLnVpLmRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgVUlFbGVtZW50TWV0YWRhdGEgPSB7XG4gIHRhZzogc3RyaW5nO1xuICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHNlcmlhbGl6ZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFVJRWxlbWVudE1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIFVJTW9kZWxNZXRhZGF0YSA9IE9taXQ8VUlFbGVtZW50TWV0YWRhdGEsIFwic2VyaWFsaXplXCI+O1xuXG4vKipcbiAqIEB0eXBlZGVmIFVJUHJvcE1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIFVJUHJvcE1ldGFkYXRhID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHN0cmluZ2lmeTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENydWRPcGVyYXRpb25LZXlzID1cbiAgfCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gIHwgT3BlcmF0aW9uS2V5cy5ERUxFVEU7XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InVpL3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BlcmF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkRGVmaW5pdGlvbjxUID0gdm9pZD4ge1xuICB0YWc6IHN0cmluZztcbiAgcmVuZGVyZXJJZD86IHN0cmluZztcbiAgcHJvcHM6IFQgJiBGaWVsZFByb3BlcnRpZXM7XG4gIGNoaWxkcmVuPzogRmllbGREZWZpbml0aW9uPFQ+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRQcm9wZXJ0aWVzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8vIFZhbGlkYXRpb25cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXIgfCBEYXRlO1xuICBtaW4/OiBudW1iZXIgfCBEYXRlO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xuICBzdGVwPzogbnVtYmVyO1xuICBmb3JtYXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgVUlFbGVtZW50TWV0YWRhdGFcbiAqIEBtZW1iZXJPZiB1aS1kZWNvcmF0b3JzLnVpLmRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgVUlFbGVtZW50TWV0YWRhdGEgPSB7XG4gIHRhZzogc3RyaW5nO1xuICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHNlcmlhbGl6ZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFVJRWxlbWVudE1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIFVJTW9kZWxNZXRhZGF0YSA9IE9taXQ8VUlFbGVtZW50TWV0YWRhdGEsIFwic2VyaWFsaXplXCI+O1xuXG4vKipcbiAqIEB0eXBlZGVmIFVJUHJvcE1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIFVJUHJvcE1ldGFkYXRhID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHN0cmluZ2lmeTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENydWRPcGVyYXRpb25LZXlzID1cbiAgfCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gIHwgT3BlcmF0aW9uS2V5cy5ERUxFVEU7XG4iXX0=
@@ -1,9 +1,11 @@
1
+ import { Model } from "@decaf-ts/decorator-validation";
1
2
  /**
2
3
  * @function formatByType
3
4
  *
4
5
  * @memberOf ui-decorators-web.ui
5
6
  */
6
- export declare function formatByType(type: any, value: any): any;
7
+ export declare function formatByType(type: any, value: any, ...args: unknown[]): string | number;
7
8
  export declare function parseToNumber(value: string | number): number | undefined;
8
9
  export declare function escapeHtml(value: string): string | undefined;
9
10
  export declare function revertHtml(value: string): string;
11
+ export declare function generateUIModelID<M extends Model>(model: M): string;
@@ -1,17 +1,17 @@
1
1
  import { formatDate } from "@decaf-ts/decorator-validation";
2
2
  import { HTML5DateFormat, UIKeys } from "./constants";
3
+ import { findModelId } from "@decaf-ts/db-decorators";
3
4
  /**
4
5
  * @function formatByType
5
6
  *
6
7
  * @memberOf ui-decorators-web.ui
7
8
  */
8
- export function formatByType(type, value) {
9
- switch (type) {
10
- case UIKeys.DATE:
11
- return formatDate(new Date(value), HTML5DateFormat);
12
- default:
13
- return value;
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);
14
13
  }
14
+ return value;
15
15
  }
16
16
  export function parseToNumber(value) {
17
17
  if (typeof value === "number" && !isNaN(value))
@@ -43,43 +43,17 @@ export function revertHtml(value) {
43
43
  return tagsToReplace[tag] || tag;
44
44
  });
45
45
  }
46
- //
47
- //
48
- // export function getValidationsByAttribute<M extends Model>(
49
- // validationProperties: UIPropertyDecoratorDefinition[],
50
- // validationsByType: ValidationsByKey
51
- // ): ValidationsByKey {
52
- // const parseValueByKey = function (key, value, prop) {
53
- // if (!value) return value;
54
- //
55
- // switch (key) {
56
- // case ValidationKeys.PATTERN:
57
- // const regexp = new RegExp(`^/(.+)/[gimuy]*$`, "g");
58
- // const match = regexp.exec(value);
59
- // return match ? match[1] : match;
60
- // case ValidationKeys.MIN:
61
- // case ValidationKeys.MAX:
62
- // if (prop in validationsByType)
63
- // return formatByType(Object.keys(validationsByType[prop])[0], value);
64
- // default:
65
- // return value;
66
- // }
67
- // };
68
- // return validationProperties.reduce((accum, vp) => {
69
- // accum[vp.prop] = vp.decorators.reduce((ac, decorator) => {
70
- // if (decorator.key in ValidatableByAttribute) {
71
- // let parsedValue = parseValueByKey(
72
- // decorator.key,
73
- // decorator.props["value"],
74
- // vp.prop
75
- // );
76
- // if (typeof parsedValue === "undefined") parsedValue = "true";
77
- // ac[decorator.key] = parsedValue;
78
- // }
79
- // return ac;
80
- // }, {});
81
- // return accum;
82
- // }, {});
83
- // }
46
+ export function generateUIModelID(model) {
47
+ let id;
48
+ try {
49
+ id = findModelId(model);
50
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
51
+ }
52
+ catch (e) {
53
+ id = Date.now();
54
+ }
55
+ const name = model.constructor.name;
56
+ return `${name}-${id}`;
57
+ }
84
58
 
85
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBUyxFQUFFLEtBQVU7SUFDaEQsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssTUFBTSxDQUFDLElBQUk7WUFDZCxPQUFPLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN0RDtZQUNFLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFzQjtJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUVsQyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFN0IsTUFBTSxhQUFhLEdBQTJCO1FBQzVDLEdBQUcsRUFBRSxPQUFPO1FBQ1osR0FBRyxFQUFFLE1BQU07UUFDWCxHQUFHLEVBQUUsTUFBTTtLQUNaLENBQUM7SUFDRixPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzFDLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWE7SUFDdEMsTUFBTSxhQUFhLEdBQTJCO1FBQzVDLE9BQU8sRUFBRSxHQUFHO1FBQ1osTUFBTSxFQUFFLEdBQUc7UUFDWCxNQUFNLEVBQUUsR0FBRztLQUNaLENBQUM7SUFFRixPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDcEQsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELEVBQUU7QUFDRixFQUFFO0FBQ0YsOERBQThEO0FBQzlELDJEQUEyRDtBQUMzRCx3Q0FBd0M7QUFDeEMsd0JBQXdCO0FBQ3hCLDBEQUEwRDtBQUMxRCxnQ0FBZ0M7QUFDaEMsRUFBRTtBQUNGLHFCQUFxQjtBQUNyQixxQ0FBcUM7QUFDckMsOERBQThEO0FBQzlELDRDQUE0QztBQUM1QywyQ0FBMkM7QUFDM0MsaUNBQWlDO0FBQ2pDLGlDQUFpQztBQUNqQyx5Q0FBeUM7QUFDekMsaUZBQWlGO0FBQ2pGLGlCQUFpQjtBQUNqQix3QkFBd0I7QUFDeEIsUUFBUTtBQUNSLE9BQU87QUFDUCx3REFBd0Q7QUFDeEQsaUVBQWlFO0FBQ2pFLHVEQUF1RDtBQUN2RCw2Q0FBNkM7QUFDN0MsMkJBQTJCO0FBQzNCLHNDQUFzQztBQUN0QyxvQkFBb0I7QUFDcEIsYUFBYTtBQUNiLHdFQUF3RTtBQUN4RSwyQ0FBMkM7QUFDM0MsVUFBVTtBQUNWLG1CQUFtQjtBQUNuQixjQUFjO0FBQ2Qsb0JBQW9CO0FBQ3BCLFlBQVk7QUFDWixJQUFJIiwiZmlsZSI6InVpL3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEhUTUw1RGF0ZUZvcm1hdCwgVUlLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGZ1bmN0aW9uIGZvcm1hdEJ5VHlwZVxuICpcbiAqIEBtZW1iZXJPZiB1aS1kZWNvcmF0b3JzLXdlYi51aVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QnlUeXBlKHR5cGU6IGFueSwgdmFsdWU6IGFueSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFVJS2V5cy5EQVRFOlxuICAgICAgcmV0dXJuIGZvcm1hdERhdGUobmV3IERhdGUodmFsdWUpLCBIVE1MNURhdGVGb3JtYXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVG9OdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmICFpc05hTih2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpO1xuICBpZiAoIWlzTmFOKHBhcnNlZCkpIHJldHVybiBwYXJzZWQ7XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRhZ3NUb1JlcGxhY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgXCImXCI6IFwiJmFtcDtcIixcbiAgICBcIjxcIjogXCImbHQ7XCIsXG4gICAgXCI+XCI6IFwiJmd0O1wiLFxuICB9O1xuICByZXR1cm4gYCR7dmFsdWV9YC5yZXBsYWNlKC9bJjw+XS9nLCAodGFnKSA9PiB7XG4gICAgcmV0dXJuIHRhZ3NUb1JlcGxhY2VbdGFnXSB8fCB0YWc7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJ0SHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gIGNvbnN0IHRhZ3NUb1JlcGxhY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgXCImYW1wO1wiOiBcIiZcIixcbiAgICBcIiZsdDtcIjogXCI8XCIsXG4gICAgXCImZ3Q7XCI6IFwiPlwiLFxuICB9O1xuXG4gIHJldHVybiBgJHt2YWx1ZX1gLnJlcGxhY2UoLyZsdDt8Jmd0O3wmYW1wOy9nLCAodGFnKSA9PiB7XG4gICAgcmV0dXJuIHRhZ3NUb1JlcGxhY2VbdGFnXSB8fCB0YWc7XG4gIH0pO1xufVxuXG4vL1xuLy9cbi8vIGV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0aW9uc0J5QXR0cmlidXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4vLyAgIHZhbGlkYXRpb25Qcm9wZXJ0aWVzOiBVSVByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbltdLFxuLy8gICB2YWxpZGF0aW9uc0J5VHlwZTogVmFsaWRhdGlvbnNCeUtleVxuLy8gKTogVmFsaWRhdGlvbnNCeUtleSB7XG4vLyAgIGNvbnN0IHBhcnNlVmFsdWVCeUtleSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBwcm9wKSB7XG4vLyAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuLy9cbi8vICAgICBzd2l0Y2ggKGtleSkge1xuLy8gICAgICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5QQVRURVJOOlxuLy8gICAgICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeLyguKykvW2dpbXV5XSokYCwgXCJnXCIpO1xuLy8gICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4cC5leGVjKHZhbHVlKTtcbi8vICAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBtYXRjaDtcbi8vICAgICAgIGNhc2UgVmFsaWRhdGlvbktleXMuTUlOOlxuLy8gICAgICAgY2FzZSBWYWxpZGF0aW9uS2V5cy5NQVg6XG4vLyAgICAgICAgIGlmIChwcm9wIGluIHZhbGlkYXRpb25zQnlUeXBlKVxuLy8gICAgICAgICAgIHJldHVybiBmb3JtYXRCeVR5cGUoT2JqZWN0LmtleXModmFsaWRhdGlvbnNCeVR5cGVbcHJvcF0pWzBdLCB2YWx1ZSk7XG4vLyAgICAgICBkZWZhdWx0OlxuLy8gICAgICAgICByZXR1cm4gdmFsdWU7XG4vLyAgICAgfVxuLy8gICB9O1xuLy8gICByZXR1cm4gdmFsaWRhdGlvblByb3BlcnRpZXMucmVkdWNlKChhY2N1bSwgdnApID0+IHtcbi8vICAgICBhY2N1bVt2cC5wcm9wXSA9IHZwLmRlY29yYXRvcnMucmVkdWNlKChhYywgZGVjb3JhdG9yKSA9PiB7XG4vLyAgICAgICBpZiAoZGVjb3JhdG9yLmtleSBpbiBWYWxpZGF0YWJsZUJ5QXR0cmlidXRlKSB7XG4vLyAgICAgICAgIGxldCBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsdWVCeUtleShcbi8vICAgICAgICAgICBkZWNvcmF0b3Iua2V5LFxuLy8gICAgICAgICAgIGRlY29yYXRvci5wcm9wc1tcInZhbHVlXCJdLFxuLy8gICAgICAgICAgIHZwLnByb3Bcbi8vICAgICAgICAgKTtcbi8vICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZWRWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgcGFyc2VkVmFsdWUgPSBcInRydWVcIjtcbi8vICAgICAgICAgYWNbZGVjb3JhdG9yLmtleV0gPSBwYXJzZWRWYWx1ZTtcbi8vICAgICAgIH1cbi8vICAgICAgIHJldHVybiBhYztcbi8vICAgICB9LCB7fSk7XG4vLyAgICAgcmV0dXJuIGFjY3VtO1xuLy8gICB9LCB7fSk7XG4vLyB9XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFTLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXREOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixJQUFTLEVBQ1QsS0FBVSxFQUNWLEdBQUcsSUFBZTtJQUVsQixJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQVksSUFBSSxDQUFDLEtBQUssRUFBYSxJQUFJLGVBQWUsQ0FBQztRQUNuRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFzQjtJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUVsQyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFN0IsTUFBTSxhQUFhLEdBQTJCO1FBQzVDLEdBQUcsRUFBRSxPQUFPO1FBQ1osR0FBRyxFQUFFLE1BQU07UUFDWCxHQUFHLEVBQUUsTUFBTTtLQUNaLENBQUM7SUFDRixPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzFDLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWE7SUFDdEMsTUFBTSxhQUFhLEdBQTJCO1FBQzVDLE9BQU8sRUFBRSxHQUFHO1FBQ1osTUFBTSxFQUFFLEdBQUc7UUFDWCxNQUFNLEVBQUUsR0FBRztLQUNaLENBQUM7SUFFRixPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDcEQsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBa0IsS0FBUTtJQUN6RCxJQUFJLEVBQW1CLENBQUM7SUFDeEIsSUFBSSxDQUFDO1FBQ0gsRUFBRSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4Qiw2REFBNkQ7SUFDL0QsQ0FBQztJQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7UUFDcEIsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDcEMsT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN6QixDQUFDIiwiZmlsZSI6InVpL3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBIVE1MNURhdGVGb3JtYXQsIFVJS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmluZE1vZGVsSWQgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZnVuY3Rpb24gZm9ybWF0QnlUeXBlXG4gKlxuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnMtd2ViLnVpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeVR5cGUoXG4gIHR5cGU6IGFueSxcbiAgdmFsdWU6IGFueSxcbiAgLi4uYXJnczogdW5rbm93bltdXG4pOiBzdHJpbmcgfCBudW1iZXIge1xuICBpZiAodHlwZSA9PT0gVUlLZXlzLkRBVEUpIHtcbiAgICBjb25zdCBmb3JtYXQ6IHN0cmluZyA9IChhcmdzLnNoaWZ0KCkgYXMgc3RyaW5nKSB8fCBIVE1MNURhdGVGb3JtYXQ7XG4gICAgcmV0dXJuIGZvcm1hdERhdGUobmV3IERhdGUodmFsdWUpLCBmb3JtYXQpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVG9OdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmICFpc05hTih2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpO1xuICBpZiAoIWlzTmFOKHBhcnNlZCkpIHJldHVybiBwYXJzZWQ7XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRhZ3NUb1JlcGxhY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgXCImXCI6IFwiJmFtcDtcIixcbiAgICBcIjxcIjogXCImbHQ7XCIsXG4gICAgXCI+XCI6IFwiJmd0O1wiLFxuICB9O1xuICByZXR1cm4gYCR7dmFsdWV9YC5yZXBsYWNlKC9bJjw+XS9nLCAodGFnKSA9PiB7XG4gICAgcmV0dXJuIHRhZ3NUb1JlcGxhY2VbdGFnXSB8fCB0YWc7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJ0SHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gIGNvbnN0IHRhZ3NUb1JlcGxhY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgXCImYW1wO1wiOiBcIiZcIixcbiAgICBcIiZsdDtcIjogXCI8XCIsXG4gICAgXCImZ3Q7XCI6IFwiPlwiLFxuICB9O1xuXG4gIHJldHVybiBgJHt2YWx1ZX1gLnJlcGxhY2UoLyZsdDt8Jmd0O3wmYW1wOy9nLCAodGFnKSA9PiB7XG4gICAgcmV0dXJuIHRhZ3NUb1JlcGxhY2VbdGFnXSB8fCB0YWc7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVVSU1vZGVsSUQ8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICBsZXQgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgdHJ5IHtcbiAgICBpZCA9IGZpbmRNb2RlbElkKG1vZGVsKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICBpZCA9IERhdGUubm93KCk7XG4gIH1cbiAgY29uc3QgbmFtZSA9IG1vZGVsLmNvbnN0cnVjdG9yLm5hbWU7XG4gIHJldHVybiBgJHtuYW1lfS0ke2lkfWA7XG59XG4iXX0=
package/lib/index.cjs CHANGED
@@ -26,6 +26,4 @@ __exportStar(require("./ui/index.cjs"), exports);
26
26
  * @const VERSION
27
27
  * @memberOf module:ui-decorators
28
28
  */
29
- exports.VERSION = "0.4.1";
30
-
31
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsMENBQXdCO0FBQ3hCLHVDQUFxQjtBQUVyQjs7Ozs7R0FLRztBQUNVLFFBQUEsT0FBTyxHQUFHLE9BQU8sQ0FBQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSB1aS1kZWNvcmF0b3JzXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3VpXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgc3RvcmVzIHRoZSBjdXJyZW50IHBhY2thZ2UgdmVyc2lvblxuICogQGRlc2NyaXB0aW9uIHRoaXMgaXMgaG93IHlvdSBzaG91bGQgZG9jdW1lbnQgYSBjb25zdGFudFxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMC40LjFcIjtcbiJdfQ==
29
+ exports.VERSION = "0.4.3";
package/lib/index.d.ts CHANGED
@@ -9,4 +9,4 @@ export * from "./ui";
9
9
  * @const VERSION
10
10
  * @memberOf module:ui-decorators
11
11
  */
12
- export declare const VERSION = "0.4.1";
12
+ export declare const VERSION = "0.4.3";
@@ -1,4 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
-
4
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9SZW5kZXJhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoibW9kZWwvUmVuZGVyYWJsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyYWJsZSB7XG4gIHJlbmRlcjxSPiguLi5hcmdzOiBhbnlbXSk6IFI7XG59XG4iXX0=
File without changes
@@ -41,5 +41,3 @@ function uimodel(tag, props) {
41
41
  function renderedBy(engine) {
42
42
  return (0, reflection_1.apply)((0, reflection_1.metadata)(Rendering_1.RenderingEngine.key(constants_1.UIKeys.RENDERED_BY), engine));
43
43
  }
44
-
45
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNEJBLDBCQVNDO0FBRUQsZ0NBRUM7QUF6Q0QsK0NBQXlDO0FBQ3pDLHFEQUF1RDtBQUN2RCwrQ0FBa0Q7QUFHbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFnQixPQUFPLENBQUMsR0FBWSxFQUFFLEtBQTJCO0lBQy9ELDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBb0I7WUFDNUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSTtZQUN6QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7UUFDRixPQUFPLElBQUEscUJBQVEsRUFBQywyQkFBZSxDQUFDLEdBQUcsQ0FBQyxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUMsTUFBYztJQUN2QyxPQUFPLElBQUEsa0JBQUssRUFBQyxJQUFBLHFCQUFRLEVBQUMsMkJBQWUsQ0FBQyxHQUFHLENBQUMsa0JBQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJmaWxlIjoibW9kZWwvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVJS2V5cyB9IGZyb20gXCIuLi91aS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGFwcGx5LCBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgUmVuZGVyaW5nRW5naW5lIH0gZnJvbSBcIi4uL3VpL1JlbmRlcmluZ1wiO1xuaW1wb3J0IHsgVUlNb2RlbE1ldGFkYXRhIH0gZnJvbSBcIi4uL3VpL3R5cGVzXCI7XG5cbi8qKlxuICogVGFncyB0aGUgbW9kZWwgYXMgYSB1aW1vZGVsLCBnaXZpbmcgaXQgdGhlICdyZW5kZXInIG1ldGhvZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGFnXSBvcHRpb25hbCBwYXJhbS4gd2lsbCByZW5kZXIgdGhlIHByb3ZpZGVkIGVsbWVudCB3cmFwcGluZyB0aGUgYXR0cmlidXRlIHVpZWxlbWVudHNcbiAqIEBwYXJhbSB7e319IFtwcm9wc10gb3B0aW9uYWwgcGFyYW0uIEF0dHJpYnV0ZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSB0YWcgZWxlbWVudFxuICogQHBhcmFtIHtmdW5jdGlvbihhbnkpOiB2b2lkfSBbaW5zdGFuY2VDYWxsYmFja10gb3B0aW9uYWwgY2FsbGJhY2sgcmV0dXJuaW5nIHRoZSBpbnN0YW5jZSBhZnRlciBjcmVhdGlvbiBmb3IgYWRkaXRpb25hbCBsb2dpY1xuICpcbiAqIEBkZWNvcmF0b3IgdWltb2RlbFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgU3lzdGVtXG4gKiAgIHBhcnRpY2lwYW50IHVpbW9kZWxcbiAqICAgcGFydGljaXBhbnQgY29uc3RydWN0b3JcbiAqICAgcGFydGljaXBhbnQgaW5zdGFuY2VcbiAqICAgU3lzdGVtLT4+dWltb2RlbDpkbyhjb25zdHJ1Y3RvcilcbiAqICAgdWltb2RlbC0+PmNvbnN0cnVjdG9yOiBFeGVjdXRlcyB0aGUgY29uc3RydWN0b3JcbiAqICAgY29uc3RydWN0b3ItPj51aW1vZGVsOiByZXR1cm5zIGluc3RhbmNlXG4gKiAgIHVpbW9kZWwtPj5pbnN0YW5jZTogYWRkcyB0aGUgcmVuZGVyIG1ldGhvZFxuICogICB1aW1vZGVsLT4+U3lzdGVtOiByZXR1cm5zIFVJTW9kZWwgaW5zdGFuY2VcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdWltb2RlbCh0YWc/OiBzdHJpbmcsIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJldHVybiAob3JpZ2luYWw6IGFueSwgcHJvcGVydHlLZXk/OiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXRhOiBVSU1vZGVsTWV0YWRhdGEgPSB7XG4gICAgICB0YWc6IHRhZyB8fCBvcmlnaW5hbC5uYW1lLFxuICAgICAgcHJvcHM6IHByb3BzLFxuICAgIH07XG4gICAgcmV0dXJuIG1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTU9ERUwpLCBtZXRhKShvcmlnaW5hbCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJlZEJ5KGVuZ2luZTogc3RyaW5nKSB7XG4gIHJldHVybiBhcHBseShtZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5SRU5ERVJFRF9CWSksIGVuZ2luZSkpO1xufVxuIl19
File without changes
@@ -22,5 +22,3 @@ require("./model.cjs");
22
22
  __exportStar(require("./decorators.cjs"), exports);
23
23
  __exportStar(require("./overrides.cjs"), exports);
24
24
  __exportStar(require("./Renderable.cjs"), exports);
25
-
26
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsbUJBQWlCO0FBRWpCLCtDQUE2QjtBQUM3Qiw4Q0FBNEI7QUFDNUIsK0NBQTZCIiwiZmlsZSI6Im1vZGVsL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbmFtZXNwYWNlIG1vZGVsXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9yc1xuICovXG5cbmltcG9ydCBcIi4vbW9kZWxcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3ZlcnJpZGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZW5kZXJhYmxlXCI7XG4iXX0=
File without changes
@@ -1,4 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
-
4
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6Im1vZGVsL21vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBCdWlsZGVyUmVnaXN0cnksXG4gIENvbXBhcmFibGUsXG4gIENvbnN0cnVjdG9yLFxuICBIYXNoYWJsZSxcbiAgTW9kZWxBcmcsXG4gIE1vZGVsQnVpbGRlckZ1bmN0aW9uLFxuICBNb2RlbENvbnN0cnVjdG9yLFxuICBTZXJpYWxpemFibGUsXG4gIFZhbGlkYXRhYmxlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZW5kZXJhYmxlIH0gZnJvbSBcIi4vUmVuZGVyYWJsZVwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBoYWNreSBvdmVycmlkZVxuICBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIE1vZGVsXG4gICAgaW1wbGVtZW50c1xuICAgICAgVmFsaWRhdGFibGUsXG4gICAgICBTZXJpYWxpemFibGUsXG4gICAgICBIYXNoYWJsZSxcbiAgICAgIENvbXBhcmFibGU8TW9kZWw+LFxuICAgICAgUmVuZGVyYWJsZVxuICB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPE1vZGVsPik7XG5cbiAgICBoYXNFcnJvcnMoLi4uZXhjbHVzaW9uczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbiAgICBoYXNFcnJvcnMoXG4gICAgICBwcmV2aW91c1ZlcnNpb24/OiBNb2RlbCB8IGFueSxcbiAgICAgIC4uLmV4Y2x1c2lvbnM6IGFueVtdXG4gICAgKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBDb21wYXJlIG9iamVjdCBlcXVhbGl0eSByZWN1cnNpdmVseVxuICAgICAqIEBwYXJhbSB7YW55fSBvYmogb2JqZWN0IHRvIGNvbXBhcmUgdG9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4Y2VwdGlvbnNdIHByb3BlcnR5IG5hbWVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvbXBhcmlzb25cbiAgICAgKi9cbiAgICBlcXVhbHMob2JqOiBhbnksIC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIG1vZGVsIGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IGRlZmluZWQge0BsaW5rIFNlcmlhbGl6ZXJ9XG4gICAgICovXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBPdmVycmlkZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGpzJ3MgJ3RvU3RyaW5nKCknIHdoaWNoIHN1Y2tzLi4uXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IERlZmluZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBvYmplY3QgaGFzaC4gUmVsaWVzIG9uIGEgdmVyeSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBKYXZhJ3Mgc3RyaW5nIGhhc2g7XG4gICAgICovXG4gICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgRGVzZXJpYWxpemVzIGEgTW9kZWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXJnc1xuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlscyB0byBwYXJzZSB0aGUgc3RyaW5nLCBvciBpZiBpdCBmYWlscyB0byBidWlsZCB0aGUgbW9kZWxcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoc3RyOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICAgICAqIEBkZXNjcmlwdGlvbiBJdGVyYXRlcyBhbGwgY29tbW9uIHByb3BlcnRpZXMgb2Ygb2JqIChpZiBleGlzdGluZykgYW5kIHNlbGYsIGFuZCBjb3BpZXMgdGhlbSBvbnRvIHNlbGZcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgICAqIEBwYXJhbSB7VCB8IFJlY29yZDxzdHJpbmcsIGFueT59IFtvYmpdXG4gICAgICpcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbU9iamVjdDxUIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgc2VsZjogVCxcbiAgICAgIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgKTogVDtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXBvcHVsYXRlcyB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgb25lcyBmcm9tIHRoZSBuZXcgTW9kZWwgT2JqZWN0XG4gICAgICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZi5cbiAgICAgKiBJcyBhd2FyZSBvZiBuZXN0ZWQgTW9kZWwgT2JqZWN0cyBhbmQgcmVidWlsZHMgdGhlbSBhbHNvLlxuICAgICAqIFdoZW4gTGlzdCBwcm9wZXJ0aWVzIGFyZSBkZWNvcmF0ZWQgd2l0aCB7QGxpbmsgbGlzdH0sIHRoZXkgbGlzdCBpdGVtcyB3aWxsIGFsc28gYmUgcmVidWlsdFxuICAgICAqXG4gICAgICogQHBhcmFtIHtUfSBzZWxmXG4gICAgICogQHBhcmFtIHtUIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW29ial1cbiAgICAgKlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tTW9kZWw8VCBleHRlbmRzIE1vZGVsPihcbiAgICAgIHNlbGY6IFQsXG4gICAgICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICk6IFQ7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgR2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn1cbiAgICAgKiBAcGFyYW0ge01vZGVsQnVpbGRlckZ1bmN0aW9ufSBbYnVpbGRlcl1cbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0QnVpbGRlcihidWlsZGVyPzogTW9kZWxCdWlsZGVyRnVuY3Rpb24pOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgY3VycmVudCBnbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRCdWlsZGVyKCk6IE1vZGVsQnVpbGRlckZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQge0BsaW5rIE1vZGVsUmVnaXN0cnlNYW5hZ2VyfVxuICAgICAqXG4gICAgICogQHJldHVybiBNb2RlbFJlZ2lzdHJ5LCBkZWZhdWx0cyB0byB7QGxpbmsgTW9kZWxSZWdpc3RyeU1hbmFnZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpbmdNb2RlbFJlZ2lzdHJ5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0J1aWxkZXJSZWdpc3RyeX0gbW9kZWxSZWdpc3RyeSB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIFJlZ2lzdHJ5XG4gICAgICovXG4gICAgc3RhdGljIHNldFJlZ2lzdHJ5KG1vZGVsUmVnaXN0cnk6IEJ1aWxkZXJSZWdpc3RyeTxhbnk+KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSByZWdpc3RlciBuZXcgTW9kZWxzXG4gICAgICogQHBhcmFtIHthbnl9IGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB3aGVuIG5vdCBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSB1c2VkXG4gICAgICpcbiAgICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVnaXN0ZXI8VCBleHRlbmRzIE1vZGVsPihcbiAgICAgIGNvbnN0cnVjdG9yOiBNb2RlbENvbnN0cnVjdG9yPFQ+LFxuICAgICAgbmFtZT86IHN0cmluZ1xuICAgICk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgR2V0cyBhIHJlZ2lzdGVyZWQgTW9kZWwge0BsaW5rIE1vZGVsQ29uc3RydWN0b3J9XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKlxuICAgICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihuYW1lOiBzdHJpbmcpOiBNb2RlbENvbnN0cnVjdG9yPFQ+IHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjbGF6el0gd2hlbiBwcm92aWRlZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIG1hdGNoaW5nIGNvbnN0cnVjdG9yXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIEVycm9yIElmIGNsYXp6IGlzIG5vdCBmb3VuZCwgb3Igb2JqIGlzIG5vdCBhIHtAbGluayBNb2RlbH0gbWVhbmluZyBpdCBoYXMgbm8ge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICAgKi9cbiAgICBzdGF0aWMgYnVpbGQ8VCBleHRlbmRzIE1vZGVsPihvYmo/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjbGF6ej86IHN0cmluZyk6IFQ7XG4gICAgc3RhdGljIGdldE1ldGFkYXRhPFYgZXh0ZW5kcyBNb2RlbD4obW9kZWw6IFYpOiBhbnk7XG4gICAgc3RhdGljIGdldEF0dHJpYnV0ZXM8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogQ29uc3RydWN0b3I8Vj4gfCBWKTogc3RyaW5nW107XG4gICAgc3RhdGljIGVxdWFsczxWIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgb2JqMTogVixcbiAgICAgIG9iajI6IFYsXG4gICAgICAuLi5leGNlcHRpb25zOiBhbnlbXVxuICAgICk6IGJvb2xlYW47XG4gICAgc3RhdGljIGhhc0Vycm9yczxWIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbW9kZWw6IFYsXG4gICAgICAuLi5leGNlcHRpb25zOiBhbnlbXVxuICAgICk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuICAgIHN0YXRpYyBzZXJpYWxpemU8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogVik6IGFueTtcbiAgICBzdGF0aWMgaGFzaDxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBWKTogYW55O1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUga2V5IHRvIHN0b3JlIGFzIE1ldGFkYXRhIHVuZGVyIFJlZmxlY3Rpb25zXG4gICAgICogQGRlc2NyaXB0aW9uIGNvbmNhdGVuYXRlcyB7QGxpbmsgTW9kZWxLZXlzI1JFRkxFQ1R9IHdpdGggdGhlIHByb3ZpZGVkIGtleVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKi9cbiAgICBzdGF0aWMga2V5KHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgIHJlbmRlcjxSPiguLi5hcmdzOiBhbnlbXSk6IFI7XG4gIH1cbn1cbiJdfQ==
File without changes
@@ -5,5 +5,3 @@ const Rendering_1 = require("../ui/Rendering.cjs");
5
5
  decorator_validation_1.Model.prototype.render = function (...args) {
6
6
  return Rendering_1.RenderingEngine.render(this, ...args);
7
7
  };
8
-
9
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9vdmVycmlkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5RUFBdUQ7QUFDdkQsK0NBQWtEO0FBRWxELDRCQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFvQyxHQUFHLElBQVc7SUFDekUsT0FBTywyQkFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMiLCJmaWxlIjoibW9kZWwvb3ZlcnJpZGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tIFwiLi4vdWkvUmVuZGVyaW5nXCI7XG5cbk1vZGVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiA8TSBleHRlbmRzIE1vZGVsPih0aGlzOiBNLCAuLi5hcmdzOiBhbnlbXSkge1xuICByZXR1cm4gUmVuZGVyaW5nRW5naW5lLnJlbmRlcih0aGlzLCAuLi5hcmdzKTtcbn07XG4iXX0=
File without changes
@@ -6,14 +6,44 @@ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
6
6
  const constants_1 = require("./constants.cjs");
7
7
  const errors_1 = require("./errors.cjs");
8
8
  const reflection_1 = require("@decaf-ts/reflection");
9
+ const utils_1 = require("./utils.cjs");
10
+ /**
11
+ * @description Abstract class for rendering UI components based on model metadata.
12
+ * @summary The RenderingEngine class provides a framework for converting model metadata into UI field definitions.
13
+ * It handles the translation of model properties to UI elements, applies validation rules, and manages different rendering flavors.
14
+ * This class is designed to be extended by specific rendering implementations.
15
+ *
16
+ * @template T The type of the rendering result, defaults to void
17
+ * @template R The type of the field definition, defaults to FieldDefinition<T>
18
+ *
19
+ * @param {string} flavour - The flavor of the rendering engine.
20
+ *
21
+ * @class RenderingEngine
22
+ */
9
23
  class RenderingEngine {
24
+ /**
25
+ * @description Cache for storing rendering engine instances or constructors.
26
+ * @private
27
+ * @static
28
+ */
10
29
  static { this.cache = {}; }
11
30
  constructor(flavour) {
12
31
  this.flavour = flavour;
32
+ /**
33
+ * Flag indicating whether the rendering engine has been initialized.
34
+ */
13
35
  this.initialized = false;
14
36
  RenderingEngine.register(this);
15
37
  console.log(`decaf's ${flavour} rendering engine loaded`);
16
38
  }
39
+ /**
40
+ * @description Translates between model types and HTML input types.
41
+ * @summary Converts model data types to appropriate HTML input types and vice versa.
42
+ *
43
+ * @param {string} key - The key to translate.
44
+ * @param {boolean} [toView=true] - Direction of translation (true for model to view, false for view to model).
45
+ * @returns {string} The translated type.
46
+ */
17
47
  translate(key, toView = true) {
18
48
  if (toView) {
19
49
  switch (key) {
@@ -49,9 +79,91 @@ class RenderingEngine {
49
79
  }
50
80
  return key;
51
81
  }
52
- render(model, globalProps = {},
53
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
54
- ...args) {
82
+ /**
83
+ * @description Checks if a type is validatable by its nature.
84
+ * @summary Determines if a given UI key represents a type that is inherently validatable.
85
+ *
86
+ * @param {string} key - The UI key to check.
87
+ * @returns {boolean} True if the type is validatable, false otherwise.
88
+ */
89
+ isValidatableByType(key) {
90
+ return [constants_1.UIKeys.EMAIL, constants_1.UIKeys.URL, constants_1.UIKeys.DATE, constants_1.UIKeys.PASSWORD].includes(key);
91
+ }
92
+ /**
93
+ * @description Checks if a type is validatable by attribute.
94
+ * @summary Determines if a given UI key represents a validation that can be applied as an attribute.
95
+ *
96
+ * @param {string} key - The UI key to check.
97
+ * @returns {boolean} True if the type is validatable by attribute, false otherwise.
98
+ */
99
+ isValidatableByAttribute(key) {
100
+ return [
101
+ constants_1.UIKeys.REQUIRED,
102
+ constants_1.UIKeys.MIN,
103
+ constants_1.UIKeys.MAX,
104
+ constants_1.UIKeys.STEP,
105
+ constants_1.UIKeys.MIN_LENGTH,
106
+ constants_1.UIKeys.MAX_LENGTH,
107
+ constants_1.UIKeys.PATTERN,
108
+ ].includes(key);
109
+ }
110
+ /**
111
+ * @description Converts validation metadata to an attribute value.
112
+ * @summary Transforms validation metadata into a value suitable for use as an HTML attribute.
113
+ *
114
+ * @param {string} key - The validation key.
115
+ * @param {ValidationMetadata} value - The validation metadata.
116
+ * @returns {string | number | boolean} The converted attribute value.
117
+ */
118
+ toAttributeValue(key, value) {
119
+ switch (key) {
120
+ case constants_1.UIKeys.MIN:
121
+ case constants_1.UIKeys.MAX:
122
+ case constants_1.UIKeys.MIN_LENGTH:
123
+ case constants_1.UIKeys.MAX_LENGTH:
124
+ case constants_1.UIKeys.STEP:
125
+ return value.value;
126
+ case constants_1.UIKeys.EMAIL:
127
+ case constants_1.UIKeys.URL:
128
+ case constants_1.UIKeys.PATTERN:
129
+ case constants_1.UIKeys.PASSWORD:
130
+ return value.pattern;
131
+ default:
132
+ return true;
133
+ }
134
+ }
135
+ /**
136
+ * @description Converts a model to a field definition.
137
+ * @summary Processes a model instance, extracting UI-related metadata and validation rules to create a field definition.
138
+ *
139
+ * @template M Type extending Model
140
+ * @template T Type referencing the specific Rendering engine field properties/inputs
141
+ * @param {M} model - The model instance to convert.
142
+ * @param {Record<string, unknown>} [globalProps={}] - Global properties to apply to all child elements.
143
+ * @param {boolean} [generateId=true] - Flag indicating whether to populate the rendererId property.
144
+ * @returns {FieldDefinition<T>} A field definition object representing the UI structure of the model.
145
+ * @throws {RenderingError} If no UI definitions are set for the model or if there are invalid decorators.
146
+ *
147
+ * @mermaid
148
+ * sequenceDiagram
149
+ * participant C as Client
150
+ * participant RE as RenderingEngine
151
+ * participant R as Reflection
152
+ * participant M as Model
153
+ * C->>RE: toFieldDefinition(model, globalProps)
154
+ * RE->>R: getMetadata(UIKeys.UIMODEL, model.constructor)
155
+ * R-->>RE: UIModelMetadata
156
+ * RE->>R: getAllPropertyDecorators(model, UIKeys.REFLECT)
157
+ * R-->>RE: Record<string, DecoratorMetadata[]>
158
+ * RE->>R: getAllPropertyDecorators(model, ValidationKeys.REFLECT)
159
+ * R-->>RE: Record<string, DecoratorMetadata<ValidationMetadata>[]>
160
+ * loop For each property
161
+ * RE->>RE: Process UI decorators
162
+ * RE->>RE: Apply validation rules
163
+ * end
164
+ * RE-->>C: FieldDefinition<T>
165
+ */
166
+ toFieldDefinition(model, globalProps = {}, generateId = true) {
55
167
  const classDecorator = Reflect.getMetadata(RenderingEngine.key(constants_1.UIKeys.UIMODEL), model.constructor) ||
56
168
  Reflect.getMetadata(RenderingEngine.key(constants_1.UIKeys.UIMODEL), decorator_validation_1.Model.get(model.constructor.name));
57
169
  if (!classDecorator)
@@ -62,12 +174,6 @@ class RenderingEngine {
62
174
  const childProps = {};
63
175
  if (uiDecorators) {
64
176
  const validationDecorators = reflection_1.Reflection.getAllPropertyDecorators(model, decorator_validation_1.ValidationKeys.REFLECT);
65
- // // eslint-disable-next-line @typescript-eslint/no-unused-vars
66
- // const dbDecorators: Record<string, DecoratorMetadata[]> =
67
- // Reflection.getAllPropertyDecorators(model, DBKeys.REFLECT) as Record<
68
- // string,
69
- // DecoratorMetadata[]
70
- // >;
71
177
  for (const key in uiDecorators) {
72
178
  const decs = uiDecorators[key];
73
179
  if (decs.length !== 2)
@@ -86,19 +192,28 @@ class RenderingEngine {
86
192
  props: Object.assign({}, dec.props.props, globalProps),
87
193
  };
88
194
  const validationDecs = validationDecorators[key];
89
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
90
195
  const typeDec = validationDecs.shift();
91
196
  for (const dec of validationDecs) {
92
- if (dec.key in constants_1.ValidatableByAttribute) {
93
- childProps[this.translate(key)] = dec.props;
197
+ if (this.isValidatableByAttribute(dec.key)) {
198
+ childDefinition.props[this.translate(dec.key)] =
199
+ this.toAttributeValue(dec.key, dec.props);
94
200
  continue;
95
201
  }
96
- if (dec.key in constants_1.ValidatableByType) {
97
- childProps[constants_1.UIKeys.TYPE] = dec.props;
202
+ if (this.isValidatableByType(dec.key)) {
203
+ if (dec.key === constants_1.HTML5InputTypes.DATE) {
204
+ childDefinition.props[constants_1.UIKeys.FORMAT] =
205
+ dec.props.format || constants_1.HTML5DateFormat;
206
+ }
207
+ childDefinition.props[constants_1.UIKeys.TYPE] = dec.key;
98
208
  continue;
99
209
  }
100
210
  console.log(dec);
101
211
  }
212
+ if (!childDefinition.props[constants_1.UIKeys.TYPE]) {
213
+ const basicType = typeDec.props.name;
214
+ childDefinition.props[constants_1.UIKeys.TYPE] = this.translate(basicType.toLowerCase(), true);
215
+ }
216
+ childDefinition.props.value = (0, utils_1.formatByType)(childDefinition.props[constants_1.UIKeys.TYPE], model[key], childDefinition.props[constants_1.UIKeys.FORMAT]);
102
217
  children.push(childDefinition);
103
218
  break;
104
219
  }
@@ -107,18 +222,42 @@ class RenderingEngine {
107
222
  }
108
223
  }
109
224
  }
110
- return {
225
+ const result = {
111
226
  tag: tag,
112
227
  props: Object.assign({}, props, globalProps),
113
228
  children: children,
114
229
  };
230
+ if (generateId) {
231
+ result.rendererId = (0, utils_1.generateUIModelID)(model);
232
+ }
233
+ return result;
115
234
  }
235
+ /**
236
+ * @description Registers a rendering engine instance.
237
+ * @summary Adds a rendering engine to the static cache and sets it as the current engine.
238
+ *
239
+ * @param {RenderingEngine<unknown, unknown>} engine - The rendering engine to register.
240
+ * @throws {InternalError} If an engine with the same flavor already exists.
241
+ *
242
+ * @static
243
+ */
116
244
  static register(engine) {
117
245
  if (engine.flavour in this.cache)
118
246
  throw new db_decorators_1.InternalError(`Rendering engine under ${engine.flavour} already exists`);
119
247
  this.cache[engine.flavour] = engine;
120
248
  this.current = engine;
121
249
  }
250
+ /**
251
+ * @description Retrieves or initializes a rendering engine.
252
+ * @summary Gets an existing engine instance or creates and initializes a new one if given a constructor.
253
+ *
254
+ * @template O The type of the rendering engine output
255
+ * @param {Constructor<RenderingEngine<O>> | RenderingEngine<O>} obj - The engine instance or constructor.
256
+ * @returns {RenderingEngine<O>} The initialized rendering engine.
257
+ *
258
+ * @private
259
+ * @static
260
+ */
122
261
  static getOrBoot(obj) {
123
262
  if (obj instanceof RenderingEngine)
124
263
  return obj;
@@ -126,6 +265,17 @@ class RenderingEngine {
126
265
  engine.initialize(); // make the booting async. use the initialized flag to control it
127
266
  return engine;
128
267
  }
268
+ /**
269
+ * @description Retrieves a rendering engine by flavor.
270
+ * @summary Gets the current rendering engine or a specific one by flavor.
271
+ *
272
+ * @template O The type of the rendering engine output
273
+ * @param {string} [flavour] - The flavor of the rendering engine to retrieve.
274
+ * @returns {RenderingEngine<O>} The requested rendering engine.
275
+ * @throws {InternalError} If the requested flavor does not exist.
276
+ *
277
+ * @static
278
+ */
129
279
  static get(flavour) {
130
280
  if (!flavour)
131
281
  return this.getOrBoot(this.current);
@@ -133,17 +283,37 @@ class RenderingEngine {
133
283
  throw new db_decorators_1.InternalError(`Rendering engine under ${flavour} does not exist`);
134
284
  return this.getOrBoot(this.cache[flavour]);
135
285
  }
286
+ /**
287
+ * @description Renders a model using the appropriate rendering engine.
288
+ * @summary Determines the correct rendering engine for a model and invokes its render method.
289
+ *
290
+ * @template M Type extending Model
291
+ * @param {M} model - The model to render.
292
+ * @param {...any[]} args - Additional arguments to pass to the render method.
293
+ * @returns {any} The result of the rendering process.
294
+ * @throws {InternalError} If no registered model is found.
295
+ *
296
+ * @static
297
+ */
136
298
  static render(model, ...args) {
137
299
  const constructor = decorator_validation_1.Model.get(model.constructor.name);
138
300
  if (!constructor)
139
301
  throw new db_decorators_1.InternalError("No model registered found");
140
302
  const flavour = Reflect.getMetadata(RenderingEngine.key(constants_1.UIKeys.RENDERED_BY), constructor);
303
+ // @ts-expect-error for the var args type check
141
304
  return RenderingEngine.get(flavour).render(model, ...args);
142
305
  }
306
+ /**
307
+ * @description Generates a metadata key for UI-related properties.
308
+ * @summary Prefixes a given key with the UI reflection prefix.
309
+ *
310
+ * @param {string} key - The key to prefix.
311
+ * @returns {string} The prefixed key.
312
+ *
313
+ * @static
314
+ */
143
315
  static key(key) {
144
316
  return `${constants_1.UIKeys.REFLECT}${key}`;
145
317
  }
146
318
  }
147
319
  exports.RenderingEngine = RenderingEngine;
148
-
149
- //# sourceMappingURL=data:application/json;charset=utf8;base64,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R0FBRyxPQUFPLENBQUMsV0FBVyxDQUNqQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFNLENBQUMsV0FBVyxDQUFDLEVBQ3ZDLFdBQXNDLENBQ3ZDLENBQUM7UUFDRixPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDcEIsT0FBTyxHQUFHLGtCQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ25DLENBQUM7O0FBeE1ILDBDQXlNQyIsImZpbGUiOiJ1aS9SZW5kZXJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgTW9kZWwsXG4gIE1vZGVsQ29uc3RydWN0b3IsXG4gIFJlc2VydmVkTW9kZWxzLFxuICBWYWxpZGF0aW9uS2V5cyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgSFRNTDVJbnB1dFR5cGVzLFxuICBVSUtleXMsXG4gIFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGUsXG4gIFZhbGlkYXRhYmxlQnlUeXBlLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIEZpZWxkRGVmaW5pdGlvbixcbiAgVUlFbGVtZW50TWV0YWRhdGEsXG4gIFVJTW9kZWxNZXRhZGF0YSxcbiAgVUlQcm9wTWV0YWRhdGEsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBSZW5kZXJpbmdFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgUmVmbGVjdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVuZGVyaW5nRW5naW5lPFQgPSB2b2lkPiB7XG4gIHByaXZhdGUgc3RhdGljIGNhY2hlOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIENvbnN0cnVjdG9yPFJlbmRlcmluZ0VuZ2luZTx1bmtub3duPj4gfCBSZW5kZXJpbmdFbmdpbmU8dW5rbm93bj5cbiAgPiA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBjdXJyZW50OlxuICAgIHwgQ29uc3RydWN0b3I8UmVuZGVyaW5nRW5naW5lPHVua25vd24+PlxuICAgIHwgUmVuZGVyaW5nRW5naW5lPHVua25vd24+O1xuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZWFkb25seSBmbGF2b3VyOiBzdHJpbmcpIHtcbiAgICBSZW5kZXJpbmdFbmdpbmUucmVnaXN0ZXIodGhpcyk7XG4gICAgY29uc29sZS5sb2coYGRlY2FmJ3MgJHtmbGF2b3VyfSByZW5kZXJpbmcgZW5naW5lIGxvYWRlZGApO1xuICB9XG5cbiAgYWJzdHJhY3QgaW5pdGlhbGl6ZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG5cbiAgdHJhbnNsYXRlKGtleTogc3RyaW5nLCB0b1ZpZXcgPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAodG9WaWV3KSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFJlc2VydmVkTW9kZWxzLlNUUklORzpcbiAgICAgICAgICByZXR1cm4gSFRNTDVJbnB1dFR5cGVzLlRFWFQ7XG4gICAgICAgIGNhc2UgUmVzZXJ2ZWRNb2RlbHMuTlVNQkVSOlxuICAgICAgICBjYXNlIFJlc2VydmVkTW9kZWxzLkJJR0lOVDpcbiAgICAgICAgICByZXR1cm4gSFRNTDVJbnB1dFR5cGVzLk5VTUJFUjtcbiAgICAgICAgY2FzZSBSZXNlcnZlZE1vZGVscy5CT09MRUFOOlxuICAgICAgICAgIHJldHVybiBIVE1MNUlucHV0VHlwZXMuQ0hFQ0tCT1g7XG4gICAgICAgIGNhc2UgUmVzZXJ2ZWRNb2RlbHMuREFURTpcbiAgICAgICAgICByZXR1cm4gSFRNTDVJbnB1dFR5cGVzLkRBVEU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlRFWFQ6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLkVNQUlMOlxuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5DT0xPUjpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuUEFTU1dPUkQ6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlRFTDpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuVVJMOlxuICAgICAgICAgIHJldHVybiBSZXNlcnZlZE1vZGVscy5TVFJJTkc7XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLk5VTUJFUjpcbiAgICAgICAgICByZXR1cm4gUmVzZXJ2ZWRNb2RlbHMuTlVNQkVSO1xuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5DSEVDS0JPWDpcbiAgICAgICAgICByZXR1cm4gUmVzZXJ2ZWRNb2RlbHMuQk9PTEVBTjtcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuREFURTpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuREFURVRJTUVfTE9DQUw6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlRJTUU6XG4gICAgICAgICAgcmV0dXJuIFJlc2VydmVkTW9kZWxzLkRBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICByZW5kZXI8TSBleHRlbmRzIE1vZGVsPihcbiAgICBtb2RlbDogTSxcbiAgICBnbG9iYWxQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogRmllbGREZWZpbml0aW9uPFQ+IHtcbiAgICBjb25zdCBjbGFzc0RlY29yYXRvcjogVUlNb2RlbE1ldGFkYXRhID1cbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTU9ERUwpLFxuICAgICAgICBtb2RlbC5jb25zdHJ1Y3RvclxuICAgICAgKSB8fFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuVUlNT0RFTCksXG4gICAgICAgIE1vZGVsLmdldChtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lKSBhcyBhbnlcbiAgICAgICk7XG5cbiAgICBpZiAoIWNsYXNzRGVjb3JhdG9yKVxuICAgICAgdGhyb3cgbmV3IFJlbmRlcmluZ0Vycm9yKFxuICAgICAgICBgTm8gdWkgZGVmaW5pdGlvbnMgc2V0IGZvciBtb2RlbCAke21vZGVsLmNvbnN0cnVjdG9yLm5hbWV9LiBEaWQgeW91IHVzZSBAdWltb2RlbD9gXG4gICAgICApO1xuXG4gICAgY29uc3QgeyB0YWcsIHByb3BzIH0gPSBjbGFzc0RlY29yYXRvcjtcblxuICAgIGNvbnN0IHVpRGVjb3JhdG9yczogUmVjb3JkPHN0cmluZywgRGVjb3JhdG9yTWV0YWRhdGFbXT4gPVxuICAgICAgUmVmbGVjdGlvbi5nZXRBbGxQcm9wZXJ0eURlY29yYXRvcnMobW9kZWwsIFVJS2V5cy5SRUZMRUNUKSBhcyBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgRGVjb3JhdG9yTWV0YWRhdGFbXVxuICAgICAgPjtcbiAgICBsZXQgY2hpbGRyZW46IEZpZWxkRGVmaW5pdGlvbjxUPltdIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNoaWxkUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGlmICh1aURlY29yYXRvcnMpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25EZWNvcmF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YVtdPiA9XG4gICAgICAgIFJlZmxlY3Rpb24uZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1RcbiAgICAgICAgKSBhcyBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YVtdPjtcbiAgICAgIC8vIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIC8vIGNvbnN0IGRiRGVjb3JhdG9yczogUmVjb3JkPHN0cmluZywgRGVjb3JhdG9yTWV0YWRhdGFbXT4gPVxuICAgICAgLy8gICBSZWZsZWN0aW9uLmdldEFsbFByb3BlcnR5RGVjb3JhdG9ycyhtb2RlbCwgREJLZXlzLlJFRkxFQ1QpIGFzIFJlY29yZDxcbiAgICAgIC8vICAgICBzdHJpbmcsXG4gICAgICAvLyAgICAgRGVjb3JhdG9yTWV0YWRhdGFbXVxuICAgICAgLy8gICA+O1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB1aURlY29yYXRvcnMpIHtcbiAgICAgICAgY29uc3QgZGVjcyA9IHVpRGVjb3JhdG9yc1trZXldO1xuICAgICAgICBpZiAoZGVjcy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgdGhyb3cgbmV3IFJlbmRlcmluZ0Vycm9yKFxuICAgICAgICAgICAgYE9ubHkgb25lIHR5cGUgb2YgZGVjb3JhdGlvbiBpcyBhbGxvd2VkLiBQbGVhc2UgY2hvb3NlIGJldHdlZW4gQHVpcHJvcCBhbmQgQHVpZWxlbWVudGBcbiAgICAgICAgICApO1xuICAgICAgICBjb25zdCBkZWMgPSBkZWNzWzFdOyAvLyBJZ25vcmUgMCwgaXRzIHRoZSBkZXNpZ246dHlwZVxuICAgICAgICBpZiAoIWRlYykgdGhyb3cgbmV3IFJlbmRlcmluZ0Vycm9yKGBObyBkZWNvcmF0b3IgZm91bmRgKTtcbiAgICAgICAgc3dpdGNoIChkZWMua2V5KSB7XG4gICAgICAgICAgY2FzZSBVSUtleXMuUFJPUDpcbiAgICAgICAgICAgIGNoaWxkUHJvcHNba2V5XSA9IGRlYy5wcm9wcyBhcyBVSVByb3BNZXRhZGF0YTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgVUlLZXlzLkVMRU1FTlQ6IHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgICAgICAgICBjb25zdCBjaGlsZERlZmluaXRpb246IEZpZWxkRGVmaW5pdGlvbjxUPiA9IHtcbiAgICAgICAgICAgICAgdGFnOiAoZGVjLnByb3BzIGFzIFVJRWxlbWVudE1ldGFkYXRhKS50YWcsXG4gICAgICAgICAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgIChkZWMucHJvcHMgYXMgVUlFbGVtZW50TWV0YWRhdGEpLnByb3BzIGFzIGFueSxcbiAgICAgICAgICAgICAgICBnbG9iYWxQcm9wc1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkRlY3M6IERlY29yYXRvck1ldGFkYXRhT2JqZWN0W10gPVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uRGVjb3JhdG9yc1trZXldIGFzIERlY29yYXRvck1ldGFkYXRhT2JqZWN0W107XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIGNvbnN0IHR5cGVEZWM6IERlY29yYXRvck1ldGFkYXRhT2JqZWN0ID1cbiAgICAgICAgICAgICAgdmFsaWRhdGlvbkRlY3Muc2hpZnQoKSBhcyBEZWNvcmF0b3JNZXRhZGF0YU9iamVjdDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGVjIG9mIHZhbGlkYXRpb25EZWNzKSB7XG4gICAgICAgICAgICAgIGlmICgoZGVjLmtleSBhcyBzdHJpbmcpIGluIFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFByb3BzW3RoaXMudHJhbnNsYXRlKGtleSldID0gZGVjLnByb3BzO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICgoZGVjLmtleSBhcyBzdHJpbmcpIGluIFZhbGlkYXRhYmxlQnlUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRQcm9wc1tVSUtleXMuVFlQRV0gPSBkZWMucHJvcHM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZGVjKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZERlZmluaXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVuZGVyaW5nRXJyb3IoYEludmFsaWQga2V5OiAke2RlYy5rZXl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFnOiB0YWcsXG4gICAgICBwcm9wczogT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMsIGdsb2JhbFByb3BzKSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICB9IGFzIEZpZWxkRGVmaW5pdGlvbjxUPjtcbiAgfVxuXG4gIHN0YXRpYyByZWdpc3RlcihlbmdpbmU6IFJlbmRlcmluZ0VuZ2luZTx1bmtub3duPikge1xuICAgIGlmIChlbmdpbmUuZmxhdm91ciBpbiB0aGlzLmNhY2hlKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBSZW5kZXJpbmcgZW5naW5lIHVuZGVyICR7ZW5naW5lLmZsYXZvdXJ9IGFscmVhZHkgZXhpc3RzYFxuICAgICAgKTtcbiAgICB0aGlzLmNhY2hlW2VuZ2luZS5mbGF2b3VyXSA9IGVuZ2luZTtcbiAgICB0aGlzLmN1cnJlbnQgPSBlbmdpbmU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRPckJvb3Q8Tz4oXG4gICAgb2JqOiBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU8Tz4+IHwgUmVuZGVyaW5nRW5naW5lPE8+XG4gICk6IFJlbmRlcmluZ0VuZ2luZTxPPiB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIFJlbmRlcmluZ0VuZ2luZSkgcmV0dXJuIG9iaiBhcyBSZW5kZXJpbmdFbmdpbmU8Tz47XG4gICAgY29uc3QgZW5naW5lOiBSZW5kZXJpbmdFbmdpbmU8Tz4gPSBuZXcgb2JqKCk7XG4gICAgZW5naW5lLmluaXRpYWxpemUoKTsgLy8gbWFrZSB0aGUgYm9vdGluZyBhc3luYy4gdXNlIHRoZSBpbml0aWFsaXplZCBmbGFnIHRvIGNvbnRyb2wgaXRcbiAgICByZXR1cm4gZW5naW5lIGFzIFJlbmRlcmluZ0VuZ2luZTxPPjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQ8Tz4oZmxhdm91cj86IHN0cmluZyk6IFJlbmRlcmluZ0VuZ2luZTxPPiB7XG4gICAgaWYgKCFmbGF2b3VyKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JCb290PE8+KFxuICAgICAgICB0aGlzLmN1cnJlbnQgYXMgQ29uc3RydWN0b3I8UmVuZGVyaW5nRW5naW5lPE8+PiB8IFJlbmRlcmluZ0VuZ2luZTxPPlxuICAgICAgKTtcbiAgICBpZiAoIShmbGF2b3VyIGluIHRoaXMuY2FjaGUpKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBSZW5kZXJpbmcgZW5naW5lIHVuZGVyICR7Zmxhdm91cn0gZG9lcyBub3QgZXhpc3RgXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLmdldE9yQm9vdDxPPihcbiAgICAgIHRoaXMuY2FjaGVbZmxhdm91cl0gYXNcbiAgICAgICAgfCBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU8Tz4+XG4gICAgICAgIHwgUmVuZGVyaW5nRW5naW5lPE8+XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyByZW5kZXI8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSwgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGlmICghY29uc3RydWN0b3IpIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTm8gbW9kZWwgcmVnaXN0ZXJlZCBmb3VuZFwiKTtcbiAgICBjb25zdCBmbGF2b3VyID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlJFTkRFUkVEX0JZKSxcbiAgICAgIGNvbnN0cnVjdG9yIGFzIE1vZGVsQ29uc3RydWN0b3I8TW9kZWw+XG4gICAgKTtcbiAgICByZXR1cm4gUmVuZGVyaW5nRW5naW5lLmdldChmbGF2b3VyKS5yZW5kZXIobW9kZWwsIC4uLmFyZ3MpO1xuICB9XG5cbiAgc3RhdGljIGtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBgJHtVSUtleXMuUkVGTEVDVH0ke2tleX1gO1xuICB9XG59XG4iXX0=