From e00949953cf961877a7c34790960bf47af033a4d Mon Sep 17 00:00:00 2001 From: Epeius of Phocis Date: Thu, 4 Jul 2024 11:35:36 +0200 Subject: [PATCH] Refactor the parser --- package-lock.json | 12 +++++------ package.json | 4 ++-- src/form-data.js | 55 +++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 59 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index ac69bb7..bc034c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@trojs/formdata-parser", - "version": "0.1.1", + "version": "0.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@trojs/formdata-parser", - "version": "0.1.1", + "version": "0.1.2", "license": "MIT", "devDependencies": { "@eslint/js": "^9.6.0", @@ -2358,11 +2358,11 @@ } }, "node_modules/parse-imports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.0.tgz", - "integrity": "sha512-JQWgmK2o4w8leUkZeZPatWdAny6vXGU/3siIUvMF6J2rDCud9aTt8h/px9oZJ6U3EcfhngBJ635uPFI0q0VAeA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz", + "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==", "dev": true, - "license": "Apache 2.0", + "license": "Apache-2.0", "dependencies": { "es-module-lexer": "^1.5.3", "slashes": "^3.0.12" diff --git a/package.json b/package.json index 6dc6ac6..a1dbc78 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@trojs/formdata-parser", - "version": "0.1.1", + "version": "0.1.2", "description": "Parse the form data", "type": "module", "main": "src/form-data.js", @@ -53,4 +53,4 @@ "globals": "^15.8.0", "jscpd": "^4.0.5" } -} +} \ No newline at end of file diff --git a/src/form-data.js b/src/form-data.js index 2517be7..93ce9f1 100644 --- a/src/form-data.js +++ b/src/form-data.js @@ -3,6 +3,53 @@ * @typedef {import('./types.d.ts').FormData} FormData */ +/** + * @param {string} file + * @returns {string} + */ +const getFileName = (file) => { + const fileName = file.split(`filename="`) + if (fileName.length > 1) { + return fileName[1].split(`"\r\n`)[0] + } + throw new Error('No file name') +} + +/** + * @param {string} file + * @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') +} + +/** + * @param {string} file + * @returns {string} + */ +const getField = (file) => { + const fieldName = file.split(`name="`) + if (fieldName.length > 1) { + return fieldName[1].split(`";`)[0] + } + throw new Error('No field') +} +/** + * @param {string} file + * @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') +} + /** * Parse multipart/form-data * @param {string} data @@ -21,10 +68,10 @@ export default (data, header) => { return undefined } return { - fileName: file.split(`filename="`)[1].split(`"\r\n`)[0], - fileData: file.split(`\r\n\r\n`)[1].split(`\r\n`)[0], - field: file.split(`name="`)[1].split(`";`)[0], - contentType: file.split(`Content-Type: `)[1].split(`\r\n`)[0], + fileName: getFileName(file), + fileData: getFileData(file), + field: getField(file), + contentType: getContentType(file), boundary } }).filter(file => file !== undefined)