From f2e9f490d465b55cce9a96d8fc9545e694f064f0 Mon Sep 17 00:00:00 2001 From: Epeius of Phocis Date: Thu, 4 Jul 2024 11:55:13 +0200 Subject: [PATCH] Handle empty file uploads --- package-lock.json | 4 ++-- package.json | 2 +- src/form-data.js | 16 ++++++++-------- src/form-data.test.js | 10 ++++------ src/types.d.ts | 6 +++--- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index bc034c3..b42044c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@trojs/formdata-parser", - "version": "0.1.2", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@trojs/formdata-parser", - "version": "0.1.2", + "version": "0.2.0", "license": "MIT", "devDependencies": { "@eslint/js": "^9.6.0", diff --git a/package.json b/package.json index a1dbc78..676bb17 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@trojs/formdata-parser", - "version": "0.1.2", + "version": "0.2.0", "description": "Parse the form data", "type": "module", "main": "src/form-data.js", diff --git a/src/form-data.js b/src/form-data.js index 93ce9f1..f3b03b8 100644 --- a/src/form-data.js +++ b/src/form-data.js @@ -5,26 +5,26 @@ /** * @param {string} file - * @returns {string} + * @returns {string=} */ const getFileName = (file) => { const fileName = file.split(`filename="`) if (fileName.length > 1) { - return fileName[1].split(`"\r\n`)[0] + return fileName[1].split('"')[0] } - throw new Error('No file name') + return undefined } /** * @param {string} file - * @returns {string} + * @returns {string=} */ const getFileData = (file) => { const fileData = file.split(`\r\n\r\n`) if (fileData.length > 1) { return fileData[1].split(`\r\n`)[0] } - throw new Error('No file data') + return undefined } /** @@ -34,20 +34,20 @@ const getFileData = (file) => { const getField = (file) => { const fieldName = file.split(`name="`) if (fieldName.length > 1) { - return fieldName[1].split(`";`)[0] + return fieldName[1].split(`"`)[0] } throw new Error('No field') } /** * @param {string} file - * @returns {string} + * @returns {string=} */ const getContentType = (file) => { const contentType = file.split(`Content-Type: `) if (contentType.length > 1) { return contentType[1].split(`\r\n`)[0] } - throw new Error('No content type') + return undefined } /** diff --git a/src/form-data.test.js b/src/form-data.test.js index 3bf8301..42f0b63 100644 --- a/src/form-data.test.js +++ b/src/form-data.test.js @@ -9,10 +9,8 @@ const example = { '42\n' + '\r\n' + '-----------------------------12946965154256166883262710838\r\n' + - 'Content-Disposition: form-data; name="fileName2"; filename="test.xml"\r\n' + - 'Content-Type: text/xml\r\n' + + 'Content-Disposition: form-data; name="fileName2"\r\n' + '\r\n' + - '43\n' + '\r\n' + '-----------------------------12946965154256166883262710838--\r\n', type: 'multipart/form-data; boundary=---------------------------12946965154256166883262710838' @@ -66,11 +64,11 @@ test('Test the form data helper', async (t) => { assert.deepEqual( response[1].fileData, - '43\n' + '' ) assert.deepEqual( response[1].fileName, - 'test.xml' + undefined ) assert.deepEqual( response[1].boundary, @@ -82,7 +80,7 @@ test('Test the form data helper', async (t) => { ) assert.deepEqual( response[1].contentType, - 'text/xml' + undefined ) }) }) diff --git a/src/types.d.ts b/src/types.d.ts index 5683e68..4de69d1 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,7 +1,7 @@ export type FormData = { - fileName: string; - fileData: string; + fileName?: string; + fileData?: string; field: string; - contentType: string; + contentType?: string; boundary: string; };