@ez-aem/cfm-to-jsonschema
v0.1.15
Published
This package can convert AEM Content Fragment Models to JSON schemas. The main export is the function:
Downloads
8
Keywords
Readme
This package can convert AEM Content Fragment Models to JSON schemas. The main export is the function:
dataToJsonSchema(cfms, data)
: converts a collection of CFMs, e.g., all the CFMs under a single configuration and a content fragment to a JSON schema corresponding to that content fragment (i.e., so that possible edits of the content fragment can be validated against this schema)
We extract CFMs from AEM using querybuilder, similarly to this:
http://localhost:4502/bin/querybuilder.json?path=%2Fconf%2Faem-demo-assets%2Fsettings%2Fdam%2Fcfm%2Fmodels&property=jcr%3AprimaryType&property.value=cq%3ATemplate&p.hits=full&p.nodedepth=-1&p.limit=-1
From the command line:
$ curl -u admin:admin -G \
'http://localhost:4502/bin/querybuilder.json' \
-d 'path=/conf/aem-demo-assets/settings/dam/cfm/models' \
-d 'property=jcr:primaryType' \
-d 'property.value=cq:Template' \
-d 'p.hits=full' \
-d 'p.nodedepth=-1' \
-d 'p.limit=-1'
The response has all the COntent fragment models in a single JSON file. While the order of CFM fields in this JSON is the same as in AEM, they are serialized as an object:
{
"jcr:path": "/conf/golfdigest-schools/settings/dam/cfm/models/uischema",
"jcr:content": {
"model": {
"cq:dialog": {
"content": {
"items": {
"jcr:primaryType": "nt:unstructured",
"maxGeneratedOrder": "21",
"1662489388711": {
"jcr:primaryType": "nt:unstructured",
"metaType": "text-single",
},
"1660657247932": {
"jcr:primaryType": "nt:unstructured",
"metaType": "json",
}
}
}
}
}
}
}
Fortunately the numerical keys are all longer than 10 digits (if the model was edited through the AEM UI only), so JSON.parse
keeps the order while parsing the JSON, but to make this explicit, we assume an augmented object, that looks like this:
{
"jcr:path": "/conf/golfdigest-schools/settings/dam/cfm/models/uischema",
"jcr:content": {
"model": {
"cq:dialog": {
"content": {
"items": [
{
"key": "jcr:primaryType",
"value": "nt:unstructured"
},
{
"key": "maxGeneratedOrder",
"value": "21"
},
{
"key": "1662489388711",
"value": {
"jcr:primaryType": "nt:unstructured",
"metaType": "text-single",
}
},
{
"key": "1660657247932",
"value": {
"jcr:primaryType": "nt:unstructured",
"metaType": "json",
}
},
]
}
}
}
}
}
Two util functions augmentCfm(cfm)
and putCfmFieldsIntoArrays(queryBuilderHits)
help with the conversion.