@siliconst/metaui 1.4.21 → 1.4.37

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 (555) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js +22 -20
  4. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js.map +1 -1
  5. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts +3 -3
  6. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts.map +1 -1
  7. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js +1 -1
  8. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js.map +1 -1
  9. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.ts +24 -16
  10. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js.map +1 -1
  11. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js.map +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.ts +2 -2
  13. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js +111 -0
  14. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js.map +1 -0
  15. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts +95 -0
  16. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts.map +1 -0
  17. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js +2 -0
  18. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js.map +1 -0
  19. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.ts +101 -0
  20. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl-dbg.js.map +1 -1
  21. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.js.map +1 -1
  22. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.ts +1 -1
  23. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer-dbg.js.map +1 -1
  24. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.d.ts.map +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.js.map +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.ts +2 -1
  27. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js +2 -2
  28. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js.map +1 -1
  29. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js +1 -1
  30. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js.map +1 -1
  31. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts +3 -3
  32. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +47 -47
  33. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  34. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +6 -2
  35. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
  37. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +62 -66
  39. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js +0 -9
  40. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js.map +1 -1
  41. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts +0 -9
  42. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts.map +1 -1
  43. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js +1 -1
  44. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js.map +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.ts +3 -9
  46. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js +0 -11
  47. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js.map +1 -1
  48. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts +0 -11
  49. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts.map +1 -1
  50. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js +1 -1
  51. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js.map +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.ts +2 -9
  53. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js +2 -7
  54. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js.map +1 -1
  55. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts +0 -5
  56. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js +1 -1
  58. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js.map +1 -1
  59. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.ts +3 -7
  60. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js +1 -6
  61. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js.map +1 -1
  62. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts +0 -5
  63. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js +1 -1
  65. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js.map +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.ts +9 -12
  67. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +170 -74
  68. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  69. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +29 -4
  70. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  71. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  72. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  73. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +179 -79
  74. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +41 -38
  75. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +5 -3
  77. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  78. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  80. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +46 -38
  81. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +41 -2
  82. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
  83. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +6 -2
  84. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
  85. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
  87. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +47 -2
  88. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate-dbg.js.map +1 -1
  89. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts +1 -1
  90. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts.map +1 -1
  91. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.js.map +1 -1
  92. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.ts +8 -7
  93. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +7 -2
  94. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
  95. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +5 -2
  96. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
  97. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
  99. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +10 -5
  100. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +215 -38
  101. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  102. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +21 -3
  103. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  104. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  105. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  106. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +218 -40
  107. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js +86 -0
  108. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js.map +1 -0
  109. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts +16 -0
  110. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts.map +1 -0
  111. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js +2 -0
  112. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js.map +1 -0
  113. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.ts +82 -0
  114. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js +142 -0
  115. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js.map +1 -0
  116. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts +24 -0
  117. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts.map +1 -0
  118. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js +2 -0
  119. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js.map +1 -0
  120. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts +147 -0
  121. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +8 -0
  122. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -1
  123. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -1
  124. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +1 -1
  125. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -1
  126. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +7 -0
  127. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +153 -50
  128. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  129. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +15 -0
  130. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  131. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  132. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  133. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +164 -53
  134. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js +310 -0
  135. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js.map +1 -0
  136. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts +73 -0
  137. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts.map +1 -0
  138. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js +2 -0
  139. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js.map +1 -0
  140. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.ts +307 -0
  141. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +35 -14
  142. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  143. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  144. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  145. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +40 -15
  147. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +15 -3
  148. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts.map +1 -1
  150. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +1 -1
  151. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -1
  152. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +15 -1
  153. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +82 -16
  154. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  155. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +16 -0
  156. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  157. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js +1 -1
  158. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  159. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +89 -17
  160. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  161. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +12 -1
  162. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  163. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +13 -1
  164. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js +2 -0
  165. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js.map +1 -0
  166. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts +50 -0
  167. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts.map +1 -0
  168. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js +2 -0
  169. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js.map +1 -0
  170. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.ts +49 -0
  171. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  172. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +23 -1
  173. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  174. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +27 -1
  175. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +31 -36
  176. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  177. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
  179. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  180. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +26 -29
  181. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +47 -11
  182. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  183. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  184. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  185. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  186. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +48 -12
  187. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +74 -58
  188. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  189. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js +3 -2
  190. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -1
  191. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -1
  192. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js +1 -1
  193. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -1
  194. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +3 -2
  195. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -1
  196. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -1
  197. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +3 -3
  198. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js +2 -1
  199. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -1
  200. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +1 -1
  201. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js +1 -1
  203. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -1
  204. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.ts +4 -3
  205. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js +2 -2
  206. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js.map +1 -1
  207. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js.map +1 -1
  208. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.ts +2 -2
  209. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js +12 -8
  210. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -1
  211. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -1
  212. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js +1 -1
  213. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -1
  214. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +15 -11
  215. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js +20 -12
  216. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -1
  217. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +4 -4
  218. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -1
  219. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -1
  221. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +24 -16
  222. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js +18 -11
  223. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +4 -4
  225. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -1
  226. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -1
  228. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +22 -15
  229. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +24 -100
  230. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -1
  231. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +8 -72
  232. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -1
  233. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js +1 -1
  234. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -1
  235. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +45 -108
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin-dbg.js.map +1 -1
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.d.ts.map +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.js.map +1 -1
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.ts +2 -1
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +24 -18
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +1 -1
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +23 -21
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +5 -5
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +1 -1
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -1
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +7 -7
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +129 -9
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +46 -10
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +145 -15
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +35 -14
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts +1 -1
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +38 -14
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +4 -4
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  270. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +1 -1
  271. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -1
  272. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
  273. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  274. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +5 -5
  275. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +69 -20
  276. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  277. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +2 -1
  278. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
  279. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
  280. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  281. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +77 -21
  282. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +3 -3
  283. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  284. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts +1 -1
  285. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
  286. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
  287. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  288. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +5 -5
  289. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +3 -3
  290. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  291. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts +1 -1
  292. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
  293. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
  294. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  295. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +5 -5
  296. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js +1 -0
  297. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js.map +1 -1
  298. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts.map +1 -1
  299. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js +1 -1
  300. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js.map +1 -1
  301. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts +6 -5
  302. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +8 -3
  303. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  304. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +1 -1
  305. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
  306. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
  307. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  308. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +10 -5
  309. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js +3 -3
  310. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -1
  311. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts +1 -1
  312. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts.map +1 -1
  313. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +1 -1
  314. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -1
  315. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +4 -4
  316. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +3 -3
  317. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  318. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +1 -1
  319. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
  320. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
  321. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  322. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +5 -5
  323. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +4 -4
  324. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  325. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +1 -1
  326. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
  327. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
  328. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  329. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +5 -5
  330. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js +3 -3
  331. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -1
  332. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts +1 -1
  333. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts.map +1 -1
  334. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +1 -1
  335. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -1
  336. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +4 -4
  337. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
  338. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +1 -1
  339. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
  340. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
  341. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +1 -1
  342. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +7 -6
  343. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
  344. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +1 -1
  345. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
  346. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
  347. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
  348. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +9 -8
  349. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +2 -2
  350. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
  351. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +1 -1
  352. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
  353. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
  354. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
  355. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +3 -3
  356. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +36 -21
  357. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  358. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +1 -1
  359. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
  360. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
  361. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  362. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +40 -23
  363. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +9 -6
  364. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
  365. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +1 -1
  366. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
  367. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
  368. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
  369. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +10 -8
  370. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js +3 -3
  371. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -1
  372. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts +1 -1
  373. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts.map +1 -1
  374. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +1 -1
  375. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -1
  376. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +4 -4
  377. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +3 -3
  378. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  379. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +1 -1
  380. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
  381. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
  382. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  383. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +5 -5
  384. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +29 -12
  385. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -1
  386. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts +5 -1
  387. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -1
  388. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +1 -1
  389. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -1
  390. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +30 -10
  391. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +4 -4
  392. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  393. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +1 -1
  394. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -1
  395. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
  396. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  397. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +5 -5
  398. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +4 -4
  399. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  400. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +1 -1
  401. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -1
  402. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
  403. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  404. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +5 -5
  405. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +3 -3
  406. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  407. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +1 -1
  408. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
  409. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
  410. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  411. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +4 -4
  412. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +3 -3
  413. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
  414. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts +1 -1
  415. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts.map +1 -1
  416. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
  417. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
  418. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +5 -5
  419. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +3 -3
  420. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  421. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +1 -1
  422. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -1
  423. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
  424. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  425. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +4 -4
  426. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +2 -2
  427. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
  428. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts +1 -1
  429. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
  430. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
  431. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
  432. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +3 -3
  433. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +58 -56
  434. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  435. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +2 -5
  436. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
  437. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
  438. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  439. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +66 -55
  440. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +3 -3
  441. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  442. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts +1 -1
  443. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
  444. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
  445. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  446. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +4 -4
  447. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +4 -4
  448. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  449. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +1 -1
  450. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
  451. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
  452. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  453. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +5 -5
  454. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
  455. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.d.ts.map +1 -1
  456. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
  457. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +5 -3
  458. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js +2 -1
  459. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -1
  460. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -1
  461. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js +1 -1
  462. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -1
  463. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +6 -3
  464. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +30 -9
  465. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -1
  466. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +2 -2
  467. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -1
  468. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js +1 -1
  469. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -1
  470. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +41 -13
  471. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
  472. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.d.ts.map +1 -1
  473. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
  474. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +5 -3
  475. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js +41 -0
  476. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js.map +1 -0
  477. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts +24 -0
  478. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts.map +1 -0
  479. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js +2 -0
  480. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js.map +1 -0
  481. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.ts +34 -0
  482. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js +41 -0
  483. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js.map +1 -0
  484. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts +24 -0
  485. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts.map +1 -0
  486. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js +2 -0
  487. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js.map +1 -0
  488. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.ts +34 -0
  489. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js +52 -0
  490. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js.map +1 -0
  491. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts +30 -0
  492. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts.map +1 -0
  493. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js +2 -0
  494. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js.map +1 -0
  495. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.ts +45 -0
  496. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js +52 -0
  497. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js.map +1 -0
  498. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts +30 -0
  499. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts.map +1 -0
  500. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js +2 -0
  501. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js.map +1 -0
  502. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.ts +45 -0
  503. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js +41 -0
  504. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js.map +1 -0
  505. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts +24 -0
  506. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts.map +1 -0
  507. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js +2 -0
  508. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js.map +1 -0
  509. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.ts +34 -0
  510. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js +40 -0
  511. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js.map +1 -0
  512. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts +28 -0
  513. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts.map +1 -0
  514. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js +2 -0
  515. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js.map +1 -0
  516. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.ts +34 -0
  517. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js +40 -0
  518. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js.map +1 -0
  519. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts +28 -0
  520. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts.map +1 -0
  521. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js +2 -0
  522. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js.map +1 -0
  523. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.ts +34 -0
  524. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js +40 -0
  525. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js.map +1 -0
  526. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts +28 -0
  527. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts.map +1 -0
  528. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js +2 -0
  529. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js.map +1 -0
  530. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.ts +34 -0
  531. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js +40 -0
  532. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js.map +1 -0
  533. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts +28 -0
  534. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts.map +1 -0
  535. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js +2 -0
  536. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js.map +1 -0
  537. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.ts +34 -0
  538. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js +33 -0
  539. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js.map +1 -0
  540. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts +14 -0
  541. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts.map +1 -0
  542. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js +2 -0
  543. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js.map +1 -0
  544. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.ts +24 -0
  545. package/src/nz/co/siliconst/ui5/metaui/utils/Logger-dbg.js.map +1 -1
  546. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.d.ts.map +1 -1
  547. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.js.map +1 -1
  548. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.ts +1 -1
  549. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +0 -75
  550. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +0 -1
  551. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +0 -47
  552. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +0 -1
  553. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +0 -2
  554. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +0 -1
  555. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +0 -72
