@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.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:
|
|
1775
|
+
connectionTimeoutMillis: this.psqlConnectionPool.poolConfig.connectionTimeoutMillis
|
|
1776
1776
|
});
|
|
1777
1777
|
await this.triggerClient.connect();
|
|
1778
1778
|
const promises = [];
|