@comunica/actor-abstract-path 3.0.1-alpha.45.0 → 3.0.1-alpha.46.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "@context": [
3
- "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^5.0.0/components/context.jsonld",
3
+ "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^6.0.0/components/context.jsonld",
4
4
  {
5
5
  "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/",
6
6
  "caap": "npmd:@comunica/actor-abstract-path/^3.0.0/",
@@ -16,7 +16,7 @@ export declare abstract class ActorAbstractPath extends ActorQueryOperationTyped
16
16
  protected static readonly FACTORY: Factory;
17
17
  protected readonly predicateType: string;
18
18
  protected constructor(args: IActorQueryOperationTypedMediatedArgs, predicateType: string);
19
- testOperation(operation: Algebra.Path, context: IActionContext): Promise<IActorTest>;
19
+ testOperation(operation: Algebra.Path, _context: IActionContext): Promise<IActorTest>;
20
20
  generateVariable(path?: Algebra.Path, name?: string): RDF.Variable;
21
21
  isPathArbitraryLengthDistinct(context: IActionContext, path: Algebra.Path): Promise<{
22
22
  context: IActionContext;
@@ -36,34 +36,34 @@ export declare abstract class ActorAbstractPath extends ActorQueryOperationTyped
36
36
  */
37
37
  getObjectsPredicateStarEval(subject: RDF.Term, predicate: Algebra.PropertyPathSymbol, object: RDF.Variable, graph: RDF.Term, context: IActionContext, emitFirstSubject: boolean, bindingsFactory: BindingsFactory): Promise<IPathResultStream>;
38
38
  /**
39
- * Pushes all terms to iterator `it` that are a solution of object predicate* ?o.
40
- * @param {Term} object Term of where we start the predicate* search.
41
- * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.
42
- * @param {Term} graph The graph in which we search for the pattern.
43
- * @param {ActionContext} context
44
- * @param {Record<string, Term>} termHashes Remembers the objects we've already searched for.
45
- * @param {BufferedIterator<Term>} it Iterator to push terms to.
46
- * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).
47
- * @return {Promise<IPathResultStream['metadata']>} The results metadata.
48
- */
39
+ * Pushes all terms to iterator `it` that are a solution of object predicate* ?o.
40
+ * @param {Term} object Term of where we start the predicate* search.
41
+ * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.
42
+ * @param {Term} graph The graph in which we search for the pattern.
43
+ * @param {ActionContext} context
44
+ * @param {Record<string, Term>} termHashes Remembers the objects we've already searched for.
45
+ * @param {BufferedIterator<Term>} it Iterator to push terms to.
46
+ * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).
47
+ * @return {Promise<IPathResultStream['metadata']>} The results metadata.
48
+ */
49
49
  getObjectsPredicateStar(object: RDF.Term, predicate: Algebra.PropertyPathSymbol, graph: RDF.Term, context: IActionContext, termHashes: Record<string, RDF.Term>, it: BufferedIterator<RDF.Term>, counter: any): Promise<IPathResultStream['metadata'] | undefined>;
50
50
  /**
51
- * Pushes all terms to iterator `it` that are a solution of ?s predicate* ?o.
52
- * @param {string} subjectVar String representation of subjectVariable
53
- * @param {string} objectVar String representation of objectVariable
54
- * @param {Term} subjectVal Term of where we start the predicate* search.
55
- * @param {Term} objectVal Found solution for an object, start for the new step.
56
- * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.
57
- * @param {Term} graph The graph in which we search for the pattern.
58
- * @param {ActionContext} context
59
- * @param {{[id: string]: Promise<Term[]>}} termHashesGlobal
60
- * Remembers solutions for when objectVal is already been calculated, can be reused when same objectVal occurs
61
- * @param {{[id: string]: Term}} termHashesCurrentSubject
62
- * Remembers the pairs we've already searched for, can stop searching if so.
63
- * @param {BufferedIterator<Bindings>} it Iterator to push terms to.
64
- * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).
65
- * @return {Promise<void>} All solutions of query should have been pushed to it by then.
66
- */
51
+ * Pushes all terms to iterator `it` that are a solution of ?s predicate* ?o.
52
+ * @param {string} subjectVar String representation of subjectVariable
53
+ * @param {string} objectVar String representation of objectVariable
54
+ * @param {Term} subjectVal Term of where we start the predicate* search.
55
+ * @param {Term} objectVal Found solution for an object, start for the new step.
56
+ * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.
57
+ * @param {Term} graph The graph in which we search for the pattern.
58
+ * @param {ActionContext} context
59
+ * @param {{[id: string]: Promise<Term[]>}} termHashesGlobal
60
+ * Remembers solutions for when objectVal is already been calculated, can be reused when same objectVal occurs
61
+ * @param {{[id: string]: Term}} termHashesCurrentSubject
62
+ * Remembers the pairs we've already searched for, can stop searching if so.
63
+ * @param {BufferedIterator<Bindings>} it Iterator to push terms to.
64
+ * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).
65
+ * @return {Promise<void>} All solutions of query should have been pushed to it by then.
66
+ */
67
67
  getSubjectAndObjectBindingsPredicateStar(subjectVar: RDF.Variable, objectVar: RDF.Variable, subjectVal: RDF.Term, objectVal: RDF.Term, predicate: Algebra.PropertyPathSymbol, graph: RDF.Term, context: IActionContext, termHashesGlobal: Record<string, Promise<RDF.Term[]>>, termHashesCurrentSubject: Record<string, boolean>, it: BufferedIterator<Bindings>, counter: any, bindingsFactory: BindingsFactory): Promise<void>;
68
68
  /**
69
69
  * Find all sources recursively contained in the given path operation.
@@ -19,7 +19,7 @@ class ActorAbstractPath extends bus_query_operation_1.ActorQueryOperationTypedMe
19
19
  super(args, 'path');
20
20
  this.predicateType = predicateType;
21
21
  }
22
- async testOperation(operation, context) {
22
+ async testOperation(operation, _context) {
23
23
  if (operation.predicate.type !== this.predicateType) {
24
24
  throw new Error(`This Actor only supports ${this.predicateType} Path operations.`);
25
25
  }
@@ -42,8 +42,7 @@ class ActorAbstractPath extends bus_query_operation_1.ActorQueryOperationTypedMe
42
42
  async isPathArbitraryLengthDistinct(context, path) {
43
43
  if (!context.get(context_entries_1.KeysQueryOperation.isPathArbitraryLengthDistinctKey)) {
44
44
  context = context.set(context_entries_1.KeysQueryOperation.isPathArbitraryLengthDistinctKey, true);
45
- return { context,
46
- operation: bus_query_operation_1.ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({
45
+ return { context, operation: bus_query_operation_1.ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({
47
46
  operation: ActorAbstractPath.FACTORY.createDistinct(path),
48
47
  context,
49
48
  })) };
@@ -118,7 +117,7 @@ class ActorAbstractPath extends bus_query_operation_1.ActorQueryOperationTypedMe
118
117
  return {
119
118
  bindingsStream,
120
119
  async metadata() {
121
- const metadata = await new Promise(resolve => {
120
+ const metadata = await new Promise((resolve) => {
122
121
  it.getProperty('metadata', (metadataInner) => resolve(metadataInner()));
123
122
  });
124
123
  // Increment cardinality by one, because we always have at least one result once we reach this stage.
@@ -129,16 +128,16 @@ class ActorAbstractPath extends bus_query_operation_1.ActorQueryOperationTypedMe
129
128
  };
130
129
  }
131
130
  /**
132
- * Pushes all terms to iterator `it` that are a solution of object predicate* ?o.
133
- * @param {Term} object Term of where we start the predicate* search.
134
- * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.
135
- * @param {Term} graph The graph in which we search for the pattern.
136
- * @param {ActionContext} context
137
- * @param {Record<string, Term>} termHashes Remembers the objects we've already searched for.
138
- * @param {BufferedIterator<Term>} it Iterator to push terms to.
139
- * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).
140
- * @return {Promise<IPathResultStream['metadata']>} The results metadata.
141
- */
131
+ * Pushes all terms to iterator `it` that are a solution of object predicate* ?o.
132
+ * @param {Term} object Term of where we start the predicate* search.
133
+ * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.
134
+ * @param {Term} graph The graph in which we search for the pattern.
135
+ * @param {ActionContext} context
136
+ * @param {Record<string, Term>} termHashes Remembers the objects we've already searched for.
137
+ * @param {BufferedIterator<Term>} it Iterator to push terms to.
138
+ * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).
139
+ * @return {Promise<IPathResultStream['metadata']>} The results metadata.
140
+ */
142
141
  async getObjectsPredicateStar(object, predicate, graph, context, termHashes, it, counter) {
143
142
  const termString = (0, rdf_string_1.termToString)(object);
144
143
  if (termHashes[termString]) {
@@ -150,6 +149,8 @@ class ActorAbstractPath extends bus_query_operation_1.ActorQueryOperationTypedMe
150
149
  const thisVariable = this.generateVariable();
151
150
  const path = ActorAbstractPath.FACTORY.createPath(object, predicate, thisVariable, graph);
152
151
  const results = bus_query_operation_1.ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({ operation: path, context }));
152
+ // TODO: fixme
153
+ // eslint-disable-next-line ts/no-misused-promises
153
154
  results.bindingsStream.on('data', async (bindings) => {
154
155
  const result = bindings.get(thisVariable);
155
156
  await this.getObjectsPredicateStar(result, predicate, graph, context, termHashes, it, counter);
@@ -162,22 +163,22 @@ class ActorAbstractPath extends bus_query_operation_1.ActorQueryOperationTypedMe
162
163
  return results.metadata;
163
164
  }
164
165
  /**
165
- * Pushes all terms to iterator `it` that are a solution of ?s predicate* ?o.
166
- * @param {string} subjectVar String representation of subjectVariable
167
- * @param {string} objectVar String representation of objectVariable
168
- * @param {Term} subjectVal Term of where we start the predicate* search.
169
- * @param {Term} objectVal Found solution for an object, start for the new step.
170
- * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.
171
- * @param {Term} graph The graph in which we search for the pattern.
172
- * @param {ActionContext} context
173
- * @param {{[id: string]: Promise<Term[]>}} termHashesGlobal
174
- * Remembers solutions for when objectVal is already been calculated, can be reused when same objectVal occurs
175
- * @param {{[id: string]: Term}} termHashesCurrentSubject
176
- * Remembers the pairs we've already searched for, can stop searching if so.
177
- * @param {BufferedIterator<Bindings>} it Iterator to push terms to.
178
- * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).
179
- * @return {Promise<void>} All solutions of query should have been pushed to it by then.
180
- */
166
+ * Pushes all terms to iterator `it` that are a solution of ?s predicate* ?o.
167
+ * @param {string} subjectVar String representation of subjectVariable
168
+ * @param {string} objectVar String representation of objectVariable
169
+ * @param {Term} subjectVal Term of where we start the predicate* search.
170
+ * @param {Term} objectVal Found solution for an object, start for the new step.
171
+ * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.
172
+ * @param {Term} graph The graph in which we search for the pattern.
173
+ * @param {ActionContext} context
174
+ * @param {{[id: string]: Promise<Term[]>}} termHashesGlobal
175
+ * Remembers solutions for when objectVal is already been calculated, can be reused when same objectVal occurs
176
+ * @param {{[id: string]: Term}} termHashesCurrentSubject
177
+ * Remembers the pairs we've already searched for, can stop searching if so.
178
+ * @param {BufferedIterator<Bindings>} it Iterator to push terms to.
179
+ * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).
180
+ * @return {Promise<void>} All solutions of query should have been pushed to it by then.
181
+ */
181
182
  // Let the iterator `it` emit all bindings of size 2, with subjectStringVariable as value subjectVal
182
183
  // and objectStringVariable as value all nodes reachable through predicate* beginning at objectVal
183
184
  async getSubjectAndObjectBindingsPredicateStar(subjectVar, objectVar, subjectVal, objectVal, predicate, graph, context, termHashesGlobal, termHashesCurrentSubject, it, counter, bindingsFactory) {
@@ -204,6 +205,8 @@ class ActorAbstractPath extends bus_query_operation_1.ActorQueryOperationTypedMe
204
205
  return;
205
206
  }
206
207
  // Construct promise to calculate all reachable nodes from this object
208
+ // TODO: fixme
209
+ // eslint-disable-next-line no-async-promise-executor,ts/no-misused-promises
207
210
  const promise = new Promise(async (resolve, reject) => {
208
211
  const objectsArray = [];
209
212
  // Construct path that leads us one step through predicate
@@ -211,6 +214,8 @@ class ActorAbstractPath extends bus_query_operation_1.ActorQueryOperationTypedMe
211
214
  const path = ActorAbstractPath.FACTORY.createPath(objectVal, predicate, thisVariable, graph);
212
215
  const results = bus_query_operation_1.ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({ operation: path, context }));
213
216
  // Recursive call on all neighbours
217
+ // TODO: fixme
218
+ // eslint-disable-next-line ts/no-misused-promises
214
219
  results.bindingsStream.on('data', async (bindings) => {
215
220
  const result = bindings.get(thisVariable);
216
221
  objectsArray.push(result);
@@ -1 +1 @@
1
- {"version":3,"file":"ActorAbstractPath.js","sourceRoot":"","sources":["ActorAbstractPath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingsFactory } from '@comunica/bindings-factory';\nimport type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport {\n ActorQueryOperation,\n ActorQueryOperationTypedMediated,\n} from '@comunica/bus-query-operation';\nimport { KeysQueryOperation } from '@comunica/context-entries';\nimport type { IActorTest } from '@comunica/core';\nimport type { IQueryOperationResultBindings, Bindings, IActionContext, MetadataBindings,\n IQuerySourceWrapper } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport {\n BufferedIterator, MultiTransformIterator,\n TransformIterator, EmptyIterator,\n} from 'asynciterator';\nimport { DataFactory } from 'rdf-data-factory';\nimport { termToString } from 'rdf-string';\nimport { Algebra, Factory } from 'sparqlalgebrajs';\nimport { PathVariableObjectIterator } from './PathVariableObjectIterator';\n\nconst DF = new DataFactory();\n\n/**\n * An abstract actor that handles Path operations.\n *\n * Provides multiple helper functions used by the Path operation actors.\n */\nexport abstract class ActorAbstractPath extends ActorQueryOperationTypedMediated<Algebra.Path> {\n protected static readonly FACTORY: Factory = new Factory();\n\n protected readonly predicateType: string;\n\n protected constructor(args: IActorQueryOperationTypedMediatedArgs, predicateType: string) {\n super(args, 'path');\n this.predicateType = predicateType;\n }\n\n public async testOperation(operation: Algebra.Path, context: IActionContext): Promise<IActorTest> {\n if (operation.predicate.type !== this.predicateType) {\n throw new Error(`This Actor only supports ${this.predicateType} Path operations.`);\n }\n\n return true;\n }\n\n // Generates a variable that does not yet occur in the path\n public generateVariable(path?: Algebra.Path, name?: string): RDF.Variable {\n if (!name) {\n return this.generateVariable(path, 'b');\n }\n\n // Path predicates can't contain variables\n if (path && (path.subject.value === name || path.object.value === name)) {\n return this.generateVariable(path, `${name}b`);\n }\n\n return DF.variable(name);\n }\n\n // Such connectivity matching does not introduce duplicates (it does not incorporate any count of the number\n // of ways the connection can be made) even if the repeated path itself would otherwise result in duplicates.\n // https://www.w3.org/TR/sparql11-query/#propertypaths\n public async isPathArbitraryLengthDistinct(context: IActionContext, path: Algebra.Path):\n Promise<{ context: IActionContext; operation: IQueryOperationResultBindings | undefined }> {\n if (!context.get(KeysQueryOperation.isPathArbitraryLengthDistinctKey)) {\n context = context.set(KeysQueryOperation.isPathArbitraryLengthDistinctKey, true);\n return { context,\n operation: ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({\n operation: ActorAbstractPath.FACTORY.createDistinct(path),\n context,\n })) };\n }\n\n context = context.set(KeysQueryOperation.isPathArbitraryLengthDistinctKey, false);\n return { context, operation: undefined };\n }\n\n private async predicateStarGraphVariable(\n subject: RDF.Term,\n object: RDF.Variable,\n predicate: Algebra.PropertyPathSymbol,\n graph: RDF.Variable,\n context: IActionContext,\n bindingsFactory: BindingsFactory,\n ): Promise<IPathResultStream> {\n const sources = this.getPathSources(predicate);\n // TODO: refactor this with an iterator just like PathVariableObjectIterator so we handle backpressure correctly\n // Construct path to obtain all graphs where subject exists\n const predVar = this.generateVariable(ActorAbstractPath.FACTORY\n .createPath(subject, predicate, object, graph));\n const findGraphs = ActorAbstractPath.FACTORY.createUnion([\n this.assignPatternSources(ActorAbstractPath.FACTORY.createPattern(subject, predVar, object, graph), sources),\n this.assignPatternSources(ActorAbstractPath.FACTORY.createPattern(object, predVar, subject, graph), sources),\n ]);\n const results = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ context, operation: findGraphs }),\n );\n\n const passedGraphs: Set<string> = new Set();\n\n const bindingsStream = new MultiTransformIterator<Bindings, Bindings>(\n results.bindingsStream,\n {\n multiTransform: (bindings: Bindings) => {\n // Extract the graph and start a predicate* search starting from subject in each graph\n const graphValue: RDF.Term = bindings.get(graph)!;\n if (passedGraphs.has(graphValue.value)) {\n return new EmptyIterator();\n }\n passedGraphs.add(graphValue.value);\n return new TransformIterator<Bindings>(\n async() => {\n const it = new BufferedIterator<RDF.Term>();\n await this.getObjectsPredicateStar(subject, predicate, graphValue, context, {}, it, { count: 0 });\n return it.transform<Bindings>({\n transform(item, next, push) {\n push(bindingsFactory.bindings([\n [ object, item ],\n [ graph, graphValue ],\n ]));\n next();\n },\n });\n }, { maxBufferSize: 128 },\n );\n },\n autoStart: false,\n },\n );\n\n return {\n bindingsStream,\n metadata: results.metadata,\n };\n }\n\n /**\n * Returns an iterator with Bindings of the query subject predicate* ?o or subject predicate+ ?o\n * If graph is a variable, it will also be in those bindings\n * @param {Term} subject Term of where we start the predicate* search.\n * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.\n * @param {Variable} object Variable of the zeroOrMore-query.\n * @param {Term} graph The graph in which we search for the pattern. (Possibly a variable)\n * @param {ActionContext} context The context to pass to sub-opertations\n * @param emitFirstSubject If the path operation is predicate*, otherwise it is predicate+.\n * @return {Promise<AsyncIterator<Bindings>} Iterator to where all bindings of query should have been pushed.\n */\n public async getObjectsPredicateStarEval(\n subject: RDF.Term,\n predicate: Algebra.PropertyPathSymbol,\n object: RDF.Variable,\n graph: RDF.Term,\n context: IActionContext,\n emitFirstSubject: boolean,\n bindingsFactory: BindingsFactory,\n ): Promise<IPathResultStream> {\n if (graph.termType === 'Variable') {\n return this.predicateStarGraphVariable(subject, object, predicate, graph, context, bindingsFactory);\n }\n\n const it = new PathVariableObjectIterator(\n subject,\n predicate,\n graph,\n context,\n this.mediatorQueryOperation,\n emitFirstSubject,\n );\n\n const bindingsStream = it.transform<Bindings>({\n autoStart: false,\n transform(item, next, push) {\n push(bindingsFactory.bindings([[ object, item ]]));\n next();\n },\n });\n\n return {\n bindingsStream,\n async metadata() {\n const metadata: MetadataBindings = await new Promise(resolve => {\n it.getProperty('metadata', (metadataInner: any) => resolve(metadataInner()));\n });\n // Increment cardinality by one, because we always have at least one result once we reach this stage.\n // See the transformation above where we push a single binding.\n metadata.cardinality.value++;\n return metadata;\n },\n };\n }\n\n /**\n * Pushes all terms to iterator `it` that are a solution of object predicate* ?o.\n * @param {Term} object Term of where we start the predicate* search.\n * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.\n * @param {Term} graph The graph in which we search for the pattern.\n * @param {ActionContext} context\n * @param {Record<string, Term>} termHashes Remembers the objects we've already searched for.\n * @param {BufferedIterator<Term>} it Iterator to push terms to.\n * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).\n * @return {Promise<IPathResultStream['metadata']>} The results metadata.\n */\n public async getObjectsPredicateStar(\n object: RDF.Term,\n predicate: Algebra.PropertyPathSymbol,\n graph: RDF.Term,\n context: IActionContext,\n termHashes: Record<string, RDF.Term>,\n it: BufferedIterator<RDF.Term>,\n counter: any,\n ): Promise<IPathResultStream['metadata'] | undefined> {\n const termString = termToString(object);\n if (termHashes[termString]) {\n return;\n }\n\n (<any> it)._push(object);\n termHashes[termString] = object;\n counter.count++;\n\n const thisVariable = this.generateVariable();\n const path = ActorAbstractPath.FACTORY.createPath(object, predicate, thisVariable, graph);\n const results = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ operation: path, context }),\n );\n results.bindingsStream.on('data', async(bindings: Bindings) => {\n const result = bindings.get(thisVariable);\n await this.getObjectsPredicateStar(result!, predicate, graph, context, termHashes, it, counter);\n });\n results.bindingsStream.on('end', () => {\n if (--counter.count === 0) {\n it.close();\n }\n });\n\n return results.metadata;\n }\n\n /**\n * Pushes all terms to iterator `it` that are a solution of ?s predicate* ?o.\n * @param {string} subjectVar String representation of subjectVariable\n * @param {string} objectVar String representation of objectVariable\n * @param {Term} subjectVal Term of where we start the predicate* search.\n * @param {Term} objectVal Found solution for an object, start for the new step.\n * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.\n * @param {Term} graph The graph in which we search for the pattern.\n * @param {ActionContext} context\n * @param {{[id: string]: Promise<Term[]>}} termHashesGlobal\n * Remembers solutions for when objectVal is already been calculated, can be reused when same objectVal occurs\n * @param {{[id: string]: Term}} termHashesCurrentSubject\n * Remembers the pairs we've already searched for, can stop searching if so.\n * @param {BufferedIterator<Bindings>} it Iterator to push terms to.\n * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).\n * @return {Promise<void>} All solutions of query should have been pushed to it by then.\n */\n // Let the iterator `it` emit all bindings of size 2, with subjectStringVariable as value subjectVal\n // and objectStringVariable as value all nodes reachable through predicate* beginning at objectVal\n public async getSubjectAndObjectBindingsPredicateStar(\n subjectVar: RDF.Variable,\n objectVar: RDF.Variable,\n subjectVal: RDF.Term,\n objectVal: RDF.Term,\n predicate: Algebra.PropertyPathSymbol,\n graph: RDF.Term,\n context: IActionContext,\n termHashesGlobal: Record<string, Promise<RDF.Term[]>>,\n termHashesCurrentSubject: Record<string, boolean>,\n it: BufferedIterator<Bindings>,\n counter: any,\n bindingsFactory: BindingsFactory,\n ): Promise<void> {\n const termString = termToString(objectVal) + termToString(graph);\n\n // If this combination of subject and object already done, return nothing\n if (termHashesCurrentSubject[termString]) {\n return;\n }\n\n counter.count++;\n termHashesCurrentSubject[termString] = true;\n (<any> it)._push(bindingsFactory.bindings([\n [ subjectVar, subjectVal ],\n [ objectVar, objectVal ],\n ]));\n\n // If every reachable node from object has already been calculated, use these for current subject too\n if (termString in termHashesGlobal) {\n const objects = await termHashesGlobal[termString];\n for (const object of objects) {\n await this.getSubjectAndObjectBindingsPredicateStar(\n subjectVar,\n objectVar,\n subjectVal,\n object,\n predicate,\n graph,\n context,\n termHashesGlobal,\n termHashesCurrentSubject,\n it,\n counter,\n bindingsFactory,\n );\n }\n if (--counter.count === 0) {\n it.close();\n }\n\n return;\n }\n\n // Construct promise to calculate all reachable nodes from this object\n const promise = new Promise<RDF.Term[]>(async(resolve, reject) => {\n const objectsArray: RDF.Term[] = [];\n\n // Construct path that leads us one step through predicate\n const thisVariable = this.generateVariable();\n const path = ActorAbstractPath.FACTORY.createPath(objectVal, predicate, thisVariable, graph);\n const results = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ operation: path, context }),\n );\n\n // Recursive call on all neighbours\n results.bindingsStream.on('data', async(bindings: RDF.Bindings) => {\n const result: RDF.Term = bindings.get(thisVariable)!;\n objectsArray.push(result);\n await this.getSubjectAndObjectBindingsPredicateStar(\n subjectVar,\n objectVar,\n subjectVal,\n result,\n predicate,\n graph,\n context,\n termHashesGlobal,\n termHashesCurrentSubject,\n it,\n counter,\n bindingsFactory,\n );\n });\n results.bindingsStream.on('error', reject);\n results.bindingsStream.on('end', () => {\n if (--counter.count === 0) {\n it.close();\n }\n resolve(objectsArray);\n });\n });\n\n // Set it in the termHashesGlobal when this object occurs again they can wait for this promise\n termHashesGlobal[termString] = promise;\n }\n\n /**\n * Find all sources recursively contained in the given path operation.\n * @param operation\n */\n public getPathSources(operation: Algebra.PropertyPathSymbol): IQuerySourceWrapper[] {\n switch (operation.type) {\n case Algebra.types.ALT:\n case Algebra.types.SEQ:\n return operation.input\n .flatMap((subOp: Algebra.PropertyPathSymbol) => this.getPathSources(subOp));\n case Algebra.types.INV:\n case Algebra.types.ONE_OR_MORE_PATH:\n case Algebra.types.ZERO_OR_MORE_PATH:\n case Algebra.types.ZERO_OR_ONE_PATH:\n return this.getPathSources(operation.path);\n case Algebra.types.LINK:\n case Algebra.types.NPS: {\n const source = ActorQueryOperation.getOperationSource(operation);\n if (!source) {\n throw new Error(`Could not find a required source on a link path operation`);\n }\n return [ source ];\n }\n }\n }\n\n public assignPatternSources(pattern: Algebra.Pattern, sources: IQuerySourceWrapper[]): Algebra.Operation {\n if (sources.length === 0) {\n throw new Error(`Attempted to assign zero sources to a pattern during property path handling`);\n }\n if (sources.length === 1) {\n return ActorQueryOperation.assignOperationSource(pattern, sources[0]);\n }\n return ActorAbstractPath.FACTORY.createUnion(sources\n .map(source => ActorQueryOperation.assignOperationSource(pattern, source)), true);\n }\n}\n\nexport interface IPathResultStream {\n bindingsStream: AsyncIterator<Bindings>;\n metadata: () => Promise<MetadataBindings>;\n}\n"]}
1
+ {"version":3,"file":"ActorAbstractPath.js","sourceRoot":"","sources":["ActorAbstractPath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingsFactory } from '@comunica/bindings-factory';\nimport type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport {\n ActorQueryOperation,\n ActorQueryOperationTypedMediated,\n} from '@comunica/bus-query-operation';\nimport { KeysQueryOperation } from '@comunica/context-entries';\nimport type { IActorTest } from '@comunica/core';\nimport type {\n IQueryOperationResultBindings,\n Bindings,\n IActionContext,\n MetadataBindings,\n IQuerySourceWrapper,\n} from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport {\n BufferedIterator,\n MultiTransformIterator,\n TransformIterator,\n EmptyIterator,\n} from 'asynciterator';\nimport { DataFactory } from 'rdf-data-factory';\nimport { termToString } from 'rdf-string';\nimport { Algebra, Factory } from 'sparqlalgebrajs';\nimport { PathVariableObjectIterator } from './PathVariableObjectIterator';\n\nconst DF = new DataFactory();\n\n/**\n * An abstract actor that handles Path operations.\n *\n * Provides multiple helper functions used by the Path operation actors.\n */\nexport abstract class ActorAbstractPath extends ActorQueryOperationTypedMediated<Algebra.Path> {\n protected static readonly FACTORY: Factory = new Factory();\n\n protected readonly predicateType: string;\n\n protected constructor(args: IActorQueryOperationTypedMediatedArgs, predicateType: string) {\n super(args, 'path');\n this.predicateType = predicateType;\n }\n\n public async testOperation(operation: Algebra.Path, _context: IActionContext): Promise<IActorTest> {\n if (operation.predicate.type !== this.predicateType) {\n throw new Error(`This Actor only supports ${this.predicateType} Path operations.`);\n }\n\n return true;\n }\n\n // Generates a variable that does not yet occur in the path\n public generateVariable(path?: Algebra.Path, name?: string): RDF.Variable {\n if (!name) {\n return this.generateVariable(path, 'b');\n }\n\n // Path predicates can't contain variables\n if (path && (path.subject.value === name || path.object.value === name)) {\n return this.generateVariable(path, `${name}b`);\n }\n\n return DF.variable(name);\n }\n\n // Such connectivity matching does not introduce duplicates (it does not incorporate any count of the number\n // of ways the connection can be made) even if the repeated path itself would otherwise result in duplicates.\n // https://www.w3.org/TR/sparql11-query/#propertypaths\n public async isPathArbitraryLengthDistinct(context: IActionContext, path: Algebra.Path):\n Promise<{ context: IActionContext; operation: IQueryOperationResultBindings | undefined }> {\n if (!context.get(KeysQueryOperation.isPathArbitraryLengthDistinctKey)) {\n context = context.set(KeysQueryOperation.isPathArbitraryLengthDistinctKey, true);\n return { context, operation: ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({\n operation: ActorAbstractPath.FACTORY.createDistinct(path),\n context,\n })) };\n }\n\n context = context.set(KeysQueryOperation.isPathArbitraryLengthDistinctKey, false);\n return { context, operation: undefined };\n }\n\n private async predicateStarGraphVariable(\n subject: RDF.Term,\n object: RDF.Variable,\n predicate: Algebra.PropertyPathSymbol,\n graph: RDF.Variable,\n context: IActionContext,\n bindingsFactory: BindingsFactory,\n ): Promise<IPathResultStream> {\n const sources = this.getPathSources(predicate);\n // TODO: refactor this with an iterator just like PathVariableObjectIterator so we handle backpressure correctly\n // Construct path to obtain all graphs where subject exists\n const predVar = this.generateVariable(ActorAbstractPath.FACTORY\n .createPath(subject, predicate, object, graph));\n const findGraphs = ActorAbstractPath.FACTORY.createUnion([\n this.assignPatternSources(ActorAbstractPath.FACTORY.createPattern(subject, predVar, object, graph), sources),\n this.assignPatternSources(ActorAbstractPath.FACTORY.createPattern(object, predVar, subject, graph), sources),\n ]);\n const results = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ context, operation: findGraphs }),\n );\n\n const passedGraphs: Set<string> = new Set();\n\n const bindingsStream = new MultiTransformIterator<Bindings, Bindings>(\n results.bindingsStream,\n {\n multiTransform: (bindings: Bindings) => {\n // Extract the graph and start a predicate* search starting from subject in each graph\n const graphValue: RDF.Term = bindings.get(graph)!;\n if (passedGraphs.has(graphValue.value)) {\n return new EmptyIterator();\n }\n passedGraphs.add(graphValue.value);\n return new TransformIterator<Bindings>(\n async() => {\n const it = new BufferedIterator<RDF.Term>();\n await this.getObjectsPredicateStar(subject, predicate, graphValue, context, {}, it, { count: 0 });\n return it.transform<Bindings>({\n transform(item, next, push) {\n push(bindingsFactory.bindings([\n [ object, item ],\n [ graph, graphValue ],\n ]));\n next();\n },\n });\n },\n { maxBufferSize: 128 },\n );\n },\n autoStart: false,\n },\n );\n\n return {\n bindingsStream,\n metadata: results.metadata,\n };\n }\n\n /**\n * Returns an iterator with Bindings of the query subject predicate* ?o or subject predicate+ ?o\n * If graph is a variable, it will also be in those bindings\n * @param {Term} subject Term of where we start the predicate* search.\n * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.\n * @param {Variable} object Variable of the zeroOrMore-query.\n * @param {Term} graph The graph in which we search for the pattern. (Possibly a variable)\n * @param {ActionContext} context The context to pass to sub-opertations\n * @param emitFirstSubject If the path operation is predicate*, otherwise it is predicate+.\n * @return {Promise<AsyncIterator<Bindings>} Iterator to where all bindings of query should have been pushed.\n */\n public async getObjectsPredicateStarEval(\n subject: RDF.Term,\n predicate: Algebra.PropertyPathSymbol,\n object: RDF.Variable,\n graph: RDF.Term,\n context: IActionContext,\n emitFirstSubject: boolean,\n bindingsFactory: BindingsFactory,\n ): Promise<IPathResultStream> {\n if (graph.termType === 'Variable') {\n return this.predicateStarGraphVariable(subject, object, predicate, graph, context, bindingsFactory);\n }\n\n const it = new PathVariableObjectIterator(\n subject,\n predicate,\n graph,\n context,\n this.mediatorQueryOperation,\n emitFirstSubject,\n );\n\n const bindingsStream = it.transform<Bindings>({\n autoStart: false,\n transform(item, next, push) {\n push(bindingsFactory.bindings([[ object, item ]]));\n next();\n },\n });\n\n return {\n bindingsStream,\n async metadata() {\n const metadata: MetadataBindings = await new Promise((resolve) => {\n it.getProperty('metadata', (metadataInner: any) => resolve(metadataInner()));\n });\n // Increment cardinality by one, because we always have at least one result once we reach this stage.\n // See the transformation above where we push a single binding.\n metadata.cardinality.value++;\n return metadata;\n },\n };\n }\n\n /**\n * Pushes all terms to iterator `it` that are a solution of object predicate* ?o.\n * @param {Term} object Term of where we start the predicate* search.\n * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.\n * @param {Term} graph The graph in which we search for the pattern.\n * @param {ActionContext} context\n * @param {Record<string, Term>} termHashes Remembers the objects we've already searched for.\n * @param {BufferedIterator<Term>} it Iterator to push terms to.\n * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).\n * @return {Promise<IPathResultStream['metadata']>} The results metadata.\n */\n public async getObjectsPredicateStar(\n object: RDF.Term,\n predicate: Algebra.PropertyPathSymbol,\n graph: RDF.Term,\n context: IActionContext,\n termHashes: Record<string, RDF.Term>,\n it: BufferedIterator<RDF.Term>,\n counter: any,\n ): Promise<IPathResultStream['metadata'] | undefined> {\n const termString = termToString(object);\n if (termHashes[termString]) {\n return;\n }\n\n (<any> it)._push(object);\n termHashes[termString] = object;\n counter.count++;\n\n const thisVariable = this.generateVariable();\n const path = ActorAbstractPath.FACTORY.createPath(object, predicate, thisVariable, graph);\n const results = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ operation: path, context }),\n );\n // TODO: fixme\n // eslint-disable-next-line ts/no-misused-promises\n results.bindingsStream.on('data', async(bindings: Bindings) => {\n const result = bindings.get(thisVariable);\n await this.getObjectsPredicateStar(result!, predicate, graph, context, termHashes, it, counter);\n });\n results.bindingsStream.on('end', () => {\n if (--counter.count === 0) {\n it.close();\n }\n });\n\n return results.metadata;\n }\n\n /**\n * Pushes all terms to iterator `it` that are a solution of ?s predicate* ?o.\n * @param {string} subjectVar String representation of subjectVariable\n * @param {string} objectVar String representation of objectVariable\n * @param {Term} subjectVal Term of where we start the predicate* search.\n * @param {Term} objectVal Found solution for an object, start for the new step.\n * @param {Algebra.PropertyPathSymbol} predicate Predicate of the *-path.\n * @param {Term} graph The graph in which we search for the pattern.\n * @param {ActionContext} context\n * @param {{[id: string]: Promise<Term[]>}} termHashesGlobal\n * Remembers solutions for when objectVal is already been calculated, can be reused when same objectVal occurs\n * @param {{[id: string]: Term}} termHashesCurrentSubject\n * Remembers the pairs we've already searched for, can stop searching if so.\n * @param {BufferedIterator<Bindings>} it Iterator to push terms to.\n * @param {any} counter Counts how many searches are in progress to close it when needed (when counter == 0).\n * @return {Promise<void>} All solutions of query should have been pushed to it by then.\n */\n // Let the iterator `it` emit all bindings of size 2, with subjectStringVariable as value subjectVal\n // and objectStringVariable as value all nodes reachable through predicate* beginning at objectVal\n public async getSubjectAndObjectBindingsPredicateStar(\n subjectVar: RDF.Variable,\n objectVar: RDF.Variable,\n subjectVal: RDF.Term,\n objectVal: RDF.Term,\n predicate: Algebra.PropertyPathSymbol,\n graph: RDF.Term,\n context: IActionContext,\n termHashesGlobal: Record<string, Promise<RDF.Term[]>>,\n termHashesCurrentSubject: Record<string, boolean>,\n it: BufferedIterator<Bindings>,\n counter: any,\n bindingsFactory: BindingsFactory,\n ): Promise<void> {\n const termString = termToString(objectVal) + termToString(graph);\n\n // If this combination of subject and object already done, return nothing\n if (termHashesCurrentSubject[termString]) {\n return;\n }\n\n counter.count++;\n termHashesCurrentSubject[termString] = true;\n (<any> it)._push(bindingsFactory.bindings([\n [ subjectVar, subjectVal ],\n [ objectVar, objectVal ],\n ]));\n\n // If every reachable node from object has already been calculated, use these for current subject too\n if (termString in termHashesGlobal) {\n const objects = await termHashesGlobal[termString];\n for (const object of objects) {\n await this.getSubjectAndObjectBindingsPredicateStar(\n subjectVar,\n objectVar,\n subjectVal,\n object,\n predicate,\n graph,\n context,\n termHashesGlobal,\n termHashesCurrentSubject,\n it,\n counter,\n bindingsFactory,\n );\n }\n if (--counter.count === 0) {\n it.close();\n }\n\n return;\n }\n\n // Construct promise to calculate all reachable nodes from this object\n // TODO: fixme\n // eslint-disable-next-line no-async-promise-executor,ts/no-misused-promises\n const promise = new Promise<RDF.Term[]>(async(resolve, reject) => {\n const objectsArray: RDF.Term[] = [];\n\n // Construct path that leads us one step through predicate\n const thisVariable = this.generateVariable();\n const path = ActorAbstractPath.FACTORY.createPath(objectVal, predicate, thisVariable, graph);\n const results = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ operation: path, context }),\n );\n\n // Recursive call on all neighbours\n // TODO: fixme\n // eslint-disable-next-line ts/no-misused-promises\n results.bindingsStream.on('data', async(bindings: RDF.Bindings) => {\n const result: RDF.Term = bindings.get(thisVariable)!;\n objectsArray.push(result);\n await this.getSubjectAndObjectBindingsPredicateStar(\n subjectVar,\n objectVar,\n subjectVal,\n result,\n predicate,\n graph,\n context,\n termHashesGlobal,\n termHashesCurrentSubject,\n it,\n counter,\n bindingsFactory,\n );\n });\n results.bindingsStream.on('error', reject);\n results.bindingsStream.on('end', () => {\n if (--counter.count === 0) {\n it.close();\n }\n resolve(objectsArray);\n });\n });\n\n // Set it in the termHashesGlobal when this object occurs again they can wait for this promise\n termHashesGlobal[termString] = promise;\n }\n\n /**\n * Find all sources recursively contained in the given path operation.\n * @param operation\n */\n public getPathSources(operation: Algebra.PropertyPathSymbol): IQuerySourceWrapper[] {\n switch (operation.type) {\n case Algebra.types.ALT:\n case Algebra.types.SEQ:\n return operation.input\n .flatMap((subOp: Algebra.PropertyPathSymbol) => this.getPathSources(subOp));\n case Algebra.types.INV:\n case Algebra.types.ONE_OR_MORE_PATH:\n case Algebra.types.ZERO_OR_MORE_PATH:\n case Algebra.types.ZERO_OR_ONE_PATH:\n return this.getPathSources(operation.path);\n case Algebra.types.LINK:\n case Algebra.types.NPS: {\n const source = ActorQueryOperation.getOperationSource(operation);\n if (!source) {\n throw new Error(`Could not find a required source on a link path operation`);\n }\n return [ source ];\n }\n }\n }\n\n public assignPatternSources(pattern: Algebra.Pattern, sources: IQuerySourceWrapper[]): Algebra.Operation {\n if (sources.length === 0) {\n throw new Error(`Attempted to assign zero sources to a pattern during property path handling`);\n }\n if (sources.length === 1) {\n return ActorQueryOperation.assignOperationSource(pattern, sources[0]);\n }\n return ActorAbstractPath.FACTORY.createUnion(sources\n .map(source => ActorQueryOperation.assignOperationSource(pattern, source)), true);\n }\n}\n\nexport interface IPathResultStream {\n bindingsStream: AsyncIterator<Bindings>;\n metadata: () => Promise<MetadataBindings>;\n}\n"]}
@@ -57,7 +57,7 @@ class PathVariableObjectIterator extends asynciterator_1.BufferedIterator {
57
57
  }
58
58
  }
59
59
  _read(count, done) {
60
- // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this
60
+ // eslint-disable-next-line ts/no-this-alias
61
61
  const self = this;
62
62
  (async function () {
63
63
  // Open as many operations as possible
@@ -1 +1 @@
1
- {"version":3,"file":"PathVariableObjectIterator.js","sourceRoot":"","sources":["PathVariableObjectIterator.ts"],"names":[],"mappings":";;;AACA,uEAAoE;AAIpE,iDAAiD;AACjD,uDAA+C;AAC/C,2CAA0C;AAE1C,qDAA0C;AAE1C,MAAM,EAAE,GAAG,IAAI,8BAAW,EAAE,CAAC;AAC7B,MAAM,OAAO,GAAG,IAAI,yBAAO,EAAE,CAAC;AAE9B;;;GAGG;AACH,MAAa,0BAA2B,SAAQ,gCAA0B;IAKxE,YACmB,OAAiB,EACjB,SAAqC,EACrC,KAAe,EACf,OAAuB,EACvB,sBAA8C,EAC/D,gBAAyB,EACR,uBAAuB,EAAE;QAE1C,mEAAmE;QACnE,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QATV,YAAO,GAAP,OAAO,CAAU;QACjB,cAAS,GAAT,SAAS,CAA4B;QACrC,UAAK,GAAL,KAAK,CAAU;QACf,YAAO,GAAP,OAAO,CAAgB;QACvB,2BAAsB,GAAtB,sBAAsB,CAAwB;QAE9C,yBAAoB,GAApB,oBAAoB,CAAK;QAX3B,eAAU,GAA0B,IAAI,GAAG,EAAE,CAAC;QAC9C,sBAAiB,GAA8B,EAAE,CAAC;QAClD,sBAAiB,GAA0D,EAAE,CAAC;QAc7F,qCAAqC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC7C,CAAC;IAES,IAAI,CAAC,OAAiB;QAC9B,8BAA8B;QAC9B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACvC,EAAE,CAAC,OAAO,EAAE,CAAC;SACd;QAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAES,KAAK,CAAC,IAAc,EAAE,YAAY,GAAG,IAAI;QACjD,IAAI,UAAU,CAAC;QACf,IAAI,YAAY,EAAE;YAChB,+CAA+C;YAC/C,UAAU,GAAG,IAAA,yBAAY,EAAC,IAAI,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;gBACnC,OAAO;aACR;SACF;QAED,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,QAAQ;YACR,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;SAC1E,CAAC,CAAC;QAEH,8BAA8B;QAC9B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACnB;IACH,CAAC;IAES,KAAK,CAAC,KAAa,EAAE,IAAgB;QAC7C,4EAA4E;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,CAAC,KAAK;YACJ,sCAAsC;YACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;gBAChE,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;oBACvC,MAAM;iBACP;gBAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAG,CAAC;gBACvD,MAAM,OAAO,GAAG,yCAAmB,CAAC,eAAe,CACjD,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAC5G,CAAC;gBACF,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAW;oBAClE,SAAS,EAAE,KAAK;oBAChB,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI;wBAC5B,MAAM,OAAO,GAAa,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAE,CAAC;wBACnE,IAAI,CAAC,OAAO,CAAC,CAAC;wBACd,IAAI,EAAE,CAAC;oBACT,CAAC;iBACF,CAAC,CAAC;gBACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;oBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC9C,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC3D,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;wBACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC1B,CAAC,CAAC,CAAC;oBACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBAC9B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;wBACnF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC1B,CAAC,CAAC,CAAC;iBACJ;gBAED,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;aAChD;YAED,qDAAqD;YACrD,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,IAAqB,CAAC;YAC1B,0CAA0C;YAC1C,OAAO,SAAS,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE;gBACxC,uDAAuD;gBACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACnE,0CAA0C;oBAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE;wBACtD,KAAK,EAAE,CAAC;wBACR,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;qBAClB;iBACF;aACF;YAED,oCAAoC;YACpC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9E,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;QACH,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,IAAI,EAAE,CAAC;QACT,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC;CACF;AApHD,gEAoHC","sourcesContent":["import type { MediatorQueryOperation } from '@comunica/bus-query-operation';\nimport { ActorQueryOperation } from '@comunica/bus-query-operation';\nimport type { IActionContext } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { BufferedIterator } from 'asynciterator';\nimport { DataFactory } from 'rdf-data-factory';\nimport { termToString } from 'rdf-string';\nimport type { Algebra } from 'sparqlalgebrajs';\nimport { Factory } from 'sparqlalgebrajs';\n\nconst DF = new DataFactory();\nconst FACTORY = new Factory();\n\n/**\n * An iterator that implements the multi-length property path operation (* and +)\n * for a fixed subject and predicate, and a variable object.\n */\nexport class PathVariableObjectIterator extends BufferedIterator<RDF.Term> {\n private readonly termHashes: Map<string, RDF.Term> = new Map();\n private readonly runningOperations: AsyncIterator<RDF.Term>[] = [];\n private readonly pendingOperations: { variable: RDF.Variable; operation: Algebra.Path }[] = [];\n\n public constructor(\n private readonly subject: RDF.Term,\n private readonly predicate: Algebra.PropertyPathSymbol,\n private readonly graph: RDF.Term,\n private readonly context: IActionContext,\n private readonly mediatorQueryOperation: MediatorQueryOperation,\n emitFirstSubject: boolean,\n private readonly maxRunningOperations = 16,\n ) {\n // The autoStart flag must be true to kickstart metadata collection\n super({ autoStart: true });\n\n // Push the subject as starting point\n this._push(this.subject, emitFirstSubject);\n }\n\n protected _end(destroy?: boolean): void {\n // Close all running iterators\n for (const it of this.runningOperations) {\n it.destroy();\n }\n\n super._end(destroy);\n }\n\n protected _push(item: RDF.Term, pushAsResult = true): void {\n let termString;\n if (pushAsResult) {\n // Don't push if this subject was already found\n termString = termToString(item);\n if (this.termHashes.has(termString)) {\n return;\n }\n }\n\n // Add a pending path operation for this item\n const variable = DF.variable('b');\n this.pendingOperations.push({\n variable,\n operation: FACTORY.createPath(item, this.predicate, variable, this.graph),\n });\n\n // Otherwise, push the subject\n if (termString) {\n this.termHashes.set(termString, item);\n super._push(item);\n }\n }\n\n protected _read(count: number, done: () => void): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this\n const self = this;\n (async function() {\n // Open as many operations as possible\n while (self.runningOperations.length < self.maxRunningOperations) {\n if (self.pendingOperations.length === 0) {\n break;\n }\n\n const pendingOperation = self.pendingOperations.pop()!;\n const results = ActorQueryOperation.getSafeBindings(\n await self.mediatorQueryOperation.mediate({ operation: pendingOperation.operation, context: self.context }),\n );\n const runningOperation = results.bindingsStream.transform<RDF.Term>({\n autoStart: false,\n transform(bindings, next, push) {\n const newTerm: RDF.Term = bindings.get(pendingOperation.variable)!;\n push(newTerm);\n next();\n },\n });\n if (!runningOperation.done) {\n self.runningOperations.push(runningOperation);\n runningOperation.on('error', error => self.destroy(error));\n runningOperation.on('readable', () => {\n self.readable = true;\n self._fillBufferAsync();\n });\n runningOperation.on('end', () => {\n self.runningOperations.splice(self.runningOperations.indexOf(runningOperation), 1);\n self.readable = true;\n self._fillBufferAsync();\n });\n }\n\n self.setProperty('metadata', results.metadata);\n }\n\n // Try to read `count` items (based on UnionIterator)\n let lastCount = 0;\n let item: RDF.Term | null;\n // eslint-disable-next-line no-cond-assign\n while (lastCount !== (lastCount = count)) {\n // Prioritize the operations that have been added first\n for (let i = 0; i < self.runningOperations.length && count > 0; i++) {\n // eslint-disable-next-line no-cond-assign\n if ((item = self.runningOperations[i].read()) !== null) {\n count--;\n self._push(item);\n }\n }\n }\n\n // Close if everything has been read\n if (self.runningOperations.length === 0 && self.pendingOperations.length === 0) {\n self.close();\n }\n })().then(() => {\n done();\n }, error => this.destroy(error));\n }\n}\n"]}
1
+ {"version":3,"file":"PathVariableObjectIterator.js","sourceRoot":"","sources":["PathVariableObjectIterator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MediatorQueryOperation } from '@comunica/bus-query-operation';\nimport { ActorQueryOperation } from '@comunica/bus-query-operation';\nimport type { IActionContext } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { BufferedIterator } from 'asynciterator';\nimport { DataFactory } from 'rdf-data-factory';\nimport { termToString } from 'rdf-string';\nimport type { Algebra } from 'sparqlalgebrajs';\nimport { Factory } from 'sparqlalgebrajs';\n\nconst DF = new DataFactory();\nconst FACTORY = new Factory();\n\n/**\n * An iterator that implements the multi-length property path operation (* and +)\n * for a fixed subject and predicate, and a variable object.\n */\nexport class PathVariableObjectIterator extends BufferedIterator<RDF.Term> {\n private readonly termHashes: Map<string, RDF.Term> = new Map();\n private readonly runningOperations: AsyncIterator<RDF.Term>[] = [];\n private readonly pendingOperations: { variable: RDF.Variable; operation: Algebra.Path }[] = [];\n\n public constructor(\n private readonly subject: RDF.Term,\n private readonly predicate: Algebra.PropertyPathSymbol,\n private readonly graph: RDF.Term,\n private readonly context: IActionContext,\n private readonly mediatorQueryOperation: MediatorQueryOperation,\n emitFirstSubject: boolean,\n private readonly maxRunningOperations = 16,\n ) {\n // The autoStart flag must be true to kickstart metadata collection\n super({ autoStart: true });\n\n // Push the subject as starting point\n this._push(this.subject, emitFirstSubject);\n }\n\n protected override _end(destroy?: boolean): void {\n // Close all running iterators\n for (const it of this.runningOperations) {\n it.destroy();\n }\n\n super._end(destroy);\n }\n\n protected override _push(item: RDF.Term, pushAsResult = true): void {\n let termString;\n if (pushAsResult) {\n // Don't push if this subject was already found\n termString = termToString(item);\n if (this.termHashes.has(termString)) {\n return;\n }\n }\n\n // Add a pending path operation for this item\n const variable = DF.variable('b');\n this.pendingOperations.push({\n variable,\n operation: FACTORY.createPath(item, this.predicate, variable, this.graph),\n });\n\n // Otherwise, push the subject\n if (termString) {\n this.termHashes.set(termString, item);\n super._push(item);\n }\n }\n\n protected override _read(count: number, done: () => void): void {\n // eslint-disable-next-line ts/no-this-alias\n const self = this;\n (async function() {\n // Open as many operations as possible\n while (self.runningOperations.length < self.maxRunningOperations) {\n if (self.pendingOperations.length === 0) {\n break;\n }\n\n const pendingOperation = self.pendingOperations.pop()!;\n const results = ActorQueryOperation.getSafeBindings(\n await self.mediatorQueryOperation.mediate({ operation: pendingOperation.operation, context: self.context }),\n );\n const runningOperation = results.bindingsStream.transform<RDF.Term>({\n autoStart: false,\n transform(bindings, next, push) {\n const newTerm: RDF.Term = bindings.get(pendingOperation.variable)!;\n push(newTerm);\n next();\n },\n });\n if (!runningOperation.done) {\n self.runningOperations.push(runningOperation);\n runningOperation.on('error', error => self.destroy(error));\n runningOperation.on('readable', () => {\n self.readable = true;\n self._fillBufferAsync();\n });\n runningOperation.on('end', () => {\n self.runningOperations.splice(self.runningOperations.indexOf(runningOperation), 1);\n self.readable = true;\n self._fillBufferAsync();\n });\n }\n\n self.setProperty('metadata', results.metadata);\n }\n\n // Try to read `count` items (based on UnionIterator)\n let lastCount = 0;\n let item: RDF.Term | null;\n // eslint-disable-next-line no-cond-assign\n while (lastCount !== (lastCount = count)) {\n // Prioritize the operations that have been added first\n for (let i = 0; i < self.runningOperations.length && count > 0; i++) {\n // eslint-disable-next-line no-cond-assign\n if ((item = self.runningOperations[i].read()) !== null) {\n count--;\n self._push(item);\n }\n }\n }\n\n // Close if everything has been read\n if (self.runningOperations.length === 0 && self.pendingOperations.length === 0) {\n self.close();\n }\n })().then(() => {\n done();\n }, error => this.destroy(error));\n }\n}\n"]}
package/package.json CHANGED
@@ -1,52 +1,52 @@
1
1
  {
2
2
  "name": "@comunica/actor-abstract-path",
3
- "version": "3.0.1-alpha.45.0",
3
+ "version": "3.0.1-alpha.46.0",
4
4
  "description": "An abstract actor for handling mediatypes",
5
5
  "lsd:module": true,
6
- "main": "lib/index.js",
7
- "typings": "lib/index",
6
+ "license": "MIT",
7
+ "homepage": "https://comunica.dev/",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "https://github.com/comunica/comunica.git",
11
11
  "directory": "packages/actor-abstract-path"
12
12
  },
13
- "publishConfig": {
14
- "access": "public"
13
+ "bugs": {
14
+ "url": "https://github.com/comunica/comunica/issues"
15
15
  },
16
- "sideEffects": false,
17
16
  "keywords": [
18
17
  "comunica",
19
18
  "actor",
20
19
  "abstract",
21
20
  "mediatype"
22
21
  ],
23
- "license": "MIT",
24
- "bugs": {
25
- "url": "https://github.com/comunica/comunica/issues"
22
+ "sideEffects": false,
23
+ "main": "lib/index.js",
24
+ "typings": "lib/index",
25
+ "publishConfig": {
26
+ "access": "public"
26
27
  },
27
- "homepage": "https://comunica.dev/",
28
28
  "files": [
29
29
  "components",
30
30
  "lib/**/*.d.ts",
31
31
  "lib/**/*.js",
32
32
  "lib/**/*.js.map"
33
33
  ],
34
+ "scripts": {
35
+ "build": "npm run build:ts && npm run build:components",
36
+ "build:ts": "node \"../../node_modules/typescript/bin/tsc\"",
37
+ "build:components": "componentsjs-generator"
38
+ },
34
39
  "dependencies": {
35
- "@comunica/bindings-factory": "3.0.1-alpha.45.0",
36
- "@comunica/bus-query-operation": "3.0.1-alpha.45.0",
37
- "@comunica/context-entries": "3.0.1-alpha.45.0",
38
- "@comunica/core": "3.0.1-alpha.45.0",
39
- "@comunica/types": "3.0.1-alpha.45.0",
40
+ "@comunica/bindings-factory": "3.0.1-alpha.46.0",
41
+ "@comunica/bus-query-operation": "3.0.1-alpha.46.0",
42
+ "@comunica/context-entries": "3.0.1-alpha.46.0",
43
+ "@comunica/core": "3.0.1-alpha.46.0",
44
+ "@comunica/types": "3.0.1-alpha.46.0",
40
45
  "@rdfjs/types": "*",
41
46
  "asynciterator": "^3.8.1",
42
47
  "rdf-data-factory": "^1.1.1",
43
48
  "rdf-string": "^1.6.1",
44
49
  "sparqlalgebrajs": "^4.3.3"
45
50
  },
46
- "scripts": {
47
- "build": "npm run build:ts && npm run build:components",
48
- "build:ts": "node \"../../node_modules/typescript/bin/tsc\"",
49
- "build:components": "componentsjs-generator"
50
- },
51
- "gitHead": "b5a3900c24e29fa7b3243ab50bc9745d286fbce8"
51
+ "gitHead": "c115712ec55d79c83712e7046a387d5e3a177023"
52
52
  }