@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.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js +22 -20
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.ts +24 -16
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js +62 -2
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts +54 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.ts +59 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +43 -47
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +61 -66
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +120 -63
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +16 -4
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +126 -65
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +41 -38
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +6 -4
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +47 -39
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +41 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +6 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +47 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +7 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +4 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +7 -2
- package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +212 -34
- package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +21 -3
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +214 -35
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js +3 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.ts +3 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js +5 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts +6 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +8 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +7 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +127 -50
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +13 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +140 -57
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js +229 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts +68 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.ts +227 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +34 -13
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +45 -20
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +15 -3
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +15 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +82 -16
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +16 -0
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +89 -17
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +12 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +13 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts +50 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.ts +49 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +21 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +24 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +26 -31
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +22 -25
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +40 -6
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +37 -5
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js +69 -56
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js +3 -2
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +4 -3
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js +2 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.ts +4 -3
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js +12 -8
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +16 -12
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js +20 -12
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +25 -17
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js +18 -11
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +23 -16
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +24 -100
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +10 -74
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +54 -117
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +7 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +6 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +129 -9
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +45 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +143 -13
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +35 -14
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +38 -14
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +69 -20
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +2 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +77 -21
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts +6 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +8 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +9 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +6 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +9 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +35 -20
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +39 -22
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +5 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +4 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +28 -12
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts +5 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +29 -10
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +13 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +14 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +58 -56
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +2 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +66 -55
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +110 -109
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js +2 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +66 -64
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +29 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +145 -118
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +106 -105
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js +41 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js +41 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js +52 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts +30 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.ts +45 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js +52 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts +30 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.ts +45 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js +41 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js +40 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js +40 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js +40 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js +40 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js +33 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts +14 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +0 -75
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +0 -47
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +0 -2
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +0 -1
- 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 ===
|
|
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(
|
|
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:
|
|
133
|
-
isKey: !!
|
|
134
|
-
readOnly: !!
|
|
135
|
-
widget:
|
|
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"
|
|
163
|
-
|
|
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:
|
|
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 =
|
|
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":";;;EAAA;AACA;AACA;AACA;EAHA,MAOSA,MAAM,GAAAC,eAAA;EAER,MAAMC,gBAAgB,CAAiC;IAE1D;AACJ;AACA;IACWC,SAASA,CAACC,SAAc,EAAW;MACtC;MACA;MACA,OAAO,IAAI;IACf;;IAEA;AACJ;AACA;IACWC,KAAKA,CAACD,SAAc,EAAEE,gBAAyB,EAAW;MAC7D,OAAOJ,gBAAgB,CAACK,SAAS,CAACH,SAAS,CAAC;IAChD;;IAEA;AACJ;AACA;IACI,OAAcG,SAASA,CAACH,SAAe,EAAEI,IAAU,EAAW;MAC1D,IAAIC,SAAS,GAAGL,SAAS;MAEzB,IAAI,OAAOK,SAAS,KAAK,QAAQ,EAAE;QAC/B,IAAI,CAACA,SAAS,CAACC,IAAI,CAAC,CAAC,EAAE;UACnBD,SAAS,GAAG,IAAI;QACpB,CAAC,MAAM;UACH,IAAI;YACAA,SAAS,GAAGE,IAAI,CAACC,KAAK,CAACH,SAAS,CAAC;UACrC,CAAC,CAAC,OAAOI,CAAC,EAAE;YACR,MAAMC,GAAG,GAAG,iCAAiC,GAAID,CAAC,CAAWE,OAAO;YACpEf,MAAM,CAACgB,KAAK,CAAC,2BAA2B,EAAEF,GAAG,CAAC;YAC9C,MAAM,IAAIG,KAAK,CAACH,GAAG,CAAC;UACxB;QACJ;MACJ;MAEA,IAAI,CAACL,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,IAAIS,KAAK,CAACC,OAAO,CAACV,SAAS,CAAC,EAAE;QACzE,OAAO,IAAI,CAACW,mBAAmB,CAACZ,IAAI,CAAC;MACzC;MAEA,IAAI;QACA;QACA,MAAMa,UAAmB,GAAG;UACxBC,KAAK,EAAEb,SAAS,CAACa,KAAK;UACtBC,IAAI,EAAEd,SAAS,CAACc,IAAI,KAAKd,SAAS,CAACe,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;UAC9DC,cAAc,EAAEhB,SAAS,CAACgB,cAAc;UACxCC,QAAQ,EAAEjB,SAAS,CAACiB,QAAQ,GAAGf,IAAI,CAACC,KAAK,CAACD,IAAI,CAACgB,SAAS,CAAClB,SAAS,CAACiB,QAAQ,CAAC,CAAC,GAAGE,SAAS;UACzFC,oBAAoB,EAAEpB,SAAS,CAACoB;QACpC,CAAC;QAED,IAAIC,gBAAgB,GAAGrB,SAAS,CAACsB,UAAU,IAAI,CAAC,CAAC;QAEjD,IAAItB,SAAS,CAACoB,oBAAoB,KAAK,IAAI,IAAIrB,IAAI,EAAE;UACjD,MAAMwB,QAAQ,GAAG,IAAI,CAACZ,mBAAmB,CAACZ,IAAI,CAAC;UAC/C,IAAIwB,QAAQ,CAACT,IAAI,KAAK,QAAQ,IAAIS,QAAQ,CAACD,UAAU,EAAE;YACnDD,gBAAgB,GAAG,IAAI,CAACG,mBAAmB,CAACD,QAAQ,CAACD,UAAU,EAAED,gBAAgB,CAAC;UACtF,CAAC,MAAM,IAAIE,QAAQ,CAACT,IAAI,KAAK,OAAO,IAAIS,QAAQ,CAACR,KAAK,IAAIQ,QAAQ,CAACR,KAAK,CAACO,UAAU,EAAE;YACjF;UAAA;QAER;QAEA,IAAIV,UAAU,CAACE,IAAI,KAAK,QAAQ,EAAE;UAC9B,MAAMW,YAAY,GAAGhB,KAAK,CAACC,OAAO,CAACV,SAAS,CAAC0B,QAAQ,CAAC,GAAG1B,SAAS,CAAC0B,QAAQ,GAAG,EAAE;UAChFd,UAAU,CAACU,UAAU,GAAG,IAAI,CAACK,mBAAmB,CAACN,gBAAgB,EAAEI,YAAY,CAAC;QACpF,CAAC,MAAM,IAAIb,UAAU,CAACE,IAAI,KAAK,OAAO,EAAE;UACpC;UACAF,UAAU,CAACG,KAAK,GAAG,IAAI,CAACa,yBAAyB,CAAC5B,SAAS,CAACe,KAAK,IAAI;YAAED,IAAI,EAAE,QAAQ;YAAEQ,UAAU,EAAE,CAAC;UAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;QAC5H;QAEA,OAAOV,UAAU;MACrB,CAAC,CAAC,OAAOL,KAAK,EAAE;QACZ,MAAMF,GAAG,GAAG,4CAA4C,GAAIE,KAAK,CAAWD,OAAO;QACnFf,MAAM,CAACgB,KAAK,CAAC,2BAA2B,EAAEF,GAAG,CAAC;QAC9C,MAAM,IAAIG,KAAK,CAACH,GAAG,CAAC;MACxB;IACJ;;IAEA;AACJ;AACA;AACA;AACA;AACA;IACI,OAAemB,mBAAmBA,CAACK,IAA6B,EAAEC,QAAiC,EAA2B;MAC1H,MAAMC,MAAM,GAAG;QAAE,GAAGF;MAAK,CAAC;MAC1B,KAAK,MAAMG,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACJ,QAAQ,CAAC,EAAE;QACrC,MAAMK,WAAW,GAAGL,QAAQ,CAACE,GAAG,CAAC;QACjC,MAAMI,OAAO,GAAGL,MAAM,CAACC,GAAG,CAAC;QAE3B,IAAII,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,IAAI,CAAC3B,KAAK,CAACC,OAAO,CAAC0B,OAAO,CAAC,IACjED,WAAW,IAAI,OAAOA,WAAW,KAAK,QAAQ,IAAI,CAAC1B,KAAK,CAACC,OAAO,CAACyB,WAAW,CAAC,EAAE;UAC/EJ,MAAM,CAACC,GAAG,CAAC,GAAG,IAAI,CAACR,mBAAmB,CAACY,OAAO,EAAED,WAAW,CAAC;QAChE,CAAC,MAAM;UACHJ,MAAM,CAACC,GAAG,CAAC,GAAGG,WAAW;QAC7B;MACJ;MACA,OAAOJ,MAAM;IACjB;;IAEA;AACJ;AACA;AACA;AACA;AACA;IACI,OAAeJ,mBAAmBA,CAACL,UAA+B,EAAEG,YAAsB,GAAG,EAAE,EAAqC;MAChI,MAAMY,eAAkD,GAAG,CAAC,CAAC;MAC7D,KAAK,MAAML,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACZ,UAAU,CAAC,EAAE;QACvC,MAAMgB,UAAU,GAAGb,YAAY,CAACc,QAAQ,CAACP,GAAG,CAAC;QAC7CK,eAAe,CAACL,GAAG,CAAC,GAAG,IAAI,CAACJ,yBAAyB,CAACN,UAAU,CAACU,GAAG,CAAC,EAAEA,GAAG,EAAEM,UAAU,CAAC;MAC3F;MACA,OAAOD,eAAe;IAC1B;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,OAAeT,yBAAyBA,CAACY,IAAS,EAAEC,OAAe,EAAEH,UAAmB,GAAG,KAAK,EAAqB;MACjH,MAAM1B,UAA6B,GAAG;QAClCE,IAAI,EAAG0B,IAAI,CAAC1B,IAAI,IAAkB,QAAQ;QAC1C4B,IAAI,EAAEF,IAAI,CAACE,IAA0B;QACrCC,EAAE,EAAE;UACAC,KAAK,EAAGJ,IAAI,CAACG,EAAE,EAAUC,KAAK,IAAI,IAAI,CAACC,aAAa,CAACJ,OAAO,CAAC;UAC7DK,KAAK,EAAE,CAAC,CAAEN,IAAI,CAACG,EAAE,EAAUG,KAAK;UAChCC,QAAQ,EAAE,CAAC,CAAEP,IAAI,CAACG,EAAE,EAAUI,QAAQ;UACtCC,MAAM,EAAGR,IAAI,CAACG,EAAE,EAAUK,MAAM,KAAKR,IAAI,CAACS,SAAS,IAAIT,IAAI,CAACU,IAAI,GAAG,QAAQ,GAAG/B,SAAS,CAAC;UACxFgC,SAAS,EAAEX,IAAI,CAACG,EAAE,EAAEQ,SAAS;UAC7BC,SAAS,EAAEZ,IAAI,CAACG,EAAE,EAAES,SAAS;UAC7BC,MAAM,EAAEb,IAAI,CAACG,EAAE,EAAEU,MAAM;UACvBC,UAAU,EAAEd,IAAI,CAACG,EAAE,EAAEW,UAAU;UAC/BC,SAAS,EAAEf,IAAI,CAACG,EAAE,EAAEY,SAAS;UAC7BC,IAAI,EAAEhB,IAAI,CAACG,EAAE,EAAEa,IAAI;UACnBC,IAAI,EAAEjB,IAAI,CAACG,EAAE,EAAEc,IAAI;UACnBC,SAAS,EAAElB,IAAI,CAACG,EAAE,EAAEe,SAAS;UAC7BC,gBAAgB,EAAEnB,IAAI,CAACG,EAAE,EAAEgB;QAC/B,CAAC;QACDjC,QAAQ,EAAEY,UAAU,IAAI,CAAC,CAACE,IAAI,CAACd,QAAQ;QACvCkC,SAAS,EAAEpB,IAAI,CAACoB,SAAmB;QACnCC,SAAS,EAAErB,IAAI,CAACqB,SAAmB;QACnCC,OAAO,EAAEtB,IAAI,CAACsB,OAAO;QACrBC,OAAO,EAAEvB,IAAI,CAACuB,OAAO;QACrBC,OAAO,EAAExB,IAAI,CAACwB,OAAO;QACrBC,SAAS,EAAEzB,IAAI,CAACyB,SAAS;QACzBC,KAAK,EAAE1B,IAAI,CAAC0B,KAAK;QACjBC,UAAU,EAAE3B,IAAI,CAAC2B,UAAoB;QACrClB,SAAS,EAAET,IAAI,CAACS,SAAS;QACzBC,IAAI,EAAEV,IAAI,CAACU;MACf,CAAC;MAED,IAAItC,UAAU,CAACE,IAAI,KAAK,QAAQ,IAAI0B,IAAI,CAAClB,UAAU,EAAE;QACjD,MAAMG,YAAY,GAAGhB,KAAK,CAACC,OAAO,CAAC8B,IAAI,CAACd,QAAQ,CAAC,GAAGc,IAAI,CAACd,QAAQ,GAAG,EAAE;QACtEd,UAAU,CAACU,UAAU,GAAG,IAAI,CAACK,mBAAmB,CAACa,IAAI,CAAClB,UAAU,EAA6BG,YAAY,CAAC;QAC1Gb,UAAU,CAACK,QAAQ,GAAGuB,IAAI,CAACvB,QAAQ;MACvC,CAAC,MAAM,IAAIL,UAAU,CAACE,IAAI,KAAK,OAAO,IAAI0B,IAAI,CAACzB,KAAK,EAAE;QAClDH,UAAU,CAACG,KAAK,GAAG,IAAI,CAACa,yBAAyB,CAACY,IAAI,CAACzB,KAAK,EAA6B,OAAO,EAAE,KAAK,CAAC;QACxGH,UAAU,CAACK,QAAQ,GAAGuB,IAAI,CAACvB,QAAQ;MACvC;MAEA,OAAOL,UAAU;IACrB;;IAEA;AACJ;AACA;IACI,OAAeiC,aAAaA,CAACuB,IAAY,EAAU;MAC/C,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;MACpB,IAAIC,MAAM,GAAGD,IAAI,CAACE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;MAC/D,OAAOD,MAAM,CAACE,KAAK,CAAC,GAAG,CAAC,CACnBC,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACC,MAAM,GAAG,CAAC,CAAC,CACzBC,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,IAAI,CAACG,KAAK,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC,CACvEC,IAAI,CAAC,GAAG,CAAC,CACThF,IAAI,CAAC,CAAC;IACf;;IAEA;AACJ;AACA;IACI,OAAcU,mBAAmBA,CAACZ,IAAS,EAAW;MAClD,MAAMmF,MAAe,GAAG;QAAEpE,IAAI,EAAE,QAAQ;QAAEQ,UAAU,EAAE,CAAC,CAAC;QAAEN,cAAc,EAAE,SAAS;QAAEH,KAAK,EAAE;MAAG,CAAC;MAEhG,IAAI,CAACd,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;QACnC,OAAOmF,MAAM;MACjB;MAEA,IAAIzE,KAAK,CAACC,OAAO,CAACX,IAAI,CAAC,EAAE;QACrBmF,MAAM,CAACpE,IAAI,GAAG,OAAO;QACrB,IAAIf,IAAI,CAAC2E,MAAM,GAAG,CAAC,IAAI,OAAO3E,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;UAChDmF,MAAM,CAAClE,cAAc,GAAG,SAAS;UACjCkE,MAAM,CAACnE,KAAK,GAAG;YAAED,IAAI,EAAE,OAAOf,IAAI,CAAC,CAAC;UAAe,CAAC;QACxD,CAAC,MAAM;UACHmF,MAAM,CAAClE,cAAc,GAAG,OAAO;UAC/BkE,MAAM,CAACnE,KAAK,GAAG;YACXD,IAAI,EAAE,QAAQ;YACdE,cAAc,EAAE,SAAS;YACzBM,UAAU,EAAEvB,IAAI,CAAC2E,MAAM,GAAG,CAAC,GAAG,IAAI,CAACS,yBAAyB,CAACpF,IAAI,CAAC,CAAC,CAAwB,CAAC,GAAG,CAAC;UACpG,CAAQ;QACZ;MACJ,CAAC,MAAM;QACHmF,MAAM,CAACpE,IAAI,GAAG,QAAQ;QACtBoE,MAAM,CAAC5D,UAAU,GAAG,IAAI,CAAC6D,yBAAyB,CAACpF,IAAI,CAAC;MAC5D;MAEA,OAAOmF,MAAM;IACjB;;IAEA;AACJ;AACA;AACA;AACA;IACI,OAAeC,yBAAyBA,CAACC,GAAwB,EAAqC;MAClG,MAAM9D,UAA6C,GAAG,CAAC,CAAC;MACxD,IAAI,CAAC8D,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAO9D,UAAU;MAEtD,KAAK,MAAMU,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACkD,GAAG,CAAC,EAAE;QAChC,MAAMC,GAAG,GAAGD,GAAG,CAACpD,GAAG,CAAC;QACpB,IAAIqD,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAKlE,SAAS,EAAE;QAEvC,IAAIL,IAAe,GAAG,QAAQ;QAC9B,IAAIC,KAAoC;QACxC,IAAIuE,WAA0D;QAE9D,IAAI,OAAOD,GAAG,KAAK,QAAQ,EAAEvE,IAAI,GAAG,QAAQ,CAAC,KACxC,IAAI,OAAOuE,GAAG,KAAK,SAAS,EAAEvE,IAAI,GAAG,SAAS,CAAC,KAC/C,IAAIL,KAAK,CAACC,OAAO,CAAC2E,GAAG,CAAC,EAAE;UACzBvE,IAAI,GAAG,OAAO;UACd,IAAIuE,GAAG,CAACX,MAAM,GAAG,CAAC,IAAI,OAAOW,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YAC9CtE,KAAK,GAAG;cACJD,IAAI,EAAE,OAAOuE,GAAG,CAAC,CAAC;YACtB,CAAC;UACL,CAAC,MAAM;YACHtE,KAAK,GAAG;cACJD,IAAI,EAAE,QAAQ;cACdQ,UAAU,EAAE+D,GAAG,CAACX,MAAM,GAAG,CAAC,GAAG,IAAI,CAACS,yBAAyB,CAACE,GAAG,CAAC,CAAC,CAAwB,CAAC,GAAG,CAAC;YAClG,CAAC;UACL;QACJ,CAAC,MAAM,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;UAChCvE,IAAI,GAAG,QAAQ;UACfwE,WAAW,GAAG,IAAI,CAACH,yBAAyB,CAACE,GAAG,CAAC;QACrD;QAEA/D,UAAU,CAACU,GAAG,CAAC,GAAG;UACdlB,IAAI;UACJC,KAAK;UACLO,UAAU,EAAEgE,WAAW;UACvB3C,EAAE,EAAE;YACAC,KAAK,EAAE,IAAI,CAACC,aAAa,CAACb,GAAG,CAAC;YAC9Bc,KAAK,EAAE,KAAK;YACZC,QAAQ,EAAE,KAAK;YACfC,MAAM,EAAElC,IAAI,KAAK,OAAO,IAAIC,KAAK,EAAED,IAAI,KAAK,QAAQ,GAAG,YAAY,GAAGK;UAC1E;QACJ,CAAC;MACL;MAEA,OAAOG,UAAU;IACrB;;IAEA;AACJ;AACA;AACA;IACI,OAAciE,YAAYA,CAACL,MAAe,EAAEM,KAAa,EAAiF;MACtI,IAAI,CAACA,KAAK,IAAI,CAACA,KAAK,CAACC,UAAU,CAAC,eAAe,CAAC,EAAE;QAC9C,OAAO;UAAEC,IAAI,EAAEvE,SAAS;UAAEwE,WAAW,EAAEH,KAAK,IAAI,EAAE;UAAEI,OAAO,EAAEJ,KAAK,IAAI;QAAG,CAAC;MAC9E;MAEA,MAAMK,YAAY,GAAGL,KAAK,CAAClB,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAACC,KAAK,CAAC,cAAc,CAAC;MAC7E,IAAIuB,OAAsD,GAAGZ,MAAM,CAAC5D,UAAU;MAC9E,IAAIoE,IAAmC;MAEvCnG,MAAM,CAACwG,KAAK,CAAC,2BAA2B,EAAE,oBAAoBP,KAAK,oBAAoBtF,IAAI,CAACgB,SAAS,CAAC2E,YAAY,CAAC,EAAE,EAAE,kBAAkB,CAAC;MAC1ItG,MAAM,CAACwG,KAAK,CAAC,2BAA2B,EAAE,qBAAqB9D,MAAM,CAACC,IAAI,CAACgD,MAAM,CAAC5D,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,kBAAkB,CAAC;MAE1H,KAAK,IAAI0E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,YAAY,CAACnB,MAAM,EAAEsB,CAAC,EAAE,EAAE;QAC1C,MAAMC,OAAO,GAAGJ,YAAY,CAACG,CAAC,CAAC;QAC/B,IAAI,CAACF,OAAO,EAAE;UACVvG,MAAM,CAACwG,KAAK,CAAC,2BAA2B,EAAE,oCAAoCE,OAAO,GAAG,EAAE,kBAAkB,CAAC;UAC7GP,IAAI,GAAGvE,SAAS;UAChB;QACJ;QACAuE,IAAI,GAAGI,OAAO,CAACG,OAAO,CAAC;QACvB1G,MAAM,CAACwG,KAAK,CAAC,2BAA2B,EAAE,YAAYE,OAAO,uBAAuB,CAAC,CAACP,IAAI,gCAAgCzD,MAAM,CAACC,IAAI,CAAC4D,OAAO,CAAC,EAAE,EAAE,kBAAkB,CAAC;QACrK,IAAIE,CAAC,GAAGH,YAAY,CAACnB,MAAM,GAAG,CAAC,EAAE;UAC7BoB,OAAO,GAAGJ,IAAI,EAAEpE,UAAU;QAC9B;MACJ;MAEA,MAAMqE,WAAW,GAAGE,YAAY,CAACZ,IAAI,CAAC,GAAG,CAAC;MAC1C,MAAMW,OAAO,GAAGJ,KAAK,CAAClB,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;;MAEpD,OAAO;QACHoB,IAAI;QACJC,WAAW;QACXC;MACJ,CAAC;IACL;EACJ;EAAC,IAAAM,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAzG,gBAAA,GAAAA,gBAAA;EAAA,OAAAyG,SAAA;AAAA","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:
|
|
12
|
+
canHandle(rawSchema: unknown): boolean;
|
|
13
13
|
/**
|
|
14
14
|
* ISchemaBuilderPlugin Contract
|
|
15
15
|
*/
|
|
16
|
-
build(rawSchema:
|
|
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?:
|
|
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:
|
|
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;
|
|
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
|
|
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:
|
|
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:
|
|
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?:
|
|
32
|
+
public static normalize(rawSchema?: unknown, data?: unknown): ISchema {
|
|
32
33
|
let schemaObj = rawSchema;
|
|
33
34
|
|
|
34
|
-
if (typeof schemaObj ===
|
|
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,
|
|
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(
|
|
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:
|
|
139
|
-
isKey: !!
|
|
140
|
-
readOnly: !!
|
|
141
|
-
widget:
|
|
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"
|
|
170
|
-
|
|
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:
|
|
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:
|
|
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,
|
|
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 =
|
|
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,
|
|
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] = {
|