{"library":"multipasta","title":"multipasta - Cross-platform Multipart Parser","description":"multipasta is a cross-platform parser specifically designed for `multipart/form-data` payloads, commonly used for file uploads in web applications. It provides a stream-based API for handling incoming data, making it suitable for both Node.js environments (where it leverages Node's `Buffer` capabilities efficiently) and browser-like runtimes. The current stable version is 0.2.7, with frequent patch releases addressing bug fixes and minor improvements, as seen in recent changelogs. Minor version bumps (e.g., v0.2.0) introduce new features or behavior changes. Key differentiators include its cross-platform compatibility, TypeScript type definitions, and focus on efficient, stream-based parsing of multipart bodies.","language":"javascript","status":"active","last_verified":"Sun Apr 19","install":{"commands":["npm install multipasta"],"cli":null},"imports":["import { MultipartParser } from 'multipasta';","import { FileStream } from 'multipasta';","import type { MultipartParserOptions } from 'multipasta';"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import { MultipartParser } from 'multipasta';\nimport { Readable } from 'stream';\n\nconst boundary = '----WebKitFormBoundary7MA4YWxkTrZu0gW';\nconst multipartBody = `--${boundary}\\r\\n` +\n  'Content-Disposition: form-data; name=\"text_field\"\\r\\n\\r\\n' +\n  'Some text value\\r\\n' +\n  `--${boundary}\\r\\n` +\n  'Content-Disposition: form-data; name=\"file_field\"; filename=\"hello.txt\"\\r\\n' +\n  'Content-Type: text/plain\\r\\n\\r\\n' +\n  'Hello, world!\\nThis is a test file.\\r\\n' +\n  `--${boundary}--\\r\\n`;\n\nconst parser = new MultipartParser({\n  boundary: Buffer.from(boundary),\n});\n\nconst readableStream = Readable.from(multipartBody);\n\nreadableStream.on('data', (chunk) => {\n  parser.write(chunk);\n});\n\nparser.on('field', (field) => {\n  console.log(`Field: ${field.name.toString()} = ${field.value.toString()}`);\n});\n\nparser.on('file', (file) => {\n  console.log(`File received: Name=${file.name.toString()}, Filename=${file.filename?.toString() ?? 'N/A'}, Content-Type=${file.contentType?.toString() ?? 'N/A'}`);\n  let fileContent = Buffer.alloc(0);\n  file.on('data', (chunk) => {\n    fileContent = Buffer.concat([fileContent, chunk]);\n  });\n  file.on('end', () => {\n    console.log(`File content for ${file.filename?.toString()}:\\n${fileContent.toString()}`);\n  });\n});\n\nparser.on('end', () => {\n  console.log('Multipart parsing complete.');\n});\n\nreadableStream.on('end', () => {\n  parser.end();\n});\n\nreadableStream.on('error', (err) => {\n  console.error('Stream error:', err);\n});\n\nparser.on('error', (err) => {\n  console.error('Parser error:', err);\n});\n","lang":"typescript","description":"Demonstrates parsing a multipart/form-data request body from a Node.js Readable stream, extracting both text fields and file content.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}