@comunica/actor-query-operation-path-alt
Version:
A path-alt query-operation actor
41 lines • 2.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActorQueryOperationPathAlt = void 0;
const actor_abstract_path_1 = require("@comunica/actor-abstract-path");
const actor_query_operation_union_1 = require("@comunica/actor-query-operation-union");
const context_entries_1 = require("@comunica/context-entries");
const utils_algebra_1 = require("@comunica/utils-algebra");
const utils_query_operation_1 = require("@comunica/utils-query-operation");
const asynciterator_1 = require("asynciterator");
/**
* A comunica Path Alt Query Operation Actor.
*/
class ActorQueryOperationPathAlt extends actor_abstract_path_1.ActorAbstractPath {
mediatorRdfMetadataAccumulate;
constructor(args) {
super(args, utils_algebra_1.Algebra.Types.ALT);
this.mediatorRdfMetadataAccumulate = args.mediatorRdfMetadataAccumulate;
}
async runOperation(operation, context) {
const dataFactory = context.getSafe(context_entries_1.KeysInitQuery.dataFactory);
const algebraFactory = new utils_algebra_1.AlgebraFactory(dataFactory);
const predicate = operation.predicate;
const subOperations = (await Promise.all(predicate.input
.map(subPredicate => this.mediatorQueryOperation.mediate({
context,
operation: algebraFactory.createPath(operation.subject, subPredicate, operation.object, operation.graph),
}))))
.map(utils_query_operation_1.getSafeBindings);
const bindingsStream = new asynciterator_1.UnionIterator(subOperations.map(op => op.bindingsStream), { autoStart: false });
const metadata = () => Promise.all(subOperations.map(output => output.metadata()))
.then(subMeta => actor_query_operation_union_1.ActorQueryOperationUnion
.unionMetadata(subMeta, true, context, this.mediatorRdfMetadataAccumulate));
return {
type: 'bindings',
bindingsStream,
metadata,
};
}
}
exports.ActorQueryOperationPathAlt = ActorQueryOperationPathAlt;
//# sourceMappingURL=ActorQueryOperationPathAlt.js.map