{"version":3,"file":"TrackingProxyContext.mjs","names":[],"sources":["../../src/trackingProxy/TrackingProxyContext.ts"],"sourcesContent":["import type {\n  ProxyContextOptions,\n  SubjectProxy,\n  SetProxy,\n} from \"@ldo/jsonld-dataset-proxy\";\nimport { ProxyContext } from \"@ldo/jsonld-dataset-proxy\";\nimport type { QuadMatch } from \"@ldo/rdf-utils\";\nimport type {\n  nodeEventListener,\n  SubscribableDataset,\n} from \"@ldo/subscribable-dataset\";\nimport type { BlankNode, NamedNode, Quad } from \"@rdfjs/types\";\nimport { createTrackingSubjectProxy } from \"./TrackingSubjectProxy\";\nimport { createTrackingSetProxy } from \"./TrackingSetProxy\";\n\n/**\n * @internal\n * Options to be passed to the tracking proxy\n */\nexport interface TrackingProxyContextOptions extends ProxyContextOptions {\n  dataset: SubscribableDataset<Quad>;\n}\n\n/**\n * @internal\n * A listener that gets triggered whenever there's an update\n */\n\n/**\n * @internal\n * This proxy exists to ensure react components rerender at the right time. It\n * keeps track of every key accessed in a Linked Data Object and only when the\n * dataset is updated with that key does it rerender the react component.\n */\nexport class TrackingProxyContext extends ProxyContext {\n  private listener: nodeEventListener<Quad>;\n  private subscribableDataset: SubscribableDataset<Quad>;\n\n  constructor(\n    options: TrackingProxyContextOptions,\n    listener: nodeEventListener<Quad>,\n  ) {\n    super(options);\n    this.subscribableDataset = options.dataset;\n    this.listener = listener;\n  }\n\n  // Adds the listener to the subscribable dataset while ensuring deduping of the listener\n  public addListener(eventName: QuadMatch) {\n    const listeners = this.subscribableDataset.listeners(eventName);\n    if (!listeners.includes(this.listener)) {\n      this.subscribableDataset.on(eventName, this.listener);\n    }\n  }\n\n  protected createNewSubjectProxy(node: NamedNode | BlankNode): SubjectProxy {\n    return createTrackingSubjectProxy(this, node);\n  }\n\n  protected createNewSetProxy(\n    quadMatch: QuadMatch,\n    isSubjectOriented?: boolean,\n    isLangStringSet?: boolean,\n  ): SetProxy {\n    return createTrackingSetProxy(\n      this,\n      quadMatch,\n      isSubjectOriented,\n      isLangStringSet,\n    );\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;AAkCA,IAAa,uBAAb,cAA0C,aAAa;CAIrD,YACE,SACA,UACA;AACA,QAAM,QAAQ;AACd,OAAK,sBAAsB,QAAQ;AACnC,OAAK,WAAW;;CAIlB,YAAmB,WAAsB;AAEvC,MAAI,CADc,KAAK,oBAAoB,UAAU,UACvC,CAAC,SAAS,KAAK,SAAS,CACpC,MAAK,oBAAoB,GAAG,WAAW,KAAK,SAAS;;CAIzD,sBAAgC,MAA2C;AACzE,SAAO,2BAA2B,MAAM,KAAK;;CAG/C,kBACE,WACA,mBACA,iBACU;AACV,SAAO,uBACL,MACA,WACA,mBACA,gBACD"}