{"version":3,"file":"adaskothebeast-angular-typed-http-client.mjs","sources":["../../../../libs/angular-typed-http-client/src/lib/tokens.ts","../../../../libs/angular-typed-http-client/src/lib/class-transformer-http.interceptor.ts","../../../../libs/angular-typed-http-client/src/lib/serialize-token.ts","../../../../libs/angular-typed-http-client/src/lib/class-transformer-serialize.interceptor.ts","../../../../libs/angular-typed-http-client/src/lib/provide-typed-http-client.ts","../../../../libs/angular-typed-http-client/src/lib/typed-http-client.ts","../../../../libs/angular-typed-http-client/src/lib/typed-http-client.module.ts","../../../../libs/angular-typed-http-client/src/adaskothebeast-angular-typed-http-client.ts"],"sourcesContent":["import { HttpContextToken } from '@angular/common/http';\n\nexport type Ctor<T> = new (...args: unknown[]) => T;\n\n/** Carries the target class type across request clones. */\nexport const RESPONSE_TYPE_CLASS = new HttpContextToken<Ctor<unknown> | null>(\n  () => null,\n);\n","import {\n  HttpEvent,\n  HttpHandler,\n  HttpInterceptor,\n  HttpRequest,\n  HttpResponse,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { plainToInstance } from 'class-transformer';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { RESPONSE_TYPE_CLASS } from './tokens';\n\n@Injectable()\nexport class ClassTransformerHttpInterceptor implements HttpInterceptor {\n  intercept(\n    req: HttpRequest<unknown>,\n    next: HttpHandler,\n  ): Observable<HttpEvent<unknown>> {\n    const ctor = req.context.get(RESPONSE_TYPE_CLASS);\n\n    return next.handle(req).pipe(\n      map((event) => {\n        if (!(event instanceof HttpResponse)) {\n          return event;\n        }\n\n        if (!ctor || event.body == null) {\n          return event;\n        }\n\n        const transformed = plainToInstance(ctor, event.body);\n        return event.clone({ body: transformed });\n      }),\n    );\n  }\n}\n","import { HttpContextToken } from '@angular/common/http';\nimport type { ClassTransformOptions } from 'class-transformer';\n\n/**\n * When set to truthy, request bodies will be serialized with instanceToPlain.\n * - true  -> use default class-transformer options\n * - object -> use provided ClassTransformOptions\n * - false (default) -> no serialization\n */\nexport const SERIALIZE_REQUEST = new HttpContextToken<\n  false | true | ClassTransformOptions\n>(() => false);\n","import {\n  HttpEvent,\n  HttpHandler,\n  HttpHeaders,\n  HttpInterceptor,\n  HttpRequest,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ClassTransformOptions, instanceToPlain } from 'class-transformer';\nimport { Observable } from 'rxjs';\n\nimport { SERIALIZE_REQUEST } from './serialize-token';\n\nfunction isNativeBody(b: unknown): boolean {\n  return (\n    b == null ||\n    b instanceof FormData ||\n    b instanceof Blob ||\n    b instanceof ArrayBuffer ||\n    b instanceof URLSearchParams ||\n    (typeof ReadableStream !== 'undefined' && b instanceof ReadableStream)\n  );\n}\n\nfunction ensureJson(headers: HttpHeaders): HttpHeaders {\n  if (headers.has('Content-Type')) return headers;\n  return headers.set('Content-Type', 'application/json; charset=utf-8');\n}\n\n@Injectable()\nexport class ClassTransformerSerializeInterceptor implements HttpInterceptor {\n  intercept(\n    req: HttpRequest<unknown>,\n    next: HttpHandler,\n  ): Observable<HttpEvent<unknown>> {\n    const opt = req.context.get(SERIALIZE_REQUEST);\n    if (!opt || req.method === 'GET' || isNativeBody(req.body)) {\n      return next.handle(req);\n    }\n\n    const options: ClassTransformOptions | undefined =\n      opt === true ? undefined : opt;\n    const plain = instanceToPlain(req.body, options);\n\n    return next.handle(\n      req.clone({\n        body: plain,\n        headers: ensureJson(req.headers),\n      }),\n    );\n  }\n}\n","import {\n  HTTP_INTERCEPTORS,\n  provideHttpClient,\n  withInterceptorsFromDi,\n  withXhr\n} from '@angular/common/http';\nimport { EnvironmentProviders, Provider } from '@angular/core';\n\nimport { ClassTransformerHttpInterceptor } from './class-transformer-http.interceptor';\nimport { ClassTransformerSerializeInterceptor } from './class-transformer-serialize.interceptor';\n\nexport function provideTypedHttpClient(): (Provider | EnvironmentProviders)[] {\n  return [\n    provideHttpClient(withXhr(), withInterceptorsFromDi()),\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: ClassTransformerSerializeInterceptor,\n      multi: true,\n    },\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: ClassTransformerHttpInterceptor,\n      multi: true,\n    },\n  ];\n}\n","import {\n  HttpClient,\n  HttpContext,\n  HttpHeaders,\n  HttpParams,\n  HttpResponse,\n} from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { ClassTransformOptions } from 'class-transformer/types/interfaces/class-transformer-options.interface';\nimport { Observable, filter, map } from 'rxjs';\n\nimport { SERIALIZE_REQUEST } from './serialize-token';\nimport { Ctor, RESPONSE_TYPE_CLASS } from './tokens';\n\ntype HeaderInit = HttpHeaders | { [header: string]: string | string[] };\ntype ParamInit =\n  | HttpParams\n  | {\n      [param: string]:\n        | string\n        | number\n        | boolean\n        | ReadonlyArray<string | number | boolean>;\n    };\n\nexport type RequestOptions = {\n  headers?: HeaderInit;\n  params?: ParamInit;\n  context?: HttpContext;\n  withCredentials?: boolean;\n  reportProgress?: boolean;\n  responseType?: 'json';\n  serialize?: boolean | ClassTransformOptions;\n};\n\nconst isHttpResponse = <K>(e: unknown): e is HttpResponse<K> =>\n  e instanceof HttpResponse;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TypedHttpClient {\n  private readonly httpClient: HttpClient = inject(HttpClient);\n\n  getResponse<K>(\n    url: string,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<HttpResponse<K>> {\n    return this.requestResponse<K>('GET', url, undefined, ctor, options);\n  }\n\n  postResponse<T, K>(\n    url: string,\n    body: T,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<HttpResponse<K>> {\n    return this.requestResponse<K>('POST', url, body, ctor, options);\n  }\n\n  putResponse<T, K>(\n    url: string,\n    body: T,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<HttpResponse<K>> {\n    return this.requestResponse<K>('PUT', url, body, ctor, options);\n  }\n\n  patchResponse<T, K>(\n    url: string,\n    body: T,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<HttpResponse<K>> {\n    return this.requestResponse<K>('PATCH', url, body, ctor, options);\n  }\n\n  deleteResponse<K>(\n    url: string,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<HttpResponse<K>> {\n    return this.requestResponse<K>('DELETE', url, undefined, ctor, options);\n  }\n\n  // -------------------\n  // Existing body-only methods (now built on top of *Response)\n  // -------------------\n  get<K>(\n    url: string,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<K> {\n    return this.getResponse<K>(url, ctor, options).pipe(\n      map((r) => r.body as K),\n    );\n  }\n\n  post<T, K>(\n    url: string,\n    body: T,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<K> {\n    return this.postResponse<T, K>(url, body, ctor, options).pipe(\n      map((r) => r.body as K),\n    );\n  }\n\n  put<T, K>(\n    url: string,\n    body: T,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<K> {\n    return this.putResponse<T, K>(url, body, ctor, options).pipe(\n      map((r) => r.body as K),\n    );\n  }\n\n  patch<T, K>(\n    url: string,\n    body: T,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<K> {\n    return this.patchResponse<T, K>(url, body, ctor, options).pipe(\n      map((r) => r.body as K),\n    );\n  }\n\n  delete<K>(\n    url: string,\n    ctor: Ctor<K>,\n    options: RequestOptions = {},\n  ): Observable<K> {\n    return this.deleteResponse<K>(url, ctor, options).pipe(\n      map((r) => r.body as K),\n    );\n  }\n\n  private requestResponse<K>(\n    method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n    url: string,\n    body: unknown | undefined,\n    ctor: Ctor<K>,\n    options: RequestOptions,\n  ): Observable<HttpResponse<K>> {\n    const context = (options.context ?? new HttpContext())\n      .set(RESPONSE_TYPE_CLASS, ctor)\n      .set(SERIALIZE_REQUEST, options.serialize ?? true);\n\n    return this.httpClient\n      .request<K>(method, url, {\n        ...options,\n        body,\n        context,\n        observe: 'response',\n      })\n      .pipe(filter(isHttpResponse<K>));\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  HTTP_INTERCEPTORS,\n  provideHttpClient,\n  withInterceptorsFromDi,\n  withXhr\n} from '@angular/common/http';\nimport { NgModule } from '@angular/core';\n\nimport { ClassTransformerHttpInterceptor } from './class-transformer-http.interceptor';\nimport { ClassTransformerSerializeInterceptor } from './class-transformer-serialize.interceptor';\n\n@NgModule({\n  imports: [CommonModule],\n  providers: [\n    provideHttpClient(withXhr(), withInterceptorsFromDi()),\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: ClassTransformerSerializeInterceptor,\n      multi: true,\n    },\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: ClassTransformerHttpInterceptor,\n      multi: true,\n    },\n  ],\n})\nexport class TypedHttpClientModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}