prostgles-server 2.0.201 → 2.0.202

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.
Files changed (58) hide show
  1. package/dist/DboBuilder/delete.d.ts +5 -0
  2. package/dist/DboBuilder/delete.d.ts.map +1 -0
  3. package/dist/DboBuilder/delete.js +121 -0
  4. package/dist/DboBuilder/delete.js.map +1 -0
  5. package/dist/DboBuilder/insert.d.ts.map +1 -1
  6. package/dist/DboBuilder/insert.js +0 -4
  7. package/dist/DboBuilder/insert.js.map +1 -1
  8. package/dist/DboBuilder/insertDataParse.d.ts.map +1 -1
  9. package/dist/DboBuilder/insertDataParse.js +2 -43
  10. package/dist/DboBuilder/insertDataParse.js.map +1 -1
  11. package/dist/DboBuilder/update.d.ts +5 -0
  12. package/dist/DboBuilder/update.d.ts.map +1 -0
  13. package/dist/DboBuilder/update.js +111 -0
  14. package/dist/DboBuilder/update.js.map +1 -0
  15. package/dist/DboBuilder/uploadFile.d.ts +6 -0
  16. package/dist/DboBuilder/uploadFile.d.ts.map +1 -0
  17. package/dist/DboBuilder/uploadFile.js +48 -0
  18. package/dist/DboBuilder/uploadFile.js.map +1 -0
  19. package/dist/DboBuilder.d.ts +4 -2
  20. package/dist/DboBuilder.d.ts.map +1 -1
  21. package/dist/DboBuilder.js +12 -172
  22. package/dist/DboBuilder.js.map +1 -1
  23. package/dist/FileManager.d.ts.map +1 -1
  24. package/dist/FileManager.js +2 -0
  25. package/dist/FileManager.js.map +1 -1
  26. package/dist/QueryBuilder.d.ts +5 -1
  27. package/dist/QueryBuilder.d.ts.map +1 -1
  28. package/lib/DboBuilder/delete.d.ts +5 -0
  29. package/lib/DboBuilder/delete.d.ts.map +1 -0
  30. package/lib/DboBuilder/delete.js +120 -0
  31. package/lib/DboBuilder/delete.ts +127 -0
  32. package/lib/DboBuilder/insert.d.ts.map +1 -1
  33. package/lib/DboBuilder/insert.js +0 -4
  34. package/lib/DboBuilder/insert.ts +0 -4
  35. package/lib/DboBuilder/insertDataParse.d.ts.map +1 -1
  36. package/lib/DboBuilder/insertDataParse.js +2 -43
  37. package/lib/DboBuilder/insertDataParse.ts +2 -46
  38. package/lib/DboBuilder/update.d.ts +5 -0
  39. package/lib/DboBuilder/update.d.ts.map +1 -0
  40. package/lib/DboBuilder/update.js +110 -0
  41. package/lib/DboBuilder/update.ts +127 -0
  42. package/lib/DboBuilder/uploadFile.d.ts +6 -0
  43. package/lib/DboBuilder/uploadFile.d.ts.map +1 -0
  44. package/lib/DboBuilder/uploadFile.js +47 -0
  45. package/lib/DboBuilder/uploadFile.ts +50 -0
  46. package/lib/DboBuilder.d.ts +4 -2
  47. package/lib/DboBuilder.d.ts.map +1 -1
  48. package/lib/DboBuilder.js +12 -172
  49. package/lib/DboBuilder.ts +15 -198
  50. package/lib/FileManager.d.ts.map +1 -1
  51. package/lib/FileManager.js +2 -0
  52. package/lib/FileManager.ts +1 -0
  53. package/package.json +2 -2
  54. package/tests/client/PID.txt +1 -1
  55. package/tests/isomorphic_queries.d.ts.map +1 -1
  56. package/tests/isomorphic_queries.js +33 -1
  57. package/tests/isomorphic_queries.ts +39 -2
  58. package/tests/server/package-lock.json +3 -3
@@ -29,6 +29,8 @@ const QueryBuilder_1 = require("./QueryBuilder");
29
29
  const PubSubManager_1 = require("./PubSubManager");
30
30
  const insertDataParse_1 = require("./DboBuilder/insertDataParse");
31
31
  const insert_1 = require("./DboBuilder/insert");
32
+ const update_1 = require("./DboBuilder/update");
33
+ const delete_1 = require("./DboBuilder/delete");
32
34
  const Filtering_1 = require("./Filtering");
33
35
  exports.pgp = pgPromise({
34
36
  promiseLib: Bluebird
@@ -104,10 +106,15 @@ exports.makeErr = makeErr;
104
106
  exports.EXISTS_KEYS = ["$exists", "$notExists", "$existsJoined", "$notExistsJoined"];
105
107
  const FILTER_FUNCS = QueryBuilder_1.FUNCTIONS.filter(f => f.canBeUsedForFilter);
106
108
  function parseError(e) {
107
- // console.trace("INTERNAL ERROR: ", e);
108
109
  let res = e instanceof Error ? e.message : (!Object.keys(e || {}).length ? e : (e && e.toString) ? e.toString() : e);
109
- if (isPlainObject(e))
110
- res = JSON.stringify(e, null, 2);
110
+ if (isPlainObject(e)) {
111
+ if (typeof e.err === "string") {
112
+ res = e.err;
113
+ }
114
+ else {
115
+ res = JSON.stringify(e, null, 2);
116
+ }
117
+ }
111
118
  return res;
112
119
  }
113
120
  exports.parseError = parseError;
@@ -1653,76 +1660,7 @@ class TableHandler extends ViewHandler {
1653
1660
  };
1654
1661
  }
1655
1662
  async update(filter, newData, params, tableRules, localParams) {
1656
- try {
1657
- const parsedRules = await this.parseUpdateRules(filter, newData, params, tableRules, localParams);
1658
- if (localParams?.testRule) {
1659
- return parsedRules;
1660
- }
1661
- const { fields, validateRow, forcedData, finalUpdateFilter, returningFields, forcedFilter, filterFields } = parsedRules;
1662
- let { returning, multi = true, onConflictDoNothing = false, fixIssues = false } = params || {};
1663
- const { returnQuery = false } = localParams ?? {};
1664
- if (params) {
1665
- const good_params = ["returning", "multi", "onConflictDoNothing", "fixIssues"];
1666
- const bad_params = Object.keys(params).filter(k => !good_params.includes(k));
1667
- if (bad_params && bad_params.length)
1668
- throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
1669
- }
1670
- const { data, allowedCols } = this.validateNewData({ row: newData, forcedData, allowedFields: fields, tableRules, fixIssues });
1671
- /* Patch data */
1672
- let patchedTextData = [];
1673
- this.columns.map(c => {
1674
- const d = data[c.name];
1675
- if (c.data_type === "text" && d && isPlainObject(d) && !["from", "to"].find(key => typeof d[key] !== "number")) {
1676
- const unrecProps = Object.keys(d).filter(k => !["from", "to", "text", "md5"].includes(k));
1677
- if (unrecProps.length)
1678
- throw "Unrecognised params in textPatch field: " + unrecProps.join(", ");
1679
- patchedTextData.push({ ...d, fieldName: c.name });
1680
- }
1681
- });
1682
- if (patchedTextData && patchedTextData.length) {
1683
- if (tableRules && !tableRules.select)
1684
- throw "Select needs to be permitted to patch data";
1685
- const rows = await this.find(filter, { select: patchedTextData.reduce((a, v) => ({ ...a, [v.fieldName]: 1 }), {}) }, undefined, tableRules);
1686
- if (rows.length !== 1) {
1687
- throw "Cannot patch data within a filter that affects more/less than 1 row";
1688
- }
1689
- patchedTextData.map(p => {
1690
- data[p.fieldName] = (0, prostgles_types_1.unpatchText)(rows[0][p.fieldName], p);
1691
- });
1692
- // https://w3resource.com/PostgreSQL/overlay-function.p hp
1693
- // overlay(coalesce(status, '') placing 'hom' from 2 for 0)
1694
- }
1695
- let nData = { ...data };
1696
- // if(tableRules && tableRules.update && tableRules?.update?.validate){
1697
- // nData = await tableRules.update.validate(nData);
1698
- // }
1699
- let query = await this.colSet.getUpdateQuery(nData, allowedCols, validateRow); //pgp.helpers.update(nData, columnSet) + " ";
1700
- query += (await this.prepareWhere({
1701
- filter,
1702
- forcedFilter,
1703
- filterFields,
1704
- localParams,
1705
- tableRule: tableRules
1706
- })).where;
1707
- if (onConflictDoNothing)
1708
- query += " ON CONFLICT DO NOTHING ";
1709
- let qType = "none";
1710
- if (returning) {
1711
- qType = multi ? "any" : "one";
1712
- query += this.makeReturnQuery(await this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
1713
- }
1714
- if (returnQuery)
1715
- return query;
1716
- if (this.t) {
1717
- return this.t[qType](query).catch((err) => makeErr(err, localParams, this, fields));
1718
- }
1719
- return this.db.tx(t => t[qType](query)).catch(err => makeErr(err, localParams, this, fields));
1720
- }
1721
- catch (e) {
1722
- if (localParams && localParams.testRule)
1723
- throw e;
1724
- throw { err: parseError(e), msg: `Issue with dbo.${this.name}.update(${JSON.stringify(filter || {}, null, 2)}, ${JSON.stringify(newData || {}, null, 2)}, ${JSON.stringify(params || {}, null, 2)})` };
1725
- }
1663
+ return update_1.update.bind(this)(filter, newData, params, tableRules, localParams);
1726
1664
  }
1727
1665
  ;
1728
1666
  validateNewData({ row, forcedData, allowedFields, tableRules, fixIssues = false }) {
@@ -1756,105 +1694,7 @@ class TableHandler extends ViewHandler {
1756
1694
  return "";
1757
1695
  }
1758
1696
  async delete(filter, params, param3_unused, table_rules, localParams) {
1759
- try {
1760
- const { returning } = params || {};
1761
- filter = filter || {};
1762
- this.checkFilter(filter);
1763
- // table_rules = table_rules || {};
1764
- let forcedFilter = {}, filterFields = "*", returningFields = "*", validate;
1765
- const { testRule = false, returnQuery = false } = localParams || {};
1766
- if (table_rules) {
1767
- if (!table_rules.delete)
1768
- throw "delete rules missing";
1769
- forcedFilter = table_rules.delete.forcedFilter;
1770
- filterFields = table_rules.delete.filterFields;
1771
- returningFields = table_rules.delete.returningFields;
1772
- validate = table_rules.delete.validate;
1773
- if (!returningFields)
1774
- returningFields = (0, utils_1.get)(table_rules, "select.fields");
1775
- if (!returningFields)
1776
- returningFields = (0, utils_1.get)(table_rules, "delete.filterFields");
1777
- if (!filterFields)
1778
- throw ` Invalid delete rule for ${this.name}. filterFields missing `;
1779
- /* Safely test publish rules */
1780
- if (testRule) {
1781
- await this.validateViewRules({ filterFields, returningFields, forcedFilter, rule: "delete" });
1782
- return true;
1783
- }
1784
- }
1785
- if (params) {
1786
- const good_params = ["returning"];
1787
- const bad_params = Object.keys(params).filter(k => !good_params.includes(k));
1788
- if (bad_params && bad_params.length)
1789
- throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
1790
- }
1791
- let queryType = 'none';
1792
- let _query = "DELETE FROM " + this.escapedName;
1793
- const filterOpts = (await this.prepareWhere({
1794
- filter,
1795
- forcedFilter,
1796
- filterFields,
1797
- localParams,
1798
- tableRule: table_rules
1799
- }));
1800
- _query += filterOpts.where;
1801
- if (validate) {
1802
- const _filter = filterOpts.filter;
1803
- await validate(_filter);
1804
- }
1805
- let returningQuery = "";
1806
- if (returning) {
1807
- queryType = "any";
1808
- if (!returningFields) {
1809
- throw "Returning dissallowed";
1810
- }
1811
- returningQuery = this.makeReturnQuery(await this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
1812
- _query += returningQuery;
1813
- }
1814
- if (returnQuery)
1815
- return _query;
1816
- /**
1817
- * Delete file
1818
- */
1819
- const dbHandler = (this.t || this.db);
1820
- if (this.is_media && this.dboBuilder.prostgles.fileManager) {
1821
- if (this.dboBuilder.prostgles.opts.fileTable?.delayedDelete) {
1822
- return dbHandler[queryType](`UPDATE ${(0, prostgles_types_1.asName)(this.name)} SET deleted = now() ${filterOpts.where} ${returningQuery};`);
1823
- }
1824
- else {
1825
- const txDelete = async (tbl) => {
1826
- if (!tbl.t)
1827
- throw new Error("Missing transaction object t");
1828
- const files = await this.find(filterOpts.filter);
1829
- for await (const file of files) {
1830
- await tbl.t?.any(`DELETE FROM ${(0, prostgles_types_1.asName)(this.name)} WHERE id = ` + "${id}", file);
1831
- await tbl.dboBuilder.prostgles.fileManager?.deleteFile(file.name);
1832
- }
1833
- if (returning) {
1834
- return files.map(f => (0, PubSubManager_1.pickKeys)(f, ["id", "name"]));
1835
- }
1836
- };
1837
- if (localParams?.dbTX) {
1838
- return txDelete(localParams.dbTX[this.name]);
1839
- }
1840
- else if (this.t) {
1841
- return txDelete(this);
1842
- }
1843
- else {
1844
- return this.dboBuilder.getTX(tx => {
1845
- return txDelete(tx[this.name]);
1846
- });
1847
- }
1848
- }
1849
- }
1850
- return dbHandler[queryType](_query).catch((err) => makeErr(err, localParams));
1851
- }
1852
- catch (e) {
1853
- // console.trace(e)
1854
- if (localParams && localParams.testRule)
1855
- throw e;
1856
- throw { err: parseError(e), msg: `Issue with dbo.${this.name}.delete(${JSON.stringify(filter || {}, null, 2)}, ${JSON.stringify(params || {}, null, 2)})` };
1857
- }
1697
+ return delete_1._delete.bind(this)(filter, params, param3_unused, table_rules, localParams);
1858
1698
  }
1859
1699
  ;
1860
1700
  remove(filter, params, param3_unused, tableRules, localParams) {