@peers-app/peers-sdk 0.27.3 → 0.27.5
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/dist/contracts/contract-proxy.d.ts +7 -0
- package/dist/contracts/contract-proxy.js +19 -2
- package/dist/contracts/contract-transport.d.ts +2 -1
- package/dist/contracts/contract-transport.js +24 -2
- package/dist/contracts/create-local-consumer.js +16 -1
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/system/index.d.ts +2 -0
- package/dist/contracts/system/index.js +2 -0
- package/dist/contracts/system/invites-contract.js +2 -1
- package/dist/contracts/system/sync-check-contract.d.ts +97 -0
- package/dist/contracts/system/sync-check-contract.js +115 -0
- package/dist/contracts/tool-arguments.d.ts +15 -0
- package/dist/contracts/tool-arguments.js +41 -0
- package/dist/contracts/tool-catalog-service.js +2 -12
- package/dist/contracts/tool-catalog.js +6 -2
- package/dist/data/change-tracking.d.ts +40 -0
- package/dist/data/change-tracking.js +89 -0
- package/dist/data/orm/types.d.ts +24 -7
- package/dist/data/orm/types.js +97 -24
- package/dist/define/manifest.js +6 -34
- package/dist/device/binary-peer-connection-v2.d.ts +7 -15
- package/dist/device/binary-peer-connection-v2.js +14 -30
- package/dist/device/connection.d.ts +34 -43
- package/dist/device/connection.js +188 -186
- package/dist/device/device.d.ts +1 -8
- package/dist/device/device.js +1 -30
- package/dist/device/socket.type.d.ts +6 -12
- package/dist/package-loader/package-loader.js +27 -22
- package/dist/system-ids.d.ts +5 -0
- package/dist/system-ids.js +6 -1
- package/package.json +4 -2
- package/dist/context/user-context-identity.test.d.ts +0 -1
- package/dist/context/user-context-identity.test.js +0 -220
- package/dist/contracts/__tests__/action-dispatch.test.d.ts +0 -1
- package/dist/contracts/__tests__/action-dispatch.test.js +0 -319
- package/dist/contracts/__tests__/also-implements.test.d.ts +0 -1
- package/dist/contracts/__tests__/also-implements.test.js +0 -110
- package/dist/contracts/__tests__/builder.test.d.ts +0 -1
- package/dist/contracts/__tests__/builder.test.js +0 -669
- package/dist/contracts/__tests__/contract-events.test.d.ts +0 -1
- package/dist/contracts/__tests__/contract-events.test.js +0 -199
- package/dist/contracts/__tests__/contract-observables.test.d.ts +0 -1
- package/dist/contracts/__tests__/contract-observables.test.js +0 -290
- package/dist/contracts/__tests__/contract-provider-router.test.d.ts +0 -1
- package/dist/contracts/__tests__/contract-provider-router.test.js +0 -315
- package/dist/contracts/__tests__/contract-proxy.test.d.ts +0 -1
- package/dist/contracts/__tests__/contract-proxy.test.js +0 -657
- package/dist/contracts/__tests__/contract-resolvers.test.d.ts +0 -1
- package/dist/contracts/__tests__/contract-resolvers.test.js +0 -758
- package/dist/contracts/__tests__/contract-subscription-lifecycle.test.d.ts +0 -1
- package/dist/contracts/__tests__/contract-subscription-lifecycle.test.js +0 -353
- package/dist/contracts/__tests__/contract-table-events.test.d.ts +0 -1
- package/dist/contracts/__tests__/contract-table-events.test.js +0 -209
- package/dist/contracts/__tests__/contract-transport.test.d.ts +0 -1
- package/dist/contracts/__tests__/contract-transport.test.js +0 -163
- package/dist/contracts/__tests__/extract.test.d.ts +0 -1
- package/dist/contracts/__tests__/extract.test.js +0 -145
- package/dist/contracts/__tests__/frozen-contracts.test.d.ts +0 -1
- package/dist/contracts/__tests__/frozen-contracts.test.js +0 -191
- package/dist/contracts/__tests__/generic-tool-dispatch.test.d.ts +0 -1
- package/dist/contracts/__tests__/generic-tool-dispatch.test.js +0 -130
- package/dist/contracts/__tests__/host-contract-client.test.d.ts +0 -1
- package/dist/contracts/__tests__/host-contract-client.test.js +0 -793
- package/dist/contracts/__tests__/host-contract-consumer.test.d.ts +0 -1
- package/dist/contracts/__tests__/host-contract-consumer.test.js +0 -163
- package/dist/contracts/__tests__/host-contract-transport.test.d.ts +0 -1
- package/dist/contracts/__tests__/host-contract-transport.test.js +0 -66
- package/dist/contracts/__tests__/integration.test.d.ts +0 -1
- package/dist/contracts/__tests__/integration.test.js +0 -348
- package/dist/contracts/__tests__/legacy-removal.test.d.ts +0 -1
- package/dist/contracts/__tests__/legacy-removal.test.js +0 -128
- package/dist/contracts/__tests__/persistent-registry.test.d.ts +0 -1
- package/dist/contracts/__tests__/persistent-registry.test.js +0 -109
- package/dist/contracts/__tests__/playground.test.d.ts +0 -1
- package/dist/contracts/__tests__/playground.test.js +0 -216
- package/dist/contracts/__tests__/registry.test.d.ts +0 -1
- package/dist/contracts/__tests__/registry.test.js +0 -238
- package/dist/contracts/__tests__/remote-contract-transport.test.d.ts +0 -1
- package/dist/contracts/__tests__/remote-contract-transport.test.js +0 -119
- package/dist/contracts/__tests__/system-contracts.test.d.ts +0 -1
- package/dist/contracts/__tests__/system-contracts.test.js +0 -247
- package/dist/contracts/__tests__/target-dispatch.d.ts +0 -11
- package/dist/contracts/__tests__/target-dispatch.js +0 -24
- package/dist/contracts/__tests__/tool-catalog-inventory.test.d.ts +0 -1
- package/dist/contracts/__tests__/tool-catalog-inventory.test.js +0 -44
- package/dist/contracts/__tests__/tool-catalog-service.test.d.ts +0 -1
- package/dist/contracts/__tests__/tool-catalog-service.test.js +0 -482
- package/dist/contracts/__tests__/tool-catalog.test.d.ts +0 -1
- package/dist/contracts/__tests__/tool-catalog.test.js +0 -1199
- package/dist/contracts/__tests__/validate.test.d.ts +0 -1
- package/dist/contracts/__tests__/validate.test.js +0 -991
- package/dist/contracts/__tests__/workflow-context.test.d.ts +0 -1
- package/dist/contracts/__tests__/workflow-context.test.js +0 -50
- package/dist/data/access-level.test.d.ts +0 -1
- package/dist/data/access-level.test.js +0 -53
- package/dist/data/change-tracking.test.d.ts +0 -1
- package/dist/data/change-tracking.test.js +0 -62
- package/dist/data/files/files.test.d.ts +0 -1
- package/dist/data/files/files.test.js +0 -770
- package/dist/data/group-members.test.d.ts +0 -1
- package/dist/data/group-members.test.js +0 -336
- package/dist/data/group-share.test.d.ts +0 -1
- package/dist/data/group-share.test.js +0 -110
- package/dist/data/groups.test.d.ts +0 -1
- package/dist/data/groups.test.js +0 -153
- package/dist/data/orm/cursor.test.d.ts +0 -1
- package/dist/data/orm/cursor.test.js +0 -314
- package/dist/data/orm/data-query.mongo.test.d.ts +0 -1
- package/dist/data/orm/data-query.mongo.test.js +0 -367
- package/dist/data/orm/data-query.sqlite.test.d.ts +0 -1
- package/dist/data/orm/data-query.sqlite.test.js +0 -365
- package/dist/data/orm/data-query.test.d.ts +0 -1
- package/dist/data/orm/data-query.test.js +0 -545
- package/dist/data/orm/dependency-injection.test.d.ts +0 -1
- package/dist/data/orm/dependency-injection.test.js +0 -171
- package/dist/data/orm/event-registry.test.d.ts +0 -1
- package/dist/data/orm/event-registry.test.js +0 -44
- package/dist/data/orm/multi-cursors.test.d.ts +0 -1
- package/dist/data/orm/multi-cursors.test.js +0 -463
- package/dist/data/orm/sql.data-source.test.d.ts +0 -1
- package/dist/data/orm/sql.data-source.test.js +0 -731
- package/dist/data/orm/table-container-events.test.d.ts +0 -1
- package/dist/data/orm/table-container-events.test.js +0 -101
- package/dist/data/orm/table-container.test.d.ts +0 -1
- package/dist/data/orm/table-container.test.js +0 -273
- package/dist/data/orm/table.event-source.test.d.ts +0 -1
- package/dist/data/orm/table.event-source.test.js +0 -331
- package/dist/data/orm/types.test.d.ts +0 -1
- package/dist/data/orm/types.test.js +0 -409
- package/dist/data/package-table-identity.test.d.ts +0 -1
- package/dist/data/package-table-identity.test.js +0 -46
- package/dist/data/package-version-permissions.test.d.ts +0 -1
- package/dist/data/package-version-permissions.test.js +0 -107
- package/dist/data/package-version-resolver.test.d.ts +0 -4
- package/dist/data/package-version-resolver.test.js +0 -543
- package/dist/data/package-versions.test.d.ts +0 -1
- package/dist/data/package-versions.test.js +0 -227
- package/dist/data/persistent-vars.conflict.test.d.ts +0 -1
- package/dist/data/persistent-vars.conflict.test.js +0 -126
- package/dist/data/persistent-vars.migration.test.d.ts +0 -1
- package/dist/data/persistent-vars.migration.test.js +0 -133
- package/dist/data/persistent-vars.package-scope.test.d.ts +0 -1
- package/dist/data/persistent-vars.package-scope.test.js +0 -27
- package/dist/data/sync-recovery-queue.test.d.ts +0 -1
- package/dist/data/sync-recovery-queue.test.js +0 -215
- package/dist/data/table-signing.test.d.ts +0 -1
- package/dist/data/table-signing.test.js +0 -118
- package/dist/data/tool-access.test.d.ts +0 -1
- package/dist/data/tool-access.test.js +0 -166
- package/dist/data/user-permissions.test.d.ts +0 -1
- package/dist/data/user-permissions.test.js +0 -305
- package/dist/data/user-trust-levels.test.d.ts +0 -1
- package/dist/data/user-trust-levels.test.js +0 -37
- package/dist/define/also-implements.test.d.ts +0 -1
- package/dist/define/also-implements.test.js +0 -123
- package/dist/define/declare-contract.test.d.ts +0 -1
- package/dist/define/declare-contract.test.js +0 -573
- package/dist/define/define.test.d.ts +0 -1
- package/dist/define/define.test.js +0 -1010
- package/dist/define/empty-fields.test.d.ts +0 -1
- package/dist/define/empty-fields.test.js +0 -55
- package/dist/define/events-observables.test.d.ts +0 -1
- package/dist/define/events-observables.test.js +0 -1013
- package/dist/define/serve-members.test.d.ts +0 -1
- package/dist/define/serve-members.test.js +0 -630
- package/dist/define/vars.test.d.ts +0 -1
- package/dist/define/vars.test.js +0 -39
- package/dist/device/binary-peer-connection-v2.test.d.ts +0 -1
- package/dist/device/binary-peer-connection-v2.test.js +0 -730
- package/dist/device/binary-peer-connection.d.ts +0 -58
- package/dist/device/binary-peer-connection.js +0 -516
- package/dist/device/binary-peer-connection.test.d.ts +0 -1
- package/dist/device/binary-peer-connection.test.js +0 -184
- package/dist/device/connection.test.d.ts +0 -1
- package/dist/device/connection.test.js +0 -613
- package/dist/device/device-election.test.d.ts +0 -1
- package/dist/device/device-election.test.js +0 -516
- package/dist/device/device.test.d.ts +0 -1
- package/dist/device/device.test.js +0 -243
- package/dist/device/frame-cipher.test.d.ts +0 -1
- package/dist/device/frame-cipher.test.js +0 -219
- package/dist/device/get-trust-level-fn.test.d.ts +0 -1
- package/dist/device/get-trust-level-fn.test.js +0 -685
- package/dist/device/streamed-socket.d.ts +0 -23
- package/dist/device/streamed-socket.js +0 -255
- package/dist/device/streamed-socket.test.d.ts +0 -1
- package/dist/device/streamed-socket.test.js +0 -216
- package/dist/device/tx-encoding.test.d.ts +0 -1
- package/dist/device/tx-encoding.test.js +0 -295
- package/dist/device-pairing/cpace.test.d.ts +0 -1
- package/dist/device-pairing/cpace.test.js +0 -116
- package/dist/device-pairing/device-pairing.test.d.ts +0 -1
- package/dist/device-pairing/device-pairing.test.js +0 -211
- package/dist/hlc.test.d.ts +0 -1
- package/dist/hlc.test.js +0 -45
- package/dist/host-credentials.test.d.ts +0 -1
- package/dist/host-credentials.test.js +0 -88
- package/dist/identity/account-email.test.d.ts +0 -1
- package/dist/identity/account-email.test.js +0 -59
- package/dist/identity/anchor-document.test.d.ts +0 -1
- package/dist/identity/anchor-document.test.js +0 -16
- package/dist/identity/anchor-resolution.test.d.ts +0 -1
- package/dist/identity/anchor-resolution.test.js +0 -130
- package/dist/identity/key-change.test.d.ts +0 -1
- package/dist/identity/key-change.test.js +0 -811
- package/dist/invites/group-approval.test.d.ts +0 -1
- package/dist/invites/group-approval.test.js +0 -223
- package/dist/invites/invite-token.test.d.ts +0 -1
- package/dist/invites/invite-token.test.js +0 -123
- package/dist/keys.test.d.ts +0 -1
- package/dist/keys.test.js +0 -336
- package/dist/logging/console-logger.test.d.ts +0 -1
- package/dist/logging/console-logger.test.js +0 -300
- package/dist/logging/console-logs.table.test.d.ts +0 -1
- package/dist/logging/console-logs.table.test.js +0 -156
- package/dist/observable.test.d.ts +0 -1
- package/dist/observable.test.js +0 -309
- package/dist/package-build/build-package.test.d.ts +0 -1
- package/dist/package-build/build-package.test.js +0 -204
- package/dist/package-build/contract-add.test.d.ts +0 -1
- package/dist/package-build/contract-add.test.js +0 -467
- package/dist/package-build/freeze-contracts.test.d.ts +0 -1
- package/dist/package-build/freeze-contracts.test.js +0 -355
- package/dist/package-installer/package-author-signing.test.d.ts +0 -1
- package/dist/package-installer/package-author-signing.test.js +0 -200
- package/dist/package-installer/package-cloner.test.d.ts +0 -1
- package/dist/package-installer/package-cloner.test.js +0 -278
- package/dist/package-installer/package-creator.test.d.ts +0 -1
- package/dist/package-installer/package-creator.test.js +0 -908
- package/dist/package-installer/package-dev-tools.test.d.ts +0 -1
- package/dist/package-installer/package-dev-tools.test.js +0 -64
- package/dist/package-installer/package-installer.test.d.ts +0 -1
- package/dist/package-installer/package-installer.test.js +0 -882
- package/dist/package-installer/package-propagation.test.d.ts +0 -1
- package/dist/package-installer/package-propagation.test.js +0 -1269
- package/dist/package-installer/package-publisher.test.d.ts +0 -1
- package/dist/package-installer/package-publisher.test.js +0 -153
- package/dist/package-installer/package-remote-checker.test.d.ts +0 -1
- package/dist/package-installer/package-remote-checker.test.js +0 -334
- package/dist/package-installer/package-seed-installer.test.d.ts +0 -1
- package/dist/package-installer/package-seed-installer.test.js +0 -123
- package/dist/package-installer/package-tarball.test.d.ts +0 -1
- package/dist/package-installer/package-tarball.test.js +0 -75
- package/dist/package-installer/peers-core-installer.test.d.ts +0 -1
- package/dist/package-installer/peers-core-installer.test.js +0 -49
- package/dist/package-installer/peers-core-trust-anchor.test.d.ts +0 -1
- package/dist/package-installer/peers-core-trust-anchor.test.js +0 -155
- package/dist/package-loader/contract-package-loader.test.d.ts +0 -1
- package/dist/package-loader/contract-package-loader.test.js +0 -274
- package/dist/package-loader/host-authority-loading.test.d.ts +0 -1
- package/dist/package-loader/host-authority-loading.test.js +0 -104
- package/dist/package-loader/host-dispatch-policy.test.d.ts +0 -1
- package/dist/package-loader/host-dispatch-policy.test.js +0 -56
- package/dist/package-loader/isolated-artifact.test.d.ts +0 -1
- package/dist/package-loader/isolated-artifact.test.js +0 -688
- package/dist/package-loader/isolated-persistent-var-gateway.test.d.ts +0 -1
- package/dist/package-loader/isolated-persistent-var-gateway.test.js +0 -56
- package/dist/package-loader/isolated-table-gateway.test.d.ts +0 -1
- package/dist/package-loader/isolated-table-gateway.test.js +0 -633
- package/dist/package-loader/package-loader.test.d.ts +0 -1
- package/dist/package-loader/package-loader.test.js +0 -1764
- package/dist/package-loader/resolve-consumed-contracts.test.d.ts +0 -1
- package/dist/package-loader/resolve-consumed-contracts.test.js +0 -166
- package/dist/serial-json.compat.test.d.ts +0 -1
- package/dist/serial-json.compat.test.js +0 -369
- package/dist/serial-json.test.d.ts +0 -1
- package/dist/serial-json.test.js +0 -401
- package/dist/testing/mock-host-contract.test.d.ts +0 -1
- package/dist/testing/mock-host-contract.test.js +0 -782
- package/dist/utils.test.d.ts +0 -1
- package/dist/utils.test.js +0 -232
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const field_type_1 = require("../../types/field-type");
|
|
4
|
-
const utils_1 = require("../../utils");
|
|
5
|
-
const event_registry_1 = require("./event-registry");
|
|
6
|
-
const subscribable_data_source_1 = require("./subscribable.data-source");
|
|
7
|
-
const table_1 = require("./table");
|
|
8
|
-
const types_1 = require("./types");
|
|
9
|
-
// Mock data source for testing
|
|
10
|
-
class MockDataSource {
|
|
11
|
-
tableName;
|
|
12
|
-
primaryKeyName;
|
|
13
|
-
data = new Map();
|
|
14
|
-
constructor(tableName, primaryKeyName = "id", initialData = []) {
|
|
15
|
-
this.tableName = tableName;
|
|
16
|
-
this.primaryKeyName = primaryKeyName;
|
|
17
|
-
initialData.forEach((item) => {
|
|
18
|
-
this.data.set(item[primaryKeyName], item);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
async get(id) {
|
|
22
|
-
return this.data.get(id);
|
|
23
|
-
}
|
|
24
|
-
async list() {
|
|
25
|
-
return Array.from(this.data.values());
|
|
26
|
-
}
|
|
27
|
-
async save(record) {
|
|
28
|
-
const id = record[this.primaryKeyName];
|
|
29
|
-
if (id && this.data.has(id)) {
|
|
30
|
-
return this.update(record);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
return this.insert(record);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
async insert(record) {
|
|
37
|
-
if (!record[this.primaryKeyName]) {
|
|
38
|
-
// Create a new record with the generated ID
|
|
39
|
-
record = { ...record, [this.primaryKeyName]: (0, utils_1.newid)() };
|
|
40
|
-
}
|
|
41
|
-
this.data.set(record[this.primaryKeyName], record);
|
|
42
|
-
return record;
|
|
43
|
-
}
|
|
44
|
-
async update(record) {
|
|
45
|
-
const id = record[this.primaryKeyName];
|
|
46
|
-
if (!this.data.has(id)) {
|
|
47
|
-
throw new Error(`Record with id ${id} not found`);
|
|
48
|
-
}
|
|
49
|
-
this.data.set(id, record);
|
|
50
|
-
return record;
|
|
51
|
-
}
|
|
52
|
-
async delete(idOrRecord) {
|
|
53
|
-
const id = typeof idOrRecord === "string" ? idOrRecord : idOrRecord[this.primaryKeyName];
|
|
54
|
-
this.data.delete(id);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
describe("Table Event Source Functionality", () => {
|
|
58
|
-
let table;
|
|
59
|
-
let underlyingDataSource;
|
|
60
|
-
let subscribableDataSource;
|
|
61
|
-
let capturedEvents;
|
|
62
|
-
const testMetadata = {
|
|
63
|
-
name: "TestTable",
|
|
64
|
-
description: "Test table for event source functionality",
|
|
65
|
-
primaryKeyName: "id",
|
|
66
|
-
fields: [
|
|
67
|
-
{ name: "id", type: field_type_1.FieldType.id, description: "Primary key" },
|
|
68
|
-
{ name: "name", type: field_type_1.FieldType.string, description: "Name field" },
|
|
69
|
-
{ name: "age", type: field_type_1.FieldType.number, description: "Age field" },
|
|
70
|
-
],
|
|
71
|
-
};
|
|
72
|
-
const testSchema = (0, types_1.fieldsToSchema)(testMetadata.fields);
|
|
73
|
-
const testRecord = {
|
|
74
|
-
id: "test-1",
|
|
75
|
-
name: "John Doe",
|
|
76
|
-
age: 30,
|
|
77
|
-
};
|
|
78
|
-
beforeEach(() => {
|
|
79
|
-
capturedEvents = [];
|
|
80
|
-
// Create underlying data source with unique name to avoid conflicts
|
|
81
|
-
const uniqueTableName = `TestTable_${Date.now()}_${Math.random()}`;
|
|
82
|
-
underlyingDataSource = new MockDataSource(uniqueTableName, "id");
|
|
83
|
-
// Wrap it in a SubscribableDataSource
|
|
84
|
-
subscribableDataSource = new subscribable_data_source_1.SubscribableDataSource(underlyingDataSource);
|
|
85
|
-
// Create real event registry for testing
|
|
86
|
-
const mockDataContextForRegistry = {
|
|
87
|
-
dataContextId: "test-context",
|
|
88
|
-
};
|
|
89
|
-
const eventRegistry = new event_registry_1.EventRegistry(mockDataContextForRegistry);
|
|
90
|
-
const _mockDataContext = {
|
|
91
|
-
dataSourceFactory: () => subscribableDataSource,
|
|
92
|
-
eventRegistry: eventRegistry,
|
|
93
|
-
};
|
|
94
|
-
// Create table with the subscribable data source
|
|
95
|
-
const metaData = {
|
|
96
|
-
...testMetadata,
|
|
97
|
-
name: uniqueTableName,
|
|
98
|
-
};
|
|
99
|
-
const deps = {
|
|
100
|
-
dataSource: subscribableDataSource,
|
|
101
|
-
eventRegistry: eventRegistry,
|
|
102
|
-
schema: testSchema,
|
|
103
|
-
};
|
|
104
|
-
table = new table_1.Table(metaData, deps);
|
|
105
|
-
// Subscribe to events to capture them
|
|
106
|
-
table.dataChanged.subscribe((event) => {
|
|
107
|
-
capturedEvents.push(event);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
describe("Local Operations", () => {
|
|
111
|
-
it("should mark insert events as local when called from table", async () => {
|
|
112
|
-
await table.insert(testRecord);
|
|
113
|
-
expect(capturedEvents).toHaveLength(1);
|
|
114
|
-
expect(capturedEvents[0]).toEqual({
|
|
115
|
-
dataObject: testRecord,
|
|
116
|
-
op: "insert",
|
|
117
|
-
source: "local",
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
it("should mark update events as local when called from table", async () => {
|
|
121
|
-
// First insert the record
|
|
122
|
-
await table.insert(testRecord);
|
|
123
|
-
capturedEvents.length = 0; // Clear events
|
|
124
|
-
const updatedRecord = { ...testRecord, age: 31 };
|
|
125
|
-
await table.update(updatedRecord);
|
|
126
|
-
expect(capturedEvents).toHaveLength(1);
|
|
127
|
-
expect(capturedEvents[0]).toEqual({
|
|
128
|
-
dataObject: updatedRecord,
|
|
129
|
-
op: "update",
|
|
130
|
-
source: "local",
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
it("should mark delete events as local when called from table", async () => {
|
|
134
|
-
// First insert the record
|
|
135
|
-
await table.insert(testRecord);
|
|
136
|
-
capturedEvents.length = 0; // Clear events
|
|
137
|
-
await table.delete(testRecord.id);
|
|
138
|
-
expect(capturedEvents).toHaveLength(1);
|
|
139
|
-
expect(capturedEvents[0]).toEqual({
|
|
140
|
-
dataObject: testRecord,
|
|
141
|
-
op: "delete",
|
|
142
|
-
source: "local",
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
it("should mark save events as local (insert case)", async () => {
|
|
146
|
-
await table.save(testRecord);
|
|
147
|
-
expect(capturedEvents).toHaveLength(1);
|
|
148
|
-
expect(capturedEvents[0]).toEqual({
|
|
149
|
-
dataObject: testRecord,
|
|
150
|
-
op: "insert",
|
|
151
|
-
source: "local",
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
it("should mark save events as local (update case)", async () => {
|
|
155
|
-
// First insert the record directly to underlying source
|
|
156
|
-
await underlyingDataSource.insert(testRecord);
|
|
157
|
-
capturedEvents.length = 0; // Clear events
|
|
158
|
-
const updatedRecord = { ...testRecord, age: 31 };
|
|
159
|
-
await table.save(updatedRecord);
|
|
160
|
-
expect(capturedEvents).toHaveLength(1);
|
|
161
|
-
expect(capturedEvents[0]).toEqual({
|
|
162
|
-
dataObject: updatedRecord,
|
|
163
|
-
op: "update",
|
|
164
|
-
source: "local",
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
describe("Remote Operations", () => {
|
|
169
|
-
it("should mark insert events as remote when called from underlying source", async () => {
|
|
170
|
-
await subscribableDataSource.insert(testRecord);
|
|
171
|
-
expect(capturedEvents).toHaveLength(1);
|
|
172
|
-
expect(capturedEvents[0]).toEqual({
|
|
173
|
-
dataObject: testRecord,
|
|
174
|
-
op: "insert",
|
|
175
|
-
source: "remote",
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
it("should mark update events as remote when called from underlying source", async () => {
|
|
179
|
-
// First insert the record
|
|
180
|
-
await subscribableDataSource.insert(testRecord);
|
|
181
|
-
capturedEvents.length = 0; // Clear events
|
|
182
|
-
const updatedRecord = { ...testRecord, age: 31 };
|
|
183
|
-
await subscribableDataSource.update(updatedRecord);
|
|
184
|
-
expect(capturedEvents).toHaveLength(1);
|
|
185
|
-
expect(capturedEvents[0]).toEqual({
|
|
186
|
-
dataObject: updatedRecord,
|
|
187
|
-
op: "update",
|
|
188
|
-
source: "remote",
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
it("should mark delete events as remote when called from underlying source", async () => {
|
|
192
|
-
// First insert the record
|
|
193
|
-
await subscribableDataSource.insert(testRecord);
|
|
194
|
-
capturedEvents.length = 0; // Clear events
|
|
195
|
-
await subscribableDataSource.delete(testRecord.id);
|
|
196
|
-
expect(capturedEvents).toHaveLength(1);
|
|
197
|
-
expect(capturedEvents[0]).toEqual({
|
|
198
|
-
dataObject: testRecord,
|
|
199
|
-
op: "delete",
|
|
200
|
-
source: "remote",
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
describe("Concurrent Operations", () => {
|
|
205
|
-
it("should handle multiple concurrent insert operations correctly", async () => {
|
|
206
|
-
const record1 = { id: "test-1", name: "John", age: 30 };
|
|
207
|
-
const record2 = { id: "test-2", name: "Jane", age: 25 };
|
|
208
|
-
const record3 = { id: "test-3", name: "Bob", age: 35 };
|
|
209
|
-
// Execute multiple operations concurrently
|
|
210
|
-
await Promise.all([table.insert(record1), table.insert(record2), table.insert(record3)]);
|
|
211
|
-
expect(capturedEvents).toHaveLength(3);
|
|
212
|
-
capturedEvents.forEach((event) => {
|
|
213
|
-
expect(event.op).toBe("insert");
|
|
214
|
-
expect(event.source).toBe("local");
|
|
215
|
-
});
|
|
216
|
-
// Verify all records were inserted
|
|
217
|
-
const insertedIds = capturedEvents.map((e) => e.dataObject.id).sort();
|
|
218
|
-
expect(insertedIds).toEqual(["test-1", "test-2", "test-3"]);
|
|
219
|
-
});
|
|
220
|
-
it("should handle concurrent operations with different operations types", async () => {
|
|
221
|
-
const record1 = { id: "test-1", name: "John", age: 30 };
|
|
222
|
-
const record2 = { id: "test-2", name: "Jane", age: 25 };
|
|
223
|
-
// First insert records to set up for update/delete
|
|
224
|
-
await table.insert(record1);
|
|
225
|
-
await table.insert(record2);
|
|
226
|
-
capturedEvents.length = 0; // Clear events
|
|
227
|
-
const updatedRecord1 = { ...record1, age: 31 };
|
|
228
|
-
const record3 = { id: "test-3", name: "Alice", age: 28 };
|
|
229
|
-
// Execute mixed operations concurrently
|
|
230
|
-
await Promise.all([
|
|
231
|
-
table.update(updatedRecord1),
|
|
232
|
-
table.delete(record2.id),
|
|
233
|
-
table.insert(record3),
|
|
234
|
-
]);
|
|
235
|
-
expect(capturedEvents).toHaveLength(3);
|
|
236
|
-
// All should be marked as local
|
|
237
|
-
capturedEvents.forEach((event) => {
|
|
238
|
-
expect(event.source).toBe("local");
|
|
239
|
-
});
|
|
240
|
-
// Check specific operations
|
|
241
|
-
const operations = capturedEvents.map((e) => e.op).sort();
|
|
242
|
-
expect(operations).toEqual(["delete", "insert", "update"]);
|
|
243
|
-
});
|
|
244
|
-
it("should handle concurrent local and remote operations correctly", async () => {
|
|
245
|
-
const localRecord = { id: "local-1", name: "Local User", age: 30 };
|
|
246
|
-
const remoteRecord = { id: "remote-1", name: "Remote User", age: 25 };
|
|
247
|
-
// Execute local and remote operations concurrently
|
|
248
|
-
await Promise.all([table.insert(localRecord), subscribableDataSource.insert(remoteRecord)]);
|
|
249
|
-
expect(capturedEvents).toHaveLength(2);
|
|
250
|
-
// Find events by record ID
|
|
251
|
-
const localEvent = capturedEvents.find((e) => e.dataObject.id === "local-1");
|
|
252
|
-
const remoteEvent = capturedEvents.find((e) => e.dataObject.id === "remote-1");
|
|
253
|
-
expect(localEvent?.source).toBe("local");
|
|
254
|
-
expect(remoteEvent?.source).toBe("remote");
|
|
255
|
-
});
|
|
256
|
-
it("should handle concurrent operations on different records correctly", async () => {
|
|
257
|
-
const record1 = { id: "test-1", name: "John", age: 30 };
|
|
258
|
-
const record2 = { id: "test-2", name: "Jane", age: 25 };
|
|
259
|
-
// Insert records first
|
|
260
|
-
await table.insert(record1);
|
|
261
|
-
await subscribableDataSource.insert(record2);
|
|
262
|
-
capturedEvents.length = 0;
|
|
263
|
-
const localUpdate = { ...record1, name: "John Local", age: 31 };
|
|
264
|
-
const remoteUpdate = { ...record2, name: "Jane Remote", age: 26 };
|
|
265
|
-
// Execute concurrent updates on different records (one local, one remote)
|
|
266
|
-
await Promise.all([table.update(localUpdate), subscribableDataSource.update(remoteUpdate)]);
|
|
267
|
-
expect(capturedEvents).toHaveLength(2);
|
|
268
|
-
// Both operations should complete, but with different sources
|
|
269
|
-
const localEvent = capturedEvents.find((e) => e.dataObject.name?.includes("Local"));
|
|
270
|
-
const remoteEvent = capturedEvents.find((e) => e.dataObject.name?.includes("Remote"));
|
|
271
|
-
expect(localEvent?.source).toBe("local");
|
|
272
|
-
expect(remoteEvent?.source).toBe("remote");
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
describe("Cache Management", () => {
|
|
276
|
-
it("should clean up cache entries after operations complete", async () => {
|
|
277
|
-
const record = { id: "test-1", name: "John", age: 30 };
|
|
278
|
-
// Insert record
|
|
279
|
-
await table.insert(record);
|
|
280
|
-
// Verify the cache was cleaned up by checking that subsequent remote operations
|
|
281
|
-
// are marked as remote (not local)
|
|
282
|
-
const updatedRecord = { ...record, age: 31 };
|
|
283
|
-
await subscribableDataSource.update(updatedRecord);
|
|
284
|
-
expect(capturedEvents).toHaveLength(2);
|
|
285
|
-
expect(capturedEvents[0].source).toBe("local"); // Insert
|
|
286
|
-
expect(capturedEvents[1].source).toBe("remote"); // Update from subscribable source
|
|
287
|
-
});
|
|
288
|
-
it("should clean up cache entries even when operations throw errors", async () => {
|
|
289
|
-
const record = { id: "nonexistent", name: "John", age: 30 };
|
|
290
|
-
// Try to update a non-existent record (should throw)
|
|
291
|
-
try {
|
|
292
|
-
await table.update(record);
|
|
293
|
-
}
|
|
294
|
-
catch (_error) {
|
|
295
|
-
// Expected to throw
|
|
296
|
-
}
|
|
297
|
-
// Now insert the same record through underlying source
|
|
298
|
-
await subscribableDataSource.insert(record);
|
|
299
|
-
// Should be marked as remote since cache was cleaned up
|
|
300
|
-
expect(capturedEvents).toHaveLength(1);
|
|
301
|
-
expect(capturedEvents[0].source).toBe("remote");
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
describe("Table Without Underlying SubscribableDataSource", () => {
|
|
305
|
-
it("should work correctly when no underlying SubscribableDataSource exists", async () => {
|
|
306
|
-
// Create table with plain data source (no SubscribableDataSource)
|
|
307
|
-
const plainDataSource = new MockDataSource("PlainTable", "id");
|
|
308
|
-
const mockDataContextForRegistry2 = {
|
|
309
|
-
dataContextId: "test-context-2",
|
|
310
|
-
};
|
|
311
|
-
const eventRegistry2 = new event_registry_1.EventRegistry(mockDataContextForRegistry2);
|
|
312
|
-
const _mockDataContext = {
|
|
313
|
-
dataSourceFactory: () => plainDataSource,
|
|
314
|
-
eventRegistry: eventRegistry2,
|
|
315
|
-
};
|
|
316
|
-
const plainTableDeps = {
|
|
317
|
-
dataSource: plainDataSource,
|
|
318
|
-
eventRegistry: eventRegistry2,
|
|
319
|
-
schema: testSchema,
|
|
320
|
-
};
|
|
321
|
-
const plainTable = new table_1.Table(testMetadata, plainTableDeps);
|
|
322
|
-
const events = [];
|
|
323
|
-
plainTable.dataChanged.subscribe((event) => {
|
|
324
|
-
events.push(event);
|
|
325
|
-
});
|
|
326
|
-
await plainTable.insert(testRecord);
|
|
327
|
-
expect(events).toHaveLength(1);
|
|
328
|
-
expect(events[0].source).toBe("local");
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|