@ez-aem/cfm-to-jsonschema
TypeScript icon, indicating that this package has built-in type declarations

0.1.15 • Public • Published

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.

Readme

Keywords

none

Package Sidebar

Install

npm i @ez-aem/cfm-to-jsonschema

Weekly Downloads

3

Version

0.1.15

License

Apache-2.0

Unpacked Size

35.2 kB

Total Files

5

Last publish

Collaborators

  • bkheadwire
  • dna113p
  • gastongonzalez
  • golinski
  • fanki
  • ez-aem-owner