diff --git a/SafeEventEmitter.ts b/src/SafeEventEmitter.ts similarity index 100% rename from SafeEventEmitter.ts rename to src/SafeEventEmitter.ts diff --git a/config.ts b/src/config.ts similarity index 100% rename from config.ts rename to src/config.ts diff --git a/error.ts b/src/error.ts similarity index 100% rename from error.ts rename to src/error.ts diff --git a/index.ts b/src/index.ts similarity index 91% rename from index.ts rename to src/index.ts index f30b9ef..6d76b2e 100644 --- a/index.ts +++ b/src/index.ts @@ -82,19 +82,22 @@ class FileIterator { private readonly parser: busboy.Busboy, private readonly config: PechkinConfig, ) { - this.fileController= new FileController(config); + this.fileController = new FileController(config); this.iterator = on(this.parser, 'file'); + // AsyncIterableIterator interface's next(), return(), throw() methods are optional, however, + // from the Node.js source code for on(), the returned object always providers + // implementations for next(), return(), throw(). this.parser .once('partsLimit', () => { - return this.iterator.throw(new TotalLimitError("maxTotalPartCount")); + return this.iterator.throw!(new TotalLimitError("maxTotalPartCount")); }) .once('filesLimit', () => { - return this.iterator.throw(new TotalLimitError("maxTotalFileCount")) + return this.iterator.throw!(new TotalLimitError("maxTotalFileCount")) }) .once('error', (error) => { - return this.iterator.throw(error); + return this.iterator.throw!(error); }) .once('close', () => { return this.iterator.return!(); @@ -181,7 +184,7 @@ class FileController { constructor(private readonly config: PechkinConfig) {} - getFieldControllerUpsert(field: string): [TotalLimitError, SingleFileFieldController?] { + getFieldControllerUpsert(field: string): [TotalLimitError] | [null, SingleFileFieldController] { this.fileFieldControllers[field] ??= new SingleFileFieldController(field, this.config); if (Object.keys(this.fileFieldControllers).length > this.config.base.maxTotalFileFieldCount) { @@ -203,7 +206,7 @@ class SingleFileFieldController { this.limits = this.fileFieldLimits(field, config); } - limitCount(): [FieldLimitError, number] { + limitCount(): [FieldLimitError | null, number] { this.count += 1; if (this.count > this.limits.maxFileCountPerField) { @@ -236,7 +239,7 @@ class SingleFileFieldController { private fileFieldLimits(field: string, config: PechkinConfig): FileFieldLimits { return { ...config.base, - ...(config.fileOverride[field] ?? {}), + ...(config.fileOverride?.[field] ?? {}), }; } } diff --git a/length.ts b/src/length.ts similarity index 100% rename from length.ts rename to src/length.ts diff --git a/types.ts b/src/types.ts similarity index 100% rename from types.ts rename to src/types.ts diff --git a/tsconfig.json b/tsconfig.json index c50d4ef..b4a1a52 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,6 @@ "module": "CommonJS", "sourceMap": true }, - "include": ["index.ts", "manual-test.ts"], + "include": ["src"], "exclude": ["node_modules"] } \ No newline at end of file