@spine-event-engine/core 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.
Files changed (37) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +190 -0
  3. package/REFERENCE.md +98 -0
  4. package/dist/codegen/index.d.ts +6 -0
  5. package/dist/codegen/index.d.ts.map +1 -0
  6. package/dist/codegen/index.js +18 -0
  7. package/dist/codegen/index.js.map +1 -0
  8. package/dist/entity/entity-column.d.ts +158 -0
  9. package/dist/entity/entity-column.d.ts.map +1 -0
  10. package/dist/entity/entity-column.js +303 -0
  11. package/dist/entity/entity-column.js.map +1 -0
  12. package/dist/index.d.ts +683 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +1185 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/internal/subscription-lifecycle.d.ts +6 -0
  17. package/dist/internal/subscription-lifecycle.d.ts.map +1 -0
  18. package/dist/internal/subscription-lifecycle.js +19 -0
  19. package/dist/internal/subscription-lifecycle.js.map +1 -0
  20. package/dist/query/entity-field-classification.d.ts +20 -0
  21. package/dist/query/entity-field-classification.d.ts.map +1 -0
  22. package/dist/query/entity-field-classification.js +62 -0
  23. package/dist/query/entity-field-classification.js.map +1 -0
  24. package/dist/query/entity-query.d.ts +278 -0
  25. package/dist/query/entity-query.d.ts.map +1 -0
  26. package/dist/query/entity-query.js +500 -0
  27. package/dist/query/entity-query.js.map +1 -0
  28. package/dist/spi/entity-query-plan.d.ts +7 -0
  29. package/dist/spi/entity-query-plan.d.ts.map +1 -0
  30. package/dist/spi/entity-query-plan.js +15 -0
  31. package/dist/spi/entity-query-plan.js.map +1 -0
  32. package/dist/spi/subscription-lifecycle.d.ts +5 -0
  33. package/dist/spi/subscription-lifecycle.d.ts.map +1 -0
  34. package/dist/spi/subscription-lifecycle.js +18 -0
  35. package/dist/spi/subscription-lifecycle.js.map +1 -0
  36. package/dist/tsconfig.tsbuildinfo +1 -0
  37. package/package.json +44 -0
