44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
|
/*
|
||
|
* This middleware class normalizes newlines in the request input data by replacing
|
||
|
* all occurrences of '\r\n' with '\n' recursively for strings, arrays, and objects.
|
||
|
*/
|
||
|
import type { HttpContext } from '@adonisjs/core/http';
|
||
|
import type { NextFn } from '@adonisjs/core/types/http';
|
||
|
|
||
|
export default class NormalizeNewlinesMiddleware {
|
||
|
async handle(ctx: HttpContext, next: NextFn) {
|
||
|
// Function to recursively normalize newlines
|
||
|
const normalizeNewlines = (input: any): any => {
|
||
|
if (typeof input === 'string') {
|
||
|
return input.replace(/\r\n/g, '\n');
|
||
|
} else if (Array.isArray(input)) {
|
||
|
return input.map((item) => normalizeNewlines(item));
|
||
|
} else if (typeof input === 'object' && input !== null) {
|
||
|
for (const key in input) {
|
||
|
input[key] = normalizeNewlines(input[key]);
|
||
|
}
|
||
|
return input;
|
||
|
}
|
||
|
return input;
|
||
|
};
|
||
|
/**
|
||
|
* Middleware logic goes here (before the next call)
|
||
|
*/
|
||
|
// console.log(ctx)
|
||
|
// Get all request input
|
||
|
const input = ctx.request.all();
|
||
|
|
||
|
// Normalize newlines in text inputs
|
||
|
const normalizedInput = normalizeNewlines(input);
|
||
|
|
||
|
// Replace request input with normalized data
|
||
|
ctx.request.updateBody(normalizedInput);
|
||
|
|
||
|
/**
|
||
|
* Call next method in the pipeline and return its output
|
||
|
*/
|
||
|
const output = await next();
|
||
|
return output;
|
||
|
}
|
||
|
}
|