103 lines
3.0 KiB
TypeScript
103 lines
3.0 KiB
TypeScript
/*!
|
|
* This Source Code Form is subject to the terms of the Mozilla Public License,
|
|
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
|
|
* obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
import { Schema as S } from "@effect/schema";
|
|
import type { Field } from "./Field";
|
|
import type { MimeTypePredicate } from "./MimeType";
|
|
|
|
// --- INTERFACES --------------------------------------------------------------
|
|
|
|
export interface RequestBodyNone {
|
|
readonly _tag: "None";
|
|
}
|
|
|
|
export interface RequestBodyText<Schema extends S.Schema<any, string, unknown>> {
|
|
readonly _tag: "Text";
|
|
readonly schema: Schema;
|
|
}
|
|
|
|
export interface RequestBodyJson<Schema extends S.Schema.Any> {
|
|
readonly _tag: "Json";
|
|
readonly schema: Schema;
|
|
}
|
|
|
|
export interface RequestBodyUrlEncoded<Fields extends { readonly [_: string]: Field.AnyUrlEncoded }> {
|
|
readonly _tag: "UrlEncoded";
|
|
readonly fields: Readonly<Fields>;
|
|
}
|
|
|
|
export interface RequestBodyMultipart<Fields extends { readonly [_: string]: Field.Any }> {
|
|
readonly _tag: "Multipart";
|
|
readonly fields: Readonly<Fields>;
|
|
}
|
|
|
|
export interface RequestBodyFile<MimeType extends string> {
|
|
readonly _tag: "File";
|
|
readonly mimeType: MimeTypePredicate<MimeType>;
|
|
}
|
|
|
|
export namespace RequestBodyText {
|
|
export type Any = RequestBodyText<S.Schema<any, string, unknown>>;
|
|
}
|
|
|
|
export namespace RequestBodyJson {
|
|
export type Any = RequestBodyJson<S.Schema.Any>;
|
|
}
|
|
|
|
export namespace RequestBodyUrlEncoded {
|
|
export type Any = RequestBodyUrlEncoded<{}>;
|
|
}
|
|
|
|
export namespace RequestBodyMultipart {
|
|
export type Any = RequestBodyMultipart<{}>;
|
|
}
|
|
|
|
export namespace RequestBodyFile {
|
|
export type Any = RequestBodyFile<string>;
|
|
}
|
|
|
|
export namespace RequestBody {
|
|
export type Any =
|
|
| RequestBodyNone
|
|
| RequestBodyText.Any
|
|
| RequestBodyJson.Any
|
|
| RequestBodyUrlEncoded.Any
|
|
| RequestBodyMultipart.Any
|
|
| RequestBodyFile.Any
|
|
;
|
|
}
|
|
|
|
// --- CONSTRUCTORS ------------------------------------------------------------
|
|
|
|
export const RequestBodyNone: RequestBodyNone = Object.freeze<RequestBodyNone>({
|
|
_tag: "None",
|
|
});
|
|
|
|
export const RequestBodyText = <const Schema extends S.Schema<any, string, unknown>>(schema: Schema): RequestBodyText<Schema> => Object.freeze<RequestBodyText<Schema>>({
|
|
_tag: "Text",
|
|
schema,
|
|
});
|
|
|
|
export const RequestBodyJson = <const Schema extends S.Schema.Any>(schema: Schema): RequestBodyJson<Schema> => Object.freeze<RequestBodyJson<Schema>>({
|
|
_tag: "Json",
|
|
schema,
|
|
});
|
|
|
|
export const RequestBodyUrlEncoded = <const Fields extends { readonly [_: string]: Field.AnyUrlEncoded }>(fields: Fields): RequestBodyUrlEncoded<Fields> => Object.freeze<RequestBodyUrlEncoded<Fields>>({
|
|
_tag: "UrlEncoded",
|
|
fields,
|
|
});
|
|
|
|
export const RequestBodyMultipart = <const Fields extends { readonly [_: string]: Field.Any }>(fields: Fields): RequestBodyMultipart<Fields> => Object.freeze<RequestBodyMultipart<Fields>>({
|
|
_tag: "Multipart",
|
|
fields,
|
|
});
|
|
|
|
export const RequestBodyFile = <const MimeType extends string>(mimeType: MimeTypePredicate<MimeType>): RequestBodyFile<MimeType> => Object.freeze<RequestBodyFile<MimeType>>({
|
|
_tag: "File",
|
|
mimeType,
|
|
});
|