@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.
Files changed (210) hide show
  1. package/dist/context/data-context.d.ts +4 -4
  2. package/dist/context/data-context.js +1 -1
  3. package/dist/context/index.d.ts +3 -3
  4. package/dist/context/index.js +4 -0
  5. package/dist/context/user-context-singleton.js +13 -14
  6. package/dist/context/user-context.d.ts +4 -4
  7. package/dist/context/user-context.js +48 -31
  8. package/dist/data/assistants.d.ts +1 -1
  9. package/dist/data/assistants.js +35 -24
  10. package/dist/data/change-tracking.d.ts +8 -8
  11. package/dist/data/change-tracking.js +45 -39
  12. package/dist/data/channels.js +5 -5
  13. package/dist/data/data-locks.d.ts +2 -2
  14. package/dist/data/data-locks.js +21 -23
  15. package/dist/data/data-locks.test.js +73 -75
  16. package/dist/data/device-sync-info.d.ts +1 -1
  17. package/dist/data/device-sync-info.js +4 -4
  18. package/dist/data/devices.d.ts +1 -1
  19. package/dist/data/devices.js +9 -12
  20. package/dist/data/embeddings.js +14 -11
  21. package/dist/data/files/file-read-stream.d.ts +2 -2
  22. package/dist/data/files/file-read-stream.js +23 -14
  23. package/dist/data/files/file-write-stream.d.ts +2 -2
  24. package/dist/data/files/file-write-stream.js +8 -8
  25. package/dist/data/files/file.types.d.ts +2 -2
  26. package/dist/data/files/file.types.js +17 -11
  27. package/dist/data/files/files.d.ts +6 -6
  28. package/dist/data/files/files.js +17 -19
  29. package/dist/data/files/files.test.js +213 -214
  30. package/dist/data/files/index.d.ts +4 -4
  31. package/dist/data/files/index.js +4 -4
  32. package/dist/data/group-member-roles.js +2 -2
  33. package/dist/data/group-members.d.ts +5 -5
  34. package/dist/data/group-members.js +27 -18
  35. package/dist/data/group-members.test.js +73 -73
  36. package/dist/data/group-permissions.d.ts +3 -3
  37. package/dist/data/group-permissions.js +13 -11
  38. package/dist/data/group-share.d.ts +2 -2
  39. package/dist/data/group-share.js +29 -24
  40. package/dist/data/groups.d.ts +4 -4
  41. package/dist/data/groups.js +27 -19
  42. package/dist/data/groups.test.js +44 -44
  43. package/dist/data/index.d.ts +6 -6
  44. package/dist/data/index.js +6 -6
  45. package/dist/data/knowledge/peer-types.js +9 -9
  46. package/dist/data/messages.d.ts +5 -5
  47. package/dist/data/messages.js +43 -30
  48. package/dist/data/orm/client-proxy.data-source.d.ts +4 -4
  49. package/dist/data/orm/client-proxy.data-source.js +10 -12
  50. package/dist/data/orm/cursor.d.ts +1 -1
  51. package/dist/data/orm/cursor.js +2 -2
  52. package/dist/data/orm/cursor.test.js +92 -93
  53. package/dist/data/orm/data-query.d.ts +3 -3
  54. package/dist/data/orm/data-query.js +24 -18
  55. package/dist/data/orm/data-query.mongo.d.ts +1 -1
  56. package/dist/data/orm/data-query.mongo.js +49 -51
  57. package/dist/data/orm/data-query.mongo.test.js +173 -204
  58. package/dist/data/orm/data-query.sqlite.d.ts +1 -1
  59. package/dist/data/orm/data-query.sqlite.js +84 -73
  60. package/dist/data/orm/data-query.sqlite.test.js +164 -176
  61. package/dist/data/orm/data-query.test.js +216 -224
  62. package/dist/data/orm/decorators.js +3 -3
  63. package/dist/data/orm/dependency-injection.test.js +53 -56
  64. package/dist/data/orm/doc.d.ts +4 -4
  65. package/dist/data/orm/doc.js +17 -21
  66. package/dist/data/orm/event-registry.d.ts +1 -1
  67. package/dist/data/orm/event-registry.test.js +16 -16
  68. package/dist/data/orm/factory.d.ts +2 -2
  69. package/dist/data/orm/factory.js +33 -33
  70. package/dist/data/orm/index.d.ts +10 -10
  71. package/dist/data/orm/index.js +10 -10
  72. package/dist/data/orm/multi-cursors.d.ts +1 -1
  73. package/dist/data/orm/multi-cursors.js +6 -6
  74. package/dist/data/orm/multi-cursors.test.js +152 -144
  75. package/dist/data/orm/sql.data-source.d.ts +7 -7
  76. package/dist/data/orm/sql.data-source.js +88 -93
  77. package/dist/data/orm/sql.data-source.test.js +109 -101
  78. package/dist/data/orm/subscribable.data-source.d.ts +4 -4
  79. package/dist/data/orm/subscribable.data-source.js +5 -5
  80. package/dist/data/orm/table-container-events.test.js +34 -26
  81. package/dist/data/orm/table-container.d.ts +6 -6
  82. package/dist/data/orm/table-container.js +33 -21
  83. package/dist/data/orm/table-container.test.js +64 -53
  84. package/dist/data/orm/table-definitions.system.d.ts +3 -3
  85. package/dist/data/orm/table-definitions.system.js +3 -3
  86. package/dist/data/orm/table-definitions.type.d.ts +5 -5
  87. package/dist/data/orm/table-dependencies.d.ts +2 -2
  88. package/dist/data/orm/table.d.ts +5 -5
  89. package/dist/data/orm/table.event-source.test.js +105 -115
  90. package/dist/data/orm/table.js +35 -34
  91. package/dist/data/orm/types.d.ts +3 -3
  92. package/dist/data/orm/types.js +26 -25
  93. package/dist/data/orm/types.test.js +166 -92
  94. package/dist/data/package-permissions.d.ts +1 -1
  95. package/dist/data/package-permissions.js +2 -2
  96. package/dist/data/package-version-permissions.d.ts +1 -1
  97. package/dist/data/package-version-permissions.js +2 -2
  98. package/dist/data/package-versions.d.ts +9 -9
  99. package/dist/data/package-versions.js +47 -33
  100. package/dist/data/packages.d.ts +2 -2
  101. package/dist/data/packages.js +36 -18
  102. package/dist/data/packages.utils.d.ts +2 -2
  103. package/dist/data/packages.utils.js +4 -4
  104. package/dist/data/persistent-vars.d.ts +15 -15
  105. package/dist/data/persistent-vars.js +165 -154
  106. package/dist/data/table-definitions-table.d.ts +5 -5
  107. package/dist/data/table-definitions-table.js +13 -12
  108. package/dist/data/tool-tests.js +6 -6
  109. package/dist/data/tools.js +29 -19
  110. package/dist/data/user-permissions.d.ts +1 -1
  111. package/dist/data/user-permissions.js +5 -5
  112. package/dist/data/user-permissions.test.js +90 -88
  113. package/dist/data/user-trust-levels.js +10 -10
  114. package/dist/data/users.d.ts +4 -4
  115. package/dist/data/users.js +16 -15
  116. package/dist/data/voice-messages.d.ts +2 -2
  117. package/dist/data/voice-messages.js +13 -13
  118. package/dist/data/welcome-modal.pvar.js +3 -1
  119. package/dist/data/workflow-logs.js +26 -18
  120. package/dist/data/workflow-runs.d.ts +6 -6
  121. package/dist/data/workflow-runs.js +70 -44
  122. package/dist/data/workflows.d.ts +2 -2
  123. package/dist/data/workflows.js +7 -9
  124. package/dist/device/binary-peer-connection-v2.d.ts +7 -7
  125. package/dist/device/binary-peer-connection-v2.js +32 -28
  126. package/dist/device/binary-peer-connection-v2.test.js +80 -67
  127. package/dist/device/binary-peer-connection.d.ts +7 -7
  128. package/dist/device/binary-peer-connection.js +29 -28
  129. package/dist/device/binary-peer-connection.test.js +35 -31
  130. package/dist/device/connection.d.ts +5 -5
  131. package/dist/device/connection.js +59 -48
  132. package/dist/device/connection.test.js +74 -68
  133. package/dist/device/device-election.d.ts +2 -2
  134. package/dist/device/device-election.js +25 -20
  135. package/dist/device/device-election.test.js +35 -36
  136. package/dist/device/device.d.ts +2 -2
  137. package/dist/device/device.js +10 -4
  138. package/dist/device/device.test.js +16 -17
  139. package/dist/device/get-trust-level-fn.d.ts +2 -2
  140. package/dist/device/get-trust-level-fn.js +22 -11
  141. package/dist/device/get-trust-level-fn.test.js +58 -58
  142. package/dist/device/socket-io-binary-peer.d.ts +1 -1
  143. package/dist/device/socket-io-binary-peer.js +16 -13
  144. package/dist/device/socket.type.d.ts +2 -2
  145. package/dist/device/streamed-socket.d.ts +2 -2
  146. package/dist/device/streamed-socket.js +8 -8
  147. package/dist/device/streamed-socket.test.js +40 -40
  148. package/dist/device/tx-encoding.test.js +77 -77
  149. package/dist/events.d.ts +1 -1
  150. package/dist/events.js +5 -2
  151. package/dist/group-invite/group-invite.js +110 -19
  152. package/dist/group-invite/group-invite.pvars.d.ts +2 -2
  153. package/dist/group-invite/group-invite.pvars.js +21 -13
  154. package/dist/group-invite/group-invite.types.d.ts +1 -1
  155. package/dist/group-invite/index.d.ts +3 -3
  156. package/dist/group-invite/index.js +1 -1
  157. package/dist/index.d.ts +25 -24
  158. package/dist/index.js +30 -25
  159. package/dist/keys.d.ts +3 -3
  160. package/dist/keys.js +31 -30
  161. package/dist/keys.test.js +69 -61
  162. package/dist/logging/console-logger.d.ts +1 -1
  163. package/dist/logging/console-logger.js +35 -40
  164. package/dist/logging/console-logger.test.js +115 -115
  165. package/dist/logging/console-logs.table.d.ts +3 -3
  166. package/dist/logging/console-logs.table.js +28 -23
  167. package/dist/mentions.js +16 -12
  168. package/dist/observable.d.ts +2 -2
  169. package/dist/observable.js +15 -9
  170. package/dist/observable.test.js +47 -47
  171. package/dist/package-loader/get-require.js +3 -4
  172. package/dist/package-loader/package-loader.d.ts +2 -2
  173. package/dist/package-loader/package-loader.js +52 -34
  174. package/dist/peers-ui/peers-ui.d.ts +2 -2
  175. package/dist/peers-ui/peers-ui.js +2 -4
  176. package/dist/peers-ui/peers-ui.types.d.ts +3 -3
  177. package/dist/peers-ui/peers-ui.types.js +0 -1
  178. package/dist/rpc-types.d.ts +61 -59
  179. package/dist/rpc-types.js +61 -55
  180. package/dist/serial-json.d.ts +1 -1
  181. package/dist/serial-json.js +50 -43
  182. package/dist/serial-json.test.js +22 -22
  183. package/dist/system-ids.js +8 -8
  184. package/dist/tools/index.d.ts +1 -1
  185. package/dist/tools/tools-factory.d.ts +1 -1
  186. package/dist/tools/tools-factory.js +2 -2
  187. package/dist/types/assistant-runner-args.d.ts +3 -3
  188. package/dist/types/peer-device.d.ts +1 -1
  189. package/dist/types/peers-package.d.ts +3 -3
  190. package/dist/types/workflow-logger.d.ts +1 -1
  191. package/dist/types/workflow-run-context.d.ts +4 -4
  192. package/dist/types/workflow.d.ts +4 -4
  193. package/dist/types/workflow.js +27 -14
  194. package/dist/types/zod-types.d.ts +2 -1
  195. package/dist/types/zod-types.js +9 -3
  196. package/dist/user-connect/connection-code.d.ts +1 -1
  197. package/dist/user-connect/connection-code.js +7 -7
  198. package/dist/user-connect/connection-code.test.js +106 -106
  199. package/dist/user-connect/index.d.ts +3 -3
  200. package/dist/user-connect/index.js +1 -1
  201. package/dist/user-connect/user-connect.pvars.js +13 -11
  202. package/dist/user-connect/user-connect.types.d.ts +3 -3
  203. package/dist/users.query.d.ts +2 -2
  204. package/dist/users.query.js +40 -30
  205. package/dist/utils.d.ts +2 -2
  206. package/dist/utils.js +34 -32
  207. package/dist/utils.test.js +12 -8
  208. package/dist/workflow-log-formatter.d.ts +1 -1
  209. package/dist/workflow-log-formatter.js +17 -18
  210. 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 function (target, context) {
16
- if (context.kind === 'method' && rpc_types_1.isClient) {
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
- describe('Dependency Injection Pattern', () => {
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: 'TestTable',
14
- description: 'Test table for DI pattern',
15
- primaryKeyName: 'id',
13
+ name: "TestTable",
14
+ description: "Test table for DI pattern",
15
+ primaryKeyName: "id",
16
16
  fields: [
17
- { name: 'id', type: field_type_1.FieldType.string, description: 'ID field' },
18
- { name: 'name', type: field_type_1.FieldType.string, description: 'Name field' },
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('should create table using new DI constructor', () => {
21
+ it("should create table using new DI constructor", () => {
22
22
  // Create mock dependencies
23
23
  const mockDeps = {
24
24
  dataSource: {
25
- tableName: 'TestTable',
26
- primaryKeyName: 'id',
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('TestTable');
45
- expect(table.primaryKeyName).toBe('id');
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: 'test-id', name: 'test-name' };
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('should allow easy custom table extension with DI pattern', () => {
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: 'CustomTable',
66
- primaryKeyName: 'id',
67
- list: jest.fn().mockResolvedValue([{ id: '1', name: 'test' }]),
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('function');
83
+ expect(typeof customTable.findByName).toBe("function");
87
84
  });
88
- it('should create table dependencies using DataContext factory method', () => {
85
+ it("should create table dependencies using DataContext factory method", () => {
89
86
  // Create mock DataContext
90
87
  const mockUserContext = {
91
- userId: () => 'test-user',
88
+ userId: () => "test-user",
92
89
  dataSourceFactory: jest.fn().mockReturnValue({
93
- tableName: 'TestTable',
94
- primaryKeyName: 'id',
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('should compute schema from metaData when not provided in dependencies', () => {
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: 'TestTable',
112
- primaryKeyName: 'id',
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: 'test-id', name: 'test-name' };
128
+ const testData = { id: "test-id", name: "test-name" };
132
129
  expect(() => table.schema.parse(testData)).not.toThrow();
133
130
  });
134
- it('should create tables using DataContext convenience method', () => {
135
- // Create mock DataContext
131
+ it("should create tables using DataContext convenience method", () => {
132
+ // Create mock DataContext
136
133
  const mockUserContext = {
137
- userId: () => 'test-user',
134
+ userId: () => "test-user",
138
135
  dataSourceFactory: jest.fn().mockReturnValue({
139
- tableName: 'TestTable',
140
- primaryKeyName: 'id',
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('TestTable');
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: 'test-id', name: 'test-name' };
148
+ const testData = { id: "test-id", name: "test-name" };
152
149
  expect(() => table.schema.parse(testData)).not.toThrow();
153
150
  });
154
- it('should create tables through TableFactory using new DI pattern internally', () => {
151
+ it("should create tables through TableFactory using new DI pattern internally", () => {
155
152
  // Create mock DataContext
156
153
  const mockUserContext = {
157
- userId: () => 'test-user',
154
+ userId: () => "test-user",
158
155
  dataSourceFactory: jest.fn().mockReturnValue({
159
- tableName: 'TestTable',
160
- primaryKeyName: 'id',
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('TestTable');
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: 'test-id', name: 'test-name' })).not.toThrow();
168
+ expect(() => table.schema.parse({ id: "test-id", name: "test-name" })).not.toThrow();
172
169
  expect(table.metaData).toBe(testMetaData);
173
170
  });
174
171
  });
@@ -1,5 +1,5 @@
1
- import { Table } from "./table";
2
- import { Observable } from "../../observable";
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: (() => string);
18
- primaryKey: (() => string | number);
17
+ displayValue: () => string;
18
+ primaryKey: () => string | number;
19
19
  isNew: boolean;
20
20
  hasChanges: () => boolean;
21
21
  } & {
@@ -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-ignore
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 !== 'object') {
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-ignore
31
+ // @ts-expect-error
34
32
  doc[fieldName] = objOrId[fieldName];
35
- // @ts-ignore
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-ignore
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
- let _data = doc.validate();
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 === 'string')?.name;
81
+ displayValue = table.metaData.fields.find((c) => c.type === "string")?.name;
85
82
  }
86
- return displayValue || 'display value not configured';
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-ignore
99
+ // @ts-expect-error
104
100
  data[fieldName] = fieldQ();
105
101
  doc.q(doc.q() + 1);
106
102
  });
107
- // @ts-ignore
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-ignore
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-ignore
123
- if (typeof window !== 'undefined')
118
+ //@ts-expect-error
119
+ if (typeof window !== "undefined")
124
120
  window.initDoc = initDoc;
@@ -1,4 +1,4 @@
1
- import { Emitter } from '../../events';
1
+ import { Emitter } from "../../events";
2
2
  /**
3
3
  * Registry for managing shared event emitters across table instances.
4
4
  * Ensures that tables with the same name share the same event emitter,
@@ -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('EventRegistry', () => {
4
+ describe("EventRegistry", () => {
5
5
  let registry;
6
6
  beforeEach(() => {
7
7
  const mockDataContext = {
8
- dataContextId: 'test-context'
8
+ dataContextId: "test-context",
9
9
  };
10
10
  registry = new event_registry_1.EventRegistry(mockDataContext);
11
11
  });
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');
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('should return different emitters for different event names', () => {
19
- const emitter1 = registry.getEmitter('event-1');
20
- const emitter2 = registry.getEmitter('event-2');
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('should clear all emitters', () => {
25
- registry.getEmitter('event-1');
26
- registry.getEmitter('event-2');
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('should handle event emission and subscription across shared emitters', async () => {
32
- const emitter1 = registry.getEmitter('shared-event');
33
- const emitter2 = registry.getEmitter('shared-event');
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('test-data');
42
- expect(receivedData).toBe('test-data');
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
@@ -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.map(item => Object.keys(item)).flat());
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 !== 'object' && valueType !== 'function' && valueType !== 'symbol') {
18
+ if (valueType !== "object" && valueType !== "function" && valueType !== "symbol") {
19
19
  dataType = valueType;
20
20
  }
21
- let optional = false;
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: 'In-memory table',
33
- primaryKeyName: fields.find(f => f.type === 'id')?.name || 'id',
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 === 'object') {
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: 'array-table-context'
88
+ dataContextId: "array-table-context",
89
89
  };
90
- const eventRegistry = new (require('./event-registry').EventRegistry)(mockDataContextForRegistry);
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 === '$and') {
106
+ if (key === "$and") {
107
107
  return _filter.$and.every((subFilter) => applyFilterToItem(item, subFilter));
108
108
  }
109
- if (key === '$or') {
109
+ if (key === "$or") {
110
110
  return _filter.$or.some((subFilter) => applyFilterToItem(item, subFilter));
111
111
  }
112
- if (key === '$lt') {
112
+ if (key === "$lt") {
113
113
  return item < _filter.$lt;
114
114
  }
115
- if (key === '$lte') {
115
+ if (key === "$lte") {
116
116
  return item <= _filter.$lte;
117
117
  }
118
- if (key === '$gt') {
118
+ if (key === "$gt") {
119
119
  return item > _filter.$gt;
120
120
  }
121
- if (key === '$gte') {
121
+ if (key === "$gte") {
122
122
  return item >= _filter.$gte;
123
123
  }
124
- if (key === '$ne') {
124
+ if (key === "$ne") {
125
125
  return item !== _filter.$ne;
126
126
  }
127
- if (key === '$in') {
127
+ if (key === "$in") {
128
128
  return _filter.$in.includes(item);
129
129
  }
130
- if (key === '$nin') {
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 === 'object') {
141
+ if (typeof subFilter === "object") {
142
142
  return applyFilterToItem(value, subFilter);
143
143
  }
144
144
  return value === subFilter;
@@ -1,16 +1,16 @@
1
+ export * from "./client-proxy.data-source";
2
+ export * from "./cursor";
1
3
  export * from "./data-query";
2
- export * from "./sql-db";
4
+ export * from "./decorators";
3
5
  export * from "./doc";
6
+ export * from "./event-registry";
4
7
  export * from "./factory";
5
- export * from "./table";
6
- export * from "./table-dependencies";
7
- export * from "./types";
8
+ export * from "./multi-cursors";
8
9
  export * from "./sql.data-source";
9
- export * from "./client-proxy.data-source";
10
- export * from "./table-container";
10
+ export * from "./sql-db";
11
11
  export * from "./subscribable.data-source";
12
- export * from "./event-registry";
12
+ export * from "./table";
13
+ export * from "./table-container";
13
14
  export * from "./table-definitions.type";
14
- export * from "./multi-cursors";
15
- export * from "./cursor";
16
- export * from "./decorators";
15
+ export * from "./table-dependencies";
16
+ export * from "./types";