Add make-api package
This commit is contained in:
96
packages/make-api/src/RequestBody.ts
Normal file
96
packages/make-api/src/RequestBody.ts
Normal file
@@ -0,0 +1,96 @@
|
||||
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>> {
|
||||
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>>;
|
||||
}
|
||||
|
||||
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>>(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,
|
||||
});
|
||||
Reference in New Issue
Block a user