@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
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaNormalizer.js","names":["Logger","___utils_Logger","SchemaNormalizer","canHandle","rawSchema","build","targetDefinition","normalize","data","schemaObj","trim","JSON","parse","e","msg","message","error","Error","Array","isArray","this","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","additionalProperties","targetProperties","properties","inferred","deepMergeProperties","requiredKeys","required","normalizeProperties","normalizePropertyMetadata","base","override","merged","key","Object","keys","overrideVal","baseVal","normalizedProps","isRequired","includes","prop","keyName","$ref","ui","label","generateLabel","isKey","readOnly","widget","valueHelp","enum","undefined","visibleOn","enabledOn","format","validators","formatter","args","rows","fullWidth","dialogButtonText","maxLength","minLength","minimum","maximum","pattern","precision","scale","multipleOf","name","spaced","replace","split","filter","w","length","map","word","charAt","toUpperCase","slice","toLowerCase","join","schema","inferPropertiesFromObject","obj","val","nestedProps","resolveScope","scope","startsWith","meta","bindingPath","propKey","pathSegments","current","debug","stringify","i","segment","__exports","__esModule"],"sources":["SchemaNormalizer.ts"],"sourcesContent":["/**\n * @file SchemaNormalizer.ts\n * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.\n */\n\nimport { ISchema, IPropertyMetadata, FieldType } from \"../interfaces/ISchema\";\nimport { ISchemaBuilderPlugin } from \"../interfaces/ISchemaBuilderPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\nexport class SchemaNormalizer implements ISchemaBuilderPlugin {\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public canHandle(rawSchema: unknown): boolean {\n // Fallback for native ISchemas or data inference.\n // It always returns true because it is the final fallback builder in the registry.\n return true;\n }\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public build(rawSchema: unknown, targetDefinition?: string): ISchema {\n return SchemaNormalizer.normalize(rawSchema);\n }\n\n /**\n * Validates that the provided raw payload conforms to the required ISchema structures.\n */\n public static normalize(rawSchema?: unknown, data?: unknown): ISchema {\n let schemaObj = rawSchema;\n\n if (typeof schemaObj === \"string\") {\n if (!schemaObj.trim()) {\n schemaObj = null;\n } else {\n try {\n schemaObj = JSON.parse(schemaObj);\n } catch (e) {\n const msg = \"Failed to parse schema string: \" + (e as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n }\n\n if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {\n return this.inferSchemaFromData(data);\n }\n\n try {\n // It is an object. Ensure it conforms to v2 structure.\n const normalized: ISchema = {\n title: schemaObj.title,\n type: schemaObj.type || (schemaObj.items ? \"array\" : \"object\"),\n layoutStrategy: schemaObj.layoutStrategy,\n uiLayout: schemaObj.uiLayout,\n additionalProperties: schemaObj.additionalProperties\n };\n\n let targetProperties = schemaObj.properties || {};\n\n if (schemaObj.additionalProperties === true && data) {\n const inferred = this.inferSchemaFromData(data);\n if (inferred.type === \"object\" && inferred.properties) {\n targetProperties = this.deepMergeProperties(inferred.properties, targetProperties);\n } else if (inferred.type === \"array\" && inferred.items && inferred.items.properties) {\n // Array schema merging could be added here if we want full support.\n }\n }\n\n if (normalized.type === \"object\") {\n const requiredKeys = Array.isArray(schemaObj.required) ? schemaObj.required : [];\n normalized.properties = this.normalizeProperties(targetProperties, requiredKeys);\n } else if (normalized.type === \"array\") {\n // Future expansion: array deep merge\n normalized.items = this.normalizePropertyMetadata(schemaObj.items || { type: \"object\", properties: {} }, \"items\", false);\n }\n\n return normalized;\n } catch (error) {\n const msg = \"Critical error normalizing schema object: \" + (error as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively deep merges an inferred schema over a base schema.\n * @param base The base property dictionary.\n * @param override The overriding inferred dictionary.\n * @returns A new deeply merged property dictionary.\n */\n private static deepMergeProperties(base: Record<string, unknown>, override: Record<string, unknown>): Record<string, unknown> {\n const merged = { ...base };\n for (const key of Object.keys(override)) {\n const overrideVal = override[key];\n const baseVal = merged[key];\n\n if (baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal) &&\n overrideVal && typeof overrideVal === \"object\" && !Array.isArray(overrideVal)) {\n merged[key] = this.deepMergeProperties(baseVal, overrideVal);\n } else {\n merged[key] = overrideVal;\n }\n }\n return merged;\n }\n\n /**\n * Normalizes a collection of properties.\n * @param properties The raw properties map.\n * @param requiredKeys An optional array of keys that are required by the parent object.\n * @returns A map of strict IPropertyMetadata objects.\n */\n private static normalizeProperties(properties: Record<string, unknown>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {\n const normalizedProps: Record<string, IPropertyMetadata> = {};\n for (const key of Object.keys(properties)) {\n const isRequired = requiredKeys.includes(key);\n normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key, isRequired);\n }\n return normalizedProps;\n }\n\n /**\n * Normalizes a single property against the ISchema specification.\n * @param prop The raw property definition.\n * @param keyName The string key name for generating default labels.\n * @param isRequired Indicates if the parent object mandated this property as required.\n * @returns A strict IPropertyMetadata instance.\n */\n private static normalizePropertyMetadata(prop: Record<string, unknown>, keyName: string, isRequired: boolean = false): IPropertyMetadata {\n const normalized: IPropertyMetadata = {\n type: (prop.type as FieldType) || \"string\",\n $ref: prop.$ref as string | undefined,\n ui: {\n label: (prop.ui as any)?.label || this.generateLabel(keyName),\n isKey: !!(prop.ui as any)?.isKey,\n readOnly: !!(prop.ui as any)?.readOnly,\n widget: (prop.ui as any)?.widget || (prop.valueHelp || prop.enum ? \"select\" : undefined),\n visibleOn: prop.ui?.visibleOn,\n enabledOn: prop.ui?.enabledOn,\n format: prop.ui?.format,\n validators: prop.ui?.validators,\n formatter: prop.ui?.formatter,\n args: prop.ui?.args,\n rows: prop.ui?.rows,\n fullWidth: prop.ui?.fullWidth,\n dialogButtonText: prop.ui?.dialogButtonText\n },\n required: isRequired || !!prop.required,\n maxLength: prop.maxLength as number,\n minLength: prop.minLength as number,\n minimum: prop.minimum,\n maximum: prop.maximum,\n pattern: prop.pattern,\n precision: prop.precision,\n scale: prop.scale,\n multipleOf: prop.multipleOf as number,\n valueHelp: prop.valueHelp,\n enum: prop.enum\n };\n\n if (normalized.type === \"object\" && prop.properties) {\n const requiredKeys = Array.isArray(prop.required) ? prop.required : [];\n normalized.properties = this.normalizeProperties(prop.properties as Record<string, unknown>, requiredKeys);\n normalized.uiLayout = prop.uiLayout;\n } else if (normalized.type === \"array\" && prop.items) {\n normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, \"items\", false);\n normalized.uiLayout = prop.uiLayout;\n }\n\n return normalized;\n }\n\n /**\n * Generates a Title Case label from camelCase or snake_case technical names.\n */\n private static generateLabel(name: string): string {\n if (!name) return \"\";\n let spaced = name.replace(/([A-Z])/g, \" $1\").replace(/_/g, \" \");\n return spaced.split(' ')\n .filter(w => w.length > 0)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n .trim();\n }\n\n /**\n * Infers a v2 ISchema structure dynamically from a plain data payload.\n */\n public static inferSchemaFromData(data: unknown): ISchema {\n const schema: ISchema = { type: \"object\", properties: {}, layoutStrategy: \"compact\", title: \"\" };\n\n if (!data || typeof data !== \"object\") {\n return schema;\n }\n\n if (Array.isArray(data)) {\n schema.type = \"array\";\n if (data.length > 0 && typeof data[0] !== \"object\") {\n schema.layoutStrategy = \"compact\";\n schema.items = { type: typeof data[0] as FieldType };\n } else {\n schema.layoutStrategy = \"table\";\n schema.items = {\n type: \"object\",\n layoutStrategy: \"compact\",\n properties: data.length > 0 ? this.inferPropertiesFromObject(data[0] as Record<string, unknown>) : {}\n };\n }\n } else {\n schema.type = \"object\";\n schema.properties = this.inferPropertiesFromObject(data);\n }\n\n return schema;\n }\n\n /**\n * Infers field metadata recursively from a raw data object.\n * @param obj The raw JavaScript object.\n * @returns A dictionary of inferred IPropertyMetadata.\n */\n private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const properties: Record<string, IPropertyMetadata> = {};\n if (!obj || typeof obj !== \"object\") return properties;\n\n for (const key of Object.keys(obj)) {\n const val = obj[key];\n if (val === null || val === undefined) continue;\n\n let type: FieldType = \"string\";\n let items: IPropertyMetadata | undefined;\n let nestedProps: Record<string, IPropertyMetadata> | undefined;\n\n if (typeof val === \"number\") type = \"number\";\n else if (typeof val === \"boolean\") type = \"boolean\";\n else if (Array.isArray(val)) {\n type = \"array\";\n if (val.length > 0 && typeof val[0] !== \"object\") {\n items = {\n type: typeof val[0] as FieldType\n };\n } else {\n items = {\n type: \"object\",\n properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, unknown>) : {}\n };\n }\n } else if (typeof val === \"object\") {\n type = \"object\";\n nestedProps = this.inferPropertiesFromObject(val);\n }\n\n properties[key] = {\n type,\n items,\n properties: nestedProps,\n ui: {\n label: this.generateLabel(key),\n isKey: false,\n readOnly: false,\n widget: type === \"array\" && items?.type !== \"object\" ? \"multiInput\" : undefined\n }\n };\n }\n\n return properties;\n }\n\n /**\n * Resolves a JSON Schema scope (e.g. '#/properties/header/properties/id')\n * against the ISchema, returning the PropertyMetadata and the UI5 binding path.\n */\n public static resolveScope(schema: ISchema, scope: string): { meta: IPropertyMetadata | undefined, bindingPath: string, propKey: string } {\n if (!scope || !scope.startsWith(\"#/properties/\")) {\n return { meta: undefined, bindingPath: scope || \"\", propKey: scope || \"\" };\n }\n \n const pathSegments = scope.replace(\"#/properties/\", \"\").split(\"/properties/\");\n let current: Record<string, IPropertyMetadata> | undefined = schema.properties;\n let meta: IPropertyMetadata | undefined;\n \n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Resolving scope '${scope}' with segments: ${JSON.stringify(pathSegments)}`, \"SchemaNormalizer\");\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Root schema keys: ${Object.keys(schema.properties || {})}`, \"SchemaNormalizer\");\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n if (!current) {\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `current is undefined at segment '${segment}'`, \"SchemaNormalizer\");\n meta = undefined;\n break;\n }\n meta = current[segment];\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Segment '${segment}' resolved to meta: ${!!meta}. Available keys in current: ${Object.keys(current)}`, \"SchemaNormalizer\");\n if (i < pathSegments.length - 1) {\n current = meta?.properties;\n }\n }\n \n const bindingPath = pathSegments.join(\"/\");\n const propKey = scope.replace(\"#/properties/\", \"\"); // The original raw string for logging\n \n return {\n meta,\n bindingPath,\n propKey\n };\n }\n}\n"],"mappings":"2DAAA,MAOSA,EAAMC,EAAA,UAER,MAAMC,EAKFC,UAAUC,GAGb,OAAO,IACX,CAKOC,MAAMD,EAAoBE,GAC7B,OAAOJ,EAAiBK,UAAUH,EACtC,CAKA,gBAAcG,CAAUH,EAAqBI,GACzC,IAAIC,EAAYL,EAEhB,UAAWK,IAAc,SAAU,CAC/B,IAAKA,EAAUC,OAAQ,CACnBD,EAAY,IAChB,KAAO,CACH,IACIA,EAAYE,KAAKC,MAAMH,EAC3B,CAAE,MAAOI,GACL,MAAMC,EAAM,kCAAqCD,EAAYE,QAC7Df,EAAOgB,MAAM,4BAA6BF,GAC1C,MAAM,IAAIG,MAAMH,EACpB,CACJ,CACJ,CAEA,IAAKL,UAAoBA,IAAc,UAAYS,MAAMC,QAAQV,GAAY,CACzE,OAAOW,KAAKC,oBAAoBb,EACpC,CAEA,IAEI,MAAMc,EAAsB,CACxBC,MAAOd,EAAUc,MACjBC,KAAMf,EAAUe,OAASf,EAAUgB,MAAQ,QAAU,UACrDC,eAAgBjB,EAAUiB,eAC1BC,SAAUlB,EAAUkB,SACpBC,qBAAsBnB,EAAUmB,sBAGpC,IAAIC,EAAmBpB,EAAUqB,YAAc,CAAC,EAEhD,GAAIrB,EAAUmB,uBAAyB,MAAQpB,EAAM,CACjD,MAAMuB,EAAWX,KAAKC,oBAAoBb,GAC1C,GAAIuB,EAASP,OAAS,UAAYO,EAASD,WAAY,CACnDD,EAAmBT,KAAKY,oBAAoBD,EAASD,WAAYD,EACrE,MAAO,GAAIE,EAASP,OAAS,SAAWO,EAASN,OAASM,EAASN,MAAMK,WAAY,CACjF,CAER,CAEA,GAAIR,EAAWE,OAAS,SAAU,CAC9B,MAAMS,EAAef,MAAMC,QAAQV,EAAUyB,UAAYzB,EAAUyB,SAAW,GAC9EZ,EAAWQ,WAAaV,KAAKe,oBAAoBN,EAAkBI,EACvE,MAAO,GAAIX,EAAWE,OAAS,QAAS,CAEpCF,EAAWG,MAAQL,KAAKgB,0BAA0B3B,EAAUgB,OAAS,CAAED,KAAM,SAAUM,WAAY,CAAC,GAAK,QAAS,MACtH,CAEA,OAAOR,CACX,CAAE,MAAON,GACL,MAAMF,EAAM,6CAAgDE,EAAgBD,QAC5Ef,EAAOgB,MAAM,4BAA6BF,GAC1C,MAAM,IAAIG,MAAMH,EACpB,CACJ,CAQA,0BAAekB,CAAoBK,EAA+BC,GAC9D,MAAMC,EAAS,IAAKF,GACpB,IAAK,MAAMG,KAAOC,OAAOC,KAAKJ,GAAW,CACrC,MAAMK,EAAcL,EAASE,GAC7B,MAAMI,EAAUL,EAAOC,GAEvB,GAAII,UAAkBA,IAAY,WAAa1B,MAAMC,QAAQyB,IACzDD,UAAsBA,IAAgB,WAAazB,MAAMC,QAAQwB,GAAc,CAC/EJ,EAAOC,GAAOpB,KAAKY,oBAAoBY,EAASD,EACpD,KAAO,CACHJ,EAAOC,GAAOG,CAClB,CACJ,CACA,OAAOJ,CACX,CAQA,0BAAeJ,CAAoBL,EAAqCG,EAAyB,IAC7F,MAAMY,EAAqD,CAAC,EAC5D,IAAK,MAAML,KAAOC,OAAOC,KAAKZ,GAAa,CACvC,MAAMgB,EAAab,EAAac,SAASP,GACzCK,EAAgBL,GAAOpB,KAAKgB,0BAA0BN,EAAWU,GAAMA,EAAKM,EAChF,CACA,OAAOD,CACX,CASA,gCAAeT,CAA0BY,EAA+BC,EAAiBH,EAAsB,OAC3G,MAAMxB,EAAgC,CAClCE,KAAOwB,EAAKxB,MAAsB,SAClC0B,KAAMF,EAAKE,KACXC,GAAI,CACAC,MAAQJ,EAAKG,IAAYC,OAAShC,KAAKiC,cAAcJ,GACrDK,QAAUN,EAAKG,IAAYG,MAC3BC,WAAaP,EAAKG,IAAYI,SAC9BC,OAASR,EAAKG,IAAYK,SAAWR,EAAKS,WAAaT,EAAKU,KAAO,SAAWC,WAC9EC,UAAWZ,EAAKG,IAAIS,UACpBC,UAAWb,EAAKG,IAAIU,UACpBC,OAAQd,EAAKG,IAAIW,OACjBC,WAAYf,EAAKG,IAAIY,WACrBC,UAAWhB,EAAKG,IAAIa,UACpBC,KAAMjB,EAAKG,IAAIc,KACfC,KAAMlB,EAAKG,IAAIe,KACfC,UAAWnB,EAAKG,IAAIgB,UACpBC,iBAAkBpB,EAAKG,IAAIiB,kBAE/BlC,SAAUY,KAAgBE,EAAKd,SAC/BmC,UAAWrB,EAAKqB,UAChBC,UAAWtB,EAAKsB,UAChBC,QAASvB,EAAKuB,QACdC,QAASxB,EAAKwB,QACdC,QAASzB,EAAKyB,QACdC,UAAW1B,EAAK0B,UAChBC,MAAO3B,EAAK2B,MACZC,WAAY5B,EAAK4B,WACjBnB,UAAWT,EAAKS,UAChBC,KAAMV,EAAKU,MAGf,GAAIpC,EAAWE,OAAS,UAAYwB,EAAKlB,WAAY,CACjD,MAAMG,EAAef,MAAMC,QAAQ6B,EAAKd,UAAYc,EAAKd,SAAW,GACpEZ,EAAWQ,WAAaV,KAAKe,oBAAoBa,EAAKlB,WAAuCG,GAC7FX,EAAWK,SAAWqB,EAAKrB,QAC/B,MAAO,GAAIL,EAAWE,OAAS,SAAWwB,EAAKvB,MAAO,CAClDH,EAAWG,MAAQL,KAAKgB,0BAA0BY,EAAKvB,MAAkC,QAAS,OAClGH,EAAWK,SAAWqB,EAAKrB,QAC/B,CAEA,OAAOL,CACX,CAKA,oBAAe+B,CAAcwB,GACzB,IAAKA,EAAM,MAAO,GAClB,IAAIC,EAASD,EAAKE,QAAQ,WAAY,OAAOA,QAAQ,KAAM,KAC3D,OAAOD,EAAOE,MAAM,KACfC,OAAOC,GAAKA,EAAEC,OAAS,GACvBC,IAAIC,GAAQA,EAAKC,OAAO,GAAGC,cAAgBF,EAAKG,MAAM,GAAGC,eACzDC,KAAK,KACLhF,MACT,CAKA,0BAAcW,CAAoBb,GAC9B,MAAMmF,EAAkB,CAAEnE,KAAM,SAAUM,WAAY,CAAC,EAAGJ,eAAgB,UAAWH,MAAO,IAE5F,IAAKf,UAAeA,IAAS,SAAU,CACnC,OAAOmF,CACX,CAEA,GAAIzE,MAAMC,QAAQX,GAAO,CACrBmF,EAAOnE,KAAO,QACd,GAAIhB,EAAK2E,OAAS,UAAY3E,EAAK,KAAO,SAAU,CAChDmF,EAAOjE,eAAiB,UACxBiE,EAAOlE,MAAQ,CAAED,YAAahB,EAAK,GACvC,KAAO,CACHmF,EAAOjE,eAAiB,QACxBiE,EAAOlE,MAAQ,CACXD,KAAM,SACNE,eAAgB,UAChBI,WAAYtB,EAAK2E,OAAS,EAAI/D,KAAKwE,0BAA0BpF,EAAK,IAAiC,CAAC,EAE5G,CACJ,KAAO,CACHmF,EAAOnE,KAAO,SACdmE,EAAO7D,WAAaV,KAAKwE,0BAA0BpF,EACvD,CAEA,OAAOmF,CACX,CAOA,gCAAeC,CAA0BC,GACrC,MAAM/D,EAAgD,CAAC,EACvD,IAAK+D,UAAcA,IAAQ,SAAU,OAAO/D,EAE5C,IAAK,MAAMU,KAAOC,OAAOC,KAAKmD,GAAM,CAChC,MAAMC,EAAMD,EAAIrD,GAChB,GAAIsD,IAAQ,MAAQA,IAAQnC,UAAW,SAEvC,IAAInC,EAAkB,SACtB,IAAIC,EACJ,IAAIsE,EAEJ,UAAWD,IAAQ,SAAUtE,EAAO,cAC/B,UAAWsE,IAAQ,UAAWtE,EAAO,eACrC,GAAIN,MAAMC,QAAQ2E,GAAM,CACzBtE,EAAO,QACP,GAAIsE,EAAIX,OAAS,UAAYW,EAAI,KAAO,SAAU,CAC9CrE,EAAQ,CACJD,YAAasE,EAAI,GAEzB,KAAO,CACHrE,EAAQ,CACJD,KAAM,SACNM,WAAYgE,EAAIX,OAAS,EAAI/D,KAAKwE,0BAA0BE,EAAI,IAAiC,CAAC,EAE1G,CACJ,MAAO,UAAWA,IAAQ,SAAU,CAChCtE,EAAO,SACPuE,EAAc3E,KAAKwE,0BAA0BE,EACjD,CAEAhE,EAAWU,GAAO,CACdhB,OACAC,QACAK,WAAYiE,EACZ5C,GAAI,CACAC,MAAOhC,KAAKiC,cAAcb,GAC1Bc,MAAO,MACPC,SAAU,MACVC,OAAQhC,IAAS,SAAWC,GAAOD,OAAS,SAAW,aAAemC,WAGlF,CAEA,OAAO7B,CACX,CAMA,mBAAckE,CAAaL,EAAiBM,GACxC,IAAKA,IAAUA,EAAMC,WAAW,iBAAkB,CAC9C,MAAO,CAAEC,KAAMxC,UAAWyC,YAAaH,GAAS,GAAII,QAASJ,GAAS,GAC1E,CAEA,MAAMK,EAAeL,EAAMlB,QAAQ,gBAAiB,IAAIC,MAAM,gBAC9D,IAAIuB,EAAyDZ,EAAO7D,WACpE,IAAIqE,EAEJnG,EAAOwG,MAAM,4BAA6B,oBAAoBP,qBAAyBtF,KAAK8F,UAAUH,KAAiB,oBACvHtG,EAAOwG,MAAM,4BAA6B,qBAAqB/D,OAAOC,KAAKiD,EAAO7D,YAAc,CAAC,KAAM,oBAEvG,IAAK,IAAI4E,EAAI,EAAGA,EAAIJ,EAAanB,OAAQuB,IAAK,CAC1C,MAAMC,EAAUL,EAAaI,GAC7B,IAAKH,EAAS,CACVvG,EAAOwG,MAAM,4BAA6B,oCAAoCG,KAAY,oBAC1FR,EAAOxC,UACP,KACJ,CACAwC,EAAOI,EAAQI,GACf3G,EAAOwG,MAAM,4BAA6B,YAAYG,0BAAgCR,iCAAoC1D,OAAOC,KAAK6D,KAAY,oBAClJ,GAAIG,EAAIJ,EAAanB,OAAS,EAAG,CAC7BoB,EAAUJ,GAAMrE,UACpB,CACJ,CAEA,MAAMsE,EAAcE,EAAaZ,KAAK,KACtC,MAAMW,EAAUJ,EAAMlB,QAAQ,gBAAiB,IAE/C,MAAO,CACHoB,OACAC,cACAC,UAER,EACH,IAAAO,EAAA,CAAAC,WAAA,MAAAD,EAAA1G,mBAAA,OAAA0G,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"SchemaNormalizer.js","names":["SCHEMA_TYPE","___constants_MetaUIConstants","Logger","___utils_Logger","SchemaNormalizer","canHandle","rawSchema","build","targetDefinition","normalize","data","schemaObj","STRING","trim","JSON","parse","e","msg","message","error","Error","Array","isArray","this","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","stringify","undefined","additionalProperties","uiPolicies","targetProperties","properties","inferred","deepMergeProperties","requiredKeys","required","normalizeProperties","normalizePropertyMetadata","base","override","merged","key","Object","keys","overrideVal","baseVal","normalizedProps","isRequired","includes","rawProp","keyName","prop","ui","$ref","label","generateLabel","isKey","readOnly","widget","valueHelp","enum","visibleOn","enabledOn","format","validators","formatter","args","rows","fullWidth","dialogButtonText","controlProps","maxLength","minLength","minimum","maximum","pattern","precision","scale","multipleOf","name","spaced","replace","split","filter","w","length","map","word","charAt","toUpperCase","slice","toLowerCase","join","schema","mergedProperties","limit","Math","min","i","inferPropertiesFromObject","obj","val","nestedProps","resolveScope","scope","startsWith","meta","bindingPath","propKey","pathSegments","current","debug","segment","__exports","__esModule"],"sources":["SchemaNormalizer.ts"],"sourcesContent":["/**\n * @file SchemaNormalizer.ts\n * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.\n */\n\nimport { ISchema, IPropertyMetadata, FieldType } from \"../interfaces/ISchema\";\nimport { SCHEMA_TYPE } from \"../constants/MetaUIConstants\";\nimport { ISchemaBuilderPlugin } from \"../interfaces/ISchemaBuilderPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\nexport class SchemaNormalizer implements ISchemaBuilderPlugin {\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public canHandle(rawSchema: unknown): boolean {\n // Fallback for native ISchemas or data inference.\n // It always returns true because it is the final fallback builder in the registry.\n return true;\n }\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public build(rawSchema: unknown, targetDefinition?: string): ISchema {\n return SchemaNormalizer.normalize(rawSchema);\n }\n\n /**\n * Validates that the provided raw payload conforms to the required ISchema structures.\n */\n public static normalize(rawSchema?: unknown, data?: unknown): ISchema {\n let schemaObj = rawSchema;\n\n if (typeof schemaObj === SCHEMA_TYPE.STRING) {\n if (!schemaObj.trim()) {\n schemaObj = null;\n } else {\n try {\n schemaObj = JSON.parse(schemaObj);\n } catch (e) {\n const msg = \"Failed to parse schema string: \" + (e as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n }\n\n if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {\n return this.inferSchemaFromData(data);\n }\n\n try {\n // It is an object. Ensure it conforms to v2 structure.\n const normalized: ISchema = {\n title: schemaObj.title,\n type: schemaObj.type || (schemaObj.items ? \"array\" : \"object\"),\n layoutStrategy: schemaObj.layoutStrategy,\n uiLayout: schemaObj.uiLayout ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,\n additionalProperties: schemaObj.additionalProperties,\n uiPolicies: schemaObj.uiPolicies ? JSON.parse(JSON.stringify(schemaObj.uiPolicies)) : undefined\n };\n\n let targetProperties = schemaObj.properties || {};\n\n if (schemaObj.additionalProperties === true && data) {\n const inferred = this.inferSchemaFromData(data);\n if (inferred.type === \"object\" && inferred.properties) {\n targetProperties = this.deepMergeProperties(inferred.properties, targetProperties);\n } else if (inferred.type === \"array\" && inferred.items && inferred.items.properties) {\n // Array schema merging could be added here if we want full support.\n }\n }\n\n if (normalized.type === \"object\") {\n const requiredKeys = Array.isArray(schemaObj.required) ? schemaObj.required : [];\n normalized.properties = this.normalizeProperties(targetProperties, requiredKeys);\n } else if (normalized.type === \"array\") {\n // Future expansion: array deep merge\n normalized.items = this.normalizePropertyMetadata(schemaObj.items || { type: \"object\", properties: {} }, \"items\", false);\n }\n\n return normalized;\n } catch (error) {\n const msg = \"Critical error normalizing schema object: \" + (error as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively deep merges an inferred schema over a base schema.\n * @param base The base property dictionary.\n * @param override The overriding inferred dictionary.\n * @returns A new deeply merged property dictionary.\n */\n private static deepMergeProperties(base: Record<string, unknown>, override: Record<string, unknown>): Record<string, unknown> {\n const merged = { ...base };\n for (const key of Object.keys(override)) {\n const overrideVal = override[key];\n const baseVal = merged[key];\n\n if (baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal) &&\n overrideVal && typeof overrideVal === \"object\" && !Array.isArray(overrideVal)) {\n merged[key] = this.deepMergeProperties(baseVal, overrideVal);\n } else {\n merged[key] = overrideVal;\n }\n }\n return merged;\n }\n\n /**\n * Normalizes a collection of properties.\n * @param properties The raw properties map.\n * @param requiredKeys An optional array of keys that are required by the parent object.\n * @returns A map of strict IPropertyMetadata objects.\n */\n private static normalizeProperties(properties: Record<string, unknown>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {\n const normalizedProps: Record<string, IPropertyMetadata> = {};\n for (const key of Object.keys(properties)) {\n const isRequired = requiredKeys.includes(key);\n normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key, isRequired);\n }\n return normalizedProps;\n }\n\n /**\n * Normalizes a single property against the ISchema specification.\n * @param prop The raw property definition.\n * @param keyName The string key name for generating default labels.\n * @param isRequired Indicates if the parent object mandated this property as required.\n * @returns A strict IPropertyMetadata instance.\n */\n private static normalizePropertyMetadata(rawProp: unknown, keyName: string, isRequired: boolean = false): IPropertyMetadata {\n const prop = (rawProp || {}) as Record<string, unknown>;\n const ui = (prop.ui || {}) as Record<string, unknown>;\n \n const normalized: IPropertyMetadata = {\n type: (prop.type as FieldType) || \"string\",\n $ref: prop.$ref as string | undefined,\n ui: {\n label: ui.label as string || this.generateLabel(keyName),\n isKey: !!ui.isKey,\n readOnly: !!ui.readOnly,\n widget: ui.widget as string || (prop.valueHelp || prop.enum ? \"select\" : undefined),\n visibleOn: prop.ui?.visibleOn,\n enabledOn: prop.ui?.enabledOn,\n format: prop.ui?.format,\n validators: prop.ui?.validators,\n formatter: prop.ui?.formatter,\n args: prop.ui?.args,\n rows: prop.ui?.rows,\n fullWidth: prop.ui?.fullWidth,\n dialogButtonText: prop.ui?.dialogButtonText,\n controlProps: prop.ui?.controlProps\n },\n required: isRequired || !!prop.required,\n maxLength: prop.maxLength as number,\n minLength: prop.minLength as number,\n minimum: prop.minimum,\n maximum: prop.maximum,\n pattern: prop.pattern,\n precision: prop.precision,\n scale: prop.scale,\n multipleOf: prop.multipleOf as number,\n valueHelp: prop.valueHelp,\n enum: prop.enum\n };\n\n if (normalized.type === \"object\" && prop.properties) {\n const requiredKeys = Array.isArray(prop.required) ? prop.required : [];\n normalized.properties = this.normalizeProperties(prop.properties as Record<string, unknown>, requiredKeys);\n normalized.uiLayout = prop.uiLayout;\n } else if (normalized.type === \"array\") {\n // Auto-correct arrays that were mistakenly flattened with 'properties' instead of 'items.properties'\n if (prop.properties && !prop.items) {\n prop.items = {\n type: \"object\",\n properties: prop.properties\n };\n delete prop.properties;\n }\n\n if (prop.items) {\n normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, \"items\", false);\n }\n normalized.uiLayout = prop.uiLayout;\n }\n\n return normalized;\n }\n\n /**\n * Generates a Title Case label from camelCase or snake_case technical names.\n */\n private static generateLabel(name: string): string {\n if (!name) return \"\";\n let spaced = name.replace(/([A-Z])/g, \" $1\").replace(/_/g, \" \");\n return spaced.split(' ')\n .filter(w => w.length > 0)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n .trim();\n }\n\n /**\n * Infers a v2 ISchema structure dynamically from a plain data payload.\n */\n public static inferSchemaFromData(data: unknown): ISchema {\n const schema: ISchema = { type: \"object\", properties: {}, layoutStrategy: \"compact\", title: \"\" };\n\n if (!data || typeof data !== \"object\") {\n return schema;\n }\n\n if (Array.isArray(data)) {\n schema.type = \"array\";\n if (data.length > 0 && typeof data[0] !== \"object\") {\n schema.layoutStrategy = \"compact\";\n schema.items = { type: typeof data[0] as FieldType };\n } else {\n schema.layoutStrategy = \"table\";\n \n let mergedProperties: Record<string, unknown> = {};\n const limit = Math.min(data.length, 50);\n for (let i = 0; i < limit; i++) {\n const inferred = this.inferPropertiesFromObject(data[i] as Record<string, any>);\n mergedProperties = this.deepMergeProperties(mergedProperties, inferred as unknown as Record<string, unknown>);\n }\n\n schema.items = {\n type: \"object\",\n layoutStrategy: \"compact\",\n properties: mergedProperties as Record<string, IPropertyMetadata>\n } as any;\n }\n } else {\n schema.type = \"object\";\n schema.properties = this.inferPropertiesFromObject(data);\n }\n\n return schema;\n }\n\n /**\n * Infers field metadata recursively from a raw data object.\n * @param obj The raw JavaScript object.\n * @returns A dictionary of inferred IPropertyMetadata.\n */\n private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const properties: Record<string, IPropertyMetadata> = {};\n if (!obj || typeof obj !== \"object\") return properties;\n\n for (const key of Object.keys(obj)) {\n const val = obj[key];\n if (val === null || val === undefined) continue;\n\n let type: FieldType = SCHEMA_TYPE.STRING;\n let items: IPropertyMetadata | undefined;\n let nestedProps: Record<string, IPropertyMetadata> | undefined;\n\n if (typeof val === \"number\") type = \"number\";\n else if (typeof val === \"boolean\") type = \"boolean\";\n else if (Array.isArray(val)) {\n type = \"array\";\n if (val.length > 0 && typeof val[0] !== \"object\") {\n items = {\n type: typeof val[0] as FieldType\n };\n } else {\n items = {\n type: \"object\",\n properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, unknown>) : {}\n };\n }\n } else if (typeof val === \"object\") {\n type = \"object\";\n nestedProps = this.inferPropertiesFromObject(val as Record<string, unknown>);\n }\n\n properties[key] = {\n type,\n items,\n properties: nestedProps,\n ui: {\n label: this.generateLabel(key),\n isKey: false,\n readOnly: false,\n widget: type === \"array\" && items?.type !== \"object\" ? \"multiInput\" : undefined\n }\n };\n }\n\n return properties;\n }\n\n /**\n * Resolves a JSON Schema scope (e.g. '#/properties/header/properties/id')\n * against the ISchema, returning the PropertyMetadata and the UI5 binding path.\n */\n public static resolveScope(schema: ISchema, scope: string): { meta: IPropertyMetadata | undefined, bindingPath: string, propKey: string } {\n if (!scope || !scope.startsWith(\"#/properties/\")) {\n return { meta: undefined, bindingPath: scope || \"\", propKey: scope || \"\" };\n }\n \n const pathSegments = scope.replace(\"#/properties/\", \"\").split(\"/properties/\");\n let current: Record<string, IPropertyMetadata> | undefined = schema.properties;\n let meta: IPropertyMetadata | undefined;\n \n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Resolving scope '${scope}' with segments: ${JSON.stringify(pathSegments)}`, \"SchemaNormalizer\");\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Root schema keys: ${Object.keys(schema.properties || {})}`, \"SchemaNormalizer\");\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n if (!current) {\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `current is undefined at segment '${segment}'`, \"SchemaNormalizer\");\n meta = undefined;\n break;\n }\n meta = current[segment];\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Segment '${segment}' resolved to meta: ${!!meta}. Available keys in current: ${Object.keys(current)}`, \"SchemaNormalizer\");\n if (i < pathSegments.length - 1) {\n current = meta?.properties;\n }\n }\n \n const bindingPath = pathSegments.join(\"/\");\n const propKey = scope.replace(\"#/properties/\", \"\"); // The original raw string for logging\n \n return {\n meta,\n bindingPath,\n propKey\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import { ISchema, IPropertyMetadata, FieldType } from "../interfaces/ISchema";
7
+ import { SCHEMA_TYPE } from "../constants/MetaUIConstants";
7
8
  import { ISchemaBuilderPlugin } from "../interfaces/ISchemaBuilderPlugin";
