@comunica/actor-query-operation-distinct-hash 4.4.2-alpha.49.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,7 +23,7 @@ After installing, this package can be added to your engine's configuration as fo
23
23
  {
24
24
  "@context": [
25
25
  ...
26
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-distinct-hash/^4.0.0/components/context.jsonld"
26
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-distinct-hash/^5.0.0/components/context.jsonld"
27
27
  ],
28
28
  "actors": [
29
29
  ...
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "@context": [
3
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-distinct-hash/^4.0.0/components/context.jsonld",
4
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^4.0.0/components/context.jsonld",
5
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-query-operation/^4.0.0/components/context.jsonld"
3
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-distinct-hash/^5.0.0/components/context.jsonld",
4
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^5.0.0/components/context.jsonld",
5
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-query-operation/^5.0.0/components/context.jsonld"
6
6
  ],
7
7
  "@id": "npmd:@comunica/actor-query-operation-distinct-hash",
8
8
  "components": [
@@ -63,37 +63,37 @@
63
63
  "genericTypeInstances": [
64
64
  {
65
65
  "@type": "ParameterRangeGenericTypeReference",
66
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
66
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
67
67
  },
68
68
  {
69
69
  "@type": "ParameterRangeGenericTypeReference",
70
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
70
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
71
71
  },
72
72
  {
73
73
  "@type": "ParameterRangeGenericTypeReference",
74
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
74
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
75
75
  },
76
76
  {
77
77
  "@type": "ParameterRangeGenericTypeReference",
78
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
78
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
79
79
  }
80
80
  ]
81
81
  },
82
82
  {
83
83
  "@type": "ParameterRangeGenericTypeReference",
84
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
84
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
85
85
  },
86
86
  {
87
87
  "@type": "ParameterRangeGenericTypeReference",
88
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
88
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
89
89
  },
90
90
  {
91
91
  "@type": "ParameterRangeGenericTypeReference",
92
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
92
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
93
93
  },
94
94
  {
95
95
  "@type": "ParameterRangeGenericTypeReference",
96
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
96
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
97
97
  }
98
98
  ]
99
99
  },
@@ -130,19 +130,19 @@
130
130
  "genericTypeInstances": [
131
131
  {
132
132
  "@type": "ParameterRangeGenericTypeReference",
133
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
133
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
134
134
  },
135
135
  {
136
136
  "@type": "ParameterRangeGenericTypeReference",
137
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
137
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
138
138
  },
139
139
  {
140
140
  "@type": "ParameterRangeGenericTypeReference",
141
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
141
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
142
142
  },
143
143
  {
144
144
  "@type": "ParameterRangeGenericTypeReference",
145
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^4.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
145
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
146
146
  }
147
147
  ]
148
148
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "@context": [
3
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-distinct-hash/^4.0.0/components/context.jsonld"
3
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-distinct-hash/^5.0.0/components/context.jsonld"
4
4
  ],
5
5
  "@id": "npmd:@comunica/actor-query-operation-distinct-hash",
6
6
  "@type": "Module",
@@ -3,7 +3,7 @@
3
3
  "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^6.0.0/components/context.jsonld",
