@lucaapp/service-utils 1.59.6 → 1.60.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/dist/lib/api/endpoint.js
CHANGED
|
@@ -167,6 +167,41 @@ async function stream2buffer(stream) {
|
|
|
167
167
|
stream.on('error', error => reject(error));
|
|
168
168
|
});
|
|
169
169
|
}
|
|
170
|
+
function handleMultipleFileUpload(request) {
|
|
171
|
+
return new Promise((resolve, reject) => {
|
|
172
|
+
const bb = (0, busboy_1.default)({
|
|
173
|
+
headers: request.headers,
|
|
174
|
+
defCharset: 'utf8',
|
|
175
|
+
limits: {
|
|
176
|
+
fileSize: 20 * 1024 * 1024, // 20 mb per file
|
|
177
|
+
files: 10,
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
const files = [];
|
|
181
|
+
bb.once('error', error => {
|
|
182
|
+
reject(error);
|
|
183
|
+
});
|
|
184
|
+
bb.on('file', async (fieldname, fileStream, filename) => {
|
|
185
|
+
const { encoding, mimeType: mimetype, filename: name } = filename;
|
|
186
|
+
const originalName = Buffer.from(name, 'latin1').toString('utf8');
|
|
187
|
+
const fileBuffer = await stream2buffer(fileStream);
|
|
188
|
+
const file = {
|
|
189
|
+
buffer: fileBuffer,
|
|
190
|
+
originalname: originalName,
|
|
191
|
+
encoding,
|
|
192
|
+
mimetype,
|
|
193
|
+
size: fileBuffer.length,
|
|
194
|
+
fieldname: fieldname,
|
|
195
|
+
filename: name,
|
|
196
|
+
};
|
|
197
|
+
files.push(file);
|
|
198
|
+
});
|
|
199
|
+
bb.once('finish', () => {
|
|
200
|
+
resolve(files);
|
|
201
|
+
});
|
|
202
|
+
request.pipe(bb);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
170
205
|
function handleFileUpload(request) {
|
|
171
206
|
return new Promise((resolve, reject) => {
|
|
172
207
|
const bb = (0, busboy_1.default)({
|
|
@@ -234,10 +269,16 @@ new Promise(async (resolve) => {
|
|
|
234
269
|
request.headers['content-type']?.includes('multipart/form-data')) {
|
|
235
270
|
file = await handleFileUpload(request);
|
|
236
271
|
}
|
|
272
|
+
let files = undefined;
|
|
273
|
+
if (middleware.options.config?.isFilesUpload &&
|
|
274
|
+
request.headers['content-type']?.includes('multipart/form-data')) {
|
|
275
|
+
files = await handleMultipleFileUpload(request);
|
|
276
|
+
}
|
|
237
277
|
// if the header is multipart we should return a buffer with the content
|
|
238
278
|
const handlerRequest = {
|
|
239
279
|
body: handlerRequestBody,
|
|
240
280
|
...(file && { file }),
|
|
281
|
+
...(files && { files }),
|
|
241
282
|
params: handlerRequestParams,
|
|
242
283
|
query: handlerRequestQuery,
|
|
243
284
|
headers: handlerRequestHeaders,
|
|
@@ -27,6 +27,7 @@ export type MiddlewareHandler<TResponseSchema, TRequestBodySchema, TRequestParam
|
|
|
27
27
|
path: string;
|
|
28
28
|
method: string;
|
|
29
29
|
file?: FileUpload;
|
|
30
|
+
files?: FileUpload[];
|
|
30
31
|
}, send: (response: ExtractZodOutput<ArrayToUnion<TResponseSchema>>) => void, next: (context?: ZodSchemaOuput<TContextSchema>) => void) => Promise<void>;
|
|
31
32
|
export type MiddlewareOptions<TResponseSchemas extends ReadonlyArray<EndpointResponseSchema>, TRequestBodySchema, TRequestParamsSchema, TRequestQuerySchema, TRequestHeadersSchema, TContextSchema> = {
|
|
32
33
|
schemas?: {
|
|
@@ -39,6 +40,7 @@ export type MiddlewareOptions<TResponseSchemas extends ReadonlyArray<EndpointRes
|
|
|
39
40
|
responses: TResponseSchemas;
|
|
40
41
|
config?: {
|
|
41
42
|
isFileUpload?: boolean;
|
|
43
|
+
isFilesUpload?: boolean;
|
|
42
44
|
};
|
|
43
45
|
errors?: Record<string, number>;
|
|
44
46
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lucaapp/service-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.60.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"prettier": "2.7.1",
|
|
66
66
|
"semantic-release": "^19.0.3",
|
|
67
67
|
"semantic-release-monorepo": "^7.0.5",
|
|
68
|
-
"sqlite3": "5.
|
|
68
|
+
"sqlite3": "5.1.1",
|
|
69
69
|
"supertest": "^6.3.3",
|
|
70
70
|
"typescript": "5.5.3",
|
|
71
71
|
"vite-tsconfig-paths": "4.3.2",
|
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
"braces": "3.0.3",
|
|
79
79
|
"send": "0.19.0",
|
|
80
80
|
"rollup": "4.22.4",
|
|
81
|
-
"cookie": ">= 0.7.0"
|
|
81
|
+
"cookie": ">= 0.7.0",
|
|
82
|
+
"string-width": "4.2.3"
|
|
82
83
|
}
|
|
83
84
|
}
|