8
9
  import { Logger } from "../utils/Logger";
9
10
 
@@ -31,7 +32,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
31
32
  public static normalize(rawSchema?: unknown, data?: unknown): ISchema {
32
33
  let schemaObj = rawSchema;
33
34
 
34
- if (typeof schemaObj === "string") {
35
+ if (typeof schemaObj === SCHEMA_TYPE.STRING) {
35
36
  if (!schemaObj.trim()) {
36
37
  schemaObj = null;
37
38
  } else {
@@ -55,8 +56,9 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
55
56
  title: schemaObj.title,
56
57
  type: schemaObj.type || (schemaObj.items ? "array" : "object"),
57
58
  layoutStrategy: schemaObj.layoutStrategy,
58
- uiLayout: schemaObj.uiLayout,
59
- additionalProperties: schemaObj.additionalProperties
59
+ uiLayout: schemaObj.uiLayout ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,
60
+ additionalProperties: schemaObj.additionalProperties,
61
+ uiPolicies: schemaObj.uiPolicies ? JSON.parse(JSON.stringify(schemaObj.uiPolicies)) : undefined
60
62
  };
61
63
 
62
64
  let targetProperties = schemaObj.properties || {};
@@ -130,15 +132,18 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
130
132
  * @param isRequired Indicates if the parent object mandated this property as required.
131
133
  * @returns A strict IPropertyMetadata instance.
132
134
  */
133
- private static normalizePropertyMetadata(prop: Record<string, unknown>, keyName: string, isRequired: boolean = false): IPropertyMetadata {
135
+ private static normalizePropertyMetadata(rawProp: unknown, keyName: string, isRequired: boolean = false): IPropertyMetadata {
136
+ const prop = (rawProp || {}) as Record<string, unknown>;
137
+ const ui = (prop.ui || {}) as Record<string, unknown>;
138
+
134
139
  const normalized: IPropertyMetadata = {
135
140
  type: (prop.type as FieldType) || "string",
136
141
  $ref: prop.$ref as string | undefined,
137
142
  ui: {
138
- label: (prop.ui as any)?.label || this.generateLabel(keyName),
139
- isKey: !!(prop.ui as any)?.isKey,
140
- readOnly: !!(prop.ui as any)?.readOnly,
141
- widget: (prop.ui as any)?.widget || (prop.valueHelp || prop.enum ? "select" : undefined),
143
+ label: ui.label as string || this.generateLabel(keyName),
144
+ isKey: !!ui.isKey,
145
+ readOnly: !!ui.readOnly,
146
+ widget: ui.widget as string || (prop.valueHelp || prop.enum ? "select" : undefined),
142
147
  visibleOn: prop.ui?.visibleOn,
143
148
  enabledOn: prop.ui?.enabledOn,
144
149
  format: prop.ui?.format,
@@ -147,7 +152,8 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
147
152
  args: prop.ui?.args,
148
153
  rows: prop.ui?.rows,
149
154
  fullWidth: prop.ui?.fullWidth,
150
- dialogButtonText: prop.ui?.dialogButtonText
155
+ dialogButtonText: prop.ui?.dialogButtonText,
156
+ controlProps: prop.ui?.controlProps
151
157
  },
152
158
  required: isRequired || !!prop.required,
153
159
  maxLength: prop.maxLength as number,
@@ -166,8 +172,19 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
166
172
  const requiredKeys = Array.isArray(prop.required) ? prop.required : [];
167
173
  normalized.properties = this.normalizeProperties(prop.properties as Record<string, unknown>, requiredKeys);
168
174
  normalized.uiLayout = prop.uiLayout;
169
- } else if (normalized.type === "array" && prop.items) {
170
- normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, "items", false);
175
+ } else if (normalized.type === "array") {
176
+ // Auto-correct arrays that were mistakenly flattened with 'properties' instead of 'items.properties'
177
+ if (prop.properties && !prop.items) {
178
+ prop.items = {
179
+ type: "object",
180
+ properties: prop.properties
181
+ };
182
+ delete prop.properties;
183
+ }
184
+
185
+ if (prop.items) {
186
+ normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, "items", false);
187
+ }
171
188
  normalized.uiLayout = prop.uiLayout;
172
189
  }
173
190
 
@@ -204,11 +221,19 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
204
221
  schema.items = { type: typeof data[0] as FieldType };
205
222
  } else {
206
223
  schema.layoutStrategy = "table";
224
+
225
+ let mergedProperties: Record<string, unknown> = {};
226
+ const limit = Math.min(data.length, 50);
227
+ for (let i = 0; i < limit; i++) {
228
+ const inferred = this.inferPropertiesFromObject(data[i] as Record<string, any>);
229
+ mergedProperties = this.deepMergeProperties(mergedProperties, inferred as unknown as Record<string, unknown>);
230
+ }
231
+
207
232
  schema.items = {
208
233
  type: "object",
209
234
  layoutStrategy: "compact",
210
- properties: data.length > 0 ? this.inferPropertiesFromObject(data[0] as Record<string, unknown>) : {}
211
- };
235
+ properties: mergedProperties as Record<string, IPropertyMetadata>
236
+ } as any;
212
237
  }
213
238
  } else {
214
239
  schema.type = "object";
@@ -231,7 +256,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
231
256
  const val = obj[key];
232
257
  if (val === null || val === undefined) continue;
233
258
 
234
- let type: FieldType = "string";
259
+ let type: FieldType = SCHEMA_TYPE.STRING;
235
260
  let items: IPropertyMetadata | undefined;
236
261
  let nestedProps: Record<string, IPropertyMetadata> | undefined;
237
262
 
@@ -251,7 +276,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
251
276
  }
