From c3324dcc83529c6504ad87680656d768457f6cf7 Mon Sep 17 00:00:00 2001 From: Tony133 Date: Thu, 7 May 2026 08:57:26 +0200 Subject: [PATCH 1/5] refactor(types): migrate from tsd to tstyche --- package.json | 6 +- test-types/{dicer.test-d.ts => dicer.tst.ts} | 1 + test-types/main.test-d.ts | 236 --------------- test-types/main.tst.ts | 302 +++++++++++++++++++ tsconfig.json | 2 +- 5 files changed, 307 insertions(+), 240 deletions(-) rename test-types/{dicer.test-d.ts => dicer.tst.ts} (99%) delete mode 100644 test-types/main.test-d.ts create mode 100644 test-types/main.tst.ts diff --git a/package.json b/package.json index 1078b44..20f444e 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "lint": "eslint", "lint:fix": "eslint --fix", "test:unit": "c8 --statements 98 --branches 97 --functions 96 --lines 98 node --test", - "test:types": "tsd", + "test:types": "tstyche", "test": "npm run test:unit && npm run test:types" }, "devDependencies": { @@ -38,7 +38,7 @@ "eslint": "^9.39.0", "neostandard": "^0.12.0", "tinybench": "^6.0.0", - "tsd": "^0.33.0", + "tstyche": "^7.0.0", "tslib": "^2.8.1", "typescript": "~6.0.2" }, @@ -78,4 +78,4 @@ "deps/streamsearch/", "deps/dicer/LICENSE" ] -} +} \ No newline at end of file diff --git a/test-types/dicer.test-d.ts b/test-types/dicer.tst.ts similarity index 99% rename from test-types/dicer.test-d.ts rename to test-types/dicer.tst.ts index b7f2005..aad5f79 100644 --- a/test-types/dicer.test-d.ts +++ b/test-types/dicer.tst.ts @@ -17,6 +17,7 @@ function testDicerSyntax () { headerFirst: false, maxHeaderPairs: 8, } + dicer.setBoundary('new-testing-boundary') dicer.on('part', handleDicerPartStream) dicer.on('finish', () => { diff --git a/test-types/main.test-d.ts b/test-types/main.test-d.ts deleted file mode 100644 index c705220..0000000 --- a/test-types/main.test-d.ts +++ /dev/null @@ -1,236 +0,0 @@ -/* eslint-disable import-x/no-duplicates */ -/* eslint-disable no-new */ -import BusboyDefault, { Busboy, BusboyFileStream } from '..' -import { expectError, expectType } from 'tsd' -import BusboyESM from '..' - -expectType>(new BusboyESM({ headers: { 'content-type': 'foo' } })) -expectType>(new Busboy({ headers: { 'content-type': 'foo' } })) - -expectError(new BusboyDefault({})) -const busboy = BusboyDefault({ headers: { 'content-type': 'foo' } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, highWaterMark: 1000 }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, fileHwm: 1000 }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, defCharset: 'utf8' }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, preservePath: true }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, limits: { fieldNameSize: 200 } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, limits: { fieldSize: 200 } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, limits: { fields: 200 } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, limits: { fileSize: 200 } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, limits: { files: 200 } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, limits: { parts: 200 } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, limits: { headerPairs: 200 } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, limits: { headerSize: 200 } }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, isPartAFile: (fieldName, contentType, fileName) => fieldName === 'my-special-field' || fileName !== 'not-so-special.txt' }) // $ExpectType Busboy -new BusboyDefault({ headers: { 'content-type': 'foo' }, isPartAFile: (fieldName, contentType, fileName) => fileName !== undefined }) // $ExpectType Busboy - -busboy.addListener('file', (fieldname, file, filename, encoding, mimetype) => { - expectType(fieldname) - expectType(file) - expectType(filename) - expectType(encoding) - expectType(mimetype) -}) -busboy.addListener('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { - expectType(fieldname) - expectType(val) - expectType(fieldnameTruncated) - expectType(valTruncated) - expectType(encoding) - expectType(mimetype) -}) -busboy.addListener('partsLimit', () => {}) -busboy.addListener('filesLimit', () => {}) -busboy.addListener('fieldsLimit', () => {}) -busboy.addListener('error', e => { - expectType(e) -}) -busboy.addListener('finish', () => {}) -// test fallback -busboy.on('foo', foo => { - expectType(foo) -}) -busboy.on(Symbol('foo'), foo => { - expectType(foo) -}) - -busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { - expectType(fieldname) - expectType(file) - expectType(filename) - expectType(encoding) - expectType(mimetype) -}) -busboy.on('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { - expectType(fieldname) - expectType(val) - expectType(fieldnameTruncated) - expectType(valTruncated) - expectType(encoding) - expectType(mimetype) -}) -busboy.on('partsLimit', () => {}) -busboy.on('filesLimit', () => {}) -busboy.on('fieldsLimit', () => {}) -busboy.on('error', e => { - expectType(e) -}) -busboy.on('finish', () => {}) -// test fallback -busboy.on('foo', foo => { - expectType(foo) -}) -busboy.on(Symbol('foo'), foo => { - expectType(foo) -}) - -busboy.once('file', (fieldname, file, filename, encoding, mimetype) => { - expectType(fieldname) - expectType(file) - expectType(filename) - expectType(encoding) - expectType(mimetype) -}) -busboy.once('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { - expectType(fieldname) - expectType(val) - expectType(fieldnameTruncated) - expectType(valTruncated) - expectType(encoding) - expectType(mimetype) -}) -busboy.once('partsLimit', () => {}) -busboy.once('filesLimit', () => {}) -busboy.once('fieldsLimit', () => {}) -busboy.once('error', e => { - expectType(e) -}) -busboy.once('finish', () => {}) -// test fallback -busboy.once('foo', foo => { - expectType(foo) -}) -busboy.once(Symbol('foo'), foo => { - expectType(foo) -}) - -busboy.removeListener('file', (fieldname, file, filename, encoding, mimetype) => { - expectType(fieldname) - expectType(file) - expectType(filename) - expectType(encoding) - expectType(mimetype) -}) -busboy.removeListener('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { - expectType(fieldname) - expectType(val) - expectType(fieldnameTruncated) - expectType(valTruncated) - expectType(encoding) - expectType(mimetype) -}) -busboy.removeListener('partsLimit', () => {}) -busboy.removeListener('filesLimit', () => {}) -busboy.removeListener('fieldsLimit', () => {}) -busboy.removeListener('error', e => { - expectType(e) -}) -busboy.removeListener('finish', () => {}) -// test fallback -busboy.removeListener('foo', foo => { - expectType(foo) -}) -busboy.removeListener(Symbol('foo'), foo => { - expectType(foo) -}) - -busboy.off('file', (fieldname, file, filename, encoding, mimetype) => { - expectType(fieldname) - expectType(file) - expectType(filename) - expectType(encoding) - expectType(mimetype) -}) -busboy.off('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { - expectType(fieldname) - expectType(val) - expectType(fieldnameTruncated) - expectType(valTruncated) - expectType(encoding) - expectType(mimetype) -}) -busboy.off('partsLimit', () => {}) -busboy.off('filesLimit', () => {}) -busboy.off('fieldsLimit', () => {}) -busboy.off('error', e => { - expectType(e) -}) -busboy.off('finish', () => {}) -// test fallback -busboy.off('foo', foo => { - expectType(foo) -}) -busboy.off(Symbol('foo'), foo => { - expectType(foo) -}) - -busboy.prependListener('file', (fieldname, file, filename, encoding, mimetype) => { - expectType(fieldname) - expectType(file) - expectType(filename) - expectType(encoding) - expectType(mimetype) -}) -busboy.prependListener('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { - expectType(fieldname) - expectType(val) - expectType(fieldnameTruncated) - expectType(valTruncated) - expectType(encoding) - expectType(mimetype) -}) -busboy.prependListener('partsLimit', () => {}) -busboy.prependListener('filesLimit', () => {}) -busboy.prependListener('fieldsLimit', () => {}) -busboy.prependListener('error', e => { - expectType(e) -}) -busboy.prependListener('finish', () => {}) -// test fallback -busboy.prependListener('foo', foo => { - expectType(foo) -}) -busboy.prependListener(Symbol('foo'), foo => { - expectType(foo) -}) - -busboy.prependOnceListener('file', (fieldname, file, filename, encoding, mimetype) => { - expectType(fieldname) - expectType(file) - expectType(filename) - expectType(encoding) - expectType(mimetype) -}) -busboy.prependOnceListener('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { - expectType(fieldname) - expectType(val) - expectType(fieldnameTruncated) - expectType(valTruncated) - expectType(encoding) - expectType(mimetype) -}) -busboy.prependOnceListener('partsLimit', () => {}) -busboy.prependOnceListener('filesLimit', () => {}) -busboy.prependOnceListener('fieldsLimit', () => {}) -busboy.prependOnceListener('error', e => { - expectType(e) -}) -busboy.prependOnceListener('finish', () => {}) -// test fallback -busboy.prependOnceListener('foo', foo => { - expectType(foo) -}) -busboy.prependOnceListener(Symbol('foo'), foo => { - expectType(foo) -}) diff --git a/test-types/main.tst.ts b/test-types/main.tst.ts new file mode 100644 index 0000000..8a6d4af --- /dev/null +++ b/test-types/main.tst.ts @@ -0,0 +1,302 @@ +/* eslint-disable import-x/no-duplicates */ +/* eslint-disable no-new */ +import BusboyDefault, { Busboy, BusboyFileStream } from '../lib/main' +import { expect } from 'tstyche' +import BusboyESM from '../lib/main' + +expect(new BusboyESM({ headers: { 'content-type': 'foo' } })).type.toBe< + InstanceType +>() +expect(new Busboy({ headers: { 'content-type': 'foo' } })).type.toBe< + InstanceType +>() + +// @ts-expect-error Argument of type '{}' is not assignable to parameter of type 'BusboyConfig'. +new BusboyDefault({}) +const busboy = BusboyDefault({ headers: { 'content-type': 'foo' } }) +new BusboyDefault({ headers: { 'content-type': 'foo' } }) +new BusboyDefault({ headers: { 'content-type': 'foo' }, highWaterMark: 1000 }) +new BusboyDefault({ headers: { 'content-type': 'foo' }, fileHwm: 1000 }) +new BusboyDefault({ headers: { 'content-type': 'foo' }, defCharset: 'utf8' }) +new BusboyDefault({ headers: { 'content-type': 'foo' }, preservePath: true }) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + limits: { fieldNameSize: 200 } +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + limits: { fieldSize: 200 } +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + limits: { fields: 200 } +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + limits: { fileSize: 200 } +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + limits: { files: 200 } +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + limits: { parts: 200 } +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + limits: { headerPairs: 200 } +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + limits: { headerSize: 200 } +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + isPartAFile: (fieldName, contentType, fileName) => + fieldName === 'my-special-field' || fileName !== 'not-so-special.txt' +}) +new BusboyDefault({ + headers: { 'content-type': 'foo' }, + isPartAFile: (fieldName, contentType, fileName) => fileName !== undefined +}) + +busboy.addListener('file', (fieldname, file, filename, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(file).type.toBe() + expect(filename).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() +}) +busboy.addListener( + 'field', + (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(val).type.toBe() + expect(fieldnameTruncated).type.toBe() + expect(valTruncated).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.addListener('partsLimit', () => {}) +busboy.addListener('filesLimit', () => {}) +busboy.addListener('fieldsLimit', () => {}) +busboy.addListener('error', (e) => { + expect(e).type.toBe() +}) +busboy.addListener('finish', () => {}) +// test fallback +busboy.on('foo', (foo) => { + expect(foo).type.toBe() +}) +busboy.on(Symbol('foo'), (foo) => { + expect(foo).type.toBe() +}) + +busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(file).type.toBe() + expect(filename).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() +}) +busboy.on( + 'field', + (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(val).type.toBe() + expect(fieldnameTruncated).type.toBe() + expect(valTruncated).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.on('partsLimit', () => {}) +busboy.on('filesLimit', () => {}) +busboy.on('fieldsLimit', () => {}) +busboy.on('error', (e) => { + expect(e).type.toBe() +}) +busboy.on('finish', () => {}) +// test fallback +busboy.on('foo', (foo) => { + expect(foo).type.toBe() +}) +busboy.on(Symbol('foo'), (foo) => { + expect(foo).type.toBe() +}) + +busboy.once('file', (fieldname, file, filename, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(file).type.toBe() + expect(filename).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() +}) +busboy.once( + 'field', + (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(val).type.toBe() + expect(fieldnameTruncated).type.toBe() + expect(valTruncated).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.once('partsLimit', () => {}) +busboy.once('filesLimit', () => {}) +busboy.once('fieldsLimit', () => {}) +busboy.once('error', (e) => { + expect(e).type.toBe() +}) +busboy.once('finish', () => {}) +// test fallback +busboy.once('foo', (foo) => { + expect(foo).type.toBe() +}) +busboy.once(Symbol('foo'), (foo) => { + expect(foo).type.toBe() +}) + +busboy.removeListener( + 'file', + (fieldname, file, filename, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(file).type.toBe() + expect(filename).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.removeListener( + 'field', + (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(val).type.toBe() + expect(fieldnameTruncated).type.toBe() + expect(valTruncated).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.removeListener('partsLimit', () => {}) +busboy.removeListener('filesLimit', () => {}) +busboy.removeListener('fieldsLimit', () => {}) +busboy.removeListener('error', (e) => { + expect(e).type.toBe() +}) +busboy.removeListener('finish', () => {}) +// test fallback +busboy.removeListener('foo', (foo) => { + expect(foo).type.toBe() +}) +busboy.removeListener(Symbol('foo'), (foo) => { + expect(foo).type.toBe() +}) + +busboy.off('file', (fieldname, file, filename, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(file).type.toBe() + expect(filename).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() +}) +busboy.off( + 'field', + (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(val).type.toBe() + expect(fieldnameTruncated).type.toBe() + expect(valTruncated).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.off('partsLimit', () => {}) +busboy.off('filesLimit', () => {}) +busboy.off('fieldsLimit', () => {}) +busboy.off('error', (e) => { + expect(e).type.toBe() +}) +busboy.off('finish', () => {}) +// test fallback +busboy.off('foo', (foo) => { + expect(foo).type.toBe() +}) +busboy.off(Symbol('foo'), (foo) => { + expect(foo).type.toBe() +}) + +busboy.prependListener( + 'file', + (fieldname, file, filename, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(file).type.toBe() + expect(filename).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.prependListener( + 'field', + (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(val).type.toBe() + expect(fieldnameTruncated).type.toBe() + expect(valTruncated).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.prependListener('partsLimit', () => {}) +busboy.prependListener('filesLimit', () => {}) +busboy.prependListener('fieldsLimit', () => {}) +busboy.prependListener('error', (e) => { + expect(e).type.toBe() +}) +busboy.prependListener('finish', () => {}) +// test fallback +busboy.prependListener('foo', (foo) => { + expect(foo).type.toBe() +}) +busboy.prependListener(Symbol('foo'), (foo) => { + expect(foo).type.toBe() +}) + +busboy.prependOnceListener( + 'file', + (fieldname, file, filename, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(file).type.toBe() + expect(filename).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.prependOnceListener( + 'field', + (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => { + expect(fieldname).type.toBe() + expect(val).type.toBe() + expect(fieldnameTruncated).type.toBe() + expect(valTruncated).type.toBe() + expect(encoding).type.toBe() + expect(mimetype).type.toBe() + } +) +busboy.prependOnceListener('partsLimit', () => {}) +busboy.prependOnceListener('filesLimit', () => {}) +busboy.prependOnceListener('fieldsLimit', () => {}) +busboy.prependOnceListener('error', (e) => { + expect(e).type.toBe() +}) +busboy.prependOnceListener('finish', () => {}) +// test fallback +busboy.prependOnceListener('foo', (foo) => { + expect(foo).type.toBe() +}) +busboy.prependOnceListener(Symbol('foo'), (foo) => { + expect(foo).type.toBe() +}) diff --git a/tsconfig.json b/tsconfig.json index 4cc6e43..83748d8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "outDir": "dist", + "rootDir": ".", "module": "Node16", "target": "es2022", "sourceMap": false, @@ -17,7 +18,6 @@ "noImplicitThis": true, "strictNullChecks": true, "importHelpers": true, - "baseUrl": ".", "allowSyntheticDefaultImports": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true From bc0971f0055121dd45b4be1c45d8585689f85575 Mon Sep 17 00:00:00 2001 From: Tony133 Date: Mon, 11 May 2026 10:40:37 +0200 Subject: [PATCH 2/5] refactor: standardize entry points --- lib/main.js => index.js | 8 ++++---- package.json | 7 ++----- test/busboy-constructor.test.js | 2 +- test/busboy-emit.test.js | 2 +- test/dicer-export.test.js | 2 +- test/dicer-write.test.js | 2 +- test/multipart-constructor.test.js | 2 +- {test-types => types}/dicer.tst.ts | 2 +- lib/main.d.ts => types/index.d.ts | 0 test-types/main.tst.ts => types/index.tst.ts | 4 ++-- 10 files changed, 14 insertions(+), 17 deletions(-) rename lib/main.js => index.js (89%) rename {test-types => types}/dicer.tst.ts (98%) rename lib/main.d.ts => types/index.d.ts (100%) rename test-types/main.tst.ts => types/index.tst.ts (98%) diff --git a/lib/main.js b/index.js similarity index 89% rename from lib/main.js rename to index.js index 8794beb..73efe8d 100644 --- a/lib/main.js +++ b/index.js @@ -2,11 +2,11 @@ const WritableStream = require('node:stream').Writable const { inherits } = require('node:util') -const Dicer = require('../deps/dicer/lib/Dicer') +const Dicer = require('./deps/dicer/lib/Dicer') -const MultipartParser = require('./types/multipart') -const UrlencodedParser = require('./types/urlencoded') -const parseParams = require('./utils/parseParams') +const MultipartParser = require('./lib/types/multipart') +const UrlencodedParser = require('./lib/types/urlencoded') +const parseParams = require('./lib/utils/parseParams') function Busboy (opts) { if (!(this instanceof Busboy)) { return new Busboy(opts) } diff --git a/package.json b/package.json index 20f444e..424a64b 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,9 @@ } ], "description": "A streaming parser for HTML form data for node.js", - "main": "lib/main", + "main": "index.js", "type": "commonjs", - "types": "lib/main.d.ts", + "types": "types/index.d.ts", "scripts": { "bench:busboy": "cd benchmarks && npm install && npm run benchmark-fastify", "bench:dicer": "node bench/dicer/dicer-bench-multipart-parser.js", @@ -57,9 +57,6 @@ "url": "https://github.com/fastify/busboy/issues" }, "homepage": "https://github.com/fastify/busboy#readme", - "tsd": { - "directory": "test-types" - }, "standard": { "globals": [ "describe", diff --git a/test/busboy-constructor.test.js b/test/busboy-constructor.test.js index fb4e5dc..bf70af1 100644 --- a/test/busboy-constructor.test.js +++ b/test/busboy-constructor.test.js @@ -1,6 +1,6 @@ 'use strict' -const Busboy = require('../lib/main') +const Busboy = require('..') const { test } = require('node:test') test('busboy-constructor - should throw an Error if no options are provided', t => { diff --git a/test/busboy-emit.test.js b/test/busboy-emit.test.js index bfa1736..dcc4a98 100644 --- a/test/busboy-emit.test.js +++ b/test/busboy-emit.test.js @@ -1,6 +1,6 @@ 'use strict' -const Busboy = require('../lib/main') +const Busboy = require('..') const { test } = require('node:test') test('busboy, emit', t => { diff --git a/test/dicer-export.test.js b/test/dicer-export.test.js index a1a8bd2..9ab3360 100644 --- a/test/dicer-export.test.js +++ b/test/dicer-export.test.js @@ -1,7 +1,7 @@ 'use strict' const { test } = require('node:test') -const { Dicer } = require('../lib/main') +const { Dicer } = require('..') test('dicer-export', async t => { t.plan(2) diff --git a/test/dicer-write.test.js b/test/dicer-write.test.js index dd74493..448a7d4 100644 --- a/test/dicer-write.test.js +++ b/test/dicer-write.test.js @@ -1,7 +1,7 @@ 'use strict' const { test } = require('node:test') -const { Dicer } = require('../lib/main') +const { Dicer } = require('..') test('dicer _write method', t => { t.plan(1) diff --git a/test/multipart-constructor.test.js b/test/multipart-constructor.test.js index 671ebf5..56592b2 100644 --- a/test/multipart-constructor.test.js +++ b/test/multipart-constructor.test.js @@ -1,7 +1,7 @@ 'use strict' const Multipart = require('../lib/types/multipart') -const Busboy = require('../lib/main') +const Busboy = require('..') const { test } = require('node:test') test('multipart constructor', t => { diff --git a/test-types/dicer.tst.ts b/types/dicer.tst.ts similarity index 98% rename from test-types/dicer.tst.ts rename to types/dicer.tst.ts index aad5f79..c6ff777 100644 --- a/test-types/dicer.tst.ts +++ b/types/dicer.tst.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { Dicer } from '../lib/main' +import { Dicer } from '.' import * as fs from 'fs' import * as stream from 'stream' diff --git a/lib/main.d.ts b/types/index.d.ts similarity index 100% rename from lib/main.d.ts rename to types/index.d.ts diff --git a/test-types/main.tst.ts b/types/index.tst.ts similarity index 98% rename from test-types/main.tst.ts rename to types/index.tst.ts index 8a6d4af..fac74bd 100644 --- a/test-types/main.tst.ts +++ b/types/index.tst.ts @@ -1,8 +1,8 @@ /* eslint-disable import-x/no-duplicates */ /* eslint-disable no-new */ -import BusboyDefault, { Busboy, BusboyFileStream } from '../lib/main' +import BusboyDefault, { Busboy, BusboyFileStream } from '.' import { expect } from 'tstyche' -import BusboyESM from '../lib/main' +import BusboyESM from '.' expect(new BusboyESM({ headers: { 'content-type': 'foo' } })).type.toBe< InstanceType From 92bbad5a4ce4e2f55c77bd4995d968c5fb9723ea Mon Sep 17 00:00:00 2001 From: Antonio Tripodi Date: Tue, 12 May 2026 13:03:58 +0200 Subject: [PATCH 3/5] chore: update index.tst.ts Co-authored-by: Tom Mrazauskas Signed-off-by: Antonio Tripodi --- types/index.tst.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/types/index.tst.ts b/types/index.tst.ts index fac74bd..634d619 100644 --- a/types/index.tst.ts +++ b/types/index.tst.ts @@ -11,8 +11,7 @@ expect(new Busboy({ headers: { 'content-type': 'foo' } })).type.toBe< InstanceType >() -// @ts-expect-error Argument of type '{}' is not assignable to parameter of type 'BusboyConfig'. -new BusboyDefault({}) +expect(BusboyDefault).type.not.toBeConstructableWith({}) const busboy = BusboyDefault({ headers: { 'content-type': 'foo' } }) new BusboyDefault({ headers: { 'content-type': 'foo' } }) new BusboyDefault({ headers: { 'content-type': 'foo' }, highWaterMark: 1000 }) From adb5f9d014c077cd04cb1993ebe5e2fd7ae34e87 Mon Sep 17 00:00:00 2001 From: Tony133 Date: Tue, 12 May 2026 22:15:04 +0200 Subject: [PATCH 4/5] chore: update package.json --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index 424a64b..3cb7ecf 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,9 @@ "files": [ "README.md", "LICENSE", + "index.js", "lib/*", + "types/*", "deps/encoding/*", "deps/dicer/lib", "deps/streamsearch/", From 496428d3db1e4360397b33588b79351b0ad478ea Mon Sep 17 00:00:00 2001 From: Tony133 Date: Wed, 13 May 2026 10:11:41 +0200 Subject: [PATCH 5/5] chore: updated --- README.md | 2 -- benchmarks/busboy/contestants/fastify-busboy.js | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 13c4980..f033009 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,6 @@ Benchmark (Mean time for 500 Kb payload, 2000 cycles, 1000 cycle warmup): | busboy | 0.3.1 | `340114` | | @fastify/busboy | 1.0.0 | `270984` | -[Changelog](https://github.com/fastify/busboy/blob/main/CHANGELOG.md) since busboy 0.31. - Requirements ============ diff --git a/benchmarks/busboy/contestants/fastify-busboy.js b/benchmarks/busboy/contestants/fastify-busboy.js index 6750f77..a829003 100644 --- a/benchmarks/busboy/contestants/fastify-busboy.js +++ b/benchmarks/busboy/contestants/fastify-busboy.js @@ -1,6 +1,6 @@ 'use strict' -const Busboy = require('../../../lib/main') +const Busboy = require('../../../index') const { buffer, boundary } = require('../data') function process () {