prostgles-server 4.2.625 → 4.2.627

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 (172) hide show
  1. package/debug/prostgles-types-4.0.285.tgz +0 -0
  2. package/dist/Audit/AuditTable.d.ts +2 -1
  3. package/dist/Audit/AuditTable.d.ts.map +1 -1
  4. package/dist/Audit/AuditTable.js.map +1 -1
  5. package/dist/Audit/getAuditTableRules.d.ts.map +1 -1
  6. package/dist/Audit/getAuditTableRules.js +4 -4
  7. package/dist/Audit/getAuditTableRules.js.map +1 -1
  8. package/dist/DBSchemaBuilder/getClientDBGeneratedSchemas.d.ts.map +1 -1
  9. package/dist/DBSchemaBuilder/getClientDBGeneratedSchemas.js +7 -1
  10. package/dist/DBSchemaBuilder/getClientDBGeneratedSchemas.js.map +1 -1
  11. package/dist/DboBuilder/QueryBuilder/Functions/Functions.d.ts +3 -1
  12. package/dist/DboBuilder/QueryBuilder/Functions/Functions.d.ts.map +1 -1
  13. package/dist/DboBuilder/QueryBuilder/Functions/Functions.js +18 -11
  14. package/dist/DboBuilder/QueryBuilder/Functions/Functions.js.map +1 -1
  15. package/dist/DboBuilder/QueryBuilder/Functions/HASHING_FUNCTIONS.d.ts.map +1 -1
  16. package/dist/DboBuilder/QueryBuilder/Functions/HASHING_FUNCTIONS.js +16 -21
  17. package/dist/DboBuilder/QueryBuilder/Functions/HASHING_FUNCTIONS.js.map +1 -1
  18. package/dist/DboBuilder/QueryBuilder/Functions/utils.d.ts +1 -0
  19. package/dist/DboBuilder/QueryBuilder/Functions/utils.d.ts.map +1 -1
  20. package/dist/DboBuilder/QueryBuilder/Functions/utils.js +3 -1
  21. package/dist/DboBuilder/QueryBuilder/Functions/utils.js.map +1 -1
  22. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +18 -2
  23. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  24. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +54 -16
  25. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
  26. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts +1 -1
  27. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
  28. package/dist/DboBuilder/QueryBuilder/getNewQuery.js +40 -6
  29. package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
  30. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.d.ts.map +1 -1
  31. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js +2 -12
  32. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js.map +1 -1
  33. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +3 -1
  34. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
  35. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +21 -6
  36. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
  37. package/dist/DboBuilder/TableHandler/updateFile.d.ts +2 -39
  38. package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
  39. package/dist/DboBuilder/TableHandler/updateFile.js +1 -0
  40. package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
  41. package/dist/DboBuilder/TableHandler/uploadFile.d.ts +2 -1
  42. package/dist/DboBuilder/TableHandler/uploadFile.d.ts.map +1 -1
  43. package/dist/DboBuilder/TableHandler/uploadFile.js +2 -1
  44. package/dist/DboBuilder/TableHandler/uploadFile.js.map +1 -1
  45. package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
  46. package/dist/DboBuilder/ViewHandler/find.js +2 -29
  47. package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
  48. package/dist/DboBuilder/ViewHandler/getRawInfo.d.ts.map +1 -1
  49. package/dist/DboBuilder/ViewHandler/getRawInfo.js +6 -2
  50. package/dist/DboBuilder/ViewHandler/getRawInfo.js.map +1 -1
  51. package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts +4 -1
  52. package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts.map +1 -1
  53. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js +9 -2
  54. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js.map +1 -1
  55. package/dist/DboBuilder/ViewHandler/subscribe.d.ts.map +1 -1
  56. package/dist/DboBuilder/ViewHandler/subscribe.js +8 -3
  57. package/dist/DboBuilder/ViewHandler/subscribe.js.map +1 -1
  58. package/dist/DboBuilder/ViewHandler/validateSelectParams.d.ts +3 -0
  59. package/dist/DboBuilder/ViewHandler/validateSelectParams.d.ts.map +1 -0
  60. package/dist/DboBuilder/ViewHandler/validateSelectParams.js +48 -0
  61. package/dist/DboBuilder/ViewHandler/validateSelectParams.js.map +1 -0
  62. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  63. package/dist/DboBuilder/getColumns.js +3 -0
  64. package/dist/DboBuilder/getColumns.js.map +1 -1
  65. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  66. package/dist/DboBuilder/getCondition.js +9 -3
  67. package/dist/DboBuilder/getCondition.js.map +1 -1
  68. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
  69. package/dist/DboBuilder/getSubscribeRelatedTables.js +7 -2
  70. package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
  71. package/dist/ProstglesTypes.d.ts +10 -0
  72. package/dist/ProstglesTypes.d.ts.map +1 -1
  73. package/dist/ProstglesTypes.js.map +1 -1
  74. package/dist/PubSubManager/PubSubManager.d.ts +1 -1
  75. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  76. package/dist/PubSubManager/PubSubManager.js +1 -1
  77. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  78. package/dist/PubSubManager/addSub.js +1 -1
  79. package/dist/PubSubManager/addSub.js.map +1 -1
  80. package/dist/PublishParser/PublishParser.d.ts.map +1 -1
  81. package/dist/PublishParser/PublishParser.js +7 -0
  82. package/dist/PublishParser/PublishParser.js.map +1 -1
  83. package/dist/PublishParser/getFileTableRules.d.ts.map +1 -1
  84. package/dist/PublishParser/getFileTableRules.js +4 -1
  85. package/dist/PublishParser/getFileTableRules.js.map +1 -1
  86. package/dist/PublishParser/getFileVersionTableRules.d.ts +7 -0
  87. package/dist/PublishParser/getFileVersionTableRules.d.ts.map +1 -0
  88. package/dist/PublishParser/getFileVersionTableRules.js +77 -0
  89. package/dist/PublishParser/getFileVersionTableRules.js.map +1 -0
  90. package/dist/PublishParser/getFileVersionTableRules.spec.d.ts +2 -0
  91. package/dist/PublishParser/getFileVersionTableRules.spec.d.ts.map +1 -0
  92. package/dist/PublishParser/getFileVersionTableRules.spec.js +50 -0
  93. package/dist/PublishParser/getFileVersionTableRules.spec.js.map +1 -0
  94. package/dist/PublishParser/getPublishedTableNames.d.ts.map +1 -1
  95. package/dist/PublishParser/getPublishedTableNames.js +11 -4
  96. package/dist/PublishParser/getPublishedTableNames.js.map +1 -1
  97. package/dist/StorageClient/deleteUnreferencedFile.d.ts.map +1 -1
  98. package/dist/StorageClient/deleteUnreferencedFile.js +17 -1
  99. package/dist/StorageClient/deleteUnreferencedFile.js.map +1 -1
  100. package/dist/StorageClient/fileTableDefinitions.d.ts +54 -0
  101. package/dist/StorageClient/fileTableDefinitions.d.ts.map +1 -0
  102. package/dist/StorageClient/fileTableDefinitions.js +38 -0
  103. package/dist/StorageClient/fileTableDefinitions.js.map +1 -0
  104. package/dist/StorageClient/fileVersionUtils.d.ts +18 -0
  105. package/dist/StorageClient/fileVersionUtils.d.ts.map +1 -0
  106. package/dist/StorageClient/fileVersionUtils.js +22 -0
  107. package/dist/StorageClient/fileVersionUtils.js.map +1 -0
  108. package/dist/StorageClient/getFileStorageKey.d.ts +3 -1
  109. package/dist/StorageClient/getFileStorageKey.d.ts.map +1 -1
  110. package/dist/StorageClient/getFileStorageKey.js +9 -1
  111. package/dist/StorageClient/getFileStorageKey.js.map +1 -1
  112. package/dist/StorageClient/getFileTableConfig.d.ts +1 -23
  113. package/dist/StorageClient/getFileTableConfig.d.ts.map +1 -1
  114. package/dist/StorageClient/getFileTableConfig.js +63 -25
  115. package/dist/StorageClient/getFileTableConfig.js.map +1 -1
  116. package/dist/StorageClient/getFileTableConfig.spec.js +6 -1
  117. package/dist/StorageClient/getFileTableConfig.spec.js.map +1 -1
  118. package/dist/StorageClient/saveFileVersion.d.ts +7 -0
  119. package/dist/StorageClient/saveFileVersion.d.ts.map +1 -0
  120. package/dist/StorageClient/saveFileVersion.js +71 -0
  121. package/dist/StorageClient/saveFileVersion.js.map +1 -0
  122. package/dist/StorageClient/setupFileServeHandler.d.ts.map +1 -1
  123. package/dist/StorageClient/setupFileServeHandler.js +38 -21
  124. package/dist/StorageClient/setupFileServeHandler.js.map +1 -1
  125. package/dist/TableConfig/TableRowFromColumnDefinitions.d.ts +11 -4
  126. package/dist/TableConfig/TableRowFromColumnDefinitions.d.ts.map +1 -1
  127. package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
  128. package/dist/TableConfig/initTableConfig.js +6 -6
  129. package/dist/TableConfig/initTableConfig.js.map +1 -1
  130. package/dist/index.d.ts +2 -2
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js.map +1 -1
  133. package/lib/Audit/AuditTable.ts +4 -1
  134. package/lib/Audit/getAuditTableRules.ts +6 -2
  135. package/lib/DBSchemaBuilder/getClientDBGeneratedSchemas.ts +9 -1
  136. package/lib/DboBuilder/QueryBuilder/Functions/Functions.ts +38 -13
  137. package/lib/DboBuilder/QueryBuilder/Functions/HASHING_FUNCTIONS.ts +28 -24
  138. package/lib/DboBuilder/QueryBuilder/Functions/utils.ts +10 -0
  139. package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +95 -18
  140. package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +58 -10
  141. package/lib/DboBuilder/QueryBuilder/parseJoinSelect.ts +2 -13
  142. package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +34 -7
  143. package/lib/DboBuilder/TableHandler/updateFile.ts +1 -0
  144. package/lib/DboBuilder/TableHandler/uploadFile.ts +3 -0
  145. package/lib/DboBuilder/ViewHandler/find.ts +2 -32
  146. package/lib/DboBuilder/ViewHandler/getRawInfo.ts +6 -2
  147. package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +10 -2
  148. package/lib/DboBuilder/ViewHandler/subscribe.ts +10 -3
  149. package/lib/DboBuilder/ViewHandler/validateSelectParams.ts +51 -0
  150. package/lib/DboBuilder/getColumns.ts +2 -0
  151. package/lib/DboBuilder/getCondition.ts +11 -3
  152. package/lib/DboBuilder/getSubscribeRelatedTables.ts +10 -3
  153. package/lib/ProstglesTypes.ts +11 -0
  154. package/lib/PubSubManager/PubSubManager.ts +1 -1
  155. package/lib/PubSubManager/addSub.ts +1 -1
  156. package/lib/PublishParser/PublishParser.ts +25 -7
  157. package/lib/PublishParser/getFileTableRules.ts +7 -1
  158. package/lib/PublishParser/getFileVersionTableRules.spec.ts +57 -0
  159. package/lib/PublishParser/getFileVersionTableRules.ts +106 -0
  160. package/lib/PublishParser/getPublishedTableNames.ts +14 -5
  161. package/lib/StorageClient/deleteUnreferencedFile.ts +20 -2
  162. package/lib/StorageClient/fileTableDefinitions.ts +52 -0
  163. package/lib/StorageClient/fileVersionUtils.ts +37 -0
  164. package/lib/StorageClient/getFileStorageKey.ts +11 -2
  165. package/lib/StorageClient/getFileTableConfig.spec.ts +6 -1
  166. package/lib/StorageClient/getFileTableConfig.ts +85 -30
  167. package/lib/StorageClient/saveFileVersion.ts +82 -0
  168. package/lib/StorageClient/setupFileServeHandler.ts +51 -28
  169. package/lib/TableConfig/TableRowFromColumnDefinitions.ts +37 -13
  170. package/lib/TableConfig/initTableConfig.ts +5 -6
  171. package/lib/index.ts +2 -1
  172. package/package.json +2 -2
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFileRevisionsTableHandler = exports.getFileTableHandler = exports.isFileVersionTable = exports.getFileVersionTableName = void 0;
4
+ const getFileVersionTableName = (config) => config.versioning?.tableName ?? `${config.tableName}_versions`;
5
+ exports.getFileVersionTableName = getFileVersionTableName;
6
+ const isFileVersionTable = (config, tableName) => Boolean(config?.versioning && (0, exports.getFileVersionTableName)(config) === tableName);
7
+ exports.isFileVersionTable = isFileVersionTable;
8
+ const getFileTableHandler = (dbo, config) => {
9
+ const handler = dbo[config.tableName];
10
+ if (!handler)
11
+ throw new Error(`File table not found: ${config.tableName}`);
12
+ return handler;
13
+ };
14
+ exports.getFileTableHandler = getFileTableHandler;
15
+ const getFileRevisionsTableHandler = (dbo, config) => {
16
+ const handler = dbo[(0, exports.getFileVersionTableName)(config)];
17
+ if (!handler)
18
+ throw new Error(`File table not found: ${config.tableName}`);
19
+ return handler;
20
+ };
21
+ exports.getFileRevisionsTableHandler = getFileRevisionsTableHandler;
22
+ //# sourceMappingURL=fileVersionUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileVersionUtils.js","sourceRoot":"","sources":["../../lib/StorageClient/fileVersionUtils.ts"],"names":[],"mappings":";;;AAgBO,MAAM,uBAAuB,GAAG,CAAC,MAAuB,EAAE,EAAE,CACjE,MAAM,CAAC,UAAU,EAAE,SAAS,IAAI,GAAG,MAAM,CAAC,SAAS,WAAW,CAAC;AADpD,QAAA,uBAAuB,2BAC6B;AAE1D,MAAM,kBAAkB,GAAG,CAChC,MAAmC,EACnC,SAAiB,EACuE,EAAE,CAC1F,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,IAAA,+BAAuB,EAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;AAJlE,QAAA,kBAAkB,sBAIgD;AAExE,MAAM,mBAAmB,GAAG,CAAC,GAAkB,EAAE,MAAuB,EAAE,EAAE;IACjF,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAA2C,CAAC;IAChF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAJW,QAAA,mBAAmB,uBAI9B;AAEK,MAAM,4BAA4B,GAAG,CAAC,GAAkB,EAAE,MAAuB,EAAE,EAAE;IAC1F,MAAM,OAAO,GAAG,GAAG,CAAC,IAAA,+BAAuB,EAAC,MAAM,CAAC,CACoC,CAAC;IACxF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AALW,QAAA,4BAA4B,gCAKvC"}
@@ -1,4 +1,6 @@
1
1
  import type { FileTableRow } from "./getFileTableConfig";
