@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 CHANGED
@@ -1273,6 +1273,133 @@ var import_pg_diff_sync = __toESM(require("@wmfs/pg-diff-sync"));
1273
1273
  var import_pg_info = __toESM(require("@wmfs/pg-info"));
1274
1274
  var import_pg2 = __toESM(require("pg"));
1275
1275
 
1276
+ // src/restura/eventManager.ts
1277
+ var import_bluebird2 = __toESM(require("bluebird"));
1278
+ var EventManager = class {
1279
+ constructor() {
1280
+ this.actionHandlers = {
1281
+ DATABASE_ROW_DELETE: [],
1282
+ DATABASE_ROW_INSERT: [],
1283
+ DATABASE_COLUMN_UPDATE: []
1284
+ };
1285
+ }
1286
+ addRowInsertHandler(onInsert, filter) {
1287
+ this.actionHandlers.DATABASE_ROW_INSERT.push({
1288
+ callback: onInsert,
1289
+ filter
1290
+ });
1291
+ }
1292
+ addColumnChangeHandler(onUpdate, filter) {
1293
+ this.actionHandlers.DATABASE_COLUMN_UPDATE.push({
1294
+ callback: onUpdate,
1295
+ filter
1296
+ });
1297
+ }
1298
+ addRowDeleteHandler(onDelete, filter) {
1299
+ this.actionHandlers.DATABASE_ROW_DELETE.push({
1300
+ callback: onDelete,
1301
+ filter
1302
+ });
1303
+ }
1304
+ async fireActionFromDbTrigger(sqlMutationData, result) {
1305
+ if (sqlMutationData.mutationType === "INSERT") {
1306
+ await this.fireInsertActions(sqlMutationData, result);
1307
+ } else if (sqlMutationData.mutationType === "UPDATE") {
1308
+ await this.fireUpdateActions(sqlMutationData, result);
1309
+ } else if (sqlMutationData.mutationType === "DELETE") {
1310
+ await this.fireDeleteActions(sqlMutationData, result);
1311
+ }
1312
+ }
1313
+ async fireInsertActions(data, triggerResult) {
1314
+ await import_bluebird2.default.map(
1315
+ this.actionHandlers.DATABASE_ROW_INSERT,
1316
+ ({ callback, filter }) => {
1317
+ if (!this.hasHandlersForEventType("DATABASE_ROW_INSERT", filter, triggerResult)) return;
1318
+ const insertData = {
1319
+ tableName: triggerResult.table,
1320
+ insertId: triggerResult.record.id,
1321
+ insertObject: triggerResult.record,
1322
+ queryMetadata: data.queryMetadata
1323
+ };
1324
+ callback(insertData, data.queryMetadata);
1325
+ },
1326
+ { concurrency: 10 }
1327
+ );
1328
+ }
1329
+ async fireDeleteActions(data, triggerResult) {
1330
+ await import_bluebird2.default.map(
1331
+ this.actionHandlers.DATABASE_ROW_DELETE,
1332
+ ({ callback, filter }) => {
1333
+ if (!this.hasHandlersForEventType("DATABASE_ROW_DELETE", filter, triggerResult)) return;
1334
+ const deleteData = {
1335
+ tableName: triggerResult.table,
1336
+ deletedRow: triggerResult.previousRecord,
1337
+ queryMetadata: data.queryMetadata
1338
+ };
1339
+ callback(deleteData, data.queryMetadata);
1340
+ },
1341
+ { concurrency: 10 }
1342
+ );
1343
+ }
1344
+ async fireUpdateActions(data, triggerResult) {
1345
+ await import_bluebird2.default.map(
1346
+ this.actionHandlers.DATABASE_COLUMN_UPDATE,
1347
+ ({ callback, filter }) => {
1348
+ if (!this.hasHandlersForEventType("DATABASE_COLUMN_UPDATE", filter, triggerResult)) return;
1349
+ const columnChangeData = {
1350
+ tableName: triggerResult.table,
1351
+ rowId: triggerResult.record.id,
1352
+ newData: triggerResult.record,
1353
+ oldData: triggerResult.previousRecord,
1354
+ queryMetadata: data.queryMetadata
1355
+ };
1356
+ callback(columnChangeData, data.queryMetadata);
1357
+ },
1358
+ { concurrency: 10 }
1359
+ );
1360
+ }
1361
+ hasHandlersForEventType(eventType, filter, triggerResult) {
1362
+ if (filter) {
1363
+ switch (eventType) {
1364
+ case "DATABASE_ROW_INSERT":
1365
+ case "DATABASE_ROW_DELETE":
1366
+ if (filter.tableName && filter.tableName !== triggerResult.table) return false;
1367
+ break;
1368
+ case "DATABASE_COLUMN_UPDATE":
1369
+ const filterColumnChange = filter;
1370
+ if (filterColumnChange.tableName !== filter.tableName) return false;
1371
+ if (!filterColumnChange.columns.some((item) => {
1372
+ const updatedColumns = Object.keys(
1373
+ changedValues(triggerResult.record, triggerResult.previousRecord)
1374
+ );
1375
+ return updatedColumns.includes(item);
1376
+ }))
1377
+ return false;
1378
+ break;
1379
+ }
1380
+ }
1381
+ return true;
1382
+ }
1383
+ };
1384
+ var eventManager = new EventManager();
1385
+ var eventManager_default = eventManager;
1386
+ function changedValues(record, previousRecord) {
1387
+ const changed = {};
1388
+ for (const i in previousRecord) {
1389
+ if (previousRecord[i] !== record[i]) {
1390
+ if (typeof previousRecord[i] === "object" && typeof record[i] === "object") {
1391
+ const nestedChanged = changedValues(record[i], previousRecord[i]);
1392
+ if (Object.keys(nestedChanged).length > 0) {
1393
+ changed[i] = record[i];
1394
+ }
1395
+ } else {
1396
+ changed[i] = record[i];
1397
+ }
1398
+ }
1399
+ }
1400
+ return changed;
1401
+ }
1402
+
1276
1403
  // src/restura/sql/PsqlPool.ts
