@siliconst/metaui 1.4.21 → 1.4.34

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 (338) hide show
  1. package/package.json +1 -1
  2. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js +51 -0
  3. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js.map +1 -0
  4. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts +41 -0
  5. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts.map +1 -0
  6. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js +2 -0
  7. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js.map +1 -0
  8. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.ts +44 -0
  9. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl-dbg.js.map +1 -1
  10. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.js.map +1 -1
  11. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.ts +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer-dbg.js.map +1 -1
  13. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.d.ts.map +1 -1
  14. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.js.map +1 -1
  15. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.ts +2 -1
  16. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js +2 -2
  17. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js.map +1 -1
  18. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js +1 -1
  19. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js.map +1 -1
  20. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts +3 -3
  21. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +5 -1
  22. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  23. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +6 -2
  24. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  27. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +10 -9
  28. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js +0 -9
  29. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js.map +1 -1
  30. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts +0 -9
  31. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts.map +1 -1
  32. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js +1 -1
  33. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js.map +1 -1
  34. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.ts +3 -9
  35. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js +0 -11
  36. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js.map +1 -1
  37. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts +0 -11
  38. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts.map +1 -1
  39. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js +1 -1
  40. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js.map +1 -1
  41. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.ts +2 -9
  42. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js +2 -7
  43. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js.map +1 -1
  44. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts +0 -5
  45. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts.map +1 -1
  46. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js +1 -1
  47. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js.map +1 -1
  48. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.ts +3 -7
  49. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js +1 -6
  50. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js.map +1 -1
  51. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts +0 -5
  52. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts.map +1 -1
  53. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js +1 -1
  54. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js.map +1 -1
  55. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.ts +9 -12
  56. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +51 -12
  57. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  58. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +13 -0
  59. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  60. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  62. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +53 -14
  63. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +2 -2
  64. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  65. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  67. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
  68. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  69. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +3 -3
  70. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate-dbg.js.map +1 -1
  71. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts +1 -1
  72. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts.map +1 -1
  73. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.js.map +1 -1
  74. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.ts +8 -7
  75. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +1 -1
  77. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
  78. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +3 -3
  80. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +1 -1
  81. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +1 -1
  82. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +4 -4
  83. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +3 -4
  84. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  85. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  87. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  88. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  89. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +6 -7
  90. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js +84 -0
  91. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js.map +1 -0
  92. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts +16 -0
  93. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts.map +1 -0
  94. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js +2 -0
  95. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js.map +1 -0
  96. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.ts +80 -0
  97. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js +137 -0
  98. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js.map +1 -0
  99. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts +24 -0
  100. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts.map +1 -0
  101. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js +2 -0
  102. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js.map +1 -0
  103. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts +141 -0
  104. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +26 -0
  105. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  106. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +2 -0
  107. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  108. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  109. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  110. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +29 -1
  111. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +1 -1
  112. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +4 -4
  114. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  115. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  116. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  117. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +11 -11
  118. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  119. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  120. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +1 -1
  121. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  122. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +4 -1
  123. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  124. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +5 -1
  125. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +5 -5
  126. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  127. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  128. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
  129. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  130. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +4 -4
  131. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +7 -5
  132. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  133. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  134. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  135. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  136. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +11 -7
  137. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +40 -37
  138. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  139. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -1
  140. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts +1 -1
  141. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -1
  142. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -1
  143. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +1 -1
  144. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -1
  145. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts.map +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -1
  150. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +1 -1
  151. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -1
  152. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -1
  153. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.ts +1 -1
  154. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js +2 -2
  155. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js.map +1 -1
  156. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js.map +1 -1
  157. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.ts +2 -2
  158. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -1
  159. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts +1 -1
  160. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -1
  161. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -1
  162. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +3 -3
  163. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -1
  164. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +1 -1
  165. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -1
  166. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -1
  167. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +1 -1
  168. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -1
  169. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +1 -1
  170. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -1
  171. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -1
  172. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +1 -1
  173. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +1 -1
  174. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -1
  175. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +4 -4
  176. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -1
  177. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +19 -19
  179. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin-dbg.js.map +1 -1
  180. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.d.ts.map +1 -1
  181. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.js.map +1 -1
  182. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.ts +2 -1
  183. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +18 -15
  184. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  185. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  186. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
  187. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  188. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +18 -18
  189. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +1 -1
  190. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  191. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
  192. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  193. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +2 -2
  194. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
  195. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +1 -6
  196. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
  197. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
  198. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +2 -2
  199. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  200. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  201. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +2 -2
  203. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  204. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
  205. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  206. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +2 -2
  207. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +4 -4
  208. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  209. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
  210. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  211. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +4 -4
  212. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +1 -1
  213. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  214. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
  215. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  216. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +2 -2
  217. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +1 -1
  218. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  219. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  221. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +2 -2
  222. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  223. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +1 -1
  225. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js +1 -1
  226. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +1 -1
  228. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -1
  229. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +1 -1
  230. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +1 -1
  231. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  232. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
  233. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  234. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +2 -2
  235. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +2 -2
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +2 -2
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js +1 -1
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +1 -1
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +1 -1
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +3 -3
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +3 -3
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +4 -4
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +5 -4
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +7 -6
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js +1 -1
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +1 -1
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -1
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +1 -1
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +1 -1
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  270. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +2 -2
  271. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +3 -2
  272. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -1
  273. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -1
  274. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +1 -1
  275. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -1
  276. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +3 -2
  277. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +2 -2
  278. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  279. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
  280. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  281. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +2 -2
  282. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +2 -2
  283. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  284. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
  285. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  286. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +2 -2
  287. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +1 -1
  288. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  289. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
  290. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  291. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +1 -1
  292. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +1 -1
  293. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
  294. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
  295. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
  296. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +2 -2
  297. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +1 -1
  298. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  299. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
  300. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  301. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +1 -1
  302. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +2 -2
  303. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  304. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
  305. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  306. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +2 -2
  307. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +1 -1
  308. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  309. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
  310. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  311. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +1 -1
  312. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +2 -2
  313. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  314. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
  315. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  316. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +2 -2
  317. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
  318. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.d.ts.map +1 -1
  319. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
  320. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +109 -108
  321. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -1
  322. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -1
  323. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -1
  324. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +64 -63
  325. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +1 -1
  326. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -1
  327. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +1 -1
  328. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -1
  329. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -1
  330. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +118 -117
  331. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
  332. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.d.ts.map +1 -1
  333. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
  334. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +105 -104
  335. package/src/nz/co/siliconst/ui5/metaui/utils/Logger-dbg.js.map +1 -1
  336. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.d.ts.map +1 -1
  337. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.js.map +1 -1
  338. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaNormalizer-dbg.js","names":["Logger","___utils_Logger","SchemaNormalizer","canHandle","rawSchema","build","targetDefinition","normalize","data","schemaObj","trim","JSON","parse","e","msg","message","error","Error","Array","isArray","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":"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","ignoreList":[]}