2
2
  /** Legacy files are stored under their logical ID. */
3
- export declare const getFileStorageKey: (file: Pick<FileTableRow, "id" | "storage_key">) => string;
3
+ export declare const getFileStorageKey: (file: Pick<FileTableRow, "id" | "storage_key"> | {
4
+ storage_key: string;
5
+ }) => string;
4
6
  //# sourceMappingURL=getFileStorageKey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFileStorageKey.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getFileStorageKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,aAAa,CAAC,WACnD,CAAC"}
1
+ {"version":3,"file":"getFileStorageKey.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getFileStorageKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,GAC5B,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,aAAa,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,WASzE,CAAC"}
@@ -2,6 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getFileStorageKey = void 0;
4
4
  /** Legacy files are stored under their logical ID. */
5
- const getFileStorageKey = (file) => file.storage_key ?? file.id;
5
+ const getFileStorageKey = (file) => {
6
+ const { storage_key } = file;
7
+ const id = "id" in file ? file.id : undefined;
8
+ const key = storage_key ?? id;
9
+ if (!key) {
10
+ throw new Error("Unable to determine file storage key");
11
+ }
12
+ return key;
13
+ };
6
14
  exports.getFileStorageKey = getFileStorageKey;
7
15
  //# sourceMappingURL=getFileStorageKey.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFileStorageKey.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileStorageKey.ts"],"names":[],"mappings":";;;AAEA,sDAAsD;AAC/C,MAAM,iBAAiB,GAAG,CAAC,IAA8C,EAAE,EAAE,CAClF,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC;AADjB,QAAA,iBAAiB,qBACA"}
