@comunica/actor-init-query 2.4.3 → 2.5.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/components/ActorInitQuery.jsonld +62 -4
- package/components/ActorInitQueryBase.jsonld +99 -5
- package/components/QueryEngineBase.jsonld +18 -2
- package/components/context.jsonld +20 -8
- package/lib/ActorInitQuery-browser.js.map +1 -0
- package/lib/ActorInitQuery.d.ts +3 -2
- package/lib/ActorInitQuery.js.map +1 -0
- package/lib/ActorInitQueryBase.d.ts +38 -6
- package/lib/ActorInitQueryBase.js +15 -0
- package/lib/ActorInitQueryBase.js.map +1 -0
- package/lib/HttpServiceSparqlEndpoint.js.map +1 -0
- package/lib/MemoryPhysicalQueryPlanLogger.js.map +1 -0
- package/lib/QueryEngineBase.d.ts +11 -11
- package/lib/QueryEngineBase.js.map +1 -0
- package/lib/QueryEngineFactoryBase.js.map +1 -0
- package/lib/cli/CliArgsHandlerBase.js +30 -0
- package/lib/cli/CliArgsHandlerBase.js.map +1 -0
- package/lib/cli/CliArgsHandlerHttp.js.map +1 -0
- package/lib/cli/CliArgsHandlerQuery.js +18 -0
- package/lib/cli/CliArgsHandlerQuery.js.map +1 -0
- package/lib/index-browser.js.map +1 -0
- package/lib/index.js.map +1 -0
- package/package.json +18 -17
- package/LICENSE.txt +0 -22
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@context": [
|
|
3
3
|
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-init-query/^2.0.0/components/context.jsonld",
|
|
4
|
-
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^2.0.0/components/context.jsonld",
|
|
5
4
|
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/types/^2.0.0/components/context.jsonld",
|
|
5
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^2.0.0/components/context.jsonld",
|
|
6
6
|
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-init/^2.0.0/components/context.jsonld"
|
|
7
7
|
],
|
|
8
8
|
"@id": "npmd:@comunica/actor-init-query",
|
|
@@ -12,9 +12,24 @@
|
|
|
12
12
|
"@type": "Class",
|
|
13
13
|
"requireElement": "ActorInitQuery",
|
|
14
14
|
"extends": [
|
|
15
|
-
|
|
15
|
+
{
|
|
16
|
+
"@type": "GenericComponentExtension",
|
|
17
|
+
"component": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase",
|
|
18
|
+
"genericTypeInstances": [
|
|
19
|
+
{
|
|
20
|
+
"@type": "ParameterRangeGenericTypeReference",
|
|
21
|
+
"parameterRangeGenericType": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery__generic_QueryContext"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
16
25
|
],
|
|
17
26
|
"comment": "A comunica Query Init Actor.",
|
|
27
|
+
"genericTypeParameters": [
|
|
28
|
+
{
|
|
29
|
+
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery__generic_QueryContext",
|
|
30
|
+
"range": "ct:components/IQueryContext.jsonld#IQueryContextCommon"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
18
33
|
"parameters": [
|
|
19
34
|
{
|
|
20
35
|
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_mediatorOptimizeQueryOperation",
|
|
@@ -106,7 +121,13 @@
|
|
|
106
121
|
},
|
|
107
122
|
{
|
|
108
123
|
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcuts",
|
|
109
|
-
"range":
|
|
124
|
+
"range": {
|
|
125
|
+
"@type": "ParameterRangeUnion",
|
|
126
|
+
"parameterRangeElements": [
|
|
127
|
+
"rdf:JSON",
|
|
128
|
+
"rdf:JSON"
|
|
129
|
+
]
|
|
130
|
+
},
|
|
110
131
|
"default": {
|
|
111
132
|
"@type": "@json",
|
|
112
133
|
"@value": {
|
|
@@ -125,16 +146,47 @@
|
|
|
125
146
|
"httpAuth": "@comunica/bus-http:auth",
|
|
126
147
|
"httpTimeout": "@comunica/bus-http:http-timeout",
|
|
127
148
|
"httpBodyTimeout": "@comunica/bus-http:http-body-timeout",
|
|
149
|
+
"httpRetryCount": "@comunica/bus-http:http-retry-count",
|
|
150
|
+
"httpRetryDelay": "@comunica/bus-http:http-retry-delay",
|
|
151
|
+
"httpRetryOnServerError": "@comunica/bus-http:http-retry-on-server-error",
|
|
128
152
|
"fetch": "@comunica/bus-http:fetch",
|
|
153
|
+
"recoverBrokenLinks": "@comunica/bus-http-wayback:recover-broken-links",
|
|
129
154
|
"readOnly": "@comunica/bus-query-operation:readOnly",
|
|
130
155
|
"extensionFunctions": "@comunica/actor-init-query:extensionFunctions",
|
|
131
156
|
"extensionFunctionCreator": "@comunica/actor-init-query:extensionFunctionCreator",
|
|
132
157
|
"explain": "@comunica/actor-init-query:explain",
|
|
133
|
-
"unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph"
|
|
158
|
+
"unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph",
|
|
159
|
+
"localizeBlankNodes": "@comunica/actor-query-operation:localizeBlankNodes"
|
|
134
160
|
}
|
|
135
161
|
},
|
|
136
162
|
"comment": "A record of context shortcuts to full context keys (as defined in @comunica/context-entries)."
|
|
137
163
|
},
|
|
164
|
+
{
|
|
165
|
+
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcutsExtensions",
|
|
166
|
+
"range": {
|
|
167
|
+
"@type": "ParameterRangeUnion",
|
|
168
|
+
"parameterRangeElements": [
|
|
169
|
+
{
|
|
170
|
+
"@type": "ParameterRangeArray",
|
|
171
|
+
"parameterRangeValue": {
|
|
172
|
+
"@type": "ParameterRangeUnion",
|
|
173
|
+
"parameterRangeElements": [
|
|
174
|
+
{
|
|
175
|
+
"@type": "ParameterRangeWildcard"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"@type": "ParameterRangeWildcard"
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"@type": "ParameterRangeUndefined"
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
},
|
|
188
|
+
"comment": "An array of `contextKeyShortcuts` that are to be appended to the (default) `contextKeyShortcuts` (which are by default injected by component.js). The appending happens in the constructor call. Conflicting keys will cause an error. If you extend `ActorInitQueryBase` and want to add custom shortcuts, do so as follows: ``` public constructor(args: IActorInitQueryBaseArgs<QueryContext>) { if (!args.contextKeyShortcutsExtensions) { args.contextKeyShortcutsExtensions = []; } args.contextKeyShortcutsExtensions.push(addedShortcuts); super(args); } ```"
|
|
189
|
+
},
|
|
138
190
|
{
|
|
139
191
|
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_name",
|
|
140
192
|
"range": "xsd:string",
|
|
@@ -313,6 +365,12 @@
|
|
|
313
365
|
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcuts"
|
|
314
366
|
}
|
|
315
367
|
},
|
|
368
|
+
{
|
|
369
|
+
"keyRaw": "contextKeyShortcutsExtensions",
|
|
370
|
+
"value": {
|
|
371
|
+
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcutsExtensions"
|
|
372
|
+
}
|
|
373
|
+
},
|
|
316
374
|
{
|
|
317
375
|
"keyRaw": "name",
|
|
318
376
|
"value": {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@context": [
|
|
3
3
|
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-init-query/^2.0.0/components/context.jsonld",
|
|
4
|
-
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^2.0.0/components/context.jsonld",
|
|
5
4
|
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/types/^2.0.0/components/context.jsonld",
|
|
5
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^2.0.0/components/context.jsonld",
|
|
6
6
|
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-init/^2.0.0/components/context.jsonld"
|
|
7
7
|
],
|
|
8
8
|
"@id": "npmd:@comunica/actor-init-query",
|
|
@@ -13,9 +13,24 @@
|
|
|
13
13
|
"requireElement": "ActorInitQueryBase",
|
|
14
14
|
"extends": [
|
|
15
15
|
"cbi:components/ActorInit.jsonld#ActorInit",
|
|
16
|
-
|
|
16
|
+
{
|
|
17
|
+
"@type": "GenericComponentExtension",
|
|
18
|
+
"component": "caiq:components/ActorInitQueryBase.jsonld#IActorInitQueryBaseArgs",
|
|
19
|
+
"genericTypeInstances": [
|
|
20
|
+
{
|
|
21
|
+
"@type": "ParameterRangeGenericTypeReference",
|
|
22
|
+
"parameterRangeGenericType": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase__generic_QueryContext"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
17
26
|
],
|
|
18
27
|
"comment": "A browser-safe comunica Query Init Actor.",
|
|
28
|
+
"genericTypeParameters": [
|
|
29
|
+
{
|
|
30
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase__generic_QueryContext",
|
|
31
|
+
"range": "ct:components/IQueryContext.jsonld#IQueryContextCommon"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
19
34
|
"parameters": [
|
|
20
35
|
{
|
|
21
36
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_mediatorOptimizeQueryOperation",
|
|
@@ -107,7 +122,13 @@
|
|
|
107
122
|
},
|
|
108
123
|
{
|
|
109
124
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcuts",
|
|
110
|
-
"range":
|
|
125
|
+
"range": {
|
|
126
|
+
"@type": "ParameterRangeUnion",
|
|
127
|
+
"parameterRangeElements": [
|
|
128
|
+
"rdf:JSON",
|
|
129
|
+
"rdf:JSON"
|
|
130
|
+
]
|
|
131
|
+
},
|
|
111
132
|
"default": {
|
|
112
133
|
"@type": "@json",
|
|
113
134
|
"@value": {
|
|
@@ -126,16 +147,47 @@
|
|
|
126
147
|
"httpAuth": "@comunica/bus-http:auth",
|
|
127
148
|
"httpTimeout": "@comunica/bus-http:http-timeout",
|
|
128
149
|
"httpBodyTimeout": "@comunica/bus-http:http-body-timeout",
|
|
150
|
+
"httpRetryCount": "@comunica/bus-http:http-retry-count",
|
|
151
|
+
"httpRetryDelay": "@comunica/bus-http:http-retry-delay",
|
|
152
|
+
"httpRetryOnServerError": "@comunica/bus-http:http-retry-on-server-error",
|
|
129
153
|
"fetch": "@comunica/bus-http:fetch",
|
|
154
|
+
"recoverBrokenLinks": "@comunica/bus-http-wayback:recover-broken-links",
|
|
130
155
|
"readOnly": "@comunica/bus-query-operation:readOnly",
|
|
131
156
|
"extensionFunctions": "@comunica/actor-init-query:extensionFunctions",
|
|
132
157
|
"extensionFunctionCreator": "@comunica/actor-init-query:extensionFunctionCreator",
|
|
133
158
|
"explain": "@comunica/actor-init-query:explain",
|
|
134
|
-
"unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph"
|
|
159
|
+
"unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph",
|
|
160
|
+
"localizeBlankNodes": "@comunica/actor-query-operation:localizeBlankNodes"
|
|
135
161
|
}
|
|
136
162
|
},
|
|
137
163
|
"comment": "A record of context shortcuts to full context keys (as defined in @comunica/context-entries)."
|
|
138
164
|
},
|
|
165
|
+
{
|
|
166
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcutsExtensions",
|
|
167
|
+
"range": {
|
|
168
|
+
"@type": "ParameterRangeUnion",
|
|
169
|
+
"parameterRangeElements": [
|
|
170
|
+
{
|
|
171
|
+
"@type": "ParameterRangeArray",
|
|
172
|
+
"parameterRangeValue": {
|
|
173
|
+
"@type": "ParameterRangeUnion",
|
|
174
|
+
"parameterRangeElements": [
|
|
175
|
+
{
|
|
176
|
+
"@type": "ParameterRangeWildcard"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"@type": "ParameterRangeWildcard"
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"@type": "ParameterRangeUndefined"
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
"comment": "An array of `contextKeyShortcuts` that are to be appended to the (default) `contextKeyShortcuts` (which are by default injected by component.js). The appending happens in the constructor call. Conflicting keys will cause an error. If you extend `ActorInitQueryBase` and want to add custom shortcuts, do so as follows: ``` public constructor(args: IActorInitQueryBaseArgs<QueryContext>) { if (!args.contextKeyShortcutsExtensions) { args.contextKeyShortcutsExtensions = []; } args.contextKeyShortcutsExtensions.push(addedShortcuts); super(args); } ```"
|
|
190
|
+
},
|
|
139
191
|
{
|
|
140
192
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_name",
|
|
141
193
|
"range": "xsd:string",
|
|
@@ -287,7 +339,33 @@
|
|
|
287
339
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase__member_contextKeyShortcuts",
|
|
288
340
|
"memberFieldName": "contextKeyShortcuts",
|
|
289
341
|
"range": {
|
|
290
|
-
"@type": "
|
|
342
|
+
"@type": "ParameterRangeIntersection",
|
|
343
|
+
"parameterRangeElements": [
|
|
344
|
+
{
|
|
345
|
+
"@type": "ParameterRangeWildcard"
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"@type": "ParameterRangeWildcard"
|
|
349
|
+
}
|
|
350
|
+
]
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase__member_contextKeyShortcutsExtensions",
|
|
355
|
+
"memberFieldName": "contextKeyShortcutsExtensions",
|
|
356
|
+
"range": {
|
|
357
|
+
"@type": "ParameterRangeArray",
|
|
358
|
+
"parameterRangeValue": {
|
|
359
|
+
"@type": "ParameterRangeUnion",
|
|
360
|
+
"parameterRangeElements": [
|
|
361
|
+
{
|
|
362
|
+
"@type": "ParameterRangeWildcard"
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"@type": "ParameterRangeWildcard"
|
|
366
|
+
}
|
|
367
|
+
]
|
|
368
|
+
}
|
|
291
369
|
}
|
|
292
370
|
},
|
|
293
371
|
{
|
|
@@ -385,6 +463,12 @@
|
|
|
385
463
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcuts"
|
|
386
464
|
}
|
|
387
465
|
},
|
|
466
|
+
{
|
|
467
|
+
"keyRaw": "contextKeyShortcutsExtensions",
|
|
468
|
+
"value": {
|
|
469
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcutsExtensions"
|
|
470
|
+
}
|
|
471
|
+
},
|
|
388
472
|
{
|
|
389
473
|
"keyRaw": "name",
|
|
390
474
|
"value": {
|
|
@@ -411,6 +495,12 @@
|
|
|
411
495
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#IActorInitQueryBaseArgs",
|
|
412
496
|
"@type": "AbstractClass",
|
|
413
497
|
"requireElement": "IActorInitQueryBaseArgs",
|
|
498
|
+
"genericTypeParameters": [
|
|
499
|
+
{
|
|
500
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#IActorInitQueryBaseArgs__generic_QueryContext",
|
|
501
|
+
"range": "ct:components/IQueryContext.jsonld#IQueryContextCommon"
|
|
502
|
+
}
|
|
503
|
+
],
|
|
414
504
|
"parameters": [],
|
|
415
505
|
"memberFields": [
|
|
416
506
|
{
|
|
@@ -464,6 +554,10 @@
|
|
|
464
554
|
{
|
|
465
555
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#IActorInitQueryBaseArgs__member_contextKeyShortcuts",
|
|
466
556
|
"memberFieldName": "contextKeyShortcuts"
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#IActorInitQueryBaseArgs__member_contextKeyShortcutsExtensions",
|
|
560
|
+
"memberFieldName": "contextKeyShortcutsExtensions"
|
|
467
561
|
}
|
|
468
562
|
],
|
|
469
563
|
"constructorArguments": []
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@context": [
|
|
3
|
-
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-init-query/^2.0.0/components/context.jsonld"
|
|
3
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-init-query/^2.0.0/components/context.jsonld",
|
|
4
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/types/^2.0.0/components/context.jsonld"
|
|
4
5
|
],
|
|
5
6
|
"@id": "npmd:@comunica/actor-init-query",
|
|
6
7
|
"components": [
|
|
@@ -9,10 +10,25 @@
|
|
|
9
10
|
"@type": "Class",
|
|
10
11
|
"requireElement": "QueryEngineBase",
|
|
11
12
|
"comment": "Base implementation of a Comunica query engine.",
|
|
13
|
+
"genericTypeParameters": [
|
|
14
|
+
{
|
|
15
|
+
"@id": "caiq:components/QueryEngineBase.jsonld#QueryEngineBase__generic_QueryContext",
|
|
16
|
+
"range": "ct:components/IQueryContext.jsonld#IQueryContextCommon"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
12
19
|
"parameters": [
|
|
13
20
|
{
|
|
14
21
|
"@id": "caiq:components/QueryEngineBase.jsonld#QueryEngineBase_actorInitQuery",
|
|
15
|
-
"range":
|
|
22
|
+
"range": {
|
|
23
|
+
"@type": "ParameterRangeGenericComponent",
|
|
24
|
+
"component": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase",
|
|
25
|
+
"genericTypeInstances": [
|
|
26
|
+
{
|
|
27
|
+
"@type": "ParameterRangeGenericTypeReference",
|
|
28
|
+
"parameterRangeGenericType": "caiq:components/QueryEngineBase.jsonld#QueryEngineBase__generic_QueryContext"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
16
32
|
}
|
|
17
33
|
],
|
|
18
34
|
"memberFields": [
|
|
@@ -54,8 +54,11 @@
|
|
|
54
54
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_context"
|
|
55
55
|
},
|
|
56
56
|
"args_contextKeyShortcuts": {
|
|
57
|
-
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcuts"
|
|
58
|
-
|
|
57
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcuts"
|
|
58
|
+
},
|
|
59
|
+
"args_contextKeyShortcutsExtensions": {
|
|
60
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcutsExtensions",
|
|
61
|
+
"@container": "@list"
|
|
59
62
|
},
|
|
60
63
|
"args_name": {
|
|
61
64
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_name"
|
|
@@ -104,8 +107,11 @@
|
|
|
104
107
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_context"
|
|
105
108
|
},
|
|
106
109
|
"contextKeyShortcuts": {
|
|
107
|
-
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcuts"
|
|
108
|
-
|
|
110
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcuts"
|
|
111
|
+
},
|
|
112
|
+
"contextKeyShortcutsExtensions": {
|
|
113
|
+
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_contextKeyShortcutsExtensions",
|
|
114
|
+
"@container": "@list"
|
|
109
115
|
},
|
|
110
116
|
"name": {
|
|
111
117
|
"@id": "caiq:components/ActorInitQueryBase.jsonld#ActorInitQueryBase_args_name"
|
|
@@ -165,8 +171,11 @@
|
|
|
165
171
|
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_context"
|
|
166
172
|
},
|
|
167
173
|
"args_contextKeyShortcuts": {
|
|
168
|
-
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcuts"
|
|
169
|
-
|
|
174
|
+
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcuts"
|
|
175
|
+
},
|
|
176
|
+
"args_contextKeyShortcutsExtensions": {
|
|
177
|
+
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcutsExtensions",
|
|
178
|
+
"@container": "@list"
|
|
170
179
|
},
|
|
171
180
|
"args_name": {
|
|
172
181
|
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_name"
|
|
@@ -215,8 +224,11 @@
|
|
|
215
224
|
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_context"
|
|
216
225
|
},
|
|
217
226
|
"contextKeyShortcuts": {
|
|
218
|
-
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcuts"
|
|
219
|
-
|
|
227
|
+
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcuts"
|
|
228
|
+
},
|
|
229
|
+
"contextKeyShortcutsExtensions": {
|
|
230
|
+
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_contextKeyShortcutsExtensions",
|
|
231
|
+
"@container": "@list"
|
|
220
232
|
},
|
|
221
233
|
"name": {
|
|
222
234
|
"@id": "caiq:components/ActorInitQuery.jsonld#ActorInitQuery_args_name"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActorInitQuery-browser.js","sourceRoot":"","sources":["ActorInitQuery-browser.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAC1C,yCAAyC;AACzC,6DAA0D;AAE1D,0BAA0B;AAC1B,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;IAClC,iDAAiD;IACjD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,+CAA+C;CACrF;AAED,MAAa,cAAe,SAAQ,uCAAkB;CAAG;AAAzD,wCAAyD","sourcesContent":["/* eslint-disable unicorn/filename-case */\n/* eslint-enable unicorn/filename-case */\nimport { ActorInitQueryBase } from './ActorInitQueryBase';\n\n/* istanbul ignore next */\nif (typeof process === 'undefined') {\n // Polyfills process.nextTick for readable-stream\n global.process = require('process'); // eslint-disable-line import/no-nodejs-modules\n}\n\nexport class ActorInitQuery extends ActorInitQueryBase {}\n"]}
|
package/lib/ActorInitQuery.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { IActionInit, IActorOutputInit } from '@comunica/bus-init';
|
|
2
|
+
import type { IQueryContextCommon } from '@comunica/types';
|
|
2
3
|
import type { IActorInitQueryBaseArgs } from './ActorInitQueryBase';
|
|
3
4
|
import { ActorInitQueryBase } from './ActorInitQueryBase';
|
|
4
5
|
/**
|
|
5
6
|
* A comunica Query Init Actor.
|
|
6
7
|
*/
|
|
7
|
-
export declare class ActorInitQuery extends ActorInitQueryBase {
|
|
8
|
-
constructor(args: IActorInitQueryBaseArgs);
|
|
8
|
+
export declare class ActorInitQuery<QueryContext extends IQueryContextCommon = IQueryContextCommon> extends ActorInitQueryBase<QueryContext> {
|
|
9
|
+
constructor(args: IActorInitQueryBaseArgs<QueryContext>);
|
|
9
10
|
run(action: IActionInit): Promise<IActorOutputInit>;
|
|
10
11
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActorInitQuery.js","sourceRoot":"","sources":["ActorInitQuery.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAC7C,2BAAkC;AAElC,+DAA0D;AAG1D,iCAA0B;AAE1B,6DAA0D;AAC1D,iEAA8D;AAC9D,mEAAgE;AAChE,uDAAoD;AACpD,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEpD;;GAEG;AACH,MAAa,cACX,SAAQ,uCAAgC;IACxC,YAAmB,IAA2C;QAC5D,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,MAAmB;QAClC,2EAA2E;QAC3E,MAAM,WAAW,GAAG,IAAI,iCAAe,CAAe,IAAI,CAAC,CAAC;QAE5D,MAAM,eAAe,GAAsB;YACzC,IAAI,uCAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;YACtC,IAAI,yCAAmB,CACrB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,CACb;YACD,gFAAgF;YAChF,GAAwB,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,+BAAa,CAAC,eAAe,CAAE,IAAI,EAAE;SAClF,CAAC;QAEF,kCAAkC;QAClC,IAAI,gBAAgB,GAAG,IAAA,eAAK,EAAC,EAAE,CAAC,CAAC;QACjC,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;YAC5C,gBAAgB,GAAG,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;SACnE;QAED,qGAAqG;QACrG,IAAI,IAAyB,CAAC;QAC9B,IAAI;YACF,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAClD;QAAC,OAAO,KAAc,EAAE;YACvB,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,OAAgB,KAAM,CAAC,OAAO,IAAI,CAAC;aAC3G,CAAC;SACH;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,UAAU,GAA2B,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;YACnF,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC3F;QAED,eAAe;QACf,oFAAoF;QACpF,IAAI,KAAyB,CAAC;QAC9B,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC;SAC7B;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE;YACpB,KAAK,GAAG,IAAA,iBAAY,EAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;SACvD;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;SACpB;QAED,qDAAqD;QACrD,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,IAAI;YACF,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;gBAC5C,MAAM,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aAChD;SACF;QAAC,OAAO,KAAc,EAAE;YACvB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAU,KAAM,CAAC,OAAO,CAAC,EAAE,CAAC;SACzE;QAED,iBAAiB;QACjB,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,KAAM,EAAQ,OAAO,CAAC,CAAC;QAE5E,+CAA+C;QAC/C,IAAI,SAAS,IAAI,WAAW,EAAE;YAC5B,OAAO;gBACL,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACtE,CAAC;SACH;QAED,2CAA2C;QAC3C,MAAM,MAAM,GAAwB,CAAC,MAAM,WAAW,CAAC,cAAc,CACnE,WAAW,EACX,IAAI,CAAC,UAAU,EACf,WAAW,CAAC,OAAO,CACpB,CAAC,CAAC,IAAI,CAAC;QAER,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AApFD,wCAoFC;AACD,4CAA4C","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport { readFileSync } from 'fs';\nimport type { IActionInit, IActorOutputInit } from '@comunica/bus-init';\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport type { ICliArgsHandler, IQueryContextCommon } from '@comunica/types';\nimport type { Readable } from 'readable-stream';\nimport yargs from 'yargs';\nimport type { IActorInitQueryBaseArgs } from './ActorInitQueryBase';\nimport { ActorInitQueryBase } from './ActorInitQueryBase';\nimport { CliArgsHandlerBase } from './cli/CliArgsHandlerBase';\nimport { CliArgsHandlerQuery } from './cli/CliArgsHandlerQuery';\nimport { QueryEngineBase } from './QueryEngineBase';\nconst streamifyString = require('streamify-string');\n\n/**\n * A comunica Query Init Actor.\n */\nexport class ActorInitQuery<QueryContext extends IQueryContextCommon = IQueryContextCommon>\n extends ActorInitQueryBase<QueryContext> {\n public constructor(args: IActorInitQueryBaseArgs<QueryContext>) {\n super(args);\n }\n\n public async run(action: IActionInit): Promise<IActorOutputInit> {\n // Wrap this actor in a query engine so we can conveniently execute queries\n const queryEngine = new QueryEngineBase<QueryContext>(this);\n\n const cliArgsHandlers: ICliArgsHandler[] = [\n new CliArgsHandlerBase(action.context),\n new CliArgsHandlerQuery(\n this.defaultQueryInputFormat,\n this.queryString,\n this.context,\n ),\n // eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style\n ...(<ICliArgsHandler[]> action.context?.get(KeysInitQuery.cliArgsHandlers)) || [],\n ];\n\n // Populate yargs arguments object\n let argumentsBuilder = yargs({});\n for (const cliArgsHandler of cliArgsHandlers) {\n argumentsBuilder = cliArgsHandler.populateYargs(argumentsBuilder);\n }\n\n // Extract raw argument values from parsed yargs object, so that we can handle each of them hereafter\n let args: Record<string, any>;\n try {\n args = await argumentsBuilder.parse(action.argv);\n } catch (error: unknown) {\n return {\n stderr: require('streamify-string')(`${await argumentsBuilder.getHelp()}\\n\\n${(<Error> error).message}\\n`),\n };\n }\n\n // Print supported MIME types\n if (args.listformats) {\n const mediaTypes: Record<string, number> = await queryEngine.getResultMediaTypes();\n return { stdout: require('streamify-string')(`${Object.keys(mediaTypes).join('\\n')}\\n`) };\n }\n\n // Define query\n // We need to do this before the cliArgsHandlers, as we may modify the sources array\n let query: string | undefined;\n if (args.query) {\n query = <string> args.query;\n } else if (args.file) {\n query = readFileSync(args.file, { encoding: 'utf8' });\n } else if (args.sources.length > 0) {\n query = args.sources[args.sources.length - 1];\n args.sources.pop();\n }\n\n // Invoke args handlers to process any remaining args\n const context: Record<string, any> = {};\n try {\n for (const cliArgsHandler of cliArgsHandlers) {\n await cliArgsHandler.handleArgs(args, context);\n }\n } catch (error: unknown) {\n return { stderr: require('streamify-string')((<Error> error).message) };\n }\n\n // Evaluate query\n const queryResult = await queryEngine.queryOrExplain(query!, <any> context);\n\n // Output query explanations in a different way\n if ('explain' in queryResult) {\n return {\n stdout: streamifyString(JSON.stringify(queryResult.data, null, ' ')),\n };\n }\n\n // Serialize output according to media type\n const stdout: Readable = <Readable> (await queryEngine.resultToString(\n queryResult,\n args.outputType,\n queryResult.context,\n )).data;\n\n return { stdout };\n }\n}\n/* eslint-enable import/no-nodejs-modules */\n"]}
|
|
@@ -7,11 +7,11 @@ import type { MediatorQueryOperation } from '@comunica/bus-query-operation';
|
|
|
7
7
|
import type { MediatorQueryParse } from '@comunica/bus-query-parse';
|
|
8
8
|
import type { MediatorQueryResultSerializeHandle, MediatorQueryResultSerializeMediaTypes, MediatorQueryResultSerializeMediaTypeFormats } from '@comunica/bus-query-result-serialize';
|
|
9
9
|
import type { IActorTest } from '@comunica/core';
|
|
10
|
-
import type { Logger } from '@comunica/types';
|
|
10
|
+
import type { IQueryContextCommon, Logger } from '@comunica/types';
|
|
11
11
|
/**
|
|
12
12
|
* A browser-safe comunica Query Init Actor.
|
|
13
13
|
*/
|
|
14
|
-
export declare class ActorInitQueryBase extends ActorInit implements IActorInitQueryBaseArgs {
|
|
14
|
+
export declare class ActorInitQueryBase<QueryContext extends IQueryContextCommon = IQueryContextCommon> extends ActorInit implements IActorInitQueryBaseArgs<QueryContext> {
|
|
15
15
|
readonly mediatorOptimizeQueryOperation: MediatorOptimizeQueryOperation;
|
|
16
16
|
readonly mediatorQueryOperation: MediatorQueryOperation;
|
|
17
17
|
readonly mediatorQueryParse: MediatorQueryParse;
|
|
@@ -24,12 +24,21 @@ export declare class ActorInitQueryBase extends ActorInit implements IActorInitQ
|
|
|
24
24
|
readonly queryString?: string;
|
|
25
25
|
readonly defaultQueryInputFormat?: string;
|
|
26
26
|
readonly context?: string;
|
|
27
|
-
readonly contextKeyShortcuts: Record<string, string
|
|
27
|
+
readonly contextKeyShortcuts: Record<string, string> & Partial<Record<keyof QueryContext, string>>;
|
|
28
|
+
/** Array of `contextKeyShortcuts` appended to `contextKeyShortcuts` during construction. */
|
|
29
|
+
readonly contextKeyShortcutsExtensions?: (Record<string, string> | Partial<Record<keyof Omit<QueryContext, keyof IQueryContextCommon>, string>>)[];
|
|
30
|
+
/**
|
|
31
|
+
* Create new ActorInitQueryBase object.
|
|
32
|
+
* @param args.contextKeyShortcutsExtensions Array of `contextKeyShortcuts` that are merged
|
|
33
|
+
* with the `contextKeyShortcuts` field. This allows adding shortcuts to the defaults.
|
|
34
|
+
* @throws When duplicate keys are present in `args.contextKeyShortcuts`
|
|
35
|
+
* and `args.contextKeyShortcutsExtensions`.
|
|
36
|
+
*/
|
|
28
37
|
constructor(args: IActorInitQueryBaseArgs);
|
|
29
38
|
test(action: IActionInit): Promise<IActorTest>;
|
|
30
39
|
run(action: IActionInit): Promise<IActorOutputInit>;
|
|
31
40
|
}
|
|
32
|
-
export interface IActorInitQueryBaseArgs extends IActorInitArgs {
|
|
41
|
+
export interface IActorInitQueryBaseArgs<QueryContext extends IQueryContextCommon = IQueryContextCommon> extends IActorInitArgs {
|
|
33
42
|
/**
|
|
34
43
|
* The query operation optimize mediator
|
|
35
44
|
*/
|
|
@@ -99,13 +108,36 @@ export interface IActorInitQueryBaseArgs extends IActorInitArgs {
|
|
|
99
108
|
* "httpAuth": "@comunica/bus-http:auth",
|
|
100
109
|
* "httpTimeout": "@comunica/bus-http:http-timeout",
|
|
101
110
|
* "httpBodyTimeout": "@comunica/bus-http:http-body-timeout",
|
|
111
|
+
* "httpRetryCount": "@comunica/bus-http:http-retry-count",
|
|
112
|
+
* "httpRetryDelay": "@comunica/bus-http:http-retry-delay",
|
|
113
|
+
* "httpRetryOnServerError": "@comunica/bus-http:http-retry-on-server-error",
|
|
102
114
|
* "fetch": "@comunica/bus-http:fetch",
|
|
115
|
+
* "recoverBrokenLinks": "@comunica/bus-http-wayback:recover-broken-links",
|
|
103
116
|
* "readOnly": "@comunica/bus-query-operation:readOnly",
|
|
104
117
|
* "extensionFunctions": "@comunica/actor-init-query:extensionFunctions",
|
|
105
118
|
* "extensionFunctionCreator": "@comunica/actor-init-query:extensionFunctionCreator",
|
|
106
119
|
* "explain": "@comunica/actor-init-query:explain",
|
|
107
|
-
* "unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph"
|
|
120
|
+
* "unionDefaultGraph": "@comunica/bus-query-operation:unionDefaultGraph",
|
|
121
|
+
* "localizeBlankNodes": "@comunica/actor-query-operation:localizeBlankNodes"
|
|
108
122
|
* }}
|
|
109
123
|
*/
|
|
110
|
-
contextKeyShortcuts: Record<string, string
|
|
124
|
+
contextKeyShortcuts: Record<string, string> | Partial<Record<keyof QueryContext, string>>;
|
|
125
|
+
/**
|
|
126
|
+
* An array of `contextKeyShortcuts` that are to be appended to the (default) `contextKeyShortcuts`
|
|
127
|
+
* (which are by default injected by component.js).
|
|
128
|
+
*
|
|
129
|
+
* The appending happens in the constructor call. Conflicting keys will cause an error.
|
|
130
|
+
* If you extend `ActorInitQueryBase` and want to add custom shortcuts, do so as follows:
|
|
131
|
+
* ```
|
|
132
|
+
* public constructor(args: IActorInitQueryBaseArgs<QueryContext>) {
|
|
133
|
+
* if (!args.contextKeyShortcutsExtensions) {
|
|
134
|
+
* args.contextKeyShortcutsExtensions = [];
|
|
135
|
+
* }
|
|
136
|
+
* args.contextKeyShortcutsExtensions.push(addedShortcuts);
|
|
137
|
+
*
|
|
138
|
+
* super(args);
|
|
139
|
+
* }
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
contextKeyShortcutsExtensions?: (Record<string, string> | Partial<Record<keyof Omit<QueryContext, keyof IQueryContextCommon>, string>>)[];
|
|
111
143
|
}
|
|
@@ -6,7 +6,22 @@ const bus_init_1 = require("@comunica/bus-init");
|
|
|
6
6
|
* A browser-safe comunica Query Init Actor.
|
|
7
7
|
*/
|
|
8
8
|
class ActorInitQueryBase extends bus_init_1.ActorInit {
|
|
9
|
+
/**
|
|
10
|
+
* Create new ActorInitQueryBase object.
|
|
11
|
+
* @param args.contextKeyShortcutsExtensions Array of `contextKeyShortcuts` that are merged
|
|
12
|
+
* with the `contextKeyShortcuts` field. This allows adding shortcuts to the defaults.
|
|
13
|
+
* @throws When duplicate keys are present in `args.contextKeyShortcuts`
|
|
14
|
+
* and `args.contextKeyShortcutsExtensions`.
|
|
15
|
+
*/
|
|
9
16
|
constructor(args) {
|
|
17
|
+
// Add additional contextKeyShortcuts.
|
|
18
|
+
args.contextKeyShortcutsExtensions?.forEach(extensionShortcuts => {
|
|
19
|
+
// Throw, if there are duplicate keys that are to be added to `contextKeyShortcuts`.
|
|
20
|
+
if (Object.keys(args.contextKeyShortcuts).some(key => Object.keys(extensionShortcuts).includes(key))) {
|
|
21
|
+
throw new Error('Duplicate keys found while adding `contextKeyShortcutsExtensions`.');
|
|
22
|
+
}
|
|
23
|
+
args.contextKeyShortcuts = { ...args.contextKeyShortcuts, ...extensionShortcuts };
|
|
24
|
+
});
|
|
10
25
|
super(args);
|
|
11
26
|
}
|
|
12
27
|
async test(action) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActorInitQueryBase.js","sourceRoot":"","sources":["ActorInitQueryBase.ts"],"names":[],"mappings":";;;AAGA,iDAA+C;AAU/C;;GAEG;AACH,MAAa,kBACX,SAAQ,oBAAS;IAmBjB;;;;;;OAMG;IACH,YAAmB,IAA6B;QAC9C,sCAAsC;QACtC,IAAI,CAAC,6BAA6B,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE;YAC/D,oFAAoF;YACpF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACpG,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;aACvF;YACD,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,kBAAkB,EAAE,CAAC;QACpF,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAmB;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,MAAmB;QAClC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;CACF;AA9CD,gDA8CC","sourcesContent":["import type { MediatorContextPreprocess } from '@comunica/bus-context-preprocess';\nimport type { MediatorHttpInvalidate } from '@comunica/bus-http-invalidate';\nimport type { IActionInit, IActorInitArgs, IActorOutputInit } from '@comunica/bus-init';\nimport { ActorInit } from '@comunica/bus-init';\nimport type { MediatorOptimizeQueryOperation } from '@comunica/bus-optimize-query-operation';\nimport type { MediatorQueryOperation } from '@comunica/bus-query-operation';\nimport type { MediatorQueryParse } from '@comunica/bus-query-parse';\nimport type { MediatorQueryResultSerializeHandle,\n MediatorQueryResultSerializeMediaTypes,\n MediatorQueryResultSerializeMediaTypeFormats } from '@comunica/bus-query-result-serialize';\nimport type { IActorTest } from '@comunica/core';\nimport type { IQueryContextCommon, Logger } from '@comunica/types';\n\n/**\n * A browser-safe comunica Query Init Actor.\n */\nexport class ActorInitQueryBase<QueryContext extends IQueryContextCommon = IQueryContextCommon>\n extends ActorInit implements IActorInitQueryBaseArgs<QueryContext> {\n public readonly mediatorOptimizeQueryOperation: MediatorOptimizeQueryOperation;\n public readonly mediatorQueryOperation: MediatorQueryOperation;\n public readonly mediatorQueryParse: MediatorQueryParse;\n public readonly mediatorQueryResultSerialize: MediatorQueryResultSerializeHandle;\n public readonly mediatorQueryResultSerializeMediaTypeCombiner: MediatorQueryResultSerializeMediaTypes;\n public readonly mediatorQueryResultSerializeMediaTypeFormatCombiner: MediatorQueryResultSerializeMediaTypeFormats;\n public readonly mediatorContextPreprocess: MediatorContextPreprocess;\n public readonly mediatorHttpInvalidate: MediatorHttpInvalidate;\n\n public readonly logger: Logger;\n public readonly queryString?: string;\n public readonly defaultQueryInputFormat?: string;\n public readonly context?: string;\n public readonly contextKeyShortcuts: Record<string, string> & Partial<Record<keyof QueryContext, string>>;\n /** Array of `contextKeyShortcuts` appended to `contextKeyShortcuts` during construction. */\n public readonly contextKeyShortcutsExtensions?: (Record<string, string>\n | Partial<Record<keyof Omit<QueryContext, keyof IQueryContextCommon>, string>>)[];\n\n /**\n * Create new ActorInitQueryBase object.\n * @param args.contextKeyShortcutsExtensions Array of `contextKeyShortcuts` that are merged\n * with the `contextKeyShortcuts` field. This allows adding shortcuts to the defaults.\n * @throws When duplicate keys are present in `args.contextKeyShortcuts`\n * and `args.contextKeyShortcutsExtensions`.\n */\n public constructor(args: IActorInitQueryBaseArgs) {\n // Add additional contextKeyShortcuts.\n args.contextKeyShortcutsExtensions?.forEach(extensionShortcuts => {\n // Throw, if there are duplicate keys that are to be added to `contextKeyShortcuts`.\n if (Object.keys(args.contextKeyShortcuts).some(key => Object.keys(extensionShortcuts).includes(key))) {\n throw new Error('Duplicate keys found while adding `contextKeyShortcutsExtensions`.');\n }\n args.contextKeyShortcuts = { ...args.contextKeyShortcuts, ...extensionShortcuts };\n });\n super(args);\n }\n\n public async test(action: IActionInit): Promise<IActorTest> {\n return true;\n }\n\n public async run(action: IActionInit): Promise<IActorOutputInit> {\n throw new Error('ActorInitSparql#run is not supported in the browser.');\n }\n}\n\nexport interface IActorInitQueryBaseArgs<QueryContext extends IQueryContextCommon = IQueryContextCommon>\n extends IActorInitArgs {\n /**\n * The query operation optimize mediator\n */\n mediatorOptimizeQueryOperation: MediatorOptimizeQueryOperation;\n /**\n * The query operation mediator\n */\n mediatorQueryOperation: MediatorQueryOperation;\n /**\n * The query parse mediator\n */\n mediatorQueryParse: MediatorQueryParse;\n /**\n * The query serialize mediator\n */\n mediatorQueryResultSerialize: MediatorQueryResultSerializeHandle;\n /**\n * The query serialize media type combinator\n */\n mediatorQueryResultSerializeMediaTypeCombiner: MediatorQueryResultSerializeMediaTypes;\n /**\n * The query serialize media type format combinator\n */\n mediatorQueryResultSerializeMediaTypeFormatCombiner: MediatorQueryResultSerializeMediaTypeFormats;\n /**\n * The context processing combinator\n */\n mediatorContextPreprocess: MediatorContextPreprocess;\n /**\n * The HTTP cache invalidation mediator\n */\n mediatorHttpInvalidate: MediatorHttpInvalidate;\n /**\n * The logger of this actor\n * @default {a <npmd:@comunica/logger-void/^2.0.0/components/LoggerVoid.jsonld#LoggerVoid>}\n */\n logger: Logger;\n /**\n * A SPARQL query string\n */\n queryString?: string;\n /**\n * The default query input format\n * @default {sparql}\n */\n defaultQueryInputFormat?: string;\n /**\n * A JSON string of a query operation context\n */\n context?: string;\n /**\n * A record of context shortcuts to full context keys (as defined in @comunica/context-entries).\n * @range {json}\n * @default {{\n * \"source\": \"@comunica/bus-rdf-resolve-quad-pattern:source\",\n * \"sources\": \"@comunica/bus-rdf-resolve-quad-pattern:sources\",\n * \"destination\": \"@comunica/bus-rdf-update-quads:destination\",\n * \"initialBindings\": \"@comunica/actor-init-query:initialBindings\",\n * \"queryFormat\": \"@comunica/actor-init-query:queryFormat\",\n * \"baseIRI\": \"@comunica/actor-init-query:baseIRI\",\n * \"log\": \"@comunica/core:log\",\n * \"datetime\": \"@comunica/actor-http-memento:datetime\",\n * \"queryTimestamp\": \"@comunica/actor-init-query:queryTimestamp\",\n * \"httpProxyHandler\": \"@comunica/actor-http-proxy:httpProxyHandler\",\n * \"lenient\": \"@comunica/actor-init-query:lenient\",\n * \"httpIncludeCredentials\": \"@comunica/bus-http:include-credentials\",\n * \"httpAuth\": \"@comunica/bus-http:auth\",\n * \"httpTimeout\": \"@comunica/bus-http:http-timeout\",\n * \"httpBodyTimeout\": \"@comunica/bus-http:http-body-timeout\",\n * \"httpRetryCount\": \"@comunica/bus-http:http-retry-count\",\n * \"httpRetryDelay\": \"@comunica/bus-http:http-retry-delay\",\n * \"httpRetryOnServerError\": \"@comunica/bus-http:http-retry-on-server-error\",\n * \"fetch\": \"@comunica/bus-http:fetch\",\n * \"recoverBrokenLinks\": \"@comunica/bus-http-wayback:recover-broken-links\",\n * \"readOnly\": \"@comunica/bus-query-operation:readOnly\",\n * \"extensionFunctions\": \"@comunica/actor-init-query:extensionFunctions\",\n * \"extensionFunctionCreator\": \"@comunica/actor-init-query:extensionFunctionCreator\",\n * \"explain\": \"@comunica/actor-init-query:explain\",\n * \"unionDefaultGraph\": \"@comunica/bus-query-operation:unionDefaultGraph\",\n * \"localizeBlankNodes\": \"@comunica/actor-query-operation:localizeBlankNodes\"\n * }}\n */\n contextKeyShortcuts: Record<string, string> | Partial<Record<keyof QueryContext, string>>;\n /**\n * An array of `contextKeyShortcuts` that are to be appended to the (default) `contextKeyShortcuts`\n * (which are by default injected by component.js).\n *\n * The appending happens in the constructor call. Conflicting keys will cause an error.\n * If you extend `ActorInitQueryBase` and want to add custom shortcuts, do so as follows:\n * ```\n * public constructor(args: IActorInitQueryBaseArgs<QueryContext>) {\n * if (!args.contextKeyShortcutsExtensions) {\n * args.contextKeyShortcutsExtensions = [];\n * }\n * args.contextKeyShortcutsExtensions.push(addedShortcuts);\n *\n * super(args);\n * }\n * ```\n */\n contextKeyShortcutsExtensions?: (Record<string, string>\n | Partial<Record<keyof Omit<QueryContext, keyof IQueryContextCommon>, string>>)[];\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpServiceSparqlEndpoint.js","sourceRoot":"","sources":["HttpServiceSparqlEndpoint.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport * as cluster from 'cluster';\nimport type { EventEmitter } from 'events';\nimport * as http from 'http';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport * as querystring from 'querystring';\nimport type { Writable } from 'stream';\nimport * as url from 'url';\nimport { KeysQueryOperation } from '@comunica/context-entries';\nimport { ActionContext } from '@comunica/core';\nimport type { ICliArgsHandler, QueryQuads, QueryType } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { ArrayIterator } from 'asynciterator';\nimport yargs from 'yargs';\nimport { QueryEngineBase, QueryEngineFactoryBase } from '..';\nimport type { IDynamicQueryEngineOptions } from '..';\nimport { CliArgsHandlerBase } from './cli/CliArgsHandlerBase';\nimport { CliArgsHandlerHttp } from './cli/CliArgsHandlerHttp';\n\nconst quad = require('rdf-quad');\n\n/**\n * An HTTP service that exposes a Comunica engine as a SPARQL endpoint.\n */\nexport class HttpServiceSparqlEndpoint {\n public static readonly MIME_PLAIN = 'text/plain';\n public static readonly MIME_JSON = 'application/json';\n\n public readonly engine: Promise<QueryEngineBase>;\n\n public readonly context: any;\n public readonly timeout: number;\n public readonly port: number;\n public readonly workers: number;\n\n public readonly invalidateCacheBeforeQuery: boolean;\n public readonly freshWorkerPerQuery: boolean;\n public readonly contextOverride: boolean;\n\n public lastQueryId = 0;\n\n public constructor(args: IHttpServiceSparqlEndpointArgs) {\n this.context = args.context || {};\n this.timeout = args.timeout ?? 60_000;\n this.port = args.port ?? 3_000;\n this.workers = args.workers ?? 1;\n this.invalidateCacheBeforeQuery = Boolean(args.invalidateCacheBeforeQuery);\n this.freshWorkerPerQuery = Boolean(args.freshWorkerPerQuery);\n this.contextOverride = Boolean(args.contextOverride);\n\n this.engine = new QueryEngineFactoryBase(\n args.moduleRootPath,\n args.defaultConfigPath,\n actorInitQuery => new QueryEngineBase(actorInitQuery),\n ).create(args);\n }\n\n /**\n * Starts the server\n * @param {string[]} argv The commandline arguments that the script was called with\n * @param {module:stream.internal.Writable} stdout The output stream to log to.\n * @param {module:stream.internal.Writable} stderr The error stream to log errors to.\n * @param {string} moduleRootPath The path to the invoking module.\n * @param {NodeJS.ProcessEnv} env The process env to get constants from.\n * @param {string} defaultConfigPath The path to get the config from if none is defined in the environment.\n * @param {(code: number) => void} exit The callback to invoke to stop the script.\n * @param {ICliArgsHandler[]} cliArgsHandlers Enables manipulation of the CLI arguments and their processing.\n * @return {Promise<void>} A promise that resolves when the server has been started.\n */\n public static async runArgsInProcess<Q>(\n argv: string[],\n stdout: Writable,\n stderr: Writable,\n moduleRootPath: string,\n env: NodeJS.ProcessEnv,\n defaultConfigPath: string,\n exit: (code: number) => void,\n cliArgsHandlers: ICliArgsHandler[] = [],\n ): Promise<void> {\n const options = await HttpServiceSparqlEndpoint\n .generateConstructorArguments(argv, moduleRootPath, env, defaultConfigPath, stderr, exit, cliArgsHandlers);\n\n return new Promise<void>(resolve => {\n new HttpServiceSparqlEndpoint(options || {}).run(stdout, stderr)\n .then(resolve)\n .catch(error => {\n stderr.write(error);\n exit(1);\n resolve();\n });\n });\n }\n\n /**\n * Takes parsed commandline arguments and turns them into an object used in the HttpServiceSparqlEndpoint constructor\n * @param {args: minimist.ParsedArgs} args The commandline arguments that the script was called with\n * @param {string} moduleRootPath The path to the invoking module.\n * @param {NodeJS.ProcessEnv} env The process env to get constants from.\n * @param {string} defaultConfigPath The path to get the config from if none is defined in the environment.\n * @param {ICliArgsHandler[]} cliArgsHandlers Enables manipulation of the CLI arguments and their processing.\n */\n public static async generateConstructorArguments(argv: string[], moduleRootPath: string,\n env: NodeJS.ProcessEnv, defaultConfigPath: string, stderr: Writable,\n exit: (code: number) => void, cliArgsHandlers: ICliArgsHandler[]): Promise<IHttpServiceSparqlEndpointArgs> {\n // Populate yargs arguments object\n cliArgsHandlers = [\n new CliArgsHandlerBase(),\n new CliArgsHandlerHttp(),\n ...cliArgsHandlers,\n ];\n let argumentsBuilder = yargs({});\n for (const cliArgsHandler of cliArgsHandlers) {\n argumentsBuilder = cliArgsHandler.populateYargs(argumentsBuilder);\n }\n\n // Extract raw argument values from parsed yargs object, so that we can handle each of them hereafter\n let args: Record<string, any>;\n try {\n args = await argumentsBuilder.parse(argv);\n } catch (error: unknown) {\n stderr.write(`${await argumentsBuilder.getHelp()}\\n\\n${(<Error> error).message}\\n`);\n return exit(1)!;\n }\n\n // Invoke args handlers to process any remaining args\n const context: Record<string, any> = {};\n try {\n for (const cliArgsHandler of cliArgsHandlers) {\n await cliArgsHandler.handleArgs(args, context);\n }\n } catch (error: unknown) {\n stderr.write(`${(<Error>error).message}/n`);\n exit(1);\n }\n\n const invalidateCacheBeforeQuery: boolean = args.invalidateCache;\n const freshWorkerPerQuery: boolean = args.freshWorker;\n const contextOverride: boolean = args.contextOverride;\n const port = args.port;\n const timeout = args.timeout * 1_000;\n const workers = args.workers;\n context[KeysQueryOperation.readOnly.name] = !args.u;\n\n const configPath = env.COMUNICA_CONFIG ? env.COMUNICA_CONFIG : defaultConfigPath;\n\n return {\n defaultConfigPath,\n configPath,\n context,\n invalidateCacheBeforeQuery,\n freshWorkerPerQuery,\n contextOverride,\n moduleRootPath,\n mainModulePath: moduleRootPath,\n port,\n timeout,\n workers,\n };\n }\n\n /**\n * Start the HTTP service.\n * @param {module:stream.internal.Writable} stdout The output stream to log to.\n * @param {module:stream.internal.Writable} stderr The error stream to log errors to.\n */\n public run(stdout: Writable, stderr: Writable): Promise<void> {\n if (cluster.isMaster) {\n return this.runMaster(stdout, stderr);\n }\n return this.runWorker(stdout, stderr);\n }\n\n /**\n * Start the HTTP service as master.\n * @param {module:stream.internal.Writable} stdout The output stream to log to.\n * @param {module:stream.internal.Writable} stderr The error stream to log errors to.\n */\n public async runMaster(stdout: Writable, stderr: Writable): Promise<void> {\n stderr.write(`Server running on http://localhost:${this.port}/sparql\\n`);\n\n // Create workers\n for (let i = 0; i < this.workers; i++) {\n cluster.fork();\n }\n\n // Attach listeners to each new worker\n cluster.on('listening', worker => {\n // Respawn crashed workers\n worker.once('exit', (code, signal) => {\n if (!worker.exitedAfterDisconnect) {\n if (code === 9 || signal === 'SIGKILL') {\n stderr.write(`Worker ${worker.process.pid} forcefully killed with ${code || signal}. Killing main process as well.\\n`);\n cluster.disconnect();\n } else {\n stderr.write(`Worker ${worker.process.pid} died with ${code || signal}. Starting new worker.\\n`);\n cluster.fork();\n }\n }\n });\n\n // Handle worker timeouts\n const workerTimeouts: Record<number, NodeJS.Timeout> = {};\n worker.on('message', ({ type, queryId }) => {\n if (type === 'start') {\n stderr.write(`Worker ${worker.process.pid} got assigned a new query (${queryId}).\\n`);\n workerTimeouts[queryId] = setTimeout(() => {\n try {\n if (worker.isConnected()) {\n stderr.write(`Worker ${worker.process.pid} timed out for query ${queryId}.\\n`);\n worker.send('shutdown');\n }\n } catch (error: unknown) {\n stderr.write(`Unable to timeout worker ${worker.process.pid}: ${(<Error> error).message}.\\n`);\n }\n delete workerTimeouts[queryId];\n }, this.timeout);\n } else if (type === 'end' && workerTimeouts[queryId]) {\n stderr.write(`Worker ${worker.process.pid} has completed query ${queryId}.\\n`);\n clearTimeout(workerTimeouts[queryId]);\n delete workerTimeouts[queryId];\n }\n });\n });\n\n // Disconnect from cluster on SIGINT, so that the process can cleanly terminate\n process.once('SIGINT', () => {\n cluster.disconnect();\n });\n }\n\n /**\n * Start the HTTP service as worker.\n * @param {module:stream.internal.Writable} stdout The output stream to log to.\n * @param {module:stream.internal.Writable} stderr The error stream to log errors to.\n */\n public async runWorker(stdout: Writable, stderr: Writable): Promise<void> {\n const engine: QueryEngineBase = await this.engine;\n\n // Determine the allowed media types for requests\n const mediaTypes: Record<string, number> = await engine.getResultMediaTypes();\n const variants: { type: string; quality: number }[] = [];\n for (const type of Object.keys(mediaTypes)) {\n variants.push({ type, quality: mediaTypes[type] });\n }\n\n // Start the server\n const server = http.createServer(this.handleRequest.bind(this, engine, variants, stdout, stderr));\n server.listen(this.port);\n stderr.write(`Server worker (${process.pid}) running on http://localhost:${this.port}/sparql\\n`);\n\n // Keep track of all open connections\n const openConnections: Set<ServerResponse> = new Set();\n server.on('request', (request: IncomingMessage, response: ServerResponse) => {\n openConnections.add(response);\n response.on('close', () => {\n openConnections.delete(response);\n });\n });\n\n // Subscribe to shutdown messages\n process.on('message', async(message: string): Promise<void> => {\n if (message === 'shutdown') {\n stderr.write(`Shutting down worker ${process.pid} with ${openConnections.size} open connections.\\n`);\n\n // Stop new connections from being accepted\n server.close();\n\n // Close all open connections\n for (const connection of openConnections) {\n await new Promise<void>(resolve => connection.end('!TIMEDOUT!', resolve));\n }\n\n // Kill the worker once the connections have been closed\n process.exit(15);\n }\n });\n\n // Catch global errors, and cleanly close open connections\n process.on('uncaughtException', async error => {\n stderr.write(`Terminating worker ${process.pid} with ${openConnections.size} open connections due to uncaught exception.\\n`);\n stderr.write(error.stack);\n\n // Stop new connections from being accepted\n server.close();\n\n // Close all open connections\n for (const connection of openConnections) {\n await new Promise<void>(resolve => connection.end('!ERROR!', resolve));\n }\n\n // Kill the worker once the connections have been closed\n process.exit(15);\n });\n }\n\n /**\n * Handles an HTTP request.\n * @param {QueryEngineBase} engine A SPARQL engine.\n * @param {{type: string; quality: number}[]} variants Allowed variants.\n * @param {module:stream.internal.Writable} stdout Output stream.\n * @param {module:stream.internal.Writable} stderr Error output stream.\n * @param {module:http.IncomingMessage} request Request object.\n * @param {module:http.ServerResponse} response Response object.\n */\n public async handleRequest(\n engine: QueryEngineBase,\n variants: { type: string; quality: number }[],\n stdout: Writable,\n stderr: Writable,\n request: http.IncomingMessage,\n response: http.ServerResponse,\n ): Promise<void> {\n const negotiated = require('negotiate').choose(variants, request)\n .sort((first: any, second: any) => second.qts - first.qts);\n const variant: any = request.headers.accept ? negotiated[0] : null;\n // Require qts strictly larger than 2, as 1 and 2 respectively allow * and */* matching.\n // For qts 0, 1, and 2, we fallback to our built-in media type defaults, for which we pass null.\n const mediaType: string = variant && variant.qts > 2 ? variant.type : null;\n\n // Verify the path\n const requestUrl = url.parse(request.url ?? '', true);\n if (requestUrl.pathname === '/' || request.url === '/') {\n stdout.write('[301] Permanently moved. Redirected to /sparql.');\n response.writeHead(301,\n { 'content-type': HttpServiceSparqlEndpoint.MIME_JSON,\n 'Access-Control-Allow-Origin': '*',\n Location: `http://localhost:${this.port}/sparql${requestUrl.search || ''}` });\n response.end(JSON.stringify({ message: 'Queries are accepted on /sparql. Redirected.' }));\n return;\n }\n if (requestUrl.pathname !== '/sparql') {\n stdout.write('[404] Resource not found. Queries are accepted on /sparql.\\n');\n response.writeHead(404,\n { 'content-type': HttpServiceSparqlEndpoint.MIME_JSON,\n 'Access-Control-Allow-Origin': '*' });\n response.end(JSON.stringify({ message: 'Resource not found. Queries are accepted on /sparql.' }));\n return;\n }\n\n if (this.invalidateCacheBeforeQuery) {\n // Invalidate cache\n await engine.invalidateHttpCache();\n }\n\n // Parse the query, depending on the HTTP method\n let queryBody: IQueryBody | undefined;\n switch (request.method) {\n case 'POST':\n queryBody = await this.parseBody(request);\n await this.writeQueryResult(\n engine,\n stdout,\n stderr,\n request,\n response,\n queryBody,\n mediaType,\n false,\n false,\n this.lastQueryId++,\n );\n break;\n case 'HEAD':\n case 'GET':\n // eslint-disable-next-line no-case-declarations\n const queryValue = <string> requestUrl.query.query;\n queryBody = queryValue ? { type: 'query', value: queryValue, context: undefined } : undefined;\n // eslint-disable-next-line no-case-declarations\n const headOnly = request.method === 'HEAD';\n await this.writeQueryResult(\n engine,\n stdout,\n stderr,\n request,\n response,\n queryBody,\n mediaType,\n headOnly,\n true,\n this.lastQueryId++,\n );\n break;\n default:\n stdout.write(`[405] ${request.method} to ${request.url}\\n`);\n response.writeHead(405,\n { 'content-type': HttpServiceSparqlEndpoint.MIME_JSON, 'Access-Control-Allow-Origin': '*' });\n response.end(JSON.stringify({ message: 'Incorrect HTTP method' }));\n }\n }\n\n /**\n * Writes the result of the given SPARQL query.\n * @param {QueryEngineBase} engine A SPARQL engine.\n * @param {module:stream.internal.Writable} stdout Output stream.\n * @param {module:stream.internal.Writable} stderr Error output stream.\n * @param {module:http.IncomingMessage} request Request object.\n * @param {module:http.ServerResponse} response Response object.\n * @param {IQueryBody | undefined} queryBody The query body.\n * @param {string} mediaType The requested response media type.\n * @param {boolean} headOnly If only the header should be written.\n * @param {boolean} readOnly If only data can be read, but not updated. (i.e., if we're in a GET request)\n * @param queryId The unique id of this query.\n */\n public async writeQueryResult(\n engine: QueryEngineBase,\n stdout: Writable,\n stderr: Writable,\n request: http.IncomingMessage,\n response: http.ServerResponse,\n queryBody: IQueryBody | undefined,\n mediaType: string,\n headOnly: boolean,\n readOnly: boolean,\n queryId: number,\n ): Promise<void> {\n if (!queryBody || !queryBody.value) {\n return this.writeServiceDescription(engine, stdout, stderr, request, response, mediaType, headOnly);\n }\n\n // Log the start of the query execution\n stdout.write(`[200] ${request.method} to ${request.url}\\n`);\n stdout.write(` Requested media type: ${mediaType}\\n`);\n stdout.write(` Received ${queryBody.type} query: ${queryBody.value}\\n`);\n\n // Send message to master process to indicate the start of an execution\n process.send!({ type: 'start', queryId });\n\n // Determine context\n let context = {\n ...this.context,\n ...this.contextOverride ? queryBody.context : undefined,\n };\n if (readOnly) {\n context = { ...context, [KeysQueryOperation.readOnly.name]: readOnly };\n }\n\n let result: QueryType;\n try {\n result = await engine.query(queryBody.value, context);\n\n // For update queries, also await the result\n if (result.resultType === 'void') {\n await result.execute();\n }\n } catch (error: unknown) {\n stdout.write('[400] Bad request\\n');\n response.writeHead(400,\n { 'content-type': HttpServiceSparqlEndpoint.MIME_PLAIN, 'Access-Control-Allow-Origin': '*' });\n response.end((<Error> error).message);\n return;\n }\n\n // Default to SPARQL JSON for bindings and boolean\n if (!mediaType) {\n switch (result.resultType) {\n case 'quads':\n mediaType = 'application/trig';\n break;\n case 'void':\n mediaType = 'simple';\n break;\n default:\n mediaType = 'application/sparql-results+json';\n break;\n }\n }\n\n // Write header of response\n response.writeHead(200, { 'content-type': mediaType, 'Access-Control-Allow-Origin': '*' });\n stdout.write(` Resolved to result media type: ${mediaType}\\n`);\n\n // Stop further processing for HEAD requests\n if (headOnly) {\n response.end();\n return;\n }\n\n let eventEmitter: EventEmitter | undefined;\n try {\n const { data } = await engine.resultToString(result, mediaType);\n data.on('error', (error: Error) => {\n stdout.write(`[500] Server error in results: ${error.message} \\n`);\n if (!response.writableEnded) {\n response.end('An internal server error occurred.\\n');\n }\n });\n data.pipe(response);\n eventEmitter = data;\n } catch {\n stdout.write('[400] Bad request, invalid media type\\n');\n response.writeHead(400,\n { 'content-type': HttpServiceSparqlEndpoint.MIME_PLAIN, 'Access-Control-Allow-Origin': '*' });\n response.end('The response for the given query could not be serialized for the requested media type\\n');\n }\n\n // Send message to master process to indicate the end of an execution\n response.on('close', () => {\n process.send!({ type: 'end', queryId });\n });\n\n this.stopResponse(response, queryId, eventEmitter);\n }\n\n public async writeServiceDescription(\n engine: QueryEngineBase,\n stdout: Writable,\n stderr: Writable,\n request: http.IncomingMessage,\n response: http.ServerResponse,\n mediaType: string,\n headOnly: boolean,\n ): Promise<void> {\n stdout.write(`[200] ${request.method} to ${request.url}\\n`);\n stdout.write(` Requested media type: ${mediaType}\\n`);\n stdout.write(' Received query for service description.\\n');\n response.writeHead(200, { 'content-type': mediaType, 'Access-Control-Allow-Origin': '*' });\n\n if (headOnly) {\n response.end();\n return;\n }\n\n // eslint-disable-next-line id-length\n const s = request.url;\n const sd = 'http://www.w3.org/ns/sparql-service-description#';\n const quads: RDF.Quad[] = [\n // Basic metadata\n quad(s, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', `${sd}Service`),\n quad(s, `${sd}endpoint`, '/sparql'),\n quad(s, `${sd}url`, '/sparql'),\n\n // Features\n quad(s, `${sd}feature`, `${sd}BasicFederatedQuery`),\n quad(s, `${sd}supportedLanguage`, `${sd}SPARQL10Query`),\n quad(s, `${sd}supportedLanguage`, `${sd}SPARQL11Query`),\n ];\n\n let eventEmitter: EventEmitter;\n try {\n // Append result formats\n const formats = await engine.getResultMediaTypeFormats(new ActionContext(this.context));\n for (const format in formats) {\n quads.push(quad(s, `${sd}resultFormat`, formats[format]));\n }\n\n // Flush results\n const { data } = await engine.resultToString(<QueryQuads> {\n resultType: 'quads',\n execute: async() => new ArrayIterator(quads),\n metadata: <any> undefined,\n }, mediaType);\n data.on('error', (error: Error) => {\n stdout.write(`[500] Server error in results: ${error.message} \\n`);\n response.end('An internal server error occurred.\\n');\n });\n data.pipe(response);\n eventEmitter = data;\n } catch {\n stdout.write('[400] Bad request, invalid media type\\n');\n response.writeHead(400,\n { 'content-type': HttpServiceSparqlEndpoint.MIME_PLAIN, 'Access-Control-Allow-Origin': '*' });\n response.end('The response for the given query could not be serialized for the requested media type\\n');\n return;\n }\n this.stopResponse(response, 0, eventEmitter);\n }\n\n /**\n * Stop after timeout or if the connection is terminated\n * @param {module:http.ServerResponse} response Response object.\n * @param queryId The unique query id.\n * @param {NodeJS.ReadableStream} eventEmitter Query result stream.\n */\n public stopResponse(response: http.ServerResponse, queryId: number, eventEmitter?: EventEmitter): void {\n response.on('close', killClient);\n // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this\n const self = this;\n function killClient(): void {\n if (eventEmitter) {\n // Remove all listeners so we are sure no more write calls are made\n eventEmitter.removeAllListeners();\n eventEmitter.on('error', () => {\n // Void any errors that may still occur\n });\n eventEmitter.emit('end');\n }\n try {\n response.end();\n } catch {\n // Do nothing\n }\n\n // Kill the worker if we want fresh workers per query\n if (self.freshWorkerPerQuery) {\n process.stderr.write(`Killing fresh worker ${process.pid} after query ${queryId}.\\n`);\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(15);\n }\n }\n }\n\n /**\n * Parses the body of a SPARQL POST request\n * @param {module:http.IncomingMessage} request Request object.\n * @return {Promise<IQueryBody>} A promise resolving to a query body object.\n */\n public parseBody(request: http.IncomingMessage): Promise<IQueryBody> {\n return new Promise((resolve, reject) => {\n let body = '';\n request.setEncoding('utf8');\n request.on('error', reject);\n request.on('data', chunk => {\n body += chunk;\n });\n request.on('end', () => {\n const contentType: string | undefined = request.headers['content-type'];\n if (contentType) {\n if (contentType.includes('application/sparql-query')) {\n return resolve({ type: 'query', value: body, context: undefined });\n }\n if (contentType.includes('application/sparql-update')) {\n return resolve({ type: 'void', value: body, context: undefined });\n }\n if (contentType.includes('application/x-www-form-urlencoded')) {\n const bodyStructure = querystring.parse(body);\n let context: Record<string, any> | undefined;\n if (bodyStructure.context) {\n try {\n context = JSON.parse(<string>bodyStructure.context);\n } catch (error: unknown) {\n reject(new Error(`Invalid POST body with context received ('${bodyStructure.context}'): ${(<Error> error).message}`));\n }\n }\n if (bodyStructure.query) {\n return resolve({ type: 'query', value: <string> bodyStructure.query, context });\n }\n if (bodyStructure.update) {\n return resolve({ type: 'void', value: <string> bodyStructure.update, context });\n }\n }\n }\n reject(new Error(`Invalid POST body received, query type could not be determined`));\n });\n });\n }\n}\n\nexport interface IQueryBody {\n type: 'query' | 'void';\n value: string;\n context: Record<string, any> | undefined;\n}\n\nexport interface IHttpServiceSparqlEndpointArgs extends IDynamicQueryEngineOptions {\n context?: any;\n timeout?: number;\n port?: number;\n workers?: number;\n invalidateCacheBeforeQuery?: boolean;\n freshWorkerPerQuery?: boolean;\n contextOverride?: boolean;\n moduleRootPath: string;\n defaultConfigPath: string;\n}\n/* eslint-enable import/no-nodejs-modules */\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryPhysicalQueryPlanLogger.js","sourceRoot":"","sources":["MemoryPhysicalQueryPlanLogger.ts"],"names":[],"mappings":";;;AAEA,2CAA0C;AAG1C;;GAEG;AACH,MAAa,6BAA6B;IAIxC;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;IAEM,YAAY,CACjB,eAAuB,EACvB,gBAAoC,EACpC,IAAS,EACT,UAAe,EACf,KAAa,EACb,QAAa;QAEb,MAAM,QAAQ,GAAc;YAC1B,KAAK;YACL,eAAe;YACf,gBAAgB;YAChB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,EAAE;YACZ,QAAQ;SACT,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,UAAU,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;aACtF;YACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC1B;aAAM;YACL,IAAI,CAAC,UAAU,EAAE;gBACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;aAC5D;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;aAC/C;YACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzB;IACH,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,CAAC;IAEO,cAAc,CAAC,IAAe;QACpC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,eAAe;YAC7B,QAAQ,EAAE,IAAI,CAAC,gBAAgB;YAC/B,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;YACxC,GAAG,IAAI,CAAC,QAAQ;YAChB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;SACxG,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,OAAY;QACrC,IAAI,MAAM,IAAI,OAAO,EAAE;YACrB,MAAM,SAAS,GAAsB,OAAO,CAAC;YAC7C,0EAA0E;YAC1E,QAAQ,SAAS,CAAC,IAAI,EAAE;gBACtB,KAAK,SAAS;oBACZ,OAAO;wBACL,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;qBACtC,CAAC;gBACJ,KAAK,SAAS;oBACZ,OAAO;wBACL,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;qBAC/D,CAAC;aACL;SACF;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,YAAY,CAAC,IAAkB;QACrC,OAAO,GAAG,IAAA,yBAAY,EAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAA,yBAAY,EAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAA,yBAAY,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAA,yBAAY,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IACrL,CAAC;CACF;AA9ED,sEA8EC","sourcesContent":["import type { IPhysicalQueryPlanLogger } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { termToString } from 'rdf-string';\nimport type { Algebra } from 'sparqlalgebrajs';\n\n/**\n * A physical query plan logger that stores everything in memory.\n */\nexport class MemoryPhysicalQueryPlanLogger implements IPhysicalQueryPlanLogger {\n private readonly children: Map<any, IPlanNode[]>;\n private rootNode: IPlanNode | undefined;\n\n public constructor() {\n this.children = new Map();\n }\n\n public logOperation(\n logicalOperator: string,\n physicalOperator: string | undefined,\n node: any,\n parentNode: any,\n actor: string,\n metadata: any,\n ): void {\n const planNode: IPlanNode = {\n actor,\n logicalOperator,\n physicalOperator,\n rawNode: node,\n children: [],\n metadata,\n };\n this.children.set(node, planNode.children);\n\n if (!this.rootNode) {\n if (parentNode) {\n throw new Error(`No root node has been set yet, while a parent is being referenced`);\n }\n this.rootNode = planNode;\n } else {\n if (!parentNode) {\n throw new Error(`Detected more than one parent-less node`);\n }\n const children = this.children.get(parentNode);\n if (!children) {\n throw new Error(`Could not find parent node`);\n }\n children.push(planNode);\n }\n }\n\n public toJson(): any {\n return this.rootNode ? this.planNodeToJson(this.rootNode) : {};\n }\n\n private planNodeToJson(node: IPlanNode): any {\n return {\n logical: node.logicalOperator,\n physical: node.physicalOperator,\n ...this.getLogicalMetadata(node.rawNode),\n ...node.metadata,\n ...node.children.length > 0 ? { children: node.children.map(child => this.planNodeToJson(child)) } : {},\n };\n }\n\n private getLogicalMetadata(rawNode: any): any {\n if ('type' in rawNode) {\n const operation: Algebra.Operation = rawNode;\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (operation.type) {\n case 'pattern':\n return {\n pattern: this.quadToString(operation),\n };\n case 'project':\n return {\n variables: operation.variables.map(variable => variable.value),\n };\n }\n }\n return {};\n }\n\n private quadToString(quad: RDF.BaseQuad): string {\n return `${termToString(quad.subject)} ${termToString(quad.predicate)} ${termToString(quad.object)}${quad.graph.termType === 'DefaultGraph' ? '' : ` ${termToString(quad.graph)}`}`;\n }\n}\n\ninterface IPlanNode {\n actor: string;\n logicalOperator: string;\n physicalOperator?: string;\n rawNode: any;\n children: IPlanNode[];\n metadata: any;\n}\n"]}
|
package/lib/QueryEngineBase.d.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import type { IActorQueryResultSerializeOutput } from '@comunica/bus-query-result-serialize';
|
|
2
|
-
import type { IQueryOperationResult, IQueryEngine, IQueryExplained, QueryFormatType, QueryType, QueryExplainMode, BindingsStream, QueryAlgebraContext, QueryStringContext, QueryEnhanced } from '@comunica/types';
|
|
2
|
+
import type { IQueryOperationResult, IQueryEngine, IQueryExplained, QueryFormatType, QueryType, QueryExplainMode, BindingsStream, QueryAlgebraContext, QueryStringContext, QueryEnhanced, IQueryContextCommon } from '@comunica/types';
|
|
3
3
|
import type * as RDF from '@rdfjs/types';
|
|
4
4
|
import type { AsyncIterator } from 'asynciterator';
|
|
5
5
|
import type { ActorInitQueryBase } from './ActorInitQueryBase';
|
|
6
6
|
/**
|
|
7
7
|
* Base implementation of a Comunica query engine.
|
|
8
8
|
*/
|
|
9
|
-
export declare class QueryEngineBase implements IQueryEngine {
|
|
9
|
+
export declare class QueryEngineBase<QueryContext extends IQueryContextCommon = IQueryContextCommon> implements IQueryEngine<QueryContext> {
|
|
10
10
|
private readonly actorInitQuery;
|
|
11
|
-
constructor(actorInitQuery: ActorInitQueryBase);
|
|
12
|
-
queryBindings<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<BindingsStream>;
|
|
13
|
-
queryQuads<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<AsyncIterator<RDF.Quad> & RDF.ResultStream<RDF.Quad>>;
|
|
14
|
-
queryBoolean<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<boolean>;
|
|
15
|
-
queryVoid<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<void>;
|
|
16
|
-
protected queryOfType<QueryFormatTypeInner extends QueryFormatType, QueryTypeOut extends QueryEnhanced>(query: QueryFormatTypeInner, context: (QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext)
|
|
11
|
+
constructor(actorInitQuery: ActorInitQueryBase<QueryContext>);
|
|
12
|
+
queryBindings<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<BindingsStream>;
|
|
13
|
+
queryQuads<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<AsyncIterator<RDF.Quad> & RDF.ResultStream<RDF.Quad>>;
|
|
14
|
+
queryBoolean<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<boolean>;
|
|
15
|
+
queryVoid<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<void>;
|
|
16
|
+
protected queryOfType<QueryFormatTypeInner extends QueryFormatType, QueryTypeOut extends QueryEnhanced>(query: QueryFormatTypeInner, context: undefined | (QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext), expectedType: QueryTypeOut['resultType']): Promise<ReturnType<QueryTypeOut['execute']>>;
|
|
17
17
|
/**
|
|
18
18
|
* Evaluate the given query
|
|
19
19
|
* @param query A query string or algebra.
|
|
20
20
|
* @param context An optional query context.
|
|
21
21
|
* @return {Promise<QueryType>} A promise that resolves to the query output.
|
|
22
22
|
*/
|
|
23
|
-
query<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<QueryType>;
|
|
23
|
+
query<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<QueryType>;
|
|
24
24
|
/**
|
|
25
25
|
* Explain the given query
|
|
26
26
|
* @param {string | Algebra.Operation} query A query string or algebra.
|
|
@@ -29,7 +29,7 @@ export declare class QueryEngineBase implements IQueryEngine {
|
|
|
29
29
|
* @return {Promise<QueryType | IQueryExplained>} A promise that resolves to
|
|
30
30
|
* the query output or explanation.
|
|
31
31
|
*/
|
|
32
|
-
explain<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context: QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext, explainMode: QueryExplainMode): Promise<IQueryExplained>;
|
|
32
|
+
explain<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext, explainMode: QueryExplainMode): Promise<IQueryExplained>;
|
|
33
33
|
/**
|
|
34
34
|
* Evaluate or explain the given query
|
|
35
35
|
* @param {string | Algebra.Operation} query A query string or algebra.
|
|
@@ -37,7 +37,7 @@ export declare class QueryEngineBase implements IQueryEngine {
|
|
|
37
37
|
* @return {Promise<QueryType | IQueryExplained>} A promise that resolves to
|
|
38
38
|
* the query output or explanation.
|
|
39
39
|
*/
|
|
40
|
-
queryOrExplain<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<QueryType | IQueryExplained>;
|
|
40
|
+
queryOrExplain<QueryFormatTypeInner extends QueryFormatType>(query: QueryFormatTypeInner, context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext): Promise<QueryType | IQueryExplained>;
|
|
41
41
|
/**
|
|
42
42
|
* @param context An optional context.
|
|
43
43
|
* @return {Promise<{[p: string]: number}>} All available SPARQL (weighted) result media types.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryEngineBase.js","sourceRoot":"","sources":["QueryEngineBase.ts"],"names":[],"mappings":"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","sourcesContent":["import { materializeOperation } from '@comunica/bus-query-operation';\nimport type { IActionSparqlSerialize, IActorQueryResultSerializeOutput } from '@comunica/bus-query-result-serialize';\nimport { KeysCore, KeysInitQuery, KeysRdfResolveQuadPattern } from '@comunica/context-entries';\nimport { ActionContext } from '@comunica/core';\nimport type { IActionContext, IPhysicalQueryPlanLogger,\n IQueryOperationResult,\n IQueryEngine, IQueryExplained,\n QueryFormatType,\n QueryType, QueryExplainMode, BindingsStream,\n QueryAlgebraContext, QueryStringContext, IQueryBindingsEnhanced,\n IQueryQuadsEnhanced, QueryEnhanced, IQueryContextCommon } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport type { Algebra } from 'sparqlalgebrajs';\nimport type { ActorInitQueryBase } from './ActorInitQueryBase';\nimport { MemoryPhysicalQueryPlanLogger } from './MemoryPhysicalQueryPlanLogger';\n\n/**\n * Base implementation of a Comunica query engine.\n */\nexport class QueryEngineBase<QueryContext extends IQueryContextCommon = IQueryContextCommon>\nimplements IQueryEngine<QueryContext> {\n private readonly actorInitQuery: ActorInitQueryBase;\n\n public constructor(actorInitQuery: ActorInitQueryBase<QueryContext>) {\n this.actorInitQuery = actorInitQuery;\n }\n\n public async queryBindings<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<BindingsStream> {\n return this.queryOfType<QueryFormatTypeInner, IQueryBindingsEnhanced>(query, context, 'bindings');\n }\n\n public async queryQuads<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<AsyncIterator<RDF.Quad> & RDF.ResultStream<RDF.Quad>> {\n return this.queryOfType<QueryFormatTypeInner, IQueryQuadsEnhanced>(query, context, 'quads');\n }\n\n public async queryBoolean<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<boolean> {\n return this.queryOfType<QueryFormatTypeInner, RDF.QueryBoolean>(query, context, 'boolean');\n }\n\n public async queryVoid<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<void> {\n return this.queryOfType<QueryFormatTypeInner, RDF.QueryVoid>(query, context, 'void');\n }\n\n protected async queryOfType<QueryFormatTypeInner extends QueryFormatType, QueryTypeOut extends QueryEnhanced>(\n query: QueryFormatTypeInner,\n context: undefined | (QueryContext & QueryFormatTypeInner extends string ?\n QueryStringContext : QueryAlgebraContext),\n expectedType: QueryTypeOut['resultType'],\n ): Promise<ReturnType<QueryTypeOut['execute']>> {\n const result = await this.query<QueryFormatTypeInner>(query, context);\n if (result.resultType === expectedType) {\n return result.execute();\n }\n throw new Error(`Query result type '${expectedType}' was expected, while '${result.resultType}' was found.`);\n }\n\n /**\n * Evaluate the given query\n * @param query A query string or algebra.\n * @param context An optional query context.\n * @return {Promise<QueryType>} A promise that resolves to the query output.\n */\n public async query<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<QueryType> {\n const output = await this.queryOrExplain(query, context);\n if ('explain' in output) {\n throw new Error(`Tried to explain a query when in query-only mode`);\n }\n return output;\n }\n\n /**\n * Explain the given query\n * @param {string | Algebra.Operation} query A query string or algebra.\n * @param context An optional query context.\n * @param explainMode The explain mode.\n * @return {Promise<QueryType | IQueryExplained>} A promise that resolves to\n * the query output or explanation.\n */\n public async explain<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n explainMode: QueryExplainMode,\n ): Promise<IQueryExplained> {\n context.explain = explainMode;\n const output = await this.queryOrExplain(query, context);\n return <IQueryExplained> output;\n }\n\n /**\n * Evaluate or explain the given query\n * @param {string | Algebra.Operation} query A query string or algebra.\n * @param context An optional query context.\n * @return {Promise<QueryType | IQueryExplained>} A promise that resolves to\n * the query output or explanation.\n */\n public async queryOrExplain<QueryFormatTypeInner extends QueryFormatType>(\n query: QueryFormatTypeInner,\n context?: QueryContext & QueryFormatTypeInner extends string ? QueryStringContext : QueryAlgebraContext,\n ): Promise<QueryType | IQueryExplained> {\n context = context || <any>{};\n\n // Expand shortcuts\n for (const key in context) {\n if (this.actorInitQuery.contextKeyShortcuts[key]) {\n context[this.actorInitQuery.contextKeyShortcuts[key]] = context[key];\n delete context[key];\n }\n }\n\n // Prepare context\n let actionContext: IActionContext = new ActionContext(context);\n let queryFormat: RDF.QueryFormat = { language: 'sparql', version: '1.1' };\n if (actionContext.has(KeysInitQuery.queryFormat)) {\n queryFormat = actionContext.get(KeysInitQuery.queryFormat)!;\n actionContext = actionContext.delete(KeysInitQuery.queryFormat);\n if (queryFormat.language === 'graphql') {\n actionContext = actionContext.setDefault(KeysInitQuery.graphqlSingularizeVariables, {});\n }\n }\n const baseIRI: string | undefined = actionContext.get(KeysInitQuery.baseIRI);\n\n actionContext = actionContext\n .setDefault(KeysInitQuery.queryTimestamp, new Date())\n .setDefault(KeysRdfResolveQuadPattern.sourceIds, new Map())\n // Set the default logger if none is provided\n .setDefault(KeysCore.log, this.actorInitQuery.logger);\n\n // Pre-processing the context\n actionContext = (await this.actorInitQuery.mediatorContextPreprocess.mediate({ context: actionContext })).context;\n\n // Determine explain mode\n const explainMode: QueryExplainMode = actionContext.get(KeysInitQuery.explain)!;\n\n // Parse query\n let operation: Algebra.Operation;\n if (typeof query === 'string') {\n // Save the original query string in the context\n actionContext = actionContext.set(KeysInitQuery.queryString, query);\n\n const queryParseOutput = await this.actorInitQuery.mediatorQueryParse\n .mediate({ context: actionContext, query, queryFormat, baseIRI });\n operation = queryParseOutput.operation;\n // Update the baseIRI in the context if the query modified it.\n if (queryParseOutput.baseIRI) {\n actionContext = actionContext.set(KeysInitQuery.baseIRI, queryParseOutput.baseIRI);\n }\n } else {\n operation = query;\n }\n\n // Print parsed query\n if (explainMode === 'parsed') {\n return {\n explain: true,\n type: explainMode,\n data: operation,\n };\n }\n\n // Apply initial bindings in context\n if (actionContext.has(KeysInitQuery.initialBindings)) {\n operation = materializeOperation(operation, actionContext.get(KeysInitQuery.initialBindings)!);\n\n // Delete the query string from the context, since our initial query might have changed\n actionContext = actionContext.delete(KeysInitQuery.queryString);\n }\n\n // Optimize the query operation\n const mediatorResult = await this.actorInitQuery.mediatorOptimizeQueryOperation\n .mediate({ context: actionContext, operation });\n operation = mediatorResult.operation;\n actionContext = mediatorResult.context || actionContext;\n\n // Print logical query plan\n if (explainMode === 'logical') {\n return {\n explain: true,\n type: explainMode,\n data: operation,\n };\n }\n\n // Save original query in context\n actionContext = actionContext.set(KeysInitQuery.query, operation);\n\n // If we need a physical query plan, store a physical query plan logger in the context, and collect it after exec\n let physicalQueryPlanLogger: IPhysicalQueryPlanLogger | undefined;\n if (explainMode === 'physical') {\n physicalQueryPlanLogger = new MemoryPhysicalQueryPlanLogger();\n actionContext = actionContext.set(KeysInitQuery.physicalQueryPlanLogger, physicalQueryPlanLogger);\n }\n\n // Execute query\n const output = await this.actorInitQuery.mediatorQueryOperation.mediate({\n context: actionContext,\n operation,\n });\n output.context = actionContext;\n\n const finalOutput = QueryEngineBase.internalToFinalResult(output);\n\n // Output physical query plan after query exec if needed\n if (physicalQueryPlanLogger) {\n // Make sure the whole result is produced\n switch (finalOutput.resultType) {\n case 'bindings':\n await (await finalOutput.execute()).toArray();\n break;\n case 'quads':\n await (await finalOutput.execute()).toArray();\n break;\n case 'boolean':\n await finalOutput.execute();\n break;\n case 'void':\n await finalOutput.execute();\n break;\n }\n\n return {\n explain: true,\n type: explainMode,\n data: physicalQueryPlanLogger.toJson(),\n };\n }\n\n return finalOutput;\n }\n\n /**\n * @param context An optional context.\n * @return {Promise<{[p: string]: number}>} All available SPARQL (weighted) result media types.\n */\n public async getResultMediaTypes(context?: any): Promise<Record<string, number>> {\n context = ActionContext.ensureActionContext(context);\n return (await this.actorInitQuery.mediatorQueryResultSerializeMediaTypeCombiner\n .mediate({ context, mediaTypes: true })).mediaTypes;\n }\n\n /**\n * @param context An optional context.\n * @return {Promise<{[p: string]: number}>} All available SPARQL result media type formats.\n */\n public async getResultMediaTypeFormats(context?: any): Promise<Record<string, string>> {\n context = ActionContext.ensureActionContext(context);\n return (await this.actorInitQuery.mediatorQueryResultSerializeMediaTypeFormatCombiner\n .mediate({ context, mediaTypeFormats: true })).mediaTypeFormats;\n }\n\n /**\n * Convert a query result to a string stream based on a certain media type.\n * @param {IQueryOperationResult} queryResult A query result.\n * @param {string} mediaType A media type.\n * @param {ActionContext} context An optional context.\n * @return {Promise<IActorQueryResultSerializeOutput>} A text stream.\n */\n public async resultToString(queryResult: RDF.Query<any>, mediaType?: string, context?: any):\n Promise<IActorQueryResultSerializeOutput> {\n context = ActionContext.ensureActionContext(context);\n if (!mediaType) {\n switch (queryResult.resultType) {\n case 'bindings':\n mediaType = 'application/json';\n break;\n case 'quads':\n mediaType = 'application/trig';\n break;\n default:\n mediaType = 'simple';\n break;\n }\n }\n const handle: IActionSparqlSerialize = { ...await QueryEngineBase.finalToInternalResult(queryResult), context };\n return (await this.actorInitQuery.mediatorQueryResultSerialize\n .mediate({ context, handle, handleMediaType: mediaType })).handle;\n }\n\n /**\n * Invalidate all internal caches related to the given page URL.\n * If no page URL is given, then all pages will be invalidated.\n * @param {string} url The page URL to invalidate.\n * @param context An optional ActionContext to pass to the actors.\n * @return {Promise<any>} A promise resolving when the caches have been invalidated.\n */\n public invalidateHttpCache(url?: string, context?: any): Promise<any> {\n context = ActionContext.ensureActionContext(context);\n return this.actorInitQuery.mediatorHttpInvalidate.mediate({ url, context });\n }\n\n /**\n * Convert an internal query result to a final one.\n * @param internalResult An intermediary query result.\n */\n public static internalToFinalResult(internalResult: IQueryOperationResult): QueryType {\n switch (internalResult.type) {\n case 'bindings':\n return {\n resultType: 'bindings',\n execute: async() => internalResult.bindingsStream,\n metadata: async() => <any> await internalResult.metadata(),\n context: internalResult.context,\n };\n case 'quads':\n return {\n resultType: 'quads',\n execute: async() => internalResult.quadStream,\n metadata: async() => <any> await internalResult.metadata(),\n context: internalResult.context,\n };\n case 'boolean':\n return {\n resultType: 'boolean',\n execute: async() => internalResult.execute(),\n context: internalResult.context,\n };\n case 'void':\n return {\n resultType: 'void',\n execute: async() => internalResult.execute(),\n context: internalResult.context,\n };\n }\n }\n\n /**\n * Convert a final query result to an internal one.\n * @param finalResult A final query result.\n */\n public static async finalToInternalResult(finalResult: RDF.Query<any>): Promise<IQueryOperationResult> {\n switch (finalResult.resultType) {\n case 'bindings':\n return {\n type: 'bindings',\n bindingsStream: <BindingsStream> await finalResult.execute(),\n metadata: async() => <any> await finalResult.metadata(),\n };\n case 'quads':\n return {\n type: 'quads',\n quadStream: <AsyncIterator<RDF.Quad>> await finalResult.execute(),\n metadata: async() => <any> await finalResult.metadata(),\n };\n case 'boolean':\n return {\n type: 'boolean',\n execute: () => finalResult.execute(),\n };\n case 'void':\n return {\n type: 'void',\n execute: () => finalResult.execute(),\n };\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryEngineFactoryBase.js","sourceRoot":"","sources":["QueryEngineFactoryBase.ts"],"names":[],"mappings":";;;AACA,6CAAwD;AAIxD;;GAEG;AACH,MAAa,sBAAsB;IACjC;;;;OAIG;IACH,YACmB,cAAsB,EACtB,iBAAyB,EACzB,kBAA6D;QAF7D,mBAAc,GAAd,cAAc,CAAQ;QACtB,sBAAiB,GAAjB,iBAAiB,CAAQ;QACzB,uBAAkB,GAAlB,kBAAkB,CAA2C;IAC7E,CAAC;IAEJ;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,UAAsC,EAAE;QAC1D,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YAC3B,mEAAmE;YACnE,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;SAC9C;QACD,MAAM,iBAAiB,GAAW,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAC/E,MAAM,WAAW,GAAW,OAAO,CAAC,WAAW,IAAI,wCAAwC,CAAC;QAE5F,iFAAiF;QACjF,qDAAqD;QACrD,MAAM,iBAAiB,GAAW,OAAO,CAAC,iBAAiB,IAAI,6BAA6B,CAAC;QAE7F,yDAAyD;QACzD,MAAM,MAAM,GAAW,MAAM,IAAA,6BAAoB,EAAC,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACjG,MAAM,cAAc,GAAwB,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACjG,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;CACF;AAjCD,wDAiCC","sourcesContent":["import type { ISetupProperties, Runner } from '@comunica/runner';\nimport { instantiateComponent } from '@comunica/runner';\nimport type { ActorInitQueryBase } from './ActorInitQueryBase';\nimport type { QueryEngineBase } from './QueryEngineBase';\n\n/**\n * A factory that can create query engines dynamically based on a given config.\n */\nexport class QueryEngineFactoryBase<Q extends QueryEngineBase> {\n /**\n * @param moduleRootPath The path to the invoking module.\n * @param defaultConfigPath The path to the config file.\n * @param queryEngineWrapper Callback for wrapping a query init actor in a query engine.\n */\n public constructor(\n private readonly moduleRootPath: string,\n private readonly defaultConfigPath: string,\n private readonly queryEngineWrapper: (actorInitQuery: ActorInitQueryBase) => Q,\n ) {}\n\n /**\n * Create a new Comunica query engine.\n * @param options Optional settings on how to instantiate the query engine.\n */\n public async create(options: IDynamicQueryEngineOptions = {}): Promise<Q> {\n if (!options.mainModulePath) {\n // This makes sure that our configuration is found by Components.js\n options.mainModulePath = this.moduleRootPath;\n }\n const configResourceUrl: string = options.configPath ?? this.defaultConfigPath;\n const instanceUri: string = options.instanceUri ?? 'urn:comunica:default:init/actors#query';\n\n // Instantiate the main runner so that all other actors are instantiated as well,\n // and find the SPARQL init actor with the given name\n const runnerInstanceUri: string = options.runnerInstanceUri ?? 'urn:comunica:default:Runner';\n\n // This needs to happen before any promise gets generated\n const runner: Runner = await instantiateComponent(configResourceUrl, runnerInstanceUri, options);\n const actorInitQuery = <ActorInitQueryBase> runner.collectActors({ engine: instanceUri }).engine;\n return this.queryEngineWrapper(actorInitQuery);\n }\n}\n\nexport interface IDynamicQueryEngineOptions extends ISetupProperties {\n /**\n * The path or URL to a Components.js config file.\n */\n configPath?: string;\n /**\n * A URI identifying the component to instantiate.\n */\n instanceUri?: string;\n /**\n * A URI identifying the runner component.\n */\n runnerInstanceUri?: string;\n}\n"]}
|
|
@@ -112,6 +112,18 @@ class CliArgsHandlerBase {
|
|
|
112
112
|
type: 'boolean',
|
|
113
113
|
describe: 'Makes the HTTP timeout take into account the response body stream read',
|
|
114
114
|
},
|
|
115
|
+
httpRetryCount: {
|
|
116
|
+
type: 'number',
|
|
117
|
+
describe: 'The number of retries to perform on failed fetch requests',
|
|
118
|
+
},
|
|
119
|
+
httpRetryDelay: {
|
|
120
|
+
type: 'number',
|
|
121
|
+
describe: 'The number of milliseconds to wait between fetch retries',
|
|
122
|
+
},
|
|
123
|
+
httpRetryOnServerError: {
|
|
124
|
+
type: 'boolean',
|
|
125
|
+
describe: 'If fetch should be retried on 5xx server error responses, instead of being resolved.',
|
|
126
|
+
},
|
|
115
127
|
unionDefaultGraph: {
|
|
116
128
|
type: 'boolean',
|
|
117
129
|
describe: 'If the default graph should also contain the union of all named graphs',
|
|
@@ -188,6 +200,24 @@ class CliArgsHandlerBase {
|
|
|
188
200
|
}
|
|
189
201
|
context[context_entries_1.KeysHttp.httpBodyTimeout.name] = args.httpBodyTimeout;
|
|
190
202
|
}
|
|
203
|
+
// Define HTTP retry count
|
|
204
|
+
if (args.httpRetryCount) {
|
|
205
|
+
context[context_entries_1.KeysHttp.httpRetryCount.name] = args.httpRetryCount;
|
|
206
|
+
}
|
|
207
|
+
// Define HTTP delay between retries
|
|
208
|
+
if (args.httpRetryDelay) {
|
|
209
|
+
if (!args.httpRetryCount) {
|
|
210
|
+
throw new Error('The --httpRetryDelay option requires the --httpRetryCount option to be set');
|
|
211
|
+
}
|
|
212
|
+
context[context_entries_1.KeysHttp.httpRetryDelay.name] = args.httpRetryDelay;
|
|
213
|
+
}
|
|
214
|
+
// Define HTTP retry on server error response
|
|
215
|
+
if (args.httpRetryOnServerError) {
|
|
216
|
+
if (!args.httpRetryCount) {
|
|
217
|
+
throw new Error('The --httpRetryOnServerError option requires the --httpRetryCount option to be set');
|
|
218
|
+
}
|
|
219
|
+
context[context_entries_1.KeysHttp.httpRetryOnServerError.name] = args.httpRetryOnServerError;
|
|
220
|
+
}
|
|
191
221
|
// Define union default graph
|
|
192
222
|
if (args.unionDefaultGraph) {
|
|
193
223
|
context[context_entries_1.KeysQueryOperation.unionDefaultGraph.name] = true;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgsHandlerBase.js","sourceRoot":"","sources":["CliArgsHandlerBase.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-nodejs-modules */\nimport { exec } from 'child_process';\nimport { existsSync, readFileSync } from 'fs';\nimport * as OS from 'os';\nimport { KeysHttp, KeysInitQuery, KeysQueryOperation, KeysRdfUpdateQuads } from '@comunica/context-entries';\nimport { ActionContext } from '@comunica/core';\nimport { LoggerPretty } from '@comunica/logger-pretty';\nimport type { IActionContext, ICliArgsHandler } from '@comunica/types';\nimport type { Argv } from 'yargs';\n\n/**\n * Basic CLI arguments handler that handles common options.\n */\nexport class CliArgsHandlerBase implements ICliArgsHandler {\n private readonly initialContext?: IActionContext;\n\n public constructor(initialContext?: IActionContext) {\n this.initialContext = initialContext;\n }\n\n public static getScriptOutput(command: string, fallback: string): Promise<string> {\n return new Promise((resolve, reject) => {\n exec(command, (error, stdout, stderr) => {\n if (error) {\n resolve(fallback);\n }\n resolve((stdout || stderr).trimEnd());\n });\n });\n }\n\n public static isDevelopmentEnvironment(): boolean {\n return existsSync(`${__dirname}/../../test`);\n }\n\n /**\n * Converts an URL like 'hypermedia@http://user:passwd@example.com to an IDataSource\n * @param {string} sourceString An url with possibly a type and authorization.\n * @return {[id: string]: any} An IDataSource which represents the sourceString.\n */\n public static getSourceObjectFromString(sourceString: string): Record<string, any> {\n const source: Record<string, any> = {};\n const mediaTypeRegex = /^([^:]*)@/u;\n const mediaTypeMatches = mediaTypeRegex.exec(sourceString);\n if (mediaTypeMatches) {\n source.type = mediaTypeMatches[1];\n sourceString = sourceString.slice((<number> source.type.length) + 1);\n }\n const authRegex = /\\/\\/(.*:.*)@/u;\n const authMatches = authRegex.exec(sourceString);\n if (authMatches) {\n const credentials = authMatches[1];\n source.context = new ActionContext({\n [KeysHttp.auth.name]: decodeURIComponent(credentials),\n });\n sourceString = sourceString.slice(0, authMatches.index + 2) +\n sourceString.slice(authMatches.index + credentials.length + 3);\n }\n source.value = sourceString;\n return source;\n }\n\n public populateYargs(argumentsBuilder: Argv<any>): Argv<any> {\n return argumentsBuilder\n .command(\n '$0 [sources...]',\n 'evaluates SPARQL queries',\n () => {\n // Do nothing\n },\n () => {\n // Do nothing\n },\n )\n .default('sources', [])\n .hide('sources')\n .wrap(160)\n .version(false)\n .options({\n context: {\n alias: 'c',\n type: 'string',\n describe: 'Use the given JSON context string or file (e.g., config.json)',\n },\n to: {\n type: 'string',\n describe: 'Destination for update queries',\n },\n baseIRI: {\n alias: 'b',\n type: 'string',\n describe: 'base IRI for the query (e.g., http://example.org/)',\n },\n dateTime: {\n alias: 'd',\n type: 'string',\n describe: 'Sets a datetime for querying Memento-enabled archives',\n },\n logLevel: {\n alias: 'l',\n type: 'string',\n describe: 'Sets the log level (e.g., debug, info, warn, ...)',\n default: 'warn',\n },\n lenient: {\n type: 'boolean',\n describe: 'If failing requests and parsing errors should be logged instead of causing a hard crash',\n },\n version: {\n alias: 'v',\n type: 'boolean',\n describe: 'Prints version information',\n },\n showStackTrace: {\n type: 'boolean',\n describe: 'Prints the full stacktrace when errors are thrown',\n },\n httpTimeout: {\n type: 'number',\n describe: 'HTTP requests timeout in milliseconds',\n },\n httpBodyTimeout: {\n type: 'boolean',\n describe: 'Makes the HTTP timeout take into account the response body stream read',\n },\n httpRetryCount: {\n type: 'number',\n describe: 'The number of retries to perform on failed fetch requests',\n },\n httpRetryDelay: {\n type: 'number',\n describe: 'The number of milliseconds to wait between fetch retries',\n },\n httpRetryOnServerError: {\n type: 'boolean',\n describe: 'If fetch should be retried on 5xx server error responses, instead of being resolved.',\n },\n unionDefaultGraph: {\n type: 'boolean',\n describe: 'If the default graph should also contain the union of all named graphs',\n },\n })\n .exitProcess(false)\n .fail(false)\n .help(false);\n }\n\n public async handleArgs(args: Record<string, any>, context: Record<string, any>): Promise<void> {\n // Print version information\n if (args.version) {\n const comunicaVersion: string = require('../../package.json').version;\n const dev: string = CliArgsHandlerBase.isDevelopmentEnvironment() ? '(dev)' : '';\n const nodeVersion: string = process.version;\n const npmVersion: string = await CliArgsHandlerBase.getScriptOutput('npm -v', '_NPM is unavailable_');\n const yarnVersion: string = await CliArgsHandlerBase.getScriptOutput('yarn -v', '_Yarn is unavailable_');\n const os = `${OS.platform()} (${OS.type()} ${OS.release()})`;\n\n const message = `| software | version\n| ---------------- | -------\n| Comunica Engine | ${comunicaVersion} ${dev}\n| node | ${nodeVersion}\n| npm | ${npmVersion}\n| yarn | ${yarnVersion}\n| Operating System | ${os}\n`;\n\n return Promise.reject(new Error(message));\n }\n\n // Inherit default context options\n if (this.initialContext) {\n Object.assign(context, this.initialContext.toJS());\n }\n\n // Define context\n if (args.context) {\n Object.assign(context, JSON.parse(existsSync(args.context) ? readFileSync(args.c, 'utf8') : args.context));\n } else if (args.sources[0]?.startsWith('{')) {\n // For backwards compatibility inline JSON\n Object.assign(context, JSON.parse(args.sources[0]));\n args.sources.shift();\n }\n\n // Add sources to context\n if (args.sources.length > 0) {\n context.sources = context.sources || [];\n args.sources.forEach((sourceValue: string) => {\n const source = CliArgsHandlerBase.getSourceObjectFromString(sourceValue);\n context.sources.push(source);\n });\n }\n\n // Add destination to context\n if (args.to) {\n context[KeysRdfUpdateQuads.destination.name] = args.to;\n }\n\n // Set the logger\n if (!context.log) {\n context.log = new LoggerPretty({ level: args.logLevel });\n }\n\n // Define the base IRI\n if (args.baseIRI) {\n context[KeysInitQuery.baseIRI.name] = args.baseIRI;\n }\n\n // Define lenient-mode\n if (args.lenient) {\n context[KeysInitQuery.lenient.name] = true;\n }\n\n // Define HTTP timeout\n if (args.httpTimeout) {\n context[KeysHttp.httpTimeout.name] = args.httpTimeout;\n }\n\n // Define HTTP body timeout\n if (args.httpBodyTimeout) {\n if (!args.httpTimeout) {\n throw new Error('The --httpBodyTimeout option requires the --httpTimeout option to be set');\n }\n context[KeysHttp.httpBodyTimeout.name] = args.httpBodyTimeout;\n }\n\n // Define HTTP retry count\n if (args.httpRetryCount) {\n context[KeysHttp.httpRetryCount.name] = args.httpRetryCount;\n }\n\n // Define HTTP delay between retries\n if (args.httpRetryDelay) {\n if (!args.httpRetryCount) {\n throw new Error('The --httpRetryDelay option requires the --httpRetryCount option to be set');\n }\n context[KeysHttp.httpRetryDelay.name] = args.httpRetryDelay;\n }\n\n // Define HTTP retry on server error response\n if (args.httpRetryOnServerError) {\n if (!args.httpRetryCount) {\n throw new Error('The --httpRetryOnServerError option requires the --httpRetryCount option to be set');\n }\n context[KeysHttp.httpRetryOnServerError.name] = args.httpRetryOnServerError;\n }\n\n // Define union default graph\n if (args.unionDefaultGraph) {\n context[KeysQueryOperation.unionDefaultGraph.name] = true;\n }\n }\n}\n/* eslint-enable import/no-nodejs-modules */\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgsHandlerHttp.js","sourceRoot":"","sources":["CliArgsHandlerHttp.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,kBAAkB;IACtB,aAAa,CAAC,gBAA2B;QAC9C,OAAO,gBAAgB;aACpB,KAAK,CAAC,8BAA8B,CAAC;aACrC,OAAO,CAAC;YACP,CAAE,6CAA6C,EAAE,EAAE,CAAE;YACrD,CAAE,+EAA+E,EAAE,EAAE,CAAE;YACvF,CAAE,iGAAiG,EAAE,EAAE,CAAE;SAC1G,CAAC;aACD,OAAO,CAAC;YACP,IAAI,EAAE;gBACJ,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,qBAAqB;gBAC/B,OAAO,EAAE,IAAK;gBACd,KAAK,EAAE,sBAAsB;aAC9B;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,0BAA0B;gBACpC,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,sBAAsB;aAC9B;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,oCAAoC;gBAC9C,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,sBAAsB;aAC9B;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,kEAAkE;gBAC5E,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sBAAsB;aAC9B;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,uDAAuD;gBACjE,OAAO,EAAE,KAAK;aACf;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,6CAA6C;gBACvD,OAAO,EAAE,KAAK;aACf;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,8DAA8D;gBACxE,OAAO,EAAE,KAAK;aACf;SACF,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,EAAE;YACZ,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO,IAAI,CAAC;aACb;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;aACzD;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,IAAyB,EAAE,OAA4B;QAC7E,aAAa;IACf,CAAC;CACF;AArED,gDAqEC","sourcesContent":["import type { ICliArgsHandler } from '@comunica/types';\nimport type { Argv } from 'yargs';\n\n/**\n * CLI arguments handler that handles options for HTTP servers.\n */\nexport class CliArgsHandlerHttp implements ICliArgsHandler {\n public populateYargs(argumentsBuilder: Argv<any>): Argv<any> {\n return argumentsBuilder\n .usage('$0 exposes a SPARQL endpoint')\n .example([\n [ `$0 https://fragments.dbpedia.org/2016-04/en`, '' ],\n [ `$0 https://fragments.dbpedia.org/2016-04/en https://query.wikidata.org/sparql`, '' ],\n [ `$0 hypermedia@https://fragments.dbpedia.org/2016-04/en sparql@https://query.wikidata.org/sparql`, '' ],\n ])\n .options({\n port: {\n alias: 'p',\n type: 'number',\n describe: 'HTTP port to run on',\n default: 3_000,\n group: 'Recommended options:',\n },\n workers: {\n alias: 'w',\n type: 'number',\n describe: 'Number of worker threads',\n default: 1,\n group: 'Recommended options:',\n },\n timeout: {\n alias: 't',\n type: 'number',\n describe: 'Query execution timeout in seconds',\n default: 60,\n group: 'Recommended options:',\n },\n update: {\n alias: 'u',\n type: 'boolean',\n describe: 'Enable update queries (otherwise, only read queries are enabled)',\n default: false,\n group: 'Recommended options:',\n },\n invalidateCache: {\n alias: 'i',\n type: 'boolean',\n describe: 'Enable cache invalidation before each query execution',\n default: false,\n },\n freshWorker: {\n type: 'boolean',\n describe: 'Kills the worker after each query execution',\n default: false,\n },\n contextOverride: {\n type: 'boolean',\n describe: 'If the query context can be overridden through POST requests',\n default: false,\n },\n })\n .check(args => {\n if (args.version) {\n return true;\n }\n if (args.context ? args.sources.length > 0 : args.sources.length === 0) {\n throw new Error('At least one source must be provided');\n }\n return true;\n });\n }\n\n public async handleArgs(args: Record<string, any>, context: Record<string, any>): Promise<void> {\n // Do nothing\n }\n}\n"]}
|
|
@@ -71,6 +71,16 @@ class CliArgsHandlerQuery {
|
|
|
71
71
|
'physical',
|
|
72
72
|
],
|
|
73
73
|
},
|
|
74
|
+
localizeBlankNodes: {
|
|
75
|
+
type: 'boolean',
|
|
76
|
+
describe: 'If blank nodes should be localized per bindings entry',
|
|
77
|
+
},
|
|
78
|
+
recoverBrokenLinks: {
|
|
79
|
+
alias: 'r',
|
|
80
|
+
type: 'boolean',
|
|
81
|
+
describe: 'Use the WayBack machine to recover broken links',
|
|
82
|
+
default: false,
|
|
83
|
+
},
|
|
74
84
|
})
|
|
75
85
|
.check(args => {
|
|
76
86
|
if (args.version || args.listformats) {
|
|
@@ -99,6 +109,14 @@ class CliArgsHandlerQuery {
|
|
|
99
109
|
if (args.explain) {
|
|
100
110
|
context[context_entries_1.KeysInitQuery.explain.name] = args.explain;
|
|
101
111
|
}
|
|
112
|
+
// Set the blank node localization
|
|
113
|
+
if (args.localizeBlankNodes) {
|
|
114
|
+
context[context_entries_1.KeysQueryOperation.localizeBlankNodes.name] = args.localizeBlankNodes;
|
|
115
|
+
}
|
|
116
|
+
// Set recover broken links flag
|
|
117
|
+
if (args.recoverBrokenLinks) {
|
|
118
|
+
context[context_entries_1.KeysHttpWayback.recoverBrokenLinks.name] = args.recoverBrokenLinks;
|
|
119
|
+
}
|
|
102
120
|
}
|
|
103
121
|
}
|
|
104
122
|
exports.CliArgsHandlerQuery = CliArgsHandlerQuery;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgsHandlerQuery.js","sourceRoot":"","sources":["CliArgsHandlerQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProxyHandlerStatic } from '@comunica/actor-http-proxy';\nimport {\n KeysHttpMemento,\n KeysHttpProxy,\n KeysHttpWayback,\n KeysInitQuery,\n KeysQueryOperation,\n} from '@comunica/context-entries';\nimport type { ICliArgsHandler } from '@comunica/types';\nimport type { Argv } from 'yargs';\n\n/**\n * CLI arguments handler that handles options for query execution.\n */\nexport class CliArgsHandlerQuery implements ICliArgsHandler {\n private readonly defaultQueryInputFormat: string | undefined;\n private readonly queryString: string | undefined;\n private readonly context: string | undefined;\n\n public constructor(\n defaultQueryInputFormat: string | undefined,\n queryString: string | undefined,\n context: string | undefined,\n ) {\n this.defaultQueryInputFormat = defaultQueryInputFormat;\n this.queryString = queryString;\n this.context = context;\n }\n\n public populateYargs(argumentsBuilder: Argv<any>): Argv<any> {\n return argumentsBuilder\n .usage('$0 evaluates SPARQL queries')\n .example([\n [ `$0 https://fragments.dbpedia.org/2016-04/en -q 'SELECT * { ?s ?p ?o }'`, '' ],\n [ `$0 https://fragments.dbpedia.org/2016-04/en -f query.sparql`, '' ],\n [ `$0 https://fragments.dbpedia.org/2016-04/en https://query.wikidata.org/sparql ...`, '' ],\n [ `$0 hypermedia@https://fragments.dbpedia.org/2016-04/en sparql@https://query.wikidata.org/sparql ...`, '' ],\n ])\n .options({\n query: {\n alias: 'q',\n type: 'string',\n describe: 'Evaluate the given SPARQL query string',\n default: this.queryString,\n group: 'Recommended options:',\n },\n file: {\n alias: 'f',\n type: 'string',\n describe: 'Evaluate the SPARQL query in the given file',\n group: 'Recommended options:',\n },\n inputType: {\n alias: 'i',\n type: 'string',\n describe: 'Query input format (e.g., graphql, sparql)',\n default: this.defaultQueryInputFormat,\n group: 'Recommended options:',\n },\n outputType: {\n alias: 't',\n type: 'string',\n describe: 'MIME type of the output (e.g., application/json)',\n group: 'Recommended options:',\n },\n proxy: {\n alias: 'p',\n type: 'string',\n describe: 'Delegates all HTTP traffic through the given proxy (e.g. http://myproxy.org/?uri=)',\n },\n listformats: {\n type: 'boolean',\n describe: 'Prints the supported MIME types',\n },\n context: {\n type: 'string',\n describe: 'Use the given JSON context string or file (e.g., config.json)',\n default: this.context,\n },\n explain: {\n type: 'string',\n describe: 'Print the query plan',\n choices: [\n 'parsed',\n 'logical',\n 'physical',\n ],\n },\n localizeBlankNodes: {\n type: 'boolean',\n describe: 'If blank nodes should be localized per bindings entry',\n },\n recoverBrokenLinks: {\n alias: 'r',\n type: 'boolean',\n describe: 'Use the WayBack machine to recover broken links',\n default: false,\n },\n })\n .check(args => {\n if (args.version || args.listformats) {\n return true;\n }\n if (!this.queryString ?\n !(args.query || args.file) && args.sources.length < (args.context ? 1 : 2) :\n args.sources.length < (args.context ? 0 : 1)) {\n throw new Error('At least one source and query must be provided');\n }\n return true;\n });\n }\n\n public async handleArgs(args: Record<string, any>, context: Record<string, any>): Promise<void> {\n // Define the query format\n context[KeysInitQuery.queryFormat.name] = { language: args.inputType, version: '1.1' };\n\n // Define the datetime\n if (args.dateTime) {\n context[KeysHttpMemento.datetime.name] = new Date(args.dateTime);\n }\n\n // Set the proxy\n if (args.proxy) {\n context[KeysHttpProxy.httpProxyHandler.name] = new ProxyHandlerStatic(args.proxy);\n }\n\n // Mark explain output\n if (args.explain) {\n context[KeysInitQuery.explain.name] = args.explain;\n }\n\n // Set the blank node localization\n if (args.localizeBlankNodes) {\n context[KeysQueryOperation.localizeBlankNodes.name] = args.localizeBlankNodes;\n }\n\n // Set recover broken links flag\n if (args.recoverBrokenLinks) {\n context[KeysHttpWayback.recoverBrokenLinks.name] = args.recoverBrokenLinks;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.js","sourceRoot":"","sources":["index-browser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAA0C;AAC1C,yCAAyC;AACzC,uDAAqC;AACrC,2DAAyC;AACzC,qDAAoD;AAA3C,kHAAA,eAAe,OAAA","sourcesContent":["/* eslint-disable unicorn/filename-case */\n/* eslint-enable unicorn/filename-case */\nexport * from './ActorInitQueryBase';\nexport * from './ActorInitQuery-browser';\nexport { QueryEngineBase } from './QueryEngineBase';\n"]}
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAAyC;AACzC,uDAAqC;AACrC,mDAAiC;AACjC,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AAExB,wCAAwC;AACxC,8DAA4C;AAC5C,2DAAyC;AACzC,2DAAyC;AACzC,4DAA0C;AAC1C,kEAAgD;AAChD,2DAAyC","sourcesContent":["// These exports are aligned with browser\nexport * from './ActorInitQueryBase';\nexport * from './ActorInitQuery';\nexport { QueryEngineBase } from './QueryEngineBase';\n\n// These exports are not for the browser\nexport * from './HttpServiceSparqlEndpoint';\nexport * from './cli/CliArgsHandlerBase';\nexport * from './cli/CliArgsHandlerHttp';\nexport * from './cli/CliArgsHandlerQuery';\nexport * from './MemoryPhysicalQueryPlanLogger';\nexport * from './QueryEngineFactoryBase';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comunica/actor-init-query",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "A query init actor",
|
|
5
5
|
"lsd:module": true,
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -28,25 +28,26 @@
|
|
|
28
28
|
"files": [
|
|
29
29
|
"components",
|
|
30
30
|
"lib/**/*.d.ts",
|
|
31
|
-
"lib/**/*.js"
|
|
31
|
+
"lib/**/*.js",
|
|
32
|
+
"lib/**/*.js.map"
|
|
32
33
|
],
|
|
33
34
|
"dependencies": {
|
|
34
|
-
"@comunica/actor-http-proxy": "^2.
|
|
35
|
-
"@comunica/bus-context-preprocess": "^2.
|
|
36
|
-
"@comunica/bus-http-invalidate": "^2.
|
|
37
|
-
"@comunica/bus-init": "^2.
|
|
38
|
-
"@comunica/bus-optimize-query-operation": "^2.
|
|
39
|
-
"@comunica/bus-query-operation": "^2.
|
|
40
|
-
"@comunica/bus-query-parse": "^2.
|
|
41
|
-
"@comunica/bus-query-result-serialize": "^2.
|
|
42
|
-
"@comunica/context-entries": "^2.
|
|
43
|
-
"@comunica/core": "^2.
|
|
44
|
-
"@comunica/logger-pretty": "^2.
|
|
45
|
-
"@comunica/runner": "^2.
|
|
46
|
-
"@comunica/types": "^2.
|
|
35
|
+
"@comunica/actor-http-proxy": "^2.5.0",
|
|
36
|
+
"@comunica/bus-context-preprocess": "^2.5.0",
|
|
37
|
+
"@comunica/bus-http-invalidate": "^2.5.0",
|
|
38
|
+
"@comunica/bus-init": "^2.5.0",
|
|
39
|
+
"@comunica/bus-optimize-query-operation": "^2.5.0",
|
|
40
|
+
"@comunica/bus-query-operation": "^2.5.0",
|
|
41
|
+
"@comunica/bus-query-parse": "^2.5.0",
|
|
42
|
+
"@comunica/bus-query-result-serialize": "^2.5.0",
|
|
43
|
+
"@comunica/context-entries": "^2.5.0",
|
|
44
|
+
"@comunica/core": "^2.5.0",
|
|
45
|
+
"@comunica/logger-pretty": "^2.5.0",
|
|
46
|
+
"@comunica/runner": "^2.5.0",
|
|
47
|
+
"@comunica/types": "^2.5.0",
|
|
47
48
|
"@rdfjs/types": "*",
|
|
48
49
|
"@types/yargs": "^17.0.2",
|
|
49
|
-
"asynciterator": "^3.
|
|
50
|
+
"asynciterator": "^3.8.0",
|
|
50
51
|
"negotiate": "^1.0.1",
|
|
51
52
|
"rdf-quad": "^1.4.0",
|
|
52
53
|
"rdf-string": "^1.5.0",
|
|
@@ -65,5 +66,5 @@
|
|
|
65
66
|
"browser": {
|
|
66
67
|
"./lib/index.js": "./lib/index-browser.js"
|
|
67
68
|
},
|
|
68
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "349d57f5d1e539200e980bdff96973c2e0b66caa"
|
|
69
70
|
}
|
package/LICENSE.txt
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
The MIT License (MIT)
|
|
2
|
-
|
|
3
|
-
Copyright © 2017–now Ruben Taelman, Joachim Van Herwegen
|
|
4
|
-
Comunica Association and Ghent University – imec, Belgium
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
in the Software without restriction, including without limitation the rights
|
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
furnished to do so, subject to the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be included in
|
|
14
|
-
all copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
22
|
-
THE SOFTWARE.
|