1
+ {"version":3,"file":"SchemaNormalizer-dbg.js","names":["Logger","___utils_Logger","SchemaNormalizer","canHandle","rawSchema","build","targetDefinition","normalize","data","schemaObj","trim","JSON","parse","e","msg","message","error","Error","Array","isArray","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","stringify","undefined","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","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","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: any): 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: any, 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?: any, data?: any): 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 ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,\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, any>, 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: any, 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: any): 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, any>) : {}\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, any>): 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, any>) : {}\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":"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","ignoreList":[]}
@@ -9,15 +9,15 @@ declare module "nz/co/siliconst/ui5/metaui/core/SchemaNormalizer" {
9
9
  /**
10
10
  * ISchemaBuilderPlugin Contract
11
11
  */
12
- canHandle(rawSchema: unknown): boolean;
12
+ canHandle(rawSchema: any): boolean;
13
13
  /**
14
14
  * ISchemaBuilderPlugin Contract
15
15
  */
16
- build(rawSchema: unknown, targetDefinition?: string): ISchema;
16
+ build(rawSchema: any, targetDefinition?: string): ISchema;
17
17
  /**
18
18
  * Validates that the provided raw payload conforms to the required ISchema structures.
19
19
  */
20
- static normalize(rawSchema?: unknown, data?: unknown): ISchema;
20
+ static normalize(rawSchema?: any, data?: any): ISchema;
21
21
  /**
22
22
  * Recursively deep merges an inferred schema over a base schema.
23
23
  * @param base The base property dictionary.
@@ -47,7 +47,7 @@ declare module "nz/co/siliconst/ui5/metaui/core/SchemaNormalizer" {
47
47
  /**
48
48
  * Infers a v2 ISchema structure dynamically from a plain data payload.
49
49
  */
50
- static inferSchemaFromData(data: unknown): ISchema;
50
+ static inferSchemaFromData(data: any): ISchema;
51
51
  /**
52
52
  * Infers field metadata recursively from a raw data object.
53
53
  * @param obj The raw JavaScript object.
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaNormalizer.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,kDAAkD,CAAC;IAClE;;;OAGG;IAEH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAa,MAAM,+CAA+C,CAAC;IACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;IAGlG,MAAa,gBAAiB,YAAW,oBAAoB;QAEzD;;WAEG;QACI,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO;QAM7C;;WAEG;QACI,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO;QAIpE;;WAEG;eACW,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO;QA0DrE;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;QAgBlC;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;QASlC;;;;;;WAMG;QACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;QA4CxC;;WAEG;QACH,OAAO,CAAC,MAAM,CAAC,aAAa;QAU5B;;WAEG;eACW,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;QA4BzD;;;;WAIG;QACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;QA+CxC;;;WAGG;eACW,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;YAAE,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;KAmC5I;CAEA"}
1
+ {"version":3,"file":"SchemaNormalizer.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,kDAAkD,CAAC;IAClE;;;OAGG;IAEH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAa,MAAM,+CAA+C,CAAC;IACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;IAGlG,MAAa,gBAAiB,YAAW,oBAAoB;QAEzD;;WAEG;QACI,SAAS,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO;QAMzC;;WAEG;QACI,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO;QAIhE;;WAEG;eACW,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO;QA0D7D;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;QAgBlC;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;QASlC;;;;;;WAMG;QACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;QA4CxC;;WAEG;QACH,OAAO,CAAC,MAAM,CAAC,aAAa;QAU5B;;WAEG;eACW,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO;QA4BrD;;;;WAIG;QACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;QA+CxC;;;WAGG;eACW,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;YAAE,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;KAmC5I;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["../utils/Logger"],function(e){"use strict";const t=e["Logger"];class r{canHandle(e){return true}build(e,t){return r.normalize(e)}static normalize(e,r){let i=e;if(typeof i==="string"){if(!i.trim()){i=null}else{try{i=JSON.parse(i)}catch(e){const r="Failed to parse schema string: "+e.message;t.error("[MetaUI SchemaNormalizer]",r);throw new Error(r)}}}if(!i||typeof i!=="object"||Array.isArray(i)){return this.inferSchemaFromData(r)}try{const e={title:i.title,type:i.type||(i.items?"array":"object"),layoutStrategy:i.layoutStrategy,uiLayout:i.uiLayout,additionalProperties:i.additionalProperties};let t=i.properties||{};if(i.additionalProperties===true&&r){const e=this.inferSchemaFromData(r);if(e.type==="object"&&e.properties){t=this.deepMergeProperties(e.properties,t)}else if(e.type==="array"&&e.items&&e.items.properties){}}if(e.type==="object"){const r=Array.isArray(i.required)?i.required:[];e.properties=this.normalizeProperties(t,r)}else if(e.type==="array"){e.items=this.normalizePropertyMetadata(i.items||{type:"object",properties:{}},"items",false)}return e}catch(e){const r="Critical error normalizing schema object: "+e.message;t.error("[MetaUI SchemaNormalizer]",r);throw new Error(r)}}static deepMergeProperties(e,t){const r={...e};for(const e of Object.keys(t)){const i=t[e];const a=r[e];if(a&&typeof a==="object"&&!Array.isArray(a)&&i&&typeof i==="object"&&!Array.isArray(i)){r[e]=this.deepMergeProperties(a,i)}else{r[e]=i}}return r}static normalizeProperties(e,t=[]){const r={};for(const i of Object.keys(e)){const a=t.includes(i);r[i]=this.normalizePropertyMetadata(e[i],i,a)}return r}static normalizePropertyMetadata(e,t,r=false){const i={type:e.type||"string",$ref:e.$ref,ui:{label:e.ui?.label||this.generateLabel(t),isKey:!!e.ui?.isKey,readOnly:!!e.ui?.readOnly,widget:e.ui?.widget||(e.valueHelp||e.enum?"select":undefined),visibleOn:e.ui?.visibleOn,enabledOn:e.ui?.enabledOn,format:e.ui?.format,validators:e.ui?.validators,formatter:e.ui?.formatter,args:e.ui?.args,rows:e.ui?.rows,fullWidth:e.ui?.fullWidth,dialogButtonText:e.ui?.dialogButtonText},required:r||!!e.required,maxLength:e.maxLength,minLength:e.minLength,minimum:e.minimum,maximum:e.maximum,pattern:e.pattern,precision:e.precision,scale:e.scale,multipleOf:e.multipleOf,valueHelp:e.valueHelp,enum:e.enum};if(i.type==="object"&&e.properties){const t=Array.isArray(e.required)?e.required:[];i.properties=this.normalizeProperties(e.properties,t);i.uiLayout=e.uiLayout}else if(i.type==="array"&&e.items){i.items=this.normalizePropertyMetadata(e.items,"items",false);i.uiLayout=e.uiLayout}return i}static generateLabel(e){if(!e)return"";let t=e.replace(/([A-Z])/g," $1").replace(/_/g," ");return t.split(" ").filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim()}static inferSchemaFromData(e){const t={type:"object",properties:{},layoutStrategy:"compact",title:""};if(!e||typeof e!=="object"){return t}if(Array.isArray(e)){t.type="array";if(e.length>0&&typeof e[0]!=="object"){t.layoutStrategy="compact";t.items={type:typeof e[0]}}else{t.layoutStrategy="table";t.items={type:"object",layoutStrategy:"compact",properties:e.length>0?this.inferPropertiesFromObject(e[0]):{}}}}else{t.type="object";t.properties=this.inferPropertiesFromObject(e)}return t}static inferPropertiesFromObject(e){const t={};if(!e||typeof e!=="object")return t;for(const r of Object.keys(e)){const i=e[r];if(i===null||i===undefined)continue;let a="string";let o;let s;if(typeof i==="number")a="number";else if(typeof i==="boolean")a="boolean";else if(Array.isArray(i)){a="array";if(i.length>0&&typeof i[0]!=="object"){o={type:typeof i[0]}}else{o={type:"object",properties:i.length>0?this.inferPropertiesFromObject(i[0]):{}}}}else if(typeof i==="object"){a="object";s=this.inferPropertiesFromObject(i)}t[r]={type:a,items:o,properties:s,ui:{label:this.generateLabel(r),isKey:false,readOnly:false,widget:a==="array"&&o?.type!=="object"?"multiInput":undefined}}}return t}static resolveScope(e,r){if(!r||!r.startsWith("#/properties/")){return{meta:undefined,bindingPath:r||"",propKey:r||""}}const i=r.replace("#/properties/","").split("/properties/");let a=e.properties;let o;t.debug("[MetaUI SchemaNormalizer]",`Resolving scope '${r}' with segments: ${JSON.stringify(i)}`,"SchemaNormalizer");t.debug("[MetaUI SchemaNormalizer]",`Root schema keys: ${Object.keys(e.properties||{})}`,"SchemaNormalizer");for(let e=0;e<i.length;e++){const r=i[e];if(!a){t.debug("[MetaUI SchemaNormalizer]",`current is undefined at segment '${r}'`,"SchemaNormalizer");o=undefined;break}o=a[r];t.debug("[MetaUI SchemaNormalizer]",`Segment '${r}' resolved to meta: ${!!o}. Available keys in current: ${Object.keys(a)}`,"SchemaNormalizer");if(e<i.length-1){a=o?.properties}}const s=i.join("/");const n=r.replace("#/properties/","");return{meta:o,bindingPath:s,propKey:n}}}var i={__esModule:true};i.SchemaNormalizer=r;return i});
1
+ sap.ui.define(["../utils/Logger"],function(e){"use strict";const t=e["Logger"];class r{canHandle(e){return true}build(e,t){return r.normalize(e)}static normalize(e,r){let i=e;if(typeof i==="string"){if(!i.trim()){i=null}else{try{i=JSON.parse(i)}catch(e){const r="Failed to parse schema string: "+e.message;t.error("[MetaUI SchemaNormalizer]",r);throw new Error(r)}}}if(!i||typeof i!=="object"||Array.isArray(i)){return this.inferSchemaFromData(r)}try{const e={title:i.title,type:i.type||(i.items?"array":"object"),layoutStrategy:i.layoutStrategy,uiLayout:i.uiLayout?JSON.parse(JSON.stringify(i.uiLayout)):undefined,additionalProperties:i.additionalProperties};let t=i.properties||{};if(i.additionalProperties===true&&r){const e=this.inferSchemaFromData(r);if(e.type==="object"&&e.properties){t=this.deepMergeProperties(e.properties,t)}else if(e.type==="array"&&e.items&&e.items.properties){}}if(e.type==="object"){const r=Array.isArray(i.required)?i.required:[];e.properties=this.normalizeProperties(t,r)}else if(e.type==="array"){e.items=this.normalizePropertyMetadata(i.items||{type:"object",properties:{}},"items",false)}return e}catch(e){const r="Critical error normalizing schema object: "+e.message;t.error("[MetaUI SchemaNormalizer]",r);throw new Error(r)}}static deepMergeProperties(e,t){const r={...e};for(const e of Object.keys(t)){const i=t[e];const a=r[e];if(a&&typeof a==="object"&&!Array.isArray(a)&&i&&typeof i==="object"&&!Array.isArray(i)){r[e]=this.deepMergeProperties(a,i)}else{r[e]=i}}return r}static normalizeProperties(e,t=[]){const r={};for(const i of Object.keys(e)){const a=t.includes(i);r[i]=this.normalizePropertyMetadata(e[i],i,a)}return r}static normalizePropertyMetadata(e,t,r=false){const i={type:e.type||"string",$ref:e.$ref,ui:{label:e.ui?.label||this.generateLabel(t),isKey:!!e.ui?.isKey,readOnly:!!e.ui?.readOnly,widget:e.ui?.widget||(e.valueHelp||e.enum?"select":undefined),visibleOn:e.ui?.visibleOn,enabledOn:e.ui?.enabledOn,format:e.ui?.format,validators:e.ui?.validators,formatter:e.ui?.formatter,args:e.ui?.args,rows:e.ui?.rows,fullWidth:e.ui?.fullWidth,dialogButtonText:e.ui?.dialogButtonText},required:r||!!e.required,maxLength:e.maxLength,minLength:e.minLength,minimum:e.minimum,maximum:e.maximum,pattern:e.pattern,precision:e.precision,scale:e.scale,multipleOf:e.multipleOf,valueHelp:e.valueHelp,enum:e.enum};if(i.type==="object"&&e.properties){const t=Array.isArray(e.required)?e.required:[];i.properties=this.normalizeProperties(e.properties,t);i.uiLayout=e.uiLayout}else if(i.type==="array"&&e.items){i.items=this.normalizePropertyMetadata(e.items,"items",false);i.uiLayout=e.uiLayout}return i}static generateLabel(e){if(!e)return"";let t=e.replace(/([A-Z])/g," $1").replace(/_/g," ");return t.split(" ").filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim()}static inferSchemaFromData(e){const t={type:"object",properties:{},layoutStrategy:"compact",title:""};if(!e||typeof e!=="object"){return t}if(Array.isArray(e)){t.type="array";if(e.length>0&&typeof e[0]!=="object"){t.layoutStrategy="compact";t.items={type:typeof e[0]}}else{t.layoutStrategy="table";t.items={type:"object",layoutStrategy:"compact",properties:e.length>0?this.inferPropertiesFromObject(e[0]):{}}}}else{t.type="object";t.properties=this.inferPropertiesFromObject(e)}return t}static inferPropertiesFromObject(e){const t={};if(!e||typeof e!=="object")return t;for(const r of Object.keys(e)){const i=e[r];if(i===null||i===undefined)continue;let a="string";let o;let s;if(typeof i==="number")a="number";else if(typeof i==="boolean")a="boolean";else if(Array.isArray(i)){a="array";if(i.length>0&&typeof i[0]!=="object"){o={type:typeof i[0]}}else{o={type:"object",properties:i.length>0?this.inferPropertiesFromObject(i[0]):{}}}}else if(typeof i==="object"){a="object";s=this.inferPropertiesFromObject(i)}t[r]={type:a,items:o,properties:s,ui:{label:this.generateLabel(r),isKey:false,readOnly:false,widget:a==="array"&&o?.type!=="object"?"multiInput":undefined}}}return t}static resolveScope(e,r){if(!r||!r.startsWith("#/properties/")){return{meta:undefined,bindingPath:r||"",propKey:r||""}}const i=r.replace("#/properties/","").split("/properties/");let a=e.properties;let o;t.debug("[MetaUI SchemaNormalizer]",`Resolving scope '${r}' with segments: ${JSON.stringify(i)}`,"SchemaNormalizer");t.debug("[MetaUI SchemaNormalizer]",`Root schema keys: ${Object.keys(e.properties||{})}`,"SchemaNormalizer");for(let e=0;e<i.length;e++){const r=i[e];if(!a){t.debug("[MetaUI SchemaNormalizer]",`current is undefined at segment '${r}'`,"SchemaNormalizer");o=undefined;break}o=a[r];t.debug("[MetaUI SchemaNormalizer]",`Segment '${r}' resolved to meta: ${!!o}. Available keys in current: ${Object.keys(a)}`,"SchemaNormalizer");if(e<i.length-1){a=o?.properties}}const s=i.join("/");const n=r.replace("#/properties/","");return{meta:o,bindingPath:s,propKey:n}}}var i={__esModule:true};i.SchemaNormalizer=r;return i});
2
2
  //# sourceMappingURL=SchemaNormalizer.js.map
@@ -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":"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","ignoreList":[]}
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","stringify","undefined","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","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","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: any): 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: any, 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?: any, data?: any): 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 ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,\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, any>, 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: any, 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: any): 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, any>) : {}\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, any>): 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, any>) : {}\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":"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","ignoreList":[]}
@@ -12,7 +12,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
12
12
  /**
13
13
  * ISchemaBuilderPlugin Contract
14
14
  */
15
- public canHandle(rawSchema: unknown): boolean {
15
+ public canHandle(rawSchema: any): boolean {
16
16
  // Fallback for native ISchemas or data inference.
17
17
  // It always returns true because it is the final fallback builder in the registry.
18
18
  return true;
@@ -21,14 +21,14 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
21
21
  /**
22
22
  * ISchemaBuilderPlugin Contract
23
23
  */
24
- public build(rawSchema: unknown, targetDefinition?: string): ISchema {
24
+ public build(rawSchema: any, targetDefinition?: string): ISchema {
25
25
  return SchemaNormalizer.normalize(rawSchema);
26
26
  }
27
27
 
28
28
  /**
29
29
  * Validates that the provided raw payload conforms to the required ISchema structures.
30
30
  */
31
- public static normalize(rawSchema?: unknown, data?: unknown): ISchema {
31
+ public static normalize(rawSchema?: any, data?: any): ISchema {
32
32
  let schemaObj = rawSchema;
33
33
 
34
34
  if (typeof schemaObj === "string") {
@@ -55,7 +55,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
55
55
  title: schemaObj.title,
56
56
  type: schemaObj.type || (schemaObj.items ? "array" : "object"),
57
57
  layoutStrategy: schemaObj.layoutStrategy,
58
- uiLayout: schemaObj.uiLayout,
58
+ uiLayout: schemaObj.uiLayout ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,
59
59
  additionalProperties: schemaObj.additionalProperties
60
60
  };
61
61
 
@@ -114,7 +114,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
114
114
  * @param requiredKeys An optional array of keys that are required by the parent object.
115
115
  * @returns A map of strict IPropertyMetadata objects.
116
116
  */
117
- private static normalizeProperties(properties: Record<string, unknown>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {
117
+ private static normalizeProperties(properties: Record<string, any>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {
118
118
  const normalizedProps: Record<string, IPropertyMetadata> = {};
119
119
  for (const key of Object.keys(properties)) {
120
120
  const isRequired = requiredKeys.includes(key);
@@ -130,7 +130,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
130
130
  * @param isRequired Indicates if the parent object mandated this property as required.
131
131
  * @returns A strict IPropertyMetadata instance.
132
132
  */
133
- private static normalizePropertyMetadata(prop: Record<string, unknown>, keyName: string, isRequired: boolean = false): IPropertyMetadata {
133
+ private static normalizePropertyMetadata(prop: any, keyName: string, isRequired: boolean = false): IPropertyMetadata {
134
134
  const normalized: IPropertyMetadata = {
135
135
  type: (prop.type as FieldType) || "string",
136
136
  $ref: prop.$ref as string | undefined,
@@ -190,7 +190,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
190
190
  /**
191
191
  * Infers a v2 ISchema structure dynamically from a plain data payload.
192
192
  */
193
- public static inferSchemaFromData(data: unknown): ISchema {
193
+ public static inferSchemaFromData(data: any): ISchema {
194
194
  const schema: ISchema = { type: "object", properties: {}, layoutStrategy: "compact", title: "" };
195
195
 
196
196
  if (!data || typeof data !== "object") {
@@ -207,8 +207,8 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
207
207
  schema.items = {
208
208
  type: "object",
209
209
  layoutStrategy: "compact",
210
- properties: data.length > 0 ? this.inferPropertiesFromObject(data[0] as Record<string, unknown>) : {}
211
- };
210
+ properties: data.length > 0 ? this.inferPropertiesFromObject(data[0] as Record<string, any>) : {}
211
+ } as any;
212
212
  }
213
213
  } else {
214
214
  schema.type = "object";
@@ -223,7 +223,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
223
223
  * @param obj The raw JavaScript object.
224
224
  * @returns A dictionary of inferred IPropertyMetadata.
225
225
  */
226
- private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {
226
+ private static inferPropertiesFromObject(obj: Record<string, any>): Record<string, IPropertyMetadata> {
227
227
  const properties: Record<string, IPropertyMetadata> = {};
228
228
  if (!obj || typeof obj !== "object") return properties;
229
229
 
@@ -246,7 +246,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
246
246
  } else {
247
247
  items = {
248
248
  type: "object",
249
- properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, unknown>) : {}
249
+ properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, any>) : {}
250
250
  };
251
251
  }
252
252
  } else if (typeof val === "object") {
@@ -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":["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: 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 +1 @@
1
- {"version":3,"file":"StateManager.js","names":["GlobalPipeline","___PipelineManager","StateManager","schema","_useMessageManager","constructor","initialData","modelName","this","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.js","names":["GlobalPipeline","___PipelineManager","StateManager","schema","_useMessageManager","constructor","initialData","modelName","this","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: 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":[]}
@@ -66,7 +66,7 @@ export class StateManager {
66
66
  // 1. Remove existing messages (strictly for THIS model instance)
67
67
  if (this._useMessageManager) {
68
68
  const existingMessages = messageManager.getMessageModel().getData();
69
- const messagesToRemove = existingMessages.filter((msg: sap.ui.core.message.Message) => {
69
+ const messagesToRemove = existingMessages.filter((msg: Message) => {
70
70
  const isMatch = msg.getTarget() === targetPath && msg.getMessageProcessor() && msg.getMessageProcessor().getId() === this.model.getId();
71
71
  return isMatch;
72
72
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ISchema-dbg.js","names":[],"sources":["ISchema.ts"],"sourcesContent":["/**\n * @file ISchema.ts\n * @description MetaUI v2 Core Schema Contract.\n * Aligned with standard JSON-Schema syntax (properties, items) for native AI generation,\n * with a proprietary 'ui' directive block for Fiori visual orchestration.\n */\n\nexport type FieldType = \"string\" | \"number\" | \"integer\" | \"boolean\" | \"date\" | \"array\" | \"object\";\n\n/**\n * Value help structure mapping SAP Key/Text pairs.\n */\nexport interface IValueHelp {\n key: string;\n text: string;\n}\n\nexport interface IValidationRule {\n name: string;\n args?: unknown;\n}\n\n/**\n * An element in the visual layout tree.\n */\nexport interface ILayoutElement {\n type: \"Group\" | \"Control\" | \"HorizontalLayout\" | \"VerticalLayout\" | \"WizardStep\";\n label?: string;\n scope?: string; // JSON Pointer to property, e.g. \"#/properties/FirstName\"\n elements?: ILayoutElement[];\n widget?: string; // Optional override for the widget\n}\n\n/**\n * Visual orchestration directives to separate layout from data modeling.\n */\nexport interface IUIDirective {\n label?: string;\n isKey?: boolean;\n readOnly?: boolean;\n widget?: string;\n visibleOn?: string;\n enabledOn?: string;\n format?: string;\n rows?: number;\n fullWidth?: boolean;\n validators?: (string | IValidationRule)[];\n formatter?: string;\n args?: unknown;\n dialogButtonText?: string;\n}\n\nexport interface IRemoteValueHelpConfig {\n url: string;\n keyPath: string;\n textPath: string;\n}\n\n/**\n * Standard JSON-Schema property definition.\n */\nexport interface IPropertyMetadata {\n type: FieldType;\n $ref?: string;\n \n // MetaUI specific orchestration\n ui?: IUIDirective;\n \n // Standard validations\n required?: boolean;\n maxLength?: number;\n minLength?: number;\n minimum?: number;\n maximum?: number;\n pattern?: string;\n \n // Numeric specifics\n precision?: number;\n scale?: number;\n multipleOf?: number;\n \n // Value constraints\n valueHelp?: IValueHelp[] | IRemoteValueHelpConfig;\n enum?: string[] | number[];\n \n // OpenAPI Advanced features\n default?: unknown;\n nullable?: boolean;\n writeOnly?: boolean;\n readOnly?: boolean;\n example?: unknown;\n deprecated?: boolean;\n exclusiveMinimum?: boolean | number;\n exclusiveMaximum?: boolean | number;\n \n // Array Validation\n maxItems?: number;\n minItems?: number;\n uniqueItems?: boolean;\n\n // Object Validation\n maxProperties?: number;\n minProperties?: number;\n\n // Polymorphism and Composition\n oneOf?: IPropertyMetadata[];\n anyOf?: IPropertyMetadata[];\n allOf?: IPropertyMetadata[];\n not?: IPropertyMetadata;\n discriminator?: { propertyName: string, mapping?: Record<string, string> };\n \n // Nested recursion for objects and arrays\n properties?: Record<string, IPropertyMetadata>;\n items?: IPropertyMetadata;\n uiLayout?: ILayoutElement[];\n additionalProperties?: boolean | IPropertyMetadata;\n}\n\n/**\n * The master schema contract ingested by the Engine.\n */\nexport interface ISchema {\n title?: string;\n layoutStrategy?: string;\n type?: \"object\" | \"array\"; // Implicit layout hinting\n properties?: Record<string, IPropertyMetadata>;\n items?: IPropertyMetadata;\n uiLayout?: ILayoutElement[];\n additionalProperties?: boolean;\n definitions?: Record<string, ISchema>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"ISchema-dbg.js","names":[],"sources":["ISchema.ts"],"sourcesContent":["/**\n * @file ISchema.ts\n * @description MetaUI v2 Core Schema Contract.\n * Aligned with standard JSON-Schema syntax (properties, items) for native AI generation,\n * with a proprietary 'ui' directive block for Fiori visual orchestration.\n */\n\nimport { RenderModeType, SchemaTypeType } from \"../constants/MetaUIConstants\";\n\nexport type FieldType = SchemaTypeType | \"date\";\n\n/**\n * Value help structure mapping SAP Key/Text pairs.\n */\nexport interface IValueHelp {\n key: string;\n text: string;\n}\n\nexport interface IValidationRule {\n name: string;\n args?: unknown;\n}\n\n/**\n * An element in the visual layout tree.\n */\nexport interface ILayoutElement {\n type: \"Group\" | \"Control\" | \"HorizontalLayout\" | \"VerticalLayout\" | \"WizardStep\";\n label?: string;\n scope?: string; // JSON Pointer to property, e.g. \"#/properties/FirstName\"\n elements?: ILayoutElement[];\n widget?: string; // Optional override for the widget\n}\n\n/**\n * Visual orchestration directives to separate layout from data modeling.\n */\nexport interface IUIDirective {\n label?: string;\n isKey?: boolean;\n readOnly?: boolean;\n widget?: string;\n visibleOn?: string;\n enabledOn?: string;\n format?: string;\n rows?: number;\n fullWidth?: boolean;\n validators?: (string | IValidationRule)[];\n formatter?: string;\n args?: unknown;\n dialogButtonText?: string;\n layoutBudget?: number;\n renderMode?: RenderModeType;\n}\n\nexport interface IRemoteValueHelpConfig {\n url: string;\n keyPath: string;\n textPath: string;\n}\n\n/**\n * Standard JSON-Schema property definition.\n */\nexport interface IPropertyMetadata {\n type: FieldType;\n $ref?: string;\n \n // MetaUI specific orchestration\n ui?: IUIDirective;\n \n // Standard validations\n required?: boolean;\n maxLength?: number;\n minLength?: number;\n minimum?: number;\n maximum?: number;\n pattern?: string;\n \n // Numeric specifics\n precision?: number;\n scale?: number;\n multipleOf?: number;\n \n // Value constraints\n valueHelp?: IValueHelp[] | IRemoteValueHelpConfig;\n enum?: string[] | number[];\n \n // OpenAPI Advanced features\n default?: unknown;\n nullable?: boolean;\n writeOnly?: boolean;\n readOnly?: boolean;\n example?: unknown;\n deprecated?: boolean;\n exclusiveMinimum?: boolean | number;\n exclusiveMaximum?: boolean | number;\n \n // Array Validation\n maxItems?: number;\n minItems?: number;\n uniqueItems?: boolean;\n\n // Object Validation\n maxProperties?: number;\n minProperties?: number;\n\n // Polymorphism and Composition\n oneOf?: IPropertyMetadata[];\n anyOf?: IPropertyMetadata[];\n allOf?: IPropertyMetadata[];\n not?: IPropertyMetadata;\n discriminator?: { propertyName: string, mapping?: Record<string, string> };\n \n // Nested recursion for objects and arrays\n properties?: Record<string, IPropertyMetadata>;\n items?: IPropertyMetadata;\n uiLayout?: ILayoutElement[];\n additionalProperties?: boolean | IPropertyMetadata;\n}\n\n/**\n * The master schema contract ingested by the Engine.\n */\nexport interface ISchema {\n title?: string;\n layoutStrategy?: string;\n type?: \"object\" | \"array\"; // Implicit layout hinting\n properties?: Record<string, IPropertyMetadata>;\n items?: IPropertyMetadata;\n uiLayout?: ILayoutElement[];\n additionalProperties?: boolean;\n definitions?: Record<string, ISchema>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -5,7 +5,8 @@ declare module "nz/co/siliconst/ui5/metaui/interfaces/ISchema" {
5
5
  * Aligned with standard JSON-Schema syntax (properties, items) for native AI generation,
6
6
  * with a proprietary 'ui' directive block for Fiori visual orchestration.
7
7
  */
8
- export type FieldType = "string" | "number" | "integer" | "boolean" | "date" | "array" | "object";
8
+ import { RenderModeType, SchemaTypeType } from "nz/co/siliconst/ui5/metaui/constants/MetaUIConstants";
9
+ export type FieldType = SchemaTypeType | "date";
9
10
  /**
10
11
  * Value help structure mapping SAP Key/Text pairs.
11
12
  */
@@ -44,6 +45,8 @@ declare module "nz/co/siliconst/ui5/metaui/interfaces/ISchema" {
44
45
  formatter?: string;
45
46
  args?: unknown;
46
47
  dialogButtonText?: string;
48
+ layoutBudget?: number;
49
+ renderMode?: RenderModeType;
47
50
  }
48
51
  export interface IRemoteValueHelpConfig {
49
52
  url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ISchema.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ISchema.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts"],"names":[],"mappings":"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"}