1
+ {"version":3,"file":"getFileStorageKey.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileStorageKey.ts"],"names":[],"mappings":";;;AAEA,sDAAsD;AAC/C,MAAM,iBAAiB,GAAG,CAC/B,IAAwE,EACxE,EAAE;IACF,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,MAAM,GAAG,GAAG,WAAW,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAVW,QAAA,iBAAiB,qBAU5B"}
@@ -1,31 +1,9 @@
1
1
  import type { Prostgles } from "../Prostgles";
2
2
  import type { TableConfig } from "../TableConfig/TableConfigTypes";
3
- import type { TableRowFromColumnDefinitions } from "../TableConfig/TableRowFromColumnDefinitions";
4
3
  import type { TableHooks } from "../TableHooks/TableHooks";
5
- declare const FILE_TABLE_COLUMN_DEFINITIONS: {
6
- readonly id: "UUID PRIMARY KEY DEFAULT gen_random_uuid()";
7
- readonly storage_key: "UUID UNIQUE";
8
- readonly extension: "TEXT NOT NULL DEFAULT ''";
9
- readonly content_type: "TEXT NOT NULL DEFAULT ''";
10
- readonly content_length: "BIGINT NOT NULL DEFAULT 0";
11
- readonly etag: "TEXT NOT NULL DEFAULT ''";
12
- readonly original_name: "TEXT NOT NULL";
13
- readonly original_last_modified: "TIMESTAMPTZ";
14
- readonly description: "TEXT";
15
- readonly url: "TEXT NOT NULL DEFAULT ''";
16
- readonly cloud_url: "TEXT";
17
- readonly signed_url: "TEXT";
18
- readonly signed_url_expires: "BIGINT";
19
- readonly added: "TIMESTAMP NOT NULL DEFAULT NOW()";
20
- readonly updated: "TIMESTAMP NOT NULL DEFAULT NOW()";
21
- readonly deleted: "TIMESTAMPTZ";
22
- readonly deleted_from_storage: "TIMESTAMPTZ";
23
- readonly data: "BYTEA NOT NULL CHECK (data = decode('01', 'hex'))";
24
- };
25
- export type FileTableRow = TableRowFromColumnDefinitions<typeof FILE_TABLE_COLUMN_DEFINITIONS>;
4
+ export type { FileTableInsertRow, FileTableRow } from "./fileTableDefinitions";
26
5
  export declare const getFileTableConfig: (prg: Prostgles) => {
27
6
  tableConfig: TableConfig | undefined;
28
7
  tableHooks: TableHooks<void, any> | undefined;
29
8
  };
