@prestizni-software/server-dem 0.10.3 → 0.11.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/AutoUpdateClientManagerClass.d.ts +11 -0
- package/AutoUpdateClientManagerClass.js +32 -0
- package/AutoUpdateClientManagerClass.js.map +1 -1
- package/AutoUpdateServerManagerClass.js +33 -4
- package/AutoUpdateServerManagerClass.js.map +1 -1
- package/AutoUpdatedClientObjectClass.d.ts +34 -1
- package/AutoUpdatedClientObjectClass.js +505 -13
- package/AutoUpdatedClientObjectClass.js.map +1 -1
- package/AutoUpdatedServerObjectClass.d.ts +19 -1
- package/AutoUpdatedServerObjectClass.js +147 -0
- package/AutoUpdatedServerObjectClass.js.map +1 -1
- package/CommonTypes.d.ts +172 -0
- package/CommonTypes.js.map +1 -1
- package/DEMErrors.d.ts +3 -0
- package/DEMErrors.js +7 -0
- package/DEMErrors.js.map +1 -1
- package/README.md +9 -0
- package/jest.config.js +4 -6
- package/jest.config.js.map +1 -1
- package/package.json +1 -1
- package/version.d.ts +4 -4
- package/version.js +3 -3
package/CommonTypes.d.ts
CHANGED
|
@@ -117,11 +117,17 @@ export type ServerResponse<T> = {
|
|
|
117
117
|
code?: DEMErrorCode;
|
|
118
118
|
success: true;
|
|
119
119
|
related?: Record<string, any[]>;
|
|
120
|
+
updatedArray?: unknown[];
|
|
121
|
+
newRevision?: number;
|
|
122
|
+
newHash?: string;
|
|
120
123
|
} | {
|
|
121
124
|
message: string;
|
|
122
125
|
code?: DEMErrorCode;
|
|
123
126
|
details?: unknown;
|
|
124
127
|
success: false;
|
|
128
|
+
updatedArray?: unknown[];
|
|
129
|
+
newRevision?: number;
|
|
130
|
+
newHash?: string;
|
|
125
131
|
};
|
|
126
132
|
/**
|
|
127
133
|
* Lightweight entity descriptor providing human-readable identification before hydration.
|
|
@@ -296,6 +302,172 @@ export declare class DEMGlobalCache {
|
|
|
296
302
|
}
|
|
297
303
|
export type GlobalCache = DEMGlobalCache;
|
|
298
304
|
export declare const globalCache: DEMGlobalCache;
|
|
305
|
+
/**
|
|
306
|
+
* Permitted operation types for DEMArray asynchronous mutations.
|
|
307
|
+
*/
|
|
308
|
+
export type DEMArrayMutationOp = "push" | "pop" | "shift" | "unshift" | "splice" | "set" | "reverse" | "sort" | "clear";
|
|
309
|
+
/**
|
|
310
|
+
* Socket payload structure for an array mutation request.
|
|
311
|
+
*/
|
|
312
|
+
export type DEMArrayMutationParams = Omit<DEMArrayMutationRequest, "key">;
|
|
313
|
+
export interface DEMArrayMutationRequest {
|
|
314
|
+
/**
|
|
315
|
+
* The specific mutation operator to execute.
|
|
316
|
+
*/
|
|
317
|
+
op: DEMArrayMutationOp;
|
|
318
|
+
/**
|
|
319
|
+
* Target property key holding the array.
|
|
320
|
+
*/
|
|
321
|
+
key: string;
|
|
322
|
+
/**
|
|
323
|
+
* Optional items to insert or append (primitive values, entity instances, or string IDs).
|
|
324
|
+
*/
|
|
325
|
+
items?: unknown[];
|
|
326
|
+
/**
|
|
327
|
+
* Optional anchor entity identifier for positional mutations (splice/set).
|
|
328
|
+
*/
|
|
329
|
+
targetId?: string;
|
|
330
|
+
/**
|
|
331
|
+
* Optional list of anchor identifiers for multi-item splices.
|
|
332
|
+
*/
|
|
333
|
+
targetIds?: string[];
|
|
334
|
+
/**
|
|
335
|
+
* Optional zero-based target offset.
|
|
336
|
+
*/
|
|
337
|
+
index?: number;
|
|
338
|
+
/**
|
|
339
|
+
* Optional count of elements to delete.
|
|
340
|
+
*/
|
|
341
|
+
deleteCount?: number;
|
|
342
|
+
/**
|
|
343
|
+
* Monotonic revision counter of the client state prior to mutation.
|
|
344
|
+
*/
|
|
345
|
+
baseRevision?: number;
|
|
346
|
+
/**
|
|
347
|
+
* Content hash of the array prior to mutation for concurrency verification.
|
|
348
|
+
*/
|
|
349
|
+
baseHash?: string;
|
|
350
|
+
/**
|
|
351
|
+
* Synchronized client timestamp when mutation was initiated.
|
|
352
|
+
*/
|
|
353
|
+
clientTimestamp?: number;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Server acknowledgment payload returned for an array mutation request.
|
|
357
|
+
*/
|
|
358
|
+
export interface DEMArrayMutationResponse {
|
|
359
|
+
/**
|
|
360
|
+
* Whether the mutation succeeded and was persisted.
|
|
361
|
+
*/
|
|
362
|
+
success: boolean;
|
|
363
|
+
/**
|
|
364
|
+
* Optional error code on failure.
|
|
365
|
+
*/
|
|
366
|
+
code?: DEMErrorCode;
|
|
367
|
+
/**
|
|
368
|
+
* Optional descriptive message.
|
|
369
|
+
*/
|
|
370
|
+
message?: string;
|
|
371
|
+
/**
|
|
372
|
+
* The authoritative updated array state resolved and persisted by the server.
|
|
373
|
+
*/
|
|
374
|
+
updatedArray?: unknown[];
|
|
375
|
+
/**
|
|
376
|
+
* Incremented monotonic revision counter after applying the mutation.
|
|
377
|
+
*/
|
|
378
|
+
newRevision?: number;
|
|
379
|
+
/**
|
|
380
|
+
* Content hash of the updated array.
|
|
381
|
+
*/
|
|
382
|
+
newHash?: string;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Reactive array wrapper for DEM entity array properties.
|
|
386
|
+
* Exposes synchronous ReadonlyArray queries and asynchronous mutation Promises.
|
|
387
|
+
*/
|
|
388
|
+
export interface DEMArray<T> extends ReadonlyArray<T> {
|
|
389
|
+
/**
|
|
390
|
+
* Appends elements asynchronously and awaits server persistence.
|
|
391
|
+
*
|
|
392
|
+
* @param items - Elements to append (entity instances, string IDs, or primitive values).
|
|
393
|
+
* @returns Promise resolving to the new length of the array.
|
|
394
|
+
* @throws {DEMError} Throws on network failure, validation rejection, or database error.
|
|
395
|
+
*/
|
|
396
|
+
push(...items: (T | string | ObjectId)[]): Promise<number>;
|
|
397
|
+
/**
|
|
398
|
+
* Removes the last element asynchronously and awaits server persistence.
|
|
399
|
+
*
|
|
400
|
+
* @returns Promise resolving to the removed element, or undefined if empty.
|
|
401
|
+
* @throws {DEMError} Throws on server rejection.
|
|
402
|
+
*/
|
|
403
|
+
pop(): Promise<T | undefined>;
|
|
404
|
+
/**
|
|
405
|
+
* Removes the first element asynchronously and awaits server persistence.
|
|
406
|
+
*
|
|
407
|
+
* @returns Promise resolving to the removed element, or undefined if empty.
|
|
408
|
+
* @throws {DEMError} Throws on server rejection.
|
|
409
|
+
*/
|
|
410
|
+
shift(): Promise<T | undefined>;
|
|
411
|
+
/**
|
|
412
|
+
* Inserts elements at the start asynchronously and awaits server persistence.
|
|
413
|
+
*
|
|
414
|
+
* @param items - Elements to prepend.
|
|
415
|
+
* @returns Promise resolving to the new length of the array.
|
|
416
|
+
* @throws {DEMError} Throws on server rejection.
|
|
417
|
+
*/
|
|
418
|
+
unshift(...items: (T | string | ObjectId)[]): Promise<number>;
|
|
419
|
+
/**
|
|
420
|
+
* Removes and/or inserts elements at an index asynchronously and awaits server persistence.
|
|
421
|
+
* Anchors mutations to target element identifiers to eliminate positional drift under concurrency.
|
|
422
|
+
*
|
|
423
|
+
* @param start - Zero-based index at which to start changing the array.
|
|
424
|
+
* @param deleteCount - Number of elements to remove.
|
|
425
|
+
* @param items - Elements to insert.
|
|
426
|
+
* @returns Promise resolving to an array containing the removed elements.
|
|
427
|
+
* @throws {DEMError} Throws on server rejection.
|
|
428
|
+
*/
|
|
429
|
+
splice(start: number, deleteCount?: number, ...items: (T | string | ObjectId)[]): Promise<T[]>;
|
|
430
|
+
/**
|
|
431
|
+
* Replaces an element at a specific index asynchronously and awaits server persistence.
|
|
432
|
+
*
|
|
433
|
+
* @param index - Target index to replace.
|
|
434
|
+
* @param item - New value or entity to assign.
|
|
435
|
+
* @returns Promise resolving to the assigned item.
|
|
436
|
+
* @throws {DEMError} Throws on server rejection.
|
|
437
|
+
*/
|
|
438
|
+
set(index: number, item: T | string | ObjectId): Promise<T>;
|
|
439
|
+
/**
|
|
440
|
+
* Reverses array elements in place asynchronously and awaits server persistence.
|
|
441
|
+
*
|
|
442
|
+
* @returns Promise resolving to this DEMArray.
|
|
443
|
+
* @throws {DEMError} Throws on server rejection.
|
|
444
|
+
*/
|
|
445
|
+
reverse(): Promise<this>;
|
|
446
|
+
/**
|
|
447
|
+
* Sorts array elements in place asynchronously and awaits server persistence.
|
|
448
|
+
*
|
|
449
|
+
* @param compareFn - Optional comparison function determining order.
|
|
450
|
+
* @returns Promise resolving to this DEMArray.
|
|
451
|
+
* @throws {DEMError} Throws on server rejection.
|
|
452
|
+
*/
|
|
453
|
+
sort(compareFn?: (a: T, b: T) => number): Promise<this>;
|
|
454
|
+
/**
|
|
455
|
+
* Clears all elements from the array asynchronously and awaits server persistence.
|
|
456
|
+
*
|
|
457
|
+
* @returns Promise resolving once the array is cleared.
|
|
458
|
+
* @throws {DEMError} Throws on server rejection.
|
|
459
|
+
*/
|
|
460
|
+
clear(): Promise<void>;
|
|
461
|
+
/**
|
|
462
|
+
* Hydrates all referenced entities in the array up to designated reference depth.
|
|
463
|
+
*
|
|
464
|
+
* @param options - Hydration options containing graph depth.
|
|
465
|
+
* @returns Promise resolving to this DEMArray once all entities are hydrated.
|
|
466
|
+
*/
|
|
467
|
+
ensureLoaded(options?: {
|
|
468
|
+
depth?: number;
|
|
469
|
+
}): Promise<this>;
|
|
470
|
+
}
|
|
299
471
|
export * from "./sync/types.js";
|
|
300
472
|
export * from "./sync/storage/IClientStorageAdapter.js";
|
|
301
473
|
export * from "./sync/storage/MemoryStorageAdapter.js";
|
package/CommonTypes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommonTypes.js","sourceRoot":"","sources":["../CommonTypes.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"CommonTypes.js","sourceRoot":"","sources":["../CommonTypes.ts"],"names":[],"mappings":"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"}
|
package/DEMErrors.d.ts
CHANGED
|
@@ -37,6 +37,9 @@ export declare enum DEMErrorCode {
|
|
|
37
37
|
STORAGE_NOT_SUPPORTED = "DEM_ERR_STORAGE_NOT_SUPPORTED",
|
|
38
38
|
STORAGE_OPERATION_FAILED = "DEM_ERR_STORAGE_OPERATION_FAILED",
|
|
39
39
|
DELTA_SYNC_FAILED = "DEM_ERR_DELTA_SYNC_FAILED",
|
|
40
|
+
ARRAY_MUTATION_FAILED = "DEM_ERR_ARRAY_MUTATION_FAILED",
|
|
41
|
+
CONCURRENT_MODIFICATION = "DEM_ERR_CONCURRENT_MODIFICATION",
|
|
42
|
+
INDEX_OUT_OF_BOUNDS = "DEM_ERR_INDEX_OUT_OF_BOUNDS",
|
|
40
43
|
INTERNAL_ERROR = "DEM_ERR_INTERNAL_ERROR"
|
|
41
44
|
}
|
|
42
45
|
/**
|
package/DEMErrors.js
CHANGED
|
@@ -45,6 +45,10 @@ export var DEMErrorCode;
|
|
|
45
45
|
DEMErrorCode["STORAGE_NOT_SUPPORTED"] = "DEM_ERR_STORAGE_NOT_SUPPORTED";
|
|
46
46
|
DEMErrorCode["STORAGE_OPERATION_FAILED"] = "DEM_ERR_STORAGE_OPERATION_FAILED";
|
|
47
47
|
DEMErrorCode["DELTA_SYNC_FAILED"] = "DEM_ERR_DELTA_SYNC_FAILED";
|
|
48
|
+
// Array and mutation errors
|
|
49
|
+
DEMErrorCode["ARRAY_MUTATION_FAILED"] = "DEM_ERR_ARRAY_MUTATION_FAILED";
|
|
50
|
+
DEMErrorCode["CONCURRENT_MODIFICATION"] = "DEM_ERR_CONCURRENT_MODIFICATION";
|
|
51
|
+
DEMErrorCode["INDEX_OUT_OF_BOUNDS"] = "DEM_ERR_INDEX_OUT_OF_BOUNDS";
|
|
48
52
|
// General internal error
|
|
49
53
|
DEMErrorCode["INTERNAL_ERROR"] = "DEM_ERR_INTERNAL_ERROR";
|
|
50
54
|
})(DEMErrorCode || (DEMErrorCode = {}));
|
|
@@ -87,6 +91,9 @@ export const DEM_ERROR_DESCRIPTIONS = {
|
|
|
87
91
|
[DEMErrorCode.STORAGE_NOT_SUPPORTED]: "Storage adapter is not supported in this runtime environment.",
|
|
88
92
|
[DEMErrorCode.STORAGE_OPERATION_FAILED]: "Storage read or write operation failed.",
|
|
89
93
|
[DEMErrorCode.DELTA_SYNC_FAILED]: "Delta synchronization reconciliation failed.",
|
|
94
|
+
[DEMErrorCode.ARRAY_MUTATION_FAILED]: "Array mutation operation failed.",
|
|
95
|
+
[DEMErrorCode.CONCURRENT_MODIFICATION]: "Concurrent modification conflict detected.",
|
|
96
|
+
[DEMErrorCode.INDEX_OUT_OF_BOUNDS]: "Specified array index is out of bounds.",
|
|
90
97
|
[DEMErrorCode.INTERNAL_ERROR]: "Internal DEM library error occurred.",
|
|
91
98
|
};
|
|
92
99
|
/**
|
package/DEMErrors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DEMErrors.js","sourceRoot":"","sources":["../DEMErrors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"DEMErrors.js","sourceRoot":"","sources":["../DEMErrors.ts"],"names":[],"mappings":"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"}
|
package/README.md
CHANGED
|
@@ -45,6 +45,14 @@ DEM isolates responsibilities into two distinct packages:
|
|
|
45
45
|
- Resolves entity relations through `@populatedRef` decorators.
|
|
46
46
|
- Supports self-contained snapshot entities using raw `@classProp` attributes.
|
|
47
47
|
|
|
48
|
+
### 5. Reactive DEMArray Wrappers (v0.11.0+)
|
|
49
|
+
- Wraps primitive and relational arrays in `DEMArray<T>`.
|
|
50
|
+
- Provides synchronous queries (`length`, `map`, `filter`, `find`, `includes`, `slice`).
|
|
51
|
+
- Intercepts mutations (`push`, `pop`, `shift`, `unshift`, `splice`, `set`, `reverse`, `sort`, `clear`) returning Promises.
|
|
52
|
+
- Executes mutations pessimistically after server confirmation.
|
|
53
|
+
- Uses element-anchored operations (`targetId`) to eliminate index-drift under concurrent writes.
|
|
54
|
+
- Synchronizes client and server clocks using Cristian's algorithm during handshake.
|
|
55
|
+
|
|
48
56
|
---
|
|
49
57
|
|
|
50
58
|
## Packages
|
|
@@ -153,6 +161,7 @@ await task.setValue("completed", true);
|
|
|
153
161
|
Detailed architectural guides exist in the `docs/` directory:
|
|
154
162
|
- [Object Loading Process](docs/LOADING_PROCESS.md)
|
|
155
163
|
- [ADR 0001: Smart Lazy Loading & Static Snapshots](docs/adr/0001-smart-lazy-loading-and-static-snapshots.md)
|
|
164
|
+
- [ADR 0002: DEMArray Reactive Mutation Architecture](docs/adr/0002-demarray-reactive-mutation-architecture.md)
|
|
156
165
|
- [Delta Synchronization Architecture](docs/DELTA_SYNC_ARCHITECTURE.md)
|
|
157
166
|
- [Delta Synchronization User Guide](docs/DELTA_SYNC.md)
|
|
158
167
|
- [Database States and Error Handling](docs/ERRORS_AND_DB_STATE.md)
|
package/jest.config.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
const config = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
useESM: true
|
|
5
|
-
}
|
|
2
|
+
transform: {
|
|
3
|
+
'\\.[jt]s?$': ['ts-jest', { useESM: true, tsconfig: { allowJs: true } }],
|
|
6
4
|
},
|
|
7
|
-
transform: { '\\.[jt]s?$': ['ts-jest', { tsconfig: { allowJs: true } }] },
|
|
8
5
|
preset: 'ts-jest/presets/default-esm',
|
|
9
6
|
roots: ["tests/"],
|
|
10
7
|
modulePathIgnorePatterns: [
|
|
11
8
|
"node_modules/"
|
|
12
|
-
],
|
|
9
|
+
],
|
|
10
|
+
moduleNameMapper: {
|
|
13
11
|
'^(\\.{1,2}/.*)\\.[jt]s$': '$1',
|
|
14
12
|
},
|
|
15
13
|
};
|
package/jest.config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../jest.config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAyB;IACjC,
|
|
1
|
+
{"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../jest.config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAyB;IACjC,SAAS,EAAE;QACP,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;KAC3E;IACD,MAAM,EAAE,6BAA6B;IACrC,KAAK,EAAE,CAAC,QAAQ,CAAC;IACjB,wBAAwB,EAAE;QACtB,eAAe;KAClB;IACD,gBAAgB,EAAE;QACd,yBAAyB,EAAE,IAAI;KAClC;CACJ,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/package.json
CHANGED
package/version.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Current version of @prestizni-software/client-dem.
|
|
3
3
|
*/
|
|
4
|
-
export declare const DEM_CLIENT_VERSION = "0.
|
|
4
|
+
export declare const DEM_CLIENT_VERSION = "0.11.0";
|
|
5
5
|
/**
|
|
6
6
|
* Current version of @prestizni-software/server-dem.
|
|
7
7
|
*/
|
|
8
|
-
export declare const DEM_SERVER_VERSION = "0.
|
|
8
|
+
export declare const DEM_SERVER_VERSION = "0.11.0";
|
|
9
9
|
/**
|
|
10
10
|
* Lowest client version that the server is compatible with.
|
|
11
11
|
* Server patches do not increment this value unless breaking compatibility.
|
|
12
12
|
*/
|
|
13
|
-
export declare const DEM_MIN_COMPATIBLE_CLIENT_VERSION = "0.
|
|
13
|
+
export declare const DEM_MIN_COMPATIBLE_CLIENT_VERSION = "0.11.0";
|
|
14
14
|
/**
|
|
15
15
|
* Global DEM version constant indicating minimum compatible client version.
|
|
16
16
|
*/
|
|
17
|
-
export declare const DEM_VERSION = "0.
|
|
17
|
+
export declare const DEM_VERSION = "0.11.0";
|
|
18
18
|
/**
|
|
19
19
|
* Socket protocol version for DEM communications.
|
|
20
20
|
*/
|
package/version.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Current version of @prestizni-software/client-dem.
|
|
3
3
|
*/
|
|
4
|
-
export const DEM_CLIENT_VERSION = "0.
|
|
4
|
+
export const DEM_CLIENT_VERSION = "0.11.0";
|
|
5
5
|
/**
|
|
6
6
|
* Current version of @prestizni-software/server-dem.
|
|
7
7
|
*/
|
|
8
|
-
export const DEM_SERVER_VERSION = "0.
|
|
8
|
+
export const DEM_SERVER_VERSION = "0.11.0";
|
|
9
9
|
/**
|
|
10
10
|
* Lowest client version that the server is compatible with.
|
|
11
11
|
* Server patches do not increment this value unless breaking compatibility.
|
|
12
12
|
*/
|
|
13
|
-
export const DEM_MIN_COMPATIBLE_CLIENT_VERSION = "0.
|
|
13
|
+
export const DEM_MIN_COMPATIBLE_CLIENT_VERSION = "0.11.0";
|
|
14
14
|
/**
|
|
15
15
|
* Global DEM version constant indicating minimum compatible client version.
|
|
16
16
|
*/
|