0.1.15 • Published 6 months ago

@ez-aem/cfm-to-jsonschema v0.1.15

Weekly downloads
-
License
Apache-2.0
Repository
-
Last release
6 months ago

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.

0.1.10

7 months ago

0.1.11

7 months ago

0.1.12

6 months ago

0.1.13

6 months ago

0.1.14

6 months ago

0.1.15

6 months ago

0.1.8

10 months ago

0.1.7

10 months ago

0.1.9

10 months ago

0.1.6

12 months ago

0.1.5

12 months ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago