@restura/core 0.1.0-alpha.22 → 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.mjs CHANGED
@@ -711,9 +711,7 @@ function addApiResponseFunctions(req, res, next) {
711
711
  function authenticateUser(applicationAuthenticateHandler) {
712
712
  return (req, res, next) => {
713
713
  applicationAuthenticateHandler(req, res, (userDetails) => {
714
- req.requesterDetails.host = req.hostname;
715
- req.requesterDetails.ipAddress = req.ip || "";
716
- req.requesterDetails = __spreadValues(__spreadValues({}, req.requesterDetails), userDetails);
714
+ req.requesterDetails = __spreadValues({ host: req.hostname, ipAddress: req.ip || "" }, userDetails);
717
715
  next();
718
716
  });
719
717
  };
@@ -1229,6 +1227,133 @@ import getDiff from "@wmfs/pg-diff-sync";
1229
1227
  import pgInfo from "@wmfs/pg-info";
1230
1228
  import pg2 from "pg";
1231
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
+
1232
1357
  // src/restura/sql/PsqlPool.ts
1233
1358
  import pg from "pg";
1234
1359
 
@@ -1573,133 +1698,6 @@ var filterPsqlParser = peg.generate(filterSqlGrammar, {
1573
1698
  });
1574
1699
  var filterPsqlParser_default = filterPsqlParser;
1575
1700
 
1576
- // src/restura/eventManager.ts
1577
- import Bluebird2 from "bluebird";
1578
- var EventManager = class {
1579
- constructor() {
1580
- this.actionHandlers = {
1581
- DATABASE_ROW_DELETE: [],
1582
- DATABASE_ROW_INSERT: [],
1583
- DATABASE_COLUMN_UPDATE: []
1584
- };
1585
- }
1586
- addRowInsertHandler(onInsert, filter) {
1587
- this.actionHandlers.DATABASE_ROW_INSERT.push({
1588
- callback: onInsert,
1589
- filter
1590
- });
1591
- }
1592
- addColumnChangeHandler(onUpdate, filter) {
1593
- this.actionHandlers.DATABASE_COLUMN_UPDATE.push({
1594
- callback: onUpdate,
1595
- filter
1596
- });
1597
- }
1598
- addRowDeleteHandler(onDelete, filter) {
1599
- this.actionHandlers.DATABASE_ROW_DELETE.push({
1600
- callback: onDelete,
1601
- filter
1602
- });
1603
- }
1604
- async fireActionFromDbTrigger(sqlMutationData, result) {
1605
- if (sqlMutationData.mutationType === "INSERT") {
1606
- await this.fireInsertActions(sqlMutationData, result);
1607
- } else if (sqlMutationData.mutationType === "UPDATE") {
1608
- await this.fireUpdateActions(sqlMutationData, result);
1609
- } else if (sqlMutationData.mutationType === "DELETE") {
1610
- await this.fireDeleteActions(sqlMutationData, result);
1611
- }
1612
- }
1613
- async fireInsertActions(data, triggerResult) {
1614
- await Bluebird2.map(
1615
- this.actionHandlers.DATABASE_ROW_INSERT,
1616
- ({ callback, filter }) => {
1617
- if (!this.hasHandlersForEventType("DATABASE_ROW_INSERT", filter, triggerResult)) return;
1618
- const insertData = {
1619
- tableName: triggerResult.table,
1620
- insertId: triggerResult.record.id,
1621
- insertObject: triggerResult.record,
1622
- queryMetadata: data.queryMetadata
1623
- };
1624
- callback(insertData, data.queryMetadata);
1625
- },
1626
- { concurrency: 10 }
1627
- );
1628
- }
1629
- async fireDeleteActions(data, triggerResult) {
1630
- await Bluebird2.map(
1631
- this.actionHandlers.DATABASE_ROW_DELETE,
1632
- ({ callback, filter }) => {
1633
- if (!this.hasHandlersForEventType("DATABASE_ROW_DELETE", filter, triggerResult)) return;
1634
- const deleteData = {
1635
- tableName: triggerResult.table,
1636
- deletedRow: triggerResult.previousRecord,
1637
- queryMetadata: data.queryMetadata
1638
- };
1639
- callback(deleteData, data.queryMetadata);
1640
- },
1641
- { concurrency: 10 }
1642
- );
1643
- }
1644
- async fireUpdateActions(data, triggerResult) {
1645
- await Bluebird2.map(
1646
- this.actionHandlers.DATABASE_COLUMN_UPDATE,
1647
- ({ callback, filter }) => {
1648
- if (!this.hasHandlersForEventType("DATABASE_COLUMN_UPDATE", filter, triggerResult)) return;
1649
- const columnChangeData = {
1650
- tableName: triggerResult.table,
1651
- rowId: triggerResult.record.id,
1652
- newData: triggerResult.record,
1653
- oldData: triggerResult.previousRecord,
1654
- queryMetadata: data.queryMetadata
1655
- };
1656
- callback(columnChangeData, data.queryMetadata);
1657
- },
1658
- { concurrency: 10 }
1659
- );
1660
- }
1661
- hasHandlersForEventType(eventType, filter, triggerResult) {
1662
- if (filter) {
1663
- switch (eventType) {
1664
- case "DATABASE_ROW_INSERT":
1665
- case "DATABASE_ROW_DELETE":
1666
- if (filter.tableName && filter.tableName !== triggerResult.table) return false;
1667
- break;
1668
- case "DATABASE_COLUMN_UPDATE":
1669
- const filterColumnChange = filter;
1670
- if (filterColumnChange.tableName !== filter.tableName) return false;
1671
- if (!filterColumnChange.columns.some((item) => {
1672
- const updatedColumns = Object.keys(
1673
- changedValues(triggerResult.record, triggerResult.previousRecord)
1674
- );
1675
- return updatedColumns.includes(item);
1676
- }))
1677
- return false;
1678
- break;
1679
- }
1680
- }
1681
- return true;
1682
- }
1683
- };
1684
- var eventManager = new EventManager();
1685
- var eventManager_default = eventManager;
1686
- function changedValues(record, previousRecord) {
1687
- const changed = {};
1688
- for (const i in previousRecord) {
1689
- if (previousRecord[i] !== record[i]) {
1690
- if (typeof previousRecord[i] === "object" && typeof record[i] === "object") {
1691
- const nestedChanged = changedValues(record[i], previousRecord[i]);
1692
- if (Object.keys(nestedChanged).length > 0) {
1693
- changed[i] = record[i];
1694
- }
1695
- } else {
1696
- changed[i] = record[i];
1697
- }
1698
- }
1699
- }
1700
- return changed;
1701
- }
1702
-
1703
1701
  // src/restura/sql/PsqlEngine.ts
1704
1702
  var { Client } = pg2;
1705
1703
  var systemUser = {
@@ -1728,7 +1726,7 @@ var PsqlEngine = class extends SqlEngine {
1728
1726
  database: this.psqlConnectionPool.poolConfig.database,
1729
1727
  password: this.psqlConnectionPool.poolConfig.password,
1730
1728
  port: this.psqlConnectionPool.poolConfig.port,
1731
- connectionTimeoutMillis: 2e3
1729
+ connectionTimeoutMillis: this.psqlConnectionPool.poolConfig.connectionTimeoutMillis
1732
1730
  });
1733
1731
  await this.triggerClient.connect();
1734
1732
  const promises = [];