@@ -1425,6 +1425,9 @@ export class ExampleGenerator extends AmfHelperMixin(Object) {
1425
1425
return this . _computeJsonPropertyValue ( oneOfOptions [ 0 ] , typeName ) ;
1426
1426
}
1427
1427
}
1428
+ if ( this . _hasType ( range , this . ns . w3 . shacl . Shape ) ) {
1429
+ return this . _computeJsonOrValue ( range ) ;
1430
+ }
1428
1431
return undefined ;
1429
1432
}
1430
1433
@@ -1649,6 +1652,43 @@ export class ExampleGenerator extends AmfHelperMixin(Object) {
1649
1652
return examples . reduce ( ( acc , value ) => ( { ...acc , ...value } ) , { } ) ;
1650
1653
}
1651
1654
1655
+ /**
1656
+ * Computes a JSON object or value from a given range.
1657
+ *
1658
+ * @param {Object } range AMF's range definition for a shape.
1659
+ * @return {any|undefined } A JavaScript object or value computed from the range.
1660
+ */
1661
+ _computeJsonOrValue ( range ) {
1662
+ const key = this . _getAmfKey ( this . ns . w3 . shacl . or ) ;
1663
+ const list = this . _ensureArray ( range [ key ] ) ;
1664
+ if ( ! list ) {
1665
+ return undefined ;
1666
+ }
1667
+
1668
+ const examples = [ ] ;
1669
+ const anyOfKey = this . _getAmfKey ( this . ns . aml . vocabularies . shapes . anyOf ) ;
1670
+
1671
+ // Iterate over all items in the list
1672
+ for ( const item of list ) {
1673
+ const properties = this . _ensureArray ( item [ anyOfKey ] ) ;
1674
+ if ( properties ) {
1675
+ // Iterate over all properties to get all propertiesSchemas
1676
+ for ( const property of properties ) {
1677
+ const propertiesSchemas = this . _listProperties ( property ) ;
1678
+ if ( propertiesSchemas ) {
1679
+ const propertiesExamples = this . _jsonExampleFromProperties ( propertiesSchemas ) ;
1680
+ if ( propertiesExamples && typeof propertiesExamples === 'object' ) {
1681
+ examples . push ( propertiesExamples ) ;
1682
+ }
1683
+ }
1684
+ }
1685
+ }
1686
+ }
1687
+
1688
+ // Merge all examples into a single object
1689
+ return examples . reduce ( ( acc , value ) => ( { ...acc , ...value } ) , { } ) ;
1690
+ }
1691
+
1652
1692
/**
1653
1693
* Computes JSON object as an example from a range that is an object.
1654
1694
*
0 commit comments