30
- export {};
31
9
  //# sourceMappingURL=getFileTableConfig.d.ts.map
@@ -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;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"}
1
+ {"version":3,"file":"getFileTableConfig.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getFileTableConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAY3D,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE/E,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;CA0MvF,CAAC"}
@@ -2,30 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getFileTableConfig = void 0;
4
4
  const prostgles_types_1 = require("prostgles-types");
5
+ const md5_1 = require("prostgles-types/dist/md5");
5
6
  const onDeleteFromFileTable_1 = require("../DboBuilder/TableHandler/onDeleteFromFileTable");
6
7
  const updateFile_1 = require("../DboBuilder/TableHandler/updateFile");
7
8
  const uploadFile_1 = require("../DboBuilder/TableHandler/uploadFile");
8
9
  const setupFileServeHandler_1 = require("./setupFileServeHandler");
9
- const FILE_TABLE_COLUMN_DEFINITIONS = {
10
- id: `UUID PRIMARY KEY DEFAULT gen_random_uuid()`,
11
- storage_key: `UUID UNIQUE`, // NULL for legacy objects stored under their file ID.
12
- extension: `TEXT NOT NULL DEFAULT ''`,
13
- content_type: `TEXT NOT NULL DEFAULT ''`,
14
- content_length: `BIGINT NOT NULL DEFAULT 0`,
15
- etag: `TEXT NOT NULL DEFAULT ''`,
16
- original_name: `TEXT NOT NULL`,
17
- original_last_modified: `TIMESTAMPTZ`,
18
- description: `TEXT`,
19
- url: `TEXT NOT NULL DEFAULT ''`,
20
- cloud_url: `TEXT`,
21
- signed_url: `TEXT`,
22
- signed_url_expires: `BIGINT`,
23
- added: `TIMESTAMP NOT NULL DEFAULT NOW()`,
24
- updated: `TIMESTAMP NOT NULL DEFAULT NOW()`,
25
- deleted: `TIMESTAMPTZ`,
26
- deleted_from_storage: `TIMESTAMPTZ`,
27
- data: `BYTEA NOT NULL CHECK (data = decode('01', 'hex'))`, // Used as a placeholder to ensure insert types are correct. Actual data is uploaded to storageClient and not stored in the DB
28
- };
10
+ const fileVersionUtils_1 = require("./fileVersionUtils");
11
+ const saveFileVersion_1 = require("./saveFileVersion");
12
+ const fileTableDefinitions_1 = require("./fileTableDefinitions");
29
13
  const getFileTableConfig = (prg) => {
30
14
  const { fileTable, tableConfig, tableHooks } = prg.opts;
31
15
  if (!fileTable) {
@@ -33,6 +17,25 @@ const getFileTableConfig = (prg) => {
33
17
  }
34
18
  const { expressApp } = fileTable;
35
19
  const { tableName: fileTableName, storageClient } = fileTable;
20
+ const versionTableName = (0, fileVersionUtils_1.getFileVersionTableName)(fileTable);
21
+ const versionConstraintName = `prostgles_file_version_${(0, md5_1.md5)(JSON.stringify([versionTableName, fileTableName]))}`;
22
+ const versionIndexName = `prostgles_file_version_${(0, md5_1.md5)(versionTableName)}_key`;
23
+ if (fileTable.versioning) {
24
+ if (versionTableName === fileTableName) {
25
+ throw new Error("File version table name must differ from the file table name");
26
+ }
27
+ if (fileTable.versioning.maxVersions !== undefined &&
28
+ (!Number.isInteger(fileTable.versioning.maxVersions) || fileTable.versioning.maxVersions < 1)) {
29
+ throw new Error("fileTable.versioning.maxVersions must be a positive integer");
30
+ }
31
+ if (tableConfig?.[versionTableName]) {
32
+ throw new Error(`File version table name (${versionTableName}) is managed and cannot be configured in tableConfig`);
33
+ }
34
+ }
35
+ const fileColumnDefinitions = {
36
+ ...fileTableDefinitions_1.FILE_TABLE_COLUMN_DEFINITIONS,
37
+ ...(fileTable.versioning && fileTableDefinitions_1.FILE_TABLE_VERSION_COLUMN_DEFINITIONS),
38
+ };
36
39
  const userFileTableConfig = tableConfig?.[fileTableName];
37
40
  if (userFileTableConfig) {
38
41
  if ("isLookupTable" in userFileTableConfig) {
@@ -43,9 +46,13 @@ const getFileTableConfig = (prg) => {
43
46
  }
44
47
  if ("columns" in userFileTableConfig && userFileTableConfig.columns) {
45
48
  const userCols = new Set(Object.keys(userFileTableConfig.columns));
46
- const clashingColumns = Object.keys(FILE_TABLE_COLUMN_DEFINITIONS).filter((col) => userCols.has(col));
47
- if (clashingColumns.length) {
48
- throw new Error(`FileManager table name (${fileTableName}) has clashing column names in tableConfig: ${clashingColumns}`);
49
+ const clashingFileColumns = Object.keys(fileColumnDefinitions).filter((col) => userCols.has(col));
50
+ if (clashingFileColumns.length) {
51
+ throw new Error(`FileManager table name (${fileTableName}) has clashing column names in tableConfig: ${clashingFileColumns}`);
52
+ }
53
+ const clashingFileRevisionColumns = Object.keys(fileTableDefinitions_1.FILE_VERSION_TABLE_COLUMN_DEFINITIONS).filter((col) => userCols.has(col));
54
+ if (clashingFileRevisionColumns.length) {
55
+ throw new Error(`FileManager table name (${fileTableName}) has clashing column names with file revision table in tableConfig: ${clashingFileRevisionColumns}`);
49
56
  }
50
57
  }
51
58
  }
@@ -53,7 +60,7 @@ const getFileTableConfig = (prg) => {
53
60
  [fileTableName]: {
54
61
  ...userFileTableConfig,
55
62
  columns: {
56
- ...FILE_TABLE_COLUMN_DEFINITIONS,
63
+ ...fileColumnDefinitions,
57
64
  ...userFileTableConfig?.columns,
58
65
  },
59
66
  onMount: ({ _db }) => {
@@ -65,6 +72,24 @@ const getFileTableConfig = (prg) => {
65
72
  };
66
73
  },
67
74
  },
75
+ ...(fileTable.versioning && {
76
+ [versionTableName]: {
77
+ /** Mirror user columns in the file revision table */
78
+ columns: { ...fileTableDefinitions_1.FILE_VERSION_TABLE_COLUMN_DEFINITIONS, ...userFileTableConfig?.columns },
79
+ constraints: {
80
+ [versionConstraintName]: `FOREIGN KEY (file_id) REFERENCES ${(0, prostgles_types_1.asName)(fileTableName)}(id) ON DELETE CASCADE`,
81
+ },
82
+ indexes: {
83
+ [versionIndexName]: {
84
+ unique: true,
85
+ columns: "file_id, version",
86
+ },
87
+ },
88
+ onMount: async ({ dbo }) => {
89
+ await (0, saveFileVersion_1.backfillFileVersions)(dbo, fileTable);
90
+ },
91
+ },
92
+ }),
68
93
  ...(0, prostgles_types_1.omitKeys)(tableConfig ?? {}, [fileTableName]),
69
94
  };
70
95
  const userFileTableHooks = tableHooks?.[fileTableName];
@@ -121,9 +146,22 @@ const getFileTableConfig = (prg) => {
121
146
  },
122
147
  ...(userFileTableHooks?.beforeEach || []),
123
148
  ],
124
- onInsteadOfDelete: async ({ onCommit, tx, returningQuery, isOneOrNone, filterOpts }) => {
149
+ afterEach: [
150
+ ...(userFileTableHooks?.afterEach || []),
151
+ {
152
+ commands: { insert: 1, update: 1 },
153
+ validate: async ({ row, dbx, onCommit }) => {
154
+ const fileRow = await (0, fileVersionUtils_1.getFileTableHandler)(dbx, fileTable).findOne({ id: row.id });
155
+ if (!fileRow)
156
+ throw new Error(`File not found after write: ${row.id}`);
157
+ await (0, saveFileVersion_1.saveFileVersion)(fileTable, fileRow, dbx, onCommit);
158
+ },
159
+ },
160
+ ],
161
+ onInsteadOfDelete: async ({ onCommit, dbx, tx, returningQuery, isOneOrNone, filterOpts }) => {
125
162
  return (0, onDeleteFromFileTable_1.onDeleteFromFileTable)(fileTable, {
126
163
  onCommit,
164
+ dbx,
127
165
  t: tx,
128
166
  returningQuery,
129
167
  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":"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"}
@@ -8,7 +8,10 @@ const node_test_1 = __importDefault(require("node:test"));
8
8
  const getFileTableConfig_1 = require("./getFileTableConfig");
9
9
  void (0, node_test_1.default)("managed files preserve hooks on other tables and append file hooks", () => {
10
10
  const guard = { afterEach: [{ commands: { insert: 1 }, validate: async () => { } }] };
11
- const fileGuard = { beforeEach: [{ commands: { insert: 1 }, validate: async () => { } }] };
11
+ const fileGuard = {
12
+ beforeEach: [{ commands: { insert: 1 }, validate: async () => { } }],
13
+ afterEach: [{ commands: { insert: 1 }, validate: async () => { } }],
14
+ };
12
15
  const prostgles = {
13
16
  opts: {
14
17
  fileTable: { tableName: "files", storageClient: {}, expressApp: {} },
@@ -19,5 +22,7 @@ void (0, node_test_1.default)("managed files preserve hooks on other tables and
19
22
  strict_1.default.equal(result.tableHooks?.documents, guard);
20
23
  strict_1.default.equal(result.tableHooks.files?.beforeEach?.length, 2);
21
24
  strict_1.default.equal(result.tableHooks.files.beforeEach[1], fileGuard.beforeEach[0]);
25
+ strict_1.default.equal(result.tableHooks.files.afterEach?.length, 2);
26
+ strict_1.default.equal(result.tableHooks.files.afterEach[0], fileGuard.afterEach[0]);
22
27
  });
23
28
  //# sourceMappingURL=getFileTableConfig.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFileTableConfig.spec.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileTableConfig.spec.ts"],"names":[],"mappings":";;;;;AAAA,gEAAwC;AACxC,0DAA6B;AAE7B,6DAA0D;AAE1D,KAAK,IAAA,mBAAI,EAAC,oEAAoE,EAAE,GAAG,EAAE;IACnF,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,MAAM,SAAS,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1F,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE;YACJ,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACpE,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;SACnD;KACsB,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAA,uCAAkB,EAAC,SAAS,CAAC,CAAC;IAC7C,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"getFileTableConfig.spec.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileTableConfig.spec.ts"],"names":[],"mappings":";;;;;AAAA,gEAAwC;AACxC,0DAA6B;AAE7B,6DAA0D;AAE1D,KAAK,IAAA,mBAAI,EAAC,oEAAoE,EAAE,GAAG,EAAE;IACnF,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,MAAM,SAAS,GAAG;QAChB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;QACnE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;KACnE,CAAC;IACF,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE;YACJ,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACpE,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;SACnD;KACsB,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAA,uCAAkB,EAAC,SAAS,CAAC,CAAC;IAC7C,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7D,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { TableHandlers } from "../DboBuilder/DboBuilder";
2
+ import type { FileTableConfig } from "../ProstglesTypes";
3
+ import type { OnCommit } from "../PublishParser/publishTypesAndUtils";
4
+ import type { FileTableRow } from "./fileTableDefinitions";
5
+ export declare const saveFileVersion: (config: FileTableConfig, row: FileTableRow, dbx: TableHandlers, onCommit: OnCommit) => Promise<void>;
6
+ export declare const backfillFileVersions: (dbo: TableHandlers, config: FileTableConfig) => Promise<void>;
7
+ //# sourceMappingURL=saveFileVersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveFileVersion.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/saveFileVersion.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAA6B,MAAM,wBAAwB,CAAC;AAItF,eAAO,MAAM,eAAe,GAC1B,QAAQ,eAAe,EACvB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,UAAU,QAAQ,kBAkCnB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,KAAK,aAAa,EAAE,QAAQ,eAAe,kBAiBrF,CAAC"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.backfillFileVersions = exports.saveFileVersion = void 0;
4
+ const prostgles_types_1 = require("prostgles-types");
5
+ const deleteUnreferencedFile_1 = require("./deleteUnreferencedFile");
6
+ const fileVersionUtils_1 = require("./fileVersionUtils");
7
+ const getFileStorageKey_1 = require("./getFileStorageKey");
8
+ const saveFileVersion = async (config, row, dbx, onCommit) => {
9
+ if (!config.versioning)
10
+ return;
11
+ const version = Number(row.version);
12
+ if (!Number.isInteger(version) || version < 1) {
13
+ throw new Error(`Invalid file version: ${row.version}`);
14
+ }
15
+ const versions = (0, fileVersionUtils_1.getFileRevisionsTableHandler)(dbx, config);
16
+ const versionColumns = versions.column_names;
17
+ await versions.insert(getFileVersionRow(row, versionColumns), {
18
+ onConflict: {
19
+ action: "DoNothing",
20
+ conflictColumns: ["file_id", "version"],
21
+ },
22
+ });
23
+ const { maxVersions } = config.versioning;
24
+ if (maxVersions === undefined)
25
+ return;
26
+ const removed = (await versions.find({ file_id: row.id }, {
27
+ select: { id: 1, storage_key: 1 },
28
+ orderBy: { version: -1 },
29
+ offset: maxVersions,
30
+ limit: null,
31
+ }));
32
+ if (!removed.length)
33
+ return;
34
+ await versions.delete({ id: { $in: removed.map(({ id }) => id) } });
35
+ for (const storageKey of new Set(removed.map(({ storage_key }) => storage_key))) {
36
+ onCommit(({ db }) => (0, deleteUnreferencedFile_1.deleteUnreferencedFile)(db, config, storageKey));
37
+ }
38
+ };
39
+ exports.saveFileVersion = saveFileVersion;
40
+ const backfillFileVersions = async (dbo, config) => {
41
+ if (!config.versioning)
42
+ return;
43
+ const files = (0, fileVersionUtils_1.getFileTableHandler)(dbo, config);
44
+ const fileRows = await files.find({}, { limit: null });
45
+ if (!fileRows.length)
46
+ return;
47
+ console.log(`Backfilling file versions for ${fileRows.length} files`);
48
+ const fileRevisionsTableHandler = (0, fileVersionUtils_1.getFileRevisionsTableHandler)(dbo, config);
49
+ const fileRevisionColumns = fileRevisionsTableHandler.column_names;
50
+ await fileRevisionsTableHandler.insertMany(fileRows.map((fileRow) => getFileVersionRow(fileRow, fileRevisionColumns)), {
51
+ onConflict: {
52
+ action: "DoNothing",
53
+ conflictColumns: ["file_id", "version"],
54
+ },
55
+ });
56
+ };
57
+ exports.backfillFileVersions = backfillFileVersions;
58
+ /** Must ensure we copy over any columns that might have been created by the user */
59
+ const getFileVersionRow = (row, cols) => {
60
+ const { id, ...insertRow } = (0, prostgles_types_1.pickKeys)(row, cols);
61
+ const version = Number(row.version ?? 1);
62
+ return {
63
+ ...insertRow,
64
+ file_id: id,
65
+ version,
66
+ storage_key: (0, getFileStorageKey_1.getFileStorageKey)(row),
67
+ url: `${row.url}?version=${version}`,
68
+ created: row.updated,
69
+ };
70
+ };
71
+ //# sourceMappingURL=saveFileVersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveFileVersion.js","sourceRoot":"","sources":["../../lib/StorageClient/saveFileVersion.ts"],"names":[],"mappings":"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"}
@@ -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;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;;CAwFf,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;AAMzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,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;;CA6Gf,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 fileVersionUtils_1 = require("./fileVersionUtils");
41
42
  const getFileStorageKey_1 = require("./getFileStorageKey");
42
43
  const getFileServeRoute = (config) => {
43
44
  const fileTableName = config.tableName;
@@ -58,48 +59,64 @@ const setupFileServeHandler = (db, config, storageClient, app, prg) => {
58
59
  if (typeof id !== "string" || !id) {
59
60
  throw "Invalid media name";
60
61
  }
61
- const selectParams = {
62
- select: {
63
- id: 1,
64
- storage_key: 1,
65
- signed_url: 1,
66
- signed_url_expires: 1,
67
- content_type: 1,
68
- },
62
+ const versionParam = req.query.version;
63
+ const version = typeof versionParam === "string" ? Number(versionParam) : undefined;
64
+ if (versionParam !== undefined &&
65
+ (typeof versionParam !== "string" ||
66
+ !Number.isInteger(version) ||
67
+ version < 1 ||
68
+ String(version) !== versionParam)) {
69
+ throw "Invalid file version";
70
+ }
71
+ if (version && !config.versioning) {
72
+ throw "File version requested but versioning is not enabled";
73
+ }
74
+ const select = {
75
+ id: 1,
76
+ storage_key: 1,
77
+ signed_url: 1,
78
+ signed_url_expires: 1,
79
+ content_type: 1,
69
80
  };
70
81
  const file = (await runClientRequest_1.runClientRequest.bind(prg)({
71
82
  command: "findOne",
72
- tableName: fileTableName,
73
- param1: { id },
74
- param2: selectParams,
83
+ tableName: version === undefined ? fileTableName : (0, fileVersionUtils_1.getFileVersionTableName)(config),
84
+ param1: version === undefined ? { id } : { file_id: id, version },
85
+ param2: {
86
+ select,
87
+ },
75
88
  param3: undefined,
76
89
  }, {
77
90
  res,
78
91
  httpReq: req,
79
92
  }, undefined));
80
93
  if (!file) {
81
- res.status(AuthHandler_1.HTTP_FAIL_CODES.NOT_FOUND).send("File not found or not allowed");
94
+ res
95
+ .status(AuthHandler_1.HTTP_FAIL_CODES.NOT_FOUND)
96
+ .send(version === undefined ? "File not found or not allowed" : "File version not found");
82
97
  return;
83
98
  }
84
99
  if (storageClient.type === "cloud") {
85
- let url = file.signed_url;
86
- const expires = +(file.signed_url_expires || 0);
100
+ let url = version === undefined ? file.signed_url : undefined;
101
+ const expires = version === undefined ? +(file.signed_url_expires || 0) : 0;
87
102
  const HOUR = 3600 * 1000;
88
103
  const EXPIRES = Date.now() + HOUR;
89
104
  if (!url || expires < EXPIRES) {
90
105
  url = await storageClient.getSignedUrlForDownload((0, getFileStorageKey_1.getFileStorageKey)(file), 60 * 60);
91
106
  // Match the storage key to avoid caching a stale URL after replacement; NULL matches legacy files.
92
- await db.any("UPDATE ${fileTableName:name} \
107
+ if (version === undefined) {
108
+ await db.any("UPDATE ${fileTableName:name} \
93
109
  SET signed_url = ${signed_url}, \
94
110
  signed_url_expires = ${signed_url_expires} \
95
111
  WHERE id = ${id} \
96
112
  AND storage_key IS NOT DISTINCT FROM ${storage_key}::uuid", {
97
- fileTableName,
98
- id: file.id,
99
- storage_key: file.storage_key,
100
- signed_url: url,
101
- signed_url_expires: EXPIRES,
102
- });
113
+ fileTableName,
114
+ id: file.id,
115
+ storage_key: file.storage_key,
116
+ signed_url: url,
117
+ signed_url_expires: EXPIRES,
118
+ });
119
+ }
103
120
  }
104
121
  res.redirect(url);
105
122
  }
@@ -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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"}
@@ -1,12 +1,14 @@
1
1
  import type { JSONB } from "prostgles-types";
2
- /** Row types for the column definitions used by managed tables. */
3
- export type TableRowFromColumnDefinitions<T extends Record<string, string | {
2
+ type ColumnDefinition = string | {
4
3
  enum: readonly (string | number)[];
5
4
  nullable?: boolean;
6
5
  } | {
7
6
  jsonbSchema: JSONB.JSONBSchema;
8
7
  nullable?: boolean;
9
- }>> = {
8
+ };
9
+ /** Row types for the column definitions used by managed tables. */
10
+ export type TableRowFromColumnDefinitions<T extends Record<string, ColumnDefinition>> = Omit<TableRow<T>, GeneratedColumnNames<T>> & Partial<Pick<TableRow<T>, GeneratedColumnNames<T>>>;
11
+ type TableRow<T extends Record<string, ColumnDefinition>> = {
10
12
  [K in keyof T]: T[K] extends {
11
13
  jsonbSchema: infer S extends JSONB.JSONBSchema;
12
14
  } ? JSONB.GetType<S> | (T[K] extends {
@@ -15,6 +17,11 @@ export type TableRowFromColumnDefinitions<T extends Record<string, string | {
15
17
  enum: readonly (infer V)[];
16
18
  } ? V | (T[K] extends {
17
19
  nullable: true;
18
- } ? null : never) : (T[K] extends `BYTEA${string}` ? Buffer : T[K] extends `JSONB${string}` ? Record<string, unknown> : string) | (T[K] extends `${string} NOT NULL${string}` | `${string}PRIMARY KEY${string}` ? never : null);
20
+ } ? null : never) : ColumnValue<T[K]> | (T[K] extends `${string} NOT NULL${string}` | `${string}PRIMARY KEY${string}` ? never : null);
19
21
  };
22
+ type GeneratedColumnNames<T extends Record<string, ColumnDefinition>> = {
23
+ [K in keyof T]: T[K] extends string ? T[K] extends `${string}DEFAULT${string}` | `${string}SERIAL${string}` | `${string}GENERATED${string}AS IDENTITY${string}` ? K : never : never;
24
+ }[keyof T];
25
+ type ColumnValue<T> = T extends `BYTEA${string}` ? Buffer : T extends `JSONB${string}` ? Record<string, unknown> : T extends `${"SMALLINT" | "INTEGER" | "SERIAL"}${string}` ? number : T extends `${"BIGINT" | "BIGSERIAL" | "NUMERIC" | "DECIMAL"}${string}` ? string | number : T extends `${"REAL" | "DOUBLE PRECISION"}${string}` ? number : string;
26
+ export {};
20
27
  //# sourceMappingURL=TableRowFromColumnDefinitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableRowFromColumnDefinitions.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/TableRowFromColumnDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,mEAAmE;AACnE,MAAM,MAAM,6BAA6B,CACvC,CAAC,SAAS,MAAM,CACd,MAAM,EACJ,MAAM,GACN;IAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CACzD,IACC;KACD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC,SAAS,KAAK,CAAC,WAAW,CAAA;KAAE,GAC3E,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GACnE,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;KAAE,GACzC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GAClD,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC1B,MAAM,GACN,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,MAAM,CAAC,GACb,CAAC,CAAC,CAAC,CAAC,CAAC,SACH,GAAG,MAAM,YAAY,MAAM,EAAE,GAAG,GAAG,MAAM,cAAc,MAAM,EAAE,GAC7D,KAAK,GACL,IAAI,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"TableRowFromColumnDefinitions.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/TableRowFromColumnDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,KAAK,gBAAgB,GACjB,MAAM,GACN;IAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3D,mEAAmE;AACnE,MAAM,MAAM,6BAA6B,CACvC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,IACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtD,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI;KACzD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3B,WAAW,EAAE,MAAM,CAAC,SAAS,KAAK,CAAC,WAAW,CAAC;KAChD,GACG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GACnE,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;KAAE,GACzC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GAClD,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,CAAC,SACH,GAAG,MAAM,YAAY,MAAM,EAAE,GAAG,GAAG,MAAM,cAAc,MAAM,EAAE,GAC7D,KAAK,GACL,IAAI,CAAC;CAClB,CAAC;AAEF,KAAK,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI;KACrE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAC/B,CAAC,CAAC,CAAC,CAAC,SACA,GAAG,MAAM,UAAU,MAAM,EAAE,GAC3B,GAAG,MAAM,SAAS,MAAM,EAAE,GAC1B,GAAG,MAAM,YAAY,MAAM,cAAc,MAAM,EAAE,GACnD,CAAC,GACD,KAAK,GACP,KAAK;CACV,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC5C,MAAM,GACN,CAAC,SAAS,QAAQ,MAAM,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,CAAC,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,EAAE,GACvD,MAAM,GACN,CAAC,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,EAAE,GACpE,MAAM,GAAG,MAAM,GACf,CAAC,SAAS,GAAG,MAAM,GAAG,kBAAkB,GAAG,MAAM,EAAE,GACjD,MAAM,GACN,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"initTableConfig.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/initTableConfig.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,eAAO,MAAM,eAAe,GAAmB,MAAM,iBAAiB,uBA4QrE,CAAC"}
1
+ {"version":3,"file":"initTableConfig.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/initTableConfig.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,eAAO,MAAM,eAAe,GAAmB,MAAM,iBAAiB,uBA2QrE,CAAC"}
@@ -175,16 +175,16 @@ const initTableConfig = async function () {
175
175
  });
176
176
  /** Add missing named constraints */
177
177
  constraintDefs?.forEach((c) => {
178
- if (c.name && !currCons.some((cc) => cc.name === c.name)) {
179
- const fc = futureCons.find((nc) => nc.name === c.name);
180
- if (fc) {
181
- queries.push(`${ALTER_TABLE_Q} ADD CONSTRAINT ${asName(c.name)} ${c.content};`);
182
- }
178
+ if (!c.name)
179
+ return;
180
+ const fc = futureCons.find((nc) => nc.name === c.name);
181
+ if (fc && !currCons.some((cc) => cc.name === c.name && cc.definition === fc.definition)) {
182
+ queries.push(`${ALTER_TABLE_Q} ADD CONSTRAINT ${asName(c.name)} ${c.content};`);
183
183
  }
184
184
  });
185
185
  /** Add remaining missing constraints */
186
186
  futureCons
187
- .filter((nc) => !currCons.some((c) => c.definition === nc.definition))
187
+ .filter((nc) => !nc.isNamed && !currCons.some((c) => c.definition === nc.definition))
188
188
  .forEach((c) => {
189
189
  queries.push(`${ALTER_TABLE_Q} ADD ${c.definition};`);
190
190
  });