@peers-app/peers-sdk 0.14.0 → 0.15.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/dist/context/data-context.d.ts +4 -4
- package/dist/context/data-context.js +1 -1
- package/dist/context/index.d.ts +3 -3
- package/dist/context/index.js +4 -0
- package/dist/context/user-context-singleton.js +13 -14
- package/dist/context/user-context.d.ts +4 -4
- package/dist/context/user-context.js +48 -31
- package/dist/data/assistants.d.ts +1 -1
- package/dist/data/assistants.js +35 -24
- package/dist/data/change-tracking.d.ts +8 -8
- package/dist/data/change-tracking.js +45 -39
- package/dist/data/channels.js +5 -5
- package/dist/data/data-locks.d.ts +2 -2
- package/dist/data/data-locks.js +21 -23
- package/dist/data/data-locks.test.js +73 -75
- package/dist/data/device-sync-info.d.ts +1 -1
- package/dist/data/device-sync-info.js +4 -4
- package/dist/data/devices.d.ts +1 -1
- package/dist/data/devices.js +9 -12
- package/dist/data/embeddings.js +14 -11
- package/dist/data/files/file-read-stream.d.ts +2 -2
- package/dist/data/files/file-read-stream.js +23 -14
- package/dist/data/files/file-write-stream.d.ts +2 -2
- package/dist/data/files/file-write-stream.js +8 -8
- package/dist/data/files/file.types.d.ts +2 -2
- package/dist/data/files/file.types.js +17 -11
- package/dist/data/files/files.d.ts +6 -6
- package/dist/data/files/files.js +17 -19
- package/dist/data/files/files.test.js +213 -214
- package/dist/data/files/index.d.ts +4 -4
- package/dist/data/files/index.js +4 -4
- package/dist/data/group-member-roles.js +2 -2
- package/dist/data/group-members.d.ts +5 -5
- package/dist/data/group-members.js +27 -18
- package/dist/data/group-members.test.js +73 -73
- package/dist/data/group-permissions.d.ts +3 -3
- package/dist/data/group-permissions.js +13 -11
- package/dist/data/group-share.d.ts +2 -2
- package/dist/data/group-share.js +29 -24
- package/dist/data/groups.d.ts +4 -4
- package/dist/data/groups.js +27 -19
- package/dist/data/groups.test.js +44 -44
- package/dist/data/index.d.ts +6 -6
- package/dist/data/index.js +6 -6
- package/dist/data/knowledge/peer-types.js +9 -9
- package/dist/data/messages.d.ts +5 -5
- package/dist/data/messages.js +43 -30
- package/dist/data/orm/client-proxy.data-source.d.ts +4 -4
- package/dist/data/orm/client-proxy.data-source.js +10 -12
- package/dist/data/orm/cursor.d.ts +1 -1
- package/dist/data/orm/cursor.js +2 -2
- package/dist/data/orm/cursor.test.js +92 -93
- package/dist/data/orm/data-query.d.ts +3 -3
- package/dist/data/orm/data-query.js +24 -18
- package/dist/data/orm/data-query.mongo.d.ts +1 -1
- package/dist/data/orm/data-query.mongo.js +49 -51
- package/dist/data/orm/data-query.mongo.test.js +173 -204
- package/dist/data/orm/data-query.sqlite.d.ts +1 -1
- package/dist/data/orm/data-query.sqlite.js +84 -73
- package/dist/data/orm/data-query.sqlite.test.js +164 -176
- package/dist/data/orm/data-query.test.js +216 -224
- package/dist/data/orm/decorators.js +3 -3
- package/dist/data/orm/dependency-injection.test.js +53 -56
- package/dist/data/orm/doc.d.ts +4 -4
- package/dist/data/orm/doc.js +17 -21
- package/dist/data/orm/event-registry.d.ts +1 -1
- package/dist/data/orm/event-registry.test.js +16 -16
- package/dist/data/orm/factory.d.ts +2 -2
- package/dist/data/orm/factory.js +33 -33
- package/dist/data/orm/index.d.ts +10 -10
- package/dist/data/orm/index.js +10 -10
- package/dist/data/orm/multi-cursors.d.ts +1 -1
- package/dist/data/orm/multi-cursors.js +6 -6
- package/dist/data/orm/multi-cursors.test.js +152 -144
- package/dist/data/orm/sql.data-source.d.ts +7 -7
- package/dist/data/orm/sql.data-source.js +88 -93
- package/dist/data/orm/sql.data-source.test.js +109 -101
- package/dist/data/orm/subscribable.data-source.d.ts +4 -4
- package/dist/data/orm/subscribable.data-source.js +5 -5
- package/dist/data/orm/table-container-events.test.js +34 -26
- package/dist/data/orm/table-container.d.ts +6 -6
- package/dist/data/orm/table-container.js +33 -21
- package/dist/data/orm/table-container.test.js +64 -53
- package/dist/data/orm/table-definitions.system.d.ts +3 -3
- package/dist/data/orm/table-definitions.system.js +3 -3
- package/dist/data/orm/table-definitions.type.d.ts +5 -5
- package/dist/data/orm/table-dependencies.d.ts +2 -2
- package/dist/data/orm/table.d.ts +5 -5
- package/dist/data/orm/table.event-source.test.js +105 -115
- package/dist/data/orm/table.js +35 -34
- package/dist/data/orm/types.d.ts +3 -3
- package/dist/data/orm/types.js +26 -25
- package/dist/data/orm/types.test.js +166 -92
- package/dist/data/package-permissions.d.ts +1 -1
- package/dist/data/package-permissions.js +2 -2
- package/dist/data/package-version-permissions.d.ts +1 -1
- package/dist/data/package-version-permissions.js +2 -2
- package/dist/data/package-versions.d.ts +9 -9
- package/dist/data/package-versions.js +47 -33
- package/dist/data/packages.d.ts +2 -2
- package/dist/data/packages.js +36 -18
- package/dist/data/packages.utils.d.ts +2 -2
- package/dist/data/packages.utils.js +4 -4
- package/dist/data/persistent-vars.d.ts +15 -15
- package/dist/data/persistent-vars.js +165 -154
- package/dist/data/table-definitions-table.d.ts +5 -5
- package/dist/data/table-definitions-table.js +13 -12
- package/dist/data/tool-tests.js +6 -6
- package/dist/data/tools.js +29 -19
- package/dist/data/user-permissions.d.ts +1 -1
- package/dist/data/user-permissions.js +5 -5
- package/dist/data/user-permissions.test.js +90 -88
- package/dist/data/user-trust-levels.js +10 -10
- package/dist/data/users.d.ts +4 -4
- package/dist/data/users.js +16 -15
- package/dist/data/voice-messages.d.ts +2 -2
- package/dist/data/voice-messages.js +13 -13
- package/dist/data/welcome-modal.pvar.js +3 -1
- package/dist/data/workflow-logs.js +26 -18
- package/dist/data/workflow-runs.d.ts +6 -6
- package/dist/data/workflow-runs.js +70 -44
- package/dist/data/workflows.d.ts +2 -2
- package/dist/data/workflows.js +7 -9
- package/dist/device/binary-peer-connection-v2.d.ts +7 -7
- package/dist/device/binary-peer-connection-v2.js +32 -28
- package/dist/device/binary-peer-connection-v2.test.js +80 -67
- package/dist/device/binary-peer-connection.d.ts +7 -7
- package/dist/device/binary-peer-connection.js +29 -28
- package/dist/device/binary-peer-connection.test.js +35 -31
- package/dist/device/connection.d.ts +5 -5
- package/dist/device/connection.js +59 -48
- package/dist/device/connection.test.js +74 -68
- package/dist/device/device-election.d.ts +2 -2
- package/dist/device/device-election.js +25 -20
- package/dist/device/device-election.test.js +35 -36
- package/dist/device/device.d.ts +2 -2
- package/dist/device/device.js +10 -4
- package/dist/device/device.test.js +16 -17
- package/dist/device/get-trust-level-fn.d.ts +2 -2
- package/dist/device/get-trust-level-fn.js +22 -11
- package/dist/device/get-trust-level-fn.test.js +58 -58
- package/dist/device/socket-io-binary-peer.d.ts +1 -1
- package/dist/device/socket-io-binary-peer.js +16 -13
- package/dist/device/socket.type.d.ts +2 -2
- package/dist/device/streamed-socket.d.ts +2 -2
- package/dist/device/streamed-socket.js +8 -8
- package/dist/device/streamed-socket.test.js +40 -40
- package/dist/device/tx-encoding.test.js +77 -77
- package/dist/events.d.ts +1 -1
- package/dist/events.js +5 -2
- package/dist/group-invite/group-invite.js +110 -19
- package/dist/group-invite/group-invite.pvars.d.ts +2 -2
- package/dist/group-invite/group-invite.pvars.js +21 -13
- package/dist/group-invite/group-invite.types.d.ts +1 -1
- package/dist/group-invite/index.d.ts +3 -3
- package/dist/group-invite/index.js +1 -1
- package/dist/index.d.ts +25 -24
- package/dist/index.js +30 -25
- package/dist/keys.d.ts +3 -3
- package/dist/keys.js +31 -30
- package/dist/keys.test.js +69 -61
- package/dist/logging/console-logger.d.ts +1 -1
- package/dist/logging/console-logger.js +35 -40
- package/dist/logging/console-logger.test.js +115 -115
- package/dist/logging/console-logs.table.d.ts +3 -3
- package/dist/logging/console-logs.table.js +28 -23
- package/dist/mentions.js +16 -12
- package/dist/observable.d.ts +2 -2
- package/dist/observable.js +15 -9
- package/dist/observable.test.js +47 -47
- package/dist/package-loader/get-require.js +3 -4
- package/dist/package-loader/package-loader.d.ts +2 -2
- package/dist/package-loader/package-loader.js +52 -34
- package/dist/peers-ui/peers-ui.d.ts +2 -2
- package/dist/peers-ui/peers-ui.js +2 -4
- package/dist/peers-ui/peers-ui.types.d.ts +3 -3
- package/dist/peers-ui/peers-ui.types.js +0 -1
- package/dist/rpc-types.d.ts +61 -59
- package/dist/rpc-types.js +61 -55
- package/dist/serial-json.d.ts +1 -1
- package/dist/serial-json.js +50 -43
- package/dist/serial-json.test.js +22 -22
- package/dist/system-ids.js +8 -8
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/tools-factory.d.ts +1 -1
- package/dist/tools/tools-factory.js +2 -2
- package/dist/types/assistant-runner-args.d.ts +3 -3
- package/dist/types/peer-device.d.ts +1 -1
- package/dist/types/peers-package.d.ts +3 -3
- package/dist/types/workflow-logger.d.ts +1 -1
- package/dist/types/workflow-run-context.d.ts +4 -4
- package/dist/types/workflow.d.ts +4 -4
- package/dist/types/workflow.js +27 -14
- package/dist/types/zod-types.d.ts +2 -1
- package/dist/types/zod-types.js +9 -3
- package/dist/user-connect/connection-code.d.ts +1 -1
- package/dist/user-connect/connection-code.js +7 -7
- package/dist/user-connect/connection-code.test.js +106 -106
- package/dist/user-connect/index.d.ts +3 -3
- package/dist/user-connect/index.js +1 -1
- package/dist/user-connect/user-connect.pvars.js +13 -11
- package/dist/user-connect/user-connect.types.d.ts +3 -3
- package/dist/users.query.d.ts +2 -2
- package/dist/users.query.js +40 -30
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +34 -32
- package/dist/utils.test.js +12 -8
- package/dist/workflow-log-formatter.d.ts +1 -1
- package/dist/workflow-log-formatter.js +17 -18
- package/package.json +14 -8
|
@@ -12,12 +12,12 @@ const rpc_types_1 = require("../../rpc-types");
|
|
|
12
12
|
* an infinite proxy loop.
|
|
13
13
|
*/
|
|
14
14
|
function ProxyClientTableMethodCalls() {
|
|
15
|
-
return
|
|
16
|
-
if (context.kind ===
|
|
15
|
+
return (target, context) => {
|
|
16
|
+
if (context.kind === "method" && rpc_types_1.isClient) {
|
|
17
17
|
const methodName = context.name;
|
|
18
18
|
// WARNING: Using typescript's magical `this` param
|
|
19
19
|
const proxyFn = function (...args) {
|
|
20
|
-
const dataContextId = this.dataSource.dataContextId || this.groupId ||
|
|
20
|
+
const dataContextId = this.dataSource.dataContextId || this.groupId || "";
|
|
21
21
|
return rpc_types_1.rpcServerCalls.tableMethodCall(dataContextId, this.tableName, methodName, ...args);
|
|
22
22
|
};
|
|
23
23
|
proxyFn.__original = target;
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const _1 = require(".");
|
|
4
|
-
const field_type_1 = require("../../types/field-type");
|
|
5
|
-
const data_context_1 = require("../../context/data-context");
|
|
6
3
|
const zod_1 = require("zod");
|
|
7
|
-
|
|
4
|
+
const data_context_1 = require("../../context/data-context");
|
|
5
|
+
const field_type_1 = require("../../types/field-type");
|
|
6
|
+
const _1 = require(".");
|
|
7
|
+
describe("Dependency Injection Pattern", () => {
|
|
8
8
|
const testSchema = zod_1.z.object({
|
|
9
9
|
id: zod_1.z.string(),
|
|
10
10
|
name: zod_1.z.string(),
|
|
11
11
|
});
|
|
12
12
|
const testMetaData = {
|
|
13
|
-
name:
|
|
14
|
-
description:
|
|
15
|
-
primaryKeyName:
|
|
13
|
+
name: "TestTable",
|
|
14
|
+
description: "Test table for DI pattern",
|
|
15
|
+
primaryKeyName: "id",
|
|
16
16
|
fields: [
|
|
17
|
-
{ name:
|
|
18
|
-
{ name:
|
|
17
|
+
{ name: "id", type: field_type_1.FieldType.string, description: "ID field" },
|
|
18
|
+
{ name: "name", type: field_type_1.FieldType.string, description: "Name field" },
|
|
19
19
|
],
|
|
20
20
|
};
|
|
21
|
-
it(
|
|
21
|
+
it("should create table using new DI constructor", () => {
|
|
22
22
|
// Create mock dependencies
|
|
23
23
|
const mockDeps = {
|
|
24
24
|
dataSource: {
|
|
25
|
-
tableName:
|
|
26
|
-
primaryKeyName:
|
|
25
|
+
tableName: "TestTable",
|
|
26
|
+
primaryKeyName: "id",
|
|
27
27
|
list: jest.fn().mockResolvedValue([]),
|
|
28
28
|
get: jest.fn().mockResolvedValue(null),
|
|
29
29
|
save: jest.fn().mockResolvedValue({}),
|
|
@@ -34,27 +34,24 @@ describe('Dependency Injection Pattern', () => {
|
|
|
34
34
|
eventRegistry: {
|
|
35
35
|
getEmitter: jest.fn().mockReturnValue({
|
|
36
36
|
event: { subscribe: jest.fn() },
|
|
37
|
-
emit: jest.fn()
|
|
38
|
-
})
|
|
39
|
-
}
|
|
37
|
+
emit: jest.fn(),
|
|
38
|
+
}),
|
|
39
|
+
},
|
|
40
40
|
};
|
|
41
41
|
// Create table using new DI pattern
|
|
42
42
|
const table = new _1.Table(testMetaData, mockDeps);
|
|
43
43
|
// Verify table was created correctly
|
|
44
|
-
expect(table.tableName).toBe(
|
|
45
|
-
expect(table.primaryKeyName).toBe(
|
|
44
|
+
expect(table.tableName).toBe("TestTable");
|
|
45
|
+
expect(table.primaryKeyName).toBe("id");
|
|
46
46
|
// Verify schema works by parsing test data successfully
|
|
47
|
-
const testData = { id:
|
|
47
|
+
const testData = { id: "test-id", name: "test-name" };
|
|
48
48
|
expect(() => table.schema.parse(testData)).not.toThrow();
|
|
49
49
|
expect(table.metaData).toBe(testMetaData);
|
|
50
50
|
expect(table.dataSource).toBe(mockDeps.dataSource);
|
|
51
51
|
});
|
|
52
|
-
it(
|
|
52
|
+
it("should allow easy custom table extension with DI pattern", () => {
|
|
53
53
|
// Example custom table class
|
|
54
54
|
class CustomTable extends _1.Table {
|
|
55
|
-
constructor(metaData, deps) {
|
|
56
|
-
super(metaData, deps);
|
|
57
|
-
}
|
|
58
55
|
// Custom business method
|
|
59
56
|
async findByName(name) {
|
|
60
57
|
return this.list({ name });
|
|
@@ -62,9 +59,9 @@ describe('Dependency Injection Pattern', () => {
|
|
|
62
59
|
}
|
|
63
60
|
const mockDeps = {
|
|
64
61
|
dataSource: {
|
|
65
|
-
tableName:
|
|
66
|
-
primaryKeyName:
|
|
67
|
-
list: jest.fn().mockResolvedValue([{ id:
|
|
62
|
+
tableName: "CustomTable",
|
|
63
|
+
primaryKeyName: "id",
|
|
64
|
+
list: jest.fn().mockResolvedValue([{ id: "1", name: "test" }]),
|
|
68
65
|
get: jest.fn(),
|
|
69
66
|
save: jest.fn(),
|
|
70
67
|
insert: jest.fn(),
|
|
@@ -74,26 +71,26 @@ describe('Dependency Injection Pattern', () => {
|
|
|
74
71
|
eventRegistry: {
|
|
75
72
|
getEmitter: jest.fn().mockReturnValue({
|
|
76
73
|
event: { subscribe: jest.fn() },
|
|
77
|
-
emit: jest.fn()
|
|
78
|
-
})
|
|
79
|
-
}
|
|
74
|
+
emit: jest.fn(),
|
|
75
|
+
}),
|
|
76
|
+
},
|
|
80
77
|
};
|
|
81
78
|
const customTable = new CustomTable(testMetaData, mockDeps);
|
|
82
79
|
// Verify custom table works
|
|
83
80
|
expect(customTable).toBeInstanceOf(_1.Table);
|
|
84
81
|
expect(customTable).toBeInstanceOf(CustomTable);
|
|
85
82
|
// Verify custom method exists
|
|
86
|
-
expect(typeof customTable.findByName).toBe(
|
|
83
|
+
expect(typeof customTable.findByName).toBe("function");
|
|
87
84
|
});
|
|
88
|
-
it(
|
|
85
|
+
it("should create table dependencies using DataContext factory method", () => {
|
|
89
86
|
// Create mock DataContext
|
|
90
87
|
const mockUserContext = {
|
|
91
|
-
userId: () =>
|
|
88
|
+
userId: () => "test-user",
|
|
92
89
|
dataSourceFactory: jest.fn().mockReturnValue({
|
|
93
|
-
tableName:
|
|
94
|
-
primaryKeyName:
|
|
90
|
+
tableName: "TestTable",
|
|
91
|
+
primaryKeyName: "id",
|
|
95
92
|
list: jest.fn(),
|
|
96
|
-
})
|
|
93
|
+
}),
|
|
97
94
|
};
|
|
98
95
|
const dataContext = new data_context_1.DataContext(mockUserContext);
|
|
99
96
|
// Use factory method to create dependencies
|
|
@@ -104,12 +101,12 @@ describe('Dependency Injection Pattern', () => {
|
|
|
104
101
|
expect(deps.schema).toBe(testSchema); // Schema should be passed through when explicitly provided
|
|
105
102
|
expect(deps.eventRegistry).toBe(dataContext.eventRegistry);
|
|
106
103
|
});
|
|
107
|
-
it(
|
|
104
|
+
it("should compute schema from metaData when not provided in dependencies", () => {
|
|
108
105
|
// Create mock dependencies without schema
|
|
109
106
|
const mockDeps = {
|
|
110
107
|
dataSource: {
|
|
111
|
-
tableName:
|
|
112
|
-
primaryKeyName:
|
|
108
|
+
tableName: "TestTable",
|
|
109
|
+
primaryKeyName: "id",
|
|
113
110
|
list: jest.fn().mockResolvedValue([]),
|
|
114
111
|
get: jest.fn().mockResolvedValue(null),
|
|
115
112
|
save: jest.fn().mockResolvedValue({}),
|
|
@@ -120,55 +117,55 @@ describe('Dependency Injection Pattern', () => {
|
|
|
120
117
|
eventRegistry: {
|
|
121
118
|
getEmitter: jest.fn().mockReturnValue({
|
|
122
119
|
event: { subscribe: jest.fn() },
|
|
123
|
-
emit: jest.fn()
|
|
124
|
-
})
|
|
125
|
-
}
|
|
120
|
+
emit: jest.fn(),
|
|
121
|
+
}),
|
|
122
|
+
},
|
|
126
123
|
// Note: no schema provided
|
|
127
124
|
};
|
|
128
125
|
// Create table - schema should be computed from metaData.fields
|
|
129
126
|
const table = new _1.Table(testMetaData, mockDeps);
|
|
130
127
|
// Verify schema was computed correctly by testing it works
|
|
131
|
-
const testData = { id:
|
|
128
|
+
const testData = { id: "test-id", name: "test-name" };
|
|
132
129
|
expect(() => table.schema.parse(testData)).not.toThrow();
|
|
133
130
|
});
|
|
134
|
-
it(
|
|
135
|
-
// Create mock DataContext
|
|
131
|
+
it("should create tables using DataContext convenience method", () => {
|
|
132
|
+
// Create mock DataContext
|
|
136
133
|
const mockUserContext = {
|
|
137
|
-
userId: () =>
|
|
134
|
+
userId: () => "test-user",
|
|
138
135
|
dataSourceFactory: jest.fn().mockReturnValue({
|
|
139
|
-
tableName:
|
|
140
|
-
primaryKeyName:
|
|
136
|
+
tableName: "TestTable",
|
|
137
|
+
primaryKeyName: "id",
|
|
141
138
|
list: jest.fn(),
|
|
142
|
-
})
|
|
139
|
+
}),
|
|
143
140
|
};
|
|
144
141
|
const dataContext = new data_context_1.DataContext(mockUserContext);
|
|
145
142
|
// Use convenience method to create table
|
|
146
143
|
const table = dataContext.createTable(testMetaData, testSchema);
|
|
147
144
|
// Verify table was created correctly
|
|
148
145
|
expect(table).toBeInstanceOf(_1.Table);
|
|
149
|
-
expect(table.tableName).toBe(
|
|
146
|
+
expect(table.tableName).toBe("TestTable");
|
|
150
147
|
// Table merges fields-derived schema with code schema, so it's not the same reference
|
|
151
|
-
const testData = { id:
|
|
148
|
+
const testData = { id: "test-id", name: "test-name" };
|
|
152
149
|
expect(() => table.schema.parse(testData)).not.toThrow();
|
|
153
150
|
});
|
|
154
|
-
it(
|
|
151
|
+
it("should create tables through TableFactory using new DI pattern internally", () => {
|
|
155
152
|
// Create mock DataContext
|
|
156
153
|
const mockUserContext = {
|
|
157
|
-
userId: () =>
|
|
154
|
+
userId: () => "test-user",
|
|
158
155
|
dataSourceFactory: jest.fn().mockReturnValue({
|
|
159
|
-
tableName:
|
|
160
|
-
primaryKeyName:
|
|
156
|
+
tableName: "TestTable",
|
|
157
|
+
primaryKeyName: "id",
|
|
161
158
|
list: jest.fn(),
|
|
162
|
-
})
|
|
159
|
+
}),
|
|
163
160
|
};
|
|
164
161
|
const dataContext = new data_context_1.DataContext(mockUserContext);
|
|
165
162
|
// Use TableFactory (which should internally use DI pattern now)
|
|
166
163
|
const table = dataContext.tableContainer.getTable(testMetaData, testSchema);
|
|
167
164
|
// Verify table was created correctly through TableFactory
|
|
168
165
|
expect(table).toBeInstanceOf(_1.Table);
|
|
169
|
-
expect(table.tableName).toBe(
|
|
166
|
+
expect(table.tableName).toBe("TestTable");
|
|
170
167
|
// Table merges fields-derived schema with code schema, so it's not the same reference
|
|
171
|
-
expect(() => table.schema.parse({ id:
|
|
168
|
+
expect(() => table.schema.parse({ id: "test-id", name: "test-name" })).not.toThrow();
|
|
172
169
|
expect(table.metaData).toBe(testMetaData);
|
|
173
170
|
});
|
|
174
171
|
});
|
package/dist/data/orm/doc.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { type Observable } from "../../observable";
|
|
2
|
+
import type { Table } from "./table";
|
|
3
3
|
export type IDoc<T extends {
|
|
4
4
|
[key: string]: any;
|
|
5
5
|
}> = {
|
|
@@ -14,8 +14,8 @@ export type IDoc<T extends {
|
|
|
14
14
|
[K in keyof T]-?: Observable<T[K]>;
|
|
15
15
|
};
|
|
16
16
|
q: Observable<number>;
|
|
17
|
-
displayValue: (
|
|
18
|
-
primaryKey: (
|
|
17
|
+
displayValue: () => string;
|
|
18
|
+
primaryKey: () => string | number;
|
|
19
19
|
isNew: boolean;
|
|
20
20
|
hasChanges: () => boolean;
|
|
21
21
|
} & {
|
package/dist/data/orm/doc.js
CHANGED
|
@@ -5,17 +5,15 @@ const lodash_1 = require("lodash");
|
|
|
5
5
|
const observable_1 = require("../../observable");
|
|
6
6
|
function initDoc(data, table) {
|
|
7
7
|
const columns = [...table.metaData.fields];
|
|
8
|
-
// @ts-
|
|
8
|
+
// @ts-expect-error
|
|
9
9
|
const doc = {
|
|
10
10
|
isNew: true,
|
|
11
11
|
table,
|
|
12
12
|
q: (0, observable_1.observable)(0),
|
|
13
|
-
// @ts-ignore
|
|
14
13
|
qs: {},
|
|
15
14
|
load: async (objOrId) => {
|
|
16
15
|
let loadedFromDb = false;
|
|
17
|
-
if (typeof objOrId !==
|
|
18
|
-
// @ts-ignore
|
|
16
|
+
if (typeof objOrId !== "object") {
|
|
19
17
|
const id = objOrId || doc[table.metaData.primaryKeyName];
|
|
20
18
|
if (!id) {
|
|
21
19
|
return doc;
|
|
@@ -30,9 +28,9 @@ function initDoc(data, table) {
|
|
|
30
28
|
for (const fieldName of fieldNames) {
|
|
31
29
|
if (objOrId[fieldName] !== undefined) {
|
|
32
30
|
// note that this won't create new observables for fields that weren't in the original data
|
|
33
|
-
// @ts-
|
|
31
|
+
// @ts-expect-error
|
|
34
32
|
doc[fieldName] = objOrId[fieldName];
|
|
35
|
-
// @ts-
|
|
33
|
+
// @ts-expect-error
|
|
36
34
|
data[fieldName] = objOrId[fieldName];
|
|
37
35
|
}
|
|
38
36
|
}
|
|
@@ -45,7 +43,7 @@ function initDoc(data, table) {
|
|
|
45
43
|
toJS: () => {
|
|
46
44
|
const _data = (0, lodash_1.cloneDeep)(data);
|
|
47
45
|
for (const field of table.metaData.fields) {
|
|
48
|
-
// @ts-
|
|
46
|
+
// @ts-expect-error
|
|
49
47
|
_data[field.name] = doc[field.name];
|
|
50
48
|
}
|
|
51
49
|
return _data;
|
|
@@ -64,7 +62,7 @@ function initDoc(data, table) {
|
|
|
64
62
|
}
|
|
65
63
|
},
|
|
66
64
|
save: async () => {
|
|
67
|
-
|
|
65
|
+
const _data = doc.validate();
|
|
68
66
|
const src = await table.save(_data);
|
|
69
67
|
return doc.load(src).then(() => {
|
|
70
68
|
doc.isNew = false;
|
|
@@ -74,16 +72,15 @@ function initDoc(data, table) {
|
|
|
74
72
|
},
|
|
75
73
|
delete: async () => {
|
|
76
74
|
doc.q(0);
|
|
77
|
-
// @ts-ignore
|
|
78
75
|
await table.delete(doc[table.metaData.primaryKeyName]);
|
|
79
76
|
return doc;
|
|
80
77
|
},
|
|
81
78
|
displayValue: () => {
|
|
82
79
|
let displayValue = null; //table.entity.displayValue;
|
|
83
80
|
if (!displayValue) {
|
|
84
|
-
displayValue = table.metaData.fields.find(c => c.type ===
|
|
81
|
+
displayValue = table.metaData.fields.find((c) => c.type === "string")?.name;
|
|
85
82
|
}
|
|
86
|
-
return displayValue ||
|
|
83
|
+
return displayValue || "display value not configured";
|
|
87
84
|
// if (typeof displayValue === 'function') {
|
|
88
85
|
// return displayValue(doc);
|
|
89
86
|
// } else if (displayValue) {
|
|
@@ -92,33 +89,32 @@ function initDoc(data, table) {
|
|
|
92
89
|
// return doc[collection.primaryKey.name];
|
|
93
90
|
// }
|
|
94
91
|
},
|
|
95
|
-
// @ts-ignore
|
|
96
92
|
primaryKey: () => doc[table.metaData.primaryKeyName],
|
|
97
93
|
hasChanges: () => doc.isNew || doc.q() !== 0,
|
|
98
94
|
};
|
|
99
|
-
const fieldNames = (0, lodash_1.uniq)([...columns.map(c => c.name), ...Object.keys(data)]);
|
|
100
|
-
fieldNames.forEach(fieldName => {
|
|
95
|
+
const fieldNames = (0, lodash_1.uniq)([...columns.map((c) => c.name), ...Object.keys(data)]);
|
|
96
|
+
fieldNames.forEach((fieldName) => {
|
|
101
97
|
const fieldQ = (0, observable_1.observable)(data[fieldName]);
|
|
102
98
|
fieldQ.subscribe(() => {
|
|
103
|
-
// @ts-
|
|
99
|
+
// @ts-expect-error
|
|
104
100
|
data[fieldName] = fieldQ();
|
|
105
101
|
doc.q(doc.q() + 1);
|
|
106
102
|
});
|
|
107
|
-
// @ts-
|
|
103
|
+
// @ts-expect-error
|
|
108
104
|
doc.qs[fieldName] = fieldQ;
|
|
109
105
|
Object.defineProperty(doc, fieldName, {
|
|
110
106
|
get: () => {
|
|
111
107
|
return fieldQ();
|
|
112
108
|
},
|
|
113
|
-
set: value => {
|
|
114
|
-
// @ts-
|
|
109
|
+
set: (value) => {
|
|
110
|
+
// @ts-expect-error
|
|
115
111
|
data[fieldName] = value;
|
|
116
112
|
fieldQ(value);
|
|
117
|
-
}
|
|
113
|
+
},
|
|
118
114
|
});
|
|
119
115
|
});
|
|
120
116
|
return doc;
|
|
121
117
|
}
|
|
122
|
-
//@ts-
|
|
123
|
-
if (typeof window !==
|
|
118
|
+
//@ts-expect-error
|
|
119
|
+
if (typeof window !== "undefined")
|
|
124
120
|
window.initDoc = initDoc;
|
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const event_registry_1 = require("./event-registry");
|
|
4
|
-
describe(
|
|
4
|
+
describe("EventRegistry", () => {
|
|
5
5
|
let registry;
|
|
6
6
|
beforeEach(() => {
|
|
7
7
|
const mockDataContext = {
|
|
8
|
-
dataContextId:
|
|
8
|
+
dataContextId: "test-context",
|
|
9
9
|
};
|
|
10
10
|
registry = new event_registry_1.EventRegistry(mockDataContext);
|
|
11
11
|
});
|
|
12
|
-
it(
|
|
13
|
-
const emitter1 = registry.getEmitter(
|
|
14
|
-
const emitter2 = registry.getEmitter(
|
|
12
|
+
it("should return the same emitter for the same event name", () => {
|
|
13
|
+
const emitter1 = registry.getEmitter("test-event");
|
|
14
|
+
const emitter2 = registry.getEmitter("test-event");
|
|
15
15
|
expect(emitter1).toBe(emitter2);
|
|
16
16
|
expect(registry.getEmitterCount()).toBe(1);
|
|
17
17
|
});
|
|
18
|
-
it(
|
|
19
|
-
const emitter1 = registry.getEmitter(
|
|
20
|
-
const emitter2 = registry.getEmitter(
|
|
18
|
+
it("should return different emitters for different event names", () => {
|
|
19
|
+
const emitter1 = registry.getEmitter("event-1");
|
|
20
|
+
const emitter2 = registry.getEmitter("event-2");
|
|
21
21
|
expect(emitter1).not.toBe(emitter2);
|
|
22
22
|
expect(registry.getEmitterCount()).toBe(2);
|
|
23
23
|
});
|
|
24
|
-
it(
|
|
25
|
-
registry.getEmitter(
|
|
26
|
-
registry.getEmitter(
|
|
24
|
+
it("should clear all emitters", () => {
|
|
25
|
+
registry.getEmitter("event-1");
|
|
26
|
+
registry.getEmitter("event-2");
|
|
27
27
|
expect(registry.getEmitterCount()).toBe(2);
|
|
28
28
|
registry.clear();
|
|
29
29
|
expect(registry.getEmitterCount()).toBe(0);
|
|
30
30
|
});
|
|
31
|
-
it(
|
|
32
|
-
const emitter1 = registry.getEmitter(
|
|
33
|
-
const emitter2 = registry.getEmitter(
|
|
31
|
+
it("should handle event emission and subscription across shared emitters", async () => {
|
|
32
|
+
const emitter1 = registry.getEmitter("shared-event");
|
|
33
|
+
const emitter2 = registry.getEmitter("shared-event");
|
|
34
34
|
// They should be the same instance
|
|
35
35
|
expect(emitter1).toBe(emitter2);
|
|
36
36
|
// Test event flow
|
|
@@ -38,7 +38,7 @@ describe('EventRegistry', () => {
|
|
|
38
38
|
emitter1.event.subscribe((data) => {
|
|
39
39
|
receivedData = data;
|
|
40
40
|
});
|
|
41
|
-
await emitter2.emit(
|
|
42
|
-
expect(receivedData).toBe(
|
|
41
|
+
await emitter2.emit("test-data");
|
|
42
|
+
expect(receivedData).toBe("test-data");
|
|
43
43
|
});
|
|
44
44
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DataFilter } from "./data-query";
|
|
1
|
+
import type { DataFilter } from "./data-query";
|
|
2
2
|
import { Table } from "./table";
|
|
3
|
-
import { ITableMetaData } from "./types";
|
|
3
|
+
import type { ITableMetaData } from "./types";
|
|
4
4
|
export declare function arrayAsTable<T extends Record<string, any>>(ary: T[], opts?: Partial<ITableMetaData>): Table<T>;
|
|
5
5
|
/**
|
|
6
6
|
* WARNING: this is an incomplete implementation of applyFilterToItem
|
package/dist/data/orm/factory.js
CHANGED
|
@@ -3,34 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.arrayAsTable = arrayAsTable;
|
|
4
4
|
exports.applyFilterToItem = applyFilterToItem;
|
|
5
5
|
const lodash_1 = require("lodash");
|
|
6
|
-
const table_1 = require("./table");
|
|
7
6
|
const field_type_1 = require("../../types/field-type");
|
|
7
|
+
const table_1 = require("./table");
|
|
8
8
|
let inMemoryTableCount = 0;
|
|
9
9
|
function arrayAsTable(ary, opts = {}) {
|
|
10
10
|
let fields = opts.fields;
|
|
11
11
|
delete opts.fields;
|
|
12
12
|
if (!fields) {
|
|
13
|
-
const fieldNames = (0, lodash_1.uniq)(ary.
|
|
14
|
-
fields = fieldNames.map(name => {
|
|
15
|
-
const firstValue = ary.find(item => item[name] !== undefined && item[name] !== null)?.[name];
|
|
13
|
+
const fieldNames = (0, lodash_1.uniq)(ary.flatMap((item) => Object.keys(item)));
|
|
14
|
+
fields = fieldNames.map((name) => {
|
|
15
|
+
const firstValue = ary.find((item) => item[name] !== undefined && item[name] !== null)?.[name];
|
|
16
16
|
const valueType = typeof firstValue;
|
|
17
17
|
let dataType = field_type_1.FieldType.any;
|
|
18
|
-
if (valueType !==
|
|
18
|
+
if (valueType !== "object" && valueType !== "function" && valueType !== "symbol") {
|
|
19
19
|
dataType = valueType;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
const optional = false;
|
|
22
22
|
return {
|
|
23
23
|
name,
|
|
24
|
-
description:
|
|
24
|
+
description: "",
|
|
25
25
|
type: dataType,
|
|
26
|
-
optional
|
|
26
|
+
optional,
|
|
27
27
|
};
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
const metaData = {
|
|
31
31
|
name: `inMemoryTable_${inMemoryTableCount++}`,
|
|
32
|
-
description:
|
|
33
|
-
primaryKeyName: fields.find(f => f.type ===
|
|
32
|
+
description: "In-memory table",
|
|
33
|
+
primaryKeyName: fields.find((f) => f.type === "id")?.name || "id",
|
|
34
34
|
fields,
|
|
35
35
|
...opts,
|
|
36
36
|
};
|
|
@@ -38,7 +38,7 @@ function arrayAsTable(ary, opts = {}) {
|
|
|
38
38
|
tableName: metaData.name,
|
|
39
39
|
primaryKeyName: metaData.primaryKeyName,
|
|
40
40
|
list: async (filter = {}, opts = {}) => {
|
|
41
|
-
const filteredArray = ary.filter(item => applyFilterToItem(item, filter));
|
|
41
|
+
const filteredArray = ary.filter((item) => applyFilterToItem(item, filter));
|
|
42
42
|
if (opts.pageSize) {
|
|
43
43
|
const page = opts.page || 1;
|
|
44
44
|
const pageSize = opts.pageSize;
|
|
@@ -48,16 +48,16 @@ function arrayAsTable(ary, opts = {}) {
|
|
|
48
48
|
return [...filteredArray];
|
|
49
49
|
},
|
|
50
50
|
count: async (filter = {}) => {
|
|
51
|
-
return ary.filter(item => applyFilterToItem(item, filter)).length;
|
|
51
|
+
return ary.filter((item) => applyFilterToItem(item, filter)).length;
|
|
52
52
|
},
|
|
53
|
-
get: async (id) => ary.find(item => item[metaData.primaryKeyName] === id),
|
|
53
|
+
get: async (id) => ary.find((item) => item[metaData.primaryKeyName] === id),
|
|
54
54
|
save: async (record) => {
|
|
55
|
-
const existing = ary.find(item => item[metaData.primaryKeyName] === record[metaData.primaryKeyName]);
|
|
55
|
+
const existing = ary.find((item) => item[metaData.primaryKeyName] === record[metaData.primaryKeyName]);
|
|
56
56
|
if (existing) {
|
|
57
|
-
return dataSource.update(record);
|
|
57
|
+
return dataSource.update?.(record);
|
|
58
58
|
}
|
|
59
59
|
else {
|
|
60
|
-
return dataSource.insert(record);
|
|
60
|
+
return dataSource.insert?.(record);
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
insert: async (record) => {
|
|
@@ -65,7 +65,7 @@ function arrayAsTable(ary, opts = {}) {
|
|
|
65
65
|
return record;
|
|
66
66
|
},
|
|
67
67
|
update: async (record) => {
|
|
68
|
-
const existing = ary.find(item => item[metaData.primaryKeyName] === record[metaData.primaryKeyName]);
|
|
68
|
+
const existing = ary.find((item) => item[metaData.primaryKeyName] === record[metaData.primaryKeyName]);
|
|
69
69
|
if (existing) {
|
|
70
70
|
Object.assign(existing, record);
|
|
71
71
|
}
|
|
@@ -75,22 +75,22 @@ function arrayAsTable(ary, opts = {}) {
|
|
|
75
75
|
return record;
|
|
76
76
|
},
|
|
77
77
|
delete: async (id) => {
|
|
78
|
-
if (typeof id ===
|
|
78
|
+
if (typeof id === "object") {
|
|
79
79
|
id = id[metaData.primaryKeyName];
|
|
80
80
|
}
|
|
81
|
-
const index = ary.findIndex(item => item[metaData.primaryKeyName] === id);
|
|
81
|
+
const index = ary.findIndex((item) => item[metaData.primaryKeyName] === id);
|
|
82
82
|
if (index >= 0) {
|
|
83
83
|
ary.splice(index, 1);
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
86
|
};
|
|
87
87
|
const mockDataContextForRegistry = {
|
|
88
|
-
dataContextId:
|
|
88
|
+
dataContextId: "array-table-context",
|
|
89
89
|
};
|
|
90
|
-
const eventRegistry = new (require(
|
|
90
|
+
const eventRegistry = new (require("./event-registry").EventRegistry)(mockDataContextForRegistry);
|
|
91
91
|
const deps = {
|
|
92
92
|
dataSource,
|
|
93
|
-
eventRegistry
|
|
93
|
+
eventRegistry,
|
|
94
94
|
};
|
|
95
95
|
return new table_1.Table(metaData, deps);
|
|
96
96
|
}
|
|
@@ -103,34 +103,34 @@ function applyFilterToItem(item, filter) {
|
|
|
103
103
|
return true;
|
|
104
104
|
}
|
|
105
105
|
for (const key in filter) {
|
|
106
|
-
if (key ===
|
|
106
|
+
if (key === "$and") {
|
|
107
107
|
return _filter.$and.every((subFilter) => applyFilterToItem(item, subFilter));
|
|
108
108
|
}
|
|
109
|
-
if (key ===
|
|
109
|
+
if (key === "$or") {
|
|
110
110
|
return _filter.$or.some((subFilter) => applyFilterToItem(item, subFilter));
|
|
111
111
|
}
|
|
112
|
-
if (key ===
|
|
112
|
+
if (key === "$lt") {
|
|
113
113
|
return item < _filter.$lt;
|
|
114
114
|
}
|
|
115
|
-
if (key ===
|
|
115
|
+
if (key === "$lte") {
|
|
116
116
|
return item <= _filter.$lte;
|
|
117
117
|
}
|
|
118
|
-
if (key ===
|
|
118
|
+
if (key === "$gt") {
|
|
119
119
|
return item > _filter.$gt;
|
|
120
120
|
}
|
|
121
|
-
if (key ===
|
|
121
|
+
if (key === "$gte") {
|
|
122
122
|
return item >= _filter.$gte;
|
|
123
123
|
}
|
|
124
|
-
if (key ===
|
|
124
|
+
if (key === "$ne") {
|
|
125
125
|
return item !== _filter.$ne;
|
|
126
126
|
}
|
|
127
|
-
if (key ===
|
|
127
|
+
if (key === "$in") {
|
|
128
128
|
return _filter.$in.includes(item);
|
|
129
129
|
}
|
|
130
|
-
if (key ===
|
|
130
|
+
if (key === "$nin") {
|
|
131
131
|
return !_filter.$nin.includes(item);
|
|
132
132
|
}
|
|
133
|
-
if (key.startsWith(
|
|
133
|
+
if (key.startsWith("$")) {
|
|
134
134
|
throw new Error(`Unsupported filter key: ${key}`);
|
|
135
135
|
}
|
|
136
136
|
const subFilter = _filter[key];
|
|
@@ -138,7 +138,7 @@ function applyFilterToItem(item, filter) {
|
|
|
138
138
|
if ((0, lodash_1.isArray)(subFilter)) {
|
|
139
139
|
return subFilter.includes(value);
|
|
140
140
|
}
|
|
141
|
-
if (typeof subFilter ===
|
|
141
|
+
if (typeof subFilter === "object") {
|
|
142
142
|
return applyFilterToItem(value, subFilter);
|
|
143
143
|
}
|
|
144
144
|
return value === subFilter;
|
package/dist/data/orm/index.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
export * from "./client-proxy.data-source";
|
|
2
|
+
export * from "./cursor";
|
|
1
3
|
export * from "./data-query";
|
|
2
|
-
export * from "./
|
|
4
|
+
export * from "./decorators";
|
|
3
5
|
export * from "./doc";
|
|
6
|
+
export * from "./event-registry";
|
|
4
7
|
export * from "./factory";
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./table-dependencies";
|
|
7
|
-
export * from "./types";
|
|
8
|
+
export * from "./multi-cursors";
|
|
8
9
|
export * from "./sql.data-source";
|
|
9
|
-
export * from "./
|
|
10
|
-
export * from "./table-container";
|
|
10
|
+
export * from "./sql-db";
|
|
11
11
|
export * from "./subscribable.data-source";
|
|
12
|
-
export * from "./
|
|
12
|
+
export * from "./table";
|
|
13
|
+
export * from "./table-container";
|
|
13
14
|
export * from "./table-definitions.type";
|
|
14
|
-
export * from "./
|
|
15
|
-
export * from "./
|
|
16
|
-
export * from "./decorators";
|
|
15
|
+
export * from "./table-dependencies";
|
|
16
|
+
export * from "./types";
|