aem-mcp-server
Version:
AEM MCP server. Chat with your AEM instance for content, component, and asset operations.
2 lines (1 loc) • 1.77 kB
JavaScript
;export class JsonMergeError extends Error{code;constructor(t,o){super(o),this.name="JsonMergeError",this.code=t}}function u(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function l(r){return r.replace(/~1/g,"/").replace(/~0/g,"~")}export function resolveJsonPointer(r,t){if(t==="")return r;if(!t.startsWith("/"))throw new JsonMergeError("INVALID_PARAMETERS",`Invalid JSON pointer "${t}": must be empty or start with "/".`);const o=t.split("/").slice(1).map(l);let n=r;for(const e of o)if(Array.isArray(n)){const s=Number(e);if(!Number.isInteger(s)||s<0||s>=n.length)throw new JsonMergeError("VALIDATION_FAILED",`JSON pointer "${t}" does not resolve: array index "${e}" out of range.`);n=n[s]}else if(u(n)){if(!Object.prototype.hasOwnProperty.call(n,e))throw new JsonMergeError("VALIDATION_FAILED",`JSON pointer "${t}" does not resolve: key "${e}" not found.`);n=n[e]}else throw new JsonMergeError("VALIDATION_FAILED",`JSON pointer "${t}" does not resolve: cannot descend into a non-object at token "${e}".`);return n}function a(r,t){const o=[],n=[];for(const e of Object.keys(t)){(Object.prototype.hasOwnProperty.call(r,e)?n:o).push(e);const i=t[e],c=r[e];u(c)&&u(i)?a(c,i):r[e]=i}return{added:o,overwritten:n}}export function mergeJsonString(r,t,o){let n;try{n=JSON.parse(r)}catch(d){throw new JsonMergeError("VALIDATION_FAILED",`Field value is not valid JSON: ${d.message}`)}const e=resolveJsonPointer(n,t);if(!u(e))throw new JsonMergeError("VALIDATION_FAILED",`JSON pointer "${t}" must resolve to a JSON object, but resolved to ${Array.isArray(e)?"an array":typeof e}.`);const s=Object.keys(e).length,{added:i,overwritten:c}=a(e,o),g=Object.keys(e).length;return{result:JSON.stringify(n),added:i,overwritten:c,beforeKeyCount:s,afterKeyCount:g}}