@origintrail-official/dkg-storage 10.0.13 → 10.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/blazegraph-namespace-contract.cjs +66 -0
- package/blazegraph-namespace-contract.d.cts +10 -0
- package/dist/abortable-store-work-lifecycle.d.ts +14 -0
- package/dist/abortable-store-work-lifecycle.d.ts.map +1 -1
- package/dist/abortable-store-work-lifecycle.js +51 -0
- package/dist/abortable-store-work-lifecycle.js.map +1 -1
- package/dist/abortable-stream-work-lifecycle.d.ts +19 -0
- package/dist/abortable-stream-work-lifecycle.d.ts.map +1 -0
- package/dist/abortable-stream-work-lifecycle.js +95 -0
- package/dist/abortable-stream-work-lifecycle.js.map +1 -0
- package/dist/adapters/blazegraph.d.ts +32 -0
- package/dist/adapters/blazegraph.d.ts.map +1 -1
- package/dist/adapters/blazegraph.js +227 -93
- package/dist/adapters/blazegraph.js.map +1 -1
- package/dist/adapters/oxigraph-worker-impl.js +13 -3
- package/dist/adapters/oxigraph-worker-impl.js.map +1 -1
- package/dist/adapters/oxigraph-worker.d.ts +21 -2
- package/dist/adapters/oxigraph-worker.d.ts.map +1 -1
- package/dist/adapters/oxigraph-worker.js +123 -50
- package/dist/adapters/oxigraph-worker.js.map +1 -1
- package/dist/adapters/oxigraph.d.ts +14 -0
- package/dist/adapters/oxigraph.d.ts.map +1 -1
- package/dist/adapters/oxigraph.js +73 -14
- package/dist/adapters/oxigraph.js.map +1 -1
- package/dist/adapters/sparql-http.d.ts +122 -9
- package/dist/adapters/sparql-http.d.ts.map +1 -1
- package/dist/adapters/sparql-http.js +503 -178
- package/dist/adapters/sparql-http.js.map +1 -1
- package/dist/adapters/sparql-response-policy.d.ts +20 -0
- package/dist/adapters/sparql-response-policy.d.ts.map +1 -0
- package/dist/adapters/sparql-response-policy.js +34 -0
- package/dist/adapters/sparql-response-policy.js.map +1 -0
- package/dist/atomic-graph-replace.d.ts +4 -0
- package/dist/atomic-graph-replace.d.ts.map +1 -1
- package/dist/atomic-graph-replace.js +4 -4
- package/dist/atomic-graph-replace.js.map +1 -1
- package/dist/blazegraph-namespace-manager.d.ts +46 -0
- package/dist/blazegraph-namespace-manager.d.ts.map +1 -0
- package/dist/blazegraph-namespace-manager.js +185 -0
- package/dist/blazegraph-namespace-manager.js.map +1 -0
- package/dist/changelog-store.d.ts +11 -2
- package/dist/changelog-store.d.ts.map +1 -1
- package/dist/changelog-store.js +105 -67
- package/dist/changelog-store.js.map +1 -1
- package/dist/closed-data-snapshot.d.ts +7 -0
- package/dist/closed-data-snapshot.d.ts.map +1 -0
- package/dist/closed-data-snapshot.js +14 -0
- package/dist/closed-data-snapshot.js.map +1 -0
- package/dist/content-addressed-blob-single-flight.d.ts +16 -0
- package/dist/content-addressed-blob-single-flight.d.ts.map +1 -0
- package/dist/content-addressed-blob-single-flight.js +33 -0
- package/dist/content-addressed-blob-single-flight.js.map +1 -0
- package/dist/graph-set-catalog-state.d.ts +23 -0
- package/dist/graph-set-catalog-state.d.ts.map +1 -0
- package/dist/graph-set-catalog-state.js +53 -0
- package/dist/graph-set-catalog-state.js.map +1 -0
- package/dist/graph-set-index-store.d.ts +24 -5
- package/dist/graph-set-index-store.d.ts.map +1 -1
- package/dist/graph-set-index-store.js +152 -48
- package/dist/graph-set-index-store.js.map +1 -1
- package/dist/graph-write-gen.d.ts +77 -14
- package/dist/graph-write-gen.d.ts.map +1 -1
- package/dist/graph-write-gen.js +146 -16
- package/dist/graph-write-gen.js.map +1 -1
- package/dist/http-response-limit.d.ts.map +1 -1
- package/dist/http-response-limit.js +8 -32
- package/dist/http-response-limit.js.map +1 -1
- package/dist/index.d.ts +21 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -6
- package/dist/index.js.map +1 -1
- package/dist/managed-oxigraph-runtime-store.d.ts +33 -0
- package/dist/managed-oxigraph-runtime-store.d.ts.map +1 -0
- package/dist/managed-oxigraph-runtime-store.js +123 -0
- package/dist/managed-oxigraph-runtime-store.js.map +1 -0
- package/dist/nquads-text.d.ts +35 -0
- package/dist/nquads-text.d.ts.map +1 -0
- package/dist/nquads-text.js +67 -0
- package/dist/nquads-text.js.map +1 -0
- package/dist/private-store.d.ts.map +1 -1
- package/dist/private-store.js +5 -5
- package/dist/private-store.js.map +1 -1
- package/dist/rfc64-author-commit-cas.d.ts +112 -0
- package/dist/rfc64-author-commit-cas.d.ts.map +1 -0
- package/dist/rfc64-author-commit-cas.js +586 -0
- package/dist/rfc64-author-commit-cas.js.map +1 -0
- package/dist/rfc64-author-commit-execution.d.ts +20 -0
- package/dist/rfc64-author-commit-execution.d.ts.map +1 -0
- package/dist/rfc64-author-commit-execution.js +47 -0
- package/dist/rfc64-author-commit-execution.js.map +1 -0
- package/dist/rfc64-author-commit-plan-codec.d.ts +104 -0
- package/dist/rfc64-author-commit-plan-codec.d.ts.map +1 -0
- package/dist/rfc64-author-commit-plan-codec.js +337 -0
- package/dist/rfc64-author-commit-plan-codec.js.map +1 -0
- package/dist/rfc64-author-seal-read-gateway.d.ts +28 -0
- package/dist/rfc64-author-seal-read-gateway.d.ts.map +1 -0
- package/dist/rfc64-author-seal-read-gateway.js +61 -0
- package/dist/rfc64-author-seal-read-gateway.js.map +1 -0
- package/dist/rfc64-closed-bindings-read-runner.d.ts +15 -0
- package/dist/rfc64-closed-bindings-read-runner.d.ts.map +1 -0
- package/dist/rfc64-closed-bindings-read-runner.js +66 -0
- package/dist/rfc64-closed-bindings-read-runner.js.map +1 -0
- package/dist/rfc64-exact-bindings-read-capability.d.ts +45 -0
- package/dist/rfc64-exact-bindings-read-capability.d.ts.map +1 -0
- package/dist/rfc64-exact-bindings-read-capability.js +176 -0
- package/dist/rfc64-exact-bindings-read-capability.js.map +1 -0
- package/dist/rfc64-http-shared-projection-runner.d.ts +29 -0
- package/dist/rfc64-http-shared-projection-runner.d.ts.map +1 -0
- package/dist/rfc64-http-shared-projection-runner.js +81 -0
- package/dist/rfc64-http-shared-projection-runner.js.map +1 -0
- package/dist/rfc64-semantic-author-commit-v1.d.ts +38 -0
- package/dist/rfc64-semantic-author-commit-v1.d.ts.map +1 -0
- package/dist/rfc64-semantic-author-commit-v1.js +285 -0
- package/dist/rfc64-semantic-author-commit-v1.js.map +1 -0
- package/dist/rfc64-semantic-read-gateway.d.ts +32 -0
- package/dist/rfc64-semantic-read-gateway.d.ts.map +1 -0
- package/dist/rfc64-semantic-read-gateway.js +68 -0
- package/dist/rfc64-semantic-read-gateway.js.map +1 -0
- package/dist/rfc64-shared-projection-http-spool.d.ts +43 -0
- package/dist/rfc64-shared-projection-http-spool.d.ts.map +1 -0
- package/dist/rfc64-shared-projection-http-spool.js +438 -0
- package/dist/rfc64-shared-projection-http-spool.js.map +1 -0
- package/dist/rfc64-shared-projection-stream-capability.d.ts +17 -0
- package/dist/rfc64-shared-projection-stream-capability.d.ts.map +1 -0
- package/dist/rfc64-shared-projection-stream-capability.js +28 -0
- package/dist/rfc64-shared-projection-stream-capability.js.map +1 -0
- package/dist/rfc64-shared-projection-stream-gateway.d.ts +37 -0
- package/dist/rfc64-shared-projection-stream-gateway.d.ts.map +1 -0
- package/dist/rfc64-shared-projection-stream-gateway.js +147 -0
- package/dist/rfc64-shared-projection-stream-gateway.js.map +1 -0
- package/dist/shared-memory-literal-blob-store.d.ts +9 -4
- package/dist/shared-memory-literal-blob-store.d.ts.map +1 -1
- package/dist/shared-memory-literal-blob-store.js +66 -34
- package/dist/shared-memory-literal-blob-store.js.map +1 -1
- package/dist/sorted-graph-catalog-projection.d.ts +9 -0
- package/dist/sorted-graph-catalog-projection.d.ts.map +1 -0
- package/dist/sorted-graph-catalog-projection.js +17 -0
- package/dist/sorted-graph-catalog-projection.js.map +1 -0
- package/dist/sparql-json-query-result.d.ts +46 -0
- package/dist/sparql-json-query-result.d.ts.map +1 -0
- package/dist/sparql-json-query-result.js +186 -0
- package/dist/sparql-json-query-result.js.map +1 -0
- package/dist/store-operation-outcome.d.ts +28 -0
- package/dist/store-operation-outcome.d.ts.map +1 -0
- package/dist/store-operation-outcome.js +54 -0
- package/dist/store-operation-outcome.js.map +1 -0
- package/dist/store-operation-timeout.d.ts +50 -0
- package/dist/store-operation-timeout.d.ts.map +1 -0
- package/dist/store-operation-timeout.js +49 -0
- package/dist/store-operation-timeout.js.map +1 -0
- package/dist/store-priority-scheduler.d.ts +25 -4
- package/dist/store-priority-scheduler.d.ts.map +1 -1
- package/dist/store-priority-scheduler.js +47 -17
- package/dist/store-priority-scheduler.js.map +1 -1
- package/dist/swm-materialization-witness.d.ts +4 -0
- package/dist/swm-materialization-witness.d.ts.map +1 -1
- package/dist/swm-materialization-witness.js +2 -2
- package/dist/swm-materialization-witness.js.map +1 -1
- package/dist/triple-store.d.ts +74 -2
- package/dist/triple-store.d.ts.map +1 -1
- package/dist/triple-store.js +75 -7
- package/dist/triple-store.js.map +1 -1
- package/dist/unsupported-capability-error.d.ts +7 -2
- package/dist/unsupported-capability-error.d.ts.map +1 -1
- package/dist/unsupported-capability-error.js +9 -0
- package/dist/unsupported-capability-error.js.map +1 -1
- package/dist/worker-error-protocol.d.ts +16 -0
- package/dist/worker-error-protocol.d.ts.map +1 -0
- package/dist/worker-error-protocol.js +27 -0
- package/dist/worker-error-protocol.js.map +1 -0
- package/package.json +21 -3
- package/dist/adapters/sparql-json-results.d.ts +0 -32
- package/dist/adapters/sparql-json-results.d.ts.map +0 -1
- package/dist/adapters/sparql-json-results.js +0 -37
- package/dist/adapters/sparql-json-results.js.map +0 -1
package/README.md
CHANGED
|
@@ -76,6 +76,12 @@ operation rejected before dispatch receives `StoreSchedulerBusyError` with
|
|
|
76
76
|
the operation closure starts, retrying it cannot duplicate a write that might
|
|
77
77
|
already have reached the store.
|
|
78
78
|
|
|
79
|
+
Each external adapter supplies the canonical store operation as queue-entry
|
|
80
|
+
metadata, and the scheduler binds it when creating either admission rejection.
|
|
81
|
+
Decorators validate that tagged operation-outcome contract rather than the
|
|
82
|
+
error class alone: a rejected nested read does not imply that an enclosing
|
|
83
|
+
replace failed before mutation.
|
|
84
|
+
|
|
79
85
|
| Environment variable | Default | Purpose |
|
|
80
86
|
|---|---:|---|
|
|
81
87
|
| `DKG_STORE_MAX_CONCURRENT` | `8` | Maximum external-store operations in flight. |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { createHash } = require('node:crypto');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Canonical, buildless Blazegraph namespace contract shared by storage,
|
|
7
|
+
* product/CLI provisioning, shell entry points, and rollout certification.
|
|
8
|
+
* Keeping the policy in this leaf CJS module lets pre-build shell callers use
|
|
9
|
+
* the exact same normalization, validation, and XML rendering as TypeScript.
|
|
10
|
+
*/
|
|
11
|
+
const BLAZEGRAPH_NAMESPACE_XML_TEMPLATE = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
12
|
+
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
|
|
13
|
+
<properties>
|
|
14
|
+
<entry key="com.bigdata.rdf.sail.namespace">{namespace}</entry>
|
|
15
|
+
<entry key="com.bigdata.rdf.store.AbstractTripleStore.quads">true</entry>
|
|
16
|
+
<entry key="com.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers">false</entry>
|
|
17
|
+
<entry key="com.bigdata.rdf.store.AbstractTripleStore.textIndex">false</entry>
|
|
18
|
+
<entry key="com.bigdata.rdf.sail.truthMaintenance">false</entry>
|
|
19
|
+
<entry key="com.bigdata.rdf.store.AbstractTripleStore.axiomsClass">com.bigdata.rdf.axioms.NoAxioms</entry>
|
|
20
|
+
</properties>`;
|
|
21
|
+
|
|
22
|
+
const BLAZEGRAPH_NAMESPACE_PATTERN = /^[A-Za-z0-9._-]{1,128}$/;
|
|
23
|
+
|
|
24
|
+
function assertBlazegraphNamespace(namespace) {
|
|
25
|
+
if (
|
|
26
|
+
typeof namespace !== 'string'
|
|
27
|
+
|| !BLAZEGRAPH_NAMESPACE_PATTERN.test(namespace)
|
|
28
|
+
|| namespace === '.'
|
|
29
|
+
|| namespace === '..'
|
|
30
|
+
) {
|
|
31
|
+
throw new Error(
|
|
32
|
+
`Blazegraph namespace ${JSON.stringify(namespace)} is invalid: it must match ${BLAZEGRAPH_NAMESPACE_PATTERN} and cannot be a URL dot segment`,
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function normalizeBlazegraphNamespace(namespace) {
|
|
38
|
+
if (typeof namespace !== 'string') {
|
|
39
|
+
throw new TypeError('Blazegraph namespace input must be a string');
|
|
40
|
+
}
|
|
41
|
+
const candidate = namespace
|
|
42
|
+
.normalize('NFKD')
|
|
43
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
44
|
+
.replace(/[^a-zA-Z0-9_.-]+/g, '-')
|
|
45
|
+
.replace(/^-+|-+$/g, '')
|
|
46
|
+
.toLowerCase();
|
|
47
|
+
const slug = candidate.length === 0 || candidate === '.' || candidate === '..'
|
|
48
|
+
? 'dkg-node'
|
|
49
|
+
: candidate;
|
|
50
|
+
if (slug.length <= 128) return slug;
|
|
51
|
+
const suffix = createHash('sha256').update(slug).digest('hex').slice(0, 12);
|
|
52
|
+
return `${slug.slice(0, 115)}-${suffix}`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function renderBlazegraphNamespaceXml(namespace) {
|
|
56
|
+
assertBlazegraphNamespace(namespace);
|
|
57
|
+
return BLAZEGRAPH_NAMESPACE_XML_TEMPLATE.replace('{namespace}', namespace);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
module.exports = Object.freeze({
|
|
61
|
+
BLAZEGRAPH_NAMESPACE_PATTERN,
|
|
62
|
+
BLAZEGRAPH_NAMESPACE_XML_TEMPLATE,
|
|
63
|
+
assertBlazegraphNamespace,
|
|
64
|
+
normalizeBlazegraphNamespace,
|
|
65
|
+
renderBlazegraphNamespaceXml,
|
|
66
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface BlazegraphNamespaceContract {
|
|
2
|
+
readonly BLAZEGRAPH_NAMESPACE_PATTERN: RegExp;
|
|
3
|
+
readonly BLAZEGRAPH_NAMESPACE_XML_TEMPLATE: string;
|
|
4
|
+
assertBlazegraphNamespace(namespace: string): void;
|
|
5
|
+
normalizeBlazegraphNamespace(namespace: string): string;
|
|
6
|
+
renderBlazegraphNamespaceXml(namespace: string): string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
declare const contract: BlazegraphNamespaceContract;
|
|
10
|
+
export = contract;
|
|
@@ -8,7 +8,21 @@ export interface AbortSignalScope {
|
|
|
8
8
|
readonly signal: AbortSignal | undefined;
|
|
9
9
|
dispose(): void;
|
|
10
10
|
}
|
|
11
|
+
export interface StoreWorkTimeoutRace {
|
|
12
|
+
readonly timeoutMs: number;
|
|
13
|
+
readonly timeoutError: () => Error;
|
|
14
|
+
}
|
|
15
|
+
export interface StoreWorkRaceOptions<T> {
|
|
16
|
+
readonly onLateResult?: (value: T) => void | Promise<void>;
|
|
17
|
+
readonly timeout?: StoreWorkTimeoutRace;
|
|
18
|
+
}
|
|
11
19
|
export declare function composeAbortSignals(primary: AbortSignal | undefined, secondary: AbortSignal | undefined): AbortSignalScope;
|
|
20
|
+
/**
|
|
21
|
+
* Race one already-started operation against cancellation without leaking a
|
|
22
|
+
* listener or an unhandled late settlement. An optional late-result hook owns
|
|
23
|
+
* resources that arrive after cancellation (for example a backend iterator).
|
|
24
|
+
*/
|
|
25
|
+
export declare function raceStoreWorkAgainstAbort<T>(work: Promise<T>, signal: AbortSignal | undefined, options?: StoreWorkRaceOptions<T>): Promise<T>;
|
|
12
26
|
/**
|
|
13
27
|
* Owns admission, cancellation, and draining for reusable store adapters.
|
|
14
28
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abortable-store-work-lifecycle.d.ts","sourceRoot":"","sources":["../src/abortable-store-work-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,SAAS,EAAE,WAAW,GAAG,SAAS,GACjC,gBAAgB,CA8BlB;
|
|
1
|
+
{"version":3,"file":"abortable-store-work-lifecycle.d.ts","sourceRoot":"","sources":["../src/abortable-store-work-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,KAAK,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAID,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,SAAS,EAAE,WAAW,GAAG,SAAS,GACjC,gBAAgB,CA8BlB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,OAAO,CAAC,CAAC,CAAC,CA0CZ;AAoBD;;;;;;;;GAQG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,YAAY,CAA8B;IAElD,GAAG,CAAC,CAAC,EACH,YAAY,EAAE,WAAW,GAAG,SAAS,EACrC,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GACrD,OAAO,CAAC,CAAC,CAAC;IAyBb,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBpC"}
|
|
@@ -35,6 +35,57 @@ export function composeAbortSignals(primary, secondary) {
|
|
|
35
35
|
}
|
|
36
36
|
return { signal: combined.signal, dispose };
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Race one already-started operation against cancellation without leaking a
|
|
40
|
+
* listener or an unhandled late settlement. An optional late-result hook owns
|
|
41
|
+
* resources that arrive after cancellation (for example a backend iterator).
|
|
42
|
+
*/
|
|
43
|
+
export function raceStoreWorkAgainstAbort(work, signal, options = {}) {
|
|
44
|
+
const timeoutMs = options.timeout?.timeoutMs ?? 0;
|
|
45
|
+
if (!signal && timeoutMs <= 0)
|
|
46
|
+
return work;
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
let settled = false;
|
|
49
|
+
let timer;
|
|
50
|
+
const finish = (action) => {
|
|
51
|
+
if (settled)
|
|
52
|
+
return false;
|
|
53
|
+
settled = true;
|
|
54
|
+
if (timer)
|
|
55
|
+
clearTimeout(timer);
|
|
56
|
+
signal?.removeEventListener('abort', onAbort);
|
|
57
|
+
action();
|
|
58
|
+
return true;
|
|
59
|
+
};
|
|
60
|
+
const consumeLateResult = (value) => {
|
|
61
|
+
if (!options.onLateResult)
|
|
62
|
+
return;
|
|
63
|
+
void Promise.resolve()
|
|
64
|
+
.then(() => options.onLateResult?.(value))
|
|
65
|
+
.catch(() => undefined);
|
|
66
|
+
};
|
|
67
|
+
const onAbort = () => finish(() => reject(normalizeAbortReason(signal?.reason)));
|
|
68
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
69
|
+
// Attach both handlers before observing pre-abort so every started promise
|
|
70
|
+
// remains consumed even when cancellation wins the race immediately.
|
|
71
|
+
work.then((value) => {
|
|
72
|
+
if (!finish(() => resolve(value)))
|
|
73
|
+
consumeLateResult(value);
|
|
74
|
+
}, (cause) => finish(() => reject(cause)));
|
|
75
|
+
if (signal?.aborted) {
|
|
76
|
+
onAbort();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (timeoutMs > 0) {
|
|
80
|
+
timer = setTimeout(() => finish(() => reject(options.timeout.timeoutError())), timeoutMs);
|
|
81
|
+
if (typeof timer.unref === 'function')
|
|
82
|
+
timer.unref();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function normalizeAbortReason(reason) {
|
|
87
|
+
return reason instanceof Error ? reason : new Error(String(reason ?? 'aborted'));
|
|
88
|
+
}
|
|
38
89
|
function createGeneration() {
|
|
39
90
|
return {
|
|
40
91
|
controller: new AbortController(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abortable-store-work-lifecycle.js","sourceRoot":"","sources":["../src/abortable-store-work-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"abortable-store-work-lifecycle.js","sourceRoot":"","sources":["../src/abortable-store-work-lifecycle.ts"],"names":[],"mappings":"AAqBA,MAAM,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAE9B,MAAM,UAAU,mBAAmB,CACjC,OAAgC,EAChC,SAAkC;IAElC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAClE,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAElE,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACrD,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC3D,CAAC,CAAC;IACF,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAChD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAChD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,OAAO;QAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC/C,IAAI,SAAS,CAAC,OAAO;QAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACxD,CAAC;QACJ,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAgB,EAChB,MAA+B,EAC/B,UAAmC,EAAE;IAErC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAgD,CAAC;QACrD,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAW,EAAE;YAC7C,IAAI,OAAO;gBAAE,OAAO,KAAK,CAAC;YAC1B,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,iBAAiB,GAAG,CAAC,KAAQ,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,YAAY;gBAAE,OAAO;YAClC,KAAK,OAAO,CAAC,OAAO,EAAE;iBACnB,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;iBACzC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,2EAA2E;QAC3E,qEAAqE;QACrE,IAAI,CAAC,IAAI,CACP,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CACvC,CAAC;QACF,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG,UAAU,CAChB,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAC3D,SAAS,CACV,CAAC;YACF,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe;IAC3C,OAAO,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;AACnF,CAAC;AAQD,SAAS,gBAAgB;IACvB,OAAO;QACL,UAAU,EAAE,IAAI,eAAe,EAAE;QACjC,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,2BAA2B;IAC9B,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAChC,YAAY,GAAyB,IAAI,CAAC;IAElD,GAAG,CACD,YAAqC,EACrC,KAAsD;QAEtD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;YACnD,OAAO,OAAO,CAAC,MAAM,CACnB,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,wBAAwB,CAAC,CAAC,CACzF,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpF,IAAI,IAAgB,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;QACD,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACrB,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAa;QACjB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAEhD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC,UAAU,GAAG,gBAAgB,EAAE,CAAC;YACvC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACrB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3D,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface LazyAbortableStreamOptions<T> {
|
|
2
|
+
/** Absolute monotonic deadline shared by open, reads, and cleanup. */
|
|
3
|
+
readonly deadlineAt: number;
|
|
4
|
+
readonly signal?: AbortSignal;
|
|
5
|
+
readonly timeoutMessage: string;
|
|
6
|
+
readonly open: (signal: AbortSignal | undefined) => Promise<AsyncIterable<T>>;
|
|
7
|
+
readonly invalidSource: () => never;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Open and consume one backend stream under a single lazy cancellation scope.
|
|
11
|
+
*
|
|
12
|
+
* The helper owns the generic resource lifecycle: no backend is opened before
|
|
13
|
+
* first iteration, non-cooperative open/read promises are raced against the
|
|
14
|
+
* deadline, a source arriving after cancellation is closed, early consumer
|
|
15
|
+
* return closes the acquired iterator, and signal listeners are always
|
|
16
|
+
* released. Protocol-specific validation remains with the caller.
|
|
17
|
+
*/
|
|
18
|
+
export declare function openLazyAbortableStream<T>(options: LazyAbortableStreamOptions<T>): AsyncIterable<T>;
|
|
19
|
+
//# sourceMappingURL=abortable-stream-work-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable-stream-work-lifecycle.d.ts","sourceRoot":"","sources":["../src/abortable-stream-work-lifecycle.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,0BAA0B,CAAC,CAAC;IAC3C,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,QAAQ,CAAC,aAAa,EAAE,MAAM,KAAK,CAAC;CACrC;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EACvC,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACrC,aAAa,CAAC,CAAC,CAAC,CAsElB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { composeAbortSignals, raceStoreWorkAgainstAbort, } from './abortable-store-work-lifecycle.js';
|
|
2
|
+
/**
|
|
3
|
+
* Open and consume one backend stream under a single lazy cancellation scope.
|
|
4
|
+
*
|
|
5
|
+
* The helper owns the generic resource lifecycle: no backend is opened before
|
|
6
|
+
* first iteration, non-cooperative open/read promises are raced against the
|
|
7
|
+
* deadline, a source arriving after cancellation is closed, early consumer
|
|
8
|
+
* return closes the acquired iterator, and signal listeners are always
|
|
9
|
+
* released. Protocol-specific validation remains with the caller.
|
|
10
|
+
*/
|
|
11
|
+
export function openLazyAbortableStream(options) {
|
|
12
|
+
return run();
|
|
13
|
+
async function* run() {
|
|
14
|
+
const remainingMs = options.deadlineAt - performance.now();
|
|
15
|
+
if (remainingMs <= 0)
|
|
16
|
+
throw timeout(options.timeoutMessage);
|
|
17
|
+
const deadlineSignal = AbortSignal.timeout(Math.max(1, Math.ceil(remainingMs)));
|
|
18
|
+
const signalScope = composeAbortSignals(options.signal, deadlineSignal);
|
|
19
|
+
try {
|
|
20
|
+
assertActive(signalScope.signal, options.deadlineAt, options.timeoutMessage);
|
|
21
|
+
const pendingSource = options.open(signalScope.signal);
|
|
22
|
+
let source;
|
|
23
|
+
try {
|
|
24
|
+
source = await raceStoreWorkAgainstAbort(pendingSource, signalScope.signal, {
|
|
25
|
+
onLateResult: async (lateSource) => {
|
|
26
|
+
if (isAsyncIterable(lateSource))
|
|
27
|
+
await closeAsyncIterable(lateSource);
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (cause) {
|
|
32
|
+
assertActive(signalScope.signal, options.deadlineAt, options.timeoutMessage);
|
|
33
|
+
throw cause;
|
|
34
|
+
}
|
|
35
|
+
if (!isAsyncIterable(source)) {
|
|
36
|
+
assertActive(signalScope.signal, options.deadlineAt, options.timeoutMessage);
|
|
37
|
+
options.invalidSource();
|
|
38
|
+
}
|
|
39
|
+
const iterator = source[Symbol.asyncIterator]();
|
|
40
|
+
let complete = false;
|
|
41
|
+
try {
|
|
42
|
+
// Once open() has produced a valid stream, its iterator must belong to
|
|
43
|
+
// this cleanup scope before observing cancellation again. Otherwise a
|
|
44
|
+
// cancellation delivered between promise settlement and this
|
|
45
|
+
// continuation can strand the acquired backend resource.
|
|
46
|
+
assertActive(signalScope.signal, options.deadlineAt, options.timeoutMessage);
|
|
47
|
+
while (true) {
|
|
48
|
+
assertActive(signalScope.signal, options.deadlineAt, options.timeoutMessage);
|
|
49
|
+
let next;
|
|
50
|
+
try {
|
|
51
|
+
next = await raceStoreWorkAgainstAbort(Promise.resolve(iterator.next()), signalScope.signal);
|
|
52
|
+
}
|
|
53
|
+
catch (cause) {
|
|
54
|
+
assertActive(signalScope.signal, options.deadlineAt, options.timeoutMessage);
|
|
55
|
+
throw cause;
|
|
56
|
+
}
|
|
57
|
+
assertActive(signalScope.signal, options.deadlineAt, options.timeoutMessage);
|
|
58
|
+
if (next.done) {
|
|
59
|
+
complete = true;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
yield next.value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
if (!complete) {
|
|
67
|
+
await raceStoreWorkAgainstAbort(Promise.resolve().then(() => iterator.return?.()), signalScope.signal).catch(() => undefined);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
assertActive(signalScope.signal, options.deadlineAt, options.timeoutMessage);
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
signalScope.dispose();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function closeAsyncIterable(source) {
|
|
78
|
+
const iterator = source[Symbol.asyncIterator]();
|
|
79
|
+
await iterator.return?.();
|
|
80
|
+
}
|
|
81
|
+
function isAsyncIterable(value) {
|
|
82
|
+
return value !== null
|
|
83
|
+
&& (typeof value === 'object' || typeof value === 'function')
|
|
84
|
+
&& typeof value[Symbol.asyncIterator]
|
|
85
|
+
=== 'function';
|
|
86
|
+
}
|
|
87
|
+
function assertActive(signal, deadlineAt, timeoutMessage) {
|
|
88
|
+
signal?.throwIfAborted();
|
|
89
|
+
if (performance.now() >= deadlineAt)
|
|
90
|
+
throw timeout(timeoutMessage);
|
|
91
|
+
}
|
|
92
|
+
function timeout(message) {
|
|
93
|
+
return new DOMException(message, 'TimeoutError');
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=abortable-stream-work-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable-stream-work-lifecycle.js","sourceRoot":"","sources":["../src/abortable-stream-work-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import type { TripleStore, Quad as DKGQuad, QueryOptions, UpdateOptions, StorePressureSnapshot, TripleStoreQueryOptions, QueryResult } from '../triple-store.js';
|
|
2
|
+
import { type Rfc64SemanticReadOperationV1 } from '@origintrail-official/dkg-core';
|
|
3
|
+
import { type Rfc64ExactBindingsReadOperationV1 } from '../rfc64-exact-bindings-read-capability.js';
|
|
4
|
+
import { type StorePriorityScheduler } from '../store-priority-scheduler.js';
|
|
5
|
+
import { type Rfc64AuthorCommitCasInputV1, type Rfc64AuthorCommitCasResultV1 } from '../rfc64-author-commit-cas.js';
|
|
2
6
|
export declare const DEFAULT_BLAZEGRAPH_OPERATION_TIMEOUT_MS = 30000;
|
|
3
7
|
export interface BlazegraphStoreOptions {
|
|
4
8
|
/** End-to-end timeout including scheduler wait, HTTP work, and response decoding. */
|
|
5
9
|
timeout?: number;
|
|
10
|
+
/** Optional scheduler injection for embedded callers and adapter-boundary tests. */
|
|
11
|
+
scheduler?: StorePriorityScheduler;
|
|
6
12
|
}
|
|
7
13
|
/**
|
|
8
14
|
* BlazegraphStore — TripleStore adapter backed by a remote Blazegraph
|
|
@@ -14,14 +20,24 @@ export interface BlazegraphStoreOptions {
|
|
|
14
20
|
*/
|
|
15
21
|
export declare class BlazegraphStore implements TripleStore {
|
|
16
22
|
readonly queryCancellation: "interruptible";
|
|
23
|
+
readonly rfc64ExactBindingsReadCertifiedV1: true;
|
|
24
|
+
readonly rfc64SemanticReadCertifiedV1: true;
|
|
25
|
+
readonly rfc64SharedProjectionStreamCertifiedV1: true;
|
|
26
|
+
readonly rfc64SharedProjectionStreamV1: (operation: import("@origintrail-official/dkg-core").Rfc64SharedProjectionStreamOperationV1, options: import("../triple-store.js").Rfc64SharedProjectionStreamCapabilityOptionsV1) => Promise<AsyncIterable<Uint8Array>>;
|
|
17
27
|
private readonly url;
|
|
18
28
|
private readonly operationTimeoutMs;
|
|
29
|
+
private readonly scheduler;
|
|
19
30
|
constructor(url: string, options?: BlazegraphStoreOptions);
|
|
31
|
+
private runStreamingConstruct;
|
|
32
|
+
rfc64ExactBindingsReadV1(operation: Rfc64ExactBindingsReadOperationV1, options?: Pick<QueryOptions, 'signal'>): Promise<readonly import("@origintrail-official/dkg-core").TypedRdfStoreRowV1[]>;
|
|
33
|
+
rfc64SemanticReadV1(operation: Rfc64SemanticReadOperationV1, options?: Pick<QueryOptions, 'signal'>): Promise<import("../rfc64-exact-bindings-read-capability.js").Rfc64SemanticReadCapabilityResultV1>;
|
|
20
34
|
private runStoreWork;
|
|
21
35
|
getPressureSnapshot(): StorePressureSnapshot;
|
|
22
36
|
insert(quads: DKGQuad[], options?: QueryOptions): Promise<void>;
|
|
23
37
|
delete(quads: DKGQuad[], options?: QueryOptions): Promise<void>;
|
|
24
38
|
deleteByPattern(pattern: Partial<DKGQuad>, options?: QueryOptions): Promise<number>;
|
|
39
|
+
deleteByPatternWithoutCount(pattern: Partial<DKGQuad>, options?: QueryOptions): Promise<void>;
|
|
40
|
+
private applyDeleteByPattern;
|
|
25
41
|
deleteBySubjectPrefix(graphUri: string, prefix: string, options?: QueryOptions): Promise<number>;
|
|
26
42
|
/**
|
|
27
43
|
* Server-side SPARQL UPDATE — POSTs the update verbatim to the endpoint so a
|
|
@@ -37,7 +53,23 @@ export declare class BlazegraphStore implements TripleStore {
|
|
|
37
53
|
replaceGraph(graphUri: string, quads: DKGQuad[], options?: QueryOptions): Promise<void>;
|
|
38
54
|
replaceGraphAndSubject(graphUri: string, graphQuads: DKGQuad[], metaGraphUri: string, metadataSubject: string, metadataQuads: DKGQuad[], options?: QueryOptions): Promise<void>;
|
|
39
55
|
replaceSubject(graphUri: string, subject: string, quads: DKGQuad[], options?: QueryOptions): Promise<void>;
|
|
56
|
+
rfc64AuthorCommitCasV1(input: Rfc64AuthorCommitCasInputV1, options?: QueryOptions): Promise<Rfc64AuthorCommitCasResultV1>;
|
|
40
57
|
query(sparql: string, options?: TripleStoreQueryOptions): Promise<QueryResult>;
|
|
58
|
+
private queryWithOperation;
|
|
59
|
+
/**
|
|
60
|
+
* Server-side query bound sent with every read. See
|
|
61
|
+
* {@link SERVER_QUERY_DEADLINE_FACTOR} for why this is wider than the
|
|
62
|
+
* client deadline rather than tighter.
|
|
63
|
+
*/
|
|
64
|
+
private serverQueryDeadlineMs;
|
|
65
|
+
/**
|
|
66
|
+
* Canonical request boundary for Blazegraph reads. Keeping transport and
|
|
67
|
+
* deadline setup here makes it impossible for SELECT/ASK and
|
|
68
|
+
* CONSTRUCT/DESCRIBE to drift on the server-side cancellation policy while
|
|
69
|
+
* leaving their distinct response decoding in the callers.
|
|
70
|
+
*/
|
|
71
|
+
private postReadQuery;
|
|
72
|
+
private postReadRequest;
|
|
41
73
|
private queryConstruct;
|
|
42
74
|
hasGraph(graphUri: string, options?: QueryOptions): Promise<boolean>;
|
|
43
75
|
createGraph(_graphUri: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blazegraph.d.ts","sourceRoot":"","sources":["../../src/adapters/blazegraph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,IAAI,IAAI,OAAO,EACf,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,
|
|
1
|
+
{"version":3,"file":"blazegraph.d.ts","sourceRoot":"","sources":["../../src/adapters/blazegraph.ts"],"names":[],"mappings":"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"}
|