@siliconst/metaui 1.4.10 → 1.4.14
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 +4 -178
- package/package.json +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +95 -10
- 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 +27 -3
- 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 +96 -11
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +174 -18
- 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 +18 -9
- 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 +164 -18
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +1 -3
- 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.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 +1 -3
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +24 -6
- 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 +7 -1
- 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 +24 -6
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +56 -49
- 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 +9 -4
- 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 +67 -50
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +0 -2
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +0 -2
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +0 -3
- package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js +4 -6
- package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +34 -9
- 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 +16 -2
- 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 +36 -5
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +19 -2
- 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 +9 -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 +21 -7
- package/src/nz/co/siliconst/ui5/metaui/core/Registry-dbg.js +3 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Registry-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Registry.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Registry.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Registry.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Registry.ts +3 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry-dbg.js +47 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.d.ts +23 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.ts +45 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +71 -34
- 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 +13 -2
- 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 +74 -35
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +7 -6
- 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 +7 -6
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +40 -11
- 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 +6 -1
- 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 +39 -13
- 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 +13 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +15 -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 +8 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +10 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin-dbg.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.d.ts +23 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.ts +23 -0
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +6 -1
- 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 +6 -1
- package/src/nz/co/siliconst/ui5/metaui/library-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/library-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js +50 -41
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/library.d.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/library.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/library.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/library.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/library.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +2 -2
- 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.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +77 -1
- 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 +17 -0
- 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 +67 -7
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +5 -1
- 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.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 +5 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +142 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +39 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +144 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +2 -2
- 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.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +1 -1
- 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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +1 -1
- 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.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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/CurrencyFormatterPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/DateFormatterPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/PhoneFormatterPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/formatters/TextCaseFormatterPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/EmailValidatorPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/IbanValidatorPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/MinLengthValidatorPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/PatternValidatorPlugin.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin-dbg.js +3 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/RangeValidatorPlugin.ts +4 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin-dbg.js +3 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/validators/UrlValidatorPlugin.ts +4 -3
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder-dbg.js +226 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.d.ts +63 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.ts +233 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver-dbg.js +43 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.d.ts +15 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.ts +37 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper-dbg.js +37 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.d.ts +18 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper-dbg.js +84 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.d.ts +27 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.ts +80 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file SchemaBuilderRegistry.ts
|
|
3
|
+
* @description Singleton registry for Schema Builder plugins.
|
|
4
|
+
* Routes unknown JSON payloads to the appropriate parser plugin.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ISchemaBuilderPlugin } from "../interfaces/ISchemaBuilderPlugin";
|
|
8
|
+
import { SchemaNormalizer } from "./SchemaNormalizer";
|
|
9
|
+
import { SwaggerBuilder } from "../swagger/SwaggerBuilder";
|
|
10
|
+
import { Logger } from "../utils/Logger";
|
|
11
|
+
|
|
12
|
+
export class SchemaBuilderRegistry {
|
|
13
|
+
private static _plugins: ISchemaBuilderPlugin[] = [
|
|
14
|
+
new SwaggerBuilder(),
|
|
15
|
+
new SchemaNormalizer()
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Registers a new schema builder plugin into the engine.
|
|
20
|
+
* @param plugin An instance of ISchemaBuilderPlugin
|
|
21
|
+
*/
|
|
22
|
+
public static register(plugin: ISchemaBuilderPlugin): void {
|
|
23
|
+
this._plugins.push(plugin);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Finds the first registered plugin that claims it can handle the payload.
|
|
28
|
+
* @param rawSchema The raw JSON schema object to inspect.
|
|
29
|
+
* @returns The matching plugin instance, or null if none match.
|
|
30
|
+
*/
|
|
31
|
+
public static getBuilderFor(rawSchema: any): ISchemaBuilderPlugin | null {
|
|
32
|
+
if (!rawSchema || typeof rawSchema !== "object") {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
for (const plugin of this._plugins) {
|
|
37
|
+
if (plugin.canHandle(rawSchema)) {
|
|
38
|
+
return plugin;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
Logger.warn("[SchemaBuilderRegistry]", "No suitable Schema Builder plugin found for the provided payload.");
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -7,19 +7,39 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
|
7
7
|
*/
|
|
8
8
|
const Logger = ___utils_Logger["Logger"];
|
|
9
9
|
class SchemaNormalizer {
|
|
10
|
+
/**
|
|
11
|
+
* ISchemaBuilderPlugin Contract
|
|
12
|
+
*/
|
|
13
|
+
canHandle(rawSchema) {
|
|
14
|
+
// MetaUI native schemas almost always have properties, items, or a layoutStrategy
|
|
15
|
+
// This acts as a fallback for native schemas.
|
|
16
|
+
if (rawSchema.openapi || rawSchema.swagger) return false;
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* ISchemaBuilderPlugin Contract
|
|
22
|
+
*/
|
|
23
|
+
build(rawSchema) {
|
|
24
|
+
return SchemaNormalizer.normalize(rawSchema);
|
|
25
|
+
}
|
|
26
|
+
|
|
10
27
|
/**
|
|
11
28
|
* Validates that the provided raw payload conforms to the required ISchema structures.
|
|
12
29
|
*/
|
|
13
30
|
static normalize(rawSchema, data) {
|
|
14
31
|
let schemaObj = rawSchema;
|
|
15
32
|
if (typeof schemaObj === "string") {
|
|
16
|
-
|
|
17
|
-
schemaObj = JSON.parse(schemaObj);
|
|
18
|
-
} catch (e) {
|
|
19
|
-
const msg = e.message;
|
|
20
|
-
Logger.error("[MetaUI SchemaNormalizer] Failed to parse schema string.", msg);
|
|
21
|
-
Logger.showErrorPopup(`Failed to parse the provided JSON schema.\n\nDetails: ${msg}`);
|
|
33
|
+
if (!schemaObj.trim()) {
|
|
22
34
|
schemaObj = null;
|
|
35
|
+
} else {
|
|
36
|
+
try {
|
|
37
|
+
schemaObj = JSON.parse(schemaObj);
|
|
38
|
+
} catch (e) {
|
|
39
|
+
const msg = "Failed to parse schema string: " + e.message;
|
|
40
|
+
Logger.error("[MetaUI SchemaNormalizer]", msg);
|
|
41
|
+
throw new Error(msg);
|
|
42
|
+
}
|
|
23
43
|
}
|
|
24
44
|
}
|
|
25
45
|
if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {
|
|
@@ -44,24 +64,20 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
|
44
64
|
}
|
|
45
65
|
}
|
|
46
66
|
if (normalized.type === "object") {
|
|
47
|
-
|
|
67
|
+
const requiredKeys = Array.isArray(schemaObj.required) ? schemaObj.required : [];
|
|
68
|
+
normalized.properties = this.normalizeProperties(targetProperties, requiredKeys);
|
|
48
69
|
} else if (normalized.type === "array") {
|
|
49
70
|
// Future expansion: array deep merge
|
|
50
71
|
normalized.items = this.normalizePropertyMetadata(schemaObj.items || {
|
|
51
72
|
type: "object",
|
|
52
73
|
properties: {}
|
|
53
|
-
}, "items");
|
|
74
|
+
}, "items", false);
|
|
54
75
|
}
|
|
55
76
|
return normalized;
|
|
56
77
|
} catch (error) {
|
|
57
|
-
const msg = error.message;
|
|
58
|
-
Logger.error("[MetaUI SchemaNormalizer]
|
|
59
|
-
|
|
60
|
-
// Fallback to empty object to prevent hard crash downstream
|
|
61
|
-
return {
|
|
62
|
-
type: "object",
|
|
63
|
-
properties: {}
|
|
64
|
-
};
|
|
78
|
+
const msg = "Critical error normalizing schema object: " + error.message;
|
|
79
|
+
Logger.error("[MetaUI SchemaNormalizer]", msg);
|
|
80
|
+
throw new Error(msg);
|
|
65
81
|
}
|
|
66
82
|
}
|
|
67
83
|
|
|
@@ -90,12 +106,14 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
|
90
106
|
/**
|
|
91
107
|
* Normalizes a collection of properties.
|
|
92
108
|
* @param properties The raw properties map.
|
|
109
|
+
* @param requiredKeys An optional array of keys that are required by the parent object.
|
|
93
110
|
* @returns A map of strict IPropertyMetadata objects.
|
|
94
111
|
*/
|
|
95
|
-
static normalizeProperties(properties) {
|
|
112
|
+
static normalizeProperties(properties, requiredKeys = []) {
|
|
96
113
|
const normalizedProps = {};
|
|
97
114
|
for (const key of Object.keys(properties)) {
|
|
98
|
-
|
|
115
|
+
const isRequired = requiredKeys.includes(key);
|
|
116
|
+
normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key, isRequired);
|
|
99
117
|
}
|
|
100
118
|
return normalizedProps;
|
|
101
119
|
}
|
|
@@ -104,9 +122,10 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
|
104
122
|
* Normalizes a single property against the ISchema specification.
|
|
105
123
|
* @param prop The raw property definition.
|
|
106
124
|
* @param keyName The string key name for generating default labels.
|
|
125
|
+
* @param isRequired Indicates if the parent object mandated this property as required.
|
|
107
126
|
* @returns A strict IPropertyMetadata instance.
|
|
108
127
|
*/
|
|
109
|
-
static normalizePropertyMetadata(prop, keyName) {
|
|
128
|
+
static normalizePropertyMetadata(prop, keyName, isRequired = false) {
|
|
110
129
|
const normalized = {
|
|
111
130
|
type: prop.type || "string",
|
|
112
131
|
ui: {
|
|
@@ -121,23 +140,27 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
|
121
140
|
formatter: prop.ui?.formatter,
|
|
122
141
|
args: prop.ui?.args,
|
|
123
142
|
rows: prop.ui?.rows,
|
|
124
|
-
fullWidth: prop.ui?.fullWidth
|
|
143
|
+
fullWidth: prop.ui?.fullWidth,
|
|
144
|
+
dialogButtonText: prop.ui?.dialogButtonText
|
|
125
145
|
},
|
|
126
|
-
required: !!prop.required,
|
|
146
|
+
required: isRequired || !!prop.required,
|
|
127
147
|
maxLength: prop.maxLength,
|
|
148
|
+
minLength: prop.minLength,
|
|
128
149
|
minimum: prop.minimum,
|
|
129
150
|
maximum: prop.maximum,
|
|
130
151
|
pattern: prop.pattern,
|
|
131
152
|
precision: prop.precision,
|
|
132
153
|
scale: prop.scale,
|
|
154
|
+
multipleOf: prop.multipleOf,
|
|
133
155
|
valueHelp: prop.valueHelp,
|
|
134
156
|
enum: prop.enum
|
|
135
157
|
};
|
|
136
158
|
if (normalized.type === "object" && prop.properties) {
|
|
137
|
-
|
|
159
|
+
const requiredKeys = Array.isArray(prop.required) ? prop.required : [];
|
|
160
|
+
normalized.properties = this.normalizeProperties(prop.properties, requiredKeys);
|
|
138
161
|
normalized.uiLayout = prop.uiLayout;
|
|
139
162
|
} else if (normalized.type === "array" && prop.items) {
|
|
140
|
-
normalized.items = this.normalizePropertyMetadata(prop.items, "items");
|
|
163
|
+
normalized.items = this.normalizePropertyMetadata(prop.items, "items", false);
|
|
141
164
|
normalized.uiLayout = prop.uiLayout;
|
|
142
165
|
}
|
|
143
166
|
return normalized;
|
|
@@ -167,12 +190,19 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
|
167
190
|
}
|
|
168
191
|
if (Array.isArray(data)) {
|
|
169
192
|
schema.type = "array";
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
193
|
+
if (data.length > 0 && typeof data[0] !== "object") {
|
|
194
|
+
schema.layoutStrategy = "compact";
|
|
195
|
+
schema.items = {
|
|
196
|
+
type: typeof data[0]
|
|
197
|
+
};
|
|
198
|
+
} else {
|
|
199
|
+
schema.layoutStrategy = "table";
|
|
200
|
+
schema.items = {
|
|
201
|
+
type: "object",
|
|
202
|
+
layoutStrategy: "compact",
|
|
203
|
+
properties: data.length > 0 ? this.inferPropertiesFromObject(data[0]) : {}
|
|
204
|
+
};
|
|
205
|
+
}
|
|
176
206
|
} else {
|
|
177
207
|
schema.type = "object";
|
|
178
208
|
schema.properties = this.inferPropertiesFromObject(data);
|
|
@@ -196,10 +226,16 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
|
196
226
|
let nestedProps;
|
|
197
227
|
if (typeof val === "number") type = "number";else if (typeof val === "boolean") type = "boolean";else if (Array.isArray(val)) {
|
|
198
228
|
type = "array";
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
229
|
+
if (val.length > 0 && typeof val[0] !== "object") {
|
|
230
|
+
items = {
|
|
231
|
+
type: typeof val[0]
|
|
232
|
+
};
|
|
233
|
+
} else {
|
|
234
|
+
items = {
|
|
235
|
+
type: "object",
|
|
236
|
+
properties: val.length > 0 ? this.inferPropertiesFromObject(val[0]) : {}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
203
239
|
} else if (typeof val === "object") {
|
|
204
240
|
type = "object";
|
|
205
241
|
nestedProps = this.inferPropertiesFromObject(val);
|
|
@@ -211,7 +247,8 @@ sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
|
211
247
|
ui: {
|
|
212
248
|
label: this.generateLabel(key),
|
|
213
249
|
isKey: false,
|
|
214
|
-
readOnly: false
|
|
250
|
+
readOnly: false,
|
|
251
|
+
widget: type === "array" && items?.type !== "object" ? "multiInput" : undefined
|
|
215
252
|
}
|
|
216
253
|
};
|
|
217
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaNormalizer-dbg.js","names":["Logger","___utils_Logger","SchemaNormalizer","normalize","rawSchema","data","schemaObj","JSON","parse","e","msg","message","error","showErrorPopup","Array","isArray","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","additionalProperties","targetProperties","properties","inferred","deepMergeProperties","normalizeProperties","normalizePropertyMetadata","base","override","merged","key","Object","keys","overrideVal","baseVal","normalizedProps","prop","keyName","ui","label","generateLabel","isKey","readOnly","widget","valueHelp","enum","undefined","visibleOn","enabledOn","format","validators","formatter","args","rows","fullWidth","required","maxLength","minimum","maximum","pattern","precision","scale","name","spaced","replace","split","filter","w","length","map","word","charAt","toUpperCase","slice","toLowerCase","join","trim","schema","inferPropertiesFromObject","obj","val","nestedProps","resolveScope","scope","startsWith","meta","bindingPath","propKey","pathSegments","current","debug","stringify","i","segment","__exports","__esModule"],"sources":["SchemaNormalizer.ts"],"sourcesContent":["/**\n * @file SchemaNormalizer.ts\n * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.\n */\n\nimport { ISchema, IPropertyMetadata, FieldType } from \"../interfaces/ISchema\";\nimport { Logger } from \"../utils/Logger\";\n\nexport class SchemaNormalizer {\n\n /**\n * Validates that the provided raw payload conforms to the required ISchema structures.\n */\n public static normalize(rawSchema?: unknown, data?: unknown): ISchema {\n let schemaObj = rawSchema;\n\n if (typeof schemaObj === \"string\") {\n try {\n schemaObj = JSON.parse(schemaObj);\n } catch (e) {\n const msg = (e as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer] Failed to parse schema string.\", msg);\n Logger.showErrorPopup(`Failed to parse the provided JSON schema.\\n\\nDetails: ${msg}`);\n schemaObj = null;\n }\n }\n\n if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {\n return this.inferSchemaFromData(data);\n }\n\n try {\n // It is an object. Ensure it conforms to v2 structure.\n const normalized: ISchema = {\n title: schemaObj.title,\n type: schemaObj.type || (schemaObj.items ? \"array\" : \"object\"),\n layoutStrategy: schemaObj.layoutStrategy,\n uiLayout: schemaObj.uiLayout,\n additionalProperties: schemaObj.additionalProperties\n };\n\n let targetProperties = schemaObj.properties || {};\n\n if (schemaObj.additionalProperties === true && data) {\n const inferred = this.inferSchemaFromData(data);\n if (inferred.type === \"object\" && inferred.properties) {\n targetProperties = this.deepMergeProperties(inferred.properties, targetProperties);\n } else if (inferred.type === \"array\" && inferred.items && inferred.items.properties) {\n // Array schema merging could be added here if we want full support.\n }\n }\n\n if (normalized.type === \"object\") {\n normalized.properties = this.normalizeProperties(targetProperties);\n } else if (normalized.type === \"array\") {\n // Future expansion: array deep merge\n normalized.items = this.normalizePropertyMetadata(schemaObj.items || { type: \"object\", properties: {} }, \"items\");\n }\n\n return normalized;\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer] Critical error normalizing schema object.\", msg);\n Logger.showErrorPopup(`Schema Normalization failed.\\n\\nDetails: ${msg}`);\n // Fallback to empty object to prevent hard crash downstream\n return { type: \"object\", properties: {} };\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 * @returns A map of strict IPropertyMetadata objects.\n */\n private static normalizeProperties(properties: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const normalizedProps: Record<string, IPropertyMetadata> = {};\n for (const key of Object.keys(properties)) {\n normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key);\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 * @returns A strict IPropertyMetadata instance.\n */\n private static normalizePropertyMetadata(prop: Record<string, unknown>, keyName: string): IPropertyMetadata {\n const normalized: IPropertyMetadata = {\n type: prop.type || \"string\",\n ui: {\n label: prop.ui?.label || this.generateLabel(keyName),\n isKey: !!prop.ui?.isKey,\n readOnly: !!prop.ui?.readOnly,\n widget: prop.ui?.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 },\n required: !!prop.required,\n maxLength: prop.maxLength,\n minimum: prop.minimum,\n maximum: prop.maximum,\n pattern: prop.pattern,\n precision: prop.precision,\n scale: prop.scale,\n valueHelp: prop.valueHelp,\n enum: prop.enum\n };\n\n if (normalized.type === \"object\" && prop.properties) {\n normalized.properties = this.normalizeProperties(prop.properties);\n normalized.uiLayout = prop.uiLayout;\n } else if (normalized.type === \"array\" && prop.items) {\n normalized.items = this.normalizePropertyMetadata(prop.items, \"items\");\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 private 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 schema.layoutStrategy = \"table\";\n schema.items = {\n type: \"object\",\n layoutStrategy: \"compact\",\n properties: data.length > 0 ? this.inferPropertiesFromObject(data[0]) : {}\n };\n } else {\n schema.type = \"object\";\n schema.properties = this.inferPropertiesFromObject(data);\n }\n\n return schema;\n }\n\n /**\n * Infers field metadata recursively from a raw data object.\n * @param obj The raw JavaScript object.\n * @returns A dictionary of inferred IPropertyMetadata.\n */\n private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const properties: Record<string, IPropertyMetadata> = {};\n if (!obj || typeof obj !== \"object\") return properties;\n\n for (const key of Object.keys(obj)) {\n const val = obj[key];\n if (val === null || val === undefined) continue;\n\n let type: FieldType = \"string\";\n let items: IPropertyMetadata | undefined;\n let nestedProps: Record<string, IPropertyMetadata> | undefined;\n\n if (typeof val === \"number\") type = \"number\";\n else if (typeof val === \"boolean\") type = \"boolean\";\n else if (Array.isArray(val)) {\n type = \"array\";\n items = {\n type: \"object\",\n properties: val.length > 0 ? this.inferPropertiesFromObject(val[0]) : {}\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 }\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, unknown> = schema.properties;\n let meta: IPropertyMetadata | undefined;\n \n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Resolving scope '${scope}' with segments: ${JSON.stringify(pathSegments)}`, \"SchemaNormalizer\");\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Root schema keys: ${Object.keys(schema.properties || {})}`, \"SchemaNormalizer\");\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n if (!current) {\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `current is undefined at segment '${segment}'`, \"SchemaNormalizer\");\n meta = undefined;\n break;\n }\n meta = current[segment];\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Segment '${segment}' resolved to meta: ${!!meta}. Available keys in current: ${Object.keys(current)}`, \"SchemaNormalizer\");\n if (i < pathSegments.length - 1) {\n current = meta?.properties;\n }\n }\n \n const bindingPath = pathSegments.join(\"/\");\n const propKey = scope.replace(\"#/properties/\", \"\"); // The original raw string for logging\n \n return {\n meta,\n bindingPath,\n propKey\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SchemaNormalizer-dbg.js","names":["Logger","___utils_Logger","SchemaNormalizer","canHandle","rawSchema","openapi","swagger","build","normalize","data","schemaObj","trim","JSON","parse","e","msg","message","error","Error","Array","isArray","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","additionalProperties","targetProperties","properties","inferred","deepMergeProperties","requiredKeys","required","normalizeProperties","normalizePropertyMetadata","base","override","merged","key","Object","keys","overrideVal","baseVal","normalizedProps","isRequired","includes","prop","keyName","ui","label","generateLabel","isKey","readOnly","widget","valueHelp","enum","undefined","visibleOn","enabledOn","format","validators","formatter","args","rows","fullWidth","dialogButtonText","maxLength","minLength","minimum","maximum","pattern","precision","scale","multipleOf","name","spaced","replace","split","filter","w","length","map","word","charAt","toUpperCase","slice","toLowerCase","join","schema","inferPropertiesFromObject","obj","val","nestedProps","resolveScope","scope","startsWith","meta","bindingPath","propKey","pathSegments","current","debug","stringify","i","segment","__exports","__esModule"],"sources":["SchemaNormalizer.ts"],"sourcesContent":["/**\n * @file SchemaNormalizer.ts\n * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.\n */\n\nimport { ISchema, IPropertyMetadata, FieldType } from \"../interfaces/ISchema\";\nimport { ISchemaBuilderPlugin } from \"../interfaces/ISchemaBuilderPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\nexport class SchemaNormalizer implements ISchemaBuilderPlugin {\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public canHandle(rawSchema: any): boolean {\n // MetaUI native schemas almost always have properties, items, or a layoutStrategy\n // This acts as a fallback for native schemas.\n if (rawSchema.openapi || rawSchema.swagger) return false; \n return true;\n }\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public build(rawSchema: any): ISchema {\n return SchemaNormalizer.normalize(rawSchema);\n }\n\n /**\n * Validates that the provided raw payload conforms to the required ISchema structures.\n */\n public static normalize(rawSchema?: unknown, data?: unknown): ISchema {\n let schemaObj = rawSchema;\n\n if (typeof schemaObj === \"string\") {\n if (!schemaObj.trim()) {\n schemaObj = null;\n } else {\n try {\n schemaObj = JSON.parse(schemaObj);\n } catch (e) {\n const msg = \"Failed to parse schema string: \" + (e as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n }\n\n if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {\n return this.inferSchemaFromData(data);\n }\n\n try {\n // It is an object. Ensure it conforms to v2 structure.\n const normalized: ISchema = {\n title: schemaObj.title,\n type: schemaObj.type || (schemaObj.items ? \"array\" : \"object\"),\n layoutStrategy: schemaObj.layoutStrategy,\n uiLayout: schemaObj.uiLayout,\n additionalProperties: schemaObj.additionalProperties\n };\n\n let targetProperties = schemaObj.properties || {};\n\n if (schemaObj.additionalProperties === true && data) {\n const inferred = this.inferSchemaFromData(data);\n if (inferred.type === \"object\" && inferred.properties) {\n targetProperties = this.deepMergeProperties(inferred.properties, targetProperties);\n } else if (inferred.type === \"array\" && inferred.items && inferred.items.properties) {\n // Array schema merging could be added here if we want full support.\n }\n }\n\n if (normalized.type === \"object\") {\n const requiredKeys = Array.isArray(schemaObj.required) ? schemaObj.required : [];\n normalized.properties = this.normalizeProperties(targetProperties, requiredKeys);\n } else if (normalized.type === \"array\") {\n // Future expansion: array deep merge\n normalized.items = this.normalizePropertyMetadata(schemaObj.items || { type: \"object\", properties: {} }, \"items\", false);\n }\n\n return normalized;\n } catch (error) {\n const msg = \"Critical error normalizing schema object: \" + (error as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively deep merges an inferred schema over a base schema.\n * @param base The base property dictionary.\n * @param override The overriding inferred dictionary.\n * @returns A new deeply merged property dictionary.\n */\n private static deepMergeProperties(base: Record<string, unknown>, override: Record<string, unknown>): Record<string, unknown> {\n const merged = { ...base };\n for (const key of Object.keys(override)) {\n const overrideVal = override[key];\n const baseVal = merged[key];\n\n if (baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal) &&\n overrideVal && typeof overrideVal === \"object\" && !Array.isArray(overrideVal)) {\n merged[key] = this.deepMergeProperties(baseVal, overrideVal);\n } else {\n merged[key] = overrideVal;\n }\n }\n return merged;\n }\n\n /**\n * Normalizes a collection of properties.\n * @param properties The raw properties map.\n * @param requiredKeys An optional array of keys that are required by the parent object.\n * @returns A map of strict IPropertyMetadata objects.\n */\n private static normalizeProperties(properties: Record<string, unknown>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {\n const normalizedProps: Record<string, IPropertyMetadata> = {};\n for (const key of Object.keys(properties)) {\n const isRequired = requiredKeys.includes(key);\n normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key, isRequired);\n }\n return normalizedProps;\n }\n\n /**\n * Normalizes a single property against the ISchema specification.\n * @param prop The raw property definition.\n * @param keyName The string key name for generating default labels.\n * @param isRequired Indicates if the parent object mandated this property as required.\n * @returns A strict IPropertyMetadata instance.\n */\n private static normalizePropertyMetadata(prop: Record<string, unknown>, keyName: string, isRequired: boolean = false): IPropertyMetadata {\n const normalized: IPropertyMetadata = {\n type: prop.type || \"string\",\n ui: {\n label: prop.ui?.label || this.generateLabel(keyName),\n isKey: !!prop.ui?.isKey,\n readOnly: !!prop.ui?.readOnly,\n widget: prop.ui?.widget || (prop.valueHelp || prop.enum ? \"select\" : undefined),\n visibleOn: prop.ui?.visibleOn,\n enabledOn: prop.ui?.enabledOn,\n format: prop.ui?.format,\n validators: prop.ui?.validators,\n formatter: prop.ui?.formatter,\n args: prop.ui?.args,\n rows: prop.ui?.rows,\n fullWidth: prop.ui?.fullWidth,\n dialogButtonText: prop.ui?.dialogButtonText\n },\n required: isRequired || !!prop.required,\n maxLength: prop.maxLength as number,\n minLength: prop.minLength as number,\n minimum: prop.minimum,\n maximum: prop.maximum,\n pattern: prop.pattern,\n precision: prop.precision,\n scale: prop.scale,\n multipleOf: prop.multipleOf as number,\n valueHelp: prop.valueHelp,\n enum: prop.enum\n };\n\n if (normalized.type === \"object\" && prop.properties) {\n const requiredKeys = Array.isArray(prop.required) ? prop.required : [];\n normalized.properties = this.normalizeProperties(prop.properties as Record<string, unknown>, requiredKeys);\n normalized.uiLayout = prop.uiLayout;\n } else if (normalized.type === \"array\" && prop.items) {\n normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, \"items\", false);\n normalized.uiLayout = prop.uiLayout;\n }\n\n return normalized;\n }\n\n /**\n * Generates a Title Case label from camelCase or snake_case technical names.\n */\n private static generateLabel(name: string): string {\n if (!name) return \"\";\n let spaced = name.replace(/([A-Z])/g, \" $1\").replace(/_/g, \" \");\n return spaced.split(' ')\n .filter(w => w.length > 0)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n .trim();\n }\n\n /**\n * Infers a v2 ISchema structure dynamically from a plain data payload.\n */\n public static inferSchemaFromData(data: unknown): ISchema {\n const schema: ISchema = { type: \"object\", properties: {}, layoutStrategy: \"compact\", title: \"\" };\n\n if (!data || typeof data !== \"object\") {\n return schema;\n }\n\n if (Array.isArray(data)) {\n schema.type = \"array\";\n if (data.length > 0 && typeof data[0] !== \"object\") {\n schema.layoutStrategy = \"compact\";\n schema.items = { type: typeof data[0] as FieldType };\n } else {\n schema.layoutStrategy = \"table\";\n schema.items = {\n type: \"object\",\n layoutStrategy: \"compact\",\n properties: data.length > 0 ? this.inferPropertiesFromObject(data[0] as Record<string, unknown>) : {}\n };\n }\n } else {\n schema.type = \"object\";\n schema.properties = this.inferPropertiesFromObject(data);\n }\n\n return schema;\n }\n\n /**\n * Infers field metadata recursively from a raw data object.\n * @param obj The raw JavaScript object.\n * @returns A dictionary of inferred IPropertyMetadata.\n */\n private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const properties: Record<string, IPropertyMetadata> = {};\n if (!obj || typeof obj !== \"object\") return properties;\n\n for (const key of Object.keys(obj)) {\n const val = obj[key];\n if (val === null || val === undefined) continue;\n\n let type: FieldType = \"string\";\n let items: IPropertyMetadata | undefined;\n let nestedProps: Record<string, IPropertyMetadata> | undefined;\n\n if (typeof val === \"number\") type = \"number\";\n else if (typeof val === \"boolean\") type = \"boolean\";\n else if (Array.isArray(val)) {\n type = \"array\";\n if (val.length > 0 && typeof val[0] !== \"object\") {\n items = {\n type: typeof val[0] as FieldType\n };\n } else {\n items = {\n type: \"object\",\n properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, unknown>) : {}\n };\n }\n } else if (typeof val === \"object\") {\n type = \"object\";\n nestedProps = this.inferPropertiesFromObject(val);\n }\n\n properties[key] = {\n type,\n items,\n properties: nestedProps,\n ui: {\n label: this.generateLabel(key),\n isKey: false,\n readOnly: false,\n widget: type === \"array\" && items?.type !== \"object\" ? \"multiInput\" : undefined\n }\n };\n }\n\n return properties;\n }\n\n /**\n * Resolves a JSON Schema scope (e.g. '#/properties/header/properties/id')\n * against the ISchema, returning the PropertyMetadata and the UI5 binding path.\n */\n public static resolveScope(schema: ISchema, scope: string): { meta: IPropertyMetadata | undefined, bindingPath: string, propKey: string } {\n if (!scope || !scope.startsWith(\"#/properties/\")) {\n return { meta: undefined, bindingPath: scope || \"\", propKey: scope || \"\" };\n }\n \n const pathSegments = scope.replace(\"#/properties/\", \"\").split(\"/properties/\");\n let current: Record<string, IPropertyMetadata> | undefined = schema.properties;\n let meta: IPropertyMetadata | undefined;\n \n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Resolving scope '${scope}' with segments: ${JSON.stringify(pathSegments)}`, \"SchemaNormalizer\");\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Root schema keys: ${Object.keys(schema.properties || {})}`, \"SchemaNormalizer\");\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n if (!current) {\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `current is undefined at segment '${segment}'`, \"SchemaNormalizer\");\n meta = undefined;\n break;\n }\n meta = current[segment];\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Segment '${segment}' resolved to meta: ${!!meta}. Available keys in current: ${Object.keys(current)}`, \"SchemaNormalizer\");\n if (i < pathSegments.length - 1) {\n current = meta?.properties;\n }\n }\n \n const bindingPath = pathSegments.join(\"/\");\n const propKey = scope.replace(\"#/properties/\", \"\"); // The original raw string for logging\n \n return {\n meta,\n bindingPath,\n propKey\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,7 +4,16 @@ declare module "nz/co/siliconst/ui5/metaui/core/SchemaNormalizer" {
|
|
|
4
4
|
* @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.
|
|
5
5
|
*/
|
|
6
6
|
import { ISchema, IPropertyMetadata } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
|
|
7
|
-
|
|
7
|
+
import { ISchemaBuilderPlugin } from "nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin";
|
|
8
|
+
export class SchemaNormalizer implements ISchemaBuilderPlugin {
|
|
9
|
+
/**
|
|
10
|
+
* ISchemaBuilderPlugin Contract
|
|
11
|
+
*/
|
|
12
|
+
canHandle(rawSchema: any): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* ISchemaBuilderPlugin Contract
|
|
15
|
+
*/
|
|
16
|
+
build(rawSchema: any): ISchema;
|
|
8
17
|
/**
|
|
9
18
|
* Validates that the provided raw payload conforms to the required ISchema structures.
|
|
10
19
|
*/
|
|
@@ -19,6 +28,7 @@ declare module "nz/co/siliconst/ui5/metaui/core/SchemaNormalizer" {
|
|
|
19
28
|
/**
|
|
20
29
|
* Normalizes a collection of properties.
|
|
21
30
|
* @param properties The raw properties map.
|
|
31
|
+
* @param requiredKeys An optional array of keys that are required by the parent object.
|
|
22
32
|
* @returns A map of strict IPropertyMetadata objects.
|
|
23
33
|
*/
|
|
24
34
|
private static normalizeProperties;
|
|
@@ -26,6 +36,7 @@ declare module "nz/co/siliconst/ui5/metaui/core/SchemaNormalizer" {
|
|
|
26
36
|
* Normalizes a single property against the ISchema specification.
|
|
27
37
|
* @param prop The raw property definition.
|
|
28
38
|
* @param keyName The string key name for generating default labels.
|
|
39
|
+
* @param isRequired Indicates if the parent object mandated this property as required.
|
|
29
40
|
* @returns A strict IPropertyMetadata instance.
|
|
30
41
|
*/
|
|
31
42
|
private static normalizePropertyMetadata;
|
|
@@ -36,7 +47,7 @@ declare module "nz/co/siliconst/ui5/metaui/core/SchemaNormalizer" {
|
|
|
36
47
|
/**
|
|
37
48
|
* Infers a v2 ISchema structure dynamically from a plain data payload.
|
|
38
49
|
*/
|
|
39
|
-
|
|
50
|
+
static inferSchemaFromData(data: unknown): ISchema;
|
|
40
51
|
/**
|
|
41
52
|
* Infers field metadata recursively from a raw data object.
|
|
42
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;IACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;IAGlG,MAAa,gBAAiB,YAAW,oBAAoB;QAEzD;;WAEG;QACI,SAAS,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO;QAOzC;;WAEG;QACI,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO;QAIrC;;WAEG;eACW,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO;QA0DrE;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;QAgBlC;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;QASlC;;;;;;WAMG;QACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;QA2CxC;;WAEG;QACH,OAAO,CAAC,MAAM,CAAC,aAAa;QAU5B;;WAEG;eACW,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;QA4BzD;;;;WAIG;QACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;QA+CxC;;;WAGG;eACW,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;YAAE,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;KAmC5I;CAEA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["../utils/Logger"],function(e){"use strict";const t=e["Logger"];class r{static normalize(e,r){let i=e;if(typeof i==="string"){try{i=JSON.parse(i)}catch(e){const r=e.message;t.error("[MetaUI SchemaNormalizer]
|
|
1
|
+
sap.ui.define(["../utils/Logger"],function(e){"use strict";const t=e["Logger"];class r{canHandle(e){if(e.openapi||e.swagger)return false;return true}build(e){return r.normalize(e)}static normalize(e,r){let i=e;if(typeof i==="string"){if(!i.trim()){i=null}else{try{i=JSON.parse(i)}catch(e){const r="Failed to parse schema string: "+e.message;t.error("[MetaUI SchemaNormalizer]",r);throw new Error(r)}}}if(!i||typeof i!=="object"||Array.isArray(i)){return this.inferSchemaFromData(r)}try{const e={title:i.title,type:i.type||(i.items?"array":"object"),layoutStrategy:i.layoutStrategy,uiLayout:i.uiLayout,additionalProperties:i.additionalProperties};let t=i.properties||{};if(i.additionalProperties===true&&r){const e=this.inferSchemaFromData(r);if(e.type==="object"&&e.properties){t=this.deepMergeProperties(e.properties,t)}else if(e.type==="array"&&e.items&&e.items.properties){}}if(e.type==="object"){const r=Array.isArray(i.required)?i.required:[];e.properties=this.normalizeProperties(t,r)}else if(e.type==="array"){e.items=this.normalizePropertyMetadata(i.items||{type:"object",properties:{}},"items",false)}return e}catch(e){const r="Critical error normalizing schema object: "+e.message;t.error("[MetaUI SchemaNormalizer]",r);throw new Error(r)}}static deepMergeProperties(e,t){const r={...e};for(const e of Object.keys(t)){const i=t[e];const a=r[e];if(a&&typeof a==="object"&&!Array.isArray(a)&&i&&typeof i==="object"&&!Array.isArray(i)){r[e]=this.deepMergeProperties(a,i)}else{r[e]=i}}return r}static normalizeProperties(e,t=[]){const r={};for(const i of Object.keys(e)){const a=t.includes(i);r[i]=this.normalizePropertyMetadata(e[i],i,a)}return r}static normalizePropertyMetadata(e,t,r=false){const i={type:e.type||"string",ui:{label:e.ui?.label||this.generateLabel(t),isKey:!!e.ui?.isKey,readOnly:!!e.ui?.readOnly,widget:e.ui?.widget||(e.valueHelp||e.enum?"select":undefined),visibleOn:e.ui?.visibleOn,enabledOn:e.ui?.enabledOn,format:e.ui?.format,validators:e.ui?.validators,formatter:e.ui?.formatter,args:e.ui?.args,rows:e.ui?.rows,fullWidth:e.ui?.fullWidth,dialogButtonText:e.ui?.dialogButtonText},required:r||!!e.required,maxLength:e.maxLength,minLength:e.minLength,minimum:e.minimum,maximum:e.maximum,pattern:e.pattern,precision:e.precision,scale:e.scale,multipleOf:e.multipleOf,valueHelp:e.valueHelp,enum:e.enum};if(i.type==="object"&&e.properties){const t=Array.isArray(e.required)?e.required:[];i.properties=this.normalizeProperties(e.properties,t);i.uiLayout=e.uiLayout}else if(i.type==="array"&&e.items){i.items=this.normalizePropertyMetadata(e.items,"items",false);i.uiLayout=e.uiLayout}return i}static generateLabel(e){if(!e)return"";let t=e.replace(/([A-Z])/g," $1").replace(/_/g," ");return t.split(" ").filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim()}static inferSchemaFromData(e){const t={type:"object",properties:{},layoutStrategy:"compact",title:""};if(!e||typeof e!=="object"){return t}if(Array.isArray(e)){t.type="array";if(e.length>0&&typeof e[0]!=="object"){t.layoutStrategy="compact";t.items={type:typeof e[0]}}else{t.layoutStrategy="table";t.items={type:"object",layoutStrategy:"compact",properties:e.length>0?this.inferPropertiesFromObject(e[0]):{}}}}else{t.type="object";t.properties=this.inferPropertiesFromObject(e)}return t}static inferPropertiesFromObject(e){const t={};if(!e||typeof e!=="object")return t;for(const r of Object.keys(e)){const i=e[r];if(i===null||i===undefined)continue;let a="string";let o;let s;if(typeof i==="number")a="number";else if(typeof i==="boolean")a="boolean";else if(Array.isArray(i)){a="array";if(i.length>0&&typeof i[0]!=="object"){o={type:typeof i[0]}}else{o={type:"object",properties:i.length>0?this.inferPropertiesFromObject(i[0]):{}}}}else if(typeof i==="object"){a="object";s=this.inferPropertiesFromObject(i)}t[r]={type:a,items:o,properties:s,ui:{label:this.generateLabel(r),isKey:false,readOnly:false,widget:a==="array"&&o?.type!=="object"?"multiInput":undefined}}}return t}static resolveScope(e,r){if(!r||!r.startsWith("#/properties/")){return{meta:undefined,bindingPath:r||"",propKey:r||""}}const i=r.replace("#/properties/","").split("/properties/");let a=e.properties;let o;t.debug("[MetaUI SchemaNormalizer]",`Resolving scope '${r}' with segments: ${JSON.stringify(i)}`,"SchemaNormalizer");t.debug("[MetaUI SchemaNormalizer]",`Root schema keys: ${Object.keys(e.properties||{})}`,"SchemaNormalizer");for(let e=0;e<i.length;e++){const r=i[e];if(!a){t.debug("[MetaUI SchemaNormalizer]",`current is undefined at segment '${r}'`,"SchemaNormalizer");o=undefined;break}o=a[r];t.debug("[MetaUI SchemaNormalizer]",`Segment '${r}' resolved to meta: ${!!o}. Available keys in current: ${Object.keys(a)}`,"SchemaNormalizer");if(e<i.length-1){a=o?.properties}}const s=i.join("/");const n=r.replace("#/properties/","");return{meta:o,bindingPath:s,propKey:n}}}var i={__esModule:true};i.SchemaNormalizer=r;return i});
|
|
2
2
|
//# sourceMappingURL=SchemaNormalizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaNormalizer.js","names":["Logger","___utils_Logger","SchemaNormalizer","normalize","rawSchema","data","schemaObj","JSON","parse","e","msg","message","error","showErrorPopup","Array","isArray","this","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","additionalProperties","targetProperties","properties","inferred","deepMergeProperties","normalizeProperties","normalizePropertyMetadata","base","override","merged","key","Object","keys","overrideVal","baseVal","normalizedProps","prop","keyName","ui","label","generateLabel","isKey","readOnly","widget","valueHelp","enum","undefined","visibleOn","enabledOn","format","validators","formatter","args","rows","fullWidth","required","maxLength","minimum","maximum","pattern","precision","scale","name","spaced","replace","split","filter","w","length","map","word","charAt","toUpperCase","slice","toLowerCase","join","trim","schema","inferPropertiesFromObject","obj","val","nestedProps","resolveScope","scope","startsWith","meta","bindingPath","propKey","pathSegments","current","debug","stringify","i","segment","__exports","__esModule"],"sources":["SchemaNormalizer.ts"],"sourcesContent":["/**\n * @file SchemaNormalizer.ts\n * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.\n */\n\nimport { ISchema, IPropertyMetadata, FieldType } from \"../interfaces/ISchema\";\nimport { Logger } from \"../utils/Logger\";\n\nexport class SchemaNormalizer {\n\n /**\n * Validates that the provided raw payload conforms to the required ISchema structures.\n */\n public static normalize(rawSchema?: unknown, data?: unknown): ISchema {\n let schemaObj = rawSchema;\n\n if (typeof schemaObj === \"string\") {\n try {\n schemaObj = JSON.parse(schemaObj);\n } catch (e) {\n const msg = (e as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer] Failed to parse schema string.\", msg);\n Logger.showErrorPopup(`Failed to parse the provided JSON schema.\\n\\nDetails: ${msg}`);\n schemaObj = null;\n }\n }\n\n if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {\n return this.inferSchemaFromData(data);\n }\n\n try {\n // It is an object. Ensure it conforms to v2 structure.\n const normalized: ISchema = {\n title: schemaObj.title,\n type: schemaObj.type || (schemaObj.items ? \"array\" : \"object\"),\n layoutStrategy: schemaObj.layoutStrategy,\n uiLayout: schemaObj.uiLayout,\n additionalProperties: schemaObj.additionalProperties\n };\n\n let targetProperties = schemaObj.properties || {};\n\n if (schemaObj.additionalProperties === true && data) {\n const inferred = this.inferSchemaFromData(data);\n if (inferred.type === \"object\" && inferred.properties) {\n targetProperties = this.deepMergeProperties(inferred.properties, targetProperties);\n } else if (inferred.type === \"array\" && inferred.items && inferred.items.properties) {\n // Array schema merging could be added here if we want full support.\n }\n }\n\n if (normalized.type === \"object\") {\n normalized.properties = this.normalizeProperties(targetProperties);\n } else if (normalized.type === \"array\") {\n // Future expansion: array deep merge\n normalized.items = this.normalizePropertyMetadata(schemaObj.items || { type: \"object\", properties: {} }, \"items\");\n }\n\n return normalized;\n } catch (error) {\n const msg = (error as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer] Critical error normalizing schema object.\", msg);\n Logger.showErrorPopup(`Schema Normalization failed.\\n\\nDetails: ${msg}`);\n // Fallback to empty object to prevent hard crash downstream\n return { type: \"object\", properties: {} };\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 * @returns A map of strict IPropertyMetadata objects.\n */\n private static normalizeProperties(properties: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const normalizedProps: Record<string, IPropertyMetadata> = {};\n for (const key of Object.keys(properties)) {\n normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key);\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 * @returns A strict IPropertyMetadata instance.\n */\n private static normalizePropertyMetadata(prop: Record<string, unknown>, keyName: string): IPropertyMetadata {\n const normalized: IPropertyMetadata = {\n type: prop.type || \"string\",\n ui: {\n label: prop.ui?.label || this.generateLabel(keyName),\n isKey: !!prop.ui?.isKey,\n readOnly: !!prop.ui?.readOnly,\n widget: prop.ui?.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 },\n required: !!prop.required,\n maxLength: prop.maxLength,\n minimum: prop.minimum,\n maximum: prop.maximum,\n pattern: prop.pattern,\n precision: prop.precision,\n scale: prop.scale,\n valueHelp: prop.valueHelp,\n enum: prop.enum\n };\n\n if (normalized.type === \"object\" && prop.properties) {\n normalized.properties = this.normalizeProperties(prop.properties);\n normalized.uiLayout = prop.uiLayout;\n } else if (normalized.type === \"array\" && prop.items) {\n normalized.items = this.normalizePropertyMetadata(prop.items, \"items\");\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 private 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 schema.layoutStrategy = \"table\";\n schema.items = {\n type: \"object\",\n layoutStrategy: \"compact\",\n properties: data.length > 0 ? this.inferPropertiesFromObject(data[0]) : {}\n };\n } else {\n schema.type = \"object\";\n schema.properties = this.inferPropertiesFromObject(data);\n }\n\n return schema;\n }\n\n /**\n * Infers field metadata recursively from a raw data object.\n * @param obj The raw JavaScript object.\n * @returns A dictionary of inferred IPropertyMetadata.\n */\n private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const properties: Record<string, IPropertyMetadata> = {};\n if (!obj || typeof obj !== \"object\") return properties;\n\n for (const key of Object.keys(obj)) {\n const val = obj[key];\n if (val === null || val === undefined) continue;\n\n let type: FieldType = \"string\";\n let items: IPropertyMetadata | undefined;\n let nestedProps: Record<string, IPropertyMetadata> | undefined;\n\n if (typeof val === \"number\") type = \"number\";\n else if (typeof val === \"boolean\") type = \"boolean\";\n else if (Array.isArray(val)) {\n type = \"array\";\n items = {\n type: \"object\",\n properties: val.length > 0 ? this.inferPropertiesFromObject(val[0]) : {}\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 }\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, unknown> = schema.properties;\n let meta: IPropertyMetadata | undefined;\n \n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Resolving scope '${scope}' with segments: ${JSON.stringify(pathSegments)}`, \"SchemaNormalizer\");\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Root schema keys: ${Object.keys(schema.properties || {})}`, \"SchemaNormalizer\");\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n if (!current) {\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `current is undefined at segment '${segment}'`, \"SchemaNormalizer\");\n meta = undefined;\n break;\n }\n meta = current[segment];\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Segment '${segment}' resolved to meta: ${!!meta}. Available keys in current: ${Object.keys(current)}`, \"SchemaNormalizer\");\n if (i < pathSegments.length - 1) {\n current = meta?.properties;\n }\n }\n \n const bindingPath = pathSegments.join(\"/\");\n const propKey = scope.replace(\"#/properties/\", \"\"); // The original raw string for logging\n \n return {\n meta,\n bindingPath,\n propKey\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SchemaNormalizer.js","names":["Logger","___utils_Logger","SchemaNormalizer","canHandle","rawSchema","openapi","swagger","build","normalize","data","schemaObj","trim","JSON","parse","e","msg","message","error","Error","Array","isArray","this","inferSchemaFromData","normalized","title","type","items","layoutStrategy","uiLayout","additionalProperties","targetProperties","properties","inferred","deepMergeProperties","requiredKeys","required","normalizeProperties","normalizePropertyMetadata","base","override","merged","key","Object","keys","overrideVal","baseVal","normalizedProps","isRequired","includes","prop","keyName","ui","label","generateLabel","isKey","readOnly","widget","valueHelp","enum","undefined","visibleOn","enabledOn","format","validators","formatter","args","rows","fullWidth","dialogButtonText","maxLength","minLength","minimum","maximum","pattern","precision","scale","multipleOf","name","spaced","replace","split","filter","w","length","map","word","charAt","toUpperCase","slice","toLowerCase","join","schema","inferPropertiesFromObject","obj","val","nestedProps","resolveScope","scope","startsWith","meta","bindingPath","propKey","pathSegments","current","debug","stringify","i","segment","__exports","__esModule"],"sources":["SchemaNormalizer.ts"],"sourcesContent":["/**\n * @file SchemaNormalizer.ts\n * @description Transforms and validates incoming JSON payloads into the strict v2 ISchema dictionary matrix.\n */\n\nimport { ISchema, IPropertyMetadata, FieldType } from \"../interfaces/ISchema\";\nimport { ISchemaBuilderPlugin } from \"../interfaces/ISchemaBuilderPlugin\";\nimport { Logger } from \"../utils/Logger\";\n\nexport class SchemaNormalizer implements ISchemaBuilderPlugin {\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public canHandle(rawSchema: any): boolean {\n // MetaUI native schemas almost always have properties, items, or a layoutStrategy\n // This acts as a fallback for native schemas.\n if (rawSchema.openapi || rawSchema.swagger) return false; \n return true;\n }\n\n /**\n * ISchemaBuilderPlugin Contract\n */\n public build(rawSchema: any): ISchema {\n return SchemaNormalizer.normalize(rawSchema);\n }\n\n /**\n * Validates that the provided raw payload conforms to the required ISchema structures.\n */\n public static normalize(rawSchema?: unknown, data?: unknown): ISchema {\n let schemaObj = rawSchema;\n\n if (typeof schemaObj === \"string\") {\n if (!schemaObj.trim()) {\n schemaObj = null;\n } else {\n try {\n schemaObj = JSON.parse(schemaObj);\n } catch (e) {\n const msg = \"Failed to parse schema string: \" + (e as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n }\n\n if (!schemaObj || typeof schemaObj !== 'object' || Array.isArray(schemaObj)) {\n return this.inferSchemaFromData(data);\n }\n\n try {\n // It is an object. Ensure it conforms to v2 structure.\n const normalized: ISchema = {\n title: schemaObj.title,\n type: schemaObj.type || (schemaObj.items ? \"array\" : \"object\"),\n layoutStrategy: schemaObj.layoutStrategy,\n uiLayout: schemaObj.uiLayout,\n additionalProperties: schemaObj.additionalProperties\n };\n\n let targetProperties = schemaObj.properties || {};\n\n if (schemaObj.additionalProperties === true && data) {\n const inferred = this.inferSchemaFromData(data);\n if (inferred.type === \"object\" && inferred.properties) {\n targetProperties = this.deepMergeProperties(inferred.properties, targetProperties);\n } else if (inferred.type === \"array\" && inferred.items && inferred.items.properties) {\n // Array schema merging could be added here if we want full support.\n }\n }\n\n if (normalized.type === \"object\") {\n const requiredKeys = Array.isArray(schemaObj.required) ? schemaObj.required : [];\n normalized.properties = this.normalizeProperties(targetProperties, requiredKeys);\n } else if (normalized.type === \"array\") {\n // Future expansion: array deep merge\n normalized.items = this.normalizePropertyMetadata(schemaObj.items || { type: \"object\", properties: {} }, \"items\", false);\n }\n\n return normalized;\n } catch (error) {\n const msg = \"Critical error normalizing schema object: \" + (error as Error).message;\n Logger.error(\"[MetaUI SchemaNormalizer]\", msg);\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively deep merges an inferred schema over a base schema.\n * @param base The base property dictionary.\n * @param override The overriding inferred dictionary.\n * @returns A new deeply merged property dictionary.\n */\n private static deepMergeProperties(base: Record<string, unknown>, override: Record<string, unknown>): Record<string, unknown> {\n const merged = { ...base };\n for (const key of Object.keys(override)) {\n const overrideVal = override[key];\n const baseVal = merged[key];\n\n if (baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal) &&\n overrideVal && typeof overrideVal === \"object\" && !Array.isArray(overrideVal)) {\n merged[key] = this.deepMergeProperties(baseVal, overrideVal);\n } else {\n merged[key] = overrideVal;\n }\n }\n return merged;\n }\n\n /**\n * Normalizes a collection of properties.\n * @param properties The raw properties map.\n * @param requiredKeys An optional array of keys that are required by the parent object.\n * @returns A map of strict IPropertyMetadata objects.\n */\n private static normalizeProperties(properties: Record<string, unknown>, requiredKeys: string[] = []): Record<string, IPropertyMetadata> {\n const normalizedProps: Record<string, IPropertyMetadata> = {};\n for (const key of Object.keys(properties)) {\n const isRequired = requiredKeys.includes(key);\n normalizedProps[key] = this.normalizePropertyMetadata(properties[key], key, isRequired);\n }\n return normalizedProps;\n }\n\n /**\n * Normalizes a single property against the ISchema specification.\n * @param prop The raw property definition.\n * @param keyName The string key name for generating default labels.\n * @param isRequired Indicates if the parent object mandated this property as required.\n * @returns A strict IPropertyMetadata instance.\n */\n private static normalizePropertyMetadata(prop: Record<string, unknown>, keyName: string, isRequired: boolean = false): IPropertyMetadata {\n const normalized: IPropertyMetadata = {\n type: prop.type || \"string\",\n ui: {\n label: prop.ui?.label || this.generateLabel(keyName),\n isKey: !!prop.ui?.isKey,\n readOnly: !!prop.ui?.readOnly,\n widget: prop.ui?.widget || (prop.valueHelp || prop.enum ? \"select\" : undefined),\n visibleOn: prop.ui?.visibleOn,\n enabledOn: prop.ui?.enabledOn,\n format: prop.ui?.format,\n validators: prop.ui?.validators,\n formatter: prop.ui?.formatter,\n args: prop.ui?.args,\n rows: prop.ui?.rows,\n fullWidth: prop.ui?.fullWidth,\n dialogButtonText: prop.ui?.dialogButtonText\n },\n required: isRequired || !!prop.required,\n maxLength: prop.maxLength as number,\n minLength: prop.minLength as number,\n minimum: prop.minimum,\n maximum: prop.maximum,\n pattern: prop.pattern,\n precision: prop.precision,\n scale: prop.scale,\n multipleOf: prop.multipleOf as number,\n valueHelp: prop.valueHelp,\n enum: prop.enum\n };\n\n if (normalized.type === \"object\" && prop.properties) {\n const requiredKeys = Array.isArray(prop.required) ? prop.required : [];\n normalized.properties = this.normalizeProperties(prop.properties as Record<string, unknown>, requiredKeys);\n normalized.uiLayout = prop.uiLayout;\n } else if (normalized.type === \"array\" && prop.items) {\n normalized.items = this.normalizePropertyMetadata(prop.items as Record<string, unknown>, \"items\", false);\n normalized.uiLayout = prop.uiLayout;\n }\n\n return normalized;\n }\n\n /**\n * Generates a Title Case label from camelCase or snake_case technical names.\n */\n private static generateLabel(name: string): string {\n if (!name) return \"\";\n let spaced = name.replace(/([A-Z])/g, \" $1\").replace(/_/g, \" \");\n return spaced.split(' ')\n .filter(w => w.length > 0)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n .trim();\n }\n\n /**\n * Infers a v2 ISchema structure dynamically from a plain data payload.\n */\n public static inferSchemaFromData(data: unknown): ISchema {\n const schema: ISchema = { type: \"object\", properties: {}, layoutStrategy: \"compact\", title: \"\" };\n\n if (!data || typeof data !== \"object\") {\n return schema;\n }\n\n if (Array.isArray(data)) {\n schema.type = \"array\";\n if (data.length > 0 && typeof data[0] !== \"object\") {\n schema.layoutStrategy = \"compact\";\n schema.items = { type: typeof data[0] as FieldType };\n } else {\n schema.layoutStrategy = \"table\";\n schema.items = {\n type: \"object\",\n layoutStrategy: \"compact\",\n properties: data.length > 0 ? this.inferPropertiesFromObject(data[0] as Record<string, unknown>) : {}\n };\n }\n } else {\n schema.type = \"object\";\n schema.properties = this.inferPropertiesFromObject(data);\n }\n\n return schema;\n }\n\n /**\n * Infers field metadata recursively from a raw data object.\n * @param obj The raw JavaScript object.\n * @returns A dictionary of inferred IPropertyMetadata.\n */\n private static inferPropertiesFromObject(obj: Record<string, unknown>): Record<string, IPropertyMetadata> {\n const properties: Record<string, IPropertyMetadata> = {};\n if (!obj || typeof obj !== \"object\") return properties;\n\n for (const key of Object.keys(obj)) {\n const val = obj[key];\n if (val === null || val === undefined) continue;\n\n let type: FieldType = \"string\";\n let items: IPropertyMetadata | undefined;\n let nestedProps: Record<string, IPropertyMetadata> | undefined;\n\n if (typeof val === \"number\") type = \"number\";\n else if (typeof val === \"boolean\") type = \"boolean\";\n else if (Array.isArray(val)) {\n type = \"array\";\n if (val.length > 0 && typeof val[0] !== \"object\") {\n items = {\n type: typeof val[0] as FieldType\n };\n } else {\n items = {\n type: \"object\",\n properties: val.length > 0 ? this.inferPropertiesFromObject(val[0] as Record<string, unknown>) : {}\n };\n }\n } else if (typeof val === \"object\") {\n type = \"object\";\n nestedProps = this.inferPropertiesFromObject(val);\n }\n\n properties[key] = {\n type,\n items,\n properties: nestedProps,\n ui: {\n label: this.generateLabel(key),\n isKey: false,\n readOnly: false,\n widget: type === \"array\" && items?.type !== \"object\" ? \"multiInput\" : undefined\n }\n };\n }\n\n return properties;\n }\n\n /**\n * Resolves a JSON Schema scope (e.g. '#/properties/header/properties/id')\n * against the ISchema, returning the PropertyMetadata and the UI5 binding path.\n */\n public static resolveScope(schema: ISchema, scope: string): { meta: IPropertyMetadata | undefined, bindingPath: string, propKey: string } {\n if (!scope || !scope.startsWith(\"#/properties/\")) {\n return { meta: undefined, bindingPath: scope || \"\", propKey: scope || \"\" };\n }\n \n const pathSegments = scope.replace(\"#/properties/\", \"\").split(\"/properties/\");\n let current: Record<string, IPropertyMetadata> | undefined = schema.properties;\n let meta: IPropertyMetadata | undefined;\n \n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Resolving scope '${scope}' with segments: ${JSON.stringify(pathSegments)}`, \"SchemaNormalizer\");\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Root schema keys: ${Object.keys(schema.properties || {})}`, \"SchemaNormalizer\");\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n if (!current) {\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `current is undefined at segment '${segment}'`, \"SchemaNormalizer\");\n meta = undefined;\n break;\n }\n meta = current[segment];\n Logger.debug(\"[MetaUI SchemaNormalizer]\", `Segment '${segment}' resolved to meta: ${!!meta}. Available keys in current: ${Object.keys(current)}`, \"SchemaNormalizer\");\n if (i < pathSegments.length - 1) {\n current = meta?.properties;\n }\n }\n \n const bindingPath = pathSegments.join(\"/\");\n const propKey = scope.replace(\"#/properties/\", \"\"); // The original raw string for logging\n \n return {\n meta,\n bindingPath,\n propKey\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|