{"version":3,"file":"index.cjs","sources":["../../../../../src/mods/requests/index.ts"],"sourcesContent":["export interface RequestLike extends RequestInit {\n  url: string\n  destination: RequestDestination\n}\n\nexport interface EmptyRequestInit extends Omit<RequestInit, \"body\"> {\n  /**\n   * Empty\n   */\n}\n\nexport namespace EmptyRequest {\n\n  /**\n   * Hack to only allow EmptyRequest or Request-like but not any other variant\n   */\n  export interface From extends RequestLike {\n    bodyAsText?: undefined\n    bodyAsJson?: undefined\n  }\n\n}\n\nexport class EmptyRequest extends Request {\n\n  #headers: Record<string, string> = {}\n\n  constructor(input: RequestInfo, init?: EmptyRequestInit) {\n    super(input, init)\n\n    this.headers.forEach((value, key) => this.#headers[key] = value)\n\n    return\n  }\n\n  static async from(from: EmptyRequest.From): Promise<EmptyRequest> {\n    if (from instanceof EmptyRequest)\n      return from\n\n    const request = new Request(from.url, from)\n\n    return new EmptyRequest(request)\n  }\n\n  get headersAsJson(): Record<string, string> {\n    return this.#headers\n  }\n\n  toJSON(): RequestLike {\n    return {\n      url: this.url,\n      method: this.method,\n      headers: this.headersAsJson,\n      keepalive: this.keepalive,\n      cache: this.cache,\n      credentials: this.credentials,\n      destination: this.destination,\n      integrity: this.integrity,\n      mode: this.mode,\n      redirect: this.redirect,\n      referrerPolicy: this.referrerPolicy\n    } as const\n  }\n\n}\n\nexport interface TextRequestInit extends Omit<RequestInit, \"body\"> {\n  body: string\n}\n\nexport namespace TextRequest {\n\n  /**\n   * Hack to only allow TextRequest or Request-like but not any other variant\n   */\n  export interface From extends RequestLike {\n    bodyAsText?: string\n    bodyAsJson?: undefined\n  }\n\n}\n\nexport class TextRequest extends Request {\n\n  #headers: Record<string, string> = {}\n\n  #bodyAsText: string\n\n  constructor(input: RequestInfo, init: TextRequestInit) {\n    super(input, init)\n\n    this.headers.forEach((value, key) => this.#headers[key] = value)\n\n    this.#bodyAsText = init.body\n  }\n\n  static async from(from: TextRequest.From): Promise<TextRequest> {\n    if (from instanceof TextRequest)\n      return from\n\n    const request = new Request(from.url, from)\n\n    const body = await request.text()\n\n    return new TextRequest(request, { body })\n  }\n\n  get headersAsJson(): Record<string, string> {\n    return this.#headers\n  }\n\n  get bodyAsText(): string {\n    return this.#bodyAsText\n  }\n\n  toJSON(): RequestLike {\n    return {\n      url: this.url,\n      method: this.method,\n      headers: this.headersAsJson,\n      body: this.bodyAsText,\n      keepalive: this.keepalive,\n      cache: this.cache,\n      credentials: this.credentials,\n      destination: this.destination,\n      integrity: this.integrity,\n      mode: this.mode,\n      redirect: this.redirect,\n      referrerPolicy: this.referrerPolicy,\n    } as const\n  }\n\n}\n\nexport interface JsonRequestInit<T> extends Omit<RequestInit, \"body\"> {\n  body: T\n}\n\nexport namespace JsonRequest {\n\n  /**\n   * Hack to only allow JsonRequest<T> or Request-like but not any other variant\n   */\n  export interface From<T> extends RequestLike {\n    bodyAsText?: string\n    bodyAsJson?: T\n  }\n\n}\n\nexport class JsonRequest<T> extends Request {\n\n  #headers: Record<string, string> = {}\n\n  #bodyAsJson: T\n  #bodyAsText: string\n\n  constructor(input: RequestInfo, init: JsonRequestInit<T>) {\n    const body = JSON.stringify(init.body)\n\n    super(input, { ...init, body })\n\n    if (!this.headers.get(\"Content-Type\")?.includes(\"application/json\"))\n      this.headers.set(\"Content-Type\", \"application/json\")\n\n    this.headers.forEach((value, key) => this.#headers[key] = value)\n\n    this.#bodyAsJson = init.body\n    this.#bodyAsText = body\n  }\n\n  static async from<T>(from: JsonRequest.From<T>): Promise<JsonRequest<T>> {\n    if (from instanceof JsonRequest)\n      return from\n\n    const request = new Request(from.url, from)\n\n    const body = await request.json() as T\n\n    return new JsonRequest<T>(request, { body })\n  }\n\n  get headersAsJson(): Record<string, string> {\n    return this.#headers\n  }\n\n  get bodyAsJson(): T {\n    return this.#bodyAsJson\n  }\n\n  get bodyAsText(): string {\n    return this.#bodyAsText\n  }\n\n  toJSON(): RequestLike {\n    return {\n      url: this.url,\n      method: this.method,\n      headers: this.headersAsJson,\n      body: this.bodyAsText,\n      keepalive: this.keepalive,\n      cache: this.cache,\n      credentials: this.credentials,\n      destination: this.destination,\n      integrity: this.integrity,\n      mode: this.mode,\n      redirect: this.redirect,\n      referrerPolicy: this.referrerPolicy\n    } as const\n  }\n\n}"],"names":[],"mappings":"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"}