@@ -0,0 +1,142 @@
1
+ sap.ui.define(["./PluginRegistry", "../utils/Logger", "../constants/MetaUIConstants"], function (___PluginRegistry, ___utils_Logger, ___constants_MetaUIConstants) {
2
+ "use strict";
3
+
4
+ /**
5
+ * @file LayoutScorer.ts
6
+ * @description Core utility that calculates the nested footprint score of schemas
7
+ * to determine if they should be rendered inline or overflowed into a dialog button.
8
+ */
9
+ const PluginRegistry = ___PluginRegistry["PluginRegistry"];
10
+ const Logger = ___utils_Logger["Logger"];
11
+ const RENDER_MODE = ___constants_MetaUIConstants["RENDER_MODE"];
12
+ const SCHEMA_TYPE = ___constants_MetaUIConstants["SCHEMA_TYPE"];
13
+ const OPENAPI_PREFIX = ___constants_MetaUIConstants["OPENAPI_PREFIX"];
14
+ const WIDGET_TYPE = ___constants_MetaUIConstants["WIDGET_TYPE"];
15
+ class LayoutScorer {
16
+ /**
17
+ * Recursively computes scores and annotates the schema with `renderMode`.
18
+ *
19
+ * @param schema The normalized schema root.
20
+ * @param budget The remaining layout budget (e.g., 50).
21
+ */
22
+ static apply(schema, budget, schemaDefinitions) {
23
+ if (!schema || budget <= 0) return; // 0 budget means default fallback (no inline budget logic).
24
+
25
+ const visited = new WeakSet();
26
+ const activeRefs = new Set();
27
+
28
+ // We only score the root properties (not the root object itself).
29
+ if (schema.properties) {
30
+ for (const key in schema.properties) {
31
+ const prop = schema.properties[key];
32
+ if (prop.type === SCHEMA_TYPE.OBJECT || prop.type === SCHEMA_TYPE.ARRAY || prop.$ref) {
33
+ this._scoreNode(prop, budget, visited, activeRefs, key, schemaDefinitions);
34
+ }
35
+ }
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Traverses a node, computing its total footprint.
41
+ * If the score > budget, forces `renderMode = "dialog"`.
42
+ * If the score <= budget, forces `renderMode = "inline"`.
43
+ */
44
+ static _scoreNode(node, budget, visited, activeRefs, path, schemaDefinitions) {
45
+ if (!node || typeof node !== SCHEMA_TYPE.OBJECT) return 0;
46
+ if (visited.has(node)) {
47
+ Logger.warn(`[MetaUI LayoutScorer] Circular reference detected at '${path}'. Forcing dialog mode to prevent crash.`, "", "LayoutScorer");
48
+ node.ui = node.ui || {};
49
+ node.ui.renderMode = RENDER_MODE.DIALOG;
50
+ node.ui.layoutBudget = budget;
51
+ return 1; // A dialog button is just 1 unit
52
+ }
53
+ visited.add(node);
54
+ if (node.$ref && schemaDefinitions) {
55
+ let key = node.$ref;
56
+ if (key.startsWith(OPENAPI_PREFIX.DEFINITIONS)) key = key.substring(OPENAPI_PREFIX.DEFINITIONS.length);else if (key.startsWith(OPENAPI_PREFIX.COMPONENTS_SCHEMAS)) key = key.substring(OPENAPI_PREFIX.COMPONENTS_SCHEMAS.length);
57
+ if (activeRefs.has(key)) {
58
+ Logger.warn(`[MetaUI LayoutScorer] Circular OpenAPI $ref detected at '${path}' for '${key}'. Forcing dialog mode to prevent crash.`, "", "LayoutScorer");
59
+ node.ui = node.ui || {};
60
+ node.ui.renderMode = RENDER_MODE.DIALOG;
61
+ return 1;
62
+ }
63
+ const resolvedOriginal = schemaDefinitions[key];
64
+ if (resolvedOriginal) {
65
+ activeRefs.add(key);
66
+
67
+ // Deep clone it BEFORE scoring so we don't mutate the global dictionary
68
+ const resolved = JSON.parse(JSON.stringify(resolvedOriginal));
69
+ const resolvedScore = this._scoreNode(resolved, budget, visited, activeRefs, path, schemaDefinitions);
70
+ activeRefs.delete(key);
71
+ node.ui = node.ui || {};
72
+ node.ui.layoutBudget = budget;
73
+ if (resolvedScore <= budget) {
74
+ // Merge it permanently in the layout!
75
+ Object.assign(node, resolved);
76
+ delete node.$ref;
77
+ if (node.ui?.widget === WIDGET_TYPE.REFERENCE) delete node.ui.widget;
78
+ node.ui.renderMode = RENDER_MODE.INLINE;
79
+ visited.delete(node);
80
+ return resolvedScore;
81
+ } else {
82
+ node.ui.renderMode = RENDER_MODE.DIALOG;
83
+ visited.delete(node);
84
+ return 1;
85
+ }
86
+ }
87
+ }
88
+ if (node.type === SCHEMA_TYPE.ARRAY) {
89
+ let arrayScore = PluginRegistry.getInstance().getPluginScore(SCHEMA_TYPE.ARRAY, node.ui?.widget);
90
+
91
+ // Traverse array items!
92
+ if (node.items) {
93
+ const itemsSchema = node.items;
94
+ if (itemsSchema.type === SCHEMA_TYPE.OBJECT || itemsSchema.type === SCHEMA_TYPE.ARRAY || itemsSchema.$ref) {
95
+ arrayScore += this._scoreNode(itemsSchema, budget, visited, activeRefs, `${path}/items`, schemaDefinitions);
96
+ }
97
+ }
98
+ node.ui = node.ui || {};
99
+ node.ui.layoutBudget = budget;
100
+ if (arrayScore <= budget) {
101
+ node.ui.renderMode = RENDER_MODE.INLINE;
102
+ visited.delete(node);
103
+ return arrayScore;
104
+ } else {
105
+ node.ui.renderMode = RENDER_MODE.DIALOG;
106
+ visited.delete(node);
107
+ return 1;
108
+ }
109
+ }
110
+ let totalScore = 0;
111
+ if (node.properties) {
112
+ for (const key in node.properties) {
113
+ const child = node.properties[key];
114
+ if (child.type === SCHEMA_TYPE.OBJECT || child.type === SCHEMA_TYPE.ARRAY || child.$ref) {
115
+ totalScore += this._scoreNode(child, budget, visited, activeRefs, `${path}/${key}`, schemaDefinitions);
116
+ } else {
117
+ totalScore += PluginRegistry.getInstance().getPluginScore(child.type || SCHEMA_TYPE.STRING, child.ui?.widget);
118
+ }
119
+ }
120
+ } else {
121
+ // An open dictionary (additionalProperties) is scored as a single table
122
+ totalScore += PluginRegistry.getInstance().getPluginScore(SCHEMA_TYPE.OBJECT, node.ui?.widget); // e.g. dictionaryMap
123
+ }
124
+ node.ui = node.ui || {};
125
+ node.ui.layoutBudget = budget;
126
+ visited.delete(node);
127
+ if (totalScore <= budget) {
128
+ node.ui.renderMode = RENDER_MODE.INLINE;
129
+ return totalScore;
130
+ } else {
131
+ node.ui.renderMode = RENDER_MODE.DIALOG;
132
+ return 1; // It collapsed into an "Edit Details" button
133
+ }
134
+ }
135
+ }
136
+ var __exports = {
137
+ __esModule: true
138
+ };
139
+ __exports.LayoutScorer = LayoutScorer;
140
+ return __exports;
141
+ });
142
+ //# sourceMappingURL=LayoutScorer-dbg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutScorer-dbg.js","names":["PluginRegistry","___PluginRegistry","Logger","___utils_Logger","RENDER_MODE","___constants_MetaUIConstants","SCHEMA_TYPE","OPENAPI_PREFIX","WIDGET_TYPE","LayoutScorer","apply","schema","budget","schemaDefinitions","visited","WeakSet","activeRefs","Set","properties","key","prop","type","OBJECT","ARRAY","$ref","_scoreNode","node","path","has","warn","ui","renderMode","DIALOG","layoutBudget","add","startsWith","DEFINITIONS","substring","length","COMPONENTS_SCHEMAS","resolvedOriginal","resolved","JSON","parse","stringify","resolvedScore","delete","Object","assign","widget","REFERENCE","INLINE","arrayScore","getInstance","getPluginScore","items","itemsSchema","totalScore","child","STRING","__exports","__esModule"],"sources":["LayoutScorer.ts"],"sourcesContent":["/**\n * @file LayoutScorer.ts\n * @description Core utility that calculates the nested footprint score of schemas \n * to determine if they should be rendered inline or overflowed into a dialog button.\n */\n\nimport { ISchema, IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { PluginRegistry } from \"./PluginRegistry\";\nimport { Logger } from \"../utils/Logger\";\nimport { RENDER_MODE, SCHEMA_TYPE, OPENAPI_PREFIX, WIDGET_TYPE } from \"../constants/MetaUIConstants\";\n\nexport class LayoutScorer {\n /**\n * Recursively computes scores and annotates the schema with `renderMode`.\n * \n * @param schema The normalized schema root.\n * @param budget The remaining layout budget (e.g., 50).\n */\n public static apply(schema: ISchema | null, budget: number, schemaDefinitions?: Record<string, ISchema>): void {\n if (!schema || budget <= 0) return; // 0 budget means default fallback (no inline budget logic).\n\n const visited = new WeakSet<object>();\n const activeRefs = new Set<string>();\n\n // We only score the root properties (not the root object itself).\n if (schema.properties) {\n for (const key in schema.properties) {\n const prop = schema.properties[key];\n if (prop.type === SCHEMA_TYPE.OBJECT || prop.type === SCHEMA_TYPE.ARRAY || prop.$ref) {\n this._scoreNode(prop, budget, visited, activeRefs, key, schemaDefinitions);\n }\n }\n }\n }\n\n /**\n * Traverses a node, computing its total footprint.\n * If the score > budget, forces `renderMode = \"dialog\"`.\n * If the score <= budget, forces `renderMode = \"inline\"`.\n */\n private static _scoreNode(node: IPropertyMetadata, budget: number, visited: WeakSet<object>, activeRefs: Set<string>, path: string, schemaDefinitions?: Record<string, ISchema>): number {\n if (!node || typeof node !== SCHEMA_TYPE.OBJECT) return 0;\n\n if (visited.has(node)) {\n Logger.warn(`[MetaUI LayoutScorer] Circular reference detected at '${path}'. Forcing dialog mode to prevent crash.`, \"\", \"LayoutScorer\");\n node.ui = node.ui || {};\n node.ui.renderMode = RENDER_MODE.DIALOG;\n node.ui.layoutBudget = budget;\n return 1; // A dialog button is just 1 unit\n }\n visited.add(node);\n\n if (node.$ref && schemaDefinitions) {\n let key = node.$ref;\n if (key.startsWith(OPENAPI_PREFIX.DEFINITIONS)) key = key.substring(OPENAPI_PREFIX.DEFINITIONS.length);\n else if (key.startsWith(OPENAPI_PREFIX.COMPONENTS_SCHEMAS)) key = key.substring(OPENAPI_PREFIX.COMPONENTS_SCHEMAS.length);\n\n if (activeRefs.has(key)) {\n Logger.warn(`[MetaUI LayoutScorer] Circular OpenAPI $ref detected at '${path}' for '${key}'. Forcing dialog mode to prevent crash.`, \"\", \"LayoutScorer\");\n node.ui = node.ui || {};\n node.ui.renderMode = RENDER_MODE.DIALOG;\n return 1;\n }\n\n const resolvedOriginal = schemaDefinitions[key];\n if (resolvedOriginal) {\n activeRefs.add(key);\n \n // Deep clone it BEFORE scoring so we don't mutate the global dictionary\n const resolved = JSON.parse(JSON.stringify(resolvedOriginal));\n \n const resolvedScore = this._scoreNode(resolved, budget, visited, activeRefs, path, schemaDefinitions);\n activeRefs.delete(key);\n \n node.ui = node.ui || {};\n node.ui.layoutBudget = budget;\n if (resolvedScore <= budget) {\n // Merge it permanently in the layout!\n Object.assign(node, resolved);\n delete node.$ref;\n if (node.ui?.widget === WIDGET_TYPE.REFERENCE) delete node.ui.widget;\n \n node.ui.renderMode = RENDER_MODE.INLINE;\n visited.delete(node);\n return resolvedScore;\n } else {\n node.ui.renderMode = RENDER_MODE.DIALOG;\n visited.delete(node);\n return 1;\n }\n }\n }\n\n if (node.type === SCHEMA_TYPE.ARRAY) {\n let arrayScore = PluginRegistry.getInstance().getPluginScore(SCHEMA_TYPE.ARRAY, node.ui?.widget);\n \n // Traverse array items!\n if (node.items) {\n const itemsSchema = node.items as ISchema;\n if (itemsSchema.type === SCHEMA_TYPE.OBJECT || itemsSchema.type === SCHEMA_TYPE.ARRAY || itemsSchema.$ref) {\n arrayScore += this._scoreNode(itemsSchema, budget, visited, activeRefs, `${path}/items`, schemaDefinitions);\n }\n }\n\n node.ui = node.ui || {};\n node.ui.layoutBudget = budget;\n if (arrayScore <= budget) {\n node.ui.renderMode = RENDER_MODE.INLINE;\n visited.delete(node);\n return arrayScore;\n } else {\n node.ui.renderMode = RENDER_MODE.DIALOG;\n visited.delete(node);\n return 1;\n }\n }\n\n let totalScore = 0;\n\n if (node.properties) {\n for (const key in node.properties) {\n const child = node.properties[key] as IPropertyMetadata;\n if (child.type === SCHEMA_TYPE.OBJECT || child.type === SCHEMA_TYPE.ARRAY || child.$ref) {\n totalScore += this._scoreNode(child, budget, visited, activeRefs, `${path}/${key}`, schemaDefinitions);\n } else {\n totalScore += PluginRegistry.getInstance().getPluginScore(child.type || SCHEMA_TYPE.STRING, child.ui?.widget);\n }\n }\n } else {\n // An open dictionary (additionalProperties) is scored as a single table\n totalScore += PluginRegistry.getInstance().getPluginScore(SCHEMA_TYPE.OBJECT, node.ui?.widget); // e.g. dictionaryMap\n }\n\n node.ui = node.ui || {};\n node.ui.layoutBudget = budget;\n \n visited.delete(node);\n\n if (totalScore <= budget) {\n node.ui.renderMode = RENDER_MODE.INLINE;\n return totalScore;\n } else {\n node.ui.renderMode = RENDER_MODE.DIALOG;\n return 1; // It collapsed into an \"Edit Details\" button\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ declare module "nz/co/siliconst/ui5/metaui/core/LayoutScorer" {
2
+ /**
3
+ * @file LayoutScorer.ts
4
+ * @description Core utility that calculates the nested footprint score of schemas
5
+ * to determine if they should be rendered inline or overflowed into a dialog button.
6
+ */
7
+ import { ISchema } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
8
+ export class LayoutScorer {
9
+ /**
10
+ * Recursively computes scores and annotates the schema with `renderMode`.
11
+ *
12
+ * @param schema The normalized schema root.
13
+ * @param budget The remaining layout budget (e.g., 50).
14
+ */
15
+ static apply(schema: ISchema | null, budget: number, schemaDefinitions?: Record<string, ISchema>): void;
16
+ /**
17
+ * Traverses a node, computing its total footprint.
18
+ * If the score > budget, forces `renderMode = "dialog"`.
19
+ * If the score <= budget, forces `renderMode = "inline"`.
20
+ */
21
+ private static _scoreNode;
22
+ }
23
+ }
24
+ //# sourceMappingURL=LayoutScorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutScorer.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,8CAA8C,CAAC;IAC9D;;;;OAIG;IAEH,OAAO,EAAE,OAAO,EAAqB,MAAM,+CAA+C,CAAC;IAK3F,MAAa,YAAY;QACrB;;;;;WAKG;eACW,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;QAiB9G;;;;WAIG;QACH,OAAO,CAAC,MAAM,CAAC,UAAU;KA0G5B;CAEA"}
@@ -0,0 +1,2 @@
1
+ sap.ui.define(["./PluginRegistry","../utils/Logger","../constants/MetaUIConstants"],function(e,t,r){"use strict";const i=e["PluginRegistry"];const o=t["Logger"];const s=r["RENDER_MODE"];const n=r["SCHEMA_TYPE"];const u=r["OPENAPI_PREFIX"];const d=r["WIDGET_TYPE"];class c{static apply(e,t,r){if(!e||t<=0)return;const i=new WeakSet;const o=new Set;if(e.properties){for(const s in e.properties){const u=e.properties[s];if(u.type===n.OBJECT||u.type===n.ARRAY||u.$ref){this._scoreNode(u,t,i,o,s,r)}}}}static _scoreNode(e,t,r,c,a,g){if(!e||typeof e!==n.OBJECT)return 0;if(r.has(e)){o.warn(`[MetaUI LayoutScorer] Circular reference detected at '${a}'. Forcing dialog mode to prevent crash.`,"","LayoutScorer");e.ui=e.ui||{};e.ui.renderMode=s.DIALOG;e.ui.layoutBudget=t;return 1}r.add(e);if(e.$ref&&g){let i=e.$ref;if(i.startsWith(u.DEFINITIONS))i=i.substring(u.DEFINITIONS.length);else if(i.startsWith(u.COMPONENTS_SCHEMAS))i=i.substring(u.COMPONENTS_SCHEMAS.length);if(c.has(i)){o.warn(`[MetaUI LayoutScorer] Circular OpenAPI $ref detected at '${a}' for '${i}'. Forcing dialog mode to prevent crash.`,"","LayoutScorer");e.ui=e.ui||{};e.ui.renderMode=s.DIALOG;return 1}const n=g[i];if(n){c.add(i);const o=JSON.parse(JSON.stringify(n));const u=this._scoreNode(o,t,r,c,a,g);c.delete(i);e.ui=e.ui||{};e.ui.layoutBudget=t;if(u<=t){Object.assign(e,o);delete e.$ref;if(e.ui?.widget===d.REFERENCE)delete e.ui.widget;e.ui.renderMode=s.INLINE;r.delete(e);return u}else{e.ui.renderMode=s.DIALOG;r.delete(e);return 1}}}if(e.type===n.ARRAY){let o=i.getInstance().getPluginScore(n.ARRAY,e.ui?.widget);if(e.items){const i=e.items;if(i.type===n.OBJECT||i.type===n.ARRAY||i.$ref){o+=this._scoreNode(i,t,r,c,`${a}/items`,g)}}e.ui=e.ui||{};e.ui.layoutBudget=t;if(o<=t){e.ui.renderMode=s.INLINE;r.delete(e);return o}else{e.ui.renderMode=s.DIALOG;r.delete(e);return 1}}let l=0;if(e.properties){for(const o in e.properties){const s=e.properties[o];if(s.type===n.OBJECT||s.type===n.ARRAY||s.$ref){l+=this._scoreNode(s,t,r,c,`${a}/${o}`,g)}else{l+=i.getInstance().getPluginScore(s.type||n.STRING,s.ui?.widget)}}}else{l+=i.getInstance().getPluginScore(n.OBJECT,e.ui?.widget)}e.ui=e.ui||{};e.ui.layoutBudget=t;r.delete(e);if(l<=t){e.ui.renderMode=s.INLINE;return l}else{e.ui.renderMode=s.DIALOG;return 1}}}var a={__esModule:true};a.LayoutScorer=c;return a});
2
+ //# sourceMappingURL=LayoutScorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutScorer.js","names":["PluginRegistry","___PluginRegistry","Logger","___utils_Logger","RENDER_MODE","___constants_MetaUIConstants","SCHEMA_TYPE","OPENAPI_PREFIX","WIDGET_TYPE","LayoutScorer","apply","schema","budget","schemaDefinitions","visited","WeakSet","activeRefs","Set","properties","key","prop","type","OBJECT","ARRAY","$ref","this","_scoreNode","node","path","has","warn","ui","renderMode","DIALOG","layoutBudget","add","startsWith","DEFINITIONS","substring","length","COMPONENTS_SCHEMAS","resolvedOriginal","resolved","JSON","parse","stringify","resolvedScore","delete","Object","assign","widget","REFERENCE","INLINE","arrayScore","getInstance","getPluginScore","items","itemsSchema","totalScore","child","STRING","__exports","__esModule"],"sources":["LayoutScorer.ts"],"sourcesContent":["/**\n * @file LayoutScorer.ts\n * @description Core utility that calculates the nested footprint score of schemas \n * to determine if they should be rendered inline or overflowed into a dialog button.\n */\n\nimport { ISchema, IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { PluginRegistry } from \"./PluginRegistry\";\nimport { Logger } from \"../utils/Logger\";\nimport { RENDER_MODE, SCHEMA_TYPE, OPENAPI_PREFIX, WIDGET_TYPE } from \"../constants/MetaUIConstants\";\n\nexport class LayoutScorer {\n /**\n * Recursively computes scores and annotates the schema with `renderMode`.\n * \n * @param schema The normalized schema root.\n * @param budget The remaining layout budget (e.g., 50).\n */\n public static apply(schema: ISchema | null, budget: number, schemaDefinitions?: Record<string, ISchema>): void {\n if (!schema || budget <= 0) return; // 0 budget means default fallback (no inline budget logic).\n\n const visited = new WeakSet<object>();\n const activeRefs = new Set<string>();\n\n // We only score the root properties (not the root object itself).\n if (schema.properties) {\n for (const key in schema.properties) {\n const prop = schema.properties[key];\n if (prop.type === SCHEMA_TYPE.OBJECT || prop.type === SCHEMA_TYPE.ARRAY || prop.$ref) {\n this._scoreNode(prop, budget, visited, activeRefs, key, schemaDefinitions);\n }\n }\n }\n }\n\n /**\n * Traverses a node, computing its total footprint.\n * If the score > budget, forces `renderMode = \"dialog\"`.\n * If the score <= budget, forces `renderMode = \"inline\"`.\n */\n private static _scoreNode(node: IPropertyMetadata, budget: number, visited: WeakSet<object>, activeRefs: Set<string>, path: string, schemaDefinitions?: Record<string, ISchema>): number {\n if (!node || typeof node !== SCHEMA_TYPE.OBJECT) return 0;\n\n if (visited.has(node)) {\n Logger.warn(`[MetaUI LayoutScorer] Circular reference detected at '${path}'. Forcing dialog mode to prevent crash.`, \"\", \"LayoutScorer\");\n node.ui = node.ui || {};\n node.ui.renderMode = RENDER_MODE.DIALOG;\n node.ui.layoutBudget = budget;\n return 1; // A dialog button is just 1 unit\n }\n visited.add(node);\n\n if (node.$ref && schemaDefinitions) {\n let key = node.$ref;\n if (key.startsWith(OPENAPI_PREFIX.DEFINITIONS)) key = key.substring(OPENAPI_PREFIX.DEFINITIONS.length);\n else if (key.startsWith(OPENAPI_PREFIX.COMPONENTS_SCHEMAS)) key = key.substring(OPENAPI_PREFIX.COMPONENTS_SCHEMAS.length);\n\n if (activeRefs.has(key)) {\n Logger.warn(`[MetaUI LayoutScorer] Circular OpenAPI $ref detected at '${path}' for '${key}'. Forcing dialog mode to prevent crash.`, \"\", \"LayoutScorer\");\n node.ui = node.ui || {};\n node.ui.renderMode = RENDER_MODE.DIALOG;\n return 1;\n }\n\n const resolvedOriginal = schemaDefinitions[key];\n if (resolvedOriginal) {\n activeRefs.add(key);\n \n // Deep clone it BEFORE scoring so we don't mutate the global dictionary\n const resolved = JSON.parse(JSON.stringify(resolvedOriginal));\n \n const resolvedScore = this._scoreNode(resolved, budget, visited, activeRefs, path, schemaDefinitions);\n activeRefs.delete(key);\n \n node.ui = node.ui || {};\n node.ui.layoutBudget = budget;\n if (resolvedScore <= budget) {\n // Merge it permanently in the layout!\n Object.assign(node, resolved);\n delete node.$ref;\n if (node.ui?.widget === WIDGET_TYPE.REFERENCE) delete node.ui.widget;\n \n node.ui.renderMode = RENDER_MODE.INLINE;\n visited.delete(node);\n return resolvedScore;\n } else {\n node.ui.renderMode = RENDER_MODE.DIALOG;\n visited.delete(node);\n return 1;\n }\n }\n }\n\n if (node.type === SCHEMA_TYPE.ARRAY) {\n let arrayScore = PluginRegistry.getInstance().getPluginScore(SCHEMA_TYPE.ARRAY, node.ui?.widget);\n \n // Traverse array items!\n if (node.items) {\n const itemsSchema = node.items as ISchema;\n if (itemsSchema.type === SCHEMA_TYPE.OBJECT || itemsSchema.type === SCHEMA_TYPE.ARRAY || itemsSchema.$ref) {\n arrayScore += this._scoreNode(itemsSchema, budget, visited, activeRefs, `${path}/items`, schemaDefinitions);\n }\n }\n\n node.ui = node.ui || {};\n node.ui.layoutBudget = budget;\n if (arrayScore <= budget) {\n node.ui.renderMode = RENDER_MODE.INLINE;\n visited.delete(node);\n return arrayScore;\n } else {\n node.ui.renderMode = RENDER_MODE.DIALOG;\n visited.delete(node);\n return 1;\n }\n }\n\n let totalScore = 0;\n\n if (node.properties) {\n for (const key in node.properties) {\n const child = node.properties[key] as IPropertyMetadata;\n if (child.type === SCHEMA_TYPE.OBJECT || child.type === SCHEMA_TYPE.ARRAY || child.$ref) {\n totalScore += this._scoreNode(child, budget, visited, activeRefs, `${path}/${key}`, schemaDefinitions);\n } else {\n totalScore += PluginRegistry.getInstance().getPluginScore(child.type || SCHEMA_TYPE.STRING, child.ui?.widget);\n }\n }\n } else {\n // An open dictionary (additionalProperties) is scored as a single table\n totalScore += PluginRegistry.getInstance().getPluginScore(SCHEMA_TYPE.OBJECT, node.ui?.widget); // e.g. dictionaryMap\n }\n\n node.ui = node.ui || {};\n node.ui.layoutBudget = budget;\n \n visited.delete(node);\n\n if (totalScore <= budget) {\n node.ui.renderMode = RENDER_MODE.INLINE;\n return totalScore;\n } else {\n node.ui.renderMode = RENDER_MODE.DIALOG;\n return 1; // It collapsed into an \"Edit Details\" button\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * @file LayoutScorer.ts
3
+ * @description Core utility that calculates the nested footprint score of schemas
4
+ * to determine if they should be rendered inline or overflowed into a dialog button.
5
+ */
6
+
7
+ import { ISchema, IPropertyMetadata } from "../interfaces/ISchema";
8
+ import { PluginRegistry } from "./PluginRegistry";
9
+ import { Logger } from "../utils/Logger";
10
+ import { RENDER_MODE, SCHEMA_TYPE, OPENAPI_PREFIX, WIDGET_TYPE } from "../constants/MetaUIConstants";
11
+
12
+ export class LayoutScorer {
13
+ /**
14
+ * Recursively computes scores and annotates the schema with `renderMode`.
15
+ *
16
+ * @param schema The normalized schema root.
17
+ * @param budget The remaining layout budget (e.g., 50).
18
+ */
19
+ public static apply(schema: ISchema | null, budget: number, schemaDefinitions?: Record<string, ISchema>): void {
20
+ if (!schema || budget <= 0) return; // 0 budget means default fallback (no inline budget logic).
21
+
22
+ const visited = new WeakSet<object>();
23
+ const activeRefs = new Set<string>();
24
+
25
+ // We only score the root properties (not the root object itself).
26
+ if (schema.properties) {
27
+ for (const key in schema.properties) {
28
+ const prop = schema.properties[key];
29
+ if (prop.type === SCHEMA_TYPE.OBJECT || prop.type === SCHEMA_TYPE.ARRAY || prop.$ref) {
30
+ this._scoreNode(prop, budget, visited, activeRefs, key, schemaDefinitions);
31
+ }
32
+ }
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Traverses a node, computing its total footprint.
38
+ * If the score > budget, forces `renderMode = "dialog"`.
39
+ * If the score <= budget, forces `renderMode = "inline"`.
40
+ */
41
+ private static _scoreNode(node: IPropertyMetadata, budget: number, visited: WeakSet<object>, activeRefs: Set<string>, path: string, schemaDefinitions?: Record<string, ISchema>): number {
42
+ if (!node || typeof node !== SCHEMA_TYPE.OBJECT) return 0;
43
+
44
+ if (visited.has(node)) {
45
+ Logger.warn(`[MetaUI LayoutScorer] Circular reference detected at '${path}'. Forcing dialog mode to prevent crash.`, "", "LayoutScorer");
46
+ node.ui = node.ui || {};
47
+ node.ui.renderMode = RENDER_MODE.DIALOG;
48
+ node.ui.layoutBudget = budget;
49
+ return 1; // A dialog button is just 1 unit
50
+ }
51
+ visited.add(node);
52
+
53
+ if (node.$ref && schemaDefinitions) {
54
+ let key = node.$ref;
55
+ if (key.startsWith(OPENAPI_PREFIX.DEFINITIONS)) key = key.substring(OPENAPI_PREFIX.DEFINITIONS.length);
56
+ else if (key.startsWith(OPENAPI_PREFIX.COMPONENTS_SCHEMAS)) key = key.substring(OPENAPI_PREFIX.COMPONENTS_SCHEMAS.length);
57
+
58
+ if (activeRefs.has(key)) {
59
+ Logger.warn(`[MetaUI LayoutScorer] Circular OpenAPI $ref detected at '${path}' for '${key}'. Forcing dialog mode to prevent crash.`, "", "LayoutScorer");
60
+ node.ui = node.ui || {};
61
+ node.ui.renderMode = RENDER_MODE.DIALOG;
62
+ return 1;
63
+ }
64
+
65
+ const resolvedOriginal = schemaDefinitions[key];
66
+ if (resolvedOriginal) {
67
+ activeRefs.add(key);
68
+
69
+ // Deep clone it BEFORE scoring so we don't mutate the global dictionary
70
+ const resolved = JSON.parse(JSON.stringify(resolvedOriginal));
71
+
72
+ const resolvedScore = this._scoreNode(resolved, budget, visited, activeRefs, path, schemaDefinitions);
73
+ activeRefs.delete(key);
74
+
75
+ node.ui = node.ui || {};
76
+ node.ui.layoutBudget = budget;
77
+ if (resolvedScore <= budget) {
78
+ // Merge it permanently in the layout!
79
+ Object.assign(node, resolved);
80
+ delete node.$ref;
81
+ if (node.ui?.widget === WIDGET_TYPE.REFERENCE) delete node.ui.widget;
82
+
83
+ node.ui.renderMode = RENDER_MODE.INLINE;
84
+ visited.delete(node);
85
+ return resolvedScore;
86
+ } else {
87
+ node.ui.renderMode = RENDER_MODE.DIALOG;
88
+ visited.delete(node);
89
+ return 1;
90
+ }
91
+ }
92
+ }
93
+
94
+ if (node.type === SCHEMA_TYPE.ARRAY) {
95
+ let arrayScore = PluginRegistry.getInstance().getPluginScore(SCHEMA_TYPE.ARRAY, node.ui?.widget);
96
+
97
+ // Traverse array items!
98
+ if (node.items) {
99
+ const itemsSchema = node.items as ISchema;
100
+ if (itemsSchema.type === SCHEMA_TYPE.OBJECT || itemsSchema.type === SCHEMA_TYPE.ARRAY || itemsSchema.$ref) {
101
+ arrayScore += this._scoreNode(itemsSchema, budget, visited, activeRefs, `${path}/items`, schemaDefinitions);
102
+ }
103
+ }
104
+
105
+ node.ui = node.ui || {};
106
+ node.ui.layoutBudget = budget;
107
+ if (arrayScore <= budget) {
108
+ node.ui.renderMode = RENDER_MODE.INLINE;
109
+ visited.delete(node);
110
+ return arrayScore;
111
+ } else {
112
+ node.ui.renderMode = RENDER_MODE.DIALOG;
113
+ visited.delete(node);
114
+ return 1;
115
+ }
116
+ }
117
+
118
+ let totalScore = 0;
119
+
120
+ if (node.properties) {
121
+ for (const key in node.properties) {
122
+ const child = node.properties[key] as IPropertyMetadata;
123
+ if (child.type === SCHEMA_TYPE.OBJECT || child.type === SCHEMA_TYPE.ARRAY || child.$ref) {
124
+ totalScore += this._scoreNode(child, budget, visited, activeRefs, `${path}/${key}`, schemaDefinitions);
125
+ } else {
126
+ totalScore += PluginRegistry.getInstance().getPluginScore(child.type || SCHEMA_TYPE.STRING, child.ui?.widget);
127
+ }
128
+ }
129
+ } else {
130
+ // An open dictionary (additionalProperties) is scored as a single table
131
+ totalScore += PluginRegistry.getInstance().getPluginScore(SCHEMA_TYPE.OBJECT, node.ui?.widget); // e.g. dictionaryMap
132
+ }
133
+
134
+ node.ui = node.ui || {};
135
+ node.ui.layoutBudget = budget;
136
+
137
+ visited.delete(node);
138
+
139
+ if (totalScore <= budget) {
140
+ node.ui.renderMode = RENDER_MODE.INLINE;
141
+ return totalScore;
142
+ } else {
143
+ node.ui.renderMode = RENDER_MODE.DIALOG;
144
+ return 1; // It collapsed into an "Edit Details" button
145
+ }
146
+ }
147
+ }
@@ -95,6 +95,14 @@ sap.ui.define(["./Registry", "../plugins/validators/PatternValidatorPlugin", "..
95
95
  * @returns {IValidationResult} The final result state and any associated error message.
96
96
  */
97
97
  executeValidation(parsedValue, requestedValidators, argsMap) {
98
+ // Global short-circuit: if the field is completely empty and NOT required, skip all downstream string constraint checks.
99
+ const isEmpty = parsedValue === null || parsedValue === undefined || parsedValue === "";
100
+ const isRequired = requestedValidators.includes("required");
101
+ if (isEmpty && !isRequired) {
102
+ return {
103
+ isValid: true
104
+ };
105
+ }
98
106
  for (const rule of requestedValidators) {
99
107
  const validator = this.validators.get(rule);
100
108
  if (validator) {
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineManager-dbg.js","names":["Registry","___Registry","PatternValidatorPlugin","___plugins_validators_PatternValidatorPlugin","MinLengthValidatorPlugin","___plugins_validators_MinLengthValidatorPlugin","RangeValidatorPlugin","___plugins_validators_RangeValidatorPlugin","UrlValidatorPlugin","___plugins_validators_UrlValidatorPlugin","IbanValidatorPlugin","___plugins_validators_IbanValidatorPlugin","EmailValidatorPlugin","___plugins_validators_EmailValidatorPlugin","DateFormatterPlugin","___plugins_formatters_DateFormatterPlugin","PhoneFormatterPlugin","___plugins_formatters_PhoneFormatterPlugin","TextCaseFormatterPlugin","___plugins_formatters_TextCaseFormatterPlugin","Logger","___utils_Logger","RequiredValidator","validate","parsedValue","args","undefined","isValid","errorMessage","MaxLengthValidator","length","PipelineManager","formatters","parsers","validators","constructor","register","executeValidation","requestedValidators","argsMap","rule","validator","get","result","error","msg","message","warn","GlobalPipeline","__exports","__esModule"],"sources":["PipelineManager.ts"],"sourcesContent":["/**\n * @file PipelineManager.ts\n * @description Central manager for the data manipulation pipeline. \n * Orchestrates Formatting, Parsing, and Validating data using the generic Registry.\n */\n\nimport { Registry } from \"./Registry\";\nimport { IFormatter, IParser, IValidator, IValidationResult } from \"../interfaces/IPipeline\";\nimport { PatternValidatorPlugin } from \"../plugins/validators/PatternValidatorPlugin\";\nimport { MinLengthValidatorPlugin } from \"../plugins/validators/MinLengthValidatorPlugin\";\nimport { RangeValidatorPlugin } from \"../plugins/validators/RangeValidatorPlugin\";\nimport { UrlValidatorPlugin } from \"../plugins/validators/UrlValidatorPlugin\";\nimport { IbanValidatorPlugin } from \"../plugins/validators/IbanValidatorPlugin\";\nimport { EmailValidatorPlugin } from \"../plugins/validators/EmailValidatorPlugin\";\nimport { DateFormatterPlugin } from \"../plugins/formatters/DateFormatterPlugin\";\nimport { PhoneFormatterPlugin } from \"../plugins/formatters/PhoneFormatterPlugin\";\nimport { TextCaseFormatterPlugin } from \"../plugins/formatters/TextCaseFormatterPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\n// --- Built-in Default Validators ---\n/** Internal rule for required fields. */\nclass RequiredValidator implements IValidator {\n /** Validates that the value is not null, undefined, or empty string. */\n validate(parsedValue: unknown, args?: unknown): IValidationResult {\n if (parsedValue === null || parsedValue === undefined || parsedValue === \"\") {\n return { isValid: false, errorMessage: \"This field is required.\" };\n }\n return { isValid: true };\n }\n}\n\n/** Internal rule for string maximum length. */\nclass MaxLengthValidator implements IValidator {\n /** Validates that a string does not exceed the provided argument length. */\n validate(parsedValue: unknown, args?: unknown): IValidationResult {\n if (typeof parsedValue === \"string\" && args && typeof args === \"number\") {\n if (parsedValue.length > args) {\n return { isValid: false, errorMessage: `Maximum length is ${args} characters.` };\n }\n }\n return { isValid: true };\n }\n}\n\n\n/**\n * The core engine responsible for marshalling data through the validation, formatting, and parsing phases.\n * Pluggable design allows new validators to be registered dynamically.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class PipelineManager {\n /** Registry of data formatters applied before pushing to the UI. */\n public readonly formatters: Registry<IFormatter> = new Registry<IFormatter>(\"Formatters\");\n /** Registry of data parsers applied when pulling data from the UI. */\n public readonly parsers: Registry<IParser> = new Registry<IParser>(\"Parsers\");\n /** Registry of business logic validators. */\n public readonly validators: Registry<IValidator> = new Registry<IValidator>(\"Validators\");\n\n /**\n * Bootstraps the PipelineManager with default validators (required, maxLength, email).\n */\n constructor() {\n // Register default validators\n this.validators.register(\"required\", new RequiredValidator());\n this.validators.register(\"maxLength\", new MaxLengthValidator());\n this.validators.register(\"pattern\", new PatternValidatorPlugin());\n this.validators.register(\"minLength\", new MinLengthValidatorPlugin());\n this.validators.register(\"range\", new RangeValidatorPlugin());\n this.validators.register(\"url\", new UrlValidatorPlugin());\n this.validators.register(\"iban\", new IbanValidatorPlugin());\n this.validators.register(\"email\", new EmailValidatorPlugin());\n\n // Register default formatters\n this.formatters.register(\"date\", new DateFormatterPlugin());\n this.formatters.register(\"phone\", new PhoneFormatterPlugin());\n this.formatters.register(\"textCase\", new TextCaseFormatterPlugin());\n }\n\n /**\n * Executes the validation pipeline sequentially. Fails fast on the first encountered error.\n * \n * @param parsedValue The raw extracted value from the UI control.\n * @param requestedValidators Array of validation rule keys (e.g. ['required', 'email']).\n * @param argsMap Optional map of parameters required by specific rules (e.g. { maxLength: 50 }).\n * @returns {IValidationResult} The final result state and any associated error message.\n */\n public executeValidation(parsedValue: unknown, requestedValidators: string[], argsMap?: Record<string, unknown>): IValidationResult {\n for (const rule of requestedValidators) {\n const validator = this.validators.get(rule);\n if (validator) {\n const args = argsMap ? argsMap[rule] : undefined;\n try {\n const result = validator.validate(parsedValue, args);\n if (!result.isValid) {\n return result; // Fast fail on first error\n }\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI] PipelineManager: Validator '${rule}' crashed during execution.`, msg);\n return { isValid: false, errorMessage: `System validation error: ${msg}` };\n }\n } else {\n Logger.warn(`[MetaUI] PipelineManager: Requested validator '${rule}' not found in registry.`);\n }\n }\n return { isValid: true };\n }\n}\n\n/** \n * Singleton instance for global access to the active validation pipeline. \n * @public \n */\nexport const GlobalPipeline = new PipelineManager();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PipelineManager-dbg.js","names":["Registry","___Registry","PatternValidatorPlugin","___plugins_validators_PatternValidatorPlugin","MinLengthValidatorPlugin","___plugins_validators_MinLengthValidatorPlugin","RangeValidatorPlugin","___plugins_validators_RangeValidatorPlugin","UrlValidatorPlugin","___plugins_validators_UrlValidatorPlugin","IbanValidatorPlugin","___plugins_validators_IbanValidatorPlugin","EmailValidatorPlugin","___plugins_validators_EmailValidatorPlugin","DateFormatterPlugin","___plugins_formatters_DateFormatterPlugin","PhoneFormatterPlugin","___plugins_formatters_PhoneFormatterPlugin","TextCaseFormatterPlugin","___plugins_formatters_TextCaseFormatterPlugin","Logger","___utils_Logger","RequiredValidator","validate","parsedValue","args","undefined","isValid","errorMessage","MaxLengthValidator","length","PipelineManager","formatters","parsers","validators","constructor","register","executeValidation","requestedValidators","argsMap","isEmpty","isRequired","includes","rule","validator","get","result","error","msg","message","warn","GlobalPipeline","__exports","__esModule"],"sources":["PipelineManager.ts"],"sourcesContent":["/**\n * @file PipelineManager.ts\n * @description Central manager for the data manipulation pipeline. \n * Orchestrates Formatting, Parsing, and Validating data using the generic Registry.\n */\n\nimport { Registry } from \"./Registry\";\nimport { IFormatter, IParser, IValidator, IValidationResult } from \"../interfaces/IPipeline\";\nimport { PatternValidatorPlugin } from \"../plugins/validators/PatternValidatorPlugin\";\nimport { MinLengthValidatorPlugin } from \"../plugins/validators/MinLengthValidatorPlugin\";\nimport { RangeValidatorPlugin } from \"../plugins/validators/RangeValidatorPlugin\";\nimport { UrlValidatorPlugin } from \"../plugins/validators/UrlValidatorPlugin\";\nimport { IbanValidatorPlugin } from \"../plugins/validators/IbanValidatorPlugin\";\nimport { EmailValidatorPlugin } from \"../plugins/validators/EmailValidatorPlugin\";\nimport { DateFormatterPlugin } from \"../plugins/formatters/DateFormatterPlugin\";\nimport { PhoneFormatterPlugin } from \"../plugins/formatters/PhoneFormatterPlugin\";\nimport { TextCaseFormatterPlugin } from \"../plugins/formatters/TextCaseFormatterPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\n// --- Built-in Default Validators ---\n/** Internal rule for required fields. */\nclass RequiredValidator implements IValidator {\n /** Validates that the value is not null, undefined, or empty string. */\n validate(parsedValue: unknown, args?: unknown): IValidationResult {\n if (parsedValue === null || parsedValue === undefined || parsedValue === \"\") {\n return { isValid: false, errorMessage: \"This field is required.\" };\n }\n return { isValid: true };\n }\n}\n\n/** Internal rule for string maximum length. */\nclass MaxLengthValidator implements IValidator {\n /** Validates that a string does not exceed the provided argument length. */\n validate(parsedValue: unknown, args?: unknown): IValidationResult {\n if (typeof parsedValue === \"string\" && args && typeof args === \"number\") {\n if (parsedValue.length > args) {\n return { isValid: false, errorMessage: `Maximum length is ${args} characters.` };\n }\n }\n return { isValid: true };\n }\n}\n\n\n/**\n * The core engine responsible for marshalling data through the validation, formatting, and parsing phases.\n * Pluggable design allows new validators to be registered dynamically.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class PipelineManager {\n /** Registry of data formatters applied before pushing to the UI. */\n public readonly formatters: Registry<IFormatter> = new Registry<IFormatter>(\"Formatters\");\n /** Registry of data parsers applied when pulling data from the UI. */\n public readonly parsers: Registry<IParser> = new Registry<IParser>(\"Parsers\");\n /** Registry of business logic validators. */\n public readonly validators: Registry<IValidator> = new Registry<IValidator>(\"Validators\");\n\n /**\n * Bootstraps the PipelineManager with default validators (required, maxLength, email).\n */\n constructor() {\n // Register default validators\n this.validators.register(\"required\", new RequiredValidator());\n this.validators.register(\"maxLength\", new MaxLengthValidator());\n this.validators.register(\"pattern\", new PatternValidatorPlugin());\n this.validators.register(\"minLength\", new MinLengthValidatorPlugin());\n this.validators.register(\"range\", new RangeValidatorPlugin());\n this.validators.register(\"url\", new UrlValidatorPlugin());\n this.validators.register(\"iban\", new IbanValidatorPlugin());\n this.validators.register(\"email\", new EmailValidatorPlugin());\n\n // Register default formatters\n this.formatters.register(\"date\", new DateFormatterPlugin());\n this.formatters.register(\"phone\", new PhoneFormatterPlugin());\n this.formatters.register(\"textCase\", new TextCaseFormatterPlugin());\n }\n\n /**\n * Executes the validation pipeline sequentially. Fails fast on the first encountered error.\n * \n * @param parsedValue The raw extracted value from the UI control.\n * @param requestedValidators Array of validation rule keys (e.g. ['required', 'email']).\n * @param argsMap Optional map of parameters required by specific rules (e.g. { maxLength: 50 }).\n * @returns {IValidationResult} The final result state and any associated error message.\n */\n public executeValidation(parsedValue: unknown, requestedValidators: string[], argsMap?: Record<string, unknown>): IValidationResult {\n // Global short-circuit: if the field is completely empty and NOT required, skip all downstream string constraint checks.\n const isEmpty = parsedValue === null || parsedValue === undefined || parsedValue === \"\";\n const isRequired = requestedValidators.includes(\"required\");\n if (isEmpty && !isRequired) {\n return { isValid: true };\n }\n\n for (const rule of requestedValidators) {\n const validator = this.validators.get(rule);\n if (validator) {\n const args = argsMap ? argsMap[rule] : undefined;\n try {\n const result = validator.validate(parsedValue, args);\n if (!result.isValid) {\n return result; // Fast fail on first error\n }\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI] PipelineManager: Validator '${rule}' crashed during execution.`, msg);\n return { isValid: false, errorMessage: `System validation error: ${msg}` };\n }\n } else {\n Logger.warn(`[MetaUI] PipelineManager: Requested validator '${rule}' not found in registry.`);\n }\n }\n return { isValid: true };\n }\n}\n\n/** \n * Singleton instance for global access to the active validation pipeline. \n * @public \n */\nexport const GlobalPipeline = new PipelineManager();\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineManager.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iDAAiD,CAAC;IACjE;;;;OAIG;IAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;IACpE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;IAarH,yCAAyC;IACzC,MAAM,iBAAkB,YAAW,UAAU;QACzC,wEAAwE;QACxE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,iBAAiB;KAMpE;IAED,+CAA+C;IAC/C,MAAM,kBAAmB,YAAW,UAAU;QAC1C,4EAA4E;QAC5E,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,iBAAiB;KAQpE;IAGD;;;;;;OAMG;IACH,MAAa,eAAe;QACxB,oEAAoE;QACpE,SAAgB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAA0C;QAC1F,sEAAsE;QACtE,SAAgB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAoC;QAC9E,6CAA6C;QAC7C,SAAgB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAA0C;QAE1F;;WAEG;;QAkBH;;;;;;;WAOG;QACI,iBAAiB,CAAC,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB;KAqBtI;IAED;;;OAGG;IACI,MAAM,cAAc,iBAAwB,CAAC;CAEnD"}
1
+ {"version":3,"file":"PipelineManager.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iDAAiD,CAAC;IACjE;;;;OAIG;IAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;IACpE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;IAarH,yCAAyC;IACzC,MAAM,iBAAkB,YAAW,UAAU;QACzC,wEAAwE;QACxE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,iBAAiB;KAMpE;IAED,+CAA+C;IAC/C,MAAM,kBAAmB,YAAW,UAAU;QAC1C,4EAA4E;QAC5E,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,iBAAiB;KAQpE;IAGD;;;;;;OAMG;IACH,MAAa,eAAe;QACxB,oEAAoE;QACpE,SAAgB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAA0C;QAC1F,sEAAsE;QACtE,SAAgB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAoC;QAC9E,6CAA6C;QAC7C,SAAgB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAA0C;QAE1F;;WAEG;;QAkBH;;;;;;;WAOG;QACI,iBAAiB,CAAC,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB;KA4BtI;IAED;;;OAGG;IACI,MAAM,cAAc,iBAAwB,CAAC;CAEnD"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["./Registry","../plugins/validators/PatternValidatorPlugin","../plugins/validators/MinLengthValidatorPlugin","../plugins/validators/RangeValidatorPlugin","../plugins/validators/UrlValidatorPlugin","../plugins/validators/IbanValidatorPlugin","../plugins/validators/EmailValidatorPlugin","../plugins/formatters/DateFormatterPlugin","../plugins/formatters/PhoneFormatterPlugin","../plugins/formatters/TextCaseFormatterPlugin","../utils/Logger"],function(e,t,r,i,a,s,n,l,o,g,u){"use strict";const d=e["Registry"];const c=t["PatternValidatorPlugin"];const P=r["MinLengthValidatorPlugin"];const f=i["RangeValidatorPlugin"];const h=a["UrlValidatorPlugin"];const m=s["IbanValidatorPlugin"];const v=n["EmailValidatorPlugin"];const V=l["DateFormatterPlugin"];const p=o["PhoneFormatterPlugin"];const w=g["TextCaseFormatterPlugin"];const M=u["Logger"];class x{validate(e,t){if(e===null||e===undefined||e===""){return{isValid:false,errorMessage:"This field is required."}}return{isValid:true}}}class y{validate(e,t){if(typeof e==="string"&&t&&typeof t==="number"){if(e.length>t){return{isValid:false,errorMessage:`Maximum length is ${t} characters.`}}}return{isValid:true}}}class F{formatters=new d("Formatters");parsers=new d("Parsers");validators=new d("Validators");constructor(){this.validators.register("required",new x);this.validators.register("maxLength",new y);this.validators.register("pattern",new c);this.validators.register("minLength",new P);this.validators.register("range",new f);this.validators.register("url",new h);this.validators.register("iban",new m);this.validators.register("email",new v);this.formatters.register("date",new V);this.formatters.register("phone",new p);this.formatters.register("textCase",new w)}executeValidation(e,t,r){for(const i of t){const t=this.validators.get(i);if(t){const a=r?r[i]:undefined;try{const r=t.validate(e,a);if(!r.isValid){return r}}catch(e){const t=e.message;M.error(`[MetaUI] PipelineManager: Validator '${i}' crashed during execution.`,t);return{isValid:false,errorMessage:`System validation error: ${t}`}}}else{M.warn(`[MetaUI] PipelineManager: Requested validator '${i}' not found in registry.`)}}return{isValid:true}}}const L=new F;var b={__esModule:true};b.PipelineManager=F;b.GlobalPipeline=L;return b});
1
+ sap.ui.define(["./Registry","../plugins/validators/PatternValidatorPlugin","../plugins/validators/MinLengthValidatorPlugin","../plugins/validators/RangeValidatorPlugin","../plugins/validators/UrlValidatorPlugin","../plugins/validators/IbanValidatorPlugin","../plugins/validators/EmailValidatorPlugin","../plugins/formatters/DateFormatterPlugin","../plugins/formatters/PhoneFormatterPlugin","../plugins/formatters/TextCaseFormatterPlugin","../utils/Logger"],function(e,t,r,i,a,s,n,l,o,g,u){"use strict";const d=e["Registry"];const c=t["PatternValidatorPlugin"];const f=r["MinLengthValidatorPlugin"];const P=i["RangeValidatorPlugin"];const h=a["UrlValidatorPlugin"];const m=s["IbanValidatorPlugin"];const V=n["EmailValidatorPlugin"];const v=l["DateFormatterPlugin"];const p=o["PhoneFormatterPlugin"];const w=g["TextCaseFormatterPlugin"];const M=u["Logger"];class x{validate(e,t){if(e===null||e===undefined||e===""){return{isValid:false,errorMessage:"This field is required."}}return{isValid:true}}}class y{validate(e,t){if(typeof e==="string"&&t&&typeof t==="number"){if(e.length>t){return{isValid:false,errorMessage:`Maximum length is ${t} characters.`}}}return{isValid:true}}}class F{formatters=new d("Formatters");parsers=new d("Parsers");validators=new d("Validators");constructor(){this.validators.register("required",new x);this.validators.register("maxLength",new y);this.validators.register("pattern",new c);this.validators.register("minLength",new f);this.validators.register("range",new P);this.validators.register("url",new h);this.validators.register("iban",new m);this.validators.register("email",new V);this.formatters.register("date",new v);this.formatters.register("phone",new p);this.formatters.register("textCase",new w)}executeValidation(e,t,r){const i=e===null||e===undefined||e==="";const a=t.includes("required");if(i&&!a){return{isValid:true}}for(const i of t){const t=this.validators.get(i);if(t){const a=r?r[i]:undefined;try{const r=t.validate(e,a);if(!r.isValid){return r}}catch(e){const t=e.message;M.error(`[MetaUI] PipelineManager: Validator '${i}' crashed during execution.`,t);return{isValid:false,errorMessage:`System validation error: ${t}`}}}else{M.warn(`[MetaUI] PipelineManager: Requested validator '${i}' not found in registry.`)}}return{isValid:true}}}const L=new F;var b={__esModule:true};b.PipelineManager=F;b.GlobalPipeline=L;return b});
2
2
  //# sourceMappingURL=PipelineManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineManager.js","names":["Registry","___Registry","PatternValidatorPlugin","___plugins_validators_PatternValidatorPlugin","MinLengthValidatorPlugin","___plugins_validators_MinLengthValidatorPlugin","RangeValidatorPlugin","___plugins_validators_RangeValidatorPlugin","UrlValidatorPlugin","___plugins_validators_UrlValidatorPlugin","IbanValidatorPlugin","___plugins_validators_IbanValidatorPlugin","EmailValidatorPlugin","___plugins_validators_EmailValidatorPlugin","DateFormatterPlugin","___plugins_formatters_DateFormatterPlugin","PhoneFormatterPlugin","___plugins_formatters_PhoneFormatterPlugin","TextCaseFormatterPlugin","___plugins_formatters_TextCaseFormatterPlugin","Logger","___utils_Logger","RequiredValidator","validate","parsedValue","args","undefined","isValid","errorMessage","MaxLengthValidator","length","PipelineManager","formatters","parsers","validators","constructor","this","register","executeValidation","requestedValidators","argsMap","rule","validator","get","result","error","msg","message","warn","GlobalPipeline","__exports","__esModule"],"sources":["PipelineManager.ts"],"sourcesContent":["/**\n * @file PipelineManager.ts\n * @description Central manager for the data manipulation pipeline. \n * Orchestrates Formatting, Parsing, and Validating data using the generic Registry.\n */\n\nimport { Registry } from \"./Registry\";\nimport { IFormatter, IParser, IValidator, IValidationResult } from \"../interfaces/IPipeline\";\nimport { PatternValidatorPlugin } from \"../plugins/validators/PatternValidatorPlugin\";\nimport { MinLengthValidatorPlugin } from \"../plugins/validators/MinLengthValidatorPlugin\";\nimport { RangeValidatorPlugin } from \"../plugins/validators/RangeValidatorPlugin\";\nimport { UrlValidatorPlugin } from \"../plugins/validators/UrlValidatorPlugin\";\nimport { IbanValidatorPlugin } from \"../plugins/validators/IbanValidatorPlugin\";\nimport { EmailValidatorPlugin } from \"../plugins/validators/EmailValidatorPlugin\";\nimport { DateFormatterPlugin } from \"../plugins/formatters/DateFormatterPlugin\";\nimport { PhoneFormatterPlugin } from \"../plugins/formatters/PhoneFormatterPlugin\";\nimport { TextCaseFormatterPlugin } from \"../plugins/formatters/TextCaseFormatterPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\n// --- Built-in Default Validators ---\n/** Internal rule for required fields. */\nclass RequiredValidator implements IValidator {\n /** Validates that the value is not null, undefined, or empty string. */\n validate(parsedValue: unknown, args?: unknown): IValidationResult {\n if (parsedValue === null || parsedValue === undefined || parsedValue === \"\") {\n return { isValid: false, errorMessage: \"This field is required.\" };\n }\n return { isValid: true };\n }\n}\n\n/** Internal rule for string maximum length. */\nclass MaxLengthValidator implements IValidator {\n /** Validates that a string does not exceed the provided argument length. */\n validate(parsedValue: unknown, args?: unknown): IValidationResult {\n if (typeof parsedValue === \"string\" && args && typeof args === \"number\") {\n if (parsedValue.length > args) {\n return { isValid: false, errorMessage: `Maximum length is ${args} characters.` };\n }\n }\n return { isValid: true };\n }\n}\n\n\n/**\n * The core engine responsible for marshalling data through the validation, formatting, and parsing phases.\n * Pluggable design allows new validators to be registered dynamically.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class PipelineManager {\n /** Registry of data formatters applied before pushing to the UI. */\n public readonly formatters: Registry<IFormatter> = new Registry<IFormatter>(\"Formatters\");\n /** Registry of data parsers applied when pulling data from the UI. */\n public readonly parsers: Registry<IParser> = new Registry<IParser>(\"Parsers\");\n /** Registry of business logic validators. */\n public readonly validators: Registry<IValidator> = new Registry<IValidator>(\"Validators\");\n\n /**\n * Bootstraps the PipelineManager with default validators (required, maxLength, email).\n */\n constructor() {\n // Register default validators\n this.validators.register(\"required\", new RequiredValidator());\n this.validators.register(\"maxLength\", new MaxLengthValidator());\n this.validators.register(\"pattern\", new PatternValidatorPlugin());\n this.validators.register(\"minLength\", new MinLengthValidatorPlugin());\n this.validators.register(\"range\", new RangeValidatorPlugin());\n this.validators.register(\"url\", new UrlValidatorPlugin());\n this.validators.register(\"iban\", new IbanValidatorPlugin());\n this.validators.register(\"email\", new EmailValidatorPlugin());\n\n // Register default formatters\n this.formatters.register(\"date\", new DateFormatterPlugin());\n this.formatters.register(\"phone\", new PhoneFormatterPlugin());\n this.formatters.register(\"textCase\", new TextCaseFormatterPlugin());\n }\n\n /**\n * Executes the validation pipeline sequentially. Fails fast on the first encountered error.\n * \n * @param parsedValue The raw extracted value from the UI control.\n * @param requestedValidators Array of validation rule keys (e.g. ['required', 'email']).\n * @param argsMap Optional map of parameters required by specific rules (e.g. { maxLength: 50 }).\n * @returns {IValidationResult} The final result state and any associated error message.\n */\n public executeValidation(parsedValue: unknown, requestedValidators: string[], argsMap?: Record<string, unknown>): IValidationResult {\n for (const rule of requestedValidators) {\n const validator = this.validators.get(rule);\n if (validator) {\n const args = argsMap ? argsMap[rule] : undefined;\n try {\n const result = validator.validate(parsedValue, args);\n if (!result.isValid) {\n return result; // Fast fail on first error\n }\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI] PipelineManager: Validator '${rule}' crashed during execution.`, msg);\n return { isValid: false, errorMessage: `System validation error: ${msg}` };\n }\n } else {\n Logger.warn(`[MetaUI] PipelineManager: Requested validator '${rule}' not found in registry.`);\n }\n }\n return { isValid: true };\n }\n}\n\n/** \n * Singleton instance for global access to the active validation pipeline. \n * @public \n */\nexport const GlobalPipeline = new PipelineManager();\n"],"mappings":"sfAAA,MAMSA,EAAQC,EAAA,kBAERC,EAAsBC,EAAA,gCACtBC,EAAwBC,EAAA,kCACxBC,EAAoBC,EAAA,8BACpBC,EAAkBC,EAAA,4BAClBC,EAAmBC,EAAA,6BACnBC,EAAoBC,EAAA,8BACpBC,EAAmBC,EAAA,6BACnBC,EAAoBC,EAAA,8BACpBC,EAAuBC,EAAA,iCACvBC,EAAMC,EAAA,UAIf,MAAMC,EAEFC,SAASC,EAAsBC,GAC3B,GAAID,IAAgB,MAAQA,IAAgBE,WAAaF,IAAgB,GAAI,CACzE,MAAO,CAAEG,QAAS,MAAOC,aAAc,0BAC3C,CACA,MAAO,CAAED,QAAS,KACtB,EAIJ,MAAME,EAEFN,SAASC,EAAsBC,GAC3B,UAAWD,IAAgB,UAAYC,UAAeA,IAAS,SAAU,CACrE,GAAID,EAAYM,OAASL,EAAM,CAC3B,MAAO,CAAEE,QAAS,MAAOC,aAAc,qBAAqBH,gBAChE,CACJ,CACA,MAAO,CAAEE,QAAS,KACtB,EAWG,MAAMI,EAEOC,WAAmC,IAAIhC,EAAqB,cAE5DiC,QAA6B,IAAIjC,EAAkB,WAEnDkC,WAAmC,IAAIlC,EAAqB,cAK5EmC,cAEIC,KAAKF,WAAWG,SAAS,WAAY,IAAIf,GACzCc,KAAKF,WAAWG,SAAS,YAAa,IAAIR,GAC1CO,KAAKF,WAAWG,SAAS,UAAW,IAAInC,GACxCkC,KAAKF,WAAWG,SAAS,YAAa,IAAIjC,GAC1CgC,KAAKF,WAAWG,SAAS,QAAS,IAAI/B,GACtC8B,KAAKF,WAAWG,SAAS,MAAO,IAAI7B,GACpC4B,KAAKF,WAAWG,SAAS,OAAQ,IAAI3B,GACrC0B,KAAKF,WAAWG,SAAS,QAAS,IAAIzB,GAGtCwB,KAAKJ,WAAWK,SAAS,OAAQ,IAAIvB,GACrCsB,KAAKJ,WAAWK,SAAS,QAAS,IAAIrB,GACtCoB,KAAKJ,WAAWK,SAAS,WAAY,IAAInB,EAC7C,CAUOoB,kBAAkBd,EAAsBe,EAA+BC,GAC1E,IAAK,MAAMC,KAAQF,EAAqB,CACpC,MAAMG,EAAYN,KAAKF,WAAWS,IAAIF,GACtC,GAAIC,EAAW,CACX,MAAMjB,EAAOe,EAAUA,EAAQC,GAAQf,UACvC,IACI,MAAMkB,EAASF,EAAUnB,SAASC,EAAaC,GAC/C,IAAKmB,EAAOjB,QAAS,CACjB,OAAOiB,CACX,CACJ,CAAE,MAAOC,GACL,MAAMC,EAAOD,EAAgBE,QAC7B3B,EAAOyB,MAAM,wCAAwCJ,+BAAmCK,GACxF,MAAO,CAAEnB,QAAS,MAAOC,aAAc,4BAA4BkB,IACvE,CACJ,KAAO,CACH1B,EAAO4B,KAAK,kDAAkDP,4BAClE,CACJ,CACA,MAAO,CAAEd,QAAS,KACtB,EAOG,MAAMsB,EAAiB,IAAIlB,EAAkB,IAAAmB,EAAA,CAAAC,WAAA,MAAAD,EAAAnB,kBAAAmB,EAAAD,iBAAA,OAAAC,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"PipelineManager.js","names":["Registry","___Registry","PatternValidatorPlugin","___plugins_validators_PatternValidatorPlugin","MinLengthValidatorPlugin","___plugins_validators_MinLengthValidatorPlugin","RangeValidatorPlugin","___plugins_validators_RangeValidatorPlugin","UrlValidatorPlugin","___plugins_validators_UrlValidatorPlugin","IbanValidatorPlugin","___plugins_validators_IbanValidatorPlugin","EmailValidatorPlugin","___plugins_validators_EmailValidatorPlugin","DateFormatterPlugin","___plugins_formatters_DateFormatterPlugin","PhoneFormatterPlugin","___plugins_formatters_PhoneFormatterPlugin","TextCaseFormatterPlugin","___plugins_formatters_TextCaseFormatterPlugin","Logger","___utils_Logger","RequiredValidator","validate","parsedValue","args","undefined","isValid","errorMessage","MaxLengthValidator","length","PipelineManager","formatters","parsers","validators","constructor","this","register","executeValidation","requestedValidators","argsMap","isEmpty","isRequired","includes","rule","validator","get","result","error","msg","message","warn","GlobalPipeline","__exports","__esModule"],"sources":["PipelineManager.ts"],"sourcesContent":["/**\n * @file PipelineManager.ts\n * @description Central manager for the data manipulation pipeline. \n * Orchestrates Formatting, Parsing, and Validating data using the generic Registry.\n */\n\nimport { Registry } from \"./Registry\";\nimport { IFormatter, IParser, IValidator, IValidationResult } from \"../interfaces/IPipeline\";\nimport { PatternValidatorPlugin } from \"../plugins/validators/PatternValidatorPlugin\";\nimport { MinLengthValidatorPlugin } from \"../plugins/validators/MinLengthValidatorPlugin\";\nimport { RangeValidatorPlugin } from \"../plugins/validators/RangeValidatorPlugin\";\nimport { UrlValidatorPlugin } from \"../plugins/validators/UrlValidatorPlugin\";\nimport { IbanValidatorPlugin } from \"../plugins/validators/IbanValidatorPlugin\";\nimport { EmailValidatorPlugin } from \"../plugins/validators/EmailValidatorPlugin\";\nimport { DateFormatterPlugin } from \"../plugins/formatters/DateFormatterPlugin\";\nimport { PhoneFormatterPlugin } from \"../plugins/formatters/PhoneFormatterPlugin\";\nimport { TextCaseFormatterPlugin } from \"../plugins/formatters/TextCaseFormatterPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\n// --- Built-in Default Validators ---\n/** Internal rule for required fields. */\nclass RequiredValidator implements IValidator {\n /** Validates that the value is not null, undefined, or empty string. */\n validate(parsedValue: unknown, args?: unknown): IValidationResult {\n if (parsedValue === null || parsedValue === undefined || parsedValue === \"\") {\n return { isValid: false, errorMessage: \"This field is required.\" };\n }\n return { isValid: true };\n }\n}\n\n/** Internal rule for string maximum length. */\nclass MaxLengthValidator implements IValidator {\n /** Validates that a string does not exceed the provided argument length. */\n validate(parsedValue: unknown, args?: unknown): IValidationResult {\n if (typeof parsedValue === \"string\" && args && typeof args === \"number\") {\n if (parsedValue.length > args) {\n return { isValid: false, errorMessage: `Maximum length is ${args} characters.` };\n }\n }\n return { isValid: true };\n }\n}\n\n\n/**\n * The core engine responsible for marshalling data through the validation, formatting, and parsing phases.\n * Pluggable design allows new validators to be registered dynamically.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class PipelineManager {\n /** Registry of data formatters applied before pushing to the UI. */\n public readonly formatters: Registry<IFormatter> = new Registry<IFormatter>(\"Formatters\");\n /** Registry of data parsers applied when pulling data from the UI. */\n public readonly parsers: Registry<IParser> = new Registry<IParser>(\"Parsers\");\n /** Registry of business logic validators. */\n public readonly validators: Registry<IValidator> = new Registry<IValidator>(\"Validators\");\n\n /**\n * Bootstraps the PipelineManager with default validators (required, maxLength, email).\n */\n constructor() {\n // Register default validators\n this.validators.register(\"required\", new RequiredValidator());\n this.validators.register(\"maxLength\", new MaxLengthValidator());\n this.validators.register(\"pattern\", new PatternValidatorPlugin());\n this.validators.register(\"minLength\", new MinLengthValidatorPlugin());\n this.validators.register(\"range\", new RangeValidatorPlugin());\n this.validators.register(\"url\", new UrlValidatorPlugin());\n this.validators.register(\"iban\", new IbanValidatorPlugin());\n this.validators.register(\"email\", new EmailValidatorPlugin());\n\n // Register default formatters\n this.formatters.register(\"date\", new DateFormatterPlugin());\n this.formatters.register(\"phone\", new PhoneFormatterPlugin());\n this.formatters.register(\"textCase\", new TextCaseFormatterPlugin());\n }\n\n /**\n * Executes the validation pipeline sequentially. Fails fast on the first encountered error.\n * \n * @param parsedValue The raw extracted value from the UI control.\n * @param requestedValidators Array of validation rule keys (e.g. ['required', 'email']).\n * @param argsMap Optional map of parameters required by specific rules (e.g. { maxLength: 50 }).\n * @returns {IValidationResult} The final result state and any associated error message.\n */\n public executeValidation(parsedValue: unknown, requestedValidators: string[], argsMap?: Record<string, unknown>): IValidationResult {\n // Global short-circuit: if the field is completely empty and NOT required, skip all downstream string constraint checks.\n const isEmpty = parsedValue === null || parsedValue === undefined || parsedValue === \"\";\n const isRequired = requestedValidators.includes(\"required\");\n if (isEmpty && !isRequired) {\n return { isValid: true };\n }\n\n for (const rule of requestedValidators) {\n const validator = this.validators.get(rule);\n if (validator) {\n const args = argsMap ? argsMap[rule] : undefined;\n try {\n const result = validator.validate(parsedValue, args);\n if (!result.isValid) {\n return result; // Fast fail on first error\n }\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(`[MetaUI] PipelineManager: Validator '${rule}' crashed during execution.`, msg);\n return { isValid: false, errorMessage: `System validation error: ${msg}` };\n }\n } else {\n Logger.warn(`[MetaUI] PipelineManager: Requested validator '${rule}' not found in registry.`);\n }\n }\n return { isValid: true };\n }\n}\n\n/** \n * Singleton instance for global access to the active validation pipeline. \n * @public \n */\nexport const GlobalPipeline = new PipelineManager();\n"],"mappings":"sfAAA,MAMSA,EAAQC,EAAA,kBAERC,EAAsBC,EAAA,gCACtBC,EAAwBC,EAAA,kCACxBC,EAAoBC,EAAA,8BACpBC,EAAkBC,EAAA,4BAClBC,EAAmBC,EAAA,6BACnBC,EAAoBC,EAAA,8BACpBC,EAAmBC,EAAA,6BACnBC,EAAoBC,EAAA,8BACpBC,EAAuBC,EAAA,iCACvBC,EAAMC,EAAA,UAIf,MAAMC,EAEFC,SAASC,EAAsBC,GAC3B,GAAID,IAAgB,MAAQA,IAAgBE,WAAaF,IAAgB,GAAI,CACzE,MAAO,CAAEG,QAAS,MAAOC,aAAc,0BAC3C,CACA,MAAO,CAAED,QAAS,KACtB,EAIJ,MAAME,EAEFN,SAASC,EAAsBC,GAC3B,UAAWD,IAAgB,UAAYC,UAAeA,IAAS,SAAU,CACrE,GAAID,EAAYM,OAASL,EAAM,CAC3B,MAAO,CAAEE,QAAS,MAAOC,aAAc,qBAAqBH,gBAChE,CACJ,CACA,MAAO,CAAEE,QAAS,KACtB,EAWG,MAAMI,EAEOC,WAAmC,IAAIhC,EAAqB,cAE5DiC,QAA6B,IAAIjC,EAAkB,WAEnDkC,WAAmC,IAAIlC,EAAqB,cAK5EmC,cAEIC,KAAKF,WAAWG,SAAS,WAAY,IAAIf,GACzCc,KAAKF,WAAWG,SAAS,YAAa,IAAIR,GAC1CO,KAAKF,WAAWG,SAAS,UAAW,IAAInC,GACxCkC,KAAKF,WAAWG,SAAS,YAAa,IAAIjC,GAC1CgC,KAAKF,WAAWG,SAAS,QAAS,IAAI/B,GACtC8B,KAAKF,WAAWG,SAAS,MAAO,IAAI7B,GACpC4B,KAAKF,WAAWG,SAAS,OAAQ,IAAI3B,GACrC0B,KAAKF,WAAWG,SAAS,QAAS,IAAIzB,GAGtCwB,KAAKJ,WAAWK,SAAS,OAAQ,IAAIvB,GACrCsB,KAAKJ,WAAWK,SAAS,QAAS,IAAIrB,GACtCoB,KAAKJ,WAAWK,SAAS,WAAY,IAAInB,EAC7C,CAUOoB,kBAAkBd,EAAsBe,EAA+BC,GAE1E,MAAMC,EAAUjB,IAAgB,MAAQA,IAAgBE,WAAaF,IAAgB,GACrF,MAAMkB,EAAaH,EAAoBI,SAAS,YAChD,GAAIF,IAAYC,EAAY,CACxB,MAAO,CAAEf,QAAS,KACtB,CAEA,IAAK,MAAMiB,KAAQL,EAAqB,CACpC,MAAMM,EAAYT,KAAKF,WAAWY,IAAIF,GACtC,GAAIC,EAAW,CACX,MAAMpB,EAAOe,EAAUA,EAAQI,GAAQlB,UACvC,IACI,MAAMqB,EAASF,EAAUtB,SAASC,EAAaC,GAC/C,IAAKsB,EAAOpB,QAAS,CACjB,OAAOoB,CACX,CACJ,CAAE,MAAOC,GACL,MAAMC,EAAOD,EAAgBE,QAC7B9B,EAAO4B,MAAM,wCAAwCJ,+BAAmCK,GACxF,MAAO,CAAEtB,QAAS,MAAOC,aAAc,4BAA4BqB,IACvE,CACJ,KAAO,CACH7B,EAAO+B,KAAK,kDAAkDP,4BAClE,CACJ,CACA,MAAO,CAAEjB,QAAS,KACtB,EAOG,MAAMyB,EAAiB,IAAIrB,EAAkB,IAAAsB,EAAA,CAAAC,WAAA,MAAAD,EAAAtB,kBAAAsB,EAAAD,iBAAA,OAAAC,CAAA","ignoreList":[]}
@@ -87,6 +87,13 @@ export class PipelineManager {
87
87
  * @returns {IValidationResult} The final result state and any associated error message.
88
88
  */
89
89
  public executeValidation(parsedValue: unknown, requestedValidators: string[], argsMap?: Record<string, unknown>): IValidationResult {
90
+ // Global short-circuit: if the field is completely empty and NOT required, skip all downstream string constraint checks.
91
+ const isEmpty = parsedValue === null || parsedValue === undefined || parsedValue === "";
92
+ const isRequired = requestedValidators.includes("required");
93
+ if (isEmpty && !isRequired) {
94
+ return { isValid: true };
95
+ }
96
+
90
97
  for (const rule of requestedValidators) {
91
98
  const validator = this.validators.get(rule);
92
99
  if (validator) {