@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,310 @@
1
+ sap.ui.define(["./PluginRegistry", "../utils/Logger"], function (___PluginRegistry, ___utils_Logger) {
2
+ "use strict";
3
+
4
+ const PluginRegistry = ___PluginRegistry["PluginRegistry"];
5
+ const Logger = ___utils_Logger["Logger"];
6
+ /**
7
+ * The PolicyEngine is responsible for evaluating complex, cross-field conditional logic defined in the schema's `uiPolicies` array.
8
+ * It operates strictly on the JSON payload structure and returns an array of `IDeltaState` mutations which the GeneratorHost
9
+ * then applies to the individual active plugins.
10
+ *
11
+ * It ensures the orchestration of conditional rendering, requiring, and invalidating of fields without the plugins
12
+ * needing to be aware of each other.
13
+ *
14
+ * @namespace nz.co.siliconst.ui5.metaui.core
15
+ */
16
+ class PolicyEngine {
17
+ /** Caches the last computed state matrix for differential delta emission */
18
+
19
+ /**
20
+ * Instantiates the PolicyEngine with an array of policies.
21
+ * @param policies Array of uiPolicies defined in the root schema.
22
+ */
23
+ constructor(policies) {
24
+ this.policies = policies || [];
25
+ this.lastStateMatrix = new Map();
26
+ this.detectCycles();
27
+ }
28
+
29
+ /**
30
+ * Builds a directed dependency graph and detects cycles to prevent infinite event loops.
31
+ */
32
+ detectCycles() {
33
+ const graph = new Map();
34
+ for (const policy of this.policies) {
35
+ const sources = new Set();
36
+ if (policy.condition) {
37
+ const addPaths = obj => {
38
+ if (obj) Object.keys(obj).forEach(k => sources.add(k.split("/$row")[0]));
39
+ };
40
+ addPaths(policy.condition.NumericGreaterThan);
41
+ addPaths(policy.condition.NumericLessThan);
42
+ addPaths(policy.condition.StringEquals);
43
+ if (policy.condition.IsNull) policy.condition.IsNull.forEach(p => sources.add(p.split("/$row")[0]));
44
+ if (policy.condition.IsNotNull) policy.condition.IsNotNull.forEach(p => sources.add(p.split("/$row")[0]));
45
+ }
46
+ for (const target of policy.targets) {
47
+ const cleanTarget = target.split("/$row")[0];
48
+ if (!graph.has(cleanTarget)) {
49
+ graph.set(cleanTarget, new Set());
50
+ }
51
+ sources.forEach(s => graph.get(cleanTarget).add(s));
52
+ }
53
+ }
54
+ const visited = new Set();
55
+ const recursionStack = new Set();
56
+ const isCyclic = node => {
57
+ if (!visited.has(node)) {
58
+ visited.add(node);
59
+ recursionStack.add(node);
60
+ const neighbors = graph.get(node);
61
+ if (neighbors) {
62
+ for (const neighbor of neighbors) {
63
+ if (!visited.has(neighbor) && isCyclic(neighbor)) {
64
+ return true;
65
+ } else if (recursionStack.has(neighbor)) {
66
+ return true;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ recursionStack.delete(node);
72
+ return false;
73
+ };
74
+ for (const node of graph.keys()) {
75
+ if (isCyclic(node)) {
76
+ throw new Error(`[MetaUI PolicyEngine] FATAL: Cyclic dependency detected involving policy target '${node}'. This will cause an infinite rendering loop.`);
77
+ }
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Safely traverses a JSON payload using a JSON pointer.
83
+ * Handles UI5 model prefixes (like metaui>) seamlessly.
84
+ *
85
+ * @param data The root JSON object representing the form payload.
86
+ * @param pointer The JSON pointer to traverse (e.g., "/Customer/Age").
87
+ * @returns The resolved value, or undefined if the path does not exist.
88
+ */
89
+ resolvePointer(data, pointer) {
90
+ if (!data || !pointer) return undefined;
91
+ // Strip leading slash and any UI5 prefixes
92
+ const cleanPointer = pointer.replace(/^\//, "").replace(/^metaui>\/?/, "");
93
+ if (!cleanPointer) return data;
94
+ const parts = cleanPointer.split("/");
95
+ let current = data;
96
+ for (const part of parts) {
97
+ if (current === undefined || current === null) return undefined;
98
+ current = current[part];
99
+ }
100
+ return current;
101
+ }
102
+
103
+ /**
104
+ * Evaluates a complex condition tree against the live JSON payload.
105
+ *
106
+ * @param condition The condition block to evaluate.
107
+ * @param data The live JSON payload from the StateManager.
108
+ * @returns True if all condition parameters are met, otherwise false.
109
+ */
110
+ evaluateCondition(condition, data) {
111
+ // If there are multiple operators, we treat them as AND for now
112
+ let result = true;
113
+ const registry = PluginRegistry.getInstance();
114
+ for (const [key, payload] of Object.entries(condition)) {
115
+ const plugin = registry.getPolicyConditionPlugin(key);
116
+ if (plugin) {
117
+ if (!plugin.evaluate(payload, data, this.resolvePointer.bind(this))) {
118
+ result = false;
119
+ }
120
+ } else {
121
+ Logger.warn(`[MetaUI PolicyEngine] Unrecognized condition operator: ${key}`);
122
+ }
123
+ }
124
+ return result;
125
+ }
126
+
127
+ /**
128
+ * Expands relative $row policies into absolute index policies for each physical row.
129
+ */
130
+ expandRowPolicies(data, policies) {
131
+ const expanded = [];
132
+ for (const policy of policies) {
133
+ let hasRow = false;
134
+ let arrayPath = "";
135
+ for (const target of policy.targets) {
136
+ if (target.includes("$row")) {
137
+ hasRow = true;
138
+ arrayPath = target.split("/$row")[0];
139
+ break;
140
+ }
141
+ }
142
+ if (!hasRow && policy.condition) {
143
+ const checkPaths = obj => {
144
+ if (!obj) return;
145
+ for (const key of Object.keys(obj)) {
146
+ if (key.includes("$row")) {
147
+ hasRow = true;
148
+ arrayPath = key.split("/$row")[0];
149
+ break;
150
+ }
151
+ }
152
+ };
153
+ checkPaths(policy.condition.NumericGreaterThan);
154
+ checkPaths(policy.condition.NumericLessThan);
155
+ checkPaths(policy.condition.StringEquals);
156
+ if (policy.condition.IsNull) policy.condition.IsNull.forEach(p => {
157
+ if (p.includes("$row")) {
158
+ hasRow = true;
159
+ arrayPath = p.split("/$row")[0];
160
+ }
161
+ });
162
+ if (policy.condition.IsNotNull) policy.condition.IsNotNull.forEach(p => {
163
+ if (p.includes("$row")) {
164
+ hasRow = true;
165
+ arrayPath = p.split("/$row")[0];
166
+ }
167
+ });
168
+ }
169
+ if (hasRow && arrayPath) {
170
+ const arrayData = this.resolvePointer(data, arrayPath);
171
+ if (Array.isArray(arrayData)) {
172
+ for (let i = 0; i < arrayData.length; i++) {
173
+ const cloneStr = JSON.stringify(policy).replace(/\$row/g, String(i));
174
+ expanded.push(JSON.parse(cloneStr));
175
+ }
176
+ }
177
+ } else {
178
+ expanded.push(policy);
179
+ }
180
+ }
181
+ return expanded;
182
+ }
183
+
184
+ /**
185
+ * Evaluates policies against the given data payload using a State Resolution Matrix.
186
+ * @param data The JSON data payload.
187
+ * @returns Array of delta states to apply to the UI.
188
+ */
189
+ evaluate(data) {
190
+ if (!this.policies || this.policies.length === 0) {
191
+ return [];
192
+ }
193
+ const expandedPolicies = this.expandRowPolicies(data, this.policies);
194
+
195
+ // Ledger: target -> property -> { forcedFalse: number, forcedTrue: number, lastMessage?: string }
196
+ const ledger = new Map();
197
+ const initTargetInLedger = target => {
198
+ if (!ledger.has(target)) {
199
+ ledger.set(target, {
200
+ visibility: {
201
+ forcedFalse: 0,
202
+ forcedTrue: 0
203
+ },
204
+ validity: {
205
+ forcedFalse: 0,
206
+ forcedTrue: 0
207
+ },
208
+ required: {
209
+ forcedFalse: 0,
210
+ forcedTrue: 0
211
+ },
212
+ editable: {
213
+ forcedFalse: 0,
214
+ forcedTrue: 0
215
+ }
216
+ });
217
+ }
218
+ };
219
+
220
+ // 1. Build the Composite State Ledger Matrix
221
+ for (const policy of expandedPolicies) {
222
+ const isConditionMet = this.evaluateCondition(policy.condition, data);
223
+ for (const target of policy.targets) {
224
+ initTargetInLedger(target);
225
+ const currentLedger = ledger.get(target);
226
+ const effectPlugin = PluginRegistry.getInstance().getPolicyEffectPlugin(policy.effect);
227
+ if (!effectPlugin) {
228
+ Logger.error(`[MetaUI PolicyEngine] Unrecognized policy effect: ${policy.effect}`);
229
+ continue;
230
+ }
231
+ const mapped = effectPlugin.resolveState(isConditionMet, policy.effect);
232
+
233
+ // Track forces. For restrictable properties (visibility, validity, editable), forcedFalse acts as a lock.
234
+ // For required, forcedTrue acts as a lock.
235
+ if (mapped.value) {
236
+ currentLedger[mapped.property].forcedTrue++;
237
+ } else {
238
+ currentLedger[mapped.property].forcedFalse++;
239
+ if (mapped.property === "validity" && isConditionMet && policy.message) {
240
+ currentLedger.validity.lastMessage = policy.message;
241
+ }
242
+ }
243
+ }
244
+ }
245
+ const newStateMatrix = new Map();
246
+
247
+ // 2. Resolve the Ledger into a concrete State Matrix
248
+ for (const [target, stateMap] of ledger.entries()) {
249
+ newStateMatrix.set(target, {
250
+ // False (Hidden) wins if ANY policy forced it false
251
+ visibility: stateMap.visibility.forcedFalse > 0 ? false : true,
252
+ // False (Invalid) wins if ANY policy forced it false
253
+ validity: stateMap.validity.forcedFalse > 0 ? false : true,
254
+ // True (Required) wins if ANY policy forced it true
255
+ required: stateMap.required.forcedTrue > 0 ? true : false,
256
+ // False (Disabled) wins if ANY policy forced it false
257
+ editable: stateMap.editable.forcedFalse > 0 ? false : true,
258
+ errorMessage: stateMap.validity.lastMessage
259
+ });
260
+ }
261
+ const deltas = [];
262
+
263
+ // 3. Differential Emission
264
+ for (const [target, newState] of newStateMatrix.entries()) {
265
+ const lastState = this.lastStateMatrix.get(target) || {};
266
+ if (newState.visibility !== undefined && newState.visibility !== lastState.visibility) {
267
+ deltas.push({
268
+ target,
269
+ property: "visibility",
270
+ value: newState.visibility
271
+ });
272
+ }
273
+ if (newState.validity !== undefined && newState.validity !== lastState.validity) {
274
+ if (newState.validity !== lastState.validity || newState.errorMessage !== lastState.errorMessage) {
275
+ deltas.push({
276
+ target,
277
+ property: "validity",
278
+ value: newState.validity,
279
+ errorMessage: newState.errorMessage
280
+ });
281
+ }
282
+ }
283
+ if (newState.required !== undefined && newState.required !== lastState.required) {
284
+ deltas.push({
285
+ target,
286
+ property: "required",
287
+ value: newState.required
288
+ });
289
+ }
290
+ if (newState.editable !== undefined && newState.editable !== lastState.editable) {
291
+ deltas.push({
292
+ target,
293
+ property: "editable",
294
+ value: newState.editable
295
+ });
296
+ }
297
+ }
298
+
299
+ // Cache for next evaluation sweep
300
+ this.lastStateMatrix = newStateMatrix;
301
+ return deltas;
302
+ }
303
+ }
304
+ var __exports = {
305
+ __esModule: true
306
+ };
307
+ __exports.PolicyEngine = PolicyEngine;
308
+ return __exports;
309
+ });
310
+ //# sourceMappingURL=PolicyEngine-dbg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicyEngine-dbg.js","names":["PluginRegistry","___PluginRegistry","Logger","___utils_Logger","PolicyEngine","constructor","policies","lastStateMatrix","Map","detectCycles","graph","policy","sources","Set","condition","addPaths","obj","Object","keys","forEach","k","add","split","NumericGreaterThan","NumericLessThan","StringEquals","IsNull","p","IsNotNull","target","targets","cleanTarget","has","set","s","get","visited","recursionStack","isCyclic","node","neighbors","neighbor","delete","Error","resolvePointer","data","pointer","undefined","cleanPointer","replace","parts","current","part","evaluateCondition","result","registry","getInstance","key","payload","entries","plugin","getPolicyConditionPlugin","evaluate","bind","warn","expandRowPolicies","expanded","hasRow","arrayPath","includes","checkPaths","arrayData","Array","isArray","i","length","cloneStr","JSON","stringify","String","push","parse","expandedPolicies","ledger","initTargetInLedger","visibility","forcedFalse","forcedTrue","validity","required","editable","isConditionMet","currentLedger","effectPlugin","getPolicyEffectPlugin","effect","error","mapped","resolveState","value","property","message","lastMessage","newStateMatrix","stateMap","errorMessage","deltas","newState","lastState","__exports","__esModule"],"sources":["PolicyEngine.ts"],"sourcesContent":["import { IPolicy, IPolicyCondition, PolicyEffectType } from \"../interfaces/ISchema\";\nimport { PluginRegistry } from \"./PluginRegistry\";\nimport { Logger } from \"../utils/Logger\";\n\nexport type PropertyName = \"visibility\" | \"validity\" | \"required\" | \"editable\";\n\nexport interface IDeltaState {\n /** The absolute JSON pointer path of the target property (e.g., \"/VisitorInfo/PassportNumber\") */\n target: string;\n /** The UI5 visual or structural state to mutate */\n property: PropertyName;\n /** The boolean value to apply to the state */\n value: boolean;\n /** An optional custom error message to paint onto the field if validity is false */\n errorMessage?: string;\n}\n\ninterface ITargetState {\n visibility?: boolean;\n validity?: boolean;\n required?: boolean;\n editable?: boolean;\n errorMessage?: string;\n}\n\n/**\n * The PolicyEngine is responsible for evaluating complex, cross-field conditional logic defined in the schema's `uiPolicies` array.\n * It operates strictly on the JSON payload structure and returns an array of `IDeltaState` mutations which the GeneratorHost\n * then applies to the individual active plugins.\n * \n * It ensures the orchestration of conditional rendering, requiring, and invalidating of fields without the plugins\n * needing to be aware of each other.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n */\nexport class PolicyEngine {\n private policies: IPolicy[];\n \n /** Caches the last computed state matrix for differential delta emission */\n private lastStateMatrix: Map<string, ITargetState>;\n\n /**\n * Instantiates the PolicyEngine with an array of policies.\n * @param policies Array of uiPolicies defined in the root schema.\n */\n constructor(policies: IPolicy[]) {\n this.policies = policies || [];\n this.lastStateMatrix = new Map();\n this.detectCycles();\n }\n\n /**\n * Builds a directed dependency graph and detects cycles to prevent infinite event loops.\n */\n private detectCycles(): void {\n const graph = new Map<string, Set<string>>();\n\n for (const policy of this.policies) {\n const sources = new Set<string>();\n if (policy.condition) {\n const addPaths = (obj: Record<string, unknown> | undefined) => {\n if (obj) Object.keys(obj).forEach(k => sources.add(k.split(\"/$row\")[0]));\n };\n addPaths(policy.condition.NumericGreaterThan);\n addPaths(policy.condition.NumericLessThan);\n addPaths(policy.condition.StringEquals);\n if (policy.condition.IsNull) policy.condition.IsNull.forEach(p => sources.add(p.split(\"/$row\")[0]));\n if (policy.condition.IsNotNull) policy.condition.IsNotNull.forEach(p => sources.add(p.split(\"/$row\")[0]));\n }\n\n for (const target of policy.targets) {\n const cleanTarget = target.split(\"/$row\")[0];\n if (!graph.has(cleanTarget)) {\n graph.set(cleanTarget, new Set());\n }\n sources.forEach(s => graph.get(cleanTarget)!.add(s));\n }\n }\n\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n\n const isCyclic = (node: string): boolean => {\n if (!visited.has(node)) {\n visited.add(node);\n recursionStack.add(node);\n\n const neighbors = graph.get(node);\n if (neighbors) {\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor) && isCyclic(neighbor)) {\n return true;\n } else if (recursionStack.has(neighbor)) {\n return true;\n }\n }\n }\n }\n recursionStack.delete(node);\n return false;\n };\n\n for (const node of graph.keys()) {\n if (isCyclic(node)) {\n throw new Error(`[MetaUI PolicyEngine] FATAL: Cyclic dependency detected involving policy target '${node}'. This will cause an infinite rendering loop.`);\n }\n }\n }\n\n /**\n * Safely traverses a JSON payload using a JSON pointer.\n * Handles UI5 model prefixes (like metaui>) seamlessly.\n * \n * @param data The root JSON object representing the form payload.\n * @param pointer The JSON pointer to traverse (e.g., \"/Customer/Age\").\n * @returns The resolved value, or undefined if the path does not exist.\n */\n private resolvePointer(data: unknown, pointer: string): unknown {\n if (!data || !pointer) return undefined;\n // Strip leading slash and any UI5 prefixes\n const cleanPointer = pointer.replace(/^\\//, \"\").replace(/^metaui>\\/?/, \"\");\n if (!cleanPointer) return data;\n \n const parts = cleanPointer.split(\"/\");\n let current = data as Record<string, unknown>;\n for (const part of parts) {\n if (current === undefined || current === null) return undefined;\n current = current[part] as Record<string, unknown>;\n }\n return current;\n }\n\n /**\n * Evaluates a complex condition tree against the live JSON payload.\n * \n * @param condition The condition block to evaluate.\n * @param data The live JSON payload from the StateManager.\n * @returns True if all condition parameters are met, otherwise false.\n */\n private evaluateCondition(condition: IPolicyCondition, data: unknown): boolean {\n // If there are multiple operators, we treat them as AND for now\n let result = true;\n const registry = PluginRegistry.getInstance();\n\n for (const [key, payload] of Object.entries(condition)) {\n const plugin = registry.getPolicyConditionPlugin(key);\n if (plugin) {\n if (!plugin.evaluate(payload, data, this.resolvePointer.bind(this))) {\n result = false;\n }\n } else {\n Logger.warn(`[MetaUI PolicyEngine] Unrecognized condition operator: ${key}`);\n }\n }\n\n return result;\n }\n\n /**\n * Expands relative $row policies into absolute index policies for each physical row.\n */\n private expandRowPolicies(data: unknown, policies: IPolicy[]): IPolicy[] {\n const expanded: IPolicy[] = [];\n for (const policy of policies) {\n let hasRow = false;\n let arrayPath = \"\";\n \n for (const target of policy.targets) {\n if (target.includes(\"$row\")) {\n hasRow = true;\n arrayPath = target.split(\"/$row\")[0];\n break;\n }\n }\n if (!hasRow && policy.condition) {\n const checkPaths = (obj: any) => {\n if (!obj) return;\n for (const key of Object.keys(obj)) {\n if (key.includes(\"$row\")) {\n hasRow = true;\n arrayPath = key.split(\"/$row\")[0];\n break;\n }\n }\n };\n checkPaths(policy.condition.NumericGreaterThan);\n checkPaths(policy.condition.NumericLessThan);\n checkPaths(policy.condition.StringEquals);\n \n if (policy.condition.IsNull) policy.condition.IsNull.forEach(p => { if (p.includes(\"$row\")) { hasRow = true; arrayPath = p.split(\"/$row\")[0]; } });\n if (policy.condition.IsNotNull) policy.condition.IsNotNull.forEach(p => { if (p.includes(\"$row\")) { hasRow = true; arrayPath = p.split(\"/$row\")[0]; } });\n }\n\n if (hasRow && arrayPath) {\n const arrayData = this.resolvePointer(data, arrayPath);\n if (Array.isArray(arrayData)) {\n for (let i = 0; i < arrayData.length; i++) {\n const cloneStr = JSON.stringify(policy).replace(/\\$row/g, String(i));\n expanded.push(JSON.parse(cloneStr));\n }\n }\n } else {\n expanded.push(policy);\n }\n }\n return expanded;\n }\n\n /**\n * Evaluates policies against the given data payload using a State Resolution Matrix.\n * @param data The JSON data payload.\n * @returns Array of delta states to apply to the UI.\n */\n public evaluate(data: unknown): IDeltaState[] {\n if (!this.policies || this.policies.length === 0) {\n return [];\n }\n\n const expandedPolicies = this.expandRowPolicies(data, this.policies);\n\n // Ledger: target -> property -> { forcedFalse: number, forcedTrue: number, lastMessage?: string }\n const ledger = new Map<string, Record<PropertyName, { forcedFalse: number, forcedTrue: number, lastMessage?: string }>>();\n\n const initTargetInLedger = (target: string) => {\n if (!ledger.has(target)) {\n ledger.set(target, {\n visibility: { forcedFalse: 0, forcedTrue: 0 },\n validity: { forcedFalse: 0, forcedTrue: 0 },\n required: { forcedFalse: 0, forcedTrue: 0 },\n editable: { forcedFalse: 0, forcedTrue: 0 }\n });\n }\n };\n\n // 1. Build the Composite State Ledger Matrix\n for (const policy of expandedPolicies) {\n const isConditionMet = this.evaluateCondition(policy.condition, data);\n \n for (const target of policy.targets) {\n initTargetInLedger(target);\n const currentLedger = ledger.get(target)!;\n \n const effectPlugin = PluginRegistry.getInstance().getPolicyEffectPlugin(policy.effect);\n if (!effectPlugin) {\n Logger.error(`[MetaUI PolicyEngine] Unrecognized policy effect: ${policy.effect}`);\n continue;\n }\n const mapped = effectPlugin.resolveState(isConditionMet, policy.effect);\n \n // Track forces. For restrictable properties (visibility, validity, editable), forcedFalse acts as a lock.\n // For required, forcedTrue acts as a lock.\n if (mapped.value) {\n currentLedger[mapped.property].forcedTrue++;\n } else {\n currentLedger[mapped.property].forcedFalse++;\n if (mapped.property === \"validity\" && isConditionMet && policy.message) {\n currentLedger.validity.lastMessage = policy.message;\n }\n }\n }\n }\n\n const newStateMatrix = new Map<string, ITargetState>();\n\n // 2. Resolve the Ledger into a concrete State Matrix\n for (const [target, stateMap] of ledger.entries()) {\n newStateMatrix.set(target, {\n // False (Hidden) wins if ANY policy forced it false\n visibility: stateMap.visibility.forcedFalse > 0 ? false : true,\n // False (Invalid) wins if ANY policy forced it false\n validity: stateMap.validity.forcedFalse > 0 ? false : true,\n // True (Required) wins if ANY policy forced it true\n required: stateMap.required.forcedTrue > 0 ? true : false,\n // False (Disabled) wins if ANY policy forced it false\n editable: stateMap.editable.forcedFalse > 0 ? false : true,\n errorMessage: stateMap.validity.lastMessage\n });\n }\n\n const deltas: IDeltaState[] = [];\n\n // 3. Differential Emission\n for (const [target, newState] of newStateMatrix.entries()) {\n const lastState = this.lastStateMatrix.get(target) || {};\n\n if (newState.visibility !== undefined && newState.visibility !== lastState.visibility) {\n deltas.push({ target, property: \"visibility\", value: newState.visibility });\n }\n if (newState.validity !== undefined && newState.validity !== lastState.validity) {\n if (newState.validity !== lastState.validity || newState.errorMessage !== lastState.errorMessage) {\n deltas.push({ target, property: \"validity\", value: newState.validity, errorMessage: newState.errorMessage });\n }\n }\n if (newState.required !== undefined && newState.required !== lastState.required) {\n deltas.push({ target, property: \"required\", value: newState.required });\n }\n if (newState.editable !== undefined && newState.editable !== lastState.editable) {\n deltas.push({ target, property: \"editable\", value: newState.editable });\n }\n }\n\n // Cache for next evaluation sweep\n this.lastStateMatrix = newStateMatrix;\n\n return deltas;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,73 @@
1
+ declare module "nz/co/siliconst/ui5/metaui/core/PolicyEngine" {
2
+ import { IPolicy } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
3
+ export type PropertyName = "visibility" | "validity" | "required" | "editable";
4
+ export interface IDeltaState {
5
+ /** The absolute JSON pointer path of the target property (e.g., "/VisitorInfo/PassportNumber") */
6
+ target: string;
7
+ /** The UI5 visual or structural state to mutate */
8
+ property: PropertyName;
9
+ /** The boolean value to apply to the state */
10
+ value: boolean;
11
+ /** An optional custom error message to paint onto the field if validity is false */
12
+ errorMessage?: string;
13
+ }
14
+ interface ITargetState {
15
+ visibility?: boolean;
16
+ validity?: boolean;
17
+ required?: boolean;
18
+ editable?: boolean;
19
+ errorMessage?: string;
20
+ }
21
+ /**
22
+ * The PolicyEngine is responsible for evaluating complex, cross-field conditional logic defined in the schema's `uiPolicies` array.
23
+ * It operates strictly on the JSON payload structure and returns an array of `IDeltaState` mutations which the GeneratorHost
24
+ * then applies to the individual active plugins.
25
+ *
26
+ * It ensures the orchestration of conditional rendering, requiring, and invalidating of fields without the plugins
27
+ * needing to be aware of each other.
28
+ *
29
+ * @namespace nz.co.siliconst.ui5.metaui.core
30
+ */
31
+ export class PolicyEngine {
32
+ private policies;
33
+ /** Caches the last computed state matrix for differential delta emission */
34
+ private lastStateMatrix;
35
+ /**
36
+ * Instantiates the PolicyEngine with an array of policies.
37
+ * @param policies Array of uiPolicies defined in the root schema.
38
+ */
39
+ constructor(policies: IPolicy[]);
40
+ /**
41
+ * Builds a directed dependency graph and detects cycles to prevent infinite event loops.
42
+ */
43
+ private detectCycles;
44
+ /**
45
+ * Safely traverses a JSON payload using a JSON pointer.
46
+ * Handles UI5 model prefixes (like metaui>) seamlessly.
47
+ *
48
+ * @param data The root JSON object representing the form payload.
49
+ * @param pointer The JSON pointer to traverse (e.g., "/Customer/Age").
50
+ * @returns The resolved value, or undefined if the path does not exist.
51
+ */
52
+ private resolvePointer;
53
+ /**
54
+ * Evaluates a complex condition tree against the live JSON payload.
55
+ *
56
+ * @param condition The condition block to evaluate.
57
+ * @param data The live JSON payload from the StateManager.
58
+ * @returns True if all condition parameters are met, otherwise false.
59
+ */
60
+ private evaluateCondition;
61
+ /**
62
+ * Expands relative $row policies into absolute index policies for each physical row.
63
+ */
64
+ private expandRowPolicies;
65
+ /**
66
+ * Evaluates policies against the given data payload using a State Resolution Matrix.
67
+ * @param data The JSON data payload.
68
+ * @returns Array of delta states to apply to the UI.
69
+ */
70
+ evaluate(data: unknown): IDeltaState[];
71
+ }
72
+ }
73
+ //# sourceMappingURL=PolicyEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicyEngine.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,8CAA8C,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAsC,MAAM,+CAA+C,CAAC;IAI5G,KAAY,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAE/E,UAAiB,WAAW;QACxB,kGAAkG;QAClG,MAAM,EAAE,MAAM,CAAC;QACf,mDAAmD;QACnD,QAAQ,EAAE,YAAY,CAAC;QACvB,8CAA8C;QAC9C,KAAK,EAAE,OAAO,CAAC;QACf,oFAAoF;QACpF,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB;IAED,UAAU,YAAY;QAClB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB;IAED;;;;;;;;;OASG;IACH,MAAa,YAAY;QACrB,OAAO,CAAC,QAAQ,CAAY;QAE5B,4EAA4E;QAC5E,OAAO,CAAC,eAAe,CAA4B;QAEnD;;;WAGG;oBACS,QAAQ,EAAE,OAAO,EAAE;QAM/B;;WAEG;QACH,OAAO,CAAC,YAAY;QAuDpB;;;;;;;WAOG;QACH,OAAO,CAAC,cAAc;QAetB;;;;;;WAMG;QACH,OAAO,CAAC,iBAAiB;QAmBzB;;WAEG;QACH,OAAO,CAAC,iBAAiB;QA+CzB;;;;WAIG;QACI,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE;KA6FhD;CAEA"}
@@ -0,0 +1,2 @@
1
+ sap.ui.define(["./PluginRegistry","../utils/Logger"],function(e,i){"use strict";const t=e["PluginRegistry"];const r=i["Logger"];class o{constructor(e){this.policies=e||[];this.lastStateMatrix=new Map;this.detectCycles()}detectCycles(){const e=new Map;for(const i of this.policies){const t=new Set;if(i.condition){const e=e=>{if(e)Object.keys(e).forEach(e=>t.add(e.split("/$row")[0]))};e(i.condition.NumericGreaterThan);e(i.condition.NumericLessThan);e(i.condition.StringEquals);if(i.condition.IsNull)i.condition.IsNull.forEach(e=>t.add(e.split("/$row")[0]));if(i.condition.IsNotNull)i.condition.IsNotNull.forEach(e=>t.add(e.split("/$row")[0]))}for(const r of i.targets){const i=r.split("/$row")[0];if(!e.has(i)){e.set(i,new Set)}t.forEach(t=>e.get(i).add(t))}}const i=new Set;const t=new Set;const r=o=>{if(!i.has(o)){i.add(o);t.add(o);const s=e.get(o);if(s){for(const e of s){if(!i.has(e)&&r(e)){return true}else if(t.has(e)){return true}}}}t.delete(o);return false};for(const i of e.keys()){if(r(i)){throw new Error(`[MetaUI PolicyEngine] FATAL: Cyclic dependency detected involving policy target '${i}'. This will cause an infinite rendering loop.`)}}}resolvePointer(e,i){if(!e||!i)return undefined;const t=i.replace(/^\//,"").replace(/^metaui>\/?/,"");if(!t)return e;const r=t.split("/");let o=e;for(const e of r){if(o===undefined||o===null)return undefined;o=o[e]}return o}evaluateCondition(e,i){let o=true;const s=t.getInstance();for(const[t,n]of Object.entries(e)){const e=s.getPolicyConditionPlugin(t);if(e){if(!e.evaluate(n,i,this.resolvePointer.bind(this))){o=false}}else{r.warn(`[MetaUI PolicyEngine] Unrecognized condition operator: ${t}`)}}return o}expandRowPolicies(e,i){const t=[];for(const r of i){let i=false;let o="";for(const e of r.targets){if(e.includes("$row")){i=true;o=e.split("/$row")[0];break}}if(!i&&r.condition){const e=e=>{if(!e)return;for(const t of Object.keys(e)){if(t.includes("$row")){i=true;o=t.split("/$row")[0];break}}};e(r.condition.NumericGreaterThan);e(r.condition.NumericLessThan);e(r.condition.StringEquals);if(r.condition.IsNull)r.condition.IsNull.forEach(e=>{if(e.includes("$row")){i=true;o=e.split("/$row")[0]}});if(r.condition.IsNotNull)r.condition.IsNotNull.forEach(e=>{if(e.includes("$row")){i=true;o=e.split("/$row")[0]}})}if(i&&o){const i=this.resolvePointer(e,o);if(Array.isArray(i)){for(let e=0;e<i.length;e++){const i=JSON.stringify(r).replace(/\$row/g,String(e));t.push(JSON.parse(i))}}}else{t.push(r)}}return t}evaluate(e){if(!this.policies||this.policies.length===0){return[]}const i=this.expandRowPolicies(e,this.policies);const o=new Map;const s=e=>{if(!o.has(e)){o.set(e,{visibility:{forcedFalse:0,forcedTrue:0},validity:{forcedFalse:0,forcedTrue:0},required:{forcedFalse:0,forcedTrue:0},editable:{forcedFalse:0,forcedTrue:0}})}};for(const n of i){const i=this.evaluateCondition(n.condition,e);for(const e of n.targets){s(e);const l=o.get(e);const c=t.getInstance().getPolicyEffectPlugin(n.effect);if(!c){r.error(`[MetaUI PolicyEngine] Unrecognized policy effect: ${n.effect}`);continue}const a=c.resolveState(i,n.effect);if(a.value){l[a.property].forcedTrue++}else{l[a.property].forcedFalse++;if(a.property==="validity"&&i&&n.message){l.validity.lastMessage=n.message}}}}const n=new Map;for(const[e,i]of o.entries()){n.set(e,{visibility:i.visibility.forcedFalse>0?false:true,validity:i.validity.forcedFalse>0?false:true,required:i.required.forcedTrue>0?true:false,editable:i.editable.forcedFalse>0?false:true,errorMessage:i.validity.lastMessage})}const l=[];for(const[e,i]of n.entries()){const t=this.lastStateMatrix.get(e)||{};if(i.visibility!==undefined&&i.visibility!==t.visibility){l.push({target:e,property:"visibility",value:i.visibility})}if(i.validity!==undefined&&i.validity!==t.validity){if(i.validity!==t.validity||i.errorMessage!==t.errorMessage){l.push({target:e,property:"validity",value:i.validity,errorMessage:i.errorMessage})}}if(i.required!==undefined&&i.required!==t.required){l.push({target:e,property:"required",value:i.required})}if(i.editable!==undefined&&i.editable!==t.editable){l.push({target:e,property:"editable",value:i.editable})}}this.lastStateMatrix=n;return l}}var s={__esModule:true};s.PolicyEngine=o;return s});
2
+ //# sourceMappingURL=PolicyEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicyEngine.js","names":["PluginRegistry","___PluginRegistry","Logger","___utils_Logger","PolicyEngine","constructor","policies","this","lastStateMatrix","Map","detectCycles","graph","policy","sources","Set","condition","addPaths","obj","Object","keys","forEach","k","add","split","NumericGreaterThan","NumericLessThan","StringEquals","IsNull","p","IsNotNull","target","targets","cleanTarget","has","set","s","get","visited","recursionStack","isCyclic","node","neighbors","neighbor","delete","Error","resolvePointer","data","pointer","undefined","cleanPointer","replace","parts","current","part","evaluateCondition","result","registry","getInstance","key","payload","entries","plugin","getPolicyConditionPlugin","evaluate","bind","warn","expandRowPolicies","expanded","hasRow","arrayPath","includes","checkPaths","arrayData","Array","isArray","i","length","cloneStr","JSON","stringify","String","push","parse","expandedPolicies","ledger","initTargetInLedger","visibility","forcedFalse","forcedTrue","validity","required","editable","isConditionMet","currentLedger","effectPlugin","getPolicyEffectPlugin","effect","error","mapped","resolveState","value","property","message","lastMessage","newStateMatrix","stateMap","errorMessage","deltas","newState","lastState","__exports","__esModule"],"sources":["PolicyEngine.ts"],"sourcesContent":["import { IPolicy, IPolicyCondition, PolicyEffectType } from \"../interfaces/ISchema\";\nimport { PluginRegistry } from \"./PluginRegistry\";\nimport { Logger } from \"../utils/Logger\";\n\nexport type PropertyName = \"visibility\" | \"validity\" | \"required\" | \"editable\";\n\nexport interface IDeltaState {\n /** The absolute JSON pointer path of the target property (e.g., \"/VisitorInfo/PassportNumber\") */\n target: string;\n /** The UI5 visual or structural state to mutate */\n property: PropertyName;\n /** The boolean value to apply to the state */\n value: boolean;\n /** An optional custom error message to paint onto the field if validity is false */\n errorMessage?: string;\n}\n\ninterface ITargetState {\n visibility?: boolean;\n validity?: boolean;\n required?: boolean;\n editable?: boolean;\n errorMessage?: string;\n}\n\n/**\n * The PolicyEngine is responsible for evaluating complex, cross-field conditional logic defined in the schema's `uiPolicies` array.\n * It operates strictly on the JSON payload structure and returns an array of `IDeltaState` mutations which the GeneratorHost\n * then applies to the individual active plugins.\n * \n * It ensures the orchestration of conditional rendering, requiring, and invalidating of fields without the plugins\n * needing to be aware of each other.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n */\nexport class PolicyEngine {\n private policies: IPolicy[];\n \n /** Caches the last computed state matrix for differential delta emission */\n private lastStateMatrix: Map<string, ITargetState>;\n\n /**\n * Instantiates the PolicyEngine with an array of policies.\n * @param policies Array of uiPolicies defined in the root schema.\n */\n constructor(policies: IPolicy[]) {\n this.policies = policies || [];\n this.lastStateMatrix = new Map();\n this.detectCycles();\n }\n\n /**\n * Builds a directed dependency graph and detects cycles to prevent infinite event loops.\n */\n private detectCycles(): void {\n const graph = new Map<string, Set<string>>();\n\n for (const policy of this.policies) {\n const sources = new Set<string>();\n if (policy.condition) {\n const addPaths = (obj: Record<string, unknown> | undefined) => {\n if (obj) Object.keys(obj).forEach(k => sources.add(k.split(\"/$row\")[0]));\n };\n addPaths(policy.condition.NumericGreaterThan);\n addPaths(policy.condition.NumericLessThan);\n addPaths(policy.condition.StringEquals);\n if (policy.condition.IsNull) policy.condition.IsNull.forEach(p => sources.add(p.split(\"/$row\")[0]));\n if (policy.condition.IsNotNull) policy.condition.IsNotNull.forEach(p => sources.add(p.split(\"/$row\")[0]));\n }\n\n for (const target of policy.targets) {\n const cleanTarget = target.split(\"/$row\")[0];\n if (!graph.has(cleanTarget)) {\n graph.set(cleanTarget, new Set());\n }\n sources.forEach(s => graph.get(cleanTarget)!.add(s));\n }\n }\n\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n\n const isCyclic = (node: string): boolean => {\n if (!visited.has(node)) {\n visited.add(node);\n recursionStack.add(node);\n\n const neighbors = graph.get(node);\n if (neighbors) {\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor) && isCyclic(neighbor)) {\n return true;\n } else if (recursionStack.has(neighbor)) {\n return true;\n }\n }\n }\n }\n recursionStack.delete(node);\n return false;\n };\n\n for (const node of graph.keys()) {\n if (isCyclic(node)) {\n throw new Error(`[MetaUI PolicyEngine] FATAL: Cyclic dependency detected involving policy target '${node}'. This will cause an infinite rendering loop.`);\n }\n }\n }\n\n /**\n * Safely traverses a JSON payload using a JSON pointer.\n * Handles UI5 model prefixes (like metaui>) seamlessly.\n * \n * @param data The root JSON object representing the form payload.\n * @param pointer The JSON pointer to traverse (e.g., \"/Customer/Age\").\n * @returns The resolved value, or undefined if the path does not exist.\n */\n private resolvePointer(data: unknown, pointer: string): unknown {\n if (!data || !pointer) return undefined;\n // Strip leading slash and any UI5 prefixes\n const cleanPointer = pointer.replace(/^\\//, \"\").replace(/^metaui>\\/?/, \"\");\n if (!cleanPointer) return data;\n \n const parts = cleanPointer.split(\"/\");\n let current = data as Record<string, unknown>;\n for (const part of parts) {\n if (current === undefined || current === null) return undefined;\n current = current[part] as Record<string, unknown>;\n }\n return current;\n }\n\n /**\n * Evaluates a complex condition tree against the live JSON payload.\n * \n * @param condition The condition block to evaluate.\n * @param data The live JSON payload from the StateManager.\n * @returns True if all condition parameters are met, otherwise false.\n */\n private evaluateCondition(condition: IPolicyCondition, data: unknown): boolean {\n // If there are multiple operators, we treat them as AND for now\n let result = true;\n const registry = PluginRegistry.getInstance();\n\n for (const [key, payload] of Object.entries(condition)) {\n const plugin = registry.getPolicyConditionPlugin(key);\n if (plugin) {\n if (!plugin.evaluate(payload, data, this.resolvePointer.bind(this))) {\n result = false;\n }\n } else {\n Logger.warn(`[MetaUI PolicyEngine] Unrecognized condition operator: ${key}`);\n }\n }\n\n return result;\n }\n\n /**\n * Expands relative $row policies into absolute index policies for each physical row.\n */\n private expandRowPolicies(data: unknown, policies: IPolicy[]): IPolicy[] {\n const expanded: IPolicy[] = [];\n for (const policy of policies) {\n let hasRow = false;\n let arrayPath = \"\";\n \n for (const target of policy.targets) {\n if (target.includes(\"$row\")) {\n hasRow = true;\n arrayPath = target.split(\"/$row\")[0];\n break;\n }\n }\n if (!hasRow && policy.condition) {\n const checkPaths = (obj: any) => {\n if (!obj) return;\n for (const key of Object.keys(obj)) {\n if (key.includes(\"$row\")) {\n hasRow = true;\n arrayPath = key.split(\"/$row\")[0];\n break;\n }\n }\n };\n checkPaths(policy.condition.NumericGreaterThan);\n checkPaths(policy.condition.NumericLessThan);\n checkPaths(policy.condition.StringEquals);\n \n if (policy.condition.IsNull) policy.condition.IsNull.forEach(p => { if (p.includes(\"$row\")) { hasRow = true; arrayPath = p.split(\"/$row\")[0]; } });\n if (policy.condition.IsNotNull) policy.condition.IsNotNull.forEach(p => { if (p.includes(\"$row\")) { hasRow = true; arrayPath = p.split(\"/$row\")[0]; } });\n }\n\n if (hasRow && arrayPath) {\n const arrayData = this.resolvePointer(data, arrayPath);\n if (Array.isArray(arrayData)) {\n for (let i = 0; i < arrayData.length; i++) {\n const cloneStr = JSON.stringify(policy).replace(/\\$row/g, String(i));\n expanded.push(JSON.parse(cloneStr));\n }\n }\n } else {\n expanded.push(policy);\n }\n }\n return expanded;\n }\n\n /**\n * Evaluates policies against the given data payload using a State Resolution Matrix.\n * @param data The JSON data payload.\n * @returns Array of delta states to apply to the UI.\n */\n public evaluate(data: unknown): IDeltaState[] {\n if (!this.policies || this.policies.length === 0) {\n return [];\n }\n\n const expandedPolicies = this.expandRowPolicies(data, this.policies);\n\n // Ledger: target -> property -> { forcedFalse: number, forcedTrue: number, lastMessage?: string }\n const ledger = new Map<string, Record<PropertyName, { forcedFalse: number, forcedTrue: number, lastMessage?: string }>>();\n\n const initTargetInLedger = (target: string) => {\n if (!ledger.has(target)) {\n ledger.set(target, {\n visibility: { forcedFalse: 0, forcedTrue: 0 },\n validity: { forcedFalse: 0, forcedTrue: 0 },\n required: { forcedFalse: 0, forcedTrue: 0 },\n editable: { forcedFalse: 0, forcedTrue: 0 }\n });\n }\n };\n\n // 1. Build the Composite State Ledger Matrix\n for (const policy of expandedPolicies) {\n const isConditionMet = this.evaluateCondition(policy.condition, data);\n \n for (const target of policy.targets) {\n initTargetInLedger(target);\n const currentLedger = ledger.get(target)!;\n \n const effectPlugin = PluginRegistry.getInstance().getPolicyEffectPlugin(policy.effect);\n if (!effectPlugin) {\n Logger.error(`[MetaUI PolicyEngine] Unrecognized policy effect: ${policy.effect}`);\n continue;\n }\n const mapped = effectPlugin.resolveState(isConditionMet, policy.effect);\n \n // Track forces. For restrictable properties (visibility, validity, editable), forcedFalse acts as a lock.\n // For required, forcedTrue acts as a lock.\n if (mapped.value) {\n currentLedger[mapped.property].forcedTrue++;\n } else {\n currentLedger[mapped.property].forcedFalse++;\n if (mapped.property === \"validity\" && isConditionMet && policy.message) {\n currentLedger.validity.lastMessage = policy.message;\n }\n }\n }\n }\n\n const newStateMatrix = new Map<string, ITargetState>();\n\n // 2. Resolve the Ledger into a concrete State Matrix\n for (const [target, stateMap] of ledger.entries()) {\n newStateMatrix.set(target, {\n // False (Hidden) wins if ANY policy forced it false\n visibility: stateMap.visibility.forcedFalse > 0 ? false : true,\n // False (Invalid) wins if ANY policy forced it false\n validity: stateMap.validity.forcedFalse > 0 ? false : true,\n // True (Required) wins if ANY policy forced it true\n required: stateMap.required.forcedTrue > 0 ? true : false,\n // False (Disabled) wins if ANY policy forced it false\n editable: stateMap.editable.forcedFalse > 0 ? false : true,\n errorMessage: stateMap.validity.lastMessage\n });\n }\n\n const deltas: IDeltaState[] = [];\n\n // 3. Differential Emission\n for (const [target, newState] of newStateMatrix.entries()) {\n const lastState = this.lastStateMatrix.get(target) || {};\n\n if (newState.visibility !== undefined && newState.visibility !== lastState.visibility) {\n deltas.push({ target, property: \"visibility\", value: newState.visibility });\n }\n if (newState.validity !== undefined && newState.validity !== lastState.validity) {\n if (newState.validity !== lastState.validity || newState.errorMessage !== lastState.errorMessage) {\n deltas.push({ target, property: \"validity\", value: newState.validity, errorMessage: newState.errorMessage });\n }\n }\n if (newState.required !== undefined && newState.required !== lastState.required) {\n deltas.push({ target, property: \"required\", value: newState.required });\n }\n if (newState.editable !== undefined && newState.editable !== lastState.editable) {\n deltas.push({ target, property: \"editable\", value: newState.editable });\n }\n }\n\n // Cache for next evaluation sweep\n this.lastStateMatrix = newStateMatrix;\n\n return deltas;\n }\n}\n"],"mappings":"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","ignoreList":[]}