4
4
  {
5
5
  "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/",
6
- "caqodh": "npmd:@comunica/actor-query-operation-distinct-hash/^4.0.0/",
6
+ "caqodh": "npmd:@comunica/actor-query-operation-distinct-hash/^5.0.0/",
7
7
  "ActorQueryOperationDistinctHash": {
8
8
  "@id": "caqodh:components/ActorQueryOperationDistinctHash.jsonld#ActorQueryOperationDistinctHash",
9
9
  "@prefix": true,
@@ -9,8 +9,12 @@ const utils_query_operation_1 = require("@comunica/utils-query-operation");
9
9
  * A comunica Distinct Hash Query Operation Actor.
10
10
  */
11
11
  class ActorQueryOperationDistinctHash extends bus_query_operation_1.ActorQueryOperationTypedMediated {
12
+ mediatorHashBindings;
13
+ mediatorHashQuads;
12
14
  constructor(args) {
13
15
  super(args, utils_algebra_1.Algebra.Types.DISTINCT);
16
+ this.mediatorHashBindings = args.mediatorHashBindings;
17
+ this.mediatorHashQuads = args.mediatorHashQuads;
14
18
  }
15
19
  async testOperation(_operation, _context) {
16
20
  return (0, core_1.passTestVoid)();
@@ -1 +1 @@
1
- {"version":3,"file":"ActorQueryOperationDistinctHash.js","sourceRoot":"","sources":["ActorQueryOperationDistinctHash.ts"],"names":[],"mappings":";;;AAGA,uEAEuC;AAEvC,yCAA8C;AAS9C,2DAAkD;AAClD,2EAAgF;AAIhF;;GAEG;AACH,MAAa,+BAAgC,SAAQ,sDAAkD;IAIrG,YAAmB,IAA0C;QAC3D,KAAK,CAAC,IAAI,EAAE,uBAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,UAA4B,EAAE,QAAwB;QAC/E,OAAO,IAAA,mBAAY,GAAE,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,SAA2B,EAAE,OAAuB;QAC5E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAElG,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,WAAW,GAA+B,IAAA,oCAAY,EAC1D,MAAM,CACP,CAAC;YAEF,MAAM,UAAU,GAA4B,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YAClH,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,UAAU;gBACV,QAAQ,EAAE,WAAW,CAAC,QAAQ;aAC/B,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAkC,IAAA,uCAAe,EACnE,MAAM,CACP,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACnF,MAAM,cAAc,GAAmB,cAAc,CAAC,cAAc;aACjE,MAAM,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QACxD,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,cAAc;YACd,QAAQ,EAAE,cAAc,CAAC,QAAQ;SAClC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,aAAa,CACxB,OAAuB,EACvB,SAAyB;QAEzB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9E,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,OAAO,CAAC,QAAkB,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAW,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,kBAAkB,CAAC,OAAuB;QACrD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAc,EAAE,EAAE;YACxB,MAAM,IAAI,GAAW,YAAY,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC;IACJ,CAAC;CACF;AA3ED,0EA2EC","sourcesContent":["import type { MediatorHashBindings } from '@comunica/bus-hash-bindings';\nimport type { MediatorHashQuads } from '@comunica/bus-hash-quads';\nimport type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport {\n ActorQueryOperationTypedMediated,\n} from '@comunica/bus-query-operation';\nimport type { IActorTest, TestResult } from '@comunica/core';\nimport { passTestVoid } from '@comunica/core';\nimport type {\n Bindings,\n BindingsStream,\n IActionContext,\n IQueryOperationResult,\n IQueryOperationResultBindings,\n IQueryOperationResultQuads,\n} from '@comunica/types';\nimport { Algebra } from '@comunica/utils-algebra';\nimport { getSafeBindings, getSafeQuads } from '@comunica/utils-query-operation';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\n\n/**\n * A comunica Distinct Hash Query Operation Actor.\n */\nexport class ActorQueryOperationDistinctHash extends ActorQueryOperationTypedMediated<Algebra.Distinct> {\n public readonly mediatorHashBindings: MediatorHashBindings;\n public readonly mediatorHashQuads: MediatorHashQuads;\n\n public constructor(args: IActorQueryOperationDistinctHashArgs) {\n super(args, Algebra.Types.DISTINCT);\n }\n\n public async testOperation(_operation: Algebra.Distinct, _context: IActionContext): Promise<TestResult<IActorTest>> {\n return passTestVoid();\n }\n\n public async runOperation(operation: Algebra.Distinct, context: IActionContext): Promise<IQueryOperationResult> {\n const output = await this.mediatorQueryOperation.mediate({ operation: operation.input, context });\n\n if (output.type === 'quads') {\n const outputQuads: IQueryOperationResultQuads = getSafeQuads(\n output,\n );\n\n const quadStream: AsyncIterator<RDF.Quad> = outputQuads.quadStream.filter(await this.newHashFilterQuads(context));\n return {\n type: 'quads',\n quadStream,\n metadata: outputQuads.metadata,\n };\n }\n\n const outputBindings: IQueryOperationResultBindings = getSafeBindings(\n output,\n );\n\n const variables = (await outputBindings.metadata()).variables.map(v => v.variable);\n const bindingsStream: BindingsStream = outputBindings.bindingsStream\n .filter(await this.newHashFilter(context, variables));\n return {\n type: 'bindings',\n bindingsStream,\n metadata: outputBindings.metadata,\n };\n }\n\n /**\n * Create a new distinct filter function.\n * This will maintain an internal hash datastructure so that every bindings object only returns true once.\n * @param context The action context.\n * @param variables The variables to take into account while hashing.\n * @return {(bindings: Bindings) => boolean} A distinct filter for bindings.\n */\n public async newHashFilter(\n context: IActionContext,\n variables: RDF.Variable[],\n ): Promise<(bindings: Bindings) => boolean> {\n const { hashFunction } = await this.mediatorHashBindings.mediate({ context });\n const hashes: Record<number, boolean> = {};\n return (bindings: Bindings) => {\n const hash: number = hashFunction(bindings, variables);\n return !(hash in hashes) && (hashes[hash] = true);\n };\n }\n\n /**\n * Create a new distinct filter function to hash quads.\n * This will maintain an internal hash datastructure so that every quad object only returns true once.\n * @param context The action context.\n * @return {(quad: RDF.Quad) => boolean} A distinct filter for quads.\n */\n public async newHashFilterQuads(context: IActionContext): Promise<(quad: RDF.Quad) => boolean> {\n const { hashFunction } = await this.mediatorHashQuads.mediate({ context });\n const hashes: Record<number, boolean> = {};\n return (quad: RDF.Quad) => {\n const hash: number = hashFunction(quad);\n return !(hash in hashes) && (hashes[hash] = true);\n };\n }\n}\n\nexport interface IActorQueryOperationDistinctHashArgs extends IActorQueryOperationTypedMediatedArgs {\n mediatorHashBindings: MediatorHashBindings;\n mediatorHashQuads: MediatorHashQuads;\n}\n"]}
1
+ {"version":3,"file":"ActorQueryOperationDistinctHash.js","sourceRoot":"","sources":["ActorQueryOperationDistinctHash.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MediatorHashBindings } from '@comunica/bus-hash-bindings';\nimport type { MediatorHashQuads } from '@comunica/bus-hash-quads';\nimport type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport {\n ActorQueryOperationTypedMediated,\n} from '@comunica/bus-query-operation';\nimport type { IActorTest, TestResult } from '@comunica/core';\nimport { passTestVoid } from '@comunica/core';\nimport type {\n Bindings,\n BindingsStream,\n IActionContext,\n IQueryOperationResult,\n IQueryOperationResultBindings,\n IQueryOperationResultQuads,\n} from '@comunica/types';\nimport { Algebra } from '@comunica/utils-algebra';\nimport { getSafeBindings, getSafeQuads } from '@comunica/utils-query-operation';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\n\n/**\n * A comunica Distinct Hash Query Operation Actor.\n */\nexport class ActorQueryOperationDistinctHash extends ActorQueryOperationTypedMediated<Algebra.Distinct> {\n public readonly mediatorHashBindings: MediatorHashBindings;\n public readonly mediatorHashQuads: MediatorHashQuads;\n\n public constructor(args: IActorQueryOperationDistinctHashArgs) {\n super(args, Algebra.Types.DISTINCT);\n this.mediatorHashBindings = args.mediatorHashBindings;\n this.mediatorHashQuads = args.mediatorHashQuads;\n }\n\n public async testOperation(_operation: Algebra.Distinct, _context: IActionContext): Promise<TestResult<IActorTest>> {\n return passTestVoid();\n }\n\n public async runOperation(operation: Algebra.Distinct, context: IActionContext): Promise<IQueryOperationResult> {\n const output = await this.mediatorQueryOperation.mediate({ operation: operation.input, context });\n\n if (output.type === 'quads') {\n const outputQuads: IQueryOperationResultQuads = getSafeQuads(\n output,\n );\n\n const quadStream: AsyncIterator<RDF.Quad> = outputQuads.quadStream.filter(await this.newHashFilterQuads(context));\n return {\n type: 'quads',\n quadStream,\n metadata: outputQuads.metadata,\n };\n }\n\n const outputBindings: IQueryOperationResultBindings = getSafeBindings(\n output,\n );\n\n const variables = (await outputBindings.metadata()).variables.map(v => v.variable);\n const bindingsStream: BindingsStream = outputBindings.bindingsStream\n .filter(await this.newHashFilter(context, variables));\n return {\n type: 'bindings',\n bindingsStream,\n metadata: outputBindings.metadata,\n };\n }\n\n /**\n * Create a new distinct filter function.\n * This will maintain an internal hash datastructure so that every bindings object only returns true once.\n * @param context The action context.\n * @param variables The variables to take into account while hashing.\n * @return {(bindings: Bindings) => boolean} A distinct filter for bindings.\n */\n public async newHashFilter(\n context: IActionContext,\n variables: RDF.Variable[],\n ): Promise<(bindings: Bindings) => boolean> {\n const { hashFunction } = await this.mediatorHashBindings.mediate({ context });\n const hashes: Record<number, boolean> = {};\n return (bindings: Bindings) => {\n const hash: number = hashFunction(bindings, variables);\n return !(hash in hashes) && (hashes[hash] = true);\n };\n }\n\n /**\n * Create a new distinct filter function to hash quads.\n * This will maintain an internal hash datastructure so that every quad object only returns true once.\n * @param context The action context.\n * @return {(quad: RDF.Quad) => boolean} A distinct filter for quads.\n */\n public async newHashFilterQuads(context: IActionContext): Promise<(quad: RDF.Quad) => boolean> {\n const { hashFunction } = await this.mediatorHashQuads.mediate({ context });\n const hashes: Record<number, boolean> = {};\n return (quad: RDF.Quad) => {\n const hash: number = hashFunction(quad);\n return !(hash in hashes) && (hashes[hash] = true);\n };\n }\n}\n\nexport interface IActorQueryOperationDistinctHashArgs extends IActorQueryOperationTypedMediatedArgs {\n mediatorHashBindings: MediatorHashBindings;\n mediatorHashQuads: MediatorHashQuads;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comunica/actor-query-operation-distinct-hash",
3
- "version": "4.4.2-alpha.49.0",
3
+ "version": "5.0.0",
4
4
  "description": "A distinct-hash query-operation actor",
5
5
  "lsd:module": true,
6
6
  "license": "MIT",
@@ -41,15 +41,15 @@
41
41
  "build:components": "componentsjs-generator"
42
42
  },
43
43
  "dependencies": {
44
- "@comunica/bus-hash-bindings": "4.4.2-alpha.49.0",
45
- "@comunica/bus-hash-quads": "4.4.2-alpha.49.0",
46
- "@comunica/bus-query-operation": "4.4.2-alpha.49.0",
47
- "@comunica/core": "4.4.2-alpha.49.0",
48
- "@comunica/types": "4.4.2-alpha.49.0",
49
- "@comunica/utils-algebra": "4.4.2-alpha.49.0",
50
- "@comunica/utils-query-operation": "4.4.2-alpha.49.0",
44
+ "@comunica/bus-hash-bindings": "^5.0.0",
45
+ "@comunica/bus-hash-quads": "^5.0.0",
46
+ "@comunica/bus-query-operation": "^5.0.0",
47
+ "@comunica/core": "^5.0.0",
48
+ "@comunica/types": "^5.0.0",
49
+ "@comunica/utils-algebra": "^5.0.0",
50
+ "@comunica/utils-query-operation": "^5.0.0",
51
51
  "@rdfjs/types": "*",
52
52
  "asynciterator": "^3.10.0"
53
53
  },
54
- "gitHead": "ef6f96cfd8faf7c37955bb7e0fe9f6fc6a994bdf"
54
+ "gitHead": "0b1756fdb9bef014133432489627c1bd71779bd0"
55
55
  }