1277
1404
  var import_pg = __toESM(require("pg"));
1278
1405
 
@@ -1617,133 +1744,6 @@ var filterPsqlParser = import_pegjs.default.generate(filterSqlGrammar, {
1617
1744
  });
1618
1745
  var filterPsqlParser_default = filterPsqlParser;
1619
1746
 
1620
- // src/restura/eventManager.ts
1621
- var import_bluebird2 = __toESM(require("bluebird"));
1622
- var EventManager = class {
1623
- constructor() {
1624
- this.actionHandlers = {
1625
- DATABASE_ROW_DELETE: [],
1626
- DATABASE_ROW_INSERT: [],
1627
- DATABASE_COLUMN_UPDATE: []
1628
- };
1629
- }
1630
- addRowInsertHandler(onInsert, filter) {
1631
- this.actionHandlers.DATABASE_ROW_INSERT.push({
1632
- callback: onInsert,
1633
- filter
1634
- });
1635
- }
1636
- addColumnChangeHandler(onUpdate, filter) {
1637
- this.actionHandlers.DATABASE_COLUMN_UPDATE.push({
1638
- callback: onUpdate,
1639
- filter
1640
- });
1641
- }
1642
- addRowDeleteHandler(onDelete, filter) {
1643
- this.actionHandlers.DATABASE_ROW_DELETE.push({
1644
- callback: onDelete,
1645
- filter
1646
- });
1647
- }
1648
- async fireActionFromDbTrigger(sqlMutationData, result) {
1649
- if (sqlMutationData.mutationType === "INSERT") {
1650
- await this.fireInsertActions(sqlMutationData, result);
1651
- } else if (sqlMutationData.mutationType === "UPDATE") {
1652
- await this.fireUpdateActions(sqlMutationData, result);
1653
- } else if (sqlMutationData.mutationType === "DELETE") {
1654
- await this.fireDeleteActions(sqlMutationData, result);
1655
- }
1656
- }
1657
- async fireInsertActions(data, triggerResult) {
1658
- await import_bluebird2.default.map(
1659
- this.actionHandlers.DATABASE_ROW_INSERT,
1660
- ({ callback, filter }) => {
1661
- if (!this.hasHandlersForEventType("DATABASE_ROW_INSERT", filter, triggerResult)) return;
1662
- const insertData = {
1663
- tableName: triggerResult.table,
1664
- insertId: triggerResult.record.id,
1665
- insertObject: triggerResult.record,
1666
- queryMetadata: data.queryMetadata
1667
- };
1668
- callback(insertData, data.queryMetadata);
1669
- },
1670
- { concurrency: 10 }
1671
- );
1672
- }
1673
- async fireDeleteActions(data, triggerResult) {
1674
- await import_bluebird2.default.map(
1675
- this.actionHandlers.DATABASE_ROW_DELETE,
1676
- ({ callback, filter }) => {
1677
- if (!this.hasHandlersForEventType("DATABASE_ROW_DELETE", filter, triggerResult)) return;
1678
- const deleteData = {
1679
- tableName: triggerResult.table,
1680
- deletedRow: triggerResult.previousRecord,
1681
- queryMetadata: data.queryMetadata
1682
- };
1683
- callback(deleteData, data.queryMetadata);
1684
- },
1685
- { concurrency: 10 }
1686
- );
1687
- }
1688
- async fireUpdateActions(data, triggerResult) {
1689
- await import_bluebird2.default.map(
1690
- this.actionHandlers.DATABASE_COLUMN_UPDATE,
1691
- ({ callback, filter }) => {
1692
- if (!this.hasHandlersForEventType("DATABASE_COLUMN_UPDATE", filter, triggerResult)) return;
1693
- const columnChangeData = {
1694
- tableName: triggerResult.table,
1695
- rowId: triggerResult.record.id,
1696
- newData: triggerResult.record,
1697
- oldData: triggerResult.previousRecord,
1698
- queryMetadata: data.queryMetadata
1699
- };
1700
- callback(columnChangeData, data.queryMetadata);
1701
- },
1702
- { concurrency: 10 }
1703
- );
1704
- }
1705
- hasHandlersForEventType(eventType, filter, triggerResult) {
1706
- if (filter) {
1707
- switch (eventType) {
1708
- case "DATABASE_ROW_INSERT":
1709
- case "DATABASE_ROW_DELETE":
1710
- if (filter.tableName && filter.tableName !== triggerResult.table) return false;
1711
- break;
1712
- case "DATABASE_COLUMN_UPDATE":
1713
- const filterColumnChange = filter;
1714
- if (filterColumnChange.tableName !== filter.tableName) return false;
1715
- if (!filterColumnChange.columns.some((item) => {
1716
- const updatedColumns = Object.keys(
1717
- changedValues(triggerResult.record, triggerResult.previousRecord)
1718
- );
1719
- return updatedColumns.includes(item);
1720
- }))
1721
- return false;
1722
- break;
1723
- }
1724
- }
1725
- return true;
1726
- }
1727
- };
1728
- var eventManager = new EventManager();
1729
- var eventManager_default = eventManager;
1730
- function changedValues(record, previousRecord) {
1731
- const changed = {};
1732
- for (const i in previousRecord) {
1733
- if (previousRecord[i] !== record[i]) {
1734
- if (typeof previousRecord[i] === "object" && typeof record[i] === "object") {
1735
- const nestedChanged = changedValues(record[i], previousRecord[i]);
1736
- if (Object.keys(nestedChanged).length > 0) {
1737
- changed[i] = record[i];
1738
- }
1739
- } else {
1740
- changed[i] = record[i];
1741
- }
1742
- }
1743
- }
1744
- return changed;
1745
- }
1746
-
1747
1747
  // src/restura/sql/PsqlEngine.ts
1748
1748
  var { Client } = import_pg2.default;
1749
1749
  var systemUser = {
@@ -1772,7 +1772,7 @@ var PsqlEngine = class extends SqlEngine {
1772
1772
  database: this.psqlConnectionPool.poolConfig.database,
1773
1773
  password: this.psqlConnectionPool.poolConfig.password,
1774
1774
  port: this.psqlConnectionPool.poolConfig.port,
1775
- connectionTimeoutMillis: 2e3
1775
+ connectionTimeoutMillis: this.psqlConnectionPool.poolConfig.connectionTimeoutMillis
1776
1776
  });
1777
1777
  await this.triggerClient.connect();
1778
1778
  const promises = [];