{"version":3,"file":"berry-cloud-ngx-unsplash.mjs","sources":["../../../projects/ngx-unsplash/src/lib/pipes/blurhash.pipe.ts","../../../projects/ngx-unsplash/src/lib/unsplash.module.ts","../../../projects/ngx-unsplash/src/lib/unsplash.service.ts","../../../projects/ngx-unsplash/src/public-api.ts","../../../projects/ngx-unsplash/src/berry-cloud-ngx-unsplash.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { decode } from 'blurhash';\nimport { Observable } from 'rxjs';\nimport { Photo } from '../model/photo';\n\n@Pipe({\n  name: 'blurhash',\n})\nexport class BlurHashPipe implements PipeTransform {\n  /**\n   * [BlurHash placeholder](https://unsplash.com/documentation#blurhash-placeholders).\n   *\n   * Returns a URL of the BlurHash preview and then the URL of photo once the\n   * photo been downloaded by the browser.\n   *\n   * @param photo to download\n   * @param size to be returned, the default is thumb\n   * @returns Observable of URL\n   */\n  transform(\n    photo: Photo,\n    size: 'raw' | 'full' | 'regular' | 'small' | 'thumb' = 'thumb'\n  ): Observable<string> {\n    return new Observable<string>((observer) => {\n      // Send URL of blur hash image\n      observer.next(this.getImageFromBlurHash(photo).toDataURL());\n\n      const img = new Image();\n      img.src = photo.urls[size];\n      img.onload = () => {\n        // Send URL of loaded image\n        observer.next(img.src);\n        observer.complete();\n      };\n\n      img.onerror = (err) => observer.error(err);\n    });\n  }\n\n  private getImageFromBlurHash(photo: Photo): HTMLCanvasElement {\n    const canvas = document.createElement('canvas');\n\n    let width = photo.width || 240;\n    let r = width / 240;\n    canvas.width = width / r;\n    canvas.height = (photo.height || 180) / r;\n\n    try {\n      if (photo.blur_hash) {\n        const pixels = decode(photo.blur_hash, canvas.width, canvas.height);\n        const ctx = canvas.getContext('2d');\n        const imageData = ctx!.createImageData(canvas.width, canvas.height);\n        imageData.data.set(pixels);\n        ctx!.putImageData(imageData, 0, 0);\n      }\n    } catch { }\n    return canvas;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { BlurHashPipe } from './pipes/blurhash.pipe';\n\n@NgModule({\n  declarations: [BlurHashPipe],\n  imports: [],\n  exports: [BlurHashPipe],\n})\nexport class NgxUnsplashModule {}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\nimport { Collection } from './model/collection';\nimport { Download } from './model/download';\nimport { Photo } from './model/photo';\nimport { SearchResult } from './model/search-result';\nimport { UserStatistics } from './model/statistics';\nimport { Topic } from './model/topic';\nimport {\n  UnsplashColor,\n  UnsplashContentFilter,\n  UnsplashFeaturedOrderBy,\n  UnsplashOrderBy,\n  UnsplashOrientation,\n  UnsplashResolution,\n  UnsplashSearchOrderBy,\n} from './model/types';\nimport { User } from './model/user';\n\nexport interface UnsplashConfig {\n  url: string;\n  authorization: string;\n}\n\nexport const UNSPLASH_CONFIG = new InjectionToken<\n  UnsplashConfig | Observable<UnsplashConfig>\n>('unsplash.config');\n\n// prettier-ignore\nexport type Count =\n  |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10\n  | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20\n  | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class UnsplashService {\n  private readonly searchUrl = 'search/photos';\n  private readonly photosUrl = 'photos';\n  private readonly randomUrl = 'photos/random';\n  private readonly collectionsUrl = 'collections';\n  private readonly topicsUrl = 'topics';\n  private readonly usersUrl = 'users';\n\n  private config$: Observable<UnsplashConfig>;\n\n  constructor(\n    private http: HttpClient,\n    @Inject(UNSPLASH_CONFIG)\n    config: UnsplashConfig | Observable<UnsplashConfig>\n  ) {\n    const config$ = config instanceof Observable ? config : of(config);\n\n    this.config$ = config$.pipe(\n      tap((config) => {\n        if (!config) {\n          throw new Error('Unsplash configuration undefined');\n        }\n\n        if (!config.url) {\n          throw new Error('Unsplash configuration url undefined');\n        }\n\n        if (!config.authorization) {\n          throw new Error('Unsplash configuration authorization undefined');\n        }\n      })\n    );\n  }\n\n  /**\n   * [List photos](https://unsplash.com/documentation#list-photos).\n   *\n   * Get a single page from the list of all photos.\n   *\n   * @param options to be used when getting list of photos\n   *\n   * @returns Observable containing a {@link Photo} array\n   */\n  photos(options?: {\n    page?: number;\n    perPage?: number;\n    orderBy?: UnsplashOrderBy;\n  }): Observable<Photo[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        let params = new HttpParams();\n\n        if (options?.page) {\n          params = params.set('page', options.page.toString());\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options.perPage.toString());\n        }\n\n        if (options?.orderBy) {\n          params = params.set('order_by', options.orderBy);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(this.photosUrl, config);\n\n        return this.http.get<Photo[]>(url, { params, headers });\n      })\n    );\n  }\n\n  /**\n   * [List photos](https://unsplash.com/documentation#list-photos).\n   *\n   * Get a single page from the list of all photos.\n   *\n   * @param options to be used when getting list of photos\n   *\n   * @returns Observable containing a {@link Photo} array\n   *\n   * @deprecated Use {@link photos} instead\n   */\n  list(options?: {\n    page?: number;\n    perPage?: number;\n    orderBy?: UnsplashOrderBy;\n  }): Observable<Photo[]> {\n    return this.photos(options);\n  }\n\n  /**\n   * [Get a photo](https://unsplash.com/documentation#get-a-photo).\n   *\n   * Retrieve a single photo.\n   *\n   * @param id of the photo\n   *\n   * @returns  Observable containing the {@link Photo}\n   */\n  photo(id: string): Observable<Photo> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        const headers = this.unsplashHeaders(config);\n        const url = this.unsplashUrl(`${this.photosUrl}/${id}`, config);\n\n        return this.http.get<Photo>(url, { headers });\n      })\n    );\n  }\n\n  /**\n   * [Get a photo](https://unsplash.com/documentation#get-a-photo).\n   *\n   * Retrieve a single photo.\n   *\n   * @param id of the photo\n   *\n   * @returns  Observable containing the {@link Photo}\n   *\n   * @deprecated Use {@link photo} instead\n   */\n  get(id: string): Observable<Photo> {\n    return this.photo(id);\n  }\n\n  /**\n   * [Get random photos](https://unsplash.com/documentation#get-a-random-photo).\n   *\n   * Retrieve random photos.\n   *\n   * @param options to be used when getting random photos\n   *\n   * @returns Observable containing a {@link Photo} array\n   */\n  randomPhoto(options?: {\n    collections?: string;\n    topics?: string;\n    username?: string;\n    query?: string;\n    orientation?: UnsplashOrientation;\n    contentFilter?: UnsplashContentFilter;\n    count?: Count;\n  }): Observable<Photo[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        let params = new HttpParams();\n\n        if (options?.collections) {\n          params = params.set('collections', options?.collections);\n        }\n\n        if (options?.topics) {\n          params = params.set('topics', options?.topics);\n        }\n\n        if (options?.username) {\n          params = params.set('username', options?.username);\n        }\n\n        if (options?.query) {\n          params = params.set('query', options?.query);\n        }\n\n        if (options?.orientation) {\n          params = params.set('orientation', options?.orientation);\n        }\n\n        if (options?.contentFilter) {\n          params = params.set('content_filter', options?.contentFilter);\n        }\n\n        if (options?.count) {\n          params = params.set('count', options?.count);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(this.randomUrl, config);\n\n        return this.http.get<Photo[]>(url, { params, headers });\n      })\n    );\n  }\n\n  /**\n   * [Get random photos](https://unsplash.com/documentation#get-a-random-photo).\n   *\n   * Retrieve random photos.\n   *\n   * @param options to be used when getting random photos\n   *\n   * @returns Observable containing a {@link Photo} array\n   *\n   * @deprecated Use {@link randomPhoto} instead\n   */\n  random(options?: {\n    collections?: string;\n    topics?: string;\n    username?: string;\n    query?: string;\n    orientation?: UnsplashOrientation;\n    contentFilter?: UnsplashContentFilter;\n    count?: Count;\n  }): Observable<Photo[]> {\n    return this.randomPhoto(options);\n  }\n\n  /**\n   * [Search photos](https://unsplash.com/documentation#search-photos).\n   *\n   * Get a single page of photo results for a query.\n   *\n   * @param query to search for\n   * @param options to be used when searching photos\n   *\n   * @returns Observable containing a {@link SearchResult}\n   */\n  searchPhotos(\n    query: string,\n    options?: {\n      page?: number;\n      perPage?: number;\n      orderBy?: UnsplashSearchOrderBy;\n      collections?: string;\n      contentFilter?: UnsplashContentFilter;\n      color?: UnsplashColor;\n      orientation?: UnsplashOrientation;\n    }\n  ): Observable<SearchResult> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        let params = new HttpParams().set('query', query);\n\n        if (options?.page) {\n          params = params.set('page', options?.page);\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options?.perPage);\n        }\n\n        if (options?.orderBy) {\n          params = params.set('order_by', options?.orderBy);\n        }\n\n        if (options?.collections) {\n          params = params.set('collections', options?.collections);\n        }\n\n        if (options?.contentFilter) {\n          params = params.set('content_filter', options?.contentFilter);\n        }\n\n        if (options?.color) {\n          params = params.set('color', options?.color);\n        }\n\n        if (options?.orientation) {\n          params = params.set('orientation', options?.orientation);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(this.searchUrl, config);\n\n        return this.http.get<SearchResult>(url, { headers, params });\n      })\n    );\n  }\n\n  /**\n   * [Search photos](https://unsplash.com/documentation#search-photos).\n   *\n   * Get a single page of photo results for a query.\n   *\n   * @param query to search for\n   * @param options to be used when searching photos\n   *\n   * @returns Observable containing a {@link SearchResult}\n   *\n   * @deprecated Use {@link searchPhotos} instead\n   */\n  search(\n    query: string,\n    options?: {\n      page?: number;\n      perPage?: number;\n      orderBy?: UnsplashSearchOrderBy;\n      collections?: string;\n      contentFilter?: UnsplashContentFilter;\n      color?: UnsplashColor;\n      orientation?: UnsplashOrientation;\n    }\n  ): Observable<SearchResult> {\n    return this.searchPhotos(query, options);\n  }\n\n  /**\n   * [Trigger a download](https://help.unsplash.com/en/articles/2511258-guideline-triggering-a-download)\n   * of a photo.\n   *\n   * @param photo to download\n   *\n   * @returns Observable containing the {@link Download}\n   */\n  downloadPhoto(photo: Photo): Observable<Download> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        const headers = this.unsplashHeaders(config);\n\n        const photoUrl = new URL(photo.links.download_location);\n\n        // Remove the leading slash from the pathname and add the search\n        const url = this.unsplashUrl(\n          photoUrl.pathname.substring(1) + photoUrl.search,\n          config\n        );\n\n        return this.http.get<Download>(url, { headers });\n      })\n    );\n  }\n\n  /**\n   * [Trigger a download](https://help.unsplash.com/en/articles/2511258-guideline-triggering-a-download)\n   * of a photo.\n   *\n   * @param photo to download\n   *\n   * @returns Observable containing the {@link Download}\n   *\n   * @deprecated Use {@link downloadPhoto} instead\n   */\n  download(photo: Photo): Observable<Download> {\n    return this.downloadPhoto(photo);\n  }\n\n  /**\n   * [List collections](https://unsplash.com/documentation#list-collections).\n   * Retrieve a list of collections.\n   *\n   * @param options to be used when getting collections\n   *\n   * @returns Observable containing a {@link Collection} array\n   *\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  collections(options?: {\n    page?: number;\n    perPage?: number;\n  }): Observable<Collection[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        let params = new HttpParams();\n\n        if (options?.page) {\n          params = params.set('page', options?.page);\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options?.perPage);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(this.collectionsUrl, config);\n\n        return this.http.get<Collection[]>(url, { headers, params });\n      })\n    );\n  }\n\n  /**\n   * [Get a collection](https://unsplash.com/documentation#get-a-collection).\n   * Retrieve a single collection.\n   *\n   * @param id of the collection to retrieve\n   *\n   * @returns Observable containing a {@link Collection}\n   *\n   * @throws Error if the collection id is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  collection(id: string): Observable<Collection> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!id) {\n          throw new Error('Collection id undefined');\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(`${this.collectionsUrl}/${id}`, config);\n\n        return this.http.get<Collection>(url, { headers });\n      })\n    );\n  }\n\n  /**\n   * [Get a collection's photos](https://unsplash.com/documentation#get-a-collections-photos).\n   * Retrieve a list of photos in a collection.\n   *\n   * @param id of the collection to retrieve photos from\n   * @param options to be used when getting photos from a collection\n   *\n   * @returns Observable containing a {@link Photo} array\n   *\n   * @throws Error if the collection id is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  collectionPhotos(\n    id: string,\n    options?: {\n      page?: number;\n      perPage?: number;\n      orientation?: UnsplashOrientation;\n    }\n  ): Observable<Photo[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!id) {\n          throw new Error('Collection id undefined');\n        }\n\n        let params = new HttpParams();\n\n        if (options?.page) {\n          params = params.set('page', options?.page);\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options?.perPage);\n        }\n\n        if (options?.orientation) {\n          params = params.set('orientation', options?.orientation);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(\n          `${this.collectionsUrl}/${id}/photos`,\n          config\n        );\n\n        return this.http.get<Photo[]>(url, { headers, params });\n      })\n    );\n  }\n\n  /**\n   * [List related collections](https://unsplash.com/documentation#list-a-collections-related-collections).\n   * Retrieve a list of collections related to a particular one.\n   *\n   * @param id of the collection to retrieve related collections from\n   *\n   * @returns Observable containing a {@link Collection} array\n   *\n   * @throws Error if the collection id is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  relatedCollections(id: string): Observable<Collection[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!id) {\n          throw new Error('Collection id undefined');\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(\n          `${this.collectionsUrl}/${id}/related`,\n          config\n        );\n\n        return this.http.get<Collection[]>(url, { headers });\n      })\n    );\n  }\n\n  /**\n   * [List topics](https://unsplash.com/documentation#list-topics).\n   * Retrieve a list of topics.\n   *\n   * @param options to be used when getting topics\n   *\n   * @returns Observable containing a {@link Topic} array\n   */\n  topics(options?: {\n    ids?: string[];\n    page?: number;\n    perPage?: number;\n    orderBy?: UnsplashFeaturedOrderBy;\n  }): Observable<Topic[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        let params = new HttpParams();\n\n        if (options?.ids) {\n          params = params.set('ids', options?.ids.join(','));\n        }\n\n        if (options?.page) {\n          params = params.set('page', options?.page);\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options?.perPage);\n        }\n\n        if (options?.orderBy) {\n          params = params.set('order_by', options?.orderBy);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(this.topicsUrl, config);\n\n        return this.http.get<Topic[]>(url, { headers, params });\n      })\n    );\n  }\n\n  /**\n   * [Get a topic](https://unsplash.com/documentation#get-a-topic).\n   * Retrieve a single topic.\n   *\n   * @param id of the topic to retrieve\n   *\n   * @returns Observable containing a {@link Topic}\n   *\n   * @throws Error if the topic id is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  topic(id: string): Observable<Topic> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!id) {\n          throw new Error('Topic id undefined');\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(`${this.topicsUrl}/${id}`, config);\n\n        return this.http.get<Topic>(url, { headers });\n      })\n    );\n  }\n\n  /**\n   * [Get a topic's photos](https://unsplash.com/documentation#get-a-topics-photos).\n   * Retrieve a list of photos in a topic.\n   *\n   * @param id of the topic to retrieve photos from\n   * @param options to be used when getting photos from a topic\n   *\n   * @returns Observable containing a {@link Photo} array\n   *\n   * @throws Error if the topic id is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  topicPhotos(\n    id: string,\n    options?: {\n      page?: number;\n      perPage?: number;\n      orientation?: UnsplashOrientation;\n      orderBy?: UnsplashOrderBy;\n    }\n  ): Observable<Photo[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!id) {\n          throw new Error('Topic id undefined');\n        }\n\n        let params = new HttpParams();\n\n        if (options?.page) {\n          params = params.set('page', options?.page);\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options?.perPage);\n        }\n\n        if (options?.orientation) {\n          params = params.set('orientation', options?.orientation);\n        }\n\n        if (options?.orderBy) {\n          params = params.set('order_by', options?.orderBy);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(`${this.topicsUrl}/${id}/photos`, config);\n\n        return this.http.get<Photo[]>(url, { headers, params });\n      })\n    );\n  }\n\n  /**\n   * [Get a user](https://unsplash.com/documentation#get-a-user).\n   * Retrieve public details on a given user.\n   *\n   * @param username of the user to retrieve\n   *\n   * @returns Observable containing a {@link User}\n   *\n   * @throws Error if the user username is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  user(username: string): Observable<User> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!username) {\n          throw new Error('User username undefined');\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(`${this.usersUrl}/${username}`, config);\n\n        return this.http.get<User>(url, { headers });\n      })\n    );\n  }\n\n  /**\n   * [Get a user's portfolio link](https://unsplash.com/documentation#get-a-users-portfolio-link).\n   * Retrieve a single user’s portfolio link.\n   *\n   * @param username of the user to retrieve portfolio link from\n   *\n   * @returns Observable containing a {@link User}\n   *\n   * @throws Error if the user username is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  userPortfolio(username: string): Observable<string | undefined> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!username) {\n          throw new Error('User username undefined');\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(\n          `${this.usersUrl}/${username}/portfolio`,\n          config\n        );\n\n        return this.http.get<{ url: string }>(url, { headers });\n      }),\n      map((response) => response.url)\n    );\n  }\n\n  /**\n   * [List a user’s photos](https://unsplash.com/documentation#list-a-users-photos).\n   * Retrieve a list of photos uploaded by a user.\n   *\n   * @param username of the user to retrieve photos from\n   * @param options to be used when getting photos from a user\n   *\n   * @returns Observable containing a {@link Photo} array\n   *\n   * @throws Error if the user username is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  userPhotos(\n    username: string,\n    options?: {\n      page?: number;\n      perPage?: number;\n      orderBy?: UnsplashOrderBy;\n      stats?: boolean;\n      resolution?: UnsplashResolution;\n      quantity?: number;\n      orientation?: UnsplashOrientation;\n    }\n  ): Observable<Photo[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!username) {\n          throw new Error('User username undefined');\n        }\n\n        let params = new HttpParams();\n\n        if (options?.page) {\n          params = params.set('page', options?.page);\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options?.perPage);\n        }\n\n        if (options?.orderBy) {\n          params = params.set('order_by', options?.orderBy);\n        }\n\n        if (options?.stats) {\n          params = params.set('stats', options?.stats);\n        }\n\n        if (options?.resolution) {\n          params = params.set('resolution', options?.resolution);\n        }\n\n        if (options?.quantity) {\n          params = params.set('quantity', options?.quantity);\n        }\n\n        if (options?.orientation) {\n          params = params.set('orientation', options?.orientation);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(\n          `${this.usersUrl}/${username}/photos`,\n          config\n        );\n\n        return this.http.get<Photo[]>(url, { headers, params });\n      })\n    );\n  }\n\n  /**\n   * [List a user’s liked photos](https://unsplash.com/documentation#list-a-users-liked-photos).\n   * Retrieve a list of photos liked by a user.\n   *\n   * @param username of the user to retrieve liked photos from\n   * @param options to be used when getting liked photos from a user\n   *\n   * @returns Observable containing a {@link Photo} array\n   *\n   * @throws Error if the user username is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  userLikes(\n    username: string,\n    options?: {\n      page?: number;\n      perPage?: number;\n      orderBy?: UnsplashOrderBy;\n    }\n  ): Observable<Photo[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!username) {\n          throw new Error('User username undefined');\n        }\n\n        let params = new HttpParams();\n\n        if (options?.page) {\n          params = params.set('page', options?.page);\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options?.perPage);\n        }\n\n        if (options?.orderBy) {\n          params = params.set('order_by', options?.orderBy);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(\n          `${this.usersUrl}/${username}/likes`,\n          config\n        );\n\n        return this.http.get<Photo[]>(url, { headers, params });\n      })\n    );\n  }\n\n  /**\n   * [List a user’s collections](https://unsplash.com/documentation#list-a-users-collections).\n   * Retrieve a list of collections created by the user.\n   *\n   * @param username of the user to retrieve collections from\n   * @param options to be used when getting collections from a user\n   *\n   * @returns Observable containing a {@link Collection} array\n   *\n   * @throws Error if the user username is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  userCollections(\n    username: string,\n    options?: {\n      page?: number;\n      perPage?: number;\n      orderBy?: UnsplashOrderBy;\n    }\n  ): Observable<Collection[]> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!username) {\n          throw new Error('User username undefined');\n        }\n\n        let params = new HttpParams();\n\n        if (options?.page) {\n          params = params.set('page', options?.page);\n        }\n\n        if (options?.perPage) {\n          params = params.set('per_page', options?.perPage);\n        }\n\n        if (options?.orderBy) {\n          params = params.set('order_by', options?.orderBy);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(\n          `${this.usersUrl}/${username}/collections`,\n          config\n        );\n\n        return this.http.get<Collection[]>(url, { headers, params });\n      })\n    );\n  }\n\n  /**\n   * [Get a user’s statistics](https://unsplash.com/documentation#get-a-users-statistics).\n   * Retrieve total number of downloads, views and likes of all user’s photos, as well as the historical breakdown and average of these stats in a specific time frame (default is 30 days).\n   *\n   * @param username of the user to retrieve statistics from\n   * @param options to be used when getting statistics from a user\n   *\n   * @returns Observable containing a {@link UserStatistics} object\n   *\n   * @throws Error if the user username is not provided\n   * @throws Error if the Unsplash configuration is not provided\n   */\n  userStatistics(\n    username: string,\n    options?: {\n      resolution?: UnsplashResolution;\n      quantity?: number;\n    }\n  ): Observable<UserStatistics> {\n    return this.config$.pipe(\n      mergeMap((config) => {\n        if (!username) {\n          throw new Error('User username undefined');\n        }\n\n        let params = new HttpParams();\n\n        if (options?.resolution) {\n          params = params.set('resolution', options?.resolution);\n        }\n\n        if (options?.quantity) {\n          params = params.set('quantity', options?.quantity);\n        }\n\n        const headers = this.unsplashHeaders(config);\n\n        const url = this.unsplashUrl(\n          `${this.usersUrl}/${username}/statistics`,\n          config\n        );\n\n        return this.http.get<UserStatistics>(url, { headers, params });\n      })\n    );\n  }\n\n  private unsplashUrl(url: string, config: UnsplashConfig): string {\n    return new URL(\n      url,\n      config.url.endsWith('/') ? config.url : config.url + '/'\n    ).toString();\n  }\n\n  private unsplashHeaders(config: UnsplashConfig): HttpHeaders {\n    return new HttpHeaders().set('authorization', config.authorization);\n  }\n}\n","/*\n * Public API Surface of ngx-unsplash\n */\n\nexport * from './lib/model/collection';\nexport * from './lib/model/download';\nexport * from './lib/model/photo';\nexport * from './lib/model/search-result';\nexport * from './lib/model/statistics';\nexport * from './lib/model/topic';\nexport * from './lib/model/types';\nexport * from './lib/model/user';\nexport * from './lib/pipes/blurhash.pipe';\nexport * from './lib/unsplash.module';\nexport * from './lib/unsplash.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}