@ez-aem/policies
Version:
Easily Manage AEM Policies and Style System with EZ-AEM Policies.
52 lines (44 loc) • 1.79 kB
text/typescript
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];
}
}
}