@comunica/actor-query-operation-project 3.2.4-alpha.47.0 → 3.3.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.
@@ -54,10 +54,6 @@
54
54
  {
55
55
  "@type": "ParameterRangeGenericTypeReference",
56
56
  "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
57
- },
58
- {
59
- "@type": "ParameterRangeGenericTypeReference",
60
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
61
57
  }
62
58
  ]
63
59
  },
@@ -72,10 +68,6 @@
72
68
  {
73
69
  "@type": "ParameterRangeGenericTypeReference",
74
70
  "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
75
- },
76
- {
77
- "@type": "ParameterRangeGenericTypeReference",
78
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
79
71
  }
80
72
  ]
81
73
  },
@@ -85,20 +77,6 @@
85
77
  },
86
78
  "comment": "The bus this actor subscribes to."
87
79
  },
88
- {
89
- "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_busFailMessage",
90
- "range": {
91
- "@type": "ParameterRangeUnion",
92
- "parameterRangeElements": [
93
- "xsd:string",
94
- {
95
- "@type": "ParameterRangeUndefined"
96
- }
97
- ]
98
- },
99
- "default": "Query operation processing failed: none of the configured actors were able to handle the operation type ${action.operation.type}",
100
- "comment": "The message that will be configured in the bus for reporting failures. This message may be a template string that contains references to the executed `action`. For example, the following templated string is allowed: \"RDF dereferencing failed: no actors could handle ${action.handle.mediaType}\""
101
- },
102
80
  {
103
81
  "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_beforeActors",
104
82
  "range": {
@@ -121,10 +99,6 @@
121
99
  {
122
100
  "@type": "ParameterRangeGenericTypeReference",
123
101
  "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
124
- },
125
- {
126
- "@type": "ParameterRangeGenericTypeReference",
127
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
128
102
  }
129
103
  ]
130
104
  }
@@ -173,12 +147,6 @@
173
147
  "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_bus"
174
148
  }
175
149
  },
