@siliconst/metaui 1.4.34 → 1.4.44

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 (499) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js +22 -20
  4. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js.map +1 -1
  5. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts +3 -3
  6. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts.map +1 -1
  7. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js +1 -1
  8. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js.map +1 -1
  9. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.ts +24 -16
  10. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js.map +1 -1
  11. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js.map +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.ts +2 -2
  13. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js +62 -2
  14. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js.map +1 -1
  15. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts +54 -0
  16. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts.map +1 -1
  17. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js +1 -1
  18. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js.map +1 -1
  19. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.ts +59 -2
  20. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +43 -47
  21. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  22. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +2 -2
  23. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  24. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +61 -66
  27. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +120 -63
  28. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  29. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +16 -4
  30. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  31. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  32. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  33. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +126 -65
  34. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +41 -38
  35. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +6 -4
  37. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
  39. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  40. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +47 -39
  41. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +41 -2
  42. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
  43. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +6 -2
  44. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
  46. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
  47. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +47 -2
  48. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +7 -2
  49. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
  50. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +4 -1
  51. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js +1 -1
  53. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
  54. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +7 -2
  55. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +212 -34
  56. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +21 -3
  58. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  59. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  60. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +214 -35
  62. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js +3 -1
  63. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts.map +1 -1
  65. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js.map +1 -1
  67. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.ts +3 -1
  68. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js +5 -0
  69. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js.map +1 -1
  70. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts.map +1 -1
  71. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js +1 -1
  72. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js.map +1 -1
  73. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts +6 -0
  74. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +8 -0
  75. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -1
  77. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +1 -1
  78. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +7 -0
  80. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +127 -50
  81. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  82. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +13 -0
  83. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  84. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  85. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +140 -57
  87. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js +229 -0
  88. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js.map +1 -0
  89. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts +68 -0
  90. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts.map +1 -0
  91. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js +2 -0
  92. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js.map +1 -0
  93. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.ts +227 -0
  94. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +34 -13
  95. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  96. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +4 -4
  97. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  99. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  100. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +45 -20
  101. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +15 -3
  102. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -1
  103. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts.map +1 -1
  104. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +1 -1
  105. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -1
  106. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +15 -1
  107. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +82 -16
  108. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  109. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +16 -0
  110. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  111. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js +1 -1
  112. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +89 -17
  114. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  115. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +12 -1
  116. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  117. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +13 -1
  118. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js +2 -0
  119. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js.map +1 -0
  120. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts +50 -0
  121. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts.map +1 -0
  122. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js +2 -0
  123. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js.map +1 -0
  124. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.ts +49 -0
  125. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  126. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +21 -1
  127. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  128. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +24 -1
  129. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +26 -31
  130. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  131. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  132. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
  133. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  134. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +22 -25
  135. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +40 -6
  136. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  137. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  138. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  139. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  140. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +37 -5
  141. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +69 -56
  142. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  143. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js +3 -2
  144. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -1
  145. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +4 -3
  150. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -1
  151. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts +1 -1
  152. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts.map +1 -1
  153. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -1
  154. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +4 -4
  155. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js +2 -1
  156. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -1
  157. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +1 -1
  158. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -1
  159. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js +1 -1
  160. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -1
  161. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.ts +4 -3
  162. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js +12 -8
  163. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -1
  164. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts +1 -1
  165. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -1
  166. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js +1 -1
  167. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -1
  168. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +16 -12
  169. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js +20 -12
  170. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -1
  171. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +5 -5
  172. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -1
  173. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js +1 -1
  174. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -1
  175. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +25 -17
  176. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js +18 -11
  177. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +5 -5
  179. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -1
  180. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js +1 -1
  181. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -1
  182. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +23 -16
  183. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +24 -100
  184. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -1
  185. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +10 -74
  186. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -1
  187. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js +1 -1
  188. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -1
  189. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +54 -117
  190. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +7 -4
  191. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  192. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +1 -1
  193. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  194. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
  195. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  196. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +6 -4
  197. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +4 -4
  198. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  199. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +1 -1
  200. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -1
  201. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  203. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +5 -5
  204. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +129 -9
  205. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
  206. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +45 -4
  207. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
  208. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
  209. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
  210. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +143 -13
  211. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +35 -14
  212. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  213. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts +1 -1
  214. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
  215. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
  216. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  217. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +38 -14
  218. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +2 -2
  219. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +1 -1
  221. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -1
  222. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
  223. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +3 -3
  225. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +69 -20
  226. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +2 -1
  228. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
  229. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
  230. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  231. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +77 -21
  232. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +2 -2
  233. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  234. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts +1 -1
  235. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +3 -3
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +2 -2
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +3 -3
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js +1 -0
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js.map +1 -1
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts.map +1 -1
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js +1 -1
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js.map +1 -1
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts +6 -5
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +8 -3
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +1 -1
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +9 -4
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js +2 -2
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -1
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts +1 -1
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +1 -1
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -1
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +3 -3
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +2 -2
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +1 -1
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
  270. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
  271. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  272. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +3 -3
  273. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +2 -2
  274. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  275. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +1 -1
  276. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
  277. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
  278. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  279. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +3 -3
  280. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js +2 -2
  281. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -1
  282. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts +1 -1
  283. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts.map +1 -1
  284. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +1 -1
  285. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -1
  286. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +3 -3
  287. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
  288. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +1 -1
  289. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
  290. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
  291. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +1 -1
  292. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +6 -5
  293. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
  294. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +1 -1
  295. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
  296. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
  297. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
  298. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +9 -8
  299. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +2 -2
  300. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
  301. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +1 -1
  302. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
  303. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
  304. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
  305. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +3 -3
  306. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +35 -20
  307. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  308. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +1 -1
  309. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
  310. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
  311. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  312. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +39 -22
  313. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +5 -3
  314. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
  315. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +1 -1
  316. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
  317. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
  318. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
  319. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +4 -3
  320. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js +2 -2
  321. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -1
  322. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts +1 -1
  323. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts.map +1 -1
  324. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +1 -1
  325. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -1
  326. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +3 -3
  327. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +2 -2
  328. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  329. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +1 -1
  330. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
  331. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
  332. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  333. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +3 -3
  334. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +28 -12
  335. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -1
  336. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts +5 -1
  337. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -1
  338. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +1 -1
  339. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -1
  340. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +29 -10
  341. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +2 -2
  342. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  343. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +1 -1
  344. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -1
  345. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
  346. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  347. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +3 -3
  348. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +2 -2
  349. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  350. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +1 -1
  351. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -1
  352. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
  353. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  354. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +3 -3
  355. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +2 -2
  356. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  357. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +1 -1
  358. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
  359. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
  360. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  361. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +3 -3
  362. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +13 -3
  363. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
  364. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts +1 -1
  365. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts.map +1 -1
  366. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
  367. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
  368. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +14 -5
  369. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +2 -2
  370. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  371. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +1 -1
  372. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -1
  373. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
  374. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  375. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +3 -3
  376. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +2 -2
  377. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
  378. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts +1 -1
  379. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
  380. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
  381. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
  382. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +3 -3
  383. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +58 -56
  384. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  385. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +2 -5
  386. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
  387. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
  388. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  389. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +66 -55
  390. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +2 -2
  391. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  392. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts +1 -1
  393. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
  394. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
  395. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  396. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +3 -3
  397. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +2 -2
  398. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  399. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +1 -1
  400. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
  401. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
  402. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  403. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +3 -3
  404. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
  405. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
  406. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +110 -109
  407. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js +2 -1
  408. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -1
  409. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -1
  410. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js +1 -1
  411. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -1
  412. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +66 -64
  413. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +29 -8
  414. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -1
  415. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +1 -1
  416. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -1
  417. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js +1 -1
  418. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -1
  419. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +145 -118
  420. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
  421. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
  422. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +106 -105
  423. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js +41 -0
  424. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js.map +1 -0
  425. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts +24 -0
  426. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts.map +1 -0
  427. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js +2 -0
  428. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js.map +1 -0
  429. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.ts +34 -0
  430. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js +41 -0
  431. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js.map +1 -0
  432. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts +24 -0
  433. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts.map +1 -0
  434. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js +2 -0
  435. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js.map +1 -0
  436. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.ts +34 -0
  437. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js +52 -0
  438. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js.map +1 -0
  439. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts +30 -0
  440. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts.map +1 -0
  441. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js +2 -0
  442. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js.map +1 -0
  443. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.ts +45 -0
  444. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js +52 -0
  445. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js.map +1 -0
  446. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts +30 -0
  447. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts.map +1 -0
  448. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js +2 -0
  449. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js.map +1 -0
  450. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.ts +45 -0
  451. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js +41 -0
  452. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js.map +1 -0
  453. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts +24 -0
  454. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts.map +1 -0
  455. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js +2 -0
  456. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js.map +1 -0
  457. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.ts +34 -0
  458. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js +40 -0
  459. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js.map +1 -0
  460. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts +28 -0
  461. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts.map +1 -0
  462. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js +2 -0
  463. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js.map +1 -0
  464. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.ts +34 -0
  465. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js +40 -0
  466. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js.map +1 -0
  467. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts +28 -0
  468. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts.map +1 -0
  469. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js +2 -0
  470. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js.map +1 -0
  471. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.ts +34 -0
  472. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js +40 -0
  473. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js.map +1 -0
  474. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts +28 -0
  475. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts.map +1 -0
  476. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js +2 -0
  477. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js.map +1 -0
  478. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.ts +34 -0
  479. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js +40 -0
  480. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js.map +1 -0
  481. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts +28 -0
  482. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts.map +1 -0
  483. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js +2 -0
  484. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js.map +1 -0
  485. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.ts +34 -0
  486. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js +33 -0
  487. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js.map +1 -0
  488. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts +14 -0
  489. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts.map +1 -0
  490. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js +2 -0
  491. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js.map +1 -0
  492. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.ts +24 -0
  493. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +0 -75
  494. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +0 -1
  495. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +0 -47
  496. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +0 -1
  497. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +0 -2
  498. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +0 -1
  499. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +0 -72
