{"version":3,"file":"HttpRequest.cjs","sources":["../../src/HttpRequest.ts"],"sourcesContent":["import type { GenericAbortSignal } from './GenericAbortSignal';\nimport type { HttpHeaderValue, HttpRequestHeaders } from './HttpHeaders';\n\n/** Defines a number in milliseconds. */\ntype Milliseconds = number;\n\n/**\n * Defines a HTTP Request with custom data.\n * @category Http\n */\nexport type HttpRequest<D = any> = {\n  method: HttpMethod;\n  url: string;\n  data: D;\n  headers: HttpRequestHeaders;\n  maxRedirects?: number;\n  timeout?: Milliseconds;\n  signal?: GenericAbortSignal;\n};\n\n/**\n * Creates a new {@link HttpRequestBuilder} instance.\n * @category Http\n */\nexport const request = () =>\n  new HttpRequestBuilder<undefined>({\n    method: 'get',\n    data: undefined,\n    headers: {},\n    url: '',\n  });\n\n/**\n * A builder for constructing {@link HttpRequest} instances.\n * @category Http\n */\nexport class HttpRequestBuilder<D> implements HttpRequest<D> {\n  protected readonly request: HttpRequest<D>;\n\n  constructor(request: HttpRequest<D>) {\n    this.request = request;\n  }\n\n  asJson() {\n    return this.contentType('application/json');\n  }\n\n  asMultipart() {\n    return this.contentType('multipart/form-data');\n  }\n\n  asForm() {\n    return this.contentType('application/x-www-form-urlencoded');\n  }\n\n  accept(contentType: string) {\n    return this.withHeader('accept', contentType);\n  }\n\n  contentType(contentType: string) {\n    return this.withHeader('content-type', contentType);\n  }\n\n  userAgent(userAgent: string) {\n    return this.withHeader('user-agent', userAgent);\n  }\n\n  withToken(token: string, type: string = 'Bearer') {\n    return this.withHeader('authorization', `${type} ${token}`);\n  }\n\n  withHeader(key: string, value: HttpHeaderValue) {\n    return this.withHeaders({ [key]: value });\n  }\n\n  withHeaders(headers: HttpRequestHeaders) {\n    return new HttpRequestBuilder<D>({\n      ...this.request,\n      headers: { ...this.request.headers, ...headers },\n    });\n  }\n\n  dontFollowRedirects() {\n    return this.followRedirects(0);\n  }\n\n  followRedirects(maxRedirects?: number) {\n    return new HttpRequestBuilder<D>({ ...this.request, maxRedirects });\n  }\n\n  withoutTimeout() {\n    return this.withTimeout(0);\n  }\n\n  withTimeout(timeout?: Milliseconds) {\n    return new HttpRequestBuilder<D>({ ...this.request, timeout });\n  }\n\n  withAbortSignal(signal?: GenericAbortSignal) {\n    return new HttpRequestBuilder<D>({ ...this.request, signal });\n  }\n\n  withEndpoint(method: HttpMethod, url: string) {\n    return new HttpRequestBuilder<D>({ ...this.request, method, url });\n  }\n\n  withParams(\n    params: string | URLSearchParams | string[][] | Record<string, string>\n  ) {\n    const url = new URL(this.request.url);\n    const newSearch = new URLSearchParams(params);\n    const search = new URLSearchParams(url.searchParams);\n    [...newSearch.entries()].forEach(([key, val]) => {\n      search.append(key, val);\n    });\n    url.search = search.toString();\n    return new HttpRequestBuilder<D>({ ...this.request, url: url.toString() });\n  }\n\n  withData<T>(data: T) {\n    return new HttpRequestBuilder<T>({ ...this.request, data });\n  }\n\n  get(url: string) {\n    return this.withEndpoint('get', url);\n  }\n\n  post(url: string) {\n    return this.withEndpoint('post', url);\n  }\n\n  put(url: string) {\n    return this.withEndpoint('put', url);\n  }\n\n  patch(url: string) {\n    return this.withEndpoint('patch', url);\n  }\n\n  delete(url: string) {\n    return this.withEndpoint('delete', url);\n  }\n\n  get method(): HttpMethod {\n    return this.request.method;\n  }\n\n  get url(): string {\n    return this.request.url;\n  }\n\n  get data(): D {\n    return this.request.data;\n  }\n\n  get headers(): HttpRequestHeaders {\n    return this.request.headers;\n  }\n\n  get maxRedirects(): number | undefined {\n    return this.request.maxRedirects;\n  }\n\n  get timeout(): Milliseconds | undefined {\n    return this.request.timeout;\n  }\n\n  get signal(): GenericAbortSignal | undefined {\n    return this.request.signal;\n  }\n}\n\n/**\n * Defines a HTTP method as a string.\n * @category Http\n */\nexport type HttpMethod =\n  | 'get'\n  | 'GET'\n  | 'delete'\n  | 'DELETE'\n  | 'head'\n  | 'HEAD'\n  | 'options'\n  | 'OPTIONS'\n  | 'post'\n  | 'POST'\n  | 'put'\n  | 'PUT'\n  | 'patch'\n  | 'PATCH'\n  | 'purge'\n  | 'PURGE'\n  | 'link'\n  | 'LINK'\n  | 'unlink'\n  | 'UNLINK';\n"],"names":["request","HttpRequestBuilder","method","data","undefined","headers","url","constructor","asJson","contentType","asMultipart","asForm","accept","withHeader","userAgent","withToken","token","type","key","value","withHeaders","dontFollowRedirects","followRedirects","maxRedirects","withoutTimeout","withTimeout","timeout","withAbortSignal","signal","withEndpoint","withParams","params","URL","newSearch","URLSearchParams","search","searchParams","entries","forEach","val","append","toString","withData","get","post","put","patch","delete"],"mappings":"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"}