@flusys/nestjs-storage 7.1.0 → 8.0.0-beta.1

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.
Files changed (202) hide show
  1. package/config/index.d.ts +3 -3
  2. package/controllers/file-manager.controller.d.ts +4 -4
  3. package/controllers/folder.controller.d.ts +2 -2
  4. package/controllers/index.d.ts +4 -4
  5. package/controllers/storage-config.controller.d.ts +2 -2
  6. package/controllers/upload.controller.d.ts +3 -3
  7. package/docs/index.d.ts +1 -1
  8. package/docs/storage-swagger.config.d.ts +2 -2
  9. package/dtos/index.d.ts +4 -4
  10. package/entities/file-manager-with-company.entity.d.ts +2 -2
  11. package/entities/file-manager.entity.d.ts +1 -1
  12. package/entities/folder-with-company.entity.d.ts +1 -1
  13. package/entities/index.d.ts +15 -15
  14. package/entities/storage-config-with-company.entity.d.ts +1 -1
  15. package/enums/index.d.ts +1 -1
  16. package/fesm/493.js +2768 -0
  17. package/fesm/537.js +1157 -0
  18. package/fesm/562.js +786 -0
  19. package/fesm/{providers/azure-provider.optional.js → chunks/190.js} +33 -30
  20. package/fesm/chunks/252.js +12 -0
  21. package/fesm/chunks/327.js +12 -0
  22. package/fesm/chunks/385.js +12 -0
  23. package/fesm/{providers/s3-provider.optional.js → chunks/591.js} +37 -34
  24. package/fesm/chunks/746.js +12 -0
  25. package/fesm/chunks/798.js +12 -0
  26. package/fesm/{providers/sftp-provider.optional.js → chunks/918.js} +35 -31
  27. package/fesm/config/index.js +119 -3
  28. package/fesm/controllers/index.js +16 -4
  29. package/fesm/docs/index.js +206 -1
  30. package/fesm/dtos/index.js +879 -4
  31. package/fesm/entities/index.js +463 -18
  32. package/fesm/enums/index.js +36 -1
  33. package/fesm/index.js +398 -12
  34. package/fesm/interfaces/index.js +19 -5
  35. package/fesm/modules/index.js +16 -1
  36. package/fesm/providers/index.js +364 -3
  37. package/fesm/runtime.js +252 -0
  38. package/fesm/services/index.js +16 -6
  39. package/fesm/utils/index.js +149 -1
  40. package/index.d.ts +11 -11
  41. package/interfaces/file-manager.interface.d.ts +1 -1
  42. package/interfaces/folder.interface.d.ts +1 -1
  43. package/interfaces/index.d.ts +5 -5
  44. package/interfaces/storage-config.interface.d.ts +1 -1
  45. package/interfaces/storage-module-options.interface.d.ts +3 -3
  46. package/interfaces/storage-provider.interface.d.ts +1 -1
  47. package/middlewares/file-serve.middleware.d.ts +4 -3
  48. package/middlewares/index.d.ts +1 -1
  49. package/modules/index.d.ts +1 -1
  50. package/modules/storage.module.d.ts +2 -2
  51. package/package.json +30 -41
  52. package/providers/azure-provider.optional.d.ts +2 -2
  53. package/providers/index.d.ts +3 -3
  54. package/providers/local-provider.d.ts +2 -2
  55. package/providers/s3-provider.optional.d.ts +2 -2
  56. package/providers/sftp-provider.optional.d.ts +2 -2
  57. package/providers/storage-factory.service.d.ts +3 -3
  58. package/providers/storage-provider.registry.d.ts +2 -2
  59. package/services/file-manager.service.d.ts +9 -8
  60. package/services/folder.service.d.ts +6 -6
  61. package/services/index.d.ts +6 -6
  62. package/services/storage-config.service.d.ts +3 -3
  63. package/services/storage-datasource.provider.d.ts +3 -3
  64. package/services/storage-provider-config.service.d.ts +7 -7
  65. package/services/upload.service.d.ts +6 -6
  66. package/utils/image-compressor.util.d.ts +1 -1
  67. package/utils/index.d.ts +1 -1
  68. package/cjs/config/event-actions.js +0 -34
  69. package/cjs/config/index.js +0 -20
  70. package/cjs/config/message-keys.js +0 -46
  71. package/cjs/config/storage.constants.js +0 -28
  72. package/cjs/controllers/file-manager.controller.js +0 -152
  73. package/cjs/controllers/file-manager.controller.spec.js +0 -135
  74. package/cjs/controllers/folder.controller.js +0 -102
  75. package/cjs/controllers/folder.controller.spec.js +0 -86
  76. package/cjs/controllers/index.js +0 -21
  77. package/cjs/controllers/storage-config.controller.js +0 -102
  78. package/cjs/controllers/storage-config.controller.spec.js +0 -85
  79. package/cjs/controllers/upload.controller.js +0 -234
  80. package/cjs/controllers/upload.controller.spec.js +0 -132
  81. package/cjs/docs/index.js +0 -11
  82. package/cjs/docs/storage-swagger.config.js +0 -188
  83. package/cjs/docs/storage-swagger.config.spec.js +0 -72
  84. package/cjs/dtos/file-manager.dto.js +0 -327
  85. package/cjs/dtos/folder.dto.js +0 -105
  86. package/cjs/dtos/index.js +0 -21
  87. package/cjs/dtos/storage-config.dto.js +0 -170
  88. package/cjs/dtos/upload.dto.js +0 -272
  89. package/cjs/entities/file-manager-with-company.entity.js +0 -61
  90. package/cjs/entities/file-manager.entity.js +0 -122
  91. package/cjs/entities/folder-with-company.entity.js +0 -55
  92. package/cjs/entities/folder.entity.js +0 -64
  93. package/cjs/entities/index.js +0 -63
  94. package/cjs/entities/index.spec.js +0 -18
  95. package/cjs/entities/storage-config-with-company.entity.js +0 -51
  96. package/cjs/entities/storage-config.entity.js +0 -96
  97. package/cjs/enums/file-location.enum.js +0 -17
  98. package/cjs/enums/index.js +0 -18
  99. package/cjs/index.js +0 -29
  100. package/cjs/interfaces/file-manager.interface.js +0 -4
  101. package/cjs/interfaces/folder.interface.js +0 -4
  102. package/cjs/interfaces/index.js +0 -22
  103. package/cjs/interfaces/storage-config.interface.js +0 -4
  104. package/cjs/interfaces/storage-module-options.interface.js +0 -4
  105. package/cjs/interfaces/storage-provider.interface.js +0 -4
  106. package/cjs/middlewares/file-serve.middleware.js +0 -241
  107. package/cjs/middlewares/file-serve.middleware.spec.js +0 -211
  108. package/cjs/middlewares/index.js +0 -18
  109. package/cjs/modules/index.js +0 -18
  110. package/cjs/modules/storage.module.js +0 -165
  111. package/cjs/modules/storage.module.spec.js +0 -184
  112. package/cjs/providers/azure-provider.optional.js +0 -155
  113. package/cjs/providers/azure-provider.optional.spec.js +0 -228
  114. package/cjs/providers/index.js +0 -26
  115. package/cjs/providers/local-provider.js +0 -230
  116. package/cjs/providers/local-provider.spec.js +0 -239
  117. package/cjs/providers/s3-provider.optional.js +0 -175
  118. package/cjs/providers/s3-provider.optional.spec.js +0 -243
  119. package/cjs/providers/sftp-provider.optional.js +0 -203
  120. package/cjs/providers/sftp-provider.optional.spec.js +0 -217
  121. package/cjs/providers/storage-factory.service.js +0 -175
  122. package/cjs/providers/storage-factory.service.spec.js +0 -253
  123. package/cjs/providers/storage-provider.registry.js +0 -41
  124. package/cjs/providers/storage-provider.registry.spec.js +0 -67
  125. package/cjs/services/file-manager.service.js +0 -387
  126. package/cjs/services/file-manager.service.spec.js +0 -580
  127. package/cjs/services/folder.service.js +0 -101
  128. package/cjs/services/folder.service.spec.js +0 -167
  129. package/cjs/services/index.js +0 -23
  130. package/cjs/services/storage-config.service.js +0 -129
  131. package/cjs/services/storage-config.service.spec.js +0 -257
  132. package/cjs/services/storage-datasource.provider.js +0 -137
  133. package/cjs/services/storage-datasource.provider.spec.js +0 -217
  134. package/cjs/services/storage-provider-config.service.js +0 -171
  135. package/cjs/services/storage-provider-config.service.spec.js +0 -265
  136. package/cjs/services/upload.service.js +0 -376
  137. package/cjs/services/upload.service.spec.js +0 -426
  138. package/cjs/utils/file-validator.util.js +0 -440
  139. package/cjs/utils/file-validator.util.spec.js +0 -259
  140. package/cjs/utils/image-compressor.util.js +0 -162
  141. package/cjs/utils/image-compressor.util.spec.js +0 -166
  142. package/cjs/utils/index.js +0 -18
  143. package/fesm/config/event-actions.js +0 -13
  144. package/fesm/config/message-keys.js +0 -22
  145. package/fesm/config/storage.constants.js +0 -7
  146. package/fesm/controllers/file-manager.controller.js +0 -142
  147. package/fesm/controllers/file-manager.controller.spec.js +0 -131
  148. package/fesm/controllers/folder.controller.js +0 -92
  149. package/fesm/controllers/folder.controller.spec.js +0 -82
  150. package/fesm/controllers/storage-config.controller.js +0 -92
  151. package/fesm/controllers/storage-config.controller.spec.js +0 -81
  152. package/fesm/controllers/upload.controller.js +0 -224
  153. package/fesm/controllers/upload.controller.spec.js +0 -128
  154. package/fesm/docs/storage-swagger.config.js +0 -181
  155. package/fesm/docs/storage-swagger.config.spec.js +0 -68
  156. package/fesm/dtos/file-manager.dto.js +0 -300
  157. package/fesm/dtos/folder.dto.js +0 -84
  158. package/fesm/dtos/storage-config.dto.js +0 -149
  159. package/fesm/dtos/upload.dto.js +0 -245
  160. package/fesm/entities/file-manager-with-company.entity.js +0 -51
  161. package/fesm/entities/file-manager.entity.js +0 -112
  162. package/fesm/entities/folder-with-company.entity.js +0 -45
  163. package/fesm/entities/folder.entity.js +0 -54
  164. package/fesm/entities/index.spec.js +0 -14
  165. package/fesm/entities/storage-config-with-company.entity.js +0 -41
  166. package/fesm/entities/storage-config.entity.js +0 -86
  167. package/fesm/enums/file-location.enum.js +0 -7
  168. package/fesm/interfaces/file-manager.interface.js +0 -1
  169. package/fesm/interfaces/folder.interface.js +0 -1
  170. package/fesm/interfaces/storage-config.interface.js +0 -1
  171. package/fesm/interfaces/storage-module-options.interface.js +0 -3
  172. package/fesm/interfaces/storage-provider.interface.js +0 -4
  173. package/fesm/middlewares/file-serve.middleware.js +0 -190
  174. package/fesm/middlewares/file-serve.middleware.spec.js +0 -207
  175. package/fesm/middlewares/index.js +0 -1
  176. package/fesm/modules/storage.module.js +0 -156
  177. package/fesm/modules/storage.module.spec.js +0 -180
  178. package/fesm/providers/azure-provider.optional.spec.js +0 -224
  179. package/fesm/providers/local-provider.js +0 -182
  180. package/fesm/providers/local-provider.spec.js +0 -194
  181. package/fesm/providers/s3-provider.optional.spec.js +0 -239
  182. package/fesm/providers/sftp-provider.optional.spec.js +0 -213
  183. package/fesm/providers/storage-factory.service.js +0 -124
  184. package/fesm/providers/storage-factory.service.spec.js +0 -249
  185. package/fesm/providers/storage-provider.registry.js +0 -34
  186. package/fesm/providers/storage-provider.registry.spec.js +0 -63
  187. package/fesm/services/file-manager.service.js +0 -336
  188. package/fesm/services/file-manager.service.spec.js +0 -576
  189. package/fesm/services/folder.service.js +0 -91
  190. package/fesm/services/folder.service.spec.js +0 -163
  191. package/fesm/services/storage-config.service.js +0 -119
  192. package/fesm/services/storage-config.service.spec.js +0 -253
  193. package/fesm/services/storage-datasource.provider.js +0 -86
  194. package/fesm/services/storage-datasource.provider.spec.js +0 -172
  195. package/fesm/services/storage-provider-config.service.js +0 -161
  196. package/fesm/services/storage-provider-config.service.spec.js +0 -261
  197. package/fesm/services/upload.service.js +0 -366
  198. package/fesm/services/upload.service.spec.js +0 -422
  199. package/fesm/utils/file-validator.util.js +0 -433
  200. package/fesm/utils/file-validator.util.spec.js +0 -255
  201. package/fesm/utils/image-compressor.util.js +0 -114
  202. package/fesm/utils/image-compressor.util.spec.js +0 -162
