UNPKG

@ez-aem/policies

Version:

Easily Manage AEM Policies and Style System with EZ-AEM Policies.

52 lines (44 loc) 1.79 kB
import { merge } from "lodash"; import { ComponentPolicy } from "./component"; const jcrPrimary = { "@jcr:primaryType": "nt:unstructured" }; export type PagePolicyType = { "@cq:policy"?: string; childPolicies?: string; } export class PagePolicy { readonly "@jcr:primaryType": "nt:unstructured"; readonly "@sling:resourceType": "wcm/core/components/policies/mappings"; "@cq:policy"?: string; childPolicies?: object; constructor(options?: PagePolicyType, children?: object, policies?:ComponentPolicy[]) { this["@jcr:primaryType"] = "nt:unstructured"; this["@sling:resourceType"] = "wcm/core/components/policies/mappings"; if (options && options["@cq:policy"]) this["@cq:policy"] = options["@cq:policy"]; if (children && typeof children === "object") { for (let child in children) { this[child] = children[child]; } } if (options?.childPolicies) { let childPolicies = {}; const childPolicy = { ...jcrPrimary, "@sling:resourceType": this["@sling:resourceType"], } policies .filter((policy:ComponentPolicy) => policy.policy === options.childPolicies) .forEach((policy:ComponentPolicy) => { if (policy["@cq:policy"]) { let policyNodes = {}; const resourceType = policy.component; resourceType.split("/").reverse().forEach((node, index) => { if (index === 0) policyNodes[node] = { ...childPolicy, "@cq:policy": policy["@cq:policy"] }; else policyNodes = { [node]: { ...jcrPrimary, ...policyNodes } }; }); childPolicies = merge({}, childPolicies, policyNodes); } }); for (let child in childPolicies) this[child] = childPolicies[child]; } } }