prostgles-server 4.2.613 → 4.2.615

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 (93) hide show
  1. package/dist/DBSchemaBuilder/DBSchemaBuilder.d.ts +2 -2
  2. package/dist/DBSchemaBuilder/DBSchemaBuilder.d.ts.map +1 -1
  3. package/dist/DboBuilder/DboBuilder.d.ts +2 -0
  4. package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
  5. package/dist/DboBuilder/DboBuilder.js +17 -3
  6. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  7. package/dist/DboBuilder/TableHandler/TableHandler.d.ts +5 -5
  8. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  9. package/dist/DboBuilder/TableHandler/TableHandler.js +17 -1
  10. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  11. package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
  12. package/dist/DboBuilder/TableHandler/delete.js +1 -0
  13. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  14. package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.d.ts.map +1 -1
  15. package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.js +1 -1
  16. package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.js.map +1 -1
  17. package/dist/DboBuilder/TableHandler/insert/insert.d.ts.map +1 -1
  18. package/dist/DboBuilder/TableHandler/insert/insert.js +22 -2
  19. package/dist/DboBuilder/TableHandler/insert/insert.js.map +1 -1
  20. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +3 -5
  21. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
  22. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +13 -26
  23. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
  24. package/dist/DboBuilder/TableHandler/prepareBeforeHookData.d.ts +4 -0
  25. package/dist/DboBuilder/TableHandler/prepareBeforeHookData.d.ts.map +1 -0
  26. package/dist/DboBuilder/TableHandler/prepareBeforeHookData.js +20 -0
  27. package/dist/DboBuilder/TableHandler/prepareBeforeHookData.js.map +1 -0
  28. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  29. package/dist/DboBuilder/TableHandler/update.js +36 -10
  30. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  31. package/dist/DboBuilder/TableHandler/updateFile.d.ts +5 -2
  32. package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
  33. package/dist/DboBuilder/TableHandler/updateFile.js +17 -11
  34. package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
  35. package/dist/DboBuilder/TableHandler/uploadFile.d.ts +3 -2
  36. package/dist/DboBuilder/TableHandler/uploadFile.d.ts.map +1 -1
  37. package/dist/DboBuilder/TableHandler/uploadFile.js +15 -4
  38. package/dist/DboBuilder/TableHandler/uploadFile.js.map +1 -1
  39. package/dist/DboBuilder/runSql/getAdminClient.d.ts +3 -0
  40. package/dist/DboBuilder/runSql/getAdminClient.d.ts.map +1 -1
  41. package/dist/Logging.d.ts +1 -1
  42. package/dist/Logging.d.ts.map +1 -1
  43. package/dist/PublishParser/publishTypesAndUtils.d.ts +12 -5
  44. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  45. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  46. package/dist/StorageClient/deleteUnreferencedFile.d.ts +4 -0
  47. package/dist/StorageClient/deleteUnreferencedFile.d.ts.map +1 -0
  48. package/dist/StorageClient/deleteUnreferencedFile.js +15 -0
  49. package/dist/StorageClient/deleteUnreferencedFile.js.map +1 -0
  50. package/dist/StorageClient/getFileStorageKey.d.ts +4 -0
  51. package/dist/StorageClient/getFileStorageKey.d.ts.map +1 -0
  52. package/dist/StorageClient/getFileStorageKey.js +7 -0
  53. package/dist/StorageClient/getFileStorageKey.js.map +1 -0
  54. package/dist/StorageClient/getFileTableConfig.d.ts +1 -0
  55. package/dist/StorageClient/getFileTableConfig.d.ts.map +1 -1
  56. package/dist/StorageClient/getFileTableConfig.js +9 -4
  57. package/dist/StorageClient/getFileTableConfig.js.map +1 -1
  58. package/dist/StorageClient/getFileType.d.ts.map +1 -1
  59. package/dist/StorageClient/getFileType.js +8 -10
  60. package/dist/StorageClient/getFileType.js.map +1 -1
  61. package/dist/StorageClient/getLocalStorageClient.d.ts.map +1 -1
  62. package/dist/StorageClient/getLocalStorageClient.js +20 -37
  63. package/dist/StorageClient/getLocalStorageClient.js.map +1 -1
  64. package/dist/StorageClient/getValidatedFileType.d.ts.map +1 -1
  65. package/dist/StorageClient/getValidatedFileType.js +4 -2
  66. package/dist/StorageClient/getValidatedFileType.js.map +1 -1
  67. package/dist/StorageClient/setupFileServeHandler.d.ts.map +1 -1
  68. package/dist/StorageClient/setupFileServeHandler.js +6 -3
  69. package/dist/StorageClient/setupFileServeHandler.js.map +1 -1
  70. package/dist/TableHooks/TableHooks.d.ts +10 -3
  71. package/dist/TableHooks/TableHooks.d.ts.map +1 -1
  72. package/lib/DBSchemaBuilder/DBSchemaBuilder.ts +3 -2
  73. package/lib/DboBuilder/DboBuilder.ts +18 -3
  74. package/lib/DboBuilder/TableHandler/TableHandler.ts +19 -1
  75. package/lib/DboBuilder/TableHandler/delete.ts +1 -0
  76. package/lib/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.ts +1 -2
  77. package/lib/DboBuilder/TableHandler/insert/insert.ts +31 -3
  78. package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +17 -33
  79. package/lib/DboBuilder/TableHandler/prepareBeforeHookData.ts +27 -0
  80. package/lib/DboBuilder/TableHandler/update.ts +40 -11
  81. package/lib/DboBuilder/TableHandler/updateFile.ts +25 -19
  82. package/lib/DboBuilder/TableHandler/uploadFile.ts +32 -7
  83. package/lib/Logging.ts +1 -0
  84. package/lib/PublishParser/publishTypesAndUtils.ts +26 -15
  85. package/lib/StorageClient/deleteUnreferencedFile.ts +19 -0
  86. package/lib/StorageClient/getFileStorageKey.ts +5 -0
  87. package/lib/StorageClient/getFileTableConfig.ts +19 -5
  88. package/lib/StorageClient/getFileType.ts +11 -14
  89. package/lib/StorageClient/getLocalStorageClient.ts +20 -43
  90. package/lib/StorageClient/getValidatedFileType.ts +4 -1
  91. package/lib/StorageClient/setupFileServeHandler.ts +6 -3
  92. package/lib/TableHooks/TableHooks.ts +23 -13
  93. package/package.json +8 -8
