@siliconst/metaui 1.4.17 → 1.4.20
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/package.json +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig-dbg.js +47 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/AIConfig.ts +39 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js +83 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts +30 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.ts +74 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy-dbg.js +61 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.d.ts +13 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/MockLLMProxy.ts +59 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js +50 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.d.ts +12 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.ts +44 -0
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +79 -13
- 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 +12 -0
- 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 +77 -15
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +31 -1
- 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 +15 -0
- 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 +26 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +35 -0
- 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 +8 -0
- 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 +37 -0
- package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js +11 -32
- package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.d.ts.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 +9 -13
- package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +6 -2
- 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 +2 -0
- 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 +12 -7
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +3 -0
- 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.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 +3 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +4 -4
- 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 +2 -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 +10 -10
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.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 +1 -1
- 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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +1 -1
- 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 +19 -3
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +22 -3
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.d.ts +3 -2
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.ts +3 -2
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +18 -2
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +19 -2
- 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 +62 -43
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/library.d.ts +4 -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 +6 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder-dbg.js +93 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.d.ts +52 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiBuilder.ts +88 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js +47 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts +25 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +43 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js +68 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts +21 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +61 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper-dbg.js +45 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper.d.ts +25 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/{swagger/SwaggerTypeMapper.js → openapi/OpenApiTypeMapper.js} +2 -2
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiTypeMapper.ts +36 -0
- package/src/nz/co/siliconst/ui5/metaui/{swagger/SwaggerUIMapper-dbg.js → openapi/OpenApiUIMapper-dbg.js} +23 -14
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/{swagger/SwaggerUIMapper.ts → openapi/OpenApiUIMapper.ts} +22 -13
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js +50 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.d.ts +25 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.ts +43 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin-dbg.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.d.ts +23 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/interfaces/IHeuristicPlugin.ts +21 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js +117 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts +47 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +113 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin-dbg.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.d.ts +26 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/interfaces/IOpenApiParserPlugin.ts +25 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js +106 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +27 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +104 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js +107 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +27 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +105 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +347 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +110 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +377 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +11 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +13 -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 +31 -7
- 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 -1
- 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 +33 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.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 +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +1 -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.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 +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +4 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.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 +4 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +4 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.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 +4 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js +217 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts +26 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts +249 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.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 +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +3 -3
- 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 +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.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 +4 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +115 -49
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +17 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +114 -54
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +3 -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.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +3 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +194 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts +25 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +192 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +2 -2
- 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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +4 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.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 +4 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +3 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js +2 -2
- 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 +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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js +2 -2
- 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 +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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor-dbg.js +146 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.d.ts +27 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/OpenApiExtractor.ts +160 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder-dbg.js +0 -226
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder-dbg.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.d.ts +0 -63
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.d.ts.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.js +0 -2
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.ts +0 -233
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver-dbg.js +0 -43
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver-dbg.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.d.ts +0 -15
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.d.ts.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.js +0 -2
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.ts +0 -37
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper-dbg.js +0 -37
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper-dbg.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.d.ts +0 -18
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.d.ts.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.ts +0 -28
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper-dbg.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.d.ts +0 -27
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.d.ts.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.js +0 -2
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.js.map +0 -1
|
@@ -37,6 +37,8 @@ export default class GeneratorHost extends Control {
|
|
|
37
37
|
static readonly metadata = {
|
|
38
38
|
properties: {
|
|
39
39
|
schemaDefinition: { type: "any", defaultValue: null },
|
|
40
|
+
schemaDefinitions: { type: "object", defaultValue: {} },
|
|
41
|
+
schemaTarget: { type: "string", defaultValue: null },
|
|
40
42
|
data: { type: "object", defaultValue: null, bindable: "bindable" },
|
|
41
43
|
dataJson: { type: "string", defaultValue: null, bindable: "bindable" },
|
|
42
44
|
liveUpdate: { type: "boolean", defaultValue: false },
|
|
@@ -146,6 +148,23 @@ export default class GeneratorHost extends Control {
|
|
|
146
148
|
return this.stateManager;
|
|
147
149
|
}
|
|
148
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Resolves a reference pointer against the global schema definitions dictionary.
|
|
153
|
+
* @param refPath The string reference path (e.g., "#/definitions/User")
|
|
154
|
+
* @returns The resolved ISchema or undefined
|
|
155
|
+
*/
|
|
156
|
+
public getSchemaDefinition(refPath: string): ISchema | undefined {
|
|
157
|
+
const defs = this.getProperty("schemaDefinitions") as Record<string, ISchema>;
|
|
158
|
+
if (!defs || !refPath) return undefined;
|
|
159
|
+
let key = refPath;
|
|
160
|
+
if (key.startsWith("#/definitions/")) {
|
|
161
|
+
key = key.substring(14);
|
|
162
|
+
} else if (key.startsWith("#/components/schemas/")) {
|
|
163
|
+
key = key.substring(21);
|
|
164
|
+
}
|
|
165
|
+
return defs[key];
|
|
166
|
+
}
|
|
167
|
+
|
|
149
168
|
/**
|
|
150
169
|
* Safely destroys the currently generated UI tree and cleans up references.
|
|
151
170
|
* This is called before every regeneration to prevent memory leaks.
|
|
@@ -341,7 +360,7 @@ export default class GeneratorHost extends Control {
|
|
|
341
360
|
return this;
|
|
342
361
|
}
|
|
343
362
|
|
|
344
|
-
if (propertyName === "editable" || propertyName === "debugMode" || propertyName === "schemaDefinition") {
|
|
363
|
+
if (propertyName === "editable" || propertyName === "debugMode" || propertyName === "schemaDefinition" || propertyName === "schemaTarget") {
|
|
345
364
|
const currentVal = this.getProperty(propertyName);
|
|
346
365
|
if (currentVal !== value) {
|
|
347
366
|
super.setProperty(propertyName, value, suppressInvalidate);
|
|
@@ -479,6 +498,11 @@ export default class GeneratorHost extends Control {
|
|
|
479
498
|
this.setBusy(false);
|
|
480
499
|
}
|
|
481
500
|
|
|
501
|
+
// Inject defaults into empty payload values
|
|
502
|
+
if (normalizedSchema && finalData) {
|
|
503
|
+
this.dataSyncDelegate.injectSchemaDefaults(normalizedSchema, finalData);
|
|
504
|
+
}
|
|
505
|
+
|
|
482
506
|
this.activeModelName = "metaUI_" + this.getId();
|
|
483
507
|
this.stateManager = new StateManager(finalData, normalizedSchema, this.activeModelName);
|
|
484
508
|
this.stateManager.setUseMessageManager(this.getProperty("useMessageManager") === true);
|
|
@@ -488,6 +512,7 @@ export default class GeneratorHost extends Control {
|
|
|
488
512
|
const isEditable = this.getProperty("editable") !== false;
|
|
489
513
|
const useMessageManager = this.getProperty("useMessageManager") === true;
|
|
490
514
|
this.engine = new Engine(isEditable, useMessageManager);
|
|
515
|
+
this.engine.host = this;
|
|
491
516
|
}
|
|
492
517
|
|
|
493
518
|
this.generatedContent = this.engine.build(
|
|
@@ -96,6 +96,41 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/base/util/extend", "../../../util
|
|
|
96
96
|
throw new Error(msg);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Recursively scans an ISchema for `default` properties and injects them into the rootData
|
|
102
|
+
* object if those properties are currently undefined.
|
|
103
|
+
*
|
|
104
|
+
* @param schema The MetaUI ISchema tree.
|
|
105
|
+
* @param rootData The data payload to mutate.
|
|
106
|
+
*/
|
|
107
|
+
injectSchemaDefaults(schema, rootData, depth = 0) {
|
|
108
|
+
if (!schema || !rootData || typeof rootData !== "object" || depth > 8) return;
|
|
109
|
+
if (schema.type === "object" && schema.properties) {
|
|
110
|
+
for (const key of Object.keys(schema.properties)) {
|
|
111
|
+
const propSchema = schema.properties[key];
|
|
112
|
+
if (rootData[key] === undefined) {
|
|
113
|
+
if (propSchema.default !== undefined) {
|
|
114
|
+
rootData[key] = propSchema.default;
|
|
115
|
+
} else if (propSchema.type === "object") {
|
|
116
|
+
const tempObj = {};
|
|
117
|
+
this.injectSchemaDefaults(propSchema, tempObj, depth + 1);
|
|
118
|
+
if (Object.keys(tempObj).length > 0) {
|
|
119
|
+
rootData[key] = tempObj;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
} else if (typeof rootData[key] === "object" && rootData[key] !== null) {
|
|
123
|
+
this.injectSchemaDefaults(propSchema, rootData[key], depth + 1);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
} else if (schema.type === "array" && schema.items && Array.isArray(rootData)) {
|
|
127
|
+
for (let i = 0; i < rootData.length; i++) {
|
|
128
|
+
if (typeof rootData[i] === "object" && rootData[i] !== null) {
|
|
129
|
+
this.injectSchemaDefaults(schema.items, rootData[i], depth + 1);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
99
134
|
}
|
|
100
135
|
var __exports = {
|
|
101
136
|
__esModule: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataSyncDelegate-dbg.js","names":["Logger","_____utils_Logger","SchemaNormalizer","_____core_SchemaNormalizer","DataSyncDelegate","_lastPushedPayloadJson","_lastPushedPayloadObj","_lastReceivedInputObj","constructor","host","pushToBindings","payload","payloadStr","JSON","stringify","deepEqual","parse","setProperty","handleInputDataHotSwap","propertyName","value","suppressInvalidate","incomingObj","e","setBaseProperty","getProperty","debug","extend","stateManager","getStateManager","invalidate","getModel","setData","getParsedSchema","newInferredSchema","inferSchemaFromData","parsedSchema","tearDownGeneratedLayout","msg","message","error","Error","__exports","__esModule"],"sources":["DataSyncDelegate.ts"],"sourcesContent":["import deepEqual from \"sap/base/util/deepEqual\";\nimport extend from \"sap/base/util/extend\";\nimport { Logger } from \"../../../utils/Logger\";\nimport { SchemaNormalizer } from \"../../../core/SchemaNormalizer\";\nimport PropertyBinding from \"sap/ui/model/PropertyBinding\";\nimport { StateManager } from \"../../../core/StateManager\";\n\nexport interface IHostDataSync {\n getProperty(name: string): unknown;\n setProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n setBaseProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n getBinding(name: string): unknown;\n invalidate(): void;\n getStateManager(): StateManager | null;\n getParsedSchema?(): Record<string, unknown> | null;\n tearDownGeneratedLayout(): void;\n}\n\n/**\n * Handles two-way data sync, JSON parsing, loop-breaking, and inference structural diffs.\n */\nexport class DataSyncDelegate {\n private host: IHostDataSync;\n private _lastPushedPayloadJson: string | null = null;\n private _lastPushedPayloadObj: Record<string, unknown> | null = null;\n private _lastReceivedInputObj: Record<string, unknown> | null = null;\n\n /**\n * Initializes a new DataSyncDelegate to handle data payload binding extraction.\n * @param host The parent host interface containing properties.\n */\n constructor(host: IHostDataSync) {\n this.host = host;\n }\n\n /**\n * Natively forces the UI5 framework to push updated properties back up to any bound ViewModels.\n */\n public pushToBindings(payload: Record<string, unknown>): void {\n const payloadStr = JSON.stringify(payload, null, 2);\n\n // Cache exact payload output to catch echoes on the inbound side\n this._lastPushedPayloadJson = payloadStr;\n this._lastPushedPayloadObj = deepEqual({}, payload) ? null : JSON.parse(JSON.stringify(payload)); // Safe clone\n\n this.host.setProperty(\"data\", payload, true);\n this.host.setProperty(\"dataJson\", payloadStr, true);\n }\n\n /**\n * Intercepts and parses live updates to the data payload from two-way Fiori bindings.\n */\n public handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void {\n let incomingObj: Record<string, unknown> | null = null;\n\n if (typeof value === \"string\") {\n try {\n incomingObj = JSON.parse(value) as Record<string, unknown>;\n } catch (e) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n } else {\n incomingObj = value as Record<string, unknown>;\n }\n\n if (incomingObj === null) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n\n // Loop Breaker 1: Stale Data Injection\n if (this._lastReceivedInputObj && deepEqual(incomingObj, this._lastReceivedInputObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped stale data injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n // Loop Breaker 2: Two-Way Data Echoes\n if (this._lastPushedPayloadObj && deepEqual(incomingObj, this._lastPushedPayloadObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped echo for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n this._lastReceivedInputObj = extend(true, {}, incomingObj) as Record<string, unknown>;\n\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Accepted external injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n\n this.host.setBaseProperty(propertyName, value, true);\n\n const stateManager = this.host.getStateManager();\n if (!stateManager) {\n this.host.invalidate();\n return;\n }\n\n try {\n stateManager.getModel().setData(incomingObj, false);\n\n if (!this.host.getProperty(\"schemaDefinition\") && typeof this.host.getParsedSchema === \"function\") {\n const newInferredSchema = SchemaNormalizer.inferSchemaFromData(incomingObj);\n const parsedSchema = this.host.getParsedSchema();\n if (!deepEqual(newInferredSchema, parsedSchema)) {\n this.host.tearDownGeneratedLayout();\n this.host.invalidate();\n }\n }\n } catch (e) {\n const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;\n Logger.error(\"[MetaUI]\", msg, \"DataSyncDelegate\");\n throw new Error(msg);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DataSyncDelegate-dbg.js","names":["Logger","_____utils_Logger","SchemaNormalizer","_____core_SchemaNormalizer","DataSyncDelegate","_lastPushedPayloadJson","_lastPushedPayloadObj","_lastReceivedInputObj","constructor","host","pushToBindings","payload","payloadStr","JSON","stringify","deepEqual","parse","setProperty","handleInputDataHotSwap","propertyName","value","suppressInvalidate","incomingObj","e","setBaseProperty","getProperty","debug","extend","stateManager","getStateManager","invalidate","getModel","setData","getParsedSchema","newInferredSchema","inferSchemaFromData","parsedSchema","tearDownGeneratedLayout","msg","message","error","Error","injectSchemaDefaults","schema","rootData","depth","type","properties","key","Object","keys","propSchema","undefined","default","tempObj","length","items","Array","isArray","i","__exports","__esModule"],"sources":["DataSyncDelegate.ts"],"sourcesContent":["import deepEqual from \"sap/base/util/deepEqual\";\nimport extend from \"sap/base/util/extend\";\nimport { Logger } from \"../../../utils/Logger\";\nimport { SchemaNormalizer } from \"../../../core/SchemaNormalizer\";\nimport PropertyBinding from \"sap/ui/model/PropertyBinding\";\nimport { StateManager } from \"../../../core/StateManager\";\n\nexport interface IHostDataSync {\n getProperty(name: string): unknown;\n setProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n setBaseProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n getBinding(name: string): unknown;\n invalidate(): void;\n getStateManager(): StateManager | null;\n getParsedSchema?(): Record<string, unknown> | null;\n tearDownGeneratedLayout(): void;\n}\n\n/**\n * Handles two-way data sync, JSON parsing, loop-breaking, and inference structural diffs.\n */\nexport class DataSyncDelegate {\n private host: IHostDataSync;\n private _lastPushedPayloadJson: string | null = null;\n private _lastPushedPayloadObj: Record<string, unknown> | null = null;\n private _lastReceivedInputObj: Record<string, unknown> | null = null;\n\n /**\n * Initializes a new DataSyncDelegate to handle data payload binding extraction.\n * @param host The parent host interface containing properties.\n */\n constructor(host: IHostDataSync) {\n this.host = host;\n }\n\n /**\n * Natively forces the UI5 framework to push updated properties back up to any bound ViewModels.\n */\n public pushToBindings(payload: Record<string, unknown>): void {\n const payloadStr = JSON.stringify(payload, null, 2);\n\n // Cache exact payload output to catch echoes on the inbound side\n this._lastPushedPayloadJson = payloadStr;\n this._lastPushedPayloadObj = deepEqual({}, payload) ? null : JSON.parse(JSON.stringify(payload)); // Safe clone\n\n this.host.setProperty(\"data\", payload, true);\n this.host.setProperty(\"dataJson\", payloadStr, true);\n }\n\n /**\n * Intercepts and parses live updates to the data payload from two-way Fiori bindings.\n */\n public handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void {\n let incomingObj: Record<string, unknown> | null = null;\n\n if (typeof value === \"string\") {\n try {\n incomingObj = JSON.parse(value) as Record<string, unknown>;\n } catch (e) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n } else {\n incomingObj = value as Record<string, unknown>;\n }\n\n if (incomingObj === null) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n\n // Loop Breaker 1: Stale Data Injection\n if (this._lastReceivedInputObj && deepEqual(incomingObj, this._lastReceivedInputObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped stale data injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n // Loop Breaker 2: Two-Way Data Echoes\n if (this._lastPushedPayloadObj && deepEqual(incomingObj, this._lastPushedPayloadObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped echo for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n this._lastReceivedInputObj = extend(true, {}, incomingObj) as Record<string, unknown>;\n\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Accepted external injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n\n this.host.setBaseProperty(propertyName, value, true);\n\n const stateManager = this.host.getStateManager();\n if (!stateManager) {\n this.host.invalidate();\n return;\n }\n\n try {\n stateManager.getModel().setData(incomingObj, false);\n\n if (!this.host.getProperty(\"schemaDefinition\") && typeof this.host.getParsedSchema === \"function\") {\n const newInferredSchema = SchemaNormalizer.inferSchemaFromData(incomingObj);\n const parsedSchema = this.host.getParsedSchema();\n if (!deepEqual(newInferredSchema, parsedSchema)) {\n this.host.tearDownGeneratedLayout();\n this.host.invalidate();\n }\n }\n } catch (e) {\n const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;\n Logger.error(\"[MetaUI]\", msg, \"DataSyncDelegate\");\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively scans an ISchema for `default` properties and injects them into the rootData \n * object if those properties are currently undefined.\n * \n * @param schema The MetaUI ISchema tree.\n * @param rootData The data payload to mutate.\n */\n public injectSchemaDefaults(schema: unknown, rootData: unknown, depth: number = 0): void {\n if (!schema || !rootData || typeof rootData !== \"object\" || depth > 8) return;\n\n if (schema.type === \"object\" && schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const propSchema = schema.properties[key];\n \n if (rootData[key] === undefined) {\n if (propSchema.default !== undefined) {\n rootData[key] = propSchema.default;\n } else if (propSchema.type === \"object\") {\n const tempObj = {};\n this.injectSchemaDefaults(propSchema, tempObj, depth + 1);\n if (Object.keys(tempObj).length > 0) {\n rootData[key] = tempObj;\n }\n }\n } else if (typeof rootData[key] === \"object\" && rootData[key] !== null) {\n this.injectSchemaDefaults(propSchema, rootData[key], depth + 1);\n }\n }\n } else if (schema.type === \"array\" && schema.items && Array.isArray(rootData)) {\n for (let i = 0; i < rootData.length; i++) {\n if (typeof rootData[i] === \"object\" && rootData[i] !== null) {\n this.injectSchemaDefaults(schema.items, rootData[i], depth + 1);\n }\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -31,6 +31,14 @@ declare module "nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDeleg
|
|
|
31
31
|
* Intercepts and parses live updates to the data payload from two-way Fiori bindings.
|
|
32
32
|
*/
|
|
33
33
|
handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void;
|
|
34
|
+
/**
|
|
35
|
+
* Recursively scans an ISchema for `default` properties and injects them into the rootData
|
|
36
|
+
* object if those properties are currently undefined.
|
|
37
|
+
*
|
|
38
|
+
* @param schema The MetaUI ISchema tree.
|
|
39
|
+
* @param rootData The data payload to mutate.
|
|
40
|
+
*/
|
|
41
|
+
injectSchemaDefaults(schema: unknown, rootData: unknown, depth?: number): void;
|
|
34
42
|
}
|
|
35
43
|
}
|
|
36
44
|
//# sourceMappingURL=DataSyncDelegate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataSyncDelegate.d.ts","sourceRoot":"../../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,qEAAqE,CAAC;IAMrF,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;IAE5E,UAAiB,aAAa;QAC1B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACnC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC9E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAClF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAClC,UAAU,IAAI,IAAI,CAAC;QACnB,eAAe,IAAI,YAAY,GAAG,IAAI,CAAC;QACvC,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACnD,uBAAuB,IAAI,IAAI,CAAC;KACnC;IAED;;OAEG;IACH,MAAa,gBAAgB;QACzB,OAAO,CAAC,IAAI,CAAgB;QAC5B,OAAO,CAAC,sBAAsB,CAAuB;QACrD,OAAO,CAAC,qBAAqB,CAAwC;QACrE,OAAO,CAAC,qBAAqB,CAAwC;QAErE;;;WAGG;oBACS,IAAI,EAAE,aAAa;QAI/B;;WAEG;QACI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;QAW7D;;WAEG;QACI,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"DataSyncDelegate.d.ts","sourceRoot":"../../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,qEAAqE,CAAC;IAMrF,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;IAE5E,UAAiB,aAAa;QAC1B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACnC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC9E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAClF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAClC,UAAU,IAAI,IAAI,CAAC;QACnB,eAAe,IAAI,YAAY,GAAG,IAAI,CAAC;QACvC,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACnD,uBAAuB,IAAI,IAAI,CAAC;KACnC;IAED;;OAEG;IACH,MAAa,gBAAgB;QACzB,OAAO,CAAC,IAAI,CAAgB;QAC5B,OAAO,CAAC,sBAAsB,CAAuB;QACrD,OAAO,CAAC,qBAAqB,CAAwC;QACrE,OAAO,CAAC,qBAAqB,CAAwC;QAErE;;;WAGG;oBACS,IAAI,EAAE,aAAa;QAI/B;;WAEG;QACI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;QAW7D;;WAEG;QACI,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI;QAqEvG;;;;;;WAMG;QACI,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI;KA6B3F;CAEA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["sap/base/util/deepEqual","sap/base/util/extend","../../../utils/Logger","../../../core/SchemaNormalizer"],function(t,
|
|
1
|
+
sap.ui.define(["sap/base/util/deepEqual","sap/base/util/extend","../../../utils/Logger","../../../core/SchemaNormalizer"],function(e,t,s,a){"use strict";const o=s["Logger"];const r=a["SchemaNormalizer"];class i{_lastPushedPayloadJson=null;_lastPushedPayloadObj=null;_lastReceivedInputObj=null;constructor(e){this.host=e}pushToBindings(t){const s=JSON.stringify(t,null,2);this._lastPushedPayloadJson=s;this._lastPushedPayloadObj=e({},t)?null:JSON.parse(JSON.stringify(t));this.host.setProperty("data",t,true);this.host.setProperty("dataJson",s,true)}handleInputDataHotSwap(s,a,i){let n=null;if(typeof a==="string"){try{n=JSON.parse(a)}catch(e){this.host.setBaseProperty(s,a,true);return}}else{n=a}if(n===null){this.host.setBaseProperty(s,a,true);return}if(this._lastReceivedInputObj&&e(n,this._lastReceivedInputObj)){if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Dropped stale data injection for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,i);return}if(this._lastPushedPayloadObj&&e(n,this._lastPushedPayloadObj)){if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Dropped echo for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,i);return}this._lastReceivedInputObj=t(true,{},n);if(this.host.getProperty("debugMode")){o.debug("[MetaUI]",`Accepted external injection for ${s}`,"DataSyncDelegate")}this.host.setBaseProperty(s,a,true);const h=this.host.getStateManager();if(!h){this.host.invalidate();return}try{h.getModel().setData(n,false);if(!this.host.getProperty("schemaDefinition")&&typeof this.host.getParsedSchema==="function"){const t=r.inferSchemaFromData(n);const s=this.host.getParsedSchema();if(!e(t,s)){this.host.tearDownGeneratedLayout();this.host.invalidate()}}}catch(e){const t=`Failed to hot-swap ${s}: `+e.message;o.error("[MetaUI]",t,"DataSyncDelegate");throw new Error(t)}}injectSchemaDefaults(e,t,s=0){if(!e||!t||typeof t!=="object"||s>8)return;if(e.type==="object"&&e.properties){for(const a of Object.keys(e.properties)){const o=e.properties[a];if(t[a]===undefined){if(o.default!==undefined){t[a]=o.default}else if(o.type==="object"){const e={};this.injectSchemaDefaults(o,e,s+1);if(Object.keys(e).length>0){t[a]=e}}}else if(typeof t[a]==="object"&&t[a]!==null){this.injectSchemaDefaults(o,t[a],s+1)}}}else if(e.type==="array"&&e.items&&Array.isArray(t)){for(let a=0;a<t.length;a++){if(typeof t[a]==="object"&&t[a]!==null){this.injectSchemaDefaults(e.items,t[a],s+1)}}}}}var n={__esModule:true};n.DataSyncDelegate=i;return n});
|
|
2
2
|
//# sourceMappingURL=DataSyncDelegate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataSyncDelegate.js","names":["Logger","_____utils_Logger","SchemaNormalizer","_____core_SchemaNormalizer","DataSyncDelegate","_lastPushedPayloadJson","_lastPushedPayloadObj","_lastReceivedInputObj","constructor","host","this","pushToBindings","payload","payloadStr","JSON","stringify","deepEqual","parse","setProperty","handleInputDataHotSwap","propertyName","value","suppressInvalidate","incomingObj","e","setBaseProperty","getProperty","debug","extend","stateManager","getStateManager","invalidate","getModel","setData","getParsedSchema","newInferredSchema","inferSchemaFromData","parsedSchema","tearDownGeneratedLayout","msg","message","error","Error","__exports","__esModule"],"sources":["DataSyncDelegate.ts"],"sourcesContent":["import deepEqual from \"sap/base/util/deepEqual\";\nimport extend from \"sap/base/util/extend\";\nimport { Logger } from \"../../../utils/Logger\";\nimport { SchemaNormalizer } from \"../../../core/SchemaNormalizer\";\nimport PropertyBinding from \"sap/ui/model/PropertyBinding\";\nimport { StateManager } from \"../../../core/StateManager\";\n\nexport interface IHostDataSync {\n getProperty(name: string): unknown;\n setProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n setBaseProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n getBinding(name: string): unknown;\n invalidate(): void;\n getStateManager(): StateManager | null;\n getParsedSchema?(): Record<string, unknown> | null;\n tearDownGeneratedLayout(): void;\n}\n\n/**\n * Handles two-way data sync, JSON parsing, loop-breaking, and inference structural diffs.\n */\nexport class DataSyncDelegate {\n private host: IHostDataSync;\n private _lastPushedPayloadJson: string | null = null;\n private _lastPushedPayloadObj: Record<string, unknown> | null = null;\n private _lastReceivedInputObj: Record<string, unknown> | null = null;\n\n /**\n * Initializes a new DataSyncDelegate to handle data payload binding extraction.\n * @param host The parent host interface containing properties.\n */\n constructor(host: IHostDataSync) {\n this.host = host;\n }\n\n /**\n * Natively forces the UI5 framework to push updated properties back up to any bound ViewModels.\n */\n public pushToBindings(payload: Record<string, unknown>): void {\n const payloadStr = JSON.stringify(payload, null, 2);\n\n // Cache exact payload output to catch echoes on the inbound side\n this._lastPushedPayloadJson = payloadStr;\n this._lastPushedPayloadObj = deepEqual({}, payload) ? null : JSON.parse(JSON.stringify(payload)); // Safe clone\n\n this.host.setProperty(\"data\", payload, true);\n this.host.setProperty(\"dataJson\", payloadStr, true);\n }\n\n /**\n * Intercepts and parses live updates to the data payload from two-way Fiori bindings.\n */\n public handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void {\n let incomingObj: Record<string, unknown> | null = null;\n\n if (typeof value === \"string\") {\n try {\n incomingObj = JSON.parse(value) as Record<string, unknown>;\n } catch (e) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n } else {\n incomingObj = value as Record<string, unknown>;\n }\n\n if (incomingObj === null) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n\n // Loop Breaker 1: Stale Data Injection\n if (this._lastReceivedInputObj && deepEqual(incomingObj, this._lastReceivedInputObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped stale data injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n // Loop Breaker 2: Two-Way Data Echoes\n if (this._lastPushedPayloadObj && deepEqual(incomingObj, this._lastPushedPayloadObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped echo for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n this._lastReceivedInputObj = extend(true, {}, incomingObj) as Record<string, unknown>;\n\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Accepted external injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n\n this.host.setBaseProperty(propertyName, value, true);\n\n const stateManager = this.host.getStateManager();\n if (!stateManager) {\n this.host.invalidate();\n return;\n }\n\n try {\n stateManager.getModel().setData(incomingObj, false);\n\n if (!this.host.getProperty(\"schemaDefinition\") && typeof this.host.getParsedSchema === \"function\") {\n const newInferredSchema = SchemaNormalizer.inferSchemaFromData(incomingObj);\n const parsedSchema = this.host.getParsedSchema();\n if (!deepEqual(newInferredSchema, parsedSchema)) {\n this.host.tearDownGeneratedLayout();\n this.host.invalidate();\n }\n }\n } catch (e) {\n const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;\n Logger.error(\"[MetaUI]\", msg, \"DataSyncDelegate\");\n throw new Error(msg);\n }\n }\n}\n"],"mappings":"+JAESA,EAAMC,EAAA,gBACNC,EAAgBC,EAAA,oBAkBlB,MAAMC,EAEDC,uBAAwC,KACxCC,sBAAwD,KACxDC,sBAAwD,KAMhEC,YAAYC,GACRC,KAAKD,KAAOA,CAChB,CAKOE,eAAeC,GAClB,MAAMC,EAAaC,KAAKC,UAAUH,EAAS,KAAM,GAGjDF,KAAKL,uBAAyBQ,EAC9BH,KAAKJ,sBAAwBU,EAAU,CAAC,EAAGJ,GAAW,KAAOE,KAAKG,MAAMH,KAAKC,UAAUH,IAEvFF,KAAKD,KAAKS,YAAY,OAAQN,EAAS,MACvCF,KAAKD,KAAKS,YAAY,WAAYL,EAAY,KAClD,CAKOM,uBAAuBC,EAAsBC,EAAgBC,GAChE,IAAIC,EAA8C,KAElD,UAAWF,IAAU,SAAU,CAC3B,IACIE,EAAcT,KAAKG,MAAMI,EAC7B,CAAE,MAAOG,GACLd,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAC/C,MACJ,CACJ,KAAO,CACHE,EAAcF,CAClB,CAEA,GAAIE,IAAgB,KAAM,CACtBb,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAC/C,MACJ,CAGA,GAAIX,KAAKH,uBAAyBS,EAAUO,EAAab,KAAKH,uBAAwB,CAClF,GAAIG,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,oCAAoCP,IAAgB,mBACjF,CACAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAOC,GAC/C,MACJ,CAGA,GAAIZ,KAAKJ,uBAAyBU,EAAUO,EAAab,KAAKJ,uBAAwB,CAClF,GAAII,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,oBAAoBP,IAAgB,mBACjE,CACAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAOC,GAC/C,MACJ,CAEAZ,KAAKH,sBAAwBqB,EAAO,KAAM,CAAC,EAAGL,GAE9C,GAAIb,KAAKD,KAAKiB,YAAY,aAAc,CACpC1B,EAAO2B,MAAM,WAAY,mCAAmCP,IAAgB,mBAChF,CAEAV,KAAKD,KAAKgB,gBAAgBL,EAAcC,EAAO,MAE/C,MAAMQ,EAAenB,KAAKD,KAAKqB,kBAC/B,IAAKD,EAAc,CACfnB,KAAKD,KAAKsB,aACV,MACJ,CAEA,IACIF,EAAaG,WAAWC,QAAQV,EAAa,OAE7C,IAAKb,KAAKD,KAAKiB,YAAY,4BAA8BhB,KAAKD,KAAKyB,kBAAoB,WAAY,CAC/F,MAAMC,EAAoBjC,EAAiBkC,oBAAoBb,GAC/D,MAAMc,EAAe3B,KAAKD,KAAKyB,kBAC/B,IAAKlB,EAAUmB,EAAmBE,GAAe,CAC7C3B,KAAKD,KAAK6B,0BACV5B,KAAKD,KAAKsB,YACd,CACJ,CACJ,CAAE,MAAOP,GACL,MAAMe,EAAM,sBAAsBnB,MAAoBI,EAAYgB,QAClExC,EAAOyC,MAAM,WAAYF,EAAK,oBAC9B,MAAM,IAAIG,MAAMH,EACpB,CACJ,EACH,IAAAI,EAAA,CAAAC,WAAA,MAAAD,EAAAvC,mBAAA,OAAAuC,CAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DataSyncDelegate.js","names":["Logger","_____utils_Logger","SchemaNormalizer","_____core_SchemaNormalizer","DataSyncDelegate","_lastPushedPayloadJson","_lastPushedPayloadObj","_lastReceivedInputObj","constructor","host","this","pushToBindings","payload","payloadStr","JSON","stringify","deepEqual","parse","setProperty","handleInputDataHotSwap","propertyName","value","suppressInvalidate","incomingObj","e","setBaseProperty","getProperty","debug","extend","stateManager","getStateManager","invalidate","getModel","setData","getParsedSchema","newInferredSchema","inferSchemaFromData","parsedSchema","tearDownGeneratedLayout","msg","message","error","Error","injectSchemaDefaults","schema","rootData","depth","type","properties","key","Object","keys","propSchema","undefined","default","tempObj","length","items","Array","isArray","i","__exports","__esModule"],"sources":["DataSyncDelegate.ts"],"sourcesContent":["import deepEqual from \"sap/base/util/deepEqual\";\nimport extend from \"sap/base/util/extend\";\nimport { Logger } from \"../../../utils/Logger\";\nimport { SchemaNormalizer } from \"../../../core/SchemaNormalizer\";\nimport PropertyBinding from \"sap/ui/model/PropertyBinding\";\nimport { StateManager } from \"../../../core/StateManager\";\n\nexport interface IHostDataSync {\n getProperty(name: string): unknown;\n setProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n setBaseProperty(name: string, value: unknown, suppressInvalidate?: boolean): this;\n getBinding(name: string): unknown;\n invalidate(): void;\n getStateManager(): StateManager | null;\n getParsedSchema?(): Record<string, unknown> | null;\n tearDownGeneratedLayout(): void;\n}\n\n/**\n * Handles two-way data sync, JSON parsing, loop-breaking, and inference structural diffs.\n */\nexport class DataSyncDelegate {\n private host: IHostDataSync;\n private _lastPushedPayloadJson: string | null = null;\n private _lastPushedPayloadObj: Record<string, unknown> | null = null;\n private _lastReceivedInputObj: Record<string, unknown> | null = null;\n\n /**\n * Initializes a new DataSyncDelegate to handle data payload binding extraction.\n * @param host The parent host interface containing properties.\n */\n constructor(host: IHostDataSync) {\n this.host = host;\n }\n\n /**\n * Natively forces the UI5 framework to push updated properties back up to any bound ViewModels.\n */\n public pushToBindings(payload: Record<string, unknown>): void {\n const payloadStr = JSON.stringify(payload, null, 2);\n\n // Cache exact payload output to catch echoes on the inbound side\n this._lastPushedPayloadJson = payloadStr;\n this._lastPushedPayloadObj = deepEqual({}, payload) ? null : JSON.parse(JSON.stringify(payload)); // Safe clone\n\n this.host.setProperty(\"data\", payload, true);\n this.host.setProperty(\"dataJson\", payloadStr, true);\n }\n\n /**\n * Intercepts and parses live updates to the data payload from two-way Fiori bindings.\n */\n public handleInputDataHotSwap(propertyName: string, value: unknown, suppressInvalidate?: boolean): void {\n let incomingObj: Record<string, unknown> | null = null;\n\n if (typeof value === \"string\") {\n try {\n incomingObj = JSON.parse(value) as Record<string, unknown>;\n } catch (e) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n } else {\n incomingObj = value as Record<string, unknown>;\n }\n\n if (incomingObj === null) {\n this.host.setBaseProperty(propertyName, value, true);\n return;\n }\n\n // Loop Breaker 1: Stale Data Injection\n if (this._lastReceivedInputObj && deepEqual(incomingObj, this._lastReceivedInputObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped stale data injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n // Loop Breaker 2: Two-Way Data Echoes\n if (this._lastPushedPayloadObj && deepEqual(incomingObj, this._lastPushedPayloadObj)) {\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Dropped echo for ${propertyName}`, \"DataSyncDelegate\");\n }\n this.host.setBaseProperty(propertyName, value, suppressInvalidate);\n return;\n }\n\n this._lastReceivedInputObj = extend(true, {}, incomingObj) as Record<string, unknown>;\n\n if (this.host.getProperty(\"debugMode\")) {\n Logger.debug(\"[MetaUI]\", `Accepted external injection for ${propertyName}`, \"DataSyncDelegate\");\n }\n\n this.host.setBaseProperty(propertyName, value, true);\n\n const stateManager = this.host.getStateManager();\n if (!stateManager) {\n this.host.invalidate();\n return;\n }\n\n try {\n stateManager.getModel().setData(incomingObj, false);\n\n if (!this.host.getProperty(\"schemaDefinition\") && typeof this.host.getParsedSchema === \"function\") {\n const newInferredSchema = SchemaNormalizer.inferSchemaFromData(incomingObj);\n const parsedSchema = this.host.getParsedSchema();\n if (!deepEqual(newInferredSchema, parsedSchema)) {\n this.host.tearDownGeneratedLayout();\n this.host.invalidate();\n }\n }\n } catch (e) {\n const msg = `Failed to hot-swap ${propertyName}: ` + (e as Error).message;\n Logger.error(\"[MetaUI]\", msg, \"DataSyncDelegate\");\n throw new Error(msg);\n }\n }\n\n /**\n * Recursively scans an ISchema for `default` properties and injects them into the rootData \n * object if those properties are currently undefined.\n * \n * @param schema The MetaUI ISchema tree.\n * @param rootData The data payload to mutate.\n */\n public injectSchemaDefaults(schema: unknown, rootData: unknown, depth: number = 0): void {\n if (!schema || !rootData || typeof rootData !== \"object\" || depth > 8) return;\n\n if (schema.type === \"object\" && schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const propSchema = schema.properties[key];\n \n if (rootData[key] === undefined) {\n if (propSchema.default !== undefined) {\n rootData[key] = propSchema.default;\n } else if (propSchema.type === \"object\") {\n const tempObj = {};\n this.injectSchemaDefaults(propSchema, tempObj, depth + 1);\n if (Object.keys(tempObj).length > 0) {\n rootData[key] = tempObj;\n }\n }\n } else if (typeof rootData[key] === \"object\" && rootData[key] !== null) {\n this.injectSchemaDefaults(propSchema, rootData[key], depth + 1);\n }\n }\n } else if (schema.type === \"array\" && schema.items && Array.isArray(rootData)) {\n for (let i = 0; i < rootData.length; i++) {\n if (typeof rootData[i] === \"object\" && rootData[i] !== null) {\n this.injectSchemaDefaults(schema.items, rootData[i], depth + 1);\n }\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -118,4 +118,41 @@ export class DataSyncDelegate {
|
|
|
118
118
|
throw new Error(msg);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Recursively scans an ISchema for `default` properties and injects them into the rootData
|
|
124
|
+
* object if those properties are currently undefined.
|
|
125
|
+
*
|
|
126
|
+
* @param schema The MetaUI ISchema tree.
|
|
127
|
+
* @param rootData The data payload to mutate.
|
|
128
|
+
*/
|
|
129
|
+
public injectSchemaDefaults(schema: unknown, rootData: unknown, depth: number = 0): void {
|
|
130
|
+
if (!schema || !rootData || typeof rootData !== "object" || depth > 8) return;
|
|
131
|
+
|
|
132
|
+
if (schema.type === "object" && schema.properties) {
|
|
133
|
+
for (const key of Object.keys(schema.properties)) {
|
|
134
|
+
const propSchema = schema.properties[key];
|
|
135
|
+
|
|
136
|
+
if (rootData[key] === undefined) {
|
|
137
|
+
if (propSchema.default !== undefined) {
|
|
138
|
+
rootData[key] = propSchema.default;
|
|
139
|
+
} else if (propSchema.type === "object") {
|
|
140
|
+
const tempObj = {};
|
|
141
|
+
this.injectSchemaDefaults(propSchema, tempObj, depth + 1);
|
|
142
|
+
if (Object.keys(tempObj).length > 0) {
|
|
143
|
+
rootData[key] = tempObj;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
} else if (typeof rootData[key] === "object" && rootData[key] !== null) {
|
|
147
|
+
this.injectSchemaDefaults(propSchema, rootData[key], depth + 1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} else if (schema.type === "array" && schema.items && Array.isArray(rootData)) {
|
|
151
|
+
for (let i = 0; i < rootData.length; i++) {
|
|
152
|
+
if (typeof rootData[i] === "object" && rootData[i] !== null) {
|
|
153
|
+
this.injectSchemaDefaults(schema.items, rootData[i], depth + 1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
121
158
|
}
|
|
@@ -1,28 +1,11 @@
|
|
|
1
|
-
sap.ui.define([], function () {
|
|
1
|
+
sap.ui.define(["../utils/Logger"], function (___utils_Logger) {
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
|
-
function __ui5_require_async(path) {
|
|
5
|
-
return new Promise(function (resolve, reject) {
|
|
6
|
-
sap.ui.require([path], function (module) {
|
|
7
|
-
if (!(module && module.__esModule)) {
|
|
8
|
-
module = module === null || !(typeof module === "object" && path.endsWith("/library")) ? {
|
|
9
|
-
default: module
|
|
10
|
-
} : module;
|
|
11
|
-
Object.defineProperty(module, "__esModule", {
|
|
12
|
-
value: true
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
resolve(module);
|
|
16
|
-
}, function (err) {
|
|
17
|
-
reject(err);
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
4
|
/**
|
|
22
5
|
* @file DefaultLayoutGenerator.ts
|
|
23
6
|
* @description Automatically synthesizes a default UI layout for schemas that lack an explicit mapping.
|
|
24
7
|
*/
|
|
25
|
-
|
|
8
|
+
const Logger = ___utils_Logger["Logger"];
|
|
26
9
|
/**
|
|
27
10
|
* Encapsulates the logic to dynamically build a safe, default layout orchestration
|
|
28
11
|
* when the developer or backend fails to provide an explicit `uiLayout`.
|
|
@@ -78,22 +61,18 @@ sap.ui.define([], function () {
|
|
|
78
61
|
try {
|
|
79
62
|
const prop = props[key];
|
|
80
63
|
const currentPath = `${basePath}/${key}`;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
type: "Control",
|
|
90
|
-
scope: currentPath
|
|
91
|
-
});
|
|
92
|
-
}
|
|
64
|
+
|
|
65
|
+
// We do not recursively inline nested objects as Groups.
|
|
66
|
+
// MetaUI handles nested objects dynamically via the ObjectPlugin drill-down dialog.
|
|
67
|
+
// This prevents duplicate Tables and infinite recursion on circular $refs.
|
|
68
|
+
elements.push({
|
|
69
|
+
type: "Control",
|
|
70
|
+
scope: currentPath
|
|
71
|
+
});
|
|
93
72
|
} catch (error) {
|
|
94
73
|
// Do not swallow errors. A failure to synthesize a property is a critical failure.
|
|
95
74
|
const msg = `[MetaUI] DefaultLayoutGenerator failed to synthesize property '${key}': ${error.message}`;
|
|
96
|
-
|
|
75
|
+
Logger.error(msg);
|
|
97
76
|
throw new Error(msg);
|
|
98
77
|
}
|
|
99
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultLayoutGenerator-dbg.js","names":["DefaultLayoutGenerator","ensureLayout","schema","uiLayout","Array","isArray","length","type","props","items","properties","Object","keys","elements","generateElementsFromProperties","filter","e","label","title","basePath","key","prop","currentPath","push","
|
|
1
|
+
{"version":3,"file":"DefaultLayoutGenerator-dbg.js","names":["Logger","___utils_Logger","DefaultLayoutGenerator","ensureLayout","schema","uiLayout","Array","isArray","length","type","props","items","properties","Object","keys","elements","generateElementsFromProperties","filter","e","label","title","basePath","key","prop","currentPath","push","scope","error","msg","message","Error","__exports","__esModule"],"sources":["DefaultLayoutGenerator.ts"],"sourcesContent":["/**\n * @file DefaultLayoutGenerator.ts\n * @description Automatically synthesizes a default UI layout for schemas that lack an explicit mapping.\n */\n\nimport { ISchema, ILayoutElement } from \"../interfaces/ISchema\";\nimport { Logger } from \"../utils/Logger\";\n\n/**\n * Encapsulates the logic to dynamically build a safe, default layout orchestration\n * when the developer or backend fails to provide an explicit `uiLayout`.\n * \n * By elevating this into a dedicated utility, we avoid polluting layout engines\n * (like FormLayout or TableLayout) with structural inference responsibilities.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class DefaultLayoutGenerator {\n /**\n * Inspects a schema. If it has properties but no `uiLayout`, it synthesizes a default.\n * @param schema The ISchema dictionary.\n * @returns boolean True if a layout was synthesized, false if it already existed or was empty.\n */\n public static ensureLayout(schema: ISchema): boolean {\n // If it already has a valid array, do nothing\n if (schema.uiLayout && Array.isArray(schema.uiLayout) && schema.uiLayout.length > 0) {\n return false;\n }\n\n const isArray = schema.type === \"array\";\n const props = isArray ? schema.items?.properties : schema.properties;\n\n if (!props || Object.keys(props).length === 0) {\n return false; // Nothing to map\n }\n\n const elements = this.generateElementsFromProperties(props, \"#/properties\");\n\n if (isArray) {\n // Table layouts expect an array of flat Controls at the root uiLayout\n // For tables, we flatten the deep elements or just render the root level\n // To keep it safe, we'll just use the flat elements for tables\n schema.uiLayout = elements.filter(e => e.type === \"Control\");\n } else {\n // Form layouts expect a grouped structure\n schema.uiLayout = [\n {\n type: \"Group\",\n label: schema.title,\n elements: elements\n }\n ];\n }\n\n return true;\n }\n\n /**\n * Recursively traverses property metadata to synthesize generic Group and Control layout definitions.\n * @param props The properties object from the schema.\n * @param basePath The absolute JSON scope path to prefix bindings.\n * @returns An array of generated layout element descriptors.\n */\n private static generateElementsFromProperties(props: Record<string, import(\"../interfaces/ISchema\").IPropertyMetadata>, basePath: string): ILayoutElement[] {\n const elements: ILayoutElement[] = [];\n for (const key of Object.keys(props)) {\n try {\n const prop = props[key];\n const currentPath = `${basePath}/${key}`;\n\n // We do not recursively inline nested objects as Groups.\n // MetaUI handles nested objects dynamically via the ObjectPlugin drill-down dialog.\n // This prevents duplicate Tables and infinite recursion on circular $refs.\n elements.push({\n type: \"Control\",\n scope: currentPath\n });\n } catch (error) {\n // Do not swallow errors. A failure to synthesize a property is a critical failure.\n const msg = `[MetaUI] DefaultLayoutGenerator failed to synthesize property '${key}': ${(error as Error).message}`;\n Logger.error(msg);\n throw new Error(msg);\n }\n }\n return elements;\n }\n}\n"],"mappings":";;;EAAA;AACA;AACA;AACA;EAHA,MAMSA,MAAM,GAAAC,eAAA;EAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACO,MAAMC,sBAAsB,CAAC;IAChC;AACJ;AACA;AACA;AACA;IACI,OAAcC,YAAYA,CAACC,MAAe,EAAW;MACjD;MACA,IAAIA,MAAM,CAACC,QAAQ,IAAIC,KAAK,CAACC,OAAO,CAACH,MAAM,CAACC,QAAQ,CAAC,IAAID,MAAM,CAACC,QAAQ,CAACG,MAAM,GAAG,CAAC,EAAE;QACjF,OAAO,KAAK;MAChB;MAEA,MAAMD,OAAO,GAAGH,MAAM,CAACK,IAAI,KAAK,OAAO;MACvC,MAAMC,KAAK,GAAGH,OAAO,GAAGH,MAAM,CAACO,KAAK,EAAEC,UAAU,GAAGR,MAAM,CAACQ,UAAU;MAEpE,IAAI,CAACF,KAAK,IAAIG,MAAM,CAACC,IAAI,CAACJ,KAAK,CAAC,CAACF,MAAM,KAAK,CAAC,EAAE;QAC3C,OAAO,KAAK,CAAC,CAAC;MAClB;MAEA,MAAMO,QAAQ,GAAG,IAAI,CAACC,8BAA8B,CAACN,KAAK,EAAE,cAAc,CAAC;MAE3E,IAAIH,OAAO,EAAE;QACT;QACA;QACA;QACAH,MAAM,CAACC,QAAQ,GAAGU,QAAQ,CAACE,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACT,IAAI,KAAK,SAAS,CAAC;MAChE,CAAC,MAAM;QACH;QACAL,MAAM,CAACC,QAAQ,GAAG,CACd;UACII,IAAI,EAAE,OAAO;UACbU,KAAK,EAAEf,MAAM,CAACgB,KAAK;UACnBL,QAAQ,EAAEA;QACd,CAAC,CACJ;MACL;MAEA,OAAO,IAAI;IACf;;IAEA;AACJ;AACA;AACA;AACA;AACA;IACI,OAAeC,8BAA8BA,CAACN,KAAwE,EAAEW,QAAgB,EAAoB;MACxJ,MAAMN,QAA0B,GAAG,EAAE;MACrC,KAAK,MAAMO,GAAG,IAAIT,MAAM,CAACC,IAAI,CAACJ,KAAK,CAAC,EAAE;QAClC,IAAI;UACA,MAAMa,IAAI,GAAGb,KAAK,CAACY,GAAG,CAAC;UACvB,MAAME,WAAW,GAAG,GAAGH,QAAQ,IAAIC,GAAG,EAAE;;UAExC;UACA;UACA;UACAP,QAAQ,CAACU,IAAI,CAAC;YACVhB,IAAI,EAAE,SAAS;YACfiB,KAAK,EAAEF;UACX,CAAC,CAAC;QACN,CAAC,CAAC,OAAOG,KAAK,EAAE;UACZ;UACA,MAAMC,GAAG,GAAG,kEAAkEN,GAAG,MAAOK,KAAK,CAAWE,OAAO,EAAE;UACjH7B,MAAM,CAAC2B,KAAK,CAACC,GAAG,CAAC;UACjB,MAAM,IAAIE,KAAK,CAACF,GAAG,CAAC;QACxB;MACJ;MACA,OAAOb,QAAQ;IACnB;EACJ;EAAC,IAAAgB,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAA7B,sBAAA,GAAAA,sBAAA;EAAA,OAAA6B,SAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultLayoutGenerator.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,wDAAwD,CAAC;IACxE;;;OAGG;IAEH,OAAO,EAAE,OAAO,EAAkB,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"DefaultLayoutGenerator.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/core/DefaultLayoutGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,wDAAwD,CAAC;IACxE;;;OAGG;IAEH,OAAO,EAAE,OAAO,EAAkB,MAAM,+CAA+C,CAAC;IAGxF;;;;;;;;;OASG;IACH,MAAa,sBAAsB;QAC/B;;;;WAIG;eACW,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;QAkCpD;;;;;WAKG;QACH,OAAO,CAAC,MAAM,CAAC,8BAA8B;KAuBhD;CAEA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define([],function(){"use strict";
|
|
1
|
+
sap.ui.define(["../utils/Logger"],function(e){"use strict";const t=e["Logger"];class r{static ensureLayout(e){if(e.uiLayout&&Array.isArray(e.uiLayout)&&e.uiLayout.length>0){return false}const t=e.type==="array";const r=t?e.items?.properties:e.properties;if(!r||Object.keys(r).length===0){return false}const o=this.generateElementsFromProperties(r,"#/properties");if(t){e.uiLayout=o.filter(e=>e.type==="Control")}else{e.uiLayout=[{type:"Group",label:e.title,elements:o}]}return true}static generateElementsFromProperties(e,r){const o=[];for(const s of Object.keys(e)){try{const t=e[s];const n=`${r}/${s}`;o.push({type:"Control",scope:n})}catch(e){const r=`[MetaUI] DefaultLayoutGenerator failed to synthesize property '${s}': ${e.message}`;t.error(r);throw new Error(r)}}return o}}var o={__esModule:true};o.DefaultLayoutGenerator=r;return o});
|
|
2
2
|
//# sourceMappingURL=DefaultLayoutGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultLayoutGenerator.js","names":["DefaultLayoutGenerator","ensureLayout","schema","uiLayout","Array","isArray","length","type","props","items","properties","Object","keys","elements","this","generateElementsFromProperties","filter","e","label","title","basePath","key","prop","currentPath","push","
|
|
1
|
+
{"version":3,"file":"DefaultLayoutGenerator.js","names":["Logger","___utils_Logger","DefaultLayoutGenerator","ensureLayout","schema","uiLayout","Array","isArray","length","type","props","items","properties","Object","keys","elements","this","generateElementsFromProperties","filter","e","label","title","basePath","key","prop","currentPath","push","scope","error","msg","message","Error","__exports","__esModule"],"sources":["DefaultLayoutGenerator.ts"],"sourcesContent":["/**\n * @file DefaultLayoutGenerator.ts\n * @description Automatically synthesizes a default UI layout for schemas that lack an explicit mapping.\n */\n\nimport { ISchema, ILayoutElement } from \"../interfaces/ISchema\";\nimport { Logger } from \"../utils/Logger\";\n\n/**\n * Encapsulates the logic to dynamically build a safe, default layout orchestration\n * when the developer or backend fails to provide an explicit `uiLayout`.\n * \n * By elevating this into a dedicated utility, we avoid polluting layout engines\n * (like FormLayout or TableLayout) with structural inference responsibilities.\n * \n * @namespace nz.co.siliconst.ui5.metaui.core\n * @public\n */\nexport class DefaultLayoutGenerator {\n /**\n * Inspects a schema. If it has properties but no `uiLayout`, it synthesizes a default.\n * @param schema The ISchema dictionary.\n * @returns boolean True if a layout was synthesized, false if it already existed or was empty.\n */\n public static ensureLayout(schema: ISchema): boolean {\n // If it already has a valid array, do nothing\n if (schema.uiLayout && Array.isArray(schema.uiLayout) && schema.uiLayout.length > 0) {\n return false;\n }\n\n const isArray = schema.type === \"array\";\n const props = isArray ? schema.items?.properties : schema.properties;\n\n if (!props || Object.keys(props).length === 0) {\n return false; // Nothing to map\n }\n\n const elements = this.generateElementsFromProperties(props, \"#/properties\");\n\n if (isArray) {\n // Table layouts expect an array of flat Controls at the root uiLayout\n // For tables, we flatten the deep elements or just render the root level\n // To keep it safe, we'll just use the flat elements for tables\n schema.uiLayout = elements.filter(e => e.type === \"Control\");\n } else {\n // Form layouts expect a grouped structure\n schema.uiLayout = [\n {\n type: \"Group\",\n label: schema.title,\n elements: elements\n }\n ];\n }\n\n return true;\n }\n\n /**\n * Recursively traverses property metadata to synthesize generic Group and Control layout definitions.\n * @param props The properties object from the schema.\n * @param basePath The absolute JSON scope path to prefix bindings.\n * @returns An array of generated layout element descriptors.\n */\n private static generateElementsFromProperties(props: Record<string, import(\"../interfaces/ISchema\").IPropertyMetadata>, basePath: string): ILayoutElement[] {\n const elements: ILayoutElement[] = [];\n for (const key of Object.keys(props)) {\n try {\n const prop = props[key];\n const currentPath = `${basePath}/${key}`;\n\n // We do not recursively inline nested objects as Groups.\n // MetaUI handles nested objects dynamically via the ObjectPlugin drill-down dialog.\n // This prevents duplicate Tables and infinite recursion on circular $refs.\n elements.push({\n type: \"Control\",\n scope: currentPath\n });\n } catch (error) {\n // Do not swallow errors. A failure to synthesize a property is a critical failure.\n const msg = `[MetaUI] DefaultLayoutGenerator failed to synthesize property '${key}': ${(error as Error).message}`;\n Logger.error(msg);\n throw new Error(msg);\n }\n }\n return elements;\n }\n}\n"],"mappings":"2DAAA,MAMSA,EAAMC,EAAA,UAYR,MAAMC,EAMT,mBAAcC,CAAaC,GAEvB,GAAIA,EAAOC,UAAYC,MAAMC,QAAQH,EAAOC,WAAaD,EAAOC,SAASG,OAAS,EAAG,CACjF,OAAO,KACX,CAEA,MAAMD,EAAUH,EAAOK,OAAS,QAChC,MAAMC,EAAQH,EAAUH,EAAOO,OAAOC,WAAaR,EAAOQ,WAE1D,IAAKF,GAASG,OAAOC,KAAKJ,GAAOF,SAAW,EAAG,CAC3C,OAAO,KACX,CAEA,MAAMO,EAAWC,KAAKC,+BAA+BP,EAAO,gBAE5D,GAAIH,EAAS,CAITH,EAAOC,SAAWU,EAASG,OAAOC,GAAKA,EAAEV,OAAS,UACtD,KAAO,CAEHL,EAAOC,SAAW,CACd,CACII,KAAM,QACNW,MAAOhB,EAAOiB,MACdN,SAAUA,GAGtB,CAEA,OAAO,IACX,CAQA,qCAAeE,CAA+BP,EAA0EY,GACpH,MAAMP,EAA6B,GACnC,IAAK,MAAMQ,KAAOV,OAAOC,KAAKJ,GAAQ,CAClC,IACI,MAAMc,EAAOd,EAAMa,GACnB,MAAME,EAAc,GAAGH,KAAYC,IAKnCR,EAASW,KAAK,CACVjB,KAAM,UACNkB,MAAOF,GAEf,CAAE,MAAOG,GAEL,MAAMC,EAAM,kEAAkEN,OAAUK,EAAgBE,UACxG9B,EAAO4B,MAAMC,GACb,MAAM,IAAIE,MAAMF,EACpB,CACJ,CACA,OAAOd,CACX,EACH,IAAAiB,EAAA,CAAAC,WAAA,MAAAD,EAAA9B,yBAAA,OAAA8B,CAAA","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { ISchema, ILayoutElement } from "../interfaces/ISchema";
|
|
7
|
+
import { Logger } from "../utils/Logger";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Encapsulates the logic to dynamically build a safe, default layout orchestration
|
|
@@ -68,22 +69,17 @@ export class DefaultLayoutGenerator {
|
|
|
68
69
|
const prop = props[key];
|
|
69
70
|
const currentPath = `${basePath}/${key}`;
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
elements.push({
|
|
79
|
-
type: "Control",
|
|
80
|
-
scope: currentPath
|
|
81
|
-
});
|
|
82
|
-
}
|
|
72
|
+
// We do not recursively inline nested objects as Groups.
|
|
73
|
+
// MetaUI handles nested objects dynamically via the ObjectPlugin drill-down dialog.
|
|
74
|
+
// This prevents duplicate Tables and infinite recursion on circular $refs.
|
|
75
|
+
elements.push({
|
|
76
|
+
type: "Control",
|
|
77
|
+
scope: currentPath
|
|
78
|
+
});
|
|
83
79
|
} catch (error) {
|
|
84
80
|
// Do not swallow errors. A failure to synthesize a property is a critical failure.
|
|
85
81
|
const msg = `[MetaUI] DefaultLayoutGenerator failed to synthesize property '${key}': ${(error as Error).message}`;
|
|
86
|
-
|
|
82
|
+
Logger.error(msg);
|
|
87
83
|
throw new Error(msg);
|
|
88
84
|
}
|
|
89
85
|
}
|
|
@@ -28,6 +28,8 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
|
|
|
28
28
|
|
|
29
29
|
/** Deterministic scope ID injected by the host control to prevent clone collisions. */
|
|
30
30
|
|
|
31
|
+
/** Reference to the GeneratorHost that instantiated this engine, for retrieving global definitions. */
|
|
32
|
+
|
|
31
33
|
/** Callback to notify the host that an internal field changed. */
|
|
32
34
|
|
|
33
35
|
/** Tracks whether the entire engine is running in Editable mode. */
|
|
@@ -104,7 +106,9 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
|
|
|
104
106
|
generateField(fieldMeta, bindingPath, modelName, isTemplate = false) {
|
|
105
107
|
try {
|
|
106
108
|
const plugin = PluginRegistry.getInstance().getPlugin(fieldMeta.type || "string", fieldMeta.ui?.widget);
|
|
107
|
-
plugin.setEditable
|
|
109
|
+
if (typeof plugin.setEditable === "function") {
|
|
110
|
+
plugin.setEditable(this.isEditable);
|
|
111
|
+
}
|
|
108
112
|
if (typeof plugin.setUseMessageManager === "function") {
|
|
109
113
|
plugin.setUseMessageManager(this.useMessageManager);
|
|
110
114
|
}
|
|
@@ -115,7 +119,7 @@ sap.ui.define(["./ConditionEngine", "./PluginRegistry", "sap/m/Text", "../utils/
|
|
|
115
119
|
});
|
|
116
120
|
}
|
|
117
121
|
const scopeId = isTemplate ? undefined : this.engineScopeId;
|
|
118
|
-
const control = plugin.render(fieldMeta, bindingPath, modelName, scopeId, this.onChange);
|
|
122
|
+
const control = plugin.render(fieldMeta, bindingPath, modelName, scopeId, this.onChange, this.activeModel);
|
|
119
123
|
if (this.conditionEngine) {
|
|
120
124
|
this.conditionEngine.registerPlugin(bindingPath, plugin);
|
|
121
125
|
}
|