@@ -0,0 +1,158 @@
1
+ import { type DescField, type Message, type MessageShape } from "@bufbuild/protobuf";
2
+ import type { GenMessage } from "@bufbuild/protobuf/codegenv2";
3
+ import { type Version } from "@spine-event-engine/proto";
4
+ /**
5
+ * Operators available for every Entity column.
6
+ */
7
+ export type EntityEqualityOperator = "equal";
8
+ /**
9
+ * Operators available for naturally ordered Entity column values.
10
+ */
11
+ export type EntityOrderingOperator = EntityEqualityOperator | "greaterThan" | "lessThan" | "greaterOrEqual" | "lessOrEqual";
12
+ /**
13
+ * Comparison family derived from a column's Protobuf field descriptor.
14
+ */
15
+ export type EntityComparison = "equality" | "ordering";
16
+ /**
17
+ * Runtime value category derived from a column's Protobuf field descriptor.
18
+ */
19
+ export type EntityColumnValueKind = "bigint" | "boolean" | "bytes" | "enum" | "message" | "number" | "string";
20
+ /**
21
+ * Represents one generated column declaration paired with its descriptor.
22
+ */
23
+ export interface EntityColumnDefinitionEntry<Comparison extends EntityComparison = EntityComparison> {
24
+ /**
25
+ * Identifies the generated Protobuf field declared as a column.
26
+ */
27
+ readonly field: DescField;
28
+ /**
29
+ * Identifies the comparison family supported by the field.
30
+ */
31
+ readonly comparison: Comparison;
32
+ }
33
+ type StateFieldName<Schema extends GenMessage<Message>> = Exclude<keyof MessageShape<Schema>, "$typeName" | "$unknown"> & string;
34
+ type CollectionFieldName<Schema extends GenMessage<Message>> = {
35
+ [Name in StateFieldName<Schema>]: NonNullable<MessageShape<Schema>[Name]> extends readonly unknown[] ? Name : NonNullable<MessageShape<Schema>[Name]> extends object ? string extends keyof NonNullable<MessageShape<Schema>[Name]> ? Name : never : never;
36
+ }[StateFieldName<Schema>];
37
+ type SupportedStateFieldName<Schema extends GenMessage<Message>> = Exclude<StateFieldName<Schema> & keyof Schema["field"], CollectionFieldName<Schema>>;
38
+ type EntityColumnEntries = Readonly<Record<string, EntityColumnDefinitionEntry>>;
39
+ type SupportedEntryConstraint<Schema extends GenMessage<Message>, Entries extends EntityColumnEntries> = Exclude<keyof Entries, SupportedStateFieldName<Schema>> extends never ? unknown : never;
40
+ /**
41
+ * Brands generated column definitions for nominal type safety.
42
+ */
43
+ declare const generatedDefinitionBrand: unique symbol;
44
+ /**
45
+ * Describes descriptor-backed column metadata emitted next to an Entity schema.
46
+ *
47
+ * The package root exports this type, but not its value constructor. Application
48
+ * code therefore consumes generated metadata instead of authoring string keys.
49
+ */
50
+ export interface EntityColumnDefinition<Schema extends GenMessage<Message>, Entries extends EntityColumnEntries> {
51
+ /**
52
+ * Brands metadata with its owning schema and generated entries.
53
+ */
54
+ readonly [generatedDefinitionBrand]: readonly [Schema, Entries];
55
+ /**
56
+ * Stores exact generated entries, validated again during registration.
57
+ * @internal
58
+ */
59
+ readonly entries: Entries;
60
+ }
61
+ /**
62
+ * Creates immutable Entity-column metadata emitted by the companion generator.
63
+ */
64
+ export declare const GeneratedEntityColumns: Readonly<{
65
+ /**
66
+ * Creates immutable metadata for one generated Entity schema.
67
+ *
68
+ * @param schema Generated Protobuf schema that owns the declared fields.
69
+ * @param entries Generated field descriptors and their comparison families.
70
+ * @returns Metadata accepted by {@link EntityColumn.register}.
71
+ */
72
+ define<Schema extends GenMessage<Message>, const Entries extends EntityColumnEntries>(schema: Schema, entries: Entries & SupportedEntryConstraint<NoInfer<Schema>, Entries>): EntityColumnDefinition<Schema, Entries>;
73
+ }>;
74
+ type OperatorsFor<Entry> = Entry extends EntityColumnDefinitionEntry<"ordering"> ? EntityOrderingOperator : EntityEqualityOperator;
75
+ /**
76
+ * Represents the typed column collection returned for one generated Entity definition.
77
+ */
78
+ export type EntityColumns<Schema extends GenMessage<Message>, Entries extends EntityColumnEntries> = Readonly<{
79
+ [Name in keyof Entries & StateFieldName<Schema>]: EntityColumn<Schema, Name, MessageShape<Schema>[Name], OperatorsFor<Entries[Name]>>;
80
+ } & {
81
+ /**
82
+ * Identifies the Entity version system column.
83
+ */
84
+ readonly version: EntityColumn<Schema, "version", Version>;
85
+ /**
86
+ * Identifies the Entity archived system column.
87
+ */
88
+ readonly archived: EntityColumn<Schema, "archived", boolean, EntityEqualityOperator>;
89
+ /**
90
+ * Identifies the Entity deleted system column.
91
+ */
92
+ readonly deleted: EntityColumn<Schema, "deleted", boolean, EntityEqualityOperator>;
93
+ }>;
94
+ /**
95
+ * Extracts the value type carried by an Entity column.
96
+ */
97
+ export type EntityColumnValue<Column extends EntityColumn> = Column extends EntityColumn<GenMessage<Message>, string, infer Value> ? Value : never;
98
+ /**
99
+ * Extracts the legal operator union carried by an Entity column.
100
+ */
101
+ export type EntityColumnOperator<Column extends EntityColumn> = Column extends EntityColumn<GenMessage<Message>, string, unknown, infer Operator> ? Operator : never;
102
+ /**
103
+ * An immutable, nominal, descriptor-backed Entity column.
104
+ *
105
+ * Instances can only be obtained by registering generated metadata for a
106
+ * Entity schema. This prevents consumers from constructing arbitrary
107
+ * string columns that have no corresponding Protobuf declaration.
108
+ */
109
+ export declare class EntityColumn<Schema extends GenMessage<Message> = GenMessage<Message>, Name extends string = string, Value = unknown, Operator extends EntityOrderingOperator = EntityOrderingOperator> {
110
+ private readonly entityColumnBrand;
111
+ /**
112
+ * Generated Protobuf schema that owns this column.
113
+ */
114
+ readonly schema: Schema;
115
+ /**
116
+ * Protobuf field name, or the canonical system-column name.
117
+ */
118
+ readonly name: string;
119
+ /**
120
+ * Protobuf-ES property name, or the canonical system-column name.
121
+ */
122
+ readonly localName: Name;
123
+ /**
124
+ * Whether the column came from the state descriptor or Entity storage metadata.
125
+ */
126
+ readonly source: "declared" | "system";
127
+ /**
128
+ * Exact declared field descriptor; system columns have no state field.
129
+ */
130
+ readonly descriptor: DescField | undefined;
131
+ /**
132
+ * Runtime value category derived from the descriptor.
133
+ */
134
+ readonly valueKind: EntityColumnValueKind;
135
+ /**
136
+ * Fully qualified message type for message-valued columns.
137
+ */
138
+ readonly messageType: string | undefined;
139
+ /**
140
+ * Supported comparison family.
141
+ */
142
+ readonly comparison: EntityComparison;
143
+ /**
144
+ * Exact operator set accepted for this column.
145
+ */
146
+ readonly operators: readonly Operator[];
147
+ private constructor();
148
+ /**
149
+ * Registers generated Entity-column metadata for a schema.
150
+ *
151
+ * @param schema Generated Entity schema that owns the metadata.
152
+ * @param definition Immutable generated field metadata.
153
+ * @returns Stable immutable columns for the Entity schema.
154
+ */
155
+ static register<Schema extends GenMessage<Message>, const Entries extends EntityColumnEntries>(schema: Schema, definition: EntityColumnDefinition<Schema, Entries>): EntityColumns<Schema, Entries>;
156
+ }
157
+ export {};
158
+ //# sourceMappingURL=entity-column.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-column.d.ts","sourceRoot":"","sources":["../../src/entity/entity-column.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,303 @@
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
+ import { getOption, hasOption, } from "@bufbuild/protobuf";
15
+ import { column, entity, EntityOption_Kind } from "@spine-event-engine/proto";
16
+ import { EntityFieldClassification } from "../query/entity-field-classification.js";
17
+ /**
18
+ * Creates immutable Entity-column metadata emitted by the companion generator.
19
+ */
20
+ export const GeneratedEntityColumns = Object.freeze({
21
+ define(schema, entries) {
22
+ const captured = EntityColumnFacts.captureDefinition(schema, entries);
23
+ const copiedEntries = Object.fromEntries(Object.entries(entries).map(([name, entry]) => {
24
+ EntityColumnFacts.deepFreeze(entry.field);
25
+ return [name, Object.freeze({ field: entry.field, comparison: entry.comparison })];
26
+ }));
27
+ const definition = Object.freeze({
28
+ entries: Object.freeze(copiedEntries),
29
+ });
30
+ capturedDefinitions.set(definition, captured);
31
+ return definition;
32
+ },
33
+ });
34
+ const equalityOperators = Object.freeze(["equal"]);
35
+ const orderingOperators = Object.freeze([
36
+ "equal",
37
+ "greaterThan",
38
+ "lessThan",
39
+ "greaterOrEqual",
40
+ "lessOrEqual",
41
+ ]);
42
+ const systemNames = new Set(["version", "archived", "deleted"]);
43
+ const cache = new WeakMap();
44
+ const entityColumnConstructionToken = Symbol("EntityColumnConstructionToken");
45
+ const capturedDefinitions = new WeakMap();
46
+ /**
47
+ * An immutable, nominal, descriptor-backed Entity column.
48
+ *
49
+ * Instances can only be obtained by registering generated metadata for a
50
+ * Entity schema. This prevents consumers from constructing arbitrary
51
+ * string columns that have no corresponding Protobuf declaration.
52
+ */
53
+ export class EntityColumn {
54
+ /**
55
+ * Generated Protobuf schema that owns this column.
56
+ */
57
+ schema;
58
+ /**
59
+ * Protobuf field name, or the canonical system-column name.
60
+ */
61
+ name;
62
+ /**
63
+ * Protobuf-ES property name, or the canonical system-column name.
64
+ */
65
+ localName;
66
+ /**
67
+ * Whether the column came from the state descriptor or Entity storage metadata.
68
+ */
69
+ source;
70
+ /**
71
+ * Exact declared field descriptor; system columns have no state field.
72
+ */
73
+ descriptor;
74
+ /**
75
+ * Runtime value category derived from the descriptor.
76
+ */
77
+ valueKind;
78
+ /**
79
+ * Fully qualified message type for message-valued columns.
80
+ */
81
+ messageType;
82
+ /**
83
+ * Supported comparison family.
84
+ */
85
+ comparison;
86
+ /**
87
+ * Exact operator set accepted for this column.
88
+ */
89
+ operators;
90
+ constructor(input, token) {
91
+ if (token !== entityColumnConstructionToken) {
92
+ throw new TypeError("Entity columns can only be constructed during registration.");
93
+ }
94
+ this.schema = input.schema;
95
+ this.name = input.name;
96
+ this.localName = input.localName;
97
+ this.source = input.source;
98
+ this.descriptor = input.descriptor;
99
+ this.valueKind = input.valueKind;
100
+ this.messageType = input.messageType;
101
+ this.comparison = input.comparison;
102
+ this.operators = input.operators;
103
+ Object.freeze(this);
104
+ }
105
+ /**
106
+ * Registers generated Entity-column metadata for a schema.
107
+ *
108
+ * @param schema Generated Entity schema that owns the metadata.
109
+ * @param definition Immutable generated field metadata.
110
+ * @returns Stable immutable columns for the Entity schema.
111
+ */
112
+ static register(schema, definition) {
113
+ const existing = cache.get(schema);
114
+ if (existing?.definitions.has(definition) === true) {
115
+ return existing.columns;
116
+ }
117
+ const captured = capturedDefinitions.get(definition);
118
+ EntityColumnFacts.validateSchema(schema, captured);
119
+ const declared = EntityColumnFacts.validateDefinition(schema, definition, captured);
120
+ if (existing !== undefined) {
121
+ existing.definitions.add(definition);
122
+ return existing.columns;
123
+ }
124
+ const result = {};
125
+ for (const [localName, field, fieldName, metadata] of declared) {
126
+ result[localName] = new EntityColumn({
127
+ schema,
128
+ name: fieldName,
129
+ localName,
130
+ source: "declared",
131
+ descriptor: field,
132
+ valueKind: metadata.valueKind,
133
+ messageType: metadata.messageType,
134
+ comparison: metadata.comparison,
135
+ operators: EntityColumnFacts.operatorsFor(metadata.comparison),
136
+ }, entityColumnConstructionToken);
137
+ }
138
+ result.version = new EntityColumn({
139
+ schema,
140
+ name: "version",
141
+ localName: "version",
142
+ source: "system",
143
+ valueKind: "message",
144
+ messageType: "spine.core.Version",
145
+ comparison: "ordering",
146
+ operators: orderingOperators,
147
+ }, entityColumnConstructionToken);
148
+ for (const name of ["archived", "deleted"]) {
149
+ result[name] = new EntityColumn({
150
+ schema,
151
+ name,
152
+ localName: name,
153
+ source: "system",
154
+ valueKind: "boolean",
155
+ comparison: "equality",
156
+ operators: equalityOperators,
157
+ }, entityColumnConstructionToken);
158
+ }
159
+ const columns = Object.freeze(result);
160
+ cache.set(schema, {
161
+ definitions: new WeakSet([definition]),
162
+ columns,
163
+ });
164
+ return columns;
165
+ }
166
+ }
167
+ /**
168
+ * Internal descriptor facts used while generated column metadata is registered.
169
+ */
170
+ const EntityColumnFacts = Object.freeze({
171
+ // prettier-ignore
172
+ /**
173
+ * Validates that a schema declares one supported Entity kind.
174
+ */
175
+ validateSchema(schema, captured) {
176
+ const entityKind = captured?.schema === schema
177
+ ? captured.entityKind
178
+ : hasOption(schema, entity)
179
+ ? getOption(schema, entity).kind
180
+ : undefined;
181
+ if (entityKind !== EntityOption_Kind.AGGREGATE &&
182
+ entityKind !== EntityOption_Kind.PROJECTION &&
183
+ entityKind !== EntityOption_Kind.PROCESS_MANAGER) {
184
+ throw new TypeError(`Entity column schema "${schema.typeName}" must declare Entity kind.`);
185
+ }
186
+ },
187
+ /**
188
+ * Validates and describes every declared generated column.
189
+ */
190
+ validateDefinition(schema, definition, captured) {
191
+ const facts = captured?.schema === schema
192
+ ? captured
193
+ : EntityColumnFacts.captureDefinition(schema, definition.entries);
194
+ const annotated = new Map(facts.annotated);
195
+ const result = [];
196
+ for (const [localName, entry] of Object.entries(definition.entries)) {
197
+ if (systemNames.has(localName)) {
198
+ throw new TypeError(`Entity column definition cannot replace system column "${localName}".`);
199
+ }
200
+ if (entry === undefined)
201
+ continue;
202
+ const fieldFacts = facts.entries.get(localName) ?? EntityColumnFacts.captureField(entry.field);
203
+ if (fieldFacts.parent !== schema || fieldFacts.localName !== localName) {
204
+ throw new TypeError(`Entity column definition key "${localName}" must reference field "${localName}".`);
205
+ }
206
+ if (!fieldFacts.markedColumn) {
207
+ throw new TypeError(`Entity field "${localName}" is not marked (column).`);
208
+ }
209
+ const metadata = EntityColumnFacts.describeField(fieldFacts);
210
+ if (entry.comparison !== metadata.comparison) {
211
+ throw new TypeError(`Entity column "${localName}" requires ${metadata.comparison} comparison metadata.`);
212
+ }
213
+ annotated.delete(localName);
214
+ result.push([localName, fieldFacts.field, fieldFacts.name, metadata]);
215
+ }
216
+ const missing = annotated.keys().next().value;
217
+ if (missing !== undefined) {
218
+ throw new TypeError(`Entity column definition is missing annotated field "${missing}".`);
219
+ }
220
+ return result;
221
+ },
222
+ /**
223
+ * Derives runtime metadata from one validated descriptor.
224
+ */
225
+ describeField(field) {
226
+ const metadata = field.classification;
227
+ if (!metadata.supported && metadata.reason === "singular") {
228
+ throw new TypeError(`Entity column "${field.localName}" must be singular; repeated and map fields are unsupported.`);
229
+ }
230
+ if (!metadata.supported) {
231
+ throw new TypeError(`Entity column "${field.localName}" cannot belong to a oneof.`);
232
+ }
233
+ return metadata;
234
+ },
235
+ /**
236
+ * Captures immutable facts from one generated definition.
237
+ */
238
+ captureDefinition(schema, entries) {
239
+ const annotated = new Map(schema.fields
240
+ .filter((field) => hasOption(field, column) && getOption(field, column))
241
+ .map((field) => [field.localName, field]));
242
+ const capturedEntries = new Map();
243
+ for (const [localName, entry] of Object.entries(entries)) {
244
+ capturedEntries.set(localName, EntityColumnFacts.captureField(entry.field));
245
+ }
246
+ return Object.freeze({
247
+ schema,
248
+ entityKind: hasOption(schema, entity) ? getOption(schema, entity).kind : undefined,
249
+ annotated,
250
+ entries: capturedEntries,
251
+ });
252
+ },
253
+ /**
254
+ * Captures immutable facts from one generated field descriptor.
255
+ */
256
+ captureField(field) {
257
+ return Object.freeze({
258
+ field,
259
+ parent: field.parent,
260
+ localName: field.localName,
261
+ name: field.name,
262
+ markedColumn: hasOption(field, column) && getOption(field, column),
263
+ classification: Object.freeze(EntityFieldClassification.classify(field)),
264
+ });
265
+ },
266
+ /**
267
+ * Deeply freezes a descriptor graph without freezing typed-array views.
268
+ */
269
+ deepFreeze(root) {
270
+ const pending = [root];
271
+ const visited = new WeakSet();
272
+ while (pending.length > 0) {
273
+ const current = pending.pop();
274
+ if (current === undefined || visited.has(current))
275
+ continue;
276
+ visited.add(current);
277
+ if (ArrayBuffer.isView(current))
278
+ continue;
279
+ for (const key of Reflect.ownKeys(current)) {
280
+ const property = Object.getOwnPropertyDescriptor(current, key);
281
+ if (property !== undefined &&
282
+ "value" in property &&
283
+ EntityColumnFacts.isObject(property.value)) {
284
+ pending.push(property.value);
285
+ }
286
+ }
287
+ Object.freeze(current);
288
+ }
289
+ },
290
+ /**
291
+ * Checks whether a value can participate in a descriptor graph.
292
+ */
293
+ isObject(value) {
294
+ return (typeof value === "object" && value !== null) || typeof value === "function";
295
+ },
296
+ /**
297
+ * Returns the supported operator set for a comparison family.
298
+ */
299
+ operatorsFor(comparison) {
300
+ return comparison === "ordering" ? orderingOperators : equalityOperators;
301
+ },
302
+ });
303
+ //# sourceMappingURL=entity-column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-column.js","sourceRoot":"","sources":["../../src/entity/entity-column.ts"],"names":[],"mappings":"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"}