@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,25 @@
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
+
25
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsbUJBQWlCO0FBRWpCLCtDQUE2QjtBQUM3Qiw4Q0FBNEIiLCJmaWxlIjoibW9kZWwvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBuYW1lc3BhY2UgbW9kZWxcbiAqIEBtZW1iZXJPZiB1aS1kZWNvcmF0b3JzXG4gKi9cblxuaW1wb3J0IFwiLi9tb2RlbFwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vdmVycmlkZXNcIjtcbiJdfQ==
@@ -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,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6Im1vZGVsL21vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBCdWlsZGVyUmVnaXN0cnksXG4gIENvbXBhcmFibGUsXG4gIENvbnN0cnVjdG9yLFxuICBIYXNoYWJsZSxcbiAgTW9kZWxBcmcsXG4gIE1vZGVsQnVpbGRlckZ1bmN0aW9uLFxuICBNb2RlbENvbnN0cnVjdG9yLFxuICBTZXJpYWxpemFibGUsXG4gIFZhbGlkYXRhYmxlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbmRlY2xhcmUgbW9kdWxlIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCIge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGhhY2t5IG92ZXJyaWRlXG4gIGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgTW9kZWxcbiAgICBpbXBsZW1lbnRzIFZhbGlkYXRhYmxlLCBTZXJpYWxpemFibGUsIEhhc2hhYmxlLCBDb21wYXJhYmxlPE1vZGVsPlxuICB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPE1vZGVsPik7XG5cbiAgICBoYXNFcnJvcnMoLi4uZXhjbHVzaW9uczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbiAgICBoYXNFcnJvcnMoXG4gICAgICBwcmV2aW91c1ZlcnNpb24/OiBNb2RlbCB8IGFueSxcbiAgICAgIC4uLmV4Y2x1c2lvbnM6IGFueVtdXG4gICAgKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBDb21wYXJlIG9iamVjdCBlcXVhbGl0eSByZWN1cnNpdmVseVxuICAgICAqIEBwYXJhbSB7YW55fSBvYmogb2JqZWN0IHRvIGNvbXBhcmUgdG9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4Y2VwdGlvbnNdIHByb3BlcnR5IG5hbWVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvbXBhcmlzb25cbiAgICAgKi9cbiAgICBlcXVhbHMob2JqOiBhbnksIC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIG1vZGVsIGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IGRlZmluZWQge0BsaW5rIFNlcmlhbGl6ZXJ9XG4gICAgICovXG4gICAgc2VyaWFsaXplKCk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBPdmVycmlkZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGpzJ3MgJ3RvU3RyaW5nKCknIHdoaWNoIHN1Y2tzLi4uXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IERlZmluZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBvYmplY3QgaGFzaC4gUmVsaWVzIG9uIGEgdmVyeSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBKYXZhJ3Mgc3RyaW5nIGhhc2g7XG4gICAgICovXG4gICAgaGFzaCgpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgRGVzZXJpYWxpemVzIGEgTW9kZWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXJnc1xuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlscyB0byBwYXJzZSB0aGUgc3RyaW5nLCBvciBpZiBpdCBmYWlscyB0byBidWlsZCB0aGUgbW9kZWxcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoc3RyOiBzdHJpbmcpOiBhbnk7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICAgICAqIEBkZXNjcmlwdGlvbiBJdGVyYXRlcyBhbGwgY29tbW9uIHByb3BlcnRpZXMgb2Ygb2JqIChpZiBleGlzdGluZykgYW5kIHNlbGYsIGFuZCBjb3BpZXMgdGhlbSBvbnRvIHNlbGZcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgICAqIEBwYXJhbSB7VCB8IFJlY29yZDxzdHJpbmcsIGFueT59IFtvYmpdXG4gICAgICpcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbU9iamVjdDxUIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgc2VsZjogVCxcbiAgICAgIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgKTogVDtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXBvcHVsYXRlcyB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgb25lcyBmcm9tIHRoZSBuZXcgTW9kZWwgT2JqZWN0XG4gICAgICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZi5cbiAgICAgKiBJcyBhd2FyZSBvZiBuZXN0ZWQgTW9kZWwgT2JqZWN0cyBhbmQgcmVidWlsZHMgdGhlbSBhbHNvLlxuICAgICAqIFdoZW4gTGlzdCBwcm9wZXJ0aWVzIGFyZSBkZWNvcmF0ZWQgd2l0aCB7QGxpbmsgbGlzdH0sIHRoZXkgbGlzdCBpdGVtcyB3aWxsIGFsc28gYmUgcmVidWlsdFxuICAgICAqXG4gICAgICogQHBhcmFtIHtUfSBzZWxmXG4gICAgICogQHBhcmFtIHtUIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW29ial1cbiAgICAgKlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tTW9kZWw8VCBleHRlbmRzIE1vZGVsPihcbiAgICAgIHNlbGY6IFQsXG4gICAgICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICk6IFQ7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgR2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn1cbiAgICAgKiBAcGFyYW0ge01vZGVsQnVpbGRlckZ1bmN0aW9ufSBbYnVpbGRlcl1cbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0QnVpbGRlcihidWlsZGVyPzogTW9kZWxCdWlsZGVyRnVuY3Rpb24pOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgY3VycmVudCBnbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRCdWlsZGVyKCk6IE1vZGVsQnVpbGRlckZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQge0BsaW5rIE1vZGVsUmVnaXN0cnlNYW5hZ2VyfVxuICAgICAqXG4gICAgICogQHJldHVybiBNb2RlbFJlZ2lzdHJ5LCBkZWZhdWx0cyB0byB7QGxpbmsgTW9kZWxSZWdpc3RyeU1hbmFnZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpbmdNb2RlbFJlZ2lzdHJ5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0J1aWxkZXJSZWdpc3RyeX0gbW9kZWxSZWdpc3RyeSB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIFJlZ2lzdHJ5XG4gICAgICovXG4gICAgc3RhdGljIHNldFJlZ2lzdHJ5KG1vZGVsUmVnaXN0cnk6IEJ1aWxkZXJSZWdpc3RyeTxhbnk+KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSByZWdpc3RlciBuZXcgTW9kZWxzXG4gICAgICogQHBhcmFtIHthbnl9IGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB3aGVuIG5vdCBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSB1c2VkXG4gICAgICpcbiAgICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVnaXN0ZXI8VCBleHRlbmRzIE1vZGVsPihcbiAgICAgIGNvbnN0cnVjdG9yOiBNb2RlbENvbnN0cnVjdG9yPFQ+LFxuICAgICAgbmFtZT86IHN0cmluZ1xuICAgICk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgR2V0cyBhIHJlZ2lzdGVyZWQgTW9kZWwge0BsaW5rIE1vZGVsQ29uc3RydWN0b3J9XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKlxuICAgICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihuYW1lOiBzdHJpbmcpOiBNb2RlbENvbnN0cnVjdG9yPFQ+IHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjbGF6el0gd2hlbiBwcm92aWRlZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIG1hdGNoaW5nIGNvbnN0cnVjdG9yXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIEVycm9yIElmIGNsYXp6IGlzIG5vdCBmb3VuZCwgb3Igb2JqIGlzIG5vdCBhIHtAbGluayBNb2RlbH0gbWVhbmluZyBpdCBoYXMgbm8ge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICAgKi9cbiAgICBzdGF0aWMgYnVpbGQ8VCBleHRlbmRzIE1vZGVsPihvYmo/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBjbGF6ej86IHN0cmluZyk6IFQ7XG4gICAgc3RhdGljIGdldE1ldGFkYXRhPFYgZXh0ZW5kcyBNb2RlbD4obW9kZWw6IFYpOiBhbnk7XG4gICAgc3RhdGljIGdldEF0dHJpYnV0ZXM8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogQ29uc3RydWN0b3I8Vj4gfCBWKTogc3RyaW5nW107XG4gICAgc3RhdGljIGVxdWFsczxWIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgb2JqMTogVixcbiAgICAgIG9iajI6IFYsXG4gICAgICAuLi5leGNlcHRpb25zOiBhbnlbXVxuICAgICk6IGJvb2xlYW47XG4gICAgc3RhdGljIGhhc0Vycm9yczxWIGV4dGVuZHMgTW9kZWw+KFxuICAgICAgbW9kZWw6IFYsXG4gICAgICAuLi5leGNlcHRpb25zOiBhbnlbXVxuICAgICk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuICAgIHN0YXRpYyBzZXJpYWxpemU8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogVik6IGFueTtcbiAgICBzdGF0aWMgaGFzaDxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBWKTogYW55O1xuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUga2V5IHRvIHN0b3JlIGFzIE1ldGFkYXRhIHVuZGVyIFJlZmxlY3Rpb25zXG4gICAgICogQGRlc2NyaXB0aW9uIGNvbmNhdGVuYXRlcyB7QGxpbmsgTW9kZWxLZXlzI1JFRkxFQ1R9IHdpdGggdGhlIHByb3ZpZGVkIGtleVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKi9cbiAgICBzdGF0aWMga2V5KHN0cjogc3RyaW5nKTogc3RyaW5nO1xuICAgIHJlbmRlcjxSPiguLi5hcmdzOiBhbnlbXSk6IFI7XG4gICAgc3RhdGljIHVpS2V5KGtleTogc3RyaW5nKTogc3RyaW5nO1xuICB9XG59XG4iXX0=
@@ -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,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
4
+ const constants_1 = require("../ui/constants.cjs");
5
+ const Rendering_1 = require("../ui/Rendering.cjs");
6
+ decorator_validation_1.Model.prototype.render = function (...args) {
7
+ return Rendering_1.RenderingEngine.render(this, ...args);
8
+ };
9
+ decorator_validation_1.Model.uiKey = function (key) {
10
+ return `${constants_1.UIKeys.REFLECT}${key}`;
11
+ };
12
+
13
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9vdmVycmlkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5RUFBdUQ7QUFDdkQsK0NBQXlDO0FBQ3pDLCtDQUFrRDtBQUVsRCw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBb0MsR0FBRyxJQUFXO0lBQ3pFLE9BQU8sMkJBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUYsNEJBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFXO0lBQ2pDLE9BQU8sR0FBRyxrQkFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxDQUFDLENBQUMiLCJmaWxlIjoibW9kZWwvb3ZlcnJpZGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBVSUtleXMgfSBmcm9tIFwiLi4vdWkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tIFwiLi4vdWkvUmVuZGVyaW5nXCI7XG5cbk1vZGVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiA8TSBleHRlbmRzIE1vZGVsPih0aGlzOiBNLCAuLi5hcmdzOiBhbnlbXSkge1xuICByZXR1cm4gUmVuZGVyaW5nRW5naW5lLnJlbmRlcih0aGlzLCAuLi5hcmdzKTtcbn07XG5cbk1vZGVsLnVpS2V5ID0gZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG4gIHJldHVybiBgJHtVSUtleXMuUkVGTEVDVH0ke2tleX1gO1xufTtcbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderingEngine = void 0;
4
+ const db_decorators_1 = require("@decaf-ts/db-decorators");
5
+ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
6
+ const constants_1 = require("./constants.cjs");
7
+ class RenderingEngine {
8
+ constructor(flavour) {
9
+ this.flavour = flavour;
10
+ this.initialized = false;
11
+ RenderingEngine.register(this);
12
+ }
13
+ static register(engine) {
14
+ this.cache = this.cache || {};
15
+ if (engine.flavour in this.cache)
16
+ throw new db_decorators_1.InternalError(`Rendering engine under ${engine.flavour} already exists`);
17
+ this.cache[engine.flavour] = engine;
18
+ this.current = engine;
19
+ }
20
+ static getOrBoot(obj) {
21
+ if (obj instanceof RenderingEngine)
22
+ return obj;
23
+ const engine = new obj();
24
+ engine.initialize(); // make the booting async. use the initialized flag to control it
25
+ return engine;
26
+ }
27
+ static get(flavour) {
28
+ if (!flavour)
29
+ return this.getOrBoot(this.current);
30
+ if (!(flavour in this.cache))
31
+ throw new db_decorators_1.InternalError(`Rendering engine under ${flavour} does not exist`);
32
+ return this.getOrBoot(this.cache[flavour]);
33
+ }
34
+ static render(model, ...args) {
35
+ const constructor = decorator_validation_1.Model.get(model.constructor.name);
36
+ if (!constructor)
37
+ throw new db_decorators_1.InternalError("No model registered found");
38
+ const flavour = Reflect.getMetadata(decorator_validation_1.Model.uiKey(constants_1.UIKeys.UIMODEL), constructor);
39
+ return this.get(flavour).render(model, ...args);
40
+ }
41
+ }
42
+ exports.RenderingEngine = RenderingEngine;
43
+
44
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9SZW5kZXJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXdEO0FBQ3hELHlFQUl3QztBQUN4QywyQ0FBcUM7QUFFckMsTUFBc0IsZUFBZTtJQVNuQyxZQUErQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUZwQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUdyQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFLRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQXVCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQzlCLE1BQU0sSUFBSSw2QkFBYSxDQUNyQiwwQkFBMEIsTUFBTSxDQUFDLE9BQU8saUJBQWlCLENBQzFELENBQUM7UUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQ3RCLEdBQW1EO1FBRW5ELElBQUksR0FBRyxZQUFZLGVBQWU7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBb0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMxQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxpRUFBaUU7UUFDdEYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBZ0I7UUFDekIsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzFCLE1BQU0sSUFBSSw2QkFBYSxDQUNyQiwwQkFBMEIsT0FBTyxpQkFBaUIsQ0FDbkQsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQWtCLEtBQVEsRUFBRSxHQUFHLElBQVc7UUFDckQsTUFBTSxXQUFXLEdBQUcsNEJBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSw2QkFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDdkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FDakMsNEJBQUssQ0FBQyxLQUFLLENBQUMsa0JBQU0sQ0FBQyxPQUFPLENBQUMsRUFDM0IsV0FBc0MsQ0FDdkMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBckRELDBDQXFEQyIsImZpbGUiOiJ1aS9SZW5kZXJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgTW9kZWwsXG4gIE1vZGVsQ29uc3RydWN0b3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFVJS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVuZGVyaW5nRW5naW5lIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY2FjaGU6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgQ29uc3RydWN0b3I8UmVuZGVyaW5nRW5naW5lPiB8IFJlbmRlcmluZ0VuZ2luZVxuICA+O1xuICBwcml2YXRlIHN0YXRpYyBjdXJyZW50OiBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU+IHwgUmVuZGVyaW5nRW5naW5lO1xuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZWFkb25seSBmbGF2b3VyOiBzdHJpbmcpIHtcbiAgICBSZW5kZXJpbmdFbmdpbmUucmVnaXN0ZXIodGhpcyk7XG4gIH1cblxuICBhYnN0cmFjdCBpbml0aWFsaXplKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgYWJzdHJhY3QgcmVuZGVyKC4uLmFyZ3M6IGFueVtdKTogYW55O1xuXG4gIHN0YXRpYyByZWdpc3RlcihlbmdpbmU6IFJlbmRlcmluZ0VuZ2luZSkge1xuICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlIHx8IHt9O1xuICAgIGlmIChlbmdpbmUuZmxhdm91ciBpbiB0aGlzLmNhY2hlKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBSZW5kZXJpbmcgZW5naW5lIHVuZGVyICR7ZW5naW5lLmZsYXZvdXJ9IGFscmVhZHkgZXhpc3RzYFxuICAgICAgKTtcbiAgICB0aGlzLmNhY2hlW2VuZ2luZS5mbGF2b3VyXSA9IGVuZ2luZTtcbiAgICB0aGlzLmN1cnJlbnQgPSBlbmdpbmU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRPckJvb3QoXG4gICAgb2JqOiBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU+IHwgUmVuZGVyaW5nRW5naW5lXG4gICk6IFJlbmRlcmluZ0VuZ2luZSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIFJlbmRlcmluZ0VuZ2luZSkgcmV0dXJuIG9iajtcbiAgICBjb25zdCBlbmdpbmU6IFJlbmRlcmluZ0VuZ2luZSA9IG5ldyBvYmooKTtcbiAgICBlbmdpbmUuaW5pdGlhbGl6ZSgpOyAvLyBtYWtlIHRoZSBib290aW5nIGFzeW5jLiB1c2UgdGhlIGluaXRpYWxpemVkIGZsYWcgdG8gY29udHJvbCBpdFxuICAgIHJldHVybiBlbmdpbmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0KGZsYXZvdXI/OiBzdHJpbmcpOiBSZW5kZXJpbmdFbmdpbmUge1xuICAgIGlmICghZmxhdm91cikgcmV0dXJuIHRoaXMuZ2V0T3JCb290KHRoaXMuY3VycmVudCk7XG4gICAgaWYgKCEoZmxhdm91ciBpbiB0aGlzLmNhY2hlKSlcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgUmVuZGVyaW5nIGVuZ2luZSB1bmRlciAke2ZsYXZvdXJ9IGRvZXMgbm90IGV4aXN0YFxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5nZXRPckJvb3QodGhpcy5jYWNoZVtmbGF2b3VyXSk7XG4gIH1cblxuICBzdGF0aWMgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogYW55IHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IE1vZGVsLmdldChtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICBpZiAoIWNvbnN0cnVjdG9yKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk5vIG1vZGVsIHJlZ2lzdGVyZWQgZm91bmRcIik7XG4gICAgY29uc3QgZmxhdm91ciA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICBNb2RlbC51aUtleShVSUtleXMuVUlNT0RFTCksXG4gICAgICBjb25zdHJ1Y3RvciBhcyBNb2RlbENvbnN0cnVjdG9yPE1vZGVsPlxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KGZsYXZvdXIpLnJlbmRlcihtb2RlbCwgLi4uYXJncyk7XG4gIH1cbn1cbiJdfQ==
@@ -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,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UIKeys = void 0;
4
+ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
5
+ /**
6
+ * @enum UIKeys
7
+ * @category Constants
8
+ */
9
+ exports.UIKeys = {
10
+ REFLECT: `${decorator_validation_1.ModelKeys.REFLECT}.ui.`,
11
+ UIMODEL: "uimodel",
12
+ RENDERED_BY: "rendered-by",
13
+ ELEMENT: "element",
14
+ PROP: "prop",
15
+ NAME: "name",
16
+ NAME_PREFIX: "input-",
17
+ CUSTOM_PROPS: "customValidationProps",
18
+ TYPE: "type",
19
+ SUB_TYPE: "subtype",
20
+ READ_ONLY: "readonly",
21
+ REQUIRED: decorator_validation_1.ValidationKeys.REQUIRED,
22
+ MIN: decorator_validation_1.ValidationKeys.MIN,
23
+ MIN_LENGTH: decorator_validation_1.ValidationKeys.MIN_LENGTH,
24
+ MAX: decorator_validation_1.ValidationKeys.MAX,
25
+ MAX_LENGTH: decorator_validation_1.ValidationKeys.MAX_LENGTH,
26
+ PATTERN: decorator_validation_1.ValidationKeys.PATTERN,
27
+ URL: decorator_validation_1.ValidationKeys.URL,
28
+ STEP: decorator_validation_1.ValidationKeys.STEP,
29
+ DATE: decorator_validation_1.ValidationKeys.DATE,
30
+ EMAIL: decorator_validation_1.ValidationKeys.EMAIL,
31
+ PASSWORD: decorator_validation_1.ValidationKeys.PASSWORD,
32
+ };
33
+
34
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQTJFO0FBRTNFOzs7R0FHRztBQUNVLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLE9BQU8sRUFBRSxHQUFHLGdDQUFTLENBQUMsT0FBTyxNQUFNO0lBQ25DLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSxhQUFhO0lBQzFCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixXQUFXLEVBQUUsUUFBUTtJQUNyQixZQUFZLEVBQUUsdUJBQXVCO0lBRXJDLElBQUksRUFBRSxNQUFNO0lBQ1osUUFBUSxFQUFFLFNBQVM7SUFFbkIsU0FBUyxFQUFFLFVBQVU7SUFDckIsUUFBUSxFQUFFLHFDQUFjLENBQUMsUUFBUTtJQUNqQyxHQUFHLEVBQUUscUNBQWMsQ0FBQyxHQUFHO0lBQ3ZCLFVBQVUsRUFBRSxxQ0FBYyxDQUFDLFVBQVU7SUFDckMsR0FBRyxFQUFFLHFDQUFjLENBQUMsR0FBRztJQUN2QixVQUFVLEVBQUUscUNBQWMsQ0FBQyxVQUFVO0lBQ3JDLE9BQU8sRUFBRSxxQ0FBYyxDQUFDLE9BQU87SUFDL0IsR0FBRyxFQUFFLHFDQUFjLENBQUMsR0FBRztJQUN2QixJQUFJLEVBQUUscUNBQWMsQ0FBQyxJQUFJO0lBQ3pCLElBQUksRUFBRSxxQ0FBYyxDQUFDLElBQUk7SUFDekIsS0FBSyxFQUFFLHFDQUFjLENBQUMsS0FBSztJQUMzQixRQUFRLEVBQUUscUNBQWMsQ0FBQyxRQUFRO0NBQ2xDLENBQUMiLCJmaWxlIjoidWkvY29uc3RhbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxLZXlzLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAZW51bSBVSUtleXNcbiAqIEBjYXRlZ29yeSBDb25zdGFudHNcbiAqL1xuZXhwb3J0IGNvbnN0IFVJS2V5cyA9IHtcbiAgUkVGTEVDVDogYCR7TW9kZWxLZXlzLlJFRkxFQ1R9LnVpLmAsXG4gIFVJTU9ERUw6IFwidWltb2RlbFwiLFxuICBSRU5ERVJFRF9CWTogXCJyZW5kZXJlZC1ieVwiLFxuICBFTEVNRU5UOiBcImVsZW1lbnRcIixcbiAgUFJPUDogXCJwcm9wXCIsXG4gIE5BTUU6IFwibmFtZVwiLFxuICBOQU1FX1BSRUZJWDogXCJpbnB1dC1cIixcbiAgQ1VTVE9NX1BST1BTOiBcImN1c3RvbVZhbGlkYXRpb25Qcm9wc1wiLFxuXG4gIFRZUEU6IFwidHlwZVwiLFxuICBTVUJfVFlQRTogXCJzdWJ0eXBlXCIsXG5cbiAgUkVBRF9PTkxZOiBcInJlYWRvbmx5XCIsXG4gIFJFUVVJUkVEOiBWYWxpZGF0aW9uS2V5cy5SRVFVSVJFRCxcbiAgTUlOOiBWYWxpZGF0aW9uS2V5cy5NSU4sXG4gIE1JTl9MRU5HVEg6IFZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEgsXG4gIE1BWDogVmFsaWRhdGlvbktleXMuTUFYLFxuICBNQVhfTEVOR1RIOiBWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RILFxuICBQQVRURVJOOiBWYWxpZGF0aW9uS2V5cy5QQVRURVJOLFxuICBVUkw6IFZhbGlkYXRpb25LZXlzLlVSTCxcbiAgU1RFUDogVmFsaWRhdGlvbktleXMuU1RFUCxcbiAgREFURTogVmFsaWRhdGlvbktleXMuREFURSxcbiAgRU1BSUw6IFZhbGlkYXRpb25LZXlzLkVNQUlMLFxuICBQQVNTV09SRDogVmFsaWRhdGlvbktleXMuUEFTU1dPUkQsXG59O1xuIl19
@@ -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,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uiprop = void 0;
4
+ exports.uielement = uielement;
5
+ require("reflect-metadata");
6
+ const constants_1 = require("./constants.cjs");
7
+ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
8
+ /**
9
+ * @namespace ui-decorators.ui.decorators
10
+ * @memberOf ui-decorators.ui
11
+ */
12
+ /**
13
+ *
14
+ * @param {string} key
15
+ *
16
+ * @function getUIKey
17
+ *
18
+ * @memberOf ui-decorators.ui.decorators
19
+ */
20
+ const getUIKey = (key) => constants_1.UIKeys.REFLECT + key;
21
+ /**
22
+ * Adds the UIElement definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
23
+ *
24
+ * @param {string} tag The component/HTML element tag name
25
+ * @param {{}} [props] The properties to pass to that component/HTML Element
26
+ * @param {any[]} [args] optional arguments that will be passed to the rendering strategy.
27
+ *
28
+ * @decorator uielement
29
+ *
30
+ * @category Decorators
31
+ * @subcategory ui-decorators
32
+ */
33
+ function uielement(tag, props, serialize = false, ...args) {
34
+ const metadata = {
35
+ tag: tag,
36
+ serialize: serialize,
37
+ props: props,
38
+ args: args,
39
+ };
40
+ return (0, decorator_validation_1.propMetadata)(getUIKey(constants_1.UIKeys.ELEMENT), metadata);
41
+ }
42
+ /**
43
+ * Adds the UIProp definition as metadata to the property, allowing it to be read by any {@link RenderStrategy}
44
+ *
45
+ * this requires a '@uimodel' with a defined tag
46
+ *
47
+ * @param {string} [propName] the property name that will be passed to the component. defaults to the PropertyKey
48
+ *
49
+ * @decorator uiprop
50
+ *
51
+ * @category Decorators
52
+ * @subcategory ui-decorators
53
+ */
54
+ const uiprop = (propName = undefined, stringify = false) => (target, propertyKey) => {
55
+ const metadata = {
56
+ name: propName || propertyKey,
57
+ stringify: stringify,
58
+ };
59
+ Reflect.defineMetadata(getUIKey(constants_1.UIKeys.PROP), metadata, target, propertyKey);
60
+ };
61
+ exports.uiprop = uiprop;
62
+
63
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBDQSw4QkFhQztBQXZERCw0QkFBMEI7QUFDMUIsMkNBQXFDO0FBQ3JDLHlFQUE4RDtBQUU5RDs7O0dBR0c7QUFFSDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLGtCQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQWF2RDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsR0FBVyxFQUNYLEtBQWtDLEVBQ2xDLFlBQXFCLEtBQUssRUFDMUIsR0FBRyxJQUFXO0lBRWQsTUFBTSxRQUFRLEdBQXNCO1FBQ2xDLEdBQUcsRUFBRSxHQUFHO1FBQ1IsU0FBUyxFQUFFLFNBQVM7UUFDcEIsS0FBSyxFQUFFLEtBQUs7UUFDWixJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUM7SUFDRixPQUFPLElBQUEsbUNBQVksRUFBQyxRQUFRLENBQUMsa0JBQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBVUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxNQUFNLE1BQU0sR0FDakIsQ0FBQyxXQUErQixTQUFTLEVBQUUsWUFBcUIsS0FBSyxFQUFFLEVBQUUsQ0FDekUsQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBRSxFQUFFO0lBQ25DLE1BQU0sUUFBUSxHQUFtQjtRQUMvQixJQUFJLEVBQUUsUUFBUSxJQUFJLFdBQVc7UUFDN0IsU0FBUyxFQUFFLFNBQVM7S0FDckIsQ0FBQztJQUVGLE9BQU8sQ0FBQyxjQUFjLENBQ3BCLFFBQVEsQ0FBQyxrQkFBTSxDQUFDLElBQUksQ0FBQyxFQUNyQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsQ0FDWixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBZFMsUUFBQSxNQUFNLFVBY2YiLCJmaWxlIjoidWkvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcbmltcG9ydCB7IFVJS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHJvcE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aVxuICovXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0VUlLZXlcbiAqXG4gKiBAbWVtYmVyT2YgdWktZGVjb3JhdG9ycy51aS5kZWNvcmF0b3JzXG4gKi9cbmNvbnN0IGdldFVJS2V5ID0gKGtleTogc3RyaW5nKSA9PiBVSUtleXMuUkVGTEVDVCArIGtleTtcblxuLyoqXG4gKiBAdHlwZWRlZiBVSUVsZW1lbnRNZXRhZGF0YVxuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnMudWkuZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBVSUVsZW1lbnRNZXRhZGF0YSA9IHtcbiAgdGFnOiBzdHJpbmc7XG4gIGFyZ3M/OiBhbnlbXTtcbiAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBzZXJpYWxpemU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBVSUVsZW1lbnQgZGVmaW5pdGlvbiBhcyBtZXRhZGF0YSB0byB0aGUgcHJvcGVydHksIGFsbG93aW5nIGl0IHRvIGJlIHJlYWQgYnkgYW55IHtAbGluayBSZW5kZXJTdHJhdGVneX1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBjb21wb25lbnQvSFRNTCBlbGVtZW50IHRhZyBuYW1lXG4gKiBAcGFyYW0ge3t9fSBbcHJvcHNdIFRoZSBwcm9wZXJ0aWVzIHRvIHBhc3MgdG8gdGhhdCBjb21wb25lbnQvSFRNTCBFbGVtZW50XG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gb3B0aW9uYWwgYXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHJlbmRlcmluZyBzdHJhdGVneS5cbiAqXG4gKiBAZGVjb3JhdG9yIHVpZWxlbWVudFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKiBAc3ViY2F0ZWdvcnkgdWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdWllbGVtZW50KFxuICB0YWc6IHN0cmluZyxcbiAgcHJvcHM/OiB7IFtpbmRleGVyOiBzdHJpbmddOiBhbnkgfSxcbiAgc2VyaWFsaXplOiBib29sZWFuID0gZmFsc2UsXG4gIC4uLmFyZ3M6IGFueVtdXG4pIHtcbiAgY29uc3QgbWV0YWRhdGE6IFVJRWxlbWVudE1ldGFkYXRhID0ge1xuICAgIHRhZzogdGFnLFxuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICBhcmdzOiBhcmdzLFxuICB9O1xuICByZXR1cm4gcHJvcE1ldGFkYXRhKGdldFVJS2V5KFVJS2V5cy5FTEVNRU5UKSwgbWV0YWRhdGEpO1xufVxuLyoqXG4gKiBAdHlwZWRlZiBVSVByb3BNZXRhZGF0YVxuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnMudWkuZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBVSVByb3BNZXRhZGF0YSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBzdHJpbmdpZnk6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEFkZHMgdGhlIFVJUHJvcCBkZWZpbml0aW9uIGFzIG1ldGFkYXRhIHRvIHRoZSBwcm9wZXJ0eSwgYWxsb3dpbmcgaXQgdG8gYmUgcmVhZCBieSBhbnkge0BsaW5rIFJlbmRlclN0cmF0ZWd5fVxuICpcbiAqIHRoaXMgcmVxdWlyZXMgYSAnQHVpbW9kZWwnIHdpdGggYSBkZWZpbmVkIHRhZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIHRoZSBwcm9wZXJ0eSBuYW1lIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC4gZGVmYXVsdHMgdG8gdGhlIFByb3BlcnR5S2V5XG4gKlxuICogQGRlY29yYXRvciB1aXByb3BcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICogQHN1YmNhdGVnb3J5IHVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVpcHJvcCA9XG4gIChwcm9wTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCBzdHJpbmdpZnk6IGJvb2xlYW4gPSBmYWxzZSkgPT5cbiAgKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJUHJvcE1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSxcbiAgICB9O1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldFVJS2V5KFVJS2V5cy5QUk9QKSxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xuIl19
@@ -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,25 @@
1
+ "use strict";
2
+ /**
3
+ * @namespace ui-decorators.ui
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
+ __exportStar(require("./constants.cjs"), exports);
22
+ __exportStar(require("./decorators.cjs"), exports);
23
+ __exportStar(require("./Rendering.cjs"), exports);
24
+
25
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91aS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsOENBQTRCO0FBQzVCLCtDQUE2QjtBQUM3Qiw4Q0FBNEIiLCJmaWxlIjoidWkvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBuYW1lc3BhY2UgdWktZGVjb3JhdG9ycy51aVxuICogQG1lbWJlck9mIHVpLWRlY29yYXRvcnNcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1JlbmRlcmluZ1wiO1xuIl19
@@ -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";
package/package.json ADDED
@@ -0,0 +1,109 @@
1
+ {
2
+ "name": "@decaf-ts/ui-decorators",
3
+ "version": "0.4.0",
4
+ "description": "Extension of decorator validation to ui elements to allow for web integration",
5
+ "type": "module",
6
+ "exports": {
7
+ "require": "./lib/index.cjs",
8
+ "import": "./lib/esm/index.js"
9
+ },
10
+ "types": "lib/index.d.ts",
11
+ "scripts": {
12
+ "do-install": "TOKEN=$(cat .token) npm install",
13
+ "update-dependencies": "rimraf node_modules/@decaf-ts package-lock.json && npm run do-install",
14
+ "flash-forward": "npx npm-check-updates -u && npm run do-install",
15
+ "reset": "rm -rf * && git checkout . && git pull && npm run do-install",
16
+ "build": "rimraf ./lib && rimraf ./dist && gulp dev",
17
+ "build:prod": "rimraf ./lib && rimraf ./dist && gulp prod",
18
+ "test": "jest --coverage --testPathPattern=\"/tests/unit\" --passWithNoTests --detectOpenHandles",
19
+ "test:integration": "jest --coverage --testPathPattern=\"/tests/(integration)\" --passWithNoTests --detectOpenHandles",
20
+ "test:all": "jest --coverage --testPathPattern=\"/tests/(unit|integration)\" --passWithNoTests --detectOpenHandles",
21
+ "lint": "eslint .",
22
+ "lint-fix": "eslint --fix ./src/*",
23
+ "test:circular": "dpdm -T --no-warning --no-tree ./src/index.ts",
24
+ "prepare-release": "npm run lint-fix && npm run build:prod && npm run coverage && npm run docs",
25
+ "release": "./bin/tag-release.sh",
26
+ "clean-publish": "npx clean-publish",
27
+ "coverage": "npm run test:all && cd workdocs && jest-coverage-badges",
28
+ "docs": "npx rimraf ./docs && mkdir docs && npm run do-install -- better-docs taffydb && gulp docs; npm remove better-docs taffydb"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/decaf-ts/ui-decorators.git"
33
+ },
34
+ "engines": {
35
+ "node": ">=20.0.0",
36
+ "npm": ">=10.0.0"
37
+ },
38
+ "files": [
39
+ "lib",
40
+ "dist"
41
+ ],
42
+ "keywords": [
43
+ "plantuml",
44
+ "mermaid",
45
+ "uml",
46
+ "drawio",
47
+ "mddocs",
48
+ "md",
49
+ "jsdoc",
50
+ "doc",
51
+ "docs",
52
+ "documentation",
53
+ "ci/cd",
54
+ "ci",
55
+ "cd",
56
+ "template",
57
+ "typescript",
58
+ "ts"
59
+ ],
60
+ "author": "Tiago Venceslau",
61
+ "license": "MIT",
62
+ "bugs": {
63
+ "url": "https://github.com/decaf-ts/ui-decorators/issues"
64
+ },
65
+ "homepage": "https://github.com/decaf-ts/ui-decorators#readme",
66
+ "devDependencies": {
67
+ "@eslint/js": "^9.14.0",
68
+ "@types/jest": "^29.5.14",
69
+ "@typescript-eslint/eslint-plugin": "^8.14.0",
70
+ "clean-publish": "^5.1.0",
71
+ "dpdm": "^3.14.0",
72
+ "eslint": "^9.14.0",
73
+ "eslint-config-prettier": "^9.1.0",
74
+ "eslint-plugin-prettier": "^5.2.1",
75
+ "globals": "^15.12.0",
76
+ "gulp": "^5.0.0",
77
+ "gulp-if": "^3.0.0",
78
+ "gulp-rename": "^2.0.0",
79
+ "gulp-replace": "^1.1.4",
80
+ "gulp-run-command": "^0.0.10",
81
+ "gulp-sourcemaps": "^2.6.5",
82
+ "gulp-typescript": "^6.0.0-alpha.1",
83
+ "gulp-uglify": "^3.0.2",
84
+ "jest": "^29.7.0",
85
+ "jest-coverage-badges": "^1.0.0",
86
+ "jest-junit": "^16.0.0",
87
+ "jsdoc": "^4.0.4",
88
+ "jsdoc-mermaid": "^1.0.0",
89
+ "markdown-include": "^0.4.3",
90
+ "merge-stream": "^2.0.0",
91
+ "nodemon": "^3.1.7",
92
+ "npm-check-updates": "^17.1.10",
93
+ "prettier": "^3.3.3",
94
+ "rimraf": "^6.0.1",
95
+ "ts-jest": "^29.2.5",
96
+ "ts-loader": "^9.5.1",
97
+ "ts-node": "^10.9.2",
98
+ "typescript": "^5.6.3",
99
+ "typescript-eslint": "^8.14.0",
100
+ "vinyl-named": "^1.1.0",
101
+ "webpack-stream": "^7.0.0"
102
+ },
103
+ "peerDependencies": {
104
+ "@decaf-ts/db-decorators": "latest",
105
+ "@decaf-ts/decorator-validation": "latest",
106
+ "@decaf-ts/reflection": "latest",
107
+ "reflect-metadata": "^0.2.1"
108
+ }
109
+ }