@spine-event-engine/storage 2.0.0-snapshot.10
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/LICENSE +201 -0
- package/README.md +190 -0
- package/REFERENCE.md +122 -0
- package/dist/entity/entity-history-record-spec.d.ts +26 -0
- package/dist/entity/entity-history-record-spec.d.ts.map +1 -0
- package/dist/entity/entity-history-record-spec.js +77 -0
- package/dist/entity/entity-history-record-spec.js.map +1 -0
- package/dist/entity/entity-history-storage.d.ts +111 -0
- package/dist/entity/entity-history-storage.d.ts.map +1 -0
- package/dist/entity/entity-history-storage.js +40 -0
- package/dist/entity/entity-history-storage.js.map +1 -0
- package/dist/entity/entity-record.d.ts +31 -0
- package/dist/entity/entity-record.d.ts.map +1 -0
- package/dist/entity/entity-record.js +15 -0
- package/dist/entity/entity-record.js.map +1 -0
- package/dist/entity/history-conformance.d.ts +55 -0
- package/dist/entity/history-conformance.d.ts.map +1 -0
- package/dist/entity/history-conformance.js +165 -0
- package/dist/entity/history-conformance.js.map +1 -0
- package/dist/event/event-store.d.ts +141 -0
- package/dist/event/event-store.d.ts.map +1 -0
- package/dist/event/event-store.js +407 -0
- package/dist/event/event-store.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/delivery-cleanup.d.ts +99 -0
- package/dist/internal/delivery-cleanup.d.ts.map +1 -0
- package/dist/internal/delivery-cleanup.js +38 -0
- package/dist/internal/delivery-cleanup.js.map +1 -0
- package/dist/internal/entity-commit.d.ts +108 -0
- package/dist/internal/entity-commit.d.ts.map +1 -0
- package/dist/internal/entity-commit.js +32 -0
- package/dist/internal/entity-commit.js.map +1 -0
- package/dist/internal/entity-history.d.ts +12 -0
- package/dist/internal/entity-history.d.ts.map +1 -0
- package/dist/internal/entity-history.js +17 -0
- package/dist/internal/entity-history.js.map +1 -0
- package/dist/internal/event-store.d.ts +8 -0
- package/dist/internal/event-store.d.ts.map +1 -0
- package/dist/internal/event-store.js +21 -0
- package/dist/internal/event-store.js.map +1 -0
- package/dist/internal/query-values.d.ts +5 -0
- package/dist/internal/query-values.d.ts.map +1 -0
- package/dist/internal/query-values.js +18 -0
- package/dist/internal/query-values.js.map +1 -0
- package/dist/internal/tenancy.d.ts +89 -0
- package/dist/internal/tenancy.d.ts.map +1 -0
- package/dist/internal/tenancy.js +97 -0
- package/dist/internal/tenancy.js.map +1 -0
- package/dist/memory/canonical-utf8.d.ts +21 -0
- package/dist/memory/canonical-utf8.d.ts.map +1 -0
- package/dist/memory/canonical-utf8.js +65 -0
- package/dist/memory/canonical-utf8.js.map +1 -0
- package/dist/memory/in-memory-entity-commit.d.ts +35 -0
- package/dist/memory/in-memory-entity-commit.d.ts.map +1 -0
- package/dist/memory/in-memory-entity-commit.js +183 -0
- package/dist/memory/in-memory-entity-commit.js.map +1 -0
- package/dist/memory/in-memory-entity-history.d.ts +379 -0
- package/dist/memory/in-memory-entity-history.d.ts.map +1 -0
- package/dist/memory/in-memory-entity-history.js +756 -0
- package/dist/memory/in-memory-entity-history.js.map +1 -0
- package/dist/memory/in-memory-record-storage.d.ts +78 -0
- package/dist/memory/in-memory-record-storage.d.ts.map +1 -0
- package/dist/memory/in-memory-record-storage.js +127 -0
- package/dist/memory/in-memory-record-storage.js.map +1 -0
- package/dist/memory/in-memory-storage-backend.d.ts +38 -0
- package/dist/memory/in-memory-storage-backend.d.ts.map +1 -0
- package/dist/memory/in-memory-storage-backend.js +108 -0
- package/dist/memory/in-memory-storage-backend.js.map +1 -0
- package/dist/memory/in-memory-storage-factory.d.ts +58 -0
- package/dist/memory/in-memory-storage-factory.d.ts.map +1 -0
- package/dist/memory/in-memory-storage-factory.js +148 -0
- package/dist/memory/in-memory-storage-factory.js.map +1 -0
- package/dist/memory/memory-delivery-cleanup.d.ts +32 -0
- package/dist/memory/memory-delivery-cleanup.d.ts.map +1 -0
- package/dist/memory/memory-delivery-cleanup.js +61 -0
- package/dist/memory/memory-delivery-cleanup.js.map +1 -0
- package/dist/memory/tenant-records.d.ts +66 -0
- package/dist/memory/tenant-records.d.ts.map +1 -0
- package/dist/memory/tenant-records.js +573 -0
- package/dist/memory/tenant-records.js.map +1 -0
- package/dist/provider.d.ts +18 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +23 -0
- package/dist/provider.js.map +1 -0
- package/dist/query/query-execution.d.ts +50 -0
- package/dist/query/query-execution.d.ts.map +1 -0
- package/dist/query/query-execution.js +222 -0
- package/dist/query/query-execution.js.map +1 -0
- package/dist/query/query-policy.d.ts +115 -0
- package/dist/query/query-policy.d.ts.map +1 -0
- package/dist/query/query-policy.js +294 -0
- package/dist/query/query-policy.js.map +1 -0
- package/dist/record/column-mapping.d.ts +41 -0
- package/dist/record/column-mapping.d.ts.map +1 -0
- package/dist/record/column-mapping.js +36 -0
- package/dist/record/column-mapping.js.map +1 -0
- package/dist/record/column-type.d.ts +75 -0
- package/dist/record/column-type.d.ts.map +1 -0
- package/dist/record/column-type.js +69 -0
- package/dist/record/column-type.js.map +1 -0
- package/dist/record/record-column.d.ts +23 -0
- package/dist/record/record-column.d.ts.map +1 -0
- package/dist/record/record-column.js +41 -0
- package/dist/record/record-column.js.map +1 -0
- package/dist/record/record-mask.d.ts +11 -0
- package/dist/record/record-mask.d.ts.map +1 -0
- package/dist/record/record-mask.js +82 -0
- package/dist/record/record-mask.js.map +1 -0
- package/dist/record/record-query.d.ts +102 -0
- package/dist/record/record-query.d.ts.map +1 -0
- package/dist/record/record-query.js +44 -0
- package/dist/record/record-query.js.map +1 -0
- package/dist/record/record-spec.d.ts +101 -0
- package/dist/record/record-spec.d.ts.map +1 -0
- package/dist/record/record-spec.js +159 -0
- package/dist/record/record-spec.js.map +1 -0
- package/dist/record/record-storage.d.ts +202 -0
- package/dist/record/record-storage.d.ts.map +1 -0
- package/dist/record/record-storage.js +234 -0
- package/dist/record/record-storage.js.map +1 -0
- package/dist/record/storage-group.d.ts +17 -0
- package/dist/record/storage-group.d.ts.map +1 -0
- package/dist/record/storage-group.js +37 -0
- package/dist/record/storage-group.js.map +1 -0
- package/dist/storage/storage-factory.d.ts +44 -0
- package/dist/storage/storage-factory.d.ts.map +1 -0
- package/dist/storage/storage-factory.js +54 -0
- package/dist/storage/storage-factory.js.map +1 -0
- package/dist/storage/storage.d.ts +62 -0
- package/dist/storage/storage.d.ts.map +1 -0
- package/dist/storage/storage.js +15 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { NormalizedQueryPlan } from "./query-policy.js";
|
|
2
|
+
/**
|
|
3
|
+
* Finite default number of provider candidates a normalized plan may materialize.
|
|
4
|
+
*/
|
|
5
|
+
export declare const defaultQueryCandidateLimit = 10000;
|
|
6
|
+
/**
|
|
7
|
+
* One materialized storage row accepted by the shared normalized evaluator.
|
|
8
|
+
*/
|
|
9
|
+
export interface NormalizedQueryEntry<Id, Record> {
|
|
10
|
+
/**
|
|
11
|
+
* Identifies the stored row.
|
|
12
|
+
*/
|
|
13
|
+
readonly id: Id;
|
|
14
|
+
/**
|
|
15
|
+
* Carries the materialized stored record.
|
|
16
|
+
*/
|
|
17
|
+
readonly record: Record;
|
|
18
|
+
/**
|
|
19
|
+
* Maps normalized query columns to row values.
|
|
20
|
+
*/
|
|
21
|
+
readonly columns: ReadonlyMap<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Raised before evaluating a plan that exceeded its finite candidate budget.
|
|
25
|
+
*/
|
|
26
|
+
export declare class QueryCandidateLimitError extends Error {
|
|
27
|
+
readonly candidateLimit: number;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a candidate-limit error.
|
|
30
|
+
*
|
|
31
|
+
* @param candidateLimit Specifies the exceeded candidate budget.
|
|
32
|
+
*/
|
|
33
|
+
constructor(candidateLimit: number);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Shared complete in-process semantics for one validated normalized query plan.
|
|
37
|
+
*/
|
|
38
|
+
export declare const StorageQueryEvaluator: Readonly<{
|
|
39
|
+
evaluate<Id, Record>(entries: readonly NormalizedQueryEntry<Id, Record>[], plan: NormalizedQueryPlan<Id>): readonly NormalizedQueryEntry<Id, Record>[];
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Shared deterministic value semantics for provider-side query adapters.
|
|
43
|
+
*
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
export declare const StorageQueryValues: Readonly<{
|
|
47
|
+
equal(left: unknown, right: unknown): boolean;
|
|
48
|
+
compare(left: unknown, right: unknown): number;
|
|
49
|
+
}>;
|
|
50
|
+
//# sourceMappingURL=query-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-execution.d.ts","sourceRoot":"","sources":["../../src/query/query-execution.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,EAAE,EAAE,MAAM;IAG9C;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IAQrC,QAAQ,CAAC,cAAc,EAAE,MAAM;IAL3C;;;;OAIG;gBACkB,cAAc,EAAE,MAAM;CAI5C;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EACpD,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,GAC5B,SAAS,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;CAChD,CAaC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC;IACxC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9C,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CAChD,CAQC,CAAC"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
+
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
+
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
+
* the License.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Finite default number of provider candidates a normalized plan may materialize.
|
|
16
|
+
*/
|
|
17
|
+
export const defaultQueryCandidateLimit = 10_000;
|
|
18
|
+
/**
|
|
19
|
+
* Raised before evaluating a plan that exceeded its finite candidate budget.
|
|
20
|
+
*/
|
|
21
|
+
export class QueryCandidateLimitError extends Error {
|
|
22
|
+
candidateLimit;
|
|
23
|
+
// prettier-ignore
|
|
24
|
+
/**
|
|
25
|
+
* Creates a candidate-limit error.
|
|
26
|
+
*
|
|
27
|
+
* @param candidateLimit Specifies the exceeded candidate budget.
|
|
28
|
+
*/
|
|
29
|
+
constructor(candidateLimit) {
|
|
30
|
+
super(`Storage query exceeded the candidate limit of ${String(candidateLimit)}.`);
|
|
31
|
+
this.candidateLimit = candidateLimit;
|
|
32
|
+
this.name = "QueryCandidateLimitError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Shared complete in-process semantics for one validated normalized query plan.
|
|
37
|
+
*/
|
|
38
|
+
export const StorageQueryEvaluator = Object.freeze({
|
|
39
|
+
evaluate(entries, plan) {
|
|
40
|
+
const predicate = plan.predicate;
|
|
41
|
+
const matching = predicate === undefined
|
|
42
|
+
? [...entries]
|
|
43
|
+
: entries.filter((entry) => QueryPredicateMatcher.matches(entry, predicate));
|
|
44
|
+
const ordered = matching.sort((left, right) => QueryOrdering.compareEntries(left, right, plan));
|
|
45
|
+
return plan.limit === undefined ? ordered : ordered.slice(0, plan.limit);
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Shared deterministic value semantics for provider-side query adapters.
|
|
50
|
+
*
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
export const StorageQueryValues = Object.freeze({
|
|
54
|
+
equal(left, right) {
|
|
55
|
+
return QueryPredicateMatcher.equalValues(left, right);
|
|
56
|
+
},
|
|
57
|
+
compare(left, right) {
|
|
58
|
+
return QueryOrdering.compareStable(left, right);
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* Matches normalized predicates against materialized storage rows.
|
|
63
|
+
*/
|
|
64
|
+
const QueryPredicateMatcher = {
|
|
65
|
+
// prettier-ignore
|
|
66
|
+
/**
|
|
67
|
+
* Matches a row against one normalized predicate.
|
|
68
|
+
*/
|
|
69
|
+
matches(entry, predicate) {
|
|
70
|
+
switch (predicate.kind) {
|
|
71
|
+
case "ids":
|
|
72
|
+
return predicate.ids.some((id) => QueryPredicateMatcher.equalValues(id, entry.id));
|
|
73
|
+
case "comparison":
|
|
74
|
+
return QueryPredicateMatcher.comparePredicate(entry.columns.get(predicate.column), predicate.operator, predicate.value);
|
|
75
|
+
case "all":
|
|
76
|
+
return predicate.predicates.every((child) => QueryPredicateMatcher.matches(entry, child));
|
|
77
|
+
case "either":
|
|
78
|
+
return predicate.predicates.some((child) => QueryPredicateMatcher.matches(entry, child));
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Evaluates one normalized comparison predicate.
|
|
83
|
+
*/
|
|
84
|
+
comparePredicate(actual, operator, expected) {
|
|
85
|
+
if (operator === "equal")
|
|
86
|
+
return QueryPredicateMatcher.equalValues(actual, expected);
|
|
87
|
+
if (QueryOrdering.isMissing(actual) || QueryOrdering.isMissing(expected))
|
|
88
|
+
return false;
|
|
89
|
+
const result = QueryOrdering.compareOrdered(actual, expected);
|
|
90
|
+
if (operator === "greaterThan")
|
|
91
|
+
return result > 0;
|
|
92
|
+
if (operator === "lessThan")
|
|
93
|
+
return result < 0;
|
|
94
|
+
if (operator === "greaterOrEqual")
|
|
95
|
+
return result >= 0;
|
|
96
|
+
return result <= 0;
|
|
97
|
+
},
|
|
98
|
+
/**
|
|
99
|
+
* Compares values using normalized query equality semantics.
|
|
100
|
+
*/
|
|
101
|
+
equalValues(left, right) {
|
|
102
|
+
if (QueryOrdering.isMissing(left) || QueryOrdering.isMissing(right)) {
|
|
103
|
+
return QueryOrdering.isMissing(left) && QueryOrdering.isMissing(right);
|
|
104
|
+
}
|
|
105
|
+
return QueryOrdering.stableKey(left) === QueryOrdering.stableKey(right);
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Orders normalized query values and materialized rows deterministically.
|
|
110
|
+
*/
|
|
111
|
+
const QueryOrdering = {
|
|
112
|
+
// prettier-ignore
|
|
113
|
+
/**
|
|
114
|
+
* Compares two rows by requested ordering and stable ID tie-breaker.
|
|
115
|
+
*/
|
|
116
|
+
compareEntries(left, right, plan) {
|
|
117
|
+
for (const order of plan.order ?? []) {
|
|
118
|
+
const comparison = QueryOrdering.compareWithMissing(left.columns.get(order.column), right.columns.get(order.column));
|
|
119
|
+
if (comparison !== 0)
|
|
120
|
+
return order.direction === "desc" ? comparison * -1 : comparison;
|
|
121
|
+
}
|
|
122
|
+
return QueryOrdering.compareStable(left.id, right.id);
|
|
123
|
+
},
|
|
124
|
+
/**
|
|
125
|
+
* Compares values while placing missing values before present values.
|
|
126
|
+
*/
|
|
127
|
+
compareWithMissing(left, right) {
|
|
128
|
+
if (QueryOrdering.isMissing(left) || QueryOrdering.isMissing(right)) {
|
|
129
|
+
if (QueryOrdering.isMissing(left) && QueryOrdering.isMissing(right))
|
|
130
|
+
return 0;
|
|
131
|
+
return QueryOrdering.isMissing(left) ? -1 : 1;
|
|
132
|
+
}
|
|
133
|
+
return QueryOrdering.compareOrdered(left, right);
|
|
134
|
+
},
|
|
135
|
+
/**
|
|
136
|
+
* Compares values supported by normalized query ordering.
|
|
137
|
+
*/
|
|
138
|
+
compareOrdered(left, right) {
|
|
139
|
+
if (typeof left === "number" && typeof right === "number")
|
|
140
|
+
return QueryOrdering.compareNumber(left, right);
|
|
141
|
+
if (typeof left === "bigint" && typeof right === "bigint") {
|
|
142
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
143
|
+
}
|
|
144
|
+
if (typeof left === "string" && typeof right === "string")
|
|
145
|
+
return QueryOrdering.compareText(left, right);
|
|
146
|
+
if (QueryOrdering.isOrderedMessage(left) &&
|
|
147
|
+
QueryOrdering.isOrderedMessage(right) &&
|
|
148
|
+
left.$typeName === right.$typeName) {
|
|
149
|
+
if (left.$typeName === "google.protobuf.Timestamp") {
|
|
150
|
+
return QueryOrdering.comparePair(left.seconds, left.nanos, right.seconds, right.nanos);
|
|
151
|
+
}
|
|
152
|
+
return QueryOrdering.comparePair(left.number, left.timestamp, right.number, right.timestamp);
|
|
153
|
+
}
|
|
154
|
+
throw new TypeError("Normalized query ordering value has an unsupported type.");
|
|
155
|
+
},
|
|
156
|
+
/**
|
|
157
|
+
* Compares ordered-message major and minor components.
|
|
158
|
+
*/
|
|
159
|
+
comparePair(leftMajor, leftMinor, rightMajor, rightMinor) {
|
|
160
|
+
const major = QueryOrdering.compareStable(leftMajor, rightMajor);
|
|
161
|
+
return major === 0 ? QueryOrdering.compareStable(leftMinor, rightMinor) : major;
|
|
162
|
+
},
|
|
163
|
+
/**
|
|
164
|
+
* Compares values with a deterministic fallback for distinct shapes.
|
|
165
|
+
*/
|
|
166
|
+
compareStable(left, right) {
|
|
167
|
+
if (QueryOrdering.isMissing(left) || QueryOrdering.isMissing(right))
|
|
168
|
+
return QueryOrdering.compareWithMissing(left, right);
|
|
169
|
+
if (typeof left === typeof right && ["number", "bigint", "string"].includes(typeof left)) {
|
|
170
|
+
return QueryOrdering.compareOrdered(left, right);
|
|
171
|
+
}
|
|
172
|
+
return QueryOrdering.compareText(QueryOrdering.stableKey(left), QueryOrdering.stableKey(right));
|
|
173
|
+
},
|
|
174
|
+
/**
|
|
175
|
+
* Creates a deterministic value representation for equality and tie-breaking.
|
|
176
|
+
*/
|
|
177
|
+
stableKey(value) {
|
|
178
|
+
if (value instanceof Uint8Array)
|
|
179
|
+
return `bytes:${[...value].join(".")}`;
|
|
180
|
+
if (typeof value === "bigint")
|
|
181
|
+
return `bigint:${value.toString()}`;
|
|
182
|
+
if (typeof value !== "object" || value === null)
|
|
183
|
+
return `${typeof value}:${String(value)}`;
|
|
184
|
+
if (Array.isArray(value))
|
|
185
|
+
return `array:[${value.map((item) => QueryOrdering.stableKey(item)).join(",")}]`;
|
|
186
|
+
return `object:{${Object.keys(value)
|
|
187
|
+
.sort()
|
|
188
|
+
.map((key) => `${JSON.stringify(key)}:${QueryOrdering.stableKey(Reflect.get(value, key))}`)
|
|
189
|
+
.join(",")}}`;
|
|
190
|
+
},
|
|
191
|
+
/**
|
|
192
|
+
* Identifies ordered Protobuf timestamp and version values.
|
|
193
|
+
*/
|
|
194
|
+
isOrderedMessage(value) {
|
|
195
|
+
return (typeof value === "object" &&
|
|
196
|
+
value !== null &&
|
|
197
|
+
(Reflect.get(value, "$typeName") === "google.protobuf.Timestamp" ||
|
|
198
|
+
Reflect.get(value, "$typeName") === "spine.core.Version"));
|
|
199
|
+
},
|
|
200
|
+
/**
|
|
201
|
+
* Compares finite numeric values.
|
|
202
|
+
*/
|
|
203
|
+
compareNumber(left, right) {
|
|
204
|
+
if (!Number.isFinite(left) || !Number.isFinite(right)) {
|
|
205
|
+
throw new TypeError("Normalized query ordering numbers must be finite.");
|
|
206
|
+
}
|
|
207
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
208
|
+
},
|
|
209
|
+
/**
|
|
210
|
+
* Compares text values in code-unit order.
|
|
211
|
+
*/
|
|
212
|
+
compareText(left, right) {
|
|
213
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
214
|
+
},
|
|
215
|
+
/**
|
|
216
|
+
* Identifies absent normalized query values.
|
|
217
|
+
*/
|
|
218
|
+
isMissing(value) {
|
|
219
|
+
return value === undefined || value === null;
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
//# sourceMappingURL=query-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-execution.js","sourceRoot":"","sources":["../../src/query/query-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalized comparison operators understood by storage providers.
|
|
3
|
+
*/
|
|
4
|
+
export type NormalizedComparisonOperator = "equal" | "greaterThan" | "lessThan" | "greaterOrEqual" | "lessOrEqual";
|
|
5
|
+
/**
|
|
6
|
+
* Provider-independent normalized query predicate.
|
|
7
|
+
*/
|
|
8
|
+
export type NormalizedQueryPredicate<Id> = Readonly<{
|
|
9
|
+
/**
|
|
10
|
+
* Identifies the predicate as an explicit ID set.
|
|
11
|
+
*/
|
|
12
|
+
kind: "ids";
|
|
13
|
+
/**
|
|
14
|
+
* Lists the IDs selected by the predicate.
|
|
15
|
+
*/
|
|
16
|
+
ids: readonly Id[];
|
|
17
|
+
}> | Readonly<{
|
|
18
|
+
/**
|
|
19
|
+
* Identifies the predicate as a column comparison.
|
|
20
|
+
*/
|
|
21
|
+
kind: "comparison";
|
|
22
|
+
/**
|
|
23
|
+
* Names the compared record column.
|
|
24
|
+
*/
|
|
25
|
+
column: string;
|
|
26
|
+
/**
|
|
27
|
+
* Selects the comparison operator.
|
|
28
|
+
*/
|
|
29
|
+
operator: NormalizedComparisonOperator;
|
|
30
|
+
/**
|
|
31
|
+
* Provides the value compared against the column.
|
|
32
|
+
*/
|
|
33
|
+
value: unknown;
|
|
34
|
+
}> | Readonly<{
|
|
35
|
+
/**
|
|
36
|
+
* Identifies the predicate as an all-or-either composition.
|
|
37
|
+
*/
|
|
38
|
+
kind: "all" | "either";
|
|
39
|
+
/**
|
|
40
|
+
* Lists the component predicates.
|
|
41
|
+
*/
|
|
42
|
+
predicates: readonly NormalizedQueryPredicate<Id>[];
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Provider-independent normalized query ordering.
|
|
46
|
+
*/
|
|
47
|
+
export interface NormalizedQueryOrder {
|
|
48
|
+
/**
|
|
49
|
+
* Names the column used for ordering.
|
|
50
|
+
*/
|
|
51
|
+
readonly column: string;
|
|
52
|
+
/**
|
|
53
|
+
* Selects ascending or descending order.
|
|
54
|
+
*/
|
|
55
|
+
readonly direction: "asc" | "desc";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Provider-independent normalized field mask.
|
|
59
|
+
*/
|
|
60
|
+
export interface NormalizedQueryMask {
|
|
61
|
+
/**
|
|
62
|
+
* Lists the record paths retained by the mask.
|
|
63
|
+
*/
|
|
64
|
+
readonly paths: readonly string[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Canonical query plan accepted at the storage-provider boundary.
|
|
68
|
+
*/
|
|
69
|
+
export interface NormalizedQueryPlan<Id> {
|
|
70
|
+
/**
|
|
71
|
+
* Defines the optional predicate.
|
|
72
|
+
*/
|
|
73
|
+
readonly predicate?: NormalizedQueryPredicate<Id>;
|
|
74
|
+
/**
|
|
75
|
+
* Defines the optional ordering.
|
|
76
|
+
*/
|
|
77
|
+
readonly order?: readonly NormalizedQueryOrder[];
|
|
78
|
+
/**
|
|
79
|
+
* Defines the optional field mask.
|
|
80
|
+
*/
|
|
81
|
+
readonly mask?: NormalizedQueryMask;
|
|
82
|
+
/**
|
|
83
|
+
* Limits matching rows after ordering.
|
|
84
|
+
*/
|
|
85
|
+
readonly limit?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Maximum provider rows materialized before semantic evaluation. Values must
|
|
88
|
+
* be positive safe integers; the default and inclusive maximum are 10,000.
|
|
89
|
+
*/
|
|
90
|
+
readonly candidateLimit?: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Optional normalized query features a storage provider can execute.
|
|
94
|
+
*/
|
|
95
|
+
export type StorageQueryFeature = "either" | "nested" | "order" | "mask" | "limit";
|
|
96
|
+
/**
|
|
97
|
+
* Explicit query capabilities advertised by a storage provider.
|
|
98
|
+
*/
|
|
99
|
+
export interface StorageQueryCapabilities {
|
|
100
|
+
/**
|
|
101
|
+
* Lists supported comparison operators.
|
|
102
|
+
*/
|
|
103
|
+
readonly comparisons: readonly NormalizedComparisonOperator[];
|
|
104
|
+
/**
|
|
105
|
+
* Lists supported normalized query features.
|
|
106
|
+
*/
|
|
107
|
+
readonly features: readonly StorageQueryFeature[];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Shared fail-fast validation for normalized plans before provider execution.
|
|
111
|
+
*/
|
|
112
|
+
export declare const StorageQueryPolicy: Readonly<{
|
|
113
|
+
validate<Id>(plan: NormalizedQueryPlan<Id>, capabilities: StorageQueryCapabilities): void;
|
|
114
|
+
}>;
|
|
115
|
+
//# sourceMappingURL=query-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-policy.d.ts","sourceRoot":"","sources":["../../src/query/query-policy.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACtC,OAAO,GAAG,aAAa,GAAG,UAAU,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,wBAAwB,CAAC,EAAE,IACnC,QAAQ,CAAC;IAGP;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;CACpB,CAAC,GACF,QAAQ,CAAC;IAGP;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,EAAE,4BAA4B,CAAC;IAEvC;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC,GACF,QAAQ,CAAC;IAGP;;OAEG;IACH,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,SAAS,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;CACrD,CAAC,CAAC;AAEP;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAGnC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAGlC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,EAAE;IAGrC;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAEjD;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IAGvC;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAE9D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACnD;AAcD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC;IACxC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,wBAAwB,GAAG,IAAI,CAAC;CAC3F,CAwBC,CAAC"}
|