{"version":3,"file":"splitChangesByGraph.mjs","names":["quad","createQuad"],"sources":["../../src/util/splitChangesByGraph.ts"],"sourcesContent":["import { createDataset } from \"@ldo/dataset\";\nimport type { GraphNode, DatasetChanges } from \"@ldo/rdf-utils\";\nimport type { Quad } from \"@rdfjs/types\";\nimport { defaultGraph, namedNode, quad as createQuad } from \"@ldo/rdf-utils\";\n\n/**\n * @internal\n * Converts an RDFJS Graph Node to a string hash\n * @param graphNode - the node to convert\n * @returns a unique string corresponding to the node\n */\nexport function graphNodeToString(graphNode: GraphNode): string {\n  return graphNode.termType === \"DefaultGraph\"\n    ? \"defaultGraph()\"\n    : graphNode.value;\n}\n\n/**\n * @internal\n * Converts a unique string to a GraphNode\n * @param input - the unique string\n * @returns A graph node\n */\nexport function stringToGraphNode(input: string): GraphNode {\n  return input === \"defaultGraph()\" ? defaultGraph() : namedNode(input);\n}\n\n/**\n * Splits all changes in a DatasetChanges into individual DatasetChanges grouped\n * by the quad graph.\n * @param changes - Changes to split\n * @returns A map between the quad graph and the changes associated with that\n * graph\n */\nexport function splitChangesByGraph(\n  changes: DatasetChanges<Quad>,\n): Map<GraphNode, DatasetChanges<Quad>> {\n  const changesMap: Record<string, DatasetChanges<Quad>> = {};\n  changes.added?.forEach((quad) => {\n    const graphHash = graphNodeToString(quad.graph as GraphNode);\n    if (!changesMap[graphHash]) {\n      changesMap[graphHash] = {};\n    }\n    if (!changesMap[graphHash].added) {\n      changesMap[graphHash].added = createDataset();\n    }\n    changesMap[graphHash].added?.add(\n      createQuad(quad.subject, quad.predicate, quad.object, quad.graph),\n    );\n  });\n\n  changes.removed?.forEach((quad) => {\n    const graphHash = graphNodeToString(quad.graph as GraphNode);\n    if (!changesMap[graphHash]) {\n      changesMap[graphHash] = {};\n    }\n    if (!changesMap[graphHash].removed) {\n      changesMap[graphHash].removed = createDataset();\n    }\n    changesMap[graphHash].removed?.add(\n      createQuad(quad.subject, quad.predicate, quad.object, quad.graph),\n    );\n  });\n\n  const finalMap = new Map<GraphNode, DatasetChanges<Quad>>();\n  Object.entries(changesMap).forEach(([key, value]) => {\n    finalMap.set(stringToGraphNode(key), value);\n  });\n  return finalMap;\n}\n"],"mappings":";;;;;;;;;AAWA,SAAgB,kBAAkB,WAA8B;AAC9D,QAAO,UAAU,aAAa,iBAC1B,mBACA,UAAU;;;;;;;;AAShB,SAAgB,kBAAkB,OAA0B;AAC1D,QAAO,UAAU,mBAAmB,cAAc,GAAG,UAAU,MAAM;;;;;;;;;AAUvE,SAAgB,oBACd,SACsC;CACtC,MAAM,aAAmD,EAAE;AAC3D,SAAQ,OAAO,SAAS,WAAS;EAC/B,MAAM,YAAY,kBAAkBA,OAAK,MAAmB;AAC5D,MAAI,CAAC,WAAW,WACd,YAAW,aAAa,EAAE;AAE5B,MAAI,CAAC,WAAW,WAAW,MACzB,YAAW,WAAW,QAAQ,eAAe;AAE/C,aAAW,WAAW,OAAO,IAC3BC,KAAWD,OAAK,SAASA,OAAK,WAAWA,OAAK,QAAQA,OAAK,MAAM,CAClE;GACD;AAEF,SAAQ,SAAS,SAAS,WAAS;EACjC,MAAM,YAAY,kBAAkBA,OAAK,MAAmB;AAC5D,MAAI,CAAC,WAAW,WACd,YAAW,aAAa,EAAE;AAE5B,MAAI,CAAC,WAAW,WAAW,QACzB,YAAW,WAAW,UAAU,eAAe;AAEjD,aAAW,WAAW,SAAS,IAC7BC,KAAWD,OAAK,SAASA,OAAK,WAAWA,OAAK,QAAQA,OAAK,MAAM,CAClE;GACD;CAEF,MAAM,2BAAW,IAAI,KAAsC;AAC3D,QAAO,QAAQ,WAAW,CAAC,SAAS,CAAC,KAAK,WAAW;AACnD,WAAS,IAAI,kBAAkB,IAAI,EAAE,MAAM;GAC3C;AACF,QAAO"}