From 30e95bf98f99bcf05a0f24e1d3b1fbdf07146977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20D=C4=9Bdi=C4=8D?= Date: Thu, 10 Oct 2024 09:38:47 +0200 Subject: [PATCH] Fixed copying of files --- src/backend/utils/DriveBackedValue.ts | 2 +- .../SafeDriveService/SafeFilesCollection.ts | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/backend/utils/DriveBackedValue.ts b/src/backend/utils/DriveBackedValue.ts index 97fac41d..34ca2f37 100644 --- a/src/backend/utils/DriveBackedValue.ts +++ b/src/backend/utils/DriveBackedValue.ts @@ -45,7 +45,7 @@ export class DriveBackedValue_ { private getExistingDriveFileContents(fileId: string): T { return JSON.parse( - this.driveService.Files.get(fileId, null, { alt: "media" }) as string, + this.driveService.Files.get(fileId, null, { alt: "media" as const }), ) as T; } diff --git a/src/backend/utils/SafeDriveService/SafeFilesCollection.ts b/src/backend/utils/SafeDriveService/SafeFilesCollection.ts index 47520693..ef5135ca 100644 --- a/src/backend/utils/SafeDriveService/SafeFilesCollection.ts +++ b/src/backend/utils/SafeDriveService/SafeFilesCollection.ts @@ -41,6 +41,15 @@ const safeFileKeys: DeepKeyof = { }, }; +interface GetArg { + alt?: string; +} +type GetReturn, A extends GetArg> = A extends { + alt: "media"; +} + ? string + : DeepPick; + export interface SafeFileList> { items: Array>; nextPageToken?: string | undefined; @@ -121,21 +130,24 @@ export class SafeFilesCollection_ { return ret; } - public get>( + public get, A extends GetArg>( fileId: string, fields: F | null, - optionalArgs: { alt?: string } = {}, - ): DeepPick { + optionalArgs: A = {} as A, + ): GetReturn { const ret = this.unsafeFiles.get(fileId, { ...optionalArgs, ...(fields !== null && { fields: stringifyFields_(fields), }), }); - if (!SafeFilesCollection_.fileIsSafe(ret, fields)) { + if ( + typeof ret !== "string" && + !SafeFilesCollection_.fileIsSafe(ret, fields) + ) { throw new Error(""); } - return ret; + return ret as unknown as GetReturn; } public insert>(