@progressive-development/pd-spa-helper 0.3.35 → 0.3.37
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/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/service-provider/firebase/firestorage-client.d.ts +8 -0
- package/dist/src/service-provider/firebase/firestorage-client.js +73 -2
- package/dist/src/service-provider/firebase/firestorage-client.js.map +1 -1
- package/dist/src/service-provider/service-provider-impl.d.ts +2 -0
- package/dist/src/service-provider/service-provider-impl.js +13 -1
- package/dist/src/service-provider/service-provider-impl.js.map +1 -1
- package/dist/src/service-provider/service-provider-model.d.ts +2 -0
- package/dist/src/service-provider/service-provider-model.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -0
- package/src/service-provider/firebase/firestorage-client.ts +85 -1
- package/src/service-provider/service-provider-impl.ts +22 -1
- package/src/service-provider/service-provider-model.ts +2 -0
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FirebaseApp } from 'firebase/app';
|
|
2
|
-
import { FirebaseStorage, FullMetadata, ListResult, StorageReference, UploadResult, getDownloadURL, getMetadata, getStorage, listAll, ref, uploadString } from "firebase/storage";
|
|
2
|
+
import { FirebaseStorage, FullMetadata, ListResult, StorageReference, UploadResult, deleteObject, getDownloadURL, getMetadata, getStorage, listAll, ref, uploadString } from "firebase/storage";
|
|
3
3
|
|
|
4
4
|
import { FileStorageConfig, StorageDocument, UploadFile } from '../service-provider-model.js';
|
|
5
5
|
import { getUser } from '../service-provider-impl.js';
|
|
@@ -92,6 +92,7 @@ export const uploadFirestorageFile = (file: UploadFile):Promise<UploadResult> =>
|
|
|
92
92
|
'creator': (getUser() as any)?.displayName,
|
|
93
93
|
'comment': file.description,
|
|
94
94
|
'name': file.descriptionName,
|
|
95
|
+
'readonly': file.readonly ? "true" : "false",
|
|
95
96
|
}
|
|
96
97
|
};
|
|
97
98
|
|
|
@@ -121,6 +122,7 @@ const fetchItemsAndFolders = async (
|
|
|
121
122
|
descriptionName: metadata.customMetadata?.name,
|
|
122
123
|
description: metadata.customMetadata?.comment,
|
|
123
124
|
size: metadata.size,
|
|
125
|
+
readonly: metadata.customMetadata?.readonly === "true",
|
|
124
126
|
metaData: metadata
|
|
125
127
|
});
|
|
126
128
|
|
|
@@ -175,6 +177,58 @@ const fetchItemsAndFolders = async (
|
|
|
175
177
|
}
|
|
176
178
|
}
|
|
177
179
|
|
|
180
|
+
// Funktion, um `StorageDocument` von einer `storageURI` zu erstellen
|
|
181
|
+
export const getFirestorageFile = async (
|
|
182
|
+
storageName: string,
|
|
183
|
+
refKey:string,
|
|
184
|
+
storageURI: string,
|
|
185
|
+
includeMetaData = false
|
|
186
|
+
): Promise<StorageDocument> => {
|
|
187
|
+
try {
|
|
188
|
+
|
|
189
|
+
if (!storageMap || storageMap.size === 0) {
|
|
190
|
+
throw new Error("No storage is configured");
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// get storage
|
|
194
|
+
const storageConf = storageMap.get(storageName);
|
|
195
|
+
if (!storageConf ) {
|
|
196
|
+
throw new Error(`Invalid storage name: ${storageName}`);
|
|
197
|
+
}
|
|
198
|
+
const storageRef = ref(storageConf.storage, storageURI);
|
|
199
|
+
|
|
200
|
+
// Basis-StorageDocument ohne Metadaten
|
|
201
|
+
const storageDocument: StorageDocument = {
|
|
202
|
+
fileName: storageRef.name,
|
|
203
|
+
filePath: storageRef.fullPath,
|
|
204
|
+
storageName,
|
|
205
|
+
refKey,
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// Falls Metadaten angefordert, lade und füge sie hinzu
|
|
209
|
+
if (includeMetaData) {
|
|
210
|
+
const metadata = await getMetadata(storageRef);
|
|
211
|
+
|
|
212
|
+
return {
|
|
213
|
+
...storageDocument,
|
|
214
|
+
creation: new Date(metadata.timeCreated),
|
|
215
|
+
documentType: metadata.contentType,
|
|
216
|
+
creator: metadata.customMetadata?.creator,
|
|
217
|
+
descriptionName: metadata.customMetadata?.name,
|
|
218
|
+
description: metadata.customMetadata?.comment,
|
|
219
|
+
size: metadata.size,
|
|
220
|
+
readonly: metadata.customMetadata?.readonly === "true",
|
|
221
|
+
metaData: metadata
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return storageDocument; // Rückgabe ohne Metadaten
|
|
226
|
+
} catch (error) {
|
|
227
|
+
console.error("Error creating StorageDocument:", error);
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
178
232
|
export const getFirestorageFileList = (
|
|
179
233
|
storageName: string,
|
|
180
234
|
refKey: string,
|
|
@@ -221,6 +275,36 @@ export const downloadFileFirestorage = (file: StorageDocument) => {
|
|
|
221
275
|
return getDownloadURL(usedRef);
|
|
222
276
|
}
|
|
223
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Löscht eine Datei in Firebase Storage basierend auf den Informationen im StorageDocument.
|
|
280
|
+
*
|
|
281
|
+
* @param deleteFile - Das StorageDocument-Objekt, das die zu löschende Datei beschreibt.
|
|
282
|
+
* @returns Ein Promise, das erfüllt wird, wenn die Datei gelöscht wurde, oder abgelehnt wird, wenn ein Fehler auftritt.
|
|
283
|
+
*/
|
|
284
|
+
export async function deleteFirestorageDocument(deleteFile: StorageDocument): Promise<void> {
|
|
285
|
+
if (!deleteFile.filePath) {
|
|
286
|
+
throw new Error("File path is required to delete a document.");
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Hole die Storage-Konfiguration basierend auf dem storageName
|
|
290
|
+
const storageConf = storageMap.get(deleteFile.storageName);
|
|
291
|
+
if (!storageConf) {
|
|
292
|
+
throw new Error(`Invalid storage name: ${deleteFile.storageName}`);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Erstelle eine Referenz zur Datei in Firebase Storage
|
|
296
|
+
const deleteRef = ref(storageConf.storage, deleteFile.filePath);
|
|
297
|
+
|
|
298
|
+
try {
|
|
299
|
+
// Lösche die Datei
|
|
300
|
+
await deleteObject(deleteRef);
|
|
301
|
+
console.log(`File ${deleteFile.fileName} successfully deleted.`);
|
|
302
|
+
} catch (error) {
|
|
303
|
+
console.error("Error deleting file:", error);
|
|
304
|
+
throw error;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
224
308
|
|
|
225
309
|
/* Firestorage Error List: https://firebase.google.com/docs/storage/web/handle-errors */
|
|
226
310
|
/*
|
|
@@ -10,7 +10,7 @@ import { callFunction, initFunctions } from "./firebase/functions-client.js";
|
|
|
10
10
|
import { getFirebaseCollectionListener, initFirestore } from "./firebase/firestore-client.js";
|
|
11
11
|
import { callFunctionMock, initMockResponse } from "./mock/function-client.js";
|
|
12
12
|
import { ServiceCallController } from "../service-call-controller2.js";
|
|
13
|
-
import { downloadFileFirestorage, getFirestorageFileList, initFirestorage, uploadFirestorageFile } from "./firebase/firestorage-client.js";
|
|
13
|
+
import { deleteFirestorageDocument, downloadFileFirestorage, getFirestorageFile, getFirestorageFileList, initFirestorage, uploadFirestorageFile } from "./firebase/firestorage-client.js";
|
|
14
14
|
import { downloadFileMock, getMockFileList, initStorageMock, uploadStorageFileMock } from "./mock/storage-client.js";
|
|
15
15
|
import { initFirebaseMessaging } from "./firebase/messagingFirebaseClient.js";
|
|
16
16
|
|
|
@@ -204,6 +204,20 @@ export const getStorageFileList = (
|
|
|
204
204
|
return throwUndefinedProviderError();
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
+
export const getStorageFile = (
|
|
208
|
+
storageName: string,
|
|
209
|
+
refKey:string,
|
|
210
|
+
storageURI: string,
|
|
211
|
+
includeMetaData: boolean,
|
|
212
|
+
): Promise<unknown> => {
|
|
213
|
+
if (provider === "firebase") {
|
|
214
|
+
return getFirestorageFile(
|
|
215
|
+
storageName, refKey, storageURI, includeMetaData
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
return throwUndefinedProviderError();
|
|
219
|
+
}
|
|
220
|
+
|
|
207
221
|
export const downloadFile = (file: StorageDocument): Promise<unknown> => {
|
|
208
222
|
if (provider === "firebase") {
|
|
209
223
|
return downloadFileFirestorage(file);
|
|
@@ -214,6 +228,13 @@ export const downloadFile = (file: StorageDocument): Promise<unknown> => {
|
|
|
214
228
|
return throwUndefinedProviderError();
|
|
215
229
|
}
|
|
216
230
|
|
|
231
|
+
export const deleteFile = (file: StorageDocument): Promise<unknown> => {
|
|
232
|
+
if (provider === "firebase") {
|
|
233
|
+
return deleteFirestorageDocument(file);
|
|
234
|
+
}
|
|
235
|
+
return throwUndefinedProviderError();
|
|
236
|
+
}
|
|
237
|
+
|
|
217
238
|
/* #########################################
|
|
218
239
|
* Remote Database Implementation
|
|
219
240
|
* ######################################### */
|
|
@@ -131,6 +131,7 @@ export interface UploadFile {
|
|
|
131
131
|
storageName: string
|
|
132
132
|
referenceKey: string
|
|
133
133
|
subFolderName?: string,
|
|
134
|
+
readonly?: boolean,
|
|
134
135
|
}
|
|
135
136
|
|
|
136
137
|
export interface StorageMetadata {
|
|
@@ -149,6 +150,7 @@ export interface StorageDocument {
|
|
|
149
150
|
creation?:Date,
|
|
150
151
|
creator?:string,
|
|
151
152
|
size?: number,
|
|
153
|
+
readonly?: boolean,
|
|
152
154
|
metaData?: StorageMetadata
|
|
153
155
|
}
|
|
154
156
|
|