@restura/core 0.1.0-alpha.23 → 0.1.0-alpha.24
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/index.js +128 -128
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +128 -128
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1227,6 +1227,133 @@ import getDiff from "@wmfs/pg-diff-sync";
|
|
|
1227
1227
|
import pgInfo from "@wmfs/pg-info";
|
|
1228
1228
|
import pg2 from "pg";
|
|
1229
1229
|
|
|
1230
|
+
// src/restura/eventManager.ts
|
|
1231
|
+
import Bluebird2 from "bluebird";
|
|
1232
|
+
var EventManager = class {
|
|
1233
|
+
constructor() {
|
|
1234
|
+
this.actionHandlers = {
|
|
1235
|
+
DATABASE_ROW_DELETE: [],
|
|
1236
|
+
DATABASE_ROW_INSERT: [],
|
|
1237
|
+
DATABASE_COLUMN_UPDATE: []
|
|
1238
|
+
};
|
|
1239
|
+
}
|
|
1240
|
+
addRowInsertHandler(onInsert, filter) {
|
|
1241
|
+
this.actionHandlers.DATABASE_ROW_INSERT.push({
|
|
1242
|
+
callback: onInsert,
|
|
1243
|
+
filter
|
|
1244
|
+
});
|
|
1245
|
+
}
|
|
1246
|
+
addColumnChangeHandler(onUpdate, filter) {
|
|
1247
|
+
this.actionHandlers.DATABASE_COLUMN_UPDATE.push({
|
|
1248
|
+
callback: onUpdate,
|
|
1249
|
+
filter
|
|
1250
|
+
});
|
|
1251
|
+
}
|
|
1252
|
+
addRowDeleteHandler(onDelete, filter) {
|
|
1253
|
+
this.actionHandlers.DATABASE_ROW_DELETE.push({
|
|
1254
|
+
callback: onDelete,
|
|
1255
|
+
filter
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
1258
|
+
async fireActionFromDbTrigger(sqlMutationData, result) {
|
|
1259
|
+
if (sqlMutationData.mutationType === "INSERT") {
|
|
1260
|
+
await this.fireInsertActions(sqlMutationData, result);
|
|
1261
|
+
} else if (sqlMutationData.mutationType === "UPDATE") {
|
|
1262
|
+
await this.fireUpdateActions(sqlMutationData, result);
|
|
1263
|
+
} else if (sqlMutationData.mutationType === "DELETE") {
|
|
1264
|
+
await this.fireDeleteActions(sqlMutationData, result);
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
async fireInsertActions(data, triggerResult) {
|
|
1268
|
+
await Bluebird2.map(
|
|
1269
|
+
this.actionHandlers.DATABASE_ROW_INSERT,
|
|
1270
|
+
({ callback, filter }) => {
|
|
1271
|
+
if (!this.hasHandlersForEventType("DATABASE_ROW_INSERT", filter, triggerResult)) return;
|
|
1272
|
+
const insertData = {
|
|
1273
|
+
tableName: triggerResult.table,
|
|
1274
|
+
insertId: triggerResult.record.id,
|
|
1275
|
+
insertObject: triggerResult.record,
|
|
1276
|
+
queryMetadata: data.queryMetadata
|
|
1277
|
+
};
|
|
1278
|
+
callback(insertData, data.queryMetadata);
|
|
1279
|
+
},
|
|
1280
|
+
{ concurrency: 10 }
|
|
1281
|
+
);
|
|
1282
|
+
}
|
|
1283
|
+
async fireDeleteActions(data, triggerResult) {
|
|
1284
|
+
await Bluebird2.map(
|
|
1285
|
+
this.actionHandlers.DATABASE_ROW_DELETE,
|
|
1286
|
+
({ callback, filter }) => {
|
|
1287
|
+
if (!this.hasHandlersForEventType("DATABASE_ROW_DELETE", filter, triggerResult)) return;
|
|
1288
|
+
const deleteData = {
|
|
1289
|
+
tableName: triggerResult.table,
|
|
1290
|
+
deletedRow: triggerResult.previousRecord,
|
|
1291
|
+
queryMetadata: data.queryMetadata
|
|
1292
|
+
};
|
|
1293
|
+
callback(deleteData, data.queryMetadata);
|
|
1294
|
+
},
|
|
1295
|
+
{ concurrency: 10 }
|
|
1296
|
+
);
|
|
1297
|
+
}
|
|
1298
|
+
async fireUpdateActions(data, triggerResult) {
|
|
1299
|
+
await Bluebird2.map(
|
|
1300
|
+
this.actionHandlers.DATABASE_COLUMN_UPDATE,
|
|
1301
|
+
({ callback, filter }) => {
|
|
1302
|
+
if (!this.hasHandlersForEventType("DATABASE_COLUMN_UPDATE", filter, triggerResult)) return;
|
|
1303
|
+
const columnChangeData = {
|
|
1304
|
+
tableName: triggerResult.table,
|
|
1305
|
+
rowId: triggerResult.record.id,
|
|
1306
|
+
newData: triggerResult.record,
|
|
1307
|
+
oldData: triggerResult.previousRecord,
|
|
1308
|
+
queryMetadata: data.queryMetadata
|
|
1309
|
+
};
|
|
1310
|
+
callback(columnChangeData, data.queryMetadata);
|
|
1311
|
+
},
|
|
1312
|
+
{ concurrency: 10 }
|
|
1313
|
+
);
|
|
1314
|
+
}
|
|
1315
|
+
hasHandlersForEventType(eventType, filter, triggerResult) {
|
|
1316
|
+
if (filter) {
|
|
1317
|
+
switch (eventType) {
|
|
1318
|
+
case "DATABASE_ROW_INSERT":
|
|
1319
|
+
case "DATABASE_ROW_DELETE":
|
|
1320
|
+
if (filter.tableName && filter.tableName !== triggerResult.table) return false;
|
|
1321
|
+
break;
|
|
1322
|
+
case "DATABASE_COLUMN_UPDATE":
|
|
1323
|
+
const filterColumnChange = filter;
|
|
1324
|
+
if (filterColumnChange.tableName !== filter.tableName) return false;
|
|
1325
|
+
if (!filterColumnChange.columns.some((item) => {
|
|
1326
|
+
const updatedColumns = Object.keys(
|
|
1327
|
+
changedValues(triggerResult.record, triggerResult.previousRecord)
|
|
1328
|
+
);
|
|
1329
|
+
return updatedColumns.includes(item);
|
|
1330
|
+
}))
|
|
1331
|
+
return false;
|
|
1332
|
+
break;
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
return true;
|
|
1336
|
+
}
|
|
1337
|
+
};
|
|
1338
|
+
var eventManager = new EventManager();
|
|
1339
|
+
var eventManager_default = eventManager;
|
|
1340
|
+
function changedValues(record, previousRecord) {
|
|
1341
|
+
const changed = {};
|
|
1342
|
+
for (const i in previousRecord) {
|
|
1343
|
+
if (previousRecord[i] !== record[i]) {
|
|
1344
|
+
if (typeof previousRecord[i] === "object" && typeof record[i] === "object") {
|
|
1345
|
+
const nestedChanged = changedValues(record[i], previousRecord[i]);
|
|
1346
|
+
if (Object.keys(nestedChanged).length > 0) {
|
|
1347
|
+
changed[i] = record[i];
|
|
1348
|
+
}
|
|
1349
|
+
} else {
|
|
1350
|
+
changed[i] = record[i];
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
return changed;
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1230
1357
|
// src/restura/sql/PsqlPool.ts
|
|
1231
1358
|
import pg from "pg";
|
|
1232
1359
|
|
|
@@ -1571,133 +1698,6 @@ var filterPsqlParser = peg.generate(filterSqlGrammar, {
|
|
|
1571
1698
|
});
|
|
1572
1699
|
var filterPsqlParser_default = filterPsqlParser;
|
|
1573
1700
|
|
|
1574
|
-
// src/restura/eventManager.ts
|
|
1575
|
-
import Bluebird2 from "bluebird";
|
|
1576
|
-
var EventManager = class {
|
|
1577
|
-
constructor() {
|
|
1578
|
-
this.actionHandlers = {
|
|
1579
|
-
DATABASE_ROW_DELETE: [],
|
|
1580
|
-
DATABASE_ROW_INSERT: [],
|
|
1581
|
-
DATABASE_COLUMN_UPDATE: []
|
|
1582
|
-
};
|
|
1583
|
-
}
|
|
1584
|
-
addRowInsertHandler(onInsert, filter) {
|
|
1585
|
-
this.actionHandlers.DATABASE_ROW_INSERT.push({
|
|
1586
|
-
callback: onInsert,
|
|
1587
|
-
filter
|
|
1588
|
-
});
|
|
1589
|
-
}
|
|
1590
|
-
addColumnChangeHandler(onUpdate, filter) {
|
|
1591
|
-
this.actionHandlers.DATABASE_COLUMN_UPDATE.push({
|
|
1592
|
-
callback: onUpdate,
|
|
1593
|
-
filter
|
|
1594
|
-
});
|
|
1595
|
-
}
|
|
1596
|
-
addRowDeleteHandler(onDelete, filter) {
|
|
1597
|
-
this.actionHandlers.DATABASE_ROW_DELETE.push({
|
|
1598
|
-
callback: onDelete,
|
|
1599
|
-
filter
|
|
1600
|
-
});
|
|
1601
|
-
}
|
|
1602
|
-
async fireActionFromDbTrigger(sqlMutationData, result) {
|
|
1603
|
-
if (sqlMutationData.mutationType === "INSERT") {
|
|
1604
|
-
await this.fireInsertActions(sqlMutationData, result);
|
|
1605
|
-
} else if (sqlMutationData.mutationType === "UPDATE") {
|
|
1606
|
-
await this.fireUpdateActions(sqlMutationData, result);
|
|
1607
|
-
} else if (sqlMutationData.mutationType === "DELETE") {
|
|
1608
|
-
await this.fireDeleteActions(sqlMutationData, result);
|
|
1609
|
-
}
|
|
1610
|
-
}
|
|
1611
|
-
async fireInsertActions(data, triggerResult) {
|
|
1612
|
-
await Bluebird2.map(
|
|
1613
|
-
this.actionHandlers.DATABASE_ROW_INSERT,
|
|
1614
|
-
({ callback, filter }) => {
|
|
1615
|
-
if (!this.hasHandlersForEventType("DATABASE_ROW_INSERT", filter, triggerResult)) return;
|
|
1616
|
-
const insertData = {
|
|
1617
|
-
tableName: triggerResult.table,
|
|
1618
|
-
insertId: triggerResult.record.id,
|
|
1619
|
-
insertObject: triggerResult.record,
|
|
1620
|
-
queryMetadata: data.queryMetadata
|
|
1621
|
-
};
|
|
1622
|
-
callback(insertData, data.queryMetadata);
|
|
1623
|
-
},
|
|
1624
|
-
{ concurrency: 10 }
|
|
1625
|
-
);
|
|
1626
|
-
}
|
|
1627
|
-
async fireDeleteActions(data, triggerResult) {
|
|
1628
|
-
await Bluebird2.map(
|
|
1629
|
-
this.actionHandlers.DATABASE_ROW_DELETE,
|
|
1630
|
-
({ callback, filter }) => {
|
|
1631
|
-
if (!this.hasHandlersForEventType("DATABASE_ROW_DELETE", filter, triggerResult)) return;
|
|
1632
|
-
const deleteData = {
|
|
1633
|
-
tableName: triggerResult.table,
|
|
1634
|
-
deletedRow: triggerResult.previousRecord,
|
|
1635
|
-
queryMetadata: data.queryMetadata
|
|
1636
|
-
};
|
|
1637
|
-
callback(deleteData, data.queryMetadata);
|
|
1638
|
-
},
|
|
1639
|
-
{ concurrency: 10 }
|
|
1640
|
-
);
|
|
1641
|
-
}
|
|
1642
|
-
async fireUpdateActions(data, triggerResult) {
|
|
1643
|
-
await Bluebird2.map(
|
|
1644
|
-
this.actionHandlers.DATABASE_COLUMN_UPDATE,
|
|
1645
|
-
({ callback, filter }) => {
|
|
1646
|
-
if (!this.hasHandlersForEventType("DATABASE_COLUMN_UPDATE", filter, triggerResult)) return;
|
|
1647
|
-
const columnChangeData = {
|
|
1648
|
-
tableName: triggerResult.table,
|
|
1649
|
-
rowId: triggerResult.record.id,
|
|
1650
|
-
newData: triggerResult.record,
|
|
1651
|
-
oldData: triggerResult.previousRecord,
|
|
1652
|
-
queryMetadata: data.queryMetadata
|
|
1653
|
-
};
|
|
1654
|
-
callback(columnChangeData, data.queryMetadata);
|
|
1655
|
-
},
|
|
1656
|
-
{ concurrency: 10 }
|
|
1657
|
-
);
|
|
1658
|
-
}
|
|
1659
|
-
hasHandlersForEventType(eventType, filter, triggerResult) {
|
|
1660
|
-
if (filter) {
|
|
1661
|
-
switch (eventType) {
|
|
1662
|
-
case "DATABASE_ROW_INSERT":
|
|
1663
|
-
case "DATABASE_ROW_DELETE":
|
|
1664
|
-
if (filter.tableName && filter.tableName !== triggerResult.table) return false;
|
|
1665
|
-
break;
|
|
1666
|
-
case "DATABASE_COLUMN_UPDATE":
|
|
1667
|
-
const filterColumnChange = filter;
|
|
1668
|
-
if (filterColumnChange.tableName !== filter.tableName) return false;
|
|
1669
|
-
if (!filterColumnChange.columns.some((item) => {
|
|
1670
|
-
const updatedColumns = Object.keys(
|
|
1671
|
-
changedValues(triggerResult.record, triggerResult.previousRecord)
|
|
1672
|
-
);
|
|
1673
|
-
return updatedColumns.includes(item);
|
|
1674
|
-
}))
|
|
1675
|
-
return false;
|
|
1676
|
-
break;
|
|
1677
|
-
}
|
|
1678
|
-
}
|
|
1679
|
-
return true;
|
|
1680
|
-
}
|
|
1681
|
-
};
|
|
1682
|
-
var eventManager = new EventManager();
|
|
1683
|
-
var eventManager_default = eventManager;
|
|
1684
|
-
function changedValues(record, previousRecord) {
|
|
1685
|
-
const changed = {};
|
|
1686
|
-
for (const i in previousRecord) {
|
|
1687
|
-
if (previousRecord[i] !== record[i]) {
|
|
1688
|
-
if (typeof previousRecord[i] === "object" && typeof record[i] === "object") {
|
|
1689
|
-
const nestedChanged = changedValues(record[i], previousRecord[i]);
|
|
1690
|
-
if (Object.keys(nestedChanged).length > 0) {
|
|
1691
|
-
changed[i] = record[i];
|
|
1692
|
-
}
|
|
1693
|
-
} else {
|
|
1694
|
-
changed[i] = record[i];
|
|
1695
|
-
}
|
|
1696
|
-
}
|
|
1697
|
-
}
|
|
1698
|
-
return changed;
|
|
1699
|
-
}
|
|
1700
|
-
|
|
1701
1701
|
// src/restura/sql/PsqlEngine.ts
|
|
1702
1702
|
var { Client } = pg2;
|
|
1703
1703
|
var systemUser = {
|
|
@@ -1726,7 +1726,7 @@ var PsqlEngine = class extends SqlEngine {
|
|
|
1726
1726
|
database: this.psqlConnectionPool.poolConfig.database,
|
|
1727
1727
|
password: this.psqlConnectionPool.poolConfig.password,
|
|
1728
1728
|
port: this.psqlConnectionPool.poolConfig.port,
|
|
1729
|
-
connectionTimeoutMillis:
|
|
1729
|
+
connectionTimeoutMillis: this.psqlConnectionPool.poolConfig.connectionTimeoutMillis
|
|
1730
1730
|
});
|
|
1731
1731
|
await this.triggerClient.connect();
|
|
1732
1732
|
const promises = [];
|