@@ -4,6 +4,7 @@ import type { TableRowFromColumnDefinitions } from "../TableConfig/TableRowFromC
4
4
  import type { TableHooks } from "../TableHooks/TableHooks";
5
5
  declare const FILE_TABLE_COLUMN_DEFINITIONS: {
6
6
  readonly id: "UUID PRIMARY KEY DEFAULT gen_random_uuid()";
7
+ readonly storage_key: "UUID UNIQUE";
7
8
  readonly extension: "TEXT NOT NULL DEFAULT ''";
8
9
  readonly content_type: "TEXT NOT NULL DEFAULT ''";
9
10
  readonly content_length: "BIGINT NOT NULL DEFAULT 0";
@@ -1 +1 @@
1
- {"version":3,"file":"getFileTableConfig.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getFileTableConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAClG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG3D,QAAA,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;CAkBzB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,6BAA6B,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAE/F,eAAO,MAAM,kBAAkB,GAC7B,KAAK,SAAS,KACb;IAAE,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,SAAS,CAAA;CA6HvF,CAAC"}
1
+ {"version":3,"file":"getFileTableConfig.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getFileTableConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAClG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAI3D,QAAA,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;CAmBzB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,6BAA6B,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAE/F,eAAO,MAAM,kBAAkB,GAC7B,KAAK,SAAS,KACb;IAAE,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,SAAS,CAAA;CAyIvF,CAAC"}
@@ -8,6 +8,7 @@ const uploadFile_1 = require("../DboBuilder/TableHandler/uploadFile");
8
8
  const setupFileServeHandler_1 = require("./setupFileServeHandler");
9
9
  const FILE_TABLE_COLUMN_DEFINITIONS = {
10
10
  id: `UUID PRIMARY KEY DEFAULT gen_random_uuid()`,
11
+ storage_key: `UUID UNIQUE`, // NULL for legacy objects stored under their file ID.
11
12
  extension: `TEXT NOT NULL DEFAULT ''`,
12
13
  content_type: `TEXT NOT NULL DEFAULT ''`,
13
14
  content_length: `BIGINT NOT NULL DEFAULT 0`,
@@ -77,8 +78,8 @@ const getFileTableConfig = (prg) => {
77
78
  insert: 1,
78
79
  update: 1,
79
80
  },
80
- validate: async ({ data: insertData, localParams, command, filter }) => {
81
- const tableHandler = prg.dboBuilder.dboMap.get(fileTableName);
81
+ validate: async ({ data: insertData, localParams, command, filter, dbx, onCommit, onRollback, }) => {
82
+ const tableHandler = dbx[fileTableName];
82
83
  if (!tableHandler)
83
84
  throw "Storage tableHandler not found";
84
85
  (0, uploadFile_1.assertFileObjectValid)(insertData);
@@ -86,6 +87,8 @@ const getFileTableConfig = (prg) => {
86
87
  const data = dataBlob;
87
88
  if (command === "update") {
88
89
  const { newData } = await (0, updateFile_1.updateFile)(tableHandler, fileTable, {
90
+ onCommit,
91
+ onRollback,
89
92
  filter: filter ?? {},
90
93
  localParams,
91
94
  data,
@@ -100,6 +103,8 @@ const getFileTableConfig = (prg) => {
100
103
  };
101
104
  }
102
105
  const media = await (0, uploadFile_1.uploadFile)(fileTable, {
106
+ onCommit,
107
+ onRollback,
103
108
  data,
104
109
  original_name,
105
110
  localParams,
@@ -116,9 +121,9 @@ const getFileTableConfig = (prg) => {
116
121
  },
117
122
  ...(userFileTableHooks?.beforeEach || []),
118
123
  ],
119
- onInsteadOfDelete: async ({ dbx, tx, returningQuery, isOneOrNone, filterOpts }) => {
124
+ onInsteadOfDelete: async ({ onCommit, tx, returningQuery, isOneOrNone, filterOpts }) => {
120
125
  return (0, onDeleteFromFileTable_1.onDeleteFromFileTable)(fileTable, {
121
- dbTX: dbx,
126
+ onCommit,
122
127
  t: tx,
123
128
  returningQuery,
124
129
  isOneOrNone,
@@ -1 +1 @@
1
- {"version":3,"file":"getFileTableConfig.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileTableConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getFileTableConfig.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileTableConfig.ts"],"names":[],"mappings":";;;AAAA,qDAA2C;AAC3C,4FAAyF;AACzF,sEAAmE;AACnE,sEAA0F;AAM1F,mEAAgE;AAGhE,MAAM,6BAA6B,GAAG;IACpC,EAAE,EAAE,4CAA4C;IAChD,WAAW,EAAE,aAAa,EAAE,sDAAsD;IAClF,SAAS,EAAE,0BAA0B;IACrC,YAAY,EAAE,0BAA0B;IACxC,cAAc,EAAE,2BAA2B;IAC3C,IAAI,EAAE,0BAA0B;IAChC,aAAa,EAAE,eAAe;IAC9B,sBAAsB,EAAE,aAAa;IACrC,WAAW,EAAE,MAAM;IACnB,GAAG,EAAE,0BAA0B;IAC/B,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,MAAM;IAClB,kBAAkB,EAAE,QAAQ;IAC5B,KAAK,EAAE,kCAAkC;IACzC,OAAO,EAAE,kCAAkC;IAC3C,OAAO,EAAE,aAAa;IACtB,oBAAoB,EAAE,aAAa;IACnC,IAAI,EAAE,mDAAmD,EAAE,8HAA8H;CACjL,CAAC;AAIJ,MAAM,kBAAkB,GAAG,CAChC,GAAc,EAC2E,EAAE;IAC3F,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IAEjC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAE9D,MAAM,mBAAmB,GAAG,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,mBAAmB,EAAE,CAAC;QACxB,IAAI,eAAe,IAAI,mBAAmB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,2BAA2B,aAAa,gDAAgD,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,mBAAmB,CAAC,YAAY,IAAI,mBAAmB,CAAC,mBAAmB,EAAE,CAAC;YAChF,MAAM,IAAI,KAAK,CACb,2BAA2B,aAAa,sEAAsE,CAC/G,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAChF,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAClB,CAAC;YACF,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,2BAA2B,aAAa,+CAA+C,eAAe,EAAE,CACzG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAgB;QACrC,CAAC,aAAa,CAAC,EAAE;YACf,GAAG,mBAAmB;YACtB,OAAO,EAAE;gBACP,GAAG,6BAA6B;gBAChC,GAAG,mBAAmB,EAAE,OAAO;aAChC;YACD,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;gBACnB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,6CAAqB,EAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;gBAE1F,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC9E,OAAO,CAAC,GAAG,CACT,6DAA6D,WAAW,uGAAuG,CAChL,CAAC;gBACF,OAAO;oBACL,SAAS,EAAE,OAAO;iBACnB,CAAC;YACJ,CAAC;SACF;QACD,GAAG,IAAA,0BAAQ,EAAC,WAAW,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;KAChD,CAAC;IAEF,MAAM,kBAAkB,GAAG,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAA0B;QAC9C,GAAG,UAAU;QACb,CAAC,aAAa,CAAC,EAAE;YACf,GAAG,kBAAkB;YACrB,UAAU,EAAE;gBACV;oBACE,QAAQ,EAAE;wBACR,MAAM,EAAE,CAAC;wBACT,MAAM,EAAE,CAAC;qBACV;oBACD,QAAQ,EAAE,KAAK,EAAE,EACf,IAAI,EAAE,UAAU,EAChB,WAAW,EACX,OAAO,EACP,MAAM,EACN,GAAG,EACH,QAAQ,EACR,UAAU,GACX,EAAE,EAAE;wBACH,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;wBACxC,IAAI,CAAC,YAAY;4BAAE,MAAM,gCAAgC,CAAC;wBAC1D,IAAA,kCAAqB,EAAC,UAAU,CAAC,CAAC;wBAElC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,sBAAsB,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC;wBACxF,MAAM,IAAI,GAAG,QAA6B,CAAC;wBAC3C,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;4BACzB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,uBAAU,EAAC,YAAY,EAAE,SAAS,EAAE;gCAC5D,QAAQ;gCACR,UAAU;gCACV,MAAM,EAAE,MAAM,IAAI,EAAE;gCACpB,WAAW;gCACX,IAAI;gCACJ,aAAa;gCACb,sBAAsB;6BACvB,CAAC,CAAC;4BACH,OAAO;gCACL,GAAG,EAAE,OAAO;gCACZ,WAAW,EAAE;oCACX,IAAI;iCACL;6BACF,CAAC;wBACJ,CAAC;wBAED,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAU,EAAC,SAAS,EAAE;4BACxC,QAAQ;4BACR,UAAU;4BACV,IAAI;4BACJ,aAAa;4BACb,WAAW;4BACX,OAAO,EAAE,EAAE;4BACX,sBAAsB;yBACvB,CAAC,CAAC;wBAEH,OAAO;4BACL,GAAG,EAAE,KAAK;4BACV,WAAW,EAAE;gCACX,IAAI;6BACL;yBACF,CAAC;oBACJ,CAAC;iBACyD;gBAC5D,GAAG,CAAC,kBAAkB,EAAE,UAAU,IAAI,EAAE,CAAC;aAC1C;YACD,iBAAiB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE;gBACrF,OAAO,IAAA,6CAAqB,EAAC,SAAS,EAAE;oBACtC,QAAQ;oBACR,CAAC,EAAE,EAAE;oBACL,cAAc;oBACd,WAAW;oBACX,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,iBAAiB;QAC9B,UAAU,EAAE,gBAAgB;KAC7B,CAAC;AACJ,CAAC,CAAC;AA3IW,QAAA,kBAAkB,sBA2I7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"getFileType.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getFileType.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,eAAO,MAAM,WAAW,GACtB,MAAM,MAAM,GAAG,MAAM,EACrB,UAAU,MAAM,KACf,OAAO,CAAC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CA0BhE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,KACf;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,GAAG,SAgB3D,CAAC"}
1
+ {"version":3,"file":"getFileType.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getFileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,eAAO,MAAM,WAAW,GACtB,MAAM,MAAM,GAAG,MAAM,EACrB,UAAU,MAAM,KACf,OAAO,CAAC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CA4BhE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,KACf;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,GAAG,SAgB3D,CAAC"}
@@ -1,6 +1,4 @@
1
1
  "use strict";
2
- // const fileType = require("file-type");
3
- // const res = await fileType.fromBuffer(typeof file === "string"? Buffer.from(file, 'utf8') : file);
4
2
  Object.defineProperty(exports, "__esModule", { value: true });
5
3
  exports.getFileTypeFromFilename = exports.getFileType = void 0;
6
4
  const prostgles_types_1 = require("prostgles-types");
@@ -9,21 +7,21 @@ const getFileType = async (file, fileName) => {
9
7
  const fileNameMime = (0, exports.getFileTypeFromFilename)(fileName);
10
8
  if (!fileNameMime?.ext)
11
9
  throw new Error("File name must contain extension");
12
- const res = await fileTypeFromBuffer(typeof file === "string" ? Buffer.from(file, "utf8") : file);
13
- if (!res) {
14
- /* Set correct/missing extension */
15
- const nameExt = fileNameMime.ext;
16
- if (["xml", "txt", "csv", "tsv", "svg", "sql"].includes(nameExt)) {
10
+ const detectedFileType = await fileTypeFromBuffer(typeof file === "string" ? Buffer.from(file, "utf8") : file);
11
+ if (!detectedFileType) {
12
+ // Text formats may not have a detectable binary signature.
13
+ const { mime } = fileNameMime;
14
+ if (mime.startsWith("text/") || mime.endsWith("+xml") || mime === "application/sql") {
17
15
  return fileNameMime;
18
16
  }
19
17
  throw new Error("Could not get the file type from file buffer");
20
18
  }
21
19
  else {
22
- if (fileNameMime.ext.toLowerCase() !== res.ext.toLowerCase()) {
23
- throw new Error(`There is a mismatch between file name extension and actual buffer extension: ${fileNameMime.ext} vs ${res.ext}`);
20
+ if (fileNameMime.ext.toLowerCase() !== detectedFileType.ext.toLowerCase()) {
21
+ throw new Error(`There is a mismatch between file name extension and actual buffer extension: ${fileNameMime.ext} vs ${detectedFileType.ext}`);
24
22
  }
25
23
  }
26
- return res;
24
+ return detectedFileType;
27
25
  };
28
26
  exports.getFileType = getFileType;
29
27
  const getFileTypeFromFilename = (fileName) => {
@@ -1 +1 @@
1
- {"version":3,"file":"getFileType.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileType.ts"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,qGAAqG;;;AAKrG,qDAA+D;AAExD,MAAM,WAAW,GAAG,KAAK,EAC9B,IAAqB,EACrB,QAAgB,EACiD,EAAE;IACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAO,IAAI,CAAC,qBAAqB,CAG9D,CAAC;IAEH,MAAM,YAAY,GAAG,IAAA,+BAAuB,EAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY,EAAE,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAElG,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,mCAAmC;QACnC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CACb,gFAAgF,YAAY,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,EAAE,CACjH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,GAAU,CAAC;AACpB,CAAC,CAAC;AA7BW,QAAA,WAAW,eA6BtB;AAEK,MAAM,uBAAuB,GAAG,CACrC,QAAgB,EACoD,EAAE;IACtE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,EAC7C,IAAI,GAAG,IAAA,yBAAO,EAAC,qCAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,qCAAmB,CAAC,CAAC,CAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChE,CAAC;IAEJ,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,OAA4B;KAClC,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,uBAAuB,2BAkBlC"}
1
+ {"version":3,"file":"getFileType.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileType.ts"],"names":[],"mappings":";;;AACA,qDAA+D;AAExD,MAAM,WAAW,GAAG,KAAK,EAC9B,IAAqB,EACrB,QAAgB,EACiD,EAAE;IACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAO,IAAI,CAAC,qBAAqB,CAG9D,CAAC;IAEH,MAAM,YAAY,GAAG,IAAA,+BAAuB,EAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY,EAAE,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,MAAM,kBAAkB,CAC/C,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAC5D,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2DAA2D;QAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;QAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACpF,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CACb,gFAAgF,YAAY,CAAC,GAAG,OAAO,gBAAgB,CAAC,GAAG,EAAE,CAC9H,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,gBAAuB,CAAC;AACjC,CAAC,CAAC;AA/BW,QAAA,WAAW,eA+BtB;AAEK,MAAM,uBAAuB,GAAG,CACrC,QAAgB,EACoD,EAAE;IACtE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,EAC7C,IAAI,GAAG,IAAA,yBAAO,EAAC,qCAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,qCAAmB,CAAC,CAAC,CAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChE,CAAC;IAEJ,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,OAA4B;KAClC,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,uBAAuB,2BAkBlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getLocalStorageClient.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getLocalStorageClient.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,aAAa,WAAW,KAAG,kBAyGhE,CAAC"}
1
+ {"version":3,"file":"getLocalStorageClient.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getLocalStorageClient.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,aAAa,WAAW,KAAG,kBAiFhE,CAAC"}
@@ -8,6 +8,7 @@ const crypto_1 = __importDefault(require("crypto"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const stream_1 = __importDefault(require("stream"));
11
+ const promises_1 = require("stream/promises");
11
12
  const getLocalStorageClient = (localConfig) => {
12
13
  const { localFolderPath, minFreeBytes = 100 * 1024 * 1024 } = localConfig; // Default 100MB
13
14
  // Helper to ensure we have enough free disk space (Requires Node >= 18.17.0)
@@ -35,46 +36,28 @@ const getLocalStorageClient = (localConfig) => {
35
36
  const filePath = path_1.default.join(localFolderPath, args.fileName);
36
37
  const hash = crypto_1.default.createHash("md5");
37
38
  let contentLength = 0;
38
- return new Promise((resolve, reject) => {
39
- const writeStream = fs_1.default.createWriteStream(filePath);
40
- writeStream.on("error", reject);
41
- writeStream.on("finish", () => {
42
- resolve({
43
- type: "local",
44
- filePath,
45
- contentHash: hash.digest("hex"),
46
- contentLength: contentLength,
47
- });
48
- });
49
- if (typeof args.file === "string" || Buffer.isBuffer(args.file)) {
50
- const buffer = Buffer.isBuffer(args.file) ? args.file : Buffer.from(args.file);
51
- contentLength = buffer.length;
52
- hash.update(buffer);
53
- if (args.onProgress) {
39
+ const buffered = typeof args.file === "string" || Buffer.isBuffer(args.file);
40
+ const source = buffered ? stream_1.default.Readable.from([args.file]) : args.file;
41
+ let lastProgress = Date.now();
42
+ const measure = new stream_1.default.Transform({
43
+ transform: (chunk, _encoding, callback) => {
44
+ contentLength += chunk.length;
45
+ hash.update(chunk);
46
+ if (args.onProgress && (buffered || Date.now() - lastProgress > 1000)) {
47
+ lastProgress = Date.now();
54
48
  args.onProgress(contentLength);
55
49
  }
56
- writeStream.write(buffer);
57
- writeStream.end();
58
- }
59
- else if (args.file instanceof stream_1.default.Readable ||
60
- args.file instanceof stream_1.default.PassThrough) {
61
- let lastProgress = Date.now();
62
- const throttle = 1000; // 1 second
63
- args.file.on("data", (chunk) => {
64
- contentLength += chunk.length;
65
- hash.update(chunk);
66
- if (args.onProgress && Date.now() - lastProgress > throttle) {
67
- lastProgress = Date.now();
68
- args.onProgress(contentLength);
69
- }
70
- });
71
- args.file.on("error", reject);
72
- args.file.pipe(writeStream);
73
- }
74
- else {
75
- reject(new Error("Unsupported file type provided to upload."));
76
- }
50
+ callback(null, chunk);
51
+ },
77
52
  });
53
+ // Wait for all streams to close before transaction cleanup can remove a failed upload.
54
+ await (0, promises_1.pipeline)(source, measure, fs_1.default.createWriteStream(filePath));
55
+ return {
56
+ type: "local",
57
+ filePath,
58
+ contentHash: hash.digest("hex"),
59
+ contentLength,
60
+ };
78
61
  },
79
62
  downloadAsStream: async (name) => {
80
63
  const filePath = path_1.default.join(localFolderPath, name);
@@ -1 +1 @@
1
- {"version":3,"file":"getLocalStorageClient.js","sourceRoot":"","sources":["../../lib/StorageClient/getLocalStorageClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getLocalStorageClient.js","sourceRoot":"","sources":["../../lib/StorageClient/getLocalStorageClient.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,4CAAoB;AACpB,gDAAwB;AACxB,oDAA4B;AAC5B,8CAA2C;AAqBpC,MAAM,qBAAqB,GAAG,CAAC,WAAwB,EAAsB,EAAE;IACpF,MAAM,EAAE,eAAe,EAAE,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,gBAAgB;IAE3F,6EAA6E;IAC7E,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;YAE7C,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CACb,sCAAsC,YAAY,sBAAsB,SAAS,QAAQ,CAC1F,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,+FAA+F;YAC/F,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,OAAO;QACb,eAAe,EAAE,WAAW,CAAC,eAAe;QAC5C,MAAM,EAAE,KAAK,EAAE,IAAuB,EAAqC,EAAE;YAC3E,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,MAAM,cAAc,EAAE,CAAC;YAEvB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,aAAa,GAAG,CAAC,CAAC;YAEtB,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACxE,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,gBAAM,CAAC,SAAS,CAAC;gBACnC,SAAS,EAAE,CAAC,KAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;oBAChD,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACnB,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;wBACtE,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC1B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;oBACjC,CAAC;oBACD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxB,CAAC;aACF,CAAC,CAAC;YACH,uFAAuF;YACvF,MAAM,IAAA,mBAAQ,EAAC,MAAM,EAAE,OAAO,EAAE,YAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChE,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,QAAQ;gBACR,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/B,aAAa;aACd,CAAC;QACJ,CAAC;QAED,gBAAgB,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;YACvC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAElD,IAAI,CAAC;gBACH,MAAM,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,OAAO,YAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;YACjC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,qCAAqC;gBACrC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1B,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAjFW,QAAA,qBAAqB,yBAiFhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getValidatedFileType.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getValidatedFileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,eAAe,EACvB,MAAM,IAAI,KACT,OAAO,CAAC;IACT,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CAIb,CAsEA,CAAC"}
1
+ {"version":3,"file":"getValidatedFileType.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getValidatedFileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,eAAe,EACvB,MAAM,IAAI,KACT,OAAO,CAAC;IACT,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CAIb,CAyEA,CAAC"}
@@ -48,8 +48,10 @@ const getValidatedFileType = async (config, args) => {
48
48
  }
49
49
  }
50
50
  }
51
- if (!result?.mime)
52
- throw `File MIME type not found for the provided extension: ${result?.ext}`;
51
+ if (!result?.mime) {
52
+ const extension = fileName.includes(".") ? fileName.split(".").at(-1) : "(none)";
53
+ throw `File MIME type not found for the provided extension: ${extension}`;
54
+ }
53
55
  return result;
54
56
  };
55
57
  exports.getValidatedFileType = getValidatedFileType;
@@ -1 +1 @@
1
- {"version":3,"file":"getValidatedFileType.js","sourceRoot":"","sources":["../../lib/StorageClient/getValidatedFileType.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getValidatedFileType.js","sourceRoot":"","sources":["../../lib/StorageClient/getValidatedFileType.ts"],"names":[],"mappings":";;;AACA,qDAAyE;AACzE,iFAA8E;AAE9E,+CAAqE;AAQ9D,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAuB,EACvB,IAAU,EAOT,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEpD,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3E,MAAM,MAAM,GAAG,IAAA,qCAAuB,EAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,WAAW,IAAI,IAAA,0BAAQ,EAAC,WAAW,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YAClF,MAAM,SAAS,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACxD,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;gBAC5B,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,gBAAgB,GAAG,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;oBACrD,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,CAAC,aAAa,UAAU,CAAC,CAAC;gBACzF,CAAC;YACH,CAAC;YAED,IACE,iBAAiB,IAAI,SAAS;gBAC9B,SAAS,CAAC,eAAe;gBACzB,SAAS,CAAC,eAAe,KAAK,GAAG,EACjC,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAW,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;gBACpE,MAAM,cAAc,GAAG,IAAA,mCAAgB,EAAC,SAAS,CAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACpF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,4BAA4B,cAAc,GAAG,CAC1G,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IACL,qBAAqB,IAAI,SAAS;gBAClC,SAAS,CAAC,mBAAmB;gBAC7B,SAAS,CAAC,mBAAmB,KAAK,GAAG,EACrC,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAW,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACjD,MAAM,mBAAmB,GAAG,IAAA,mCAAgB,EAC1C,SAAS,CAAC,mBAAmB,EAC7B,KAAK,EACL,IAAA,yBAAO,EAAC,qCAAmB,CAAC,CAC7B,CAAC;gBAEF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtD,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,CAAC,IAAI,0BAA0B,mBAAmB,GAAG,CACvF,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IACL,mBAAmB,IAAI,SAAS;gBAChC,SAAS,CAAC,iBAAiB;gBAC3B,SAAS,CAAC,iBAAiB,KAAK,GAAG,EACnC,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAW,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACjD,MAAM,iBAAiB,GAAG,IAAA,mCAAgB,EACxC,SAAS,CAAC,iBAAiB,EAC3B,KAAK,EACL,MAAM,CAAC,MAAM,CAAC,qCAAmB,CAAC,CAAC,IAAI,EAAE,CAC1C,CAAC;gBAEF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnD,MAAM,IAAI,KAAK,CACb,kCAAkC,IAAI,CAAC,GAAG,+BAA+B,iBAAiB,GAAG,CAC9F,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjF,MAAM,wDAAwD,SAAS,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAlFW,QAAA,oBAAoB,wBAkF/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"setupFileServeHandler.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/setupFileServeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAI7B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,eAAO,MAAM,iBAAiB,GAAI,QAAQ,eAAe,WAOxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,IAAI,EAAE,EACN,QAAQ,eAAe,EACvB,eAAe,aAAa,EAC5B,KAAK,CAAC,CAAC,OAAO,EACd,KAAK,SAAS;;CAiFf,CAAC"}
1
+ {"version":3,"file":"setupFileServeHandler.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/setupFileServeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAI7B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,eAAO,MAAM,iBAAiB,GAAI,QAAQ,eAAe,WAOxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,IAAI,EAAE,EACN,QAAQ,eAAe,EACvB,eAAe,aAAa,EAC5B,KAAK,CAAC,CAAC,OAAO,EACd,KAAK,SAAS;;CAmFf,CAAC"}
@@ -38,6 +38,7 @@ const fs = __importStar(require("fs"));
38
38
  const path_1 = require("path");
39
39
  const AuthHandler_1 = require("../Auth/AuthHandler");
40
40
  const runClientRequest_1 = require("../runClientRequest");
41
+ const getFileStorageKey_1 = require("./getFileStorageKey");
41
42
  const getFileServeRoute = (config) => {
42
43
  const fileTableName = config.tableName;
43
44
  const fileServeRoute = config.fileServePath ?? `/${fileTableName}`;
@@ -60,6 +61,7 @@ const setupFileServeHandler = (db, config, storageClient, app, prg) => {
60
61
  const selectParams = {
61
62
  select: {
62
63
  id: 1,
64
+ storage_key: 1,
63
65
  signed_url: 1,
64
66
  signed_url_expires: 1,
65
67
  content_type: 1,
@@ -85,10 +87,11 @@ const setupFileServeHandler = (db, config, storageClient, app, prg) => {
85
87
  const HOUR = 3600 * 1000;
86
88
  const EXPIRES = Date.now() + HOUR;
87
89
  if (!url || expires < EXPIRES) {
88
- url = await storageClient.getSignedUrlForDownload(file.id, 60 * 60);
89
- await db.any("UPDATE ${fileTableName:name} SET signed_url = ${signed_url}, signed_url_expires = ${signed_url_expires} WHERE id = ${id}", {
90
+ url = await storageClient.getSignedUrlForDownload((0, getFileStorageKey_1.getFileStorageKey)(file), 60 * 60);
91
+ await db.any("UPDATE ${fileTableName:name} SET signed_url = ${signed_url}, signed_url_expires = ${signed_url_expires} WHERE id = ${id} AND storage_key IS NOT DISTINCT FROM ${storage_key}::uuid", {
90
92
  fileTableName,
91
93
  id: file.id,
94
+ storage_key: file.storage_key,
92
95
  signed_url: url,
93
96
  signed_url_expires: EXPIRES,
94
97
  });
@@ -96,7 +99,7 @@ const setupFileServeHandler = (db, config, storageClient, app, prg) => {
96
99
  res.redirect(url);
97
100
  }
98
101
  else {
99
- const localFilePath = (0, path_1.join)(storageClient.localFolderPath, file.id);
102
+ const localFilePath = (0, path_1.join)(storageClient.localFolderPath, (0, getFileStorageKey_1.getFileStorageKey)(file));
100
103
  if (!fs.existsSync(localFilePath)) {
101
104
  throw new Error("File not found");
102
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setupFileServeHandler.js","sourceRoot":"","sources":["../../lib/StorageClient/setupFileServeHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setupFileServeHandler.js","sourceRoot":"","sources":["../../lib/StorageClient/setupFileServeHandler.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,21 @@ import type pgPromise from "pg-promise";
2
2
  import type { AnyObject, DBSchema } from "prostgles-types";
3
3
  import type { DbTxTableHandlers } from "../DboBuilder/DboBuilderTypes";
4
4
  import type { DBOFullyTyped } from "../DBSchemaBuilder/DBSchemaBuilder";
5
- import type { AfterAllTsTrigger, AfterEachTsTrigger, BeforeEachTsTrigger } from "../PublishParser/PublishParser";
5
+ import type { AfterAllTsTrigger, AfterEachTsTrigger, BeforeEachTsTrigger, TransactionCallbacks } from "../PublishParser/PublishParser";
6
6
  export type TableHooks<S = void, Context = undefined> = S extends DBSchema ? Partial<{
7
7
  [tableName in keyof S]: TableHooksDefinition<Required<S[tableName]["columns"]>, DBOFullyTyped<S>, Context>;
8
8
  }> : Record<string, TableHooksDefinition<AnyObject, DbTxTableHandlers, Context>>;
9
9
  export type TableHooksDefinition<RowDataType = AnyObject, DBX = DbTxTableHandlers, Context = undefined> = {
10
10
  /**
11
- * Runs sequentially before validation and SQL for each insert row, or once per update request.
11
+ * Runs after input field permissions are checked, before row validation and mutation SQL.
12
+ * Runs for each insert row, or once per update request with permitted matching rows.
13
+ * The update filter includes the publish forcedFilter. Matching rows are locked before hooks.
14
+ * SQL-only requests (including updateBatch) cannot run applicable beforeEach hooks.
12
15
  * May replace the pending data and pass `hookContext` to the next hook.
13
16
  * `onInserted` also runs for updates, is not awaited, and runs before the transaction commits.
17
+ * Register `onCommit`/`onRollback` before starting external work so cleanup also runs if the
18
+ * hook throws. These callbacks are awaited after the outer transaction finishes and receive
19
+ * the non-transactional `db` and `dbo` objects.
14
20
  */
15
21
  beforeEach?: BeforeEachTsTrigger<RowDataType, DBX, Context>[];
16
22
  /**
@@ -31,6 +37,7 @@ export type TableHooksDefinition<RowDataType = AnyObject, DBX = DbTxTableHandler
31
37
  /**
32
38
  * Replaces the generated DELETE. Must perform the mutation and shape its return value using
33
39
  * the prepared filter and returning arguments. Delete `afterEach`/`afterAll` hooks do not run.
40
+ * Use `onCommit`/`onRollback` for external side effects after the outer transaction finishes.
34
41
  */
35
42
  onInsteadOfDelete?: (args: {
36
43
  context: Context;
@@ -43,6 +50,6 @@ export type TableHooksDefinition<RowDataType = AnyObject, DBX = DbTxTableHandler
43
50
  where: string;
44
51
  filter: AnyObject;
45
52
  };
46
- }) => Promise<AnyObject[] | undefined>;
53
+ } & TransactionCallbacks<DBX>) => Promise<AnyObject[] | undefined>;
47
54
  };
48
55
  //# sourceMappingURL=TableHooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableHooks.d.ts","sourceRoot":"","sources":["../../lib/TableHooks/TableHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,GAAG,SAAS,IAClD,CAAC,SAAS,QAAQ,GAChB,OAAO,CAAC;KACL,SAAS,IAAI,MAAM,CAAC,GAAG,oBAAoB,CAC1C,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,EACjC,aAAa,CAAC,CAAC,CAAC,EAChB,OAAO,CACR;CACF,CAAC,GACF,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhF,MAAM,MAAM,oBAAoB,CAC9B,WAAW,GAAG,SAAS,EACvB,GAAG,GAAG,iBAAiB,EACvB,OAAO,GAAG,SAAS,IACjB;IACF;;;;OAIG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;IAE9D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;IAE5D;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;IAE1D;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QACzB,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE,GAAG,CAAC;QACT,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QAC1B,UAAU,EAAE;YACV,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,SAAS,CAAC;SACnB,CAAC;KACH,KAAK,OAAO,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;CACxC,CAAC"}
1
+ {"version":3,"file":"TableHooks.d.ts","sourceRoot":"","sources":["../../lib/TableHooks/TableHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,GAAG,SAAS,IAClD,CAAC,SAAS,QAAQ,GAChB,OAAO,CAAC;KACL,SAAS,IAAI,MAAM,CAAC,GAAG,oBAAoB,CAC1C,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,EACjC,aAAa,CAAC,CAAC,CAAC,EAChB,OAAO,CACR;CACF,CAAC,GACF,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhF,MAAM,MAAM,oBAAoB,CAC9B,WAAW,GAAG,SAAS,EACvB,GAAG,GAAG,iBAAiB,EACvB,OAAO,GAAG,SAAS,IACjB;IACF;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;IAE9D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;IAE5D;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;IAE1D;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAClB,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE,GAAG,CAAC;QACT,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QAC1B,UAAU,EAAE;YACV,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,SAAS,CAAC;SACnB,CAAC;KACH,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAC1B,OAAO,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;CACvC,CAAC"}
@@ -6,12 +6,13 @@ import { type PublishObject } from "../PublishParser/PublishParser";
6
6
  export type ServerTableHandler<
7
7
  T extends AnyObject = AnyObject,
8
8
  Schema extends DBSchema | void = void,
9
- > = TableHandler<T, Schema> & { isView: boolean };
9
+ TName extends PropertyKey = never,
10
+ > = TableHandler<T, Schema, TName> & { isView: boolean };
10
11
 
11
12
  export type DBTableHandlersFromSchema<Schema = void> =
12
13
  Schema extends DBSchema ?
13
14
  {
14
- [tov_name in keyof Schema]: ServerTableHandler<Schema[tov_name]["columns"], Schema>;
15
+ [tov_name in keyof Schema]: ServerTableHandler<Schema[tov_name]["columns"], Schema, tov_name>;
15
16
  }
16
17
  : Record<string, Partial<ServerTableHandler>>;
17
18
 
@@ -141,6 +141,13 @@ export class DboBuilder {
141
141
  onSchemaChange?: (event: { command: string; query: string }) => void;
142
142
 
143
143
  private readonly onCommitCallbacksByTransaction = new WeakMap<object, OnCommitCallback[]>();
144
+ private readonly onRollbackCallbacksByTransaction = new WeakMap<object, OnCommitCallback[]>();
145
+
146
+ registerOnRollbackCallback = (transaction: object, callback: OnCommitCallback) => {
147
+ const callbacks = this.onRollbackCallbacksByTransaction.get(transaction);
148
+ if (!callbacks) throw new Error("Transaction is not active");
149
+ callbacks.push(callback);
150
+ };
144
151
 
145
152
  registerOnCommitCallback = (transaction: object, callback: OnCommitCallback) => {
146
153
  const callbacks = this.onCommitCallbacksByTransaction.get(transaction);
@@ -150,7 +157,10 @@ export class DboBuilder {
150
157
  callbacks.push(callback);
151
158
  };
152
159
 
153
- private runOnCommitCallbacks = async (callbacks: OnCommitCallback[]) => {
160
+ private runOnCommitCallbacks = async (
161
+ callbacks: OnCommitCallback[],
162
+ command: "DboBuilder.onCommit" | "DboBuilder.onRollback" = "DboBuilder.onCommit",
163
+ ) => {
154
164
  for (const callback of callbacks) {
155
165
  const start = Date.now();
156
166
  try {
@@ -159,13 +169,13 @@ export class DboBuilder {
159
169
  const error = getSerialisableError(rawError);
160
170
  const onLog = this.prostgles.opts.onLog;
161
171
  if (!onLog) {
162
- console.error("DboBuilder.onCommit callback failed", error);
172
+ console.error(`${command} callback failed`, error);
163
173
  continue;
164
174
  }
165
175
  try {
166
176
  await onLog({
167
177
  type: "debug",
168
- command: "DboBuilder.onCommit",
178
+ command,
169
179
  duration: Date.now() - start,
170
180
  error,
171
181
  });
@@ -423,12 +433,14 @@ export class DboBuilder {
423
433
 
424
434
  getTX = async <R, TH extends DbTxTableHandlers>(cb: TxCB<Promise<R> | R, TH>) => {
425
435
  const onCommitCallbacks: OnCommitCallback[] = [];
436
+ const onRollbackCallbacks: OnCommitCallback[] = [];
426
437
  let transaction: object | undefined;
427
438
  let result: R;
428
439
  try {
429
440
  result = await this.db.tx((t) => {
430
441
  transaction = t;
431
442
  this.onCommitCallbacksByTransaction.set(transaction, onCommitCallbacks);
443
+ this.onRollbackCallbacksByTransaction.set(transaction, onRollbackCallbacks);
432
444
 
433
445
  const dbTX: DbTxTableHandlers = {};
434
446
  this.tablesOrViews?.map((tov) => {
@@ -447,10 +459,13 @@ export class DboBuilder {
447
459
  });
448
460
  } catch (error) {
449
461
  if (transaction) this.onCommitCallbacksByTransaction.delete(transaction);
462
+ if (transaction) this.onRollbackCallbacksByTransaction.delete(transaction);
463
+ await this.runOnCommitCallbacks(onRollbackCallbacks, "DboBuilder.onRollback");
450
464
  throw error;
451
465
  }
452
466
 
453
467
  if (transaction) this.onCommitCallbacksByTransaction.delete(transaction);
468
+ if (transaction) this.onRollbackCallbacksByTransaction.delete(transaction);
454
469
  await this.runOnCommitCallbacks(onCommitCallbacks);
455
470
  return result;
456
471
  };
@@ -40,6 +40,7 @@ import { upsert } from "./upsert";
40
40
  import { isApplicableHook } from "./isApplicableHook";
41
41
  import type { TableConfigurator } from "../../TableConfig/TableConfigurator";
42
42
  import type { TableHooksDefinition } from "../../TableHooks/TableHooks";
43
+ import type { TransactionCallbacks } from "../../PublishParser/publishTypesAndUtils";
43
44
 
44
45
  export type ValidatedParams = {
45
46
  row: AnyObject;
@@ -98,12 +99,14 @@ export class TableHandler extends ViewHandler {
98
99
  await transaction.t.none(withUserRLS(localParams, ""));
99
100
  }
100
101
  let newRow = row;
102
+ const initialKeys = Object.keys(row);
101
103
  let newHookContext: AnyObject | undefined = undefined;
102
104
  const successCallbacks: (() => void)[] = [];
103
105
  for (const hook of hooks) {
104
106
  const isApplicable = isApplicableHook(this, [newRow], hook, command);
105
107
  if (!isApplicable) continue;
106
108
  const hookResult = await hook.validate({
109
+ ...this.getTransactionCallbacks(localParams),
107
110
  command,
108
111
  context: this.dboBuilder.prostgles.context,
109
112
  data: newRow,
@@ -123,7 +126,6 @@ export class TableHandler extends ViewHandler {
123
126
  }
124
127
  }
125
128
 
126
- const initialKeys = Object.keys(row);
127
129
  return {
128
130
  row: newRow,
129
131
  successCallbacks,
@@ -131,6 +133,22 @@ export class TableHandler extends ViewHandler {
131
133
  };
132
134
  };
133
135
 
136
+ getTransactionCallbacks = (
137
+ localParams: LocalParams | undefined,
138
+ ): TransactionCallbacks<TableHandlers> => {
139
+ const transaction = this.getTransaction(localParams);
140
+ return {
141
+ onCommit: (callback) => {
142
+ if (!transaction) throw new Error("onCommit requires a transaction");
143
+ this.dboBuilder.registerOnCommitCallback(transaction.t, callback);
144
+ },
145
+ onRollback: (callback) => {
146
+ if (!transaction) throw new Error("onRollback requires a transaction");
147
+ this.dboBuilder.registerOnRollbackCallback(transaction.t, callback);
148
+ },
149
+ };
150
+ };
151
+
134
152
  getAfterHooksAndChecks = (
135
153
  command:
136
154
  | { name: "delete"; rule: undefined | DeleteRule }
@@ -163,6 +163,7 @@ export async function _delete(
163
163
  await transaction.t.none(withUserRLS(localParams, ""));
164
164
  }
165
165
  const result = await onInsteadOfDelete({
166
+ ...this.getTransactionCallbacks(localParams),
166
167
  context: this.dboBuilder.prostgles.context,
167
168
  queryType,
168
169
  isOneOrNone,
@@ -47,8 +47,7 @@ export const executeAfterHooksCheckAndPostValidation = async ({
47
47
  const txParams = {
48
48
  tx: transaction.t,
49
49
  dbx: transaction.dbTX,
50
- onCommit: (callback: Parameters<typeof tableHandler.dboBuilder.registerOnCommitCallback>[1]) =>
51
- tableHandler.dboBuilder.registerOnCommitCallback(transaction.t, callback),
50
+ ...tableHandler.getTransactionCallbacks(localParams),
52
51
  };
53
52
 
54
53
  const txKey = transaction.t as unknown as object;
@@ -8,6 +8,7 @@ import { getReturnTypeQuery } from "../../ViewHandler/getReturnTypeQuery";
8
8
  import type { TableHandler } from "../TableHandler";
9
9
  import { insertTest } from "../insertTest";
10
10
  import { runInsertUpdateQuery } from "../runInsertUpdateQuery";
11
+ import { prepareBeforeHookData } from "../prepareBeforeHookData";
11
12
  import { getInsertQuery } from "./getInsertQuery";
12
13
  import { insertNestedRecords } from "./insertNestedRecords";
13
14
 
@@ -86,20 +87,43 @@ export async function insert(
86
87
  });
87
88
 
88
89
  validateInsertParams(insertParams);
90
+ const hasBeforeHooks = this.getBeforeHooks("insert", rows).length > 0;
91
+ if (hasBeforeHooks && (insertParams?.returnType === "statement" || localParams?.returnQuery)) {
92
+ throw new Error("Inserts with beforeEach hooks cannot return SQL statements");
93
+ }
94
+ if (this.is_media) {
95
+ const conflict = insertParams?.onConflict;
96
+ if ((typeof conflict === "string" ? conflict : conflict?.action) === "DoUpdate") {
97
+ throw new Error("Use update to replace an existing file");
98
+ }
99
+ }
89
100
 
90
101
  const transaction = this.getTransaction(localParams);
91
102
  const tx = transaction?.t || this.db;
92
103
 
93
104
  const successCallbacks: (() => void)[] = [];
94
- const preValidatedRows: InsertedRowWithInfo[] = await Promise.all(
95
- rows.map(async (nonValidated) => {
105
+ // Check every input before any hook can perform work or remove disallowed fields.
106
+ const inputs =
107
+ hasBeforeHooks ?
108
+ rows.map((row) =>
109
+ prepareBeforeHookData(
110
+ this,
111
+ row,
112
+ fields,
113
+ insertParams?.removeDisallowedFields ?? false,
114
+ "insert",
115
+ ),
116
+ )
117
+ : rows;
118
+ const preparedRows = await Promise.allSettled(
119
+ inputs.map(async (input) => {
96
120
  const { preValidate } = rule ?? {};
97
121
  const { tableConfigurator } = this.dboBuilder.prostgles;
98
122
  if (!tableConfigurator) {
99
123
  throw "tableConfigurator missing";
100
124
  }
101
125
 
102
- const beforeResult = await this.beforeEach(nonValidated, localParams, "insert", undefined);
126
+ const beforeResult = await this.beforeEach(input, localParams, "insert", undefined);
103
127
  let row = beforeResult.row;
104
128
  beforeResult.successCallbacks.forEach((cb) => successCallbacks.push(cb));
105
129
 
@@ -120,6 +144,10 @@ export async function insert(
120
144
  return { row, columnsAddedFromBeforeHooks: beforeResult.columnsAdded };
121
145
  }),
122
146
  );
147
+ const preValidatedRows: InsertedRowWithInfo[] = preparedRows.map((result) => {
148
+ if (result.status === "rejected") throw result.reason;
149
+ return result.value;
150
+ });
123
151
  const preValidatedRowOrRows = isMultiInsert ? preValidatedRows : preValidatedRows[0]!;
124
152
 
125
153
  /**