@@ -1,9 +1,370 @@
1
+ import * as __rspack_external_sharp from "sharp";
2
+ import * as __rspack_external_path from "path";
3
+ import * as __rspack_external_uuid from "uuid";
4
+ import * as __rspack_external_fs_promises_e1851c9c from "fs/promises";
5
+ export const __rspack_esm_id = 467;
6
+ export const __rspack_esm_ids = [467];
7
+ export const __webpack_modules__ = {
8
+ 922(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
9
+ /* import */ var _storage_factory_service_js__rspack_import_0 = __webpack_require__(192);
10
+ /* import */ var _storage_provider_registry_js__rspack_import_1 = __webpack_require__(264);
11
+ /* import */ var _local_provider_js__rspack_import_2 = __webpack_require__(632);
1
12
  // Core exports
2
- export * from './storage-factory.service';
3
- export * from './storage-provider.registry';
13
+
14
+
4
15
  // Built-in provider (no external dependencies)
5
- export * from './local-provider'; // Note: Optional storage providers are loaded dynamically
16
+ // Note: Optional storage providers are loaded dynamically
6
17
  // Import them directly from their files when needed:
7
18
  // - import { S3Provider } from '@flusys/nestjs-storage/providers/s3-provider.optional';
8
19
  // - import { AzureProvider } from '@flusys/nestjs-storage/providers/azure-provider.optional';
9
20
  // - import { SftpProvider } from '@flusys/nestjs-storage/providers/sftp-provider.optional';
21
+
22
+ __webpack_require__.d(__webpack_exports__, {
23
+ CG: () => (/* reexport safe */ _storage_provider_registry_js__rspack_import_1.C),
24
+ Lk: () => (/* reexport safe */ _storage_factory_service_js__rspack_import_0.L),
25
+ TZ: () => (/* reexport safe */ _local_provider_js__rspack_import_2.T)
26
+ });
27
+
28
+
29
+ },
30
+ 632(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
31
+
32
+ // EXPORTS
33
+ __webpack_require__.d(__webpack_exports__, {
34
+ T: () => (/* binding */ LocalProvider)
35
+ });
36
+
37
+ // EXTERNAL MODULE: external "@nestjs/common"
38
+ var common_ = __webpack_require__(157);
39
+ // EXTERNAL MODULE: external "@flusys/nestjs-shared/constants"
40
+ var constants_ = __webpack_require__(140);
41
+ // EXTERNAL MODULE: ./projects/nestjs-storage/src/utils/image-compressor.util.ts + 1 modules
42
+ var image_compressor_util = __webpack_require__(872);
43
+ ;// CONCATENATED MODULE: external "fs/promises"
44
+
45
+ // EXTERNAL MODULE: external "path"
46
+ var external_path_ = __webpack_require__(521);
47
+ // EXTERNAL MODULE: external "uuid"
48
+ var external_uuid_ = __webpack_require__(37);
49
+ ;// CONCATENATED MODULE: ./projects/nestjs-storage/src/providers/local-provider.ts
50
+ /**
51
+ * LOCAL File System Provider
52
+ *
53
+ * This provider uses Node.js built-in 'fs' module - NO external dependencies required!
54
+ * Perfect for same-server storage scenarios.
55
+ *
56
+ * Usage:
57
+ * import { LocalProvider } from '@flusys/nestjs-storage/providers/local-provider';
58
+ * import { StorageProviderRegistry, FileLocationEnum } from '@flusys/nestjs-storage';
59
+ *
60
+ * StorageProviderRegistry.register(FileLocationEnum.LOCAL, LocalProvider);
61
+ */
62
+
63
+
64
+
65
+
66
+
67
+ /**
68
+ * Local File System Storage Provider
69
+ * Uses Node.js built-in fs module - no external dependencies
70
+ */ class LocalProvider {
71
+ basePath = '';
72
+ baseUrl = '';
73
+ relativeBasePath = '';
74
+ /**
75
+ * SECURITY: Validates that a target path does not escape the base directory
76
+ * Prevents path traversal attacks using ../ sequences
77
+ * @throws Error if path traversal is detected
78
+ */ validatePathWithinBase(targetPath) {
79
+ const normalizedBasePath = external_path_.resolve(this.basePath);
80
+ const normalizedTargetPath = external_path_.resolve(targetPath);
81
+ if (!normalizedTargetPath.startsWith(normalizedBasePath + external_path_.sep) && normalizedTargetPath !== normalizedBasePath) {
82
+ throw new common_.BadRequestException({
83
+ message: 'Invalid path: Path traversal attempt detected',
84
+ messageKey: constants_.SYSTEM_MESSAGES.PATH_TRAVERSAL_DETECTED
85
+ });
86
+ }
87
+ }
88
+ /**
89
+ * SECURITY: Validates file key format to prevent malicious input
90
+ * @throws Error if key contains suspicious patterns
91
+ */ validateKeyFormat(key) {
92
+ if (!key || typeof key !== 'string' || key.trim().length === 0) {
93
+ throw new common_.BadRequestException({
94
+ message: 'Invalid file key: empty or invalid',
95
+ messageKey: constants_.SYSTEM_MESSAGES.INVALID_FILE_KEY
96
+ });
97
+ }
98
+ if (key.includes('\0')) {
99
+ throw new common_.BadRequestException({
100
+ message: 'Invalid file key: contains null bytes',
101
+ messageKey: constants_.SYSTEM_MESSAGES.INVALID_FILE_KEY
102
+ });
103
+ }
104
+ }
105
+ /**
106
+ * Initialize Local File System provider with configuration
107
+ * @param config.basePath - Base path for file storage (default: './uploads')
108
+ * @param config.baseUrl - Optional base URL for generating file URLs
109
+ */ async initialize(config) {
110
+ // Store original relative path for key generation
111
+ this.relativeBasePath = config?.basePath || './uploads';
112
+ // Resolve to absolute path for file operations
113
+ this.basePath = external_path_.resolve(this.relativeBasePath);
114
+ this.baseUrl = config?.baseUrl || '';
115
+ // Ensure base directory exists
116
+ await __rspack_external_fs_promises_e1851c9c.mkdir(this.basePath, {
117
+ recursive: true
118
+ });
119
+ }
120
+ async uploadFile(file, options) {
121
+ let processedBuffer = file.buffer;
122
+ let contentType = file.mimetype;
123
+ const fileName = `${(0,external_uuid_.v4)()}-${file.originalname}`;
124
+ // Compress image if needed
125
+ if (options.compress && file.mimetype.startsWith('image/')) {
126
+ const result = await image_compressor_util/* .ImageCompressor.compress */.J.compress(file.buffer, file.mimetype, {
127
+ maxWidth: options.maxWidth,
128
+ maxHeight: options.maxHeight,
129
+ quality: options.quality,
130
+ format: options.format
131
+ });
132
+ processedBuffer = result.buffer;
133
+ contentType = result.format;
134
+ }
135
+ // Build file path
136
+ const folderPath = options.folderPath ? external_path_.join(this.basePath, options.folderPath) : this.basePath;
137
+ // SECURITY: Validate path does not escape base directory
138
+ this.validatePathWithinBase(folderPath);
139
+ const filePath = external_path_.join(folderPath, fileName);
140
+ // SECURITY: Double-check final file path
141
+ this.validatePathWithinBase(filePath);
142
+ // Ensure directory exists
143
+ await __rspack_external_fs_promises_e1851c9c.mkdir(folderPath, {
144
+ recursive: true
145
+ });
146
+ // Write file to disk
147
+ await __rspack_external_fs_promises_e1851c9c.writeFile(filePath, processedBuffer);
148
+ // Generate key that includes the base path (relative to cwd)
149
+ // This makes the key self-contained for serving files
150
+ const relativeKey = external_path_.join(this.relativeBasePath, options.folderPath || '', fileName).replace(/\\/g, '/'); // Normalize path separators
151
+ return {
152
+ name: fileName,
153
+ key: relativeKey,
154
+ size: processedBuffer.length,
155
+ contentType
156
+ };
157
+ }
158
+ async uploadMultipleFiles(files, options) {
159
+ return Promise.all(files.map((file)=>this.uploadFile(file, options)));
160
+ }
161
+ async deleteFile(key) {
162
+ try {
163
+ // SECURITY: Validate key format first
164
+ this.validateKeyFormat(key);
165
+ // Key now includes the basePath, resolve from cwd
166
+ let filePath = external_path_.resolve(key);
167
+ // SECURITY: Validate resolved path is within base directory
168
+ this.validatePathWithinBase(filePath);
169
+ // Check if file exists at the resolved path
170
+ try {
171
+ await __rspack_external_fs_promises_e1851c9c.access(filePath);
172
+ } catch {
173
+ // Fallback: try with basePath prefix (for old keys without basePath)
174
+ const fallbackPath = external_path_.join(this.basePath, key);
175
+ // SECURITY: Validate fallback path as well
176
+ this.validatePathWithinBase(fallbackPath);
177
+ try {
178
+ await __rspack_external_fs_promises_e1851c9c.access(fallbackPath);
179
+ filePath = fallbackPath;
180
+ } catch {
181
+ // File doesn't exist at either location - silent return
182
+ return;
183
+ }
184
+ }
185
+ await __rspack_external_fs_promises_e1851c9c.unlink(filePath);
186
+ } catch (error) {
187
+ // Re-throw security errors
188
+ if (error instanceof Error && error.message.includes('Invalid')) {
189
+ throw error;
190
+ }
191
+ // Silent failure for other errors
192
+ }
193
+ }
194
+ async deleteMultipleFiles(keys) {
195
+ await Promise.all(keys.map((key)=>this.deleteFile(key)));
196
+ }
197
+ async generatePresignedUrl(key, _expiresInSeconds) {
198
+ // Return public URL or relative path
199
+ // Note: Local storage doesn't support true presigned URLs
200
+ // If baseUrl is provided, return full URL with file serving endpoint, otherwise return relative path
201
+ if (this.baseUrl) {
202
+ // Construct URL with the file serving endpoint
203
+ const baseUrlWithoutTrailingSlash = this.baseUrl.replace(/\/$/, '');
204
+ return `${baseUrlWithoutTrailingSlash}/storage/upload/file/${key}`;
205
+ }
206
+ return `/storage/upload/file/${key}`;
207
+ }
208
+ async healthCheck() {
209
+ try {
210
+ await __rspack_external_fs_promises_e1851c9c.access(this.basePath);
211
+ return true;
212
+ } catch {
213
+ return false;
214
+ }
215
+ }
216
+ }
217
+
218
+
219
+ },
220
+ 872(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
221
+
222
+ // EXPORTS
223
+ __webpack_require__.d(__webpack_exports__, {
224
+ J: () => (/* binding */ ImageCompressor)
225
+ });
226
+
227
+ ;// CONCATENATED MODULE: external "sharp"
228
+
229
+ ;// CONCATENATED MODULE: ./projects/nestjs-storage/src/utils/image-compressor.util.ts
230
+
231
+ // Handle ESM/CJS interop - sharp exports differently in each module system
232
+ const sharp = __rspack_external_sharp["default"] || __rspack_external_sharp;
233
+ /**
234
+ * Image Compression Utility
235
+ * Handles image compression and format conversion using sharp
236
+ */ class ImageCompressor {
237
+ /**
238
+ * Dynamically compresses an image based on its format and provided options.
239
+ * - Preserves original format if not overridden
240
+ * - Adjusts compression settings for each codec
241
+ */ static async compress(buffer, mimetype, options = {}) {
242
+ const { maxWidth = 1280, maxHeight = 1280, quality = 85, format = 'original' } = options;
243
+ // Skip processing for SVG
244
+ if (mimetype === 'image/svg+xml') {
245
+ return {
246
+ buffer,
247
+ format: mimetype
248
+ };
249
+ }
250
+ // Initialize sharp with improved error handling
251
+ const image = sharp(buffer, {
252
+ failOnError: false,
253
+ density: 300
254
+ });
255
+ // Apply initial resize
256
+ image.resize({
257
+ width: maxWidth,
258
+ height: maxHeight,
259
+ fit: 'inside',
260
+ withoutEnlargement: true
261
+ });
262
+ // Determine target format
263
+ let targetFormat = format !== 'original' ? format : mimetype.split('/')[1];
264
+ // Format-specific optimizations
265
+ switch(targetFormat.toLowerCase()){
266
+ case 'jpeg':
267
+ case 'jpg':
268
+ image.jpeg({
269
+ quality,
270
+ mozjpeg: true,
271
+ chromaSubsampling: '4:4:4'
272
+ });
273
+ break;
274
+ case 'png':
275
+ image.png({
276
+ compressionLevel: 9,
277
+ adaptiveFiltering: true,
278
+ palette: true,
279
+ quality,
280
+ colors: 256,
281
+ dither: 1.0
282
+ });
283
+ break;
284
+ case 'webp':
285
+ image.webp({
286
+ quality,
287
+ smartSubsample: true,
288
+ effort: 6,
289
+ lossless: quality === 100
290
+ });
291
+ break;
292
+ case 'avif':
293
+ image.avif({
294
+ quality,
295
+ effort: 6,
296
+ chromaSubsampling: '4:4:4'
297
+ });
298
+ break;
299
+ case 'tiff':
300
+ image.tiff({
301
+ quality,
302
+ compression: 'lzw',
303
+ predictor: 'horizontal',
304
+ pyramid: true
305
+ });
306
+ break;
307
+ case 'gif':
308
+ image.gif({
309
+ colours: 256,
310
+ effort: 10,
311
+ dither: 1
312
+ });
313
+ break;
314
+ case 'jp2':
315
+ image.jp2({
316
+ quality,
317
+ lossless: quality === 100
318
+ });
319
+ break;
320
+ default:
321
+ // Fallback to WebP for best compression/quality ratio
322
+ targetFormat = 'webp';
323
+ image.webp({
324
+ quality,
325
+ smartSubsample: true,
326
+ effort: 6
327
+ });
328
+ break;
329
+ }
330
+ try {
331
+ const compressedBuffer = await image.toBuffer();
332
+ return {
333
+ buffer: compressedBuffer,
334
+ format: `image/${targetFormat}`
335
+ };
336
+ } catch {
337
+ return {
338
+ buffer,
339
+ format: mimetype
340
+ };
341
+ }
342
+ }
343
+ }
344
+
345
+
346
+ },
347
+ 521(module) {
348
+
349
+ module.exports = __rspack_external_path;
350
+
351
+
352
+ },
353
+ 37(module) {
354
+
355
+ module.exports = __rspack_external_uuid;
356
+
357
+
358
+ },
359
+
360
+ };
361
+ import { __webpack_require__ } from '../runtime.js';
362
+ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
363
+ import * as __rspack_chunk_1 from '../493.js';
364
+ __webpack_require__.C(__rspack_chunk_1);
365
+ import * as __rspack_chunk_2 from './index.js';
366
+ __webpack_require__.C(__rspack_chunk_2);
367
+ var __webpack_exports__ = __webpack_exec__(922);var __webpack_exports__LocalProvider = __webpack_exports__.TZ;
368
+ var __webpack_exports__StorageFactoryService = __webpack_exports__.Lk;
369
+ var __webpack_exports__StorageProviderRegistry = __webpack_exports__.CG;
370
+ export { __webpack_exports__LocalProvider as LocalProvider, __webpack_exports__StorageFactoryService as StorageFactoryService, __webpack_exports__StorageProviderRegistry as StorageProviderRegistry };
@@ -0,0 +1,252 @@
1
+ var __webpack_modules__ = ({});
2
+ // The module cache
3
+ var __webpack_module_cache__ = {};
4
+
5
+ // The require function
6
+ function __webpack_require__(moduleId) {
7
+
8
+ // Check if module is in cache
9
+ var cachedModule = __webpack_module_cache__[moduleId];
10
+ if (cachedModule !== undefined) {
11
+ return cachedModule.exports;
12
+ }
13
+ // Create a new module (and put it into the cache)
14
+ var module = (__webpack_module_cache__[moduleId] = {
15
+ exports: {}
16
+ });
17
+ // Execute the module function
18
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
19
+
20
+ // Return the exports of the module
21
+ return module.exports;
22
+
23
+ }
24
+
25
+ // expose the modules object (__webpack_modules__)
26
+ __webpack_require__.m = __webpack_modules__;
27
+
28
+ // expose the module cache
29
+ __webpack_require__.c = __webpack_module_cache__;
30
+
31
+ // webpack/runtime/async_module
32
+ (() => {
33
+ var hasSymbol = typeof Symbol === "function";
34
+ var rspackQueues = hasSymbol ? Symbol("rspack queues") : "__rspack_queues";
35
+ var rspackExports = __webpack_require__.aE = hasSymbol ? Symbol("rspack exports") : "__webpack_exports__";
36
+ var rspackError = hasSymbol ? Symbol("rspack error") : "__rspack_error";
37
+ var rspackDone = hasSymbol ? Symbol("rspack done") : "__rspack_done";
38
+ var rspackDefer = __webpack_require__.zS = hasSymbol ? Symbol("rspack defer") : "__rspack_defer";
39
+ __webpack_require__.zT = (asyncDeps) => {
40
+ var hasUnresolvedAsyncSubgraph = asyncDeps.some((id) => {
41
+ var cache = __webpack_module_cache__[id];
42
+ return !cache || cache[rspackDone] === false;
43
+ });
44
+ if (hasUnresolvedAsyncSubgraph) {
45
+ return ({ then(onFulfilled, onRejected) { return Promise.all(asyncDeps.map(__webpack_require__)).then(onFulfilled, onRejected) } });
46
+ }
47
+ }
48
+ var resolveQueue = (queue) => {
49
+ if (queue && queue.d < 1) {
50
+ queue.d = 1;
51
+ queue.forEach((fn) => (fn.r--));
52
+ queue.forEach((fn) => (fn.r-- ? fn.r++ : fn()));
53
+ }
54
+ }
55
+ var wrapDeps = (deps) => {
56
+ return deps.map((dep) => {
57
+ if (dep !== null && typeof dep === "object") {
58
+ if(!dep[rspackQueues] && dep[rspackDefer]) {
59
+ var asyncDeps = __webpack_require__.zT(dep[rspackDefer]);
60
+ if (asyncDeps) {
61
+ var d = dep;
62
+ dep = {
63
+ then(onFulfilled, onRejected) {
64
+ asyncDeps.then(() => (onFulfilled(d)), onRejected);
65
+ }
66
+ };
67
+ } else return dep;
68
+ }
69
+ if (dep[rspackQueues]) return dep;
70
+ if (dep.then) {
71
+ var queue = [];
72
+ queue.d = 0;
73
+ dep.then((r) => {
74
+ obj[rspackExports] = r;
75
+ resolveQueue(queue);
76
+ },(e) => {
77
+ obj[rspackError] = e;
78
+ resolveQueue(queue);
79
+ });
80
+ var obj = {};
81
+ obj[rspackDefer] = false;
82
+ obj[rspackQueues] = (fn) => (fn(queue));
83
+ return obj;
84
+ }
85
+ }
86
+ var ret = {};
87
+ ret[rspackQueues] = () => {};
88
+ ret[rspackExports] = dep;
89
+ return ret;
90
+ });
91
+ };
92
+ __webpack_require__.a = (module, body, hasAwait, useModuleExports) => {
93
+ var queue;
94
+ hasAwait && ((queue = []).d = -1);
95
+ var depQueues = new Set();
96
+ var exports = module.exports;
97
+ var currentDeps;
98
+ var outerResolve;
99
+ var reject;
100
+ var promise = new Promise((resolve, rej) => {
101
+ reject = rej;
102
+ outerResolve = resolve;
103
+ });
104
+ promise[rspackExports] = exports;
105
+ promise[rspackQueues] = (fn) => { queue && fn(queue), depQueues.forEach(fn), promise["catch"](() => {}); };
106
+ module.exports = promise;
107
+ var asyncModule = module;
108
+ if (useModuleExports) {
109
+ asyncModule = Object.create(module);
110
+ asyncModule.exports = exports;
111
+ }
112
+ var handle = (deps) => {
113
+ currentDeps = wrapDeps(deps);
114
+ var fn;
115
+ var getResult = () => {
116
+ return currentDeps.map((d) => {
117
+ if(d[rspackDefer]) return d;
118
+ if (d[rspackError]) throw d[rspackError];
119
+ return d[rspackExports];
120
+ });
121
+ }
122
+ var promise = new Promise((resolve) => {
123
+ fn = () => (resolve(getResult));
124
+ fn.r = 0;
125
+ var fnQueue = (q) => (q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn))));
126
+ currentDeps.map((dep) => (dep[rspackDefer] || dep[rspackQueues](fnQueue)));
127
+ });
128
+ return fn.r ? promise : getResult();
129
+ };
130
+ var done = (err) => ((err ? reject(promise[rspackError] = err) : (useModuleExports && (exports = promise[rspackExports] = asyncModule.exports), outerResolve(exports))), resolveQueue(queue), promise[rspackDone] = true);
131
+ body(handle, done, asyncModule);
132
+ queue && queue.d < 0 && (queue.d = 0);
133
+ };
134
+
135
+ })();
136
+ // webpack/runtime/define_property_getters
137
+ (() => {
138
+ __webpack_require__.d = (exports, getters, values) => {
139
+ var define = (defs, kind) => {
140
+ for(var key in defs) {
141
+ if(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {
142
+ Object.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });
143
+ }
144
+ }
145
+ };
146
+ define(getters, "get");
147
+ define(values, "value");
148
+ };
149
+ })();
150
+ // webpack/runtime/ensure_chunk
151
+ (() => {
152
+ __webpack_require__.f = {};
153
+ // This file contains only the entry chunk.
154
+ // The chunk loading function for additional chunks
155
+ __webpack_require__.e = (chunkId) => {
156
+ return Promise.all(
157
+ Object.keys(__webpack_require__.f).reduce((promises, key) => {
158
+ __webpack_require__.f[key](chunkId, promises);
159
+ return promises;
160
+ }, [])
161
+ );
162
+ };
163
+ })();
164
+ // webpack/runtime/export_webpack_require
165
+ var __webpack_require__temp = __webpack_require__;
166
+ export { __webpack_require__temp as __webpack_require__ };
167
+ // webpack/runtime/get javascript chunk filename
168
+ (() => {
169
+ // This function allow to reference chunks
170
+ __webpack_require__.u = (chunkId) => {
171
+ // return url for filenames not based on template
172
+
173
+ // return url for filenames based on template
174
+ return "chunks/" + chunkId + ".js"
175
+ }
176
+ })();
177
+ // webpack/runtime/has_own_property
178
+ (() => {
179
+ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
180
+ })();
181
+ // webpack/runtime/make_namespace_object
182
+ (() => {
183
+ // define __esModule on exports
184
+ __webpack_require__.r = (exports) => {
185
+ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
186
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
187
+ }
188
+ Object.defineProperty(exports, '__esModule', { value: true });
189
+ };
190
+ })();
191
+ // webpack/runtime/module_chunk_loading
192
+ (() => {
193
+ // no BaseURI
194
+ // object to store loaded and loading chunks
195
+ // undefined = chunk not loaded, null = chunk preloaded/prefetched
196
+ // [resolve, Promise] = chunk loading, 0 = chunk loaded
197
+ var moduleInstalledChunks = {146: 0,};
198
+ var moduleInstallChunk = (data) => {
199
+ var __rspack_esm_ids = data.__rspack_esm_ids;
200
+ var moreModules = data.__webpack_modules__;
201
+ var __rspack_esm_runtime = data.__rspack_esm_runtime;
202
+ // add "modules" to the modules object,
203
+ // then flag all "ids" as loaded and fire callback
204
+ var moduleId, chunkId, i = 0;
205
+ for (moduleId in moreModules) {
206
+ if (__webpack_require__.o(moreModules, moduleId)) {
207
+ __webpack_require__.m[moduleId] = moreModules[moduleId];
208
+ }
209
+ }
210
+ if (__rspack_esm_runtime) __rspack_esm_runtime(__webpack_require__);
211
+ for (; i < __rspack_esm_ids.length; i++) {
212
+ chunkId = __rspack_esm_ids[i];
213
+ if (__webpack_require__.o(moduleInstalledChunks, chunkId) && moduleInstalledChunks[chunkId]) {
214
+ moduleInstalledChunks[chunkId][0]();
215
+ }
216
+ moduleInstalledChunks[__rspack_esm_ids[i]] = 0;
217
+ }
218
+
219
+ };
220
+
221
+ __webpack_require__.f.j = function (chunkId, promises) {
222
+ // import() chunk loading for javascript
223
+ var installedChunkData = __webpack_require__.o(moduleInstalledChunks, chunkId) ? moduleInstalledChunks[chunkId] : undefined;
224
+ if (installedChunkData !== 0) { // 0 means "already installed".'
225
+ // a Promise means "currently loading".
226
+ if (installedChunkData) {
227
+ promises.push(installedChunkData[1]);
228
+ } else {
229
+ if (146 != chunkId) {
230
+ // setup Promise in chunk cache
231
+ var promise = import("./" + __webpack_require__.u(chunkId)).then(moduleInstallChunk, (e) => {
232
+ if (moduleInstalledChunks[chunkId] !== 0) moduleInstalledChunks[chunkId] = undefined;
233
+ throw e;
234
+ });
235
+ var promise = Promise.race([promise, new Promise((resolve) => {
236
+ installedChunkData = moduleInstalledChunks[chunkId] = [resolve];
237
+ })]);
238
+ promises.push(installedChunkData[1] = promise);
239
+ }
240
+ else moduleInstalledChunks[chunkId] = 0;
241
+
242
+ }
243
+ }
244
+
245
+ }
246
+
247
+ __webpack_require__.C = moduleInstallChunk;
248
+ // no on chunks loaded
249
+ // no HMR
250
+ // no HMR manifest
251
+
252
+ })();
@@ -1,6 +1,16 @@
1
- export * from './file-manager.service';
2
- export * from './folder.service';
3
- export * from './storage-config.service';
4
- export * from './storage-provider-config.service';
5
- export * from './storage-datasource.provider';
6
- export * from './upload.service';
1
+ export const __rspack_esm_id = 995;
2
+ export const __rspack_esm_ids = [995];
3
+ export const __webpack_modules__ = {};
4
+ import { __webpack_require__ } from '../runtime.js';
5
+ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
6
+ import * as __rspack_chunk_1 from '../493.js';
7
+ __webpack_require__.C(__rspack_chunk_1);
8
+ import * as __rspack_chunk_2 from './index.js';
9
+ __webpack_require__.C(__rspack_chunk_2);
10
+ var __webpack_exports__ = __webpack_exec__(148);var __webpack_exports__FileManagerService = __webpack_exports__.DL;
11
+ var __webpack_exports__FolderService = __webpack_exports__.kh;
12
+ var __webpack_exports__StorageConfigService = __webpack_exports__.tP;
13
+ var __webpack_exports__StorageDataSourceProvider = __webpack_exports__.M0;
14
+ var __webpack_exports__StorageProviderConfigService = __webpack_exports__.ol;
15
+ var __webpack_exports__UploadService = __webpack_exports__.BB;
16
+ export { __webpack_exports__FileManagerService as FileManagerService, __webpack_exports__FolderService as FolderService, __webpack_exports__StorageConfigService as StorageConfigService, __webpack_exports__StorageDataSourceProvider as StorageDataSourceProvider, __webpack_exports__StorageProviderConfigService as StorageProviderConfigService, __webpack_exports__UploadService as UploadService };