@stratasync/core 0.2.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/README.md +83 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/model/base-model.d.ts +82 -0
- package/dist/model/base-model.d.ts.map +1 -0
- package/dist/model/base-model.js +219 -0
- package/dist/model/base-model.js.map +1 -0
- package/dist/model/cached-promise.d.ts +15 -0
- package/dist/model/cached-promise.d.ts.map +1 -0
- package/dist/model/cached-promise.js +50 -0
- package/dist/model/cached-promise.js.map +1 -0
- package/dist/model/collection.d.ts +33 -0
- package/dist/model/collection.d.ts.map +1 -0
- package/dist/model/collection.js +181 -0
- package/dist/model/collection.js.map +1 -0
- package/dist/model/hydration.d.ts +13 -0
- package/dist/model/hydration.d.ts.map +1 -0
- package/dist/model/hydration.js +2 -0
- package/dist/model/hydration.js.map +1 -0
- package/dist/model/observability.d.ts +23 -0
- package/dist/model/observability.d.ts.map +1 -0
- package/dist/model/observability.js +162 -0
- package/dist/model/observability.js.map +1 -0
- package/dist/reactivity/adapter.d.ts +145 -0
- package/dist/reactivity/adapter.d.ts.map +1 -0
- package/dist/reactivity/adapter.js +95 -0
- package/dist/reactivity/adapter.js.map +1 -0
- package/dist/schema/decorators.d.ts +8 -0
- package/dist/schema/decorators.d.ts.map +1 -0
- package/dist/schema/decorators.js +117 -0
- package/dist/schema/decorators.js.map +1 -0
- package/dist/schema/hash.d.ts +6 -0
- package/dist/schema/hash.d.ts.map +1 -0
- package/dist/schema/hash.js +76 -0
- package/dist/schema/hash.js.map +1 -0
- package/dist/schema/normalize.d.ts +5 -0
- package/dist/schema/normalize.d.ts.map +1 -0
- package/dist/schema/normalize.js +194 -0
- package/dist/schema/normalize.js.map +1 -0
- package/dist/schema/registry.d.ts +147 -0
- package/dist/schema/registry.d.ts.map +1 -0
- package/dist/schema/registry.js +304 -0
- package/dist/schema/registry.js.map +1 -0
- package/dist/schema/types.d.ts +215 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +2 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/store/types.d.ts +14 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +2 -0
- package/dist/store/types.js.map +1 -0
- package/dist/sync/delta-applier.d.ts +52 -0
- package/dist/sync/delta-applier.d.ts.map +1 -0
- package/dist/sync/delta-applier.js +110 -0
- package/dist/sync/delta-applier.js.map +1 -0
- package/dist/sync/rebase.d.ts +57 -0
- package/dist/sync/rebase.d.ts.map +1 -0
- package/dist/sync/rebase.js +155 -0
- package/dist/sync/rebase.js.map +1 -0
- package/dist/sync/sync-id.d.ts +17 -0
- package/dist/sync/sync-id.d.ts.map +1 -0
- package/dist/sync/sync-id.js +26 -0
- package/dist/sync/sync-id.js.map +1 -0
- package/dist/sync/types.d.ts +152 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +2 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/transaction/archive.d.ts +16 -0
- package/dist/transaction/archive.d.ts.map +1 -0
- package/dist/transaction/archive.js +23 -0
- package/dist/transaction/archive.js.map +1 -0
- package/dist/transaction/create.d.ts +31 -0
- package/dist/transaction/create.d.ts.map +1 -0
- package/dist/transaction/create.js +121 -0
- package/dist/transaction/create.js.map +1 -0
- package/dist/transaction/types.d.ts +86 -0
- package/dist/transaction/types.d.ts.map +1 -0
- package/dist/transaction/types.js +2 -0
- package/dist/transaction/types.js.map +1 -0
- package/dist/utils/assign.d.ts +9 -0
- package/dist/utils/assign.d.ts.map +1 -0
- package/dist/utils/assign.js +20 -0
- package/dist/utils/assign.js.map +1 -0
- package/dist/utils/idempotency.d.ts +16 -0
- package/dist/utils/idempotency.d.ts.map +1 -0
- package/dist/utils/idempotency.js +39 -0
- package/dist/utils/idempotency.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { assignOptionalFields } from "../utils/assign.js";
|
|
2
|
+
import { computeSchemaHash } from "./hash.js";
|
|
3
|
+
import { isRegistrySnapshot, schemaToSnapshot, snapshotToSchemaDefinition, } from "./normalize.js";
|
|
4
|
+
/**
|
|
5
|
+
* Runtime registry for model metadata (Done).
|
|
6
|
+
*
|
|
7
|
+
* Static methods operate on the global decorator-driven registry, populated at
|
|
8
|
+
* import time by @ClientModel/@Property decorators.
|
|
9
|
+
*
|
|
10
|
+
* Instance methods operate on a frozen schema snapshot, used by transport
|
|
11
|
+
* layers and server-side code.
|
|
12
|
+
*/
|
|
13
|
+
export class ModelRegistry {
|
|
14
|
+
static modelLookup = new Map();
|
|
15
|
+
static modelMetadata = new Map();
|
|
16
|
+
static modelPropertyLookup = new Map();
|
|
17
|
+
static modelReferencedPropertyLookup = new Map();
|
|
18
|
+
static __schemaHash = "";
|
|
19
|
+
static constructorLookup = new WeakMap();
|
|
20
|
+
static pendingProperties = new WeakMap();
|
|
21
|
+
snapshotData;
|
|
22
|
+
schemaHash;
|
|
23
|
+
models;
|
|
24
|
+
constructor(schema) {
|
|
25
|
+
const source = schema ?? ModelRegistry.snapshot();
|
|
26
|
+
const snapshot = isRegistrySnapshot(source)
|
|
27
|
+
? source
|
|
28
|
+
: schemaToSnapshot(source);
|
|
29
|
+
const definition = isRegistrySnapshot(source)
|
|
30
|
+
? snapshotToSchemaDefinition(source)
|
|
31
|
+
: source;
|
|
32
|
+
this.snapshotData = snapshot;
|
|
33
|
+
this.schemaHash = computeSchemaHash(snapshot);
|
|
34
|
+
this.models = new Map();
|
|
35
|
+
for (const [name, model] of Object.entries(definition.models)) {
|
|
36
|
+
const normalized = ModelRegistry.normalizeModelDefinition(name, model);
|
|
37
|
+
this.models.set(name, normalized);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Registers a model and finalizes any pending property metadata.
|
|
42
|
+
*/
|
|
43
|
+
static registerModel(modelName, ctor, metadata) {
|
|
44
|
+
ModelRegistry.modelLookup.set(modelName, ctor);
|
|
45
|
+
ModelRegistry.modelMetadata.set(modelName, metadata);
|
|
46
|
+
ModelRegistry.constructorLookup.set(ctor, modelName);
|
|
47
|
+
const pending = ModelRegistry.pendingProperties.get(ctor);
|
|
48
|
+
if (pending) {
|
|
49
|
+
ModelRegistry.registerPropertyMap(modelName, pending);
|
|
50
|
+
}
|
|
51
|
+
ModelRegistry.__schemaHash = computeSchemaHash(ModelRegistry.snapshot());
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Registers a property for a model constructor or model name.
|
|
55
|
+
*/
|
|
56
|
+
static registerProperty(target, propertyName, metadata) {
|
|
57
|
+
const ctor = ModelRegistry.resolveConstructor(target);
|
|
58
|
+
const modelName = ModelRegistry.constructorLookup.get(ctor);
|
|
59
|
+
if (modelName) {
|
|
60
|
+
ModelRegistry.registerPropertyMap(modelName, new Map([[propertyName, metadata]]));
|
|
61
|
+
ModelRegistry.__schemaHash = "";
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const pending = ModelRegistry.pendingProperties.get(ctor) ??
|
|
65
|
+
new Map();
|
|
66
|
+
pending.set(propertyName, metadata);
|
|
67
|
+
ModelRegistry.pendingProperties.set(ctor, pending);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Global: Returns the model metadata from the global decorator registry.
|
|
71
|
+
*/
|
|
72
|
+
static getModelMetadata(modelName) {
|
|
73
|
+
return ModelRegistry.modelMetadata.get(modelName);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Snapshot: Returns the model metadata from this schema snapshot.
|
|
77
|
+
*/
|
|
78
|
+
getModelMetadata(modelName) {
|
|
79
|
+
return this.snapshotData.models[modelName]?.meta;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns the model constructor.
|
|
83
|
+
*/
|
|
84
|
+
static getModelConstructor(modelName) {
|
|
85
|
+
return ModelRegistry.modelLookup.get(modelName);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Returns the model name for a constructor.
|
|
89
|
+
*/
|
|
90
|
+
static getModelName(ctor) {
|
|
91
|
+
return ModelRegistry.constructorLookup.get(ctor);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Global: Returns all model names from the global decorator registry.
|
|
95
|
+
*/
|
|
96
|
+
static getModelNames() {
|
|
97
|
+
return [...ModelRegistry.modelLookup.keys()];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Snapshot: Returns all model names from this schema snapshot.
|
|
101
|
+
*/
|
|
102
|
+
getModelNames() {
|
|
103
|
+
return Object.keys(this.snapshotData.models);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Global: Checks whether a model is registered in the global decorator registry.
|
|
107
|
+
*/
|
|
108
|
+
static hasModel(modelName) {
|
|
109
|
+
return ModelRegistry.modelMetadata.has(modelName);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Snapshot: Checks whether a model exists in this schema snapshot.
|
|
113
|
+
*/
|
|
114
|
+
hasModel(modelName) {
|
|
115
|
+
return modelName in this.snapshotData.models;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Global: Returns all model metadata entries from the global decorator registry.
|
|
119
|
+
*/
|
|
120
|
+
static getModelMetadataEntries() {
|
|
121
|
+
return [...ModelRegistry.modelMetadata.entries()];
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Snapshot: Returns all model metadata entries from this schema snapshot.
|
|
125
|
+
*/
|
|
126
|
+
getModelMetadataEntries() {
|
|
127
|
+
return Object.entries(this.snapshotData.models).map(([name, entry]) => [
|
|
128
|
+
name,
|
|
129
|
+
entry.meta,
|
|
130
|
+
]);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Global: Returns bootstrap model names (instant load strategy) from the global decorator registry.
|
|
134
|
+
*/
|
|
135
|
+
static getBootstrapModelNames() {
|
|
136
|
+
return ModelRegistry.getModelMetadataEntries()
|
|
137
|
+
.filter(([, meta]) => meta.loadStrategy === "instant")
|
|
138
|
+
.map(([name]) => name);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Snapshot: Returns bootstrap model names (instant load strategy) from this schema snapshot.
|
|
142
|
+
*/
|
|
143
|
+
getBootstrapModelNames() {
|
|
144
|
+
return this.getAllModels()
|
|
145
|
+
.filter((model) => model.loadStrategy === "instant")
|
|
146
|
+
.map((model) => model.name ?? "");
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Global: Returns partial model names (lazy-hydrated) from the global decorator registry.
|
|
150
|
+
*/
|
|
151
|
+
static getPartialModelNames() {
|
|
152
|
+
return ModelRegistry.getModelMetadataEntries()
|
|
153
|
+
.filter(([, meta]) => meta.loadStrategy === "partial")
|
|
154
|
+
.map(([name]) => name);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Snapshot: Returns partial model names (lazy-hydrated) from this schema snapshot.
|
|
158
|
+
*/
|
|
159
|
+
getPartialModelNames() {
|
|
160
|
+
return this.getPartialModels().map((model) => model.name ?? "");
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Global: Returns property metadata for a model from the global decorator registry.
|
|
164
|
+
*/
|
|
165
|
+
static getModelProperties(modelName) {
|
|
166
|
+
return ModelRegistry.modelPropertyLookup.get(modelName) ?? new Map();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Snapshot: Returns property metadata for a model from this schema snapshot.
|
|
170
|
+
*/
|
|
171
|
+
getModelProperties(modelName) {
|
|
172
|
+
const props = this.snapshotData.models[modelName]?.properties ?? {};
|
|
173
|
+
return new Map(Object.entries(props));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Returns referenced property metadata for a model.
|
|
177
|
+
*/
|
|
178
|
+
static getReferencedProperties(modelName) {
|
|
179
|
+
return (ModelRegistry.modelReferencedPropertyLookup.get(modelName) ?? new Map());
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Global: Returns property names for hashing and storage from the global decorator registry.
|
|
183
|
+
*/
|
|
184
|
+
static getPropertyNames(modelName) {
|
|
185
|
+
return [...ModelRegistry.getModelProperties(modelName).keys()].toSorted();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Snapshot: Returns property names for hashing and storage from this schema snapshot.
|
|
189
|
+
*/
|
|
190
|
+
getPropertyNames(modelName) {
|
|
191
|
+
return [...this.getModelProperties(modelName).keys()].toSorted();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Global: Returns the schema hash from the global decorator registry.
|
|
195
|
+
*/
|
|
196
|
+
static getSchemaHash() {
|
|
197
|
+
if (!ModelRegistry.__schemaHash) {
|
|
198
|
+
ModelRegistry.__schemaHash = computeSchemaHash(ModelRegistry.snapshot());
|
|
199
|
+
}
|
|
200
|
+
return ModelRegistry.__schemaHash;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Snapshot: Returns the schema hash from this schema snapshot.
|
|
204
|
+
*/
|
|
205
|
+
getSchemaHash() {
|
|
206
|
+
return this.schemaHash;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Global: Creates a snapshot of the global decorator registry.
|
|
210
|
+
*/
|
|
211
|
+
static snapshot() {
|
|
212
|
+
const models = {};
|
|
213
|
+
for (const [name, meta] of ModelRegistry.modelMetadata.entries()) {
|
|
214
|
+
const props = ModelRegistry.modelPropertyLookup.get(name) ?? new Map();
|
|
215
|
+
models[name] = {
|
|
216
|
+
meta,
|
|
217
|
+
properties: Object.fromEntries(props.entries()),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
return { models };
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Snapshot: Returns this frozen schema snapshot.
|
|
224
|
+
*/
|
|
225
|
+
snapshot() {
|
|
226
|
+
return this.snapshotData;
|
|
227
|
+
}
|
|
228
|
+
static registerPropertyMap(modelName, properties) {
|
|
229
|
+
const existing = ModelRegistry.modelPropertyLookup.get(modelName) ?? new Map();
|
|
230
|
+
for (const [propName, meta] of properties.entries()) {
|
|
231
|
+
existing.set(propName, meta);
|
|
232
|
+
if (meta.type === "referenceModel" ||
|
|
233
|
+
meta.type === "referenceCollection" ||
|
|
234
|
+
meta.type === "backReference" ||
|
|
235
|
+
meta.type === "referenceArray") {
|
|
236
|
+
const referenced = ModelRegistry.modelReferencedPropertyLookup.get(modelName) ??
|
|
237
|
+
new Map();
|
|
238
|
+
referenced.set(propName, meta);
|
|
239
|
+
ModelRegistry.modelReferencedPropertyLookup.set(modelName, referenced);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
ModelRegistry.modelPropertyLookup.set(modelName, existing);
|
|
243
|
+
}
|
|
244
|
+
static resolveConstructor(target) {
|
|
245
|
+
if (typeof target === "function") {
|
|
246
|
+
return target;
|
|
247
|
+
}
|
|
248
|
+
return target.constructor;
|
|
249
|
+
}
|
|
250
|
+
static normalizeModelDefinition(name, model) {
|
|
251
|
+
const primaryKey = model.primaryKey ?? "id";
|
|
252
|
+
const fields = model.fields ?? {};
|
|
253
|
+
const normalizedFields = fields[primaryKey]
|
|
254
|
+
? fields
|
|
255
|
+
: { ...fields, [primaryKey]: {} };
|
|
256
|
+
const normalized = {
|
|
257
|
+
fields: normalizedFields,
|
|
258
|
+
indexes: model.indexes ?? [],
|
|
259
|
+
loadStrategy: model.loadStrategy ?? "instant",
|
|
260
|
+
name: model.name ?? name,
|
|
261
|
+
primaryKey,
|
|
262
|
+
relations: model.relations ?? {},
|
|
263
|
+
};
|
|
264
|
+
assignOptionalFields(normalized, model, [
|
|
265
|
+
"partialLoadMode",
|
|
266
|
+
"usedForPartialIndexes",
|
|
267
|
+
"schemaVersion",
|
|
268
|
+
"tableName",
|
|
269
|
+
"groupKey",
|
|
270
|
+
]);
|
|
271
|
+
return normalized;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Returns the model definition.
|
|
275
|
+
*/
|
|
276
|
+
getModel(modelName) {
|
|
277
|
+
return this.models.get(modelName);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Returns all model definitions.
|
|
281
|
+
*/
|
|
282
|
+
getAllModels() {
|
|
283
|
+
return [...this.models.values()];
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Returns model definitions that should be loaded during bootstrap.
|
|
287
|
+
*/
|
|
288
|
+
getBootstrapModels() {
|
|
289
|
+
return this.getAllModels().filter((model) => model.loadStrategy === "instant");
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Returns model definitions that are partial (lazy-hydrated).
|
|
293
|
+
*/
|
|
294
|
+
getPartialModels() {
|
|
295
|
+
return this.getAllModels().filter((model) => model.loadStrategy === "partial");
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Returns the primary key for a model (defaults to id).
|
|
299
|
+
*/
|
|
300
|
+
getPrimaryKey(modelName) {
|
|
301
|
+
return this.models.get(modelName)?.primaryKey ?? "id";
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/schema/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load strategy determines how and when model data is fetched
|
|
3
|
+
* - instant: Loaded during bootstrap, always available
|
|
4
|
+
* - lazy: Loaded on first access, cached thereafter
|
|
5
|
+
* - partial: Loaded on demand, partially hydrated
|
|
6
|
+
* - explicitlyRequested: Never auto-loaded, must be explicitly requested
|
|
7
|
+
* - local: Never synced, only stored locally
|
|
8
|
+
*/
|
|
9
|
+
export type LoadStrategy = "instant" | "lazy" | "partial" | "explicitlyRequested" | "local";
|
|
10
|
+
/**
|
|
11
|
+
* Partial load mode determines hydration priority for partial models
|
|
12
|
+
*/
|
|
13
|
+
export type PartialLoadMode = "full" | "regular" | "lowPriority";
|
|
14
|
+
/**
|
|
15
|
+
* Property types used by ModelRegistry
|
|
16
|
+
*/
|
|
17
|
+
export type PropertyType = "property" | "ephemeralProperty" | "reference" | "referenceModel" | "referenceCollection" | "backReference" | "referenceArray";
|
|
18
|
+
/**
|
|
19
|
+
* Transaction action types
|
|
20
|
+
* I = Insert, U = Update, A = Archive, D = Delete, V = Unarchive
|
|
21
|
+
*/
|
|
22
|
+
export type TransactionAction = "I" | "U" | "A" | "D" | "V";
|
|
23
|
+
/**
|
|
24
|
+
* Serializer interface for property values
|
|
25
|
+
*/
|
|
26
|
+
export interface PropertySerializer<T = unknown> {
|
|
27
|
+
serialize(value: T): unknown;
|
|
28
|
+
deserialize(value: unknown): T;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Metadata describing a model property
|
|
32
|
+
*/
|
|
33
|
+
export interface PropertyMetadata {
|
|
34
|
+
/** Property type */
|
|
35
|
+
type: PropertyType;
|
|
36
|
+
/** Whether property is lazily hydrated */
|
|
37
|
+
lazy?: boolean;
|
|
38
|
+
/** Custom serializer */
|
|
39
|
+
serializer?: PropertySerializer<unknown>;
|
|
40
|
+
/** Whether property is indexed */
|
|
41
|
+
indexed?: boolean;
|
|
42
|
+
/** Whether property can be null */
|
|
43
|
+
nullable?: boolean;
|
|
44
|
+
/** Referenced model name (for references) */
|
|
45
|
+
referenceModel?: string;
|
|
46
|
+
/** Inverse property name (for references) */
|
|
47
|
+
inverseProperty?: string;
|
|
48
|
+
/** Foreign key property name (for references) */
|
|
49
|
+
foreignKey?: string;
|
|
50
|
+
/** Through model name (for many-to-many) */
|
|
51
|
+
through?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Metadata describing a model
|
|
55
|
+
*/
|
|
56
|
+
export interface ModelMetadata {
|
|
57
|
+
/** Registered model name */
|
|
58
|
+
name: string;
|
|
59
|
+
/** Load strategy */
|
|
60
|
+
loadStrategy: LoadStrategy;
|
|
61
|
+
/** Partial load mode (for partial models) */
|
|
62
|
+
partialLoadMode?: PartialLoadMode;
|
|
63
|
+
/** Whether used for partial index dependencies */
|
|
64
|
+
usedForPartialIndexes?: boolean;
|
|
65
|
+
/** Schema version for the model */
|
|
66
|
+
schemaVersion?: number;
|
|
67
|
+
/** Optional table name override */
|
|
68
|
+
tableName?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Options for @ClientModel decorator
|
|
72
|
+
*/
|
|
73
|
+
export interface ModelOptions {
|
|
74
|
+
loadStrategy?: LoadStrategy;
|
|
75
|
+
partialLoadMode?: PartialLoadMode;
|
|
76
|
+
usedForPartialIndexes?: boolean;
|
|
77
|
+
schemaVersion?: number;
|
|
78
|
+
tableName?: string;
|
|
79
|
+
groupKey?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Options for @Property decorator
|
|
83
|
+
*/
|
|
84
|
+
export interface PropertyOptions {
|
|
85
|
+
lazy?: boolean;
|
|
86
|
+
serializer?: PropertySerializer<unknown>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Options for @Reference decorator
|
|
90
|
+
*/
|
|
91
|
+
export interface ReferenceOptions extends PropertyOptions {
|
|
92
|
+
nullable?: boolean;
|
|
93
|
+
indexed?: boolean;
|
|
94
|
+
foreignKey?: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Options for @OneToMany / @ReferenceCollection decorator
|
|
98
|
+
*/
|
|
99
|
+
export interface ReferenceCollectionOptions extends PropertyOptions {
|
|
100
|
+
indexed?: boolean;
|
|
101
|
+
nullable?: boolean;
|
|
102
|
+
foreignKey?: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Options for @BackReference decorator
|
|
106
|
+
*/
|
|
107
|
+
export interface BackReferenceOptions extends PropertyOptions {
|
|
108
|
+
foreignKey?: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Options for @ReferenceArray decorator
|
|
112
|
+
*/
|
|
113
|
+
export interface ReferenceArrayOptions extends PropertyOptions {
|
|
114
|
+
through?: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Model constructor type
|
|
118
|
+
*/
|
|
119
|
+
export type ModelConstructor<T = unknown> = new (...args: unknown[]) => T;
|
|
120
|
+
/**
|
|
121
|
+
* Snapshot of registry state used for schema hashing
|
|
122
|
+
*/
|
|
123
|
+
export interface ModelRegistrySnapshot {
|
|
124
|
+
models: Record<string, {
|
|
125
|
+
meta: ModelMetadata;
|
|
126
|
+
properties: Record<string, PropertyMetadata>;
|
|
127
|
+
}>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Field definition for schema-based registries.
|
|
131
|
+
*/
|
|
132
|
+
export interface FieldDefinition {
|
|
133
|
+
/** Field type (informational; used by schema tooling) */
|
|
134
|
+
type?: string;
|
|
135
|
+
/** Whether field is indexed */
|
|
136
|
+
indexed?: boolean;
|
|
137
|
+
/** Whether field can be null */
|
|
138
|
+
nullable?: boolean;
|
|
139
|
+
/** Custom serializer */
|
|
140
|
+
serializer?: PropertySerializer<unknown>;
|
|
141
|
+
/** Whether field is lazily hydrated */
|
|
142
|
+
lazy?: boolean;
|
|
143
|
+
/** Whether field is ephemeral (not persisted) */
|
|
144
|
+
ephemeral?: boolean;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Relation kinds for schema-based registries.
|
|
148
|
+
*/
|
|
149
|
+
export type RelationKind = "belongsTo" | "hasMany" | "manyToMany" | "reference" | "referenceModel" | "referenceCollection" | "backReference" | "referenceArray";
|
|
150
|
+
/**
|
|
151
|
+
* Relation definition for schema-based registries.
|
|
152
|
+
*/
|
|
153
|
+
export interface RelationDefinition {
|
|
154
|
+
/** Relation kind */
|
|
155
|
+
kind?: RelationKind;
|
|
156
|
+
/** Relation kind (alias) */
|
|
157
|
+
type?: RelationKind;
|
|
158
|
+
/** Referenced model name */
|
|
159
|
+
model: string;
|
|
160
|
+
/** Foreign key field name */
|
|
161
|
+
foreignKey?: string;
|
|
162
|
+
/** Inverse property name */
|
|
163
|
+
inverseProperty?: string;
|
|
164
|
+
/** Join/through model name (for many-to-many) */
|
|
165
|
+
through?: string;
|
|
166
|
+
/** Whether relation is lazily hydrated */
|
|
167
|
+
lazy?: boolean;
|
|
168
|
+
/** Custom serializer */
|
|
169
|
+
serializer?: PropertySerializer<unknown>;
|
|
170
|
+
/** Whether relation is indexed */
|
|
171
|
+
indexed?: boolean;
|
|
172
|
+
/** Whether relation can be null */
|
|
173
|
+
nullable?: boolean;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Composite index definition for a model.
|
|
177
|
+
*/
|
|
178
|
+
export interface ModelIndexDefinition {
|
|
179
|
+
fields: string[];
|
|
180
|
+
unique?: boolean;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Model definition for schema-based registries.
|
|
184
|
+
*/
|
|
185
|
+
export interface ModelDefinition {
|
|
186
|
+
/** Model name */
|
|
187
|
+
name?: string;
|
|
188
|
+
/** Load strategy */
|
|
189
|
+
loadStrategy?: LoadStrategy;
|
|
190
|
+
/** Partial load mode */
|
|
191
|
+
partialLoadMode?: PartialLoadMode;
|
|
192
|
+
/** Whether used for partial index dependencies */
|
|
193
|
+
usedForPartialIndexes?: boolean;
|
|
194
|
+
/** Schema version for the model */
|
|
195
|
+
schemaVersion?: number;
|
|
196
|
+
/** Optional table name override */
|
|
197
|
+
tableName?: string;
|
|
198
|
+
/** Primary key field name (defaults to id) */
|
|
199
|
+
primaryKey?: string;
|
|
200
|
+
/** Sync-group key field name (optional) */
|
|
201
|
+
groupKey?: string;
|
|
202
|
+
/** Field definitions */
|
|
203
|
+
fields?: Record<string, FieldDefinition>;
|
|
204
|
+
/** Relation definitions */
|
|
205
|
+
relations?: Record<string, RelationDefinition>;
|
|
206
|
+
/** Composite indexes */
|
|
207
|
+
indexes?: ModelIndexDefinition[];
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Schema definition entry point.
|
|
211
|
+
*/
|
|
212
|
+
export interface SchemaDefinition {
|
|
213
|
+
models: Record<string, ModelDefinition>;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ArchiveTransactionOptions, UnarchiveTransactionOptions } from "../transaction/archive.js";
|
|
2
|
+
export interface SyncStore {
|
|
3
|
+
get(modelName: string, id: string): unknown | Promise<unknown>;
|
|
4
|
+
create?(modelName: string, data: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
5
|
+
update?(modelName: string, id: string, changes: Record<string, unknown>, options?: {
|
|
6
|
+
original?: Record<string, unknown>;
|
|
7
|
+
}): Promise<Record<string, unknown>>;
|
|
8
|
+
delete?(modelName: string, id: string, options?: {
|
|
9
|
+
original?: Record<string, unknown>;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
archive?(modelName: string, id: string, options?: ArchiveTransactionOptions): Promise<void>;
|
|
12
|
+
unarchive?(modelName: string, id: string, options?: UnarchiveTransactionOptions): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,CAAC,CACL,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,CACL,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC/C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,CACL,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC/C,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,CACN,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,SAAS,CAAC,CACR,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { SyncId } from "./sync-id.js";
|
|
2
|
+
import type { DeltaPacket } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Result of applying deltas to local state
|
|
5
|
+
*/
|
|
6
|
+
export interface ApplyResult {
|
|
7
|
+
/** Number of inserts applied */
|
|
8
|
+
inserts: number;
|
|
9
|
+
/** Number of updates applied */
|
|
10
|
+
updates: number;
|
|
11
|
+
/** Number of deletes applied */
|
|
12
|
+
deletes: number;
|
|
13
|
+
/** Number of archives applied */
|
|
14
|
+
archives: number;
|
|
15
|
+
/** Number of unarchives applied */
|
|
16
|
+
unarchives: number;
|
|
17
|
+
/** Highest sync ID applied */
|
|
18
|
+
lastSyncId: SyncId;
|
|
19
|
+
/** Actions that were skipped (e.g., own client transactions) */
|
|
20
|
+
skipped: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Interface for the data store that receives delta changes
|
|
24
|
+
*/
|
|
25
|
+
export interface DeltaTarget {
|
|
26
|
+
/** Insert or replace a model row */
|
|
27
|
+
put(modelName: string, id: string, data: Record<string, unknown>): Promise<void>;
|
|
28
|
+
/** Delete a model row */
|
|
29
|
+
delete(modelName: string, id: string): Promise<void>;
|
|
30
|
+
/** Update specific fields on a model row */
|
|
31
|
+
patch(modelName: string, id: string, changes: Record<string, unknown>): Promise<void>;
|
|
32
|
+
/** Get a model row */
|
|
33
|
+
get(modelName: string, id: string): Promise<Record<string, unknown> | null>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Options for applying deltas
|
|
37
|
+
*/
|
|
38
|
+
export interface ApplyOptions {
|
|
39
|
+
/** Client ID to skip own transactions */
|
|
40
|
+
clientId?: string;
|
|
41
|
+
/** Whether to merge updates or replace */
|
|
42
|
+
mergeUpdates?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Applies a delta packet to the local data store
|
|
46
|
+
*/
|
|
47
|
+
interface RegistryLike {
|
|
48
|
+
hasModel(modelName: string): boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare const applyDeltas: (packet: DeltaPacket, target: DeltaTarget, registry: RegistryLike, options?: ApplyOptions) => Promise<ApplyResult>;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=delta-applier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta-applier.d.ts","sourceRoot":"","sources":["../../src/sync/delta-applier.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,GAAG,CACD,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,yBAAyB;IACzB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,4CAA4C;IAC5C,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,sBAAsB;IACtB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAoHD,eAAO,MAAM,WAAW,GACtB,QAAQ,WAAW,EACnB,QAAQ,WAAW,EACnB,UAAU,YAAY,EACtB,UAAS,YAAiB,KACzB,OAAO,CAAC,WAAW,CA+BrB,CAAC"}
|