252
277
  } else if (typeof val === "object") {
253
278
  type = "object";
254
- nestedProps = this.inferPropertiesFromObject(val);
279
+ nestedProps = this.inferPropertiesFromObject(val as Record<string, unknown>);
255
280
  }
256
281
 
257
282
  properties[key] = {
@@ -1,11 +1,11 @@
1
- sap.ui.define([], function () {
1
+ sap.ui.define(["../constants/MetaUIConstants"], function (___constants_MetaUIConstants) {
2
2
  "use strict";
3
3
 
4
4
  /**
5
5
  * @file SchemaValidator.ts
6
6
  * @description Structural validation utility to catch developer errors in the JSON schema itself.
7
7
  */
8
-
8
+ const SCHEMA_TYPE = ___constants_MetaUIConstants["SCHEMA_TYPE"];
9
9
  class SchemaValidator {
10
10
  /**
11
11
  * Validates a parsed JSON schema object for structural correctness.
@@ -24,6 +24,18 @@ sap.ui.define([], function () {
24
24
  if (s.type === "object" && !s.properties) {
25
25
  errors.push("Object schema is missing the 'properties' node.");
26
26
  }
27
+ if (s.type === "array") {
28
+ if (!s.items) {
29
+ // Warning rather than error for inference support, but we should check it
30
+ // Actually inference creates { items: { type: 'string' } } for primitives
31
+ // Wait, the instruction says "completely skipping the validation of the array's items configuration"
32
+ // I will recursively call validateSchemaStructure if items exist
33
+ }
34
+ if (s.items && typeof s.items === "object") {
35
+ const itemErrors = SchemaValidator.validateSchemaStructure(s.items);
36
+ errors.push(...itemErrors);
37
+ }
38
+ }
27
39
  if (s.properties) {
28
40
  for (const key of Object.keys(s.properties)) {
29
41
  const prop = s.properties[key];
@@ -34,7 +46,7 @@ sap.ui.define([], function () {
34
46
  if (!prop.type) {
35
47
  errors.push(`Property '${key}' is missing 'type'.`);
36
48
  } else {
37
- const allowedTypes = ["string", "number", "integer", "boolean", "date", "object", "array"];
49
+ const allowedTypes = [SCHEMA_TYPE.STRING, SCHEMA_TYPE.NUMBER, SCHEMA_TYPE.INTEGER, SCHEMA_TYPE.BOOLEAN, SCHEMA_TYPE.DATE, SCHEMA_TYPE.OBJECT, SCHEMA_TYPE.ARRAY];
38
50
  if (!allowedTypes.includes(prop.type)) {
39
51
  errors.push(`Property '${key}' has invalid type '${prop.type}'. Allowed: ${allowedTypes.join(", ")}`);
40
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaValidator-dbg.js","names":["SchemaValidator","validateSchemaStructure","schema","errors","s","type","push","properties","key","Object","keys","prop","allowedTypes","includes","join","__exports","__esModule"],"sources":["SchemaValidator.ts"],"sourcesContent":["/**\n * @file SchemaValidator.ts\n * @description Structural validation utility to catch developer errors in the JSON schema itself.\n */\n\nimport { ISchema, FieldType } from \"../interfaces/ISchema\";\n\nexport class SchemaValidator {\n /**\n * Validates a parsed JSON schema object for structural correctness.\n * @param schema The schema object to validate\n * @returns An array of error strings. Empty if no errors.\n */\n public static validateSchemaStructure(schema: unknown): string[] {\n const errors: string[] = [];\n\n if (!schema || typeof schema !== \"object\") {\n return [\"Root schema must be an object.\"];\n }\n\n const s = schema as Record<string, any>;\n if (s.type !== \"object\" && s.type !== \"array\") {\n errors.push(`Root schema must have type 'object' or 'array'. Found: '${s.type}'`);\n }\n\n if (s.type === \"object\" && !s.properties) {\n errors.push(\"Object schema is missing the 'properties' node.\");\n }\n\n if (s.properties) {\n for (const key of Object.keys(s.properties)) {\n const prop = s.properties[key];\n if (!prop || typeof prop !== \"object\") {\n errors.push(`Property '${key}' must be an object.`);\n continue;\n }\n\n if (!prop.type) {\n errors.push(`Property '${key}' is missing 'type'.`);\n } else {\n const allowedTypes: FieldType[] = [\"string\", \"number\", \"integer\", \"boolean\", \"date\", \"object\", \"array\"];\n if (!allowedTypes.includes(prop.type)) {\n errors.push(`Property '${key}' has invalid type '${prop.type}'. Allowed: ${allowedTypes.join(\", \")}`);\n }\n }\n\n // Removed strict check for prop.items on array properties because inference handles empty definitions\n\n }\n }\n\n return errors;\n }\n}\n"],"mappings":";;;EAAA;AACA;AACA;AACA;;EAIO,MAAMA,eAAe,CAAC;IACzB;AACJ;AACA;AACA;AACA;IACI,OAAcC,uBAAuBA,CAACC,MAAe,EAAY;MAC7D,MAAMC,MAAgB,GAAG,EAAE;MAE3B,IAAI,CAACD,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;QACvC,OAAO,CAAC,gCAAgC,CAAC;MAC7C;MAEA,MAAME,CAAC,GAAGF,MAA6B;MACvC,IAAIE,CAAC,CAACC,IAAI,KAAK,QAAQ,IAAID,CAAC,CAACC,IAAI,KAAK,OAAO,EAAE;QAC3CF,MAAM,CAACG,IAAI,CAAC,2DAA2DF,CAAC,CAACC,IAAI,GAAG,CAAC;MACrF;MAEA,IAAID,CAAC,CAACC,IAAI,KAAK,QAAQ,IAAI,CAACD,CAAC,CAACG,UAAU,EAAE;QACtCJ,MAAM,CAACG,IAAI,CAAC,iDAAiD,CAAC;MAClE;MAEA,IAAIF,CAAC,CAACG,UAAU,EAAE;QACd,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACN,CAAC,CAACG,UAAU,CAAC,EAAE;UACzC,MAAMI,IAAI,GAAGP,CAAC,CAACG,UAAU,CAACC,GAAG,CAAC;UAC9B,IAAI,CAACG,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;YACnCR,MAAM,CAACG,IAAI,CAAC,aAAaE,GAAG,sBAAsB,CAAC;YACnD;UACJ;UAEA,IAAI,CAACG,IAAI,CAACN,IAAI,EAAE;YACZF,MAAM,CAACG,IAAI,CAAC,aAAaE,GAAG,sBAAsB,CAAC;UACvD,CAAC,MAAM;YACH,MAAMI,YAAyB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC;YACvG,IAAI,CAACA,YAAY,CAACC,QAAQ,CAACF,IAAI,CAACN,IAAI,CAAC,EAAE;cACnCF,MAAM,CAACG,IAAI,CAAC,aAAaE,GAAG,uBAAuBG,IAAI,CAACN,IAAI,eAAeO,YAAY,CAACE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzG;UACJ;;UAEA;QAEJ;MACJ;MAEA,OAAOX,MAAM;IACjB;EACJ;EAAC,IAAAY,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAf,eAAA,GAAAA,eAAA;EAAA,OAAAe,SAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"SchemaValidator-dbg.js","names":["SCHEMA_TYPE","___constants_MetaUIConstants","SchemaValidator","validateSchemaStructure","schema","errors","s","type","push","properties","items","itemErrors","key","Object","keys","prop","allowedTypes","STRING","NUMBER","INTEGER","BOOLEAN","DATE","OBJECT","ARRAY","includes","join","__exports","__esModule"],"sources":["SchemaValidator.ts"],"sourcesContent":["/**\n * @file SchemaValidator.ts\n * @description Structural validation utility to catch developer errors in the JSON schema itself.\n */\n\nimport { ISchema, FieldType } from \"../interfaces/ISchema\";\nimport { SCHEMA_TYPE } from \"../constants/MetaUIConstants\";\n\nexport class SchemaValidator {\n /**\n * Validates a parsed JSON schema object for structural correctness.\n * @param schema The schema object to validate\n * @returns An array of error strings. Empty if no errors.\n */\n public static validateSchemaStructure(schema: unknown): string[] {\n const errors: string[] = [];\n\n if (!schema || typeof schema !== \"object\") {\n return [\"Root schema must be an object.\"];\n }\n\n const s = schema as Record<string, any>;\n if (s.type !== \"object\" && s.type !== \"array\") {\n errors.push(`Root schema must have type 'object' or 'array'. Found: '${s.type}'`);\n }\n\n if (s.type === \"object\" && !s.properties) {\n errors.push(\"Object schema is missing the 'properties' node.\");\n }\n\n if (s.type === \"array\") {\n if (!s.items) {\n // Warning rather than error for inference support, but we should check it\n // Actually inference creates { items: { type: 'string' } } for primitives\n // Wait, the instruction says \"completely skipping the validation of the array's items configuration\"\n // I will recursively call validateSchemaStructure if items exist\n }\n if (s.items && typeof s.items === \"object\") {\n const itemErrors = SchemaValidator.validateSchemaStructure(s.items);\n errors.push(...itemErrors);\n }\n }\n\n if (s.properties) {\n for (const key of Object.keys(s.properties)) {\n const prop = s.properties[key];\n if (!prop || typeof prop !== \"object\") {\n errors.push(`Property '${key}' must be an object.`);\n continue;\n }\n\n if (!prop.type) {\n errors.push(`Property '${key}' is missing 'type'.`);\n } else {\n const allowedTypes: FieldType[] = [SCHEMA_TYPE.STRING, SCHEMA_TYPE.NUMBER, SCHEMA_TYPE.INTEGER, SCHEMA_TYPE.BOOLEAN, SCHEMA_TYPE.DATE, SCHEMA_TYPE.OBJECT, SCHEMA_TYPE.ARRAY];\n if (!allowedTypes.includes(prop.type)) {\n errors.push(`Property '${key}' has invalid type '${prop.type}'. Allowed: ${allowedTypes.join(\", \")}`);\n }\n }\n\n // Removed strict check for prop.items on array properties because inference handles empty definitions\n\n }\n }\n\n return errors;\n }\n}\n"],"mappings":";;;EAAA;AACA;AACA;AACA;EAHA,MAMSA,WAAW,GAAAC,4BAAA;EAEb,MAAMC,eAAe,CAAC;IACzB;AACJ;AACA;AACA;AACA;IACI,OAAcC,uBAAuBA,CAACC,MAAe,EAAY;MAC7D,MAAMC,MAAgB,GAAG,EAAE;MAE3B,IAAI,CAACD,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;QACvC,OAAO,CAAC,gCAAgC,CAAC;MAC7C;MAEA,MAAME,CAAC,GAAGF,MAA6B;MACvC,IAAIE,CAAC,CAACC,IAAI,KAAK,QAAQ,IAAID,CAAC,CAACC,IAAI,KAAK,OAAO,EAAE;QAC3CF,MAAM,CAACG,IAAI,CAAC,2DAA2DF,CAAC,CAACC,IAAI,GAAG,CAAC;MACrF;MAEA,IAAID,CAAC,CAACC,IAAI,KAAK,QAAQ,IAAI,CAACD,CAAC,CAACG,UAAU,EAAE;QACtCJ,MAAM,CAACG,IAAI,CAAC,iDAAiD,CAAC;MAClE;MAEA,IAAIF,CAAC,CAACC,IAAI,KAAK,OAAO,EAAE;QACpB,IAAI,CAACD,CAAC,CAACI,KAAK,EAAE;UACV;UACA;UACA;UACA;QAAA;QAEJ,IAAIJ,CAAC,CAACI,KAAK,IAAI,OAAOJ,CAAC,CAACI,KAAK,KAAK,QAAQ,EAAE;UACxC,MAAMC,UAAU,GAAGT,eAAe,CAACC,uBAAuB,CAACG,CAAC,CAACI,KAAK,CAAC;UACnEL,MAAM,CAACG,IAAI,CAAC,GAAGG,UAAU,CAAC;QAC9B;MACJ;MAEA,IAAIL,CAAC,CAACG,UAAU,EAAE;QACd,KAAK,MAAMG,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACR,CAAC,CAACG,UAAU,CAAC,EAAE;UACzC,MAAMM,IAAI,GAAGT,CAAC,CAACG,UAAU,CAACG,GAAG,CAAC;UAC9B,IAAI,CAACG,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;YACnCV,MAAM,CAACG,IAAI,CAAC,aAAaI,GAAG,sBAAsB,CAAC;YACnD;UACJ;UAEA,IAAI,CAACG,IAAI,CAACR,IAAI,EAAE;YACZF,MAAM,CAACG,IAAI,CAAC,aAAaI,GAAG,sBAAsB,CAAC;UACvD,CAAC,MAAM;YACH,MAAMI,YAAyB,GAAG,CAAChB,WAAW,CAACiB,MAAM,EAAEjB,WAAW,CAACkB,MAAM,EAAElB,WAAW,CAACmB,OAAO,EAAEnB,WAAW,CAACoB,OAAO,EAAEpB,WAAW,CAACqB,IAAI,EAAErB,WAAW,CAACsB,MAAM,EAAEtB,WAAW,CAACuB,KAAK,CAAC;YAC7K,IAAI,CAACP,YAAY,CAACQ,QAAQ,CAACT,IAAI,CAACR,IAAI,CAAC,EAAE;cACnCF,MAAM,CAACG,IAAI,CAAC,aAAaI,GAAG,uBAAuBG,IAAI,CAACR,IAAI,eAAeS,YAAY,CAACS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzG;UACJ;;UAEA;QAEJ;MACJ;MAEA,OAAOpB,MAAM;IACjB;EACJ;EAAC,IAAAqB,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAxB,eAAA,GAAAA,eAAA;EAAA,OAAAwB,SAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaValidator.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iDAAiD,CAAC;IAQjE,MAAa,eAAe;QACxB;;;;WAIG;eACW,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE;KAwCnE;CAEA"}
1
+ {"version":3,"file":"SchemaValidator.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iDAAiD,CAAC;IASjE,MAAa,eAAe;QACxB;;;;WAIG;eACW,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE;KAqDnE;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define([],function(){"use strict";class e{static validateSchemaStructure(e){const t=[];if(!e||typeof e!=="object"){return["Root schema must be an object."]}const o=e;if(o.type!=="object"&&o.type!=="array"){t.push(`Root schema must have type 'object' or 'array'. Found: '${o.type}'`)}if(o.type==="object"&&!o.properties){t.push("Object schema is missing the 'properties' node.")}if(o.properties){for(const e of Object.keys(o.properties)){const r=o.properties[e];if(!r||typeof r!=="object"){t.push(`Property '${e}' must be an object.`);continue}if(!r.type){t.push(`Property '${e}' is missing 'type'.`)}else{const o=["string","number","integer","boolean","date","object","array"];if(!o.includes(r.type)){t.push(`Property '${e}' has invalid type '${r.type}'. Allowed: ${o.join(", ")}`)}}}}return t}}var t={__esModule:true};t.SchemaValidator=e;return t});
1
+ sap.ui.define(["../constants/MetaUIConstants"],function(e){"use strict";const t=e["SCHEMA_TYPE"];class s{static validateSchemaStructure(e){const o=[];if(!e||typeof e!=="object"){return["Root schema must be an object."]}const i=e;if(i.type!=="object"&&i.type!=="array"){o.push(`Root schema must have type 'object' or 'array'. Found: '${i.type}'`)}if(i.type==="object"&&!i.properties){o.push("Object schema is missing the 'properties' node.")}if(i.type==="array"){if(!i.items){}if(i.items&&typeof i.items==="object"){const e=s.validateSchemaStructure(i.items);o.push(...e)}}if(i.properties){for(const e of Object.keys(i.properties)){const s=i.properties[e];if(!s||typeof s!=="object"){o.push(`Property '${e}' must be an object.`);continue}if(!s.type){o.push(`Property '${e}' is missing 'type'.`)}else{const i=[t.STRING,t.NUMBER,t.INTEGER,t.BOOLEAN,t.DATE,t.OBJECT,t.ARRAY];if(!i.includes(s.type)){o.push(`Property '${e}' has invalid type '${s.type}'. Allowed: ${i.join(", ")}`)}}}}return o}}var o={__esModule:true};o.SchemaValidator=s;return o});
2
2
  //# sourceMappingURL=SchemaValidator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaValidator.js","names":["SchemaValidator","validateSchemaStructure","schema","errors","s","type","push","properties","key","Object","keys","prop","allowedTypes","includes","join","__exports","__esModule"],"sources":["SchemaValidator.ts"],"sourcesContent":["/**\n * @file SchemaValidator.ts\n * @description Structural validation utility to catch developer errors in the JSON schema itself.\n */\n\nimport { ISchema, FieldType } from \"../interfaces/ISchema\";\n\nexport class SchemaValidator {\n /**\n * Validates a parsed JSON schema object for structural correctness.\n * @param schema The schema object to validate\n * @returns An array of error strings. Empty if no errors.\n */\n public static validateSchemaStructure(schema: unknown): string[] {\n const errors: string[] = [];\n\n if (!schema || typeof schema !== \"object\") {\n return [\"Root schema must be an object.\"];\n }\n\n const s = schema as Record<string, any>;\n if (s.type !== \"object\" && s.type !== \"array\") {\n errors.push(`Root schema must have type 'object' or 'array'. Found: '${s.type}'`);\n }\n\n if (s.type === \"object\" && !s.properties) {\n errors.push(\"Object schema is missing the 'properties' node.\");\n }\n\n if (s.properties) {\n for (const key of Object.keys(s.properties)) {\n const prop = s.properties[key];\n if (!prop || typeof prop !== \"object\") {\n errors.push(`Property '${key}' must be an object.`);\n continue;\n }\n\n if (!prop.type) {\n errors.push(`Property '${key}' is missing 'type'.`);\n } else {\n const allowedTypes: FieldType[] = [\"string\", \"number\", \"integer\", \"boolean\", \"date\", \"object\", \"array\"];\n if (!allowedTypes.includes(prop.type)) {\n errors.push(`Property '${key}' has invalid type '${prop.type}'. Allowed: ${allowedTypes.join(\", \")}`);\n }\n }\n\n // Removed strict check for prop.items on array properties because inference handles empty definitions\n\n }\n }\n\n return errors;\n }\n}\n"],"mappings":"yCAOO,MAAMA,EAMT,8BAAcC,CAAwBC,GAClC,MAAMC,EAAmB,GAEzB,IAAKD,UAAiBA,IAAW,SAAU,CACvC,MAAO,CAAC,iCACZ,CAEA,MAAME,EAAIF,EACV,GAAIE,EAAEC,OAAS,UAAYD,EAAEC,OAAS,QAAS,CAC3CF,EAAOG,KAAK,2DAA2DF,EAAEC,QAC7E,CAEA,GAAID,EAAEC,OAAS,WAAaD,EAAEG,WAAY,CACtCJ,EAAOG,KAAK,kDAChB,CAEA,GAAIF,EAAEG,WAAY,CACd,IAAK,MAAMC,KAAOC,OAAOC,KAAKN,EAAEG,YAAa,CACzC,MAAMI,EAAOP,EAAEG,WAAWC,GAC1B,IAAKG,UAAeA,IAAS,SAAU,CACnCR,EAAOG,KAAK,aAAaE,yBACzB,QACJ,CAEA,IAAKG,EAAKN,KAAM,CACZF,EAAOG,KAAK,aAAaE,wBAC7B,KAAO,CACH,MAAMI,EAA4B,CAAC,SAAU,SAAU,UAAW,UAAW,OAAQ,SAAU,SAC/F,IAAKA,EAAaC,SAASF,EAAKN,MAAO,CACnCF,EAAOG,KAAK,aAAaE,wBAA0BG,EAAKN,mBAAmBO,EAAaE,KAAK,QACjG,CACJ,CAIJ,CACJ,CAEA,OAAOX,CACX,EACH,IAAAY,EAAA,CAAAC,WAAA,MAAAD,EAAAf,kBAAA,OAAAe,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"SchemaValidator.js","names":["SCHEMA_TYPE","___constants_MetaUIConstants","SchemaValidator","validateSchemaStructure","schema","errors","s","type","push","properties","items","itemErrors","key","Object","keys","prop","allowedTypes","STRING","NUMBER","INTEGER","BOOLEAN","DATE","OBJECT","ARRAY","includes","join","__exports","__esModule"],"sources":["SchemaValidator.ts"],"sourcesContent":["/**\n * @file SchemaValidator.ts\n * @description Structural validation utility to catch developer errors in the JSON schema itself.\n */\n\nimport { ISchema, FieldType } from \"../interfaces/ISchema\";\nimport { SCHEMA_TYPE } from \"../constants/MetaUIConstants\";\n\nexport class SchemaValidator {\n /**\n * Validates a parsed JSON schema object for structural correctness.\n * @param schema The schema object to validate\n * @returns An array of error strings. Empty if no errors.\n */\n public static validateSchemaStructure(schema: unknown): string[] {\n const errors: string[] = [];\n\n if (!schema || typeof schema !== \"object\") {\n return [\"Root schema must be an object.\"];\n }\n\n const s = schema as Record<string, any>;\n if (s.type !== \"object\" && s.type !== \"array\") {\n errors.push(`Root schema must have type 'object' or 'array'. Found: '${s.type}'`);\n }\n\n if (s.type === \"object\" && !s.properties) {\n errors.push(\"Object schema is missing the 'properties' node.\");\n }\n\n if (s.type === \"array\") {\n if (!s.items) {\n // Warning rather than error for inference support, but we should check it\n // Actually inference creates { items: { type: 'string' } } for primitives\n // Wait, the instruction says \"completely skipping the validation of the array's items configuration\"\n // I will recursively call validateSchemaStructure if items exist\n }\n if (s.items && typeof s.items === \"object\") {\n const itemErrors = SchemaValidator.validateSchemaStructure(s.items);\n errors.push(...itemErrors);\n }\n }\n\n if (s.properties) {\n for (const key of Object.keys(s.properties)) {\n const prop = s.properties[key];\n if (!prop || typeof prop !== \"object\") {\n errors.push(`Property '${key}' must be an object.`);\n continue;\n }\n\n if (!prop.type) {\n errors.push(`Property '${key}' is missing 'type'.`);\n } else {\n const allowedTypes: FieldType[] = [SCHEMA_TYPE.STRING, SCHEMA_TYPE.NUMBER, SCHEMA_TYPE.INTEGER, SCHEMA_TYPE.BOOLEAN, SCHEMA_TYPE.DATE, SCHEMA_TYPE.OBJECT, SCHEMA_TYPE.ARRAY];\n if (!allowedTypes.includes(prop.type)) {\n errors.push(`Property '${key}' has invalid type '${prop.type}'. Allowed: ${allowedTypes.join(\", \")}`);\n }\n }\n\n // Removed strict check for prop.items on array properties because inference handles empty definitions\n\n }\n }\n\n return errors;\n }\n}\n"],"mappings":"wEAAA,MAMSA,EAAWC,EAAA,eAEb,MAAMC,EAMT,8BAAcC,CAAwBC,GAClC,MAAMC,EAAmB,GAEzB,IAAKD,UAAiBA,IAAW,SAAU,CACvC,MAAO,CAAC,iCACZ,CAEA,MAAME,EAAIF,EACV,GAAIE,EAAEC,OAAS,UAAYD,EAAEC,OAAS,QAAS,CAC3CF,EAAOG,KAAK,2DAA2DF,EAAEC,QAC7E,CAEA,GAAID,EAAEC,OAAS,WAAaD,EAAEG,WAAY,CACtCJ,EAAOG,KAAK,kDAChB,CAEA,GAAIF,EAAEC,OAAS,QAAS,CACpB,IAAKD,EAAEI,MAAO,CAIV,CAEJ,GAAIJ,EAAEI,cAAgBJ,EAAEI,QAAU,SAAU,CACxC,MAAMC,EAAaT,EAAgBC,wBAAwBG,EAAEI,OAC7DL,EAAOG,QAAQG,EACnB,CACJ,CAEA,GAAIL,EAAEG,WAAY,CACd,IAAK,MAAMG,KAAOC,OAAOC,KAAKR,EAAEG,YAAa,CACzC,MAAMM,EAAOT,EAAEG,WAAWG,GAC1B,IAAKG,UAAeA,IAAS,SAAU,CACnCV,EAAOG,KAAK,aAAaI,yBACzB,QACJ,CAEA,IAAKG,EAAKR,KAAM,CACZF,EAAOG,KAAK,aAAaI,wBAC7B,KAAO,CACH,MAAMI,EAA4B,CAAChB,EAAYiB,OAAQjB,EAAYkB,OAAQlB,EAAYmB,QAASnB,EAAYoB,QAASpB,EAAYqB,KAAMrB,EAAYsB,OAAQtB,EAAYuB,OACvK,IAAKP,EAAaQ,SAAST,EAAKR,MAAO,CACnCF,EAAOG,KAAK,aAAaI,wBAA0BG,EAAKR,mBAAmBS,EAAaS,KAAK,QACjG,CACJ,CAIJ,CACJ,CAEA,OAAOpB,CACX,EACH,IAAAqB,EAAA,CAAAC,WAAA,MAAAD,EAAAxB,kBAAA,OAAAwB,CAAA","ignoreList":[]}
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import { ISchema, FieldType } from "../interfaces/ISchema";
7
+ import { SCHEMA_TYPE } from "../constants/MetaUIConstants";
7
8
 
8
9
  export class SchemaValidator {
9
10
  /**
@@ -27,6 +28,19 @@ export class SchemaValidator {
27
28
  errors.push("Object schema is missing the 'properties' node.");
28
29
  }
29
30
 
31
+ if (s.type === "array") {
32
+ if (!s.items) {
33
+ // Warning rather than error for inference support, but we should check it
34
+ // Actually inference creates { items: { type: 'string' } } for primitives
35
+ // Wait, the instruction says "completely skipping the validation of the array's items configuration"
36
+ // I will recursively call validateSchemaStructure if items exist
37
+ }
38
+ if (s.items && typeof s.items === "object") {
39
+ const itemErrors = SchemaValidator.validateSchemaStructure(s.items);
40
+ errors.push(...itemErrors);
41
+ }
42
+ }
43
+
30
44
  if (s.properties) {
31
45
  for (const key of Object.keys(s.properties)) {
32
46
  const prop = s.properties[key];
@@ -38,7 +52,7 @@ export class SchemaValidator {
38
52
  if (!prop.type) {
39
53
  errors.push(`Property '${key}' is missing 'type'.`);
40
54
  } else {
41
- const allowedTypes: FieldType[] = ["string", "number", "integer", "boolean", "date", "object", "array"];
55
+ const allowedTypes: FieldType[] = [SCHEMA_TYPE.STRING, SCHEMA_TYPE.NUMBER, SCHEMA_TYPE.INTEGER, SCHEMA_TYPE.BOOLEAN, SCHEMA_TYPE.DATE, SCHEMA_TYPE.OBJECT, SCHEMA_TYPE.ARRAY];
42
56
  if (!allowedTypes.includes(prop.type)) {
43
57
  errors.push(`Property '${key}' has invalid type '${prop.type}'. Allowed: ${allowedTypes.join(", ")}`);
44
58
  }
@@ -1,7 +1,9 @@
1
- sap.ui.define(["sap/ui/model/json/JSONModel", "./PipelineManager", "sap/ui/core/message/Message", "sap/ui/core/library", "sap/ui/core/Messaging"], function (JSONModel, ___PipelineManager, Message, coreLibrary, Messaging) {
1
+ sap.ui.define(["sap/ui/model/json/JSONModel", "../constants/MetaUIConstants", "./PipelineManager", "./SchemaNormalizer", "sap/ui/core/message/Message", "sap/ui/core/library", "sap/ui/core/Messaging"], function (JSONModel, ___constants_MetaUIConstants, ___PipelineManager, ___SchemaNormalizer, Message, coreLibrary, Messaging) {
2
2
  "use strict";
3
3
 
4
+ const SCHEMA_TYPE = ___constants_MetaUIConstants["SCHEMA_TYPE"];
4
5
  const GlobalPipeline = ___PipelineManager["GlobalPipeline"];
6
+ const SchemaNormalizer = ___SchemaNormalizer["SchemaNormalizer"];
5
7
  /**
6
8
  * Manages the isolated internal data payload for the MetaUI engine.
7
9
  */
@@ -49,16 +51,14 @@ sap.ui.define(["sap/ui/model/json/JSONModel", "./PipelineManager", "sap/ui/core/
49
51
  const messageManager = Messaging;
50
52
  const targetPath = sPath.startsWith("/") ? sPath : `/${sPath}`; // Pure UI5: target MUST be absolute path
51
53
 
52
- // 1. Remove existing messages (strictly for THIS model instance)
53
- if (this._useMessageManager) {
54
- const existingMessages = messageManager.getMessageModel().getData();
55
- const messagesToRemove = existingMessages.filter(msg => {
56
- const isMatch = msg.getTarget() === targetPath && msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.model.getId();
57
- return isMatch;
58
- });
59
- if (messagesToRemove.length > 0) {
60
- messageManager.removeMessages(messagesToRemove);
61
- }
54
+ // 1. Remove existing messages (strictly for THIS model instance) unconditionally
55
+ const existingMessages = messageManager.getMessageModel().getData();
56
+ const messagesToRemove = existingMessages.filter(msg => {
57
+ const isMatch = msg.getTarget() === targetPath && msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.model.getId();
58
+ return isMatch;
59
+ });
60
+ if (messagesToRemove.length > 0) {
61
+ messageManager.removeMessages(messagesToRemove);
62
62
  }
63
63
  if (!metadata) return;
64
64
 
@@ -68,7 +68,7 @@ sap.ui.define(["sap/ui/model/json/JSONModel", "./PipelineManager", "sap/ui/core/
68
68
  if (metadata.required) {
69
69
  validatorsToRun.push("required");
70
70
  }
71
- if (metadata.type === "string" && metadata.maxLength) {
71
+ if (metadata.type === SCHEMA_TYPE.STRING && metadata.maxLength) {
72
72
  validatorsToRun.push("maxLength");
73
73
  argsMap["maxLength"] = metadata.maxLength;
74
74
  }
@@ -93,7 +93,7 @@ sap.ui.define(["sap/ui/model/json/JSONModel", "./PipelineManager", "sap/ui/core/
93
93
  }
94
94
  if (metadata.ui?.validators) {
95
95
  for (const v of metadata.ui.validators) {
96
- if (typeof v === "string") {
96
+ if (typeof v === SCHEMA_TYPE.STRING) {
97
97
  validatorsToRun.push(v);
98
98
  } else if (v && v.name) {
99
99
  validatorsToRun.push(v.name);
@@ -117,6 +117,23 @@ sap.ui.define(["sap/ui/model/json/JSONModel", "./PipelineManager", "sap/ui/core/
117
117
  }
118
118
  }
119
119
 
120
+ /**
121
+ * Purges all MessageManager errors that start with a specific array path.
122
+ * Used to clean up "ghost errors" when array structural shifts (deletion) occur.
123
+ * @param arrayPath The root array path (e.g. /Items)
124
+ */
125
+ clearArrayMessages(arrayPath) {
126
+ const messageManager = Messaging;
127
+ const currentMessages = messageManager.getMessageModel().getData();
128
+ const pathPrefix = arrayPath.startsWith("/") ? arrayPath : `/${arrayPath}`;
129
+ const messagesToRemove = currentMessages.filter(msg => {
130
+ return msg.getProcessor() === this.model && typeof msg.getTarget() === "string" && msg.getTarget().startsWith(pathPrefix);
131
+ });
132
+ if (messagesToRemove.length > 0) {
133
+ messageManager.removeMessages(messagesToRemove);
134
+ }
135
+ }
136
+
120
137
  /**
121
138
  * Resolves the schema metadata for a given internal binding path.
122
139
  * @param path The flat binding path representing the field.
@@ -124,8 +141,13 @@ sap.ui.define(["sap/ui/model/json/JSONModel", "./PipelineManager", "sap/ui/core/
124
141
  */
125
142
  findMetadataForPath(path) {
126
143
  if (!this.schema || !this.schema.properties) return undefined;
127
- // Basic single-level support for now. Nested object resolution would split by '.' or '/'
128
- return this.schema.properties[path];
144
+
145
+ // Deeply resolve the metadata using the SchemaNormalizer
146
+ const absoluteScope = "#/properties/" + path.replace(/\//g, "/properties/");
147
+ const {
148
+ meta
149
+ } = SchemaNormalizer.resolveScope(this.schema, absoluteScope);
150
+ return meta;
129
151
  }
130
152
 
131
153
  /**
@@ -155,8 +177,45 @@ sap.ui.define(["sap/ui/model/json/JSONModel", "./PipelineManager", "sap/ui/core/
155
177
  */
156
178
  extractPayload() {
157
179
  // Create a deep copy to prevent accidental mutations by the host
180
+ // Uses a robust deep clone to avoid destructively coercing native objects (like Dates) to strings
158
181
  const data = this.model.getData();
159
- return JSON.parse(JSON.stringify(data));
182
+ return this.deepClone(data);
183
+ }
184
+
185
+ /**
186
+ * Recursively clones an object while preserving native Date instances and arrays.
187
+ */
188
+ deepClone(obj) {
189
+ if (obj === null || typeof obj !== "object") {
190
+ return obj;
191
+ }
192
+ if (obj instanceof Date) {
193
+ return new Date(obj.getTime());
194
+ }
195
+ if (Array.isArray(obj)) {
196
+ const arrCopy = [];
197
+ for (const item of obj) {
198
+ arrCopy.push(this.deepClone(item));
199
+ }
200
+ return arrCopy;
201
+ }
202
+ const objCopy = {};
203
+ for (const key in obj) {
204
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
205
+ objCopy[key] = this.deepClone(obj[key]);
206
+ }
207
+ }
208
+ return objCopy;
209
+ }
210
+
211
+ /**
212
+ * Programmatically mutates the internal JSONModel property (e.g. for PBRE state pruning).
213
+ * @param path The path to the property.
214
+ * @param value The value to set.
215
+ */
216
+ setProperty(path, value) {
217
+ const absolutePath = path.startsWith("/") ? path : `/${path}`;
218
+ this.model.setProperty(absolutePath, value);
160
219
  }
161
220
 
162
221
  /**
@@ -164,6 +223,13 @@ sap.ui.define(["sap/ui/model/json/JSONModel", "./PipelineManager", "sap/ui/core/
164
223
  */
165
224
  destroy() {
166
225
  if (this.model) {
226
+ // Fix Leaky Abstractions: Clean up any ghost errors in the global MessageManager bound to this model
227
+ const messageManager = Messaging;
228
+ const existingMessages = messageManager.getMessageModel().getData();
229
+ const messagesToRemove = existingMessages.filter(msg => msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.model.getId());
230
+ if (messagesToRemove.length > 0) {
231
+ messageManager.removeMessages(messagesToRemove);
232
+ }
167
233
  this.model.destroy();
168
234
  }
169
235
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StateManager-dbg.js","names":["GlobalPipeline","___PipelineManager","StateManager","schema","_useMessageManager","constructor","initialData","modelName","activeModelName","safeData","JSON","parse","stringify","model","JSONModel","setDefaultBindingMode","originalSetProperty","setProperty","bind","sPath","oValue","oContext","bAsyncUpdate","result","validatePath","setUseMessageManager","use","value","fieldKey","replace","metadata","findMetadataForPath","messageManager","Messaging","targetPath","startsWith","existingMessages","getMessageModel","getData","messagesToRemove","filter","msg","isMatch","getTarget","getMessageProcessor","getId","length","removeMessages","validatorsToRun","argsMap","required","push","type","maxLength","minLength","pattern","minimum","undefined","maximum","min","max","format","ui","validators","v","name","args","validationResult","executeValidation","isValid","newMsg","Message","message","errorMessage","coreLibrary","MessageType","Error","target","processor","addMessages","path","properties","getModel","bindControl","control","property","bindingPath","bindProperty","extractPayload","data","destroy","__exports","__esModule"],"sources":["StateManager.ts"],"sourcesContent":["/**\n * @file StateManager.ts\n * @description Isolated internal state management. Decouples the MetaUI engine from external host models.\n */\n\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport ManagedObject from \"sap/ui/base/ManagedObject\";\nimport { ISchema, IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { GlobalPipeline } from \"./PipelineManager\";\nimport Message from \"sap/ui/core/message/Message\";\nimport coreLibrary from \"sap/ui/core/library\";\nimport Core from \"sap/ui/core/Core\";\nimport Messaging from \"sap/ui/core/Messaging\";\n\n\n/**\n * Manages the isolated internal data payload for the MetaUI engine.\n */\nexport class StateManager {\n private model: JSONModel;\n private activeModelName: string;\n private schema: ISchema | null = null;\n private _useMessageManager: boolean = false;\n\n /**\n * Initializes the state manager with an authentic SAPUI5 JSONModel.\n * @param initialData The initial JSON payload to populate the fields.\n * @param schema The normalized schema for live validation.\n * @param modelName The UI5 model alias used for isolation.\n */\n constructor(initialData: Record<string, unknown> = {}, schema: ISchema, modelName: string = \"meta\") {\n this.activeModelName = modelName;\n this.schema = schema;\n \n // Deep copy to ensure no reference leakage from the host application\n const safeData = JSON.parse(JSON.stringify(initialData));\n this.model = new JSONModel(safeData);\n this.model.setDefaultBindingMode(\"TwoWay\");\n\n // Centralized Model-Level Validation Interceptor\n const originalSetProperty = this.model.setProperty.bind(this.model);\n this.model.setProperty = (sPath: string, oValue: unknown, oContext?: unknown, bAsyncUpdate?: boolean) => {\n const result = originalSetProperty(sPath, oValue, oContext, bAsyncUpdate);\n this.validatePath(sPath, oValue);\n return result;\n };\n }\n\n /**\n * Updates the flag indicating whether this manager should push validation errors directly to the global MessageManager.\n */\n public setUseMessageManager(use: boolean): void {\n this._useMessageManager = use;\n }\n\n /**\n * Validates a specific path against the schema and updates the MessageManager.\n */\n private validatePath(sPath: string, value: unknown): void {\n const fieldKey = sPath.replace(/^\\//, \"\");\n const metadata = this.findMetadataForPath(fieldKey);\n \n const messageManager = Messaging;\n const targetPath = sPath.startsWith(\"/\") ? sPath : `/${sPath}`; // Pure UI5: target MUST be absolute path\n \n // 1. Remove existing messages (strictly for THIS model instance)\n if (this._useMessageManager) {\n const existingMessages = messageManager.getMessageModel().getData();\n const messagesToRemove = existingMessages.filter((msg: sap.ui.core.message.Message) => {\n const isMatch = msg.getTarget() === targetPath && msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.model.getId();\n return isMatch;\n });\n \n if (messagesToRemove.length > 0) {\n messageManager.removeMessages(messagesToRemove);\n }\n }\n\n if (!metadata) return;\n\n // 2. Run GlobalPipeline\n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {};\n\n if (metadata.required) {\n validatorsToRun.push(\"required\");\n }\n if (metadata.type === \"string\" && metadata.maxLength) {\n validatorsToRun.push(\"maxLength\");\n argsMap[\"maxLength\"] = metadata.maxLength;\n }\n if (metadata.minLength) {\n validatorsToRun.push(\"minLength\");\n argsMap[\"minLength\"] = metadata.minLength;\n }\n if (metadata.pattern) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = metadata.pattern;\n }\n if (metadata.minimum !== undefined || metadata.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: metadata.minimum, max: metadata.maximum };\n }\n \n const format = metadata.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n if (metadata.ui?.validators) {\n for (const v of metadata.ui.validators) {\n if (typeof v === \"string\") {\n validatorsToRun.push(v);\n } else if (v && v.name) {\n validatorsToRun.push(v.name);\n if (v.args !== undefined) {\n argsMap[v.name] = v.args;\n }\n }\n }\n }\n\n if (validatorsToRun.length > 0) {\n const validationResult = GlobalPipeline.executeValidation(value, validatorsToRun, argsMap);\n if (!validationResult.isValid && this._useMessageManager) {\n const newMsg = new Message({\n message: validationResult.errorMessage || \"Invalid value.\",\n type: coreLibrary.MessageType.Error,\n target: targetPath,\n processor: this.model\n });\n messageManager.addMessages(newMsg);\n }\n }\n }\n\n /**\n * Resolves the schema metadata for a given internal binding path.\n * @param path The flat binding path representing the field.\n * @returns The associated IPropertyMetadata, or undefined if not mapped.\n */\n private findMetadataForPath(path: string): IPropertyMetadata | undefined {\n if (!this.schema || !this.schema.properties) return undefined;\n // Basic single-level support for now. Nested object resolution would split by '.' or '/'\n return this.schema.properties[path];\n }\n\n\n\n /**\n * Retrieves the isolated JSONModel instance to attach to the root GeneratorHost control.\n * @returns The internal JSONModel.\n */\n public getModel(): JSONModel {\n return this.model;\n }\n\n /**\n * Binds a generated UI control property to a path in the internal model.\n * @param control The target UI5 Control.\n * @param property The UI5 property name (e.g., 'value').\n * @param bindingPath The exact path in the JSON payload.\n */\n public bindControl(control: ManagedObject, property: string, bindingPath: string): void {\n control.bindProperty(property, {\n path: bindingPath,\n model: \"meta\" // Assumes the model is bound to the root container with the name 'meta'\n });\n }\n\n /**\n * Extracts the flat JavaScript object representing the current state of the UI.\n * @returns A serialized record of the data payload, free of UI5 wrappers.\n */\n public extractPayload(): Record<string, unknown> {\n // Create a deep copy to prevent accidental mutations by the host\n const data = this.model.getData();\n return JSON.parse(JSON.stringify(data));\n }\n\n /**\n * Cleans up internal state and natively destroys the UI5 JSONModel to prevent memory leaks.\n */\n public destroy(): void {\n \n if (this.model) {\n this.model.destroy();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"StateManager-dbg.js","names":["SCHEMA_TYPE","___constants_MetaUIConstants","GlobalPipeline","___PipelineManager","SchemaNormalizer","___SchemaNormalizer","StateManager","schema","_useMessageManager","constructor","initialData","modelName","activeModelName","safeData","JSON","parse","stringify","model","JSONModel","setDefaultBindingMode","originalSetProperty","setProperty","bind","sPath","oValue","oContext","bAsyncUpdate","result","validatePath","setUseMessageManager","use","value","fieldKey","replace","metadata","findMetadataForPath","messageManager","Messaging","targetPath","startsWith","existingMessages","getMessageModel","getData","messagesToRemove","filter","msg","isMatch","getTarget","getMessageProcessor","getId","length","removeMessages","validatorsToRun","argsMap","required","push","type","STRING","maxLength","minLength","pattern","minimum","undefined","maximum","min","max","format","ui","validators","v","name","args","validationResult","executeValidation","isValid","newMsg","Message","message","errorMessage","coreLibrary","MessageType","Error","target","processor","addMessages","clearArrayMessages","arrayPath","currentMessages","pathPrefix","getProcessor","path","properties","absoluteScope","meta","resolveScope","getModel","bindControl","control","property","bindingPath","bindProperty","extractPayload","data","deepClone","obj","Date","getTime","Array","isArray","arrCopy","item","objCopy","key","Object","prototype","hasOwnProperty","call","absolutePath","destroy","__exports","__esModule"],"sources":["StateManager.ts"],"sourcesContent":["/**\n * @file StateManager.ts\n * @description Isolated internal state management. Decouples the MetaUI engine from external host models.\n */\n\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport ManagedObject from \"sap/ui/base/ManagedObject\";\nimport { ISchema, IPropertyMetadata } from \"../interfaces/ISchema\";\nimport { SCHEMA_TYPE } from \"../constants/MetaUIConstants\";\nimport { GlobalPipeline } from \"./PipelineManager\";\nimport { SchemaNormalizer } from \"./SchemaNormalizer\";\nimport Message from \"sap/ui/core/message/Message\";\nimport coreLibrary from \"sap/ui/core/library\";\nimport Core from \"sap/ui/core/Core\";\nimport Messaging from \"sap/ui/core/Messaging\";\n\n\n/**\n * Manages the isolated internal data payload for the MetaUI engine.\n */\nexport class StateManager {\n private model: JSONModel;\n private activeModelName: string;\n private schema: ISchema | null = null;\n private _useMessageManager: boolean = false;\n\n /**\n * Initializes the state manager with an authentic SAPUI5 JSONModel.\n * @param initialData The initial JSON payload to populate the fields.\n * @param schema The normalized schema for live validation.\n * @param modelName The UI5 model alias used for isolation.\n */\n constructor(initialData: Record<string, unknown> = {}, schema: ISchema, modelName: string = \"meta\") {\n this.activeModelName = modelName;\n this.schema = schema;\n \n // Deep copy to ensure no reference leakage from the host application\n const safeData = JSON.parse(JSON.stringify(initialData));\n this.model = new JSONModel(safeData);\n this.model.setDefaultBindingMode(\"TwoWay\");\n\n // Centralized Model-Level Validation Interceptor\n const originalSetProperty = this.model.setProperty.bind(this.model);\n this.model.setProperty = (sPath: string, oValue: unknown, oContext?: unknown, bAsyncUpdate?: boolean) => {\n const result = originalSetProperty(sPath, oValue, oContext, bAsyncUpdate);\n this.validatePath(sPath, oValue);\n return result;\n };\n }\n\n /**\n * Updates the flag indicating whether this manager should push validation errors directly to the global MessageManager.\n */\n public setUseMessageManager(use: boolean): void {\n this._useMessageManager = use;\n }\n\n /**\n * Validates a specific path against the schema and updates the MessageManager.\n */\n private validatePath(sPath: string, value: unknown): void {\n const fieldKey = sPath.replace(/^\\//, \"\");\n const metadata = this.findMetadataForPath(fieldKey);\n \n const messageManager = Messaging;\n const targetPath = sPath.startsWith(\"/\") ? sPath : `/${sPath}`; // Pure UI5: target MUST be absolute path\n \n // 1. Remove existing messages (strictly for THIS model instance) unconditionally\n const existingMessages = messageManager.getMessageModel().getData();\n const messagesToRemove = existingMessages.filter((msg: Message) => {\n const isMatch = msg.getTarget() === targetPath && msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.model.getId();\n return isMatch;\n });\n \n if (messagesToRemove.length > 0) {\n messageManager.removeMessages(messagesToRemove);\n }\n\n if (!metadata) return;\n\n // 2. Run GlobalPipeline\n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {};\n\n if (metadata.required) {\n validatorsToRun.push(\"required\");\n }\n if (metadata.type === SCHEMA_TYPE.STRING && metadata.maxLength) {\n validatorsToRun.push(\"maxLength\");\n argsMap[\"maxLength\"] = metadata.maxLength;\n }\n if (metadata.minLength) {\n validatorsToRun.push(\"minLength\");\n argsMap[\"minLength\"] = metadata.minLength;\n }\n if (metadata.pattern) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = metadata.pattern;\n }\n if (metadata.minimum !== undefined || metadata.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: metadata.minimum, max: metadata.maximum };\n }\n \n const format = metadata.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n if (metadata.ui?.validators) {\n for (const v of metadata.ui.validators) {\n if (typeof v === SCHEMA_TYPE.STRING) {\n validatorsToRun.push(v);\n } else if (v && v.name) {\n validatorsToRun.push(v.name);\n if (v.args !== undefined) {\n argsMap[v.name] = v.args;\n }\n }\n }\n }\n\n if (validatorsToRun.length > 0) {\n const validationResult = GlobalPipeline.executeValidation(value, validatorsToRun, argsMap);\n if (!validationResult.isValid && this._useMessageManager) {\n const newMsg = new Message({\n message: validationResult.errorMessage || \"Invalid value.\",\n type: coreLibrary.MessageType.Error,\n target: targetPath,\n processor: this.model\n });\n messageManager.addMessages(newMsg);\n }\n }\n }\n\n /**\n * Purges all MessageManager errors that start with a specific array path.\n * Used to clean up \"ghost errors\" when array structural shifts (deletion) occur.\n * @param arrayPath The root array path (e.g. /Items)\n */\n public clearArrayMessages(arrayPath: string): void {\n const messageManager = Messaging;\n const currentMessages = messageManager.getMessageModel().getData() as Message[];\n \n const pathPrefix = arrayPath.startsWith(\"/\") ? arrayPath : `/${arrayPath}`;\n \n const messagesToRemove = currentMessages.filter(msg => {\n return msg.getProcessor() === this.model && typeof msg.getTarget() === \"string\" && msg.getTarget().startsWith(pathPrefix);\n });\n\n if (messagesToRemove.length > 0) {\n messageManager.removeMessages(messagesToRemove);\n }\n }\n\n /**\n * Resolves the schema metadata for a given internal binding path.\n * @param path The flat binding path representing the field.\n * @returns The associated IPropertyMetadata, or undefined if not mapped.\n */\n private findMetadataForPath(path: string): IPropertyMetadata | undefined {\n if (!this.schema || !this.schema.properties) return undefined;\n \n // Deeply resolve the metadata using the SchemaNormalizer\n const absoluteScope = \"#/properties/\" + path.replace(/\\//g, \"/properties/\");\n const { meta } = SchemaNormalizer.resolveScope(this.schema, absoluteScope);\n return meta;\n }\n\n\n\n /**\n * Retrieves the isolated JSONModel instance to attach to the root GeneratorHost control.\n * @returns The internal JSONModel.\n */\n public getModel(): JSONModel {\n return this.model;\n }\n\n /**\n * Binds a generated UI control property to a path in the internal model.\n * @param control The target UI5 Control.\n * @param property The UI5 property name (e.g., 'value').\n * @param bindingPath The exact path in the JSON payload.\n */\n public bindControl(control: ManagedObject, property: string, bindingPath: string): void {\n control.bindProperty(property, {\n path: bindingPath,\n model: \"meta\" // Assumes the model is bound to the root container with the name 'meta'\n });\n }\n\n /**\n * Extracts the flat JavaScript object representing the current state of the UI.\n * @returns A serialized record of the data payload, free of UI5 wrappers.\n */\n public extractPayload(): Record<string, unknown> {\n // Create a deep copy to prevent accidental mutations by the host\n // Uses a robust deep clone to avoid destructively coercing native objects (like Dates) to strings\n const data = this.model.getData();\n return this.deepClone(data) as Record<string, unknown>;\n }\n\n /**\n * Recursively clones an object while preserving native Date instances and arrays.\n */\n private deepClone(obj: any): any {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n\n if (Array.isArray(obj)) {\n const arrCopy = [];\n for (const item of obj) {\n arrCopy.push(this.deepClone(item));\n }\n return arrCopy;\n }\n\n const objCopy: any = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n objCopy[key] = this.deepClone(obj[key]);\n }\n }\n return objCopy;\n }\n\n /**\n * Programmatically mutates the internal JSONModel property (e.g. for PBRE state pruning).\n * @param path The path to the property.\n * @param value The value to set.\n */\n public setProperty(path: string, value: unknown): void {\n const absolutePath = path.startsWith(\"/\") ? path : `/${path}`;\n this.model.setProperty(absolutePath, value);\n }\n\n /**\n * Cleans up internal state and natively destroys the UI5 JSONModel to prevent memory leaks.\n */\n public destroy(): void {\n if (this.model) {\n // Fix Leaky Abstractions: Clean up any ghost errors in the global MessageManager bound to this model\n const messageManager = Messaging;\n const existingMessages = messageManager.getMessageModel().getData();\n const messagesToRemove = existingMessages.filter((msg: Message) => \n msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.model.getId()\n );\n if (messagesToRemove.length > 0) {\n messageManager.removeMessages(messagesToRemove);\n }\n\n this.model.destroy();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}