prostgles-server 4.2.624 → 4.2.626
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/Audit/AuditTable.d.ts +4 -2
- package/dist/Audit/AuditTable.d.ts.map +1 -1
- package/dist/Audit/AuditTable.js +3 -2
- package/dist/Audit/AuditTable.js.map +1 -1
- package/dist/Audit/getAuditTableRules.d.ts +7 -0
- package/dist/Audit/getAuditTableRules.d.ts.map +1 -0
- package/dist/Audit/getAuditTableRules.js +191 -0
- package/dist/Audit/getAuditTableRules.js.map +1 -0
- package/dist/Audit/getAuditTriggerConfig.d.ts.map +1 -1
- package/dist/Audit/getAuditTriggerConfig.js +14 -1
- package/dist/Audit/getAuditTriggerConfig.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/DBSchemaBuilder/getDBGeneratedSchema.d.ts.map +1 -1
- package/dist/DBSchemaBuilder/getDBGeneratedSchema.js +1 -2
- package/dist/DBSchemaBuilder/getDBGeneratedSchema.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +10 -5
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +90 -71
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getJoinQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getJoinQuery.js +3 -2
- package/dist/DboBuilder/QueryBuilder/getJoinQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts +2 -2
- package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js +53 -116
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getQuerySource.d.ts +18 -0
- package/dist/DboBuilder/QueryBuilder/getQuerySource.d.ts.map +1 -0
- package/dist/DboBuilder/QueryBuilder/getQuerySource.js +29 -0
- package/dist/DboBuilder/QueryBuilder/getQuerySource.js.map +1 -0
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.js +6 -2
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/parseJoinSelect.d.ts +13 -0
- package/dist/DboBuilder/QueryBuilder/parseJoinSelect.d.ts.map +1 -0
- package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js +57 -0
- package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js.map +1 -0
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js +2 -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 +2 -1
- package/dist/DboBuilder/TableHandler/delete.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 +19 -5
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +2 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
- package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/update.js +2 -1
- package/dist/DboBuilder/TableHandler/update.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/ViewHandler.d.ts +6 -16
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.js +2 -7
- package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/find.js +1 -1
- package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.js +24 -13
- package/dist/DboBuilder/ViewHandler/getExistsCondition.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/getTableJoinQuery.d.ts +4 -1
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js +20 -14
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts +7 -3
- package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.js +30 -23
- package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
- 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 +2 -1
- package/dist/DboBuilder/getCondition.d.ts.map +1 -1
- package/dist/DboBuilder/getCondition.js +9 -8
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js +3 -2
- package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js +3 -2
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts +2 -2
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +2 -0
- package/dist/Prostgles.js.map +1 -1
- package/dist/ProstglesContext.spec.js +25 -0
- package/dist/ProstglesContext.spec.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/PublishParser/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.js +22 -4
- package/dist/PublishParser/PublishParser.js.map +1 -1
- package/dist/PublishParser/applyScopeToTableRules.d.ts +0 -1
- package/dist/PublishParser/applyScopeToTableRules.d.ts.map +1 -1
- package/dist/PublishParser/applyScopeToTableRules.js +3 -7
- package/dist/PublishParser/applyScopeToTableRules.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 +24 -1
- package/dist/PublishParser/getPublishedTableNames.js.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.d.ts +0 -4
- package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.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/getColumnSQLDefinitionQuery.d.ts.map +1 -1
- package/dist/TableConfig/getColumnSQLDefinitionQuery.js +1 -2
- package/dist/TableConfig/getColumnSQLDefinitionQuery.js.map +1 -1
- package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
- package/dist/TableConfig/initTableConfig.js +9 -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 +2 -1
- package/dist/index.js.map +1 -1
- package/lib/Audit/AuditTable.ts +8 -4
- package/lib/Audit/getAuditTableRules.ts +292 -0
- package/lib/Audit/getAuditTriggerConfig.ts +14 -1
- package/lib/DBSchemaBuilder/getClientDBGeneratedSchemas.ts +9 -1
- package/lib/DBSchemaBuilder/getDBGeneratedSchema.ts +1 -2
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +118 -90
- package/lib/DboBuilder/QueryBuilder/getJoinQuery.ts +3 -2
- package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +111 -194
- package/lib/DboBuilder/QueryBuilder/getQuerySource.ts +55 -0
- package/lib/DboBuilder/QueryBuilder/getSelectQuery.ts +8 -2
- package/lib/DboBuilder/QueryBuilder/parseJoinSelect.ts +73 -0
- package/lib/DboBuilder/TableHandler/TableHandler.ts +3 -6
- package/lib/DboBuilder/TableHandler/delete.ts +2 -1
- package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +31 -5
- package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +2 -1
- package/lib/DboBuilder/TableHandler/update.ts +2 -1
- package/lib/DboBuilder/TableHandler/updateFile.ts +1 -0
- package/lib/DboBuilder/TableHandler/uploadFile.ts +3 -0
- package/lib/DboBuilder/ViewHandler/ViewHandler.ts +6 -12
- package/lib/DboBuilder/ViewHandler/find.ts +0 -1
- package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +35 -28
- package/lib/DboBuilder/ViewHandler/getRawInfo.ts +6 -2
- package/lib/DboBuilder/ViewHandler/getTableJoinQuery.ts +22 -14
- package/lib/DboBuilder/ViewHandler/prepareWhere.ts +48 -27
- package/lib/DboBuilder/getColumns.ts +2 -0
- package/lib/DboBuilder/getCondition.ts +11 -10
- package/lib/DboBuilder/getSubscribeRelatedTables.ts +3 -2
- package/lib/DboBuilder/parseUpdateRules.ts +3 -2
- package/lib/Prostgles.ts +1 -0
- package/lib/ProstglesContext.spec.ts +30 -0
- package/lib/ProstglesTypes.ts +11 -0
- package/lib/PublishParser/PublishParser.ts +47 -4
- package/lib/PublishParser/applyScopeToTableRules.ts +1 -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 +33 -2
- package/lib/PublishParser/publishTypesAndUtils.ts +0 -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/getColumnSQLDefinitionQuery.ts +8 -2
- package/lib/TableConfig/initTableConfig.ts +10 -6
- package/lib/index.ts +3 -1
- package/package.json +1 -1
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deleteUnreferencedFile = void 0;
|
|
4
|
+
const fileVersionUtils_1 = require("./fileVersionUtils");
|
|
4
5
|
const deleteUnreferencedFile = async (db, config, storageKey) => {
|
|
5
6
|
// A failed COMMIT response does not prove rollback. Check committed state first.
|
|
6
7
|
// Fail closed if RLS would hide a reference or the database is unavailable.
|
|
7
8
|
const referenced = await db.tx(async (tx) => {
|
|
8
9
|
await tx.none("SET LOCAL row_security = off");
|
|
9
|
-
return tx.oneOrNone(
|
|
10
|
+
return tx.oneOrNone(`SELECT 1 AS found
|
|
11
|
+
WHERE EXISTS (
|
|
12
|
+
SELECT 1 FROM \${fileTable:name}
|
|
13
|
+
WHERE storage_key = \${key}::uuid OR (storage_key IS NULL AND id = \${key}::uuid)
|
|
14
|
+
)
|
|
15
|
+
${config.versioning ?
|
|
16
|
+
`OR EXISTS (
|
|
17
|
+
SELECT 1 FROM \${versionTable:name}
|
|
18
|
+
WHERE storage_key = \${key}::uuid
|
|
19
|
+
)`
|
|
20
|
+
: ""}
|
|
21
|
+
LIMIT 1`, {
|
|
22
|
+
fileTable: config.tableName,
|
|
23
|
+
versionTable: (0, fileVersionUtils_1.getFileVersionTableName)(config),
|
|
24
|
+
key: storageKey,
|
|
25
|
+
});
|
|
10
26
|
});
|
|
11
27
|
if (!referenced)
|
|
12
28
|
await config.storageClient.delete(storageKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteUnreferencedFile.js","sourceRoot":"","sources":["../../lib/StorageClient/deleteUnreferencedFile.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"deleteUnreferencedFile.js","sourceRoot":"","sources":["../../lib/StorageClient/deleteUnreferencedFile.ts"],"names":[],"mappings":";;;AAEA,yDAA6D;AAEtD,MAAM,sBAAsB,GAAG,KAAK,EACzC,EAAM,EACN,MAAuB,EACvB,UAAkB,EAClB,EAAE;IACF,iFAAiF;IACjF,4EAA4E;IAC5E,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1C,MAAM,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,EAAE,CAAC,SAAS,CACjB;;;;;SAMG,MAAM,CAAC,UAAU,CAAC,CAAC;YACjB;;;aAGE;YACJ,CAAC,CAAC,EACJ;eACQ,EACT;YACE,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,YAAY,EAAE,IAAA,0CAAuB,EAAC,MAAM,CAAC;YAC7C,GAAG,EAAE,UAAU;SAChB,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,UAAU;QAAE,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACjE,CAAC,CAAC;AAhCW,QAAA,sBAAsB,0BAgCjC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { TableRowFromColumnDefinitions } from "../TableConfig/TableRowFromColumnDefinitions";
|
|
2
|
+
export declare const FILE_TABLE_COLUMN_DEFINITIONS: {
|
|
3
|
+
readonly id: "UUID PRIMARY KEY DEFAULT gen_random_uuid()";
|
|
4
|
+
/**
|
|
5
|
+
* NULL for legacy objects stored under their file ID.
|
|
6
|
+
* */
|
|
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 declare const FILE_TABLE_VERSION_COLUMN_DEFINITIONS: {
|
|
26
|
+
readonly version: "INTEGER NOT NULL DEFAULT 1";
|
|
27
|
+
};
|
|
28
|
+
export declare const FILE_VERSION_TABLE_COLUMN_DEFINITIONS: {
|
|
29
|
+
readonly storage_key: "UUID NOT NULL";
|
|
30
|
+
readonly file_id: "UUID NOT NULL";
|
|
31
|
+
readonly version: "INTEGER NOT NULL";
|
|
32
|
+
readonly created: "TIMESTAMP NOT NULL DEFAULT NOW()";
|
|
33
|
+
readonly url: "TEXT NOT NULL DEFAULT ''";
|
|
34
|
+
readonly description: "TEXT";
|
|
35
|
+
readonly id: "UUID PRIMARY KEY DEFAULT gen_random_uuid()";
|
|
36
|
+
readonly extension: "TEXT NOT NULL DEFAULT ''";
|
|
37
|
+
readonly content_type: "TEXT NOT NULL DEFAULT ''";
|
|
38
|
+
readonly content_length: "BIGINT NOT NULL DEFAULT 0";
|
|
39
|
+
readonly etag: "TEXT NOT NULL DEFAULT ''";
|
|
40
|
+
readonly original_name: "TEXT NOT NULL";
|
|
41
|
+
readonly original_last_modified: "TIMESTAMPTZ";
|
|
42
|
+
readonly cloud_url: "TEXT";
|
|
43
|
+
readonly signed_url: "TEXT";
|
|
44
|
+
readonly signed_url_expires: "BIGINT";
|
|
45
|
+
readonly added: "TIMESTAMP NOT NULL DEFAULT NOW()";
|
|
46
|
+
readonly updated: "TIMESTAMP NOT NULL DEFAULT NOW()";
|
|
47
|
+
readonly deleted: "TIMESTAMPTZ";
|
|
48
|
+
readonly deleted_from_storage: "TIMESTAMPTZ";
|
|
49
|
+
};
|
|
50
|
+
export type FileTableInsertRow = TableRowFromColumnDefinitions<typeof FILE_TABLE_COLUMN_DEFINITIONS> & Partial<TableRowFromColumnDefinitions<typeof FILE_TABLE_VERSION_COLUMN_DEFINITIONS>>;
|
|
51
|
+
export type FileTableRow = Required<TableRowFromColumnDefinitions<typeof FILE_TABLE_COLUMN_DEFINITIONS>> & Partial<Required<TableRowFromColumnDefinitions<typeof FILE_TABLE_VERSION_COLUMN_DEFINITIONS>>>;
|
|
52
|
+
export type FileVersionTableInsertRow = TableRowFromColumnDefinitions<typeof FILE_VERSION_TABLE_COLUMN_DEFINITIONS>;
|
|
53
|
+
export type FileVersionTableRow = Required<FileVersionTableInsertRow>;
|
|
54
|
+
//# sourceMappingURL=fileTableDefinitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileTableDefinitions.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/fileTableDefinitions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAElG,eAAO,MAAM,6BAA6B;;IAExC;;SAEK;;;;;;;;;;;;;;;;;;CAkBG,CAAC;AAEX,eAAO,MAAM,qCAAqC;;CAExC,CAAC;AAEX,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;CAMxC,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,6BAA6B,CAC5D,OAAO,6BAA6B,CACrC,GACC,OAAO,CAAC,6BAA6B,CAAC,OAAO,qCAAqC,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,YAAY,GAAG,QAAQ,CACjC,6BAA6B,CAAC,OAAO,6BAA6B,CAAC,CACpE,GACC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,OAAO,qCAAqC,CAAC,CAAC,CAAC,CAAC;AAEjG,MAAM,MAAM,yBAAyB,GAAG,6BAA6B,CACnE,OAAO,qCAAqC,CAC7C,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FILE_VERSION_TABLE_COLUMN_DEFINITIONS = exports.FILE_TABLE_VERSION_COLUMN_DEFINITIONS = exports.FILE_TABLE_COLUMN_DEFINITIONS = void 0;
|
|
4
|
+
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
+
exports.FILE_TABLE_COLUMN_DEFINITIONS = {
|
|
6
|
+
id: `UUID PRIMARY KEY DEFAULT gen_random_uuid()`,
|
|
7
|
+
/**
|
|
8
|
+
* NULL for legacy objects stored under their file ID.
|
|
9
|
+
* */
|
|
10
|
+
storage_key: `UUID UNIQUE`,
|
|
11
|
+
extension: `TEXT NOT NULL DEFAULT ''`,
|
|
12
|
+
content_type: `TEXT NOT NULL DEFAULT ''`,
|
|
13
|
+
content_length: `BIGINT NOT NULL DEFAULT 0`,
|
|
14
|
+
etag: `TEXT NOT NULL DEFAULT ''`,
|
|
15
|
+
original_name: `TEXT NOT NULL`,
|
|
16
|
+
original_last_modified: `TIMESTAMPTZ`,
|
|
17
|
+
description: `TEXT`,
|
|
18
|
+
url: `TEXT NOT NULL DEFAULT ''`,
|
|
19
|
+
cloud_url: `TEXT`,
|
|
20
|
+
signed_url: `TEXT`,
|
|
21
|
+
signed_url_expires: `BIGINT`,
|
|
22
|
+
added: `TIMESTAMP NOT NULL DEFAULT NOW()`,
|
|
23
|
+
updated: `TIMESTAMP NOT NULL DEFAULT NOW()`,
|
|
24
|
+
deleted: `TIMESTAMPTZ`,
|
|
25
|
+
deleted_from_storage: `TIMESTAMPTZ`,
|
|
26
|
+
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
|
|
27
|
+
};
|
|
28
|
+
exports.FILE_TABLE_VERSION_COLUMN_DEFINITIONS = {
|
|
29
|
+
version: `INTEGER NOT NULL DEFAULT 1`,
|
|
30
|
+
};
|
|
31
|
+
exports.FILE_VERSION_TABLE_COLUMN_DEFINITIONS = {
|
|
32
|
+
...(0, prostgles_types_1.omitKeys)(exports.FILE_TABLE_COLUMN_DEFINITIONS, ["data"]),
|
|
33
|
+
storage_key: `UUID NOT NULL`,
|
|
34
|
+
file_id: `UUID NOT NULL`, // FK constraint is added later on
|
|
35
|
+
version: `INTEGER NOT NULL`,
|
|
36
|
+
created: `TIMESTAMP NOT NULL DEFAULT NOW()`,
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=fileTableDefinitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileTableDefinitions.js","sourceRoot":"","sources":["../../lib/StorageClient/fileTableDefinitions.ts"],"names":[],"mappings":";;;AAAA,qDAA2C;AAG9B,QAAA,6BAA6B,GAAG;IAC3C,EAAE,EAAE,4CAA4C;IAChD;;SAEK;IACL,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,0BAA0B;IACrC,YAAY,EAAE,0BAA0B;IACxC,cAAc,EAAE,2BAA2B;IAC3C,IAAI,EAAE,0BAA0B;IAChC,aAAa,EAAE,eAAe;IAC9B,sBAAsB,EAAE,aAAa;IACrC,WAAW,EAAE,MAAM;IACnB,GAAG,EAAE,0BAA0B;IAC/B,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,MAAM;IAClB,kBAAkB,EAAE,QAAQ;IAC5B,KAAK,EAAE,kCAAkC;IACzC,OAAO,EAAE,kCAAkC;IAC3C,OAAO,EAAE,aAAa;IACtB,oBAAoB,EAAE,aAAa;IACnC,IAAI,EAAE,mDAAmD,EAAE,8HAA8H;CACjL,CAAC;AAEE,QAAA,qCAAqC,GAAG;IACnD,OAAO,EAAE,4BAA4B;CAC7B,CAAC;AAEE,QAAA,qCAAqC,GAAG;IACnD,GAAG,IAAA,0BAAQ,EAAC,qCAA6B,EAAE,CAAC,MAAM,CAAC,CAAC;IACpD,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE,eAAe,EAAE,kCAAkC;IAC5D,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,kCAAkC;CACnC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TableHandler } from "prostgles-types";
|
|
2
|
+
import type { TableHandlers } from "../DboBuilder/DboBuilder";
|
|
3
|
+
import type { FileTableConfig } from "../ProstglesTypes";
|
|
4
|
+
import type { FileTableRow, FileVersionTableInsertRow, FileVersionTableRow } from "./fileTableDefinitions";
|
|
5
|
+
type FileVersionTableSchema = {
|
|
6
|
+
fileVersions: {
|
|
7
|
+
columns: FileVersionTableRow;
|
|
8
|
+
insertColumns: FileVersionTableInsertRow;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare const getFileVersionTableName: (config: FileTableConfig) => string;
|
|
12
|
+
export declare const isFileVersionTable: (config: FileTableConfig | undefined, tableName: string) => config is FileTableConfig & {
|
|
13
|
+
versioning: NonNullable<FileTableConfig["versioning"]>;
|
|
14
|
+
};
|
|
15
|
+
export declare const getFileTableHandler: (dbo: TableHandlers, config: FileTableConfig) => TableHandler<FileTableRow>;
|
|
16
|
+
export declare const getFileRevisionsTableHandler: (dbo: TableHandlers, config: FileTableConfig) => TableHandler<Required<FileVersionTableInsertRow>, FileVersionTableSchema, "fileVersions">;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=fileVersionUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileVersionUtils.d.ts","sourceRoot":"","sources":["../../lib/StorageClient/fileVersionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EACV,YAAY,EACZ,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,KAAK,sBAAsB,GAAG;IAC5B,YAAY,EAAE;QACZ,OAAO,EAAE,mBAAmB,CAAC;QAC7B,aAAa,EAAE,yBAAyB,CAAC;KAC1C,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,eAAe,WACC,CAAC;AAEjE,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,eAAe,GAAG,SAAS,EACnC,WAAW,MAAM,KAChB,MAAM,IAAI,eAAe,GAAG;IAAE,UAAU,EAAE,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAA;CACT,CAAC;AAE/E,eAAO,MAAM,mBAAmB,GAAI,KAAK,aAAa,EAAE,QAAQ,eAAe,+BAI9E,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,KAAK,aAAa,EAAE,QAAQ,eAAe,8FAKvF,CAAC"}
|
|
@@ -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":";;;AAAA,qDAA2C;AAK3C,qEAAkE;AAElE,yDAAuF;AACvF,2DAAwD;AAEjD,MAAM,eAAe,GAAG,KAAK,EAClC,MAAuB,EACvB,GAAiB,EACjB,GAAkB,EAClB,QAAkB,EAClB,EAAE;IACF,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,+CAA4B,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAI,QAAyB,CAAC,YAAY,CAAC;IAC/D,MAAM,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE;QAC5D,UAAU,EAAE;YACV,MAAM,EAAE,WAAW;YACnB,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;SACxC;KACF,CAAC,CAAC;IAEH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAC1C,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO;IACtC,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAClC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,EACnB;QACE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;QACjC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;QACxB,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,IAAI;KACZ,CACF,CAA0C,CAAC;IAC5C,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO;IAE5B,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,KAAK,MAAM,UAAU,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAChF,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAA,+CAAsB,EAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC,CAAC;AAtCW,QAAA,eAAe,mBAsC1B;AAEK,MAAM,oBAAoB,GAAG,KAAK,EAAE,GAAkB,EAAE,MAAuB,EAAE,EAAE;IACxF,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO;IAC/B,MAAM,KAAK,GAAG,IAAA,sCAAmB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO;IAC7B,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;IACtE,MAAM,yBAAyB,GAAG,IAAA,+CAA4B,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5E,MAAM,mBAAmB,GAAI,yBAA0C,CAAC,YAAY,CAAC;IACrF,MAAM,yBAAyB,CAAC,UAAU,CACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAC1E;QACE,UAAU,EAAE;YACV,MAAM,EAAE,WAAW;YACnB,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;SACxC;KACF,CACF,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,oBAAoB,wBAiB/B;AAEF,oFAAoF;AACpF,MAAM,iBAAiB,GAAG,CAAC,GAAiB,EAAE,IAAc,EAA6B,EAAE;IACzF,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,IAAA,0BAAQ,EAAC,GAAG,EAAE,IAA8B,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACzC,OAAO;QACL,GAAG,SAAS;QACZ,OAAO,EAAE,EAAE;QACX,OAAO;QACP,WAAW,EAAE,IAAA,qCAAiB,EAAC,GAAG,CAAC;QACnC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,YAAY,OAAO,EAAE;QACpC,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -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"}
|