Added utils
This commit is contained in:
parent
8f7b9e1788
commit
fb20753c9d
33
src/core/utils/jsonToFormData.ts
Normal file
33
src/core/utils/jsonToFormData.ts
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/**
|
||||
* Converts a JSON object to FormData.
|
||||
*
|
||||
* @param json - The JSON object to be converted into FormData. The object can
|
||||
* include nested objects and arrays. Nested objects are flattened according
|
||||
* to the FormData encoding conventions, with keys indicating the path to each
|
||||
* value and arrays being treated with indices.
|
||||
* @returns A FormData object containing the keys and values from the input JSON.
|
||||
* Each key in the JSON object is represented in the FormData, with its corresponding
|
||||
* value. Nested objects and arrays are handled by appending square brackets to the key
|
||||
* names to indicate the structure in the FormData.
|
||||
*/
|
||||
export default function jsonToFormData(json: Record<string, any>): FormData {
|
||||
const formData = new FormData();
|
||||
Object.keys(json).forEach((key) => {
|
||||
const value = json[key];
|
||||
if (Array.isArray(value)) {
|
||||
// Handle array values by appending each item with an index
|
||||
value.forEach((item, index) => {
|
||||
formData.append(`${key}[${index}]`, item);
|
||||
});
|
||||
} else if (typeof value === "object" && value !== null) {
|
||||
// Handle nested objects by appending each sub-key
|
||||
Object.keys(value).forEach((subKey) => {
|
||||
formData.append(`${key}[${subKey}]`, value[subKey]);
|
||||
});
|
||||
} else {
|
||||
// Handle simple types (strings, numbers, etc.)
|
||||
formData.append(key, value);
|
||||
}
|
||||
});
|
||||
return formData;
|
||||
}
|
||||
31
src/core/utils/onlyAllowFollowingContentType.ts
Normal file
31
src/core/utils/onlyAllowFollowingContentType.ts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import { headers } from "next/headers";
|
||||
import BaseError from "../error/BaseError";
|
||||
|
||||
/**
|
||||
* Ensures that the current request's content type is one of the allowed types.
|
||||
* This function is intended to be used in Next.js API routes to validate request content types.
|
||||
*
|
||||
* @param contentTypes - A single content type string or an array of allowed content type strings.
|
||||
* @throws {BaseError} Throws a BaseError if the current request's content type is not in the allowed content types.
|
||||
*/
|
||||
export default function onlyAllowFollowingContentType(
|
||||
contentTypes: string | string[]
|
||||
) {
|
||||
// Retrieve the current request's content type.
|
||||
const currentContentType = headers().get("Content-Type");
|
||||
|
||||
// Normalize the input parameter to an array to simplify the inclusion check.
|
||||
const allowedContentTypes = Array.isArray(contentTypes)
|
||||
? contentTypes
|
||||
: [contentTypes];
|
||||
|
||||
// Check if the current content type is not among the allowed ones and throw an error if so.
|
||||
if (!allowedContentTypes.includes(currentContentType ?? "")) {
|
||||
throw new BaseError({
|
||||
errorCode: "UNSUPPORTED_CONTENT_TYPE",
|
||||
message:
|
||||
"This content type is not supported. Please use one of the supported content types instead.",
|
||||
statusCode: 400,
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user