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.
- package/dist/DBSchemaBuilder/DBSchemaBuilder.d.ts +2 -2
- package/dist/DBSchemaBuilder/DBSchemaBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilder.d.ts +2 -0
- package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilder.js +17 -3
- package/dist/DboBuilder/DboBuilder.js.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts +5 -5
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js +17 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.js +1 -0
- package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
- package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.js +1 -1
- package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.js.map +1 -1
- package/dist/DboBuilder/TableHandler/insert/insert.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/insert/insert.js +22 -2
- package/dist/DboBuilder/TableHandler/insert/insert.js.map +1 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +3 -5
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +13 -26
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
- package/dist/DboBuilder/TableHandler/prepareBeforeHookData.d.ts +4 -0
- package/dist/DboBuilder/TableHandler/prepareBeforeHookData.d.ts.map +1 -0
- package/dist/DboBuilder/TableHandler/prepareBeforeHookData.js +20 -0
- package/dist/DboBuilder/TableHandler/prepareBeforeHookData.js.map +1 -0
- package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/update.js +36 -10
- package/dist/DboBuilder/TableHandler/update.js.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.d.ts +5 -2
- package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.js +17 -11
- package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
- package/dist/DboBuilder/TableHandler/uploadFile.d.ts +3 -2
- package/dist/DboBuilder/TableHandler/uploadFile.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/uploadFile.js +15 -4
- package/dist/DboBuilder/TableHandler/uploadFile.js.map +1 -1
- package/dist/DboBuilder/runSql/getAdminClient.d.ts +3 -0
- package/dist/DboBuilder/runSql/getAdminClient.d.ts.map +1 -1
- package/dist/Logging.d.ts +1 -1
- package/dist/Logging.d.ts.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.d.ts +12 -5
- package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
- package/dist/StorageClient/deleteUnreferencedFile.d.ts +4 -0
- package/dist/StorageClient/deleteUnreferencedFile.d.ts.map +1 -0
- package/dist/StorageClient/deleteUnreferencedFile.js +15 -0
- package/dist/StorageClient/deleteUnreferencedFile.js.map +1 -0
- package/dist/StorageClient/getFileStorageKey.d.ts +4 -0
- package/dist/StorageClient/getFileStorageKey.d.ts.map +1 -0
- package/dist/StorageClient/getFileStorageKey.js +7 -0
- package/dist/StorageClient/getFileStorageKey.js.map +1 -0
- package/dist/StorageClient/getFileTableConfig.d.ts +1 -0
- package/dist/StorageClient/getFileTableConfig.d.ts.map +1 -1
- package/dist/StorageClient/getFileTableConfig.js +9 -4
- package/dist/StorageClient/getFileTableConfig.js.map +1 -1
- package/dist/StorageClient/getFileType.d.ts.map +1 -1
- package/dist/StorageClient/getFileType.js +8 -10
- package/dist/StorageClient/getFileType.js.map +1 -1
- package/dist/StorageClient/getLocalStorageClient.d.ts.map +1 -1
- package/dist/StorageClient/getLocalStorageClient.js +20 -37
- package/dist/StorageClient/getLocalStorageClient.js.map +1 -1
- package/dist/StorageClient/getValidatedFileType.d.ts.map +1 -1
- package/dist/StorageClient/getValidatedFileType.js +4 -2
- package/dist/StorageClient/getValidatedFileType.js.map +1 -1
- package/dist/StorageClient/setupFileServeHandler.d.ts.map +1 -1
- package/dist/StorageClient/setupFileServeHandler.js +6 -3
- package/dist/StorageClient/setupFileServeHandler.js.map +1 -1
- package/dist/TableHooks/TableHooks.d.ts +10 -3
- package/dist/TableHooks/TableHooks.d.ts.map +1 -1
- package/lib/DBSchemaBuilder/DBSchemaBuilder.ts +3 -2
- package/lib/DboBuilder/DboBuilder.ts +18 -3
- package/lib/DboBuilder/TableHandler/TableHandler.ts +19 -1
- package/lib/DboBuilder/TableHandler/delete.ts +1 -0
- package/lib/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.ts +1 -2
- package/lib/DboBuilder/TableHandler/insert/insert.ts +31 -3
- package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +17 -33
- package/lib/DboBuilder/TableHandler/prepareBeforeHookData.ts +27 -0
- package/lib/DboBuilder/TableHandler/update.ts +40 -11
- package/lib/DboBuilder/TableHandler/updateFile.ts +25 -19
- package/lib/DboBuilder/TableHandler/uploadFile.ts +32 -7
- package/lib/Logging.ts +1 -0
- package/lib/PublishParser/publishTypesAndUtils.ts +26 -15
- package/lib/StorageClient/deleteUnreferencedFile.ts +19 -0
- package/lib/StorageClient/getFileStorageKey.ts +5 -0
- package/lib/StorageClient/getFileTableConfig.ts +19 -5
- package/lib/StorageClient/getFileType.ts +11 -14
- package/lib/StorageClient/getLocalStorageClient.ts +20 -43
- package/lib/StorageClient/getValidatedFileType.ts +4 -1
- package/lib/StorageClient/setupFileServeHandler.ts +6 -3
- package/lib/TableHooks/TableHooks.ts +23 -13
- 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;
|
|
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 =
|
|
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 ({
|
|
124
|
+
onInsteadOfDelete: async ({ onCommit, tx, returningQuery, isOneOrNone, filterOpts }) => {
|
|
120
125
|
return (0, onDeleteFromFileTable_1.onDeleteFromFileTable)(fileTable, {
|
|
121
|
-
|
|
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":";;;AAAA,qDAA2C;AAC3C,4FAAyF;AACzF,sEAAmE;AACnE,sEAA0F;AAM1F,mEAAgE;
|
|
1
|
+
{"version":3,"file":"getFileTableConfig.js","sourceRoot":"","sources":["../../lib/StorageClient/getFileTableConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFileType.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/getFileType.ts"],"names":[],"mappings":"
|
|
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
|
|
13
|
-
if (!
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
if (
|
|
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() !==
|
|
23
|
-
throw new Error(`There is a mismatch between file name extension and actual buffer extension: ${fileNameMime.ext} vs ${
|
|
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
|
|
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":"
|
|
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":"
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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":";;;;;;AAAA,oDAA4B;AAC5B,4CAAoB;AACpB,gDAAwB;AACxB,oDAA4B;
|
|
1
|
+
{"version":3,"file":"getLocalStorageClient.js","sourceRoot":"","sources":["../../lib/StorageClient/getLocalStorageClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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
|
-
|
|
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":"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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;
|
|
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
|
|
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,
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAyB;AACzB,+BAA4B;AAC5B,qDAA0E;AAI1E,0DAAuD;
|
|
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
|
|
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,
|
|
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
|
-
|
|
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 (
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
95
|
-
|
|
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(
|
|
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
|
/**
|