rbonestell/nest-ndjson-req-stream
Accept and automatically parse NDJSON stream requests in NestJS with Express!
Accept and automatically parse NDJSON stream requests in NestJS with Express!
A lightweight library that enables NestJS applications to accept and process streaming NDJSON (Newline Delimited JSON) requests with Express. Perfect for handling large datasets, real-time data feeds, and streaming APIs where each line contains a valid JSON object.
npm install nest-ndjson-req-stream
import { Controller, Post } from '@nestjs/common';
import { NdJsonStreamReq, NdJsonStreamRequest } from 'nest-ndjson-req-stream';
interface DataItem {
id: number;
name: string;
value: number;
}
@Controller('stream')
export class StreamController {
@Post('process')
async processStream(
@NdJsonStreamReq<DataItem>() request: NdJsonStreamRequest<DataItem>
) {
const results: DataItem[] = [];
// Process each item from the stream
for await (const item of request.body) {
// Process your data here
console.log('Received:', item);
results.push(item);
}
return {
message: 'Stream processed successfully',
itemCount: results.length,
};
}
}
No download data available
No tracked packages depend on this.
Use TypeScript generics for type-safe stream processing:
interface User {
id: string;
email: string;
profile: {
name: string;
age: number;
};
}
@Post('users')
async importUsers(
@NdJsonStreamReq() request: NdJsonStreamRequest<User>
) {
for await (const user of request.body) {
// TypeScript knows that user is of type User
console.log(user.email); // ✅ Type safe
console.log(user.profile.name); // ✅ Type safe
}
}
@NdJsonStreamReq(options?: NdJsonStreamOptions)Parameter decorator for handling NDJSON streaming requests.
batchSize?: number - The batch size for processing streamed objects (default: 25)NdJsonStreamRequest<T>Extended Express Request interface with AsyncGenerator type body:
body: AsyncGenerator<T> - AsyncGenerator that yields parsed NDJSON objectsbatchSize: number - The configured batch size for processing# Run unit tests
npm run test
# Run tests with coverage
npm run test:cov
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)This project is MIT licensed.