nestjs-r2-storage 1.0.0
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/README.md +286 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/r2-storage/cloudflare.service.d.ts +41 -0
- package/dist/r2-storage/cloudflare.service.js +197 -0
- package/dist/r2-storage/cloudflare.service.js.map +1 -0
- package/dist/r2-storage/constants.d.ts +1 -0
- package/dist/r2-storage/constants.js +5 -0
- package/dist/r2-storage/constants.js.map +1 -0
- package/dist/r2-storage/decorators/photo-fields.decorator.d.ts +24 -0
- package/dist/r2-storage/decorators/photo-fields.decorator.js +14 -0
- package/dist/r2-storage/decorators/photo-fields.decorator.js.map +1 -0
- package/dist/r2-storage/interfaces/storage-options.interface.d.ts +21 -0
- package/dist/r2-storage/interfaces/storage-options.interface.js +3 -0
- package/dist/r2-storage/interfaces/storage-options.interface.js.map +1 -0
- package/dist/r2-storage/photo-manager.service.d.ts +55 -0
- package/dist/r2-storage/photo-manager.service.js +314 -0
- package/dist/r2-storage/photo-manager.service.js.map +1 -0
- package/dist/r2-storage/r2-storage.module.d.ts +11 -0
- package/dist/r2-storage/r2-storage.module.js +92 -0
- package/dist/r2-storage/r2-storage.module.js.map +1 -0
- package/dist/r2-storage/utils/nested-value.util.d.ts +16 -0
- package/dist/r2-storage/utils/nested-value.util.js +130 -0
- package/dist/r2-storage/utils/nested-value.util.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +41 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { CloudflareService } from './cloudflare.service';
|
|
2
|
+
export interface PhotoField {
|
|
3
|
+
field: string;
|
|
4
|
+
urlField?: string;
|
|
5
|
+
sizeField?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PhotoUploadRequest {
|
|
8
|
+
field: string;
|
|
9
|
+
filename: string;
|
|
10
|
+
size: number;
|
|
11
|
+
prefix?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PhotoUploadResponse {
|
|
14
|
+
field: string;
|
|
15
|
+
fileKey: string;
|
|
16
|
+
uploadUrl: string;
|
|
17
|
+
publicUrl?: string;
|
|
18
|
+
filename?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CreatePhotosResult<T extends Record<string, any>> {
|
|
21
|
+
updatedPayload: T;
|
|
22
|
+
uploadUrls: PhotoUploadResponse[];
|
|
23
|
+
totalStorageUsed: number;
|
|
24
|
+
}
|
|
25
|
+
export interface UpdatePhotosResult<T extends Record<string, any>> {
|
|
26
|
+
updatedPayload: T;
|
|
27
|
+
uploadUrls: PhotoUploadResponse[];
|
|
28
|
+
storageIncrease: number;
|
|
29
|
+
storageDecrease: number;
|
|
30
|
+
deletedFiles: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface DeletePhotosResult {
|
|
33
|
+
deletedFiles: string[];
|
|
34
|
+
totalStorageFreed: number;
|
|
35
|
+
}
|
|
36
|
+
export interface AppendUrlsOptions {
|
|
37
|
+
urlField?: (field: string) => string;
|
|
38
|
+
}
|
|
39
|
+
export declare class PhotoManagerService {
|
|
40
|
+
private readonly cloudflareService;
|
|
41
|
+
constructor(cloudflareService: CloudflareService);
|
|
42
|
+
appendPhotoUrls<T extends Record<string, any>>(payload: T, photoFields: PhotoField[]): Promise<T>;
|
|
43
|
+
appendPhotoUrls<T extends Record<string, any>>(payload: T[], photoFields: PhotoField[]): Promise<T[]>;
|
|
44
|
+
private handleSingleFieldUrl;
|
|
45
|
+
private handleArrayFieldUrls;
|
|
46
|
+
createObjectWithPhotos<T extends Record<string, any>>(payload: T, photoFields: PhotoField[], filePrefix?: string): Promise<CreatePhotosResult<T>>;
|
|
47
|
+
updateObjectWithPhotos<T extends Record<string, any>>(payload: T, existingObject: T, photoFields: PhotoField[], filePrefix?: string): Promise<UpdatePhotosResult<T>>;
|
|
48
|
+
deletePhotosFromObject<T extends Record<string, any>>(object: T, photoFields: PhotoField[]): Promise<DeletePhotosResult>;
|
|
49
|
+
private extractPhotoUploadRequests;
|
|
50
|
+
private extractArrayFieldUploadRequests;
|
|
51
|
+
private extractExistingFiles;
|
|
52
|
+
private determineFilesToDelete;
|
|
53
|
+
private normalizeFilename;
|
|
54
|
+
private updateArrayFieldWithNewFileKey;
|
|
55
|
+
}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PhotoManagerService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const cloudflare_service_1 = require("./cloudflare.service");
|
|
15
|
+
const nested_value_util_1 = require("./utils/nested-value.util");
|
|
16
|
+
let PhotoManagerService = class PhotoManagerService {
|
|
17
|
+
constructor(cloudflareService) {
|
|
18
|
+
this.cloudflareService = cloudflareService;
|
|
19
|
+
}
|
|
20
|
+
async appendPhotoUrls(payload, photoFields, options) {
|
|
21
|
+
const isArray = Array.isArray(payload);
|
|
22
|
+
const items = isArray ? payload : [payload];
|
|
23
|
+
const urlFieldFn = options?.urlField || ((field) => `${field}_url`);
|
|
24
|
+
const result = await Promise.all(items.map(async (item) => {
|
|
25
|
+
let updatedItem = { ...item };
|
|
26
|
+
for (const photoField of photoFields) {
|
|
27
|
+
const fieldValue = (0, nested_value_util_1.getNestedValue)(updatedItem, photoField.field);
|
|
28
|
+
if (!fieldValue) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if ((0, nested_value_util_1.isArrayPath)(photoField.field)) {
|
|
32
|
+
updatedItem = await this.handleArrayFieldUrls(updatedItem, photoField, urlFieldFn);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
updatedItem = await this.handleSingleFieldUrl(updatedItem, photoField, urlFieldFn);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return updatedItem;
|
|
39
|
+
}));
|
|
40
|
+
return isArray ? result : result[0];
|
|
41
|
+
}
|
|
42
|
+
async handleSingleFieldUrl(item, photoField, urlFieldFn) {
|
|
43
|
+
const fieldValue = (0, nested_value_util_1.getNestedValue)(item, photoField.field);
|
|
44
|
+
if (!fieldValue) {
|
|
45
|
+
return item;
|
|
46
|
+
}
|
|
47
|
+
const urlField = photoField.urlField || urlFieldFn(photoField.field);
|
|
48
|
+
try {
|
|
49
|
+
const { downloadUrl, publicUrl } = await this.cloudflareService.getDownloadUrl(fieldValue);
|
|
50
|
+
const finalUrl = publicUrl || downloadUrl;
|
|
51
|
+
return (0, nested_value_util_1.setNestedValue)(item, urlField, finalUrl);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.error(`Failed to generate download URL for ${fieldValue}:`, error);
|
|
55
|
+
return (0, nested_value_util_1.setNestedValue)(item, urlField, null);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async handleArrayFieldUrls(item, photoField, urlFieldFn) {
|
|
59
|
+
const { segments } = (0, nested_value_util_1.parseFieldPath)(photoField.field);
|
|
60
|
+
const arrayPath = segments
|
|
61
|
+
.map((s) => (s.isArray ? `${s.key}[]` : s.key))
|
|
62
|
+
.join('.');
|
|
63
|
+
const arrayValue = (0, nested_value_util_1.getNestedValue)(item, arrayPath);
|
|
64
|
+
if (!Array.isArray(arrayValue)) {
|
|
65
|
+
return item;
|
|
66
|
+
}
|
|
67
|
+
const urlField = photoField.urlField || urlFieldFn(photoField.field);
|
|
68
|
+
const { key: photoKey } = segments[segments.length - 1];
|
|
69
|
+
const updatedArray = await Promise.all(arrayValue.map(async (arrayItem) => {
|
|
70
|
+
const photoValue = arrayItem[photoKey];
|
|
71
|
+
if (!photoValue) {
|
|
72
|
+
return { ...arrayItem, [urlField]: null };
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const { downloadUrl, publicUrl } = await this.cloudflareService.getDownloadUrl(photoValue);
|
|
76
|
+
const finalUrl = publicUrl || downloadUrl;
|
|
77
|
+
return { ...arrayItem, [urlField]: finalUrl };
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error(`Failed to generate download URL for ${photoValue}:`, error);
|
|
81
|
+
return { ...arrayItem, [urlField]: null };
|
|
82
|
+
}
|
|
83
|
+
}));
|
|
84
|
+
return (0, nested_value_util_1.setNestedValue)(item, arrayPath, updatedArray);
|
|
85
|
+
}
|
|
86
|
+
async createObjectWithPhotos(payload, photoFields, filePrefix = 'uploads') {
|
|
87
|
+
let updatedPayload = { ...payload };
|
|
88
|
+
const uploadUrls = [];
|
|
89
|
+
let totalStorageUsed = 0;
|
|
90
|
+
const photoUploadRequests = this.extractPhotoUploadRequests(payload, photoFields, filePrefix);
|
|
91
|
+
const uploadResults = await Promise.all(photoUploadRequests.map(async (request) => {
|
|
92
|
+
const result = await this.cloudflareService.getUploadUrl(request.filename, request.size, request.filename);
|
|
93
|
+
const storageUsed = request.size || 0;
|
|
94
|
+
totalStorageUsed += storageUsed;
|
|
95
|
+
return {
|
|
96
|
+
request,
|
|
97
|
+
response: result,
|
|
98
|
+
storageUsed,
|
|
99
|
+
};
|
|
100
|
+
}));
|
|
101
|
+
for (const { request, response, storageUsed } of uploadResults) {
|
|
102
|
+
uploadUrls.push({
|
|
103
|
+
field: request.field,
|
|
104
|
+
fileKey: response.fileKey,
|
|
105
|
+
uploadUrl: response.uploadUrl,
|
|
106
|
+
publicUrl: response.publicUrl,
|
|
107
|
+
filename: request.filename,
|
|
108
|
+
});
|
|
109
|
+
if ((0, nested_value_util_1.isArrayPath)(request.field)) {
|
|
110
|
+
updatedPayload = await this.updateArrayFieldWithNewFileKey(updatedPayload, request.field, request.filename, response.fileKey);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
updatedPayload = (0, nested_value_util_1.setNestedValue)(updatedPayload, request.field, response.fileKey);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
updatedPayload,
|
|
118
|
+
uploadUrls,
|
|
119
|
+
totalStorageUsed,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async updateObjectWithPhotos(payload, existingObject, photoFields, filePrefix = 'uploads') {
|
|
123
|
+
let updatedPayload = { ...payload };
|
|
124
|
+
const uploadUrls = [];
|
|
125
|
+
let storageIncrease = 0;
|
|
126
|
+
let storageDecrease = 0;
|
|
127
|
+
const deletedFiles = [];
|
|
128
|
+
const existingFiles = this.extractExistingFiles(existingObject, photoFields);
|
|
129
|
+
const newPhotoRequests = this.extractPhotoUploadRequests(payload, photoFields, filePrefix);
|
|
130
|
+
const filesToDelete = this.determineFilesToDelete(existingFiles, newPhotoRequests);
|
|
131
|
+
if (filesToDelete.length > 0) {
|
|
132
|
+
const deleteResults = await this.cloudflareService.deleteFiles(filesToDelete);
|
|
133
|
+
deletedFiles.push(...deleteResults.success);
|
|
134
|
+
for (const fileKey of deleteResults.success) {
|
|
135
|
+
const fileInfo = await this.cloudflareService.getFileInfo(fileKey);
|
|
136
|
+
if (fileInfo) {
|
|
137
|
+
storageDecrease += fileInfo.size;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const uploadResults = await Promise.all(newPhotoRequests.map(async (request) => {
|
|
142
|
+
const response = await this.cloudflareService.getUploadUrl(request.filename, request.size, request.filename);
|
|
143
|
+
const storageUsed = request.size || 0;
|
|
144
|
+
storageIncrease += storageUsed;
|
|
145
|
+
return { request, response };
|
|
146
|
+
}));
|
|
147
|
+
for (const { request, response } of uploadResults) {
|
|
148
|
+
uploadUrls.push({
|
|
149
|
+
field: request.field,
|
|
150
|
+
fileKey: response.fileKey,
|
|
151
|
+
uploadUrl: response.uploadUrl,
|
|
152
|
+
publicUrl: response.publicUrl,
|
|
153
|
+
filename: request.filename,
|
|
154
|
+
});
|
|
155
|
+
if ((0, nested_value_util_1.isArrayPath)(request.field)) {
|
|
156
|
+
updatedPayload = await this.updateArrayFieldWithNewFileKey(updatedPayload, request.field, request.filename, response.fileKey);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
updatedPayload = (0, nested_value_util_1.setNestedValue)(updatedPayload, request.field, response.fileKey);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
updatedPayload,
|
|
164
|
+
uploadUrls,
|
|
165
|
+
storageIncrease,
|
|
166
|
+
storageDecrease,
|
|
167
|
+
deletedFiles,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
async deletePhotosFromObject(object, photoFields) {
|
|
171
|
+
const fileKeys = this.extractExistingFiles(object, photoFields);
|
|
172
|
+
const deletedFiles = [];
|
|
173
|
+
let totalStorageFreed = 0;
|
|
174
|
+
if (fileKeys.length === 0) {
|
|
175
|
+
return { deletedFiles: [], totalStorageFreed: 0 };
|
|
176
|
+
}
|
|
177
|
+
const results = await this.cloudflareService.deleteFiles(fileKeys);
|
|
178
|
+
deletedFiles.push(...results.success);
|
|
179
|
+
for (const fileKey of results.success) {
|
|
180
|
+
const fileInfo = await this.cloudflareService.getFileInfo(fileKey);
|
|
181
|
+
if (fileInfo) {
|
|
182
|
+
totalStorageFreed += fileInfo.size;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
deletedFiles,
|
|
187
|
+
totalStorageFreed,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
extractPhotoUploadRequests(payload, photoFields, filePrefix) {
|
|
191
|
+
const requests = [];
|
|
192
|
+
for (const photoField of photoFields) {
|
|
193
|
+
const fieldValue = (0, nested_value_util_1.getNestedValue)(payload, photoField.field);
|
|
194
|
+
if (!fieldValue) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if ((0, nested_value_util_1.isArrayPath)(photoField.field)) {
|
|
198
|
+
const arrayRequests = this.extractArrayFieldUploadRequests(payload, photoField, filePrefix);
|
|
199
|
+
requests.push(...arrayRequests);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const sizeValue = photoField.sizeField
|
|
203
|
+
? (0, nested_value_util_1.getNestedValue)(payload, photoField.sizeField)
|
|
204
|
+
: 0;
|
|
205
|
+
if (typeof fieldValue === 'string' && fieldValue.length > 0) {
|
|
206
|
+
requests.push({
|
|
207
|
+
field: photoField.field,
|
|
208
|
+
filename: fieldValue,
|
|
209
|
+
size: sizeValue || 0,
|
|
210
|
+
prefix: filePrefix,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return requests;
|
|
216
|
+
}
|
|
217
|
+
extractArrayFieldUploadRequests(payload, photoField, filePrefix) {
|
|
218
|
+
const requests = [];
|
|
219
|
+
const { segments } = (0, nested_value_util_1.parseFieldPath)(photoField.field);
|
|
220
|
+
const arrayPath = segments
|
|
221
|
+
.map((s) => (s.isArray ? `${s.key}[]` : s.key))
|
|
222
|
+
.join('.');
|
|
223
|
+
const arrayValue = (0, nested_value_util_1.getNestedValue)(payload, arrayPath);
|
|
224
|
+
if (!Array.isArray(arrayValue)) {
|
|
225
|
+
return requests;
|
|
226
|
+
}
|
|
227
|
+
const { key: photoKey } = segments[segments.length - 1];
|
|
228
|
+
const sizeKey = photoField.sizeField
|
|
229
|
+
? photoField.sizeField.split('.').pop()
|
|
230
|
+
: null;
|
|
231
|
+
for (let i = 0; i < arrayValue.length; i++) {
|
|
232
|
+
const item = arrayValue[i];
|
|
233
|
+
const photoValue = item[photoKey];
|
|
234
|
+
if (!photoValue || typeof photoValue !== 'string') {
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const sizeValue = sizeKey ? item[sizeKey] || 0 : 0;
|
|
238
|
+
const fieldPath = `${arrayPath}[${i}].${photoKey}`;
|
|
239
|
+
requests.push({
|
|
240
|
+
field: fieldPath,
|
|
241
|
+
filename: photoValue,
|
|
242
|
+
size: sizeValue,
|
|
243
|
+
prefix: filePrefix,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return requests;
|
|
247
|
+
}
|
|
248
|
+
extractExistingFiles(object, photoFields) {
|
|
249
|
+
const fileKeys = [];
|
|
250
|
+
for (const photoField of photoFields) {
|
|
251
|
+
const fieldValue = (0, nested_value_util_1.getNestedValue)(object, photoField.field);
|
|
252
|
+
if (!fieldValue) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if ((0, nested_value_util_1.isArrayPath)(photoField.field)) {
|
|
256
|
+
const { segments } = (0, nested_value_util_1.parseFieldPath)(photoField.field);
|
|
257
|
+
const arrayPath = segments
|
|
258
|
+
.map((s) => (s.isArray ? `${s.key}[]` : s.key))
|
|
259
|
+
.join('.');
|
|
260
|
+
const arrayValue = (0, nested_value_util_1.getNestedValue)(object, arrayPath);
|
|
261
|
+
if (Array.isArray(arrayValue)) {
|
|
262
|
+
const { key } = segments[segments.length - 1];
|
|
263
|
+
for (const item of arrayValue) {
|
|
264
|
+
if (item[key] && typeof item[key] === 'string') {
|
|
265
|
+
fileKeys.push(item[key]);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
else if (typeof fieldValue === 'string' && fieldValue.length > 0) {
|
|
271
|
+
fileKeys.push(fieldValue);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return fileKeys;
|
|
275
|
+
}
|
|
276
|
+
determineFilesToDelete(existingFiles, newRequests) {
|
|
277
|
+
const newFilenames = new Set(newRequests.map((r) => this.normalizeFilename(r.filename)));
|
|
278
|
+
return existingFiles.filter((file) => !newFilenames.has(this.normalizeFilename(file)));
|
|
279
|
+
}
|
|
280
|
+
normalizeFilename(filename) {
|
|
281
|
+
return filename.split('/').pop() || filename;
|
|
282
|
+
}
|
|
283
|
+
async updateArrayFieldWithNewFileKey(payload, fieldPath, oldFilename, newFileKey) {
|
|
284
|
+
const { segments } = (0, nested_value_util_1.parseFieldPath)(fieldPath);
|
|
285
|
+
const arrayPath = segments
|
|
286
|
+
.slice(0, -1)
|
|
287
|
+
.map((s) => (s.isArray ? `${s.key}[]` : s.key))
|
|
288
|
+
.join('.');
|
|
289
|
+
const { key: photoKey } = segments[segments.length - 1];
|
|
290
|
+
const arrayValue = (0, nested_value_util_1.getNestedValue)(payload, arrayPath);
|
|
291
|
+
if (!Array.isArray(arrayValue)) {
|
|
292
|
+
return payload;
|
|
293
|
+
}
|
|
294
|
+
const oldNormalized = this.normalizeFilename(oldFilename);
|
|
295
|
+
const updatedArray = arrayValue.map((item) => {
|
|
296
|
+
const itemPhotoValue = item[photoKey];
|
|
297
|
+
if (!itemPhotoValue) {
|
|
298
|
+
return item;
|
|
299
|
+
}
|
|
300
|
+
const itemNormalized = this.normalizeFilename(itemPhotoValue);
|
|
301
|
+
if (itemNormalized === oldNormalized) {
|
|
302
|
+
return { ...item, [photoKey]: newFileKey };
|
|
303
|
+
}
|
|
304
|
+
return item;
|
|
305
|
+
});
|
|
306
|
+
return (0, nested_value_util_1.setNestedValue)(payload, arrayPath, updatedArray);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
exports.PhotoManagerService = PhotoManagerService;
|
|
310
|
+
exports.PhotoManagerService = PhotoManagerService = __decorate([
|
|
311
|
+
(0, common_1.Injectable)(),
|
|
312
|
+
__metadata("design:paramtypes", [cloudflare_service_1.CloudflareService])
|
|
313
|
+
], PhotoManagerService);
|
|
314
|
+
//# sourceMappingURL=photo-manager.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"photo-manager.service.js","sourceRoot":"","sources":["../../src/r2-storage/photo-manager.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { StorageOptions, StorageModuleOptions } from './interfaces/storage-options.interface';
|
|
3
|
+
export declare const STORAGE_OPTIONS = "STORAGE_OPTIONS";
|
|
4
|
+
export declare class R2StorageModule {
|
|
5
|
+
static forRoot(options: StorageOptions, moduleOptions?: StorageModuleOptions): DynamicModule;
|
|
6
|
+
static forRootAsync(optionsFactory: () => Promise<StorageOptions> | StorageOptions, moduleOptions?: StorageModuleOptions): DynamicModule;
|
|
7
|
+
}
|
|
8
|
+
export declare class R2StorageModuleWithOptions {
|
|
9
|
+
static forRoot(options: StorageOptions, moduleOptions?: StorageModuleOptions): DynamicModule;
|
|
10
|
+
static forRootAsync(optionsFactory: () => Promise<StorageOptions> | StorageOptions, moduleOptions?: StorageModuleOptions): DynamicModule;
|
|
11
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var R2StorageModule_1, R2StorageModuleWithOptions_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.R2StorageModuleWithOptions = exports.R2StorageModule = exports.STORAGE_OPTIONS = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const cloudflare_service_1 = require("./cloudflare.service");
|
|
13
|
+
const photo_manager_service_1 = require("./photo-manager.service");
|
|
14
|
+
exports.STORAGE_OPTIONS = 'STORAGE_OPTIONS';
|
|
15
|
+
let R2StorageModule = R2StorageModule_1 = class R2StorageModule {
|
|
16
|
+
static forRoot(options, moduleOptions = {}) {
|
|
17
|
+
return {
|
|
18
|
+
module: R2StorageModule_1,
|
|
19
|
+
global: moduleOptions.isGlobal ?? true,
|
|
20
|
+
providers: [
|
|
21
|
+
{
|
|
22
|
+
provide: exports.STORAGE_OPTIONS,
|
|
23
|
+
useValue: options,
|
|
24
|
+
},
|
|
25
|
+
cloudflare_service_1.CloudflareService,
|
|
26
|
+
photo_manager_service_1.PhotoManagerService,
|
|
27
|
+
],
|
|
28
|
+
exports: [cloudflare_service_1.CloudflareService, photo_manager_service_1.PhotoManagerService],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
static forRootAsync(optionsFactory, moduleOptions = {}) {
|
|
32
|
+
return {
|
|
33
|
+
module: R2StorageModule_1,
|
|
34
|
+
global: moduleOptions.isGlobal ?? true,
|
|
35
|
+
providers: [
|
|
36
|
+
{
|
|
37
|
+
provide: exports.STORAGE_OPTIONS,
|
|
38
|
+
useFactory: async () => {
|
|
39
|
+
const options = await optionsFactory();
|
|
40
|
+
return options;
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
cloudflare_service_1.CloudflareService,
|
|
44
|
+
photo_manager_service_1.PhotoManagerService,
|
|
45
|
+
],
|
|
46
|
+
exports: [cloudflare_service_1.CloudflareService, photo_manager_service_1.PhotoManagerService],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
exports.R2StorageModule = R2StorageModule;
|
|
51
|
+
exports.R2StorageModule = R2StorageModule = R2StorageModule_1 = __decorate([
|
|
52
|
+
(0, common_1.Module)({})
|
|
53
|
+
], R2StorageModule);
|
|
54
|
+
let R2StorageModuleWithOptions = R2StorageModuleWithOptions_1 = class R2StorageModuleWithOptions {
|
|
55
|
+
static forRoot(options, moduleOptions = {}) {
|
|
56
|
+
return {
|
|
57
|
+
module: R2StorageModuleWithOptions_1,
|
|
58
|
+
providers: [
|
|
59
|
+
{
|
|
60
|
+
provide: exports.STORAGE_OPTIONS,
|
|
61
|
+
useValue: options,
|
|
62
|
+
},
|
|
63
|
+
cloudflare_service_1.CloudflareService,
|
|
64
|
+
photo_manager_service_1.PhotoManagerService,
|
|
65
|
+
],
|
|
66
|
+
exports: [cloudflare_service_1.CloudflareService, photo_manager_service_1.PhotoManagerService],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
static forRootAsync(optionsFactory, moduleOptions = {}) {
|
|
70
|
+
return {
|
|
71
|
+
module: R2StorageModuleWithOptions_1,
|
|
72
|
+
providers: [
|
|
73
|
+
{
|
|
74
|
+
provide: exports.STORAGE_OPTIONS,
|
|
75
|
+
useFactory: async () => {
|
|
76
|
+
const options = await optionsFactory();
|
|
77
|
+
return options;
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
cloudflare_service_1.CloudflareService,
|
|
81
|
+
photo_manager_service_1.PhotoManagerService,
|
|
82
|
+
],
|
|
83
|
+
exports: [cloudflare_service_1.CloudflareService, photo_manager_service_1.PhotoManagerService],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
exports.R2StorageModuleWithOptions = R2StorageModuleWithOptions;
|
|
88
|
+
exports.R2StorageModuleWithOptions = R2StorageModuleWithOptions = R2StorageModuleWithOptions_1 = __decorate([
|
|
89
|
+
(0, common_1.Global)(),
|
|
90
|
+
(0, common_1.Module)({})
|
|
91
|
+
], R2StorageModuleWithOptions);
|
|
92
|
+
//# sourceMappingURL=r2-storage.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"r2-storage.module.js","sourceRoot":"","sources":["../../src/r2-storage/r2-storage.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAMwB;AACxB,6DAAyD;AACzD,mEAA8D;AAGjD,QAAA,eAAe,GAAG,iBAAiB,CAAC;AAG1C,IAAM,eAAe,uBAArB,MAAM,eAAe;IAC1B,MAAM,CAAC,OAAO,CACZ,OAAuB,EACvB,gBAAsC,EAAE;QAExC,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,MAAM,EAAE,aAAa,CAAC,QAAQ,IAAI,IAAI;YACtC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,uBAAe;oBACxB,QAAQ,EAAE,OAAO;iBAClB;gBACD,sCAAiB;gBACjB,2CAAmB;aACpB;YACD,OAAO,EAAE,CAAC,sCAAiB,EAAE,2CAAmB,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,cAA8D,EAC9D,gBAAsC,EAAE;QAExC,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,MAAM,EAAE,aAAa,CAAC,QAAQ,IAAI,IAAI;YACtC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,uBAAe;oBACxB,UAAU,EAAE,KAAK,IAAI,EAAE;wBACrB,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;wBACvC,OAAO,OAAO,CAAC;oBACjB,CAAC;iBACF;gBACD,sCAAiB;gBACjB,2CAAmB;aACpB;YACD,OAAO,EAAE,CAAC,sCAAiB,EAAE,2CAAmB,CAAC;SAClD,CAAC;IACJ,CAAC;CACF,CAAA;AAzCY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,eAAe,CAyC3B;AAIM,IAAM,0BAA0B,kCAAhC,MAAM,0BAA0B;IACrC,MAAM,CAAC,OAAO,CACZ,OAAuB,EACvB,gBAAsC,EAAE;QAExC,OAAO;YACL,MAAM,EAAE,4BAA0B;YAClC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,uBAAe;oBACxB,QAAQ,EAAE,OAAO;iBAClB;gBACD,sCAAiB;gBACjB,2CAAmB;aACpB;YACD,OAAO,EAAE,CAAC,sCAAiB,EAAE,2CAAmB,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,cAA8D,EAC9D,gBAAsC,EAAE;QAExC,OAAO;YACL,MAAM,EAAE,4BAA0B;YAClC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,uBAAe;oBACxB,UAAU,EAAE,KAAK,IAAI,EAAE;wBACrB,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;wBACvC,OAAO,OAAO,CAAC;oBACjB,CAAC;iBACF;gBACD,sCAAiB;gBACjB,2CAAmB;aACpB;YACD,OAAO,EAAE,CAAC,sCAAiB,EAAE,2CAAmB,CAAC;SAClD,CAAC;IACJ,CAAC;CACF,CAAA;AAvCY,gEAA0B;qCAA1B,0BAA0B;IAFtC,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,0BAA0B,CAuCtC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ParsedPath {
|
|
2
|
+
segments: PathSegment[];
|
|
3
|
+
}
|
|
4
|
+
export interface PathSegment {
|
|
5
|
+
key: string;
|
|
6
|
+
isArray: boolean;
|
|
7
|
+
arrayIndex?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function parseFieldPath(path: string): ParsedPath;
|
|
10
|
+
export declare function getNestedValue<T extends Record<string, any>>(obj: T, path: string): any;
|
|
11
|
+
export declare function setNestedValue<T extends Record<string, any>>(obj: T, path: string, value: any): T;
|
|
12
|
+
export declare function collectNestedValues<T extends Record<string, any>>(obj: T, path: string): any[];
|
|
13
|
+
export declare function isArrayPath(path: string): boolean;
|
|
14
|
+
export declare function getArrayBasePath(path: string): string;
|
|
15
|
+
export declare function getArrayElementPath(path: string): string;
|
|
16
|
+
export declare function getAllArrayItemPaths(path: string, arrayLength: number): string[];
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFieldPath = parseFieldPath;
|
|
4
|
+
exports.getNestedValue = getNestedValue;
|
|
5
|
+
exports.setNestedValue = setNestedValue;
|
|
6
|
+
exports.collectNestedValues = collectNestedValues;
|
|
7
|
+
exports.isArrayPath = isArrayPath;
|
|
8
|
+
exports.getArrayBasePath = getArrayBasePath;
|
|
9
|
+
exports.getArrayElementPath = getArrayElementPath;
|
|
10
|
+
exports.getAllArrayItemPaths = getAllArrayItemPaths;
|
|
11
|
+
function parseFieldPath(path) {
|
|
12
|
+
const segments = [];
|
|
13
|
+
const regex = /(\w+)(?:\[(\d*)\])?/g;
|
|
14
|
+
let match;
|
|
15
|
+
while ((match = regex.exec(path)) !== null) {
|
|
16
|
+
segments.push({
|
|
17
|
+
key: match[1],
|
|
18
|
+
isArray: match[0].includes('['),
|
|
19
|
+
arrayIndex: match[2] !== undefined ? parseInt(match[2], 10) : undefined,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return { segments };
|
|
23
|
+
}
|
|
24
|
+
function getNestedValue(obj, path) {
|
|
25
|
+
if (!path || !obj) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const { segments } = parseFieldPath(path);
|
|
29
|
+
let current = obj;
|
|
30
|
+
for (let i = 0; i < segments.length; i++) {
|
|
31
|
+
const segment = segments[i];
|
|
32
|
+
if (current === null || current === undefined) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
if (segment.isArray) {
|
|
36
|
+
if (!Array.isArray(current)) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
if (segment.arrayIndex !== undefined) {
|
|
40
|
+
current = current[segment.arrayIndex];
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return current;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
current = current[segment.key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return current;
|
|
51
|
+
}
|
|
52
|
+
function setNestedValue(obj, path, value) {
|
|
53
|
+
if (!path) {
|
|
54
|
+
return obj;
|
|
55
|
+
}
|
|
56
|
+
const { segments } = parseFieldPath(path);
|
|
57
|
+
const result = { ...obj };
|
|
58
|
+
let current = result;
|
|
59
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
60
|
+
const segment = segments[i];
|
|
61
|
+
const nextSegment = segments[i + 1];
|
|
62
|
+
if (current[segment.key] === undefined) {
|
|
63
|
+
current[segment.key] = nextSegment.isArray ? [] : {};
|
|
64
|
+
}
|
|
65
|
+
else if (segment.isArray) {
|
|
66
|
+
current[segment.key] = [...current[segment.key]];
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
current[segment.key] = { ...current[segment.key] };
|
|
70
|
+
}
|
|
71
|
+
current = current[segment.key];
|
|
72
|
+
if (segment.isArray && segment.arrayIndex !== undefined) {
|
|
73
|
+
if (current[segment.arrayIndex] === undefined) {
|
|
74
|
+
current[segment.arrayIndex] = {};
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
current[segment.arrayIndex] = { ...current[segment.arrayIndex] };
|
|
78
|
+
}
|
|
79
|
+
current = current[segment.arrayIndex];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const lastSegment = segments[segments.length - 1];
|
|
83
|
+
if (lastSegment.isArray && lastSegment.arrayIndex !== undefined) {
|
|
84
|
+
if (!Array.isArray(current)) {
|
|
85
|
+
current = [];
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
current = [...current];
|
|
89
|
+
}
|
|
90
|
+
current[lastSegment.arrayIndex] = {
|
|
91
|
+
...current[lastSegment.arrayIndex],
|
|
92
|
+
[lastSegment.key]: value,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
current[lastSegment.key] = value;
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
function collectNestedValues(obj, path) {
|
|
101
|
+
const value = getNestedValue(obj, path);
|
|
102
|
+
if (value === undefined) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
if (Array.isArray(value)) {
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
return [value];
|
|
109
|
+
}
|
|
110
|
+
function isArrayPath(path) {
|
|
111
|
+
return /\[\]/.test(path);
|
|
112
|
+
}
|
|
113
|
+
function getArrayBasePath(path) {
|
|
114
|
+
const match = path.match(/^([^\[]+)/);
|
|
115
|
+
return match ? match[1] : path;
|
|
116
|
+
}
|
|
117
|
+
function getArrayElementPath(path) {
|
|
118
|
+
return path.replace('[]', '');
|
|
119
|
+
}
|
|
120
|
+
function getAllArrayItemPaths(path, arrayLength) {
|
|
121
|
+
const basePath = getArrayBasePath(path);
|
|
122
|
+
const elementPath = getArrayElementPath(path);
|
|
123
|
+
const cleanElementPath = elementPath.replace(/^\./, '');
|
|
124
|
+
const paths = [];
|
|
125
|
+
for (let i = 0; i < arrayLength; i++) {
|
|
126
|
+
paths.push(`${basePath}[${i}].${cleanElementPath}`);
|
|
127
|
+
}
|
|
128
|
+
return paths;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=nested-value.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nested-value.util.js","sourceRoot":"","sources":["../../../src/r2-storage/utils/nested-value.util.ts"],"names":[],"mappings":"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"}
|