@progressive-development/pd-spa-helper 0.3.34 → 0.3.36
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/PdSpaHelper.d.ts +2 -2
- 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 +7 -0
- package/dist/src/service-provider/firebase/firestorage-client.js +54 -18
- package/dist/src/service-provider/firebase/firestorage-client.js.map +1 -1
- package/dist/src/service-provider/service-provider-impl.d.ts +1 -0
- package/dist/src/service-provider/service-provider-impl.js +7 -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 +1 -0
- package/src/service-provider/firebase/firestorage-client.ts +64 -23
- package/src/service-provider/service-provider-impl.ts +8 -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
|
|
|
@@ -107,6 +108,7 @@ const fetchItemsAndFolders = async (
|
|
|
107
108
|
): Promise<StorageDocument[]> => {
|
|
108
109
|
try {
|
|
109
110
|
const itemRefs: StorageDocument[] = [];
|
|
111
|
+
const metaPromises: Promise<FullMetadata>[] = [];
|
|
110
112
|
|
|
111
113
|
// Hole alle Items und Folder direkt unter `usedRef`
|
|
112
114
|
const res: ListResult = await listAll(usedRef);
|
|
@@ -120,6 +122,7 @@ const fetchItemsAndFolders = async (
|
|
|
120
122
|
descriptionName: metadata.customMetadata?.name,
|
|
121
123
|
description: metadata.customMetadata?.comment,
|
|
122
124
|
size: metadata.size,
|
|
125
|
+
readonly: metadata.customMetadata?.readonly === "true",
|
|
123
126
|
metaData: metadata
|
|
124
127
|
});
|
|
125
128
|
|
|
@@ -131,34 +134,42 @@ const fetchItemsAndFolders = async (
|
|
|
131
134
|
storageName,
|
|
132
135
|
refKey
|
|
133
136
|
});
|
|
134
|
-
});
|
|
135
137
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
fileName: subItemRef.name,
|
|
142
|
-
filePath: subItemRef.fullPath,
|
|
143
|
-
storageName,
|
|
144
|
-
refKey,
|
|
145
|
-
subFolderName: folderRef.name
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
}) : [];
|
|
138
|
+
// Erzeuge die Metadaten-Promises direkt, wenn `includeMetaData` aktiv ist
|
|
139
|
+
if (includeMetaData) {
|
|
140
|
+
metaPromises.push(getMetadata(itemRef));
|
|
141
|
+
}
|
|
142
|
+
});
|
|
149
143
|
|
|
150
|
-
|
|
151
|
-
|
|
144
|
+
// 2. Verarbeite alle Ordner direkt unter usedRef, falls includeFolder gesetzt ist
|
|
145
|
+
if (includeFolder) {
|
|
146
|
+
await Promise.all(
|
|
147
|
+
res.prefixes.map(async (folderRef) => {
|
|
148
|
+
const folderRes = await listAll(folderRef);
|
|
149
|
+
folderRes.items.forEach((subItemRef) => {
|
|
150
|
+
itemRefs.push({
|
|
151
|
+
fileName: subItemRef.name,
|
|
152
|
+
filePath: subItemRef.fullPath,
|
|
153
|
+
storageName,
|
|
154
|
+
refKey,
|
|
155
|
+
subFolderName: folderRef.name
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// Erzeuge Metadaten-Promises für die Ordner-Inhalte, wenn `includeMetaData` aktiv ist
|
|
159
|
+
if (includeMetaData) {
|
|
160
|
+
metaPromises.push(getMetadata(subItemRef));
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
})
|
|
164
|
+
);
|
|
165
|
+
}
|
|
152
166
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
const metaPromises = itemRefs.map((item) => getMetadata({ fullPath: item.filePath } as StorageReference));
|
|
167
|
+
// 3. Falls `includeMetaData`, warte auf alle Metadaten und ordne sie den `itemRefs` zu
|
|
168
|
+
if (includeMetaData) {
|
|
156
169
|
const metaResults = await Promise.all(metaPromises);
|
|
157
|
-
|
|
158
|
-
// Weisen die Metadaten den Items zu
|
|
159
170
|
return itemRefs.map((item, index) => processMetadata(item, metaResults[index]));
|
|
160
171
|
}
|
|
161
|
-
|
|
172
|
+
|
|
162
173
|
return itemRefs; // Rückgabe ohne Metadaten, falls nicht angefordert
|
|
163
174
|
} catch (error) {
|
|
164
175
|
console.error("Error during file and folder listing:", error);
|
|
@@ -212,6 +223,36 @@ export const downloadFileFirestorage = (file: StorageDocument) => {
|
|
|
212
223
|
return getDownloadURL(usedRef);
|
|
213
224
|
}
|
|
214
225
|
|
|
226
|
+
/**
|
|
227
|
+
* Löscht eine Datei in Firebase Storage basierend auf den Informationen im StorageDocument.
|
|
228
|
+
*
|
|
229
|
+
* @param deleteFile - Das StorageDocument-Objekt, das die zu löschende Datei beschreibt.
|
|
230
|
+
* @returns Ein Promise, das erfüllt wird, wenn die Datei gelöscht wurde, oder abgelehnt wird, wenn ein Fehler auftritt.
|
|
231
|
+
*/
|
|
232
|
+
export async function deleteFirestorageDocument(deleteFile: StorageDocument): Promise<void> {
|
|
233
|
+
if (!deleteFile.filePath) {
|
|
234
|
+
throw new Error("File path is required to delete a document.");
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Hole die Storage-Konfiguration basierend auf dem storageName
|
|
238
|
+
const storageConf = storageMap.get(deleteFile.storageName);
|
|
239
|
+
if (!storageConf) {
|
|
240
|
+
throw new Error(`Invalid storage name: ${deleteFile.storageName}`);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Erstelle eine Referenz zur Datei in Firebase Storage
|
|
244
|
+
const deleteRef = ref(storageConf.storage, deleteFile.filePath);
|
|
245
|
+
|
|
246
|
+
try {
|
|
247
|
+
// Lösche die Datei
|
|
248
|
+
await deleteObject(deleteRef);
|
|
249
|
+
console.log(`File ${deleteFile.fileName} successfully deleted.`);
|
|
250
|
+
} catch (error) {
|
|
251
|
+
console.error("Error deleting file:", error);
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
215
256
|
|
|
216
257
|
/* Firestorage Error List: https://firebase.google.com/docs/storage/web/handle-errors */
|
|
217
258
|
/*
|
|
@@ -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, 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
|
|
|
@@ -214,6 +214,13 @@ export const downloadFile = (file: StorageDocument): Promise<unknown> => {
|
|
|
214
214
|
return throwUndefinedProviderError();
|
|
215
215
|
}
|
|
216
216
|
|
|
217
|
+
export const deleteFile = (file: StorageDocument): Promise<unknown> => {
|
|
218
|
+
if (provider === "firebase") {
|
|
219
|
+
return deleteFirestorageDocument(file);
|
|
220
|
+
}
|
|
221
|
+
return throwUndefinedProviderError();
|
|
222
|
+
}
|
|
223
|
+
|
|
217
224
|
/* #########################################
|
|
218
225
|
* Remote Database Implementation
|
|
219
226
|
* ######################################### */
|
|
@@ -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
|
|