@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
|
@@ -22,51 +22,51 @@ class SQLDataSource {
|
|
|
22
22
|
this.schema = schema;
|
|
23
23
|
this.tableName = (0, utils_1.getFullTableName)(metaData);
|
|
24
24
|
this.primaryKeyName = metaData.primaryKeyName;
|
|
25
|
-
const primaryKeyIsValid = metaData.fields.find(f => f.name === metaData.primaryKeyName);
|
|
25
|
+
const primaryKeyIsValid = metaData.fields.find((f) => f.name === metaData.primaryKeyName);
|
|
26
26
|
if (!primaryKeyIsValid) {
|
|
27
27
|
throw new Error(`Table "${this.tableName}", primary key "${metaData.primaryKeyName}" is not a valid field name`);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
buildTableSql() {
|
|
31
|
-
|
|
31
|
+
const fieldsSql = [];
|
|
32
32
|
for (const field of this.metaData.fields) {
|
|
33
33
|
let sqlType = "";
|
|
34
34
|
switch (field.type) {
|
|
35
|
-
case
|
|
35
|
+
case "id":
|
|
36
36
|
// consider using: `id TEXT NOT NULL CHECK (length(id) = 25)
|
|
37
|
-
sqlType =
|
|
37
|
+
sqlType = "TEXT";
|
|
38
38
|
break;
|
|
39
|
-
case
|
|
40
|
-
sqlType =
|
|
39
|
+
case "string":
|
|
40
|
+
sqlType = "TEXT";
|
|
41
41
|
break;
|
|
42
|
-
case
|
|
43
|
-
sqlType =
|
|
42
|
+
case "number":
|
|
43
|
+
sqlType = "REAL";
|
|
44
44
|
break;
|
|
45
|
-
case
|
|
46
|
-
sqlType =
|
|
45
|
+
case "boolean":
|
|
46
|
+
sqlType = "INTEGER";
|
|
47
47
|
break;
|
|
48
|
-
case
|
|
49
|
-
sqlType =
|
|
48
|
+
case "Date":
|
|
49
|
+
sqlType = "TEXT";
|
|
50
50
|
break;
|
|
51
|
-
case
|
|
52
|
-
sqlType =
|
|
51
|
+
case "object":
|
|
52
|
+
sqlType = "TEXT";
|
|
53
53
|
break;
|
|
54
54
|
default:
|
|
55
|
-
sqlType =
|
|
55
|
+
sqlType = "TEXT";
|
|
56
56
|
}
|
|
57
|
-
let options = field.optional ?
|
|
57
|
+
let options = field.optional ? "NULL" : "NOT NULL";
|
|
58
58
|
if (field.name === this.metaData.primaryKeyName) {
|
|
59
|
-
options +=
|
|
59
|
+
options += " PRIMARY KEY";
|
|
60
60
|
}
|
|
61
61
|
fieldsSql.push(`"${field.name}" ${sqlType} ${options}`);
|
|
62
62
|
}
|
|
63
63
|
// const fields = this.dataType.fields.map(f => `${f.name} ${f.type}`).join(', ');
|
|
64
|
-
const fields = fieldsSql.join(
|
|
64
|
+
const fields = fieldsSql.join(",\n");
|
|
65
65
|
const sql = [
|
|
66
66
|
`CREATE TABLE IF NOT EXISTS "${this.tableName}" (`,
|
|
67
67
|
` ${fields}`,
|
|
68
68
|
`) WITHOUT ROWID`,
|
|
69
|
-
].join(
|
|
69
|
+
].join("\n");
|
|
70
70
|
return sql;
|
|
71
71
|
}
|
|
72
72
|
async ensureTableAndIndexesExist() {
|
|
@@ -77,19 +77,21 @@ class SQLDataSource {
|
|
|
77
77
|
// create indexes if they don't exist
|
|
78
78
|
if (this.metaData.indexes) {
|
|
79
79
|
for (const index of this.metaData.indexes) {
|
|
80
|
-
let fieldNames =
|
|
81
|
-
const fields = index.fields
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
let fieldNames = "";
|
|
81
|
+
const fields = index.fields
|
|
82
|
+
.map((f) => {
|
|
83
|
+
if (typeof f === "string") {
|
|
84
|
+
fieldNames += `_${f}`;
|
|
84
85
|
return f;
|
|
85
86
|
}
|
|
86
87
|
else {
|
|
87
|
-
fieldNames +=
|
|
88
|
+
fieldNames += `_${f.name}`;
|
|
88
89
|
return `${f.name} ${f.order}`;
|
|
89
90
|
}
|
|
90
|
-
})
|
|
91
|
+
})
|
|
92
|
+
.join(", ");
|
|
91
93
|
const hash = (0, utils_1.simpleHash)(JSON.stringify(index));
|
|
92
|
-
const unique = index.unique ?
|
|
94
|
+
const unique = index.unique ? "UNIQUE" : "";
|
|
93
95
|
const indexName = `${this.tableName}_${fieldNames}_${hash}`;
|
|
94
96
|
indexNames.push(indexName);
|
|
95
97
|
const sql = `CREATE ${unique} INDEX IF NOT EXISTS "${indexName}" ON "${this.tableName}"(${fields});`;
|
|
@@ -105,7 +107,7 @@ class SQLDataSource {
|
|
|
105
107
|
const existingIndexes = (await this.db.all(`PRAGMA index_list("${this.tableName}")`, [])) || [];
|
|
106
108
|
for (const existingIndex of existingIndexes) {
|
|
107
109
|
const indexName = existingIndex.name;
|
|
108
|
-
if (!indexNames.includes(indexName) && !indexName.startsWith(
|
|
110
|
+
if (!indexNames.includes(indexName) && !indexName.startsWith("sqlite_autoindex_")) {
|
|
109
111
|
console.log(`Dropping index "${indexName}" because it's no longer in the schema.`);
|
|
110
112
|
const sql = `DROP INDEX IF EXISTS "${indexName}"`;
|
|
111
113
|
await this.db.exec(sql, []);
|
|
@@ -116,22 +118,23 @@ class SQLDataSource {
|
|
|
116
118
|
const now = new Date();
|
|
117
119
|
await this.ensureTableAndIndexesExist();
|
|
118
120
|
let newestTableDef = this.buildTableSql();
|
|
119
|
-
newestTableDef = newestTableDef.replace(/CREATE TABLE IF NOT EXISTS/,
|
|
121
|
+
newestTableDef = newestTableDef.replace(/CREATE TABLE IF NOT EXISTS/, "CREATE TABLE");
|
|
120
122
|
const sqlGetTableRecord = `SELECT * FROM sqlite_master WHERE type = 'table' AND name = '${this.tableName}'`;
|
|
121
123
|
const table = await this.db.get(sqlGetTableRecord, []);
|
|
122
|
-
const existingTableDef = table?.sql ||
|
|
124
|
+
const existingTableDef = table?.sql || "";
|
|
123
125
|
if (newestTableDef !== existingTableDef) {
|
|
124
126
|
console.log(`Table "${this.tableName}" is out of date, updating...`);
|
|
125
127
|
// rename table
|
|
126
|
-
const tempTableName = this.tableName
|
|
128
|
+
const tempTableName = `${this.tableName}_old_${now.getTime()}`;
|
|
127
129
|
const renameSql = `ALTER TABLE "${this.tableName}" RENAME TO "${tempTableName}"`;
|
|
128
130
|
await this.db.exec(renameSql, []);
|
|
129
131
|
// create new table
|
|
130
132
|
await this.ensureTableAndIndexesExist();
|
|
131
133
|
// sql query to copy existing data and set new required fields to default values
|
|
132
134
|
const defaults = this.initRecord();
|
|
133
|
-
const fieldsInsert = this.metaData.fields.map(f => `"${f.name}"`).join(
|
|
134
|
-
const fieldsSelect = this.metaData.fields
|
|
135
|
+
const fieldsInsert = this.metaData.fields.map((f) => `"${f.name}"`).join(", ");
|
|
136
|
+
const fieldsSelect = this.metaData.fields
|
|
137
|
+
.map((f) => {
|
|
135
138
|
const existingField = existingTableDef.includes(`"${f.name}"`);
|
|
136
139
|
if (existingField && f.optional) {
|
|
137
140
|
return `"${f.name}"`;
|
|
@@ -148,7 +151,8 @@ class SQLDataSource {
|
|
|
148
151
|
return `'${defaultValue}' as "${f.name}"`;
|
|
149
152
|
}
|
|
150
153
|
return `NULL as "${f.name}"`;
|
|
151
|
-
})
|
|
154
|
+
})
|
|
155
|
+
.join(", ");
|
|
152
156
|
const insertSql = `INSERT INTO "${this.tableName}"(${fieldsInsert}) SELECT ${fieldsSelect} FROM "${tempTableName}"`;
|
|
153
157
|
await this.db.exec(insertSql, []);
|
|
154
158
|
// drop old table
|
|
@@ -173,7 +177,7 @@ class SQLDataSource {
|
|
|
173
177
|
return record;
|
|
174
178
|
}
|
|
175
179
|
async list(filter = {}, opts = {}) {
|
|
176
|
-
|
|
180
|
+
const dataQuery = new data_query_1.DataQuery(this, {
|
|
177
181
|
filter: filter,
|
|
178
182
|
...opts,
|
|
179
183
|
});
|
|
@@ -182,18 +186,16 @@ class SQLDataSource {
|
|
|
182
186
|
const records = await this.db.all(sqlQuery, []);
|
|
183
187
|
return records.map((r) => this.sqlRecordToJsRecord(r));
|
|
184
188
|
}
|
|
185
|
-
;
|
|
186
189
|
async count(filter = {}) {
|
|
187
|
-
|
|
190
|
+
const dataQuery = new data_query_1.DataQuery(this, {
|
|
188
191
|
filter: filter,
|
|
189
192
|
});
|
|
190
193
|
await this.initTable();
|
|
191
194
|
let sqlQuery = (0, data_query_sqlite_1.dataQueryToSqliteQuery)(dataQuery);
|
|
192
|
-
sqlQuery = sqlQuery.replace(
|
|
195
|
+
sqlQuery = sqlQuery.replace("SELECT\n *\n", "SELECT COUNT(*) as cnt\n");
|
|
193
196
|
const cnt = await this.db.get(sqlQuery, []);
|
|
194
|
-
return cnt
|
|
197
|
+
return cnt.cnt;
|
|
195
198
|
}
|
|
196
|
-
;
|
|
197
199
|
cursor(filter = {}, opts = {}) {
|
|
198
200
|
return (0, data_query_1.dataSourceCursor)(this, filter, opts);
|
|
199
201
|
}
|
|
@@ -231,8 +233,7 @@ class SQLDataSource {
|
|
|
231
233
|
delete record[field.name];
|
|
232
234
|
}
|
|
233
235
|
else {
|
|
234
|
-
record[field.name] =
|
|
235
|
-
sqlValueToJsValue(record[field.name], field.type, field.isArray ?? false);
|
|
236
|
+
record[field.name] = sqlValueToJsValue(record[field.name], field.type, field.isArray ?? false);
|
|
236
237
|
}
|
|
237
238
|
}
|
|
238
239
|
}
|
|
@@ -251,9 +252,9 @@ class SQLDataSource {
|
|
|
251
252
|
catch (e) {
|
|
252
253
|
throw new Error(`Validation on insert failed for ${this.tableName}: ${e}`);
|
|
253
254
|
}
|
|
254
|
-
const fields = this.metaData.fields.map(field => `"${field.name}"`).join(
|
|
255
|
-
const values = this.metaData.fields.map(field => jsValueToSqlValue(record[field.name]));
|
|
256
|
-
const placeholders = values.map(
|
|
255
|
+
const fields = this.metaData.fields.map((field) => `"${field.name}"`).join(", ");
|
|
256
|
+
const values = this.metaData.fields.map((field) => jsValueToSqlValue(record[field.name]));
|
|
257
|
+
const placeholders = values.map((_v) => "?").join(", ");
|
|
257
258
|
const sql = `INSERT INTO "${this.tableName}"(${fields}) VALUES(${placeholders})`;
|
|
258
259
|
await this.db.exec(sql, values);
|
|
259
260
|
return record;
|
|
@@ -267,27 +268,24 @@ class SQLDataSource {
|
|
|
267
268
|
// validate data
|
|
268
269
|
this.schema.parse(record);
|
|
269
270
|
const primaryKey = record[this.metaData.primaryKeyName];
|
|
270
|
-
const fields = this.metaData.fields
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
return;
|
|
278
|
-
return jsValueToSqlValue(record[field.name]);
|
|
279
|
-
}).filter(v => v !== undefined);
|
|
271
|
+
const fields = this.metaData.fields
|
|
272
|
+
.filter((field) => field.name !== this.metaData.primaryKeyName)
|
|
273
|
+
.map((field) => `"${field.name}" = ?`)
|
|
274
|
+
.join(",\n");
|
|
275
|
+
const values = this.metaData.fields
|
|
276
|
+
.filter((field) => field.name !== this.metaData.primaryKeyName)
|
|
277
|
+
.map((field) => jsValueToSqlValue(record[field.name]));
|
|
280
278
|
const sql = [
|
|
281
279
|
`UPDATE "${this.tableName}"`,
|
|
282
280
|
`SET ${fields}`,
|
|
283
281
|
`WHERE "${this.metaData.primaryKeyName}" = ?`,
|
|
284
|
-
].join(
|
|
282
|
+
].join("\n");
|
|
285
283
|
await this.db.exec(sql, [...values, primaryKey]);
|
|
286
284
|
return record;
|
|
287
285
|
}
|
|
288
286
|
async delete(idOrRecord) {
|
|
289
287
|
await this.initTable();
|
|
290
|
-
const primaryKey = typeof idOrRecord ===
|
|
288
|
+
const primaryKey = typeof idOrRecord === "string" ? idOrRecord : idOrRecord[this.metaData.primaryKeyName];
|
|
291
289
|
const sql = `DELETE FROM "${this.tableName}" WHERE "${this.metaData.primaryKeyName}" = ?`;
|
|
292
290
|
await this.db.exec(sql, [primaryKey]);
|
|
293
291
|
}
|
|
@@ -307,7 +305,7 @@ class SQLDataSource {
|
|
|
307
305
|
const zodField = this.schema.shape[field.name];
|
|
308
306
|
const value = zodField.safeParse(data[field.name]);
|
|
309
307
|
if (value.success) {
|
|
310
|
-
// @ts-
|
|
308
|
+
// @ts-expect-error
|
|
311
309
|
defaults[field.name] = value.data;
|
|
312
310
|
}
|
|
313
311
|
}
|
|
@@ -332,11 +330,11 @@ class SQLDataSource {
|
|
|
332
330
|
catch (e) {
|
|
333
331
|
throw new Error(`Validation on insert failed for ${this.tableName}: ${e}`);
|
|
334
332
|
}
|
|
335
|
-
const fields = this.metaData.fields.map(field => `"${field.name}"`).join(
|
|
336
|
-
const values = this.metaData.fields.map(field => jsValueToSqlValue(record[field.name]));
|
|
337
|
-
const placeholders = values.map(
|
|
333
|
+
const fields = this.metaData.fields.map((field) => `"${field.name}"`).join(", ");
|
|
334
|
+
const values = this.metaData.fields.map((field) => jsValueToSqlValue(record[field.name]));
|
|
335
|
+
const placeholders = values.map((_v) => "?").join(", ");
|
|
338
336
|
const sql = `INSERT INTO "${this.tableName}"(${fields}) VALUES(${placeholders})`;
|
|
339
|
-
this.db.execSync(sql, values);
|
|
337
|
+
this.db.execSync?.(sql, values);
|
|
340
338
|
return record;
|
|
341
339
|
}
|
|
342
340
|
/**
|
|
@@ -351,22 +349,19 @@ class SQLDataSource {
|
|
|
351
349
|
// validate data
|
|
352
350
|
this.schema.parse(record);
|
|
353
351
|
const primaryKey = record[this.metaData.primaryKeyName];
|
|
354
|
-
const fields = this.metaData.fields
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
return;
|
|
362
|
-
return jsValueToSqlValue(record[field.name]);
|
|
363
|
-
}).filter(v => v !== undefined);
|
|
352
|
+
const fields = this.metaData.fields
|
|
353
|
+
.filter((field) => field.name !== this.metaData.primaryKeyName)
|
|
354
|
+
.map((field) => `"${field.name}" = ?`)
|
|
355
|
+
.join(",\n");
|
|
356
|
+
const values = this.metaData.fields
|
|
357
|
+
.filter((field) => field.name !== this.metaData.primaryKeyName)
|
|
358
|
+
.map((field) => jsValueToSqlValue(record[field.name]));
|
|
364
359
|
const sql = [
|
|
365
360
|
`UPDATE "${this.tableName}"`,
|
|
366
361
|
`SET ${fields}`,
|
|
367
362
|
`WHERE "${this.metaData.primaryKeyName}" = ?`,
|
|
368
|
-
].join(
|
|
369
|
-
this.db.execSync(sql, [...values, primaryKey]);
|
|
363
|
+
].join("\n");
|
|
364
|
+
this.db.execSync?.(sql, [...values, primaryKey]);
|
|
370
365
|
return record;
|
|
371
366
|
}
|
|
372
367
|
/**
|
|
@@ -374,9 +369,9 @@ class SQLDataSource {
|
|
|
374
369
|
* Table must be initialized before calling this method.
|
|
375
370
|
*/
|
|
376
371
|
deleteSync(idOrRecord) {
|
|
377
|
-
const primaryKey = typeof idOrRecord ===
|
|
372
|
+
const primaryKey = typeof idOrRecord === "string" ? idOrRecord : idOrRecord[this.metaData.primaryKeyName];
|
|
378
373
|
const sql = `DELETE FROM "${this.tableName}" WHERE "${this.metaData.primaryKeyName}" = ?`;
|
|
379
|
-
this.db.execSync(sql, [primaryKey]);
|
|
374
|
+
this.db.execSync?.(sql, [primaryKey]);
|
|
380
375
|
}
|
|
381
376
|
/**
|
|
382
377
|
* Synchronous save (insert or update) for use within transactions.
|
|
@@ -385,7 +380,7 @@ class SQLDataSource {
|
|
|
385
380
|
saveSync(record) {
|
|
386
381
|
const primaryKey = record[this.metaData.primaryKeyName];
|
|
387
382
|
if (primaryKey) {
|
|
388
|
-
const existingRecord = this.db.getSync(`SELECT "${this.metaData.primaryKeyName}" FROM "${this.tableName}" WHERE ${this.metaData.primaryKeyName} = ?`, [primaryKey]);
|
|
383
|
+
const existingRecord = this.db.getSync?.(`SELECT "${this.metaData.primaryKeyName}" FROM "${this.tableName}" WHERE ${this.metaData.primaryKeyName} = ?`, [primaryKey]);
|
|
389
384
|
if (existingRecord) {
|
|
390
385
|
return this.updateSync(record);
|
|
391
386
|
}
|
|
@@ -413,7 +408,7 @@ class SQLDataSource {
|
|
|
413
408
|
return results;
|
|
414
409
|
}
|
|
415
410
|
return this.db.runInTransaction(() => {
|
|
416
|
-
return records.map(record => this.insertSync(record));
|
|
411
|
+
return records.map((record) => this.insertSync(record));
|
|
417
412
|
});
|
|
418
413
|
}
|
|
419
414
|
/**
|
|
@@ -456,7 +451,7 @@ class SQLDataSource {
|
|
|
456
451
|
return results;
|
|
457
452
|
}
|
|
458
453
|
return this.db.runInTransaction(() => {
|
|
459
|
-
return records.map(record => this.saveSync(record));
|
|
454
|
+
return records.map((record) => this.saveSync(record));
|
|
460
455
|
});
|
|
461
456
|
}
|
|
462
457
|
}
|
|
@@ -467,13 +462,13 @@ function jsValueToSqlValue(value, escapeQuote = false) {
|
|
|
467
462
|
if (value instanceof Date) {
|
|
468
463
|
return value.toISOString();
|
|
469
464
|
}
|
|
470
|
-
if (typeof value ===
|
|
465
|
+
if (typeof value === "object") {
|
|
471
466
|
return (0, serial_json_1.toJSONString)(value);
|
|
472
467
|
}
|
|
473
|
-
if (typeof value ===
|
|
468
|
+
if (typeof value === "boolean") {
|
|
474
469
|
return value ? 1 : 0;
|
|
475
470
|
}
|
|
476
|
-
if (typeof value ===
|
|
471
|
+
if (typeof value === "string" && escapeQuote) {
|
|
477
472
|
return value.replace(/'/g, "''");
|
|
478
473
|
}
|
|
479
474
|
return value;
|
|
@@ -486,19 +481,19 @@ function sqlValueToJsValue(value, fieldType, isArray) {
|
|
|
486
481
|
if (isArray) {
|
|
487
482
|
return (0, serial_json_1.fromJSONString)(value);
|
|
488
483
|
}
|
|
489
|
-
if (fieldType ===
|
|
484
|
+
if (fieldType === "Date") {
|
|
490
485
|
return new Date(value);
|
|
491
486
|
}
|
|
492
|
-
if (fieldType ===
|
|
487
|
+
if (fieldType === "object") {
|
|
493
488
|
return (0, serial_json_1.fromJSONString)(value);
|
|
494
489
|
}
|
|
495
|
-
if (fieldType ===
|
|
490
|
+
if (fieldType === "boolean") {
|
|
496
491
|
return value === 1;
|
|
497
492
|
}
|
|
498
|
-
if (fieldType ===
|
|
493
|
+
if (fieldType === "string") {
|
|
499
494
|
return String(value);
|
|
500
495
|
}
|
|
501
|
-
if (fieldType ===
|
|
496
|
+
if (fieldType === "number") {
|
|
502
497
|
return Number(value);
|
|
503
498
|
}
|
|
504
499
|
return value;
|
|
@@ -510,17 +505,17 @@ function globalDefaultValues(field) {
|
|
|
510
505
|
return [];
|
|
511
506
|
}
|
|
512
507
|
switch (fieldType) {
|
|
513
|
-
case
|
|
508
|
+
case "Date":
|
|
514
509
|
return new Date(0);
|
|
515
|
-
case
|
|
510
|
+
case "object":
|
|
516
511
|
return {};
|
|
517
|
-
case
|
|
512
|
+
case "boolean":
|
|
518
513
|
return false;
|
|
519
|
-
case
|
|
520
|
-
return
|
|
521
|
-
case
|
|
514
|
+
case "string":
|
|
515
|
+
return "";
|
|
516
|
+
case "number":
|
|
522
517
|
return 0;
|
|
523
518
|
default:
|
|
524
|
-
return
|
|
519
|
+
return "";
|
|
525
520
|
}
|
|
526
521
|
}
|