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.
- package/debug/prostgles-types-4.0.285.tgz +0 -0
- package/dist/Audit/AuditTable.d.ts +2 -1
- package/dist/Audit/AuditTable.d.ts.map +1 -1
- package/dist/Audit/AuditTable.js.map +1 -1
- package/dist/Audit/getAuditTableRules.d.ts.map +1 -1
- package/dist/Audit/getAuditTableRules.js +4 -4
- package/dist/Audit/getAuditTableRules.js.map +1 -1
- package/dist/DBSchemaBuilder/getClientDBGeneratedSchemas.d.ts.map +1 -1
- package/dist/DBSchemaBuilder/getClientDBGeneratedSchemas.js +7 -1
- package/dist/DBSchemaBuilder/getClientDBGeneratedSchemas.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/Functions.d.ts +3 -1
- package/dist/DboBuilder/QueryBuilder/Functions/Functions.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/Functions.js +18 -11
- package/dist/DboBuilder/QueryBuilder/Functions/Functions.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/HASHING_FUNCTIONS.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/HASHING_FUNCTIONS.js +16 -21
- package/dist/DboBuilder/QueryBuilder/Functions/HASHING_FUNCTIONS.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/utils.d.ts +1 -0
- package/dist/DboBuilder/QueryBuilder/Functions/utils.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/utils.js +3 -1
- package/dist/DboBuilder/QueryBuilder/Functions/utils.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +18 -2
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +54 -16
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js +40 -6
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/parseJoinSelect.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js +2 -12
- package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js.map +1 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +3 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +21 -6
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.d.ts +2 -39
- package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.js +1 -0
- package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
- package/dist/DboBuilder/TableHandler/uploadFile.d.ts +2 -1
- package/dist/DboBuilder/TableHandler/uploadFile.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/uploadFile.js +2 -1
- package/dist/DboBuilder/TableHandler/uploadFile.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/find.js +2 -29
- package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getRawInfo.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getRawInfo.js +6 -2
- package/dist/DboBuilder/ViewHandler/getRawInfo.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts +4 -1
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.js +9 -2
- package/dist/DboBuilder/ViewHandler/parseComplexFilter.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/subscribe.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/subscribe.js +8 -3
- package/dist/DboBuilder/ViewHandler/subscribe.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/validateSelectParams.d.ts +3 -0
- package/dist/DboBuilder/ViewHandler/validateSelectParams.d.ts.map +1 -0
- package/dist/DboBuilder/ViewHandler/validateSelectParams.js +48 -0
- package/dist/DboBuilder/ViewHandler/validateSelectParams.js.map +1 -0
- package/dist/DboBuilder/getColumns.d.ts.map +1 -1
- package/dist/DboBuilder/getColumns.js +3 -0
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/getCondition.d.ts.map +1 -1
- package/dist/DboBuilder/getCondition.js +9 -3
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js +7 -2
- package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
- package/dist/ProstglesTypes.d.ts +10 -0
- package/dist/ProstglesTypes.d.ts.map +1 -1
- package/dist/ProstglesTypes.js.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +1 -1
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/addSub.js +1 -1
- package/dist/PubSubManager/addSub.js.map +1 -1
- package/dist/PublishParser/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.js +7 -0
- package/dist/PublishParser/PublishParser.js.map +1 -1
- package/dist/PublishParser/getFileTableRules.d.ts.map +1 -1
- package/dist/PublishParser/getFileTableRules.js +4 -1
- package/dist/PublishParser/getFileTableRules.js.map +1 -1
- package/dist/PublishParser/getFileVersionTableRules.d.ts +7 -0
- package/dist/PublishParser/getFileVersionTableRules.d.ts.map +1 -0
- package/dist/PublishParser/getFileVersionTableRules.js +77 -0
- package/dist/PublishParser/getFileVersionTableRules.js.map +1 -0
- package/dist/PublishParser/getFileVersionTableRules.spec.d.ts +2 -0
- package/dist/PublishParser/getFileVersionTableRules.spec.d.ts.map +1 -0
- package/dist/PublishParser/getFileVersionTableRules.spec.js +50 -0
- package/dist/PublishParser/getFileVersionTableRules.spec.js.map +1 -0
- package/dist/PublishParser/getPublishedTableNames.d.ts.map +1 -1
- package/dist/PublishParser/getPublishedTableNames.js +11 -4
- package/dist/PublishParser/getPublishedTableNames.js.map +1 -1
- package/dist/StorageClient/deleteUnreferencedFile.d.ts.map +1 -1
- package/dist/StorageClient/deleteUnreferencedFile.js +17 -1
- package/dist/StorageClient/deleteUnreferencedFile.js.map +1 -1
- package/dist/StorageClient/fileTableDefinitions.d.ts +54 -0
- package/dist/StorageClient/fileTableDefinitions.d.ts.map +1 -0
- package/dist/StorageClient/fileTableDefinitions.js +38 -0
- package/dist/StorageClient/fileTableDefinitions.js.map +1 -0
- package/dist/StorageClient/fileVersionUtils.d.ts +18 -0
- package/dist/StorageClient/fileVersionUtils.d.ts.map +1 -0
- package/dist/StorageClient/fileVersionUtils.js +22 -0
- package/dist/StorageClient/fileVersionUtils.js.map +1 -0
- package/dist/StorageClient/getFileStorageKey.d.ts +3 -1
- package/dist/StorageClient/getFileStorageKey.d.ts.map +1 -1
- package/dist/StorageClient/getFileStorageKey.js +9 -1
- package/dist/StorageClient/getFileStorageKey.js.map +1 -1
- package/dist/StorageClient/getFileTableConfig.d.ts +1 -23
- package/dist/StorageClient/getFileTableConfig.d.ts.map +1 -1
- package/dist/StorageClient/getFileTableConfig.js +63 -25
- package/dist/StorageClient/getFileTableConfig.js.map +1 -1
- package/dist/StorageClient/getFileTableConfig.spec.js +6 -1
- package/dist/StorageClient/getFileTableConfig.spec.js.map +1 -1
- package/dist/StorageClient/saveFileVersion.d.ts +7 -0
- package/dist/StorageClient/saveFileVersion.d.ts.map +1 -0
- package/dist/StorageClient/saveFileVersion.js +71 -0
- package/dist/StorageClient/saveFileVersion.js.map +1 -0
- package/dist/StorageClient/setupFileServeHandler.d.ts.map +1 -1
- package/dist/StorageClient/setupFileServeHandler.js +38 -21
- package/dist/StorageClient/setupFileServeHandler.js.map +1 -1
- package/dist/TableConfig/TableRowFromColumnDefinitions.d.ts +11 -4
- package/dist/TableConfig/TableRowFromColumnDefinitions.d.ts.map +1 -1
- package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
- package/dist/TableConfig/initTableConfig.js +6 -6
- package/dist/TableConfig/initTableConfig.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/lib/Audit/AuditTable.ts +4 -1
- package/lib/Audit/getAuditTableRules.ts +6 -2
- package/lib/DBSchemaBuilder/getClientDBGeneratedSchemas.ts +9 -1
- package/lib/DboBuilder/QueryBuilder/Functions/Functions.ts +38 -13
- package/lib/DboBuilder/QueryBuilder/Functions/HASHING_FUNCTIONS.ts +28 -24
- package/lib/DboBuilder/QueryBuilder/Functions/utils.ts +10 -0
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +95 -18
- package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +58 -10
- package/lib/DboBuilder/QueryBuilder/parseJoinSelect.ts +2 -13
- package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +34 -7
- package/lib/DboBuilder/TableHandler/updateFile.ts +1 -0
- package/lib/DboBuilder/TableHandler/uploadFile.ts +3 -0
- package/lib/DboBuilder/ViewHandler/find.ts +2 -32
- package/lib/DboBuilder/ViewHandler/getRawInfo.ts +6 -2
- package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +10 -2
- package/lib/DboBuilder/ViewHandler/subscribe.ts +10 -3
- package/lib/DboBuilder/ViewHandler/validateSelectParams.ts +51 -0
- package/lib/DboBuilder/getColumns.ts +2 -0
- package/lib/DboBuilder/getCondition.ts +11 -3
- package/lib/DboBuilder/getSubscribeRelatedTables.ts +10 -3
- package/lib/ProstglesTypes.ts +11 -0
- package/lib/PubSubManager/PubSubManager.ts +1 -1
- package/lib/PubSubManager/addSub.ts +1 -1
- package/lib/PublishParser/PublishParser.ts +25 -7
- package/lib/PublishParser/getFileTableRules.ts +7 -1
- package/lib/PublishParser/getFileVersionTableRules.spec.ts +57 -0
- package/lib/PublishParser/getFileVersionTableRules.ts +106 -0
- package/lib/PublishParser/getPublishedTableNames.ts +14 -5
- package/lib/StorageClient/deleteUnreferencedFile.ts +20 -2
- package/lib/StorageClient/fileTableDefinitions.ts +52 -0
- package/lib/StorageClient/fileVersionUtils.ts +37 -0
- package/lib/StorageClient/getFileStorageKey.ts +11 -2
- package/lib/StorageClient/getFileTableConfig.spec.ts +6 -1
- package/lib/StorageClient/getFileTableConfig.ts +85 -30
- package/lib/StorageClient/saveFileVersion.ts +82 -0
- package/lib/StorageClient/setupFileServeHandler.ts +51 -28
- package/lib/TableConfig/TableRowFromColumnDefinitions.ts +37 -13
- package/lib/TableConfig/initTableConfig.ts +5 -6
- package/lib/index.ts +2 -1
- 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">
|
|
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,
|
|
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) =>
|
|
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,
|
|
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
|
-
|
|
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":"
|
|
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
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
47
|
-
if (
|
|
48
|
-
throw new Error(`FileManager table name (${fileTableName}) has clashing column names in tableConfig: ${
|
|
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
|
-
...
|
|
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
|
-
|
|
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":";;;AAAA,
|
|
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 = {
|
|
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,
|
|
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;
|
|
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
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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:
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { JSONB } from "prostgles-types";
|
|
2
|
-
|
|
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) :
|
|
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,
|
|
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,
|
|
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 (
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
});
|