@@ -1,10 +1,11 @@
1
- sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
1
+ sap.ui.define(["../constants/MetaUIConstants", "../utils/Logger"], function (___constants_MetaUIConstants, ___utils_Logger) {
2
2
  "use strict";
3
3
 
4
4
  /**
5
5
  * @file SchemaNormalizer.ts
6
6
  * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.
7
7
  */
8
+ const SCHEMA_TYPE = ___constants_MetaUIConstants["SCHEMA_TYPE"];
8
9
  const Logger = ___utils_Logger["Logger"];
9
10
  class SchemaNormalizer {
10
11
  /**
@@ -28,7 +29,7 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
28
29
  */
29
30
  static normalize(rawSchema, data) {
30
31
  let schemaObj = rawSchema;
31
- if (typeof schemaObj === "string") {
32
+ if (typeof schemaObj === SCHEMA_TYPE.STRING) {
32
33
  if (!schemaObj.trim()) {
33
34
  schemaObj = null;
34
35
  } else {
@@ -51,7 +52,8 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
51
52
  type: schemaObj.type || (schemaObj.items ? "array" : "object"),
52
53
  layoutStrategy: schemaObj.layoutStrategy,
53
54
  uiLayout: schemaObj.uiLayout ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,
54
- additionalProperties: schemaObj.additionalProperties
55
+ additionalProperties: schemaObj.additionalProperties,
56
+ uiPolicies: schemaObj.uiPolicies ? JSON.parse(JSON.stringify(schemaObj.uiPolicies)) : undefined
55
57
  };
56
58
  let targetProperties = schemaObj.properties || {};
57
59
  if (schemaObj.additionalProperties === true && data) {
@@ -124,15 +126,17 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
124
126
  * @param isRequired Indicates if the parent object mandated this property as required.
125
127
  * @returns A strict IPropertyMetadata instance.
126
128
  */
127
- static normalizePropertyMetadata(prop, keyName, isRequired = false) {
129
+ static normalizePropertyMetadata(rawProp, keyName, isRequired = false) {
130
+ const prop = rawProp || {};
131
+ const ui = prop.ui || {};
128
132
  const normalized = {
129
133
  type: prop.type || "string",
130
134
  $ref: prop.$ref,
131
135
  ui: {
132
- label: prop.ui?.label || this.generateLabel(keyName),
133
- isKey: !!prop.ui?.isKey,
134
- readOnly: !!prop.ui?.readOnly,
135
- widget: prop.ui?.widget || (prop.valueHelp || prop.enum ? "select" : undefined),
136
+ label: ui.label || this.generateLabel(keyName),
137
+ isKey: !!ui.isKey,
138
+ readOnly: !!ui.readOnly,
139
+ widget: ui.widget || (prop.valueHelp || prop.enum ? "select" : undefined),
136
140
  visibleOn: prop.ui?.visibleOn,
137
141
  enabledOn: prop.ui?.enabledOn,
138
142
  format: prop.ui?.format,
@@ -141,7 +145,8 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
141
145
  args: prop.ui?.args,
142
146
  rows: prop.ui?.rows,
143
147
  fullWidth: prop.ui?.fullWidth,
144
- dialogButtonText: prop.ui?.dialogButtonText
148
+ dialogButtonText: prop.ui?.dialogButtonText,
149
+ controlProps: prop.ui?.controlProps
145
150
  },
146
151
  required: isRequired || !!prop.required,
147
152
  maxLength: prop.maxLength,
@@ -159,8 +164,18 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
159
164
  const requiredKeys = Array.isArray(prop.required) ? prop.required : [];
160
165
  normalized.properties = this.normalizeProperties(prop.properties, requiredKeys);
161
166
  normalized.uiLayout = prop.uiLayout;
162
- } else if (normalized.type === "array" && prop.items) {
163
- normalized.items = this.normalizePropertyMetadata(prop.items, "items", false);
167
+ } else if (normalized.type === "array") {
168
+ // Auto-correct arrays that were mistakenly flattened with 'properties' instead of 'items.properties'
169
+ if (prop.properties && !prop.items) {
170
+ prop.items = {
171
+ type: "object",
172
+ properties: prop.properties
173
+ };
174
+ delete prop.properties;
175
+ }
176
+ if (prop.items) {
177
+ normalized.items = this.normalizePropertyMetadata(prop.items, "items", false);
178
+ }
164
179
  normalized.uiLayout = prop.uiLayout;
165
180
  }
166
181
  return normalized;
@@ -197,10 +212,16 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
197
212
  };
198
213
  } else {
199
214
  schema.layoutStrategy = "table";
215
+ let mergedProperties = {};
216
+ const limit = Math.min(data.length, 50);
217
+ for (let i = 0; i < limit; i++) {
218
+ const inferred = this.inferPropertiesFromObject(data[i]);
219
+ mergedProperties = this.deepMergeProperties(mergedProperties, inferred);
220
+ }
200
221
  schema.items = {
201
222
  type: "object",
202
223
  layoutStrategy: "compact",
203
- properties: data.length > 0 ? this.inferPropertiesFromObject(data[0]) : {}
224
+ properties: mergedProperties
204
225
  };
205
226
  }
206
227
  } else {
@@ -221,7 +242,7 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
221
242
  for (const key of Object.keys(obj)) {
222
243
  const val = obj[key];
223
244
  if (val === null || val === undefined) continue;
224
- let type = "string";
245
+ let type = SCHEMA_TYPE.STRING;
225
246
  let items;
226
247
  let nestedProps;
227
248
  if (typeof val === "number") type = "number";else if (typeof val === "boolean") type = "boolean";else if (Array.isArray(val)) {
@@ -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","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":[]}
1
+ {"version":3,"file":"SchemaNormalizer-dbg.js","names":["SCHEMA_TYPE","___constants_MetaUIConstants","Logger","___utils_Logger","SchemaNormalizer","canHandle","rawSchema","build","targetDefinition","normalize","data","schemaObj","STRING","trim","JSON","parse","e","msg","message","error","Error","Array","isArray","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","stringify","undefined","additionalProperties","uiPolicies","targetProperties","properties","inferred","deepMergeProperties","requiredKeys","required","normalizeProperties","normalizePropertyMetadata","base","override","merged","key","Object","keys","overrideVal","baseVal","normalizedProps","isRequired","includes","rawProp","keyName","prop","ui","$ref","label","generateLabel","isKey","readOnly","widget","valueHelp","enum","visibleOn","enabledOn","format","validators","formatter","args","rows","fullWidth","dialogButtonText","controlProps","maxLength","minLength","minimum","maximum","pattern","precision","scale","multipleOf","name","spaced","replace","split","filter","w","length","map","word","charAt","toUpperCase","slice","toLowerCase","join","schema","mergedProperties","limit","Math","min","i","inferPropertiesFromObject","obj","val","nestedProps","resolveScope","scope","startsWith","meta","bindingPath","propKey","pathSegments","current","debug","segment","__exports","__esModule"],"sources":["SchemaNormalizer.ts"],"sourcesContent":["/**\n * @file SchemaNormalizer.ts\n * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.\n */\n\nimport { ISchema, IPropertyMetadata, FieldType } from \"../interfaces/ISchema\";\nimport { SCHEMA_TYPE } from \"../constants/MetaUIConstants\";\nimport { ISchemaBuilderPlugin } from \"../interfaces/ISchemaBuilderPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\nexport class SchemaNormalizer implements ISchemaBuilderPlugin {\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public canHandle(rawSchema: unknown): boolean {\n // Fallback for native ISchemas or data inference.\n // It always returns true because it is the final fallback builder in the registry.\n return true;\n }\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public build(rawSchema: unknown, targetDefinition?: string): ISchema {\n return SchemaNormalizer.normalize(rawSchema);\n }\n\n /**\n * Validates that the provided raw payload conforms to the required ISchema structures.\n */\n public static normalize(rawSchema?: unknown, data?: unknown): ISchema {\n let schemaObj = rawSchema;\n\n if (typeof schemaObj === SCHEMA_TYPE.STRING) {\n if (!schemaObj.trim()) {\n schemaObj = null;\n } else {\n try {\n schemaObj = JSON.parse(schemaObj);\n } catch (e) {\n const msg = \"Failed to parse schema string: \" + (e as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n }\n\n if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {\n return this.inferSchemaFromData(data);\n }\n\n try {\n // It is an object. Ensure it conforms to v2 structure.\n const normalized: ISchema = {\n title: schemaObj.title,\n type: schemaObj.type || (schemaObj.items ? \"array\" : \"object\"),\n layoutStrategy: schemaObj.layoutStrategy,\n uiLayout: schemaObj.uiLayout ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,\n additionalProperties: schemaObj.additionalProperties,\n uiPolicies: schemaObj.uiPolicies ? JSON.parse(JSON.stringify(schemaObj.uiPolicies)) : undefined\n };\n\n let targetProperties = schemaObj.properties || {};\n\n if (schemaObj.additionalProperties === true && data) {\n const inferred = this.inferSchemaFromData(data);\n if (inferred.type === \"object\" && inferred.properties) {\n targetProperties = this.deepMergeProperties(inferred.properties, targetProperties);\n } else if (inferred.type === \"array\" && inferred.items && inferred.items.properties) {\n // Array schema merging could be added here if we want full support.\n }\n }\n\n if (normalized.type === \"object\") {\n const requiredKeys = Array.isArray(schemaObj.required) ? schemaObj.required : [];\n normalized.properties = this.normalizeProperties(targetProperties, requiredKeys);\n } else if (normalized.type === \"array\") {\n // Future expansion: array deep merge\n normalized.items = this.normalizePropertyMetadata(schemaObj.items || { type: \"object\", properties: {} }, \"items\", false);\n }\n\n return normalized;\n } catch (error) {\n const msg = \"Critical error normalizing schema object: \" + (error as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively deep merges an inferred schema over a base schema.\n * @param base The base property dictionary.\n * @param override The overriding inferred dictionary.\n * @returns A new deeply merged property dictionary.\n */\n private static deepMergeProperties(base: Record<string, unknown>, override: Record<string, unknown>): Record<string, unknown> {\n const merged = { ...base };\n for (const key of Object.keys(override)) {\n const overrideVal = override[key];\n const baseVal = merged[key];\n\n if (baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal) &&\n overrideVal && typeof overrideVal === \"object\" && !Array.isArray(overrideVal)) {\n merged[key] = this.deepMergeProperties(baseVal, overrideVal);\n } else {\n merged[key] = overrideVal;\n }\n }\n return merged;\n }\n\n /**\n * Normalizes a collection of properties.\n * @param properties The raw properties map.\n * @param requiredKeys An optional array of keys that are required by the parent object.\n * @returns A map of strict IPropertyMetadata objects.\n */\n private static normalizeProperties(properties: Record<string, unknown>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {\n const normalizedProps: Record<string, IPropertyMetadata> = {};\n for (const key of Object.keys(properties)) {\n const isRequired = requiredKeys.includes(key);\n normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key, isRequired);\n }\n return normalizedProps;\n }\n\n /**\n * Normalizes a single property against the ISchema specification.\n * @param prop The raw property definition.\n * @param keyName The string key name for generating default labels.\n * @param isRequired Indicates if the parent object mandated this property as required.\n * @returns A strict IPropertyMetadata instance.\n */\n private static normalizePropertyMetadata(rawProp: unknown, keyName: string, isRequired: boolean = false): IPropertyMetadata {\n const prop = (rawProp || {}) as Record<string, unknown>;\n const ui = (prop.ui || {}) as Record<string, unknown>;\n \n const normalized: IPropertyMetadata = {\n type: (prop.type as FieldType) || \"string\",\n $ref: prop.$ref as string | undefined,\n ui: {\n label: ui.label as string || this.generateLabel(keyName),\n isKey: !!ui.isKey,\n readOnly: !!ui.readOnly,\n widget: ui.widget as string || (prop.valueHelp || prop.enum ? \"select\" : undefined),\n visibleOn: prop.ui?.visibleOn,\n enabledOn: prop.ui?.enabledOn,\n format: prop.ui?.format,\n validators: prop.ui?.validators,\n formatter: prop.ui?.formatter,\n args: prop.ui?.args,\n rows: prop.ui?.rows,\n fullWidth: prop.ui?.fullWidth,\n dialogButtonText: prop.ui?.dialogButtonText,\n controlProps: prop.ui?.controlProps\n },\n required: isRequired || !!prop.required,\n maxLength: prop.maxLength as number,\n minLength: prop.minLength as number,\n minimum: prop.minimum,\n maximum: prop.maximum,\n pattern: prop.pattern,\n precision: prop.precision,\n scale: prop.scale,\n multipleOf: prop.multipleOf as number,\n valueHelp: prop.valueHelp,\n enum: prop.enum\n };\n\n if (normalized.type === \"object\" && prop.properties) {\n const requiredKeys = Array.isArray(prop.required) ? prop.required : [];\n normalized.properties = this.normalizeProperties(prop.properties as Record<string, unknown>, requiredKeys);\n normalized.uiLayout = prop.uiLayout;\n } else if (normalized.type === \"array\") {\n // Auto-correct arrays that were mistakenly flattened with 'properties' instead of 'items.properties'\n if (prop.properties && !prop.items) {\n prop.items = {\n type: \"object\",\n properties: prop.properties\n };\n delete prop.properties;\n }\n\n if (prop.items) {\n normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, \"items\", false);\n }\n normalized.uiLayout = prop.uiLayout;\n }\n\n return normalized;\n }\n\n /**\n * Generates a Title Case label from camelCase or snake_case technical names.\n */\n private static generateLabel(name: string): string {\n if (!name) return \"\";\n let spaced = name.replace(/([A-Z])/g, \" $1\").replace(/_/g, \" \");\n return spaced.split(' ')\n .filter(w => w.length > 0)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n .trim();\n }\n\n /**\n * Infers a v2 ISchema structure dynamically from a plain data payload.\n */\n public static inferSchemaFromData(data: unknown): ISchema {\n const schema: ISchema = { type: \"object\", properties: {}, layoutStrategy: \"compact\", title: \"\" };\n\n if (!data || typeof data !== \"object\") {\n return schema;\n }\n\n if (Array.isArray(data)) {\n schema.type = \"array\";\n if (data.length > 0 && typeof data[0] !== \"object\") {\n schema.layoutStrategy = \"compact\";\n schema.items = { type: typeof data[0] as FieldType };\n } else {\n schema.layoutStrategy = \"table\";\n \n let mergedProperties: Record<string, unknown> = {};\n const limit = Math.min(data.length, 50);\n for (let i = 0; i < limit; i++) {\n const inferred = this.inferPropertiesFromObject(data[i] as Record<string, any>);\n mergedProperties = this.deepMergeProperties(mergedProperties, inferred as unknown as Record<string, unknown>);\n }\n\n schema.items = {\n type: \"object\",\n layoutStrategy: \"compact\",\n properties: mergedProperties as Record<string, IPropertyMetadata>\n } as any;\n }\n } else {\n schema.type = \"object\";\n schema.properties = this.inferPropertiesFromObject(data);\n }\n\n return schema;\n }\n\n /**\n * Infers field metadata recursively from a raw data object.\n * @param obj The raw JavaScript object.\n * @returns A dictionary of inferred IPropertyMetadata.\n */\n private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const properties: Record<string, IPropertyMetadata> = {};\n if (!obj || typeof obj !== \"object\") return properties;\n\n for (const key of Object.keys(obj)) {\n const val = obj[key];\n if (val === null || val === undefined) continue;\n\n let type: FieldType = SCHEMA_TYPE.STRING;\n let items: IPropertyMetadata | undefined;\n let nestedProps: Record<string, IPropertyMetadata> | undefined;\n\n if (typeof val === \"number\") type = \"number\";\n else if (typeof val === \"boolean\") type = \"boolean\";\n else if (Array.isArray(val)) {\n type = \"array\";\n if (val.length > 0 && typeof val[0] !== \"object\") {\n items = {\n type: typeof val[0] as FieldType\n };\n } else {\n items = {\n type: \"object\",\n properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, unknown>) : {}\n };\n }\n } else if (typeof val === \"object\") {\n type = \"object\";\n nestedProps = this.inferPropertiesFromObject(val as Record<string, unknown>);\n }\n\n properties[key] = {\n type,\n items,\n properties: nestedProps,\n ui: {\n label: this.generateLabel(key),\n isKey: false,\n readOnly: false,\n widget: type === \"array\" && items?.type !== \"object\" ? \"multiInput\" : undefined\n }\n };\n }\n\n return properties;\n }\n\n /**\n * Resolves a JSON Schema scope (e.g. '#/properties/header/properties/id')\n * against the ISchema, returning the PropertyMetadata and the UI5 binding path.\n */\n public static resolveScope(schema: ISchema, scope: string): { meta: IPropertyMetadata | undefined, bindingPath: string, propKey: string } {\n if (!scope || !scope.startsWith(\"#/properties/\")) {\n return { meta: undefined, bindingPath: scope || \"\", propKey: scope || \"\" };\n }\n \n const pathSegments = scope.replace(\"#/properties/\", \"\").split(\"/properties/\");\n let current: Record<string, IPropertyMetadata> | undefined = schema.properties;\n let meta: IPropertyMetadata | undefined;\n \n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Resolving scope '${scope}' with segments: ${JSON.stringify(pathSegments)}`, \"SchemaNormalizer\");\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Root schema keys: ${Object.keys(schema.properties || {})}`, \"SchemaNormalizer\");\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n if (!current) {\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `current is undefined at segment '${segment}'`, \"SchemaNormalizer\");\n meta = undefined;\n break;\n }\n meta = current[segment];\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Segment '${segment}' resolved to meta: ${!!meta}. Available keys in current: ${Object.keys(current)}`, \"SchemaNormalizer\");\n if (i < pathSegments.length - 1) {\n current = meta?.properties;\n }\n }\n \n const bindingPath = pathSegments.join(\"/\");\n const propKey = scope.replace(\"#/properties/\", \"\"); // The original raw string for logging\n \n return {\n meta,\n bindingPath,\n propKey\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -9,15 +9,15 @@ declare module "nz/co/siliconst/ui5/metaui/core/SchemaNormalizer" {
9
9
  /**
10
10
  * ISchemaBuilderPlugin Contract
11
11
  */
12
- canHandle(rawSchema: any): boolean;
12
+ canHandle(rawSchema: unknown): boolean;
13
13
  /**
14
14
  * ISchemaBuilderPlugin Contract
15
15
  */
16
- build(rawSchema: any, targetDefinition?: string): ISchema;
16
+ build(rawSchema: unknown, 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?: any, data?: any): ISchema;
20
+ static normalize(rawSchema?: unknown, data?: unknown): 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: any): ISchema;
50
+ static inferSchemaFromData(data: unknown): 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,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
+ {"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;IAEtG,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;QA2DrE;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;QAgBlC;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;QASlC;;;;;;WAMG;QACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;QA2DxC;;WAEG;QACH,OAAO,CAAC,MAAM,CAAC,aAAa;QAU5B;;WAEG;eACW,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;QAoCzD;;;;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?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});
1
+ sap.ui.define(["../constants/MetaUIConstants","../utils/Logger"],function(e,t){"use strict";const r=e["SCHEMA_TYPE"];const i=t["Logger"];class o{canHandle(e){return true}build(e,t){return o.normalize(e)}static normalize(e,t){let o=e;if(typeof o===r.STRING){if(!o.trim()){o=null}else{try{o=JSON.parse(o)}catch(e){const t="Failed to parse schema string: "+e.message;i.error("[MetaUI SchemaNormalizer]",t);throw new Error(t)}}}if(!o||typeof o!=="object"||Array.isArray(o)){return this.inferSchemaFromData(t)}try{const e={title:o.title,type:o.type||(o.items?"array":"object"),layoutStrategy:o.layoutStrategy,uiLayout:o.uiLayout?JSON.parse(JSON.stringify(o.uiLayout)):undefined,additionalProperties:o.additionalProperties,uiPolicies:o.uiPolicies?JSON.parse(JSON.stringify(o.uiPolicies)):undefined};let r=o.properties||{};if(o.additionalProperties===true&&t){const e=this.inferSchemaFromData(t);if(e.type==="object"&&e.properties){r=this.deepMergeProperties(e.properties,r)}else if(e.type==="array"&&e.items&&e.items.properties){}}if(e.type==="object"){const t=Array.isArray(o.required)?o.required:[];e.properties=this.normalizeProperties(r,t)}else if(e.type==="array"){e.items=this.normalizePropertyMetadata(o.items||{type:"object",properties:{}},"items",false)}return e}catch(e){const t="Critical error normalizing schema object: "+e.message;i.error("[MetaUI SchemaNormalizer]",t);throw new Error(t)}}static deepMergeProperties(e,t){const r={...e};for(const e of Object.keys(t)){const i=t[e];const o=r[e];if(o&&typeof o==="object"&&!Array.isArray(o)&&i&&typeof i==="object"&&!Array.isArray(i)){r[e]=this.deepMergeProperties(o,i)}else{r[e]=i}}return r}static normalizeProperties(e,t=[]){const r={};for(const i of Object.keys(e)){const o=t.includes(i);r[i]=this.normalizePropertyMetadata(e[i],i,o)}return r}static normalizePropertyMetadata(e,t,r=false){const i=e||{};const o=i.ui||{};const a={type:i.type||"string",$ref:i.$ref,ui:{label:o.label||this.generateLabel(t),isKey:!!o.isKey,readOnly:!!o.readOnly,widget:o.widget||(i.valueHelp||i.enum?"select":undefined),visibleOn:i.ui?.visibleOn,enabledOn:i.ui?.enabledOn,format:i.ui?.format,validators:i.ui?.validators,formatter:i.ui?.formatter,args:i.ui?.args,rows:i.ui?.rows,fullWidth:i.ui?.fullWidth,dialogButtonText:i.ui?.dialogButtonText,controlProps:i.ui?.controlProps},required:r||!!i.required,maxLength:i.maxLength,minLength:i.minLength,minimum:i.minimum,maximum:i.maximum,pattern:i.pattern,precision:i.precision,scale:i.scale,multipleOf:i.multipleOf,valueHelp:i.valueHelp,enum:i.enum};if(a.type==="object"&&i.properties){const e=Array.isArray(i.required)?i.required:[];a.properties=this.normalizeProperties(i.properties,e);a.uiLayout=i.uiLayout}else if(a.type==="array"){if(i.properties&&!i.items){i.items={type:"object",properties:i.properties};delete i.properties}if(i.items){a.items=this.normalizePropertyMetadata(i.items,"items",false)}a.uiLayout=i.uiLayout}return a}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";let r={};const i=Math.min(e.length,50);for(let t=0;t<i;t++){const i=this.inferPropertiesFromObject(e[t]);r=this.deepMergeProperties(r,i)}t.items={type:"object",layoutStrategy:"compact",properties:r}}}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 i of Object.keys(e)){const o=e[i];if(o===null||o===undefined)continue;let a=r.STRING;let s;let n;if(typeof o==="number")a="number";else if(typeof o==="boolean")a="boolean";else if(Array.isArray(o)){a="array";if(o.length>0&&typeof o[0]!=="object"){s={type:typeof o[0]}}else{s={type:"object",properties:o.length>0?this.inferPropertiesFromObject(o[0]):{}}}}else if(typeof o==="object"){a="object";n=this.inferPropertiesFromObject(o)}t[i]={type:a,items:s,properties:n,ui:{label:this.generateLabel(i),isKey:false,readOnly:false,widget:a==="array"&&s?.type!=="object"?"multiInput":undefined}}}return t}static resolveScope(e,t){if(!t||!t.startsWith("#/properties/")){return{meta:undefined,bindingPath:t||"",propKey:t||""}}const r=t.replace("#/properties/","").split("/properties/");let o=e.properties;let a;i.debug("[MetaUI SchemaNormalizer]",`Resolving scope '${t}' with segments: ${JSON.stringify(r)}`,"SchemaNormalizer");i.debug("[MetaUI SchemaNormalizer]",`Root schema keys: ${Object.keys(e.properties||{})}`,"SchemaNormalizer");for(let e=0;e<r.length;e++){const t=r[e];if(!o){i.debug("[MetaUI SchemaNormalizer]",`current is undefined at segment '${t}'`,"SchemaNormalizer");a=undefined;break}a=o[t];i.debug("[MetaUI SchemaNormalizer]",`Segment '${t}' resolved to meta: ${!!a}. Available keys in current: ${Object.keys(o)}`,"SchemaNormalizer");if(e<r.length-1){o=a?.properties}}const s=r.join("/");const n=t.replace("#/properties/","");return{meta:a,bindingPath:s,propKey:n}}}var a={__esModule:true};a.SchemaNormalizer=o;return a});
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","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":[]}
1
+ {"version":3,"file":"SchemaNormalizer.js","names":["SCHEMA_TYPE","___constants_MetaUIConstants","Logger","___utils_Logger","SchemaNormalizer","canHandle","rawSchema","build","targetDefinition","normalize","data","schemaObj","STRING","trim","JSON","parse","e","msg","message","error","Error","Array","isArray","this","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","stringify","undefined","additionalProperties","uiPolicies","targetProperties","properties","inferred","deepMergeProperties","requiredKeys","required","normalizeProperties","normalizePropertyMetadata","base","override","merged","key","Object","keys","overrideVal","baseVal","normalizedProps","isRequired","includes","rawProp","keyName","prop","ui","$ref","label","generateLabel","isKey","readOnly","widget","valueHelp","enum","visibleOn","enabledOn","format","validators","formatter","args","rows","fullWidth","dialogButtonText","controlProps","maxLength","minLength","minimum","maximum","pattern","precision","scale","multipleOf","name","spaced","replace","split","filter","w","length","map","word","charAt","toUpperCase","slice","toLowerCase","join","schema","mergedProperties","limit","Math","min","i","inferPropertiesFromObject","obj","val","nestedProps","resolveScope","scope","startsWith","meta","bindingPath","propKey","pathSegments","current","debug","segment","__exports","__esModule"],"sources":["SchemaNormalizer.ts"],"sourcesContent":["/**\n * @file SchemaNormalizer.ts\n * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.\n */\n\nimport { ISchema, IPropertyMetadata, FieldType } from \"../interfaces/ISchema\";\nimport { SCHEMA_TYPE } from \"../constants/MetaUIConstants\";\nimport { ISchemaBuilderPlugin } from \"../interfaces/ISchemaBuilderPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\nexport class SchemaNormalizer implements ISchemaBuilderPlugin {\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public canHandle(rawSchema: unknown): boolean {\n // Fallback for native ISchemas or data inference.\n // It always returns true because it is the final fallback builder in the registry.\n return true;\n }\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public build(rawSchema: unknown, targetDefinition?: string): ISchema {\n return SchemaNormalizer.normalize(rawSchema);\n }\n\n /**\n * Validates that the provided raw payload conforms to the required ISchema structures.\n */\n public static normalize(rawSchema?: unknown, data?: unknown): ISchema {\n let schemaObj = rawSchema;\n\n if (typeof schemaObj === SCHEMA_TYPE.STRING) {\n if (!schemaObj.trim()) {\n schemaObj = null;\n } else {\n try {\n schemaObj = JSON.parse(schemaObj);\n } catch (e) {\n const msg = \"Failed to parse schema string: \" + (e as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n }\n\n if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {\n return this.inferSchemaFromData(data);\n }\n\n try {\n // It is an object. Ensure it conforms to v2 structure.\n const normalized: ISchema = {\n title: schemaObj.title,\n type: schemaObj.type || (schemaObj.items ? \"array\" : \"object\"),\n layoutStrategy: schemaObj.layoutStrategy,\n uiLayout: schemaObj.uiLayout ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,\n additionalProperties: schemaObj.additionalProperties,\n uiPolicies: schemaObj.uiPolicies ? JSON.parse(JSON.stringify(schemaObj.uiPolicies)) : undefined\n };\n\n let targetProperties = schemaObj.properties || {};\n\n if (schemaObj.additionalProperties === true && data) {\n const inferred = this.inferSchemaFromData(data);\n if (inferred.type === \"object\" && inferred.properties) {\n targetProperties = this.deepMergeProperties(inferred.properties, targetProperties);\n } else if (inferred.type === \"array\" && inferred.items && inferred.items.properties) {\n // Array schema merging could be added here if we want full support.\n }\n }\n\n if (normalized.type === \"object\") {\n const requiredKeys = Array.isArray(schemaObj.required) ? schemaObj.required : [];\n normalized.properties = this.normalizeProperties(targetProperties, requiredKeys);\n } else if (normalized.type === \"array\") {\n // Future expansion: array deep merge\n normalized.items = this.normalizePropertyMetadata(schemaObj.items || { type: \"object\", properties: {} }, \"items\", false);\n }\n\n return normalized;\n } catch (error) {\n const msg = \"Critical error normalizing schema object: \" + (error as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively deep merges an inferred schema over a base schema.\n * @param base The base property dictionary.\n * @param override The overriding inferred dictionary.\n * @returns A new deeply merged property dictionary.\n */\n private static deepMergeProperties(base: Record<string, unknown>, override: Record<string, unknown>): Record<string, unknown> {\n const merged = { ...base };\n for (const key of Object.keys(override)) {\n const overrideVal = override[key];\n const baseVal = merged[key];\n\n if (baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal) &&\n overrideVal && typeof overrideVal === \"object\" && !Array.isArray(overrideVal)) {\n merged[key] = this.deepMergeProperties(baseVal, overrideVal);\n } else {\n merged[key] = overrideVal;\n }\n }\n return merged;\n }\n\n /**\n * Normalizes a collection of properties.\n * @param properties The raw properties map.\n * @param requiredKeys An optional array of keys that are required by the parent object.\n * @returns A map of strict IPropertyMetadata objects.\n */\n private static normalizeProperties(properties: Record<string, unknown>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {\n const normalizedProps: Record<string, IPropertyMetadata> = {};\n for (const key of Object.keys(properties)) {\n const isRequired = requiredKeys.includes(key);\n normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key, isRequired);\n }\n return normalizedProps;\n }\n\n /**\n * Normalizes a single property against the ISchema specification.\n * @param prop The raw property definition.\n * @param keyName The string key name for generating default labels.\n * @param isRequired Indicates if the parent object mandated this property as required.\n * @returns A strict IPropertyMetadata instance.\n */\n private static normalizePropertyMetadata(rawProp: unknown, keyName: string, isRequired: boolean = false): IPropertyMetadata {\n const prop = (rawProp || {}) as Record<string, unknown>;\n const ui = (prop.ui || {}) as Record<string, unknown>;\n \n const normalized: IPropertyMetadata = {\n type: (prop.type as FieldType) || \"string\",\n $ref: prop.$ref as string | undefined,\n ui: {\n label: ui.label as string || this.generateLabel(keyName),\n isKey: !!ui.isKey,\n readOnly: !!ui.readOnly,\n widget: ui.widget as string || (prop.valueHelp || prop.enum ? \"select\" : undefined),\n visibleOn: prop.ui?.visibleOn,\n enabledOn: prop.ui?.enabledOn,\n format: prop.ui?.format,\n validators: prop.ui?.validators,\n formatter: prop.ui?.formatter,\n args: prop.ui?.args,\n rows: prop.ui?.rows,\n fullWidth: prop.ui?.fullWidth,\n dialogButtonText: prop.ui?.dialogButtonText,\n controlProps: prop.ui?.controlProps\n },\n required: isRequired || !!prop.required,\n maxLength: prop.maxLength as number,\n minLength: prop.minLength as number,\n minimum: prop.minimum,\n maximum: prop.maximum,\n pattern: prop.pattern,\n precision: prop.precision,\n scale: prop.scale,\n multipleOf: prop.multipleOf as number,\n valueHelp: prop.valueHelp,\n enum: prop.enum\n };\n\n if (normalized.type === \"object\" && prop.properties) {\n const requiredKeys = Array.isArray(prop.required) ? prop.required : [];\n normalized.properties = this.normalizeProperties(prop.properties as Record<string, unknown>, requiredKeys);\n normalized.uiLayout = prop.uiLayout;\n } else if (normalized.type === \"array\") {\n // Auto-correct arrays that were mistakenly flattened with 'properties' instead of 'items.properties'\n if (prop.properties && !prop.items) {\n prop.items = {\n type: \"object\",\n properties: prop.properties\n };\n delete prop.properties;\n }\n\n if (prop.items) {\n normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, \"items\", false);\n }\n normalized.uiLayout = prop.uiLayout;\n }\n\n return normalized;\n }\n\n /**\n * Generates a Title Case label from camelCase or snake_case technical names.\n */\n private static generateLabel(name: string): string {\n if (!name) return \"\";\n let spaced = name.replace(/([A-Z])/g, \" $1\").replace(/_/g, \" \");\n return spaced.split(' ')\n .filter(w => w.length > 0)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n .trim();\n }\n\n /**\n * Infers a v2 ISchema structure dynamically from a plain data payload.\n */\n public static inferSchemaFromData(data: unknown): ISchema {\n const schema: ISchema = { type: \"object\", properties: {}, layoutStrategy: \"compact\", title: \"\" };\n\n if (!data || typeof data !== \"object\") {\n return schema;\n }\n\n if (Array.isArray(data)) {\n schema.type = \"array\";\n if (data.length > 0 && typeof data[0] !== \"object\") {\n schema.layoutStrategy = \"compact\";\n schema.items = { type: typeof data[0] as FieldType };\n } else {\n schema.layoutStrategy = \"table\";\n \n let mergedProperties: Record<string, unknown> = {};\n const limit = Math.min(data.length, 50);\n for (let i = 0; i < limit; i++) {\n const inferred = this.inferPropertiesFromObject(data[i] as Record<string, any>);\n mergedProperties = this.deepMergeProperties(mergedProperties, inferred as unknown as Record<string, unknown>);\n }\n\n schema.items = {\n type: \"object\",\n layoutStrategy: \"compact\",\n properties: mergedProperties as Record<string, IPropertyMetadata>\n } as any;\n }\n } else {\n schema.type = \"object\";\n schema.properties = this.inferPropertiesFromObject(data);\n }\n\n return schema;\n }\n\n /**\n * Infers field metadata recursively from a raw data object.\n * @param obj The raw JavaScript object.\n * @returns A dictionary of inferred IPropertyMetadata.\n */\n private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const properties: Record<string, IPropertyMetadata> = {};\n if (!obj || typeof obj !== \"object\") return properties;\n\n for (const key of Object.keys(obj)) {\n const val = obj[key];\n if (val === null || val === undefined) continue;\n\n let type: FieldType = SCHEMA_TYPE.STRING;\n let items: IPropertyMetadata | undefined;\n let nestedProps: Record<string, IPropertyMetadata> | undefined;\n\n if (typeof val === \"number\") type = \"number\";\n else if (typeof val === \"boolean\") type = \"boolean\";\n else if (Array.isArray(val)) {\n type = \"array\";\n if (val.length > 0 && typeof val[0] !== \"object\") {\n items = {\n type: typeof val[0] as FieldType\n };\n } else {\n items = {\n type: \"object\",\n properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, unknown>) : {}\n };\n }\n } else if (typeof val === \"object\") {\n type = \"object\";\n nestedProps = this.inferPropertiesFromObject(val as Record<string, unknown>);\n }\n\n properties[key] = {\n type,\n items,\n properties: nestedProps,\n ui: {\n label: this.generateLabel(key),\n isKey: false,\n readOnly: false,\n widget: type === \"array\" && items?.type !== \"object\" ? \"multiInput\" : undefined\n }\n };\n }\n\n return properties;\n }\n\n /**\n * Resolves a JSON Schema scope (e.g. '#/properties/header/properties/id')\n * against the ISchema, returning the PropertyMetadata and the UI5 binding path.\n */\n public static resolveScope(schema: ISchema, scope: string): { meta: IPropertyMetadata | undefined, bindingPath: string, propKey: string } {\n if (!scope || !scope.startsWith(\"#/properties/\")) {\n return { meta: undefined, bindingPath: scope || \"\", propKey: scope || \"\" };\n }\n \n const pathSegments = scope.replace(\"#/properties/\", \"\").split(\"/properties/\");\n let current: Record<string, IPropertyMetadata> | undefined = schema.properties;\n let meta: IPropertyMetadata | undefined;\n \n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Resolving scope '${scope}' with segments: ${JSON.stringify(pathSegments)}`, \"SchemaNormalizer\");\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Root schema keys: ${Object.keys(schema.properties || {})}`, \"SchemaNormalizer\");\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n if (!current) {\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `current is undefined at segment '${segment}'`, \"SchemaNormalizer\");\n meta = undefined;\n break;\n }\n meta = current[segment];\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Segment '${segment}' resolved to meta: ${!!meta}. Available keys in current: ${Object.keys(current)}`, \"SchemaNormalizer\");\n if (i < pathSegments.length - 1) {\n current = meta?.properties;\n }\n }\n \n const bindingPath = pathSegments.join(\"/\");\n const propKey = scope.replace(\"#/properties/\", \"\"); // The original raw string for logging\n \n return {\n meta,\n bindingPath,\n propKey\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import { ISchema, IPropertyMetadata, FieldType } from "../interfaces/ISchema";
7
+ import { SCHEMA_TYPE } from "../constants/MetaUIConstants";
7
8
  import { ISchemaBuilderPlugin } from "../interfaces/ISchemaBuilderPlugin";
8
9
  import { Logger } from "../utils/Logger";
9
10
 
@@ -12,7 +13,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
12
13
  /**
13
14
  * ISchemaBuilderPlugin Contract
14
15
  */
15
- public canHandle(rawSchema: any): boolean {
16
+ public canHandle(rawSchema: unknown): boolean {
16
17
  // Fallback for native ISchemas or data inference.
17
18
  // It always returns true because it is the final fallback builder in the registry.
18
19
  return true;
@@ -21,17 +22,17 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
21
22
  /**
22
23
  * ISchemaBuilderPlugin Contract
23
24
  */
24
- public build(rawSchema: any, targetDefinition?: string): ISchema {
25
+ public build(rawSchema: unknown, targetDefinition?: string): ISchema {
25
26
  return SchemaNormalizer.normalize(rawSchema);
26
27
  }
27
28
 
28
29
  /**
29
30
  * Validates that the provided raw payload conforms to the required ISchema structures.
30
31
  */
31
- public static normalize(rawSchema?: any, data?: any): ISchema {
32
+ public static normalize(rawSchema?: unknown, data?: unknown): ISchema {
32
33
  let schemaObj = rawSchema;
33
34
 
34
- if (typeof schemaObj === "string") {
35
+ if (typeof schemaObj === SCHEMA_TYPE.STRING) {
35
36
  if (!schemaObj.trim()) {
36
37
  schemaObj = null;
37
38
  } else {
@@ -56,7 +57,8 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
56
57
  type: schemaObj.type || (schemaObj.items ? "array" : "object"),
57
58
  layoutStrategy: schemaObj.layoutStrategy,
58
59
  uiLayout: schemaObj.uiLayout ? JSON.parse(JSON.stringify(schemaObj.uiLayout)) : undefined,
59
- additionalProperties: schemaObj.additionalProperties
60
+ additionalProperties: schemaObj.additionalProperties,
61
+ uiPolicies: schemaObj.uiPolicies ? JSON.parse(JSON.stringify(schemaObj.uiPolicies)) : undefined
60
62
  };
61
63
 
62
64
  let targetProperties = schemaObj.properties || {};
@@ -114,7 +116,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
114
116
  * @param requiredKeys An optional array of keys that are required by the parent object.
115
117
  * @returns A map of strict IPropertyMetadata objects.
116
118
  */
117
- private static normalizeProperties(properties: Record<string, any>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {
119
+ private static normalizeProperties(properties: Record<string, unknown>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {
118
120
  const normalizedProps: Record<string, IPropertyMetadata> = {};
119
121
  for (const key of Object.keys(properties)) {
120
122
  const isRequired = requiredKeys.includes(key);
@@ -130,15 +132,18 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
130
132
  * @param isRequired Indicates if the parent object mandated this property as required.
131
133
  * @returns A strict IPropertyMetadata instance.
132
134
  */
133
- private static normalizePropertyMetadata(prop: any, keyName: string, isRequired: boolean = false): IPropertyMetadata {
135
+ private static normalizePropertyMetadata(rawProp: unknown, keyName: string, isRequired: boolean = false): IPropertyMetadata {
136
+ const prop = (rawProp || {}) as Record<string, unknown>;
137
+ const ui = (prop.ui || {}) as Record<string, unknown>;
138
+
134
139
  const normalized: IPropertyMetadata = {
135
140
  type: (prop.type as FieldType) || "string",
136
141
  $ref: prop.$ref as string | undefined,
137
142
  ui: {
138
- label: (prop.ui as any)?.label || this.generateLabel(keyName),
139
- isKey: !!(prop.ui as any)?.isKey,
140
- readOnly: !!(prop.ui as any)?.readOnly,
141
- widget: (prop.ui as any)?.widget || (prop.valueHelp || prop.enum ? "select" : undefined),
143
+ label: ui.label as string || this.generateLabel(keyName),
144
+ isKey: !!ui.isKey,
145
+ readOnly: !!ui.readOnly,
146
+ widget: ui.widget as string || (prop.valueHelp || prop.enum ? "select" : undefined),
142
147
  visibleOn: prop.ui?.visibleOn,
143
148
  enabledOn: prop.ui?.enabledOn,
144
149
  format: prop.ui?.format,
@@ -147,7 +152,8 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
147
152
  args: prop.ui?.args,
148
153
  rows: prop.ui?.rows,
149
154
  fullWidth: prop.ui?.fullWidth,
150
- dialogButtonText: prop.ui?.dialogButtonText
155
+ dialogButtonText: prop.ui?.dialogButtonText,
156
+ controlProps: prop.ui?.controlProps
151
157
  },
152
158
  required: isRequired || !!prop.required,
153
159
  maxLength: prop.maxLength as number,
@@ -166,8 +172,19 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
166
172
  const requiredKeys = Array.isArray(prop.required) ? prop.required : [];
167
173
  normalized.properties = this.normalizeProperties(prop.properties as Record<string, unknown>, requiredKeys);
168
174
  normalized.uiLayout = prop.uiLayout;
169
- } else if (normalized.type === "array" && prop.items) {
170
- normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, "items", false);
175
+ } else if (normalized.type === "array") {
176
+ // Auto-correct arrays that were mistakenly flattened with 'properties' instead of 'items.properties'
177
+ if (prop.properties && !prop.items) {
178
+ prop.items = {
179
+ type: "object",
180
+ properties: prop.properties
181
+ };
182
+ delete prop.properties;
183
+ }
184
+
185
+ if (prop.items) {
186
+ normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, "items", false);
187
+ }
171
188
  normalized.uiLayout = prop.uiLayout;
172
189
  }
173
190
 
@@ -190,7 +207,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
190
207
  /**
191
208
  * Infers a v2 ISchema structure dynamically from a plain data payload.
192
209
  */
193
- public static inferSchemaFromData(data: any): ISchema {
210
+ public static inferSchemaFromData(data: unknown): ISchema {
194
211
  const schema: ISchema = { type: "object", properties: {}, layoutStrategy: "compact", title: "" };
195
212
 
196
213
  if (!data || typeof data !== "object") {
@@ -204,10 +221,18 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
204
221
  schema.items = { type: typeof data[0] as FieldType };
205
222
  } else {
206
223
  schema.layoutStrategy = "table";
224
+
225
+ let mergedProperties: Record<string, unknown> = {};
226
+ const limit = Math.min(data.length, 50);
227
+ for (let i = 0; i < limit; i++) {
228
+ const inferred = this.inferPropertiesFromObject(data[i] as Record<string, any>);
229
+ mergedProperties = this.deepMergeProperties(mergedProperties, inferred as unknown as Record<string, unknown>);
230
+ }
231
+
207
232
  schema.items = {
208
233
  type: "object",
209
234
  layoutStrategy: "compact",
210
- properties: data.length > 0 ? this.inferPropertiesFromObject(data[0] as Record<string, any>) : {}
235
+ properties: mergedProperties as Record<string, IPropertyMetadata>
211
236
  } as any;
212
237
  }
213
238
  } else {
@@ -223,7 +248,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
223
248
  * @param obj The raw JavaScript object.
224
249
  * @returns A dictionary of inferred IPropertyMetadata.
225
250
  */
226
- private static inferPropertiesFromObject(obj: Record<string, any>): Record<string, IPropertyMetadata> {
251
+ private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {
227
252
  const properties: Record<string, IPropertyMetadata> = {};
228
253
  if (!obj || typeof obj !== "object") return properties;
229
254
 
@@ -231,7 +256,7 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
231
256
  const val = obj[key];
232
257
  if (val === null || val === undefined) continue;
233
258
 
234
- let type: FieldType = "string";
259
+ let type: FieldType = SCHEMA_TYPE.STRING;
235
260
  let items: IPropertyMetadata | undefined;
236
261
  let nestedProps: Record<string, IPropertyMetadata> | undefined;
237
262
 
@@ -246,12 +271,12 @@ export class SchemaNormalizer implements ISchemaBuilderPlugin {
246
271
  } else {
247
272
  items = {
248
273
  type: "object",
249
- properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, any>) : {}
274
+ properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, unknown>) : {}
250
275
  };
251
276
  }
252
277
  } else if (typeof val === "object") {
253
278
  type = "object";
254
- nestedProps = this.inferPropertiesFromObject(val);
279
+ nestedProps = this.inferPropertiesFromObject(val as Record<string, unknown>);
255
280
  }
256
281
 
257
282
  properties[key] = {