176
- {
177
- "keyRaw": "busFailMessage",
178
- "value": {
179
- "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_busFailMessage"
180
- }
181
- },
182
150
  {
183
151
  "keyRaw": "beforeActors",
184
152
  "value": {
@@ -17,9 +17,6 @@
17
17
  "args_bus": {
18
18
  "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_bus"
19
19
  },
20
- "args_busFailMessage": {
21
- "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_busFailMessage"
22
- },
23
20
  "args_beforeActors": {
24
21
  "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_beforeActors",
25
22
  "@container": "@list"
@@ -33,9 +30,6 @@
33
30
  "bus": {
34
31
  "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_bus"
35
32
  },
36
- "busFailMessage": {
37
- "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_busFailMessage"
38
- },
39
33
  "beforeActors": {
40
34
  "@id": "caqop:components/ActorQueryOperationProject.jsonld#ActorQueryOperationProject_args_beforeActors",
41
35
  "@container": "@list"
@@ -1,6 +1,6 @@
1
1
  import type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';
2
2
  import { ActorQueryOperationTypedMediated } from '@comunica/bus-query-operation';
3
- import type { IActorTest, TestResult } from '@comunica/core';
3
+ import type { IActorTest } from '@comunica/core';
4
4
  import type { IActionContext, IQueryOperationResult } from '@comunica/types';
5
5
  import type { Algebra } from 'sparqlalgebrajs';
6
6
  /**
@@ -8,6 +8,6 @@ import type { Algebra } from 'sparqlalgebrajs';
8
8
  */
9
9
  export declare class ActorQueryOperationProject extends ActorQueryOperationTypedMediated<Algebra.Project> {
10
10
  constructor(args: IActorQueryOperationTypedMediatedArgs);
11
- testOperation(_operation: Algebra.Project, _context: IActionContext): Promise<TestResult<IActorTest>>;
11
+ testOperation(_operation: Algebra.Project, _context: IActionContext): Promise<IActorTest>;
12
12
  runOperation(operation: Algebra.Project, context: IActionContext): Promise<IQueryOperationResult>;
13
13
  }
@@ -2,10 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ActorQueryOperationProject = void 0;
4
4
  const bus_query_operation_1 = require("@comunica/bus-query-operation");
5
- const context_entries_1 = require("@comunica/context-entries");
6
- const core_1 = require("@comunica/core");
7
- const utils_data_factory_1 = require("@comunica/utils-data-factory");
8
- const utils_query_operation_1 = require("@comunica/utils-query-operation");
5
+ const data_factory_1 = require("@comunica/data-factory");
6
+ const rdf_data_factory_1 = require("rdf-data-factory");
7
+ const DF = new rdf_data_factory_1.DataFactory();
9
8
  /**
10
9
  * A comunica Project Query Operation Actor.
11
10
  */
@@ -14,34 +13,28 @@ class ActorQueryOperationProject extends bus_query_operation_1.ActorQueryOperati
14
13
  super(args, 'project');
15
14
  }
16
15
  async testOperation(_operation, _context) {
17
- return (0, core_1.passTestVoid)();
16
+ return true;
18
17
  }
19
18
  async runOperation(operation, context) {
20
- const dataFactory = context.getSafe(context_entries_1.KeysInitQuery.dataFactory);
21
19
  // Resolve the input
22
- const output = (0, utils_query_operation_1.getSafeBindings)(await this.mediatorQueryOperation.mediate({ operation: operation.input, context }));
23
- // Index variables
24
- const outputMetadata = await output.metadata();
25
- const variablesOutputIndexed = Object
26
- .fromEntries(outputMetadata.variables.map(entry => [entry.variable.value, entry]));
27
- const variablesOperation = operation.variables.map(v => ({ variable: v, canBeUndef: false }));
28
- const variablesOperationIndexed = Object
29
- .fromEntries(variablesOperation.map(entry => [entry.variable.value, entry]));
20
+ const output = bus_query_operation_1.ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({ operation: operation.input, context }));
30
21
  // Find all variables that should be deleted from the input stream.
22
+ const outputMetadata = await output.metadata();
23
+ const variables = operation.variables;
31
24
  const deleteVariables = outputMetadata.variables
32
- .filter(variable => !(variable.variable.value in variablesOperationIndexed));
33
- // Determine if variables can be undef
34
- const variablesOutput = variablesOperation.map(variable => ({
35
- variable: variable.variable,
36
- canBeUndef: !(variable.variable.value in variablesOutputIndexed) ||
37
- variablesOutputIndexed[variable.variable.value].canBeUndef,
38
- }));
25
+ .filter(variable => !variables.some(subVariable => variable.value === subVariable.value));
26
+ // Error if there are variables that are not bound in the input stream.
27
+ const missingVariables = variables
28
+ .filter(variable => !outputMetadata.variables.some(subVariable => variable.value === subVariable.value));
29
+ if (missingVariables.length > 0) {
30
+ outputMetadata.canContainUndefs = true;
31
+ }
39
32
  // Make sure the project variables are the only variables that are present in the bindings.
40
33
  let bindingsStream = deleteVariables.length === 0 ?
41
34
  output.bindingsStream :
42
35
  output.bindingsStream.map((bindings) => {
43
36
  for (const deleteVariable of deleteVariables) {
44
- bindings = bindings.delete(deleteVariable.variable);
37
+ bindings = bindings.delete(deleteVariable);
45
38
  }
46
39
  return bindings;
47
40
  });
@@ -53,10 +46,10 @@ class ActorQueryOperationProject extends bus_query_operation_1.ActorQueryOperati
53
46
  blankNodeCounter++;
54
47
  const scopedBlankNodesCache = new Map();
55
48
  return bindings.map((term) => {
56
- if (term instanceof utils_data_factory_1.BlankNodeBindingsScoped) {
49
+ if (term instanceof data_factory_1.BlankNodeBindingsScoped) {
57
50
  let scopedBlankNode = scopedBlankNodesCache.get(term.value);
58
51
  if (!scopedBlankNode) {
59
- scopedBlankNode = dataFactory.blankNode(`${term.value}${blankNodeCounter}`);
52
+ scopedBlankNode = DF.blankNode(`${term.value}${blankNodeCounter}`);
60
53
  scopedBlankNodesCache.set(term.value, scopedBlankNode);
61
54
  }
62
55
  return scopedBlankNode;
@@ -67,7 +60,7 @@ class ActorQueryOperationProject extends bus_query_operation_1.ActorQueryOperati
67
60
  return {
68
61
  type: 'bindings',
69
62
  bindingsStream,
70
- metadata: async () => ({ ...outputMetadata, variables: variablesOutput }),
63
+ metadata: async () => ({ ...outputMetadata, variables }),
71
64
  };
72
65
  }
73
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ActorQueryOperationProject.js","sourceRoot":"","sources":["ActorQueryOperationProject.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport { ActorQueryOperationTypedMediated } from '@comunica/bus-query-operation';\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport type { IActorTest, TestResult } from '@comunica/core';\nimport { passTestVoid } from '@comunica/core';\nimport type {\n Bindings,\n BindingsStream,\n ComunicaDataFactory,\n IActionContext,\n IQueryOperationResult,\n IQueryOperationResultBindings,\n MetadataVariable,\n} from '@comunica/types';\nimport { BlankNodeBindingsScoped } from '@comunica/utils-data-factory';\nimport { getSafeBindings } from '@comunica/utils-query-operation';\nimport type * as RDF from '@rdfjs/types';\nimport type { Algebra } from 'sparqlalgebrajs';\n\n/**\n * A comunica Project Query Operation Actor.\n */\nexport class ActorQueryOperationProject extends ActorQueryOperationTypedMediated<Algebra.Project> {\n public constructor(args: IActorQueryOperationTypedMediatedArgs) {\n super(args, 'project');\n }\n\n public async testOperation(_operation: Algebra.Project, _context: IActionContext): Promise<TestResult<IActorTest>> {\n return passTestVoid();\n }\n\n public async runOperation(operation: Algebra.Project, context: IActionContext):\n Promise<IQueryOperationResult> {\n const dataFactory: ComunicaDataFactory = context.getSafe(KeysInitQuery.dataFactory);\n\n // Resolve the input\n const output: IQueryOperationResultBindings = getSafeBindings(\n await this.mediatorQueryOperation.mediate({ operation: operation.input, context }),\n );\n\n // Index variables\n const outputMetadata = await output.metadata();\n const variablesOutputIndexed: Record<string, MetadataVariable> = Object\n .fromEntries(outputMetadata.variables.map(entry => [ entry.variable.value, entry ]));\n const variablesOperation: MetadataVariable[] = operation.variables.map(v => ({ variable: v, canBeUndef: false }));\n const variablesOperationIndexed: Record<string, MetadataVariable> = Object\n .fromEntries(variablesOperation.map(entry => [ entry.variable.value, entry ]));\n\n // Find all variables that should be deleted from the input stream.\n const deleteVariables = outputMetadata.variables\n .filter(variable => !(variable.variable.value in variablesOperationIndexed));\n\n // Determine if variables can be undef\n const variablesOutput: MetadataVariable[] = variablesOperation.map(variable => ({\n variable: variable.variable,\n canBeUndef: !(variable.variable.value in variablesOutputIndexed) ||\n variablesOutputIndexed[variable.variable.value].canBeUndef,\n }));\n\n // Make sure the project variables are the only variables that are present in the bindings.\n let bindingsStream: BindingsStream = deleteVariables.length === 0 ?\n output.bindingsStream :\n output.bindingsStream.map((bindings: Bindings) => {\n for (const deleteVariable of deleteVariables) {\n bindings = bindings.delete(deleteVariable.variable);\n }\n return bindings;\n });\n\n // Make sure that blank nodes with same labels are not reused over different bindings, as required by SPARQL 1.1.\n // Required for the BNODE() function: https://www.w3.org/TR/sparql11-query/#func-bnode\n // When we have a scoped blank node, make sure the skolemized value is maintained.\n let blankNodeCounter = 0;\n bindingsStream = bindingsStream.map((bindings: Bindings) => {\n blankNodeCounter++;\n const scopedBlankNodesCache = new Map<string, RDF.BlankNode>();\n return bindings.map((term) => {\n if (term instanceof BlankNodeBindingsScoped) {\n let scopedBlankNode = scopedBlankNodesCache.get(term.value);\n if (!scopedBlankNode) {\n scopedBlankNode = dataFactory.blankNode(`${term.value}${blankNodeCounter}`);\n scopedBlankNodesCache.set(term.value, scopedBlankNode);\n }\n return scopedBlankNode;\n }\n return term;\n });\n });\n\n return {\n type: 'bindings',\n bindingsStream,\n metadata: async() => ({ ...outputMetadata, variables: variablesOutput }),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"ActorQueryOperationProject.js","sourceRoot":"","sources":["ActorQueryOperationProject.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport { ActorQueryOperation, ActorQueryOperationTypedMediated } from '@comunica/bus-query-operation';\nimport type { IActorTest } from '@comunica/core';\nimport { BlankNodeBindingsScoped } from '@comunica/data-factory';\nimport type {\n Bindings,\n BindingsStream,\n IActionContext,\n IQueryOperationResult,\n IQueryOperationResultBindings,\n} from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { DataFactory } from 'rdf-data-factory';\nimport type { Algebra } from 'sparqlalgebrajs';\n\nconst DF = new DataFactory();\n\n/**\n * A comunica Project Query Operation Actor.\n */\nexport class ActorQueryOperationProject extends ActorQueryOperationTypedMediated<Algebra.Project> {\n public constructor(args: IActorQueryOperationTypedMediatedArgs) {\n super(args, 'project');\n }\n\n public async testOperation(_operation: Algebra.Project, _context: IActionContext): Promise<IActorTest> {\n return true;\n }\n\n public async runOperation(operation: Algebra.Project, context: IActionContext):\n Promise<IQueryOperationResult> {\n // Resolve the input\n const output: IQueryOperationResultBindings = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ operation: operation.input, context }),\n );\n\n // Find all variables that should be deleted from the input stream.\n const outputMetadata = await output.metadata();\n const variables = operation.variables;\n const deleteVariables = outputMetadata.variables\n .filter(variable => !variables.some(subVariable => variable.value === subVariable.value));\n\n // Error if there are variables that are not bound in the input stream.\n const missingVariables = variables\n .filter(variable => !outputMetadata.variables.some(subVariable => variable.value === subVariable.value));\n if (missingVariables.length > 0) {\n outputMetadata.canContainUndefs = true;\n }\n\n // Make sure the project variables are the only variables that are present in the bindings.\n let bindingsStream: BindingsStream = deleteVariables.length === 0 ?\n output.bindingsStream :\n output.bindingsStream.map((bindings: Bindings) => {\n for (const deleteVariable of deleteVariables) {\n bindings = bindings.delete(deleteVariable);\n }\n return bindings;\n });\n\n // Make sure that blank nodes with same labels are not reused over different bindings, as required by SPARQL 1.1.\n // Required for the BNODE() function: https://www.w3.org/TR/sparql11-query/#func-bnode\n // When we have a scoped blank node, make sure the skolemized value is maintained.\n let blankNodeCounter = 0;\n bindingsStream = bindingsStream.map((bindings: Bindings) => {\n blankNodeCounter++;\n const scopedBlankNodesCache = new Map<string, RDF.BlankNode>();\n return bindings.map((term) => {\n if (term instanceof BlankNodeBindingsScoped) {\n let scopedBlankNode = scopedBlankNodesCache.get(term.value);\n if (!scopedBlankNode) {\n scopedBlankNode = DF.blankNode(`${term.value}${blankNodeCounter}`);\n scopedBlankNodesCache.set(term.value, scopedBlankNode);\n }\n return scopedBlankNode;\n }\n return term;\n });\n });\n\n return {\n type: 'bindings',\n bindingsStream,\n metadata: async() => ({ ...outputMetadata, variables }),\n };\n }\n}\n"]}
package/package.json CHANGED
@@ -1,13 +1,9 @@
1
1
  {
2
2
  "name": "@comunica/actor-query-operation-project",
3
- "version": "3.2.4-alpha.47.0",
3
+ "version": "3.3.0",
4
4
  "description": "A project query-operation actor",
5
5
  "lsd:module": true,
6
6
  "license": "MIT",
7
- "funding": {
8
- "type": "opencollective",
9
- "url": "https://opencollective.com/comunica-association"
10
- },
11
7
  "homepage": "https://comunica.dev/",
12
8
  "repository": {
13
9
  "type": "git",
@@ -41,14 +37,13 @@
41
37
  "build:components": "componentsjs-generator"
42
38
  },
43
39
  "dependencies": {
44
- "@comunica/bus-query-operation": "3.2.4-alpha.47.0",
45
- "@comunica/context-entries": "3.2.4-alpha.47.0",
46
- "@comunica/core": "3.2.4-alpha.47.0",
47
- "@comunica/types": "3.2.4-alpha.47.0",
48
- "@comunica/utils-data-factory": "3.2.4-alpha.47.0",
49
- "@comunica/utils-query-operation": "3.2.4-alpha.47.0",
40
+ "@comunica/bus-query-operation": "^3.3.0",
41
+ "@comunica/core": "^3.3.0",
42
+ "@comunica/data-factory": "^3.1.0",
43
+ "@comunica/types": "^3.3.0",
50
44
  "@rdfjs/types": "*",
51
- "sparqlalgebrajs": "^4.3.8"
45
+ "rdf-data-factory": "^1.1.1",
46
+ "sparqlalgebrajs": "^4.3.7"
52
47
  },
53
- "gitHead": "85bd4c5cf07dfc293ebbc3a1416b70e2db8bfc48"
48
+ "gitHead": "02bde397d206f1f5a523643a6a604c89e792e2f9"
54
49
  }